mirror of
https://github.com/Mibew/design.git
synced 2025-01-22 18:10:33 +03:00
Replace database functions with Database class methods
This commit is contained in:
parent
12883cfbe2
commit
3e4163cbfe
@ -22,13 +22,11 @@ require_once('libs/groups.php');
|
||||
|
||||
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "";
|
||||
if($referer && isset($_SESSION['threadid'])) {
|
||||
$link = connect();
|
||||
$thread = thread_by_id_($_SESSION['threadid'], $link);
|
||||
$thread = thread_by_id($_SESSION['threadid']);
|
||||
if ($thread && $thread['istate'] != $state_closed) {
|
||||
$msg = getstring2_("chat.client.visited.page", array($referer), $thread['locale']);
|
||||
post_message_($thread['threadid'], $kind_for_agent,$msg,$link);
|
||||
post_message_($thread['threadid'], $kind_for_agent,$msg);
|
||||
}
|
||||
close_connection($link);
|
||||
}
|
||||
|
||||
$image = verifyparam(isset($_GET['image']) ? "image" : "i", "/^\w+$/", "webim");
|
||||
|
@ -94,50 +94,46 @@ if( !isset($_GET['token']) || !isset($_GET['thread']) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
$link = connect();
|
||||
$invitation_state = invitation_state($_SESSION['visitorid'], $link);
|
||||
$invitation_state = invitation_state($_SESSION['visitorid']);
|
||||
$visitor_is_invited = $settings['enabletracking'] && $invitation_state['invited'] && !$invitation_state['threadid'];
|
||||
if($settings['enablepresurvey'] == '1' && !(isset($_POST['survey']) && $_POST['survey'] == 'on') && !$visitor_is_invited) {
|
||||
$page = array();
|
||||
setup_logo($group);
|
||||
setup_survey($visitor['name'], $email, $groupid, $info, $referrer);
|
||||
expand("styles/dialogs", getchatstyle(), "survey.tpl");
|
||||
close_connection($link);
|
||||
exit;
|
||||
}
|
||||
|
||||
$remoteHost = get_remote_host();
|
||||
$userbrowser = $_SERVER['HTTP_USER_AGENT'];
|
||||
|
||||
if(!check_connections_from_remote($remoteHost, $link)) {
|
||||
close_connection($link);
|
||||
if(!check_connections_from_remote($remoteHost)) {
|
||||
die("number of connections from your IP is exceeded, try again later");
|
||||
}
|
||||
$thread = create_thread($groupid,$visitor['name'], $remoteHost, $referrer,$current_locale,$visitor['id'], $userbrowser,$state_loading,$link);
|
||||
$thread = create_thread($groupid,$visitor['name'], $remoteHost, $referrer,$current_locale,$visitor['id'], $userbrowser,$state_loading);
|
||||
$_SESSION['threadid'] = $thread['threadid'];
|
||||
|
||||
$operator = invitation_accept($_SESSION['visitorid'], $thread['threadid'], $link);
|
||||
$operator = invitation_accept($_SESSION['visitorid'], $thread['threadid']);
|
||||
if ($operator) {
|
||||
$operator = operator_by_id_($operator, $link);
|
||||
$operator = operator_by_id($operator);
|
||||
$operatorName = ($current_locale == $home_locale) ? $operator['vclocalename'] : $operator['vccommonname'];
|
||||
post_message_($thread['threadid'], $kind_for_agent, getstring2('chat.visitor.invitation.accepted', array($operatorName)), $link);
|
||||
post_message_($thread['threadid'], $kind_for_agent, getstring2('chat.visitor.invitation.accepted', array($operatorName)));
|
||||
}
|
||||
|
||||
if( $referrer ) {
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.came.from',array($referrer)),$link);
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.came.from',array($referrer)));
|
||||
}
|
||||
post_message_($thread['threadid'],$kind_info,getstring('chat.wait'),$link);
|
||||
post_message_($thread['threadid'],$kind_info,getstring('chat.wait'));
|
||||
if($email) {
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.email',array($email)),$link);
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.email',array($email)));
|
||||
}
|
||||
if($info) {
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.info',array($info)),$link);
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.info',array($info)));
|
||||
}
|
||||
if($firstmessage) {
|
||||
$postedid = post_message_($thread['threadid'],$kind_user,$firstmessage,$link,$visitor['name']);
|
||||
commit_thread( $thread['threadid'], array('shownmessageid' => $postedid), $link);
|
||||
$postedid = post_message_($thread['threadid'],$kind_user,$firstmessage,$visitor['name']);
|
||||
commit_thread( $thread['threadid'], array('shownmessageid' => $postedid));
|
||||
}
|
||||
close_connection($link);
|
||||
}
|
||||
$threadid = $thread['threadid'];
|
||||
$token = $thread['ltoken'];
|
||||
|
@ -231,9 +231,12 @@ function create_table($id, $link)
|
||||
mysql_query($query, $link) or show_install_err(' Query failed: ' . mysql_error($link));
|
||||
|
||||
if ($id == "${mysqlprefix}chatoperator") {
|
||||
create_operator_("admin", "", "", "Administrator", "Administrator", "", $link);
|
||||
create_operator("admin", "", "", "Administrator", "Administrator", "");
|
||||
} else if ($id == "${mysqlprefix}chatrevision") {
|
||||
perform_query("INSERT INTO ${mysqlprefix}chatrevision VALUES (1)", $link);
|
||||
$result = mysql_query("INSERT INTO ${mysqlprefix}chatrevision VALUES (1)", $link);
|
||||
if (! $result) {
|
||||
die(' Query failed: ' . mysql_error($link));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,19 +30,17 @@ function store_message($name, $email, $info, $message,$groupid,$referrer) {
|
||||
$remoteHost = get_remote_host();
|
||||
$userbrowser = $_SERVER['HTTP_USER_AGENT'];
|
||||
$visitor = visitor_from_request();
|
||||
$link = connect();
|
||||
$thread = create_thread($groupid,$name,$remoteHost,$referrer,$current_locale,$visitor['id'], $userbrowser,$state_left,$link);
|
||||
$thread = create_thread($groupid,$name,$remoteHost,$referrer,$current_locale,$visitor['id'], $userbrowser,$state_left);
|
||||
if( $referrer ) {
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.came.from',array($referrer)),$link);
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.came.from',array($referrer)));
|
||||
}
|
||||
if($email) {
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.email',array($email)),$link);
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.email',array($email)));
|
||||
}
|
||||
if($info) {
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.info',array($info)),$link);
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.info',array($info)));
|
||||
}
|
||||
post_message_($thread['threadid'],$kind_user,$message,$link,$name);
|
||||
close_connection($link);
|
||||
post_message_($thread['threadid'],$kind_user,$message,$name);
|
||||
}
|
||||
|
||||
$groupid = "";
|
||||
@ -121,9 +119,7 @@ if (empty($inbox_mail)) {
|
||||
}
|
||||
|
||||
if($inbox_mail) {
|
||||
$link = connect();
|
||||
webim_mail($inbox_mail, $email, $subject, $body, $link);
|
||||
close_connection($link);
|
||||
webim_mail($inbox_mail, $email, $subject, $body);
|
||||
}
|
||||
|
||||
setup_logo($group);
|
||||
|
@ -17,47 +17,54 @@
|
||||
|
||||
function load_canned_messages($locale, $groupid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$query = "select id, vctitle, vcvalue from ${mysqlprefix}chatresponses " .
|
||||
"where locale = '" . $locale . "' AND (" .
|
||||
($groupid
|
||||
? "groupid = $groupid"
|
||||
: "groupid is NULL OR groupid = 0") .
|
||||
") order by vcvalue";
|
||||
$result = select_multi_assoc($query, $link);
|
||||
close_connection($link);
|
||||
return $result;
|
||||
$db = Database::getInstance();
|
||||
$values = array(':locale' => $locale);
|
||||
if ($groupid) {
|
||||
$values[':groupid'] = $groupid;
|
||||
}
|
||||
return $db->query(
|
||||
"select id, vctitle, vcvalue from {chatresponses} " .
|
||||
"where locale = :locale AND (" .
|
||||
($groupid ? "groupid = :groupid" : "groupid is NULL OR groupid = 0") .
|
||||
") order by vcvalue",
|
||||
$values,
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
}
|
||||
|
||||
function load_canned_message($key)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$result = select_one_row("select vctitle, vcvalue from ${mysqlprefix}chatresponses where id = $key", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$result = $db->query(
|
||||
"select vctitle, vcvalue from {chatresponses} where id = ?",
|
||||
array($key),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
return $result ? $result : null;
|
||||
}
|
||||
|
||||
function save_canned_message($key, $title, $message)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
perform_query("update ${mysqlprefix}chatresponses set vcvalue = '" . db_escape_string($message, $link) . "', " .
|
||||
"vctitle = '" . db_escape_string($title, $link) . "' " .
|
||||
"where id = $key", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatresponses} set vcvalue = ?, vctitle = ? where id = ?",
|
||||
array($message, $title, $key)
|
||||
);
|
||||
}
|
||||
|
||||
function add_canned_message($locale, $groupid, $title, $message)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
perform_query("insert into ${mysqlprefix}chatresponses (locale,groupid,vctitle,vcvalue) values ('$locale'," .
|
||||
($groupid ? "$groupid, " : "null, ") .
|
||||
"'" . db_escape_string($title, $link) . "', " .
|
||||
"'" . db_escape_string($message, $link) . "')", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"insert into {chatresponses} (locale,groupid,vctitle,vcvalue) " .
|
||||
"values (?, ?, ?, ?)",
|
||||
array(
|
||||
$locale,
|
||||
($groupid ? $groupid : "null"),
|
||||
$title,
|
||||
$message
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
?>
|
@ -50,36 +50,40 @@ function next_token()
|
||||
return rand(99999, 99999999);
|
||||
}
|
||||
|
||||
function next_revision($link)
|
||||
function next_revision()
|
||||
{
|
||||
global $mysqlprefix;
|
||||
perform_query("update ${mysqlprefix}chatrevision set id=LAST_INSERT_ID(id+1)", $link);
|
||||
$val = db_insert_id($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query("update {chatrevision} set id=LAST_INSERT_ID(id+1)");
|
||||
$val = $db->insertedId();
|
||||
return $val;
|
||||
}
|
||||
|
||||
function post_message_($threadid, $kind, $message, $link, $from = null, $utime = null, $opid = null)
|
||||
/**
|
||||
* @todo Think about post_message_ and post_message diffrence
|
||||
*/
|
||||
function post_message_($threadid, $kind, $message, $from = null, $utime = null, $opid = null)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$query = sprintf(
|
||||
"insert into ${mysqlprefix}chatmessage (threadid,ikind,tmessage,tname,agentId,dtmcreated) values (%s, %s,'%s',%s,%s,%s)",
|
||||
$db = Database::getInstance();
|
||||
$query = "insert into {chatmessage} " .
|
||||
"(threadid,ikind,tmessage,tname,agentId,dtmcreated) " .
|
||||
"values (?,?,?,?,?,".($utime?"FROM_UNIXTIME(?)":"CURRENT_TIMESTAMP").")";
|
||||
$values = array(
|
||||
$threadid,
|
||||
$kind,
|
||||
db_escape_string($message, $link),
|
||||
$from ? "'" . db_escape_string($from, $link) . "'" : "null",
|
||||
$opid ? $opid : "0",
|
||||
$utime ? "FROM_UNIXTIME($utime)" : "CURRENT_TIMESTAMP");
|
||||
|
||||
perform_query($query, $link);
|
||||
return db_insert_id($link);
|
||||
$message,
|
||||
($from ? $from : "null"),
|
||||
($opid ? $opid : 0)
|
||||
);
|
||||
if ($utime) {
|
||||
$values[] = $utime;
|
||||
}
|
||||
$db->query($query, $values);
|
||||
return $db->insertedId();
|
||||
}
|
||||
|
||||
function post_message($threadid, $kind, $message, $from = null, $agentid = null)
|
||||
{
|
||||
$link = connect();
|
||||
$id = post_message_($threadid, $kind, $message, $link, $from, null, $agentid);
|
||||
close_connection($link);
|
||||
return $id;
|
||||
return post_message_($threadid, $kind, $message, $from, null, $agentid);
|
||||
}
|
||||
|
||||
function prepare_html_message($text, $allow_formating)
|
||||
@ -127,16 +131,23 @@ function message_to_text($msg)
|
||||
|
||||
function get_messages($threadid, $meth, $isuser, &$lastid)
|
||||
{
|
||||
global $kind_for_agent, $kind_avatar, $webim_encoding, $mysqlprefix;
|
||||
$link = connect();
|
||||
global $kind_for_agent, $kind_avatar, $webim_encoding;
|
||||
$db = Database::getInstance();
|
||||
|
||||
$query = sprintf(
|
||||
"select messageid,ikind,unix_timestamp(dtmcreated) as created,tname,tmessage from ${mysqlprefix}chatmessage " .
|
||||
"where threadid = %s and messageid > %s %s order by messageid",
|
||||
$threadid, $lastid, $isuser ? "and ikind <> $kind_for_agent" : "");
|
||||
$msgs = $db->query(
|
||||
"select messageid,ikind,unix_timestamp(dtmcreated) as created,tname,tmessage from {chatmessage} " .
|
||||
"where threadid = :threadid and messageid > :lastid " .
|
||||
($isuser ? "and ikind <> {$kind_for_agent} " : "") .
|
||||
"order by messageid",
|
||||
array(
|
||||
':threadid' => $threadid,
|
||||
':lastid' => $lastid,
|
||||
),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
|
||||
);
|
||||
|
||||
$messages = array();
|
||||
$msgs = select_multi_assoc($query, $link);
|
||||
foreach ($msgs as $msg) {
|
||||
$message = "";
|
||||
if ($meth == 'xml') {
|
||||
@ -159,7 +170,6 @@ function get_messages($threadid, $meth, $isuser, &$lastid)
|
||||
}
|
||||
}
|
||||
|
||||
close_connection($link);
|
||||
return $messages;
|
||||
}
|
||||
|
||||
@ -355,15 +365,12 @@ function setup_groups_select($groupid, $markoffline)
|
||||
{
|
||||
global $settings;
|
||||
|
||||
$link = connect();
|
||||
$showgroups = ($groupid == '')?true:group_has_children($groupid, $link);
|
||||
$showgroups = ($groupid == '')?true:group_has_children($groupid);
|
||||
if (!$showgroups) {
|
||||
close_connection($link);
|
||||
return false;
|
||||
}
|
||||
|
||||
$allgroups = get_groups($link, false);
|
||||
close_connection($link);
|
||||
$allgroups = get_groups(false);
|
||||
|
||||
if (empty($allgroups)) {
|
||||
return false;
|
||||
@ -404,7 +411,7 @@ function setup_chatview_for_user($thread, $level)
|
||||
global $page, $webimroot, $settings;
|
||||
loadsettings();
|
||||
$page = array();
|
||||
if (! is_null($thread['groupid'])) {
|
||||
if (! empty($thread['groupid'])) {
|
||||
$group = group_by_id($thread['groupid']);
|
||||
$group = get_top_level_group($group);
|
||||
} else {
|
||||
@ -483,11 +490,9 @@ function setup_chatview_for_operator($thread, $operator)
|
||||
$page['historyParams'] = array("userid" => "" . $thread['userid']);
|
||||
$page['historyParamsLink'] = add_params($webimroot . "/operator/userhistory.php", $page['historyParams']);
|
||||
if ($settings['enabletracking']) {
|
||||
$link = connect();
|
||||
$visitor = track_get_visitor_by_threadid($thread['threadid'], $link);
|
||||
$visitor = track_get_visitor_by_threadid($thread['threadid']);
|
||||
$page['trackedParams'] = array("visitor" => "" . $visitor['visitorid']);
|
||||
$page['trackedParamsLink'] = add_params($webimroot . "/operator/tracked.php", $page['trackedParams']);
|
||||
close_connection($link);
|
||||
}
|
||||
$predefinedres = "";
|
||||
$canned_messages = load_canned_messages($thread['locale'], 0);
|
||||
@ -510,24 +515,29 @@ function setup_chatview_for_operator($thread, $operator)
|
||||
$page['frequency'] = $settings['updatefrequency_chat'];
|
||||
}
|
||||
|
||||
function update_thread_access($threadid, $params, $link)
|
||||
function update_thread_access($threadid, $params)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$db = Database::getInstance();
|
||||
$clause = "";
|
||||
$values = array();
|
||||
foreach ($params as $k => $v) {
|
||||
if (strlen($clause) > 0)
|
||||
$clause .= ", ";
|
||||
$clause .= $k . "=" . $v;
|
||||
$clause .= $k . "=?";
|
||||
$values[] = $v;
|
||||
}
|
||||
perform_query(
|
||||
"update ${mysqlprefix}chatthread set $clause " .
|
||||
"where threadid = $threadid", $link);
|
||||
$values[] = $threadid;
|
||||
|
||||
$db->query(
|
||||
"update {chatthread} set {$clause} where threadid = ?",
|
||||
$values
|
||||
);
|
||||
}
|
||||
|
||||
function ping_thread($thread, $isuser, $istyping)
|
||||
{
|
||||
global $kind_for_agent, $state_queue, $state_loading, $state_chatting, $state_waiting, $kind_conn, $connection_timeout;
|
||||
$link = connect();
|
||||
|
||||
$params = array(($isuser ? "lastpinguser" : "lastpingagent") => "CURRENT_TIMESTAMP",
|
||||
($isuser ? "userTyping" : "agentTyping") => ($istyping ? "1" : "0"));
|
||||
|
||||
@ -536,8 +546,7 @@ function ping_thread($thread, $isuser, $istyping)
|
||||
|
||||
if ($thread['istate'] == $state_loading && $isuser) {
|
||||
$params['istate'] = $state_queue;
|
||||
commit_thread($thread['threadid'], $params, $link);
|
||||
close_connection($link);
|
||||
commit_thread($thread['threadid'], $params);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -545,161 +554,176 @@ function ping_thread($thread, $isuser, $istyping)
|
||||
$params[$isuser ? "lastpingagent" : "lastpinguser"] = "0";
|
||||
if (!$isuser) {
|
||||
$message_to_post = getstring_("chat.status.user.dead", $thread['locale']);
|
||||
post_message_($thread['threadid'], $kind_for_agent, $message_to_post, $link, null, $lastping + $connection_timeout);
|
||||
post_message_($thread['threadid'], $kind_for_agent, $message_to_post, null, $lastping + $connection_timeout);
|
||||
} else if ($thread['istate'] == $state_chatting) {
|
||||
|
||||
$message_to_post = getstring_("chat.status.operator.dead", $thread['locale']);
|
||||
post_message_($thread['threadid'], $kind_conn, $message_to_post, $link, null, $lastping + $connection_timeout);
|
||||
post_message_($thread['threadid'], $kind_conn, $message_to_post, null, $lastping + $connection_timeout);
|
||||
$params['istate'] = $state_waiting;
|
||||
$params['nextagent'] = 0;
|
||||
commit_thread($thread['threadid'], $params, $link);
|
||||
close_connection($link);
|
||||
commit_thread($thread['threadid'], $params);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
update_thread_access($thread['threadid'], $params, $link);
|
||||
close_connection($link);
|
||||
update_thread_access($thread['threadid'], $params);
|
||||
}
|
||||
|
||||
function commit_thread($threadid, $params, $link)
|
||||
function commit_thread($threadid, $params)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$query = "update ${mysqlprefix}chatthread t set lrevision = " . next_revision($link) . ", dtmmodified = CURRENT_TIMESTAMP";
|
||||
foreach ($params as $k => $v) {
|
||||
$query .= ", " . $k . "=" . $v;
|
||||
}
|
||||
$query .= " where threadid = $threadid";
|
||||
$db = Database::getInstance();
|
||||
|
||||
perform_query($query, $link);
|
||||
$query = "update {chatthread} t " .
|
||||
"set lrevision = ?, dtmmodified = CURRENT_TIMESTAMP";
|
||||
$values = array(next_revision());
|
||||
foreach ($params as $k => $v) {
|
||||
$query .= ", " . $k . "=?";
|
||||
$values[] = $v;
|
||||
}
|
||||
$query .= " where threadid = ?";
|
||||
$values[] = $threadid;
|
||||
|
||||
$db->query($query, $values);
|
||||
}
|
||||
|
||||
function rename_user($thread, $newname)
|
||||
{
|
||||
global $kind_events;
|
||||
|
||||
$link = connect();
|
||||
commit_thread($thread['threadid'], array('userName' => "'" . db_escape_string($newname, $link) . "'"), $link);
|
||||
commit_thread($thread['threadid'], array('userName' => $newname));
|
||||
|
||||
if ($thread['userName'] != $newname) {
|
||||
post_message_($thread['threadid'], $kind_events,
|
||||
getstring2_("chat.status.user.changedname", array($thread['userName'], $newname), $thread['locale']), $link);
|
||||
getstring2_("chat.status.user.changedname", array($thread['userName'], $newname), $thread['locale']));
|
||||
}
|
||||
close_connection($link);
|
||||
}
|
||||
|
||||
function close_thread($thread, $isuser)
|
||||
{
|
||||
global $state_closed, $kind_events, $mysqlprefix;
|
||||
global $state_closed, $kind_events;
|
||||
|
||||
$link = connect();
|
||||
if ($thread['istate'] != $state_closed) {
|
||||
commit_thread($thread['threadid'], array('istate' => $state_closed,
|
||||
'messageCount' => "(SELECT COUNT(*) FROM ${mysqlprefix}chatmessage WHERE ${mysqlprefix}chatmessage.threadid = t.threadid AND ikind = 1)"), $link);
|
||||
commit_thread(
|
||||
$thread['threadid'],
|
||||
array(
|
||||
'istate' => $state_closed,
|
||||
'messageCount' => "(SELECT COUNT(*) FROM {chatmessage} WHERE {chatmessage}.threadid = t.threadid AND ikind = 1)"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$message = $isuser ? getstring2_("chat.status.user.left", array($thread['userName']), $thread['locale'])
|
||||
: getstring2_("chat.status.operator.left", array($thread['agentName']), $thread['locale']);
|
||||
post_message_($thread['threadid'], $kind_events, $message, $link);
|
||||
close_connection($link);
|
||||
post_message_($thread['threadid'], $kind_events, $message);
|
||||
}
|
||||
|
||||
function close_old_threads($link)
|
||||
function close_old_threads()
|
||||
{
|
||||
global $state_closed, $state_left, $state_chatting, $mysqlprefix, $settings;
|
||||
global $state_closed, $state_left, $state_chatting, $settings;
|
||||
if ($settings['thread_lifetime'] == 0) {
|
||||
return;
|
||||
}
|
||||
$next_revision = next_revision($link);
|
||||
$query = "update ${mysqlprefix}chatthread set lrevision = $next_revision, dtmmodified = CURRENT_TIMESTAMP, istate = $state_closed " .
|
||||
"where istate <> $state_closed and istate <> $state_left and lastpingagent <> 0 and lastpinguser <> 0 and " .
|
||||
"(ABS(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(lastpinguser)) > " . $settings['thread_lifetime'] . " and " .
|
||||
"ABS(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(lastpingagent)) > " . $settings['thread_lifetime'] . ")";
|
||||
|
||||
perform_query($query, $link);
|
||||
}
|
||||
$db = Database::getInstance();
|
||||
|
||||
function close_old_threads($link)
|
||||
{
|
||||
global $state_closed, $state_left, $state_chatting, $mysqlprefix, $settings;
|
||||
if ($settings['thread_lifetime'] == 0) {
|
||||
return;
|
||||
}
|
||||
$next_revision = next_revision($link);
|
||||
$query = "update ${mysqlprefix}chatthread set lrevision = $next_revision, dtmmodified = CURRENT_TIMESTAMP, istate = $state_closed " .
|
||||
"where istate <> $state_closed and istate <> $state_left and lastpingagent <> 0 and lastpinguser <> 0 and " .
|
||||
"(ABS(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(lastpinguser)) > " . $settings['thread_lifetime'] . " and " .
|
||||
"ABS(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(lastpingagent)) > " . $settings['thread_lifetime'] . ")";
|
||||
$query = "update {chatthread} set lrevision = :next_revision, " .
|
||||
"dtmmodified = CURRENT_TIMESTAMP, istate = :state_closed " .
|
||||
"where istate <> :state_closed and istate <> :state_left " .
|
||||
"and lastpingagent <> 0 and lastpinguser <> 0 and " .
|
||||
"(ABS(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(lastpinguser)) > ".
|
||||
":thread_lifetime and " .
|
||||
"ABS(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(lastpingagent)) > ".
|
||||
":thread_lifetime)";
|
||||
|
||||
perform_query($query, $link);
|
||||
}
|
||||
|
||||
function thread_by_id_($id, $link)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
return select_one_row("select threadid,userName,agentName,agentId,lrevision,istate,ltoken,userTyping,agentTyping" .
|
||||
",unix_timestamp(dtmmodified) as modified, unix_timestamp(dtmcreated) as created, unix_timestamp(dtmchatstarted) as chatstarted" .
|
||||
",remote,referer,locale,unix_timestamp(lastpinguser) as lpuser,unix_timestamp(lastpingagent) as lpagent, unix_timestamp(CURRENT_TIMESTAMP) as current,nextagent,shownmessageid,userid,userAgent,groupid" .
|
||||
" from ${mysqlprefix}chatthread where threadid = " . $id, $link);
|
||||
}
|
||||
|
||||
function ban_for_addr_($addr, $link)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
return select_one_row("select banid,comment from ${mysqlprefix}chatban where unix_timestamp(dtmtill) > unix_timestamp(CURRENT_TIMESTAMP) AND address = '" . db_escape_string($addr, $link) . "'", $link);
|
||||
$db->query(
|
||||
$query,
|
||||
array(
|
||||
':next_revision' => next_revision(),
|
||||
':state_closed' => $state_closed,
|
||||
':state_left' => $state_left,
|
||||
':thread_lifetime' => $settings['thread_lifetime']
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function thread_by_id($id)
|
||||
{
|
||||
$link = connect();
|
||||
$thread = thread_by_id_($id, $link);
|
||||
close_connection($link);
|
||||
return $thread;
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select threadid,userName,agentName,agentId,lrevision,istate,ltoken,userTyping, " .
|
||||
"agentTyping,unix_timestamp(dtmmodified) as modified, " .
|
||||
"unix_timestamp(dtmcreated) as created, " .
|
||||
"unix_timestamp(dtmchatstarted) as chatstarted,remote,referer,locale," .
|
||||
"unix_timestamp(lastpinguser) as lpuser,unix_timestamp(lastpingagent) as lpagent," .
|
||||
"unix_timestamp(CURRENT_TIMESTAMP) as current,nextagent,shownmessageid,userid, " .
|
||||
"userAgent,groupid from {chatthread} where threadid = ?",
|
||||
array($id),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
}
|
||||
|
||||
function create_thread($groupid, $username, $remoteHost, $referer, $lang, $userid, $userbrowser, $initialState, $link)
|
||||
function ban_for_addr($addr)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$query = sprintf(
|
||||
"insert into ${mysqlprefix}chatthread (userName,userid,ltoken,remote,referer,lrevision,locale,userAgent,dtmcreated,dtmmodified,istate" . ($groupid ? ",groupid" : "") . ") values " .
|
||||
"('%s','%s',%s,'%s','%s',%s,'%s','%s',CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,$initialState" . ($groupid ? ",$groupid" : "") . ")",
|
||||
db_escape_string($username, $link),
|
||||
db_escape_string($userid, $link),
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select banid,comment from {chatban} " .
|
||||
"where unix_timestamp(dtmtill) > unix_timestamp(CURRENT_TIMESTAMP) AND address = ?",
|
||||
array($addr),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
}
|
||||
|
||||
function create_thread($groupid, $username, $remoteHost, $referer, $lang, $userid, $userbrowser, $initialState)
|
||||
{
|
||||
$db = Database::getInstance();
|
||||
|
||||
$query = "insert into {chatthread} (userName,userid,ltoken,remote,referer, " .
|
||||
"lrevision,locale,userAgent,dtmcreated,dtmmodified,istate" .
|
||||
($groupid ? ",groupid" : "") . ") values " .
|
||||
"(?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,?" .
|
||||
($groupid ? ", ?" : "") . ")";
|
||||
|
||||
$values = array(
|
||||
$username,
|
||||
$userid,
|
||||
next_token(),
|
||||
db_escape_string($remoteHost, $link),
|
||||
db_escape_string($referer, $link),
|
||||
next_revision($link),
|
||||
db_escape_string($lang, $link),
|
||||
db_escape_string($userbrowser, $link));
|
||||
$remoteHost,
|
||||
$referer,
|
||||
next_revision(),
|
||||
$lang,
|
||||
$userbrowser,
|
||||
$initialState
|
||||
);
|
||||
|
||||
perform_query($query, $link);
|
||||
$id = db_insert_id($link);
|
||||
if ($groupid) {
|
||||
$values[] = $groupid;
|
||||
}
|
||||
|
||||
$newthread = thread_by_id_($id, $link);
|
||||
$db->query($query, $values);
|
||||
$id = $db->insertedId();
|
||||
|
||||
$newthread = thread_by_id($id);
|
||||
return $newthread;
|
||||
}
|
||||
|
||||
function do_take_thread($threadid, $operatorId, $operatorName, $chatstart = false)
|
||||
{
|
||||
global $state_chatting;
|
||||
$link = connect();
|
||||
$params = array("istate" => $state_chatting,
|
||||
"nextagent" => 0,
|
||||
"agentId" => $operatorId,
|
||||
"agentName" => "'" . db_escape_string($operatorName, $link) . "'");
|
||||
"agentName" => $operatorName);
|
||||
if ($chatstart){
|
||||
$params['dtmchatstarted'] = "CURRENT_TIMESTAMP";
|
||||
}
|
||||
commit_thread($threadid, $params, $link);
|
||||
close_connection($link);
|
||||
commit_thread($threadid, $params);
|
||||
}
|
||||
|
||||
function reopen_thread($threadid)
|
||||
{
|
||||
global $state_queue, $state_loading, $state_waiting, $state_chatting, $state_closed, $state_left, $kind_events, $settings;
|
||||
$link = connect();
|
||||
|
||||
$thread = thread_by_id_($threadid, $link);
|
||||
$thread = thread_by_id($threadid);
|
||||
|
||||
if (!$thread)
|
||||
return FALSE;
|
||||
@ -712,12 +736,13 @@ function reopen_thread($threadid)
|
||||
return FALSE;
|
||||
|
||||
if ($thread['istate'] != $state_chatting && $thread['istate'] != $state_queue && $thread['istate'] != $state_loading) {
|
||||
commit_thread($threadid,
|
||||
array("istate" => $state_waiting, "nextagent" => 0), $link);
|
||||
commit_thread(
|
||||
$threadid,
|
||||
array("istate" => $state_waiting, "nextagent" => 0)
|
||||
);
|
||||
}
|
||||
|
||||
post_message_($thread['threadid'], $kind_events, getstring_("chat.status.user.reopenedthread", $thread['locale']), $link);
|
||||
close_connection($link);
|
||||
post_message_($thread['threadid'], $kind_events, getstring_("chat.status.user.reopenedthread", $thread['locale']));
|
||||
return $thread;
|
||||
}
|
||||
|
||||
@ -779,15 +804,21 @@ function check_for_reassign($thread, $operator)
|
||||
}
|
||||
}
|
||||
|
||||
function check_connections_from_remote($remote, $link)
|
||||
function check_connections_from_remote($remote)
|
||||
{
|
||||
global $settings, $state_closed, $state_left, $mysqlprefix;
|
||||
global $settings, $state_closed, $state_left;
|
||||
if ($settings['max_connections_from_one_host'] == 0) {
|
||||
return true;
|
||||
}
|
||||
$result = select_one_row(
|
||||
"select count(*) as opened from ${mysqlprefix}chatthread " .
|
||||
"where remote = '" . db_escape_string($remote, $link) . "' AND istate <> $state_closed AND istate <> $state_left", $link);
|
||||
|
||||
$db = Database::getInstance();
|
||||
$result = $db->query(
|
||||
"select count(*) as opened from {chatthread} " .
|
||||
"where remote = ? AND istate <> ? AND istate <> ?",
|
||||
array($remote, $state_closed, $state_left),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
|
||||
if ($result && isset($result['opened'])) {
|
||||
return $result['opened'] < $settings['max_connections_from_one_host'];
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ session_start();
|
||||
|
||||
require_once(dirname(__FILE__) . '/converter.php');
|
||||
require_once(dirname(__FILE__) . '/config.php');
|
||||
require_once(dirname(__FILE__) . '/database.php');
|
||||
|
||||
$version = '1.6.5';
|
||||
$jsver = "165";
|
||||
@ -350,111 +351,6 @@ function cutstring($string, $length = 75, $ellipsis = '')
|
||||
return $result;
|
||||
}
|
||||
|
||||
function connect()
|
||||
{
|
||||
global $mysqlhost, $mysqllogin, $mysqlpass, $mysqldb, $dbencoding, $force_charset_in_connection, $use_persistent_connection;
|
||||
if (!extension_loaded("mysql")) {
|
||||
die('Mysql extension is not loaded');
|
||||
}
|
||||
if ($use_persistent_connection) {
|
||||
$link = @mysql_pconnect($mysqlhost, $mysqllogin, $mysqlpass);
|
||||
}else{
|
||||
$link = @mysql_connect($mysqlhost, $mysqllogin, $mysqlpass);
|
||||
}
|
||||
if (! $link) {
|
||||
die('Could not connect: ' . mysql_error());
|
||||
}
|
||||
mysql_select_db($mysqldb, $link) or die('Could not select database');
|
||||
if ($force_charset_in_connection) {
|
||||
perform_query("SET NAMES '$dbencoding'", $link);
|
||||
}
|
||||
return $link;
|
||||
}
|
||||
|
||||
function close_connection($link)
|
||||
{
|
||||
global $use_persistent_connection;
|
||||
if (! $use_persistent_connection) {
|
||||
mysql_close($link);
|
||||
}
|
||||
}
|
||||
|
||||
function db_escape_string($string, $link = NULL)
|
||||
{
|
||||
if ( is_null($link) ) {
|
||||
return mysql_real_escape_string($string);
|
||||
}
|
||||
return mysql_real_escape_string($string, $link);
|
||||
}
|
||||
|
||||
function db_error($link)
|
||||
{
|
||||
return mysql_error($link);
|
||||
}
|
||||
|
||||
function db_insert_id($link)
|
||||
{
|
||||
return mysql_insert_id($link);
|
||||
}
|
||||
|
||||
function db_fetch_row($result)
|
||||
{
|
||||
return mysql_fetch_row($result);
|
||||
}
|
||||
|
||||
function db_fetch_assoc($result){
|
||||
return mysql_fetch_assoc($result);
|
||||
}
|
||||
|
||||
function perform_query($query, $link)
|
||||
{
|
||||
$result = mysql_query($query, $link);
|
||||
if (! $result) {
|
||||
die(' Query failed: ' . db_error($link));
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function db_free_result($result)
|
||||
{
|
||||
mysql_free_result($result);
|
||||
}
|
||||
|
||||
function select_one_row($query, $link)
|
||||
{
|
||||
$result = perform_query($query, $link);
|
||||
$line = db_fetch_assoc($result);
|
||||
db_free_result($result);
|
||||
return $line;
|
||||
}
|
||||
|
||||
function select_multi_assoc($query, $link)
|
||||
{
|
||||
$sqlresult = perform_query($query, $link);
|
||||
|
||||
$result = array();
|
||||
while ($row = db_fetch_assoc($sqlresult)) {
|
||||
$result[] = $row;
|
||||
}
|
||||
db_free_result($sqlresult);
|
||||
return $result;
|
||||
}
|
||||
|
||||
function db_build_select($fields, $table, $conditions, $orderandgroup)
|
||||
{
|
||||
$condition = count($conditions) > 0 ? " where " . implode(" and ", $conditions) : "";
|
||||
if ($orderandgroup) $orderandgroup = " " . $orderandgroup;
|
||||
return "select $fields from $table$condition$orderandgroup";
|
||||
}
|
||||
|
||||
function db_rows_count($table, $conditions, $countfields, $link)
|
||||
{
|
||||
$result = perform_query(db_build_select("count(" . ($countfields ? $countfields : "*") . ")", $table, $conditions, ""), $link);
|
||||
$line = db_fetch_row($result);
|
||||
db_free_result($result);
|
||||
return $line[0];
|
||||
}
|
||||
|
||||
function start_xml_output()
|
||||
{
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
@ -716,32 +612,25 @@ $settings = array(
|
||||
$settingsloaded = false;
|
||||
$settings_in_db = array();
|
||||
|
||||
function loadsettings_($link)
|
||||
function loadsettings()
|
||||
{
|
||||
global $settingsloaded, $settings_in_db, $settings, $mysqlprefix;
|
||||
global $settingsloaded, $settings_in_db, $settings;
|
||||
if ($settingsloaded) {
|
||||
return;
|
||||
}
|
||||
$settingsloaded = true;
|
||||
|
||||
$sqlresult = perform_query("select vckey,vcvalue from ${mysqlprefix}chatconfig", $link);
|
||||
|
||||
while ($row = db_fetch_assoc($sqlresult)) {
|
||||
$db = Database::getInstance();
|
||||
$rows = $db->query(
|
||||
"select vckey,vcvalue from {chatconfig}",
|
||||
NULL,
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
foreach ($rows as $row) {
|
||||
$name = $row['vckey'];
|
||||
$settings[$name] = $row['vcvalue'];
|
||||
$settings_in_db[$name] = true;
|
||||
}
|
||||
db_free_result($sqlresult);
|
||||
}
|
||||
|
||||
function loadsettings()
|
||||
{
|
||||
global $settingsloaded;
|
||||
if (!$settingsloaded) {
|
||||
$link = connect();
|
||||
loadsettings_($link);
|
||||
close_connection($link);
|
||||
}
|
||||
}
|
||||
|
||||
function getchatstyle()
|
||||
|
@ -65,9 +65,7 @@ function verifyparam_groupid($paramid)
|
||||
function get_groups_list()
|
||||
{
|
||||
$result = array();
|
||||
$link = connect();
|
||||
$allgroups = get_all_groups($link);
|
||||
close_connection($link);
|
||||
$allgroups = get_all_groups();
|
||||
$result[] = array('groupid' => '', 'vclocalname' => getlocal("page.gen_button.default_group"), 'level' => 0);
|
||||
foreach ($allgroups as $g) {
|
||||
$result[] = $g;
|
||||
|
@ -17,11 +17,12 @@
|
||||
|
||||
function group_by_id($id)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$group = select_one_row(
|
||||
"select * from ${mysqlprefix}chatgroup where groupid = $id", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$group = $db->query(
|
||||
"select * from {chatgroup} where groupid = ?",
|
||||
array($id),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
return $group;
|
||||
}
|
||||
|
||||
@ -47,12 +48,17 @@ function setup_group_settings_tabs($gid, $active)
|
||||
}
|
||||
}
|
||||
|
||||
function get_operator_groupslist($operatorid, $link)
|
||||
function get_operator_groupslist($operatorid)
|
||||
{
|
||||
global $settings, $mysqlprefix;
|
||||
global $settings;
|
||||
$db = Database::getInstance();
|
||||
if ($settings['enablegroups'] == '1') {
|
||||
$groupids = array(0);
|
||||
$allgroups = select_multi_assoc("select groupid from ${mysqlprefix}chatgroupoperator where operatorid = $operatorid order by groupid", $link);
|
||||
$allgroups = $db->query(
|
||||
"select groupid from {chatgroupoperator} where operatorid = ? order by groupid",
|
||||
array($operatorid),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
foreach ($allgroups as $g) {
|
||||
$groupids[] = $g['groupid'];
|
||||
}
|
||||
@ -64,10 +70,13 @@ function get_operator_groupslist($operatorid, $link)
|
||||
|
||||
function get_available_parent_groups($skipgroup)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$query = "select ${mysqlprefix}chatgroup.groupid as groupid, parent, vclocalname from ${mysqlprefix}chatgroup order by vclocalname";
|
||||
$groupslist = select_multi_assoc($query, $link);
|
||||
$db = Database::getInstance();
|
||||
$groupslist = $db->query(
|
||||
"select {chatgroup}.groupid as groupid, parent, vclocalname " .
|
||||
"from {chatgroup} order by vclocalname",
|
||||
NULL,
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
$result = array(array('groupid' => '', 'level' => '', 'vclocalname' => getlocal("form.field.groupparent.root")));
|
||||
|
||||
if ($skipgroup) {
|
||||
@ -77,15 +86,17 @@ function get_available_parent_groups($skipgroup)
|
||||
}
|
||||
|
||||
$result = array_merge($result, get_sorted_child_groups_($groupslist, $skipgroup, 0) );
|
||||
close_connection($link);
|
||||
return $result;
|
||||
}
|
||||
|
||||
function group_has_children($groupid, $link)
|
||||
function group_has_children($groupid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$children = select_one_row(sprintf("select COUNT(*) as count from ${mysqlprefix}chatgroup where parent = %u", $groupid),
|
||||
$link);
|
||||
$db = Database::getInstance();
|
||||
$children = $db->query(
|
||||
"select COUNT(*) as count from {chatgroup} where parent = ?",
|
||||
array($groupid),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
return ($children['count'] > 0);
|
||||
}
|
||||
|
||||
|
@ -15,11 +15,14 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
function invitation_state($visitorid, $link)
|
||||
function invitation_state($visitorid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$query = "select invited, threadid from ${mysqlprefix}chatsitevisitor where visitorid = '" . db_escape_string($visitorid) . "'";
|
||||
$result = select_one_row($query, $link);
|
||||
$db = Database::getInstance();
|
||||
$result = $db->query(
|
||||
"select invited, threadid from {chatsitevisitor} where visitorid = ?",
|
||||
array($visitorid),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
if (!$result) {
|
||||
$result['invited'] = 0;
|
||||
$result['threadid'] = 0;
|
||||
@ -27,46 +30,51 @@ function invitation_state($visitorid, $link)
|
||||
return $result;
|
||||
}
|
||||
|
||||
function invitation_invite($visitorid, $operatorid, $link)
|
||||
function invitation_invite($visitorid, $operatorid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
|
||||
if (!invitation_check($visitorid, $link)) {
|
||||
$query = "update ${mysqlprefix}chatsitevisitor set invited = 1, invitedby = '" . db_escape_string($operatorid) . "', invitationtime = now(), invitations = invitations + 1 where visitorid = '" . db_escape_string($visitorid) . "'";
|
||||
perform_query($query, $link);
|
||||
return invitation_check($visitorid, $link);
|
||||
}
|
||||
else {
|
||||
return FALSE;
|
||||
if (!invitation_check($visitorid)) {
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatsitevisitor} set invited = 1, invitedby = ?, " .
|
||||
"invitationtime = now(), invitations = invitations + 1 where visitorid = ?",
|
||||
array($operatorid, $visitorid)
|
||||
);
|
||||
return invitation_check($visitorid);
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
function invitation_check($visitorid, $link)
|
||||
function invitation_check($visitorid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
|
||||
$query = "select invitedby from ${mysqlprefix}chatsitevisitor where invited and visitorid = '" . db_escape_string($visitorid) . "'" .
|
||||
" and lasttime < invitationtime and threadid is null";
|
||||
$result = select_one_row($query, $link);
|
||||
|
||||
$db = Database::getInstance();
|
||||
$result = $db->query(
|
||||
"select invitedby from {chatsitevisitor} where invited and visitorid = ? " .
|
||||
" and lasttime < invitationtime and threadid is null",
|
||||
array($visitorid),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
return ($result && isset($result['invitedby']) && $result['invitedby']) ? $result['invitedby'] : FALSE;
|
||||
}
|
||||
|
||||
function invitation_accept($visitorid, $threadid, $link)
|
||||
function invitation_accept($visitorid, $threadid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatsitevisitor} set threadid = ?, chats = chats + 1 where visitorid = ?",
|
||||
array($threadid, $visitorid)
|
||||
);
|
||||
|
||||
$query = "update ${mysqlprefix}chatsitevisitor set threadid = " . $threadid . ", chats = chats + 1 where visitorid = " . db_escape_string($visitorid) . "";
|
||||
perform_query($query, $link);
|
||||
|
||||
$query = "select invitedby from ${mysqlprefix}chatsitevisitor where visitorid = '" . db_escape_string($visitorid) . "'";
|
||||
$result = select_one_row($query, $link);
|
||||
$result = $db->query(
|
||||
"select invitedby from {chatsitevisitor} where visitorid = ?",
|
||||
array($visitorid),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
|
||||
if ($result && isset($result['invitedby']) && $result['invitedby']) {
|
||||
return $result['invitedby'];
|
||||
}
|
||||
else {
|
||||
return FALSE;
|
||||
return $result['invitedby'];
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
function webim_mail($toaddr, $reply_to, $subject, $body, $link)
|
||||
function webim_mail($toaddr, $reply_to, $subject, $body)
|
||||
{
|
||||
global $webim_encoding, $webim_mailbox, $mail_encoding, $current_locale;
|
||||
|
||||
|
396
src/messenger/webim/libs/operator.php
Executable file → Normal file
396
src/messenger/webim/libs/operator.php
Executable file → Normal file
@ -31,37 +31,32 @@ $permission_ids = array(
|
||||
|
||||
function operator_by_login($login)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$operator = select_one_row(
|
||||
"select * from ${mysqlprefix}chatoperator where vclogin = '" . db_escape_string($login) . "'", $link);
|
||||
close_connection($link);
|
||||
return $operator;
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select * from {chatoperator} where vclogin = ?",
|
||||
array($login),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
}
|
||||
|
||||
function operator_by_email($mail)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$operator = select_one_row(
|
||||
"select * from ${mysqlprefix}chatoperator where vcemail = '" . db_escape_string($mail) . "'", $link);
|
||||
close_connection($link);
|
||||
return $operator;
|
||||
}
|
||||
|
||||
function operator_by_id_($id, $link)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
return select_one_row(
|
||||
"select * from ${mysqlprefix}chatoperator where operatorid = $id", $link);
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select * from {chatoperator} where vcemail = ?",
|
||||
array($mail),
|
||||
array('return_rows', Database::RETURN_ONE_ROW)
|
||||
);
|
||||
}
|
||||
|
||||
function operator_by_id($id)
|
||||
{
|
||||
$link = connect();
|
||||
$operator = operator_by_id_($id, $link);
|
||||
close_connection($link);
|
||||
return $operator;
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select * from {chatoperator} where operatorid = ?",
|
||||
array($id),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -80,8 +75,7 @@ function operator_by_id($id)
|
||||
*/
|
||||
function get_operators_list($options)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$db = Database::getInstance();
|
||||
|
||||
if ( !empty($options['sort']) && isset($options['sort']['by']) && isset($options['sort']['desc'])) {
|
||||
switch ($options['sort']['by']) {
|
||||
@ -103,54 +97,67 @@ function get_operators_list($options)
|
||||
$orderby = "vclogin";
|
||||
}
|
||||
|
||||
$query = "select distinct ${mysqlprefix}chatoperator.operatorid, vclogin, vclocalename, vccommonname, istatus, idisabled, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from ${mysqlprefix}chatoperator" .
|
||||
$query = "select distinct {chatoperator}.operatorid, vclogin, vclocalename, vccommonname, istatus, idisabled, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from {chatoperator}" .
|
||||
(
|
||||
empty($options['isolated_operator_id']) ? "" :
|
||||
sprintf(", ${mysqlprefix}chatgroupoperator " .
|
||||
" where ${mysqlprefix}chatoperator.operatorid = ${mysqlprefix}chatgroupoperator.operatorid and ${mysqlprefix}chatgroupoperator.groupid in " .
|
||||
"(select g.groupid from ${mysqlprefix}chatgroup g, " .
|
||||
"(select distinct parent from ${mysqlprefix}chatgroup, ${mysqlprefix}chatgroupoperator " .
|
||||
"where ${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid and ${mysqlprefix}chatgroupoperator.operatorid = %u) i " .
|
||||
"where g.groupid = i.parent or g.parent = i.parent " .
|
||||
")", $options['isolated_operator_id'])
|
||||
", {chatgroupoperator} " .
|
||||
" where {chatoperator}.operatorid = {chatgroupoperator}.operatorid and {chatgroupoperator}.groupid in " .
|
||||
"(select g.groupid from {chatgroup} g, " .
|
||||
"(select distinct parent from {chatgroup}, {chatgroupoperator} " .
|
||||
"where {chatgroup}.groupid = {chatgroupoperator}.groupid and {chatgroupoperator}.operatorid = :operatorid) i " .
|
||||
"where g.groupid = i.parent or g.parent = i.parent " .
|
||||
")"
|
||||
) .
|
||||
" order by " . $orderby;
|
||||
|
||||
$operators = select_multi_assoc($query, $link);
|
||||
close_connection($link);
|
||||
$operators = $db->query(
|
||||
$query,
|
||||
(
|
||||
empty($options['isolated_operator_id'])
|
||||
? array()
|
||||
: array(':operatorid' => $options['isolated_operator_id'])
|
||||
),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
|
||||
return $operators;
|
||||
}
|
||||
|
||||
function operator_get_all()
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
|
||||
$query = "select operatorid, vclogin, vclocalename, vccommonname, istatus, idisabled, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from ${mysqlprefix}chatoperator order by vclogin";
|
||||
$operators = select_multi_assoc($query, $link);
|
||||
close_connection($link);
|
||||
return $operators;
|
||||
$db = Database::getInstance();
|
||||
return $operators = $db->query(
|
||||
"select operatorid, vclogin, vclocalename, vccommonname, istatus, idisabled, " .
|
||||
"(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from {chatoperator} order by vclogin",
|
||||
NULL,
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
}
|
||||
|
||||
function get_operators_from_adjacent_groups($operator)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$db = Database::getInstance();
|
||||
$query = "select distinct {chatoperator}.operatorid, vclogin, vclocalename,vccommonname, " .
|
||||
"istatus, idisabled, " .
|
||||
"(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from {chatoperator}, {chatgroupoperator} " .
|
||||
"where {chatoperator}.operatorid = {chatgroupoperator}.operatorid " .
|
||||
"and {chatgroupoperator}.groupid in " .
|
||||
"(select g.groupid from {chatgroup} g, " .
|
||||
"(select distinct parent from {chatgroup}, {chatgroupoperator} " .
|
||||
"where {chatgroup}.groupid = {chatgroupoperator}.groupid " .
|
||||
"and {chatgroupoperator}.operatorid = ?) i " .
|
||||
"where g.groupid = i.parent or g.parent = i.parent " .
|
||||
") order by vclogin";
|
||||
|
||||
$query = "select distinct ${mysqlprefix}chatoperator.operatorid, vclogin, vclocalename, vccommonname, istatus, idisabled, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from ${mysqlprefix}chatoperator, ${mysqlprefix}chatgroupoperator " .
|
||||
" where ${mysqlprefix}chatoperator.operatorid = ${mysqlprefix}chatgroupoperator.operatorid and ${mysqlprefix}chatgroupoperator.groupid in " .
|
||||
"(select g.groupid from ${mysqlprefix}chatgroup g, " .
|
||||
"(select distinct parent from ${mysqlprefix}chatgroup, ${mysqlprefix}chatgroupoperator " .
|
||||
"where ${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid and ${mysqlprefix}chatgroupoperator.operatorid = ".$operator['operatorid'].") i " .
|
||||
"where g.groupid = i.parent or g.parent = i.parent " .
|
||||
") order by vclogin";
|
||||
|
||||
$operators = select_multi_assoc($query, $link);
|
||||
close_connection($link);
|
||||
return $operators;
|
||||
return $db->query(
|
||||
$query,
|
||||
array($operator['operatorid']),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
}
|
||||
|
||||
function operator_is_online($operator)
|
||||
@ -178,100 +185,116 @@ function operator_is_disabled($operator)
|
||||
|
||||
function update_operator($operatorid, $login, $email, $password, $localename, $commonname)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$query = sprintf(
|
||||
"update ${mysqlprefix}chatoperator set vclogin = '%s',%s vclocalename = '%s', vccommonname = '%s'" .
|
||||
", vcemail = '%s', vcjabbername= '%s'" .
|
||||
" where operatorid = %s",
|
||||
db_escape_string($login),
|
||||
($password ? " vcpassword='" . md5($password) . "'," : ""),
|
||||
db_escape_string($localename),
|
||||
db_escape_string($commonname),
|
||||
db_escape_string($email),
|
||||
'',
|
||||
$operatorid);
|
||||
|
||||
perform_query($query, $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatoperator} set vclogin = :login, " .
|
||||
($password ? " vcpassword=:password, " : "") .
|
||||
"vclocalename = :localname, vccommonname = :commonname, " .
|
||||
"vcemail = :email, vcjabbername= :jabbername " .
|
||||
"where operatorid = :operatorid",
|
||||
array(
|
||||
':login' => $login,
|
||||
':password' => $password,
|
||||
':localname' => $localename,
|
||||
':commonname' => $commonname,
|
||||
':email' => $email,
|
||||
':jabbername' => '',
|
||||
':operatorid' => $operatorid
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function update_operator_avatar($operatorid, $avatar)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$query = sprintf(
|
||||
"update ${mysqlprefix}chatoperator set vcavatar = '%s' where operatorid = %s",
|
||||
db_escape_string($avatar), $operatorid);
|
||||
|
||||
perform_query($query, $link);
|
||||
close_connection($link);
|
||||
}
|
||||
|
||||
function create_operator_($login, $email, $password, $localename, $commonname, $avatar, $link)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$query = sprintf(
|
||||
"insert into ${mysqlprefix}chatoperator (vclogin,vcpassword,vclocalename,vccommonname,vcavatar,vcemail,vcjabbername) values ('%s','%s','%s','%s','%s','%s','%s')",
|
||||
db_escape_string($login),
|
||||
md5($password),
|
||||
db_escape_string($localename),
|
||||
db_escape_string($commonname),
|
||||
db_escape_string($avatar),
|
||||
db_escape_string($email), '');
|
||||
|
||||
perform_query($query, $link);
|
||||
$id = db_insert_id($link);
|
||||
|
||||
return select_one_row("select * from ${mysqlprefix}chatoperator where operatorid = $id", $link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatoperator} set vcavatar = ? where operatorid = ?",
|
||||
array($avatar, $operatorid)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Rename create_operator_ function to create_operator and remove any usage of create_operator_
|
||||
*/
|
||||
function create_operator($login, $email, $password, $localename, $commonname, $avatar)
|
||||
{
|
||||
$link = connect();
|
||||
$newop = create_operator_($login, $email, $password, $localename, $commonname, $avatar, $link);
|
||||
close_connection($link);
|
||||
return $newop;
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"insert into {chatoperator} " .
|
||||
"(vclogin,vcpassword,vclocalename,vccommonname,vcavatar,vcemail,vcjabbername) " .
|
||||
"values (?, ?, ?, ?, ?, ?, ?)",
|
||||
array(
|
||||
$login,
|
||||
md5($password),
|
||||
$localename,
|
||||
$commonname,
|
||||
$avatar,
|
||||
$email,
|
||||
''
|
||||
)
|
||||
);
|
||||
|
||||
$id = $db->insertedId();
|
||||
|
||||
return $db->query(
|
||||
"select * from {chatoperator} where operatorid = ?",
|
||||
array($id),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
}
|
||||
|
||||
function notify_operator_alive($operatorid, $istatus)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
perform_query("update ${mysqlprefix}chatoperator set istatus = $istatus, dtmlastvisited = CURRENT_TIMESTAMP where operatorid = $operatorid", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatoperator} set istatus = ?, dtmlastvisited = CURRENT_TIMESTAMP " .
|
||||
"where operatorid = ?",
|
||||
array($istatus, $operatorid)
|
||||
);
|
||||
}
|
||||
|
||||
function has_online_operators($groupid = "")
|
||||
{
|
||||
global $settings, $mysqlprefix;
|
||||
global $settings;
|
||||
loadsettings();
|
||||
$link = connect();
|
||||
$query = "select count(*) as total, min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time from ${mysqlprefix}chatoperator";
|
||||
$db = Database::getInstance();
|
||||
|
||||
$query = "select count(*) as total, min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time from {chatoperator}";
|
||||
if ($groupid) {
|
||||
$query .= ", ${mysqlprefix}chatgroupoperator, ${mysqlprefix}chatgroup where ${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid and " .
|
||||
"(${mysqlprefix}chatgroup.groupid = $groupid or ${mysqlprefix}chatgroup.parent = $groupid) and ${mysqlprefix}chatoperator.operatorid = " .
|
||||
"${mysqlprefix}chatgroupoperator.operatorid and istatus = 0";
|
||||
$query .= ", {chatgroupoperator}, {chatgroup} where {chatgroup}.groupid = {chatgroupoperator}.groupid and " .
|
||||
"({chatgroup}.groupid = :groupid or {chatgroup}.parent = :groupid) and {chatoperator}.operatorid = " .
|
||||
"{chatgroupoperator}.operatorid and istatus = 0";
|
||||
} else {
|
||||
if ($settings['enablegroups'] == 1) {
|
||||
$query .= ", ${mysqlprefix}chatgroupoperator where ${mysqlprefix}chatoperator.operatorid = " .
|
||||
"${mysqlprefix}chatgroupoperator.operatorid and istatus = 0";
|
||||
$query .= ", {chatgroupoperator} where {chatoperator}.operatorid = " .
|
||||
"{chatgroupoperator}.operatorid and istatus = 0";
|
||||
} else {
|
||||
$query .= " where istatus = 0";
|
||||
}
|
||||
}
|
||||
$row = select_one_row($query, $link);
|
||||
close_connection($link);
|
||||
|
||||
$row = $db->query(
|
||||
$query,
|
||||
array(':groupid'=>$groupid),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
return $row['time'] < $settings['online_timeout'] && $row['total'] > 0;
|
||||
}
|
||||
|
||||
function is_operator_online($operatorid, $link)
|
||||
function is_operator_online($operatorid)
|
||||
{
|
||||
global $settings, $mysqlprefix;
|
||||
loadsettings_($link);
|
||||
$query = "select count(*) as total, min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from ${mysqlprefix}chatoperator where operatorid = $operatorid";
|
||||
$row = select_one_row($query, $link);
|
||||
global $settings;
|
||||
loadsettings();
|
||||
|
||||
$db = Database::getInstance();
|
||||
$row = $db->query(
|
||||
"select count(*) as total, " .
|
||||
"min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from {chatoperator} where operatorid = ?",
|
||||
array($operatorid),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
|
||||
return $row['time'] < $settings['online_timeout'] && $row['total'] == 1;
|
||||
}
|
||||
|
||||
@ -361,7 +384,7 @@ function logout_operator()
|
||||
|
||||
function setup_redirect_links($threadid, $operator, $token)
|
||||
{
|
||||
global $page, $webimroot, $settings, $mysqlprefix;
|
||||
global $page, $webimroot, $settings;
|
||||
loadsettings();
|
||||
|
||||
$operator_in_isolation = in_isolation($operator);
|
||||
@ -370,12 +393,10 @@ function setup_redirect_links($threadid, $operator, $token)
|
||||
$operators = get_operators_list($list_options);
|
||||
$operatorscount = count($operators);
|
||||
|
||||
$link = connect();
|
||||
|
||||
$groupscount = 0;
|
||||
$groups = array();
|
||||
if ($settings['enablegroups'] == "1") {
|
||||
$groupslist = $operator_in_isolation?get_groups_for_operator($link, $operator, true):get_groups($link, true);
|
||||
$groupslist = $operator_in_isolation?get_groups_for_operator($operator, true):get_groups(true);
|
||||
foreach ($groupslist as $group) {
|
||||
if ($group['inumofagents'] == 0) {
|
||||
continue;
|
||||
@ -384,7 +405,6 @@ function setup_redirect_links($threadid, $operator, $token)
|
||||
}
|
||||
$groupscount = count($groups);
|
||||
}
|
||||
close_connection($link);
|
||||
|
||||
prepare_pagination(max($operatorscount, $groupscount), 8);
|
||||
$p = $page['pagination'];
|
||||
@ -471,23 +491,35 @@ function prepare_menu($operator, $hasright = true)
|
||||
}
|
||||
}
|
||||
|
||||
function get_all_groups($link)
|
||||
function get_all_groups()
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$query = "select ${mysqlprefix}chatgroup.groupid as groupid, parent, vclocalname, vclocaldescription from ${mysqlprefix}chatgroup order by vclocalname";
|
||||
return get_sorted_child_groups_(select_multi_assoc($query, $link));
|
||||
$db = Database::getInstance();
|
||||
$groups = $db->query(
|
||||
"select {chatgroup}.groupid as groupid, parent, vclocalname, vclocaldescription " .
|
||||
"from {chatgroup} order by vclocalname",
|
||||
NULL,
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
return get_sorted_child_groups_($groups);
|
||||
}
|
||||
|
||||
function get_all_groups_for_operator($operator, $link)
|
||||
function get_all_groups_for_operator($operator)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$db = Database::getInstance();
|
||||
$query = "select g.groupid as groupid, g.parent, g.vclocalname, g.vclocaldescription " .
|
||||
"from ${mysqlprefix}chatgroup g, " .
|
||||
"(select distinct parent from ${mysqlprefix}chatgroup, ${mysqlprefix}chatgroupoperator " .
|
||||
"where ${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid and ${mysqlprefix}chatgroupoperator.operatorid = ".$operator['operatorid'].") i " .
|
||||
"where g.groupid = i.parent or g.parent = i.parent " .
|
||||
"order by vclocalname";
|
||||
return get_sorted_child_groups_(select_multi_assoc($query, $link));
|
||||
"from {chatgroup} g, " .
|
||||
"(select distinct parent from {chatgroup}, {chatgroupoperator} " .
|
||||
"where {chatgroup}.groupid = {chatgroupoperator}.groupid " .
|
||||
"and {chatgroupoperator}.operatorid = ?) i " .
|
||||
"where g.groupid = i.parent or g.parent = i.parent " .
|
||||
"order by vclocalname";
|
||||
|
||||
$groups = $db->query(
|
||||
$query,
|
||||
array($operator['operatorid']),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
return get_sorted_child_groups_($groups);
|
||||
}
|
||||
|
||||
function get_sorted_child_groups_($groupslist, $skipgroups = array(), $maxlevel = -1, $groupid = NULL, $level = 0)
|
||||
@ -505,10 +537,9 @@ function get_sorted_child_groups_($groupslist, $skipgroups = array(), $maxlevel
|
||||
return $child_groups;
|
||||
}
|
||||
|
||||
function get_groups_($link, $checkaway, $operator, $order = NULL)
|
||||
function get_groups_($checkaway, $operator, $order = NULL)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
|
||||
$db = Database::getInstance();
|
||||
if($order){
|
||||
switch($order['by']){
|
||||
case 'weight':
|
||||
@ -518,63 +549,68 @@ function get_groups_($link, $checkaway, $operator, $order = NULL)
|
||||
$orderby = "ilastseen";
|
||||
break;
|
||||
default:
|
||||
$orderby = "${mysqlprefix}chatgroup.vclocalname";
|
||||
$orderby = "{chatgroup}.vclocalname";
|
||||
}
|
||||
$orderby = sprintf(" IF(ISNULL(${mysqlprefix}chatgroup.parent),CONCAT('_',%s),'') %s, ${mysqlprefix}chatgroup.iweight ",
|
||||
$orderby = sprintf(" IF(ISNULL({chatgroup}.parent),CONCAT('_',%s),'') %s, {chatgroup}.iweight ",
|
||||
$orderby,
|
||||
($order['desc']?'DESC':'ASC'));
|
||||
}else{
|
||||
$orderby = "iweight, vclocalname";
|
||||
}
|
||||
|
||||
$query = "select ${mysqlprefix}chatgroup.groupid as groupid, ${mysqlprefix}chatgroup.parent as parent, vclocalname, vclocaldescription, iweight" .
|
||||
", (SELECT count(*) from ${mysqlprefix}chatgroupoperator where ${mysqlprefix}chatgroup.groupid = " .
|
||||
"${mysqlprefix}chatgroupoperator.groupid) as inumofagents" .
|
||||
", (SELECT min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from ${mysqlprefix}chatgroupoperator, ${mysqlprefix}chatoperator where istatus = 0 and " .
|
||||
"${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid " .
|
||||
"and ${mysqlprefix}chatgroupoperator.operatorid = ${mysqlprefix}chatoperator.operatorid) as ilastseen" .
|
||||
($checkaway
|
||||
? ", (SELECT min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from ${mysqlprefix}chatgroupoperator, ${mysqlprefix}chatoperator where istatus <> 0 and " .
|
||||
"${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid " .
|
||||
"and ${mysqlprefix}chatgroupoperator.operatorid = ${mysqlprefix}chatoperator.operatorid) as ilastseenaway"
|
||||
: ""
|
||||
) .
|
||||
" from ${mysqlprefix}chatgroup" .
|
||||
($operator
|
||||
? ", (select distinct parent from ${mysqlprefix}chatgroup, ${mysqlprefix}chatgroupoperator " .
|
||||
"where ${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatgroupoperator.groupid and ${mysqlprefix}chatgroupoperator.operatorid = ".$operator['operatorid'].") i " .
|
||||
"where ${mysqlprefix}chatgroup.groupid = i.parent or ${mysqlprefix}chatgroup.parent = i.parent "
|
||||
: ""
|
||||
) .
|
||||
" order by " . $orderby;
|
||||
return get_sorted_child_groups_(select_multi_assoc($query, $link));
|
||||
$query = "select {chatgroup}.groupid as groupid, {chatgroup}.parent as parent, vclocalname, vclocaldescription, iweight" .
|
||||
", (SELECT count(*) from {chatgroupoperator} where {chatgroup}.groupid = " .
|
||||
"{chatgroupoperator}.groupid) as inumofagents" .
|
||||
", (SELECT min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from {chatgroupoperator}, {chatoperator} where istatus = 0 and " .
|
||||
"{chatgroup}.groupid = {chatgroupoperator}.groupid " .
|
||||
"and {chatgroupoperator}.operatorid = {chatoperator}.operatorid) as ilastseen" .
|
||||
($checkaway
|
||||
? ", (SELECT min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time " .
|
||||
"from {chatgroupoperator}, {chatoperator} where istatus <> 0 and " .
|
||||
"{chatgroup}.groupid = {chatgroupoperator}.groupid " .
|
||||
"and {chatgroupoperator}.operatorid = {chatoperator}.operatorid) as ilastseenaway"
|
||||
: ""
|
||||
) .
|
||||
" from {chatgroup} " .
|
||||
($operator
|
||||
? ", (select distinct parent from {chatgroup}, {chatgroupoperator} " .
|
||||
"where {chatgroup}.groupid = {chatgroupoperator}.groupid and {chatgroupoperator}.operatorid = ?) i " .
|
||||
"where {chatgroup}.groupid = i.parent or {chatgroup}.parent = i.parent "
|
||||
: ""
|
||||
) .
|
||||
" order by " . $orderby;
|
||||
$groups = $db->query(
|
||||
$query,
|
||||
array($operator['operatorid']),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
return get_sorted_child_groups_($groups);
|
||||
}
|
||||
|
||||
function get_groups($link, $checkaway)
|
||||
function get_groups($checkaway)
|
||||
{
|
||||
return get_groups_($link, $checkaway, NULL);
|
||||
return get_groups_($checkaway, NULL);
|
||||
}
|
||||
|
||||
function get_groups_for_operator($link, $operator, $checkaway)
|
||||
function get_groups_for_operator($operator, $checkaway)
|
||||
{
|
||||
return get_groups_($link, $checkaway, $operator);
|
||||
return get_groups_($checkaway, $operator);
|
||||
}
|
||||
|
||||
function get_sorted_groups($link, $order)
|
||||
function get_sorted_groups($order)
|
||||
{
|
||||
return get_groups_($link, true, NULL, $order);
|
||||
return get_groups_(true, NULL, $order);
|
||||
}
|
||||
|
||||
function get_operator_groupids($operatorid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$query = "select groupid from ${mysqlprefix}chatgroupoperator where operatorid = $operatorid";
|
||||
$result = select_multi_assoc($query, $link);
|
||||
close_connection($link);
|
||||
return $result;
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select groupid from {chatgroupoperator} where operatorid = ?",
|
||||
array($operatorid),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
}
|
||||
|
||||
?>
|
@ -72,15 +72,47 @@ function setup_pagination($items, $default_items_per_page = 15)
|
||||
}
|
||||
}
|
||||
|
||||
function select_with_pagintation($fields, $table, $conditions, $order, $countfields, $link)
|
||||
/**
|
||||
* Selects rows from database taking pagination into account.
|
||||
*
|
||||
* @global array $page
|
||||
* @param string $fields Selected fields
|
||||
* @param string $table Table name in database
|
||||
* @param string $conditions Where close
|
||||
* @param string $order Order clause
|
||||
* @param string $countfields Field, substituted in SQL COUNT function
|
||||
* @param array $values Associative array of substituted values. Keys are named placeholders in the
|
||||
* query(see Database::query() and its $values parameter description)
|
||||
*
|
||||
* @see Database::query()
|
||||
*/
|
||||
function select_with_pagintation($fields, $table, $conditions, $order, $countfields, $values)
|
||||
{
|
||||
global $page;
|
||||
$count = db_rows_count($table, $conditions, $countfields, $link);
|
||||
$db = Database::getInstance();
|
||||
|
||||
list($count) = $db->query(
|
||||
"select count(". ($countfields ? $countfieds : "*") .") from {$table} " .
|
||||
"where " . (count($conditions) ? implode(" and ", $conditions) : "") .
|
||||
($order ? " " . $order : ""),
|
||||
$values,
|
||||
array(
|
||||
'return_rows' => Database::RETURN_ONE_ROW,
|
||||
'fetch_type' => Database::FETCH_NUM
|
||||
)
|
||||
);
|
||||
|
||||
prepare_pagination($count);
|
||||
if ($count) {
|
||||
$p = $page['pagination'];
|
||||
$limit = $p['limit'];
|
||||
$page['pagination.items'] = select_multi_assoc(db_build_select($fields, $table, $conditions, $order) . " " . $limit, $link);
|
||||
$page['pagination.items'] = $db->query(
|
||||
"select {$fields} from {$table} " .
|
||||
"where " . (count($conditions) ? implode(" and ", $conditions) : "") .
|
||||
($order ? " " . $order : "") . " " . $limit,
|
||||
$values,
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
} else {
|
||||
$page['pagination.items'] = false;
|
||||
}
|
||||
|
@ -17,17 +17,14 @@
|
||||
|
||||
function update_settings()
|
||||
{
|
||||
global $settings, $settings_in_db, $mysqlprefix;
|
||||
$link = connect();
|
||||
global $settings, $settings_in_db;
|
||||
$db = Database::getInstance();
|
||||
foreach ($settings as $key => $value) {
|
||||
if (!isset($settings_in_db[$key])) {
|
||||
perform_query("insert into ${mysqlprefix}chatconfig (vckey) values ('$key')", $link);
|
||||
$db->query("insert into {chatconfig} (vckey) values (?)", array($key));
|
||||
}
|
||||
$query = sprintf("update ${mysqlprefix}chatconfig set vcvalue='%s' where vckey='$key'", db_escape_string($value));
|
||||
perform_query($query, $link);
|
||||
$db->query("update {chatconfig} set vcvalue=? where vckey=?", array($value, $key));
|
||||
}
|
||||
|
||||
close_connection($link);
|
||||
}
|
||||
|
||||
function setup_settings_tabs($active)
|
||||
|
@ -17,88 +17,108 @@
|
||||
|
||||
require_once(dirname(__FILE__).'/chat.php');
|
||||
|
||||
function track_visitor($visitorid, $entry, $referer, $link)
|
||||
function track_visitor($visitorid, $entry, $referer)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
|
||||
$visitor = track_get_visitor_by_id($visitorid, $link);
|
||||
$visitor = track_get_visitor_by_id($visitorid);
|
||||
|
||||
if (FALSE === $visitor) {
|
||||
$visitor = track_visitor_start($entry, $referer, $link);
|
||||
return $visitor;
|
||||
}
|
||||
else {
|
||||
perform_query("update ${mysqlprefix}chatsitevisitor set lasttime = CURRENT_TIMESTAMP where visitorid=" . $visitor['visitorid'], $link);
|
||||
track_visit_page($visitor['visitorid'], $referer, $link);
|
||||
return $visitor['visitorid'];
|
||||
$visitor = track_visitor_start($entry, $referer);
|
||||
return $visitor;
|
||||
} else {
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatsitevisitor} set lasttime = CURRENT_TIMESTAMP " .
|
||||
"where visitorid=?",
|
||||
array($visitor['visitorid'])
|
||||
);
|
||||
track_visit_page($visitor['visitorid'], $referer);
|
||||
return $visitor['visitorid'];
|
||||
}
|
||||
}
|
||||
|
||||
function track_visitor_start($entry, $referer, $link)
|
||||
function track_visitor_start($entry, $referer)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
|
||||
$visitor = visitor_from_request();
|
||||
|
||||
perform_query(sprintf("insert into ${mysqlprefix}chatsitevisitor (userid, username, firsttime, lasttime, entry, details) values ('%s', '%s', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '%s', '%s')",
|
||||
db_escape_string($visitor['id']),
|
||||
db_escape_string($visitor['name']),
|
||||
db_escape_string($entry),
|
||||
db_escape_string(track_build_details())), $link);
|
||||
$id = db_insert_id($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"insert into {chatsitevisitor} (userid,username,firsttime,lasttime,entry,details) ".
|
||||
"values (?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?, ?)",
|
||||
array(
|
||||
$visitor['id'],
|
||||
$visitor['name'],
|
||||
$entry,
|
||||
track_build_details()
|
||||
)
|
||||
);
|
||||
|
||||
$id = $db->insertedId();
|
||||
|
||||
if ($id) {
|
||||
track_visit_page($id, $referer, $link);
|
||||
track_visit_page($id, $referer);
|
||||
}
|
||||
|
||||
return $id ? $id : 0;
|
||||
}
|
||||
|
||||
function track_get_visitor_by_id($visitorid, $link)
|
||||
function track_get_visitor_by_id($visitorid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
|
||||
$visitor = select_one_row(
|
||||
"select * from ${mysqlprefix}chatsitevisitor where visitorid = $visitorid", $link);
|
||||
|
||||
return $visitor;
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select * from {chatsitevisitor} where visitorid = ?",
|
||||
array($visitorid),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
}
|
||||
|
||||
function track_get_visitor_by_threadid($threadid, $link)
|
||||
function track_get_visitor_by_threadid($threadid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
|
||||
$visitor = select_one_row(
|
||||
"select * from ${mysqlprefix}chatsitevisitor where threadid = $threadid", $link);
|
||||
|
||||
return $visitor;
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select * from {chatsitevisitor} where threadid = ?",
|
||||
array($threadid),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
}
|
||||
|
||||
function track_visit_page($visitorid, $page, $link)
|
||||
function track_visit_page($visitorid, $page)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$db = Database::getInstance();
|
||||
|
||||
if (empty($page)) {
|
||||
return;
|
||||
}
|
||||
$lastpage = select_one_row(sprintf("select address from ${mysqlprefix}visitedpage where visitorid = '%s' order by visittime desc limit 1",
|
||||
db_escape_string($visitorid)), $link);
|
||||
$lastpage = $db->query(
|
||||
"select address from {visitedpage} where visitorid = ? " .
|
||||
"order by visittime desc limit 1",
|
||||
array($visitorid),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
if ( $lastpage['address'] != $page ) {
|
||||
perform_query(sprintf("insert into ${mysqlprefix}visitedpage (visitorid, address, visittime) values ('%s', '%s', CURRENT_TIMESTAMP)",
|
||||
db_escape_string($visitorid),
|
||||
db_escape_string($page)), $link);
|
||||
perform_query(sprintf("insert into ${mysqlprefix}visitedpagestatistics (address, visittime) values ('%s', CURRENT_TIMESTAMP)",
|
||||
db_escape_string($page)), $link);
|
||||
$db->query(
|
||||
"insert into {visitedpage} (visitorid, address, visittime) " .
|
||||
"values (?, ?, CURRENT_TIMESTAMP)",
|
||||
array($visitorid, $page)
|
||||
);
|
||||
$db->query(
|
||||
"insert into {visitedpagestatistics} (address, visittime) " .
|
||||
"values (?, CURRENT_TIMESTAMP)",
|
||||
array($page)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function track_get_path($visitor, $link)
|
||||
function track_get_path($visitor)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$query_result = perform_query(sprintf("select address, UNIX_TIMESTAMP(visittime) as visittime from ${mysqlprefix}visitedpage where visitorid = '%s'",
|
||||
db_escape_string($visitor['visitorid'])), $link);
|
||||
$db = Database::getInstance();
|
||||
$query_result = $db->query(
|
||||
"select address, UNIX_TIMESTAMP(visittime) as visittime from {visitedpage} " .
|
||||
"where visitorid = ?",
|
||||
array($visitor['visitorid']),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
$result = array();
|
||||
while( $page = db_fetch_assoc($query_result) ){
|
||||
foreach ($query_result as $page) {
|
||||
$result[$page['visittime']] = $page['address'];
|
||||
}
|
||||
return $result;
|
||||
|
@ -63,9 +63,7 @@ loadsettings();
|
||||
$subject = getstring("mail.user.history.subject");
|
||||
$body = getstring2("mail.user.history.body", array($thread['userName'],$history,$settings['title'],$settings['hosturl']) );
|
||||
|
||||
$link = connect();
|
||||
webim_mail($email, $webim_mailbox, $subject, $body, $link);
|
||||
close_connection($link);
|
||||
webim_mail($email, $webim_mailbox, $subject, $body);
|
||||
|
||||
setup_logo($group);
|
||||
expand("styles/dialogs", getchatstyle(), "mailsent.tpl");
|
||||
|
@ -46,9 +46,7 @@ if (isset($_POST['address'])) {
|
||||
$errors[] = no_field("form.field.ban_comment");
|
||||
}
|
||||
|
||||
$link = connect();
|
||||
$existing_ban = ban_for_addr_($address, $link);
|
||||
close_connection($link);
|
||||
$existing_ban = ban_for_addr($address);
|
||||
|
||||
if ((!$banId && $existing_ban) ||
|
||||
($banId && $existing_ban && $banId != $existing_ban['banid'])) {
|
||||
@ -56,24 +54,30 @@ if (isset($_POST['address'])) {
|
||||
}
|
||||
|
||||
if (count($errors) == 0) {
|
||||
$link = connect();
|
||||
$db = Database::getInstance();
|
||||
$utime = time() + $days * 24 * 60 * 60;
|
||||
if (!$banId) {
|
||||
$query = sprintf(
|
||||
"insert into ${mysqlprefix}chatban (dtmcreated,dtmtill,address,comment) values (CURRENT_TIMESTAMP,%s,'%s','%s')",
|
||||
"FROM_UNIXTIME($utime)",
|
||||
db_escape_string($address, $link),
|
||||
db_escape_string($comment, $link));
|
||||
perform_query($query, $link);
|
||||
$db->query(
|
||||
"insert into {chatban} (dtmcreated,dtmtill,address,comment) " .
|
||||
"values (CURRENT_TIMESTAMP,FROM_UNIXTIME(?),?,?)",
|
||||
array(
|
||||
$utime,
|
||||
$address,
|
||||
$comment
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$query = sprintf(
|
||||
"update ${mysqlprefix}chatban set dtmtill = %s,address = '%s',comment = '%s' where banid = $banId",
|
||||
"FROM_UNIXTIME($utime)",
|
||||
db_escape_string($address, $link),
|
||||
db_escape_string($comment, $link));
|
||||
perform_query($query, $link);
|
||||
$db->query(
|
||||
"update {chatban} set dtmtill = FROM_UNIXTIME(?),address = ?, " .
|
||||
"comment = ? where banid = ?",
|
||||
array(
|
||||
$utime,
|
||||
$address,
|
||||
$comment,
|
||||
$banId
|
||||
)
|
||||
);
|
||||
}
|
||||
close_connection($link);
|
||||
|
||||
if (!$threadid) {
|
||||
header("Location: $webimroot/operator/blocked.php");
|
||||
@ -91,9 +95,13 @@ if (isset($_POST['address'])) {
|
||||
}
|
||||
} else if (isset($_GET['id'])) {
|
||||
$banId = verifyparam('id', "/^\d{1,9}$/");
|
||||
$link = connect();
|
||||
$ban = select_one_row("select banid,(unix_timestamp(dtmtill)-unix_timestamp(CURRENT_TIMESTAMP)) as days,address,comment from ${mysqlprefix}chatban where banid = $banId", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$ban = $db->query(
|
||||
"select banid,(unix_timestamp(dtmtill)-unix_timestamp(CURRENT_TIMESTAMP))" .
|
||||
" as days,address,comment from {chatban} where banid = ?",
|
||||
array($banId),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
|
||||
if ($ban) {
|
||||
$page['banId'] = topage($ban['banid']);
|
||||
|
@ -26,7 +26,7 @@ $errors = array();
|
||||
|
||||
setlocale(LC_TIME, getstring("time.locale"));
|
||||
|
||||
$link = connect();
|
||||
$db = Database::getInstance();
|
||||
|
||||
if (isset($_GET['act']) && $_GET['act'] == 'del') {
|
||||
$banId = isset($_GET['id']) ? $_GET['id'] : "";
|
||||
@ -36,15 +36,17 @@ if (isset($_GET['act']) && $_GET['act'] == 'del') {
|
||||
}
|
||||
|
||||
if (count($errors) == 0) {
|
||||
perform_query("delete from ${mysqlprefix}chatban where banid = $banId", $link);
|
||||
$db->query("delete from {chatban} where banid = ?", array($banId));
|
||||
header("Location: $webimroot/operator/blocked.php");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$blockedList = select_multi_assoc("select banid,unix_timestamp(dtmtill) as till,address,comment from ${mysqlprefix}chatban", $link);
|
||||
|
||||
close_connection($link);
|
||||
$blockedList = $db->query(
|
||||
"select banid,unix_timestamp(dtmtill) as till,address,comment from {chatban}",
|
||||
NULL,
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
|
||||
setup_pagination($blockedList);
|
||||
|
||||
|
@ -57,9 +57,7 @@ if ($groupid) {
|
||||
}
|
||||
}
|
||||
|
||||
$link = connect();
|
||||
$allgroups = in_isolation($operator)?get_all_groups_for_operator($operator, $link):get_all_groups($link);
|
||||
close_connection($link);
|
||||
$allgroups = in_isolation($operator)?get_all_groups_for_operator($operator):get_all_groups();
|
||||
$page['groups'] = array();
|
||||
$page['groups'][] = array('groupid' => '', 'vclocalname' => getlocal("page.gen_button.default_group"));
|
||||
foreach ($allgroups as $g) {
|
||||
@ -76,9 +74,8 @@ if (isset($_GET['act']) && $_GET['act'] == 'delete') {
|
||||
}
|
||||
|
||||
if (count($errors) == 0) {
|
||||
$link = connect();
|
||||
perform_query("delete from ${mysqlprefix}chatresponses where id = $key", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query("delete from {chatresponses} where id = ?", array($key));
|
||||
header("Location: $webimroot/operator/canned.php?lang=$lang&group=$groupid");
|
||||
exit;
|
||||
}
|
||||
|
@ -27,11 +27,12 @@ $groupid = '';
|
||||
|
||||
function group_by_name($name)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$group = select_one_row(
|
||||
"select * from ${mysqlprefix}chatgroup where vclocalname = '" . db_escape_string($name) . "'", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$group = $db->query(
|
||||
"select * from {chatgroup} where vclocalname = ?",
|
||||
array($name),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
return $group;
|
||||
}
|
||||
|
||||
@ -55,39 +56,49 @@ function check_group_params($group, $extra_params = NULL)
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates group
|
||||
*
|
||||
* @param array $group Operators' group.
|
||||
* The $group array must contains following keys:
|
||||
* name, description, commonname, commondescription,
|
||||
* email, weight, parent, title, chattitle, hosturl, logo
|
||||
* @return array Created group
|
||||
*/
|
||||
function create_group($group)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$db = Database::getInstance();
|
||||
check_group_params($group);
|
||||
$link = connect();
|
||||
$query = sprintf(
|
||||
"insert into ${mysqlprefix}chatgroup (parent, vclocalname,vclocaldescription,vccommonname,vccommondescription,vcemail,vctitle,vcchattitle,vchosturl,vclogo,iweight) values (%s, '%s','%s','%s','%s','%s','%s','%s','%s','%s',%u)",
|
||||
($group['parent']?(int)$group['parent']:'NULL'),
|
||||
db_escape_string($group['name']),
|
||||
db_escape_string($group['description']),
|
||||
db_escape_string($group['commonname']),
|
||||
db_escape_string($group['commondescription']),
|
||||
db_escape_string($group['email']),
|
||||
db_escape_string($group['title']),
|
||||
db_escape_string($group['chattitle']),
|
||||
db_escape_string($group['hosturl']),
|
||||
db_escape_string($group['logo']),
|
||||
$group['weight']);
|
||||
$db->query(
|
||||
"insert into {chatgroup} (parent, vclocalname,vclocaldescription,vccommonname, " .
|
||||
"vccommondescription,vcemail,vctitle,vcchattitle,vchosturl,vclogo,iweight) " .
|
||||
"values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
array(
|
||||
($group['parent'] ? (int)$group['parent'] : 'NULL'),
|
||||
$group['name'],
|
||||
$group['description'],
|
||||
$group['commonname'],
|
||||
$group['commondescription'],
|
||||
$group['email'],
|
||||
$group['title'],
|
||||
$group['chattitle'],
|
||||
$group['hosturl'],
|
||||
$group['logo'],
|
||||
$group['weight']
|
||||
)
|
||||
);
|
||||
$id = $db->insertedId();
|
||||
|
||||
perform_query($query, $link);
|
||||
$id = db_insert_id($link);
|
||||
|
||||
$newdep = select_one_row("select * from ${mysqlprefix}chatgroup where groupid = $id", $link);
|
||||
close_connection($link);
|
||||
$newdep = $db->query(
|
||||
"select * from {chatgroup} where groupid = ?",
|
||||
array($id),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
return $newdep;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates group info
|
||||
*
|
||||
* @param array $group Operators' group.
|
||||
* The $group array must contains following keys:
|
||||
* id, name, description, commonname, commondescription,
|
||||
@ -95,30 +106,34 @@ function create_group($group)
|
||||
*/
|
||||
function update_group($group)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$db = Database::getInstance();
|
||||
check_group_params($group, array('id'));
|
||||
$link = connect();
|
||||
$query = sprintf(
|
||||
"update ${mysqlprefix}chatgroup set parent = %s, vclocalname = '%s', vclocaldescription = '%s', vccommonname = '%s', vccommondescription = '%s', vcemail = '%s', vctitle = '%s', vcchattitle = '%s', vchosturl = '%s', vclogo = '%s', iweight = %u where groupid = %s",
|
||||
($group['parent']?(int)$group['parent']:'NULL'),
|
||||
db_escape_string($group['name']),
|
||||
db_escape_string($group['description']),
|
||||
db_escape_string($group['commonname']),
|
||||
db_escape_string($group['commondescription']),
|
||||
db_escape_string($group['email']),
|
||||
db_escape_string($group['title']),
|
||||
db_escape_string($group['chattitle']),
|
||||
db_escape_string($group['hosturl']),
|
||||
db_escape_string($group['logo']),
|
||||
$group['weight'],
|
||||
$group['id']);
|
||||
perform_query($query, $link);
|
||||
$db->query(
|
||||
"update {chatgroup} set parent = ?, vclocalname = ?, vclocaldescription = ?, " .
|
||||
"vccommonname = ?, vccommondescription = ?, vcemail = ?, vctitle = ?, " .
|
||||
"vcchattitle = ?, vchosturl = ?, vclogo = ?, iweight = ? where groupid = ?",
|
||||
array(
|
||||
($group['parent'] ? (int)$group['parent'] : 'NULL'),
|
||||
$group['name'],
|
||||
$group['description'],
|
||||
$group['commonname'],
|
||||
$group['commondescription'],
|
||||
$group['email'],
|
||||
$group['title'],
|
||||
$group['chattitle'],
|
||||
$group['hosturl'],
|
||||
$group['logo'],
|
||||
$group['weight'],
|
||||
$group['id']
|
||||
)
|
||||
);
|
||||
|
||||
if ($group['parent']) {
|
||||
$query = sprintf("update ${mysqlprefix}chatgroup set parent = NULL where parent = %u", $group['id']);
|
||||
perform_query($query, $link);
|
||||
$db->query(
|
||||
"update {chatgroup} set parent = NULL where parent = ?",
|
||||
array($group['id'])
|
||||
);
|
||||
}
|
||||
close_connection($link);
|
||||
}
|
||||
|
||||
if (isset($_POST['name'])) {
|
||||
|
@ -23,34 +23,35 @@ $operator = check_login();
|
||||
|
||||
function get_group_members($groupid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$query = "select operatorid from ${mysqlprefix}chatgroupoperator where groupid = $groupid";
|
||||
$result = select_multi_assoc($query, $link);
|
||||
close_connection($link);
|
||||
return $result;
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select operatorid from {chatgroupoperator} where groupid = ?",
|
||||
array($groupid),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
}
|
||||
|
||||
function update_group_members($groupid, $newvalue)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
perform_query("delete from ${mysqlprefix}chatgroupoperator where groupid = $groupid", $link);
|
||||
$db = Database::getInstance();
|
||||
$db->query("delete from {chatgroupoperator} where groupid = ?", array($groupid));
|
||||
|
||||
foreach ($newvalue as $opid) {
|
||||
perform_query("insert into ${mysqlprefix}chatgroupoperator (groupid, operatorid) values ($groupid,$opid)", $link);
|
||||
$db->query(
|
||||
"insert into {chatgroupoperator} (groupid, operatorid) values (?, ?)",
|
||||
array($groupid,$opid)
|
||||
);
|
||||
}
|
||||
close_connection($link);
|
||||
}
|
||||
|
||||
function get_operators()
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
|
||||
$query = "select * from ${mysqlprefix}chatoperator order by vclogin";
|
||||
$result = select_multi_assoc($query, $link);
|
||||
close_connection($link);
|
||||
return $result;
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select * from {chatoperator} order by vclogin",
|
||||
NULL,
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
}
|
||||
|
||||
$groupid = verifyparam("gid", "/^\d{1,9}$/");
|
||||
|
@ -33,11 +33,10 @@ if (isset($_GET['act']) && $_GET['act'] == 'del') {
|
||||
}
|
||||
|
||||
if (count($errors) == 0) {
|
||||
$link = connect();
|
||||
perform_query("delete from ${mysqlprefix}chatgroup where groupid = $groupid", $link);
|
||||
perform_query("delete from ${mysqlprefix}chatgroupoperator where groupid = $groupid", $link);
|
||||
perform_query("update ${mysqlprefix}chatthread set groupid = 0 where groupid = $groupid", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query("delete from {chatgroup} where groupid = ?", array($groupid));
|
||||
$db->query("delete from {chatgroupoperator} where groupid = ?", array($groupid));
|
||||
$db->query("update {chatthread} set groupid = 0 where groupid = ?",array($groupid));
|
||||
header("Location: $webimroot/operator/groups.php");
|
||||
exit;
|
||||
}
|
||||
@ -59,9 +58,7 @@ function is_away($group)
|
||||
$page = array();
|
||||
$sort['by'] = verifyparam("sortby", "/^(name|lastseen|weight)$/", "name");
|
||||
$sort['desc'] = (verifyparam("sortdirection", "/^(desc|asc)$/", "desc") == "desc");
|
||||
$link = connect();
|
||||
$page['groups'] = get_sorted_groups($link, $sort);
|
||||
close_connection($link);
|
||||
$page['groups'] = get_sorted_groups($sort);
|
||||
$page['formsortby'] = $sort['by'];
|
||||
$page['formsortdirection'] = $sort['desc']?'desc':'asc';
|
||||
$page['canmodify'] = is_capable($can_administrate, $operator);
|
||||
|
@ -35,44 +35,50 @@ $searchType = verifyparam('type', '/^(all|message|operator|visitor)$/', 'all');
|
||||
$searchInSystemMessages = (verifyparam('insystemmessages', '/^on$/', 'off') == 'on') || !$query;
|
||||
|
||||
if ($query !== false) {
|
||||
$link = connect();
|
||||
$db = Database::getInstance();
|
||||
$groups = $db->query(
|
||||
"select {chatgroup}.groupid as groupid, vclocalname " .
|
||||
"from {chatgroup} order by vclocalname",
|
||||
NULL,
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
|
||||
$result = perform_query("select ${mysqlprefix}chatgroup.groupid as groupid, vclocalname " .
|
||||
"from ${mysqlprefix}chatgroup order by vclocalname", $link);
|
||||
$groupName = array();
|
||||
while ($group = db_fetch_assoc($result)) {
|
||||
foreach ($groups as $group) {
|
||||
$groupName[$group['groupid']] = $group['vclocalname'];
|
||||
}
|
||||
db_free_result($result);
|
||||
$page['groupName'] = $groupName;
|
||||
|
||||
$escapedQuery = db_escape_string($query, $link);
|
||||
$values = array(
|
||||
':query' => "%{$escapedQuery}%",
|
||||
':kind_user' => $kind_user,
|
||||
':kind_agent' => $kind_agent
|
||||
);
|
||||
|
||||
$searchConditions = array();
|
||||
if ($searchType == 'message' || $searchType == 'all') {
|
||||
$searchConditions[] = "(${mysqlprefix}chatmessage.tmessage LIKE '%%$escapedQuery%%'" .
|
||||
($searchInSystemMessages?'':" AND (${mysqlprefix}chatmessage.ikind = $kind_user OR ${mysqlprefix}chatmessage.ikind = $kind_agent)") .
|
||||
$searchConditions[] = "({chatmessage}.tmessage LIKE :query" .
|
||||
($searchInSystemMessages?'':" AND ({chatmessage}.ikind = :kind_user OR {chatmessage}.ikind = :kind_agent)") .
|
||||
")";
|
||||
}
|
||||
if ($searchType == 'operator' || $searchType == 'all') {
|
||||
$searchConditions[] = "(${mysqlprefix}chatthread.agentName LIKE '%%$escapedQuery%%')";
|
||||
$searchConditions[] = "({chatthread}.agentName LIKE :query)";
|
||||
}
|
||||
if ($searchType == 'visitor' || $searchType == 'all') {
|
||||
$searchConditions[] = "(${mysqlprefix}chatthread.userName LIKE '%%$escapedQuery%%')";
|
||||
$searchConditions[] = "(${mysqlprefix}chatthread.remote LIKE '%%$escapedQuery%%')";
|
||||
$searchConditions[] = "({chatthread}.userName LIKE :query)";
|
||||
$searchConditions[] = "({chatthread}.remote LIKE :query)";
|
||||
}
|
||||
select_with_pagintation("DISTINCT unix_timestamp(${mysqlprefix}chatthread.dtmcreated) as created, " .
|
||||
"unix_timestamp(${mysqlprefix}chatthread.dtmmodified) as modified, ${mysqlprefix}chatthread.threadid, " .
|
||||
"${mysqlprefix}chatthread.remote, ${mysqlprefix}chatthread.agentName, ${mysqlprefix}chatthread.userName, groupid, " .
|
||||
"messageCount as size",
|
||||
"${mysqlprefix}chatthread, ${mysqlprefix}chatmessage",
|
||||
array(
|
||||
"${mysqlprefix}chatmessage.threadid = ${mysqlprefix}chatthread.threadid",
|
||||
"(" . implode(' or ', $searchConditions) . ")"
|
||||
),
|
||||
"order by created DESC",
|
||||
"DISTINCT ${mysqlprefix}chatthread.dtmcreated", $link);
|
||||
|
||||
close_connection($link);
|
||||
select_with_pagintation("DISTINCT unix_timestamp({chatthread}.dtmcreated) as created, " .
|
||||
"unix_timestamp({chatthread}.dtmmodified) as modified, {chatthread}.threadid, " .
|
||||
"{chatthread}.remote, {chatthread}.agentName, {chatthread}.userName, groupid, " .
|
||||
"messageCount as size",
|
||||
"{chatthread}, {chatmessage}",
|
||||
array(
|
||||
"{chatmessage}.threadid = {chatthread}.threadid",
|
||||
"(" . implode(' or ', $searchConditions) . ")"
|
||||
),
|
||||
"order by created DESC",
|
||||
"DISTINCT {chatthread}.dtmcreated", $values);
|
||||
|
||||
$page['formq'] = topage($query);
|
||||
} else {
|
||||
|
@ -21,10 +21,8 @@ require_once('../libs/operator.php');
|
||||
$operator = check_login();
|
||||
force_password($operator);
|
||||
|
||||
$link = connect();
|
||||
loadsettings_($link);
|
||||
$isonline = is_operator_online($operator['operatorid'], $link);
|
||||
close_connection($link);
|
||||
loadsettings();
|
||||
$isonline = is_operator_online($operator['operatorid']);
|
||||
|
||||
$page = array(
|
||||
'version' => $version,
|
||||
|
@ -27,9 +27,7 @@ $visitorid = verifyparam("visitor", "/^\d{1,8}$/");
|
||||
|
||||
$errors = array();
|
||||
|
||||
$link = connect();
|
||||
$invitation = invitation_state($visitorid, $link);
|
||||
close_connection($link);
|
||||
$invitation = invitation_state($visitorid);
|
||||
|
||||
start_xml_output();
|
||||
echo '<invitation>';
|
||||
|
@ -25,11 +25,9 @@ loadsettings();
|
||||
|
||||
$visitorid = verifyparam("visitor", "/^\d{1,8}$/");
|
||||
|
||||
$link = connect();
|
||||
if (!invitation_invite($visitorid, $operator['operatorid'], $link)) {
|
||||
if (!invitation_invite($visitorid, $operator['operatorid'])) {
|
||||
die("Invitation failed!");
|
||||
}
|
||||
close_connection($link);
|
||||
|
||||
$page = array();
|
||||
$page['visitor'] = $visitorid;
|
||||
|
@ -48,11 +48,15 @@ if (isset($_GET['act'])) {
|
||||
}
|
||||
|
||||
if (count($errors) == 0) {
|
||||
$link = connect();
|
||||
perform_query("delete from ${mysqlprefix}chatgroupoperator where operatorid = $operatorid", $link);
|
||||
perform_query("delete from ${mysqlprefix}chatoperator where operatorid = $operatorid", $link);
|
||||
close_connection($link);
|
||||
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"delete from {chatgroupoperator} where operatorid = ?",
|
||||
array($operatorid)
|
||||
);
|
||||
$db->query(
|
||||
"delete from {chatoperator} where operatorid = ?",
|
||||
array($operatorid)
|
||||
);
|
||||
header("Location: $webimroot/operator/operators.php");
|
||||
exit;
|
||||
}
|
||||
@ -77,9 +81,11 @@ if (isset($_GET['act'])) {
|
||||
}
|
||||
|
||||
if (count($errors) == 0) {
|
||||
$link = connect();
|
||||
perform_query("update ${mysqlprefix}chatoperator set idisabled = ".($act_disable?'1':'0')." where operatorid = $operatorid", $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatoperator} set idisabled = ? where operatorid = ?",
|
||||
array(($act_disable ? '1' : '0'), $operatorid)
|
||||
);
|
||||
|
||||
header("Location: $webimroot/operator/operators.php");
|
||||
exit;
|
||||
|
@ -23,22 +23,25 @@ $operator = check_login();
|
||||
|
||||
function update_operator_groups($operatorid, $newvalue)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
perform_query("delete from ${mysqlprefix}chatgroupoperator where operatorid = $operatorid", $link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"delete from {chatgroupoperator} where operatorid = ?",
|
||||
array($operatorid)
|
||||
);
|
||||
|
||||
foreach ($newvalue as $groupid) {
|
||||
perform_query("insert into ${mysqlprefix}chatgroupoperator (groupid, operatorid) values ($groupid,$operatorid)", $link);
|
||||
$db->query(
|
||||
"insert into {chatgroupoperator} (groupid, operatorid) values (?,?)",
|
||||
array($groupid, $operatorid)
|
||||
);
|
||||
}
|
||||
close_connection($link);
|
||||
}
|
||||
|
||||
$operator_in_isolation = in_isolation($operator);
|
||||
|
||||
$opId = verifyparam("op", "/^\d{1,9}$/");
|
||||
$page = array('opid' => $opId);
|
||||
$link = connect();
|
||||
$page['groups'] = $operator_in_isolation?get_all_groups_for_operator($operator, $link):get_all_groups($link);
|
||||
close_connection($link);
|
||||
$page['groups'] = $operator_in_isolation?get_all_groups_for_operator($operator):get_all_groups();
|
||||
$errors = array();
|
||||
|
||||
$canmodify = is_capable($can_administrate, $operator);
|
||||
|
@ -24,12 +24,11 @@ csrfchecktoken();
|
||||
|
||||
function update_operator_permissions($operatorid, $newvalue)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$query = "update ${mysqlprefix}chatoperator set iperm = $newvalue where operatorid = $operatorid";
|
||||
|
||||
perform_query($query, $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatoperator} set iperm = ? where operatorid = ?",
|
||||
array($newvalue, $operatorid)
|
||||
);
|
||||
}
|
||||
|
||||
$opId = verifyparam("op", "/^\d{1,9}$/");
|
||||
|
@ -41,13 +41,11 @@ if (isset($_GET['nextGroup'])) {
|
||||
if ($nextGroup) {
|
||||
$page['message'] = getlocal2("chat.redirected.group.content", array(topage(get_group_name($nextGroup))));
|
||||
if ($thread['istate'] == $state_chatting) {
|
||||
$link = connect();
|
||||
commit_thread($threadid,
|
||||
array("istate" => $state_waiting, "nextagent" => 0, "groupid" => $nextid, "agentId" => 0, "agentName" => "''"), $link);
|
||||
array("istate" => $state_waiting, "nextagent" => 0, "groupid" => $nextid, "agentId" => 0, "agentName" => "''"));
|
||||
post_message_($thread['threadid'], $kind_events,
|
||||
getstring2_("chat.status.operator.redirect",
|
||||
array(get_operator_name($operator)), $thread['locale']), $link);
|
||||
close_connection($link);
|
||||
array(get_operator_name($operator)), $thread['locale']));
|
||||
} else {
|
||||
$errors[] = getlocal("chat.redirect.cannot");
|
||||
}
|
||||
@ -62,18 +60,26 @@ if (isset($_GET['nextGroup'])) {
|
||||
if ($nextOperator) {
|
||||
$page['message'] = getlocal2("chat.redirected.content", array(topage(get_operator_name($nextOperator))));
|
||||
if ($thread['istate'] == $state_chatting) {
|
||||
$link = connect();
|
||||
$threadupdate = array("istate" => $state_waiting, "nextagent" => $nextid, "agentId" => 0);
|
||||
if ($thread['groupid'] != 0) {
|
||||
if (FALSE === select_one_row("select groupid from ${mysqlprefix}chatgroupoperator where operatorid = $nextid and groupid = " . $thread['groupid'], $link)) {
|
||||
$db = Database::getInstance();
|
||||
list($groups_count) = $db->query(
|
||||
"select count(*) AS count from {chatgroupoperator} " .
|
||||
"where operatorid = ? and groupid = ?",
|
||||
array($nextid, $thread['groupid']),
|
||||
array(
|
||||
'return_rows' => Database::RETURN_ONE_ROW,
|
||||
'fetch_type' => Database::FETCH_NUM
|
||||
)
|
||||
);
|
||||
if ($groups_count === 0) {
|
||||
$threadupdate['groupid'] = 0;
|
||||
}
|
||||
}
|
||||
commit_thread($threadid, $threadupdate, $link);
|
||||
commit_thread($threadid, $threadupdate);
|
||||
post_message_($thread['threadid'], $kind_events,
|
||||
getstring2_("chat.status.operator.redirect",
|
||||
array(get_operator_name($operator)), $thread['locale']), $link);
|
||||
close_connection($link);
|
||||
array(get_operator_name($operator)), $thread['locale']));
|
||||
} else {
|
||||
$errors[] = getlocal("chat.redirect.cannot");
|
||||
}
|
||||
|
@ -48,10 +48,12 @@ if (count($errors) == 0 && isset($_POST['password'])) {
|
||||
if (count($errors) == 0) {
|
||||
$page['isdone'] = true;
|
||||
|
||||
$link = connect();
|
||||
$query = "update ${mysqlprefix}chatoperator set vcpassword = '" . md5($password) . "', vcrestoretoken = '' where operatorid = " . $opId;
|
||||
perform_query($query, $link);
|
||||
close_connection($link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatoperator} set vcpassword = ?, vcrestoretoken = '' " .
|
||||
"where operatorid = ?",
|
||||
array(md5($password), $opId)
|
||||
);
|
||||
|
||||
$page['loginname'] = $operator['vclogin'];
|
||||
start_html_output();
|
||||
|
@ -40,13 +40,15 @@ if (isset($_POST['loginoremail'])) {
|
||||
if (count($errors) == 0) {
|
||||
$token = md5((time() + microtime()) . rand(0, 99999999));
|
||||
|
||||
$link = connect();
|
||||
$query = "update ${mysqlprefix}chatoperator set dtmrestore = CURRENT_TIMESTAMP, vcrestoretoken = '$token' where operatorid = " . $torestore['operatorid'];
|
||||
perform_query($query, $link);
|
||||
$db = Database::getInstance();
|
||||
$db->query(
|
||||
"update {chatoperator} set dtmrestore = CURRENT_TIMESTAMP, " .
|
||||
"vcrestoretoken = ? where operatorid = ?",
|
||||
array($token, $torestore['operatorid'])
|
||||
);
|
||||
|
||||
$href = get_app_location(true, false) . "/operator/resetpwd.php?id=" . $torestore['operatorid'] . "&token=$token";
|
||||
webim_mail($email, $email, getstring("restore.mailsubj"), getstring2("restore.mailtext", array(get_operator_name($torestore), $href)), $link);
|
||||
close_connection($link);
|
||||
webim_mail($email, $email, getstring("restore.mailsubj"), getstring2("restore.mailtext", array(get_operator_name($torestore), $href)));
|
||||
|
||||
$page['isdone'] = true;
|
||||
require('../view/restore.php');
|
||||
|
@ -71,31 +71,61 @@ if ($start > $end) {
|
||||
}
|
||||
|
||||
$activetab = 0;
|
||||
$link = connect();
|
||||
$db = Database::getInstance();
|
||||
if ($statisticstype == 'bydate') {
|
||||
$page['reportByDate'] = select_multi_assoc("select DATE(t.dtmcreated) as date, COUNT(distinct t.threadid) as threads, SUM(m.ikind = $kind_agent) as agents, SUM(m.ikind = $kind_user) as users, ROUND(AVG(unix_timestamp(t.dtmchatstarted)-unix_timestamp(t.dtmcreated)),1) as avgwaitingtime, ROUND(AVG(tmp.lastmsgtime - unix_timestamp(t.dtmchatstarted)),1) as avgchattime " .
|
||||
"from ${mysqlprefix}chatmessage m, ${mysqlprefix}chatthread t, (SELECT i.threadid, unix_timestamp(MAX(i.dtmcreated)) AS lastmsgtime FROM ${mysqlprefix}chatmessage i WHERE (ikind = $kind_user OR ikind = $kind_agent) GROUP BY i.threadid) tmp " .
|
||||
"where m.threadid = t.threadid AND tmp.threadid = t.threadid AND unix_timestamp(t.dtmchatstarted) <> 0 AND unix_timestamp(m.dtmcreated) >= $start AND unix_timestamp(m.dtmcreated) < $end group by DATE(m.dtmcreated) order by m.dtmcreated desc", $link);
|
||||
$page['reportByDate'] = $db->query(
|
||||
"select DATE(t.dtmcreated) as date, COUNT(distinct t.threadid) as threads, SUM(m.ikind = :kind_agent) as agents, SUM(m.ikind = :kind_user) as users, ROUND(AVG(unix_timestamp(t.dtmchatstarted)-unix_timestamp(t.dtmcreated)),1) as avgwaitingtime, ROUND(AVG(tmp.lastmsgtime - unix_timestamp(t.dtmchatstarted)),1) as avgchattime " .
|
||||
"from {chatmessage} m, {chatthread} t, (SELECT i.threadid, unix_timestamp(MAX(i.dtmcreated)) AS lastmsgtime FROM {chatmessage} i WHERE (ikind = :kind_user OR ikind = :kind_agent) GROUP BY i.threadid) tmp " .
|
||||
"where m.threadid = t.threadid AND tmp.threadid = t.threadid AND unix_timestamp(t.dtmchatstarted) <> 0 AND unix_timestamp(m.dtmcreated) >= :start AND unix_timestamp(m.dtmcreated) < :end group by DATE(m.dtmcreated) order by m.dtmcreated desc",
|
||||
array(
|
||||
':kind_agent' => $kind_agent,
|
||||
':kind_user' => $kind_user,
|
||||
':start' => $start,
|
||||
':end' => $end
|
||||
),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
|
||||
$page['reportByDateTotal'] = select_one_row("select DATE(t.dtmcreated) as date, COUNT(distinct t.threadid) as threads, SUM(m.ikind = $kind_agent) as agents, SUM(m.ikind = $kind_user) as users, ROUND(AVG(unix_timestamp(t.dtmchatstarted)-unix_timestamp(t.dtmcreated)),1) as avgwaitingtime, ROUND(AVG(tmp.lastmsgtime - unix_timestamp(t.dtmchatstarted)),1) as avgchattime " .
|
||||
"from ${mysqlprefix}chatmessage m, ${mysqlprefix}chatthread t, (SELECT i.threadid, unix_timestamp(MAX(i.dtmcreated)) AS lastmsgtime FROM ${mysqlprefix}chatmessage i WHERE (ikind = $kind_user OR ikind = $kind_agent) GROUP BY i.threadid) tmp " .
|
||||
"where m.threadid = t.threadid AND tmp.threadid = t.threadid AND unix_timestamp(t.dtmchatstarted) <> 0 AND unix_timestamp(m.dtmcreated) >= $start AND unix_timestamp(m.dtmcreated) < $end", $link);
|
||||
$page['reportByDateTotal'] = $db->query(
|
||||
"select DATE(t.dtmcreated) as date, COUNT(distinct t.threadid) as threads, SUM(m.ikind = :kind_agent) as agents, SUM(m.ikind = :kind_user) as users, ROUND(AVG(unix_timestamp(t.dtmchatstarted)-unix_timestamp(t.dtmcreated)),1) as avgwaitingtime, ROUND(AVG(tmp.lastmsgtime - unix_timestamp(t.dtmchatstarted)),1) as avgchattime " .
|
||||
"from {chatmessage} m, {chatthread} t, (SELECT i.threadid, unix_timestamp(MAX(i.dtmcreated)) AS lastmsgtime FROM {chatmessage} i WHERE (ikind = :kind_user OR ikind = :kind_agent) GROUP BY i.threadid) tmp " .
|
||||
"where m.threadid = t.threadid AND tmp.threadid = t.threadid AND unix_timestamp(t.dtmchatstarted) <> 0 AND unix_timestamp(m.dtmcreated) >= :start AND unix_timestamp(m.dtmcreated) < :end",
|
||||
array(
|
||||
':kind_agent' => $kind_agent,
|
||||
':kind_user' => $kind_user,
|
||||
':start' => $start,
|
||||
':end' => $end
|
||||
),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
$activetab = 0;
|
||||
} elseif($statisticstype == 'byagent') {
|
||||
$page['reportByAgent'] = select_multi_assoc("select vclocalename as name, COUNT(distinct threadid) as threads, SUM(ikind = $kind_agent) as msgs, AVG(CHAR_LENGTH(tmessage)) as avglen " .
|
||||
"from ${mysqlprefix}chatmessage, ${mysqlprefix}chatoperator " .
|
||||
"where agentId = operatorid AND unix_timestamp(dtmcreated) >= $start AND unix_timestamp(dtmcreated) < $end group by operatorid", $link);
|
||||
$page['reportByAgent'] = $db->query(
|
||||
"select vclocalename as name, COUNT(distinct threadid) as threads, " .
|
||||
"SUM(ikind = :kind_agent) as msgs, AVG(CHAR_LENGTH(tmessage)) as avglen " .
|
||||
"from {chatmessage}, {chatoperator} " .
|
||||
"where agentId = operatorid AND unix_timestamp(dtmcreated) >= :start " .
|
||||
"AND unix_timestamp(dtmcreated) < :end group by operatorid",
|
||||
array(
|
||||
':kind_agent' => $kind_agent,
|
||||
':start' => $start,
|
||||
':end' => $end
|
||||
),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
$activetab = 1;
|
||||
} elseif($statisticstype == 'bypage') {
|
||||
$page['reportByPage'] = select_multi_assoc("SELECT COUNT(DISTINCT p.pageid) as visittimes, p.address, COUNT(DISTINCT t.threadid) as chattimes " .
|
||||
"FROM ${mysqlprefix}visitedpagestatistics p LEFT OUTER JOIN ${mysqlprefix}chatthread t ON (p.address = t.referer AND DATE(p.visittime) = DATE(t.dtmcreated)) " .
|
||||
"WHERE unix_timestamp(p.visittime) >= $start AND unix_timestamp(p.visittime) < $end GROUP BY p.address", $link);
|
||||
$page['reportByPage'] = $db->query(
|
||||
"SELECT COUNT(DISTINCT p.pageid) as visittimes, p.address, COUNT(DISTINCT t.threadid) as chattimes " .
|
||||
"FROM {visitedpagestatistics} p LEFT OUTER JOIN {chatthread} t ON (p.address = t.referer AND DATE(p.visittime) = DATE(t.dtmcreated)) " .
|
||||
"WHERE unix_timestamp(p.visittime) >= :start AND unix_timestamp(p.visittime) < :end GROUP BY p.address",
|
||||
array(':start' => $start, ':end' => $end),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
$activetab = 2;
|
||||
}
|
||||
$page['showresults'] = count($errors) == 0;
|
||||
|
||||
close_connection($link);
|
||||
|
||||
prepare_menu($operator);
|
||||
setup_statistics_tabs($activetab);
|
||||
start_html_output();
|
||||
|
@ -29,15 +29,16 @@ setlocale(LC_TIME, getstring("time.locale"));
|
||||
|
||||
function thread_info($id)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$link = connect();
|
||||
$thread = select_one_row("select userName,agentName,remote,userAgent," .
|
||||
"unix_timestamp(dtmmodified) as modified, unix_timestamp(dtmcreated) as created," .
|
||||
"vclocalname as groupName " .
|
||||
"from ${mysqlprefix}chatthread left join ${mysqlprefix}chatgroup on ${mysqlprefix}chatthread.groupid = ${mysqlprefix}chatgroup.groupid " .
|
||||
"where threadid = " . $id, $link);
|
||||
close_connection($link);
|
||||
return $thread;
|
||||
$db = Database::getInstance();
|
||||
return $db->query(
|
||||
"select userName,agentName,remote,userAgent," .
|
||||
"unix_timestamp(dtmmodified) as modified, unix_timestamp(dtmcreated) as created," .
|
||||
"vclocalname as groupName " .
|
||||
"from {chatthread} left join {chatgroup} on {chatthread}.groupid = {chatgroup}.groupid " .
|
||||
"where threadid = ?",
|
||||
array($id),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
@ -36,21 +36,19 @@ else {
|
||||
$visitorid = verifyparam("visitor", "/^\d{1,8}$/");
|
||||
}
|
||||
|
||||
$link = connect();
|
||||
if (isset($threadid)) {
|
||||
$visitor = track_get_visitor_by_threadid($threadid, $link);
|
||||
$visitor = track_get_visitor_by_threadid($threadid);
|
||||
if (!$visitor) {
|
||||
die("Wrong thread!");
|
||||
}
|
||||
}
|
||||
else {
|
||||
$visitor = track_get_visitor_by_id($visitorid, $link);
|
||||
$visitor = track_get_visitor_by_id($visitorid);
|
||||
if (!$visitor) {
|
||||
die("Wrong visitor!");
|
||||
}
|
||||
}
|
||||
$path = track_get_path($visitor, $link);
|
||||
close_connection($link);
|
||||
$path = track_get_path($visitor);
|
||||
|
||||
$page['entry'] = htmlspecialchars($visitor['entry']);
|
||||
$page['history'] = array();
|
||||
|
@ -46,18 +46,18 @@ $threadstate_key = array(
|
||||
$state_loading => "chat.thread.state_loading"
|
||||
);
|
||||
|
||||
function thread_to_xml($thread, $link)
|
||||
function thread_to_xml($thread)
|
||||
{
|
||||
global $state_chatting, $threadstate_to_string, $threadstate_key,
|
||||
$webim_encoding, $operator, $settings,
|
||||
$can_viewthreads, $can_takeover, $mysqlprefix;
|
||||
$webim_encoding, $operator, $settings,
|
||||
$can_viewthreads, $can_takeover;
|
||||
$state = $threadstate_to_string[$thread['istate']];
|
||||
$result = "<thread id=\"" . $thread['threadid'] . "\" stateid=\"$state\"";
|
||||
if ($state == "closed")
|
||||
return $result . "/>";
|
||||
|
||||
$state = getstring($threadstate_key[$thread['istate']]);
|
||||
$nextagent = $thread['nextagent'] != 0 ? operator_by_id_($thread['nextagent'], $link) : null;
|
||||
$nextagent = $thread['nextagent'] != 0 ? operator_by_id($thread['nextagent']) : null;
|
||||
$threadoperator = $nextagent ? get_operator_name($nextagent)
|
||||
: ($thread['agentName'] ? $thread['agentName'] : "-");
|
||||
|
||||
@ -76,7 +76,7 @@ $can_viewthreads, $can_takeover, $mysqlprefix;
|
||||
$result .= " canban=\"true\"";
|
||||
}
|
||||
|
||||
$banForThread = $settings['enableban'] == "1" ? ban_for_addr_($thread['remote'], $link) : false;
|
||||
$banForThread = $settings['enableban'] == "1" ? ban_for_addr($thread['remote']) : false;
|
||||
if ($banForThread) {
|
||||
$result .= " ban=\"blocked\" banid=\"" . $banForThread['banid'] . "\"";
|
||||
}
|
||||
@ -99,8 +99,12 @@ $can_viewthreads, $can_takeover, $mysqlprefix;
|
||||
$userAgent = get_useragent_version($thread['userAgent']);
|
||||
$result .= "<useragent>" . $userAgent . "</useragent>";
|
||||
if ($thread["shownmessageid"] != 0) {
|
||||
$query = "select tmessage from ${mysqlprefix}chatmessage where messageid = " . $thread["shownmessageid"];
|
||||
$line = select_one_row($query, $link);
|
||||
$db = Database::getInstance();
|
||||
$line = $db->query(
|
||||
"select tmessage from {chatmessage} where messageid = ?",
|
||||
array($thread["shownmessageid"]),
|
||||
array('return_rows' => Database::RETURN_ONE_ROW)
|
||||
);
|
||||
if ($line) {
|
||||
$message = preg_replace("/[\r\n\t]+/", " ", $line["tmessage"]);
|
||||
$result .= "<message>" . htmlspecialchars(htmlspecialchars($message)) . "</message>";
|
||||
@ -112,34 +116,42 @@ $can_viewthreads, $can_takeover, $mysqlprefix;
|
||||
|
||||
function print_pending_threads($groupids, $since)
|
||||
{
|
||||
global $webim_encoding, $settings, $state_closed, $state_left, $mysqlprefix;
|
||||
$link = connect();
|
||||
global $webim_encoding, $settings, $state_closed, $state_left;
|
||||
$db = Database::getInstance();
|
||||
|
||||
$revision = $since;
|
||||
$output = array();
|
||||
$query = "select threadid, userName, agentName, unix_timestamp(dtmcreated), userTyping, " .
|
||||
"unix_timestamp(dtmmodified), lrevision, istate, remote, nextagent, agentId, userid, shownmessageid, userAgent, (select vclocalname from ${mysqlprefix}chatgroup where ${mysqlprefix}chatgroup.groupid = ${mysqlprefix}chatthread.groupid) as groupname " .
|
||||
"from ${mysqlprefix}chatthread where lrevision > $since " .
|
||||
($since <= 0
|
||||
? "AND istate <> $state_closed AND istate <> $state_left "
|
||||
: "") .
|
||||
($settings['enablegroups'] == '1'
|
||||
? "AND (groupid is NULL" . ($groupids
|
||||
? " OR groupid IN ($groupids) OR groupid IN (SELECT parent FROM ${mysqlprefix}chatgroup WHERE groupid IN ($groupids)) "
|
||||
: "") .
|
||||
") "
|
||||
: "") .
|
||||
"ORDER BY threadid";
|
||||
$rows = select_multi_assoc($query, $link);
|
||||
"unix_timestamp(dtmmodified), lrevision, istate, remote, nextagent, agentId, " .
|
||||
"userid, shownmessageid, userAgent, (select vclocalname from {chatgroup} where {chatgroup}.groupid = {chatthread}.groupid) as groupname " .
|
||||
"from {chatthread} where lrevision > :since " .
|
||||
($since <= 0
|
||||
? "AND istate <> :state_closed AND istate <> :state_left "
|
||||
: "") .
|
||||
($settings['enablegroups'] == '1'
|
||||
? "AND (groupid is NULL" . ($groupids
|
||||
? " OR groupid IN ($groupids) OR groupid IN (SELECT parent FROM {chatgroup} WHERE groupid IN ($groupids)) "
|
||||
: "") .
|
||||
") "
|
||||
: "") .
|
||||
"ORDER BY threadid";
|
||||
$rows = $db->query(
|
||||
$query,
|
||||
array(
|
||||
':since' => $since,
|
||||
':state_closed' => $state_closed,
|
||||
':state_left' => $state_left
|
||||
),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
|
||||
$output = array();
|
||||
foreach ($rows as $row) {
|
||||
$thread = thread_to_xml($row, $link);
|
||||
$thread = thread_to_xml($row);
|
||||
$output[] = $thread;
|
||||
if ($row['lrevision'] > $revision)
|
||||
$revision = $row['lrevision'];
|
||||
}
|
||||
|
||||
close_connection($link);
|
||||
|
||||
echo "<threads revision=\"$revision\" time=\"" . time() . "000\">";
|
||||
foreach ($output as $thr) {
|
||||
print myiconv($webim_encoding, "utf-8", $thr);
|
||||
@ -167,7 +179,7 @@ function print_operators($operator)
|
||||
echo "</operators>";
|
||||
}
|
||||
|
||||
function visitor_to_xml($visitor, $link)
|
||||
function visitor_to_xml($visitor)
|
||||
{
|
||||
$result = "<visitor id=\"" . $visitor['visitorid'] . "\">";
|
||||
|
||||
@ -197,7 +209,7 @@ function visitor_to_xml($visitor, $link)
|
||||
$result .= "<invitation>";
|
||||
if ($visitor['invited']) {
|
||||
$result .= "<invitationtime>" . $visitor['unix_timestamp(invitationtime)'] . "000</invitationtime>";
|
||||
$operator = get_operator_name(operator_by_id_($visitor['invitedby'], $link));
|
||||
$operator = get_operator_name(operator_by_id($visitor['invitedby']));
|
||||
$result .= "<operator>" . htmlspecialchars(htmlspecialchars($operator)) . "</operator>";
|
||||
}
|
||||
$result .= "</invitation>";
|
||||
@ -208,50 +220,56 @@ function visitor_to_xml($visitor, $link)
|
||||
|
||||
function print_visitors()
|
||||
{
|
||||
global $webim_encoding, $settings, $state_closed, $state_left, $mysqlprefix;
|
||||
global $webim_encoding, $settings, $state_closed, $state_left;
|
||||
|
||||
$link = connect();
|
||||
$db = Database::getInstance();
|
||||
|
||||
// Remove old visitors
|
||||
$query = "DELETE FROM ${mysqlprefix}chatsitevisitor WHERE (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(lasttime)) > " . $settings['tracking_lifetime'] .
|
||||
" AND (threadid IS NULL OR (SELECT count(*) FROM ${mysqlprefix}chatthread WHERE threadid = ${mysqlprefix}chatsitevisitor.threadid" .
|
||||
" AND istate <> $state_closed AND istate <> $state_left) = 0)";
|
||||
perform_query($query, $link);
|
||||
$db->query(
|
||||
"DELETE FROM {chatsitevisitor} " .
|
||||
"WHERE (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(lasttime)) > ? ".
|
||||
"AND (threadid IS NULL OR " .
|
||||
"(SELECT count(*) FROM {chatthread} WHERE threadid = {chatsitevisitor}.threadid " .
|
||||
"AND istate <> {$state_closed} AND istate <> {$state_left}) = 0)",
|
||||
array($settings['tracking_lifetime'])
|
||||
);
|
||||
|
||||
// Remove old invitations
|
||||
$query = "UPDATE ${mysqlprefix}chatsitevisitor SET invited = 0, invitationtime = NULL, invitedby = NULL" .
|
||||
" WHERE threadid IS NULL AND (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(invitationtime)) > " .
|
||||
$settings['invitation_lifetime'];
|
||||
perform_query($query, $link);
|
||||
$db->query(
|
||||
"UPDATE {chatsitevisitor} SET invited = 0, invitationtime = NULL, invitedby = NULL".
|
||||
" WHERE threadid IS NULL AND (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(invitationtime)) > ?",
|
||||
array($settings['invitation_lifetime'])
|
||||
);
|
||||
|
||||
// Remove associations of visitors with closed threads
|
||||
$query = "UPDATE ${mysqlprefix}chatsitevisitor SET threadid = NULL WHERE threadid IS NOT NULL AND" .
|
||||
" (SELECT count(*) FROM ${mysqlprefix}chatthread WHERE threadid = ${mysqlprefix}chatsitevisitor.threadid" .
|
||||
" AND istate <> $state_closed AND istate <> $state_left) = 0";
|
||||
perform_query($query, $link);
|
||||
$db->query(
|
||||
"UPDATE {chatsitevisitor} SET threadid = NULL WHERE threadid IS NOT NULL AND" .
|
||||
" (SELECT count(*) FROM {chatthread} WHERE threadid = {chatsitevisitor}.threadid" .
|
||||
" AND istate <> {$state_closed} AND istate <> {$state_left}) = 0"
|
||||
);
|
||||
|
||||
// Remove old visitors' tracks
|
||||
$query = "DELETE FROM ${mysqlprefix}visitedpage WHERE (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(visittime)) > " . $settings['tracking_lifetime'] .
|
||||
" AND visitorid NOT IN (SELECT visitorid FROM ${mysqlprefix}chatsitevisitor)";
|
||||
perform_query($query, $link);
|
||||
|
||||
$output = array();
|
||||
$db->query(
|
||||
"DELETE FROM {visitedpage} WHERE (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(visittime)) > ? " .
|
||||
" AND visitorid NOT IN (SELECT visitorid FROM {chatsitevisitor})",
|
||||
array($settings['tracking_lifetime'])
|
||||
);
|
||||
|
||||
$query = "SELECT visitorid, userid, username, unix_timestamp(firsttime), unix_timestamp(lasttime), " .
|
||||
"entry, details, invited, unix_timestamp(invitationtime), invitedby, invitations, chats " .
|
||||
"FROM ${mysqlprefix}chatsitevisitor " .
|
||||
"FROM {chatsitevisitor} " .
|
||||
"WHERE threadid IS NULL " .
|
||||
"ORDER BY invited, lasttime DESC, invitations";
|
||||
$query .= ($settings['visitors_limit'] == '0') ? "" : " LIMIT " . $settings['visitors_limit'];
|
||||
|
||||
$rows = select_multi_assoc($query, $link);
|
||||
$rows = $db->query($query, NULL, array('return_rows' => Database::RETURN_ALL_ROWS));
|
||||
|
||||
$output = array();
|
||||
foreach ($rows as $row) {
|
||||
$visitor = visitor_to_xml($row, $link);
|
||||
$visitor = visitor_to_xml($row);
|
||||
$output[] = $visitor;
|
||||
}
|
||||
|
||||
close_connection($link);
|
||||
|
||||
echo "<visitors>";
|
||||
foreach ($output as $thr) {
|
||||
print myiconv($webim_encoding, "utf-8", $thr);
|
||||
@ -264,13 +282,11 @@ $status = verifyparam("status", "/^\d{1,2}$/", 0);
|
||||
$showonline = verifyparam("showonline", "/^1$/", 0);
|
||||
$showvisitors = verifyparam("showvisitors", "/^1$/", 0);
|
||||
|
||||
$link = connect();
|
||||
loadsettings_($link);
|
||||
loadsettings();
|
||||
if (!isset($_SESSION["${mysqlprefix}operatorgroups"])) {
|
||||
$_SESSION["${mysqlprefix}operatorgroups"] = get_operator_groupslist($operator['operatorid'], $link);
|
||||
$_SESSION["${mysqlprefix}operatorgroups"] = get_operator_groupslist($operator['operatorid']);
|
||||
}
|
||||
close_old_threads($link);
|
||||
close_connection($link);
|
||||
close_old_threads();
|
||||
$groupids = $_SESSION["${mysqlprefix}operatorgroups"];
|
||||
|
||||
start_xml_output();
|
||||
|
@ -35,21 +35,19 @@ if (isset($_GET['userid'])) {
|
||||
|
||||
function threads_by_userid($userid)
|
||||
{
|
||||
global $mysqlprefix;
|
||||
$db = Database::getInstance();
|
||||
if ($userid == "") {
|
||||
return null;
|
||||
}
|
||||
$link = connect();
|
||||
|
||||
$query = sprintf("select unix_timestamp(dtmcreated) as created, unix_timestamp(dtmmodified) as modified, " .
|
||||
" threadid, remote, agentName, userName " .
|
||||
"from ${mysqlprefix}chatthread " .
|
||||
"where userid=\"$userid\" order by created DESC", $userid);
|
||||
|
||||
$foundThreads = select_multi_assoc($query, $link);
|
||||
|
||||
close_connection($link);
|
||||
return $foundThreads;
|
||||
return $db->query(
|
||||
"select unix_timestamp(dtmcreated) as created, " .
|
||||
"unix_timestamp(dtmmodified) as modified, threadid, remote, agentName, userName " .
|
||||
"from {chatthread} " .
|
||||
"where userid=? order by created DESC",
|
||||
array($userid),
|
||||
array('return_rows' => Database::RETURN_ALL_ROWS)
|
||||
);
|
||||
}
|
||||
|
||||
$found = threads_by_userid($userid);
|
||||
|
@ -26,10 +26,8 @@ $status = isset($_GET['away']) ? 1 : 0;
|
||||
|
||||
notify_operator_alive($operator['operatorid'], $status);
|
||||
|
||||
$link = connect();
|
||||
loadsettings_($link);
|
||||
$_SESSION["${mysqlprefix}operatorgroups"] = get_operator_groupslist($operator['operatorid'], $link);
|
||||
close_connection($link);
|
||||
loadsettings();
|
||||
$_SESSION["${mysqlprefix}operatorgroups"] = get_operator_groupslist($operator['operatorid']);
|
||||
|
||||
$page = array();
|
||||
$page['havemenu'] = isset($_GET['nomenu']) ? "0" : "1";
|
||||
|
@ -30,14 +30,12 @@ if ($settings['enabletracking'] == '1') {
|
||||
$entry = isset($_GET['entry']) ? $_GET['entry'] : "";
|
||||
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "";
|
||||
|
||||
$link = connect();
|
||||
|
||||
if (isset($_SESSION['visitorid']) && preg_match('/^[0-9]+$/', $_SESSION['visitorid'])) {
|
||||
$invited = invitation_check($_SESSION['visitorid'], $link);
|
||||
$visitorid = track_visitor($_SESSION['visitorid'], $entry, $referer, $link);
|
||||
$invited = invitation_check($_SESSION['visitorid']);
|
||||
$visitorid = track_visitor($_SESSION['visitorid'], $entry, $referer);
|
||||
}
|
||||
else {
|
||||
$visitorid = track_visitor_start($entry, $referer, $link);
|
||||
$visitorid = track_visitor_start($entry, $referer);
|
||||
}
|
||||
|
||||
if ($visitorid) {
|
||||
@ -45,10 +43,9 @@ if ($settings['enabletracking'] == '1') {
|
||||
}
|
||||
|
||||
if ($invited !== FALSE) {
|
||||
$operator = operator_by_id_($invited, $link);
|
||||
$operator = operator_by_id($invited);
|
||||
}
|
||||
|
||||
close_connection($link);
|
||||
}
|
||||
|
||||
$response = array();
|
||||
|
@ -73,12 +73,10 @@ if( $act == "refresh" ) {
|
||||
show_error("cannot send");
|
||||
}
|
||||
|
||||
$link = connect();
|
||||
$postedid = post_message_($threadid,$kind,$message,$link,$from,null,$isuser ? null : $operator['operatorid'] );
|
||||
$postedid = post_message_($threadid,$kind,$message,$from,null,$isuser ? null : $operator['operatorid'] );
|
||||
if($isuser && $thread["shownmessageid"] == 0) {
|
||||
commit_thread( $thread['threadid'], array('shownmessageid' => $postedid), $link);
|
||||
commit_thread( $thread['threadid'], array('shownmessageid' => $postedid));
|
||||
}
|
||||
close_connection($link);
|
||||
print_thread_messages($thread, $token, $lastid, $isuser, $outformat, $isuser ? null : $operator['operatorid']);
|
||||
exit;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user