getVar("permissions") , JAK_MAIN_OP)) jak_redirect(BASE_URL); // All the tables we need for this plugin $errors = array(); $jaktable = 'support_tickets'; $jaktable1 = 'support_departments'; $jaktable2 = 'support_responses'; $jaktable3 = 'ticketpriority'; $jaktable4 = 'ticket_answers'; $jaktable5 = 'clients'; $jaktable6 = 'user'; $jaktable7 = 'php_imap'; $jaktable8 = 'ticketoptions'; $jaktable9 = 'customfields_data'; $jaktable10 = 'support_tickets_cc'; $jaktable11 = 'support_tickets_response'; // Reset some stuff $jkp = ""; $OPERATOR_CC = array(); $supportaccess = $addclient = false; $totalclients = (!empty($jakosub) ? $jakosub['clients'] : 0); // Explode the time format so it is always available $duedateformat = explode(":#:", JAK_TICKET_DUEDATE_FORMAT); switch ($page1) { case 'new': // Reset some stuff $userid = $depid = 0; $newclient = false; // We allow access $supportaccess = true; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $jkp = $_POST; if (isset($jkp['jak_namec']) && !empty($jkp['jak_namec']) && isset($jkp['jak_emailc']) && filter_var($jkp['jak_emailc'], FILTER_VALIDATE_EMAIL)) { // Check if the email is already registered if (jak_field_not_exist(strtolower($jkp['jak_emailc']) , $jaktable5, "email")) { $errors['emailc'] = $jkl['e18']; } if (empty($jkp['jak_namec'])) { $errors['namec'] = $jkl['e7']; } $newclient = true; } else { if (isset($jkp["jak_client"]) && $jkp["jak_client"] == 0) { $errors['jak_client'] = $jkl['hd199']; } } if (empty($jkp['subject'])) { $errors['subject'] = $jkl['e2']; } if (empty($_REQUEST['content'])) { $errors['content-editor'] = $jkl['e1']; } if (count($errors) == 0) { // We have a new client to create if ($newclient) { // create new password $password = jak_password_creator(); $passcrypt = hash_hmac('sha256', $password, DB_PASS_HASH); $jakdb->insert($jaktable5, ["opid" => $opcacheid, "chat_dep" => JAK_STANDARD_CHAT_DEP, "support_dep" => JAK_STANDARD_SUPPORT_DEP, "faq_cat" => JAK_STANDARD_FAQ_CAT, "name" => $jkp['jak_namec'], "email" => $jkp['jak_emailc'], "password" => $passcrypt, "canupload" => 1, "access" => 1, "time" => $jakdb->raw("NOW()") ]); $newclientid = $jakdb->id(); // Create a folder $newuserpath = APP_PATH . JAK_FILES_DIRECTORY . '/clients/' . $newclientid; if (!is_dir($newuserpath)) { mkdir($newuserpath, 0755); copy(APP_PATH . JAK_FILES_DIRECTORY . "/clients/index.html", $newuserpath . "/index.html"); } // Write the log file each time someone tries to login before JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, $newclientid, 12, $newclientid, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : '') , filter_var($jkp['jak_emailc'], FILTER_SANITIZE_EMAIL) , $_SERVER['REQUEST_URI'], $ipa, $valid_agent); // Now send the email to the customer if we wish so. if (isset($jkp['send_email']) && $jkp['send_email'] == 1) { // Get the email template $nlhtml = file_get_contents(APP_PATH . 'template/' . JAK_FRONT_TEMPLATE . '/email/index.html'); // Change fake vars into real ones. if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $hda) { if ($hda["msgtype"] == 14 && $hda["lang"] == JAK_LANG) { $phold = array( '{url}', '{title}', '{cname}', '{cemail}', '{cpassword}', '{email}' ); $replace = array( str_replace($url_filter, $url_replace, BASE_URL) , JAK_TITLE, $jkp['jak_namec'], $jkp['jak_emailc'], $password, JAK_EMAIL ); $regtext = str_replace($phold, $replace, $hda["message"]); break; } } // Change fake vars into real ones. $cssAtt = array( '{emailcontent}', '{weburl}', '{title}', '{emailtpllogo}', '{emailtplcopy}' ); $cssUrl = array( $regtext, str_replace($url_filter, $url_replace, BASE_URL), JAK_TITLE, JAK_EMAILTPLLOGO, JAK_EMAILTPLCOPY ); $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); // Ok, we send the email // email address, cc email address, reply to, subject, message, attachment jak_send_email($jkp['jak_emailc'], "", "", JAK_TITLE.' - '.$jkl['g247'], $body, ""); } $client_info = $newclientid . ':#:' . JAK_STANDARD_SUPPORT_DEP . ':#:' . $jkp['jak_namec']; } else { $client_info = $jkp['jak_client']; } // Get the selected clientid $saveclientid = explode(":#:", $client_info); // Get the client data once again $client_save = $jakdb->get($jaktable5, ["name", "email", "credits", "paid_until"], ["id" => $saveclientid[0]]); // Filter the subject $subjectf = trim($jkp['subject']); // Filter the notes $notesf = trim($jkp['jak_notes']); // Filter the content $contentf = jak_clean_safe_userpost($_REQUEST['content']); // We have the due date and we will need to make it right for mysql if (isset($jkp["jak_duedate"]) && !empty($jkp["jak_duedate"])) { $duedate = DateTime::createFromFormat($duedateformat[0], $jkp["jak_duedate"]); $duedatesql = $duedate->format("Y-m-d"); } else { $duedatesql = date("Y-m-d", strtotime('+' . JAK_TICKET_DUEDATE_PRESET . 'day')); } // We need the time once $ticketcreated = time(); // CHeck if there are any priorities otherwise set 1 if (isset($jkp['jak_priority']) && $jkp['jak_priority'] != 0) { $jakpriority = $jkp['jak_priority']; } else { $jakpriority = 1; } // Create the ticket $result = $jakdb->insert($jaktable, ["opid" => $opcacheid, "depid" => $jkp['jak_depid'], "subject" => $subjectf, "content" => $contentf, "operatorid" => $jkp['jak_operator'], "clientid" => $saveclientid[0], "lang" => $jkp['jak_tlang'], "name" => $client_save["name"], "email" => $client_save["email"], "referrer" => $jkp['jak_referrer'], "notes" => $notesf, "private" => $jkp['jak_private'], "priorityid" => $jakpriority, "toptionid" => $jkp['jak_toption'], "status" => $jkp['jak_status'], "ip" => $ipa, "updated" => $ticketcreated, "initiated" => $ticketcreated, "duedate" => $duedatesql]); if (!$result) { $_SESSION["infomsg"] = $jkl['i']; jak_redirect($_SESSION['LCRedirect']); } else { // Get the ID from the ticket $lastid = $jakdb->id(); // Write the log file each time someone tries to login before JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 8, $lastid, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : '') , $jakuser->getVar("username") , $_SERVER['REQUEST_URI'], $ipa, $valid_agent); if ($jkp['jak_status'] == 3) { $jakdb->update($jaktable, ["ended" => $ticketcreated], ["id" => $lastid]); } // And we complete the custom fields jak_save_custom_fields($opid, $clientid, $ticketid, $contactid, $jkp, $fieldloc) jak_save_custom_fields($opcacheid, $saveclientid[0], $lastid, 0, $jkp, 2); // Set the client ticket request +1 $jakdb->update($jaktable5, ["supportrequests[+]" => 1], ["id" => $saveclientid[0]]); // We run on a credit based system? if (JAK_BILLING_MODE == 1) { $priocredit = $optcredit = 0; if (isset($jkp["jak_priority"]) && is_numeric($jkp["jak_priority"])) { $priocredit = $jakdb->get($jaktable8, "credits", ["AND" => ["id" => $jkp["jak_priority"], "opid" => $opcacheid]]); } if (isset($jkp["jak_toption"]) && is_numeric($jkp["jak_toption"])) { $optcredit = $jakdb->get($jaktable8, "credits", ["AND" => ["id" => $jkp["jak_toption"], "opid" => $opcacheid]]); } // Let us collect the department details. $depcredit = 0; if (isset($HD_SUPPORT_DEPARTMENTS) && is_array($HD_SUPPORT_DEPARTMENTS)) foreach ($HD_SUPPORT_DEPARTMENTS as $v) { if ($v["id"] == $jkp['jak_depid']) { $depcredit = $v["credits"]; } } $totalc = $depcredit + $priocredit + $optcredit; // We need to get the credits if ($totalc != 0) { // Take some credits away $jakdb->update($jaktable5, ["credits[-]" => $totalc], ["id" => $saveclientid[0]]); // Credit system control $jakdb->insert("taken_credits", ["clientid" => $saveclientid[0], "operatorid" => JAK_USERID, "credits" => $totalc, "created" => $jakdb->raw("NOW()") ]); // Inform the operator that all credits have been used. if (($client_save["credits"] - $totalc) < 0) { $_SESSION["errormsg"] = sprintf($jkl['hd227'], $client_save["name"], $client_save["credits"]); } } // We run the membership based system } elseif (JAK_BILLING_MODE == 2 && strtotime($client_save["paid_until"]) < $ticketcreated) { $_SESSION["errormsg"] = sprintf($jkl['hd228'], $client_save["name"], $client_save["paid_until"]); } // all has been stored let's send the email if whish so if (isset($jkp["inform-client"]) && !empty($jkp["inform-client"])) { // Finally we inform the customer about the new ticket // Dashboard URL $ticketurl = str_replace(JAK_OPERATOR_LOC . '/', '', JAK_rewrite::jakParseurl(JAK_SUPPORT_URL, 't', $lastid, JAK_rewrite::jakCleanurl($subjectf))); // Let's check if we have an imap $answeremail = $ticktext = ''; $check_imap = $jakdb->get($jaktable7, "emailanswer", ["AND" => ["depid" => $jkp['jak_depid'], "opid" => $opcacheid]]); if ($check_imap) { $answeremail = $check_imap; $subjectl = JAK_TITLE . ' - [#' . $page2 . '] - ' . $jkl['hd177'] . ' / ' . $subjectf; } else { $subjectl = JAK_TITLE . ' - ' . $jkl['hd177'] . ' / ' . $subjectf; } // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 20 && $v["lang"] == JAK_LANG) { $phold = array( '{url}', '{title}', '{cemail}', '{cname}', '{credits}', '{paid_until}', '{ticket}', '{subject}', '{ticketurl}', '{email}', '{ticketcontent}' ); $replace = array( BASE_URL_ORIG, JAK_TITLE, $client_save['email'], $client_save['name'], $client_save['credits'], $client_save['paid_until'], '#' . $lastid, $subjectf, $ticketurl, $answeremail, replace_urls_emails($contentf, BASE_URL_ORIG, JAK_FILES_DIRECTORY) ); $ticktext = str_replace($phold, $replace, $v["message"]); break; } } if (!empty($ticktext)) { $ticktext = '
-------------## Do Not Remove ##-------------
' . $ticktext; // Get the email template $nlhtml = file_get_contents(APP_PATH . 'template/' . JAK_FRONT_TEMPLATE . '/email/index.html'); // Change fake vars into real ones. $cssAtt = array( '{emailcontent}', '{weburl}', '{title}', '{emailtpllogo}', '{emailtplcopy}' ); $cssUrl = array( $ticktext, BASE_URL_ORIG, JAK_TITLE, JAK_EMAILTPLLOGO, JAK_EMAILTPLCOPY ); $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); // Ok, we send the email // email address, cc email address, subject, message, attachment if (jak_send_email($client_save["email"], "", "", JAK_TITLE . ' - RE:' . $subjectf, $body, "")) $_SESSION["infomsg"] = $jkl['hd134']; } } // We have a third party operator, let's inform the operator. if ($jkp['jak_operator'] != JAK_USERID) { // The new operator $new_operator_ticket = $jakdb->get($jaktable6, ["username", "email"], ["id" => $jkp['jak_operator']]); // The URL $opurlt = sprintf($jkl['hd249'], JAK_rewrite::jakParseurl('support', 'read', $lastid)); // Ok, we send the email // email address, cc email address, subject, message, attachment jak_send_email($new_operator_ticket['email'], "", "", $subjectl, $opurlt, ""); } // Now we will need to inform the customers that have assigned CC if (isset($jkp['jak_opidcc']) && !empty($jkp['jak_opidcc'])) { // Check if we have a change in operator cc field updateOperatorCC($jkp['jak_opidcc'], $opcacheid, $lastid); // The new operator $operator_cc_email = $jakdb->select($jaktable6, "email", ["id" => $jkp['jak_opidcc']]); // The URL $opurlt = sprintf($jkl['hd267'], '' . JAK_rewrite::jakParseurl('support', 'read', $lastid) . ''); // Ok, we send the email // email address, cc email address, subject, message jak_send_email($operator_cc_email, "", "", sprintf($jkl['hd290'], $JAK_FORM_DATA['subject']), $opurlt, ""); } if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) { die(json_encode(array( "status" => 1, "ticketid" => $lastid, 'redirecturl' => JAK_rewrite::jakParseurl('support', 'read', $lastid) ))); } else { $_SESSION["successmsg"] = $jkl['g14']; jak_redirect(JAK_rewrite::jakParseurl('support', 'read', $lastid)); } } // Output the errors } else { $errors = $errors; if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) { die(json_encode(array( "status" => 0, "errors" => $errors ))); } } } // Title and Description $SECTION_TITLE = $jkl["hd193"]; $SECTION_DESC = ""; // Get all clients $CLIENTS_ALL = $jakdb->select($jaktable5, ["id", "support_dep", "name", "email"], ["AND" => ["opid" => $opcacheid, "access" => 1], "ORDER" => ["name" => "ASC"]]); // Get the department for the selected client $DEPARTMENTS_ALL = $HD_SUPPORT_DEPARTMENTS; // Get all operators $OPERATOR_ALL = $jakdb->select($jaktable6, ["id", "name", "email"], ["OR #andclause" => ["AND #the first condition" => ["id" => JAK_USERID], "AND #the second condition" => ["permissions[~]" => "support", "support_dep" => 0, "access" => 1, "opid" => $opcacheid]], "ORDER" => ["name" => "ASC"]]); // Get all priorities $PRIORITY_ALL = $jakdb->select($jaktable3, "*", ["AND" => ["depid" => 0, "opid" => $opcacheid]]); // Get all options $TOPTIONS_ALL = $jakdb->select($jaktable8, "*", ["AND" => ["depid" => 0, "opid" => $opcacheid]]); // Get all operators in cc $OPERATOR_CC = $jakdb->select($jaktable10, "operatorid", ["AND" => ["opid" => $opcacheid, "ticketid" => $page2]]); // Get the custom fields if any $custom_fields = jak_get_custom_fields(2, $opcacheid, 0, 0, 0, 0, $jakuser->getVar("language") , false, true, false, false, false); // Get the standard support responses $JAK_RESPONSE_DATA = ""; if (isset($HD_RESPONSEST) && is_array($HD_RESPONSEST)) { $JAK_RESPONSE_DATA .= ''; // get the responses from the file specific for this client foreach ($HD_RESPONSEST as $r) { if ($r["depid"] == 0 || $r["depid"] == 0) { $JAK_RESPONSE_DATA .= ''; } } } // Ok we have an id from the chat if ($page2 = "chat" && is_numeric($page3)) { // Get the data $datasett = $jakdb->get("sessions", ["id", "clientid", "name", "operatorname", "email", "phone"], ["AND" => ["opid" => $opcacheid, "id" => $page3]]); if (!empty($datasett)) { // Get the client $tfromchat = $jakdb->get($jaktable5, ["id", "support_dep", "name", "email"], ["AND" => ["id" => $datasett["clientid"], "opid" => $opcacheid, "access" => 1]]); // Get the messages $chatmsgs = $jakdb->select("transcript", "*", ["convid" => $datasett["id"], "ORDER" => ["id" => "ASC"]]); $mailchat = '' . $jkl["u"] . ': ' . $datasett['name'] . '
' . $jkl["u1"] . ': ' . $datasett['email'] . '
' . $jkl["u14"] . ': ' . $datasett['phone'] . '
-------------## Do Not Remove ##-------------
' . $ticktext; // Get the email template $nlhtml = file_get_contents(APP_PATH . 'template/' . JAK_FRONT_TEMPLATE . '/email/index.html'); // Change fake vars into real ones. $cssAtt = array( '{emailcontent}', '{weburl}', '{title}', '{emailtpllogo}', '{emailtplcopy}' ); $cssUrl = array( $ticktext, BASE_URL_ORIG, JAK_TITLE, JAK_EMAILTPLLOGO, JAK_EMAILTPLCOPY ); $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); // Send attachment if set so in php imap $attachE = array(); if (isset($check_imap) && $check_imap['attachemail'] == 1 && $JAK_FORM_DATA["attachments"] != 0) { // Now we get the path $targetPathTA = CLIENT_UPLOAD_DIR . '/' . $opcacheid . '/support/' . $page2; // Ge the files if (is_dir($targetPathTA)) $JAK_TICKET_FILES = jak_get_files($targetPathTA); if (isset($JAK_TICKET_FILES) && is_array($JAK_TICKET_FILES)) foreach($JAK_TICKET_FILES as $k) { if ((strpos($k, "o_") !== false) || (strpos($k, "app_") !== false)) { // Now we have the correct files, let's attach the ones the last 10 minutes uploaded if (filemtime($targetPathTA.'/'.$k) >= strtotime("-10 minute")) { $attachE = ($targetPathTA.'/'.$k); } } } } // Ok, we send the email // email address, cc email address, subject, message if (jak_send_email((isset($JAK_FORM_DATA['email']) && !empty($JAK_FORM_DATA['email']) ? $JAK_FORM_DATA['email'] : $JAK_FORM_DATA['guest_email']), "", $answeremail, $subjectl, $body, $attachE)) $_SESSION["infomsg"] = $jkl['hd134']; } } // We are closing the ticket in the same time if (isset($jkp['save_close'])) { // Now let's update the status and the ended time $result = $jakdb->update($jaktable, ["status" => ($support_status_id + 3), "ended" => time() , "reminder" => 2], ["AND" => ["id" => $page2, "opid" => $opcacheid]]); // If Rating is on if (JAK_TICKET_RATING) { // Dashboard URL $ticketratingurl = str_replace(JAK_OPERATOR_LOC . '/', '', JAK_rewrite::jakParseurl(JAK_CLIENT_URL, 'rt', $JAK_FORM_DATA["id"], $JAK_FORM_DATA["initiated"])); // Let's check if we have an imap $answeremail = $ticktextr = ''; $check_imap = $jakdb->get($jaktable7, "emailanswer", ["depid" => $JAK_FORM_DATA["depid"]]); if ($check_imap) $answeremail = $check_imap; // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 25 && $v["lang"] == JAK_LANG) { $pholdr = array( '{url}', '{title}', '{cemail}', '{cname}', '{credits}', '{paid_until}', '{ticket}', '{subject}', '{ticketurl}', '{email}' ); $replacer = array( str_replace(JAK_OPERATOR_LOC . '/', '', BASE_URL) , JAK_TITLE, (isset($JAK_FORM_DATA['email']) && !empty($JAK_FORM_DATA['email']) ? $JAK_FORM_DATA['email'] : $JAK_FORM_DATA['guest_email']) , (isset($JAK_FORM_DATA['name']) && !empty($JAK_FORM_DATA['name']) ? $JAK_FORM_DATA['name'] : $JAK_FORM_DATA['guest_name']) , $JAK_FORM_DATA['credits'], $JAK_FORM_DATA['paid_until'], '#' . $JAK_FORM_DATA["id"], $JAK_FORM_DATA['subject'], $ticketratingurl, $answeremail ); $ticktextr = str_replace($pholdr, $replacer, $v["message"]); break; } } if (!empty($ticktextr)) { // Get the email template $nlhtml = file_get_contents(APP_PATH . 'template/' . JAK_FRONT_TEMPLATE . '/email/index.html'); // Change fake vars into real ones. $cssAtt = array( '{emailcontent}', '{weburl}', '{title}', '{emailtpllogo}', '{emailtplcopy}' ); $cssUrl = array( $ticktextr, str_replace(JAK_OPERATOR_LOC . '/', '', BASE_URL) , JAK_TITLE, JAK_EMAILTPLLOGO, JAK_EMAILTPLCOPY ); $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); // Ok, we send the email // email address, cc email address, subject, message jak_send_email((isset($JAK_FORM_DATA['email']) && !empty($JAK_FORM_DATA['email']) ? $JAK_FORM_DATA['email'] : $JAK_FORM_DATA['guest_email']), "", "", JAK_TITLE.' - '.$jkl['g85'].': '.$JAK_FORM_DATA['subject'], $body, ""); } } // Write the log file each time someone tries to login before JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 19, $lastid, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : '') , $jakuser->getVar("username") , $_SERVER['REQUEST_URI'], $ipa, $valid_agent); $_SESSION["successmsg"] = $jkl['g14']; jak_redirect(JAK_rewrite::jakParseurl('support')); } else { $_SESSION["successmsg"] = $jkl['g14']; jak_redirect($_SESSION['LCRedirect']); } } // Output the errors } else { $errors = $errors; } } // Title and Description $SECTION_TITLE = $jkl["hd176"]; $SECTION_DESC = ""; // Get all operators $OPERATOR_ALL = $jakdb->select($jaktable6, ["id", "name", "email"], ["OR #andclause" => ["AND #the first condition" => ["id" => JAK_USERID], "AND #the second condition" => ["permissions[~]" => "support", "support_dep" => [0, $JAK_FORM_DATA["depid"]], "access" => 1, "opid" => $opcacheid]], "ORDER" => ["name" => "ASC"]]); if ($JAK_FORM_DATA["support_dep"] == 0) { $DEPARTMENTS_ALL = $jakdb->select($jaktable1, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]); } else { $DEPARTMENTS_ALL = $jakdb->select($jaktable1, ["id", "title"], ["AND" => ["id" => [$JAK_FORM_DATA["support_dep"]], "opid" => $opcacheid], "ORDER" => ["dorder" => "ASC"]]); } // Get all responses $PRIORITY_ALL = $jakdb->select($jaktable3, "*", ["AND" => ["depid" => [0, $JAK_FORM_DATA["depid"]], "opid" => $opcacheid]]); // Get all responses $TOPTIONS_ALL = $jakdb->select($jaktable8, "*", ["AND" => ["depid" => [0, $JAK_FORM_DATA["depid"]], "opid" => $opcacheid]]); // Get all operators in cc $OPERATOR_CC = $jakdb->select($jaktable10, "operatorid", ["AND" => ["opid" => $opcacheid, "ticketid" => $page2]]); // We will need the response time $total_responses = $jakdb->count($jaktable11, ["ticketid" => $page2]); $total_responses_time = $jakdb->sum($jaktable11, "responsetime", ["ticketid" => $page2]); // Get the ticket Answers $JAK_ANSWER_DATA = $jakdb->select($jaktable4, ["[>]" . $jaktable6 => ["operatorid" => "id"], "[>]" . $jaktable5 => ["clientid" => "id"]], ["ticket_answers.id", "ticket_answers.content", "ticket_answers.lastedit", "ticket_answers.sent", "ticket_answers.private", "ticket_answers.file", "user.id(oid)", "user.name(oname)", "user.picture(upic)", "clients.id(cid)", "clients.name(cname)", "clients.picture(cpic)"], ["ticket_answers.ticketid" => $page2, "ORDER" => ["ticket_answers.sent" => "DESC"]]); // Get the standard support responses $JAK_RESPONSE_DATA = ""; if (isset($HD_RESPONSEST) && is_array($HD_RESPONSEST)) { $JAK_RESPONSE_DATA .= ''; // get the responses from the file specific for this client foreach ($HD_RESPONSEST as $r) { if ($r["depid"] == 0 || $r["depid"] == $JAK_FORM_DATA["depid"]) { $JAK_RESPONSE_DATA .= ''; } } } // Get the custom fields if any $custom_fields = jak_get_custom_fields(2, $opcacheid, 0, $JAK_FORM_DATA["clientid"], $JAK_FORM_DATA["id"], 0, $jakuser->getVar("language") , false, true, false, false, false); // Get the attachments if any if ($JAK_FORM_DATA["attachments"] != 0) { // Now we get the path $targetPathTA = CLIENT_UPLOAD_DIR . '/' . $opcacheid . '/support/' . $page2; if (is_dir($targetPathTA)) { $JAK_TICKET_FILES = jak_get_files_encrypt($targetPathTA); } else { // We could not find any attachmeents $jakdb->update($jaktable, ["attachments" => 0], ["id" => $page2]); } } // We edit some content $editcont = 0; if (isset($page3) && $page3 == 'edit') { $JAK_EDIT_CONTENT = $jakdb->get($jaktable, ["subject", "content"], ["id" => $page2]); $editcont = $page2; } // We edit some answer $editid = 0; if (isset($page3) && is_numeric($page3) && $jakdb->has($jaktable4, ["AND" => ["id" => $page3, "ticketid" => $page2]])) { $JAK_EDIT_ANSWER = $jakdb->get($jaktable4, ["content", "private"], ["id" => $page3]); $editid = $page3; } // We will need the current status of the ticket if (isset($HD_SUPPORT_STATUS) && !empty($HD_SUPPORT_STATUS)) foreach ($HD_SUPPORT_STATUS as $v) { // Compare with the current status if ($JAK_FORM_DATA["status"] == $v['id']) { $ticket_status_title = $v["title"]; $ticket_status_class = $v["class"]; $ticket_status_closed = $v["closed"]; break; } } // We set the operator id OR client id into the ticket live status table set_support_ticket_live_status($opcacheid, $page2, JAK_USERID, 0, 0); // Include the CSS file for the header $css_file_header = BASE_URL_ORIG . 'css/dropzone.css'; // Include the javascript file for results $js_file_footer = 'js_ticket.php'; // Load the template $template = 'readticket.php'; } else { $_SESSION["errormsg"] = $jkl['i3']; jak_redirect($_SESSION['LCRedirect']); } break; case 'deletea': // Check if the answer exists if (is_numeric($page2) && is_numeric($page3) && jak_row_exist($page2, $opcacheid, $jaktable) && jak_field_not_exist($page3, $jaktable4, "id")) { // Delete the answer $jakdb->delete($jaktable4, ["id" => $page3]); $_SESSION["successmsg"] = $jkl['g14']; jak_redirect(JAK_rewrite::jakParseurl('support', 'read', $page2)); } else { $_SESSION["errormsg"] = $jkl['i3']; jak_redirect($_SESSION['LCRedirect']); } break; case 'rating': // Check if the ticket has a rating if (isset($page2) && is_numeric($page2) && $jakdb->has($jaktable, ["AND" => ["id" => $page2, "opid" => $opcacheid]])) { $rowt = $jakdb->get($jaktable, ["subject"], ["AND" => ["id" => $page2, "opid" => $opcacheid]]); $row = $jakdb->get("ticket_rating", ["clientid", "name", "email", "vote", "comment", "support_time"], ["AND" => ["ticketid" => $page2, "opid" => $opcacheid]]); // Call the template $template = 'ticketrating.php'; } else { $_SESSION["errormsg"] = $jkl['i3']; jak_redirect(JAK_rewrite::jakParseurl('support')); } break; case 'deletef': # code... // Check if the file can be deleted if (is_numeric($page2) && !empty($page3)) { // Now let us delete the file $filedel = CLIENT_UPLOAD_DIR . '/' . $opcacheid . '/support/' . $page2 . '/' . $page3; if (file_exists($filedel)) unlink($filedel); // Counter - 1 $jakdb->update($jaktable, ["attachments[-]" => 1], ["id" => $page2]); // Now we remove the Answer entry in the table $answerdata = $jakdb->get($jaktable4, "id", ["AND" => ["ticketid" => $page2, "content" => $page3, "file" => 1]]); $jakdb->delete($jaktable4, ["id" => $answerdata]); if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) { die(json_encode(array( "status" => 1, "answerid" => $answerdata ))); } else { $_SESSION["successmsg"] = $jkl['g14']; jak_redirect($_SESSION['LCRedirect']); } } else { $_SESSION["errormsg"] = $jkl['i3']; jak_redirect($_SESSION['LCRedirect']); } break; case 'status': // Check if the ticket exists if (is_numeric($page2) && is_numeric($page3) && jak_row_exist($page2, $opcacheid, $jaktable)) { // Now check how many languages are installed and do the dirty work $result = $jakdb->update($jaktable, ["status" => $page3, "ended" => 0], ["AND" => ["id" => $page2, "opid" => $opcacheid]]); // Ticket is closed set an ending time if ($page3 == 3 || $page3 == 4) { $jakdb->update($jaktable, ["ended" => time() ], ["AND" => ["id" => $page2, "opid" => $opcacheid]]); // Get the ticket data first $ticketdata = $jakdb->get($jaktable, ["[>]clients" => ["clientid" => "id"]], ["support_tickets.id", "support_tickets.depid", "support_tickets.name", "support_tickets.email", "support_tickets.subject", "support_tickets.initiated", "clients.credits", "clients.paid_until"], ["AND" => ["support_tickets.id" => $page2, "support_tickets.opid" => $opcacheid]]); // Send email to customers if set so. if (JAK_TICKET_CLOSE_R == 1) { // Dashboard URL $ticketurl = str_replace(JAK_OPERATOR_LOC . '/', '', JAK_rewrite::jakParseurl(JAK_SUPPORT_URL, 't', $page2, JAK_rewrite::jakCleanurl($ticketdata["subject"]))); // Let's check if we have an imap $answeremail = $ticktext = ''; $check_imap = $jakdb->get($jaktable7, "emailanswer", ["AND" => ["depid" => $ticketdata["depid"], "opid" => $opcacheid]]); if ($check_imap) $answeremail = $check_imap; // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 23 && $v["lang"] == JAK_LANG) { $phold = array( '{url}', '{title}', '{cemail}', '{cname}', '{credits}', '{paid_until}', '{ticket}', '{subject}', '{ticketurl}', '{email}' ); $replace = array( BASE_URL_ORIG, JAK_TITLE, $ticketdata['email'], $ticketdata['name'], $ticketdata['credits'], $ticketdata['paid_until'], '#' . $page3, $ticketdata['subject'], $ticketurl, $answeremail ); $ticktext = str_replace($phold, $replace, $v["message"]); break; } } // Get the email template if (!empty($ticktext)) { $nlhtml = file_get_contents(APP_PATH . 'template/' . JAK_FRONT_TEMPLATE . '/email/index.html'); // Change fake vars into real ones. $cssAtt = array( '{emailcontent}', '{weburl}', '{title}', '{emailtpllogo}', '{emailtplcopy}' ); $cssUrl = array( $ticktext, BASE_URL_ORIG, JAK_TITLE, JAK_EMAILTPLLOGO, JAK_EMAILTPLCOPY ); $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); // Ok, we send the email // email address, cc email address, subject, message if (jak_send_email($ticketdata['email'], "", "", JAK_TITLE.' - '.sprintf($jkl['hd192'], $ticketdata['subject']), $body, "")) $_SESSION["infomsg"] = $jkl['hd134']; } } // end sending closed message // Send rating to customer when ticket is closed forever if ($page3 == 4) { // Dashboard URL $ticketratingurl = str_replace(JAK_OPERATOR_LOC . '/', '', JAK_rewrite::jakParseurl(JAK_CLIENT_URL, 'rt', $ticketdata["id"], $ticketdata["initiated"])); // Let's check if we have an imap $answeremail = $ticktextr = ''; $check_imap = $jakdb->get($jaktable7, "emailanswer", ["AND" => ["depid" => $ticketdata["depid"], "opid" => $opcacheid]]); if ($check_imap) $answeremail = $check_imap; // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 25 && $v["lang"] == JAK_LANG) { $pholdr = array( '{url}', '{title}', '{cemail}', '{cname}', '{credits}', '{paid_until}', '{ticket}', '{subject}', '{ticketurl}', '{email}' ); $replacer = array( str_replace(JAK_OPERATOR_LOC . '/', '', BASE_URL) , JAK_TITLE, $ticketdata['email'], $ticketdata['name'], $ticketdata['credits'], $ticketdata['paid_until'], '#' . $ticketdata["id"], $ticketdata['subject'], $ticketratingurl, $answeremail ); $ticktextr = str_replace($pholdr, $replacer, $v["message"]); break; } } if (!empty($ticktextr)) { // Get the email template $nlhtml = file_get_contents(APP_PATH . 'template/' . JAK_FRONT_TEMPLATE . '/email/index.html'); // Change fake vars into real ones. $cssAtt = array( '{emailcontent}', '{weburl}', '{title}', '{emailtpllogo}', '{emailtplcopy}' ); $cssUrl = array( $ticktextr, str_replace(JAK_OPERATOR_LOC . '/', '', BASE_URL) , JAK_TITLE, JAK_EMAILTPLLOGO, JAK_EMAILTPLCOPY ); $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); // Ok, we send the email // email address, cc email address, subject, message jak_send_email($ticketdata['email'], "", "", JAK_TITLE.' - '.$jkl['g85'].': '.$ticketdata['subject'], $body, ""); // Now we update the ticket table $jakdb->update($jaktable, ["reminder" => 2], ["AND" => ["id" => $ticketdata['id'], "opid" => $opcacheid]]); } } } if (!$result) { $_SESSION["infomsg"] = $jkl['i']; jak_redirect($_SESSION['LCRedirect']); } else { // Write the log file each time someone tries to login before JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 19, $page2, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : '') , $jakuser->getVar("username") , $_SERVER['REQUEST_URI'], $ipa, $valid_agent); $_SESSION["successmsg"] = $jkl['g14']; jak_redirect($_SESSION['LCRedirect']); } } else { $_SESSION["errormsg"] = $jkl['i3']; jak_redirect($_SESSION['LCRedirect']); } break; case 'split': // First we check if we can split the ticket. if (is_numeric($page2) && is_numeric($page3) && jak_row_exist($page2, $opcacheid, $jaktable) && $jakdb->has($jaktable4, ["id" => $page3])) { // We have a post if ($_SERVER['REQUEST_METHOD'] == 'POST') { $jkp = $_POST; if (empty($jkp['subject'])) { $errors['e'] = $jkl['e2']; } if (empty($jkp['content'])) { $errors['e1'] = $jkl['e1']; } if (count($errors) == 0) { // Get the client data once again $client_save = $jakdb->get($jaktable5, ["name", "email", "credits", "paid_until"], ["AND" => ["id" => $jkp["clientid"], "opid" => $opcacheid]]); // Filter the subject $subjectf = trim($jkp['subject']); // Filter the notes $notesf = trim($jkp['jak_notes']); // Filter the content $contentf = jak_clean_safe_userpost($_REQUEST['content']); // We have the due date and we will need to make it right for mysql if (isset($jkp["jak_duedate"]) && !empty($jkp["jak_duedate"])) { $duedate = DateTime::createFromFormat($duedateformat[0], $jkp["jak_duedate"]); $duedatesql = $duedate->format("Y-m-d"); } else { $duedatesql = date("Y-m-d", strtotime('+' . JAK_TICKET_DUEDATE_PRESET . 'day')); } // We need the time once $ticketcreated = time(); // Create the ticket $result = $jakdb->insert($jaktable, ["opid" => $opcacheid, "depid" => $jkp["jak_depid"], "subject" => $subjectf, "content" => $contentf, "operatorid" => $jkp['jak_operator'], "clientid" => $jkp["clientid"], "name" => $client_save["name"], "email" => $client_save["email"], "referrer" => $jkp['jak_referrer'], "notes" => $notesf, "private" => $jkp['jak_private'], "priorityid" => $jkp['jak_priority'], "toptionid" => $jkp['jak_toption'], "status" => $jkp['jak_status'], "ip" => $ipa, "updated" => $ticketcreated, "initiated" => $ticketcreated, "duedate" => $duedatesql]); if (!$result) { $_SESSION["infomsg"] = $jkl['i']; jak_redirect($_SESSION['LCRedirect']); } else { // Get the ID from the ticket $lastid = $jakdb->id(); // Write the log file each time someone tries to login before JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 22, $lastid, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : '') , $jakuser->getVar("username") , $_SERVER['REQUEST_URI'], $ipa, $valid_agent); // Now we will need to delete the answer, because we create a new ticket $jakdb->delete($jaktable4, ["id" => $page3]); // We move attachments if (isset($jkp["move-files"]) && is_array($jkp["move-files"])) { foreach ($jkp["move-files"] as $f) { // first get the target path $targetPathd = CLIENT_UPLOAD_DIR . '/' . $opcacheid . '/support/' . $lastid . '/'; $targetPath = str_replace("//", "/", $targetPathd); if (!is_dir($targetPath)) mkdir($targetPath, 0755, true); $oldlocation = CLIENT_UPLOAD_DIR . '/' . $opcacheid . '/support/' . $page2 . '/' . $f; $newlocation = $targetPath . '/' . $f; // Move file if (rename($oldlocation, $newlocation)) { // Update counter on the new ticket $jakdb->update($jaktable, ["attachments[+]" => 1], ["AND" => ["id" => $lastid, "opid" => $opcacheid]]); // Update counter on the old ticket $jakdb->update($jaktable, ["attachments[-]" => 1], ["AND" => ["id" => $page2, "opid" => $opcacheid]]); } } } // Should the ticket be closed if ($jkp['jak_status'] == 3) { $jakdb->update($jaktable, ["ended" => $ticketcreated], ["AND" => ["id" => $lastid, "opid" => $opcacheid]]); } // And we complete the custom fields jak_save_custom_fields($opid, $clientid, $ticketid, $contactid, $jkp, $fieldloc) jak_save_custom_fields($opcacheid, $saveclientid[0], $lastid, 0, $jkp, 2); // Set the client ticket request +1 $jakdb->update($jaktable5, ["supportrequests[+]" => 1], ["id" => $saveclientid[0]]); // We run on a credit based system? if (JAK_BILLING_MODE == 1) { $priocredit = $optcredit = 0; if (isset($jkp["jak_priority"]) && is_numeric($jkp["jak_priority"])) { $priocredit = $jakdb->get($jaktable8, "credits", ["id" => $jkp["jak_priority"]]); } if (isset($jkp["jak_toption"]) && is_numeric($jkp["jak_toption"])) { $optcredit = $jakdb->get($jaktable8, "credits", ["id" => $jkp["jak_toption"]]); } // Let us collect the department details. $depcredit = 0; if (isset($HD_SUPPORT_DEPARTMENTS) && is_array($HD_SUPPORT_DEPARTMENTS)) foreach ($HD_SUPPORT_DEPARTMENTS as $v) { if ($v["id"] == $ticketinfo["depid"]) { $depcredit = $v["credits"]; } } $totalc = $depcredit + $priocredit + $optcredit; // We need to get the credits if ($totalc != 0) { // Take some credits away $jakdb->update($jaktable5, ["credits[-]" => $totalc], ["id" => $saveclientid[0]]); // Credit system control $jakdb->insert("taken_credits", ["clientid" => $saveclientid[0], "operatorid" => JAK_USERID, "credits" => $totalc, "created" => $jakdb->raw("NOW()") ]); // Inform the operator that all credits have been used. if (($client_save["credits"] - $totalc) < 0) { $_SESSION["errormsg"] = sprintf($jkl['hd227'], $client_save["name"], $client_save["credits"]); } } // We run the membership based system } elseif (JAK_BILLING_MODE == 2 && strtotime($client_save["paid_until"]) < $ticketcreated) { $_SESSION["errormsg"] = sprintf($jkl['hd228'], $client_save["name"], $client_save["paid_until"]); } // all has been stored let's send the email if whish so if (isset($jkp["inform-client"]) && !empty($jkp["inform-client"])) { // Finally we inform the customer about the new ticket // Dashboard URL $ticketurl = str_replace(JAK_OPERATOR_LOC . '/', '', JAK_rewrite::jakParseurl(JAK_SUPPORT_URL, 't', $lastid, JAK_rewrite::jakCleanurl($subjectf))); // Let's check if we have an imap $answeremail = $ticktext = ''; $check_imap = $jakdb->get($jaktable7, "emailanswer", ["depid" => $ticketinfo["depid"]]); if ($check_imap) { $answeremail = $check_imap; $subjectl = JAK_TITLE . ' - [#' . $page2 . '] - ' . $jkl['hd177'] . ' / ' . $subjectf; } else { $subjectl = JAK_TITLE . ' - ' . $jkl['hd177'] . ' / ' . $subjectf; } // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 20 && $v["lang"] == JAK_LANG) { $phold = array( '{url}', '{title}', '{cemail}', '{cname}', '{credits}', '{paid_until}', '{ticket}', '{subject}', '{ticketurl}', '{email}', '{ticketcontent}' ); $replace = array( BASE_URL_ORIG, JAK_TITLE, $client_save['email'], $client_save['name'], $client_save['credits'], $client_save['paid_until'], '#' . $lastid, $subjectf, $ticketurl, $answeremail, replace_urls_emails($contentf, BASE_URL_ORIG, JAK_FILES_DIRECTORY) ); $ticktext = str_replace($phold, $replace, $v["message"]); break; } } if (!empty($ticktext)) { $ticktext = '-------------## Do Not Remove ##-------------
' . $ticktext; // Get the email template $nlhtml = file_get_contents(APP_PATH . 'template/' . JAK_FRONT_TEMPLATE . '/email/index.html'); // Change fake vars into real ones. $cssAtt = array( '{emailcontent}', '{weburl}', '{title}', '{emailtpllogo}', '{emailtplcopy}' ); $cssUrl = array( $ticktext, BASE_URL_ORIG, JAK_TITLE, JAK_EMAILTPLLOGO, JAK_EMAILTPLCOPY ); $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); // Ok, we send the email // email address, cc email address, subject, message if (jak_send_email($client_save['email'], "", "", JAK_TITLE . ' - RE:' . $subjectf, $body, "")) $_SESSION["infomsg"] = $jkl['hd134']; } } // We have a third party operator, let's inform the operator. if ($jkp['jak_operator'] != JAK_USERID) { // The new operator $new_operator_ticket = $jakdb->get($jaktable6, ["username", "email"], ["id" => $jkp['jak_operator']]); // The URL $opurlt = sprintf($jkl['hd249'], JAK_rewrite::jakParseurl('support', 'read', $lastid)); // Ok, we send the email // email address, cc email address, subject, message, attachment jak_send_email($new_operator_ticket['email'], "", "", $subjectl, $opurlt, ""); } // Now we will need to inform the customers that have assigned CC if (isset($jkp['jak_opidcc']) && !empty($jkp['jak_opidcc'])) { // Check if we have a change in operator cc field updateOperatorCC($jkp['jak_opidcc'], $opcacheid, $lastid); // The new operator $operator_cc_email = $jakdb->select($jaktable6, "email", ["id" => $jkp['jak_opidcc']]); // The URL $opurlt = sprintf($jkl['hd267'], '' . JAK_rewrite::jakParseurl('support', 'read', $lastid) . ''); // Ok, we send the email // email address, cc email address, subject, message, attachment jak_send_email($operator_cc_email, "", "", sprintf($jkl['hd290'], $subjectf), $opurlt, ""); } $_SESSION["successmsg"] = $jkl['g14']; jak_redirect(JAK_rewrite::jakParseurl('support', 'read', $lastid)); } // Output the errors } else { $errors = $errors; } } // Title and Description $SECTION_TITLE = $jkl["hd286"]; $SECTION_DESC = ""; // Now let's get the current information out $ticketinfo = $jakdb->get($jaktable, ["depid", "clientid", "referrer", "attachments"], ["AND" => ["id" => $page2, "opid" => $opcacheid]]); // Also get the answer $ticketanswer = $jakdb->get($jaktable4, ["ticketid", "content"], ["id" => $page3]); $_REQUEST['content'] = $ticketanswer["content"]; $_REQUEST['jak_referrer'] = $ticketinfo["referrer"]; if (isset($ticketinfo["clientid"]) && isset($ticketinfo["depid"])) { $JAK_CLIENT_DATA = $jakdb->get($jaktable5, ["id", "name", "email", "support_dep"], ["AND" => ["opid" => $opcacheid, "id" => $ticketinfo["clientid"]]]); $JAK_DEP_DATA = $jakdb->get($jaktable1, ["id", "title", "email"], ["AND" => ["opid" => $opcacheid, "id" => $ticketinfo["depid"]]]); // Get all operators $OPERATOR_ALL = $jakdb->select($jaktable6, ["id", "name", "email"], ["OR #andclause" => ["AND #the first condition" => ["id" => [JAK_SUPERADMIN]], "AND #the second condition" => ["permissions[~]" => "support", "support_dep[~]" => [0, $JAK_DEP_DATA["id"]], "access" => 1]], "ORDER" => ["name" => "ASC"]]); // Get all the departments if ($JAK_CLIENT_DATA["support_dep"] == 0) { $DEPARTMENTS_ALL = $jakdb->select($jaktable1, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]); } else { $DEPARTMENTS_ALL = $jakdb->select($jaktable1, ["id", "title"], ["AND" => ["id" => [$JAK_FORM_DATA["support_dep"]], "opid" => $opcacheid], "ORDER" => ["dorder" => "ASC"]]); } // Get all priorities $PRIORITY_ALL = $jakdb->select($jaktable3, "*", ["AND" => ["depid" => [0, $JAK_DEP_DATA["id"]], "opid" => $opcacheid]]); // Get all options $TOPTIONS_ALL = $jakdb->select($jaktable8, "*", ["AND" => ["depid" => [0, $JAK_DEP_DATA["id"]], "opid" => $opcacheid]]); // Get all custom field data $OPERATOR_CC = $jakdb->select($jaktable10, "operatorid", ["AND" => ["opid" => $opcacheid, "ticketid" => $page2]]); // Get the custom fields if any $custom_fields = jak_get_custom_fields(false, 0, 2, $opcacheid, $JAK_DEP_DATA["id"], $jakuser->getVar("language") , false, true, false, false, false); // Get the attachments if any $JAK_TICKET_FILES = array(); if ($ticketinfo["attachments"] != 0) $JAK_TICKET_FILES = jak_get_files_encrypt(CLIENT_UPLOAD_DIR . '/' . $opcacheid . '/support/' . $page2); // Get the standard support responses $JAK_RESPONSE_DATA = ""; if (isset($HD_RESPONSEST) && is_array($HD_RESPONSEST)) { $JAK_RESPONSE_DATA .= ''; // get the responses from the file specific for this client foreach ($HD_RESPONSEST as $r) { if ($r["depid"] == 0 || $r["depid"] == $JAK_DEP_DATA["id"]) { $phold = array( "%operator%", "%client%", "%email%" ); $replace = array( $jakuser->getVar("name") , $JAK_CLIENT_DATA["name"], JAK_EMAIL ); $message = str_replace($phold, $replace, $r["message"]); $JAK_RESPONSE_DATA .= ''; } } } } // Include the javascript file for results $js_file_footer = 'js_newticket.php'; // Load the template $template = 'splitticket.php'; } else { $_SESSION["errormsg"] = $jkl['i3']; jak_redirect($_SESSION['LCRedirect']); } break; case 'merge': # code... // Let's go on with the script if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['ticketid'])) { $jkp = $_POST; // Errors in Array $errors = array(); if (empty($jkp['ticketid']) || !filter_var($jkp['ticketid'], FILTER_VALIDATE_INT)) { $errors['ticketid'] = $jkl['e15']; } if (!isset($errors['ticketid']) && $jkp['ticketid'] == $page2) { $errors['ticketid'] = $jkl['i74']; } if (!isset($errors['ticketid']) && !jak_row_exist($jkp['ticketid'], $opcacheid, $jaktable)) { $errors['ticketid'] = $jkl['i3']; } if (count($errors) > 0) { /* Outputtng the error messages */ if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) { header('Cache-Control: no-cache'); die(json_encode(array( 'status' => 0, 'errors' => $errors, 'html' => $errors['ticketid'] ))); } else { $errors = $errors; } } else { // Now we create an answer for the ticket we merge into it. $row = $jakdb->get($jaktable, ["id", "subject"], ["AND" => ["id" => $page2, "opid" => $opcacheid]]); // Get the link $ticketlink = '' . $row["subject"] . ''; // Get the sentence from the language file $content = sprintf($jkl['hd256'], $row["id"], $ticketlink); // Filter the content $contentf = jak_clean_safe_userpost($content); $result = $jakdb->insert($jaktable4, ["ticketid" => $jkp['ticketid'], "operatorid" => JAK_USERID, "content" => $contentf, "lastedit" => $jakdb->raw("NOW()") , "sent" => $jakdb->raw("NOW()") ]); // Update the ticket we merged into it $jakdb->update($jaktable, ["updated" => time() ], ["AND" => ["id" => $jkp["ticketid"], "opid" => $opcacheid]]); // Now let's update the ticket we merged so we need to update the ticket and close it for good. $row1 = $jakdb->get($jaktable, ["id", "subject"], ["AND" => ["id" => $jkp["ticketid"], "opid" => $opcacheid]]); // Create the URL for the answer, so it is linked. $ticketlinkn = '' . $row1["subject"] . ''; // Get the sentence from the language file $content = sprintf($jkl['hd255'], $row1["id"], $ticketlinkn); // Filter the content $contentf = jak_clean_safe_userpost($content); $result = $jakdb->insert($jaktable4, ["ticketid" => $page2, "operatorid" => JAK_USERID, "content" => $contentf, "lastedit" => $jakdb->raw("NOW()") , "sent" => $jakdb->raw("NOW()") ]); // Get the ID from the ticket $lastid = $jakdb->id(); // Let's get the support status id $support_status_id = $jakdb->get("support_status", "id", ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]); // Update the ticket we merged into it $jakdb->update($jaktable, ["status" => ($support_status_id + 3), "mergeid" => $jkp["ticketid"], "mergeopid" => JAK_USERID, "mergetime" => time() , "ended" => time() , "updated" => time() ], ["AND" => ["id" => $page2, "opid" => $opcacheid]]); // Write the log file JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 21, $lastid, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : '') , $jakuser->getVar("username") , $_SERVER['REQUEST_URI'], $ipa, $valid_agent); // Now it is time to inform the customer that the ticket has been merged and closed $ticketdata = $jakdb->get($jaktable, ["[>]clients" => ["clientid" => "id"]], ["support_tickets.id", "support_tickets.depid", "support_tickets.name", "support_tickets.email", "support_tickets.subject", "support_tickets.initiated", "clients.credits", "clients.paid_until"], ["AND" => ["support_tickets.id" => $page2, "opid" => $opcacheid]]); // Send email to customers if set so. if (JAK_TICKET_CLOSE_R == 1) { // Dashboard URL $ticketurl = str_replace(JAK_OPERATOR_LOC . '/', '', JAK_rewrite::jakParseurl(JAK_SUPPORT_URL, 't', $page2, JAK_rewrite::jakCleanurl($ticketdata["subject"]))); // Let's check if we have an imap $answeremail = $ticktext = ''; $check_imap = $jakdb->get($jaktable7, "emailanswer", ["AND" => ["depid" => $ticketdata["depid"], "opid" => $opcacheid]]); if ($check_imap) $answeremail = $check_imap; // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 23 && $v["lang"] == JAK_LANG) { $phold = array( '{url}', '{title}', '{cemail}', '{cname}', '{credits}', '{paid_until}', '{ticket}', '{subject}', '{ticketurl}', '{email}' ); $replace = array( BASE_URL_ORIG, JAK_TITLE, $ticketdata['email'], $ticketdata['name'], $ticketdata['credits'], $ticketdata['paid_until'], '#' . $ticketdata['id'], $ticketdata['subject'], $ticketurl, $answeremail ); $ticktext = str_replace($phold, $replace, $v["message"]); break; } } // Get the email template if (!empty($ticktext)) { $nlhtml = file_get_contents(APP_PATH . 'template/' . JAK_FRONT_TEMPLATE . '/email/index.html'); // Change fake vars into real ones. $cssAtt = array( '{emailcontent}', '{weburl}', '{title}', '{emailtpllogo}', '{emailtplcopy}' ); $cssUrl = array( $ticktext, BASE_URL_ORIG, JAK_TITLE, JAK_EMAILTPLLOGO, JAK_EMAILTPLCOPY ); $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); // Ok, we send the email // email address, cc email address, subject, message, attachment jak_send_email($ticketdata['email'], "", "", JAK_TITLE . ' - ' . sprintf($jkl['hd257'], $ticketdata['subject']), $body, ""); } } // end sending closed message // Ajax Request if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) { header('Cache-Control: no-cache'); die(json_encode(array( 'status' => 1, 'html' => $jkl["hd254"] ))); } else { jak_redirect($_SERVER['HTTP_REFERER']); } } } // Now we get the client and show the last 5 Tickets from this client. if (isset($page2) && is_numeric($page2) && jak_row_exist($page2, $opcacheid, $jaktable)) { // Get the client id $clientid = filter_var($page3, FILTER_SANITIZE_NUMBER_INT); $CLI_TICKET = $jakdb->select($jaktable, ["id", "subject", "initiated", "updated"], ["AND" => ["id[!]" => $page2, "opid" => $opcacheid, "clientid" => $clientid, "status[!]" => 4], "ORDER" => ["updated" => "DESC"], "LIMIT" => 6]); } // Call the template $template = 'mergeticket.php'; break; case 'statusfilter': if (isset($page2) && is_numeric($page2) && isset($HD_SUPPORT_STATUS) && !empty($HD_SUPPORT_STATUS)) { foreach ($HD_SUPPORT_STATUS as $s) { if ($s["id"] == $page2) { $_SESSION["sortstatus"] = $page2; break; } } jak_redirect(JAK_rewrite::jakParseurl('support')); } else { unset($_SESSION["sortstatus"]); jak_redirect(JAK_rewrite::jakParseurl('support')); } break; default: // if (isset($page1) && !is_numeric($page1) && !empty($page1)) jak_redirect(JAK_rewrite::jakParseurl('support')); // Check if we need to load the ticket if ($jakosub['tickets'] == 1) { // We allow access $supportaccess = true; // Let's go on with the script if ($_SERVER['REQUEST_METHOD'] == 'POST') { $jkp = $_POST; if (isset($jkp['action']) && $jkp['action'] == "depid") { if (isset($jkp['jak_depid']) && is_numeric($jkp['jak_depid']) && $jkp['jak_depid'] != 0) { if ($jakuser->getVar("support_dep") == 0 || in_array($jkp['jak_depid'], explode(",", $jakuser->getVar("support_dep")))) { $_SESSION["sortdepid"] = $jkp['jak_depid']; jak_redirect(JAK_rewrite::jakParseurl('support', $jkp['jak_depid'])); } } unset($_SESSION["sortdepid"]); jak_redirect(JAK_rewrite::jakParseurl('support')); } if (isset($jkp['action']) && $jkp['action'] == "opidsort") { if (isset($jkp['jak_opid']) && is_numeric($jkp['jak_opid']) && $jkp['jak_opid'] != 0) { if (jak_get_access("usrmanage", $jakuser->getVar("permissions"), JAK_MAIN_OP) || $jkp['jak_opid'] == JAK_USERID) { $_SESSION["sortopid"] = $jkp['jak_opid']; jak_redirect(JAK_rewrite::jakParseurl('support')); } } unset($_SESSION["sortopid"]); jak_redirect(JAK_rewrite::jakParseurl('support')); } if (isset($jkp['action']) && $jkp['action'] == "delete") { if (!JAK_USERID) jak_redirect(BASE_URL); if (isset($jkp['jak_delete_tickets'])) { $delartic = $jkp['jak_delete_tickets']; for ($i = 0;$i < count($delartic);$i++) { $delart = $delartic[$i]; // Delete the ticket $jakdb->delete($jaktable, ["AND" => ["id" => $delart, "opid" => $opcacheid]]); // Delete the answer $jakdb->delete($jaktable4, ["ticketid" => $delart]); // Delete all attachments $targetPath = CLIENT_UPLOAD_DIR . '/' . $opcacheid . '/support/' . $delart . '/'; $removedouble = str_replace("//", "/", $targetPath); foreach (glob($removedouble . '*.*') as $jak_unlink) { // Delete all files @unlink($jak_unlink); } // Delete the folder @rmdir($targetPath); } $_SESSION["successmsg"] = $jkl['g14']; jak_redirect($_SESSION['LCRedirect']); } $_SESSION["errormsg"] = $jkl['i3']; jak_redirect($_SESSION['LCRedirect']); } if (isset($jkp['action']) && $jkp['action'] == "statuschange") { if (!JAK_USERID) jak_redirect(BASE_URL); if (isset($jkp['jak_delete_tickets'])) { // Get all selected tickets $delartic = $jkp['jak_delete_tickets']; // Get the status $newstatus = filter_var($jkp['jak_statuschange'], FILTER_SANITIZE_NUMBER_INT); for ($i = 0;$i < count($delartic);$i++) { $delart = $delartic[$i]; $jakdb->update($jaktable, ["status" => str_replace("status", "", $newstatus) ], ["AND" => ["id" => $delart, "opid" => $opcacheid]]); // Ticket is closed set an ending time if ($newstatus == 3 || $newstatus == 4) { $jakdb->update($jaktable, ["ended" => time() ], ["AND" => ["id" => $delart, "opid" => $opcacheid]]); // Send email to customers if set so. if (JAK_TICKET_CLOSE_R == 1) { // Get the ticket data first $ticketdata = $jakdb->get($jaktable, ["[>]clients" => ["clientid" => "id"]], ["support_tickets.id", "support_tickets.depid", "support_tickets.name", "support_tickets.email", "support_tickets.subject", "clients.credits", "clients.paid_until"], ["AND" => ["support_tickets.id" => $delart, "opid" => $opcacheid]]); // Dashboard URL $ticketurl = str_replace(JAK_OPERATOR_LOC . '/', '', JAK_rewrite::jakParseurl(JAK_SUPPORT_URL, 't', $delart, JAK_rewrite::jakCleanurl($ticketdata["subject"]))); // Let's check if we have an imap $answeremail = $ticktext = ''; $check_imap = $jakdb->get($jaktable7, "emailanswer", ["AND" => ["depid" => $ticketdata["depid"], "opid" => $opcacheid]]); if ($check_imap) $answeremail = $check_imap; // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 23 && $v["lang"] == JAK_LANG) { $phold = array( '{url}', '{title}', '{cemail}', '{cname}', '{credits}', '{paid_until}', '{ticket}', '{subject}', '{ticketurl}', '{email}' ); $replace = array( BASE_URL_ORIG, JAK_TITLE, $ticketdata['email'], $ticketdata['name'], $ticketdata['credits'], $ticketdata['paid_until'], '#' . $delart, $ticketdata['subject'], $ticketurl, $answeremail ); $ticktext = str_replace($phold, $replace, $v["message"]); break; } } // Get the email template if (!empty($ticktext)) { $nlhtml = file_get_contents(APP_PATH . 'template/' . JAK_FRONT_TEMPLATE . '/email/index.html'); // Change fake vars into real ones. $cssAtt = array( '{emailcontent}', '{weburl}', '{title}', '{emailtpllogo}', '{emailtplcopy}' ); $cssUrl = array( $ticktext, BASE_URL_ORIG, JAK_TITLE, JAK_EMAILTPLLOGO, JAK_EMAILTPLCOPY ); $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); // Ok, we send the email // email address, cc email address, subject, message, attachment jak_send_email($ticketdata['email'], "", "", JAK_TITLE . ' - ' . sprintf($jkl['hd192'], $ticketdata['subject']), $body, ""); } } // end sending closed message } } $_SESSION["successmsg"] = $jkl['g14']; jak_redirect($_SESSION['LCRedirect']); } $_SESSION["errormsg"] = $jkl['i3']; jak_redirect($_SESSION['LCRedirect']); } } } // Total stuff for support $totalAll = $totalAllOT = $totalAllWT = $totalAllCT = $total_vote = $total_voted = 0; // We need the support status to figure out what we have to show $op_support_status = $jakdb->select("support_status", ["id", "title", "class", "dorder"], ["AND" => ["opid" => $opcacheid, "oponly" => 0], "ORDER" => ["dorder" => "ASC"]]); // Get the totals $totalAll = $jakdb->count("support_tickets", ["opid" => $opcacheid]); // We calculate the statistics for the dashboard if (isset($op_support_status) && !empty($op_support_status)) foreach ($op_support_status as $k => $v) { $totalTtemp = 0; $totalTtemp = $jakdb->count("support_tickets", ["AND" => ["opid" => $opcacheid, "status" => $v["id"]]]); // Get the stuff into a new array $totalTStat[] = array("title" => $v["title"], "class" => $v["class"], "total" => $totalTtemp); } $total_voted = $jakdb->count($jaktable, ["AND" => ["reminder" => 3, "opid" => $opcacheid]]); $total_vote = $jakdb->sum("ticket_rating", "vote", ["opid" => $opcacheid]); // Get the support departments if (count($HD_SUPPORT_DEPARTMENTS) == 1) { $dep_filter = false; } else { if (is_numeric($jakuser->getVar("support_dep")) && $jakuser->getVar("support_dep") != 0) { $dep_filter = $jakdb->get("support_departments", ["id", "title"], ["AND" => ["id" => $jakuser->getVar("support_dep") , "active" => 1, "opid" => $opcacheid], "ORDER" => ["dorder" => "ASC"]]); $dep_filter = false; } elseif (!((boolean)$jakuser->getVar("support_dep")) && $jakuser->getVar("support_dep") != 0) { $dep_filter = $jakdb->select("support_departments", ["id", "title"], ["AND" => ["id" => [$jakuser->getVar("support_dep") ], "active" => 1, "opid" => $opcacheid], "ORDER" => ["dorder" => "ASC"]]); } else { $dep_filter = $HD_SUPPORT_DEPARTMENTS; } } if (jak_get_access("usrmanage", $jakuser->getVar("permissions"), JAK_MAIN_OP)) { $op_filter = jak_get_user_all($jaktable6, $opcacheid, "meandsibling"); } else { $op_filter = jak_get_user_all($jaktable6, JAK_USERID, false); } // Title and Description $SECTION_TITLE = $jkl["hd"]; $SECTION_DESC = ""; // Call the template if (JAK_TICKET_DUEDATE) { // Include the javascript file for results $js_file_footer = 'js_supportdue.php'; $template = 'supportdue.php'; } else { // Include the javascript file for results $js_file_footer = 'js_support.php'; $template = 'support.php'; } } ?>