init
This commit is contained in:
758
module/ticketcenter/category.inc.php
Normal file
758
module/ticketcenter/category.inc.php
Normal file
@@ -0,0 +1,758 @@
|
||||
<?php
|
||||
// Display only errors (no notices, warnings, or deprecation messages)
|
||||
error_reporting(E_ERROR | E_PARSE);
|
||||
ini_set('display_errors', 1);
|
||||
?>
|
||||
|
||||
<!-- <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script> -->
|
||||
|
||||
<!-- <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /> -->
|
||||
<!-- <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script> -->
|
||||
|
||||
<style>
|
||||
.select2-container {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-selection--single {
|
||||
border: 1px solid var(--rahmen);
|
||||
border-radius: 7px;
|
||||
}
|
||||
</style>
|
||||
<?
|
||||
date_default_timezone_set('Europe/Berlin');
|
||||
|
||||
$messages = array();
|
||||
$error = FALSE;
|
||||
|
||||
|
||||
if (isset($custom_action)) {
|
||||
$action = $custom_action;
|
||||
} else {
|
||||
$action = $_REQUEST["action"];
|
||||
}
|
||||
|
||||
switch ($action) {
|
||||
case 'close_category':
|
||||
require_once("category_listform.inc.php");
|
||||
break;
|
||||
case 'load_category':
|
||||
require_once("category_listform.inc.php");
|
||||
echo "<script>
|
||||
location.reload();
|
||||
</script>";
|
||||
break;
|
||||
case 'new_category':
|
||||
require_once("category_cardform.inc.php");
|
||||
break;
|
||||
case 'edit_category':
|
||||
edit_category();
|
||||
break;
|
||||
case 'delete_category':
|
||||
delete_category();
|
||||
echo "<script>
|
||||
location.reload();
|
||||
</script>";
|
||||
break;
|
||||
case 'save_category':
|
||||
save_category();
|
||||
break;
|
||||
case 'moveup_category':
|
||||
moveup_category();
|
||||
break;
|
||||
case 'movedown_category':
|
||||
movedown_category();
|
||||
break;
|
||||
case "moveleft_category":
|
||||
moveleft_category();
|
||||
break;
|
||||
case "moveright_category":
|
||||
moveright_category();
|
||||
break;
|
||||
case "reorder_category":
|
||||
reorder_category();
|
||||
break;
|
||||
case 'update_sortorder_category':
|
||||
update_sortorder_category();
|
||||
break;
|
||||
|
||||
default:
|
||||
require_once("category_listform.inc.php");
|
||||
break;
|
||||
}
|
||||
|
||||
function edit_category($_id = "")
|
||||
{
|
||||
if ((int) $_id > 0) {
|
||||
$category_id = $_id;
|
||||
} else {
|
||||
$category_id = $_REQUEST["input_category_id"];
|
||||
}
|
||||
if ($category_id <> '') {
|
||||
$query = "SELECT * FROM main_tickets_category WHERE id = '" . $category_id . "' LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$input_category = @mysqli_fetch_array($result);
|
||||
require_once("category_cardform.inc.php");
|
||||
}
|
||||
} else {
|
||||
require_once("category_cardform.inc.php");
|
||||
}
|
||||
}
|
||||
|
||||
function save_category()
|
||||
{
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
|
||||
if ($_REQUEST["input_category_id"] <> '') {
|
||||
$query = "UPDATE main_tickets_category SET
|
||||
description = '" . mysqli_real_escape_string($GLOBALS['mysql_con'], $_REQUEST["input_description"]) . "',
|
||||
text = '" . mysqli_real_escape_string($GLOBALS['mysql_con'], $_REQUEST["input_text"]) . "',
|
||||
escalation_state = '" . $_REQUEST["input_escalation_state"] . "',
|
||||
service_center = '" . ($_REQUEST["input_service_center"] == "on" ? 1 : 0) . "'
|
||||
WHERE id = '" . $_REQUEST["input_category_id"] . "' LIMIT 1";
|
||||
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
$id = $_REQUEST["input_category_id"];
|
||||
|
||||
} else {
|
||||
$sorting = @mysqli_fetch_array(
|
||||
@mysqli_query(
|
||||
$GLOBALS['mysql_con'],
|
||||
"SELECT MAX(sorting)+1 AS newsorting FROM main_tickets_category"
|
||||
)
|
||||
);
|
||||
|
||||
$sorting = ($sorting["newsorting"] != "") ? $sorting["newsorting"] : 1;
|
||||
|
||||
$query = "
|
||||
INSERT INTO main_tickets_category
|
||||
(description, text, code, escalation_state, service_center, sorting)
|
||||
VALUES (
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $_REQUEST["input_description"]) . "',
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $_REQUEST["input_text"]) . "',
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $_REQUEST["input_code"]) . "',
|
||||
" . (int) $_REQUEST["input_escalation_state"] . ",
|
||||
" . (($_REQUEST["input_service_center"] == "on") ? 1 : 0) . ",
|
||||
" . (int) $sorting . "
|
||||
)";
|
||||
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
$id = mysqli_insert_id($GLOBALS['mysql_con']);
|
||||
|
||||
}
|
||||
|
||||
// if ($_POST["select_mandant"] != "0") {
|
||||
save_mandant($id);
|
||||
// }
|
||||
// if ($_POST["select_department"] != "0") {
|
||||
save_department($id);
|
||||
// }
|
||||
// if ($_POST["select_user"] != "0") {
|
||||
save_contact($id);
|
||||
// }
|
||||
save_process($id);
|
||||
|
||||
if ($_REQUEST['save_and_close'] == 1) {
|
||||
require_once("category_listform.inc.php");
|
||||
echo "<script>
|
||||
location.reload();
|
||||
</script>";
|
||||
} else {
|
||||
edit_category($id);
|
||||
}
|
||||
}
|
||||
|
||||
function save_mandant($id)
|
||||
{
|
||||
|
||||
$query = "DELETE FROM main_tickets_category_mandant WHERE main_tickets_category_id = '" . $id . "'";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if ($_POST["select_mandant"] == "") {
|
||||
return;
|
||||
}
|
||||
$mandant_list = explode(",", $_POST["select_mandant"]);
|
||||
foreach ($mandant_list as $mandant) {
|
||||
$query = "INSERT INTO main_tickets_category_mandant (main_tickets_category_id, main_mandant_id) VALUES ('" . $id . "', '" . $mandant . "')";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function save_department($id)
|
||||
{
|
||||
$query = "DELETE FROM main_tickets_category_department WHERE main_tickets_category_id = '" . $id . "'";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if ($_POST["select_department"] == "") {
|
||||
return;
|
||||
}
|
||||
|
||||
$department_list = explode(",", $_POST["select_department"]);
|
||||
|
||||
foreach ($department_list as $department) {
|
||||
$query = "INSERT INTO main_tickets_category_department (main_tickets_category_id, main_department_id) VALUES ('" . $id . "', '" . $department . "')";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function save_process($id)
|
||||
{
|
||||
if ($_POST["select_process"] <> '') {
|
||||
$query = "DELETE FROM main_tickets_category_process WHERE main_tickets_category_id = '" . $id . "'";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if ($_POST["select_process"] == "") {
|
||||
return;
|
||||
}
|
||||
|
||||
$process_list = explode(",", $_POST["select_process"]);
|
||||
|
||||
foreach ($process_list as $process) {
|
||||
$query = "INSERT INTO main_tickets_category_process (main_tickets_category_id, main_tickets_process_id) VALUES ('" . $id . "', '" . $process . "')";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function save_contact($id)
|
||||
{
|
||||
// if ($_POST["select_user"] <> '') {
|
||||
$query = "DELETE FROM main_tickets_category_contact WHERE main_tickets_category_id = '" . $id . "'";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if ($_POST["select_user"] == "") {
|
||||
return;
|
||||
}
|
||||
$contact_list = explode(",", $_POST["select_user"]);
|
||||
|
||||
foreach ($contact_list as $contact) {
|
||||
$query = "INSERT INTO main_tickets_category_contact (main_tickets_category_id, main_contact_id) VALUES ('" . $id . "', '" . $contact . "')";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
function delete_category()
|
||||
{
|
||||
if ($_REQUEST["input_category_id"] <> '') {
|
||||
$query = "DELETE FROM main_tickets_category WHERE id = '" . $_REQUEST["input_category_id"] . "'";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
require_once("category_listform.inc.php");
|
||||
}
|
||||
|
||||
function moveup_category()
|
||||
{
|
||||
move_category("<", "DESC", $_POST["input_category_id"]);
|
||||
require_once("category_listform.inc.php");
|
||||
}
|
||||
|
||||
function movedown_category()
|
||||
{
|
||||
move_category(">", "ASC", $_POST["input_category_id"]);
|
||||
require_once("category_listform.inc.php");
|
||||
}
|
||||
|
||||
function move_category($way, $order, $pic_id)
|
||||
{
|
||||
$query = "SELECT * FROM category WHERE id = '" . $pic_id . "' LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$curr_pic = @mysqli_fetch_array($result);
|
||||
}
|
||||
$query = "SELECT * FROM category WHERE sorting " . $way . " " . $curr_pic["sorting"] . " ORDER BY sorting " . $order . " LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$change_pic = @mysqli_fetch_array($result);
|
||||
}
|
||||
if (($curr_pic["id"] <> '') && ($change_pic["id"] <> '')) {
|
||||
$query = "UPDATE main_tickets_category SET sorting = " . $change_pic["sorting"] . " WHERE id = " . $curr_pic["id"];
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
$query = "UPDATE main_tickets_category SET sorting = " . $curr_pic["sorting"] . " WHERE id = " . $change_pic["id"];
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
}
|
||||
|
||||
function update_sortorder_category()
|
||||
{
|
||||
$sorting = 1;
|
||||
foreach ($_POST['linklistid'] as $itemId) {
|
||||
$query = "UPDATE main_tickets_category SET sorting = " . $sorting . " WHERE id = '" . $itemId . "'";
|
||||
var_dump($query);
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
$sorting++;
|
||||
}
|
||||
}
|
||||
|
||||
function moveleft_knowledgecenter()
|
||||
{
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE id = '" . $_POST["input_knowledgecenter_id"] . "' LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$curr_knowledgecenter = @mysqli_fetch_array($result);
|
||||
}
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE id = '" . $curr_knowledgecenter["parent_id"] . "' LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$parent_knowledgecenter = @mysqli_fetch_array($result);
|
||||
}
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE parent_id = '" . $curr_knowledgecenter["parent_id"] . "' ORDER BY sorting DESC LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$last_child_knowledgecenter = @mysqli_fetch_array($result);
|
||||
}
|
||||
|
||||
if (($curr_knowledgecenter["id"] <> '') && ($parent_knowledgecenter["id"] <> '')) {
|
||||
// Eigentlichen Menüeintrag aktualisieren
|
||||
if ($parent_knowledgecenter["parent_id"] == '') {
|
||||
$parent_knowledgecenter["parent_id"] = "0";
|
||||
}
|
||||
$query = "UPDATE knowledgecenter_category SET parent_id = " . $parent_knowledgecenter["parent_id"] . ", level = " . $parent_knowledgecenter["level"] . ", sorting = " . ($parent_knowledgecenter["sorting"] + 1) . " WHERE id = " . $curr_knowledgecenter["id"];
|
||||
if (@mysqli_query($GLOBALS['mysql_con'], $query)) {
|
||||
// Level der ursprünglichen Untermenüpunkte aktualisieren
|
||||
update_knowledgecenter_children($curr_knowledgecenter["id"], "-");
|
||||
// Parent-ID und Sortierung der neuen Untermenüpunkte aktualisieren
|
||||
$parent_query = ($curr_knowledgecenter["parent_id"] <> '') ? " parent_id = '" . $curr_knowledgecenter["parent_id"] . "'" : " parent_id = 0";
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE" . $parent_query . " AND sorting > " . $curr_knowledgecenter["sorting"] . " AND main_site_id = '" . $GLOBALS["site"]["id"] . "' AND main_language_id = '" . $GLOBALS["language"]["id"] . "'";
|
||||
$new_sorting = 1;
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) > 0) {
|
||||
while ($knowledgecenter = @mysqli_fetch_array($result)) {
|
||||
$query = "UPDATE knowledgecenter_category SET parent_id = " . $curr_knowledgecenter["id"] . ", sorting = " . $new_sorting . " WHERE id = " . $knowledgecenter["id"] . " LIMIT 1";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
$new_sorting++;
|
||||
}
|
||||
}
|
||||
// Sortierung der neuen Nachfolger aktualisieren
|
||||
$new_sorting = $parent_knowledgecenter["sorting"] + 1;
|
||||
$parent_query = ($parent_knowledgecenter["parent_id"] <> '0') ? " parent_id = '" . $parent_knowledgecenter["parent_id"] . "'" : " parent_id = 0";
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE" . $parent_query . " AND id <> " . $curr_knowledgecenter["id"] . " AND sorting >= " . $new_sorting . " AND main_site_id = " . $GLOBALS["site"]["id"] . " AND main_language_id = " . $GLOBALS["language"]["id"];
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) > 0) {
|
||||
while ($knowledgecenter = @mysqli_fetch_array($result)) {
|
||||
$new_sorting++;
|
||||
$query = "UPDATE knowledgecenter_category SET sorting = " . $new_sorting . " WHERE id = " . $knowledgecenter["id"] . " LIMIT 1";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function moveright_knowledgecenter()
|
||||
{
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE id = '" . $_POST["input_knowledgecenter_id"] . "' LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$curr_knowledgecenter = @mysqli_fetch_array($result);
|
||||
}
|
||||
$parent_query = ($curr_knowledgecenter["parent_id"] <> '') ? " parent_id = '" . $curr_knowledgecenter["parent_id"] . "'" : " parent_id = 0";
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE" . $parent_query . " AND sorting < " . $curr_knowledgecenter["sorting"] . " AND main_site_id = " . $GLOBALS["site"]["id"] . " AND main_language_id = " . $GLOBALS["language"]["id"] . " ORDER BY sorting DESC LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$pre_knowledgecenter = @mysqli_fetch_array($result);
|
||||
}
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE parent_id = '" . $pre_knowledgecenter["id"] . "' ORDER BY sorting DESC LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$lastprechild_knowledgecenter = @mysqli_fetch_array($result);
|
||||
}
|
||||
if (($curr_knowledgecenter["id"] <> '') && ($pre_knowledgecenter["id"] <> '')) {
|
||||
// Eigentlichen Menüeintrag aktualisieren
|
||||
if ($lastprechild_knowledgecenter["sorting"] == '') {
|
||||
$lastprechild_knowledgecenter["sorting"] = 0;
|
||||
}
|
||||
$query = "UPDATE knowledgecenter_category SET parent_id = " . $pre_knowledgecenter["id"] . ", level = " . ($curr_knowledgecenter["level"] + 1) . ", sorting = " . ($lastprechild_knowledgecenter["sorting"] + 1) . " WHERE id = " . $curr_knowledgecenter["id"] . " AND main_site_id = " . $GLOBALS["site"]["id"] . " AND main_language_id = " . $GLOBALS["language"]["id"];
|
||||
if (@mysqli_query($GLOBALS['mysql_con'], $query)) {
|
||||
// Level der ursprünglichen Untermenüpunkte aktualisieren
|
||||
update_knowledgecenter_children($curr_knowledgecenter["id"], "+");
|
||||
|
||||
// Sortierung der neuen Nachfolger aktualisieren
|
||||
$new_sorting = $curr_knowledgecenter["sorting"];
|
||||
$parent_query = ($curr_knowledgecenter["parent_id"] <> '') ? " parent_id = " . $curr_knowledgecenter["parent_id"] : " parent_id = 0";
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE" . $parent_query . " AND sorting >= " . $new_sorting . " AND main_site_id = " . $GLOBALS["site"]["id"] . " AND main_language_id = " . $GLOBALS["language"]["id"];
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) > 0) {
|
||||
while ($knowledgecenter = @mysqli_fetch_array($result)) {
|
||||
$query = "UPDATE knowledgecenter_category SET sorting = " . $new_sorting . " WHERE id = " . $knowledgecenter["id"] . " LIMIT 1";
|
||||
$new_sorting++;
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function update_knowledgecenter_children($knowledgecenter_id, $way)
|
||||
{
|
||||
$query = "SELECT * FROM knowledgecenter_category WHERE parent_id = '" . $knowledgecenter_id . "'";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (@mysqli_num_rows($result) > 0) {
|
||||
while ($knowledgecenter = @mysqli_fetch_array($result)) {
|
||||
$query = "UPDATE knowledgecenter_category SET level = level " . $way . " 1 WHERE id = " . $knowledgecenter["id"] . " LIMIT 1";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
update_knowledgecenter_children($knowledgecenter["id"], $way);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// function reorder_category() {
|
||||
// global $parentSort;
|
||||
// $list = $_POST['list'];
|
||||
// if (!is_array($list) || count($list) == 0) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// $level = 1;
|
||||
// foreach ($list as $site) {
|
||||
// if (!array_key_exists(0, $parentSort)) {
|
||||
// $parentSort[0] = 1;
|
||||
// }
|
||||
// $query = "UPDATE main_tickets_category SET parent_id = 0, level = 1, sorting = " . $parentSort[0] . " WHERE id = " . (int)$site['id'];
|
||||
// mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
// $parentSort[0]++;
|
||||
// if (isset($site['children']) && count($site['children'])) {
|
||||
// update_children($site['id'], $site['children'], $level + 1);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
function reorder_category()
|
||||
{
|
||||
global $parentSort;
|
||||
|
||||
if (!is_array($parentSort)) {
|
||||
$parentSort = [];
|
||||
}
|
||||
|
||||
$list = $_POST['list'];
|
||||
if (!is_array($list) || count($list) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$level = 1;
|
||||
foreach ($list as $site) {
|
||||
if (!array_key_exists(0, $parentSort)) {
|
||||
$parentSort[0] = 1;
|
||||
}
|
||||
|
||||
$query = "UPDATE main_tickets_category SET parent_id = 0, level = 1, sorting = " . $parentSort[0] . " WHERE id = " . (int) $site['id'];
|
||||
mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
$parentSort[0]++;
|
||||
|
||||
if (isset($site['children']) && count($site['children'])) {
|
||||
update_children($site['id'], $site['children'], $level + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function update_children($_parentId, $_list, $_level)
|
||||
{
|
||||
global $parentSort;
|
||||
|
||||
foreach ($_list as $site) {
|
||||
if (!array_key_exists($_parentId, $parentSort)) {
|
||||
$parentSort[$_parentId] = 1;
|
||||
}
|
||||
$query = "UPDATE main_tickets_category SET parent_id = " . $_parentId . ", level = " . $_level . ", sorting = " . $parentSort[$_parentId] . " WHERE id = " . (int) $site['id'];
|
||||
mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
$parentSort[$_parentId]++;
|
||||
if (isset($site['children']) && count($site['children'])) {
|
||||
update_children($site['id'], $site['children'], $_level + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function show_category()
|
||||
{
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
|
||||
$result = mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_tickets_category");
|
||||
$num_rows = mysqli_num_rows($result);
|
||||
if ($num_rows > 0) {
|
||||
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"linklist\"><tr>";
|
||||
echo "<td><div>" . $translation->get("description") . "</div></td>";
|
||||
echo "<td width=\"150\" align=\"left\"><div></div></td>";
|
||||
echo "<td class=\"code\" width=\"300\" align=\"left\"><div>Code</div></td>";
|
||||
echo "</tr>";
|
||||
echo "<tr>";
|
||||
echo "<td class=\"linklist_seperator\"></td>";
|
||||
echo "<td class=\"linklist_seperator\"></td>";
|
||||
echo "<td class=\"linklist_seperator\"></td>";
|
||||
echo "</tr>";
|
||||
|
||||
echo "</table>";
|
||||
|
||||
show_category_rek(0, 1, 0, $num_rows);
|
||||
|
||||
|
||||
} else {
|
||||
echo "<div class=\"infobox\">" . $translation->get("no_rows_found") . "</div>";
|
||||
}
|
||||
echo "\n";
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
function show_category_rek($parent_id, $level, $input_counter, $num_rows)
|
||||
{
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$parent_id_query = ($parent_id == 0) ? " WHERE parent_id = 0" : " WHERE parent_id = '" . $parent_id . "'";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], "SELECT * FROM main_tickets_category " . $parent_id_query . " ORDER BY sorting ASC");
|
||||
if (@mysqli_num_rows($result) > 0) {
|
||||
if ($parent_id == 0) {
|
||||
echo "<ol class=\"linklist sortable\">";
|
||||
} else {
|
||||
echo "<ol>";
|
||||
}
|
||||
while ($category = @mysqli_fetch_array($result)) {
|
||||
$parentclass = "";
|
||||
if ($level > 1) {
|
||||
$parentclass = " data-tt-parent-id=\"{$category['parent_id']}\"";
|
||||
}
|
||||
|
||||
$checkedRow = "false";
|
||||
if (isset($_REQUEST['input_category_id']) && $_REQUEST['input_category_id'] == $category['id']) {
|
||||
$checkedRow = "true";
|
||||
}
|
||||
|
||||
echo "<li id=\"list_{$category['id']}\">";
|
||||
echo "<div data-inputid=\"" . $category['id'] . "\" data-action=\"edit_category\" data-inputname=\"input_category_id\" data-checked=\"" . $checkedRow . "\" class=\"linklist_content dd-handle\"><span class=\"disclose\"><span> </span></span>" . htmlentities($category["description"], ENT_COMPAT, "UTF-8") . "<div class=\"dd-icon\"></div>";
|
||||
echo "<div class=\"dd-code\">" . $category['code'] . "</div></div>";
|
||||
$input_counter++;
|
||||
$input_counter = show_category_rek($category["id"], ($level + 1), $input_counter, $num_rows);
|
||||
echo "</li>";
|
||||
}
|
||||
echo "</ol>";
|
||||
}
|
||||
|
||||
return $input_counter;
|
||||
}
|
||||
|
||||
|
||||
function selectMandant($group_id)
|
||||
{
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
|
||||
$query = "SELECT * FROM main_mandant";
|
||||
$result_mandant = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if (@mysqli_num_rows($result_mandant) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$preselect = array();
|
||||
|
||||
$query = "SELECT main_mandant.* FROM main_mandant INNER JOIN main_tickets_category_mandant ON main_mandant.id = main_tickets_category_mandant.main_mandant_id WHERE main_tickets_category_mandant.main_tickets_category_id = '" . $group_id . "'";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
while ($row = @mysqli_fetch_array($result)) {
|
||||
array_push($preselect, $row['description']);
|
||||
}
|
||||
$allselect = array();
|
||||
?>
|
||||
<div class="label">Filiale auswählen</div>
|
||||
<div class="mandants bc-select-ui ui fluid multiple search selection dropdown" style="clear:both;display:inline-block;">
|
||||
<input type="hidden" name="select_mandant">
|
||||
<i class="dropdown icon"></i>
|
||||
<div class="default text"><?php echo $translation->get("top_mandant") ?></div>
|
||||
<div class="menu">
|
||||
<?
|
||||
while ($mandant = @mysqli_fetch_array($result_mandant)) {
|
||||
array_push($allselect, $mandant['id']);
|
||||
echo "<div class=\"item\" data-value=\"{$mandant['id']}\">" . $mandant["description"] . "</div>";
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/plugins/jquery/jquery-3.5.1.min.js"></script>
|
||||
<script type="text/javascript" src="/plugins/Semantic-UI-master/semantic.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="/plugins/Semantic-UI-master/bc-semantic.css?time=<?= filemtime($_SERVER['DOCUMENT_ROOT'] . '/plugins/Semantic-UI-master/bc-semantic.css') ?>">
|
||||
<script>
|
||||
var $y = jQuery.noConflict();
|
||||
$y(document).ready(function () {
|
||||
$y('.mandants.ui.fluid.multiple.dropdown').dropdown('set selected', <?= json_encode($preselect) ?>);
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
function selectDepartment($group_id)
|
||||
{
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
|
||||
$query = "SELECT * FROM main_department";
|
||||
$result_department = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if (@mysqli_num_rows($result_department) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$preselect = array();
|
||||
|
||||
$query = "SELECT main_department.* FROM main_department INNER JOIN main_tickets_category_department ON main_department.id = main_tickets_category_department.main_department_id WHERE main_tickets_category_department.main_tickets_category_id = '" . $group_id . "'";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
while ($row = @mysqli_fetch_array($result)) {
|
||||
array_push($preselect, $row['description']);
|
||||
}
|
||||
|
||||
$allselect = array();
|
||||
?>
|
||||
<div class="label">Abteilungen auswählen</div>
|
||||
<div class="departments bc-select-ui ui fluid multiple search selection dropdown"
|
||||
style="clear:both;display:inline-block;">
|
||||
<input type="hidden" name="select_department">
|
||||
<i class="dropdown icon"></i>
|
||||
<div class="default text"><?php echo $translation->get("top_department") ?></div>
|
||||
<div class="menu">
|
||||
<?
|
||||
while ($department = @mysqli_fetch_array($result_department)) {
|
||||
array_push($allselect, $department['id']);
|
||||
echo "<div class=\"item\" data-value=\"{$department['id']}\">" . $department["description"] . "</div>";
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/plugins/jquery/jquery-3.5.1.min.js"></script>
|
||||
<script type="text/javascript" src="/plugins/Semantic-UI-master/semantic.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="/plugins/Semantic-UI-master/bc-semantic.css?time=<?= filemtime($_SERVER['DOCUMENT_ROOT'] . '/plugins/Semantic-UI-master/bc-semantic.css') ?>">
|
||||
<script>
|
||||
var $y = jQuery.noConflict();
|
||||
$y(document).ready(function () {
|
||||
$y('.departments.ui.fluid.multiple.dropdown').dropdown('set selected', <?= json_encode($preselect) ?>);
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
function selectContact($group_id)
|
||||
{
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
|
||||
$query = "SELECT * FROM main_contact";
|
||||
$result_contact = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if (@mysqli_num_rows($result_contact) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$preselect = array();
|
||||
|
||||
$query = "SELECT main_contact.* FROM main_contact INNER JOIN main_tickets_category_contact ON main_contact.id = main_tickets_category_contact.main_contact_id WHERE main_tickets_category_contact.main_tickets_category_id = '" . $group_id . "'";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
while ($row = @mysqli_fetch_array($result)) {
|
||||
array_push($preselect, $row['name']);
|
||||
}
|
||||
$allselect = array();
|
||||
?>
|
||||
<div class="label">Zusätzlicher Benutzer auswählen</div>
|
||||
<div class="contacts bc-select-ui ui fluid multiple search selection dropdown" style="clear:both;display:inline-block;">
|
||||
<input type="hidden" name="select_user">
|
||||
<i class="dropdown icon"></i>
|
||||
<div class="default text"><?php echo $translation->get("top_user") ?></div>
|
||||
<div class="menu">
|
||||
<?
|
||||
while ($contact = @mysqli_fetch_array($result_contact)) {
|
||||
array_push($allselect, $contact['id']);
|
||||
echo "<div class=\"item\" data-value=\"{$contact['id']}\">" . $contact["name"] . "</div>";
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/plugins/jquery/jquery-3.5.1.min.js"></script>
|
||||
<script type="text/javascript" src="/plugins/Semantic-UI-master/semantic.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="/plugins/Semantic-UI-master/bc-semantic.css?time=<?= filemtime($_SERVER['DOCUMENT_ROOT'] . '/plugins/Semantic-UI-master/bc-semantic.css') ?>">
|
||||
<script>
|
||||
var $y = jQuery.noConflict();
|
||||
$y(document).ready(function () {
|
||||
$y('.contacts.ui.fluid.multiple.dropdown').dropdown('set selected', <?= json_encode($preselect) ?>);
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
|
||||
function selectProcess($group_id)
|
||||
{
|
||||
|
||||
|
||||
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
|
||||
$query = "SELECT * FROM main_tickets_process";
|
||||
$result_process = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if (@mysqli_num_rows($result_process) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$preselect = array();
|
||||
|
||||
$query = "SELECT main_tickets_process.* FROM main_tickets_process INNER JOIN main_tickets_category_process ON main_tickets_process.id = main_tickets_category_process.main_tickets_process_id WHERE main_tickets_category_process.main_tickets_category_id = '" . $group_id . "'";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
while ($row = @mysqli_fetch_array($result)) {
|
||||
array_push($preselect, $row['id']);
|
||||
}
|
||||
$allselect = array();
|
||||
?>
|
||||
<div class="label">Process auswählen</div>
|
||||
<div class="processes bc-select-ui ui fluid search selection dropdown"
|
||||
style="clear:both;display:inline-block;width: 100%;">
|
||||
<input type="hidden" name="select_process">
|
||||
<i class="dropdown icon"></i>
|
||||
<div class="default text"><?php echo $translation->get("top_process") ?></div>
|
||||
<div class="menu">
|
||||
<?
|
||||
while ($process = @mysqli_fetch_array($result_process)) {
|
||||
array_push($allselect, $process['id']);
|
||||
echo "<div class=\"item\" data-value=\"{$process['id']}\">" . $process["description"] . "</div>";
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/plugins/jquery/jquery-3.5.1.min.js"></script>
|
||||
<script type="text/javascript" src="/plugins/Semantic-UI-master/semantic.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="/plugins/Semantic-UI-master/bc-semantic.css?time=<?= filemtime($_SERVER['DOCUMENT_ROOT'] . '/plugins/Semantic-UI-master/bc-semantic.css') ?>">
|
||||
<script>
|
||||
var $y = jQuery.noConflict();
|
||||
$y(document).ready(function () {
|
||||
$y('.processes.ui.fluid.dropdown').dropdown('set selected', <?= json_encode($preselect) ?>);
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
|
||||
// $query_dep = "SELECT id FROM main_tickets_category";
|
||||
// $result_dep = @mysqli_query($GLOBALS['mysql_con'], $query_dep);
|
||||
// $all_categories = [];
|
||||
// while ($row = @mysqli_fetch_array($result_dep)) {
|
||||
// $all_categories[] = $row['id'];
|
||||
// }
|
||||
|
||||
// foreach ($all_categories as $category_id) {
|
||||
// $query_cat_dep = "INSERT INTO main_tickets_category_department (main_tickets_category_id, main_department_id) VALUES ($category_id, '1')";
|
||||
// @mysqli_query($GLOBALS['mysql_con'], $query_cat_dep);
|
||||
|
||||
// $query_cat_dep = "INSERT INTO main_tickets_category_department (main_tickets_category_id, main_department_id) VALUES ($category_id, '3')";
|
||||
// @mysqli_query($GLOBALS['mysql_con'], $query_cat_dep);
|
||||
// $query_process = "INSERT INTO main_tickets_category_process (main_tickets_category_id, main_tickets_process_id) VALUES ($category_id, '1')";
|
||||
// @mysqli_query($GLOBALS['mysql_con'], $query_process);
|
||||
|
||||
// // $query_esc = "UPDATE main_tickets_category SET escalation_state = '5' WHERE id = $category_id";
|
||||
// // @mysqli_query($GLOBALS['mysql_con'], $query_esc);
|
||||
// $query = "INSERT INTO main_tickets_category_contact (main_tickets_category_id, main_contact_id) VALUES ($category_id, '2')";
|
||||
// @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
// }
|
||||
84
module/ticketcenter/category_cardform.inc.php
Normal file
84
module/ticketcenter/category_cardform.inc.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?
|
||||
$formname = "form_collection_choose_cardform";
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$inputname = "input_id";
|
||||
|
||||
// error_reporting(E_ALL);
|
||||
// ini_set('display_errors', 1);
|
||||
|
||||
// var_dump($_POST["select_mandant"]);
|
||||
// var_dump($_POST["select_department"]);
|
||||
// var_dump($_POST["select_user"]);
|
||||
?>
|
||||
|
||||
|
||||
|
||||
<div id="overlaycrumb">
|
||||
<?php if ($input_category["id"] == "") {
|
||||
echo $translation->get("Abteilung erstellen");
|
||||
} else {
|
||||
echo $translation->get("Abteilung Bearbeiten");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<ul class="toolbar_menu">
|
||||
<?php
|
||||
// Zurueck zur uebersicht
|
||||
button("left", $translation->get("back"), $formname, "loadCard('load_category', true)");
|
||||
|
||||
// Speichern buttons
|
||||
button("save", $translation->get("save"), $formname, "loadCard('save_category', true)");
|
||||
button("save", $translation->get("save_and_close"), $formname, "jQuery('#save_and_close', jQuery('#" . $formname . "')).val(1);loadCard('save_category', true)");
|
||||
|
||||
if ($input_category["id"] != "") {
|
||||
echo button("delete", $translation->get("delete"), $formname, "loadCard('delete_category', true, '{$translation->get('delete_category_confirm')}')");
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
|
||||
<?php
|
||||
if ($messages != NULL) {
|
||||
if (count($messages)) {
|
||||
echo '<div id="overlayMessages">' . join("\r\n", $messages) . '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<form id="<?= $formname ?>" name="<?= $formname ?>" method="post">
|
||||
<input name="input_category_id" type="hidden" value="<?= $input_category["id"] ?>" />
|
||||
<input name="input_id" type="hidden" value="<?= $_REQUEST['input_id'] ?>">
|
||||
<input name="save_and_close" id="save_and_close" type="hidden" value="0" />
|
||||
|
||||
<table class="cardform" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td>
|
||||
<? input($translation->get("title"), "input_description", "text", $input_category["description"]) ?>
|
||||
<? input($translation->get("description"), "input_text", "smalltextarea", $input_category["text"], 1000) ?>
|
||||
</td>
|
||||
<td>
|
||||
<!-- <? input($translation->get("code"), "input_code", "text", "") ?> -->
|
||||
<input name="input_code" type="hidden" value="">
|
||||
<? selectProcess($input_category['id']) ?>
|
||||
<? selectMandant($input_category['id']) ?>
|
||||
<? selectDepartment($input_category['id']) ?>
|
||||
<? selectContact($input_category['id']) ?>
|
||||
|
||||
<? input("Eskalation in Tagen", "input_escalation_state", "number", $input_category["escalation_state"]) ?>
|
||||
<? input("Gerätecenter", "input_service_center", "checkbox", $input_category["service_center"] == 1 ? "on" : "off") ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
// $('#input_mandant_id').select2();
|
||||
// $('#input_contact_id').select2();
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.mandants.ui.fluid.dropdown, .departments.ui.fluid.dropdown, .contacts.ui.fluid.dropdown {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
104
module/ticketcenter/category_listform.inc.old.php
Normal file
104
module/ticketcenter/category_listform.inc.old.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$formname = "form_category_list";
|
||||
$inputname = "input_id";
|
||||
?>
|
||||
|
||||
<ul class="toolbar_menu">
|
||||
<?= button("new", $translation->get("new"), $formname, "loadCard('new_category', true)"); ?>
|
||||
|
||||
|
||||
</ul>
|
||||
<div id="mainContent">
|
||||
|
||||
<h1><?php echo get_translation('Zuständige Abteilung'); ?></h1>
|
||||
|
||||
<form id="<?= $formname ?>" name="<?= $formname ?>" method="post">
|
||||
<input name="input_id" type="hidden" value="<?= $input_id ?>">
|
||||
<input type="hidden" class="selected_linklist_row" name="input_category_id" value="" />
|
||||
<input type="hidden" name="fieldtype" value="" />
|
||||
<input type="hidden" name="type_id" value="" />
|
||||
<div id="page_linklist" class="category_list_view">
|
||||
<?
|
||||
show_category();
|
||||
?>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
var reorderCall = null;
|
||||
var dragEnabled = false;
|
||||
|
||||
function toggleDragDrop( _aTag ) {
|
||||
if (dragEnabled === false) {
|
||||
dragEnabled = true;
|
||||
$('ol.sortable').addClass("enabled");
|
||||
$('ol.sortable').nestedSortable("option", "disabled", false);
|
||||
$(_aTag).html("<?php echo $translation->get('disable_drag_drop'); ?>");
|
||||
} else {
|
||||
dragEnabled = false;
|
||||
$('ol.sortable').removeClass("enabled");
|
||||
$('ol.sortable').nestedSortable("option", "disabled", true);
|
||||
$(_aTag).html("<?php echo $translation->get('enable_drag_drop'); ?>");
|
||||
}
|
||||
}
|
||||
|
||||
$('ol.sortable').nestedSortable({
|
||||
forcePlaceholderSize: true,
|
||||
handle : '.dd-icon',
|
||||
helper : 'clone',
|
||||
items : 'li',
|
||||
opacity : .6,
|
||||
placeholder : 'placeholder',
|
||||
revert : 250,
|
||||
tabSize : 25,
|
||||
tolerance : 'pointer',
|
||||
toleranceElement : '> div',
|
||||
maxLevels : 5,
|
||||
isTree : true,
|
||||
expandOnHover : 1000,
|
||||
cookieIndex : 'nestedSortable_expanded2',
|
||||
startCollapsed : true,
|
||||
stop : function ( event, ui ) {
|
||||
reorder_category();
|
||||
store_expanded();
|
||||
},
|
||||
disabled : false
|
||||
});
|
||||
|
||||
$('.disclose').click(function () {
|
||||
$(this).closest('li').toggleClass('mjs-nestedSortable-collapsed').toggleClass('mjs-nestedSortable-expanded');
|
||||
store_expanded();
|
||||
});
|
||||
|
||||
function store_expanded() {
|
||||
var list = [];
|
||||
$('ol.sortable').find('li.mjs-nestedSortable-expanded').each(function () {
|
||||
list.push($(this).attr("id"));
|
||||
});
|
||||
$.cookie('nestedSortable_expanded2', list.join(','));
|
||||
}
|
||||
|
||||
function reorder_category() {
|
||||
if (reorderCall !== null) {
|
||||
reorderCall.abort();
|
||||
}
|
||||
|
||||
serialized = $('ol.sortable').nestedSortable('serialize');
|
||||
arraied = $('ol.sortable').nestedSortable('toHierarchy', {startDepthCount: 0});
|
||||
var parameter = {
|
||||
list: arraied
|
||||
};
|
||||
reorderCall = jQuery.post("?action=reorder_category", parameter, function ( output, status, xhr ) {
|
||||
if (xhr.getResponseHeader('REQUIRES_AUTH') == 1) {
|
||||
window.location.replace("/mysyde/");
|
||||
} else {
|
||||
console.log(output);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
107
module/ticketcenter/category_listform.inc.php
Normal file
107
module/ticketcenter/category_listform.inc.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$formname = "form_category_list";
|
||||
$inputname = "input_id";
|
||||
try {
|
||||
//code...
|
||||
|
||||
?>
|
||||
|
||||
<ul class="toolbar_menu">
|
||||
<?= button("new", $translation->get("new"), $formname, "loadCard('new_category', true)"); ?>
|
||||
</ul>
|
||||
|
||||
<div id="mainContent">
|
||||
<?php echo current_website_language($site, $language); ?>
|
||||
<h1><?php echo get_translation('Zuständige Abteilung'); ?></h1>
|
||||
|
||||
<form id="<?php echo $formname; ?>" name="<?php echo $formname; ?>" method="post">
|
||||
<div class="requestLoader"></div>
|
||||
<input type="hidden" class="selected_linklist_row" name="input_category_id" value="" />
|
||||
<div class="requestLoader"></div>
|
||||
<div id="page_linklist" class="form_category_list_view">
|
||||
<?
|
||||
show_category();
|
||||
?>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
var reorderCall = null;
|
||||
var dragEnabled = false;
|
||||
|
||||
function toggleDragDrop( _aTag ) {
|
||||
if (dragEnabled === false) {
|
||||
dragEnabled = true;
|
||||
$('ol.sortable').addClass("enabled");
|
||||
$('ol.sortable').nestedSortable("option", "disabled", false);
|
||||
$(_aTag).html("<?php echo $translation->get('disable_drag_drop'); ?>");
|
||||
} else {
|
||||
dragEnabled = false;
|
||||
$('ol.sortable').removeClass("enabled");
|
||||
$('ol.sortable').nestedSortable("option", "disabled", true);
|
||||
$(_aTag).html("<?php echo $translation->get('enable_drag_drop'); ?>");
|
||||
}
|
||||
}
|
||||
|
||||
$('ol.sortable').nestedSortable({
|
||||
forcePlaceholderSize: true,
|
||||
handle : '.dd-icon',
|
||||
helper : 'clone',
|
||||
items : 'li',
|
||||
opacity : .6,
|
||||
placeholder : 'placeholder',
|
||||
revert : 250,
|
||||
tabSize : 25,
|
||||
tolerance : 'pointer',
|
||||
toleranceElement : '> div',
|
||||
maxLevels : 5,
|
||||
isTree : true,
|
||||
expandOnHover : 1000,
|
||||
cookieIndex : 'nestedSortable_expanded2',
|
||||
startCollapsed : true,
|
||||
stop : function ( event, ui ) {
|
||||
reorder_category();
|
||||
store_expanded();
|
||||
},
|
||||
disabled : false
|
||||
});
|
||||
|
||||
$('.disclose').click(function () {
|
||||
$(this).closest('li').toggleClass('mjs-nestedSortable-collapsed').toggleClass('mjs-nestedSortable-expanded');
|
||||
store_expanded();
|
||||
});
|
||||
|
||||
function store_expanded() {
|
||||
var list = [];
|
||||
$('ol.sortable').find('li.mjs-nestedSortable-expanded').each(function () {
|
||||
list.push($(this).attr("id"));
|
||||
});
|
||||
$.cookie('nestedSortable_expanded2', list.join(','));
|
||||
}
|
||||
|
||||
function reorder_category() {
|
||||
if (reorderCall !== null) {
|
||||
reorderCall.abort();
|
||||
}
|
||||
|
||||
serialized = $('ol.sortable').nestedSortable('serialize');
|
||||
arraied = $('ol.sortable').nestedSortable('toHierarchy', {startDepthCount: 0});
|
||||
var parameter = {
|
||||
list: arraied
|
||||
};
|
||||
reorderCall = jQuery.post("?action=reorder_category", parameter, function ( output, status, xhr ) {
|
||||
if (xhr.getResponseHeader('REQUIRES_AUTH') == 1) {
|
||||
window.location.replace("/mysyde/");
|
||||
} else {
|
||||
console.log(output);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
} catch (\Throwable $th) {
|
||||
echo $th;
|
||||
}
|
||||
23
module/ticketcenter/css/repair.css
Normal file
23
module/ticketcenter/css/repair.css
Normal file
@@ -0,0 +1,23 @@
|
||||
body.ticketcenter, body.servicecenter {
|
||||
background-image: url(/userdata/01_Basis/Intranet_bg.webp) !important;
|
||||
}
|
||||
|
||||
.ticketcenter .right_toolbar a[role="button"].active {
|
||||
border-bottom: 2px solid var(--clr-mandant);
|
||||
}
|
||||
|
||||
.ticketcenter .right_toolbar a[role="button"]:hover {
|
||||
border-bottom: 2px solid var(--clr-mandant);
|
||||
}
|
||||
|
||||
.ticketcenter .right_toolbar {
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.ticketcenter .right_toolbar a[role="button"] {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
color: var(--fc-primary);
|
||||
padding: 5px 10px;
|
||||
border-radius: 0;
|
||||
}
|
||||
183
module/ticketcenter/process.inc.php
Normal file
183
module/ticketcenter/process.inc.php
Normal file
@@ -0,0 +1,183 @@
|
||||
<?
|
||||
date_default_timezone_set('Europe/Berlin');
|
||||
|
||||
$messages = array();
|
||||
$error = FALSE;
|
||||
|
||||
|
||||
if (isset($custom_action)) {
|
||||
$action = $custom_action;
|
||||
} else {
|
||||
$action = $_REQUEST["action"];
|
||||
}
|
||||
|
||||
switch ($action) {
|
||||
case 'close_process':
|
||||
require_once("process_listform.inc.php");
|
||||
break;
|
||||
case 'load_process':
|
||||
require_once("process_listform.inc.php");
|
||||
break;
|
||||
case 'new_process' :
|
||||
require_once("process_cardform.inc.php");
|
||||
break;
|
||||
case 'edit':
|
||||
edit_process();
|
||||
break;
|
||||
case 'delete_process':
|
||||
delete_process();
|
||||
break;
|
||||
case 'save_process':
|
||||
save_process();
|
||||
break;
|
||||
default:
|
||||
require_once("process_listform.inc.php");
|
||||
break;
|
||||
}
|
||||
|
||||
function edit_process($_id = "") {
|
||||
if ((int)$_id > 0) {
|
||||
$process_id = $_id;
|
||||
} else {
|
||||
$process_id = $_REQUEST["input_process_id"];
|
||||
}
|
||||
if ($process_id <> '') {
|
||||
$query = "SELECT * FROM main_tickets_process WHERE id = '" . $process_id . "' LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$input_process = @mysqli_fetch_array($result);
|
||||
require_once("process_cardform.inc.php");
|
||||
}
|
||||
} else {
|
||||
require_once("process_cardform.inc.php");
|
||||
}
|
||||
}
|
||||
|
||||
function save_process() {
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$inserted = FALSE;
|
||||
$messages = array();
|
||||
|
||||
// var_dump($_POST["input_process_id"] );
|
||||
// die();
|
||||
|
||||
if ($_POST["input_process_id"] != '') {
|
||||
$query = "UPDATE main_tickets_process SET
|
||||
description = '" . mysqli_real_escape_string($GLOBALS['mysql_con'], $_REQUEST["input_description"]) . "'
|
||||
WHERE id = '" . $_REQUEST["input_process_id"] . "' LIMIT 1";
|
||||
|
||||
|
||||
$inserted = TRUE;
|
||||
} else {
|
||||
|
||||
|
||||
// $sorting = @mysqli_fetch_array(@mysqli_query($GLOBALS['mysql_con'], "SELECT MAX(sorting)+1 AS 'newsorting' FROM main_tickets_process"));
|
||||
// $sorting = ($sorting["newsorting"] <> "") ? $sorting = $sorting["newsorting"] : $sorting = 1;
|
||||
$query = "INSERT INTO main_tickets_process (description) VALUES ('" . $_REQUEST["input_description"] . "')";
|
||||
|
||||
$inserted = TRUE;
|
||||
|
||||
}
|
||||
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if ($inserted == TRUE) {
|
||||
$input_id = mysqli_insert_id($GLOBALS['mysql_con']);
|
||||
// If it's an update, use the existing ID
|
||||
$process_id = $_REQUEST["input_process_id"] != '' ? $_REQUEST["input_process_id"] : $input_id;
|
||||
|
||||
// Save process statuses
|
||||
save_process_statuses($process_id);
|
||||
|
||||
$messages[] = '<div class="successbox">' . $translation->get("msg_success") . '</div>';
|
||||
} else {
|
||||
$messages[] = '<div class="successbox">' . $translation->get("msg_error") . '</div>';
|
||||
}
|
||||
|
||||
if ($_REQUEST['save_and_close'] == 1) {
|
||||
require_once("process_listform.inc.php");
|
||||
} else {
|
||||
edit_process($input_id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save process statuses
|
||||
*
|
||||
* This function saves selected statuses for a process. Statuses 0, 1, 2, 3 are
|
||||
* always included with sorting values 0, 1, 2, 999 respectively. User-selected
|
||||
* statuses have sorting values between 3 and 998.
|
||||
*
|
||||
* @param int $process_id The ID of the process
|
||||
* @return bool True on success, false on failure
|
||||
*/
|
||||
function save_process_statuses($process_id) {
|
||||
if (empty($process_id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Delete existing process status associations
|
||||
$delete_query = "DELETE FROM main_tickets_process_status WHERE main_tickets_process_id = '" .
|
||||
mysqli_real_escape_string($GLOBALS['mysql_con'], $process_id) . "'";
|
||||
mysqli_query($GLOBALS['mysql_con'], $delete_query);
|
||||
|
||||
// Add mandatory statuses with fixed sorting values
|
||||
$mandatory_statuses = [
|
||||
['id' => 0, 'sorting' => 0],
|
||||
['id' => 1, 'sorting' => 1],
|
||||
['id' => 2, 'sorting' => 2],
|
||||
['id' => 3, 'sorting' => 999]
|
||||
];
|
||||
|
||||
foreach ($mandatory_statuses as $status) {
|
||||
$insert_query = "INSERT INTO main_tickets_process_status
|
||||
(main_tickets_process_id, main_tickets_status_id, sorting)
|
||||
VALUES (
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $process_id) . "',
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $status['id']) . "',
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $status['sorting']) . "'
|
||||
)";
|
||||
mysqli_query($GLOBALS['mysql_con'], $insert_query);
|
||||
}
|
||||
|
||||
// Process user-selected statuses
|
||||
if (isset($_REQUEST['selected_statuses']) && !empty($_REQUEST['selected_statuses'])) {
|
||||
$selected_statuses = json_decode($_REQUEST['selected_statuses'], true);
|
||||
|
||||
if (is_array($selected_statuses) && count($selected_statuses) > 0) {
|
||||
// Start sorting from 3
|
||||
$sort_offset = 3;
|
||||
|
||||
foreach ($selected_statuses as $index => $status) {
|
||||
// Skip mandatory statuses if they somehow got included
|
||||
if (in_array($status['id'], [0, 1, 2, 3])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Calculate sorting (between 3 and 998)
|
||||
$sorting = min(998, $sort_offset + $index);
|
||||
|
||||
$insert_query = "INSERT INTO main_tickets_process_status
|
||||
(main_tickets_process_id, main_tickets_status_id, sorting)
|
||||
VALUES (
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $process_id) . "',
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $status['id']) . "',
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $sorting) . "'
|
||||
)";
|
||||
mysqli_query($GLOBALS['mysql_con'], $insert_query);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function delete_process() {
|
||||
if ($_REQUEST["input_process_id"] <> '') {
|
||||
$query = "DELETE FROM main_tickets_process WHERE id = '" . $_REQUEST["input_process_id"]."'";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
require_once("process_listform.inc.php");
|
||||
}
|
||||
|
||||
283
module/ticketcenter/process_cardform.inc.php
Normal file
283
module/ticketcenter/process_cardform.inc.php
Normal file
@@ -0,0 +1,283 @@
|
||||
<?
|
||||
$formname = "form_process_cardform";
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$inputname = "input_id";
|
||||
|
||||
?>
|
||||
|
||||
|
||||
<div id="overlaycrumb">
|
||||
<?php if ($input_process["id"] == "") {
|
||||
echo $translation->get("new_process");
|
||||
} else {
|
||||
echo $translation->get("edit_process");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<ul class="toolbar_menu">
|
||||
<?php
|
||||
// Zurueck zur uebersicht
|
||||
button("left", $translation->get("back"), $formname, "loadCard('load_process', true)");
|
||||
|
||||
// Speichern buttons
|
||||
button("save", $translation->get("save"), $formname, "loadCard('save_process', true)");
|
||||
button("save", $translation->get("save_and_close"), $formname, "jQuery('#save_and_close', jQuery('#" . $formname . "')).val(1);loadCard('save_process', true)");
|
||||
|
||||
if ($input_process["id"] != "") {
|
||||
echo button("delete", $translation->get("delete"), $formname, "loadCard('delete_process', true, '{$translation->get('delete_process_confirm')}')");
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
|
||||
<?php
|
||||
if (!empty($messages) && is_array($messages)) {
|
||||
echo '<div id="overlayMessages">' . implode("\r\n", $messages) . '</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<form id="<?= $formname ?>" name="<?= $formname ?>" method="post">
|
||||
<input name="input_process_id" type="hidden" value="<?= $input_process["id"] ?>" />
|
||||
<input name="input_id" type="hidden" value="<?= $_REQUEST['input_id'] ?>">
|
||||
<input name="save_and_close" id="save_and_close" type="hidden" value="0" />
|
||||
|
||||
<table class="cardform" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td>
|
||||
<? input($translation->get("description"), "input_description", "text", $input_process["description"]) ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php if ($input_process["id"] != ""): ?>
|
||||
<?php
|
||||
// Function to get and display statuses for the process
|
||||
function getProcessStatuses($processId, $translation, $formname) {
|
||||
// Get all available statuses (excluding mandatory ones)
|
||||
$statuses_query = "SELECT id, description FROM main_tickets_status WHERE id NOT IN (0, 1, 2, 3) ORDER BY description";
|
||||
$statuses_result = mysqli_query($GLOBALS['mysql_con'], $statuses_query);
|
||||
$all_statuses = [];
|
||||
while ($status = mysqli_fetch_assoc($statuses_result)) {
|
||||
$all_statuses[$status['id']] = $status;
|
||||
}
|
||||
|
||||
// Get selected statuses for this process
|
||||
$selected_query = "SELECT mps.id, mps.main_tickets_status_id, mps.sorting, mts.description
|
||||
FROM main_tickets_process_status mps
|
||||
JOIN main_tickets_status mts ON mps.main_tickets_status_id = mts.id
|
||||
WHERE mps.main_tickets_process_id = '$processId'
|
||||
ORDER BY mps.sorting";
|
||||
$selected_result = mysqli_query($GLOBALS['mysql_con'], $selected_query);
|
||||
$selected_statuses = [];
|
||||
while ($selected = mysqli_fetch_assoc($selected_result)) {
|
||||
$selected_statuses[$selected['main_tickets_status_id']] = $selected;
|
||||
}
|
||||
|
||||
// Calculate available statuses (all minus selected)
|
||||
$available_statuses = array_diff_key($all_statuses, $selected_statuses);
|
||||
|
||||
// HTML output
|
||||
?>
|
||||
<tr>
|
||||
<td>
|
||||
<label><?= $translation->get("process_statuses") ?: "Process Statuses" ?></label>
|
||||
<div class="status-selector">
|
||||
<div class="status-columns">
|
||||
<div class="status-column">
|
||||
<h4><?= $translation->get("available_statuses") ?: "Available Statuses" ?></h4>
|
||||
<select multiple id="available-statuses" class="status-list">
|
||||
<?php foreach ($available_statuses as $status): ?>
|
||||
<option value="<?= $status['id'] ?>"><?= htmlspecialchars($status['description']) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<button type="button" id="add-status"><?= $translation->get("add_status") ?: "Add →" ?></button>
|
||||
</div>
|
||||
<div class="status-column">
|
||||
<h4><?= $translation->get("selected_statuses") ?: "Selected Statuses" ?></h4>
|
||||
<select multiple id="selected-statuses" class="status-list sortable">
|
||||
<?php
|
||||
// Sort selected statuses by sorting field
|
||||
usort($selected_statuses, function($a, $b) {
|
||||
return $a['sorting'] - $b['sorting'];
|
||||
});
|
||||
|
||||
foreach ($selected_statuses as $status): ?>
|
||||
<option value="<?= $status['main_tickets_status_id'] ?>"><?= htmlspecialchars($status['description']) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<button type="button" id="remove-status"><?= $translation->get("remove_status") ?: "← Remove" ?></button>
|
||||
<div style="width: 100%" class="sorting-buttons">
|
||||
<button type="button" id="move-up"><?= $translation->get("move_up") ?: "Move Up" ?></button>
|
||||
<button type="button" id="move-down"><?= $translation->get("move_down") ?: "Move Down" ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Hidden input to store selected statuses -->
|
||||
<input type="hidden" name="selected_statuses" id="selected-statuses-input" value="">
|
||||
</div>
|
||||
|
||||
<script>
|
||||
jQuery(document).ready(function($) {
|
||||
// Add status
|
||||
$("#add-status").click(function() {
|
||||
$("#available-statuses option:selected").each(function() {
|
||||
$(this).appendTo("#selected-statuses");
|
||||
});
|
||||
updateSelectedStatusesInput();
|
||||
});
|
||||
|
||||
// Remove status
|
||||
$("#remove-status").click(function() {
|
||||
$("#selected-statuses option:selected").each(function() {
|
||||
$(this).appendTo("#available-statuses");
|
||||
});
|
||||
updateSelectedStatusesInput();
|
||||
});
|
||||
|
||||
// Move up
|
||||
$("#move-up").click(function() {
|
||||
var $selected = $("#selected-statuses option:selected");
|
||||
if ($selected.length && !$selected.is(":first-child")) {
|
||||
$selected.each(function() {
|
||||
$(this).insertBefore($(this).prev());
|
||||
});
|
||||
updateSelectedStatusesInput();
|
||||
}
|
||||
});
|
||||
|
||||
// Move down
|
||||
$("#move-down").click(function() {
|
||||
var $selected = $("#selected-statuses option:selected");
|
||||
if ($selected.length && !$selected.is(":last-child")) {
|
||||
$($selected.get().reverse()).each(function() {
|
||||
$(this).insertAfter($(this).next());
|
||||
});
|
||||
updateSelectedStatusesInput();
|
||||
}
|
||||
});
|
||||
|
||||
// Update hidden input before form submission
|
||||
$("#<?= $formname ?>").on("submit", updateSelectedStatusesInput);
|
||||
|
||||
function updateSelectedStatusesInput() {
|
||||
var selectedStatuses = [];
|
||||
$("#selected-statuses option").each(function(index) {
|
||||
selectedStatuses.push({
|
||||
id: $(this).val(),
|
||||
sorting: index
|
||||
});
|
||||
});
|
||||
$("#selected-statuses-input").val(JSON.stringify(selectedStatuses));
|
||||
}
|
||||
|
||||
// Initialize
|
||||
updateSelectedStatusesInput();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.status-selector {
|
||||
margin: 15px 0;
|
||||
padding: 15px;
|
||||
background-color: #f9f9f9;
|
||||
border: 1px solid #e0e0e0;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
||||
}
|
||||
.status-columns {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.status-column {
|
||||
width: 48%;
|
||||
background: #fff;
|
||||
padding: 10px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.status-column h4 {
|
||||
margin-top: 0;
|
||||
padding-bottom: 8px;
|
||||
border-bottom: 1px solid #eee;
|
||||
color: #444;
|
||||
font-size: 14px;
|
||||
}
|
||||
.status-list {
|
||||
width: 100%;
|
||||
height: 220px;
|
||||
margin: 10px 0;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 3px;
|
||||
padding: 0;
|
||||
font-family: inherit;
|
||||
}
|
||||
.status-list option {
|
||||
padding: 6px 8px;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
}
|
||||
.status-list option:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
button {
|
||||
padding: 6px 12px;
|
||||
background: #f0f0f0;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 3px;
|
||||
color: #333;
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
transition: all 0.2s ease;
|
||||
margin-right: 5px;
|
||||
}
|
||||
button:hover {
|
||||
background: #e0e0e0;
|
||||
}
|
||||
#add-status, #remove-status {
|
||||
width: 100%;
|
||||
margin: 5px 0 10px 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
#add-status {
|
||||
background-color: #e8f5e9;
|
||||
border-color: #c8e6c9;
|
||||
}
|
||||
#add-status:hover {
|
||||
background-color: #c8e6c9;
|
||||
}
|
||||
#remove-status {
|
||||
background-color: #ffebee;
|
||||
border-color: #ffcdd2;
|
||||
}
|
||||
#remove-status:hover {
|
||||
background-color: #ffcdd2;
|
||||
}
|
||||
.sorting-buttons {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.sorting-buttons button {
|
||||
width: 48%;
|
||||
background-color: #e3f2fd;
|
||||
border-color: #bbdefb;
|
||||
}
|
||||
.sorting-buttons button:hover {
|
||||
background-color: #bbdefb;
|
||||
}
|
||||
</style>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
|
||||
// Call the function to display statuses
|
||||
getProcessStatuses($input_process["id"], $translation, $formname);
|
||||
?>
|
||||
<?php endif; ?>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
|
||||
29
module/ticketcenter/process_listform.inc.php
Normal file
29
module/ticketcenter/process_listform.inc.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$formname = "form_process_list";
|
||||
$inputname = "input_process_id";
|
||||
?>
|
||||
|
||||
<ul class="toolbar_menu">
|
||||
<?= button("new", $translation->get("new"), $formname, "loadCard('new_process', true)"); ?>
|
||||
|
||||
|
||||
</ul>
|
||||
<div id="mainContent">
|
||||
|
||||
<h1><?php echo get_translation('Process'); ?></h1>
|
||||
|
||||
<form id="<?= $formname ?>" name="<?= $formname ?>" method="post">
|
||||
<input type="hidden" class="selected_linklist_row" name="input_process_id" value="" />
|
||||
|
||||
<div class="requestLoader"></div>
|
||||
<?
|
||||
$query = "SELECT id, description AS '" . $translation->get("description") . "' FROM main_tickets_process";
|
||||
$format = array("option", "text");
|
||||
if ($result = mysqli_query($GLOBALS['mysql_con'], $query)) {
|
||||
linklist($result, "form_process_list", $format);
|
||||
}
|
||||
?>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
1324
module/ticketcenter/show_ticketcenter.inc.php
Normal file
1324
module/ticketcenter/show_ticketcenter.inc.php
Normal file
File diff suppressed because it is too large
Load Diff
42
module/ticketcenter/show_ticketcenter_ajax.php
Normal file
42
module/ticketcenter/show_ticketcenter_ajax.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
session_start();
|
||||
$currDir = __DIR__;
|
||||
$rootDir = dirname(dirname($currDir));
|
||||
$mysydeDir = $rootDir . '/mysyde';
|
||||
|
||||
require_once($rootDir . '/vendor/autoload.php');
|
||||
require_once($rootDir . "/mysyde/frontend/frontend_functions.inc.php");
|
||||
|
||||
$envDir = $rootDir . '/config';
|
||||
$envFilePath = $envDir . '/.env';
|
||||
if (is_dir($envDir) && file_exists($envFilePath) && is_file($envFilePath) && is_readable($envFilePath)) {
|
||||
$dotenv = new \Dotenv\Dotenv($envDir);
|
||||
$dotenv->load();
|
||||
}
|
||||
$common = $mysydeDir ."/common/common_functions.inc.php";
|
||||
require_once($common);
|
||||
|
||||
$connEnv = (local_environment()) ? $mysydeDir."/dc.config.php" : $mysydeDir."/dc-server.config.php";
|
||||
|
||||
require_once($connEnv);
|
||||
|
||||
db_connect();
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
$category_id = $_POST['category_id'];
|
||||
|
||||
$query = "SELECT * FROM main_tickets_category WHERE parent_id = ".$category_id." ORDER BY sorting";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (mysqli_num_rows($result) <= 0) {
|
||||
return;
|
||||
}
|
||||
echo "<div class='label'><label for='input_subcategory'>Gewerk</label></div>";
|
||||
echo "<div class='input'>";
|
||||
echo "<select name='input_subcategory' id='input_subcategory' class='select' required>";
|
||||
echo "<option value=''>Auswählen..</option>";
|
||||
while($row = @mysqli_fetch_array($result)){
|
||||
echo "<option value='".$row['id']."'>".$row['description']."</option>";
|
||||
}
|
||||
echo "</select>";
|
||||
echo "</div>";
|
||||
}
|
||||
588
module/ticketcenter/show_ticketcenter_cardform.inc.php
Normal file
588
module/ticketcenter/show_ticketcenter_cardform.inc.php
Normal file
@@ -0,0 +1,588 @@
|
||||
<?php
|
||||
$formname = "form_ticket_card";
|
||||
|
||||
if (isset($_GET['service_item_no'])) {
|
||||
$ticket['service_item_no'] = $_GET['service_item_no'];
|
||||
}
|
||||
?>
|
||||
<script type="text/javascript"
|
||||
src="/mysyde/admin/admin.js?t=<?= filemtime($_SERVER['DOCUMENT_ROOT'] . '/mysyde/admin/admin.js') ?>"></script>
|
||||
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
|
||||
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||
<form action="" id="<?= $formname ?>" name="<?= $formname ?>" method="post" enctype="multipart/form-data">
|
||||
|
||||
|
||||
<section class="cardform_content">
|
||||
<div class="container">
|
||||
<div class="titlebar">
|
||||
<?php if (isset($ticket["id"])): ?>
|
||||
<div>
|
||||
<a class="back" href="/intranet/de/ticketcenter/"><i class="fa-solid fa-arrow-left-long"></i></a>
|
||||
<h1>Ticket <?= $ticket['ticket_no'] ?></h1>
|
||||
</div>
|
||||
<div>
|
||||
<?php
|
||||
// Definiere die Aktion basierend auf dem Ticketstatus
|
||||
switch ($ticket['current_state']) {
|
||||
case 2: // Offen
|
||||
// if (get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) {
|
||||
echo button("save primary", "Ticket annehmen", $formname, "sendRequest('update_ticket', true)");
|
||||
// }
|
||||
break;
|
||||
case 3: // In Bearbeitung
|
||||
if ($ticket['receiver_id'] == $GLOBALS['main_contact']['id'] || $ticket['sender_id'] == $GLOBALS['main_contact']['id'] || get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) {
|
||||
echo button("save primary", "Ticket schließen", $formname, "sendRequest('update_ticket', true)");
|
||||
}
|
||||
break;
|
||||
case 4: // Geschlossen
|
||||
if ($ticket['receiver_id'] == $GLOBALS['main_contact']['id'] || $ticket['sender_id'] == $GLOBALS['main_contact']['id'] || get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) {
|
||||
echo button("save primary", "Wiedereröffnen", $formname, "sendRequest('update_ticket', true)");
|
||||
}
|
||||
break;
|
||||
default: // Anderer Status
|
||||
echo button("save primary", "Ticket annehmen", $formname, "sendRequest('update_ticket', true)");
|
||||
break;
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<!-- <h1>Ticket erstellen</h1> -->
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php
|
||||
if (isset($ticket["id"])) {
|
||||
?>
|
||||
<script>
|
||||
document.querySelector("body").classList.add("ticket_edit");
|
||||
</script>
|
||||
<div class="section_group">
|
||||
|
||||
<section class="cardform_section" tab-attribute="ticket" aria-current="true">
|
||||
<div class="communication">
|
||||
<div class="messages_scroll_container">
|
||||
<div class="messages">
|
||||
<?php load_messages($ticket["id"]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
if ($ticket["current_state"] != 4) {
|
||||
?>
|
||||
<div class="communication_toolbar">
|
||||
<form action="" method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" name="ticket_id" id="ticket_id" value="<?= $ticket["id"] ?>">
|
||||
<div class="send_message_inputs">
|
||||
<textarea placeholder="Nachricht schreiben..." type="text" name="send_message"
|
||||
id="send_message"></textarea>
|
||||
<?= button("send_message_button", '<i class="fa-solid fa-paper-plane" aria-hidden="true"></i>', $formname, "sendRequest('send_message', true)"); ?>
|
||||
</div>
|
||||
<div class="send_message_files">
|
||||
<input type="file" id="files" name="files">
|
||||
</div>
|
||||
<div class="send_mail_checkbox">
|
||||
<?= input("Soll die Nachricht eine E-Mail Benachrichtigung auslösen?", "input_send_email", "checkbox", $ticket['send_email']) ?>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</section>
|
||||
<aside>
|
||||
<div class="card_ticket">
|
||||
<div class="card_header">
|
||||
<div class="card_title">
|
||||
<h3><i class="fa-solid fa-circle-info"></i> Ticketstatus</h3>
|
||||
</div>
|
||||
<div class="plant_card_status">
|
||||
<span id="green"><?= $ticket['state'] ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<fieldset>
|
||||
<div class="info_labels">
|
||||
<?php if (!empty($ticket['description'])): ?>
|
||||
<label>Beschreibung
|
||||
<div><?= $ticket['description'] ?></div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
<?php
|
||||
if ($ticket['receiver_id'] == $GLOBALS['main_contact']['id'] || get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) {
|
||||
?>
|
||||
<div class="zusatzstatus">
|
||||
<?php
|
||||
if (isset($ticket["main_ticket_subsubcategory_id"]) and $ticket["main_ticket_subsubcategory_id"] > 0 ) {
|
||||
$query = "SELECT * FROM main_tickets_category_process WHERE main_tickets_category_id = " . $ticket['main_ticket_subsubcategory_id'] . " LIMIT 1;";
|
||||
} else if (isset($ticket["main_ticket_subcategory_id"]) and $ticket["main_ticket_subcategory_id"] > 0 ) {
|
||||
$query = "SELECT * FROM main_tickets_category_process WHERE main_tickets_category_id = " . $ticket['main_ticket_subcategory_id'] . " LIMIT 1;";
|
||||
} else {
|
||||
$query = "SELECT * FROM main_tickets_category_process WHERE main_tickets_category_id = " . $ticket['main_ticket_category_id'] . " LIMIT 1;";
|
||||
}
|
||||
|
||||
$result = mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (mysqli_num_rows($result) > 0) {
|
||||
$row = mysqli_fetch_assoc($result);
|
||||
$ticket['process_id'] = $row['main_tickets_process_id'];
|
||||
$query = "SELECT main_tickets_status.id, main_tickets_status.description as 'name' FROM main_tickets_status JOIN main_tickets_process_status ON main_tickets_status.id = main_tickets_process_status.main_tickets_status_id where main_tickets_process_status.main_tickets_process_id = " . $ticket['process_id'] . " ORDER BY name ASC";
|
||||
} else {
|
||||
$ticket['process_id'] = 0;
|
||||
$query = "SELECT id, description as 'name' FROM main_tickets_status ORDER BY name ASC";
|
||||
}
|
||||
|
||||
?>
|
||||
<?= input_select_from_sql("Aktueller Zusatzstatus", "input_main_tickets_status", $query, $ticket['individual_state']) ?>
|
||||
<!-- <?= button("forward_ticket", "Zusatzstatus speichern", $formname, "sendRequest('save_new_ticket_individual_state', true)"); ?> -->
|
||||
</div>
|
||||
|
||||
<!-- Tagify CSS und JS einbinden -->
|
||||
<link rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/@yaireo/tagify/dist/tagify.css">
|
||||
<script src="https://cdn.jsdelivr.net/npm/@yaireo/tagify"></script>
|
||||
|
||||
<!-- <div class="ticket-supplier-input">
|
||||
<div class="label">
|
||||
<label for="input_ticket_supliers">Lieferanten</label>
|
||||
</div>
|
||||
<input name="input_ticket_supliers" id="input_ticket_supliers"
|
||||
placeholder="Lieferanten auswählen">
|
||||
</div> -->
|
||||
|
||||
<!-- Hidden Input, in dem die ausgewählten IDs gespeichert werden -->
|
||||
<input type="hidden" name="supplier_ids" id="hidden_supplier_ids" value="">
|
||||
|
||||
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
var input = document.getElementById('input_ticket_supliers');
|
||||
var hiddenInput = document.getElementById('hidden_supplier_ids');
|
||||
|
||||
// Tagify initialisieren
|
||||
var tagify = new Tagify(input, {
|
||||
tagTextProp: 'name', // Die ausgewählten Tags zeigen den Namen an
|
||||
whitelist: <?= $supplier_list_json ?>,
|
||||
enforceWhitelist: true, // Nur Werte aus der Whitelist zulassen
|
||||
dropdown: {
|
||||
enabled: 0, // Autocomplete: Schon nach 1 Zeichen wird das Dropdown angezeigt
|
||||
closeOnSelect: false,
|
||||
maxItems: 10,
|
||||
searchKeys: ['name'] // Suche anhand des Namens
|
||||
},
|
||||
templates: {
|
||||
dropdownItem: function (tagData) {
|
||||
// Internen Attribute werden über this.getAttributes(tagData) gesetzt
|
||||
return `<div ${this.getAttributes(tagData)} class="tagify__dropdown__item">${tagData.name}</div>`;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Bereits verknüpfte Lieferanten als Initial-Tags hinzufügen
|
||||
var supplierList = <?= $supplier_list_json ?>;
|
||||
var linkedSupplierIds = <?= $linked_suppliers_json ?>;
|
||||
var initialTags = supplierList.filter(function (item) {
|
||||
return linkedSupplierIds.indexOf(parseInt(item.value)) !== -1;
|
||||
});
|
||||
tagify.addTags(initialTags);
|
||||
|
||||
// Bei jeder Änderung werden die ausgewählten IDs im Hidden Input gespeichert
|
||||
tagify.on('change', function (e) {
|
||||
var selectedIds = tagify.value.map(function (tag) {
|
||||
return tag.value;
|
||||
});
|
||||
hiddenInput.value = selectedIds.join(',');
|
||||
});
|
||||
|
||||
// Optional: Dropdown explizit öffnen, wenn etwas eingegeben wird
|
||||
input.addEventListener("input", function () {
|
||||
tagify.dropdown.show.call(tagify);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<?php if (!empty($ticket['ticket_no'])): ?>
|
||||
<label>Ticketnr.
|
||||
<div><?= $ticket['ticket_no'] ?></div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($ticket['service_item_no'])): ?>
|
||||
<?php
|
||||
$query_service_item = "SELECT service_item_no, description AS 'service_description' FROM main_service_items WHERE id = '" . $ticket['service_item_no'] . "'";
|
||||
$result = mysqli_query($GLOBALS['mysql_con'], $query_service_item);
|
||||
$row = mysqli_fetch_assoc($result)
|
||||
?>
|
||||
<label>Gerätenr.
|
||||
<div><a target="_blank" class="link"
|
||||
href="/intranet/de/geraetecenter/?action=edit&id=<?= encryptID($ticket['service_item_no']) ?>"><?= $row['service_item_no'] . ' - ' . $row['service_description'] ?></a>
|
||||
</div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($ticket['cost_center'])): ?>
|
||||
<label>Kostenstelle
|
||||
<div><?= $ticket['cost_center'] ?></div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
// Inline-Bearbeitung für Abteilung statt separatem Button/Modal
|
||||
$canEditCategory = ($ticket['receiver_id'] == $GLOBALS['main_contact']['id'] || get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1);
|
||||
if ($canEditCategory) {
|
||||
$query = "SELECT id, description as 'name' FROM main_tickets_category WHERE parent_id = 0 ORDER BY sorting";
|
||||
$selectedCategory = isset($ticket['main_ticket_category_id']) ? $ticket['main_ticket_category_id'] : (isset($ticket['category']) ? $ticket['category'] : null);
|
||||
echo input_select_from_sql("Abteilung*", "input_category", $query, $selectedCategory);
|
||||
} else if (!empty($ticket['category_description'])) { ?>
|
||||
<label>Abteilung
|
||||
<div><?= $ticket['category_description'] ?></div>
|
||||
</label>
|
||||
<?php } ?>
|
||||
|
||||
<?php if (!$canEditCategory && !empty($ticket['subcategory_description'])): ?>
|
||||
<label>Kategorie
|
||||
<div><?= $ticket['subcategory_description'] ?></div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!$canEditCategory && !empty($ticket['subsubcategory_description'])): ?>
|
||||
<label>Unterkategorie
|
||||
<div><?= $ticket['subsubcategory_description'] ?></div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
<!-- Kategorie wird nun direkt oben editierbar angezeigt; separater Bearbeiten-Button entfällt -->
|
||||
|
||||
|
||||
<?php if (!empty($ticket['sender'])): ?>
|
||||
<label>Ticketersteller
|
||||
<div><?= $ticket['sender'] ?></div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($ticket['receiver'])): ?>
|
||||
<label>Ticketbearbeiter
|
||||
<div><?= $ticket['receiver'] ?></div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
<?php
|
||||
if ($ticket['receiver_id'] == $GLOBALS['main_contact']['id'] || get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) {
|
||||
|
||||
input("Zu erledigen bis", "input_due_date", "date", $ticket['due_date']);
|
||||
// button("forward_ticket", "Datum speichern", $formname, "sendRequest('save_new_due_date', true)");
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if (!empty($ticket['link'])): ?>
|
||||
<label>Link
|
||||
<div><a target="_blank" class="link" href="<?= $ticket['link'] ?>"
|
||||
target="_blank"><?= $ticket['link'] ?></a></div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
$hasOrderLinks = false;
|
||||
for ($i = 1; $i <= 10; $i++) {
|
||||
if (!empty($ticket["order_link_$i"])) {
|
||||
$hasOrderLinks = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if ($hasOrderLinks): ?>
|
||||
<label class="order_link_text_label">Bestell-Links
|
||||
<?php for ($i = 1; $i <= 10; $i++): ?>
|
||||
<?php if (!empty($ticket["order_link_$i"])): ?>
|
||||
<div>
|
||||
<?php if (!empty($ticket["order_link_amount_$i"])): ?>
|
||||
<span class="order_link_amount">Anzahl:
|
||||
<?= htmlspecialchars($ticket["order_link_amount_$i"]) ?>x </span>
|
||||
<?php endif; ?>
|
||||
<a target="_blank" class="order_link_text"
|
||||
href="<?= htmlspecialchars($ticket["order_link_$i"]) ?>">
|
||||
<?= htmlspecialchars($ticket["order_link_$i"]) ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endfor; ?>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
|
||||
<?php if (isset($ticket["approval_by_manager"]) && $ticket["approval_by_manager"] == 1): ?>
|
||||
<label>Freigabe durch Vorgesetzten vorhanden
|
||||
<div>ja</div>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php
|
||||
if ($ticket['current_state'] != 4 && ($ticket['receiver_id'] == $GLOBALS['main_contact']['id'] || get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1)) {
|
||||
?>
|
||||
<div class="ticket_weiterleiten">
|
||||
<?php $query = "SELECT id, name as 'name' FROM main_contact ORDER BY name ASC"; ?>
|
||||
<?= input_select_from_sql("Ticket weiterleiten an", "input_new_ticket_receiver", $query, $ticket['receiver_id']) ?>
|
||||
<?= button("forward_ticket", "Ticket speichern", $formname, "sendRequest('save_forward_ticket', true)"); ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
</div>
|
||||
<?php
|
||||
|
||||
|
||||
input("ID", "input_id", "hidden", $ticket["id"]);
|
||||
input("Status", "input_state", "hidden", $ticket["current_state"]);
|
||||
|
||||
?>
|
||||
</fieldset>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
<!-- Modal für Abteilungsbearbeitung entfernt: Inline-Select wird verwendet -->
|
||||
|
||||
<?php } else { ?>
|
||||
<section class="cardform_section new_ticket">
|
||||
<script>
|
||||
document.querySelector("body").classList.add("new_ticket");
|
||||
</script>
|
||||
<fieldset>
|
||||
<h1>Ticket erstellen</h1>
|
||||
<?= input("ID", "input_id", "hidden", "") ?>
|
||||
<div class="hide">
|
||||
<?= input_ticketnumber(); ?>
|
||||
</div>
|
||||
<?php
|
||||
$ticket_description = [
|
||||
'Markt Küche',
|
||||
'Metzgerei',
|
||||
'Obst + Gemüse',
|
||||
'Bake Off',
|
||||
'MoPro',
|
||||
'TK',
|
||||
'Getränke | Spirituosen',
|
||||
'Drogerie | Non Food',
|
||||
'Sortiment',
|
||||
'Sonstiges'
|
||||
];
|
||||
?>
|
||||
<?php
|
||||
input("Betreff*", "input_description", "text", $ticket['description'])
|
||||
?>
|
||||
<?php $query = "SELECT id, description as 'name' FROM main_tickets_category WHERE parent_id = 0 ORDER BY sorting"; ?>
|
||||
<?= input_select_from_sql("Abteilung*", "input_category", $query, isset($_GET['category_id']) ? $_GET['category_id'] : null) ?>
|
||||
<?php if (get_permission_state('connect_service_items', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) {
|
||||
$query = "SELECT main_service_items.id, CONCAT(service_item_no, ' | ', description, ' | ', main_contact.name) as 'name' FROM main_service_items LEFT JOIN main_contact ON main_contact.id = main_service_items.main_contact_id";
|
||||
} else {
|
||||
$query = "SELECT id, CONCAT(service_item_no, ' | ', description) as 'name' FROM main_service_items WHERE main_contact_id = " . $GLOBALS['main_contact']['id'];
|
||||
}
|
||||
?>
|
||||
<!-- <?php $query = "SELECT id, name as 'name' FROM main_contact ORDER BY name ASC"; ?>
|
||||
<?= input_select_from_sql("Im Namen erstellen von", "input_new_ticket_sender", $query, $ticket['sender_id']) ?> -->
|
||||
|
||||
<?= input("Nachricht*", "input_message", "textarea", "", "512") ?>
|
||||
<?= input("Datei hochladen", "input_image", "file", $ticket['image']) ?>
|
||||
<?= button("create_ticket", "Ticket abschicken", $formname, "sendRequest('save', true)"); ?>
|
||||
</fieldset>
|
||||
<div class="ticket-instruction">
|
||||
<? get_content("ticket_instruction", null, $IOCContainer); ?>
|
||||
</div>
|
||||
</section>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<script>
|
||||
// if (document.querySelector(".button_create_ticket")) {
|
||||
// document.querySelector(".button_create_ticket").style.display = "none";
|
||||
|
||||
// setInterval(function() {
|
||||
// const input_subsubcategory = document.getElementById('input_subsubcategory');
|
||||
// if (input_subsubcategory) {
|
||||
// if (input_subsubcategory.value) {
|
||||
// document.querySelector(".button_create_ticket").style.display = "block";
|
||||
// } else if (input_subsubcategory.value == "") {
|
||||
// document.querySelector(".button_create_ticket").style.display = "none";
|
||||
// }
|
||||
// } else {
|
||||
// document.querySelector(".button_create_ticket").style.display = "none";
|
||||
// }
|
||||
// }, 1000);
|
||||
// }
|
||||
|
||||
</script>
|
||||
</section>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
|
||||
// Funktion zur Steuerung der Sichtbarkeit und Required-Status basierend auf der Auswahl
|
||||
function showDivBasedOnSelect(selectId, optionTexts, targetClass, isRequired = false) {
|
||||
// Alle Elemente der übergebenen Klasse standardmäßig ausblenden
|
||||
$('.' + targetClass).hide().find('input, select, textarea').prop('required', false);
|
||||
|
||||
// Eventlistener für Änderung im Select
|
||||
$('#' + selectId).on('change', function () {
|
||||
var selectedText = $('#' + selectId + ' option:selected').text().toLowerCase().trim();
|
||||
|
||||
// Flag um zu prüfen, ob es einen Match gibt
|
||||
let matchFound = false;
|
||||
|
||||
// Über alle übergebenen Optionstexte iterieren
|
||||
optionTexts.forEach(function (optionText) {
|
||||
var normalizedOptionText = optionText.toLowerCase().trim();
|
||||
if (selectedText === normalizedOptionText) {
|
||||
matchFound = true;
|
||||
}
|
||||
});
|
||||
|
||||
// Div anzeigen und "required" setzen, wenn ein Match gefunden wurde
|
||||
if (matchFound) {
|
||||
$('.' + targetClass).show();
|
||||
|
||||
// Falls isRequired aktiv ist, setze das Eingabefeld auf required
|
||||
if (isRequired) {
|
||||
$('.' + targetClass).find('input, select, textarea').prop('required', true);
|
||||
}
|
||||
} else {
|
||||
// Div ausblenden und "required" entfernen, wenn kein Match
|
||||
$('.' + targetClass).hide().find('input, select, textarea').prop('required', false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Aufrufe der Funktion mit mehreren Optionen
|
||||
// Felder anzeigen UND als Pflichtfeld markieren
|
||||
showDivBasedOnSelect('input_category', ['Bestellung-Neuanschaffung', 'Bestellung-Ersatzbeschaffung'], 'input_approval_by_manager', true);
|
||||
showDivBasedOnSelect('input_category', ['Bestellung-Neuanschaffung', 'Bestellung-Ersatzbeschaffung'], 'input_cost_center', false);
|
||||
showDivBasedOnSelect('input_category', ['Bestellung-Neuanschaffung', 'Bestellung-Ersatzbeschaffung'], 'input_order_link_1', false);
|
||||
showDivBasedOnSelect('input_category', ['Bestellung-Neuanschaffung', 'Bestellung-Ersatzbeschaffung'], 'input_order_link_amount_1', false);
|
||||
|
||||
// Felder nur anzeigen, NICHT required
|
||||
showDivBasedOnSelect('input_category', ['Fehlermeldung', 'Sonstige'], 'input_link', false);
|
||||
showDivBasedOnSelect('input_category', ['Fehlermeldung', 'Sonstige'], 'input_service_item', false);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$('#input_new_ticket_receiver').select2();
|
||||
$('#input_new_ticket_sender').select2();
|
||||
$('#input_service_item').select2();
|
||||
|
||||
function setRequiredField(elementId) {
|
||||
// Überprüfen, ob das Element mit der angegebenen ID existiert
|
||||
var element = $("#" + elementId);
|
||||
if (element.length) {
|
||||
element.attr("required", true);
|
||||
} else {
|
||||
console.warn("Element mit ID '" + elementId + "' wurde nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
// Beispielaufruf der Funktion
|
||||
setRequiredField("input_category");
|
||||
|
||||
|
||||
|
||||
// // Zuerst alle Order-Link-Container und dazugehörigen Amount-Felder ab Index 2 ausblenden
|
||||
// $('.input_order_link_2, .input_order_link_3, .input_order_link_4, .input_order_link_5, .input_order_link_6, .input_order_link_7, .input_order_link_8, .input_order_link_9, .input_order_link_10').hide();
|
||||
// $('.input_order_link_amount_2, .input_order_link_amount_3, .input_order_link_amount_4, .input_order_link_amount_5, .input_order_link_amount_6, .input_order_link_amount_7, .input_order_link_amount_8, .input_order_link_amount_9, .input_order_link_amount_10').hide();
|
||||
|
||||
|
||||
// Alle Order-Link-Container außer dem ersten initial ausblenden
|
||||
$(".order_amount_link").not(":first").hide();
|
||||
|
||||
// Delegierten Event-Handler für Link-Inputs (aber nicht für die Amount-Inputs) setzen
|
||||
$(document).on('input', 'input[name^="input_order_link_"]:not([name^="input_order_link_amount_"])', function () {
|
||||
var $this = $(this);
|
||||
console.log("Input changed:", $this.attr("name"), $this.val());
|
||||
|
||||
// Den umgebenden Container ermitteln
|
||||
var $container = $this.closest(".order_amount_link");
|
||||
var index = $(".order_amount_link").index($container);
|
||||
var $nextContainer = $(".order_amount_link").eq(index + 1);
|
||||
console.log("Aktueller Container-Index:", index, "nächster Container:", $nextContainer);
|
||||
|
||||
if ($this.val().trim() !== "") {
|
||||
// Falls der nächste Container existiert, einblenden
|
||||
if ($nextContainer.length) {
|
||||
$nextContainer.stop(true, true).fadeIn();
|
||||
}
|
||||
} else {
|
||||
// Wenn das aktuelle Feld geleert wird, alle nachfolgenden Container ausblenden und Inputs leeren
|
||||
$(".order_amount_link").slice(index + 1).each(function () {
|
||||
$(this).stop(true, true).fadeOut(function () {
|
||||
$(this).find('input').val('');
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const lastCue = sessionStorage.getItem('lastCue');
|
||||
const backLink = document.querySelector('.back');
|
||||
if (lastCue && backLink) {
|
||||
backLink.href = '/intranet/de/ticketcenter/?cue=' + lastCue;
|
||||
}
|
||||
});
|
||||
|
||||
// Preselect values only; rely on existing fetchCategoryData/getSubSubCategory to build inputs
|
||||
(function() {
|
||||
var canEditCategory = <?php echo ($ticket['receiver_id'] == $GLOBALS['main_contact']['id'] || get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) ? 'true' : 'false'; ?>;
|
||||
if (!canEditCategory) return;
|
||||
var savedCat = <?=(int)($ticket['main_ticket_category_id'] ?? $ticket['category'] ?? 0)?>;
|
||||
var savedSub = <?=(int)($ticket['main_ticket_subcategory_id'] ?? 0)?>;
|
||||
var savedSubSub = <?=(int)($ticket['main_ticket_subsubcategory_id'] ?? 0)?>;
|
||||
|
||||
function preselectChain() {
|
||||
var catSelect = document.getElementById('input_category');
|
||||
if (!catSelect || !savedCat || String(catSelect.value) !== String(savedCat)) return;
|
||||
var tries = 0;
|
||||
var t = setInterval(function() {
|
||||
var sub = document.getElementById('input_subcategory');
|
||||
if (sub) {
|
||||
if (savedSub) {
|
||||
sub.value = String(savedSub);
|
||||
// Trigger both native and jQuery change to ensure listeners run
|
||||
try { sub.dispatchEvent(new Event('change', { bubbles: true })); } catch(e) {}
|
||||
if (window.jQuery) { jQuery(sub).trigger('change'); }
|
||||
// If subsubcategory wasn't created shortly after, request it once
|
||||
setTimeout(function() {
|
||||
var subsubExisting = document.getElementById('input_subsubcategory');
|
||||
if (!subsubExisting && typeof getSubSubCategory === 'function') {
|
||||
try { getSubSubCategory(); } catch(e) {}
|
||||
}
|
||||
}, 250);
|
||||
}
|
||||
var tries2 = 0;
|
||||
var t2 = setInterval(function() {
|
||||
var subsub = document.getElementById('input_subsubcategory');
|
||||
if (subsub) {
|
||||
if (savedSubSub) {
|
||||
subsub.value = String(savedSubSub);
|
||||
if (window.jQuery) { jQuery(subsub).trigger('change'); }
|
||||
}
|
||||
clearInterval(t2);
|
||||
}
|
||||
if (++tries2 > 20) clearInterval(t2);
|
||||
}, 100);
|
||||
clearInterval(t);
|
||||
}
|
||||
if (++tries > 20) clearInterval(t);
|
||||
}, 150);
|
||||
}
|
||||
|
||||
// Try shortly after DOMContentLoaded handlers in main script
|
||||
setTimeout(preselectChain, 300);
|
||||
var catSelect = document.getElementById('input_category');
|
||||
if (catSelect) {
|
||||
catSelect.addEventListener('change', function() {
|
||||
setTimeout(preselectChain, 300);
|
||||
});
|
||||
}
|
||||
})();
|
||||
|
||||
|
||||
</script>
|
||||
35
module/ticketcenter/show_ticketcenter_category_desc_ajax.php
Normal file
35
module/ticketcenter/show_ticketcenter_category_desc_ajax.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
session_start();
|
||||
$currDir = __DIR__;
|
||||
$rootDir = dirname(dirname($currDir));
|
||||
$mysydeDir = $rootDir . '/mysyde';
|
||||
|
||||
require_once($rootDir . '/vendor/autoload.php');
|
||||
require_once($rootDir . "/mysyde/frontend/frontend_functions.inc.php");
|
||||
|
||||
$envDir = $rootDir . '/config';
|
||||
$envFilePath = $envDir . '/.env';
|
||||
if (is_dir($envDir) && file_exists($envFilePath) && is_file($envFilePath) && is_readable($envFilePath)) {
|
||||
$dotenv = new \Dotenv\Dotenv($envDir);
|
||||
$dotenv->load();
|
||||
}
|
||||
$common = $mysydeDir ."/common/common_functions.inc.php";
|
||||
require_once($common);
|
||||
|
||||
$connEnv = (local_environment()) ? $mysydeDir."/dc.config.php" : $mysydeDir."/dc-server.config.php";
|
||||
|
||||
require_once($connEnv);
|
||||
|
||||
db_connect();
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
$category_id = $_POST['category_id'];
|
||||
|
||||
$query = "SELECT * FROM main_tickets_category WHERE id = ".$category_id ." LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (mysqli_num_rows($result) <= 0) {
|
||||
return;
|
||||
}
|
||||
$category = @mysqli_fetch_array($result);
|
||||
echo $category['text'];
|
||||
}
|
||||
941
module/ticketcenter/show_ticketcenter_listform.inc.php
Normal file
941
module/ticketcenter/show_ticketcenter_listform.inc.php
Normal file
@@ -0,0 +1,941 @@
|
||||
<script type="text/javascript" src="/mysyde/admin/admin.js"></script>
|
||||
<?php
|
||||
$formname = "form_ticket_list";
|
||||
|
||||
// Enable error reporting
|
||||
// ini_set('display_errors', 1);
|
||||
// ini_set('display_startup_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
|
||||
|
||||
function load_ticket_list($cue)
|
||||
{
|
||||
|
||||
// Query to get user's department and mandant information
|
||||
$contact_info_query = "SELECT
|
||||
mcd.main_mandant_id,
|
||||
mcd.main_department_id
|
||||
FROM
|
||||
main_contact_department mcd
|
||||
WHERE
|
||||
mcd.main_contact_id = " . $GLOBALS['main_contact']['id'];
|
||||
|
||||
$contact_info_result = mysqli_query($GLOBALS['mysql_con'], $contact_info_query);
|
||||
|
||||
$mandant_ids = [];
|
||||
$department_ids = [];
|
||||
|
||||
while ($contact_info = mysqli_fetch_assoc($contact_info_result)) {
|
||||
if (!empty($contact_info['main_mandant_id']) && !in_array($contact_info['main_mandant_id'], $mandant_ids)) {
|
||||
$mandant_ids[] = $contact_info['main_mandant_id'];
|
||||
}
|
||||
|
||||
if (!empty($contact_info['main_department_id']) && !in_array($contact_info['main_department_id'], $department_ids)) {
|
||||
$department_ids[] = $contact_info['main_department_id'];
|
||||
}
|
||||
}
|
||||
|
||||
// For debugging
|
||||
// echo "User Mandant IDs: " . implode(', ', $mandant_ids) . "<br>";
|
||||
// echo "User Department IDs: " . implode(', ', $department_ids) . "<br>";
|
||||
|
||||
// Store the result in contact_info for compatibility with existing code
|
||||
$contact_info = [
|
||||
'mandant_ids' => implode(', ', $mandant_ids),
|
||||
'department_ids' => implode(', ', $department_ids)
|
||||
];
|
||||
|
||||
$join = "";
|
||||
$additional_joins = "";
|
||||
$additional_where = "";
|
||||
if (isset($cue)) {
|
||||
switch ($cue) {
|
||||
case '1000': // Meine offenen und in bearbeitung Tickets
|
||||
$where = " WHERE sender_id = " . $GLOBALS['main_contact']['id'] . " AND current_state != 4";
|
||||
break;
|
||||
case '1500': // Meine offenen und in bearbeitung Tickets
|
||||
$where = " WHERE receiver_id = " . $GLOBALS['main_contact']['id'] . " AND current_state != 4";
|
||||
break;
|
||||
|
||||
case '2000': // Offene Tickets der Abteilung
|
||||
// $join = " LEFT JOIN main_contact_department ON main_contact_department.main_contact_id = main_tickets.receiver_id";
|
||||
// $where = " WHERE current_state != 4 AND (main_contact_department.main_mandant_id =" . $GLOBALS['main_contact']['master_mandant_id'] . " OR main_tickets_category.main_mandant_id = " . $GLOBALS['main_contact']['master_mandant_id'] . ")";
|
||||
$where = " WHERE 1=1 and current_state != 4 and receiver_id = 0";
|
||||
// Only add these joins for case 2000
|
||||
// $additional_joins = "
|
||||
// -- Category contact, department, mandant joins
|
||||
// LEFT JOIN main_tickets_category_contact cat_contact
|
||||
// ON main_tickets.main_ticket_category_id = cat_contact.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id = 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
// LEFT JOIN main_tickets_category_department cat_dept
|
||||
// ON main_tickets.main_ticket_category_id = cat_dept.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id = 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
// LEFT JOIN main_tickets_category_mandant cat_mandant
|
||||
// ON main_tickets.main_ticket_category_id = cat_mandant.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id = 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
|
||||
// -- Subcategory contact, department, mandant joins
|
||||
// LEFT JOIN main_tickets_category_contact subcat_contact
|
||||
// ON main_tickets.main_ticket_subcategory_id = subcat_contact.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id != 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
// LEFT JOIN main_tickets_category_department subcat_dept
|
||||
// ON main_tickets.main_ticket_subcategory_id = subcat_dept.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id != 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
// LEFT JOIN main_tickets_category_mandant subcat_mandant
|
||||
// ON main_tickets.main_ticket_subcategory_id = subcat_mandant.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id != 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
|
||||
// -- Subsubcategory contact, department, mandant joins
|
||||
// LEFT JOIN main_tickets_category_contact subsubcat_contact
|
||||
// ON main_tickets.main_ticket_subsubcategory_id = subsubcat_contact.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subsubcategory_id != 0
|
||||
// LEFT JOIN main_tickets_category_department subsubcat_dept
|
||||
// ON main_tickets.main_ticket_subsubcategory_id = subsubcat_dept.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subsubcategory_id != 0
|
||||
// LEFT JOIN main_tickets_category_mandant subsubcat_mandant
|
||||
// ON main_tickets.main_ticket_subsubcategory_id = subsubcat_mandant.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subsubcategory_id != 0
|
||||
// ";
|
||||
|
||||
// Only add these conditions for case 2000
|
||||
// $additional_where = "
|
||||
// OR current_state != 4 AND (
|
||||
// -- For tickets with a category but no subcategory and no subsubcategory
|
||||
// main_tickets.main_ticket_subcategory_id = 0 AND
|
||||
// main_tickets.main_ticket_subsubcategory_id = 0 AND (
|
||||
// cat_contact.main_contact_id = " . $GLOBALS['main_contact']['id'] . " OR
|
||||
// cat_dept.main_department_id IN (" . ($contact_info['department_ids'] ?: "0") . ") OR
|
||||
// cat_mandant.main_mandant_id IN (" . ($contact_info['mandant_ids'] ?: "0") . ")
|
||||
// )
|
||||
// ) OR current_state != 4 AND (
|
||||
// -- For tickets with a subcategory but no subsubcategory
|
||||
// main_tickets.main_ticket_subcategory_id != 0 AND
|
||||
// main_tickets.main_ticket_subsubcategory_id = 0 AND (
|
||||
// subcat_contact.main_contact_id = " . $GLOBALS['main_contact']['id'] . " OR
|
||||
// subcat_dept.main_department_id IN (" . ($contact_info['department_ids'] ?: "0") . ") OR
|
||||
// subcat_mandant.main_mandant_id IN (" . ($contact_info['mandant_ids'] ?: "0") . ")
|
||||
// )
|
||||
// ) OR current_state != 4 AND (
|
||||
// -- For tickets with a subsubcategory (ignore category and subcategory)
|
||||
// main_tickets.main_ticket_subsubcategory_id != 0 AND (
|
||||
// subsubcat_contact.main_contact_id = " . $GLOBALS['main_contact']['id'] . " OR
|
||||
// subsubcat_dept.main_department_id IN (" . ($contact_info['department_ids'] ?: "0") . ") OR
|
||||
// subsubcat_mandant.main_mandant_id IN (" . ($contact_info['mandant_ids'] ?: "0") . ")
|
||||
// )
|
||||
// )
|
||||
// ";
|
||||
break;
|
||||
|
||||
case '2500': // Offene Tickets der Abteilung
|
||||
// $join = " LEFT JOIN main_contact_department ON main_contact_department.main_contact_id = main_tickets.receiver_id";
|
||||
// $where = " WHERE current_state != 4 AND (main_contact_department.main_mandant_id =" . $GLOBALS['main_contact']['master_mandant_id'] . " OR main_tickets_category.main_mandant_id = " . $GLOBALS['main_contact']['master_mandant_id'] . ")";
|
||||
$where = " WHERE 1=1 and current_state != 4";
|
||||
// Only add these joins for case 2000
|
||||
// $additional_joins = "
|
||||
// -- Category contact, department, mandant joins
|
||||
// LEFT JOIN main_tickets_category_contact cat_contact
|
||||
// ON main_tickets.main_ticket_category_id = cat_contact.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id = 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
// LEFT JOIN main_tickets_category_department cat_dept
|
||||
// ON main_tickets.main_ticket_category_id = cat_dept.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id = 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
// LEFT JOIN main_tickets_category_mandant cat_mandant
|
||||
// ON main_tickets.main_ticket_category_id = cat_mandant.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id = 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
|
||||
// -- Subcategory contact, department, mandant joins
|
||||
// LEFT JOIN main_tickets_category_contact subcat_contact
|
||||
// ON main_tickets.main_ticket_subcategory_id = subcat_contact.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id != 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
// LEFT JOIN main_tickets_category_department subcat_dept
|
||||
// ON main_tickets.main_ticket_subcategory_id = subcat_dept.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id != 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
// LEFT JOIN main_tickets_category_mandant subcat_mandant
|
||||
// ON main_tickets.main_ticket_subcategory_id = subcat_mandant.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subcategory_id != 0
|
||||
// AND main_tickets.main_ticket_subsubcategory_id = 0
|
||||
|
||||
// -- Subsubcategory contact, department, mandant joins
|
||||
// LEFT JOIN main_tickets_category_contact subsubcat_contact
|
||||
// ON main_tickets.main_ticket_subsubcategory_id = subsubcat_contact.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subsubcategory_id != 0
|
||||
// LEFT JOIN main_tickets_category_department subsubcat_dept
|
||||
// ON main_tickets.main_ticket_subsubcategory_id = subsubcat_dept.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subsubcategory_id != 0
|
||||
// LEFT JOIN main_tickets_category_mandant subsubcat_mandant
|
||||
// ON main_tickets.main_ticket_subsubcategory_id = subsubcat_mandant.main_tickets_category_id
|
||||
// AND main_tickets.main_ticket_subsubcategory_id != 0
|
||||
// ";
|
||||
|
||||
// Only add these conditions for case 2000
|
||||
// $additional_where = "
|
||||
// OR current_state != 4 AND (
|
||||
// -- For tickets with a category but no subcategory and no subsubcategory
|
||||
// main_tickets.main_ticket_subcategory_id = 0 AND
|
||||
// main_tickets.main_ticket_subsubcategory_id = 0 AND (
|
||||
// cat_contact.main_contact_id = " . $GLOBALS['main_contact']['id'] . " OR
|
||||
// cat_dept.main_department_id IN (" . ($contact_info['department_ids'] ?: "0") . ") OR
|
||||
// cat_mandant.main_mandant_id IN (" . ($contact_info['mandant_ids'] ?: "0") . ")
|
||||
// )
|
||||
// ) OR current_state != 4 AND (
|
||||
// -- For tickets with a subcategory but no subsubcategory
|
||||
// main_tickets.main_ticket_subcategory_id != 0 AND
|
||||
// main_tickets.main_ticket_subsubcategory_id = 0 AND (
|
||||
// subcat_contact.main_contact_id = " . $GLOBALS['main_contact']['id'] . " OR
|
||||
// subcat_dept.main_department_id IN (" . ($contact_info['department_ids'] ?: "0") . ") OR
|
||||
// subcat_mandant.main_mandant_id IN (" . ($contact_info['mandant_ids'] ?: "0") . ")
|
||||
// )
|
||||
// ) OR current_state != 4 AND (
|
||||
// -- For tickets with a subsubcategory (ignore category and subcategory)
|
||||
// main_tickets.main_ticket_subsubcategory_id != 0 AND (
|
||||
// subsubcat_contact.main_contact_id = " . $GLOBALS['main_contact']['id'] . " OR
|
||||
// subsubcat_dept.main_department_id IN (" . ($contact_info['department_ids'] ?: "0") . ") OR
|
||||
// subsubcat_mandant.main_mandant_id IN (" . ($contact_info['mandant_ids'] ?: "0") . ")
|
||||
// )
|
||||
// )
|
||||
// ";
|
||||
break;
|
||||
|
||||
case '3000': // Alle geschlossenen Tickets
|
||||
$join = " LEFT JOIN main_contact_department ON main_contact_department.main_contact_id = main_tickets.receiver_id";
|
||||
$where = " WHERE main_tickets.current_state = 4 AND ((main_contact_department.main_mandant_id =" . $GLOBALS['main_contact']['master_mandant_id'] . " OR main_contact_department.main_mandant_id IS NULL) OR main_tickets.sender_id = " . $GLOBALS['main_contact']['id'] . " )";
|
||||
break;
|
||||
case '4000': // Alle Tickets ungefiltert
|
||||
// Fix for case 4000 - set a valid WHERE clause that's always true
|
||||
$where = " WHERE 1=1";
|
||||
break;
|
||||
case '5000': // Alle Tickets die Eskalieren (die zu lange offen/in Bearbeitung sind)
|
||||
$where = " WHERE due_date <> '0000-00-00' AND due_date < CURDATE() AND current_state IN (2, 3)";
|
||||
break;
|
||||
case '6000': // Alle Tickets die Eskalieren (die zu lange offen/in Bearbeitung sind)
|
||||
$join = " LEFT JOIN main_contact_department ON main_contact_department.main_contact_id = main_tickets.receiver_id";
|
||||
$where = " WHERE receiver_id = 0 ";
|
||||
// $where = " WHERE receiver_id = 0 AND main_contact_department.main_mandant_id =".$GLOBALS['main_contact']['master_mandant_id'];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$where = " WHERE (receiver_id = " . $GLOBALS['main_contact']['id'] . " OR sender_id = " . $GLOBALS['main_contact']['id'] . " ) AND current_state != 4";
|
||||
}
|
||||
|
||||
$query = "SELECT DISTINCT
|
||||
main_tickets.*,
|
||||
main_tickets_category.description AS 'category_description',
|
||||
COALESCE(main_tickets_subsubcategory.escalation_state, main_tickets_subcategory.escalation_state, main_tickets_category.escalation_state) AS 'escalation_state',
|
||||
individual_state.description AS 'individual_state_description',
|
||||
main_tickets_subcategory.description AS 'subcategory_description',
|
||||
main_tickets_subsubcategory.description AS 'subsubcategory_description',
|
||||
receiver.name AS 'receiver',
|
||||
sender.name AS 'sender',
|
||||
|
||||
main_tickets_state.description AS 'state',
|
||||
DATE_ADD(main_tickets.creation_date, INTERVAL COALESCE(main_tickets_subsubcategory.escalation_state, main_tickets_subcategory.escalation_state, main_tickets_category.escalation_state) DAY) AS 'escalation'
|
||||
FROM
|
||||
main_tickets
|
||||
" . $join . "
|
||||
LEFT JOIN main_contact AS receiver ON receiver.id = main_tickets.receiver_id
|
||||
LEFT JOIN main_contact AS sender ON sender.id = main_tickets.sender_id
|
||||
LEFT JOIN main_tickets_status AS individual_state ON individual_state.id = main_tickets.individual_state
|
||||
LEFT JOIN main_tickets_category ON main_tickets.main_ticket_category_id = main_tickets_category.id
|
||||
LEFT JOIN main_tickets_category AS main_tickets_subcategory ON main_tickets.main_ticket_subcategory_id = main_tickets_subcategory.id
|
||||
LEFT JOIN main_tickets_category AS main_tickets_subsubcategory ON main_tickets.main_ticket_subsubcategory_id = main_tickets_subsubcategory.id
|
||||
LEFT JOIN main_tickets_state ON main_tickets.current_state = main_tickets_state.id
|
||||
" . $additional_joins . "
|
||||
WHERE
|
||||
(" . substr($where, 7) . ")
|
||||
" . $additional_where . "
|
||||
ORDER BY
|
||||
ticket_no DESC;";
|
||||
// var_dump($query);
|
||||
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
while ($row = @mysqli_fetch_array($result)) {
|
||||
// var_dump($row);
|
||||
if ($cue == 2000) {
|
||||
if (checkUserPermission($row, $contact_info) == false) {
|
||||
continue; // Skip this row if the user doesn't have permission
|
||||
}
|
||||
}
|
||||
// var_dump("-----");
|
||||
// print_r($row);
|
||||
$unread = "";
|
||||
$query2 = "SELECT * FROM main_tickets_notification
|
||||
WHERE main_ticket_id = " . $row['id'] . " AND main_contact_id = " . $GLOBALS['main_contact']['id'] . " AND viewed = 0";
|
||||
// var_dump($query2);
|
||||
$result2 = @mysqli_query($GLOBALS['mysql_con'], $query2);
|
||||
$viewed = @mysqli_num_rows($result2);
|
||||
if ($viewed != 0) {
|
||||
$unread = '<i class="fa-solid fa-circle-exclamation"></i>';
|
||||
}
|
||||
$creation_date = new DateTime($row['creation_date']);
|
||||
$last_action = new DateTime($row['last_action_date']);
|
||||
$escalation = new DateTime($row['escalation']);
|
||||
$now = new DateTime(); // Aktuelles Datum und Uhrzeit
|
||||
$escalated = "";
|
||||
if ($escalation < $now && (isset($row['escalation_state']) && $row['escalation_state'] != "0")) {
|
||||
$escalated = "escalated";
|
||||
}
|
||||
?>
|
||||
<tr id="item_<?= $row['id'] ?>" class='list_item <?= $escalated ?>' data-checked="false" data-inputname="input_id"
|
||||
data-action="edit" data-inputid="<?= encryptId($row['id']) ?>">
|
||||
<td><?= $unread ?></td>
|
||||
<td class=ticket_numb><?= $row['ticket_no'] ?></td>
|
||||
<td>
|
||||
<div class="status_container">
|
||||
<span class="<?= $row['state'] ?>"><?= $row['state'] ?></span>
|
||||
<?php if (!empty($row['individual_state_description'])): ?>
|
||||
<span class="individual_state_span"><?= $row['individual_state_description'] ?></span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</td>
|
||||
<td><?= "1. " . $row['category_description'] . "<br>"?>
|
||||
<?= !empty($row['subcategory_description']) ? "2. " . $row['subcategory_description'] . "<br>" : '' ?>
|
||||
<?= !empty($row['subsubcategory_description']) ? "3. " . $row['subsubcategory_description'] : '' ?>
|
||||
</td>
|
||||
<td><?= $row['description'] ?></td>
|
||||
<td><?= $row['sender'] ?></td>
|
||||
|
||||
<td><?= $row['receiver'] ?></td>
|
||||
<td><?= $creation_date->format('d.m.y H:i') ?></td>
|
||||
<td><?= $last_action->format('d.m.y H:i') ?></td>
|
||||
<td>
|
||||
<?php
|
||||
if ($row['due_date'] != "0000-00-00") {
|
||||
// var_dump($due_date);
|
||||
$due_date = new DateTime($row['due_date']);
|
||||
if ($due_date > $now) {
|
||||
echo $due_date->format('d.m.y');
|
||||
} else {
|
||||
echo '<span class="overdue">' . $due_date->format('d.m.y') . '</span>';
|
||||
}
|
||||
} else {
|
||||
echo '--.--.--';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td><?php
|
||||
$now = new DateTime(); // Current date and time
|
||||
$creation = clone $creation_date; // Clone to avoid modifying the original
|
||||
$interval = $now->diff($creation);
|
||||
|
||||
if ($interval->y > 0) {
|
||||
echo $interval->y . ' Jahre, ' . $interval->m . ' Monate';
|
||||
} elseif ($interval->m > 0) {
|
||||
echo $interval->m . ' Monate, ' . $interval->d . ' Tage';
|
||||
} elseif ($interval->d > 0) {
|
||||
echo $interval->d . ' Tage, ' . $interval->h . ' Std';
|
||||
} elseif ($interval->h > 0) {
|
||||
echo $interval->h . ' Std, ' . $interval->i . ' Min';
|
||||
} else {
|
||||
echo $interval->i . ' Minuten';
|
||||
}
|
||||
?></td>
|
||||
|
||||
|
||||
|
||||
<?php if ($cue == 5000) { ?>
|
||||
<td>
|
||||
<?php if (isset($row['escalation_state']) && $row['escalation_state'] != "0") {
|
||||
echo $escalation->format('d.m.y H:i');
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<?php } ?>
|
||||
<?php if ($cue == 7000 || $cue == 8000) { ?>
|
||||
<td>
|
||||
<?php
|
||||
$supplierQuery = "SELECT s.description
|
||||
FROM main_ticket_suplier l
|
||||
LEFT JOIN main_tickets_supliers s ON l.main_ticket_suplier_id = s.id
|
||||
WHERE l.main_ticket_id = " . (int) $row['id'];
|
||||
$supplierResult = mysqli_query($GLOBALS['mysql_con'], $supplierQuery);
|
||||
?>
|
||||
<div class="suppliers">
|
||||
<?php
|
||||
while ($supplier = mysqli_fetch_assoc($supplierResult)) {
|
||||
echo '<span class="ticket_supplier">' . htmlspecialchars($supplier['description']) . '</span> ';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<?php } ?>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
function checkUserPermission($row, $contact_info) {
|
||||
$category_keys = [
|
||||
'main_ticket_subsubcategory_id',
|
||||
'main_ticket_subcategory_id',
|
||||
'main_ticket_category_id'
|
||||
];
|
||||
|
||||
foreach ($category_keys as $key) {
|
||||
if (isset($row[$key]) && $row[$key] != 0) {
|
||||
$category_id = $row[$key];
|
||||
|
||||
// 1. Direct contact match
|
||||
$contacts = getContactsByCategory($category_id);
|
||||
if (in_array($GLOBALS['main_contact']['id'], $contacts)) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 2. Department and mandant matching
|
||||
$departments = getDepartmentsByCategory($category_id);
|
||||
$mandants = getMandantsByCategory($category_id);
|
||||
// var_dump($mandants);
|
||||
// var_dump($departments);
|
||||
// var_dump($mandants);
|
||||
// $userDepartments = array_map('trim', explode(',', $contact_info['department_ids']));
|
||||
// $userMandants = array_map('trim', explode(',', $contact_info['mandant_ids']));
|
||||
|
||||
// $hasDepartments = !empty($departments) && $departments != [0];
|
||||
// $hasMandants = !empty($mandants) && $mandants != [0];
|
||||
|
||||
// $departmentMatch = !$hasDepartments || count(array_intersect($userDepartments, $departments)) > 0;
|
||||
// $mandantMatch = !$hasMandants || count(array_intersect($userMandants, $mandants)) > 0;
|
||||
// // Check if the user has access to the department and mandant
|
||||
// if ($departmentMatch && $mandantMatch) {
|
||||
// return true;
|
||||
// }
|
||||
|
||||
// 3. Check if the user has access to the department and mandant
|
||||
// $array_dep_mand = [];
|
||||
// foreach ($departments as $department) {
|
||||
// foreach ($mandants as $mandant) {
|
||||
// $dep_mand_bind = [
|
||||
// 'department' => $department,
|
||||
// 'mandant' => $mandant
|
||||
// ];
|
||||
// $array_dep_mand[] = $dep_mand_bind;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
if (empty($departments) and empty($mandants)){
|
||||
return false;
|
||||
} else if (empty($mandants)) {
|
||||
$query = "SELECT * FROM main_contact_department WHERE main_contact_id = " . $GLOBALS['main_contact']['id'] . "
|
||||
AND main_department_id IN (" . implode(',', $departments) . ")";
|
||||
} else if (empty($departments)) {
|
||||
$query = "SELECT * FROM main_contact_department WHERE main_contact_id = " . $GLOBALS['main_contact']['id'] . "
|
||||
AND main_department_id IN (" . implode(',', $departments) . ")";
|
||||
} else {
|
||||
$query = "SELECT * FROM main_contact_department WHERE main_contact_id = " . $GLOBALS['main_contact']['id'] . " AND main_mandant_id IN (" . implode(',', $mandants) . ") AND main_department_id IN (" . implode(',', $departments) . ")";
|
||||
}
|
||||
|
||||
// var_dump($query);
|
||||
|
||||
// var_dump($query);
|
||||
$result = mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
|
||||
|
||||
if (mysqli_num_rows($result) > 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
// If we checked one level and didn't find a match - don't exit, continue to the next one
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 1000: Meine offenen und in Bearbeitung Tickets
|
||||
$query_count_1000 = "SELECT COUNT(*) FROM main_tickets WHERE (receiver_id = " . $GLOBALS['main_contact']['id'] . " OR sender_id = " . $GLOBALS['main_contact']['id'] . " ) AND current_state != 4";
|
||||
$result_1000 = mysqli_fetch_array(mysqli_query($GLOBALS['mysql_con'], $query_count_1000))[0];
|
||||
|
||||
// 2000: Offene Tickets der Abteilung
|
||||
$query_count_2000 = "SELECT COUNT(DISTINCT main_tickets.id)
|
||||
FROM main_tickets
|
||||
LEFT JOIN main_contact_department ON main_contact_department.main_contact_id = main_tickets.receiver_id
|
||||
LEFT JOIN main_tickets_category ON main_tickets.main_ticket_category_id = main_tickets_category.id
|
||||
WHERE current_state != 4
|
||||
AND (
|
||||
main_contact_department.main_mandant_id = " . $GLOBALS['main_contact']['master_mandant_id'] . "
|
||||
OR main_tickets_category.main_mandant_id = " . $GLOBALS['main_contact']['master_mandant_id'] . "
|
||||
)";
|
||||
$result_2000 = mysqli_fetch_array(mysqli_query($GLOBALS['mysql_con'], $query_count_2000))[0];
|
||||
|
||||
// 3000: Alle geschlossenen Tickets
|
||||
$query_count_3000 = "SELECT COUNT(*) FROM main_tickets WHERE current_state = 4";
|
||||
$result_3000 = mysqli_fetch_array(mysqli_query($GLOBALS['mysql_con'], $query_count_3000))[0];
|
||||
|
||||
// 4000: Alle Tickets ungefiltert
|
||||
$query_count_4000 = "SELECT COUNT(*) FROM main_tickets";
|
||||
$result_4000 = mysqli_fetch_array(mysqli_query($GLOBALS['mysql_con'], $query_count_4000))[0];
|
||||
|
||||
// 5000: Alle eskalierenden Tickets (zu lange offen/in Bearbeitung)
|
||||
$query_count_5000 = "SELECT COUNT(*)
|
||||
FROM main_tickets
|
||||
LEFT JOIN main_tickets_category ON main_tickets.main_ticket_category_id = main_tickets_category.id
|
||||
LEFT JOIN main_tickets_category AS main_tickets_subcategory ON main_tickets.main_ticket_subcategory_id = main_tickets_subcategory.id
|
||||
WHERE DATE_ADD(main_tickets.creation_date, INTERVAL COALESCE(main_tickets_subcategory.escalation_state, main_tickets_category.escalation_state) DAY) < NOW()
|
||||
AND main_tickets.current_state IN (2, 3)";
|
||||
$result_5000 = mysqli_fetch_array(mysqli_query($GLOBALS['mysql_con'], $query_count_5000))[0];
|
||||
|
||||
// 6000: Alle nicht zugewiesenen Tickets
|
||||
$query_count_6000 = "SELECT COUNT(*) FROM main_tickets WHERE receiver_id = 0";
|
||||
$result_6000 = mysqli_fetch_array(mysqli_query($GLOBALS['mysql_con'], $query_count_6000))[0];
|
||||
|
||||
// 7000: // Alle Tickets die im Bereich Einkauf sind (holen wir über main_mandant_id aus main_tickets_category = 15)
|
||||
$query_count_7000 = "SELECT COUNT(*)
|
||||
FROM main_tickets
|
||||
LEFT JOIN main_tickets_category ON main_tickets.main_ticket_category_id = main_tickets_category.id
|
||||
LEFT JOIN main_tickets_category AS main_tickets_subcategory ON main_tickets.main_ticket_subcategory_id = main_tickets_subcategory.id
|
||||
WHERE main_tickets_category.main_mandant_id = 15
|
||||
OR main_tickets_subcategory.main_mandant_id = 15 AND main_tickets.current_state != 4";
|
||||
$result_7000 = mysqli_fetch_array(mysqli_query($GLOBALS['mysql_con'], $query_count_7000))[0];
|
||||
|
||||
// 8000: // Alle Tickets die im Bereich Einkauf sind (holen wir über main_mandant_id aus main_tickets_category = 15)
|
||||
$query_count_8000 = "SELECT COUNT(*)
|
||||
FROM main_tickets
|
||||
LEFT JOIN main_tickets_category ON main_tickets.main_ticket_category_id = main_tickets_category.id
|
||||
LEFT JOIN main_tickets_category AS main_tickets_subcategory ON main_tickets.main_ticket_subcategory_id = main_tickets_subcategory.id
|
||||
WHERE main_tickets_category.main_mandant_id = 15
|
||||
OR main_tickets_subcategory.main_mandant_id = 15 AND main_tickets.current_state = 4";
|
||||
$result_8000 = mysqli_fetch_array(mysqli_query($GLOBALS['mysql_con'], $query_count_8000))[0];
|
||||
?>
|
||||
|
||||
|
||||
<form action="" id="<?= $formname ?>" name="<?= $formname ?>" method="post">
|
||||
<!-- DataTables -->
|
||||
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.2/semantic.min.css" /> -->
|
||||
<link rel="stylesheet" href="https://cdn.datatables.net/searchbuilder/1.8.0/css/searchBuilder.dataTables.css" />
|
||||
<link rel="stylesheet" href="https://cdn.datatables.net/2.0.2/css/dataTables.semanticui.css" />
|
||||
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/3.0.0/css/responsive.semanticui.css" />
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
|
||||
|
||||
<link
|
||||
href="https://cdn.datatables.net/v/se/jszip-3.10.1/dt-2.0.2/af-2.7.0/b-3.0.1/b-colvis-3.0.1/b-html5-3.0.1/b-print-3.0.1/cr-2.0.0/date-1.5.2/fc-5.0.0/fh-4.0.1/kt-2.12.0/r-3.0.0/rg-1.5.0/rr-1.5.0/sc-2.4.1/sb-1.7.0/sp-2.3.0/sl-2.0.0/sr-1.4.0/datatables.min.css"
|
||||
rel="stylesheet">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.2/semantic.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.2/moment.min.js"></script>
|
||||
<script src="https://cdn.datatables.net/datetime/1.5.2/js/dataTables.dateTime.min.js"></script>
|
||||
<script src="https://cdn.datatables.net/searchbuilder/1.8.0/js/searchBuilder.dataTables.js"></script>
|
||||
<script src="https://cdn.datatables.net/searchbuilder/1.8.0/js/dataTables.searchBuilder.js"></script>
|
||||
<script
|
||||
src="https://cdn.datatables.net/v/se/jszip-3.10.1/dt-2.0.2/af-2.7.0/b-3.0.1/b-colvis-3.0.1/b-html5-3.0.1/b-print-3.0.1/cr-2.0.0/date-1.5.2/fc-5.0.0/fh-4.0.1/kt-2.12.0/r-3.0.0/rg-1.5.0/rr-1.5.0/sc-2.4.1/sb-1.7.0/sp-2.3.0/sl-2.0.0/sr-1.4.0/datatables.min.js"></script>
|
||||
<script src="https://cdn.datatables.net/2.0.2/js/dataTables.semanticui.js"></script>
|
||||
<script src="https://cdn.datatables.net/responsive/3.0.0/js/dataTables.responsive.js"></script>
|
||||
<script src="https://cdn.datatables.net/responsive/3.0.0/js/responsive.semanticui.js"></script>
|
||||
<script src="https://cdn.datatables.net/buttons/3.0.2/js/dataTables.buttons.js"></script>
|
||||
<script src="https://cdn.datatables.net/buttons/3.0.2/js/buttons.semanticui.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>
|
||||
<script src="https://cdn.datatables.net/buttons/3.0.2/js/buttons.html5.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
|
||||
|
||||
|
||||
<div class="loading" aria-busy="true"></div>
|
||||
<input type='hidden' class='selected_linklist_row' name='input_id' value=''>
|
||||
<div class="toolbar">
|
||||
<div class="container">
|
||||
<!-- <div class="right_toolbar">
|
||||
<a role="button" class="secondary" href="?cue=1000">
|
||||
Meine Tickets <span class="badge">(<?= $result_1000 ?>)</span>
|
||||
</a>
|
||||
<a role="button" class="secondary" href="?cue=2000">
|
||||
Abteilungstickets <span class="badge">(<?= $result_2000 ?>)</span>
|
||||
</a>
|
||||
<a role="button" class="secondary" href="?cue=3000">
|
||||
Archiv <span class="badge">(<?= $result_3000 ?>)</span>
|
||||
</a>
|
||||
|
||||
<?php if (get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) { ?>
|
||||
<a role="button" class="secondary" href="?cue=4000">
|
||||
Alle Tickets <span class="badge">(<?= $result_4000 ?>)</span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
|
||||
<?php if (get_permission_state('escalated_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) { ?>
|
||||
<a role="button" class="secondary" href="?cue=5000">
|
||||
Eskalierte Tickets <span class="badge">(<?= $result_5000 ?>)</span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
|
||||
<?php if (get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) { ?>
|
||||
<a role="button" class="secondary" href="?cue=6000">
|
||||
Nicht zugewiesene Tickets <span class="badge">(<?= $result_6000 ?>)</span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
</div> -->
|
||||
<div class="right_toolbar">
|
||||
<a role="button" class="secondary" href="?cue=1000">
|
||||
Von mir erstellt <span class="badge"></span>
|
||||
</a>
|
||||
<a role="button" class="secondary" href="?cue=1500">
|
||||
Zu bearbeitende Tickets <span class="badge"></span>
|
||||
</a>
|
||||
<a role="button" class="secondary" href="?cue=2000">
|
||||
Ticket Pool <span class="badge"></span>
|
||||
</a>
|
||||
<a role="button" class="secondary" href="?cue=2500">
|
||||
Ticket Übersicht <span class="badge"></span>
|
||||
</a>
|
||||
<a role="button" class="secondary" href="?cue=3000">
|
||||
Archiv <span class="badge"></span>
|
||||
</a>
|
||||
<?php if (get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) { ?>
|
||||
<a role="button" class="secondary" href="?cue=4000">
|
||||
Alle Tickets <span class="badge"></span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
<?php if (get_permission_state('escalated_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) { ?>
|
||||
<a role="button" class="secondary" href="?cue=5000">
|
||||
Eskalierte Tickets <span class="badge"></span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
|
||||
<?php if (get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) { ?>
|
||||
<a role="button" class="secondary" href="?cue=6000">
|
||||
Nicht zugewiesene Tickets <span class="badge"></span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="left_toolbar">
|
||||
<?php if (get_permission_state('all_tickets', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) {
|
||||
echo button("delete", "Löschen", $formname, "sendRequest('delete', true)");
|
||||
} ?>
|
||||
<a role="button" class="primary" href="?action=new">Ticket erstellen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section class="listform_content">
|
||||
<div class="container">
|
||||
<div class="titlebar">
|
||||
<?php
|
||||
if (isset($_GET["cue"])) {
|
||||
switch ($_GET["cue"]) {
|
||||
case 1000:
|
||||
$title = "Von mir erstellt";
|
||||
$description = "Meine eigenen Tickets";
|
||||
break;
|
||||
case 1500:
|
||||
$title = "Zu bearbeitende Tickets";
|
||||
$description = "Meine in Bearbeitung befindlichen Tickets";
|
||||
break;
|
||||
case 2000:
|
||||
$title = "Abteilungstickets";
|
||||
$description = "Alle laufenden Abteilungstickets";
|
||||
break;
|
||||
case 2500:
|
||||
$title = "Ticket Übersicht";
|
||||
$description = "Alle laufenden Tickets";
|
||||
break;
|
||||
case 3000:
|
||||
$title = "Archiv";
|
||||
$description = "Alle geschlossenen Abteilungstickets";
|
||||
break;
|
||||
case 4000:
|
||||
$title = "Alle Tickets";
|
||||
$description = "Alle laufenden und geschlossenen Tickets";
|
||||
break;
|
||||
case 5000:
|
||||
$title = "Eskalierte Tickets";
|
||||
$description = "Alle eskalierenden Tickets";
|
||||
break;
|
||||
case 6000:
|
||||
$title = "Nicht zugewiesene Tickets";
|
||||
$description = "Alle Tickets ohne aktuellen Bearbeiter";
|
||||
break;
|
||||
case 7000:
|
||||
$title = "Einkauf Tickets";
|
||||
$description = "Alle Tickets des Bereichs Einkauf";
|
||||
break;
|
||||
case 8000:
|
||||
$title = "Einkauf Tickets (Archiv)";
|
||||
$description = "Alle Tickets des Bereichs Einkauf";
|
||||
break;
|
||||
default:
|
||||
$title = "Tickets";
|
||||
$description = "Übersicht über Tickets";
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<hgroup>
|
||||
<h1><?php echo htmlspecialchars($title); ?></h1>
|
||||
<p><?php echo htmlspecialchars($description); ?></p>
|
||||
</hgroup>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<hgroup>
|
||||
<h1>Ticketcenter</h1>
|
||||
</hgroup>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<div>
|
||||
<!-- <div title="Datumsfilter"role="button" id="openDateFilter" class="outline"><i class="fa-solid fa-calendar-days"></i></div>
|
||||
<div title="Filter"role="button" id="openSearchBuilder" class="outline"><i class="fa-solid fa-filter"></i></div> -->
|
||||
<select name="select_categoty" id="">
|
||||
<option value="all">Alle Kategorien</option>
|
||||
<?php
|
||||
$query = "SELECT * FROM main_tickets_category ORDER BY description ASC";
|
||||
$result = mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
while ($row = mysqli_fetch_array($result)) {
|
||||
echo '<option value="' . $row['description'] . '">' . htmlspecialchars($row['description']) . '</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<input type="text" title="Suche..." placeholder="Suche..." id="listform_search">
|
||||
</div>
|
||||
</div>
|
||||
<div class="date_filter_builder">
|
||||
<div class="date_filter_builder_title_row">
|
||||
<div class="dtsb-title">Datumsfilter</div>
|
||||
</div>
|
||||
<div class="date_filter_builder_group">
|
||||
<label for="min">
|
||||
Datum von...
|
||||
<input placeholder="Datum von..." type="text" id="min" name="min">
|
||||
</label>
|
||||
<label for="max">
|
||||
Datum bis...
|
||||
<input placeholder="Datum bis..." type="text" id="max" name="max">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table id="ticket" class="ui celled table selectable linklist" style="width:100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Nr.</th>
|
||||
<th>Status</th>
|
||||
<th>Abteilung</th>
|
||||
<th>Beschreibung</th>
|
||||
<th>Ersteller</th>
|
||||
<th>Akt. Bearbeiter</th>
|
||||
<th>Erstellt</th>
|
||||
<th>Letzte Aktion</th>
|
||||
<th>Zu erledigen bis</th>
|
||||
<th>Geöffnet seit</th>
|
||||
|
||||
<?php if ($_GET['cue'] == 5000) { ?>
|
||||
<th>Eskaliert am</th>
|
||||
<?php } ?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<? load_ticket_list($_GET['cue']); ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
$('#ticket').DataTable({
|
||||
info: false,
|
||||
responsive: true,
|
||||
pageLength: 20,
|
||||
colReorder: false,
|
||||
pagingType: 'simple_numbers',
|
||||
lengthChange: true,
|
||||
lengthMenu: [10, 20, 50, 100],
|
||||
paging: true,
|
||||
sorting: 0,
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/2.0.2/i18n/de-DE.json',
|
||||
searchPlaceholder: '',
|
||||
search: '',
|
||||
lengthMenu: 'Zeige _MENU_ Einträge',
|
||||
paginate: {
|
||||
next: '>',
|
||||
previous: '<'
|
||||
},
|
||||
datetime: {
|
||||
previous: 'Zurück',
|
||||
next: 'Weiter',
|
||||
months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
|
||||
weekdays: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
|
||||
amPm: ['am', 'pm'],
|
||||
hours: 'Stunde',
|
||||
minutes: 'Minute',
|
||||
seconds: 'Sekunde',
|
||||
unknown: '-'
|
||||
},
|
||||
// searchBuilder: {
|
||||
// title: {
|
||||
// 0: 'Filter',
|
||||
// _: 'Filters (%d)'
|
||||
// },
|
||||
// }
|
||||
|
||||
},
|
||||
layout: {
|
||||
// top1: {
|
||||
// searchBuilder: {
|
||||
// greyscale: true
|
||||
// }
|
||||
// },
|
||||
topStart: 'pageLength',
|
||||
topEnd: '',
|
||||
bottomStart: {
|
||||
buttons: [
|
||||
{
|
||||
extend: 'collection',
|
||||
// split: ['copyHtml5', 'excelHtml5', 'csvHtml5', 'print']
|
||||
split: ['copyHtml5', 'excelHtml5', 'csvHtml5', 'print']
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
bottomEnd: 'paging',
|
||||
},
|
||||
// drawCallback: function(settings) {
|
||||
// initLinklist();
|
||||
// }
|
||||
});
|
||||
|
||||
var table = $('#ticket').DataTable();
|
||||
|
||||
// Ermöglicht das durchsuchen von Tabellen
|
||||
$('#listform_search').keyup(function () {
|
||||
table.search($(this).val()).draw();
|
||||
})
|
||||
|
||||
var minDate, maxDate;
|
||||
|
||||
// Custom filtering function which will search data in column four between two values
|
||||
DataTable.ext.search.push(function (settings, data, dataIndex) {
|
||||
var min = minDate.val();
|
||||
var max = maxDate.val();
|
||||
var date = new Date(moment(data[1], 'DD.MM.YYYY'));
|
||||
|
||||
if (
|
||||
(min === null && max === null) ||
|
||||
(min === null && date <= max) ||
|
||||
(min <= date && max === null) ||
|
||||
(min <= date && date <= max)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
// Create date inputs
|
||||
minDate = new DateTime('#min', {
|
||||
format: 'DD.MM.YYYY'
|
||||
});
|
||||
maxDate = new DateTime('#max', {
|
||||
format: 'DD.MM.YYYY'
|
||||
});
|
||||
|
||||
// Refilter the table
|
||||
$('#min, #max').on('change', function () {
|
||||
table.draw();
|
||||
});
|
||||
$(".list_item").click(function () {
|
||||
// Hole die Datenattribute aus der geklickten Zeile
|
||||
var inputId = $(this).data('inputid');
|
||||
|
||||
// Setze den Wert des versteckten Input-Feldes auf die inputid der geklickten Zeile
|
||||
$('input[name="input_id"]').val(inputId);
|
||||
});
|
||||
|
||||
|
||||
$(window).on('load', function () {
|
||||
$('.loading').hide();
|
||||
$('.listform_content').show();
|
||||
});
|
||||
|
||||
$(".list_item").dblclick(function () {
|
||||
// Hole die Datenattribute aus der geklickten Zeile
|
||||
var action = $(this).data('action');
|
||||
var inputId = $(this).data('inputid');
|
||||
|
||||
// Erweitere die URL mit den Parametern
|
||||
var newUrl = window.location.href.split('?')[0] + '?action=' + action + '&id=' + inputId;
|
||||
|
||||
// Aktualisiere die URL
|
||||
window.location.href = newUrl;
|
||||
});
|
||||
|
||||
|
||||
// Funktion zum Öffnen/Schließen der Filter Search Groups vom DataTable
|
||||
$('#openSearchBuilder').click(function () {
|
||||
$(".dtsb-searchBuilder").toggle();
|
||||
$(this).toggleClass("active")
|
||||
});
|
||||
|
||||
// Funktion zum Öffnen/Schließen der Date Filter vom DataTable
|
||||
$('#openDateFilter').click(function () {
|
||||
$(".date_filter_builder").toggle();
|
||||
$(this).toggleClass("active")
|
||||
});
|
||||
|
||||
$(document).ready(function () {
|
||||
// Hole den Wert des cue-Parameters aus der URL
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const cue = urlParams.get('cue');
|
||||
|
||||
// Wenn ein cue-Wert vorhanden ist, füge die Klasse active zum passenden Button hinzu
|
||||
if (cue) {
|
||||
$(`a[href="?cue=${cue}"]`).addClass('active');
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const cue = urlParams.get('cue');
|
||||
if (cue) {
|
||||
sessionStorage.setItem('lastCue', cue);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
|
||||
function filterByCategory() {
|
||||
const selectedCategory = $('select[name="select_categoty"]').val();
|
||||
|
||||
console.log("Selected category:", selectedCategory);
|
||||
const table = $('#ticket').DataTable();
|
||||
|
||||
if (selectedCategory === 'all') {
|
||||
// Zeige alle Zeilen
|
||||
table.column(3).search('').draw();
|
||||
} else {
|
||||
// Filtere nach der ausgewählten Kategorie (Spalte 3 ist "Abteilung")
|
||||
table.column(3).search(selectedCategory, true, false).draw();
|
||||
}
|
||||
}
|
||||
|
||||
// Event Listener für die Kategorie-Auswahl
|
||||
$('select[name="select_categoty"]').on('change', filterByCategory);
|
||||
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
42
module/ticketcenter/show_ticketcenter_subcategory_ajax.php
Normal file
42
module/ticketcenter/show_ticketcenter_subcategory_ajax.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
session_start();
|
||||
$currDir = __DIR__;
|
||||
$rootDir = dirname(dirname($currDir));
|
||||
$mysydeDir = $rootDir . '/mysyde';
|
||||
|
||||
require_once($rootDir . '/vendor/autoload.php');
|
||||
require_once($rootDir . "/mysyde/frontend/frontend_functions.inc.php");
|
||||
|
||||
$envDir = $rootDir . '/config';
|
||||
$envFilePath = $envDir . '/.env';
|
||||
if (is_dir($envDir) && file_exists($envFilePath) && is_file($envFilePath) && is_readable($envFilePath)) {
|
||||
$dotenv = new \Dotenv\Dotenv($envDir);
|
||||
$dotenv->load();
|
||||
}
|
||||
$common = $mysydeDir ."/common/common_functions.inc.php";
|
||||
require_once($common);
|
||||
|
||||
$connEnv = (local_environment()) ? $mysydeDir."/dc.config.php" : $mysydeDir."/dc-server.config.php";
|
||||
|
||||
require_once($connEnv);
|
||||
|
||||
db_connect();
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
$category_id = $_POST['category_id'];
|
||||
|
||||
$query = "SELECT * FROM main_tickets_category WHERE parent_id = ".$category_id." ORDER BY sorting";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
if (mysqli_num_rows($result) <= 0) {
|
||||
return;
|
||||
}
|
||||
echo "<div class='label'><label for='input_subsubcategory'>Genaue Beschreibung</label></div>";
|
||||
echo "<div class='input'>";
|
||||
echo "<select name='input_subsubcategory' id='input_subsubcategory' class='select' required>";
|
||||
echo "<option value=''>Auswählen..</option>";
|
||||
while($row = @mysqli_fetch_array($result)){
|
||||
echo "<option value='".$row['id']."'>".$row['description']."</option>";
|
||||
}
|
||||
echo "</select>";
|
||||
echo "</div>";
|
||||
}
|
||||
100
module/ticketcenter/status.inc.php
Normal file
100
module/ticketcenter/status.inc.php
Normal file
@@ -0,0 +1,100 @@
|
||||
<?
|
||||
date_default_timezone_set('Europe/Berlin');
|
||||
|
||||
$messages = array();
|
||||
$error = FALSE;
|
||||
|
||||
|
||||
if (isset($custom_action)) {
|
||||
$action = $custom_action;
|
||||
} else {
|
||||
$action = $_REQUEST["action"];
|
||||
}
|
||||
|
||||
switch ($action) {
|
||||
case 'close_status':
|
||||
require_once("status_listform.inc.php");
|
||||
break;
|
||||
case 'load_status':
|
||||
require_once("status_listform.inc.php");
|
||||
break;
|
||||
case 'new_status' :
|
||||
require_once("status_cardform.inc.php");
|
||||
break;
|
||||
case 'edit':
|
||||
edit_status();
|
||||
break;
|
||||
case 'delete_status':
|
||||
delete_status();
|
||||
break;
|
||||
case 'save_status':
|
||||
save_status();
|
||||
break;
|
||||
default:
|
||||
require_once("status_listform.inc.php");
|
||||
break;
|
||||
}
|
||||
|
||||
function edit_status($_id = "") {
|
||||
if ((int)$_id > 0) {
|
||||
$status_id = $_id;
|
||||
} else {
|
||||
$status_id = $_REQUEST["input_status_id"];
|
||||
}
|
||||
if ($status_id <> '') {
|
||||
$query = "SELECT * FROM main_tickets_status WHERE id = '" . $status_id . "' LIMIT 1";
|
||||
$result = @mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if (@mysqli_num_rows($result) == 1) {
|
||||
$input_status = @mysqli_fetch_array($result);
|
||||
require_once("status_cardform.inc.php");
|
||||
}
|
||||
} else {
|
||||
require_once("status_cardform.inc.php");
|
||||
}
|
||||
}
|
||||
|
||||
function save_status() {
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$inserted = FALSE;
|
||||
$messages = array();
|
||||
|
||||
|
||||
if ($_REQUEST["input_status_id"] <> '') {
|
||||
$query = "UPDATE main_tickets_status SET
|
||||
description = '" . mysqli_real_escape_string($GLOBALS['mysql_con'], $_REQUEST["input_description"]) . "'
|
||||
WHERE id = '" . $_REQUEST["input_status_id"] . "' LIMIT 1";
|
||||
$inserted = TRUE;
|
||||
} else {
|
||||
$sorting = @mysqli_fetch_array(@mysqli_query($GLOBALS['mysql_con'], "SELECT MAX(sorting)+1 AS 'newsorting' FROM main_tickets_status"));
|
||||
$sorting = ($sorting["newsorting"] <> "") ? $sorting = $sorting["newsorting"] : $sorting = 1;
|
||||
$query = "INSERT INTO main_tickets_status (description) VALUES (
|
||||
'" . mysqli_real_escape_string($GLOBALS['mysql_con'], $_REQUEST["input_description"]) . "'
|
||||
)";
|
||||
$inserted = TRUE;
|
||||
}
|
||||
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
|
||||
if ($inserted == TRUE) {
|
||||
$input_id = mysqli_insert_id($GLOBALS['mysql_con']);
|
||||
$messages[] = '<div class="successbox">' . $translation->get("msg_success") . '</div>';
|
||||
} else {
|
||||
$messages[] = '<div class="successbox">' . $translation->get("msg_error") . '</div>';
|
||||
}
|
||||
|
||||
if ($_REQUEST['save_and_close'] == 1) {
|
||||
require_once("status_listform.inc.php");
|
||||
} else {
|
||||
edit_status($input_id);
|
||||
}
|
||||
}
|
||||
|
||||
function delete_status() {
|
||||
if ($_REQUEST["input_status_id"] <> '') {
|
||||
$query = "DELETE FROM main_tickets_status WHERE id = '" . $_REQUEST["input_status_id"]."'";
|
||||
@mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
}
|
||||
require_once("status_listform.inc.php");
|
||||
}
|
||||
|
||||
53
module/ticketcenter/status_cardform.inc.php
Normal file
53
module/ticketcenter/status_cardform.inc.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?
|
||||
$formname = "form_status_cardform";
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$inputname = "input_id";
|
||||
|
||||
?>
|
||||
|
||||
|
||||
<div id="overlaycrumb">
|
||||
<?php if ($input_status["id"] == "") {
|
||||
echo $translation->get("new_status");
|
||||
} else {
|
||||
echo $translation->get("edit_status");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<ul class="toolbar_menu">
|
||||
<?php
|
||||
// Zurueck zur uebersicht
|
||||
button("left", $translation->get("back"), $formname, "loadCard('load_status', true)");
|
||||
|
||||
// Speichern buttons
|
||||
button("save", $translation->get("save"), $formname, "loadCard('save_status', true)");
|
||||
button("save", $translation->get("save_and_close"), $formname, "jQuery('#save_and_close', jQuery('#" . $formname . "')).val(1);loadCard('save_status', true)");
|
||||
|
||||
if ($input_status["id"] != "") {
|
||||
echo button("delete", $translation->get("delete"), $formname, "loadCard('delete_status', true, '{$translation->get('delete_status_confirm')}')");
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
|
||||
<?php
|
||||
if (!empty($messages) && is_array($messages)) {
|
||||
echo '<div id="overlayMessages">' . implode("\r\n", $messages) . '</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<form id="<?= $formname ?>" name="<?= $formname ?>" method="post">
|
||||
<input name="input_status_id" type="hidden" value="<?= $input_status["id"] ?>" />
|
||||
<input name="input_id" type="hidden" value="<?= $_REQUEST['input_id'] ?>">
|
||||
<input name="save_and_close" id="save_and_close" type="hidden" value="0" />
|
||||
|
||||
<table class="cardform" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td>
|
||||
<? input($translation->get("description"), "input_description", "text", $input_status["description"]) ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
28
module/ticketcenter/status_listform.inc.php
Normal file
28
module/ticketcenter/status_listform.inc.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
$translation = \DynCom\mysyde\common\classes\Registry::get("translation");
|
||||
$formname = "form_status_list";
|
||||
$inputname = "input_status_id";
|
||||
?>
|
||||
|
||||
<ul class="toolbar_menu">
|
||||
<?= button("new", $translation->get("new"), $formname, "loadCard('new_status', true)"); ?>
|
||||
</ul>
|
||||
|
||||
<div id="mainContent">
|
||||
|
||||
<h1><?php echo get_translation('status'); ?></h1>
|
||||
|
||||
<form id="<?= $formname ?>" name="<?= $formname ?>" method="post">
|
||||
<input type="hidden" class="selected_linklist_row" name="input_status_id" value="" />
|
||||
|
||||
<div class="requestLoader"></div>
|
||||
<?
|
||||
$query = "SELECT id, description AS '" . $translation->get("description") . "' FROM main_tickets_status WHERE id NOT IN (0, 1, 2, 3)";
|
||||
$format = array("option", "text");
|
||||
if ($result = mysqli_query($GLOBALS['mysql_con'], $query)) {
|
||||
linklist($result, "form_status_list", $format);
|
||||
}
|
||||
?>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
Reference in New Issue
Block a user