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.
278 lines
11 KiB
278 lines
11 KiB
1 year ago
|
<?php
|
||
|
|
||
|
header("Cache-Control: no-cache, must-revalidate");
|
||
|
header("Expires: Sat, 6 May 1998 03:10:00 GMT");
|
||
|
|
||
|
/*===============================================*\
|
||
|
|| ############################################# ||
|
||
|
|| # JAKWEB.CH / Version 2.1.2 # ||
|
||
|
|| # ----------------------------------------- # ||
|
||
|
|| # Copyright 2023 JAKWEB All Rights Reserved # ||
|
||
|
|| ############################################# ||
|
||
|
\*===============================================*/
|
||
|
|
||
|
if (!file_exists('config.php')) die('rest_api config.php not exist');
|
||
|
require_once 'config.php';
|
||
|
|
||
|
$userid = $loginhash = "";
|
||
|
if (isset($_REQUEST['userid']) && !empty($_REQUEST['userid']) && is_numeric($_REQUEST['userid'])) $userid = $_REQUEST['userid'];
|
||
|
if (isset($_REQUEST['loginhash']) && !empty($_REQUEST['loginhash'])) $loginhash = $_REQUEST['loginhash'];
|
||
|
|
||
|
if (!empty($userid) && !empty($loginhash)) {
|
||
|
|
||
|
// Let's check if we are logged in
|
||
|
$usr = $jakuserlogin->jakCheckrestlogged($userid, $loginhash);
|
||
|
|
||
|
if ($usr) {
|
||
|
|
||
|
// Select the fields
|
||
|
$jakuser = new JAK_user($usr);
|
||
|
|
||
|
$USER_LANGUAGE = strtolower($jakuser->getVar("language"));
|
||
|
$USER_DEPARTMENTS = $jakuser->getVar("chat_dep");
|
||
|
|
||
|
// Check if a sibling has logged in
|
||
|
if ($jakuser->getVar("opid") != 0) {
|
||
|
$opcacheid = $jakuser->getVar("opid");
|
||
|
} else {
|
||
|
$opcacheid = $jakuser->getVar("id");
|
||
|
}
|
||
|
|
||
|
// Cache stuff
|
||
|
if (file_exists(APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.$opcacheid.'.php')) include_once APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.$opcacheid.'.php';
|
||
|
|
||
|
// timezone from server
|
||
|
date_default_timezone_set(JAK_TIMEZONESERVER);
|
||
|
$jakdb->query('SET time_zone = "'.date("P").'"');
|
||
|
|
||
|
// Check if a sibling has logged in
|
||
|
if ($jakuser->getVar("opid") != 0) $opcacheid = $jakuser->getVar("opid");
|
||
|
|
||
|
// 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';
|
||
|
} else {
|
||
|
include_once(APP_PATH.JAK_OPERATOR_LOC.'/lang/'.JAK_LANG.'.php');
|
||
|
}
|
||
|
|
||
|
// Reset vars
|
||
|
$transfer_msg = $soundjs = $soundmsgjs = '';
|
||
|
$newclient = $newmsg = $transferid = $convtransfer = 0;
|
||
|
$loadClients = $jsmsg = $convid = $answers = $typing = false;
|
||
|
|
||
|
$resnew = $jakdb->select("checkstatus", ["convid", "depid", "operatorid", "operator", "newo", "transferoid", "transferid", "typec", "statusc", "initiated"], ["AND" => ["opid" => $opcacheid, "hide" => 0, "denied" => 0]]);
|
||
|
|
||
|
if (isset($resnew) && !empty($resnew)) {
|
||
|
|
||
|
foreach ($resnew as $row) {
|
||
|
|
||
|
// We have a dead client connection cancel it.
|
||
|
if ($row['statusc'] && (time() - $row['statusc']) > JAK_CLIENT_LEFT) {
|
||
|
|
||
|
$jakdb->update("sessions", ["status" => 0, "ended" => time()], ["id" => $row['convid']]);
|
||
|
$jakdb->update("checkstatus", ["hide" => 1], ["convid" => $row['convid']]);
|
||
|
|
||
|
// We need the client name
|
||
|
$cname = $jakdb->get("sessions", "name", ["convid" => $row['convid']]);
|
||
|
|
||
|
$jakdb->insert("transcript", [
|
||
|
"name" => $jkl['g274'],
|
||
|
"message" => sprintf($jkl['g168'], $cname),
|
||
|
"convid" => $row['convid'],
|
||
|
"class" => "notice",
|
||
|
"plevel" => 2,
|
||
|
"time" => $jakdb->raw("NOW()")]);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// We have an expired client cancel it
|
||
|
if ($row['statusc'] && (time() - $row['statusc']) > JAK_CLIENT_EXPIRED) {
|
||
|
|
||
|
$jakdb->update("sessions", ["status" => 0, "ended" => time()], ["id" => $row['convid']]);
|
||
|
$jakdb->update("checkstatus", ["hide" => 1], ["convid" => $row['convid']]);
|
||
|
|
||
|
$jakdb->insert("transcript", [
|
||
|
"name" => $jkl['g274'],
|
||
|
"message" => $jkl['g72'],
|
||
|
"convid" => $row['convid'],
|
||
|
"class" => "notice",
|
||
|
"time" => $jakdb->raw("NOW()")]);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// We have a transfer, need to display it!
|
||
|
if ($row['transferoid'] == $userid) {
|
||
|
|
||
|
$trow = $jakdb->get("transfer", ["fromname", "message"], ["AND" => ["tooid" => $userid, "convid" => $row['convid'], "used" => 0]]);
|
||
|
|
||
|
if (isset($trow) && !empty($trow)) {
|
||
|
|
||
|
// Display underneath the button
|
||
|
$transfer_msg = $trow["message"];
|
||
|
$transferid = $row['transferid'];
|
||
|
$convtransfer = $row["convid"];
|
||
|
$convid[] = $row["convid"];
|
||
|
$jsmsg = sprintf($jkl['g110'], $trow["fromname"]);
|
||
|
$loadClients = true;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Only load if we are in the correct department
|
||
|
if ($USER_DEPARTMENTS == 0 || $row["depid"] == $USER_DEPARTMENTS || in_array($row["depid"], explode(",", $USER_DEPARTMENTS))) {
|
||
|
// check for new conversations
|
||
|
if ($row['operatorid'] == 0 || ($row['operatorid'] == $userid && empty($row['operator']))) {
|
||
|
$newclient = 1;
|
||
|
$soundjs = JAK_RING_TONE;
|
||
|
if ($row['typec']) $typing[] = $row['convid'];
|
||
|
$convid[] = $row["convid"];
|
||
|
$loadClients = true;
|
||
|
}
|
||
|
if ($row['operatorid'] == $userid && !empty($row['operator'])) {
|
||
|
$jakdb->update("checkstatus", ["statuso" => time()], ["convid" => $row['convid']]);
|
||
|
if ($row['typec']) $typing[] = $row['convid'];
|
||
|
$convid[] = $row["convid"];
|
||
|
$loadClients = true;
|
||
|
}
|
||
|
if ($row['operatorid'] == $userid && $row['newo']) {
|
||
|
$newmsg = 2;
|
||
|
$soundmsgjs = JAK_MSG_TONE;
|
||
|
$answers[] = $row['convid'];
|
||
|
if ($row['typec']) $typing[] = $row['convid'];
|
||
|
$convid[] = $row["convid"];
|
||
|
$loadClients = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Reset convlist
|
||
|
$convlist = array();
|
||
|
|
||
|
// Only go for it if we want to
|
||
|
if ($loadClients) {
|
||
|
|
||
|
// Now let's get the conversation list
|
||
|
$new = $updated = $current = $transfer = array();
|
||
|
$count = 0;
|
||
|
$dep_title = "";
|
||
|
|
||
|
$resconv = $jakdb->select("sessions", ["id", "department", "name", "usr_avatar", "operatorname", "status", "initiated", "ended"], ["id" => $convid]);
|
||
|
|
||
|
if (isset($resconv) && !empty($resconv)) {
|
||
|
|
||
|
foreach ($resconv as $row) {
|
||
|
|
||
|
if ($row['status']) {
|
||
|
|
||
|
// Get all available chats
|
||
|
if ($row['operatorname'] == "") {
|
||
|
$new[$count]["name"] = $row['name'];
|
||
|
$new[$count]["usr_avatar"] = $row['usr_avatar'];
|
||
|
$new[$count]["convid"] = $row['id'];
|
||
|
$new[$count]["initiated"] = $row['initiated'];
|
||
|
$new[$count]["typing"] = false;
|
||
|
if (!empty($typing) && in_array($row['id'], $typing)) $new[$count]["typing"] = true;
|
||
|
// Get the transfer into the array as well
|
||
|
} elseif ($row["id"] == $convtransfer) {
|
||
|
$transfer[$count]["name"] = $row['name'];
|
||
|
$transfer[$count]["usr_avatar"] = $row['usr_avatar'];
|
||
|
$transfer[$count]["convid"] = $row['id'];
|
||
|
$transfer[$count]["initiated"] = $row['initiated'];
|
||
|
$transfer[$count]["typing"] = false;
|
||
|
if (!empty($typing) && in_array($row['id'], $typing)) $transfer[$count]["typing"] = true;
|
||
|
// Get updated chats
|
||
|
} elseif (!empty($answers) && $row['operatorname'] && in_array($row['id'], $answers)) {
|
||
|
$updated[$count]["name"] = $row['name'];
|
||
|
$updated[$count]["usr_avatar"] = $row['usr_avatar'];
|
||
|
$updated[$count]["convid"] = $row['id'];
|
||
|
$updated[$count]["initiated"] = $row['initiated'];
|
||
|
$updated[$count]["typing"] = false;
|
||
|
if (!empty($typing) && in_array($row['id'], $typing)) $updated[$count]["typing"] = true;
|
||
|
// Get the rest
|
||
|
} else {
|
||
|
$current[$count]["name"] = $row['name'];
|
||
|
$current[$count]["usr_avatar"] = $row['usr_avatar'];
|
||
|
$current[$count]["convid"] = $row['id'];
|
||
|
$current[$count]["initiated"] = $row['initiated'];
|
||
|
$current[$count]["typing"] = false;
|
||
|
if (!empty($typing) && in_array($row['id'], $typing)) $current[$count]["typing"] = true;
|
||
|
}
|
||
|
|
||
|
// Now load the department title if we have any
|
||
|
if (isset($row["department"]) && is_numeric($row["department"])) {
|
||
|
|
||
|
foreach ($HD_DEPARTMENTS as $d) {
|
||
|
# code...
|
||
|
if ($d["id"] == $row["department"]) {
|
||
|
$dep_title = $d["title"];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!$row['status']) {
|
||
|
if (((time() - $row['ended']) > 300)) {
|
||
|
|
||
|
$jakdb->update("checkstatus", ["hide" => 1], ["convid" => $row['id']]);
|
||
|
|
||
|
$jakdb->insert("transcript", [
|
||
|
"name" => $jkl['g274'],
|
||
|
"message" => $jkl['g73'],
|
||
|
"convid" => $row['id'],
|
||
|
"class" => "notice",
|
||
|
"plevel" => 2,
|
||
|
"time" => $jakdb->raw("NOW()")]);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$count = $count + 1;
|
||
|
}
|
||
|
|
||
|
shuffle($new);
|
||
|
shuffle($updated);
|
||
|
shuffle($current);
|
||
|
shuffle($transfer);
|
||
|
sort($new);
|
||
|
sort($updated);
|
||
|
sort($current);
|
||
|
sort($transfer);
|
||
|
$newTotal = count($new);
|
||
|
$updatedTotal = count($updated);
|
||
|
$currentTotal = count($current);
|
||
|
$transferTotal = count($transfer);
|
||
|
|
||
|
// Status 1 = New client (confirm or send to contact), 2 = New Message, 3 = Unchanged status
|
||
|
|
||
|
for($i = 0; $i < $newTotal; $i ++ ) {
|
||
|
$convlist[] = array('status' => 1, 'department' => $dep_title, 'chatid' => strval($new[$i]["convid"]), 'name' => $new[$i]["name"], 'avatar' => $new[$i]["usr_avatar"], 'typing' => $new[$i]["typing"], 'initiated' => strval($new[$i]["initiated"]));
|
||
|
}
|
||
|
for($i = 0; $i < $updatedTotal; $i ++ ) {
|
||
|
$convlist[] = array('status' => 2, 'department' => $dep_title, 'chatid' => strval($updated[$i]["convid"]), 'name' => $updated[$i]["name"], 'avatar' => $updated[$i]["usr_avatar"], 'typing' => $updated[$i]["typing"], 'initiated' => strval($updated[$i]["initiated"]));
|
||
|
}
|
||
|
for($i = 0; $i < $currentTotal; $i ++ ) {
|
||
|
$convlist[] = array('status' => 3, 'department' => $dep_title, 'chatid' => strval($current[$i]["convid"]), 'name' => $current[$i]["name"], 'avatar' => $current[$i]["usr_avatar"], 'typing' => $current[$i]["typing"], 'initiated' => strval($current[$i]["initiated"]));
|
||
|
}
|
||
|
for($i = 0; $i < $transferTotal; $i ++ ) {
|
||
|
$convlist[] = array('status' => 4, 'department' => $dep_title, 'chatid' => strval($transfer[$i]["convid"]), 'name' => $transfer[$i]["name"], 'avatar' => $transfer[$i]["usr_avatar"], 'typing' => $transfer[$i]["typing"], 'initiated' => strval($transfer[$i]["initiated"]));
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
if (isset($convlist) && !empty($convlist)) {
|
||
|
die(json_encode(array('status' => true, 'convlist' => $convlist, 'newclient' => $newclient, 'newmsg' => $newmsg, 'transferid' => $transferid, 'transfermsg' => $transfer_msg, 'transfernotifcation' => $jsmsg, 'url' => BASE_URL)));
|
||
|
} else {
|
||
|
die(json_encode(array('status' => false, 'errorcode' => 9)));
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
die(json_encode(array('status' => false, 'errorcode' => 1)));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
die(json_encode(array('status' => false, 'errorcode' => 7)));
|
||
|
?>
|