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.
418 lines
14 KiB
418 lines
14 KiB
1 year ago
|
<?php
|
||
|
|
||
|
/*===============================================*\
|
||
|
|| ############################################# ||
|
||
|
|| # JAKWEB.CH / Version 2.1.4 # ||
|
||
|
|| # ----------------------------------------- # ||
|
||
|
|| # Copyright 2023 JAKWEB All Rights Reserved # ||
|
||
|
|| ############################################# ||
|
||
|
\*===============================================*/
|
||
|
|
||
|
// Check if the file is accessed only via index.php if not stop the script from running
|
||
|
if (!defined('JAK_ADMIN_PREVENT_ACCESS')) die('You cannot access this file directly.');
|
||
|
|
||
|
// Check if the user has access to this file
|
||
|
if (!jak_get_access("groupchat", $jakuser->getVar("permissions"), JAK_MAIN_OP)) jak_redirect(BASE_URL);
|
||
|
|
||
|
// All the tables we need for this plugin
|
||
|
$errors = array();
|
||
|
$jaktable = 'groupchat';
|
||
|
$jaktable1 = 'groupchatmsg';
|
||
|
$jaktable2 = 'groupchatuser';
|
||
|
$jaktable3 = 'user';
|
||
|
|
||
|
// We reset some vars
|
||
|
$newwidg = true;
|
||
|
$totalChange = 0;
|
||
|
$lastChange = '';
|
||
|
|
||
|
// Now start with the plugin use a switch to access all pages
|
||
|
switch ($page1) {
|
||
|
|
||
|
case 'lock':
|
||
|
|
||
|
// Check if widget exists and can be locked
|
||
|
if (is_numeric($page2) && jak_row_exist($page2, $opcacheid, $jaktable)) {
|
||
|
|
||
|
// Check what we have to do
|
||
|
$datausrac = $jakdb->get($jaktable, "active", ["AND" => ["id" => $page2, "opid" => $opcacheid]]);
|
||
|
// update the table
|
||
|
if ($datausrac) {
|
||
|
|
||
|
// we turn off the public chat means we save the log into the database and remove the file.
|
||
|
|
||
|
// The chat file
|
||
|
$groupchatfile = APP_PATH.JAK_CACHE_DIRECTORY.'/groupchat'.$page2.'.txt';
|
||
|
|
||
|
// Get the file
|
||
|
if (file_exists($groupchatfile)) $chatfile = file_get_contents($groupchatfile);
|
||
|
|
||
|
// we have a chatfile
|
||
|
if (isset($chatfile) && !empty($chatfile)) {
|
||
|
|
||
|
// Insert into the database
|
||
|
$jakdb->insert($jaktable1, ["groupchatid" => $page2, "opid" => $opcacheid, "chathistory" => $chatfile, "operatorid" => JAK_USERID, "created" => $jakdb->raw("NOW()")]);
|
||
|
|
||
|
// Finally remove the file and start fresh
|
||
|
unlink($groupchatfile);
|
||
|
}
|
||
|
|
||
|
$result = $jakdb->update($jaktable, ["active" => 0], ["AND" => ["id" => $page2, "opid" => $opcacheid]]);
|
||
|
} else {
|
||
|
$result = $jakdb->update($jaktable, ["active" => 1], ["AND" => ["id" => $page2, "opid" => $opcacheid]]);
|
||
|
}
|
||
|
|
||
|
if (!$result) {
|
||
|
|
||
|
$_SESSION["infomsg"] = $jkl['i'];
|
||
|
jak_redirect(JAK_rewrite::jakParseurl('groupchat'));
|
||
|
} else {
|
||
|
|
||
|
// Now let us delete the group chat cache file
|
||
|
$cachewidget = APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.$opcacheid.'.php';
|
||
|
if (file_exists($cachewidget)) {
|
||
|
unlink($cachewidget);
|
||
|
}
|
||
|
|
||
|
$_SESSION["successmsg"] = $jkl['g14'];
|
||
|
jak_redirect($_SESSION['LCRedirect']);
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
|
||
|
$_SESSION["errormsg"] = $jkl['i3'];
|
||
|
jak_redirect(JAK_rewrite::jakParseurl('groupchat'));
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
case 'delete':
|
||
|
|
||
|
// We want to delete a chat log
|
||
|
if (is_numeric($page2) && $page3 == "chatlog" && jak_row_exist($page2, $opcacheid, $jaktable)) {
|
||
|
|
||
|
$result = $jakdb->delete($jaktable1, ["AND" => ["id" => $page2, "opid" => $opcacheid]]);
|
||
|
|
||
|
if (!$result) {
|
||
|
$_SESSION["infomsg"] = $jkl['i'];
|
||
|
jak_redirect(JAK_rewrite::jakParseurl('groupchat'));
|
||
|
} else {
|
||
|
|
||
|
// Write the log file each time someone tries to login before
|
||
|
JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 60, $page2, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : ''), $jakuser->getVar("username"), $_SERVER['REQUEST_URI'], $ipa, $valid_agent);
|
||
|
|
||
|
$_SESSION["successmsg"] = $jkl['g14'];
|
||
|
jak_redirect($_SESSION['LCRedirect']);
|
||
|
}
|
||
|
|
||
|
// We want to delete a chat
|
||
|
} elseif (is_numeric($page2) && $page2 != 1) {
|
||
|
|
||
|
$count = $jakdb->count($jaktable, ["AND" => ["opid" => $opcacheid]]);
|
||
|
|
||
|
// Now check how many departments we have and do the dirty work
|
||
|
if ($count > 1) {
|
||
|
|
||
|
// Delete the chat
|
||
|
$result = $jakdb->delete($jaktable, ["AND" => ["id" => $page2, "opid" => $opcacheid]]);
|
||
|
|
||
|
// Delete all the chat logs
|
||
|
$jakdb->delete($jaktable1, ["AND" => ["groupchatid" => $page2, "opid" => $opcacheid]]);
|
||
|
|
||
|
}
|
||
|
|
||
|
if (!$result) {
|
||
|
|
||
|
$_SESSION["infomsg"] = $jkl['i'];
|
||
|
jak_redirect($_SESSION['LCRedirect']);
|
||
|
} else {
|
||
|
|
||
|
// Now let us delete the group chat cache file
|
||
|
$cachewidget = APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.$opcacheid.'.php';
|
||
|
if (file_exists($cachewidget)) {
|
||
|
unlink($cachewidget);
|
||
|
}
|
||
|
|
||
|
// Write the log file each time someone tries to login before
|
||
|
JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 57, $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(JAK_rewrite::jakParseurl('groupchat'));
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
case 'edit':
|
||
|
|
||
|
// Check if the user has access to this file
|
||
|
if (!jak_get_access("widget", $jakuser->getVar("permissions"), JAK_MAIN_OP)) jak_redirect(JAK_rewrite::jakParseurl('groupchat'));
|
||
|
|
||
|
// Check if the user exists
|
||
|
if (is_numeric($page2) && jak_row_exist($page2, $opcacheid, $jaktable)) {
|
||
|
|
||
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||
|
$jkp = $_POST;
|
||
|
|
||
|
if (empty($jkp['title'])) {
|
||
|
$errors['e'] = $jkl['e2'];
|
||
|
}
|
||
|
|
||
|
if (count($errors) == 0) {
|
||
|
|
||
|
if (!isset($jkp['jak_opid']) OR in_array("0", $jkp['jak_opid'])) {
|
||
|
$opids = 0;
|
||
|
} else {
|
||
|
$opids = join(',', $jkp['jak_opid']);
|
||
|
}
|
||
|
|
||
|
if (!isset($jkp['jak_float'])) $jkp['jak_float'] = 0;
|
||
|
|
||
|
$gcpass = "";
|
||
|
if (isset($jkp['jak_password'])) $gcpass = $jkp['jak_password'];
|
||
|
|
||
|
$result = $jakdb->update($jaktable, ["password" => $gcpass,
|
||
|
"title" => $jkp['title'],
|
||
|
"description" => $jkp['description'],
|
||
|
"opids" => $opids,
|
||
|
"maxclients" => $jkp['jak_maxclients'],
|
||
|
"lang" => $jkp['jak_lang'],
|
||
|
"buttonimg" => $jkp['jak_buttonimg'],
|
||
|
"floatpopup" => $jkp['jak_float'],
|
||
|
"floatcss" => $jkp['jak_floatcss']], ["AND" => ["id" => $page2, "opid" => $opcacheid]]);
|
||
|
|
||
|
if (!$result) {
|
||
|
$_SESSION["infomsg"] = $jkl['i'];
|
||
|
jak_redirect($_SESSION['LCRedirect']);
|
||
|
} else {
|
||
|
|
||
|
$cachewidget = APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.$opcacheid.'.php';
|
||
|
if (file_exists($cachewidget)) {
|
||
|
unlink($cachewidget);
|
||
|
}
|
||
|
|
||
|
// Write the log file each time someone tries to login before
|
||
|
JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 58, $page2, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : ''), $jakuser->getVar("username"), $_SERVER['REQUEST_URI'], $ipa, $valid_agent);
|
||
|
|
||
|
$_SESSION["successmsg"] = $jkl['g14'];
|
||
|
jak_redirect($_SESSION['LCRedirect']);
|
||
|
}
|
||
|
|
||
|
// Output the errors
|
||
|
} else {
|
||
|
$errors = $errors;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// Title and Description
|
||
|
$SECTION_TITLE = $jkl["m30"];
|
||
|
$SECTION_DESC = "";
|
||
|
|
||
|
// Get all operators
|
||
|
$JAK_OPERATORS = $jakdb->select($jaktable3, ["id", "username"], ["ORDER" => ["username" => "ASC"]]);
|
||
|
|
||
|
// Call the settings function
|
||
|
$lang_files = jak_get_lang_files();
|
||
|
|
||
|
// Get all buttons
|
||
|
$BUTTONS_ALL = jak_get_files('../'.JAK_FILES_DIRECTORY.'/buttons');
|
||
|
|
||
|
// Get the data
|
||
|
$JAK_FORM_DATA = jak_get_data($page2, $opcacheid, $jaktable);
|
||
|
|
||
|
// Get the 10 latest chat histories
|
||
|
$JAK_GCHISTORY = $jakdb->select($jaktable1, ["id", "created"], ["AND" => ["groupchatid" => $page2, "opid" => $opcacheid], "ORDER" => ["created" => "DESC"], "LIMIT" => 10]);
|
||
|
|
||
|
// Include the javascript file for results
|
||
|
$js_file_footer = 'js_editwidget.php';
|
||
|
$template = 'editgroupchat.php';
|
||
|
|
||
|
} else {
|
||
|
|
||
|
$_SESSION["errormsg"] = $jkl['i2'];
|
||
|
jak_redirect(JAK_rewrite::jakParseurl('groupchat'));
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
case 'view':
|
||
|
|
||
|
// Check if the user exists
|
||
|
if (is_numeric($page2) && jak_row_exist($page2, $opcacheid, $jaktable1)) {
|
||
|
|
||
|
$datagc = $jakdb->get($jaktable1, ["groupchatid", "chathistory", "created"], ["AND" => ["id" => $page2, "opid" => $opcacheid]]);
|
||
|
|
||
|
// Each line
|
||
|
$chatfile = explode(":!n:", $datagc["chathistory"]);
|
||
|
|
||
|
$chatmsg = "";
|
||
|
|
||
|
// include the PHP library (if not autoloaded)
|
||
|
require('../class/class.emoji.php');
|
||
|
|
||
|
// Get the absolute url for the image
|
||
|
$ava_url = str_replace('operator/', '', BASE_URL);
|
||
|
|
||
|
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;
|
||
|
|
||
|
// We want everything except mod
|
||
|
if ($chatline[0] && $chatline[2] != "*mod*") {
|
||
|
|
||
|
// Convert urls
|
||
|
$messagedisp = nl2br(replace_urls($chatline[4]));
|
||
|
|
||
|
// Convert emotji
|
||
|
$messagedisp = Emojione\Emojione::toImage($messagedisp);
|
||
|
|
||
|
// 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>';
|
||
|
}
|
||
|
|
||
|
$chatmsg .= '<div class="media"><img class="align-self-start mr-3" src="'.$ava_url.JAK_FILES_DIRECTORY.$chatline[3].'" width="30" alt="'.$chatline[2].'"><div class="media-body"><h5 class="mt-0 mb-0">'.$chatline[2].' <span class="small chat-timestamp">'.JAK_base::jakTimesince($chatline[0], JAK_DATEFORMAT, JAK_TIMEFORMAT).'</span></h5><p>'.$quoted.stripcslashes($messagedisp).'</p></div></div>';
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (isset($chatmsg) && !empty($chatmsg)) {
|
||
|
|
||
|
// Get the data
|
||
|
$JAK_FORM_DATA = jak_get_data($datagc["groupchatid"], $opcacheid, $jaktable);
|
||
|
|
||
|
// Title and Description
|
||
|
$SECTION_TITLE = $JAK_FORM_DATA["title"].' - '.$jkl["g310"];
|
||
|
$SECTION_DESC = JAK_base::jakTimesince($JAK_FORM_DATA["created"], JAK_DATEFORMAT, JAK_TIMEFORMAT);
|
||
|
|
||
|
// Call the template
|
||
|
$template = 'viewgroupchat.php';
|
||
|
} else {
|
||
|
$_SESSION["errormsg"] = $jkl['i2'];
|
||
|
jak_redirect($_SESSION['LCRedirect']);
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
$_SESSION["errormsg"] = $jkl['i2'];
|
||
|
jak_redirect(JAK_rewrite::jakParseurl('groupchat'));
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
default:
|
||
|
|
||
|
// Get all responses
|
||
|
$GROUPCHAT_ALL = jak_get_page_info($jaktable, $opcacheid);
|
||
|
|
||
|
// Let's check if we can add more widgets
|
||
|
$totalAll = count($GROUPCHAT_ALL);
|
||
|
if ($jakosub['groupchats'] <= $totalAll) $newwidg = false;
|
||
|
|
||
|
// We have a form
|
||
|
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['create_groupchat'])) {
|
||
|
$jkp = $_POST;
|
||
|
|
||
|
// Limit has been reached, abort
|
||
|
if (!$newwidg) {
|
||
|
$_SESSION["errormsg"] = $jkl['i6'];
|
||
|
jak_redirect($_SESSION['LCRedirect']);
|
||
|
}
|
||
|
|
||
|
if (empty($jkp['title'])) {
|
||
|
$errors['e'] = $jkl['e2'];
|
||
|
}
|
||
|
|
||
|
if (count($errors) == 0) {
|
||
|
|
||
|
if (!isset($jkp['jak_opid']) OR in_array("0", $jkp['jak_opid'])) {
|
||
|
$opids = 0;
|
||
|
} else {
|
||
|
$opids = join(',', $jkp['jak_opid']);
|
||
|
}
|
||
|
|
||
|
$gcpass = "";
|
||
|
if (isset($jkp['jak_password'])) $gcpass = $jkp['jak_password'];
|
||
|
|
||
|
$jakdb->insert($jaktable, ["opid" => $opcacheid,
|
||
|
"password" => $gcpass,
|
||
|
"title" => $jkp['title'],
|
||
|
"opids" => $opids,
|
||
|
"maxclients" => $jkp['jak_maxclients'],
|
||
|
"lang" => $jkp['jak_lang'],
|
||
|
"buttonimg" => "colour_on.png",
|
||
|
"created" => $jakdb->raw("NOW()")]);
|
||
|
|
||
|
$lastid = $jakdb->id();
|
||
|
|
||
|
if (!$lastid) {
|
||
|
|
||
|
$_SESSION["infomsg"] = $jkl['i'];
|
||
|
jak_redirect(JAK_rewrite::jakParseurl('groupchat'));
|
||
|
|
||
|
} else {
|
||
|
|
||
|
// Write the log file each time someone tries to login before
|
||
|
JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 59, $page2, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : ''), $jakuser->getVar("username"), $_SERVER['REQUEST_URI'], $ipa, $valid_agent);
|
||
|
|
||
|
$_SESSION["successmsg"] = $jkl['g14'];
|
||
|
jak_redirect($_SESSION['LCRedirect']);
|
||
|
}
|
||
|
|
||
|
// Output the errors
|
||
|
} else {
|
||
|
|
||
|
$errors = $errors;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// Get all operators
|
||
|
$JAK_OPERATORS = $jakdb->select($jaktable3, ["id", "username"], ["OR" => ["id" => JAK_USERID, "opid" => $opcacheid], "ORDER" => ["username" => "ASC"]]);
|
||
|
|
||
|
// Call the settings function
|
||
|
$lang_files = jak_get_lang_files();
|
||
|
|
||
|
// Now we have a downgrade
|
||
|
if (!$newwidg && $totalAll > 1 && $totalAll > $jakosub['groupchats']) {
|
||
|
|
||
|
if ($jakosub['groupchats'] == 0) {
|
||
|
$delW = $totalAll - 1;
|
||
|
} else {
|
||
|
$delW = $totalAll - $jakosub['groupchats'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// How often we had changes
|
||
|
$totalChange = $jakdb->count("whatslog", ["AND" => ["opid" => $opcacheid, "whatsid" => [57,58,59,60]]]);
|
||
|
|
||
|
// Last Edit
|
||
|
if ($totalChange != 0) {
|
||
|
$lastChange = $jakdb->get("whatslog", "time", ["AND" => ["opid" => $opcacheid, "whatsid" => [57,58,59,60]], "ORDER" => ["time" => "DESC"], "LIMIT" => 1]);
|
||
|
}
|
||
|
|
||
|
// Title and Description
|
||
|
$SECTION_TITLE = $jkl["m29"];
|
||
|
$SECTION_DESC = "";
|
||
|
|
||
|
// Include the javascript file for results
|
||
|
$js_file_footer = 'js_widget.php';
|
||
|
|
||
|
// Call the template
|
||
|
$template = 'groupchat.php';
|
||
|
}
|
||
|
?>
|