From a8f2bace985ee0419492a09e1d5a3879f2f5b96b Mon Sep 17 00:00:00 2001 From: arf20 Date: Wed, 20 Mar 2024 20:00:31 +0100 Subject: Ticketing system --- openticket.php | 178 ++++++++++++++++++++++++--------------------------------- 1 file changed, 75 insertions(+), 103 deletions(-) (limited to 'openticket.php') diff --git a/openticket.php b/openticket.php index 4448f7b..6269120 100644 --- a/openticket.php +++ b/openticket.php @@ -14,48 +14,71 @@ $type = $_SESSION["type"]; require_once "config.php"; // Get orders -$sql = "SELECT id, name FROM orders WHERE client = ?"; +$sql = "SELECT id, name, service FROM orders WHERE client = ?"; $stmt = mysqli_prepare($link, $sql); mysqli_stmt_bind_param($stmt, "s", $param_client); $param_client = $clientid; mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); +$orders = $result->fetch_all(MYSQLI_ASSOC); + +// Get services +$sql = "SELECT id, name, type, billing, description FROM services"; +$stmt = mysqli_prepare($link, $sql); +mysqli_stmt_execute($stmt); +$result = mysqli_stmt_get_result($stmt); $services = $result->fetch_all(MYSQLI_ASSOC); +// Get users +$sql = "SELECT id, username, type, email FROM users"; +$stmt = mysqli_prepare($link, $sql); +mysqli_stmt_execute($stmt); +$result = mysqli_stmt_get_result($stmt); +$users = $result->fetch_all(MYSQLI_ASSOC); + // POST actions if ($_SERVER["REQUEST_METHOD"] == "POST") { // add entry - $sql = "INSERT INTO orders (service, name, client, billing, comments) VALUES (?, ?, ?, ?, ?)"; + $sql = "INSERT INTO tickets (`order`, subject, body, status, asignee) VALUES (?, ?, ?, ?, ?)"; $stmt = mysqli_prepare($link, $sql); - mysqli_stmt_bind_param($stmt, "sssss", $param_service, $param_name, $param_client, $param_billing, $param_comments); - $param_service = $_POST["service"]; - $param_name = $_POST["name"]; - $param_client = $clientid; - $param_billing = $_POST["billing"]; - $param_comments = $_POST["comments"]; + mysqli_stmt_bind_param($stmt, "sssss", $param_order, $param_subject, $param_body, $param_status, $param_asignee); + $param_order = $_POST["order"]; + $param_subject = $_POST["subject"]; + $param_body = $_POST["body"]; + $param_status = "open"; + // choose asignee automatically + $helpdesk = array_filter($users, function ($t) { return $t["type"] == "helpdesk"; }); + $admins = array_filter($users, function ($t) { return $t["type"] == "admin"; }); + $asignee = null; + if (!empty($helpdesk)) + $asignee = $helpdesk[array_rand($helpdesk)]; + else + $asignee = $admins[array_rand($admins)]; + $param_asignee = $asignee["id"]; if (!mysqli_stmt_execute($stmt) || (mysqli_stmt_affected_rows($stmt) != 1)) { echo "SQL error."; } else { - // send admin mail - // Get admin mails - $sql = "SELECT email FROM users WHERE type = 'admin'"; + // send ticket notification + // get id + // Get users + $sql = "SELECT id FROM tickets ORDER BY id DESC LIMIT 0, 1"; $stmt = mysqli_prepare($link, $sql); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); - $admins = $result->fetch_all(MYSQLI_ASSOC); + $id = $result->fetch_all(MYSQLI_ASSOC); - foreach ($admins as $admin) { - $mailer->addAddress($admin["email"]); - } - - $mailer->Subject = "New service order request"; - $mailer->Body = "Admins,\n\nUser $username requested service ".getservicebyid($_POST["service"])["name"]."\n\n" - ."Instance name: ".$_POST["name"]."\n" - ."Calculated billing: ".$_POST["billing"]."\n" - ."Comments:\n" - .$_POST["comments"] + $lines = explode("\n", $_POST["body"]); + $body = ""; + foreach ($lines as $line) $body .= ">".$line; + + $mailer->addAddress($asignee["email"]); + $mailer->addReplyTo(getuserbyid($clientid)["email"]); + $mailer->Subject = "[Ticket ID: ".$id[0]["id"]."] ".$_POST["subject"]; + $mailer->Body = "Helpdesk,\n\nUser $username opened new ticket for ".getorderbyid($_POST["order"])["name"]." (".getservicebyid(getorderbyid($_POST["order"])["service"])["name"]."):\n" + .$body ."\n\n--\nARFNET Client, Service, Ticket and Invoice Management System\nhttps://arf20.com"; + if (!$mailer->send()) { echo 'Mailer Error [ask arf20]: ' . $mailer->ErrorInfo; } else header("location: ".$_SERVER['SCRIPT_NAME']); @@ -71,9 +94,22 @@ function getservicebyid($id) { } } -function genoption($id, $name) { - return "" - ."
\n"; +function getuserbyid($id) { + global $users; + foreach ($users as $user) { + if ($user["id"] == $id) { + return $user; + } + } +} + +function getorderbyid($id) { + global $orders; + foreach ($orders as $order) { + if ($order["id"] == $id) { + return $order; + } + } } ?> @@ -84,39 +120,6 @@ function genoption($id, $name) { ARFNET CSTIMS -
@@ -129,52 +132,21 @@ function genoption($id, $name) {

ARFNET Client Service Ticket and Invoice Management System

panel

-

Order a new service

+

Open ticket

-
-
-
-
-
-
-
-
-
-
-
-

-                            
-
-

-
-
-

-
-
- - -
+
+
+

+
+

+
+
-- cgit v1.2.3