diff --git a/src/messenger/webim/libs/operator.php b/src/messenger/webim/libs/operator.php index 6831c5db..ec7fa489 100755 --- a/src/messenger/webim/libs/operator.php +++ b/src/messenger/webim/libs/operator.php @@ -1,384 +1,384 @@ - "admin", - $can_takeover => "takeover", - $can_viewthreads => "viewthreads", - $can_modifyprofile => "modifyprofile" -); - -function operator_by_login($login) { - global $mysqlprefix; - $link = connect(); - $operator = select_one_row( - "select * from " . $mysqlprefix . "chatoperator where vclogin = '".mysql_real_escape_string($login)."'", $link ); - mysql_close($link); - return $operator; -} - -function operator_by_email($mail) { - global $mysqlprefix; - $link = connect(); - $operator = select_one_row( - "select * from " . $mysqlprefix . "chatoperator where vcemail = '".mysql_real_escape_string($mail)."'", $link ); - mysql_close($link); - return $operator; -} - -function operator_by_id_($id,$link) { - global $mysqlprefix; - return select_one_row( - "select * from " .$mysqlprefix . "chatoperator where operatorid = $id", $link ); -} - -function operator_by_id($id) { - $link = connect(); - $operator = operator_by_id_($id,$link); - mysql_close($link); - return $operator; -} - -function operator_get_all() { - global $mysqlprefix; - $link = connect(); - - $query = "select operatorid, vclogin, vclocalename, vccommonname, istatus, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time ". - "from " . $mysqlprefix . "chatoperator order by vclogin"; - $operators = select_multi_assoc($query, $link); - mysql_close($link); - return $operators; -} - -function operator_is_online($operator) { - global $settings; - return $operator['time'] < $settings['online_timeout']; -} - -function operator_is_available($operator) { - global $settings; - return $operator['istatus'] == 0 && $operator['time'] < $settings['online_timeout'] ? "1" : ""; -} - -function operator_is_away($operator) { - global $settings; - return $operator['istatus'] != 0 && $operator['time'] < $settings['online_timeout'] ? "1" : ""; -} - -function update_operator($operatorid,$login,$email,$jabber,$password,$localename,$commonname,$notify) { - global $mysqlprefix; - $link = connect(); - $query = sprintf( - "update " . $mysqlprefix . "chatoperator set vclogin = '%s',%s vclocalename = '%s', vccommonname = '%s'". - ", vcemail = '%s', vcjabbername= '%s', inotify = %s". - " where operatorid = %s", - mysql_real_escape_string($login), - ($password ? " vcpassword='".md5($password)."'," : ""), - mysql_real_escape_string($localename), - mysql_real_escape_string($commonname), - mysql_real_escape_string($email), - mysql_real_escape_string($jabber), - $notify, - $operatorid ); - - perform_query($query,$link); - mysql_close($link); -} - -function update_operator_avatar($operatorid,$avatar) { - global $mysqlprefix; - $link = connect(); - $query = sprintf( - "update " . $mysqlprefix . "chatoperator set vcavatar = '%s' where operatorid = %s", - mysql_real_escape_string($avatar), $operatorid ); - - perform_query($query,$link); - mysql_close($link); -} - -function create_operator_($login,$email,$jabber,$password,$localename,$commonname,$notify,$link) { - global $mysqlprefix; - $query = sprintf( - "insert into " . $mysqlprefix . "chatoperator (vclogin,vcpassword,vclocalename,vccommonname,vcavatar,vcemail,vcjabbername,inotify) values ('%s','%s','%s','%s','%s','%s','%s',%s)", - mysql_real_escape_string($login), - md5($password), - mysql_real_escape_string($localename), - mysql_real_escape_string($commonname), - '' /* no avatar */, - mysql_real_escape_string($email), - mysql_real_escape_string($jabber), - $notify); - - perform_query($query,$link); - $id = mysql_insert_id($link); - - return select_one_row("select * from " . $mysqlprefix . "chatoperator where operatorid = $id", $link ); -} - -function create_operator($login,$email,$jabber,$password,$localename,$commonname,$notify) { - $link = connect(); - $newop = create_operator_($login,$email,$jabber,$password,$localename,$commonname,$notify,$link); - mysql_close($link); - return $newop; -} - -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); - mysql_close($link); -} - -function has_online_operators($groupid="") { - global $settings, $mysqlprefix; - loadsettings(); - $link = connect(); - $query = "select count(*) as total, min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time from " . $mysqlprefix . "chatoperator"; - if($groupid) { - $query .= ", " . $mysqlprefix . "chatgroupoperator where groupid = $groupid and " . $mysqlprefix . "chatoperator.operatorid = " . - $mysqlprefix . "chatgroupoperator.operatorid and istatus = 0"; - } else { - $query .= " where istatus = 0"; - } - $row = select_one_row($query,$link); - mysql_close($link); - return $row['time'] < $settings['online_timeout'] && $row['total'] > 0; -} - -function is_operator_online($operatorid, $link) { - 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); - return $row['time'] < $settings['online_timeout'] && $row['total'] == 1; -} - -function get_operator_name($operator) { - global $home_locale, $current_locale; - if( $home_locale == $current_locale ) - return $operator['vclocalename']; - else - return $operator['vccommonname']; -} - -function append_query($link,$pv) { - $infix = '?'; - if( strstr($link,$infix) !== FALSE ) - $infix = '&'; - return "$link$infix$pv"; -} - -function check_login($redirect=true) { - global $webimroot, $mysqlprefix; - if( !isset( $_SESSION[$mysqlprefix . 'operator'] ) ) { - if( isset($_COOKIE['webim_lite']) ) { - list($login,$pwd) = preg_split("/,/", $_COOKIE['webim_lite'], 2); - $op = operator_by_login($login); - if( $op && isset($pwd) && isset($op['vcpassword']) && md5($op['vcpassword']) == $pwd ) { - $_SESSION[$mysqlprefix . 'operator'] = $op; - return $op; - } - } - $requested = $_SERVER['PHP_SELF']; - if($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['QUERY_STRING']) { - $requested .= "?".$_SERVER['QUERY_STRING']; - } - if($redirect) { - $_SESSION['backpath'] = $requested; - header("Location: $webimroot/operator/login.php"); - exit; - } else { - return null; - } - } - return $_SESSION[$mysqlprefix . 'operator']; -} - -function get_logged_in() { - global $mysqlprefix; - return isset( $_SESSION[$mysqlprefix . 'operator'] ) ? $_SESSION[$mysqlprefix . 'operator'] : FALSE; -} - -function login_operator($operator,$remember) { - global $webimroot, $mysqlprefix; - $_SESSION[$mysqlprefix . 'operator'] = $operator; - if( $remember ) { - $value = $operator['vclogin'].",".md5($operator['vcpassword']); - setcookie('webim_lite', $value, time()+60*60*24*1000, "$webimroot/"); - - } else if( isset($_COOKIE['webim_lite']) ) { - setcookie('webim_lite', '', time() - 3600, "$webimroot/"); - } -} - -function logout_operator() { - global $webimroot, $mysqlprefix; - unset($_SESSION[$mysqlprefix . 'operator']); - unset($_SESSION['backpath']); - if( isset($_COOKIE['webim_lite']) ) { - setcookie('webim_lite', '', time() - 3600, "$webimroot/"); - } -} - -function setup_redirect_links($threadid,$token) { - global $page, $webimroot, $settings, $mysqlprefix; - loadsettings(); - $link = connect(); - - $operatorscount = db_rows_count($mysqlprefix . "chatoperator", array(), "", $link); - - $groupscount = 0; - if($settings['enablegroups'] == "1") { - $groups = array(); - foreach(get_groups($link, true) as $group) { - if($group['inumofagents'] == 0) { - continue; - } - $groups[] = $group; - } - $groupscount = count($groups); - } - - prepare_pagination(max($operatorscount,$groupscount),8); - $p = $page['pagination']; - $limit = $p['limit']; - - $operators = select_multi_assoc(db_build_select( - "operatorid, vclogin, vclocalename, vccommonname, istatus, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time", - $mysqlprefix . "chatoperator", array(), "order by vclogin $limit"), $link); - - $groups = array_slice($groups, $p['start'], $p['end']-$p['start']); - - mysql_close($link); - - $agent_list = ""; - $params = array('thread' => $threadid, 'token' => $token); - foreach($operators as $agent) { - $params['nextAgent'] = $agent['operatorid']; - $status = $agent['time'] < $settings['online_timeout'] - ? ($agent['istatus'] == 0 - ? getlocal("char.redirect.operator.online_suff") - : getlocal("char.redirect.operator.away_suff") - ) - : ""; - $agent_list .= "
  • ". - topage(get_operator_name($agent)). - " $status
  • "; - } - $page['redirectToAgent'] = $agent_list; - - $group_list = ""; - if($settings['enablegroups'] == "1") { - $params = array('thread' => $threadid, 'token' => $token); - foreach($groups as $group) { - $params['nextGroup'] = $group['groupid']; - $status = $group['ilastseen'] !== NULL && $group['ilastseen'] < $settings['online_timeout'] - ? getlocal("char.redirect.operator.online_suff") - : ($group['ilastseenaway'] !== NULL && $group['ilastseenaway'] < $settings['online_timeout'] - ? getlocal("char.redirect.operator.away_suff") - : ""); - $group_list .= "
  • ". - topage(get_group_name($group)). - " $status
  • "; - } - } - $page['redirectToGroup'] = $group_list; -} - -$permission_list = array(); - -function get_permission_list() { - global $permission_list, $permission_ids; - if(count($permission_list) == 0) { - foreach($permission_ids as $permid) { - $permission_list[] = array( - 'id' => $permid, - 'descr' => getlocal("permission.$permid") - ); - } - } - return $permission_list; -} - -function is_capable($perm,$operator) { - $permissions = $operator && isset($operator['iperm']) ? $operator['iperm'] : 0; - return $perm >= 0 && $perm < 32 && ($permissions & (1 << $perm)) != 0; -} - -function prepare_menu($operator,$hasright=true) { - global $page, $settings, $can_administrate; - $page['operator'] = topage(get_operator_name($operator)); - if($hasright) { - loadsettings(); - $page['showban'] = $settings['enableban'] == "1"; - $page['showgroups'] = $settings['enablegroups'] == "1"; - $page['showstat'] = $settings['enablestatistics'] == "1"; - $page['showadmin'] = is_capable($can_administrate, $operator); - $page['currentopid'] = $operator['operatorid']; - } -} - -function get_all_groups($link) { - global $mysqlprefix; - $query = "select " . $mysqlprefix . "chatgroup.groupid as groupid, vclocalname, vclocaldescription from " . $mysqlprefix . "chatgroup order by vclocalname"; - return select_multi_assoc($query, $link); -} - -function get_groups($link,$checkaway) { - global $mysqlprefix; - $query = "select " . $mysqlprefix . "chatgroup.groupid as groupid, vclocalname, vclocaldescription". - ", (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 order by vclocalname"; - return select_multi_assoc($query, $link); -} - -function get_operator_groupids($operatorid) { - global $mysqlprefix; - $link = connect(); - $query = "select groupid from " . $mysqlprefix . "chatgroupoperator where operatorid = $operatorid"; - $result = select_multi_assoc($query, $link); - mysql_close($link); - return $result; -} - -?> + "admin", + $can_takeover => "takeover", + $can_viewthreads => "viewthreads", + $can_modifyprofile => "modifyprofile" +); + +function operator_by_login($login) { + global $mysqlprefix; + $link = connect(); + $operator = select_one_row( + "select * from " . $mysqlprefix . "chatoperator where vclogin = '".mysql_real_escape_string($login)."'", $link ); + mysql_close($link); + return $operator; +} + +function operator_by_email($mail) { + global $mysqlprefix; + $link = connect(); + $operator = select_one_row( + "select * from " . $mysqlprefix . "chatoperator where vcemail = '".mysql_real_escape_string($mail)."'", $link ); + mysql_close($link); + return $operator; +} + +function operator_by_id_($id,$link) { + global $mysqlprefix; + return select_one_row( + "select * from " .$mysqlprefix . "chatoperator where operatorid = $id", $link ); +} + +function operator_by_id($id) { + $link = connect(); + $operator = operator_by_id_($id,$link); + mysql_close($link); + return $operator; +} + +function operator_get_all() { + global $mysqlprefix; + $link = connect(); + + $query = "select operatorid, vclogin, vclocalename, vccommonname, istatus, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time ". + "from " . $mysqlprefix . "chatoperator order by vclogin"; + $operators = select_multi_assoc($query, $link); + mysql_close($link); + return $operators; +} + +function operator_is_online($operator) { + global $settings; + return $operator['time'] < $settings['online_timeout']; +} + +function operator_is_available($operator) { + global $settings; + return $operator['istatus'] == 0 && $operator['time'] < $settings['online_timeout'] ? "1" : ""; +} + +function operator_is_away($operator) { + global $settings; + return $operator['istatus'] != 0 && $operator['time'] < $settings['online_timeout'] ? "1" : ""; +} + +function update_operator($operatorid,$login,$email,$jabber,$password,$localename,$commonname,$notify) { + global $mysqlprefix; + $link = connect(); + $query = sprintf( + "update " . $mysqlprefix . "chatoperator set vclogin = '%s',%s vclocalename = '%s', vccommonname = '%s'". + ", vcemail = '%s', vcjabbername= '%s', inotify = %s". + " where operatorid = %s", + mysql_real_escape_string($login), + ($password ? " vcpassword='".md5($password)."'," : ""), + mysql_real_escape_string($localename), + mysql_real_escape_string($commonname), + mysql_real_escape_string($email), + mysql_real_escape_string($jabber), + $notify, + $operatorid ); + + perform_query($query,$link); + mysql_close($link); +} + +function update_operator_avatar($operatorid,$avatar) { + global $mysqlprefix; + $link = connect(); + $query = sprintf( + "update " . $mysqlprefix . "chatoperator set vcavatar = '%s' where operatorid = %s", + mysql_real_escape_string($avatar), $operatorid ); + + perform_query($query,$link); + mysql_close($link); +} + +function create_operator_($login,$email,$jabber,$password,$localename,$commonname,$notify,$link) { + global $mysqlprefix; + $query = sprintf( + "insert into " . $mysqlprefix . "chatoperator (vclogin,vcpassword,vclocalename,vccommonname,vcavatar,vcemail,vcjabbername,inotify) values ('%s','%s','%s','%s','%s','%s','%s',%s)", + mysql_real_escape_string($login), + md5($password), + mysql_real_escape_string($localename), + mysql_real_escape_string($commonname), + '' /* no avatar */, + mysql_real_escape_string($email), + mysql_real_escape_string($jabber), + $notify); + + perform_query($query,$link); + $id = mysql_insert_id($link); + + return select_one_row("select * from " . $mysqlprefix . "chatoperator where operatorid = $id", $link ); +} + +function create_operator($login,$email,$jabber,$password,$localename,$commonname,$notify) { + $link = connect(); + $newop = create_operator_($login,$email,$jabber,$password,$localename,$commonname,$notify,$link); + mysql_close($link); + return $newop; +} + +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); + mysql_close($link); +} + +function has_online_operators($groupid="") { + global $settings, $mysqlprefix; + loadsettings(); + $link = connect(); + $query = "select count(*) as total, min(unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time from " . $mysqlprefix . "chatoperator"; + if($groupid) { + $query .= ", " . $mysqlprefix . "chatgroupoperator where groupid = $groupid and " . $mysqlprefix . "chatoperator.operatorid = " . + $mysqlprefix . "chatgroupoperator.operatorid and istatus = 0"; + } else { + $query .= " where istatus = 0"; + } + $row = select_one_row($query,$link); + mysql_close($link); + return $row['time'] < $settings['online_timeout'] && $row['total'] > 0; +} + +function is_operator_online($operatorid, $link) { + 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); + return $row['time'] < $settings['online_timeout'] && $row['total'] == 1; +} + +function get_operator_name($operator) { + global $home_locale, $current_locale; + if( $home_locale == $current_locale ) + return $operator['vclocalename']; + else + return $operator['vccommonname']; +} + +function append_query($link,$pv) { + $infix = '?'; + if( strstr($link,$infix) !== FALSE ) + $infix = '&'; + return "$link$infix$pv"; +} + +function check_login($redirect=true) { + global $webimroot, $mysqlprefix; + if( !isset( $_SESSION[$mysqlprefix . 'operator'] ) ) { + if( isset($_COOKIE['webim_lite']) ) { + list($login,$pwd) = preg_split("/,/", $_COOKIE['webim_lite'], 2); + $op = operator_by_login($login); + if( $op && isset($pwd) && isset($op['vcpassword']) && md5($op['vcpassword']) == $pwd ) { + $_SESSION[$mysqlprefix . 'operator'] = $op; + return $op; + } + } + $requested = $_SERVER['PHP_SELF']; + if($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['QUERY_STRING']) { + $requested .= "?".$_SERVER['QUERY_STRING']; + } + if($redirect) { + $_SESSION['backpath'] = $requested; + header("Location: $webimroot/operator/login.php"); + exit; + } else { + return null; + } + } + return $_SESSION[$mysqlprefix . 'operator']; +} + +function get_logged_in() { + global $mysqlprefix; + return isset( $_SESSION[$mysqlprefix . 'operator'] ) ? $_SESSION[$mysqlprefix . 'operator'] : FALSE; +} + +function login_operator($operator,$remember) { + global $webimroot, $mysqlprefix; + $_SESSION[$mysqlprefix . 'operator'] = $operator; + if( $remember ) { + $value = $operator['vclogin'].",".md5($operator['vcpassword']); + setcookie('webim_lite', $value, time()+60*60*24*1000, "$webimroot/"); + + } else if( isset($_COOKIE['webim_lite']) ) { + setcookie('webim_lite', '', time() - 3600, "$webimroot/"); + } +} + +function logout_operator() { + global $webimroot, $mysqlprefix; + unset($_SESSION[$mysqlprefix . 'operator']); + unset($_SESSION['backpath']); + if( isset($_COOKIE['webim_lite']) ) { + setcookie('webim_lite', '', time() - 3600, "$webimroot/"); + } +} + +function setup_redirect_links($threadid,$token) { + global $page, $webimroot, $settings, $mysqlprefix; + loadsettings(); + $link = connect(); + + $operatorscount = db_rows_count($mysqlprefix . "chatoperator", array(), "", $link); + + $groupscount = 0; + if($settings['enablegroups'] == "1") { + $groups = array(); + foreach(get_groups($link, true) as $group) { + if($group['inumofagents'] == 0) { + continue; + } + $groups[] = $group; + } + $groupscount = count($groups); + } + + prepare_pagination(max($operatorscount,$groupscount),8); + $p = $page['pagination']; + $limit = $p['limit']; + + $operators = select_multi_assoc(db_build_select( + "operatorid, vclogin, vclocalename, vccommonname, istatus, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time", + $mysqlprefix . "chatoperator", array(), "order by vclogin $limit"), $link); + + $groups = array_slice($groups, $p['start'], $p['end']-$p['start']); + + mysql_close($link); + + $agent_list = ""; + $params = array('thread' => $threadid, 'token' => $token); + foreach($operators as $agent) { + $params['nextAgent'] = $agent['operatorid']; + $status = $agent['time'] < $settings['online_timeout'] + ? ($agent['istatus'] == 0 + ? getlocal("char.redirect.operator.online_suff") + : getlocal("char.redirect.operator.away_suff") + ) + : ""; + $agent_list .= "
  • ". + topage(get_operator_name($agent)). + " $status
  • "; + } + $page['redirectToAgent'] = $agent_list; + + $group_list = ""; + if($settings['enablegroups'] == "1") { + $params = array('thread' => $threadid, 'token' => $token); + foreach($groups as $group) { + $params['nextGroup'] = $group['groupid']; + $status = $group['ilastseen'] !== NULL && $group['ilastseen'] < $settings['online_timeout'] + ? getlocal("char.redirect.operator.online_suff") + : ($group['ilastseenaway'] !== NULL && $group['ilastseenaway'] < $settings['online_timeout'] + ? getlocal("char.redirect.operator.away_suff") + : ""); + $group_list .= "
  • ". + topage(get_group_name($group)). + " $status
  • "; + } + } + $page['redirectToGroup'] = $group_list; +} + +$permission_list = array(); + +function get_permission_list() { + global $permission_list, $permission_ids; + if(count($permission_list) == 0) { + foreach($permission_ids as $permid) { + $permission_list[] = array( + 'id' => $permid, + 'descr' => getlocal("permission.$permid") + ); + } + } + return $permission_list; +} + +function is_capable($perm,$operator) { + $permissions = $operator && isset($operator['iperm']) ? $operator['iperm'] : 0; + return $perm >= 0 && $perm < 32 && ($permissions & (1 << $perm)) != 0; +} + +function prepare_menu($operator,$hasright=true) { + global $page, $settings, $can_administrate; + $page['operator'] = topage(get_operator_name($operator)); + if($hasright) { + loadsettings(); + $page['showban'] = $settings['enableban'] == "1"; + $page['showgroups'] = $settings['enablegroups'] == "1"; + $page['showstat'] = $settings['enablestatistics'] == "1"; + $page['showadmin'] = is_capable($can_administrate, $operator); + $page['currentopid'] = $operator['operatorid']; + } +} + +function get_all_groups($link) { + global $mysqlprefix; + $query = "select " . $mysqlprefix . "chatgroup.groupid as groupid, vclocalname, vclocaldescription from " . $mysqlprefix . "chatgroup order by vclocalname"; + return select_multi_assoc($query, $link); +} + +function get_groups($link,$checkaway) { + global $mysqlprefix; + $query = "select " . $mysqlprefix . "chatgroup.groupid as groupid, vclocalname, vclocaldescription". + ", (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 order by vclocalname"; + return select_multi_assoc($query, $link); +} + +function get_operator_groupids($operatorid) { + global $mysqlprefix; + $link = connect(); + $query = "select groupid from " . $mysqlprefix . "chatgroupoperator where operatorid = $operatorid"; + $result = select_multi_assoc($query, $link); + mysql_close($link); + return $result; +} + +?> diff --git a/src/messenger/webim/locales/ar/properties b/src/messenger/webim/locales/ar/properties index f1a06f81..86225810 100755 --- a/src/messenger/webim/locales/ar/properties +++ b/src/messenger/webim/locales/ar/properties @@ -1,384 +1,384 @@ -encoding=utf-8 -output_charset=utf-8 -output_encoding=utf-8 -admin.content.client_agents=إضافة و حذف مقدمي الخدمة وإدارة صلاحياتهم. -admin.content.client_gen_button=إعداد كود HTML للدخول الدردشة. -admin.content.client_settings=تحديد الخيارات المؤثرة على شاشة المحادثة وسلوك النظام العام. -admin.content.description=الوظائف المتاحة لمقدمي الخدمة الموقع. +encoding=utf-8 +output_charset=utf-8 +output_encoding=utf-8 +admin.content.client_agents=إضافة و حذف مقدمي الخدمة وإدارة صلاحياتهم. +admin.content.client_gen_button=إعداد كود HTML للدخول الدردشة. +admin.content.client_settings=تحديد الخيارات المؤثرة على شاشة المحادثة وسلوك النظام العام. +admin.content.description=الوظائف المتاحة لمقدمي الخدمة الموقع. agent.not_logged_in=وقت الجلسة أنتهى ،الرجاء أعادة تسجيل الدخول. -app.descr=Mibew Messenger هو برنامج دعم مباشر مفتوج المصدر. -app.title=Mibew Messenger -ban.error.duplicate=العنوان المحدد مشغول , أنقر هنا إذا كنت ترغب بتحريره. -button.delete=حذف -button.enter=دخول +app.descr=Mibew Messenger هو برنامج دعم مباشر مفتوج المصدر. +app.title=Mibew Messenger +ban.error.duplicate=العنوان المحدد مشغول , أنقر هنا إذا كنت ترغب بتحريره. +button.delete=حذف +button.enter=دخول button.offline.bottom=اترك رسالة button.offline.top=مستشار الموقع button.offline=غير متصل button.online.bottom=إسأل سؤالك button.online.top=مستشار الموقع button.online=متصل -button.save=حفظ -button.search=بحث -canned.actions.del=إزالة -canned.actions.edit=تحرير -canned.actions=تعديل +button.save=حفظ +button.search=بحث +canned.actions.del=إزالة +canned.actions.edit=تحرير +canned.actions=تعديل canned.add=إضافة رسالة -canned.descr=تحرير الرسائل التي تكتبها كثيرا في المحادثة. -canned.group=للمجموعة: -canned.locale=للغة: -canned.title=الردود الجاهزة -cannededit.descr=>تحرير الرسالة الحالية. -cannededit.done=تم الحفظ -cannededit.message=الرسالة -cannededit.no_such=لا يوجد رسائل مشابهة -cannededit.title=تحرير الرسالة -cannednew.descr=إدراج رسالة جديدة. -cannednew.title=رسالة جديدة -char.redirect.operator.away_suff=(بعيد) -char.redirect.operator.online_suff=(على الخط) -chat.came.from=زائر جاء من الصفحة {0} -chat.client.changename=تغيير الاسم -chat.client.name=أنت -chat.client.spam.prefix=[مزعج]  -chat.client.visited.page=الزائر عبر إلى {0} -chat.default.username=زائر -chat.error_page.close=أغلق... -chat.error_page.head=حدث خطأ: -chat.error_page.title=خطأ -chat.mailthread.sent.close=أغلق... -chat.mailthread.sent.closewindow=إنقر على هذا الرابط لإغلاق النافذة -chat.mailthread.sent.content=سجل المحادثات المرسلة على العنوان {0} -chat.mailthread.sent.title=أرسل -chat.predefined_answers=مرحبا, كيف أستطيع مساعدتك?\nمرحبا بك معنا . كيف أستطيع تقديم الخدمة لك? -chat.redirect.back=عودة... -chat.redirect.cannot=لا يمكنك التحدث مع الزوار. -chat.redirect.choose=أختر: -chat.redirect.group=المجموعة: -chat.redirect.operator=مقدم خدمة: -chat.redirect.title=توجيه إلى
    مقدمة خدمة آخر -chat.redirected.close=إغلاق... -chat.redirected.closewindow=أنقر لإغلاق النافذة -chat.redirected.content=الزائر وضع في قائمة انتظار مقدم الخدمة {0}. -chat.redirected.group.content=الزائر وضع في قائمة انتظار المجموعة {0}. -chat.redirected.title=الزائر تم توجيهه لمقدم خدمة آخر -chat.status.operator.changed=مقدم الخدمة {0} تغيير مقدم الخدمة {1} +canned.descr=تحرير الرسائل التي تكتبها كثيرا في المحادثة. +canned.group=للمجموعة: +canned.locale=للغة: +canned.title=الردود الجاهزة +cannededit.descr=>تحرير الرسالة الحالية. +cannededit.done=تم الحفظ +cannededit.message=الرسالة +cannededit.no_such=لا يوجد رسائل مشابهة +cannededit.title=تحرير الرسالة +cannednew.descr=إدراج رسالة جديدة. +cannednew.title=رسالة جديدة +char.redirect.operator.away_suff=(بعيد) +char.redirect.operator.online_suff=(على الخط) +chat.came.from=زائر جاء من الصفحة {0} +chat.client.changename=تغيير الاسم +chat.client.name=أنت +chat.client.spam.prefix=[مزعج]  +chat.client.visited.page=الزائر عبر إلى {0} +chat.default.username=زائر +chat.error_page.close=أغلق... +chat.error_page.head=حدث خطأ: +chat.error_page.title=خطأ +chat.mailthread.sent.close=أغلق... +chat.mailthread.sent.closewindow=إنقر على هذا الرابط لإغلاق النافذة +chat.mailthread.sent.content=سجل المحادثات المرسلة على العنوان {0} +chat.mailthread.sent.title=أرسل +chat.predefined_answers=مرحبا, كيف أستطيع مساعدتك?\nمرحبا بك معنا . كيف أستطيع تقديم الخدمة لك? +chat.redirect.back=عودة... +chat.redirect.cannot=لا يمكنك التحدث مع الزوار. +chat.redirect.choose=أختر: +chat.redirect.group=المجموعة: +chat.redirect.operator=مقدم خدمة: +chat.redirect.title=توجيه إلى
    مقدمة خدمة آخر +chat.redirected.close=إغلاق... +chat.redirected.closewindow=أنقر لإغلاق النافذة +chat.redirected.content=الزائر وضع في قائمة انتظار مقدم الخدمة {0}. +chat.redirected.group.content=الزائر وضع في قائمة انتظار المجموعة {0}. +chat.redirected.title=الزائر تم توجيهه لمقدم خدمة آخر +chat.status.operator.changed=مقدم الخدمة {0} تغيير مقدم الخدمة {1} chat.status.operator.dead=مقدم الخدمة لديه مشاكل بالإتصال ، تم نقلك لصف الإنتظر ، نأسف لجعلك تنتظر. -chat.status.operator.joined=مقدم الخدمة {0} الآن متصل -chat.status.operator.left=مقدم الخدمة {0} غادر المحادثة -chat.status.operator.redirect=مقدم الخدمة {0} وجهك إلى مشغل آخر, من فضلك أنتظر قليلا -chat.status.operator.returned=مقدم الخدمة {0} عاد للمحادثة +chat.status.operator.joined=مقدم الخدمة {0} الآن متصل +chat.status.operator.left=مقدم الخدمة {0} غادر المحادثة +chat.status.operator.redirect=مقدم الخدمة {0} وجهك إلى مشغل آخر, من فضلك أنتظر قليلا +chat.status.operator.returned=مقدم الخدمة {0} عاد للمحادثة chat.status.user.changedname=الزائر {0} قام بتعديل ألاسم إلى: {1} -chat.status.user.dead=الزائر أغلق نافذة المحادثة -chat.status.user.left=الزائر {0} غادر المحدثة -chat.status.user.reopenedthread=الزائر عاود الإتصال من جديد -chat.thread.state_chatting_with_agent=في المحادثة -chat.thread.state_closed=تم الإغلاق -chat.thread.state_loading=جاري الحميل -chat.thread.state_wait=في الطابور -chat.thread.state_wait_for_another_agent=ينتظر مقدم الخدمة -chat.visitor.email=E-Mail: {0} -chat.visitor.info=Info: {0} -chat.wait=شكرا للتواصل معنا ، مقدم الخدمة سيكون معك قريبا ... -chat.window.chatting_with=أنت تتحدث مع: -chat.window.close_title=إنهاء المحادثة -chat.window.poweredby=بدعم من : -chat.window.poweredreftext=mibew.org -chat.window.predefined.select_answer=اختيار اجابة... -chat.window.product_name=Mibew Messenger -chat.window.send_message=ارسال رسالة -chat.window.send_message_short=ارسال ({0}) -chat.window.title.agent=Mibew Messenger -chat.window.title.user=Mibew Messenger -chat.window.toolbar.mail_history=إرسال سجل المحادثة بابريد الإلكتروني -chat.window.toolbar.redirect_user=توجيه الزائر إلى مقدم خدمة آخر -chat.window.toolbar.refresh=تحديث -clients.how_to=للإجابة على أحد الزوار ، قم بالنقر على أسمه من القائمة. -clients.intro=هذه الصفحة تعرض قائمة الزوار الذين ينتظرون الإجابة. -clients.no_clients=قائمة الزوار المنتظرين فارغة -clients.queue.chat=محادثة زائر -clients.queue.prio=طابر أفضلية الزوار -clients.queue.wait=ينتظر مقدم اخدمة من بداية الوقت -clients.title=قائمة الزوار المنتظرين -common.asterisk_explanation=* - حقل إلزامي -company.title=Mibew Messenger مجموعة -confirm.take.head=تغيير مقدم الخدمة +chat.status.user.dead=الزائر أغلق نافذة المحادثة +chat.status.user.left=الزائر {0} غادر المحدثة +chat.status.user.reopenedthread=الزائر عاود الإتصال من جديد +chat.thread.state_chatting_with_agent=في المحادثة +chat.thread.state_closed=تم الإغلاق +chat.thread.state_loading=جاري الحميل +chat.thread.state_wait=في الطابور +chat.thread.state_wait_for_another_agent=ينتظر مقدم الخدمة +chat.visitor.email=E-Mail: {0} +chat.visitor.info=Info: {0} +chat.wait=شكرا للتواصل معنا ، مقدم الخدمة سيكون معك قريبا ... +chat.window.chatting_with=أنت تتحدث مع: +chat.window.close_title=إنهاء المحادثة +chat.window.poweredby=بدعم من : +chat.window.poweredreftext=mibew.org +chat.window.predefined.select_answer=اختيار اجابة... +chat.window.product_name=Mibew Messenger +chat.window.send_message=ارسال رسالة +chat.window.send_message_short=ارسال ({0}) +chat.window.title.agent=Mibew Messenger +chat.window.title.user=Mibew Messenger +chat.window.toolbar.mail_history=إرسال سجل المحادثة بابريد الإلكتروني +chat.window.toolbar.redirect_user=توجيه الزائر إلى مقدم خدمة آخر +chat.window.toolbar.refresh=تحديث +clients.how_to=للإجابة على أحد الزوار ، قم بالنقر على أسمه من القائمة. +clients.intro=هذه الصفحة تعرض قائمة الزوار الذين ينتظرون الإجابة. +clients.no_clients=قائمة الزوار المنتظرين فارغة +clients.queue.chat=محادثة زائر +clients.queue.prio=طابر أفضلية الزوار +clients.queue.wait=ينتظر مقدم اخدمة من بداية الوقت +clients.title=قائمة الزوار المنتظرين +common.asterisk_explanation=* - حقل إلزامي +company.title=Mibew Messenger مجموعة +confirm.take.head=تغيير مقدم الخدمة confirm.take.message=الزائر {0} يتحادث مع مقدم الخدمة{1}.
    هل ترغب في بدأ المحادثة مع الزائر؟ -confirm.take.no=لا,أغلق هذه النافذة -confirm.take.yes=نعم , أنا متأكد -content.blocked=هنا تستطيع الحماية من الزوار المزعجين. -content.history=بحث سجل المحادثات. -content.logoff=تسجيل الخروج من النظام. -data.saved=تم حفظ التعديات -demo.chat.question=هناك الكثير من متصفحات الإنترنت ، بماذا توصيني ؟ -demo.chat.welcome=مرحبا, كيف أستطيع خدمتك ؟ -errors.captcha=الحروف التي أدخلتها لا تطابق الحروف المعروضة بالصورة. -errors.failed.uploading.file=خطأ في رفع الملف "{0}": {1}. -errors.file.move.error=خطأ أثناء نقل الملف -errors.file.size.exceeded=حجم الملف المرفوع أكبر من المسموح به -errors.footer= -errors.header=قم بتصحيح الأخطاء:
    +errors.header=قم بتصحيح الأخطاء: