mirror of
https://github.com/itflow-org/itflow
synced 2026-02-28 02:44:53 +00:00
Add task approval system
This commit is contained in:
@@ -185,6 +185,43 @@ if (isset($_POST['add_ticket_comment'])) {
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_GET['approve_ticket_task'])) {
|
||||
|
||||
$task_id = intval($_GET['approve_ticket_task']);
|
||||
$approval_id = intval($_GET['approval_id']);
|
||||
$url_key = sanitizeInput($_GET['approval_url_key']);
|
||||
|
||||
$approval_row = mysqli_fetch_array(mysqli_query($mysqli, "SELECT * FROM task_approvals LEFT JOIN tasks on task_id = approval_task_id WHERE approval_id = $approval_id AND approval_task_id = $task_id AND approval_url_key = '$url_key' AND approval_status = 'pending' AND approval_scope = 'client'"));
|
||||
|
||||
$task_name = nullable_htmlentities($approval_row['task_name']);
|
||||
$scope = nullable_htmlentities($approval_row['approval_scope']);
|
||||
$type = nullable_htmlentities($approval_row['approval_type']);
|
||||
$required_user = intval($approval_row['approval_required_user_id']);
|
||||
$created_by = intval($approval_row['approval_created_by']);
|
||||
$ticket_id = intval($approval_row['task_ticket_id']);
|
||||
|
||||
if (!$approval_row) {
|
||||
flash_alert("Cannot find/approve that task", 'warning');
|
||||
redirect();
|
||||
exit;
|
||||
}
|
||||
|
||||
// Approve
|
||||
mysqli_query($mysqli, "UPDATE task_approvals SET approval_status = 'approved', approval_approved_by = $session_user_id WHERE approval_id = $approval_id AND approval_task_id = $task_id AND approval_url_key = '$url_key' AND approval_status = 'pending' AND approval_scope = 'client'");
|
||||
|
||||
|
||||
// Notify tech
|
||||
mysqli_query($mysqli, "INSERT INTO notifications SET notification_type = 'Ticket', notification = '$session_contact_email approved ticket task $task_name', notification_action = 'ticket.php?ticket_id=$ticket_id', notification_client_id = $session_client_id, notification_user_id = $created_by");
|
||||
// TODO: Email agent
|
||||
|
||||
// Logging
|
||||
logAction("Task", "Edit", "Contact $session_contact_email approved task $task_name (approval $approval_id)", $session_client_id, $task_id);
|
||||
|
||||
flash_alert("Task Approved");
|
||||
redirect();
|
||||
|
||||
}
|
||||
|
||||
if (isset($_POST['add_ticket_feedback'])) {
|
||||
|
||||
$ticket_id = intval($_POST['ticket_id']);
|
||||
|
||||
@@ -70,6 +70,13 @@ if (isset($_GET['id']) && intval($_GET['id'])) {
|
||||
);
|
||||
$completed_task_count = mysqli_num_rows($sql_tasks_completed);
|
||||
|
||||
// Get pending task approvals
|
||||
$sql_task_approvals = mysqli_query($mysqli,"
|
||||
SELECT task_id, task_name, approval_id, approval_scope, approval_type, approval_required_user_id, approval_status, approval_url_key
|
||||
FROM tasks
|
||||
LEFT JOIN task_approvals ON task_id = task_approvals.approval_task_id
|
||||
WHERE task_ticket_id = $ticket_id AND task_completed_at IS NULL AND approval_scope = 'client' AND approval_status = 'pending'
|
||||
");
|
||||
?>
|
||||
|
||||
<ol class="breadcrumb d-print-none">
|
||||
@@ -130,6 +137,59 @@ if (isset($_GET['id']) && intval($_GET['id'])) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Approvals -->
|
||||
<?php if (mysqli_num_rows($sql_task_approvals) > 0) { ?>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5>Approvals</h5>
|
||||
This ticket has tasks requiring approval:
|
||||
|
||||
<ul>
|
||||
<?php
|
||||
|
||||
while ($approvals = mysqli_fetch_array($sql_task_approvals)) {
|
||||
$task_id = intval($approvals['task_id']);
|
||||
$approval_id = intval($approvals['approval_id']);
|
||||
$task_name = nullable_htmlentities($approvals['task_name']);
|
||||
$approval_type = nullable_htmlentities($approvals['approval_type']);
|
||||
$approval_url_key = nullable_htmlentities($approvals['approval_url_key']);
|
||||
|
||||
$contact_can_approve = false; // Default
|
||||
|
||||
if ($approval_type == 'any') {
|
||||
$contact_can_approve = true;
|
||||
}
|
||||
|
||||
if ($session_contact_primary) {
|
||||
$contact_can_approve = true;
|
||||
}
|
||||
|
||||
if ($approval_type == 'technical' && $session_contact_is_technical_contact) {
|
||||
$contact_can_approve = true;
|
||||
}
|
||||
|
||||
if ($approval_type == 'billing' && $session_contact_is_billing_contact) {
|
||||
$contact_can_approve = true;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<li>
|
||||
<?php echo $task_name;
|
||||
if ($contact_can_approve) { ?> - <a href="post.php?approve_ticket_task=<?= $task_id ?>&approval_id=<?= $approval_id ?>&approval_url_key=<?= $approval_url_key ?>" class="confirm-link">Approve task</a> <?php }
|
||||
else {?> - Please ask your <?= $approval_type ?> contact to approve this task <?php } ?>
|
||||
</li>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Either show the reply comments box, option to re-open ticket, show ticket smiley feedback or thanks for feedback -->
|
||||
|
||||
Reference in New Issue
Block a user