diff --git a/ajax.php b/ajax.php index bc052352..1841be1c 100644 --- a/ajax.php +++ b/ajax.php @@ -153,4 +153,45 @@ if(isset($_POST['client_set_notes'])){ // Logging mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Client', log_action = 'Modify', log_description = '$session_name modified client notes', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_created_at = NOW(), log_client_id = $client_id, log_user_id = $session_user_id, company_id = $session_company_id"); +} + +/* + * Collision Detection/Avoidance + * Called upon loading a ticket, and every 2 mins thereafter + * Is used in conjunction with ticket_query_views to show who is currently viewing a ticket + */ +if(isset($_GET['ticket_add_view'])){ + $ticket_id = intval($_GET['ticket_id']); + + mysqli_query($mysqli, "INSERT INTO ticket_views SET view_ticket_id = '$ticket_id', view_user_id = '$session_user_id', view_timestamp = NOW()"); +} + +/* + * Collision Detection/Avoidance + * Returns formatted text of the agents currently viewing a ticket + * Called upon loading a ticket, and every 2 mins thereafter + */ +if(isset($_GET['ticket_query_views'])){ + $ticket_id = intval($_GET['ticket_id']); + + $query = mysqli_query($mysqli, "SELECT user_name FROM ticket_views LEFT JOIN users ON view_user_id = user_id WHERE view_ticket_id = '$ticket_id' AND view_user_id != '$session_user_id' AND view_timestamp > DATE_SUB(NOW(), INTERVAL 2 MINUTE)"); + while($row = mysqli_fetch_array($query)){ + $users[] = $row['user_name']; + } + if(!empty($users)){ + $users = array_unique($users); + if(count($users) > 1){ + // Multiple viewers + $response['message'] = implode(", ", $users) . " are viewing this ticket."; + } + else{ + // Single viewer + $response['message'] = implode("", $users) . " is viewing this ticket."; + } + } + else{ + // No viewers + $response['message'] = ""; + } + echo json_encode($response); } \ No newline at end of file diff --git a/cron.php b/cron.php index 0e73e5c1..48b7d782 100644 --- a/cron.php +++ b/cron.php @@ -257,6 +257,9 @@ while($row = mysqli_fetch_array($sql_companies)){ } } + // Clean-up ticket views table used for collision detection + mysqli_query($mysqli, "TRUNCATE TABLE ticket_views"); + // PAST DUE INVOICE Notifications //$invoiceAlertArray = [$config_invoice_overdue_reminders]; $invoiceAlertArray = [30,60,90,120,150,180,210,240,270,300,330,360,390,420,450,480,510,540,570,590,620]; diff --git a/db.sql b/db.sql index a9cac9da..94fe7d77 100644 --- a/db.sql +++ b/db.sql @@ -1274,6 +1274,22 @@ CREATE TABLE `ticket_replies` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `ticket_views` +-- + +DROP TABLE IF EXISTS `ticket_views`; +CREATE TABLE IF NOT EXISTS `ticket_views` ( + `view_id` int(11) NOT NULL AUTO_INCREMENT, + `view_ticket_id` int(11) NOT NULL, + `view_user_id` int(11) NOT NULL, + `view_timestamp` datetime NOT NULL, + PRIMARY KEY (`view_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- -------------------------------------------------------- + -- -- Table structure for table `tickets` -- diff --git a/ticket.php b/ticket.php index d085e5bd..44288283 100644 --- a/ticket.php +++ b/ticket.php @@ -216,7 +216,7 @@ if(isset($_GET['ticket_id'])){
@@ -605,59 +607,98 @@ if(isset($_GET['ticket_id'])){ - - + // This function "pads" out the values, adding zeros if they are required + function pad(val) + { + var valString = val + ""; + if(valString.length < 2) + { + return "0" + valString; + } + else + { + return valString; + } + } + + + \ No newline at end of file