You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
472 lines
16 KiB
472 lines
16 KiB
1 year ago
|
<?php
|
||
|
|
||
|
/*===============================================*\
|
||
|
|| ############################################# ||
|
||
|
|| # JAKWEB.CH / Version 2.1.4 # ||
|
||
|
|| # ----------------------------------------- # ||
|
||
|
|| # Copyright 2023 JAKWEB All Rights Reserved # ||
|
||
|
|| ############################################# ||
|
||
|
\*===============================================*/
|
||
|
|
||
|
// prevent direct php access
|
||
|
define('JAK_ADMIN_PREVENT_ACCESS', 1);
|
||
|
|
||
|
if (!file_exists('config.php')) die('[index.php] config.php not found');
|
||
|
require_once 'config.php';
|
||
|
|
||
|
$page = ($tempp ? jak_url_input_filter($tempp) : '');
|
||
|
$page1 = ($tempp1 ? jak_url_input_filter($tempp1) : '');
|
||
|
$page2 = ($tempp2 ? jak_url_input_filter($tempp2) : '');
|
||
|
$page3 = ($tempp3 ? jak_url_input_filter($tempp3) : '');
|
||
|
$page4 = ($tempp4 ? jak_url_input_filter($tempp4) : '');
|
||
|
$page5 = ($tempp5 ? jak_url_input_filter($tempp5) : '');
|
||
|
$page6 = ($tempp6 ? jak_url_input_filter($tempp6) : '');
|
||
|
|
||
|
// Reset vars
|
||
|
$js_file_footer = $css_file_header = $JAK_PAGINATE = false;
|
||
|
// Reset Title and Description
|
||
|
$SECTION_TITLE = $SECTION_DESC = '';
|
||
|
// We do not load the user online list
|
||
|
$JAK_UONLINE = 0;
|
||
|
|
||
|
// Get the redirect into a sessions for better login handler
|
||
|
if ($page && $page != '404' && $page != 'js' && !in_array($page1, array("delete","deletef","deletefo","lock","truncate","stats","status")) && !in_array($page2, array("delete","deletef","deletefo","lock","truncate","stats","status"))) $_SESSION['LCRedirect'] = $_SERVER['REQUEST_URI'];
|
||
|
|
||
|
// Define for template the real request
|
||
|
$realrequest = substr($getURL->jakRealrequest(), 1);
|
||
|
define('JAK_PARSE_REQUEST', $realrequest);
|
||
|
|
||
|
// We need the template folder, title, author and lang as template variable
|
||
|
define('JAK_PAGINATE_ADMIN', 1);
|
||
|
|
||
|
// Get the language for the operator
|
||
|
$USER_LANGUAGE = JAK_LANG;
|
||
|
if (JAK_USERID && !empty($jakuser->getVar("language"))) $USER_LANGUAGE = strtolower($jakuser->getVar("language"));
|
||
|
|
||
|
// Import the language file
|
||
|
if ($USER_LANGUAGE && file_exists(APP_PATH.JAK_OPERATOR_LOC.'/lang/'.$USER_LANGUAGE.'.php')) {
|
||
|
include_once(APP_PATH.JAK_OPERATOR_LOC.'/lang/'.$USER_LANGUAGE.'.php');
|
||
|
$_SESSION['jak_lcp_lang'] = $USER_LANGUAGE;
|
||
|
} else {
|
||
|
include_once(APP_PATH.JAK_OPERATOR_LOC.'/lang/'.JAK_LANG.'.php');
|
||
|
}
|
||
|
|
||
|
// First check if the user is logged in
|
||
|
if (JAK_USERID) {
|
||
|
|
||
|
define('JAK_ADMINACCESS', true);
|
||
|
|
||
|
// Get the name from the user for the welcome message
|
||
|
$JAK_WELCOME_NAME = $jakuser->getVar("name");
|
||
|
// Get the department(s)
|
||
|
$JAK_USR_DEPARTMENTS = $jakuser->getVar("chat_dep");
|
||
|
$_SESSION['usr_department'] = $JAK_USR_DEPARTMENTS;
|
||
|
|
||
|
if ($JAK_USR_DEPARTMENTS == 0) {
|
||
|
$JAK_USR_DEPARTMENTS = $jkl['g105'];
|
||
|
} else {
|
||
|
|
||
|
if (is_numeric($JAK_USR_DEPARTMENTS)) {
|
||
|
$deplist = $jakdb->select("departments", "title", ["AND" => ["id" => $JAK_USR_DEPARTMENTS, "active" => 1], "ORDER" => ["dorder" => "ASC"]]);
|
||
|
} else {
|
||
|
$deplist = $jakdb->select("departments", "title", ["AND" => ["id" => [$JAK_USR_DEPARTMENTS], "active" => 1], "ORDER" => ["dorder" => "ASC"]]);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
if (!empty($deplist)) {
|
||
|
$JAK_USR_DEPARTMENTS = join(", ", $deplist);
|
||
|
} else {
|
||
|
$JAK_USR_DEPARTMENTS = $jkl['g105'];
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
define('JAK_ADMINACCESS', false);
|
||
|
}
|
||
|
|
||
|
// Finally sanitize all inputs
|
||
|
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
|
||
|
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
|
||
|
|
||
|
// Get the user agent
|
||
|
$valid_agent = filter_var($_SERVER['HTTP_USER_AGENT'], FILTER_SANITIZE_FULL_SPECIAL_CHARS);
|
||
|
|
||
|
// Let' get the the short title
|
||
|
preg_match_all('/(?<=\b)\w/iu',JAK_TITLE,$matches);
|
||
|
$short_title = mb_strtoupper(implode('',$matches[0]));
|
||
|
|
||
|
// When there is a post
|
||
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||
|
|
||
|
// End the conversation if whish so
|
||
|
if (isset($_POST['delete_conv'])) {
|
||
|
|
||
|
// check to see if conversation has to be stored
|
||
|
$row = $jakdb->get("sessions", ["id", "name", "email"], ["id" => $_POST['id']]);
|
||
|
|
||
|
$jakdb->insert("transcript", [
|
||
|
"name" => $jakuser->getVar("name"),
|
||
|
"message" => $jkl['g63'],
|
||
|
"user" => $jakuser->getVar("id").'::'.$jakuser->getVar("username"),
|
||
|
"operatorid" => $jakuser->getVar("id"),
|
||
|
"convid" => $row['id'],
|
||
|
"class" => "notice",
|
||
|
"time" => $jakdb->raw("NOW()")]);
|
||
|
|
||
|
// Update the session table and sho the message to the user
|
||
|
$jakdb->update("sessions", ["status" => 0, "ended" => time()], ["id" => $row['id']]);
|
||
|
$jakdb->update("checkstatus", ["newc" => 1, "typeo" => 0, "newo" => 0, "hide" => 2, "statuso" => time()], ["convid" => $row['id']]);
|
||
|
|
||
|
// Remove the file from the cache directory
|
||
|
$livepreviewfile = APP_PATH.JAK_CACHE_DIRECTORY.'/livepreview'.$row['id'].'.txt';
|
||
|
|
||
|
if (file_exists($livepreviewfile)) {
|
||
|
// Finally remove the file and start fresh
|
||
|
unlink($livepreviewfile);
|
||
|
}
|
||
|
|
||
|
jak_redirect(BASE_URL);
|
||
|
}
|
||
|
|
||
|
// transfer customer
|
||
|
if (isset($_POST['transfer_customer']) && is_numeric($_POST['operator']) && is_numeric($_POST['cid'])) {
|
||
|
|
||
|
if (isset($_POST['transfermsg']) && !empty($_POST['transfermsg'])) {
|
||
|
|
||
|
// check to see if conversation has to be stored
|
||
|
$newop = $jakdb->get("user", ["id", "available", "username", "email", "name", "emailnot", "hours_array", "pusho_tok", "pusho_key", "phonenumber", "push_notifications"], ["AND" => ["id" => $_POST['operator'], "access" => 1]]);
|
||
|
|
||
|
$msg = strip_tags($_POST['transfermsg']);
|
||
|
|
||
|
$jakdb->insert("transfer", ["convid" => $_POST['cid'], "fromoid" => $jakuser->getVar("id"), "fromname" => $jakuser->getVar("name"), "tooid" => $_POST['operator'], "toname" => $newop["name"], "message" => $msg, "created" => $jakdb->raw("NOW()")]);
|
||
|
|
||
|
$lastid = $jakdb->id();
|
||
|
|
||
|
if ($lastid) {
|
||
|
$jakdb->update("checkstatus", ["transferoid" => $_POST['operator'], "transferid" => $lastid], ["convid" => $_POST['cid']]);
|
||
|
|
||
|
// Let's inform the customer that he is on transfer
|
||
|
if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) {
|
||
|
|
||
|
if ($v["msgtype"] == 30 && $v["lang"] == $USER_LANGUAGE) {
|
||
|
|
||
|
$phold = array("%operator%","%email%");
|
||
|
$replace = array($newop["name"], JAK_EMAIL);
|
||
|
$message = str_replace($phold, $replace, $v["message"]);
|
||
|
|
||
|
$jakdb->insert("transcript", [
|
||
|
"name" => $jakuser->getVar("name"),
|
||
|
"message" => $message,
|
||
|
"user" => $jakuser->getVar("id").'::'.$jakuser->getVar("name"),
|
||
|
"operatorid" => $jakuser->getVar("id"),
|
||
|
"convid" => $_POST['cid'],
|
||
|
"class" => "notice",
|
||
|
"time" => $jakdb->raw("NOW()")]);
|
||
|
|
||
|
// Update the status after answer
|
||
|
$jakdb->update("checkstatus", ["newc" => 1, "typeo" => 0, "newo" => 0, "statuso" => time()], ["convid" => $_POST['cid']]);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// Finally inform the operator when he is only reachable by notifications.
|
||
|
if ($newop["available"] == 0) {
|
||
|
|
||
|
$url = JAK_rewrite::jakParseurl(JAK_OPERATOR_LOC, 'live', $_POST['cid']);
|
||
|
|
||
|
if (JAK_base::jakAvailableHours($newop["hours_array"], date('Y-m-d H:i:s'))) {
|
||
|
jak_send_notifications($newop["id"], $_POST['cid'], JAK_TITLE, sprintf($jkl['g110'], $jakuser->getVar("name")), $url, $newop["push_notifications"], $newop["emailnot"], $newop["email"], $newop["pusho_tok"], $newop["pusho_key"], $newop["phonenumber"]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$_SESSION["successmsg"] = $jkl['g285'];
|
||
|
jak_redirect(BASE_URL);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
$_SESSION["errormsg"] = $jkl['g116'];
|
||
|
jak_redirect(BASE_URL);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
$checkp = 0;
|
||
|
|
||
|
if (!isset($_SERVER['HTTP_REFERER'])) {
|
||
|
$_SERVER['HTTP_REFERER'] = '';
|
||
|
}
|
||
|
|
||
|
// home
|
||
|
if ($page == '') {
|
||
|
#show login page only if the admin is not logged in
|
||
|
#else show homepage
|
||
|
if (!JAK_USERID) {
|
||
|
if (isset($_SESSION["userlock"])) {
|
||
|
require_once 'lock.php';
|
||
|
} else {
|
||
|
require_once 'login.php';
|
||
|
}
|
||
|
} else {
|
||
|
require_once 'dashboard.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
}
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'logout') {
|
||
|
$checkp = 1;
|
||
|
if (JAK_USERID) {
|
||
|
|
||
|
// Get the business name
|
||
|
$businessname = $_SESSION['business'];
|
||
|
|
||
|
// Write the log file each time someone login after to show success
|
||
|
JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 3, 0, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : ''), $jakuser->getVar("username"), $_SERVER['REQUEST_URI'], $ipa, $valid_agent);
|
||
|
|
||
|
// Logout the Operator
|
||
|
$jakuserlogin->jakLogout(JAK_USERID);
|
||
|
|
||
|
// Set the session again
|
||
|
$_SESSION['opid'] = $opcacheid;
|
||
|
$_SESSION['business'] = $businessname;
|
||
|
|
||
|
// Display the success message
|
||
|
$_SESSION["successmsg"] = $jkl['g14'];
|
||
|
}
|
||
|
jak_redirect(BASE_URL);
|
||
|
}
|
||
|
if ($page == 'lock') {
|
||
|
$checkp = 1;
|
||
|
if (JAK_USERID) {
|
||
|
$usrlock = $jakuser->getVar("username");
|
||
|
$usrlockn = $jakuser->getVar("name");
|
||
|
$usrlockp = $jakuser->getVar("picture");
|
||
|
$jakuserlogin->jakLogout(JAK_USERID);
|
||
|
$_SESSION["userlock"] = $usrlock.'#'.$usrlockn.'#'.$usrlockp;
|
||
|
}
|
||
|
jak_redirect(BASE_URL);
|
||
|
}
|
||
|
// forgot password
|
||
|
if ($page == 'forgot-password') {
|
||
|
|
||
|
if (JAK_USERID || !is_numeric($page1) || !$jakuserlogin->jakForgotactive($page1)) jak_redirect(BASE_URL);
|
||
|
|
||
|
// select user
|
||
|
$row = $jakdb->get("user", ["id", "name", "email"], ["forgot" => $page1]);
|
||
|
|
||
|
// create new password
|
||
|
$password = jak_password_creator();
|
||
|
$passcrypt = hash_hmac('sha256', $password, DB_PASS_HASH);
|
||
|
|
||
|
// update table
|
||
|
$result = $jakdb->update("user", ["password" => $passcrypt, "forgot" => 0], ["id" => $row['id']]);
|
||
|
|
||
|
// Write the log file each time someone login after to show success
|
||
|
JAK_base::jakWhatslog('', $opcacheid, $row['id'], 0, 9, 0, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : ''), $row["username"], $_SERVER['REQUEST_URI'], $ipa, $valid_agent);
|
||
|
|
||
|
if (!$result) {
|
||
|
|
||
|
$_SESSION["errormsg"] = $jkl["i2"];
|
||
|
// redirect back to home
|
||
|
jak_redirect(BASE_URL);
|
||
|
|
||
|
} else {
|
||
|
|
||
|
// Ok, we send the email // email address, cc email address, reply to, subject, message, attachment
|
||
|
if (jak_send_email($row["email"], "", "", JAK_TITLE.' - '.$jkl['l6'], sprintf($jkl['l16'], $row["name"], $password, JAK_TITLE), "")) {
|
||
|
|
||
|
$_SESSION["infomsg"] = $jkl["l17"];
|
||
|
jak_redirect(BASE_URL);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
$_SESSION["errormsg"] = $jkl["sql"];
|
||
|
jak_redirect(BASE_URL);
|
||
|
}
|
||
|
if ($page == 'live') {
|
||
|
require_once 'live.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'support') {
|
||
|
require_once 'support.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'blog') {
|
||
|
require_once 'blog.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'faq') {
|
||
|
require_once 'faq.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'files') {
|
||
|
require_once 'files.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'search') {
|
||
|
require_once 'search.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'response') {
|
||
|
require_once 'response.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'departments') {
|
||
|
require_once 'departments.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'answers') {
|
||
|
require_once 'answers.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'uonline') {
|
||
|
require_once 'uonline.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'leads') {
|
||
|
require_once 'leads.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'contacts') {
|
||
|
require_once 'contacts.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'chat') {
|
||
|
require_once 'chat.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'chats') {
|
||
|
require_once 'chats.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'notes') {
|
||
|
require_once 'notes.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'proactive') {
|
||
|
require_once 'proactive.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'bot') {
|
||
|
require_once 'bot.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'customfield') {
|
||
|
require_once 'customfield.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'blacklist') {
|
||
|
require_once 'blacklist.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'settings') {
|
||
|
require_once 'setting.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'buttons') {
|
||
|
require_once 'buttons.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'billing') {
|
||
|
require_once 'billing.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'widget') {
|
||
|
require_once 'widget.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'groupchats') {
|
||
|
require_once 'groupchat.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
// Confirm account
|
||
|
if ($page == 'confirm') {
|
||
|
require_once 'confirm.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'users') {
|
||
|
require_once 'user.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'statistics') {
|
||
|
require_once 'statistics.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'logs') {
|
||
|
require_once 'logs.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'maintenance') {
|
||
|
require_once 'maintenance.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'tickets') {
|
||
|
require_once 'tickets.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == 'extend') {
|
||
|
if (!JAK_MAIN_OP) jak_redirect(BASE_URL);
|
||
|
require_once 'extend.php';
|
||
|
$JAK_PAGE_ACTIVE = 1;
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
if ($page == '404') {
|
||
|
if (!JAK_USERID) jak_redirect(BASE_URL);
|
||
|
// Go to the 404 Page
|
||
|
$SECTION_TITLE = '404 / ' . JAK_TITLE;
|
||
|
$SECTION_DESC = "";
|
||
|
$template = '404.php';
|
||
|
$checkp = 1;
|
||
|
}
|
||
|
|
||
|
// if page not found
|
||
|
if ($checkp == 0) {
|
||
|
jak_redirect(JAK_rewrite::jakParseurl('404'));
|
||
|
}
|
||
|
|
||
|
if (isset($template) && $template != '') {
|
||
|
include_once APP_PATH.JAK_OPERATOR_LOC.'/template/'.$template;
|
||
|
}
|
||
|
|
||
|
// Reset success and errors session for next use
|
||
|
unset($_SESSION["successmsg"]);
|
||
|
unset($_SESSION["errormsg"]);
|
||
|
unset($_SESSION["infomsg"]);
|
||
|
?>
|