Jakweb.ch stuff
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.
 
 
 
 
clouddesk/operator/user.php

1272 lines
49 KiB

<?php
/*===============================================*\
|| ############################################# ||
|| # JAKWEB.CH / Version 2.1.3 # ||
|| # ----------------------------------------- # ||
|| # 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_ADMINACCESS) jak_redirect(BASE_URL);
// Get the license file
require_once '../class/class.jaklic.php';
$jaklic = new JAKLicenseAPI();
// All the tables we need for this plugin
$errors = array();
$jaktable = 'user';
$jaktable1 = 'user_stats';
$jaktable2 = 'departments';
$jaktable3 = 'clients';
$jaktable4 = 'support_departments';
$jaktable5 = 'faq_categories';
$jaktable6 = 'customfields';
$jaktable7 = 'support_tickets';
$jaktable8 = 'ticket_answers';
$jaktable9 = 'customfields_data';
$jaktable10 = 'envato_codes';
$jaktable11 = 'envato_products';
$insert = '';
$updatepass = $addmuser = $addclient = false;
$newop = true;
$totalavops = (!empty($jakosub) ? $jakosub['operators'] + $jakosub['extraoperators'] : 0);
$totalclients = (!empty($jakosub) ? $jakosub['clients'] : 0);
use JAKWEB\JAKsql;
// Now start with the plugin use a switch to access all pages
switch ($page1) {
case 'clients':
// No permission to clients
if (!jak_get_access("client", $jakuser->getVar("permissions"), JAK_MAIN_OP)) jak_redirect(BASE_URL);
switch ($page2) {
case 'new':
// Let's check if we can add more users
$totalcl = $jakdb->count($jaktable3, ["opid" => JAK_USERID]);
if ($totalclients > $totalcl) $addclient = true;
// No special access, so what you doing here?
if (!$addclient) jak_redirect(BASE_URL);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$jkp = $_POST;
if (empty($jkp['jak_name'])) {
$errors['e1'] = $jkl['e7'];
}
if ($jkp['jak_email'] == '' || !filter_var($jkp['jak_email'], FILTER_VALIDATE_EMAIL)) {
$errors['e2'] = $jkl['e3'];
}
if (jak_field_not_exist(strtolower($jkp['jak_email']), $jaktable3, "email")) {
$errors['e2'] = $jkl['e18'];
}
if ($jkp['jak_password'] != $jkp['jak_confirm_password']) {
$errors['e5'] = $jkl['e10'];
} elseif (strlen($jkp['jak_password']) <= '7') {
$errors['e6'] = $jkl['e11'];
}
if (count($errors) == 0) {
// Chat departments
if (!isset($jkp['jak_depid'])) {
$depa = 0;
} else {
$depa = join(',', $jkp['jak_depid']);
}
// Support Departments
if (!isset($jkp['jak_depids'])) {
$depas = 0;
} else {
$depas = join(',', $jkp['jak_depids']);
}
// FAQ Categories
if (!isset($jkp['jak_depidf'])) {
$depaf = 0;
} else {
$depaf = join(',', $jkp['jak_depidf']);
}
$jakdb->insert($jaktable3, ["opid" => $opcacheid,
"chat_dep" => $depa,
"support_dep" => $depas,
"faq_cat" => $depaf,
"name" => $jkp['jak_name'],
"email" => $jkp['jak_email'],
"password" => hash_hmac('sha256', $jkp['jak_password'], DB_PASS_HASH),
"canupload" => ($jakosub['files'] ? $jkp['jak_upload'] : 0),
"language" => $jkp['jak_lang'],
"access" => 1,
"time" => $jakdb->raw("NOW()")]);
$lastid = $jakdb->id();
if (!$lastid) {
$_SESSION["errormsg"] = $jkl['i4'];
jak_redirect($_SESSION['LCRedirect']);
} else {
$newuserpath = APP_PATH.JAK_FILES_DIRECTORY.'/clients/'.$lastid;
if (!is_dir($newuserpath)) {
mkdir($newuserpath, 0755);
copy(APP_PATH.JAK_FILES_DIRECTORY."/index.html", $newuserpath."/index.html");
}
// Now send the email to the customer if we wish so.
if (isset($jkp['send_email']) && $jkp['send_email'] == 1) {
// Change fake vars into real ones.
if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) foreach ($HD_ANSWERS as $v) {
if ($v["msgtype"] == 14 && $v["lang"] == JAK_LANG) {
$phold = array('{url}', '{title}', '{cname}', '{cemail}', '{cpassword}', '{email}');
$replace = array(BASE_URL_ORIG, JAK_TITLE, $jkp['jak_name'], $jkp['jak_email'], $jkp['jak_password'], JAK_EMAIL);
$regtext = str_replace($phold, $replace, $v["message"]);
break;
}
}
// 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($regtext, 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, reply to, subject, message, attachment
if (jak_send_email($jkp['jak_email'], "", "", JAK_TITLE.' - '.$jkl['g247'], $body, "")) $_SESSION["infomsg"] = $jkl['hd134'];
}
// Last but not least add the client id to the already opened chat sessions.
$jakdb->update("sessions", ["clientid" => $lastid], ["email" => $jkp['jak_email']]);
// Write the log file each time
JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, $lastid, 12, $lastid, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : ''), $jkp['jak_email'], $_SERVER['REQUEST_URI'], $ipa, $valid_agent);
// Output the success message
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect(JAK_rewrite::jakParseurl('users', 'clients', 'edit', $lastid));
}
} else {
$errors['e'] = $jkl['e'];
$errors = $errors;
}
}
// Get all departments
$JAK_DEPARTMENTS = $jakdb->select($jaktable2, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
$JAK_DEP_SUPPORT = $jakdb->select($jaktable4, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
$JAK_CAT_FAQ = $jakdb->select($jaktable5, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
// Ok we have an id from the chat
if ($page3 = "chat" && is_numeric($page4)) {
// Get the data
$datasett = $jakdb->get("sessions", ["name", "email"], ["AND" => ["id" => $page4, "opid" => $opcacheid]]);
// Write it into the vars if not set already
if (empty($_POST["jak_name"])) $_POST["jak_name"] = $datasett["name"];
if (empty($_POST["jak_email"])) $_POST["jak_email"] = $datasett["email"];
}
// Call the settings function
$lang_files = jak_get_lang_files();
// Title and Description
$SECTION_TITLE = $jkl["hd112"];
$SECTION_DESC = "";
// Include the javascript file for results
$js_file_footer = 'js_client.php';
// Call the template
$template = 'newclient.php';
break;
case 'edit':
if (isset($page3) && is_numeric($page3) && $jakdb->has($jaktable3, ["AND" => ["id" => $page3, "opid" => $opcacheid]])) {
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$jkp = $_POST;
if (empty($jkp['jak_name'])) {
$errors['e1'] = $jkl['e7'];
}
if ($jkp['jak_email'] == '' || !filter_var($jkp['jak_email'], FILTER_VALIDATE_EMAIL)) {
$errors['e2'] = $jkl['e3'];
}
if (jak_field_not_exist_id($jkp['jak_email'], $page3, $jaktable3, "email")) {
$errors['e2'] = $jkl['e18'];
}
if (!empty($jkp['jak_password']) || !empty($jkp['jak_confirm_password'])) {
if ($jkp['jak_password'] != $jkp['jak_confirm_password']) {
$errors['e5'] = $jkl['e10'];
} elseif (strlen($jkp['jak_password']) <= '7') {
$errors['e6'] = $jkl['e11'];
} else {
$updatepass = true;
}
}
if (count($errors) == 0) {
// Chat departments
if (!isset($jkp['jak_depid'])) {
$depa = 0;
} else {
$depa = join(',', $jkp['jak_depid']);
}
// Support Departments
if (!isset($jkp['jak_depids'])) {
$depas = 0;
} else {
$depas = join(',', $jkp['jak_depids']);
}
// FAQ Categories
if (!isset($jkp['jak_depidf'])) {
$depaf = 0;
} else {
$depaf = join(',', $jkp['jak_depidf']);
}
$result = $jakdb->update($jaktable3, ["chat_dep" => $depa,
"support_dep" => $depas,
"faq_cat" => $depaf,
"name" => $jkp['jak_name'],
"email" => $jkp['jak_email'],
"credits" => $jkp['jak_credits'],
"paid_until" => trim($jkp['jak_validtill']),
"custom_price" => trim($jkp['custom_price']),
"canupload" => $jkp['jak_upload'],
"language" => $jkp['jak_lang'],
"frontendadmin" => $jkp['jak_frontendadmin']], ["AND" => ["id" => $page3, "opid" => $opcacheid]]);
if (!$result) {
$_SESSION["errormsg"] = $jkl['i4'];
jak_redirect($_SESSION['LCRedirect']);
} else {
// Finally we update the password
if ($updatepass) $jakdb->update($jaktable3, ["password" => hash_hmac('sha256', $jkp['jak_password'], DB_PASS_HASH)], ["id" => $page3]);
// And we complete the custom fields
jak_save_custom_fields($opcacheid, $page3, 0, 0, $jkp, 1);
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect($_SESSION['LCRedirect']);
}
} else {
$errors['e'] = $jkl['e'];
$errors = $errors;
}
}
// Get all departments
$JAK_DEPARTMENTS = $jakdb->select($jaktable2, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
$JAK_DEP_SUPPORT = $jakdb->select($jaktable4, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
$JAK_CAT_FAQ = $jakdb->select($jaktable5, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
// Call the settings function
$lang_files = jak_get_lang_files(JAK_LANG);
// Get the data
$JAK_FORM_DATA = jak_get_data($page3, $opcacheid, $jaktable3);
// Get the custom fields
$custom_fields = jak_get_custom_fields($page3, 0, 1, $opcacheid, false, $JAK_FORM_DATA["language"], false, true, false, false, false);
// Load the registered licenses
if (JAK_BILLING_MODE == 3) {
$allLics = $jakdb->select($jaktable10, ["[>]".$jaktable11 => ["productid" => "envato_item_id"]], ["envato_codes.id", "envato_codes.purchase_name", "envato_codes.purchase_code", "envato_codes.purchased", "envato_codes.support_expires", "envato_products.product_name"], ["AND" => ["envato_codes.opid" => $opcacheid, "envato_codes.clientid" => $page3], "ORDER" => ["envato_codes.support_expires" => "ASC"]]);
}
// Title and Description
$SECTION_TITLE = $jkl["g287"];
$SECTION_DESC = "";
// Include the javascript file for results
$js_file_footer = 'js_client.php';
// Call the template
$template = 'editclient.php';
} else {
$_SESSION["errormsg"] = $jkl['i3'];
jak_redirect(JAK_rewrite::jakParseurl('users', 'clients'));
}
break;
case 'lic':
if (!JAK_SUPERADMINACCESS) jak_redirect(BASE_URL);
# code...
// Check if user exists and can be deleted
if (JAK_BILLING_MODE == 3 && is_numeric($page3)) {
// If you took $code from user input it's a good idea to trim it
$code = $jakdb->get($jaktable10, ["clientid", "purchase_code"], ["AND" => ["id" => $page3, "opid" => $opcacheid], "LIMIT" => 1]);
// Verify the key
$purchase_data = verify_envato_purchase_code($code["purchase_code"]);
if (isset($purchase_data['item']['name'])) {
// Now we will update the client table for the support expire if older
if ($jakdb->has($jaktable3, ["AND" => ["id" => $code["clientid"], "support_until[<]" => $purchase_data['supported_until']]])) {
$jakdb->update($jaktable3, ["support_until" => $purchase_data['supported_until']], ["id" => $code["clientid"]]);
}
}
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect(JAK_rewrite::jakParseurl('users', 'clients', 'edit', $code["clientid"]));
} else {
$_SESSION["errormsg"] = $jkl['i3'];
jak_redirect(JAK_rewrite::jakParseurl('users', 'clients', 'edit', $code["clientid"]));
}
break;
case 'licdel':
if (!JAK_SUPERADMINACCESS) jak_redirect(BASE_URL);
# code...
// Check if user exists and can be deleted
if (JAK_BILLING_MODE == 3 && is_numeric($page3)) {
$clientid = $jakdb->get($jaktable10, "clientid", ["AND" => ["id" => $page3, "opid" => $opcacheid], "LIMIT" => 1]);
// Now let's delete the entry
$result = $jakdb->delete($jaktable10, ["AND" => ["id" => $page3, "opid" => $opcacheid]]);
if ($result->rowCount() != 1) {
$_SESSION["infomsg"] = $jkl['i'];
jak_redirect(JAK_rewrite::jakParseurl('users', 'clients', 'edit', $clientid));
} else {
// Now let us delete the define cache file
$cachestufffile = APP_PATH.JAK_CACHE_DIRECTORY.'/stuff.php';
if (file_exists($cachestufffile)) {
unlink($cachestufffile);
}
// Write the log file each time someone tries to login before
JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 104, $page3, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : ''), $jakuser->getVar("username"), $_SERVER['REQUEST_URI'], $ipa, $valid_agent);
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect(JAK_rewrite::jakParseurl('users', 'clients', 'edit', $clientid));
}
} else {
$_SESSION["errormsg"] = $jkl['i3'];
jak_redirect(JAK_rewrite::jakParseurl('users', 'clients', 'edit', $clientid));
}
break;
case 'newpass':
// Now send the email to the customer if we wish so.
if (isset($page3) && is_numeric($page3) && $jakdb->has($jaktable3, ["AND" => ["id" => $page3, "opid" => $opcacheid]])) {
// Get the client data
$JAK_FORM_DATA = jak_get_data($page3, $opcacheid, $jaktable3);
// create new password
$password = jak_password_creator();
$passcrypt = hash_hmac('sha256', $password, DB_PASS_HASH);
// update table
$result = $jakdb->update($jaktable3, ["password" => $passcrypt, "forgot" => 0], ["AND" => ["id" => $page3, "opid" => $opcacheid]]);
// 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(sprintf($jkl['l16'], $JAK_FORM_DATA["name"], $password, JAK_TITLE), 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, reply to, subject, message, attachment
if (jak_send_email($JAK_FORM_DATA["email"], "", "", JAK_TITLE.' - '.$jkl['l15'], $body, "")) {
$_SESSION["successmsg"] = $jkl['hd348'];
// Write the log file each time someone tries to login before
JAK_base::jakWhatslog('', JAK_USERID, 0, 108, $page3, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : ''), $jakuser->getVar("username"), $_SERVER['REQUEST_URI'], $ipa, $valid_agent);
// Redirect
jak_redirect(JAK_rewrite::jakParseurl('users', 'clients', 'edit', $page3));
}
}
break;
default:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['jak_delock_all'])) {
$jkp = $_POST;
if (isset($jkp['action']) && $jkp['action'] == "lock") {
$lockuser = $jkp['jak_delock_all'];
$useridarray = explode(',', JAK_SUPERADMIN);
for ($i = 0; $i < count($lockuser); $i++) {
$locked = $lockuser[$i];
// Get the userid / access token
$uidacc = explode(":#:", $locked);
if ($uidacc[1] == 1) {
$query = $jakdb->update($jaktable3, ["access" => 0], ["AND" => ["id" => $uidacc[0], "opid" => $opcacheid]]);
} else {
$query = $jakdb->update($jaktable3, ["access" => 1], ["AND" => ["id" => $uidacc[0], "opid" => $opcacheid]]);
}
}
if ($query) {
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect($_SESSION['LCRedirect']);
}
$_SESSION["infomsg"] = $jkl['i1'];
jak_redirect($_SESSION['LCRedirect']);
}
if (isset($jkp['action']) && $jkp['action'] == "delete") {
$lockuser = $jkp['jak_delock_all'];
for ($i = 0; $i < count($lockuser); $i++) {
$locked = $lockuser[$i];
// Get the userid / access token
$uidacc = explode(":#:", $locked);
$query = $jakdb->delete($jaktable3, ["AND" => ["id" => $uidacc[0], "opid" => $opcacheid]]);
// Delete Avatar and folder
$targetPath = APP_PATH.JAK_FILES_DIRECTORY.'/clients/'.$uidacc[0].'/';
$removedouble = str_replace("//","/",$targetPath);
foreach(glob($removedouble.'*.*') as $jak_unlink) {
// Delete the files
@unlink($jak_unlink);
}
// Delete the directory
@rmdir($targetPath);
// Find tickets from this user and set to 0
$jakdb->update($jaktable7, ["clientid" => 0], ["AND" => ["clientid" => $uidacc[0], "opid" => $opcacheid]]);
$jakdb->update($jaktable8, ["clientid" => 0], ["clientid" => $uidacc[0]]);
}
if ($query) {
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect($_SESSION['LCRedirect']);
}
$_SESSION["infomsg"] = $jkl['i1'];
jak_redirect($_SESSION['LCRedirect']);
}
}
$_SESSION["infomsg"] = $jkl['i'];
jak_redirect($_SESSION['LCRedirect']);
}
// Total client's
$totalAll = 0;
// Get the totals
$totalAll = $jakdb->count($jaktable3, ["opid" => $opcacheid]);
// Let's check if we can add more users
if ($totalclients > $totalAll) $addclient = true;
// Check and validate
if (!JAK_WILDCARD_SUBDOMAIN) {
$verify_response = $jaklic->verify_license(true);
if ($verify_response['status'] != true) {
if (JAK_SUPERADMINACCESS) {
jak_redirect(JAK_rewrite::jakParseurl('maintenance'));
} else {
$_SESSION["errormsg"] = $jkl['e27'];
jak_redirect(BASE_URL);
}
}
}
// Title and Description
$SECTION_TITLE = $jkl["hd6"];
$SECTION_DESC = "";
// Include the javascript file for results
$js_file_footer = 'js_clients.php';
// Call the template
$template = 'clients.php';
break;
}
break;
// Create new user
case 'new':
// No special access, so what you doing here?
if (!jak_get_access("usrmanage", $jakuser->getVar("permissions"), JAK_MAIN_OP)) jak_redirect(BASE_URL);
// Let's check if we can add more users
$totalops = $jakdb->count($jaktable, ["opid" => JAK_USERID]);
if ($totalavops > $totalops) $addmuser = true;
// No special access, so what you doing here?
if (!$addmuser) jak_redirect(BASE_URL);
// Get all departments
$JAK_DEPARTMENTS = $jakdb->select($jaktable2, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
$JAK_DEP_SUPPORT = $jakdb->select($jaktable4, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$jkp = $_POST;
if (empty($jkp['jak_name'])) {
$errors['e1'] = $jkl['e7'];
}
if ($jkp['jak_email'] == '' || !filter_var($jkp['jak_email'], FILTER_VALIDATE_EMAIL)) {
$errors['e2'] = $jkl['e3'];
}
if (jak_field_not_exist(strtolower($jkp['jak_email']), $jaktable, "email")) {
$errors['e2'] = $jkl['e18'];
}
if (!preg_match('/^([a-zA-Z0-9\-_])+$/', $jkp['jak_username'])) {
$errors['e3'] = $jkl['e8'];
}
if (jak_field_not_exist(strtolower($jkp['jak_username']), $jaktable, "username")) {
$errors['e4'] = $jkl['e9'];
}
if ($jkp['jak_password'] != $jkp['jak_confirm_password']) {
$errors['e5'] = $jkl['e10'];
} elseif (strlen($jkp['jak_password']) <= '7') {
$errors['e6'] = $jkl['e11'];
} else {
$updatepass = true;
}
if (count($errors) == 0) {
// Chat departments
if (!isset($jkp['jak_depid'])) {
$depa = 0;
} else {
$depa = join(',', $jkp['jak_depid']);
}
// Support Departments
if (!isset($jkp['jak_depids'])) {
$depas = 0;
} else {
$depas = join(',', $jkp['jak_depids']);
}
$tw_roles = '';
if (JAK_SUPERADMINACCESS && !empty($jkp['jak_roles'])) $tw_roles = join(',', $jkp['jak_roles']);
if (isset($jakhs['hostactive']) && $jakhs['hostactive']) {
$jkp['jak_files'] = $jakhs['files'];
}
// Reset
$validtill = '1980-05-06 00:00:00';
// what we have to add for the operator
if ($addmuser) {
$totaleops = $jakdb->count($jaktable, ["AND" => ["opid" => $opcacheid, "extraop" => 1]]);
if ($totaleops < $jakosub['extraoperators']) {
$date = new DateTime();
// Modify the date
$date->modify('+1 month');
$validtill = $date->format('Y-m-d H:i:s');
$extraop = 1;
} else {
$validtill = $jakosub['paidtill'];
$extraop = 0;
}
}
$tw_roles = '';
if (($addmuser) && isset($jkp['jak_roles']) && !empty($jkp['jak_roles'])) $tw_roles = join(',', $jkp['jak_roles']);
$jakdb->insert($jaktable, ["opid" => $opcacheid,
"chat_dep" => $depa,
"support_dep" => $depas,
"password" => hash_hmac('sha256', $jkp['jak_password'], DB_PASS_HASH),
"username" => trim($jkp['jak_username']),
"name" => trim($jkp['jak_name']),
"email" => filter_var($jkp['jak_email'], FILTER_SANITIZE_EMAIL),
"responses" => $jkp['jak_responses'],
"files" => $jkp['jak_files'],
"operatorchat" => $jkp['jak_chat'],
"operatorchatpublic" => $jkp['jak_chatpublic'],
"operatorlist" => $jkp['jak_chatlist'],
"transferc" => $jkp['jak_transfer'],
"chat_latency" => $jkp['jak_latency'],
"useronlinelist" => $jkp['jak_uolist'],
"sound" => $jkp['jak_sound'],
"ringing" => $jkp['jak_ringing'],
"language" => $jkp['jak_lang'],
"invitationmsg" => $jkp['jak_inv'],
"navsidebar" => $jkp['jak_navside'],
"permissions" => $tw_roles,
"validtill" => $validtill,
"extraop" => $extraop,
"access" => $jkp['jak_access'],
"time" => $jakdb->raw("NOW()")]);
$lastid = $jakdb->id();
if (!$lastid) {
$_SESSION["errormsg"] = $jkl['i4'];
jak_redirect($_SESSION['LCRedirect']);
} else {
$newuserpath = APP_PATH.JAK_FILES_DIRECTORY.'/'.$lastid;
if (!is_dir($newuserpath)) {
mkdir($newuserpath, 0755);
copy(APP_PATH.JAK_FILES_DIRECTORY."/index.html", $newuserpath."/index.html");
}
// Write the log file each time someone login after to show success
JAK_base::jakWhatslog('', $opcacheid, JAK_USERID, 0, 13, $lastid, (isset($_COOKIE['WIOgeoData']) ? $_COOKIE['WIOgeoData'] : ''), trim($jkp['jak_username']), $_SERVER['REQUEST_URI'], $ipa, $valid_agent);
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect(JAK_rewrite::jakParseurl('users', 'edit', $lastid, $opcacheid));
}
} else {
$errors['e'] = $jkl['e'];
$errors = $errors;
}
}
// Call the settings function
$lang_files = jak_get_lang_files();
// Title and Description
$SECTION_TITLE = $jkl["m7"];
$SECTION_DESC = "";
// Include the javascript file for results
$js_file_footer = 'js_edituser.php';
// Call the template
$template = 'newuser.php';
break;
case 'stats':
// Let's go on with the script
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['email_feedback'])) {
$jkp = $_POST;
// Errors in Array
$errors = array();
if ($jkp['email'] == '' || !filter_var($jkp['email'], FILTER_VALIDATE_EMAIL)) {
$errors['email'] = $jkl['e3'];
}
if (count($errors) > 0) {
/* Outputtng the error messages */
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
header('Cache-Control: no-cache');
die('{"status":0, "errors":'.json_encode($errors).'}');
} else {
$errors = $errors;
}
} else {
$result = $jakdb->select($jaktable1, "*", ["userid" => $page2, "ORDER" => ["id" => "ASC"]]);
$total_vote = $jakdb->sum($jaktable1, "vote", ["userid" => $page2]);
$total_support = $jakdb->sum($jaktable1, "support_time", ["userid" => $page2]);
$subject = $jkl["g81"].' '.$page3;
$mailchat = '<div style="margin:10px 0px 0px 0px;padding:10px;border:1px solid #A8B9CB;font-family: Verdana, sans-serif;font-size: 13px;
font-weight: 500;letter-spacing: normal;line-height: 1.5em;"><h2>'.$subject.'</h2><ul style="list-style:none;">';
// Reset var
$count = 0;
if (isset($result) && !empty($result) && is_array($result)) foreach ($result as $row) {
// collect each record into $_data
$mailchat .= '<li style="border-bottom:1px solid #333"><span style="font-size:11px">'.$row['time'].' - '.$jkl['g86'].':</span><br /><span style="color:#c92e2e">'.$jkl['g85'].': </span>'.$row['vote'].'/5<br />'.$jkl['g54'].': '.$row['name'].'<br />'.$jkl['stat_s12'].': '.$row['comment'].'<br />'.$jkl['l5'].': '.$row['email'].'<br />'.$jkl['g87'].': '.gmdate('H:i:s', $row['support_time']).'</li>';
$count++;
}
$mailchat .= '</ul>';
$mailchat .= '<h2>'.$jkl["g89"].'</h2>
<p><strong>'.$jkl["g90"].':</strong> '.gmdate('H:i:s', $total_support).'<br /><strong>'.$jkl["g91"].':</strong> '.round(($total_vote / $count), 2).'/5</p></div>';
// Ok, we send the email // email address, cc email address, reply to, subject, message, attachment
if (jak_send_email($jkp['email'], "", "", $subject, $mailchat, "")) {
// Ajax Request
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
header('Cache-Control: no-cache');
die(json_encode(array('status' => 1, 'html' => $jkl["g14"])));
} else {
jak_redirect($_SERVER['HTTP_REFERER']);
}
}
}
}
// Check if the user exists
if (is_numeric($page2) && ($page2 == JAK_USERID || $page4 == $opcacheid)) {
// Reset some vars
$USER_FEEDBACK = array();
$ufcount = 0;
$USER_VOTES = $USER_SUPPORT = $USER_SUPPORT_TICKET_N = $USER_SUPPORT_TICKET = $USER_SUPPORT_TICKETS = 0;
// Get all chat feedbacks
$USER_FEEDBACK = $jakdb->select($jaktable1, "*", ["userid" => $page2, "ORDER" => ["id" => "DESC"]]);
// Let's check which one have vote 0 and exlcude them
if (isset($USER_FEEDBACK) && !empty($USER_FEEDBACK)) foreach ($USER_FEEDBACK as $uf) {
# code...
if ($uf["vote"] != 0) {
$ufcount++;
}
}
// Calculate the votes and support time for the chat
$USER_VOTES = $jakdb->sum($jaktable1, "vote", ["AND" => ["userid" => $page2, "vote[!]" => "0"]]);
$USER_SUPPORT = $jakdb->sum($jaktable1, "support_time", ["userid" => $page2]);
// Calculate the response time for the tickets (average)
$USER_SUPPORT_TICKET_N = $jakdb->count("support_tickets_response", ["AND" => ["opid" => $opcacheid, "operatorid" => $page2, "newticket" => 1]]);
$USER_SUPPORT_TIME_N = $jakdb->sum("support_tickets_response", "responsetime", ["AND" => ["opid" => $opcacheid, "operatorid" => $page2, "newticket" => 1]]);
$USER_SUPPORT_TICKET = $jakdb->count("support_tickets_response", ["AND" => ["opid" => $opcacheid, "operatorid" => $page2]]);
$USER_SUPPORT_TIME = $jakdb->sum("support_tickets_response", "responsetime", ["AND" => ["opid" => $opcacheid, "operatorid" => $page2]]);
// Average time spent on a ticket
$USER_SUPPORT_TICKETS = $jakdb->count("support_tickets", ["AND" => ["opid" => $opcacheid, "operatorid" => $page2, "ended[!]" => 0]]);
$USER_TICKETS_INI = $jakdb->sum("support_tickets", "initiated", ["AND" => ["opid" => $opcacheid, "operatorid" => $page2, "ended[!]" => 0]]);
$USER_TICKETS_ENDED = $jakdb->sum("support_tickets", "ended", ["AND" => ["opid" => $opcacheid, "operatorid" => $page2], "ended[!]" => 0]);
}
// Call the template
$template = 'userstats.php';
break;
case 'edit':
// No special access and not your userid, what you up to?
if (!jak_get_access("usrmanage", $jakuser->getVar("permissions"), JAK_MAIN_OP) && ($page2 != JAK_USERID || $page3 != $opcacheid)) jak_redirect(BASE_URL);
// Check if the user exists
if (is_numeric($page2) && ($page2 == JAK_USERID || $page3 == $opcacheid)) {
// Get all departments
$JAK_DEPARTMENTS = $jakdb->select($jaktable2, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
$JAK_DEP_SUPPORT = $jakdb->select($jaktable4, ["id", "title"], ["opid" => $opcacheid, "ORDER" => ["dorder" => "ASC"]]);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$jkp = $_POST;
if (empty($jkp['jak_name'])) {
$errors['e1'] = $jkl['e7'];
}
if ($jkp['jak_email'] == '' || !filter_var($jkp['jak_email'], FILTER_VALIDATE_EMAIL)) {
$errors['e2'] = $jkl['e3'];
}
if (jak_field_not_exist_id($jkp['jak_email'], $page2, $jaktable, "email")) {
$errors['e2'] = $jkl['e18'];
}
if (!preg_match('/^([a-zA-Z0-9\-_])+$/', $jkp['jak_username'])) {
$errors['e3'] = $jkl['e8'];
}
if (jak_field_not_exist_id($jkp['jak_username'], $page2, $jaktable, "username")) {
$errors['e4'] = $jkl['e9'];
}
if (!empty($jkp['jak_password']) || !empty($jkp['jak_confirm_password'])) {
if ($jkp['jak_password'] != $jkp['jak_confirm_password']) {
$errors['e5'] = $jkl['e10'];
} elseif (strlen($jkp['jak_password']) <= '7') {
$errors['e6'] = $jkl['e11'];
} else {
$updatepass = true;
}
}
// Delete Avatar if yes
if (!empty($jkp['jak_delete_avatar'])) {
$avatarpi = APP_PATH.JAK_FILES_DIRECTORY.'/index.html';
$avatarpid = str_replace("//","/",$avatarpi);
$targetPath = APP_PATH.JAK_FILES_DIRECTORY.'/'.$page2.'/';
$removedouble = str_replace("//","/",$targetPath);
foreach(glob($removedouble.'*.*') as $jak_unlink){
unlink($jak_unlink);
copy($avatarpid, $targetPath . "/index.html");
}
$jakdb->update($jaktable, ["picture" => "/standard.jpg"], ["id" => $page2]);
}
if (!empty($_FILES['uploadpp']['name'])) {
if ($_FILES['uploadpp']['name'] != '') {
$filename = $_FILES['uploadpp']['name']; // original filename
// Fix explode when upload in 3.3
$ls_xtension = pathinfo($filename);
if ($ls_xtension['extension'] == "jpg" || $ls_xtension['extension'] == "jpeg" || $ls_xtension['extension'] == "png" || $ls_xtension['extension'] == "gif") {
// Get the maximum upload or set to 2
$postmax = (ini_get('post_max_size') ? filter_var(ini_get('post_max_size'), FILTER_SANITIZE_NUMBER_INT) : "2");
if ($_FILES['uploadpp']['size'] <= ($postmax * 1000000)) {
list($width, $height, $type, $attr) = getimagesize($_FILES['uploadpp']['tmp_name']);
$mime = image_type_to_mime_type($type);
if (($mime == "image/jpeg") || ($mime == "image/pjpeg") || ($mime == "image/png") || ($mime == "image/gif")) {
// first get the target path
$targetPathd = APP_PATH.JAK_FILES_DIRECTORY.'/'.$page2.'/';
$targetPath = str_replace("//","/",$targetPathd);
// Create the target path
if (!is_dir($targetPath)) {
mkdir($targetPath, 0755);
copy(APP_PATH.JAK_FILES_DIRECTORY."/index.html", $targetPath . "/index.html");
}
// if old avatars exist delete it
foreach(glob($targetPath.'*.*') as $jak_unlink){
unlink($jak_unlink);
copy(APP_PATH.JAK_FILES_DIRECTORY."/index.html", $targetPath . "/index.html");
}
$tempFile = $_FILES['uploadpp']['tmp_name'];
$origName = substr($_FILES['uploadpp']['name'], 0, -4);
$name_space = strtolower($_FILES['uploadpp']['name']);
$middle_name = str_replace(" ", "_", $name_space);
$middle_name = str_replace(".jpeg", ".jpg", $name_space);
$glnrrand = rand(10, 99);
$bigPhoto = str_replace(".", "_" . $glnrrand . ".", $middle_name);
$smallPhoto = str_replace(".", "_t.", $bigPhoto);
$targetFile = str_replace('//','/',$targetPath) . $bigPhoto;
$origPath = '/'.$page2.'/';
$dbSmall = $origPath.$smallPhoto;
require_once '../include/functions_thumb.php';
// Move file and create thumb
move_uploaded_file($tempFile,$targetFile);
create_thumbnail($targetPath, $targetFile, $smallPhoto, JAK_USERAVATWIDTH, JAK_USERAVATHEIGHT, 80);
// SQL update
$jakdb->update($jaktable, ["picture" => $dbSmall], ["id" => $page2]);
} else {
$errors['e7'] = $jkl['e24'].'<br>';
$errors = $errors;
}
} else {
$errors['e7'] = $jkl['e46'].'<br>';
$errors = $errors;
}
} else {
$errors['e7'] = $jkl['e24'].'<br>';
$errors = $errors;
}
} else {
$errors['e7'] = $jkl['e24'].'<br>';
$errors = $errors;
}
}
if (count($errors) == 0) {
if (!isset($jkp['jak_access'])) $jkp['jak_access'] = '1';
// We cant deny access for superadmin
$useridarray = explode(',', JAK_SUPERADMIN);
if (!in_array($page2, $useridarray)) {
$result = $jakdb->update($jaktable, ["access" => $jkp['jak_access']], ["id" => $page2]);
}
// Chat departments
if (!isset($jkp['jak_depid'])) {
$depa = 0;
} else {
$depa = join(',', $jkp['jak_depid']);
}
// Support Departments
if (!isset($jkp['jak_depids'])) {
$depas = 0;
} else {
$depas = join(',', $jkp['jak_depids']);
}
$bhours = '';
$bhours = trim($_REQUEST["bhours"]);
// Reset the hours if they not set.
if ($bhours == '[{"isActive":false,"timeFrom":null,"timeTill":null,"timeFroma":null,"timeTilla":null},{"isActive":false,"timeFrom":null,"timeTill":null,"timeFroma":null,"timeTilla":null},{"isActive":false,"timeFrom":null,"timeTill":null,"timeFroma":null,"timeTilla":null},{"isActive":false,"timeFrom":null,"timeTill":null,"timeFroma":null,"timeTilla":null},{"isActive":false,"timeFrom":null,"timeTill":null,"timeFroma":null,"timeTilla":null},{"isActive":false,"timeFrom":null,"timeTill":null,"timeFroma":null,"timeTilla":null},{"isActive":false,"timeFrom":null,"timeTill":null,"timeFroma":null,"timeTilla":null}]') $bhours = '';
// No sibling update
$siblingupd = false;
$smsphone = '';
if (isset($jkp['jak_phone'])) $smsphone = $jkp['jak_phone'];
$whatsphone = '';
if (isset($jkp['jak_whatsphone'])) $whatsphone = $jkp['jak_whatsphone'];
if (jak_get_access("usrmanage", $jakuser->getVar("permissions"), JAK_MAIN_OP)) {
$result = $jakdb->update($jaktable, ["chat_dep" => $depa,
"support_dep" => $depas,
"username" => trim($jkp['jak_username']),
"name" => trim($jkp['jak_name']),
"aboutme" => trim($jkp['jak_aboutme']),
"phonenumber" => $smsphone,
"whatsappnumber" => $whatsphone,
"pusho_tok" => $jkp['jak_pushot'],
"pusho_key" => $jkp['jak_pushok'],
"responses" => $jkp['jak_responses'],
"files" => $jkp['jak_files'],
"operatorchat" => $jkp['jak_chat'],
"operatorchatpublic" => $jkp['jak_chatpublic'],
"operatorlist" => $jkp['jak_chatlist'],
"transferc" => $jkp['jak_transfer'],
"chat_latency" => $jkp['jak_latency'],
"useronlinelist" => $jkp['jak_uolist'],
"sound" => $jkp['jak_sound'],
"ringing" => $jkp['jak_ringing'],
"alwaysnot" => $jkp['jak_alwaysnot'],
"alwaysonline" => $jkp['jak_alwaysonline'],
"emailnot" => $jkp['jak_emailnot'],
"language" => $jkp['jak_lang'],
"invitationmsg" => $jkp['jak_inv'],
"hours_array" => $bhours,
"navsidebar" => $jkp['jak_navside'],
"themecolour" => $jkp['jak_themecolour'],
"menubg" => $jkp['jak_menubg'],
"email" => filter_var($jkp['jak_email'], FILTER_SANITIZE_EMAIL)], ["id" => $page2]);
} else {
$result = $jakdb->update($jaktable, ["username" => trim($jkp['jak_username']),
"name" => trim($jkp['jak_name']),
"aboutme" => trim($jkp['jak_aboutme']),
"phonenumber" => $smsphone,
"whatsappnumber" => $whatsphone,
"pusho_tok" => $jkp['jak_pushot'],
"pusho_key" => $jkp['jak_pushok'],
"chat_latency" => $jkp['jak_latency'],
"useronlinelist" => $jkp['jak_uolist'],
"sound" => $jkp['jak_sound'],
"ringing" => $jkp['jak_ringing'],
"alwaysnot" => $jkp['jak_alwaysnot'],
"alwaysonline" => $jkp['jak_alwaysonline'],
"emailnot" => $jkp['jak_emailnot'],
"language" => $jkp['jak_lang'],
"invitationmsg" => $jkp['jak_inv'],
"hours_array" => $bhours,
"navsidebar" => $jkp['jak_navside'],
"themecolour" => $jkp['jak_themecolour'],
"menubg" => $jkp['jak_menubg'],
"email" => filter_var($jkp['jak_email'], FILTER_SANITIZE_EMAIL)], ["id" => $page2]);
}
// Table to update usually the one belongs to the operator // Sibling update
if (isset($page3) && !empty($page3) && is_numeric($page3) && $jakdb->has($jaktable, ["AND" => ["id" => $page2, "opid" => $opcacheid]])) $siblingupd = true;
// Finally we update the password
if ($updatepass) $jakdb->update($jaktable, ["password" => hash_hmac('sha256', $jkp['jak_password'], DB_PASS_HASH)], ["id" => $page2]);
// Finally update the user permission
if (jak_get_access("usrmanage", $jakuser->getVar("permissions"), JAK_MAIN_OP)) {
if (!isset($jkp['jak_roles'])) {
$tw_roles = '';
} else {
$tw_roles = join(',', $jkp['jak_roles']);
}
$jakdb->update($jaktable, ["permissions" => $tw_roles], ["id" => $page2]);
}
if (!$result) {
$_SESSION["infomsg"] = $jkl['i'];
jak_redirect($_SESSION['LCRedirect']);
} else {
// We have a username change reset the sessions or we get logged out
if ($jkp['jak_username'] != $jkp['jak_username_old']) {
// Set the session
$_SESSION['jak_username'] = $jkp['jak_username'];
// Check if cookies are set previous (wrongly) and delete
if (isset($_COOKIE['jak_lcp_cookname'])) {
JAK_base::jakCookie('jak_lcp_cookname', $jkp['jak_username'], JAK_COOKIE_TIME, JAK_COOKIE_PATH);
}
}
if (!$siblingupd) {
// Now if we have multi site please update the main database.
if (!empty(JAKDB_MAIN_NAME) && JAK_MAIN_LOC) {
// Database connection to the main site
$jakdb1 = new JAKsql([
// required
'database_type' => JAKDB_MAIN_DBTYPE,
'database_name' => JAKDB_MAIN_NAME,
'server' => JAKDB_MAIN_HOST,
'username' => JAKDB_MAIN_USER,
'password' => JAKDB_MAIN_PASS,
'charset' => 'utf8',
'port' => JAKDB_MAIN_PORT,
'prefix' => JAKDB_MAIN_PREFIX,
// [optional] driver_option for connection, read more from http://www.php.net/manual/en/pdo.setattribute.php
'option' => [PDO::ATTR_CASE => PDO::CASE_NATURAL]
]);
$jakdb1->update("users", [
"email" => filter_var($jkp['jak_email'], FILTER_SANITIZE_EMAIL),
"username" => trim($jkp['jak_username']),
"lastedit" => $jakdb->raw("NOW()")], ["AND" => ["locationid" => JAK_MAIN_LOC, "opid" => $opcacheid]]);
if ($updatepass) $jakdb1->update("users", ["password" => hash_hmac('sha256', $jkp['jak_password'], DB_PASS_HASH)], ["AND" => ["locationid" => JAK_MAIN_LOC, "opid" => $opcacheid]]);
}
} // end siblings update
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect($_SESSION['LCRedirect']);
}
// Output the errors
} else {
$errors['e'] = $jkl['e'];
$errors = $errors;
}
}
// Call the settings function
$lang_files = jak_get_lang_files();
$JAK_FORM_DATA = $jakdb->get($jaktable, "*", ["AND" => ["id" => $page2]]);
// Title and Description
$SECTION_TITLE = $jkl["m11"];
$SECTION_DESC = "";
// Include the javascript file for results
$js_file_footer = 'js_edituser.php';
$template = 'edituser.php';
} else {
$_SESSION["errormsg"] = $jkl['i3'];
jak_redirect(JAK_rewrite::jakParseurl('users'));
}
break;
case 'resethours':
// Check if the user exists
if (is_numeric($page2) && ($page2 == JAK_USERID || $page3 == $opcacheid)) {
$result = $jakdb->update($jaktable, ["hours_array" => ""], ["id" => $page2]);
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect(JAK_rewrite::jakParseurl('users', 'edit', $page2, $page3));
} else {
$_SESSION["errormsg"] = $jkl['i2'];
jak_redirect(JAK_rewrite::jakParseurl('users'));
}
break;
default:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['jak_delock_all'])) {
$jkp = $_POST;
if (isset($jkp['action']) && $jkp['action'] == "lock") {
$lockuser = $jkp['jak_delock_all'];
$useridarray = explode(',', JAK_SUPERADMIN);
for ($i = 0; $i < count($lockuser); $i++) {
$locked = $lockuser[$i];
// Get the userid / access token
$uidacc = explode(":#:", $locked);
if (!in_array($uidacc[0], $useridarray)) {
if ($uidacc[1] == 1) {
$query = $jakdb->update($jaktable, ["access" => 0], ["id" => $uidacc[0]]);
} else {
$query = $jakdb->update($jaktable, ["access" => 1], ["id" => $uidacc[0]]);
}
}
}
if ($query) {
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect($_SESSION['LCRedirect']);
}
$_SESSION["infomsg"] = $jkl['i1'];
jak_redirect($_SESSION['LCRedirect']);
}
if (isset($jkp['delete']) && $jkp['action'] == "delete") {
$lockuser = $jkp['jak_delock_all'];
$useridarray = explode(',', JAK_SUPERADMIN);
for ($i = 0; $i < count($lockuser); $i++) {
$locked = $lockuser[$i];
// Get the userid / access token
$uidacc = explode(":#:", $locked);
if (!in_array($uidacc[0], $useridarray)) {
$query = $jakdb->delete($jaktable, ["id" => $uidacc[0]]);
// Delete Avatar and folder
$targetPath = APP_PATH.JAK_FILES_DIRECTORY.'/'.$uidacc[0].'/';
$removedouble = str_replace("//","/",$targetPath);
foreach(glob($removedouble.'*.*') as $jak_unlink) {
// Delete the files
@unlink($jak_unlink);
}
@rmdir($targetPath);
}
}
if ($query) {
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect($_SESSION['LCRedirect']);
}
$_SESSION["infomsg"] = $jkl['i1'];
jak_redirect($_SESSION['LCRedirect']);
}
}
$_SESSION["infomsg"] = $jkl['i'];
jak_redirect($_SESSION['LCRedirect']);
}
if (jak_get_access("usrmanage", $jakuser->getVar("permissions"), JAK_MAIN_OP)) {
$JAK_USER_ALL = jak_get_user_all($jaktable, $opcacheid, "meandsibling");
// Let's check if we can add more users
$totalAll = count($JAK_USER_ALL);
if ($totalavops > $totalAll) $addmuser = true;
} else {
$JAK_USER_ALL = jak_get_user_all($jaktable, JAK_USERID, false);
}
// Title and Description
$SECTION_TITLE = $jkl["hd5"];
$SECTION_DESC = "";
// Include the javascript file for results
$js_file_footer = 'js_user.php';
// Call the template
$template = 'user.php';
}
?>