/** * This function is beign used to modify the email related to a support group. * It will first check if the user who executed this function is an admin. If this is not the case the page will be redirected to an error page. * the new email will be validated and in case it's valid we'll add it to the db. Before adding it, we will encrypt the password by using the MyCrypt class. Afterwards the password gets * updated and the page redirected again. * @author Daan Janssens, mentored by Matthew Lagoe */ function modify_email_of_sgroup() { global $INGAME_WEBPATH; global $WEBPATH; if (WebUsers::isLoggedIn()) { //check if user is an admin if (Ticket_User::isAdmin(unserialize($_SESSION['ticket_user'])) && isset($_POST['target_id'])) { $sgroupid = filter_var($_POST['target_id'], FILTER_SANITIZE_NUMBER_INT); $group = Support_Group::getGroup($sgroupid); $groupemail = filter_var($_POST['GroupEmail'], FILTER_SANITIZE_STRING); if (Users::validEmail($groupemail) || $groupemail == "") { $password = filter_var($_POST['IMAP_Password'], FILTER_SANITIZE_STRING); $group->setGroupEmail($groupemail); $group->setIMAP_MailServer(filter_var($_POST['IMAP_MailServer'], FILTER_SANITIZE_STRING)); $group->setIMAP_Username(filter_var($_POST['IMAP_Username'], FILTER_SANITIZE_STRING)); //encrypt password! global $cfg; $crypter = new MyCrypt($cfg['crypt']); $enc_password = $crypter->encrypt($password); $group->setIMAP_Password($enc_password); $group->update(); $result['RESULT_OF_MODIFYING'] = "SUCCESS"; if ($password == "") { $result['RESULT_OF_MODIFYING'] = "NO_PASSWORD"; } } else { $result['RESULT_OF_MODIFYING'] = "EMAIL_NOT_VALID"; } $result['permission'] = unserialize($_SESSION['ticket_user'])->getPermission(); $result['no_visible_elements'] = 'FALSE'; $result['username'] = $_SESSION['user']; //global $SITEBASE; //require_once($SITEBASE . 'inc/show_sgroup.php'); //$result= array_merge($result, show_sgroup()); //helpers :: loadtemplate( 'show_sgroup', $result); header("Cache-Control: max-age=1"); if (Helpers::check_if_game_client()) { header("Location: " . $INGAME_WEBPATH . "?page=show_sgroup&id=" . $sgroupid); } else { header("Location: " . $WEBPATH . "?page=show_sgroup&id=" . $sgroupid); } throw new SystemExit(); } else { //ERROR: No access! $_SESSION['error_code'] = "403"; header("Cache-Control: max-age=1"); header("Location: index.php?page=error"); throw new SystemExit(); } } else { //ERROR: not logged in! header("Cache-Control: max-age=1"); header("Location: index.php"); throw new SystemExit(); } }
/** * This function is beign used to add a user to a support group. * It will first check if the user who executed this function is an admin. If the user exists it will try to add it to the supportgroup, in case it's not a mod or admin it will not * add it to the group. if the executing user is not an admin or not logged in, the page will be redirected to the error page. * @author Daan Janssens, mentored by Matthew Lagoe */ function add_user_to_sgroup() { global $INGAME_WEBPATH; global $WEBPATH; if (WebUsers::isLoggedIn()) { //check if the that executed the task is an admin. if (Ticket_User::isAdmin(unserialize($_SESSION['ticket_user'])) && isset($_POST['target_id'])) { $name = filter_var($_POST['Name'], FILTER_SANITIZE_STRING); $id = filter_var($_POST['target_id'], FILTER_SANITIZE_NUMBER_INT); $user_id = WebUsers::getId($name); if ($user_id != "") { //if the target user is a mod/admin if (Ticket_User::constr_ExternId($user_id)->getPermission() > 1) { //add it to the support group $result['RESULT_OF_ADDING'] = Support_Group::addUserToSupportGroup($user_id, $id); } else { //return error message. $result['RESULT_OF_ADDING'] = "NOT_MOD_OR_ADMIN"; } } else { $result['RESULT_OF_ADDING'] = "USER_NOT_EXISTING"; } //$result['permission'] = unserialize($_SESSION['ticket_user'])->getPermission(); //$result['no_visible_elements'] = 'FALSE'; //$result['username'] = $_SESSION['user']; //global $SITEBASE; //require_once($SITEBASE . 'inc/show_sgroup.php'); //$result= array_merge($result, show_sgroup()); //helpers :: loadtemplate( 'show_sgroup', $result); if (Helpers::check_if_game_client()) { header("Cache-Control: max-age=1"); header("Location: " . $INGAME_WEBPATH . "?page=show_sgroup&id=" . $id); } else { header("Cache-Control: max-age=1"); header("Location: " . $WEBPATH . "?page=show_sgroup&id=" . $id); } throw new SystemExit(); } else { //ERROR: No access! $_SESSION['error_code'] = "403"; header("Cache-Control: max-age=1"); header("Location: index.php?page=error"); throw new SystemExit(); } } else { //ERROR: not logged in! header("Cache-Control: max-age=1"); header("Location: index.php"); throw new SystemExit(); } }
/** * This function is beign used to add a new Support Group to the database. * What it will do is check if the user who executed the function is an Admin, if so then it will filter all POST'ed data and use it to create a new Support_Group entry. * if not logged in or not an admin, an appropriate redirection to an error page will take place. * @author Daan Janssens, mentored by Matthew Lagoe */ function add_sgroup() { global $INGAME_WEBPATH; global $WEBPATH; if (WebUsers::isLoggedIn()) { //check if admin if (Ticket_User::isAdmin(unserialize($_SESSION['ticket_user']))) { $name = filter_var($_POST['Name'], FILTER_SANITIZE_STRING); $inner_tag = filter_var($_POST['Tag'], FILTER_SANITIZE_STRING); $tag = "[" . $inner_tag . "]"; $inner_tag = filter_var($_POST['Tag'], FILTER_SANITIZE_STRING); $groupemail = filter_var($_POST['GroupEmail'], FILTER_SANITIZE_STRING); $imap_mailserver = filter_var($_POST['IMAP_MailServer'], FILTER_SANITIZE_STRING); $imap_username = filter_var($_POST['IMAP_Username'], FILTER_SANITIZE_STRING); $imap_password = filter_var($_POST['IMAP_Password'], FILTER_SANITIZE_STRING); //create a new support group $result['RESULT_OF_ADDING'] = Support_Group::createSupportGroup($name, $tag, $groupemail, $imap_mailserver, $imap_username, $imap_password); $result['permission'] = unserialize($_SESSION['ticket_user'])->getPermission(); $result['no_visible_elements'] = 'FALSE'; $result['username'] = $_SESSION['user']; global $SITEBASE; require $SITEBASE . '/inc/sgroup_list.php'; $result = array_merge($result, sgroup_list()); return $result; header("Cache-Control: max-age=1"); /*if (Helpers::check_if_game_client()) { header("Location: ".$INGAME_WEBPATH."?page=sgroup_list"); }else{ header("Location: ".$WEBPATH."?page=sgroup_list"); } exit; */ } else { //ERROR: No access! $_SESSION['error_code'] = "403"; header("Cache-Control: max-age=1"); header("Location: index.php?page=error"); throw new SystemExit(); } } else { //ERROR: not logged in! header("Cache-Control: max-age=1"); header("Location: index.php"); throw new SystemExit(); } }
/** * This function is beign used to load info that's needed for the sgroup_list page. * check if the person who wants to view this page is a mod/admin, if this is not the case, he will be redirected to an error page. * It will return all suppport groups information. Also if the $_GET['delete'] var is set and the user is an admin, he will delete a specific entry. * @author Daan Janssens, mentored by Matthew Lagoe */ function sgroup_list() { global $INGAME_WEBPATH; global $WEBPATH; //if logged in if (WebUsers::isLoggedIn()) { if (Ticket_User::isMod(unserialize($_SESSION['ticket_user']))) { //if delete GET var is set and user is admin, then delete the groups entry. if (isset($_GET['delete']) && Ticket_User::isAdmin(unserialize($_SESSION['ticket_user']))) { $delete_id = filter_var($_GET['delete'], FILTER_SANITIZE_NUMBER_INT); $result['delete'] = Support_Group::deleteSupportGroup($delete_id); header("Cache-Control: max-age=1"); if (Helpers::check_if_game_client()) { header("Location: " . $INGAME_WEBPATH . "?page=sgroup_list"); } else { header("Location: " . $WEBPATH . "?page=sgroup_list"); } throw new SystemExit(); } if (Ticket_User::isAdmin(unserialize($_SESSION['ticket_user']))) { $result['isAdmin'] = "TRUE"; } $result['grouplist'] = Gui_Elements::make_table(Support_Group::getGroups(), array("getSGroupId", "getName", "getTag", "getGroupEmail"), array("sGroupId", "name", "tag", "groupemail")); global $INGAME_WEBPATH; $result['ingame_webpath'] = $INGAME_WEBPATH; return $result; } else { //ERROR: No access! $_SESSION['error_code'] = "403"; header("Cache-Control: max-age=1"); header("Location: index.php?page=error"); throw new SystemExit(); } } else { //ERROR: not logged in! header("Cache-Control: max-age=1"); header("Location: index.php"); throw new SystemExit(); } }
/** * the cron funtion (workhorse of the mailing system). * The cron job will create a child process, which will first send the emails that are in the email table in the database, we use some kind of semaphore (a temp file) to make sure that * if the cron job is called multiple times, it wont email those mails multiple times. After this, we will read the mail inboxes of the support groups and the default group using IMAP * and we will add new tickets or new replies according to the incoming emails. */ function cron() { global $cfg; global $MAIL_LOG_PATH; $default_groupemail = $cfg['mail']['default_groupemail']; $default_groupname = $cfg['mail']['default_groupname']; /* $inbox_host = $cfg['mail']['host']; $oms_reply_to = "Ryzom Ticketing Support <ticketing@".$inbox_host.">";*/ global $MAIL_DIR; error_log("========================================================\n", 3, $MAIL_LOG_PATH); error_log("mailing cron Job started at: " . Helpers::outputTime(time(), 0) . "\n", 3, $MAIL_LOG_PATH); //creates child process $pid = self::mail_fork(); $pidfile = '/tmp/ams_cron_email_pid'; if ($pid) { // We're the parent process, do nothing! //INFO: if $pid = //-1: "Could not fork!\n"; // 0: "In child!\n"; //>0: "In parent!\n"; } else { //deliver new mail //make db connection here because the children have to make the connection. $this->db = new DBLayer("lib"); //if $pidfile doesn't exist yet, then start sending the mails that are in the db. if (!file_exists($pidfile)) { //create the file and write the child processes id in it! $pid = getmypid(); $file = fopen($pidfile, 'w'); fwrite($file, $pid); fclose($file); //select all new & failed emails & try to send them //$emails = db_query("select * from email where status = 'NEW' or status = 'FAILED'"); $statement = $this->db->select("email", array(null), "Status = 'NEW' or Status = 'FAILED'"); $emails = $statement->fetchAll(); foreach ($emails as $email) { $message_id = self::new_message_id($email['TicketId']); //if recipient isn't given, then use the email of the id_user instead! if (!$email['Recipient']) { $email['Recipient'] = Ticket_User::get_email_by_user_id($email['UserId']); } //create sending email adres based on the $sender id which refers to the department id if ($email['Sender'] == NULL) { $from = $default_groupname . " <" . $default_groupemail . ">"; } else { $group = Support_Group::getGroup($email['Sender']); $from = $group->getName() . " <" . $group->getGroupEmail() . ">"; } $headers = "From: {$from}\r\n" . "Message-ID: " . $message_id; if (mail($email['Recipient'], $email['Subject'], $email['Body'], $headers)) { $status = "DELIVERED"; error_log("Emailed {$email['Recipient']}\n", 3, $MAIL_LOG_PATH); } else { $status = "FAILED"; error_log("Email to {$email['Recipient']} failed\n", 3, $MAIL_LOG_PATH); } //change the status of the emails. $this->db->execute('update email set Status = ?, MessageId = ?, Attempts = Attempts + 1 where MailId = ?', array($status, $message_id, $email['MailId'])); } unlink($pidfile); } // Check mail $sGroups = Support_Group::getGroups(); //decrypt passwords in the db! $crypter = new MyCrypt($cfg['crypt']); foreach ($sGroups as $group) { $group->setIMAP_Password($crypter->decrypt($group->getIMAP_Password())); } $defaultGroup = new Support_Group(); $defaultGroup->setSGroupId(0); $defaultGroup->setGroupEmail($default_groupemail); $defaultGroup->setIMAP_MailServer($cfg['mail']['default_mailserver']); $defaultGroup->setIMAP_Username($cfg['mail']['default_username']); $defaultGroup->setIMAP_Password($cfg['mail']['default_password']); //add default group to the list $sGroups[] = $defaultGroup; foreach ($sGroups as $group) { //check if group has mailing stuff filled in! if ($group->getGroupEmail() != "" && $group->getIMAP_MailServer() != "" && $group->getIMAP_Username() != "" && $group->getIMAP_Password() != "") { $mbox = imap_open($group->getIMAP_MailServer(), $group->getIMAP_Username(), $group->getIMAP_Password()) or die('Cannot connect to mail server: ' . imap_last_error()); $message_count = imap_num_msg($mbox); for ($i = 1; $i <= $message_count; ++$i) { //return task ID $tkey = self::incoming_mail_handler($mbox, $i, $group); if ($tkey) { //base file on Ticket + timestamp $file = fopen($MAIL_DIR . "/ticket" . $tkey, 'w'); error_log("Email was written to " . $MAIL_DIR . "/ticket" . $tkey . "\n", 3, $MAIL_LOG_PATH); fwrite($file, imap_fetchheader($mbox, $i) . imap_body($mbox, $i)); fclose($file); //mark message $i of $mbox for deletion! imap_delete($mbox, $i); } } //delete marked messages imap_expunge($mbox); imap_close($mbox); } } error_log("Child Cron job finished at " . Helpers::outputTime(time(), 0) . "\n", 3, $MAIL_LOG_PATH); error_log("========================================================\n", 3, $MAIL_LOG_PATH); } }
/** * get the name of the support group to whom the ticket is forwarded * or return 0 in case not forwarded. */ public function getForwardedGroupName() { $group_id = Forwarded::getSGroupOfTicket($this->getTId()); if ($group_id == "") { return 0; } else { return Support_Group::getGroup($group_id)->getName(); } }
/** * This function is beign used to load info that's needed for the show_ticket_log page. * This page shows the logs related to a ticket: who created the ticket, who replied on it, who viewed it, assigned or forwarded it. * Only mods/admins are able to browse the log though. The found information is returned so it can be used by the template. * @author Daan Janssens, mentored by Matthew Lagoe */ function show_ticket_log() { global $INGAME_WEBPATH; global $WEBPATH; //if logged in if (WebUsers::isLoggedIn() && isset($_GET['id'])) { //only allow admins to browse the log! if (Ticket_User::isMod(unserialize($_SESSION['ticket_user']))) { $result['ticket_id'] = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT); $target_ticket = new Ticket(); $target_ticket->load_With_TId($result['ticket_id']); $result['ticket_title'] = $target_ticket->getTitle(); //return all logs related to a ticket. $ticket_logs = Ticket_Log::getLogsOfTicket($result['ticket_id']); $log_action_array = Ticket_Log::getActionTextArray(); //fetch information about each returned ticket in a format that is usable for the template $result['ticket_logs'] = Gui_Elements::make_table($ticket_logs, array("getTLogId", "getTimestamp", "getAuthor()->getExternId", "getAction", "getArgument()"), array("tLogId", "timestamp", "authorExtern", "action", "argument")); $i = 0; //for each ticket add action specific informaton to the to-be-shown text: uses the query_backpart foreach ($result['ticket_logs'] as $log) { $webUser = new WebUsers($log['authorExtern']); $author = $webUser->getUsername(); $result['ticket_logs'][$i]['author'] = $author; $query_backpart = ""; if ($log['action'] == 2) { $webUser2 = new WebUsers($log['argument']); $query_backpart = $webUser2->getUsername(); } else { if ($log['action'] == 4) { if (Helpers::check_if_game_client()) { $query_backpart = "<a href='" . $INGAME_WEBPATH . "?page=show_reply&id=" . $log['argument'] . "'>ID#" . $log['argument'] . "</a>"; } else { $query_backpart = "<a href='" . $WEBPATH . "?page=show_reply&id=" . $log['argument'] . "'>ID#" . $log['argument'] . "</a>"; } } else { if ($log['action'] == 5) { $statusArray = Ticket::getStatusArray(); $query_backpart = $statusArray[$log['argument']]; } else { if ($log['action'] == 6) { $priorityArray = Ticket::getPriorityArray(); $query_backpart = $priorityArray[$log['argument']]; } else { if ($log['action'] == 8) { if (Helpers::check_if_game_client()) { $query_backpart = "<a href='" . $INGAME_WEBPATH . "?page=show_sgroupy&id=" . $log['argument'] . "'>" . Support_Group::getGroup($log['argument'])->getName() . "</a>"; } else { $query_backpart = "<a href='" . $WEBPATH . "?page=show_sgroupy&id=" . $log['argument'] . "'>" . Support_Group::getGroup($log['argument'])->getName() . "</a>"; } } } } } } $result['ticket_logs'][$i]['query'] = $author . " " . $log_action_array[$log['action']] . " " . $query_backpart; $result['ticket_logs'][$i]['timestamp_elapsed'] = Gui_Elements::time_elapsed_string($log['timestamp']); $i++; } if (Ticket_User::isMod(unserialize($_SESSION['ticket_user']))) { $result['isMod'] = "TRUE"; } global $INGAME_WEBPATH; $result['ingame_webpath'] = $INGAME_WEBPATH; return $result; } else { //ERROR: No access! $_SESSION['error_code'] = "403"; header("Cache-Control: max-age=1"); header("Location: index.php?page=error"); throw new SystemExit(); } } else { //ERROR: not logged in! header("Cache-Control: max-age=1"); header("Location: index.php"); throw new SystemExit(); } }
/** * This function is beign used to load info that's needed for the show_ticket page. * check if the person browsing this page is a mod/admin or the ticket creator himself, if not he'll be redirected to an error page. * if the $_GET['action'] var is set and the user executing is a mod/admin, it will try to execute the action. The actions here are: forwarding of a ticket, * assigning a ticket and unassigning a ticket. This function returns a lot of information that will be used by the template to show the ticket. Mods/admins will be able to * also see hidden replies to a ticket. * @author Daan Janssens, mentored by Matthew Lagoe */ function show_ticket() { //if logged in if (WebUsers::isLoggedIn() && isset($_GET['id'])) { $result['user_id'] = unserialize($_SESSION['ticket_user'])->getTUserId(); $result['ticket_id'] = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT); $target_ticket = new Ticket(); $target_ticket->load_With_TId($result['ticket_id']); if (Ticket_User::isMod(unserialize($_SESSION['ticket_user']))) { if (isset($_POST['action'])) { switch ($_POST['action']) { case "forward": $ticket_id = filter_var($_POST['ticket_id'], FILTER_SANITIZE_NUMBER_INT); $group_id = filter_var($_POST['group'], FILTER_SANITIZE_NUMBER_INT); $result['ACTION_RESULT'] = Ticket::forwardTicket($result['user_id'], $ticket_id, $group_id); break; case "assignTicket": $ticket_id = filter_var($_POST['ticket_id'], FILTER_SANITIZE_NUMBER_INT); $result['ACTION_RESULT'] = Ticket::assignTicket($result['user_id'], $ticket_id); break; case "unAssignTicket": $ticket_id = filter_var($_POST['ticket_id'], FILTER_SANITIZE_NUMBER_INT); $result['ACTION_RESULT'] = Ticket::unAssignTicket($result['user_id'], $ticket_id); break; } } } if ($target_ticket->getAuthor() == unserialize($_SESSION['ticket_user'])->getTUserId() || Ticket_User::isMod(unserialize($_SESSION['ticket_user']))) { $show_as_admin = false; if (Ticket_User::isMod(unserialize($_SESSION['ticket_user']))) { $show_as_admin = true; } $entire_ticket = Ticket::getEntireTicket($result['ticket_id'], $show_as_admin); Ticket_Log::createLogEntry($result['ticket_id'], unserialize($_SESSION['ticket_user'])->getTUserId(), 3); $result['ticket_tId'] = $entire_ticket['ticket_obj']->getTId(); $result['ticket_forwardedGroupName'] = $entire_ticket['ticket_obj']->getForwardedGroupName(); $result['ticket_forwardedGroupId'] = $entire_ticket['ticket_obj']->getForwardedGroupId(); $result['ticket_title'] = $entire_ticket['ticket_obj']->getTitle(); $result['ticket_timestamp'] = $entire_ticket['ticket_obj']->getTimestamp(); $result['ticket_status'] = $entire_ticket['ticket_obj']->getStatus(); $result['ticket_author'] = $entire_ticket['ticket_obj']->getAuthor(); $result['ticket_prioritytext'] = $entire_ticket['ticket_obj']->getPriorityText(); $result['ticket_priorities'] = Ticket::getPriorityArray(); $result['ticket_priority'] = $entire_ticket['ticket_obj']->getPriority(); $result['ticket_statustext'] = $entire_ticket['ticket_obj']->getStatusText(); $result['ticket_lastupdate'] = Gui_Elements::time_elapsed_string(Ticket::getLatestReply($result['ticket_id'])->getTimestamp()); $result['ticket_category'] = $entire_ticket['ticket_obj']->getCategoryName(); $webUser = new WebUsers(Assigned::getUserAssignedToTicket($result['ticket_tId'])); $result['ticket_assignedToText'] = $webUser->getUsername(); $result['ticket_assignedTo'] = Assigned::getUserAssignedToTicket($result['ticket_tId']); $result['ticket_replies'] = Gui_Elements::make_table($entire_ticket['reply_array'], array("getTReplyId", "getContent()->getContent", "getTimestamp", "getAuthor()->getExternId", "getAuthor()->getPermission", "getHidden"), array("tReplyId", "replyContent", "timestamp", "authorExtern", "permission", "hidden")); $i = 0; global $FILE_WEB_PATH; $result['FILE_WEB_PATH'] = $FILE_WEB_PATH; global $BASE_WEBPATH; $result['BASE_WEBPATH'] = $BASE_WEBPATH; foreach ($result['ticket_replies'] as $reply) { $webReplyUser = new WebUsers($reply['authorExtern']); $result['ticket_replies'][$i]['author'] = $webReplyUser->getUsername(); $i++; } if (Ticket_User::isMod(unserialize($_SESSION['ticket_user']))) { $result['isMod'] = "TRUE"; $result['statusList'] = Ticket::getStatusArray(); $result['sGroups'] = Gui_Elements::make_table_with_key_is_id(Support_Group::getAllSupportGroups(), array("getName"), "getSGroupId"); } $result['hasInfo'] = $target_ticket->hasInfo(); global $INGAME_WEBPATH; $result['ingame_webpath'] = $INGAME_WEBPATH; //get attachments $result['ticket_attachments'] = Ticket::getAttachments($result['ticket_id']); return $result; } else { //ERROR: No access! $_SESSION['error_code'] = "403"; header("Cache-Control: max-age=1"); header("Location: index.php?page=error"); throw new SystemExit(); } } else { //ERROR: not logged in! header("Cache-Control: max-age=1"); header("Location: index.php"); throw new SystemExit(); } }
/** * This function is beign used to load info that's needed for the show_queue page. * check if the person who wants to view this page is a mod/admin, if this is not the case, he will be redirected to an error page. * if an action is set (this is done by $_GET['action']) it will try to execute it first, actions are: assign a ticket, unassign a ticket an create a queue. * There are a few predefined queues which is the 'all tickets' queue, 'archive' queue, 'todo' queue, .. these are passed by $_GET['get']. * if $_GET['get'] = create; then it's a custom made queue, this will call the createQueue function which builds the query that we will later use to get the tickets. * The tickets fetched will be returned and used in the template. Now why use POST and GET params here and have a createQueue function twice? Well the first time someone creates * a queue the POST variables will be used, however after going to the next page it will use the GET params. * @author Daan Janssens, mentored by Matthew Lagoe */ function show_queue() { global $INGAME_WEBPATH; global $WEBPATH; //if logged in & queue id is given if (WebUsers::isLoggedIn() && isset($_GET['get'])) { if (Ticket_User::isMod(unserialize($_SESSION['ticket_user']))) { //the queue you want to see. $result['queue_view'] = filter_var($_GET['get'], FILTER_SANITIZE_STRING); $user_id = unserialize($_SESSION['ticket_user'])->getTUserId(); $queueArray = array(); $queue_handler = new Ticket_Queue_handler(); //Pagination Base Links if (Helpers::check_if_game_client()) { $result['pagination_base_link'] = $INGAME_WEBPATH . "?page=show_queue&get=" . $result['queue_view']; } else { $result['pagination_base_link'] = $WEBPATH . "?page=show_queue&get=" . $result['queue_view']; } //form url to keep the getters constant if (Helpers::check_if_game_client()) { $result['getURL'] = $INGAME_WEBPATH . "?page=show_queue&get=" . $result['queue_view']; } else { $result['getURL'] = $WEBPATH . "?page=show_queue&get=" . $result['queue_view']; } if (isset($_GET['pagenum'])) { $result['getURL'] = $result['getURL'] . "&pagenum=" . $_GET['pagenum']; } if (isset($_GET['get']) && $_GET['get'] == "create" && isset($_GET['userid']) && isset($_GET['groupid']) && isset($_GET['what']) && isset($_GET['how']) && isset($_GET['who'])) { $userid = filter_var($_GET['userid'], FILTER_SANITIZE_NUMBER_INT); $groupid = filter_var($_GET['groupid'], FILTER_SANITIZE_NUMBER_INT); $what = filter_var($_GET['what'], FILTER_SANITIZE_STRING); $how = filter_var($_GET['how'], FILTER_SANITIZE_STRING); $who = filter_var($_GET['who'], FILTER_SANITIZE_STRING); //create the custom queue $queue_handler->CreateQueue($userid, $groupid, $what, $how, $who); if (Helpers::check_if_game_client()) { $result['pagination_base_link'] = $INGAME_WEBPATH . "?page=show_queue&get=create&userid=" . $userid . "&groupid=" . $groupid . "&what=" . $what . "&how=" . $how . "&who=" . $who; } else { $result['pagination_base_link'] = $WEBPATH . "?page=show_queue&get=create&userid=" . $userid . "&groupid=" . $groupid . "&what=" . $what . "&how=" . $how . "&who=" . $who; } $result['prev_created_userid'] = $userid; $result['prev_created_groupid'] = $groupid; $result['prev_created_what'] = $what; $result['prev_created_how'] = $how; $result['prev_created_who'] = $who; $result['getURL'] = $result['getURL'] . "&userid=" . $userid . "&groupid=" . $groupid . "&what=" . $what . "&how=" . $how . "&who=" . $who; } //if an action is set if (isset($_POST['action'])) { switch ($_POST['action']) { case "assignTicket": $ticket_id = filter_var($_POST['ticket_id'], FILTER_SANITIZE_NUMBER_INT); $result['ACTION_RESULT'] = Ticket::assignTicket($user_id, $ticket_id); break; case "unAssignTicket": $ticket_id = filter_var($_POST['ticket_id'], FILTER_SANITIZE_NUMBER_INT); $result['ACTION_RESULT'] = Ticket::unAssignTicket($user_id, $ticket_id); break; case "create_queue": $userid = filter_var($_POST['userid'], FILTER_SANITIZE_NUMBER_INT); if (isset($_POST['groupid'])) { $groupid = filter_var($_POST['groupid'], FILTER_SANITIZE_NUMBER_INT); } else { $groupid = 0; } $what = filter_var($_POST['what'], FILTER_SANITIZE_STRING); $how = filter_var($_POST['how'], FILTER_SANITIZE_STRING); $who = filter_var($_POST['who'], FILTER_SANITIZE_STRING); //create the custom queue $queue_handler->CreateQueue($userid, $groupid, $what, $how, $who); if (Helpers::check_if_game_client()) { $result['pagination_base_link'] = $INGAME_WEBPATH . "?page=show_queue&get=create&userid=" . $userid . "&groupid=" . $groupid . "&what=" . $what . "&how=" . $how . "&who=" . $who; } else { $result['pagination_base_link'] = $WEBPATH . "?page=show_queue&get=create&userid=" . $userid . "&groupid=" . $groupid . "&what=" . $what . "&how=" . $how . "&who=" . $who; } $result['prev_created_userid'] = $userid; $result['prev_created_groupid'] = $groupid; $result['prev_created_what'] = $what; $result['prev_created_how'] = $how; $result['prev_created_who'] = $who; $result['getURL'] = $result['getURL'] . "&userid=" . $userid . "&groupid=" . $groupid . "&what=" . $what . "&how=" . $how . "&who=" . $who; break; } } $queueArray = $queue_handler->getTickets($result['queue_view'], $user_id); //pagination $result['links'] = $queue_handler->getPagination()->getLinks(5); $result['lastPage'] = $queue_handler->getPagination()->getLast(); $result['currentPage'] = $queue_handler->getPagination()->getCurrent(); //if queue_view is a valid parameter value if ($queueArray != "ERROR") { $result['tickets'] = Gui_Elements::make_table($queueArray, array("getTId", "getTitle", "getTimestamp", "getAuthor()->getExternId", "getTicket_Category()->getName", "getStatus", "getStatusText", "getAssigned", "getForwardedGroupName", "getForwardedGroupId"), array("tId", "title", "timestamp", "authorExtern", "category", "status", "statusText", "assigned", "forwardedGroupName", "forwardedGroupId")); $i = 0; foreach ($result['tickets'] as $ticket) { $web_author = new WebUsers($ticket['authorExtern']); $result['tickets'][$i]['author'] = $web_author->getUsername(); $web_assigned = new WebUsers($ticket['assigned']); $result['tickets'][$i]['assignedText'] = $web_assigned->getUsername(); $result['tickets'][$i]['timestamp_elapsed'] = Gui_Elements::time_elapsed_string($ticket['timestamp']); $i++; } $result['user_id'] = unserialize($_SESSION['ticket_user'])->getTUserId(); //Queue creator field info $result['grouplist'] = Gui_Elements::make_table(Support_Group::getGroups(), array("getSGroupId", "getName"), array("sGroupId", "name")); $result['teamlist'] = Gui_Elements::make_table(Ticket_User::getModsAndAdmins(), array("getTUserId", "getExternId"), array("tUserId", "externId")); $i = 0; foreach ($result['teamlist'] as $member) { $web_teammember = new Webusers($member['externId']); $result['teamlist'][$i]['name'] = $web_teammember->getUsername(); $i++; } global $INGAME_WEBPATH; $result['ingame_webpath'] = $INGAME_WEBPATH; return $result; } else { //ERROR: Doesn't exist! $_SESSION['error_code'] = "404"; header("Cache-Control: max-age=1"); header("Location: ams?page=error"); throw new SystemExit(); } } else { //ERROR: No access! $_SESSION['error_code'] = "403"; header("Cache-Control: max-age=1"); header("Location: index.php?page=error"); throw new SystemExit(); } } else { //ERROR: not logged in! header("Cache-Control: max-age=1"); header("Location: index.php"); throw new SystemExit(); } }
/** * This function is beign used to load info that's needed for the show_sgroup page. * check if the person browsing this page is a mod/admin, if not he'll be redirected to an error page. * if the $_GET['delete'] var is set and the user executing is an admin, an entry will be deleted out of the support group. * A list of users that are member of the group will be returned, which can be used by the template. * @author Daan Janssens, mentored by Matthew Lagoe */ function show_sgroup() { global $INGAME_WEBPATH; global $WEBPATH; //if logged in if (WebUsers::isLoggedIn()) { if (Ticket_User::isMod(unserialize($_SESSION['ticket_user']))) { if (isset($_GET['id'])) { //['target_id'] holds the id of the group! $result['target_id'] = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT); //if the $_GET['delete'] var is set and the user executing is an admin, an entry will be deleted out of the support group. if (isset($_GET['delete']) && Ticket_User::isAdmin(unserialize($_SESSION['ticket_user']))) { $delete_id = filter_var($_GET['delete'], FILTER_SANITIZE_NUMBER_INT); $result['delete'] = Support_Group::deleteUserOfSupportGroup($delete_id, $result['target_id']); header("Cache-Control: max-age=1"); if (Helpers::check_if_game_client()) { header("Location: " . $INGAME_WEBPATH . "?page=show_sgroup&id=" . $result['target_id']); } else { header("Location: " . $WEBPATH . "?page=show_sgroup&id=" . $result['target_id']); } throw new SystemExit(); } if (Ticket_User::isAdmin(unserialize($_SESSION['ticket_user']))) { $result['isAdmin'] = "TRUE"; } $group = Support_Group::getGroup($result['target_id']); $result['groupsname'] = $group->getName(); $result['groupemail'] = $group->getGroupEmail(); $result['imap_mailserver'] = $group->getIMAP_MailServer(); $result['imap_username'] = $group->getIMAP_Username(); $result['userlist'] = Gui_Elements::make_table(Support_Group::getAllUsersOfSupportGroup($result['target_id']), array("getTUserId", "getPermission", "getExternId"), array("tUserId", "permission", "externId")); $i = 0; foreach ($result['userlist'] as $user) { $webuser = new Webusers($user['externId']); $result['userlist'][$i]['name'] = $webuser->getUsername(); $i++; } global $INGAME_WEBPATH; $result['ingame_webpath'] = $INGAME_WEBPATH; $result['teamlist'] = Gui_Elements::make_table(Ticket_User::getModsAndAdmins(), array("getTUserId", "getExternId"), array("tUserId", "externId")); $i = 0; foreach ($result['teamlist'] as $member) { $web_teammember = new Webusers($member['externId']); if (!In_Support_Group::userExistsInSGroup($member['externId'], $result['target_id'])) { $result['users'][$i]['name'] = $web_teammember->getUsername(); } $i++; } return $result; } else { //ERROR: No page specified! $_SESSION['error_code'] = "404"; header("Cache-Control: max-age=1"); header("Location: ams?page=error"); throw new SystemExit(); } } else { //ERROR: No access! $_SESSION['error_code'] = "403"; header("Cache-Control: max-age=1"); header("Location: index.php?page=error"); throw new SystemExit(); } } else { //ERROR: not logged in! header("Cache-Control: max-age=1"); header("Location: index.php"); throw new SystemExit(); } }