getVar("permissions"), JAK_MAIN_OP) && !is_numeric($_GET['uid'])) die("There is no such thing!"); $useronline = ''; $useronlinemap = array(); $userocount = 0; if (isset($_GET['uonline']) && $_GET['uonline']) { // 5 Minutes ago $mino = date('Y-m-d H:i:s',$currentime - 5 * 60); // Now only get the department for the user if (isset($_SESSION['usr_department']) && is_numeric($_SESSION['usr_department']) && $_SESSION['usr_department'] != 0) { $result = $jakdb->select("buttonstats", ["[>]sessions" => ["session" => "session"]], ["buttonstats.id", "buttonstats.referrer", "buttonstats.firstreferrer", "buttonstats.agent", "buttonstats.hits", "buttonstats.ip", "buttonstats.country", "buttonstats.countrycode", "buttonstats.latitude", "buttonstats.longitude", "buttonstats.lasttime", "buttonstats.time", "buttonstats.readtime", "sessions.initiated", "sessions.ended"], ["AND" => ["buttonstats.opid" => $opcacheid, "buttonstats.singleopid" => [0,$_GET['uid']], "buttonstats.depid" => [0,$_SESSION['usr_department']], "buttonstats.lasttime[>]" => $mino], "GROUP" => "buttonstats.session", "ORDER" => ["buttonstats.lasttime" => "DESC"], "LIMIT" => 50]); } elseif (isset($_SESSION['usr_department']) && $_SESSION['usr_department'] == 0) { $result = $jakdb->select("buttonstats", ["[>]sessions" => ["session" => "session"]], ["buttonstats.id", "buttonstats.referrer", "buttonstats.firstreferrer", "buttonstats.agent", "buttonstats.hits", "buttonstats.ip", "buttonstats.country", "buttonstats.countrycode", "buttonstats.latitude", "buttonstats.longitude", "buttonstats.lasttime", "buttonstats.time", "buttonstats.readtime", "sessions.initiated", "sessions.ended"], ["AND" => ["buttonstats.opid" => $opcacheid, "buttonstats.singleopid" => [0,$_GET['uid']], "#buttonstats.lasttime[>]" => $mino], "GROUP" => "buttonstats.session", "ORDER" => ["buttonstats.lasttime" => "DESC"], "LIMIT" => 50]); } elseif (isset($_SESSION['usr_department'])) { $result = $jakdb->select("buttonstats", ["[>]sessions" => ["session" => "session"]], ["buttonstats.id", "buttonstats.referrer", "buttonstats.firstreferrer", "buttonstats.agent", "buttonstats.hits", "buttonstats.ip", "buttonstats.country", "buttonstats.countrycode", "buttonstats.latitude", "buttonstats.longitude", "buttonstats.lasttime", "buttonstats.time", "buttonstats.readtime", "sessions.initiated", "sessions.ended"], ["AND" => ["buttonstats.opid" => $opcacheid, "buttonstats.singleopid" => [0,$_GET['uid']], "buttonstats.depid" => explode(",",$_SESSION['usr_department'].',0'), "buttonstats.lasttime[>]" => $mino], "GROUP" => "buttonstats.session", "ORDER" => ["buttonstats.lasttime" => "DESC"], "LIMIT" => 50]); } if (isset($result) && !empty($result)) { $useronline = '
'; foreach ($result as $row) { // Convert time to minutes and hours $row['lasttime'] = JAK_base::jakTimesince($row['lasttime'], JAK_DATEFORMAT, JAK_TIMEFORMAT); $row['time'] = JAK_base::jakTimesince($row['time'], JAK_DATEFORMAT, JAK_TIMEFORMAT); $uclass = ''; $button = ''; if ($row['readtime'] == 1) $uclass = ' class="table-warning"'; if ($row['readtime'] == 2) $uclass = ' class="table-success"'; if ($row['readtime'] == 3) $uclass = ' class="table-danger"'; if ($row['readtime'] >= 2) $button = ''; if ($row['initiated'] && $row['ended'] == 0) $button = ''; $useronline .= ''; // Get the map thing if (JAK_SHOW_IPS && $row['latitude']) { $popupd = '
'.$row['country'].'
'.$jkl["g169"].': '.$row['referrer'].'
'; $useronlinemap[] = array('id' => 'm_'.$row['id'], 'lat' => $row['latitude'], 'lng' => $row['longitude'], 'popup' => $popupd); } $userocount++; } $useronline .= '
'.$jkl["g224"].''.$jkl["g169"].''.$jkl["g171"].''.$jkl["g172"].''.$jkl["g11"].''.$jkl["g173"].''.$jkl["g174"].''.$row['country'].''.$jkl["g169"].': '.$row['referrer'].'
'.$jkl["g170"].': '.$row['firstreferrer'].'
'.$row['agent'].''.$row['hits'].''.$row['ip'].''.$row['time'].''.$row['lasttime'].''.$button.'
'; } } // We check if we have access to the operator chat and the operator list $oponline = false; $countop = 0; $openop = ""; $newopmsg = "default"; if (isset($_GET['olist']) && $_GET['olist']) { $resop = $jakdb->select("user", ["id", "username", "name", "operatorchat"], ["AND" => ["OR" => ["opid" => $opcacheid, "id" => $opcacheid], "available" => 1, "id[!]" => $_GET['uid']], "LIMIT" => 20]); if (isset($resop) && !empty($resop)) { $oponline = ''; } } // Reset vars $transfer_msg = $jsmsg = $newclient = $soundjs = $cname = $newmsg = $newtitle = $soundmsgjs = ''; $newConv = $transferid = $sendalert = 0; $loadClients = false; $convid = $answers = $typing = array(); $resnew = $jakdb->select("checkstatus", ["convid", "depid", "operatorid", "operator", "newo", "transferoid", "transferid", "typec", "alert", "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'] && (($currentime - $row['statusc']) > JAK_CLIENT_LEFT)) { $jakdb->update("sessions", ["status" => 0, "ended" => $currentime], ["id" => $row['convid']]); $jakdb->update("checkstatus", ["hide" => 1], ["convid" => $row['convid']]); $cname = $jakdb->get("sessions", "name", ["id" => $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; } // The client is expired if ($row['statusc'] && (($currentime - $row['statusc']) > JAK_CLIENT_EXPIRED)) { $jakdb->update("sessions", ["status" => 0, "ended" => $currentime], ["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'] == $_GET['uid']) { $trow = $jakdb->get("transfer", ["fromname", "message"], ["AND" => ["tooid" => $_GET['uid'], "convid" => $row['convid'], "used" => 0]]); if (isset($trow) && !empty($trow)) { // Display underneath the button $transfer_msg = '

'.sprintf($jkl['g110'], $trow["fromname"]).'

'.$trow["message"].'

'; $transferid = $row['transferid']; $jsmsg = sprintf($jkl['g110'], $trow["fromname"]); $soundjs = JAK_RING_TONE; } } // Only load if we are in the correct department if (isset($_SESSION['usr_department']) && ($_SESSION['usr_department'] == 0 || $row["depid"] == $_SESSION['usr_department'] || in_array($row["depid"], explode(",", $_SESSION['usr_department'])) || $row["operatorid"] == $_GET['uid'])) { // check for new conversations if ($row['operatorid'] == 0 || ($row['operatorid'] == $_GET['uid'] && empty($row['operator']))) { $newConv = 1; if ($row["alert"] == 0) { $jakdb->update("checkstatus", ["alert" => 1], ["convid" => $row['convid']]); $sendalert = 1; } $newclient = $jkl['g69']; $soundjs = JAK_RING_TONE; if ($row['typec']) $typing[] = $row['convid']; $convid[] = $row["convid"]; $loadClients = true; } if ($row['operatorid'] == $_GET['uid'] && !empty($row['operator'])) { $jakdb->update("checkstatus", ["statuso" => $currentime], ["convid" => $row['convid']]); if ($row['typec']) $typing[] = $row['convid']; $convid[] = $row["convid"]; $loadClients = true; } if ($row['operatorid'] == $_GET['uid'] && $row['newo']) { $msginfo = $jakdb->get("transcript", ["name", "message"], ["id" => $row['newo']]); $newConv = 2; $cname = $msginfo["name"]; $newmsg = $msginfo["message"]; $newtitle = $jkl['g70']; $soundmsgjs = JAK_MSG_TONE; $answers[] = $row['convid']; if ($row['typec']) $typing[] = $row['convid']; $convid[] = $row["convid"]; $loadClients = true; } } } } // Reset convlist $convlist = ''; // Now let's get the conversation list $new = $updated = $current = array(); $count = 0; // Only go for it if we want to if ($loadClients) { // Check if there is a new client, message or a transfer is awaiting for approval. $resconv = $jakdb->select("sessions", ["[>]buttonstats" => ["session" => "session"]], ["sessions.id", "sessions.name", "sessions.operatorname", "sessions.countrycode", "sessions.status", "sessions.ended", "buttonstats.referrer"], ["sessions.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]["convid"] = $row['id']; $new[$count]["countrycode"] = $row['countrycode']; $new[$count]["referrer"] = $row['referrer']; $new[$count]["typing"] = false; if (!empty($typing) && in_array($row['id'], $typing)) $new[$count]["typing"] = true; } elseif (!empty($answers) && $row['operatorname'] && in_array($row['id'], $answers)) { $updated[$count]["name"] = $row['name']; $updated[$count]["convid"] = $row['id']; $updated[$count]["countrycode"] = $row['countrycode']; $updated[$count]["referrer"] = $row['referrer']; $updated[$count]["typing"] = false; if (!empty($typing) && in_array($row['id'], $typing)) $updated[$count]["typing"] = true; } else { $current[$count]["name"] = $row['name']; $current[$count]["convid"] = $row['id']; $current[$count]["countrycode"] = $row['countrycode']; $current[$count]["referrer"] = $row['referrer']; $current[$count]["typing"] = false; if (!empty($typing) && in_array($row['id'], $typing)) $current[$count]["typing"] = true; } } if (!$row['status']) { if ((($currentime - $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); sort($new); sort($updated); sort($current); $newTotal = count($new); $updatedTotal = count($updated); $currentTotal = count($current); for($i = 0; $i < $newTotal; $i ++ ) { $convlist .= ''.(isset($new[$i]['countrycode']) && !empty($new[$i]['countrycode'] && $new[$i]['countrycode'] != 'xx') ? ' ' : '').$new[$i]["name"].'
'.$new[$i]["referrer"].' fiber_new
'; } for($i = 0; $i < $updatedTotal; $i ++ ) { $convlist .= ''.(isset($updated[$i]['countrycode']) && !empty($updated[$i]['countrycode'] && $updated[$i]['countrycode'] != 'xx') ? ' ' : '').$updated[$i]["name"].'
'.$updated[$i]["referrer"].' ...
'; } for($i = 0; $i < $currentTotal; $i ++ ) { $convlist .= ' '.(isset($current[$i]['countrycode']) && !empty($current[$i]['countrycode'] && $current[$i]['countrycode'] != 'xx') ? ' ' : '').$current[$i]["name"].'
'.$current[$i]["referrer"].' ...
'; } } } // Is the site we are on active or already expired $activeconv = false; if (is_array($convid) && in_array($_GET['activconv'], $convid)) $activeconv = true; // Let us check the live preview file $prevmsgonly = ""; $prevtxt = false; if (isset($_GET['activconv']) && is_numeric($_GET['activconv']) && $activeconv) { // Check the file from the cache directory $livepreviewfile = APP_PATH.JAK_CACHE_DIRECTORY.'/livepreview'.$_GET['activconv'].'.txt'; if (file_exists($livepreviewfile)) { $prev = $jakdb->get("sessions", ["name", "usr_avatar", "department"], ["id" => $_GET['activconv']]); // Get the absolute url for the image $ava_url = str_replace(JAK_OPERATOR_LOC.'/ajax/', '', BASE_URL); $prevmsg = file_get_contents($livepreviewfile); // We convert the br $prevmsg = nl2br($prevmsg, false); $prevtxt = '
live preview

'.$prev['name'].' '.JAK_base::jakTimesince($currentime, "", JAK_TIMEFORMAT).'

'.stripcslashes($prevmsg).'

'; $prevmsgonly = stripcslashes($prevmsg); } } // Now get the new tickets that are not solved yet. $tcount = 0; $sup_tickets = array(); $utickets = ""; if (jak_get_access("support", $jakuser->getVar("permissions"), JAK_MAIN_OP)) { // Now only get the department for the user if (is_numeric($jakuser->getVar("support_dep")) && $jakuser->getVar("support_dep") != 0) { $sup_tickets = $jakdb->select("support_tickets", ["[>]support_departments" => ["depid" => "id"]], ["support_tickets.id", "support_tickets.subject", "support_tickets.updated"], ["AND" => ["OR" => ["support_tickets.operatorid" => $jakuser->getVar("id"), "support_tickets.depid" => $jakuser->getVar("support_dep")], "support_tickets.opid" => $opcacheid, "support_tickets.status" => 1], "ORDER" => ["support_tickets.updated" => "DESC"], "LIMIT" => 10]); } elseif (!((boolean)$jakuser->getVar("support_dep")) && $jakuser->getVar("support_dep") != 0) { $sup_tickets = $jakdb->select("support_tickets", ["[>]support_departments" => ["depid" => "id"]], ["support_tickets.id", "support_tickets.subject", "support_tickets.updated"], ["AND" => ["OR" => ["support_tickets.operatorid" => $jakuser->getVar("id"), "support_tickets.depid" => [$jakuser->getVar("support_dep")]], "support_tickets.opid" => $opcacheid, "support_tickets.status" => 1], "ORDER" => ["support_tickets.updated" => "DESC"], "LIMIT" => 10]); } else { $sup_tickets = $jakdb->select("support_tickets", ["[>]support_departments" => ["depid" => "id"]], ["support_tickets.id", "support_tickets.subject", "support_tickets.updated"], ["AND" => ["support_tickets.opid" => $opcacheid, "support_tickets.status" => 1], "ORDER" => ["support_tickets.updated" => "DESC"], "LIMIT" => 10]); } if (isset($sup_tickets) && !empty($sup_tickets)) { foreach ($sup_tickets as $ti) { $utickets .= ''.$ti["subject"].' '.JAK_base::jakTimesince($ti["updated"], JAK_DATEFORMAT, JAK_TIMEFORMAT).''; $tcount = $tcount + 1; } } } die(json_encode(array("useronline" => $useronline, "useronlinemap" => $useronlinemap, "totalonline" => $userocount, "nouseronline" => $jkl['i3'], "oponline" => $oponline, 'newc' => $newConv, 'tid' => $transferid, 'tmsg' => $transfer_msg, 'jsmsg' => $jsmsg, 'newclient' => $newclient, 'soundjs' => $soundjs, 'soundalert' => $sendalert, 'cname' => $cname, 'newmsg' => $newmsg, 'newtitle' => $newtitle, 'soundmsgjs' => $soundmsgjs, "conversation" => $convlist, "tickets" => $utickets, "noconv" => $jkl['g79'], 'totalchats' => $count, 'totaltickets' => $tcount, 'totalops' => $countop, 'previewmsg' => $prevtxt, 'prevmsgonly' => $prevmsgonly))); ?>