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.
241 lines
8.7 KiB
241 lines
8.7 KiB
<?php
|
|
|
|
header("Cache-Control: no-cache, must-revalidate");
|
|
header("Expires: Sat, 6 May 1998 03:10:00 GMT");
|
|
|
|
/*===============================================*\
|
|
|| ############################################# ||
|
|
|| # JAKWEB.CH / Version 1.2.1 # ||
|
|
|| # ----------------------------------------- # ||
|
|
|| # Copyright 2021 JAKWEB All Rights Reserved # ||
|
|
|| ############################################# ||
|
|
\*===============================================*/
|
|
|
|
if (!file_exists('../config.php')) die('ajax/[available.php] config.php not exist');
|
|
require_once '../config.php';
|
|
|
|
// include the PHP library (if not autoloaded)
|
|
require('../class/class.emoji.php');
|
|
|
|
// Extensive test if that is the real user or not
|
|
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || !isset($_SESSION['groupchatid']) || !isset($_SESSION['gcuid'])) die("Nothing to do here");
|
|
|
|
// The chat window is active
|
|
$winactive = true;
|
|
if (isset($_GET["active"]) && $_GET["active"] == "false") $winactive = false;
|
|
|
|
// Current time stamp
|
|
$ctime = microtime(true);
|
|
|
|
// Reset vars
|
|
$lastid = $newmsg = $banned = 0;
|
|
$delmsg = array();
|
|
$chatmsg = $userlist = "";
|
|
if (isset($_GET['lastid']) && is_numeric($_GET['lastid']) && $_GET['lastid'] != 0) {
|
|
$lastid = $_GET['lastid'];
|
|
}
|
|
|
|
// Get the absolute url for the image
|
|
$ava_url = str_replace('include/', '', BASE_URL).JAK_FILES_DIRECTORY;
|
|
|
|
// We have an offline client call just return nothing
|
|
if ($_GET["usract"] == 3) {
|
|
die(json_encode(array("status" => 1, "newmsg" => 3)));
|
|
} else {
|
|
|
|
// Get the chat file
|
|
$groupchatfile = APP_PATH.JAK_CACHE_DIRECTORY.'/groupchat'.$_SESSION['groupchatid'].'.txt';
|
|
|
|
// Check if file is available and user is valid
|
|
if (file_exists($groupchatfile)) {
|
|
|
|
// Now check the button id
|
|
if (file_exists($cacheopid)) {
|
|
|
|
// Import the language file
|
|
if ($groupchat[$_SESSION['groupchatid']]['lang'] && file_exists(APP_PATH.'lang/'.strtolower($groupchat[$_SESSION['groupchatid']]['lang']).'.php')) {
|
|
include_once(APP_PATH.'lang/'.strtolower($groupchat[$_SESSION['groupchatid']]['lang']).'.php');
|
|
} else {
|
|
include_once(APP_PATH.'lang/'.JAK_LANG.'.php');
|
|
}
|
|
|
|
} else {
|
|
|
|
// The chat has gone offline show the message
|
|
if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) {
|
|
|
|
if ($v["msgtype"] == 12 && $v["lang"] == JAK_LANG) {
|
|
|
|
$phold = array("%operator%","%client%","%email%");
|
|
$replace = array("", $_SESSION['gcname'], JAK_EMAIL);
|
|
$offlinemsg = str_replace($phold, $replace, $v["message"]);
|
|
|
|
}
|
|
}
|
|
|
|
$chatmsg .= '<div class="message system"><span>'.$jkl['g56'].' - '.JAK_base::jakTimesince($ctime, "", JAK_TIMEFORMAT).'</span>'.stripcslashes($offlinemsg).'</div>';
|
|
|
|
|
|
die(json_encode(array("status" => 1, "html" => $chatmsg, "newmsg" => 3, "vislist" => "", "delmsg" => "", "lastid" => $lastid)));
|
|
}
|
|
|
|
// Update the user status every 2 minutes
|
|
if (!isset($_SESSION["usrbanned"]) && (!isset($_SESSION["vislasttime"]) || $_SESSION["vislasttime"] < $ctime - 120)) {
|
|
$_SESSION["vislasttime"] = $ctime;
|
|
$jakdb->update("groupchatuser", ["statusc" => $ctime], ["id" => $_SESSION['gcuid']]);
|
|
// We are a operator update the user table as well.
|
|
if (isset($_SESSION['gcopid']) && !empty($_SESSION['gcopid'])) {
|
|
$jakdb->update("user", ["lastactivity" => time(), "session" => session_id()], ["id" => $_SESSION['gcopid']]);
|
|
}
|
|
}
|
|
|
|
if ($winactive) {
|
|
|
|
// Get the file
|
|
$chatfile = file_get_contents($groupchatfile);
|
|
|
|
// Each line
|
|
$chatfile = explode(":!n:", $chatfile);
|
|
|
|
$modstuff = "";
|
|
|
|
if (isset($chatfile) && is_array($chatfile)) foreach ($chatfile as $v) {
|
|
|
|
$chatline = jak_string_encrypt_decrypt($v, false);
|
|
|
|
// We will go trough each file
|
|
$chatline = explode(":#!#:", $chatline);
|
|
|
|
// Message format: time:#!#:userid:#!#:name:#!#:avatar:#!#:message:#!#:quote;
|
|
|
|
// Now we check if we have messages after our timeline
|
|
if ($lastid < $chatline[0]) {
|
|
|
|
// We are banned
|
|
if (isset($_SESSION["usrbanned"])) {
|
|
|
|
// We have a mod line
|
|
if ($chatline[2] == "*mod*" && $chatline[4] == "react" && $chatline[3] == $_SESSION['gcuid']) {
|
|
|
|
// remove the banned session
|
|
unset($_SESSION["usrbanned"]);
|
|
$lastid = $chatline[0];
|
|
$newmsg = 1;
|
|
// die(json_encode(array("status" => 1, "html" => "", "newmsg" => $newmsg, "lastid" => $lastid)));
|
|
}
|
|
|
|
} else {
|
|
|
|
// We have a mod line
|
|
if ($lastid != 0 && $chatline[2] == "*mod*") {
|
|
|
|
// At this moment we have only delete.
|
|
if ($chatline[4] == "delete") {
|
|
$delmsg[] = $chatline[3];
|
|
$newmsg = 2;
|
|
|
|
// ok the user that reads that is banned
|
|
} elseif ($chatline[4] == "banned" && $chatline[3] == $_SESSION['gcuid']) {
|
|
|
|
// Session banned
|
|
$_SESSION["usrbanned"] = true;
|
|
|
|
$lastid = $chatline[0];
|
|
$newmsg = 2;
|
|
}
|
|
|
|
} else {
|
|
|
|
// Unique Message id
|
|
$umsgid = $chatline[1].str_replace(".", "_", $chatline[0]);
|
|
|
|
// Convert urls
|
|
$messagedisp = nl2br(replace_urls($chatline[4]));
|
|
|
|
// Convert emotji
|
|
$messagedisp = Emojione\Emojione::toImage($messagedisp);
|
|
|
|
// We have an operator
|
|
if (isset($_SESSION['gcopid'])) {
|
|
$modstuff = '<a href="javascript:void(0)" class="edit-remove" data-msgid="'.$umsgid.'"><i class="fa fa-trash"></i></a>';
|
|
}
|
|
|
|
// We have a quoted message
|
|
$quoted = "";
|
|
if (isset($chatline[5]) && !empty($chatline[5])) {
|
|
// Convert urls
|
|
$quotemsg = nl2br(replace_urls($chatline[5]));
|
|
|
|
// Convert emotji
|
|
$quotemsg = Emojione\Emojione::toImage($quotemsg);
|
|
|
|
$quoted = '<blockquote class="blockquote"><i class="fa fa-reply"></i> '.$quotemsg.'</blockquote>';
|
|
}
|
|
|
|
// is mod
|
|
$ismod = false;
|
|
if (isset($chatline[6]) && $chatline[6] === "true") $ismod = true;
|
|
|
|
// Now load the time only once a minute
|
|
$chattime = "";
|
|
if (($lastid + 15) < $chatline[0]) $chattime = '<div class="time">'.JAK_base::jakTimesince($chatline[0], "", JAK_TIMEFORMAT).'</div>';
|
|
|
|
$chatmsg .= $chattime.'<div class="message'.($ismod ? ' operator' : '').'" id="postid_'.$umsgid.'"><span>'.$chatline[2].'<div class="chat-edit">'.($chatline[1] != $_SESSION['gcuid'] ? '<a href="javascript:void(0)" class="edit-quote" data-msg="'.$chatline[4].'" data-id="'.$umsgid.'"><i class="fa fa-quote-right"></i></a>' : '').$modstuff.'</div></span><div id="msg'.$umsgid.'">'.$quoted.stripcslashes($messagedisp).'</div></div>';
|
|
|
|
// Get the latest messages
|
|
$lastid = $chatline[0];
|
|
$newmsg = 1;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Ok every two minutes we do load the new user list or if we have a change
|
|
if ($newmsg) {
|
|
|
|
// Remove customers from the last 5 minutes
|
|
$listnow = $ctime - 300;
|
|
|
|
// Remove user that are older than
|
|
$jakdb->delete("groupchatuser", ["AND" => ["groupchatid" => $_SESSION['groupchatid'], "statusc[<]" => $listnow]]);
|
|
|
|
$result = $jakdb->select("groupchatuser", ["id", "name", "usr_avatar", "lastmsg", "banned", "ip", "isop", "created"], ["groupchatid" => $_SESSION['groupchatid'], "ORDER" => ["name" => "ASC"]]);
|
|
|
|
if (isset($result) && !empty($result)) {
|
|
|
|
foreach ($result as $u) {
|
|
|
|
$usermod = $usrip = "";
|
|
// We have an operator
|
|
if (isset($_SESSION["gcopid"]) && $u["isop"] == 0) {
|
|
$usermod = '<a href="javascript:void(0)" class="edit-ban" data-id="'.$u["id"].'"><i class="fa fa-ban"></i></a>';
|
|
$usrip = $u["ip"];
|
|
}
|
|
|
|
$userlist .= '<div class="gcuser" id="postid_'.$umsgid.'">
|
|
<div class="pic"><img class="pic" src="'.$ava_url.$u['usr_avatar'].'" alt="'.$u["name"].'"></div>
|
|
'.($u["banned"] ? '<div class="badge">'.$jkl['g84'].'</div>' : '').'
|
|
<div class="name'.($u["isop"] ? ' mod' : '').'">
|
|
'.$u["name"].' '.$usermod.'
|
|
</div>
|
|
<div class="message">
|
|
'.($u["lastmsg"] ? sprintf($jkl['g78'], JAK_base::jakTimesince($u["lastmsg"], "", JAK_TIMEFORMAT)) : '-').'<br>
|
|
'.sprintf($jkl['g90'], JAK_base::jakTimesince($u["created"], "", JAK_TIMEFORMAT)).'<br>
|
|
'.$usrip.'
|
|
</div>
|
|
</div>';
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if ($banned != 0) $newmsg = $banned;
|
|
|
|
die(json_encode(array("status" => 1, "html" => $chatmsg, "newmsg" => $newmsg, "vislist" => $userlist, "delmsg" => $delmsg, "lastid" => $lastid)));
|
|
}
|
|
}
|
|
die(json_encode(array("status" => 0)));
|
|
?>
|
|
|