Ticket watchers can now be add and deleted

This commit is contained in:
johnnyq 2023-08-03 18:03:39 -04:00
parent 76b0954d25
commit dd46c5bcab
7 changed files with 65 additions and 91 deletions

View File

@ -201,3 +201,6 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
require_once("ticket_add_modal.php");
require_once("client_ticket_export_modal.php");
require_once("footer.php");
?>
<script src="js/ticket_add_remove_watchers.js"></script>

View File

@ -0,0 +1,40 @@
function addWatcher(button) {
var container = button.previousElementSibling;
var textFieldWrapper = document.createElement("div");
textFieldWrapper.className = "input-group mb-3";
var prependWrapper = document.createElement("div");
prependWrapper.className = "input-group-prepend";
var iconSpan = document.createElement("span");
iconSpan.className = "input-group-text";
iconSpan.innerHTML = "<i class='fas fa-fw fa-envelope'></i>";
prependWrapper.appendChild(iconSpan);
var textField = document.createElement("input");
textField.type = "email";
textField.className = "form-control";
textField.name = "watchers[]";
var removeButtonWrapper = document.createElement("div");
removeButtonWrapper.className = "input-group-append";
var removeButton = document.createElement("button");
removeButton.className = "btn btn-danger";
removeButton.type = "button";
removeButton.innerHTML = "<i class='fas fa-fw fa-minus'></i>";
removeButton.onclick = function() {
removeWatcher(this);
};
removeButtonWrapper.appendChild(removeButton);
textFieldWrapper.appendChild(prependWrapper);
textFieldWrapper.appendChild(textField);
textFieldWrapper.appendChild(removeButtonWrapper);
container.appendChild(textFieldWrapper);
}
function removeWatcher(button) {
var container = button.parentNode.parentNode.parentNode; // Navigate to the container
var textFieldWrapper = button.parentNode.parentNode;
container.removeChild(textFieldWrapper);
}

View File

@ -108,6 +108,19 @@ if (isset($_POST['edit_ticket'])) {
mysqli_query($mysqli,"UPDATE tickets SET ticket_subject = '$subject', ticket_priority = '$priority', ticket_details = '$details', ticket_vendor_ticket_number = '$vendor_ticket_number', ticket_assigned_to = $assigned_to, ticket_contact_id = $contact_id, ticket_vendor_id = $vendor_id, ticket_asset_id = $asset_id WHERE ticket_id = $ticket_id");
// Add Watchers
if (!empty($_POST['watchers'])) {
// Remove all watchers first
mysqli_query($mysqli,"DELETE FROM ticket_watchers WHERE watcher_ticket_id = $ticket_id");
//Add the Watchers
foreach($_POST['watchers'] as $watcher) {
$watcher_email = sanitizeInput($watcher);
mysqli_query($mysqli,"INSERT INTO ticket_watchers SET watcher_email = '$watcher_email', watcher_ticket_id = $ticket_id");
}
}
//Logging
mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Ticket', log_action = 'Modify', log_description = '$session_name modified ticket $ticket_number - $subject', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $ticket_id");

View File

@ -759,3 +759,4 @@ if ($ticket_status !== "Closed") { ?>
<script src="js/ticket_button_respond_note.js"></script>
<?php } ?>
<script src="js/ticket_add_remove_watchers.js"></script>

View File

@ -162,53 +162,10 @@
<div class="form-group">
<label>Watchers <span class="text-danger">Work in Progress</span></label>
<div id="text-fields"></div>
<button type="button" class="btn btn-primary" onclick="addTextField()"><i class="fas fa-fw fa-plus"></i> Add Watcher</button>
<div class="text-fields"></div>
<button type="button" class="btn btn-primary" onclick="addWatcher(this)"><i class="fas fa-fw fa-plus"></i> Add Watcher</button>
</div>
<script>
function addTextField() {
var container = document.getElementById("text-fields");
var textFieldWrapper = document.createElement("div");
textFieldWrapper.className = "input-group mb-3";
var prependWrapper = document.createElement("div");
prependWrapper.className = "input-group-prepend";
var iconSpan = document.createElement("span");
iconSpan.className = "input-group-text";
iconSpan.innerHTML = "<i class='fa fa-fw fa-envelope'></i>";
prependWrapper.appendChild(iconSpan);
var textField = document.createElement("input");
textField.type = "email";
textField.className = "form-control";
textField.name = "watchers[]";
var removeButtonWrapper = document.createElement("div");
removeButtonWrapper.className = "input-group-append";
var removeButton = document.createElement("button");
removeButton.className = "btn btn-danger";
removeButton.type = "button";
removeButton.innerHTML = "<i class='fas fa-fw fa-minus'></i>";
removeButton.onclick = function() {
removeTextField(this);
};
removeButtonWrapper.appendChild(removeButton);
textFieldWrapper.appendChild(prependWrapper);
textFieldWrapper.appendChild(textField);
textFieldWrapper.appendChild(removeButtonWrapper);
container.appendChild(textFieldWrapper);
}
function removeTextField(button) {
var container = document.getElementById("text-fields");
var textFieldWrapper = button.parentNode.parentNode; // Since we added an extra wrapping div
container.removeChild(textFieldWrapper);
}
</script>
</div>
<div class="tab-pane fade" id="pills-assets">

View File

@ -137,7 +137,7 @@
<div class="form-group">
<label>Watchers <span class="text-danger">Work in Progress</span></label>
<div id="text-fields">
<div class="text-fields">
<?php
$sql_watchers = mysqli_query($mysqli, "SELECT * FROM ticket_watchers WHERE watcher_ticket_id = $ticket_id");
while ($row = mysqli_fetch_array($sql_watchers)) {
@ -150,7 +150,7 @@
</div>
<input type="text" class="form-control" name="watchers[]" value="<?php echo $watcher_email; ?>">
<div class="input-group-append">
<button type="button" class="btn btn-danger"><i class="fas fa-fw fa-plus"></i></button>
<button type="button" class="btn btn-danger" onclick="removeWatcher(this)"><i class="fas fa-fw fa-minus"></i></button>
</div>
</div>
<?php
@ -158,52 +158,9 @@
?>
</div>
<button class="btn btn-primary" type="button" onclick="addTextField()"><i class="fas fa-fw fa-plus"></i> Add Watcher</button>
<button class="btn btn-primary" type="button" onclick="addWatcher(this)"><i class="fas fa-fw fa-plus"></i> Add Watcher</button>
</div>
<script>
function addTextField<?php echo $ticket_id; ?>() {
var container = document.getElementById("text-fields<?php echo $ticket_id; ?>");
var textFieldWrapper = document.createElement("div");
textFieldWrapper.className = "input-group mb-3";
var prependWrapper = document.createElement("div");
prependWrapper.className = "input-group-prepend";
var iconSpan = document.createElement("span");
iconSpan.className = "input-group-text";
iconSpan.innerHTML = "<i class='fa fa-fw fa-envelope'></i>";
prependWrapper.appendChild(iconSpan);
var textField = document.createElement("input");
textField.type = "email";
textField.className = "form-control";
textField.name = "watchers[]";
var removeButtonWrapper = document.createElement("div");
removeButtonWrapper.className = "input-group-append";
var removeButton = document.createElement("button");
removeButton.className = "btn btn-danger";
removeButton.type = "button";
removeButton.innerHTML = "<i class='fas fa-fw fa-minus'></i>";
removeButton.onclick = function() {
removeTextField(this);
};
removeButtonWrapper.appendChild(removeButton);
textFieldWrapper.appendChild(prependWrapper);
textFieldWrapper.appendChild(textField);
textFieldWrapper.appendChild(removeButtonWrapper);
container.appendChild(textFieldWrapper);
}
function removeTextField(button) {
var container = document.getElementById("text-fields");
var textFieldWrapper = button.parentNode.parentNode; // Since we added an extra wrapping div
container.removeChild(textFieldWrapper);
}
</script>
</div>
<div class="tab-pane fade" id="pills-assets<?php echo $ticket_id; ?>">

View File

@ -390,3 +390,6 @@ $user_active_assigned_tickets = intval($row['total_tickets_assigned']);
<?php
require_once("ticket_add_modal.php");
require_once("footer.php");
?>
<script src="js/ticket_add_remove_watchers.js"></script>