format code

This commit is contained in:
Evgeny Gryaznov 2011-02-26 23:48:41 +01:00
parent 2bcffd5f4a
commit 03dec2afb2
53 changed files with 1874 additions and 1597 deletions

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<ADDITIONAL_INDENT_OPTIONS fileType="js">
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="jsp">
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="php">
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="sass">
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="sql">
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="xml">
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="yml">
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</ADDITIONAL_INDENT_OPTIONS>
</value>
</option>
</component>
</project>

View File

@ -99,7 +99,7 @@ $dbtables = array(
"blockedCount" => "int DEFAULT 0"
),
"${mysqlprefix}chatconfig" => array (
"${mysqlprefix}chatconfig" => array(
"id" => "INT NOT NULL auto_increment PRIMARY KEY",
"vckey" => "varchar(255)",
"vcvalue" => "varchar(255)",
@ -111,7 +111,7 @@ $dbtables = array(
"groupid" => "int references ${mysqlprefix}chatgroup(groupid)",
"vcvalue" => "varchar(1024) NOT NULL",
),
"${mysqlprefix}chatnotification" => array(
"id" => "INT NOT NULL auto_increment PRIMARY KEY",
"locale" => "varchar(8)",
@ -137,7 +137,8 @@ $dbtables_can_update = array(
"${mysqlprefix}chatnotification" => array(),
);
function show_install_err($text) {
function show_install_err($text)
{
global $page, $version, $errors, $webimroot;
$page = array(
'version' => $version,
@ -149,17 +150,18 @@ function show_install_err($text) {
exit;
}
function create_table($id,$link) {
function create_table($id, $link)
{
global $dbtables, $memtables, $dbencoding, $mysqlprefix;
if(!isset($dbtables[$id])) {
show_install_err("Unknown table: $id, ".mysql_error());
if (!isset($dbtables[$id])) {
show_install_err("Unknown table: $id, " . mysql_error());
}
$query =
"CREATE TABLE $id\n".
"(\n";
foreach( $dbtables[$id] as $k => $v ) {
"CREATE TABLE $id\n" .
"(\n";
foreach ($dbtables[$id] as $k => $v) {
$query .= " $k $v,\n";
}
@ -171,19 +173,20 @@ function create_table($id,$link) {
$query .= " TYPE=InnoDb";
}
mysql_query($query,$link) or show_install_err(' Query failed: '.mysql_error());
mysql_query($query, $link) or show_install_err(' Query failed: ' . mysql_error());
if( $id == "${mysqlprefix}chatoperator" ) {
if ($id == "${mysqlprefix}chatoperator") {
create_operator_("admin", "", "", "", "Administrator", "Administrator", 0, $link);
} else if( $id == "${mysqlprefix}chatrevision" ) {
perform_query("INSERT INTO ${mysqlprefix}chatrevision VALUES (1)",$link);
} else if ($id == "${mysqlprefix}chatrevision") {
perform_query("INSERT INTO ${mysqlprefix}chatrevision VALUES (1)", $link);
}
}
function get_tables($link) {
function get_tables($link)
{
global $mysqldb, $errors;
$result = mysql_query("SHOW TABLES FROM `$mysqldb`");
if( $result ) {
if ($result) {
$arr = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
$arr[] = $row[0];
@ -192,15 +195,16 @@ function get_tables($link) {
return $arr;
} else {
$errors[] = "Cannot get tables from database. Error: ".mysql_error();
$errors[] = "Cannot get tables from database. Error: " . mysql_error();
return false;
}
}
function get_columns($tablename,$link) {
function get_columns($tablename, $link)
{
global $errors;
$result = mysql_query("SHOW COLUMNS FROM $tablename");
if( $result ) {
if ($result) {
$arr = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
$arr[] = $row[0];
@ -209,7 +213,7 @@ function get_columns($tablename,$link) {
return $arr;
} else {
$errors[] = "Cannot get columns from table \"$tablename\". Error: ".mysql_error();
$errors[] = "Cannot get columns from table \"$tablename\". Error: " . mysql_error();
return false;
}
}

View File

@ -23,143 +23,144 @@ require_once('../libs/common.php');
require_once('../libs/operator.php');
require_once('dbinfo.php');
function runsql($query,$link) {
$res = mysql_query($query,$link)
or show_install_err(' Query failed: '.mysql_error());
function runsql($query, $link)
{
$res = mysql_query($query, $link)
or show_install_err(' Query failed: ' . mysql_error());
return $res;
}
$act = verifyparam( "act", "/^(silentcreateall|createdb|ct|dt|addcolumns)$/");
$act = verifyparam("act", "/^(silentcreateall|createdb|ct|dt|addcolumns)$/");
$link = @mysql_connect($mysqlhost,$mysqllogin ,$mysqlpass )
or show_install_err('Could not connect: ' . mysql_error());
$link = @mysql_connect($mysqlhost, $mysqllogin, $mysqlpass)
or show_install_err('Could not connect: ' . mysql_error());
if ($act == "silentcreateall") {
mysql_query("CREATE DATABASE $mysqldb",$link)
or show_install_err(' Query failed: '.mysql_error());
foreach($dbtables as $id) {
mysql_query("CREATE DATABASE $mysqldb", $link)
or show_install_err(' Query failed: ' . mysql_error());
foreach ($dbtables as $id) {
create_table($id, $link);
}
} else if($act == "createdb") {
mysql_query("CREATE DATABASE $mysqldb",$link)
or show_install_err(' Query failed: '.mysql_error());
}
} else if ($act == "createdb") {
mysql_query("CREATE DATABASE $mysqldb", $link)
or show_install_err(' Query failed: ' . mysql_error());
} else {
mysql_select_db($mysqldb,$link)
or show_install_err('Could not select database');
if( $force_charset_in_connection ) {
mysql_select_db($mysqldb, $link)
or show_install_err('Could not select database');
if ($force_charset_in_connection) {
mysql_query("SET character set $dbencoding", $link);
}
if( $act == "ct") {
if ($act == "ct") {
$curr_tables = get_tables($link);
if( $curr_tables === false) {
if ($curr_tables === false) {
show_install_err($errors[0]);
}
$tocreate = array_diff(array_keys($dbtables), $curr_tables);
foreach( $tocreate as $id) {
foreach ($tocreate as $id) {
create_table($id, $link);
}
} else if( $act == "dt") {
foreach( array_keys($dbtables) as $id) {
mysql_query("DROP TABLE IF EXISTS $id",$link)
or show_install_err(' Query failed: '.mysql_error());
} else if ($act == "dt") {
foreach (array_keys($dbtables) as $id) {
mysql_query("DROP TABLE IF EXISTS $id", $link)
or show_install_err(' Query failed: ' . mysql_error());
}
} else if( $act == "addcolumns") {
} else if ($act == "addcolumns") {
$absent = array();
foreach( $dbtables as $id => $columns) {
foreach ($dbtables as $id => $columns) {
$curr_columns = get_columns($id, $link);
if( $curr_columns === false ) {
if ($curr_columns === false) {
show_install_err($errors[0]);
}
$tocreate = array_diff(array_keys($columns), $curr_columns);
foreach($tocreate as $v) {
foreach ($tocreate as $v) {
$absent[] = "$id.$v";
}
}
if( in_array("${mysqlprefix}chatmessage.agentId", $absent) ) {
if (in_array("${mysqlprefix}chatmessage.agentId", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatmessage ADD agentId int NOT NULL DEFAULT 0 AFTER ikind", $link);
runsql("update ${mysqlprefix}chatmessage, ${mysqlprefix}chatoperator set agentId = operatorid where agentId = 0 AND ikind = 2 AND (vclocalename = tname OR vccommonname = tname)", $link);
}
if( in_array("${mysqlprefix}chatthread.agentId", $absent) ) {
if (in_array("${mysqlprefix}chatthread.agentId", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatthread ADD agentId int NOT NULL DEFAULT 0 AFTER agentName", $link);
runsql("update ${mysqlprefix}chatthread, ${mysqlprefix}chatoperator set agentId = operatorid where agentId = 0 AND (vclocalename = agentName OR vccommonname = agentName)", $link);
}
if( in_array("${mysqlprefix}chatthread.agentTyping", $absent) ) {
if (in_array("${mysqlprefix}chatthread.agentTyping", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatthread ADD agentTyping int DEFAULT 0", $link);
}
if( in_array("${mysqlprefix}chatthread.userTyping", $absent) ) {
if (in_array("${mysqlprefix}chatthread.userTyping", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatthread ADD userTyping int DEFAULT 0", $link);
}
if( in_array("${mysqlprefix}chatthread.messageCount", $absent) ) {
if (in_array("${mysqlprefix}chatthread.messageCount", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatthread ADD messageCount varchar(16)", $link);
runsql("ALTER TABLE ${mysqlprefix}chatmessage ADD INDEX idx_threadid_ikind (threadid, ikind)", $link);
runsql("UPDATE ${mysqlprefix}chatthread t SET t.messageCount = (SELECT COUNT(*) FROM ${mysqlprefix}chatmessage WHERE ${mysqlprefix}chatmessage.threadid = t.threadid AND ikind = 1)", $link);
runsql("ALTER TABLE ${mysqlprefix}chatmessage DROP INDEX idx_threadid_ikind", $link);
}
if( in_array("${mysqlprefix}chatthread.nextagent", $absent) ) {
if (in_array("${mysqlprefix}chatthread.nextagent", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatthread ADD nextagent int NOT NULL DEFAULT 0", $link);
}
if( in_array("${mysqlprefix}chatthread.shownmessageid", $absent) ) {
if (in_array("${mysqlprefix}chatthread.shownmessageid", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatthread ADD shownmessageid int NOT NULL DEFAULT 0", $link);
}
if( in_array("${mysqlprefix}chatthread.userid", $absent) ) {
if (in_array("${mysqlprefix}chatthread.userid", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatthread ADD userid varchar(255) DEFAULT \"\"", $link);
}
if( in_array("${mysqlprefix}chatoperator.iperm", $absent) ) {
if (in_array("${mysqlprefix}chatoperator.iperm", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD iperm int DEFAULT 65535", $link);
}
if( in_array("${mysqlprefix}chatoperator.istatus", $absent) ) {
if (in_array("${mysqlprefix}chatoperator.istatus", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD istatus int DEFAULT 0", $link);
}
if( in_array("${mysqlprefix}chatoperator.inotify", $absent) ) {
if (in_array("${mysqlprefix}chatoperator.inotify", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD inotify int DEFAULT 0", $link);
}
if( in_array("${mysqlprefix}chatoperator.vcavatar", $absent) ) {
if (in_array("${mysqlprefix}chatoperator.vcavatar", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD vcavatar varchar(255)", $link);
}
if( in_array("${mysqlprefix}chatoperator.vcjabbername", $absent) ) {
if (in_array("${mysqlprefix}chatoperator.vcjabbername", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD vcjabbername varchar(255)", $link);
}
if( in_array("${mysqlprefix}chatoperator.vcemail", $absent) ) {
if (in_array("${mysqlprefix}chatoperator.vcemail", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD vcemail varchar(64)", $link);
}
if( in_array("${mysqlprefix}chatoperator.dtmrestore", $absent) ) {
if (in_array("${mysqlprefix}chatoperator.dtmrestore", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD dtmrestore datetime DEFAULT 0", $link);
}
if( in_array("${mysqlprefix}chatoperator.vcrestoretoken", $absent) ) {
if (in_array("${mysqlprefix}chatoperator.vcrestoretoken", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatoperator ADD vcrestoretoken varchar(64)", $link);
}
if( in_array("${mysqlprefix}chatthread.groupid", $absent) ) {
if (in_array("${mysqlprefix}chatthread.groupid", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatthread ADD groupid int references ${mysqlprefix}chatgroup(groupid)", $link);
}
if( in_array("${mysqlprefix}chatthread.userAgent", $absent) ) {
if (in_array("${mysqlprefix}chatthread.userAgent", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatthread ADD userAgent varchar(255)", $link);
}
if( in_array("${mysqlprefix}chatgroup.vcemail", $absent) ) {
if (in_array("${mysqlprefix}chatgroup.vcemail", $absent)) {
runsql("ALTER TABLE ${mysqlprefix}chatgroup ADD vcemail varchar(64)", $link);
}
$res = mysql_query("select null from information_schema.statistics where table_name = '${mysqlprefix}chatmessage' and index_name = 'idx_agentid'", $link);
if($res && mysql_num_rows($res) == 0) {
if ($res && mysql_num_rows($res) == 0) {
runsql("ALTER TABLE ${mysqlprefix}chatmessage ADD INDEX idx_agentid (agentid)", $link);
}
}

View File

@ -33,35 +33,37 @@ $page['nextstep'] = false;
$page['nextnotice'] = false;
$errors = array();
function check_webimroot() {
function check_webimroot()
{
global $page, $errors, $webimroot;
$requestUri = $_SERVER["REQUEST_URI"];
if(!preg_match('/^(.*)\\/install(\\/[^\\/\\\\]*)?$/', $requestUri, $matches)) {
if (!preg_match('/^(.*)\\/install(\\/[^\\/\\\\]*)?$/', $requestUri, $matches)) {
$errors[] = "Cannot detect application location: $requestUri";
return false;
return false;
}
$applocation = $matches[1];
if($applocation != $webimroot) {
if ($applocation != $webimroot) {
$errors[] = "Please, check file ${applocation}/libs/config.php<br/>Wrong value of \$webimroot variable, should be \"$applocation\"";
$webimroot = $applocation;
return false;
return false;
}
$page['done'][] = getlocal2("install.0.app", array($applocation));
return true;
}
function check_connection() {
global $mysqlhost,$mysqllogin,$mysqlpass, $page, $errors, $webimroot;
$link = @mysql_connect($mysqlhost,$mysqllogin,$mysqlpass);
function check_connection()
{
global $mysqlhost, $mysqllogin, $mysqlpass, $page, $errors, $webimroot;
$link = @mysql_connect($mysqlhost, $mysqllogin, $mysqlpass);
if ($link) {
$result = mysql_query("SELECT VERSION() as c", $link);
if( $result && $ver = mysql_fetch_array($result, MYSQL_ASSOC)) {
if ($result && $ver = mysql_fetch_array($result, MYSQL_ASSOC)) {
$page['done'][] = getlocal2("install.1.connected", array($ver['c']));
mysql_free_result($result);
} else {
$errors[] = "Version of your SQL server is unknown. Please check. Error: ".mysql_error();
$errors[] = "Version of your SQL server is unknown. Please check. Error: " . mysql_error();
mysql_close($link);
return null;
}
@ -72,11 +74,12 @@ function check_connection() {
}
}
function check_database($link) {
function check_database($link)
{
global $mysqldb, $force_charset_in_connection, $dbencoding, $page, $webimroot;
if(mysql_select_db($mysqldb,$link)) {
if (mysql_select_db($mysqldb, $link)) {
$page['done'][] = getlocal2("install.2.db_exists", array($mysqldb));
if( $force_charset_in_connection ) {
if ($force_charset_in_connection) {
mysql_query("SET character set $dbencoding", $link);
}
return true;
@ -88,12 +91,13 @@ function check_database($link) {
return false;
}
function check_tables($link) {
function check_tables($link)
{
global $dbtables, $page, $webimroot;
$curr_tables = get_tables($link);
if( $curr_tables !== false) {
if ($curr_tables !== false) {
$tocreate = array_diff(array_keys($dbtables), $curr_tables);
if( count($tocreate) == 0 ) {
if (count($tocreate) == 0) {
$page['done'][] = getlocal("install.3.tables_exist");
return true;
} else {
@ -104,19 +108,20 @@ function check_tables($link) {
return false;
}
function check_columns($link) {
function check_columns($link)
{
global $dbtables, $dbtables_can_update, $errors, $page, $webimroot;
$need_to_create_columns = false;
foreach( $dbtables as $id => $columns) {
foreach ($dbtables as $id => $columns) {
$curr_columns = get_columns($id, $link);
if( $curr_columns === false ) {
if ($curr_columns === false) {
return false;
}
$tocreate = array_diff(array_keys($columns), $curr_columns);
if( count($tocreate) != 0 ) {
if (count($tocreate) != 0) {
$cannot_update = array_diff($tocreate, $dbtables_can_update[$id]);
if( count($cannot_update) != 0) {
if (count($cannot_update) != 0) {
$errors[] = "Key columns are absent in table `$id'. Unable to continue installation.";
$page['nextstep'] = getlocal("install.kill_tables");
$page['nextstepurl'] = "$webimroot/install/dbperform.php?act=dt";
@ -127,7 +132,7 @@ function check_columns($link) {
}
}
if( $need_to_create_columns ) {
if ($need_to_create_columns) {
$page['nextstep'] = getlocal("install.4.create");
$page['nextstepurl'] = "$webimroot/install/dbperform.php?act=addcolumns";
$page['nextnotice'] = getlocal("install.4.notice");
@ -138,29 +143,30 @@ function check_columns($link) {
return true;
}
function check_status() {
function check_status()
{
global $page, $webimroot, $settings, $dbversion;
if(!check_webimroot()) {
if (!check_webimroot()) {
return;
}
$link = check_connection();
if(!$link) {
if (!$link) {
return;
}
if( !check_database($link)) {
if (!check_database($link)) {
mysql_close($link);
return;
}
if( !check_tables($link)) {
if (!check_tables($link)) {
mysql_close($link);
return;
}
if( !check_columns($link)) {
if (!check_columns($link)) {
mysql_close($link);
return;
}
@ -168,9 +174,9 @@ function check_status() {
$page['done'][] = getlocal("installed.message");
$page['nextstep'] = getlocal("installed.login_link");
$page['nextnotice'] = getlocal2("installed.notice", array($webimroot."/install/"));
$page['nextnotice'] = getlocal2("installed.notice", array($webimroot . "/install/"));
$page['nextstepurl'] = "$webimroot/";
$page['show_small_login'] = true;
mysql_close($link);

View File

@ -15,54 +15,57 @@
Copyright 2006 WebCheatSheet.com
*/
function can_show_captcha() {
function can_show_captcha()
{
return extension_loaded("gd");
}
function gen_captcha() {
$md5_hash = md5(rand(0,9999));
return substr($md5_hash, 15, 5);
function gen_captcha()
{
$md5_hash = md5(rand(0, 9999));
return substr($md5_hash, 15, 5);
}
function draw_captcha($security_code) {
function draw_captcha($security_code)
{
//Set the image width and height
$width = 100;
$height = 25;
//Set the image width and height
$width = 100;
$height = 25;
//Create the image resource
$image = ImageCreate($width, $height);
if(function_exists('imageantialias')) {
//Create the image resource
$image = ImageCreate($width, $height);
if (function_exists('imageantialias')) {
imageantialias($image, true);
}
//We are making three colors, white, black and gray
$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 15, 50, 15);
$grey = ImageColorAllocate($image, 204, 204, 204);
$ellipsec = ImageColorAllocate($image, 0, 100, 60);
//Make the background black
ImageFill($image, 0, 0, $black);
imagefilledellipse($image, 56,15,30,17, $ellipsec);
//Add randomly generated string in white to the image
ImageString($image, 5, 30, 4, $security_code, $white);
//Throw in some lines to make it a little bit harder for any bots to break
ImageRectangle($image,0,0,$width-1,$height-1,$grey);
imageline($image, 0, $height/2+3, $width, $height/2+5, $grey);
imageline($image, $width/2-14, 0, $width/2+7, $height, $grey);
}
//Tell the browser what kind of file is come in
header("Content-Type: image/jpeg");
//We are making three colors, white, black and gray
$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 15, 50, 15);
$grey = ImageColorAllocate($image, 204, 204, 204);
$ellipsec = ImageColorAllocate($image, 0, 100, 60);
//Output the newly created image in jpeg format
ImageJpeg($image);
//Free up resources
ImageDestroy($image);
//Make the background black
ImageFill($image, 0, 0, $black);
imagefilledellipse($image, 56, 15, 30, 17, $ellipsec);
//Add randomly generated string in white to the image
ImageString($image, 5, 30, 4, $security_code, $white);
//Throw in some lines to make it a little bit harder for any bots to break
ImageRectangle($image, 0, 0, $width - 1, $height - 1, $grey);
imageline($image, 0, $height / 2 + 3, $width, $height / 2 + 5, $grey);
imageline($image, $width / 2 - 14, 0, $width / 2 + 7, $height, $grey);
//Tell the browser what kind of file is come in
header("Content-Type: image/jpeg");
//Output the newly created image in jpeg format
ImageJpeg($image);
//Free up resources
ImageDestroy($image);
}
?>

View File

@ -40,88 +40,97 @@ $kind_conn = 5;
$kind_events = 6;
$kind_avatar = 7;
$kind_to_string = array( $kind_user => "user", $kind_agent => "agent", $kind_for_agent => "hidden",
$kind_info => "inf", $kind_conn => "conn", $kind_events => "event", $kind_avatar => "avatar" );
$kind_to_string = array($kind_user => "user", $kind_agent => "agent", $kind_for_agent => "hidden",
$kind_info => "inf", $kind_conn => "conn", $kind_events => "event", $kind_avatar => "avatar");
function get_user_id() {
return (time() + microtime()).rand(0,99999999);
function get_user_id()
{
return (time() + microtime()) . rand(0, 99999999);
}
function next_token() {
return rand(99999,99999999);
function next_token()
{
return rand(99999, 99999999);
}
function next_revision($link) {
function next_revision($link)
{
global $mysqlprefix;
perform_query("update ${mysqlprefix}chatrevision set id=LAST_INSERT_ID(id+1)",$link);
perform_query("update ${mysqlprefix}chatrevision set id=LAST_INSERT_ID(id+1)", $link);
$val = mysql_insert_id($link);
return $val;
}
function post_message_($threadid,$kind,$message,$link,$from=null,$utime=null,$opid=null) {
function post_message_($threadid, $kind, $message, $link, $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)",
$threadid,
$kind,
mysql_real_escape_string($message,$link),
$from ? "'".mysql_real_escape_string($from,$link)."'" : "null",
$opid ? $opid : "0",
$utime ? "FROM_UNIXTIME($utime)" : "CURRENT_TIMESTAMP" );
$threadid,
$kind,
mysql_real_escape_string($message, $link),
$from ? "'" . mysql_real_escape_string($from, $link) . "'" : "null",
$opid ? $opid : "0",
$utime ? "FROM_UNIXTIME($utime)" : "CURRENT_TIMESTAMP");
perform_query($query,$link);
perform_query($query, $link);
return mysql_insert_id($link);
}
function post_message($threadid,$kind,$message,$from=null,$agentid=null) {
function post_message($threadid, $kind, $message, $from = null, $agentid = null)
{
$link = connect();
$id = post_message_($threadid,$kind,$message,$link,$from,null,$agentid);
$id = post_message_($threadid, $kind, $message, $link, $from, null, $agentid);
mysql_close($link);
return $id;
}
function prepare_html_message($text) {
function prepare_html_message($text)
{
$escaped_text = htmlspecialchars($text);
$text_w_links = preg_replace('/(http|ftp):\/\/\S*/','<a href="$0" target="_blank">$0</a>',$escaped_text);
$multiline = str_replace("\n","<br/>",$text_w_links);
$text_w_links = preg_replace('/(http|ftp):\/\/\S*/', '<a href="$0" target="_blank">$0</a>', $escaped_text);
$multiline = str_replace("\n", "<br/>", $text_w_links);
return $multiline;
}
function message_to_html($msg) {
function message_to_html($msg)
{
global $kind_to_string, $kind_avatar;
if( $msg['ikind'] == $kind_avatar ) return "";
$message = "<span>".date("H:i:s",$msg['created'])."</span> ";
if ($msg['ikind'] == $kind_avatar) return "";
$message = "<span>" . date("H:i:s", $msg['created']) . "</span> ";
$kind = $kind_to_string{$msg['ikind']};
if( $msg['tname'] )
$message.= "<span class='n$kind'>".htmlspecialchars($msg['tname'])."</span>: ";
$message.= "<span class='m$kind'>".prepare_html_message($msg['tmessage'])."</span><br/>";
if ($msg['tname'])
$message .= "<span class='n$kind'>" . htmlspecialchars($msg['tname']) . "</span>: ";
$message .= "<span class='m$kind'>" . prepare_html_message($msg['tmessage']) . "</span><br/>";
return $message;
}
function message_to_text($msg) {
function message_to_text($msg)
{
global $kind_user, $kind_agent, $kind_info, $kind_avatar;
if( $msg['ikind'] == $kind_avatar ) return "";
$message_time = date("H:i:s ",$msg['created']);
if($msg['ikind'] == $kind_user || $msg['ikind'] == $kind_agent) {
if( $msg['tname'] )
return $message_time.$msg['tname'].": ".$msg['tmessage']."\n";
if ($msg['ikind'] == $kind_avatar) return "";
$message_time = date("H:i:s ", $msg['created']);
if ($msg['ikind'] == $kind_user || $msg['ikind'] == $kind_agent) {
if ($msg['tname'])
return $message_time . $msg['tname'] . ": " . $msg['tmessage'] . "\n";
else
return $message_time.$msg['tmessage']."\n";
} else if($msg['ikind'] == $kind_info ) {
return $message_time.$msg['tmessage']."\n";
return $message_time . $msg['tmessage'] . "\n";
} else if ($msg['ikind'] == $kind_info) {
return $message_time . $msg['tmessage'] . "\n";
} else {
return $message_time."[".$msg['tmessage']."]\n";
return $message_time . "[" . $msg['tmessage'] . "]\n";
}
}
function get_messages($threadid,$meth,$isuser,&$lastid) {
function get_messages($threadid, $meth, $isuser, &$lastid)
{
global $kind_for_agent, $kind_avatar, $webim_encoding, $mysqlprefix;
$link = connect();
$query = sprintf(
"select messageid,ikind,unix_timestamp(dtmcreated) as created,tname,tmessage from ${mysqlprefix}chatmessage ".
"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" : "" );
$threadid, $lastid, $isuser ? "and ikind <> $kind_for_agent" : "");
$messages = array();
$msgs = select_multi_assoc($query, $link);
@ -130,10 +139,10 @@ function get_messages($threadid,$meth,$isuser,&$lastid) {
if ($meth == 'xml') {
switch ($msg['ikind']) {
case $kind_avatar:
$message = "<avatar>".myiconv($webim_encoding,"utf-8",escape_with_cdata($msg['tmessage']))."</avatar>";
$message = "<avatar>" . myiconv($webim_encoding, "utf-8", escape_with_cdata($msg['tmessage'])) . "</avatar>";
break;
default:
$message = "<message>".myiconv($webim_encoding,"utf-8",escape_with_cdata(message_to_html($msg)))."</message>\n";
$message = "<message>" . myiconv($webim_encoding, "utf-8", escape_with_cdata(message_to_html($msg))) . "</message>\n";
}
} else {
if ($msg['ikind'] != $kind_avatar) {
@ -142,7 +151,7 @@ function get_messages($threadid,$meth,$isuser,&$lastid) {
}
$messages[] = $message;
if( $msg['messageid'] > $lastid ) {
if ($msg['messageid'] > $lastid) {
$lastid = $msg['messageid'];
}
}
@ -151,97 +160,102 @@ function get_messages($threadid,$meth,$isuser,&$lastid) {
return $messages;
}
function print_thread_messages($thread, $token, $lastid, $isuser, $format, $agentid=null) {
function print_thread_messages($thread, $token, $lastid, $isuser, $format, $agentid = null)
{
global $webim_encoding, $webimroot, $connection_timeout, $settings;
$threadid = $thread['threadid'];
$istyping = abs($thread['current']-$thread[$isuser ? "lpagent" : "lpuser"]) < $connection_timeout
&& $thread[$isuser?"agentTyping":"userTyping"] == "1" ? "1" : "0";
$istyping = abs($thread['current'] - $thread[$isuser ? "lpagent" : "lpuser"]) < $connection_timeout
&& $thread[$isuser ? "agentTyping" : "userTyping"] == "1" ? "1" : "0";
if( $format == "xml" ) {
$output = get_messages($threadid,"xml",$isuser,$lastid);
if ($format == "xml") {
$output = get_messages($threadid, "xml", $isuser, $lastid);
start_xml_output();
print("<thread lastid=\"$lastid\" typing=\"".$istyping."\" canpost=\"".(($isuser || $agentid != null && $agentid == $thread['agentId']) ? 1 : 0)."\">");
foreach( $output as $msg ) {
print("<thread lastid=\"$lastid\" typing=\"" . $istyping . "\" canpost=\"" . (($isuser || $agentid != null && $agentid == $thread['agentId']) ? 1 : 0) . "\">");
foreach ($output as $msg) {
print $msg;
}
print("</thread>");
} else if( $format == "html" ) {
} else if ($format == "html") {
loadsettings();
$output = get_messages($threadid,"html",$isuser,$lastid);
$output = get_messages($threadid, "html", $isuser, $lastid);
start_html_output();
$url = "$webimroot/thread.php?act=refresh&amp;thread=$threadid&amp;token=$token&amp;html=on&amp;user=".($isuser?"true":"false");
$url = "$webimroot/thread.php?act=refresh&amp;thread=$threadid&amp;token=$token&amp;html=on&amp;user=" . ($isuser ? "true" : "false");
print(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">".
"<html>\n<head>\n".
"<link href=\"$webimroot/styles/default/chat.css\" rel=\"stylesheet\" type=\"text/css\">\n".
"<meta http-equiv=\"Refresh\" content=\"".$settings['updatefrequency_oldchat']."; URL=$url&amp;sn=11\">\n".
"<meta http-equiv=\"Pragma\" content=\"no-cache\">\n".
"<title>chat</title>\n".
"</head>\n".
"<body bgcolor='#FFFFFF' text='#000000' link='#C28400' vlink='#C28400' alink='#C28400' onload=\"if( location.hash != '#aend' ){location.hash='#aend';}\">".
"<table width='100%' cellspacing='0' cellpadding='0' border='0'><tr><td valign='top' class='message'>" );
foreach( $output as $msg ) {
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" .
"<html>\n<head>\n" .
"<link href=\"$webimroot/styles/default/chat.css\" rel=\"stylesheet\" type=\"text/css\">\n" .
"<meta http-equiv=\"Refresh\" content=\"" . $settings['updatefrequency_oldchat'] . "; URL=$url&amp;sn=11\">\n" .
"<meta http-equiv=\"Pragma\" content=\"no-cache\">\n" .
"<title>chat</title>\n" .
"</head>\n" .
"<body bgcolor='#FFFFFF' text='#000000' link='#C28400' vlink='#C28400' alink='#C28400' onload=\"if( location.hash != '#aend' ){location.hash='#aend';}\">" .
"<table width='100%' cellspacing='0' cellpadding='0' border='0'><tr><td valign='top' class='message'>");
foreach ($output as $msg) {
print $msg;
}
print(
"</td></tr></table><a name='aend'></a>".
"</body></html>" );
"</td></tr></table><a name='aend'></a>" .
"</body></html>");
}
}
function get_user_name($username, $addr, $id) {
function get_user_name($username, $addr, $id)
{
global $settings;
loadsettings();
return str_replace("{addr}", $addr,
str_replace("{id}", $id,
str_replace("{name}", $username, $settings['usernamepattern'])));
str_replace("{id}", $id,
str_replace("{name}", $username, $settings['usernamepattern'])));
}
function is_ajax_browser($browserid,$ver,$useragent) {
if( $browserid == "opera" )
function is_ajax_browser($browserid, $ver, $useragent)
{
if ($browserid == "opera")
return $ver >= 8.02;
if( $browserid == "safari" )
if ($browserid == "safari")
return $ver >= 125;
if( $browserid == "msie" )
if ($browserid == "msie")
return $ver >= 5.5 && !strstr($useragent, "powerpc");
if( $browserid == "netscape" )
if ($browserid == "netscape")
return $ver >= 7.1;
if( $browserid == "mozilla")
if ($browserid == "mozilla")
return $ver >= 1.4;
if( $browserid == "firefox")
if ($browserid == "firefox")
return $ver >= 1.0;
if( $browserid == "chrome")
if ($browserid == "chrome")
return true;
return false;
}
function is_old_browser($browserid,$ver) {
if( $browserid == "opera" )
function is_old_browser($browserid, $ver)
{
if ($browserid == "opera")
return $ver < 7.0;
if( $browserid == "msie" )
if ($browserid == "msie")
return $ver < 5.0;
return false;
}
$knownAgents = array("opera","msie","chrome","safari","firefox","netscape","mozilla");
$knownAgents = array("opera", "msie", "chrome", "safari", "firefox", "netscape", "mozilla");
function get_remote_level($useragent) {
function get_remote_level($useragent)
{
global $knownAgents;
$useragent = strtolower($useragent);
foreach( $knownAgents as $agent ) {
if( strstr($useragent,$agent) ) {
if( preg_match( "/".$agent."[\\s\/]?(\\d+(\\.\\d+)?)/", $useragent, $matches ) ) {
foreach ($knownAgents as $agent) {
if (strstr($useragent, $agent)) {
if (preg_match("/" . $agent . "[\\s\/]?(\\d+(\\.\\d+)?)/", $useragent, $matches)) {
$ver = $matches[1];
if( is_ajax_browser($agent,$ver,$useragent) )
if (is_ajax_browser($agent, $ver, $useragent))
return "ajaxed";
else if( is_old_browser($agent,$ver) )
else if (is_old_browser($agent, $ver))
return "old";
return "simple";
@ -251,10 +265,11 @@ function get_remote_level($useragent) {
return "simple";
}
function is_agent_opera95() {
function is_agent_opera95()
{
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
if( strstr($useragent,"opera") ) {
if( preg_match( "/opera[\\s\/]?(\\d+(\\.\\d+)?)/", $useragent, $matches ) ) {
if (strstr($useragent, "opera")) {
if (preg_match("/opera[\\s\/]?(\\d+(\\.\\d+)?)/", $useragent, $matches)) {
$ver = $matches[1];
if ($ver >= "9.5")
@ -264,17 +279,20 @@ function is_agent_opera95() {
return false;
}
function is_mac_opera() {
function is_mac_opera()
{
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
return strstr($useragent,"opera") && strstr($useragent, "mac");
return strstr($useragent, "opera") && strstr($useragent, "mac");
}
function needsFramesrc() {
function needsFramesrc()
{
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
return strstr($useragent,"safari/");
return strstr($useragent, "safari/");
}
function setup_logo() {
function setup_logo()
{
global $page, $settings;
loadsettings();
$page['ct.company.name'] = topage($settings['title']);
@ -282,7 +300,8 @@ function setup_logo() {
$page['webimHost'] = topage($settings['hosturl']);
}
function setup_leavemessage($name, $email, $message, $groupid, $groupname, $info, $referrer,$canshowcaptcha) {
function setup_leavemessage($name, $email, $message, $groupid, $groupname, $info, $referrer, $canshowcaptcha)
{
global $settings, $page;
$page['formname'] = topage($name);
$page['formemail'] = topage($email);
@ -294,44 +313,46 @@ function setup_leavemessage($name, $email, $message, $groupid, $groupname, $info
$page['referrer'] = urlencode(topage($referrer));
}
function setup_survey($name, $email, $groupid, $info, $referrer) {
function setup_survey($name, $email, $groupid, $info, $referrer)
{
global $settings, $page;
$page['formname'] = topage($name);
$page['formemail'] = topage($email);
$page['formgroupid'] = $groupid;
$page['forminfo'] = topage($info);
$page['referrer'] = urlencode(topage($referrer));
if($settings['enablegroups'] == '1' && $settings["surveyaskgroup"] == "1") {
if ($settings['enablegroups'] == '1' && $settings["surveyaskgroup"] == "1") {
$link = connect();
$allgroups = get_groups($link,false);
$allgroups = get_groups($link, false);
mysql_close($link);
$val = "";
foreach($allgroups as $k) {
foreach ($allgroups as $k) {
$groupname = $k['vclocalname'];
if($k['inumofagents'] == 0) {
if ($k['inumofagents'] == 0) {
continue;
}
if($k['ilastseen'] !== NULL && $k['ilastseen'] < $settings['online_timeout']) {
if(!$groupid) {
$groupid = $k['groupid']; // select first online group
if ($k['ilastseen'] !== NULL && $k['ilastseen'] < $settings['online_timeout']) {
if (!$groupid) {
$groupid = $k['groupid']; // select first online group
}
} else {
$groupname .= " (offline)";
}
$isselected = $k['groupid'] == $groupid;
$val .= "<option value=\"".$k['groupid']."\"".($isselected ? " selected=\"selected\"" : "").">$groupname</option>";
$val .= "<option value=\"" . $k['groupid'] . "\"" . ($isselected ? " selected=\"selected\"" : "") . ">$groupname</option>";
}
$page['groups'] = $val;
}
$page['showemail'] = $settings["surveyaskmail"] == "1" ? "1" : "";
$page['showmessage'] = $settings["surveyaskmessage"] == "1" ? "1" : "";
$page['showname'] = $settings['usercanchangename'] == "1" ? "1" : "";
}
function setup_chatview_for_user($thread,$level) {
function setup_chatview_for_user($thread, $level)
{
global $page, $webimroot, $settings;
loadsettings();
$page = array();
@ -349,19 +370,19 @@ function setup_chatview_for_user($thread,$level) {
$page['chat.title'] = topage($settings['chattitle']);
setup_logo();
if($settings['sendmessagekey'] == 'enter') {
if ($settings['sendmessagekey'] == 'enter') {
$page['send_shortcut'] = "Enter";
$page['ignorectrl'] = 1;
$page['ignorectrl'] = 1;
} else {
$page['send_shortcut'] = is_mac_opera() ? "&#8984;-Enter" : "Ctrl-Enter";
$page['ignorectrl'] = 0;
$page['ignorectrl'] = 0;
}
$params = "thread=".$thread['threadid']."&amp;token=".$thread['ltoken'];
$page['mailLink'] = "$webimroot/client.php?".$params."&amp;level=$level&amp;act=mailthread";
$params = "thread=" . $thread['threadid'] . "&amp;token=" . $thread['ltoken'];
$page['mailLink'] = "$webimroot/client.php?" . $params . "&amp;level=$level&amp;act=mailthread";
if($settings['enablessl'] == "1" && !is_secure_request()) {
$page['sslLink'] = get_app_location(true, true)."/client.php?".$params."&amp;level=$level";
if ($settings['enablessl'] == "1" && !is_secure_request()) {
$page['sslLink'] = get_app_location(true, true) . "/client.php?" . $params . "&amp;level=$level";
}
$page['isOpera95'] = is_agent_opera95();
@ -370,22 +391,23 @@ function setup_chatview_for_user($thread,$level) {
$page['frequency'] = $settings['updatefrequency_chat'];
}
function load_canned_messages($locale, $groupid) {
function load_canned_messages($locale, $groupid)
{
global $mysqlprefix;
$link = connect();
$result = select_multi_assoc(
"select vcvalue from ${mysqlprefix}chatresponses where locale = '".$locale."' ".
"AND (groupid is NULL OR groupid = 0) order by vcvalue", $link);
if(count($result) == 0) {
foreach(explode("\n", getstring_('chat.predefined_answers', $locale)) as $answer) {
"select vcvalue from ${mysqlprefix}chatresponses where locale = '" . $locale . "' " .
"AND (groupid is NULL OR groupid = 0) order by vcvalue", $link);
if (count($result) == 0) {
foreach (explode("\n", getstring_('chat.predefined_answers', $locale)) as $answer) {
$result[] = array('vcvalue' => $answer);
}
}
if($groupid) {
if ($groupid) {
$result2 = select_multi_assoc(
"select vcvalue from ${mysqlprefix}chatresponses where locale = '".$locale."' ".
"AND groupid = $groupid order by vcvalue", $link);
foreach($result as $r) {
"select vcvalue from ${mysqlprefix}chatresponses where locale = '" . $locale . "' " .
"AND groupid = $groupid order by vcvalue", $link);
foreach ($result as $r) {
$result2[] = $r;
}
$result = $result2;
@ -394,7 +416,8 @@ function load_canned_messages($locale, $groupid) {
return $result;
}
function setup_chatview_for_operator($thread,$operator) {
function setup_chatview_for_operator($thread, $operator)
{
global $page, $webimroot, $company_logo_link, $company_name, $settings;
loadsettings();
$page = array();
@ -403,76 +426,78 @@ function setup_chatview_for_operator($thread,$operator) {
$page['canpost'] = $thread['agentId'] == $operator['operatorid'];
$page['ct.chatThreadId'] = $thread['threadid'];
$page['ct.token'] = $thread['ltoken'];
$page['ct.user.name'] = htmlspecialchars(topage(get_user_name($thread['userName'],$thread['remote'],$thread['userid'])));
$page['ct.user.name'] = htmlspecialchars(topage(get_user_name($thread['userName'], $thread['remote'], $thread['userid'])));
$page['chat.title'] = topage($settings['chattitle']);
setup_logo();
if($settings['sendmessagekey'] == 'enter') {
if ($settings['sendmessagekey'] == 'enter') {
$page['send_shortcut'] = "Enter";
$page['ignorectrl'] = 1;
$page['ignorectrl'] = 1;
} else {
$page['send_shortcut'] = is_mac_opera() ? "&#8984;-Enter" : "Ctrl-Enter";
$page['ignorectrl'] = 0;
$page['ignorectrl'] = 0;
}
if($settings['enablessl'] == "1" && !is_secure_request()) {
$page['sslLink'] = get_app_location(true, true)."/operator/agent.php?thread=".$thread['threadid']."&amp;token=".$thread['ltoken'];
if ($settings['enablessl'] == "1" && !is_secure_request()) {
$page['sslLink'] = get_app_location(true, true) . "/operator/agent.php?thread=" . $thread['threadid'] . "&amp;token=" . $thread['ltoken'];
}
$page['isOpera95'] = is_agent_opera95();
$page['neediframesrc'] = needsFramesrc();
$page['historyParams'] = array("userid" => "".$thread['userid']);
$page['historyParamsLink'] = add_params($webimroot."/operator/userhistory.php",$page['historyParams']);
$page['historyParams'] = array("userid" => "" . $thread['userid']);
$page['historyParamsLink'] = add_params($webimroot . "/operator/userhistory.php", $page['historyParams']);
$predefinedres = "";
$canned_messages = load_canned_messages($thread['locale'], $thread['groupid']);
foreach($canned_messages as $answer) {
$predefinedres .= "<option>".htmlspecialchars(topage($answer['vcvalue']))."</option>";
foreach ($canned_messages as $answer) {
$predefinedres .= "<option>" . htmlspecialchars(topage($answer['vcvalue'])) . "</option>";
}
$page['predefinedAnswers'] = $predefinedres;
$params = "thread=".$thread['threadid']."&amp;token=".$thread['ltoken'];
$page['redirectLink'] = "$webimroot/operator/agent.php?".$params."&amp;act=redirect";
$params = "thread=" . $thread['threadid'] . "&amp;token=" . $thread['ltoken'];
$page['redirectLink'] = "$webimroot/operator/agent.php?" . $params . "&amp;act=redirect";
$page['namePostfix'] = "";
$page['frequency'] = $settings['updatefrequency_chat'];
}
function update_thread_access($threadid, $params, $link) {
function update_thread_access($threadid, $params, $link)
{
global $mysqlprefix;
$clause = "";
foreach( $params as $k => $v ) {
if( strlen($clause) > 0 )
foreach ($params as $k => $v) {
if (strlen($clause) > 0)
$clause .= ", ";
$clause .= $k."=".$v;
$clause .= $k . "=" . $v;
}
perform_query(
"update ${mysqlprefix}chatthread set $clause ".
"where threadid = ".$threadid,$link);
"update ${mysqlprefix}chatthread set $clause " .
"where threadid = " . $threadid, $link);
}
function ping_thread($thread, $isuser,$istyping) {
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") );
($isuser ? "userTyping" : "agentTyping") => ($istyping ? "1" : "0"));
$lastping = $thread[$isuser ? "lpagent" : "lpuser"];
$current = $thread['current'];
if( $thread['istate'] == $state_loading && $isuser) {
if ($thread['istate'] == $state_loading && $isuser) {
$params['istate'] = $state_queue;
commit_thread($thread['threadid'], $params, $link);
mysql_close($link);
return;
}
if( $lastping > 0 && abs($current-$lastping) > $connection_timeout ) {
if ($lastping > 0 && abs($current - $lastping) > $connection_timeout) {
$params[$isuser ? "lastpingagent" : "lastpinguser"] = "0";
if( !$isuser ) {
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);
} else if( $thread['istate'] == $state_chatting ) {
post_message_($thread['threadid'], $kind_for_agent, $message_to_post, $link, 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, $link, null, $lastping + $connection_timeout);
$params['istate'] = $state_waiting;
$params['nextagent'] = 0;
commit_thread($thread['threadid'], $params, $link);
@ -485,111 +510,120 @@ function ping_thread($thread, $isuser,$istyping) {
mysql_close($link);
}
function commit_thread($threadid,$params,$link) {
function commit_thread($threadid, $params, $link)
{
global $mysqlprefix;
$query = "update ${mysqlprefix}chatthread t set lrevision = ".next_revision($link).", dtmmodified = CURRENT_TIMESTAMP";
foreach( $params as $k => $v ) {
$query .= ", ".$k."=".$v;
$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;
$query .= " where threadid = " . $threadid;
perform_query($query,$link);
perform_query($query, $link);
}
function rename_user($thread, $newname) {
function rename_user($thread, $newname)
{
global $kind_events;
$link = connect();
commit_thread( $thread['threadid'], array('userName' => "'".mysql_real_escape_string($newname,$link)."'"), $link);
commit_thread($thread['threadid'], array('userName' => "'" . mysql_real_escape_string($newname, $link) . "'"), $link);
if( $thread['userName'] != $newname ) {
post_message_($thread['threadid'],$kind_events,
getstring2_("chat.status.user.changedname",array($thread['userName'], $newname), $thread['locale']), $link);
if ($thread['userName'] != $newname) {
post_message_($thread['threadid'], $kind_events,
getstring2_("chat.status.user.changedname", array($thread['userName'], $newname), $thread['locale']), $link);
}
mysql_close($link);
}
function close_thread($thread,$isuser) {
function close_thread($thread, $isuser)
{
global $state_closed, $kind_events, $mysqlprefix;
$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);
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);
}
$message = $isuser ? getstring2_("chat.status.user.left", array($thread['userName']), $thread['locale'])
: getstring2_("chat.status.operator.left", array($thread['agentName']), $thread['locale']);
$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);
mysql_close($link);
}
function thread_by_id_($id,$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".
",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 );
return select_one_row("select threadid,userName,agentName,agentId,lrevision,istate,ltoken,userTyping,agentTyping" .
",unix_timestamp(dtmmodified) as modified, unix_timestamp(dtmcreated) as created" .
",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) {
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 = '".mysql_real_escape_string($addr,$link)."'", $link );
return select_one_row("select banid,comment from ${mysqlprefix}chatban where unix_timestamp(dtmtill) > unix_timestamp(CURRENT_TIMESTAMP) AND address = '" . mysql_real_escape_string($addr, $link) . "'", $link);
}
function thread_by_id($id) {
function thread_by_id($id)
{
$link = connect();
$thread = thread_by_id_($id,$link);
$thread = thread_by_id_($id, $link);
mysql_close($link);
return $thread;
}
function create_thread($groupid,$username,$remoteHost,$referer,$lang,$userid,$userbrowser,$initialState,$link) {
function create_thread($groupid, $username, $remoteHost, $referer, $lang, $userid, $userbrowser, $initialState, $link)
{
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":"").")",
mysql_real_escape_string($username, $link),
mysql_real_escape_string($userid, $link),
next_token(),
mysql_real_escape_string($remoteHost, $link),
mysql_real_escape_string($referer, $link),
next_revision($link),
mysql_real_escape_string($lang, $link),
mysql_real_escape_string($userbrowser, $link));
"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" : "") . ")",
mysql_real_escape_string($username, $link),
mysql_real_escape_string($userid, $link),
next_token(),
mysql_real_escape_string($remoteHost, $link),
mysql_real_escape_string($referer, $link),
next_revision($link),
mysql_real_escape_string($lang, $link),
mysql_real_escape_string($userbrowser, $link));
perform_query($query,$link);
perform_query($query, $link);
$id = mysql_insert_id($link);
$newthread = thread_by_id_($id,$link);
$newthread = thread_by_id_($id, $link);
return $newthread;
}
function do_take_thread($threadid,$operatorId,$operatorName) {
function do_take_thread($threadid, $operatorId, $operatorName)
{
global $state_chatting;
$link = connect();
commit_thread( $threadid,
array("istate" => $state_chatting,
"nextagent" => 0,
"agentId" => $operatorId,
"agentName" => "'".mysql_real_escape_string($operatorName, $link)."'"), $link);
commit_thread($threadid,
array("istate" => $state_chatting,
"nextagent" => 0,
"agentId" => $operatorId,
"agentName" => "'" . mysql_real_escape_string($operatorName, $link) . "'"), $link);
mysql_close($link);
}
function reopen_thread($threadid) {
global $state_queue,$state_loading,$state_waiting,$state_chatting,$state_closed,$state_left,$kind_events;
function reopen_thread($threadid)
{
global $state_queue, $state_loading, $state_waiting, $state_chatting, $state_closed, $state_left, $kind_events;
$link = connect();
$thread = thread_by_id_($threadid, $link);
if( !$thread )
if (!$thread)
return FALSE;
if( $thread['istate'] == $state_closed || $thread['istate'] == $state_left )
if ($thread['istate'] == $state_closed || $thread['istate'] == $state_left)
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);
if ($thread['istate'] != $state_chatting && $thread['istate'] != $state_queue && $thread['istate'] != $state_loading) {
commit_thread($threadid,
array("istate" => $state_waiting, "nextagent" => 0), $link);
}
post_message_($thread['threadid'], $kind_events, getstring_("chat.status.user.reopenedthread", $thread['locale']), $link);
@ -597,7 +631,8 @@ function reopen_thread($threadid) {
return $thread;
}
function take_thread($thread,$operator) {
function take_thread($thread, $operator)
{
global $state_queue, $state_loading, $state_waiting, $state_chatting, $kind_events, $kind_avatar, $home_locale;
$state = $thread['istate'];
@ -606,11 +641,11 @@ function take_thread($thread,$operator) {
$operatorName = ($thread['locale'] == $home_locale) ? $operator['vclocalename'] : $operator['vccommonname'];
if( $state == $state_queue || $state == $state_waiting || $state == $state_loading) {
if ($state == $state_queue || $state == $state_waiting || $state == $state_loading) {
do_take_thread($threadid, $operator['operatorid'], $operatorName);
if( $state == $state_waiting ) {
if( $operatorName != $thread['agentName'] ) {
if ($state == $state_waiting) {
if ($operatorName != $thread['agentName']) {
$message_to_post = getstring2_("chat.status.operator.changed", array($operatorName, $thread['agentName']), $thread['locale']);
} else {
$message_to_post = getstring2_("chat.status.operator.returned", array($operatorName), $thread['locale']);
@ -618,8 +653,8 @@ function take_thread($thread,$operator) {
} else {
$message_to_post = getstring2_("chat.status.operator.joined", array($operatorName), $thread['locale']);
}
} else if( $state == $state_chatting ) {
if( $operator['operatorid'] != $thread['agentId'] ) {
} else if ($state == $state_chatting) {
if ($operator['operatorid'] != $thread['agentId']) {
do_take_thread($threadid, $operator['operatorid'], $operatorName);
$message_to_post = getstring2_("chat.status.operator.changed", array($operatorName, $thread['agentName']), $thread['locale']);
}
@ -627,36 +662,38 @@ function take_thread($thread,$operator) {
die("cannot take thread");
}
if( $message_to_post ) {
post_message($threadid,$kind_events,$message_to_post);
post_message($threadid,$kind_avatar,$operator['vcavatar'] ? $operator['vcavatar'] : "");
if ($message_to_post) {
post_message($threadid, $kind_events, $message_to_post);
post_message($threadid, $kind_avatar, $operator['vcavatar'] ? $operator['vcavatar'] : "");
}
}
function check_for_reassign($thread,$operator) {
function check_for_reassign($thread, $operator)
{
global $state_waiting, $home_locale, $kind_events, $kind_avatar;
$operatorName = ($thread['locale'] == $home_locale) ? $operator['vclocalename'] : $operator['vccommonname'];
if( $thread['istate'] == $state_waiting &&
( $thread['nextagent'] == $operator['operatorid']
|| $thread['agentId'] == $operator['operatorid'] )) {
if ($thread['istate'] == $state_waiting &&
($thread['nextagent'] == $operator['operatorid']
|| $thread['agentId'] == $operator['operatorid'])) {
do_take_thread($thread['threadid'], $operator['operatorid'], $operatorName);
if( $operatorName != $thread['agentName'] ) {
if ($operatorName != $thread['agentName']) {
$message_to_post = getstring2_("chat.status.operator.changed", array($operatorName, $thread['agentName']), $thread['locale']);
} else {
$message_to_post = getstring2_("chat.status.operator.returned", array($operatorName), $thread['locale']);
}
post_message($thread['threadid'],$kind_events,$message_to_post);
post_message($thread['threadid'],$kind_avatar,$operator['vcavatar'] ? $operator['vcavatar'] : "");
post_message($thread['threadid'], $kind_events, $message_to_post);
post_message($thread['threadid'], $kind_avatar, $operator['vcavatar'] ? $operator['vcavatar'] : "");
}
}
function notify_operators($thread,$firstmessage,$link) {
function notify_operators($thread, $firstmessage, $link)
{
global $settings, $mysqlprefix;
if($settings['enablejabber'] == 1) {
if ($settings['enablejabber'] == 1) {
$groupid = $thread['groupid'];
$query = "select ${mysqlprefix}chatoperator.operatorid as opid, inotify, vcjabbername, vcemail, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time from ${mysqlprefix}chatoperator";
if($groupid) {
if ($groupid) {
$query .= ", ${mysqlprefix}chatgroupoperator where groupid = $groupid and ${mysqlprefix}chatoperator.operatorid = ${mysqlprefix}chatgroupoperator.operatorid and istatus = 0";
} else {
$query .= " where istatus = 0";
@ -664,46 +701,48 @@ function notify_operators($thread,$firstmessage,$link) {
$query .= " and inotify = 1";
$result = select_multi_assoc($query, $link);
$text = getstring2_("notify.new.text", array(
get_app_location(true, $settings['enablessl'] == '1' && $settings['forcessl'] == '1')."/operator/agent.php?thread=".$thread['threadid'],
$thread['userName']
), $thread['locale']);
if($firstmessage) {
get_app_location(true, $settings['enablessl'] == '1' && $settings['forcessl'] == '1') . "/operator/agent.php?thread=" . $thread['threadid'],
$thread['userName']
), $thread['locale']);
if ($firstmessage) {
$text .= "\n$firstmessage";
}
foreach($result as $op) {
if($op['time'] < $settings['online_timeout'] && is_valid_email($op['vcjabbername'])) {
foreach ($result as $op) {
if ($op['time'] < $settings['online_timeout'] && is_valid_email($op['vcjabbername'])) {
webim_xmpp($op['vcjabbername'], getstring2("notify.new.subject", array($thread['userName'])), $text, $link);
}
}
}
}
}
function check_connections_from_remote($remote,$link) {
function check_connections_from_remote($remote, $link)
{
global $settings, $state_closed, $state_left, $mysqlprefix;
if($settings['max_connections_from_one_host'] == 0) {
if ($settings['max_connections_from_one_host'] == 0) {
return true;
}
$result = select_one_row(
"select count(*) as opened from ${mysqlprefix}chatthread ".
"where remote = '". mysql_real_escape_string($remote, $link)."' AND istate <> $state_closed AND istate <> $state_left", $link );
if($result && isset($result['opened'])) {
"select count(*) as opened from ${mysqlprefix}chatthread " .
"where remote = '" . mysql_real_escape_string($remote, $link) . "' AND istate <> $state_closed AND istate <> $state_left", $link);
if ($result && isset($result['opened'])) {
return $result['opened'] < $settings['max_connections_from_one_host'];
}
return true;
}
function visitor_from_request() {
function visitor_from_request()
{
global $namecookie, $webim_encoding, $usercookie;
$defaultName = getstring("chat.default.username");
$userName = $defaultName;
if( isset($_COOKIE[$namecookie]) ) {
$data = base64_decode(strtr($_COOKIE[$namecookie],'-_,', '+/='));
if( strlen($data) > 0 ) {
$userName = myiconv("utf-8",$webim_encoding,$data);
if (isset($_COOKIE[$namecookie])) {
$data = base64_decode(strtr($_COOKIE[$namecookie], '-_,', '+/='));
if (strlen($data) > 0) {
$userName = myiconv("utf-8", $webim_encoding, $data);
}
}
if($userName == $defaultName) {
if ($userName == $defaultName) {
$userName = getgetparam('name', $userName);
}
@ -711,16 +750,17 @@ function visitor_from_request() {
$userId = $_COOKIE[$usercookie];
} else {
$userId = get_user_id();
setcookie($usercookie, $userId, time()+60*60*24*365);
setcookie($usercookie, $userId, time() + 60 * 60 * 24 * 365);
}
return array( 'id' => $userId, 'name' => $userName );
return array('id' => $userId, 'name' => $userName);
}
function get_remote_host() {
function get_remote_host()
{
$extAddr = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) &&
$_SERVER['HTTP_X_FORWARDED_FOR'] != $_SERVER['REMOTE_ADDR']) {
$extAddr = $_SERVER['REMOTE_ADDR'].' ('.$_SERVER['HTTP_X_FORWARDED_FOR'].')';
$_SERVER['HTTP_X_FORWARDED_FOR'] != $_SERVER['REMOTE_ADDR']) {
$extAddr = $_SERVER['REMOTE_ADDR'] . ' (' . $_SERVER['HTTP_X_FORWARDED_FOR'] . ')';
}
return isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : $extAddr;
}

View File

@ -21,68 +21,73 @@
session_start();
require_once(dirname(__FILE__).'/converter.php');
require_once(dirname(__FILE__).'/config.php');
require_once(dirname(__FILE__) . '/converter.php');
require_once(dirname(__FILE__) . '/config.php');
$version = '1.6.4';
$jsver = "164";
function myiconv($in_enc, $out_enc, $string) {
function myiconv($in_enc, $out_enc, $string)
{
global $_utf8win1251, $_win1251utf8;
if($in_enc == $out_enc ) {
if ($in_enc == $out_enc) {
return $string;
}
if( function_exists('iconv') ) {
if (function_exists('iconv')) {
$converted = @iconv($in_enc, $out_enc, $string);
if( $converted !== FALSE ) {
if ($converted !== FALSE) {
return $converted;
}
}
if( $in_enc == "cp1251" && $out_enc == "utf-8" )
if ($in_enc == "cp1251" && $out_enc == "utf-8")
return strtr($string, $_win1251utf8);
if( $in_enc == "utf-8" && $out_enc == "cp1251" )
if ($in_enc == "utf-8" && $out_enc == "cp1251")
return strtr($string, $_utf8win1251);
return $string; // do not know how to convert
}
function verifyparam( $name, $regexp, $default = null ) {
if( isset( $_GET[$name] ) ) {
function verifyparam($name, $regexp, $default = null)
{
if (isset($_GET[$name])) {
$val = $_GET[$name];
if( preg_match( $regexp, $val ) )
if (preg_match($regexp, $val))
return $val;
} else if( isset( $_POST[$name] ) ) {
} else if (isset($_POST[$name])) {
$val = $_POST[$name];
if( preg_match( $regexp, $val ) )
if (preg_match($regexp, $val))
return $val;
} else {
if( isset( $default ) )
if (isset($default))
return $default;
}
echo "<html><head></head><body>Wrong parameter used or absent: ".$name."</body></html>";
echo "<html><head></head><body>Wrong parameter used or absent: " . $name . "</body></html>";
exit;
}
function debugexit_print( $var ) {
function debugexit_print($var)
{
echo "<html><body><pre>";
print_r( $var );
print_r($var);
echo "</pre></body></html>";
exit;
}
$locale_pattern = "/^[\w-]{2,5}$/";
function locale_exists($locale) {
return file_exists(dirname(__FILE__)."/../locales/$locale/properties");
function locale_exists($locale)
{
return file_exists(dirname(__FILE__) . "/../locales/$locale/properties");
}
function get_available_locales() {
function get_available_locales()
{
global $locale_pattern;
$list = array();
$folder = dirname(__FILE__)."/../locales";
if($handle = opendir($folder)) {
$folder = dirname(__FILE__) . "/../locales";
if ($handle = opendir($folder)) {
while (false !== ($file = readdir($handle))) {
if (preg_match($locale_pattern, $file) && $file != 'names' && is_dir("$folder/$file")) {
$list[] = $file;
@ -94,45 +99,47 @@ function get_available_locales() {
return $list;
}
function get_user_locale() {
function get_user_locale()
{
global $default_locale;
if( isset($_COOKIE['webim_locale']) ) {
if (isset($_COOKIE['webim_locale'])) {
$requested_lang = $_COOKIE['webim_locale'];
if( locale_exists($requested_lang) )
if (locale_exists($requested_lang))
return $requested_lang;
}
if( isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ) {
$requested_langs = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach( $requested_langs as $requested_lang) {
if( strlen($requested_lang) > 2 )
$requested_lang = substr($requested_lang,0,2);
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$requested_langs = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($requested_langs as $requested_lang) {
if (strlen($requested_lang) > 2)
$requested_lang = substr($requested_lang, 0, 2);
if( locale_exists($requested_lang) )
if (locale_exists($requested_lang))
return $requested_lang;
}
}
if( locale_exists($default_locale) )
if (locale_exists($default_locale))
return $default_locale;
return 'en';
}
function get_locale() {
function get_locale()
{
global $webimroot, $locale_pattern;
$locale = verifyparam("locale", $locale_pattern, "");
if( $locale && locale_exists($locale) ) {
if ($locale && locale_exists($locale)) {
$_SESSION['locale'] = $locale;
setcookie('webim_locale', $locale, time()+60*60*24*1000, "$webimroot/");
} else if( isset($_SESSION['locale']) ){
setcookie('webim_locale', $locale, time() + 60 * 60 * 24 * 1000, "$webimroot/");
} else if (isset($_SESSION['locale'])) {
$locale = $_SESSION['locale'];
}
if( !$locale || !locale_exists($locale) )
if (!$locale || !locale_exists($locale))
$locale = get_user_locale();
return $locale;
}
@ -141,42 +148,44 @@ $current_locale = get_locale();
$messages = array();
$output_encoding = array();
if(function_exists("date_default_timezone_set")) {
if (function_exists("date_default_timezone_set")) {
// TODO try to get timezone from config.php/session etc.
// autodetect timezone
@date_default_timezone_set(function_exists("date_default_timezone_get") ? @date_default_timezone_get() : "GMT");
}
function get_locale_links($href) {
function get_locale_links($href)
{
global $current_locale;
$localeLinks = array();
$allLocales = get_available_locales();
if(count($allLocales) < 2) {
if (count($allLocales) < 2) {
return null;
}
foreach($allLocales as $k) {
foreach ($allLocales as $k) {
$localeLinks[$k] = getlocal_($k, "names");
}
return $localeLinks;
}
function load_messages($locale) {
function load_messages($locale)
{
global $messages, $webim_encoding, $output_encoding;
$hash = array();
$current_encoding = $webim_encoding;
$fp = fopen(dirname(__FILE__)."/../locales/$locale/properties", "r");
$fp = fopen(dirname(__FILE__) . "/../locales/$locale/properties", "r");
while (!feof($fp)) {
$line = fgets($fp, 4096);
$keyval = preg_split("/=/", $line, 2 );
if( isset($keyval[1]) ) {
if($keyval[0] == 'encoding') {
$keyval = preg_split("/=/", $line, 2);
if (isset($keyval[1])) {
if ($keyval[0] == 'encoding') {
$current_encoding = trim($keyval[1]);
} else if($keyval[0] == 'output_encoding') {
} else if ($keyval[0] == 'output_encoding') {
$output_encoding[$locale] = trim($keyval[1]);
} else if( $current_encoding == $webim_encoding ) {
$hash[$keyval[0]] = str_replace("\\n", "\n",trim($keyval[1]));
} else if ($current_encoding == $webim_encoding) {
$hash[$keyval[0]] = str_replace("\\n", "\n", trim($keyval[1]));
} else {
$hash[$keyval[0]] = myiconv($current_encoding, $webim_encoding, str_replace("\\n", "\n",trim($keyval[1])));
$hash[$keyval[0]] = myiconv($current_encoding, $webim_encoding, str_replace("\\n", "\n", trim($keyval[1])));
}
}
}
@ -184,132 +193,146 @@ function load_messages($locale) {
$messages[$locale] = $hash;
}
function getoutputenc() {
function getoutputenc()
{
global $current_locale, $output_encoding, $webim_encoding, $messages;
if(!isset($messages[$current_locale]))
if (!isset($messages[$current_locale]))
load_messages($current_locale);
return isset($output_encoding[$current_locale]) ? $output_encoding[$current_locale] : $webim_encoding;
}
function getstring_($text,$locale) {
function getstring_($text, $locale)
{
global $messages;
if(!isset($messages[$locale]))
if (!isset($messages[$locale]))
load_messages($locale);
$localized = $messages[$locale];
if( isset($localized[$text]) )
if (isset($localized[$text]))
return $localized[$text];
if( $locale != 'en' ) {
return getstring_($text,'en');
if ($locale != 'en') {
return getstring_($text, 'en');
}
return "!".$text;
return "!" . $text;
}
function getstring($text) {
function getstring($text)
{
global $current_locale;
return getstring_($text,$current_locale);
return getstring_($text, $current_locale);
}
function getlocal($text) {
function getlocal($text)
{
global $current_locale, $webim_encoding;
return myiconv($webim_encoding,getoutputenc(), getstring_($text,$current_locale));
return myiconv($webim_encoding, getoutputenc(), getstring_($text, $current_locale));
}
function getlocal_($text,$locale) {
function getlocal_($text, $locale)
{
global $webim_encoding;
return myiconv($webim_encoding,getoutputenc(), getstring_($text,$locale));
return myiconv($webim_encoding, getoutputenc(), getstring_($text, $locale));
}
function topage($text) {
function topage($text)
{
global $webim_encoding;
return myiconv($webim_encoding,getoutputenc(), $text);
return myiconv($webim_encoding, getoutputenc(), $text);
}
function getstring2_($text,$params,$locale) {
$string = getstring_($text,$locale);
for( $i = 0; $i < count($params); $i++ ) {
$string = str_replace("{".$i."}", $params[$i], $string);
function getstring2_($text, $params, $locale)
{
$string = getstring_($text, $locale);
for ($i = 0; $i < count($params); $i++) {
$string = str_replace("{" . $i . "}", $params[$i], $string);
}
return $string;
}
function getstring2($text,$params) {
function getstring2($text, $params)
{
global $current_locale;
return getstring2_($text,$params,$current_locale);
return getstring2_($text, $params, $current_locale);
}
function getlocal2($text,$params) {
function getlocal2($text, $params)
{
global $current_locale, $webim_encoding;
$string = myiconv($webim_encoding,getoutputenc(), getstring_($text,$current_locale));
for( $i = 0; $i < count($params); $i++ ) {
$string = str_replace("{".$i."}", $params[$i], $string);
$string = myiconv($webim_encoding, getoutputenc(), getstring_($text, $current_locale));
for ($i = 0; $i < count($params); $i++) {
$string = str_replace("{" . $i . "}", $params[$i], $string);
}
return $string;
}
/* prepares for Javascript string */
function getlocalforJS($text,$params) {
function getlocalforJS($text, $params)
{
global $current_locale, $webim_encoding;
$string = myiconv($webim_encoding,getoutputenc(), getstring_($text,$current_locale));
$string = str_replace("\"", "\\\"", str_replace("\n", "\\n", $string));
for( $i = 0; $i < count($params); $i++ ) {
$string = str_replace("{".$i."}", $params[$i], $string);
$string = myiconv($webim_encoding, getoutputenc(), getstring_($text, $current_locale));
$string = str_replace("\"", "\\\"", str_replace("\n", "\\n", $string));
for ($i = 0; $i < count($params); $i++) {
$string = str_replace("{" . $i . "}", $params[$i], $string);
}
return $string;
}
/* ajax server actions use utf-8 */
function getrawparam( $name ) {
function getrawparam($name)
{
global $webim_encoding;
if( isset($_POST[$name]) ) {
$value = myiconv("utf-8",$webim_encoding,$_POST[$name]);
if (isset($_POST[$name])) {
$value = myiconv("utf-8", $webim_encoding, $_POST[$name]);
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
return $value;
}
die("no ".$name." parameter");
die("no " . $name . " parameter");
}
/* form processors use current Output encoding */
function getparam( $name ) {
function getparam($name)
{
global $webim_encoding;
if( isset($_POST[$name]) ) {
if (isset($_POST[$name])) {
$value = myiconv(getoutputenc(), $webim_encoding, $_POST[$name]);
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
return $value;
}
die("no ".$name." parameter");
die("no " . $name . " parameter");
}
function unicode_urldecode($url) {
preg_match_all('/%u([[:alnum:]]{4})/', $url, $a);
function unicode_urldecode($url)
{
preg_match_all('/%u([[:alnum:]]{4})/', $url, $a);
foreach ($a[1] as $uniord) {
$dec = hexdec($uniord);
$utf = '';
foreach ($a[1] as $uniord) {
$dec = hexdec($uniord);
$utf = '';
if ($dec < 128) {
$utf = chr($dec);
} else if ($dec < 2048) {
$utf = chr(192 + (($dec - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
} else {
$utf = chr(224 + (($dec - ($dec % 4096)) / 4096));
$utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
$url = str_replace('%u'.$uniord, $utf, $url);
}
return urldecode($url);
if ($dec < 128) {
$utf = chr($dec);
} else if ($dec < 2048) {
$utf = chr(192 + (($dec - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
} else {
$utf = chr(224 + (($dec - ($dec % 4096)) / 4096));
$utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
$url = str_replace('%u' . $uniord, $utf, $url);
}
return urldecode($url);
}
function getgetparam($name,$default='') {
function getgetparam($name, $default = '')
{
global $webim_encoding;
if( !isset($_GET[$name]) || !$_GET[$name] ) {
if (!isset($_GET[$name]) || !$_GET[$name]) {
return $default;
}
$value = myiconv("utf-8", $webim_encoding, unicode_urldecode($_GET[$name]));
@ -319,36 +342,40 @@ function getgetparam($name,$default='') {
return $value;
}
function connect() {
function connect()
{
global $mysqlhost, $mysqllogin, $mysqlpass, $mysqldb, $dbencoding, $force_charset_in_connection;
if(!extension_loaded("mysql")) {
if (!extension_loaded("mysql")) {
die('Mysql extension is not loaded');
}
$link = @mysql_connect($mysqlhost,$mysqllogin ,$mysqlpass )
or die('Could not connect: ' . mysql_error());
mysql_select_db($mysqldb,$link) or die('Could not select database');
if( $force_charset_in_connection ) {
$link = @mysql_connect($mysqlhost, $mysqllogin, $mysqlpass)
or die('Could not connect: ' . mysql_error());
mysql_select_db($mysqldb, $link) or die('Could not select database');
if ($force_charset_in_connection) {
mysql_query("SET NAMES '$dbencoding'", $link);
}
return $link;
}
function perform_query($query,$link) {
mysql_query($query,$link)
or die(' Query failed: '.mysql_error()/*.": ".$query*/);
function perform_query($query, $link)
{
mysql_query($query, $link)
or die(' Query failed: ' . mysql_error() /*.": ".$query*/);
}
function select_one_row($query,$link) {
$result = mysql_query($query,$link) or die(' Query failed: ' .
mysql_error().": ".$query);
function select_one_row($query, $link)
{
$result = mysql_query($query, $link) or die(' Query failed: ' .
mysql_error() . ": " . $query);
$line = mysql_fetch_array($result, MYSQL_ASSOC);
mysql_free_result($result);
return $line;
}
function select_multi_assoc($query, $link) {
$sqlresult = mysql_query($query,$link) or die(' Query failed: ' .
mysql_error().": ".$query);
function select_multi_assoc($query, $link)
{
$sqlresult = mysql_query($query, $link) or die(' Query failed: ' .
mysql_error() . ": " . $query);
$result = array();
while ($row = mysql_fetch_array($sqlresult, MYSQL_ASSOC)) {
@ -358,21 +385,24 @@ function select_multi_assoc($query, $link) {
return $result;
}
function db_build_select($fields, $table, $conditions, $orderandgroup) {
$condition = count($conditions) > 0 ? " where ".implode(" and ", $conditions) : "";
if($orderandgroup) $orderandgroup = " ".$orderandgroup;
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 = mysql_query(db_build_select("count(".($countfields ? $countfields : "*").")", $table, $conditions, ""),$link)
or die(' Count query failed: '.mysql_error());
function db_rows_count($table, $conditions, $countfields, $link)
{
$result = mysql_query(db_build_select("count(" . ($countfields ? $countfields : "*") . ")", $table, $conditions, ""), $link)
or die(' Count query failed: ' . mysql_error());
$line = mysql_fetch_array($result, MYSQL_NUM);
mysql_free_result($result);
return $line[0];
}
function start_xml_output() {
function start_xml_output()
{
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
@ -380,173 +410,196 @@ function start_xml_output() {
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
}
function start_html_output() {
function start_html_output()
{
$charset = getstring("output_charset");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: text/html".(isset($charset)?"; charset=".$charset:""));
header("Content-type: text/html" . (isset($charset) ? "; charset=" . $charset : ""));
}
function escape_with_cdata($text) {
return "<![CDATA[" . str_replace("]]>", "]]>]]&gt;<![CDATA[",$text) . "]]>";
function escape_with_cdata($text)
{
return "<![CDATA[" . str_replace("]]>", "]]>]]&gt;<![CDATA[", $text) . "]]>";
}
function form_value($key) {
function form_value($key)
{
global $page;
if( isset($page) && isset($page["form$key"]) )
if (isset($page) && isset($page["form$key"]))
return htmlspecialchars($page["form$key"]);
return "";
}
function form_value_cb($key) {
function form_value_cb($key)
{
global $page;
if( isset($page) && isset($page["form$key"]) )
if (isset($page) && isset($page["form$key"]))
return $page["form$key"] === true;
return false;
}
function form_value_mb($key,$id) {
function form_value_mb($key, $id)
{
global $page;
if( isset($page) && isset($page["form$key"]) && is_array($page["form$key"]) ) {
if (isset($page) && isset($page["form$key"]) && is_array($page["form$key"])) {
return in_array($id, $page["form$key"]);
}
return false;
}
function no_field($key) {
return getlocal2("errors.required",array(getlocal($key)));
function no_field($key)
{
return getlocal2("errors.required", array(getlocal($key)));
}
function failed_uploading_file($filename, $key) {
function failed_uploading_file($filename, $key)
{
return getlocal2("errors.failed.uploading.file",
array($filename, getlocal($key)));
array($filename, getlocal($key)));
}
function wrong_field($key) {
return getlocal2("errors.wrong_field",array(getlocal($key)));
function wrong_field($key)
{
return getlocal2("errors.wrong_field", array(getlocal($key)));
}
function get_popup($href,$jshref,$message,$title,$wndName,$options) {
if(!$jshref) { $jshref = "'$href'"; }
return "<a href=\"$href\" target=\"_blank\" ".($title?"title=\"$title\" ":"")."onclick=\"if(navigator.userAgent.toLowerCase().indexOf('opera') != -1 &amp;&amp; window.event.preventDefault) window.event.preventDefault();this.newWindow = window.open($jshref, '$wndName', '$options');this.newWindow.focus();this.newWindow.opener=window;return false;\">$message</a>";
function get_popup($href, $jshref, $message, $title, $wndName, $options)
{
if (!$jshref) {
$jshref = "'$href'";
}
return "<a href=\"$href\" target=\"_blank\" " . ($title ? "title=\"$title\" " : "") . "onclick=\"if(navigator.userAgent.toLowerCase().indexOf('opera') != -1 &amp;&amp; window.event.preventDefault) window.event.preventDefault();this.newWindow = window.open($jshref, '$wndName', '$options');this.newWindow.focus();this.newWindow.opener=window;return false;\">$message</a>";
}
function get_image($href,$width,$height) {
if( $width != 0 && $height != 0 )
function get_image($href, $width, $height)
{
if ($width != 0 && $height != 0)
return "<img src=\"$href\" border=\"0\" width=\"$width\" height=\"$height\" alt=\"\"/>";
return "<img src=\"$href\" border=\"0\" alt=\"\"/>";
}
function get_gifimage_size($filename) {
if( function_exists('gd_info')) {
function get_gifimage_size($filename)
{
if (function_exists('gd_info')) {
$info = gd_info();
if( isset($info['GIF Read Support']) && $info['GIF Read Support'] ) {
if (isset($info['GIF Read Support']) && $info['GIF Read Support']) {
$img = @imagecreatefromgif($filename);
if($img) {
if ($img) {
$height = imagesy($img);
$width = imagesx($img);
imagedestroy($img);
return array($width,$height);
return array($width, $height);
}
}
}
return array(0,0);
return array(0, 0);
}
function add_params($servlet, $params) {
function add_params($servlet, $params)
{
$infix = '?';
if( strstr($servlet,$infix) !== FALSE )
if (strstr($servlet, $infix) !== FALSE)
$infix = '&amp;';
foreach($params as $k => $v) {
$servlet .= $infix.$k."=".$v;
foreach ($params as $k => $v) {
$servlet .= $infix . $k . "=" . $v;
$infix = '&amp;';
}
return $servlet;
}
function div($a,$b) {
return ($a-($a % $b)) / $b;
function div($a, $b)
{
return ($a - ($a % $b)) / $b;
}
function date_diff_to_text($seconds) {
$minutes = div($seconds,60);
function date_diff_to_text($seconds)
{
$minutes = div($seconds, 60);
$seconds = $seconds % 60;
if( $minutes < 60 ) {
return sprintf("%02d:%02d",$minutes, $seconds);
if ($minutes < 60) {
return sprintf("%02d:%02d", $minutes, $seconds);
} else {
$hours = div($minutes,60);
$hours = div($minutes, 60);
$minutes = $minutes % 60;
return sprintf("%02d:%02d:%02d",$hours, $minutes, $seconds);
return sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);
}
}
function is_valid_email($email) {
function is_valid_email($email)
{
return preg_match("/^[^@]+@[^\.]+(\.[^\.]+)*$/", $email);
}
function get_app_location($showhost,$issecure) {
function get_app_location($showhost, $issecure)
{
global $webimroot;
if( $showhost ) {
return ($issecure?"https://":"http://").$_SERVER['HTTP_HOST'].$webimroot;
if ($showhost) {
return ($issecure ? "https://" : "http://") . $_SERVER['HTTP_HOST'] . $webimroot;
} else {
return $webimroot;
}
}
function is_secure_request() {
function is_secure_request()
{
return
isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443'
|| isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on"
|| isset($_SERVER["HTTP_HTTPS"]) && $_SERVER["HTTP_HTTPS"] == "on";
isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443'
|| isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on"
|| isset($_SERVER["HTTP_HTTPS"]) && $_SERVER["HTTP_HTTPS"] == "on";
}
function get_month_selection($fromtime,$totime) {
function get_month_selection($fromtime, $totime)
{
$start = getdate($fromtime);
$month = $start['mon'];
$year = $start['year'];
$result = array();
do {
$current = mktime(0,0,0,$month,1,$year);
$result[date("m.y",$current)] = strftime("%B, %Y",$current);
$current = mktime(0, 0, 0, $month, 1, $year);
$result[date("m.y", $current)] = strftime("%B, %Y", $current);
$month++;
if( $month > 12 ) {
if ($month > 12) {
$month = 1;
$year++;
}
} while( $current < $totime );
} while ($current < $totime);
return $result;
}
function get_form_date($day,$month) {
if( preg_match('/^(\d{2}).(\d{2})$/', $month, $matches)) {
return mktime(0,0,0,$matches[1],$day,$matches[2]);
function get_form_date($day, $month)
{
if (preg_match('/^(\d{2}).(\d{2})$/', $month, $matches)) {
return mktime(0, 0, 0, $matches[1], $day, $matches[2]);
}
return 0;
}
function set_form_date($utime,$prefix) {
function set_form_date($utime, $prefix)
{
global $page;
$page["form${prefix}day"] = date("d", $utime);
$page["form${prefix}month"] = date("m.y", $utime);
}
function date_to_text($unixtime) {
if ($unixtime < 60*60*24*30)
function date_to_text($unixtime)
{
if ($unixtime < 60 * 60 * 24 * 30)
return getlocal("time.never");
$then = getdate($unixtime);
$now = getdate();
if ($then['yday'] == $now['yday'] && $then['year'] == $now['year']) {
$date_format = getlocal("time.today.at");
} else if (($then['yday']+1) == $now['yday'] && $then['year'] == $now['year']) {
} else if (($then['yday'] + 1) == $now['yday'] && $then['year'] == $now['year']) {
$date_format = getlocal("time.yesterday.at");
} else {
$date_format = getlocal("time.dateformat");
}
return strftime($date_format." ".getlocal("time.timeformat"), $unixtime);
return strftime($date_format . " " . getlocal("time.timeformat"), $unixtime);
}
$dbversion = '1.6.3';
@ -566,26 +619,26 @@ $settings = array(
'max_uploaded_file_size' => 100000,
'max_connections_from_one_host' => 10,
'email' => '', /* inbox for left messages */
'email' => '', /* inbox for left messages */
'left_messages_locale' => $home_locale,
'sendmessagekey' => 'center',
'enableban' => '0',
'enablessl' => '0',
'forcessl' => '0',
'forcessl' => '0',
'usercanchangename' => '1',
'enablegroups' => '0',
'enablestatistics' => '1',
'enablejabber' => '0',
'enablepresurvey' => '1',
'surveyaskmail' => '0',
'surveyaskgroup' => '1',
'surveyaskmessage' => '0',
'surveyaskmail' => '0',
'surveyaskgroup' => '1',
'surveyaskmessage' => '0',
'enablepopupnotification' => '0',
'showonlineoperators' => '0',
'enablecaptcha' => '0',
'online_timeout' => 30, /* Timeout (in seconds) when online operator becomes offline */
'online_timeout' => 30, /* Timeout (in seconds) when online operator becomes offline */
'updatefrequency_operator' => 2,
'updatefrequency_chat' => 2,
'updatefrequency_oldchat' => 7,
@ -593,14 +646,15 @@ $settings = array(
$settingsloaded = false;
$settings_in_db = array();
function loadsettings_($link) {
function loadsettings_($link)
{
global $settingsloaded, $settings_in_db, $settings, $mysqlprefix;
if($settingsloaded) {
if ($settingsloaded) {
return;
}
$settingsloaded = true;
$sqlresult = mysql_query("select vckey,vcvalue from ${mysqlprefix}chatconfig", $link) or die(' Query failed: '.mysql_error($link));
$sqlresult = mysql_query("select vckey,vcvalue from ${mysqlprefix}chatconfig", $link) or die(' Query failed: ' . mysql_error($link));
while ($row = mysql_fetch_array($sqlresult, MYSQL_ASSOC)) {
$name = $row['vckey'];
@ -610,28 +664,31 @@ function loadsettings_($link) {
mysql_free_result($sqlresult);
}
function loadsettings() {
function loadsettings()
{
global $settingsloaded;
if(!$settingsloaded) {
if (!$settingsloaded) {
$link = connect();
loadsettings_($link);
mysql_close($link);
}
}
function getchatstyle() {
function getchatstyle()
{
global $settings;
$chatstyle = verifyparam( "style", "/^\w+$/", "");
if($chatstyle) {
$chatstyle = verifyparam("style", "/^\w+$/", "");
if ($chatstyle) {
return $chatstyle;
}
loadsettings();
return $settings['chatstyle'];
}
function jspath() {
function jspath()
{
global $jsver;
return "js/$jsver";
return "js/$jsver";
}
?>

View File

@ -50,7 +50,7 @@ $mail_encoding = "utf-8";
/*
* Locales
*/
$home_locale = "en"; /* native name will be used in this locale */
$default_locale = "en"; /* if user does not provide known lang */
$home_locale = "en"; /* native name will be used in this locale */
$default_locale = "en"; /* if user does not provide known lang */
?>

View File

@ -20,36 +20,36 @@
*/
$_utf8win1251 = array(
"\xD0\x90"=>"\xC0","\xD0\x91"=>"\xC1","\xD0\x92"=>"\xC2","\xD0\x93"=>"\xC3","\xD0\x94"=>"\xC4",
"\xD0\x95"=>"\xC5","\xD0\x81"=>"\xA8","\xD0\x96"=>"\xC6","\xD0\x97"=>"\xC7","\xD0\x98"=>"\xC8",
"\xD0\x99"=>"\xC9","\xD0\x9A"=>"\xCA","\xD0\x9B"=>"\xCB","\xD0\x9C"=>"\xCC","\xD0\x9D"=>"\xCD",
"\xD0\x9E"=>"\xCE","\xD0\x9F"=>"\xCF","\xD0\xA0"=>"\xD0","\xD0\xA1"=>"\xD1","\xD0\xA2"=>"\xD2",
"\xD0\xA3"=>"\xD3","\xD0\xA4"=>"\xD4","\xD0\xA5"=>"\xD5","\xD0\xA6"=>"\xD6","\xD0\xA7"=>"\xD7",
"\xD0\xA8"=>"\xD8","\xD0\xA9"=>"\xD9","\xD0\xAA"=>"\xDA","\xD0\xAB"=>"\xDB","\xD0\xAC"=>"\xDC",
"\xD0\xAD"=>"\xDD","\xD0\xAE"=>"\xDE","\xD0\xAF"=>"\xDF","\xD0\x87"=>"\xAF","\xD0\x86"=>"\xB2",
"\xD0\x84"=>"\xAA","\xD0\x8E"=>"\xA1","\xD0\xB0"=>"\xE0","\xD0\xB1"=>"\xE1","\xD0\xB2"=>"\xE2",
"\xD0\xB3"=>"\xE3","\xD0\xB4"=>"\xE4","\xD0\xB5"=>"\xE5","\xD1\x91"=>"\xB8","\xD0\xB6"=>"\xE6",
"\xD0\xB7"=>"\xE7","\xD0\xB8"=>"\xE8","\xD0\xB9"=>"\xE9","\xD0\xBA"=>"\xEA","\xD0\xBB"=>"\xEB",
"\xD0\xBC"=>"\xEC","\xD0\xBD"=>"\xED","\xD0\xBE"=>"\xEE","\xD0\xBF"=>"\xEF","\xD1\x80"=>"\xF0",
"\xD1\x81"=>"\xF1","\xD1\x82"=>"\xF2","\xD1\x83"=>"\xF3","\xD1\x84"=>"\xF4","\xD1\x85"=>"\xF5",
"\xD1\x86"=>"\xF6","\xD1\x87"=>"\xF7","\xD1\x88"=>"\xF8","\xD1\x89"=>"\xF9","\xD1\x8A"=>"\xFA",
"\xD1\x8B"=>"\xFB","\xD1\x8C"=>"\xFC","\xD1\x8D"=>"\xFD","\xD1\x8E"=>"\xFE","\xD1\x8F"=>"\xFF",
"\xD1\x96"=>"\xB3","\xD1\x97"=>"\xBF","\xD1\x94"=>"\xBA","\xD1\x9E"=>"\xA2");
"\xD0\x90" => "\xC0", "\xD0\x91" => "\xC1", "\xD0\x92" => "\xC2", "\xD0\x93" => "\xC3", "\xD0\x94" => "\xC4",
"\xD0\x95" => "\xC5", "\xD0\x81" => "\xA8", "\xD0\x96" => "\xC6", "\xD0\x97" => "\xC7", "\xD0\x98" => "\xC8",
"\xD0\x99" => "\xC9", "\xD0\x9A" => "\xCA", "\xD0\x9B" => "\xCB", "\xD0\x9C" => "\xCC", "\xD0\x9D" => "\xCD",
"\xD0\x9E" => "\xCE", "\xD0\x9F" => "\xCF", "\xD0\xA0" => "\xD0", "\xD0\xA1" => "\xD1", "\xD0\xA2" => "\xD2",
"\xD0\xA3" => "\xD3", "\xD0\xA4" => "\xD4", "\xD0\xA5" => "\xD5", "\xD0\xA6" => "\xD6", "\xD0\xA7" => "\xD7",
"\xD0\xA8" => "\xD8", "\xD0\xA9" => "\xD9", "\xD0\xAA" => "\xDA", "\xD0\xAB" => "\xDB", "\xD0\xAC" => "\xDC",
"\xD0\xAD" => "\xDD", "\xD0\xAE" => "\xDE", "\xD0\xAF" => "\xDF", "\xD0\x87" => "\xAF", "\xD0\x86" => "\xB2",
"\xD0\x84" => "\xAA", "\xD0\x8E" => "\xA1", "\xD0\xB0" => "\xE0", "\xD0\xB1" => "\xE1", "\xD0\xB2" => "\xE2",
"\xD0\xB3" => "\xE3", "\xD0\xB4" => "\xE4", "\xD0\xB5" => "\xE5", "\xD1\x91" => "\xB8", "\xD0\xB6" => "\xE6",
"\xD0\xB7" => "\xE7", "\xD0\xB8" => "\xE8", "\xD0\xB9" => "\xE9", "\xD0\xBA" => "\xEA", "\xD0\xBB" => "\xEB",
"\xD0\xBC" => "\xEC", "\xD0\xBD" => "\xED", "\xD0\xBE" => "\xEE", "\xD0\xBF" => "\xEF", "\xD1\x80" => "\xF0",
"\xD1\x81" => "\xF1", "\xD1\x82" => "\xF2", "\xD1\x83" => "\xF3", "\xD1\x84" => "\xF4", "\xD1\x85" => "\xF5",
"\xD1\x86" => "\xF6", "\xD1\x87" => "\xF7", "\xD1\x88" => "\xF8", "\xD1\x89" => "\xF9", "\xD1\x8A" => "\xFA",
"\xD1\x8B" => "\xFB", "\xD1\x8C" => "\xFC", "\xD1\x8D" => "\xFD", "\xD1\x8E" => "\xFE", "\xD1\x8F" => "\xFF",
"\xD1\x96" => "\xB3", "\xD1\x97" => "\xBF", "\xD1\x94" => "\xBA", "\xD1\x9E" => "\xA2");
$_win1251utf8 = array(
"\xC0"=>"\xD0\x90","\xC1"=>"\xD0\x91","\xC2"=>"\xD0\x92","\xC3"=>"\xD0\x93","\xC4"=>"\xD0\x94",
"\xC5"=>"\xD0\x95","\xA8"=>"\xD0\x81","\xC6"=>"\xD0\x96","\xC7"=>"\xD0\x97","\xC8"=>"\xD0\x98",
"\xC9"=>"\xD0\x99","\xCA"=>"\xD0\x9A","\xCB"=>"\xD0\x9B","\xCC"=>"\xD0\x9C","\xCD"=>"\xD0\x9D",
"\xCE"=>"\xD0\x9E","\xCF"=>"\xD0\x9F","\xD0"=>"\xD0\xA0","\xD1"=>"\xD0\xA1","\xD2"=>"\xD0\xA2",
"\xD3"=>"\xD0\xA3","\xD4"=>"\xD0\xA4","\xD5"=>"\xD0\xA5","\xD6"=>"\xD0\xA6","\xD7"=>"\xD0\xA7",
"\xD8"=>"\xD0\xA8","\xD9"=>"\xD0\xA9","\xDA"=>"\xD0\xAA","\xDB"=>"\xD0\xAB","\xDC"=>"\xD0\xAC",
"\xDD"=>"\xD0\xAD","\xDE"=>"\xD0\xAE","\xDF"=>"\xD0\xAF","\xAF"=>"\xD0\x87","\xB2"=>"\xD0\x86",
"\xAA"=>"\xD0\x84","\xA1"=>"\xD0\x8E","\xE0"=>"\xD0\xB0","\xE1"=>"\xD0\xB1","\xE2"=>"\xD0\xB2",
"\xE3"=>"\xD0\xB3","\xE4"=>"\xD0\xB4","\xE5"=>"\xD0\xB5","\xB8"=>"\xD1\x91","\xE6"=>"\xD0\xB6",
"\xE7"=>"\xD0\xB7","\xE8"=>"\xD0\xB8","\xE9"=>"\xD0\xB9","\xEA"=>"\xD0\xBA","\xEB"=>"\xD0\xBB",
"\xEC"=>"\xD0\xBC","\xED"=>"\xD0\xBD","\xEE"=>"\xD0\xBE","\xEF"=>"\xD0\xBF","\xF0"=>"\xD1\x80",
"\xF1"=>"\xD1\x81","\xF2"=>"\xD1\x82","\xF3"=>"\xD1\x83","\xF4"=>"\xD1\x84","\xF5"=>"\xD1\x85",
"\xF6"=>"\xD1\x86","\xF7"=>"\xD1\x87","\xF8"=>"\xD1\x88","\xF9"=>"\xD1\x89","\xFA"=>"\xD1\x8A",
"\xFB"=>"\xD1\x8B","\xFC"=>"\xD1\x8C","\xFD"=>"\xD1\x8D","\xFE"=>"\xD1\x8E","\xFF"=>"\xD1\x8F",
"\xB3"=>"\xD1\x96","\xBF"=>"\xD1\x97","\xBA"=>"\xD1\x94","\xA2"=>"\xD1\x9E");
"\xC0" => "\xD0\x90", "\xC1" => "\xD0\x91", "\xC2" => "\xD0\x92", "\xC3" => "\xD0\x93", "\xC4" => "\xD0\x94",
"\xC5" => "\xD0\x95", "\xA8" => "\xD0\x81", "\xC6" => "\xD0\x96", "\xC7" => "\xD0\x97", "\xC8" => "\xD0\x98",
"\xC9" => "\xD0\x99", "\xCA" => "\xD0\x9A", "\xCB" => "\xD0\x9B", "\xCC" => "\xD0\x9C", "\xCD" => "\xD0\x9D",
"\xCE" => "\xD0\x9E", "\xCF" => "\xD0\x9F", "\xD0" => "\xD0\xA0", "\xD1" => "\xD0\xA1", "\xD2" => "\xD0\xA2",
"\xD3" => "\xD0\xA3", "\xD4" => "\xD0\xA4", "\xD5" => "\xD0\xA5", "\xD6" => "\xD0\xA6", "\xD7" => "\xD0\xA7",
"\xD8" => "\xD0\xA8", "\xD9" => "\xD0\xA9", "\xDA" => "\xD0\xAA", "\xDB" => "\xD0\xAB", "\xDC" => "\xD0\xAC",
"\xDD" => "\xD0\xAD", "\xDE" => "\xD0\xAE", "\xDF" => "\xD0\xAF", "\xAF" => "\xD0\x87", "\xB2" => "\xD0\x86",
"\xAA" => "\xD0\x84", "\xA1" => "\xD0\x8E", "\xE0" => "\xD0\xB0", "\xE1" => "\xD0\xB1", "\xE2" => "\xD0\xB2",
"\xE3" => "\xD0\xB3", "\xE4" => "\xD0\xB4", "\xE5" => "\xD0\xB5", "\xB8" => "\xD1\x91", "\xE6" => "\xD0\xB6",
"\xE7" => "\xD0\xB7", "\xE8" => "\xD0\xB8", "\xE9" => "\xD0\xB9", "\xEA" => "\xD0\xBA", "\xEB" => "\xD0\xBB",
"\xEC" => "\xD0\xBC", "\xED" => "\xD0\xBD", "\xEE" => "\xD0\xBE", "\xEF" => "\xD0\xBF", "\xF0" => "\xD1\x80",
"\xF1" => "\xD1\x81", "\xF2" => "\xD1\x82", "\xF3" => "\xD1\x83", "\xF4" => "\xD1\x84", "\xF5" => "\xD1\x85",
"\xF6" => "\xD1\x86", "\xF7" => "\xD1\x87", "\xF8" => "\xD1\x88", "\xF9" => "\xD1\x89", "\xFA" => "\xD1\x8A",
"\xFB" => "\xD1\x8B", "\xFC" => "\xD1\x8C", "\xFD" => "\xD1\x8D", "\xFE" => "\xD1\x8E", "\xFF" => "\xD1\x8F",
"\xB3" => "\xD1\x96", "\xBF" => "\xD1\x97", "\xBA" => "\xD1\x94", "\xA2" => "\xD1\x9E");
?>

View File

@ -19,72 +19,74 @@
* Evgeny Gryaznov - initial API and implementation
*/
function demo_print_message($msg,$format) {
function demo_print_message($msg, $format)
{
global $webim_encoding;
if($format == "xml") {
print "<message>".myiconv($webim_encoding,"utf-8",escape_with_cdata(message_to_html($msg)))."</message>\n";
if ($format == "xml") {
print "<message>" . myiconv($webim_encoding, "utf-8", escape_with_cdata(message_to_html($msg))) . "</message>\n";
} else {
print topage(message_to_html($msg));
}
}
function demo_process_thread($act,$outformat,$lastid,$isuser,$canpost,$istyping,$postmessage) {
function demo_process_thread($act, $outformat, $lastid, $isuser, $canpost, $istyping, $postmessage)
{
global $kind_for_agent, $kind_info, $kind_events, $kind_user, $kind_agent, $webimroot, $settings;
loadsettings();
if( $act == "refresh" || $act == "post" ) {
if ($act == "refresh" || $act == "post") {
$lastid++;
if($outformat == "xml") {
if ($outformat == "xml") {
start_xml_output();
print("<thread lastid=\"$lastid\" typing=\"".($istyping ? 1 : 0)."\" canpost=\"".($canpost ? 1 : 0)."\">");
print("<thread lastid=\"$lastid\" typing=\"" . ($istyping ? 1 : 0) . "\" canpost=\"" . ($canpost ? 1 : 0) . "\">");
} else {
start_html_output();
$url = "$webimroot/thread.php?act=refresh&amp;thread=0&amp;token=123&amp;html=on&amp;user=".($isuser?"true":"false");
$url = "$webimroot/thread.php?act=refresh&amp;thread=0&amp;token=123&amp;html=on&amp;user=" . ($isuser ? "true" : "false");
print(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">".
"<html>\n<head>\n".
"<link href=\"$webimroot/styles/default/chat.css\" rel=\"stylesheet\" type=\"text/css\">\n".
"<meta http-equiv=\"Refresh\" content=\"".$settings['updatefrequency_oldchat']."; URL=$url&amp;sn=11\">\n".
"<meta http-equiv=\"Pragma\" content=\"no-cache\">\n".
"<title>chat</title>\n".
"</head>\n".
"<body bgcolor='#FFFFFF' text='#000000' link='#C28400' vlink='#C28400' alink='#C28400'>".
"<table width='100%' cellspacing='0' cellpadding='0' border='0'><tr><td valign='top' class='message'>" );
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" .
"<html>\n<head>\n" .
"<link href=\"$webimroot/styles/default/chat.css\" rel=\"stylesheet\" type=\"text/css\">\n" .
"<meta http-equiv=\"Refresh\" content=\"" . $settings['updatefrequency_oldchat'] . "; URL=$url&amp;sn=11\">\n" .
"<meta http-equiv=\"Pragma\" content=\"no-cache\">\n" .
"<title>chat</title>\n" .
"</head>\n" .
"<body bgcolor='#FFFFFF' text='#000000' link='#C28400' vlink='#C28400' alink='#C28400'>" .
"<table width='100%' cellspacing='0' cellpadding='0' border='0'><tr><td valign='top' class='message'>");
}
if($lastid == 1) {
if ($lastid == 1) {
demo_print_message(
array('ikind'=>$kind_for_agent,'created'=>time()-15,'tname'=>'',
'tmessage'=>getstring2('chat.came.from',array("http://google.com"))), $outformat);
array('ikind' => $kind_for_agent, 'created' => time() - 15, 'tname' => '',
'tmessage' => getstring2('chat.came.from', array("http://google.com"))), $outformat);
demo_print_message(
array('ikind'=>$kind_info,'created'=>time()-15,'tname'=>'',
'tmessage'=>getstring('chat.wait')), $outformat);
array('ikind' => $kind_info, 'created' => time() - 15, 'tname' => '',
'tmessage' => getstring('chat.wait')), $outformat);
demo_print_message(
array('ikind'=>$kind_events,'created'=>time()-10,'tname'=>'',
'tmessage'=>getstring2("chat.status.operator.joined", array("Administrator"))), $outformat);
array('ikind' => $kind_events, 'created' => time() - 10, 'tname' => '',
'tmessage' => getstring2("chat.status.operator.joined", array("Administrator"))), $outformat);
demo_print_message(
array('ikind'=>$kind_agent,'created'=>time()-9,'tname'=>'Administrator',
'tmessage'=>getstring("demo.chat.welcome")), $outformat);
array('ikind' => $kind_agent, 'created' => time() - 9, 'tname' => 'Administrator',
'tmessage' => getstring("demo.chat.welcome")), $outformat);
demo_print_message(
array('ikind'=>$kind_user,'created'=>time()-5,'tname'=>getstring("chat.default.username"),
'tmessage'=>getstring("demo.chat.question")), $outformat);
if($canpost && $outformat == 'xml') {
array('ikind' => $kind_user, 'created' => time() - 5, 'tname' => getstring("chat.default.username"),
'tmessage' => getstring("demo.chat.question")), $outformat);
if ($canpost && $outformat == 'xml') {
demo_print_message(
array('ikind'=>$kind_info,'created'=>time()-5,'tname'=>'',
'tmessage'=>'Hint: type something in message field to see typing notification'), $outformat);
array('ikind' => $kind_info, 'created' => time() - 5, 'tname' => '',
'tmessage' => 'Hint: type something in message field to see typing notification'), $outformat);
}
}
if($act == 'post') {
if ($act == 'post') {
demo_print_message(
array('ikind'=>$isuser?$kind_user:$kind_agent,'created'=>time(),'tmessage'=>$postmessage,
'tname'=>$isuser?getstring("chat.default.username"):"Administrator"), $outformat);
array('ikind' => $isuser ? $kind_user : $kind_agent, 'created' => time(), 'tmessage' => $postmessage,
'tname' => $isuser ? getstring("chat.default.username") : "Administrator"), $outformat);
}
if($outformat == "xml") {
if ($outformat == "xml") {
print("</thread>");
} else {
print(
"</td></tr></table><a name='aend'></a>".
"</body></html>" );
"</td></tr></table><a name='aend'></a>" .
"</body></html>");
}
}
}

View File

@ -23,97 +23,103 @@ $ifregexp = "/\\\${(if|ifnot):([\w\.]+)}(.*?)(\\\${else:\\2}.*?)?\\\${endif:\\2}
$expand_include_path = "";
$current_style = "";
function check_condition($condition) {
function check_condition($condition)
{
global $errors, $page;
if($condition == 'errors') {
if ($condition == 'errors') {
return isset($errors) && count($errors) > 0;
}
return isset($page[$condition]) && $page[$condition];
}
function expand_condition($matches) {
function expand_condition($matches)
{
global $page, $ifregexp;
$value = check_condition($matches[2]) ^ ($matches[1] != 'if');
if($value) {
if ($value) {
return preg_replace_callback($ifregexp, "expand_condition", $matches[3]);
} else if(isset($matches[4])) {
return preg_replace_callback($ifregexp, "expand_condition", substr($matches[4],strpos($matches[4],"}")+1));
} else if (isset($matches[4])) {
return preg_replace_callback($ifregexp, "expand_condition", substr($matches[4], strpos($matches[4], "}") + 1));
}
return "";
}
function expand_var($matches) {
function expand_var($matches)
{
global $page, $webimroot, $jsver, $errors, $current_style;
$prefix = $matches[1];
$var = $matches[2];
if(!$prefix) {
if($var == 'webimroot') {
if (!$prefix) {
if ($var == 'webimroot') {
return $webimroot;
} else if($var == 'jsver') {
} else if ($var == 'jsver') {
return $jsver;
} else if($var == 'tplroot') {
} else if ($var == 'tplroot') {
return "$webimroot/styles/$current_style";
} else if($var == 'styleid') {
} else if ($var == 'styleid') {
return $current_style;
} else if($var == 'pagination') {
} else if ($var == 'pagination') {
return generate_pagination($page['pagination']);
} else if($var == 'errors' || $var == 'harderrors') {
if( isset($errors) && count($errors) > 0 ) {
} else if ($var == 'errors' || $var == 'harderrors') {
if (isset($errors) && count($errors) > 0) {
$result = getlocal("$var.header");
foreach( $errors as $e ) {
$result .= getlocal("errors.prefix").$e.getlocal("errors.suffix");
foreach ($errors as $e) {
$result .= getlocal("errors.prefix") . $e . getlocal("errors.suffix");
}
$result .= getlocal("errors.footer");
return $result;
}
}
} else if($prefix == 'msg:' || $prefix == 'url:') {
if(strpos($var,",")!==false) {
$pos = strpos($var,",");
$param = substr($var, $pos+1);
} else if ($prefix == 'msg:' || $prefix == 'url:') {
if (strpos($var, ",") !== false) {
$pos = strpos($var, ",");
$param = substr($var, $pos + 1);
$var = substr($var, 0, $pos);
return getlocal2($var, array($page[$param]));
}
return getlocal($var);
} else if($prefix == 'form:') {
} else if ($prefix == 'form:') {
return form_value($var);
} else if($prefix == 'page:') {
} else if ($prefix == 'page:') {
return isset($page[$var]) ? $page[$var] : "";
} else if($prefix == 'if:' || $prefix == 'else:' || $prefix == 'endif:' || $prefix == 'ifnot:') {
} else if ($prefix == 'if:' || $prefix == 'else:' || $prefix == 'endif:' || $prefix == 'ifnot:') {
return "<!-- wrong $prefix:$var -->";
}
return "";
}
function expand_include($matches) {
function expand_include($matches)
{
global $expand_include_path;
$name = $matches[1];
$contents = @file_get_contents($expand_include_path.$name) or die("cannot load template");
$contents = @file_get_contents($expand_include_path . $name) or die("cannot load template");
return $contents;
}
function expandtext($text) {
function expandtext($text)
{
global $ifregexp;
$text = preg_replace_callback("/\\\${include:([\w\.]+)}/", "expand_include", $text);
$text = preg_replace_callback($ifregexp, "expand_condition", $text);
return preg_replace_callback("/\\\${(\w+:)?([\w\.,]+)}/", "expand_var", $text);
}
function expand($basedir,$style,$filename) {
function expand($basedir, $style, $filename)
{
global $expand_include_path, $current_style;
start_html_output();
if(!is_dir("$basedir/$style")) {
if (!is_dir("$basedir/$style")) {
$style = "default";
}
$expand_include_path = "$basedir/$style/templates/";
$current_style = $style;
$contents = @file_get_contents($expand_include_path.$filename);
if($contents === false) {
$contents = @file_get_contents($expand_include_path . $filename);
if ($contents === false) {
$expand_include_path = "$basedir/default/templates/";
$current_style = "default";
$contents = @file_get_contents($expand_include_path.$filename) or die("cannot load template");
$contents = @file_get_contents($expand_include_path . $filename) or die("cannot load template");
}
echo expandtext($contents);
}

View File

@ -19,34 +19,37 @@
* Evgeny Gryaznov - initial API and implementation
*/
function setup_getcode_tabs($active) {
function setup_getcode_tabs($active)
{
global $page, $webimroot;
$page['tabselected'] = $active;
$page['tabs'] = array(
array('title'=> getlocal("page_getcode.tab.image"), 'link' => "$webimroot/operator/getcode.php"),
array('title'=> getlocal("page_getcode.tab.text"), 'link' => "$webimroot/operator/gettextcode.php"),
array('title' => getlocal("page_getcode.tab.image"), 'link' => "$webimroot/operator/getcode.php"),
array('title' => getlocal("page_getcode.tab.text"), 'link' => "$webimroot/operator/gettextcode.php"),
);
}
function generate_button($title,$locale,$style,$group,$inner,$showhost,$forcesecure,$modsecurity) {
$link = get_app_location($showhost,$forcesecure)."/client.php";
if($locale)
function generate_button($title, $locale, $style, $group, $inner, $showhost, $forcesecure, $modsecurity)
{
$link = get_app_location($showhost, $forcesecure) . "/client.php";
if ($locale)
$link = append_query($link, "locale=$locale");
if($style)
if ($style)
$link = append_query($link, "style=$style");
if($group)
if ($group)
$link = append_query($link, "group=$group");
$modsecfix = $modsecurity ? ".replace('http://','').replace('https://','')" : "";
$jslink = append_query("'".$link,"url='+escape(document.location.href$modsecfix)+'&amp;referrer='+escape(document.referrer$modsecfix)");
$jslink = append_query("'" . $link, "url='+escape(document.location.href$modsecfix)+'&amp;referrer='+escape(document.referrer$modsecfix)");
$temp = get_popup($link, "$jslink",
$inner, $title, "webim", "toolbar=0,scrollbars=0,location=0,status=1,menubar=0,width=640,height=480,resizable=1" );
return "<!-- mibew button -->".$temp."<!-- / mibew button -->";
$inner, $title, "webim", "toolbar=0,scrollbars=0,location=0,status=1,menubar=0,width=640,height=480,resizable=1");
return "<!-- mibew button -->" . $temp . "<!-- / mibew button -->";
}
function get_style_list($stylesfolder) {
function get_style_list($stylesfolder)
{
$stylelist = array("" => getlocal("page.preview.style_default"));
if($handle = opendir($stylesfolder)) {
if ($handle = opendir($stylesfolder)) {
while (false !== ($file = readdir($handle))) {
if (preg_match("/^\w+$/", $file) && is_dir("$stylesfolder/$file")) {
$stylelist[$file] = $file;
@ -57,14 +60,15 @@ function get_style_list($stylesfolder) {
return $stylelist;
}
function verifyparam_groupid($paramid) {
function verifyparam_groupid($paramid)
{
global $settings, $errors;
$groupid = "";
if($settings['enablegroups'] == '1') {
if ($settings['enablegroups'] == '1') {
$groupid = verifyparam($paramid, "/^\d{0,8}$/", "");
if($groupid) {
if ($groupid) {
$group = group_by_id($groupid);
if(!$group) {
if (!$group) {
$errors[] = getlocal("page.group.no_such");
$groupid = "";
}
@ -73,32 +77,34 @@ function verifyparam_groupid($paramid) {
return $groupid;
}
function get_groups_list() {
function get_groups_list()
{
global $settings;
$result = array();
if($settings['enablegroups'] == '1') {
if ($settings['enablegroups'] == '1') {
$link = connect();
$allgroups = get_all_groups($link);
mysql_close($link);
$result[] = array('groupid' => '', 'vclocalname' => getlocal("page.gen_button.default_group"));
foreach($allgroups as $g) {
foreach ($allgroups as $g) {
$result[] = $g;
}
}
return $result;
return $result;
}
function get_image_locales_map($localesdir) {
function get_image_locales_map($localesdir)
{
$imageLocales = array();
$allLocales = get_available_locales();
foreach($allLocales as $curr) {
foreach ($allLocales as $curr) {
$imagesDir = "$localesdir/$curr/button";
if($handle = @opendir($imagesDir)) {
if ($handle = @opendir($imagesDir)) {
while (false !== ($file = readdir($handle))) {
if (preg_match("/^(\w+)_on.gif$/", $file, $matches)
&& is_file("$imagesDir/".$matches[1]."_off.gif")) {
&& is_file("$imagesDir/" . $matches[1] . "_off.gif")) {
$image = $matches[1];
if( !isset($imageLocales[$image]) ) {
if (!isset($imageLocales[$image])) {
$imageLocales[$image] = array();
}
$imageLocales[$image][] = $curr;

View File

@ -19,26 +19,29 @@
* Evgeny Gryaznov - initial API and implementation
*/
function group_by_id($id) {
function group_by_id($id)
{
global $mysqlprefix;
$link = connect();
$group = select_one_row(
"select * from ${mysqlprefix}chatgroup where groupid = $id", $link );
"select * from ${mysqlprefix}chatgroup where groupid = $id", $link);
mysql_close($link);
return $group;
}
function get_group_name($group) {
function get_group_name($group)
{
global $home_locale, $current_locale;
if( $home_locale == $current_locale || !isset($group['vccommonname']) || !$group['vccommonname'])
if ($home_locale == $current_locale || !isset($group['vccommonname']) || !$group['vccommonname'])
return $group['vclocalname'];
else
return $group['vccommonname'];
}
function setup_group_settings_tabs($gid, $active) {
function setup_group_settings_tabs($gid, $active)
{
global $page, $webimroot, $settings;
if($gid) {
if ($gid) {
$page['tabs'] = array(
getlocal("page_group.tab.main") => $active != 0 ? "$webimroot/operator/group.php?gid=$gid" : "",
getlocal("page_group.tab.members") => $active != 1 ? "$webimroot/operator/groupmembers.php?gid=$gid" : "",
@ -48,17 +51,18 @@ function setup_group_settings_tabs($gid, $active) {
}
}
function get_operator_groupslist($operatorid, $link) {
function get_operator_groupslist($operatorid, $link)
{
global $settings, $mysqlprefix;
if($settings['enablegroups'] == '1') {
if ($settings['enablegroups'] == '1') {
$groupids = array(0);
$allgroups = select_multi_assoc("select groupid from ${mysqlprefix}chatgroupoperator where operatorid = $operatorid order by groupid",$link);
foreach($allgroups as $g) {
$groupids[] = $g['groupid'];
$allgroups = select_multi_assoc("select groupid from ${mysqlprefix}chatgroupoperator where operatorid = $operatorid order by groupid", $link);
foreach ($allgroups as $g) {
$groupids[] = $g['groupid'];
}
return implode(",", $groupids);
return implode(",", $groupids);
} else {
return "";
return "";
}
}

View File

@ -19,38 +19,41 @@
* Evgeny Gryaznov - initial API and implementation
*/
function log_notification($locale,$kind,$to,$subj,$text,$refop,$link) {
function log_notification($locale, $kind, $to, $subj, $text, $refop, $link)
{
global $mysqlprefix;
$query = sprintf(
"insert into ${mysqlprefix}chatnotification (locale,vckind,vcto,vcsubject,tmessage,refoperator,dtmcreated) values ('%s','%s','%s','%s','%s',%s,%s)",
$locale,
$kind,
mysql_real_escape_string($to,$link),
mysql_real_escape_string($subj,$link),
mysql_real_escape_string($text,$link),
$refop ? $refop : "0",
"CURRENT_TIMESTAMP" );
$locale,
$kind,
mysql_real_escape_string($to, $link),
mysql_real_escape_string($subj, $link),
mysql_real_escape_string($text, $link),
$refop ? $refop : "0",
"CURRENT_TIMESTAMP");
perform_query($query,$link);
perform_query($query, $link);
}
function webim_mail($toaddr, $reply_to, $subject, $body, $link) {
function webim_mail($toaddr, $reply_to, $subject, $body, $link)
{
global $webim_encoding, $webim_mailbox, $mail_encoding, $current_locale;
$headers = "From: $webim_mailbox\r\n"
."Reply-To: ".myiconv($webim_encoding, $mail_encoding, $reply_to)."\r\n"
."Content-Type: text/plain; charset=$mail_encoding\r\n"
.'X-Mailer: PHP/'.phpversion();
. "Reply-To: " . myiconv($webim_encoding, $mail_encoding, $reply_to) . "\r\n"
. "Content-Type: text/plain; charset=$mail_encoding\r\n"
. 'X-Mailer: PHP/' . phpversion();
$real_subject = "=?".$mail_encoding."?B?".base64_encode(myiconv($webim_encoding,$mail_encoding,$subject))."?=";
$real_subject = "=?" . $mail_encoding . "?B?" . base64_encode(myiconv($webim_encoding, $mail_encoding, $subject)) . "?=";
$body = preg_replace("/\n/", "\r\n", $body);
$body = preg_replace("/\n/","\r\n", $body);
log_notification($current_locale, "mail", $toaddr, $subject, $body, null, $link);
@mail($toaddr, $real_subject, wordwrap(myiconv($webim_encoding, $mail_encoding, $body),70), $headers);
@mail($toaddr, $real_subject, wordwrap(myiconv($webim_encoding, $mail_encoding, $body), 70), $headers);
}
function webim_xmpp($toaddr, $subject, $text, $link) {
function webim_xmpp($toaddr, $subject, $text, $link)
{
global $current_locale;
log_notification($current_locale, "xmpp", $toaddr, $subject, $text, null, $link);
}

View File

@ -33,183 +33,201 @@ $permission_ids = array(
$can_modifyprofile => "modifyprofile"
);
function operator_by_login($login) {
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 );
"select * from ${mysqlprefix}chatoperator where vclogin = '" . mysql_real_escape_string($login) . "'", $link);
mysql_close($link);
return $operator;
}
function operator_by_email($mail) {
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 );
"select * from ${mysqlprefix}chatoperator where vcemail = '" . mysql_real_escape_string($mail) . "'", $link);
mysql_close($link);
return $operator;
}
function operator_by_id_($id,$link) {
function operator_by_id_($id, $link)
{
global $mysqlprefix;
return select_one_row(
"select * from ${mysqlprefix}chatoperator where operatorid = $id", $link );
"select * from ${mysqlprefix}chatoperator where operatorid = $id", $link);
}
function operator_by_id($id) {
function operator_by_id($id)
{
$link = connect();
$operator = operator_by_id_($id,$link);
$operator = operator_by_id_($id, $link);
mysql_close($link);
return $operator;
}
function operator_get_all() {
function operator_get_all()
{
global $mysqlprefix;
$link = connect();
$query = "select operatorid, vclogin, vclocalename, vccommonname, istatus, (unix_timestamp(CURRENT_TIMESTAMP)-unix_timestamp(dtmlastvisited)) as time ".
$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) {
function operator_is_online($operator)
{
global $settings;
return $operator['time'] < $settings['online_timeout'];
}
function operator_is_available($operator) {
function operator_is_available($operator)
{
global $settings;
return $operator['istatus'] == 0 && $operator['time'] < $settings['online_timeout'] ? "1" : "";
return $operator['istatus'] == 0 && $operator['time'] < $settings['online_timeout'] ? "1" : "";
}
function operator_is_away($operator) {
function operator_is_away($operator)
{
global $settings;
return $operator['istatus'] != 0 && $operator['time'] < $settings['online_timeout'] ? "1" : "";
return $operator['istatus'] != 0 && $operator['time'] < $settings['online_timeout'] ? "1" : "";
}
function update_operator($operatorid,$login,$email,$jabber,$password,$localename,$commonname,$notify) {
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".
"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)."'," : ""),
($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 );
$operatorid);
perform_query($query,$link);
perform_query($query, $link);
mysql_close($link);
}
function update_operator_avatar($operatorid,$avatar) {
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 );
mysql_real_escape_string($avatar), $operatorid);
perform_query($query,$link);
perform_query($query, $link);
mysql_close($link);
}
function create_operator_($login,$email,$jabber,$password,$localename,$commonname,$notify,$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);
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);
perform_query($query, $link);
$id = mysql_insert_id($link);
return select_one_row("select * from ${mysqlprefix}chatoperator where operatorid = $id", $link );
return select_one_row("select * from ${mysqlprefix}chatoperator where operatorid = $id", $link);
}
function create_operator($login,$email,$jabber,$password,$localename,$commonname,$notify) {
function create_operator($login, $email, $jabber, $password, $localename, $commonname, $notify)
{
$link = connect();
$newop = create_operator_($login,$email,$jabber,$password,$localename,$commonname,$notify,$link);
$newop = create_operator_($login, $email, $jabber, $password, $localename, $commonname, $notify, $link);
mysql_close($link);
return $newop;
}
function notify_operator_alive($operatorid, $istatus) {
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);
perform_query("update ${mysqlprefix}chatoperator set istatus = $istatus, dtmlastvisited = CURRENT_TIMESTAMP where operatorid = $operatorid", $link);
mysql_close($link);
}
function has_online_operators($groupid="") {
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) {
if ($groupid) {
$query .= ", ${mysqlprefix}chatgroupoperator where groupid = $groupid and ${mysqlprefix}chatoperator.operatorid = " .
"${mysqlprefix}chatgroupoperator.operatorid and istatus = 0";
"${mysqlprefix}chatgroupoperator.operatorid and istatus = 0";
} else {
$query .= " where istatus = 0";
}
$row = select_one_row($query,$link);
$row = select_one_row($query, $link);
mysql_close($link);
return $row['time'] < $settings['online_timeout'] && $row['total'] > 0;
}
function is_operator_online($operatorid, $link) {
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 ".
$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);
$row = select_one_row($query, $link);
return $row['time'] < $settings['online_timeout'] && $row['total'] == 1;
}
function get_operator_name($operator) {
function get_operator_name($operator)
{
global $home_locale, $current_locale;
if( $home_locale == $current_locale )
if ($home_locale == $current_locale)
return $operator['vclocalename'];
else
return $operator['vccommonname'];
}
function append_query($link,$pv) {
function append_query($link, $pv)
{
$infix = '?';
if( strstr($link,$infix) !== FALSE )
if (strstr($link, $infix) !== FALSE)
$infix = '&amp;';
return "$link$infix$pv";
}
function check_login($redirect=true) {
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);
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 ) {
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 ($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['QUERY_STRING']) {
$requested .= "?" . $_SERVER['QUERY_STRING'];
}
if($redirect) {
if ($redirect) {
$_SESSION['backpath'] = $requested;
header("Location: $webimroot/operator/login.php");
exit;
@ -220,33 +238,37 @@ function check_login($redirect=true) {
return $_SESSION["${mysqlprefix}operator"];
}
function get_logged_in() {
function get_logged_in()
{
global $mysqlprefix;
return isset( $_SESSION["${mysqlprefix}operator"] ) ? $_SESSION["${mysqlprefix}operator"] : FALSE;
return isset($_SESSION["${mysqlprefix}operator"]) ? $_SESSION["${mysqlprefix}operator"] : FALSE;
}
function login_operator($operator,$remember) {
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/");
if ($remember) {
$value = $operator['vclogin'] . "," . md5($operator['vcpassword']);
setcookie('webim_lite', $value, time() + 60 * 60 * 24 * 1000, "$webimroot/");
} else if( isset($_COOKIE['webim_lite']) ) {
} else if (isset($_COOKIE['webim_lite'])) {
setcookie('webim_lite', '', time() - 3600, "$webimroot/");
}
}
function logout_operator() {
function logout_operator()
{
global $webimroot, $mysqlprefix;
unset($_SESSION["${mysqlprefix}operator"]);
unset($_SESSION['backpath']);
if( isset($_COOKIE['webim_lite']) ) {
if (isset($_COOKIE['webim_lite'])) {
setcookie('webim_lite', '', time() - 3600, "$webimroot/");
}
}
function setup_redirect_links($threadid,$token) {
function setup_redirect_links($threadid, $token)
{
global $page, $webimroot, $settings, $mysqlprefix;
loadsettings();
$link = connect();
@ -254,59 +276,59 @@ function setup_redirect_links($threadid,$token) {
$operatorscount = db_rows_count("${mysqlprefix}chatoperator", array(), "", $link);
$groupscount = 0;
$groups = array();
if($settings['enablegroups'] == "1") {
foreach(get_groups($link, true) as $group) {
if($group['inumofagents'] == 0) {
$groups = array();
if ($settings['enablegroups'] == "1") {
foreach (get_groups($link, true) as $group) {
if ($group['inumofagents'] == 0) {
continue;
}
$groups[] = $group;
}
$groupscount = count($groups);
}
prepare_pagination(max($operatorscount,$groupscount),8);
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']);
"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) {
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 .= "<li><a href=\"".add_params($webimroot."/operator/redirect.php",$params).
"\" title=\"".topage(get_operator_name($agent))."\">".
topage(get_operator_name($agent)).
"</a> $status</li>";
? ($agent['istatus'] == 0
? getlocal("char.redirect.operator.online_suff")
: getlocal("char.redirect.operator.away_suff")
)
: "";
$agent_list .= "<li><a href=\"" . add_params($webimroot . "/operator/redirect.php", $params) .
"\" title=\"" . topage(get_operator_name($agent)) . "\">" .
topage(get_operator_name($agent)) .
"</a> $status</li>";
}
$page['redirectToAgent'] = $agent_list;
$group_list = "";
if($settings['enablegroups'] == "1") {
if ($settings['enablegroups'] == "1") {
$params = array('thread' => $threadid, 'token' => $token);
foreach($groups as $group) {
foreach ($groups as $group) {
$params['nextGroup'] = $group['groupid'];
$status = $group['ilastseen'] !== NULL && $group['ilastseen'] < $settings['online_timeout']
? getlocal("char.redirect.operator.online_suff")
$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 .= "<li><a href=\"".add_params($webimroot."/operator/redirect.php",$params).
"\" title=\"".topage(get_group_name($group))."\">".
topage(get_group_name($group)).
"</a> $status</li>";
? getlocal("char.redirect.operator.away_suff")
: "");
$group_list .= "<li><a href=\"" . add_params($webimroot . "/operator/redirect.php", $params) .
"\" title=\"" . topage(get_group_name($group)) . "\">" .
topage(get_group_name($group)) .
"</a> $status</li>";
}
}
$page['redirectToGroup'] = $group_list;
@ -314,10 +336,11 @@ function setup_redirect_links($threadid,$token) {
$permission_list = array();
function get_permission_list() {
function get_permission_list()
{
global $permission_list, $permission_ids;
if(count($permission_list) == 0) {
foreach($permission_ids as $permid) {
if (count($permission_list) == 0) {
foreach ($permission_ids as $permid) {
$permission_list[] = array(
'id' => $permid,
'descr' => getlocal("permission.$permid")
@ -327,15 +350,17 @@ function get_permission_list() {
return $permission_list;
}
function is_capable($perm,$operator) {
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) {
function prepare_menu($operator, $hasright = true)
{
global $page, $settings, $can_administrate;
$page['operator'] = topage(get_operator_name($operator));
if($hasright) {
if ($hasright) {
loadsettings();
$page['showban'] = $settings['enableban'] == "1";
$page['showgroups'] = $settings['enablegroups'] == "1";
@ -345,33 +370,36 @@ function prepare_menu($operator,$hasright=true) {
}
}
function get_all_groups($link) {
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) {
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"
: ""
).
$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) {
function get_operator_groupids($operatorid)
{
global $mysqlprefix;
$link = connect();
$query = "select groupid from ${mysqlprefix}chatgroupoperator where operatorid = $operatorid";

View File

@ -19,26 +19,27 @@
* Evgeny Gryaznov - initial API and implementation
*/
function setup_operator_settings_tabs($opId, $active) {
function setup_operator_settings_tabs($opId, $active)
{
global $page, $webimroot, $settings;
loadsettings();
if($opId) {
if ($opId) {
$page['tabselected'] = $active;
if($settings['enablegroups'] == '1') {
if ($settings['enablegroups'] == '1') {
$page['tabs'] = array(
array('title'=> getlocal("page_agent.tab.main"), 'link' => "$webimroot/operator/operator.php?op=$opId"),
array('title'=> getlocal("page_agent.tab.avatar"), 'link' => "$webimroot/operator/avatar.php?op=$opId"),
array('title'=> getlocal("page_agent.tab.groups"), 'link' => "$webimroot/operator/opgroups.php?op=$opId"),
array('title'=> getlocal("page_agent.tab.permissions"), 'link' => "$webimroot/operator/permissions.php?op=$opId"),
array('title' => getlocal("page_agent.tab.main"), 'link' => "$webimroot/operator/operator.php?op=$opId"),
array('title' => getlocal("page_agent.tab.avatar"), 'link' => "$webimroot/operator/avatar.php?op=$opId"),
array('title' => getlocal("page_agent.tab.groups"), 'link' => "$webimroot/operator/opgroups.php?op=$opId"),
array('title' => getlocal("page_agent.tab.permissions"), 'link' => "$webimroot/operator/permissions.php?op=$opId"),
);
} else {
$page['tabs'] = array(
array('title'=> getlocal("page_agent.tab.main"), 'link' => "$webimroot/operator/operator.php?op=$opId"),
array('title'=> getlocal("page_agent.tab.avatar"), 'link' => "$webimroot/operator/avatar.php?op=$opId"),
array('title'=> getlocal("page_agent.tab.permissions"), 'link' => "$webimroot/operator/permissions.php?op=$opId"),
array('title' => getlocal("page_agent.tab.main"), 'link' => "$webimroot/operator/operator.php?op=$opId"),
array('title' => getlocal("page_agent.tab.avatar"), 'link' => "$webimroot/operator/avatar.php?op=$opId"),
array('title' => getlocal("page_agent.tab.permissions"), 'link' => "$webimroot/operator/permissions.php?op=$opId"),
);
if($active == 3) $active--;
if ($active == 3) $active--;
}
} else {
$page['tabs'] = array();

View File

@ -22,110 +22,117 @@
$pagination_spacing = "&nbsp;&nbsp;&nbsp;";
$links_on_page = 5;
function generate_pagination_link($page,$title) {
function generate_pagination_link($page, $title)
{
$lnk = $_SERVER['REQUEST_URI'];
$href = preg_replace("/\?page=\d+\&/", "?", preg_replace("/\&page=\d+/", "", $lnk));
$href .= strstr($href,"?") ? "&page=$page" : "?page=$page";
return "<a href=\"".htmlspecialchars($href)."\" class=\"pagelink\">$title</a>";
$href .= strstr($href, "?") ? "&page=$page" : "?page=$page";
return "<a href=\"" . htmlspecialchars($href) . "\" class=\"pagelink\">$title</a>";
}
function generate_pagination_image($id,$alt) {
function generate_pagination_image($id, $alt)
{
global $webimroot;
return "<img src=\"$webimroot/images/$id.gif\" border=\"0\" alt=\"".htmlspecialchars($alt)."\"/>";
return "<img src=\"$webimroot/images/$id.gif\" border=\"0\" alt=\"" . htmlspecialchars($alt) . "\"/>";
}
function prepare_pagination($items_count,$default_items_per_page=15) {
function prepare_pagination($items_count, $default_items_per_page = 15)
{
global $page;
if( $items_count ) {
if ($items_count) {
$items_per_page = verifyparam("items", "/^\d{1,3}$/", $default_items_per_page);
if( $items_per_page < 2 )
if ($items_per_page < 2)
$items_per_page = 2;
$total_pages = div($items_count + $items_per_page - 1, $items_per_page);
$curr_page = verifyparam("page", "/^\d{1,6}$/", 1);
if( $curr_page < 1 )
if ($curr_page < 1)
$curr_page = 1;
if( $curr_page > $total_pages )
if ($curr_page > $total_pages)
$curr_page = $total_pages;
$start_index = ($curr_page-1)*$items_per_page;
$end_index = min($start_index+$items_per_page, $items_count);
$start_index = ($curr_page - 1) * $items_per_page;
$end_index = min($start_index + $items_per_page, $items_count);
$page['pagination'] =
array( "page" => $curr_page, "items" => $items_per_page, "total" => $total_pages,
"count" => $items_count, "start" => $start_index, "end" => $end_index,
"limit" => "LIMIT $start_index,".($end_index - $start_index) );
array("page" => $curr_page, "items" => $items_per_page, "total" => $total_pages,
"count" => $items_count, "start" => $start_index, "end" => $end_index,
"limit" => "LIMIT $start_index," . ($end_index - $start_index));
} else {
$page['pagination'] = true;
}
}
function setup_pagination($items,$default_items_per_page=15) {
function setup_pagination($items, $default_items_per_page = 15)
{
global $page;
prepare_pagination($items ? count($items) : 0, $default_items_per_page);
if($items && count($items) > 0) {
if ($items && count($items) > 0) {
$p = $page['pagination'];
$page['pagination.items'] = array_slice($items, $p['start'], $p['end']-$p['start']);
$page['pagination.items'] = array_slice($items, $p['start'], $p['end'] - $p['start']);
} else {
$page['pagination.items'] = false;
}
}
function select_with_pagintation($fields, $table, $conditions, $order, $countfields, $link) {
function select_with_pagintation($fields, $table, $conditions, $order, $countfields, $link)
{
global $page;
$count = db_rows_count($table, $conditions, $countfields, $link);
prepare_pagination($count);
if($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'] = select_multi_assoc(db_build_select($fields, $table, $conditions, $order) . " " . $limit, $link);
} else {
$page['pagination.items'] = false;
}
}
function setup_empty_pagination() {
function setup_empty_pagination()
{
global $page;
$page['pagination.items'] = false;
$page['pagination'] = false;
}
function generate_pagination($pagination,$bottom=true) {
function generate_pagination($pagination, $bottom = true)
{
global $pagination_spacing, $links_on_page;
$result = getlocal2("tag.pagination.info",
array($pagination['page'],$pagination['total'],$pagination['start']+1,$pagination['end'],$pagination['count']))."<br/>";
array($pagination['page'], $pagination['total'], $pagination['start'] + 1, $pagination['end'], $pagination['count'])) . "<br/>";
if( $pagination['total'] > 1 ) {
if(!$bottom) {
if ($pagination['total'] > 1) {
if (!$bottom) {
$result = "";
} else {
$result .= "<br/>";
}
$result.="<div class='pagination'>";
$result .= "<div class='pagination'>";
$curr_page = $pagination['page'];
$minPage = max( $curr_page - $links_on_page, 1 );
$maxPage = min( $curr_page + $links_on_page, $pagination['total'] );
$minPage = max($curr_page - $links_on_page, 1);
$maxPage = min($curr_page + $links_on_page, $pagination['total']);
if( $curr_page > 1 ) {
$result .= generate_pagination_link($curr_page-1, generate_pagination_image("prevpage", getlocal("tag.pagination.previous"))).$pagination_spacing;
if ($curr_page > 1) {
$result .= generate_pagination_link($curr_page - 1, generate_pagination_image("prevpage", getlocal("tag.pagination.previous"))) . $pagination_spacing;
}
for($i = $minPage; $i <= $maxPage; $i++ ) {
$title = abs($curr_page-$i) >= $links_on_page && $i != 1 ? "..." : $i;
if( $i != $curr_page)
for ($i = $minPage; $i <= $maxPage; $i++) {
$title = abs($curr_page - $i) >= $links_on_page && $i != 1 ? "..." : $i;
if ($i != $curr_page)
$result .= generate_pagination_link($i, $title);
else
$result .= "<span class=\"pagecurrent\">$title</span>";
if( $i < $maxPage )
if ($i < $maxPage)
$result .= $pagination_spacing;
}
if( $curr_page < $pagination['total'] ) {
$result .= $pagination_spacing.generate_pagination_link($curr_page+1, generate_pagination_image("nextpage", getlocal("tag.pagination.next")));
if ($curr_page < $pagination['total']) {
$result .= $pagination_spacing . generate_pagination_link($curr_page + 1, generate_pagination_image("nextpage", getlocal("tag.pagination.next")));
}
$result.="</div>";
$result .= "</div>";
}
return $result;
}

View File

@ -19,28 +19,30 @@
* Evgeny Gryaznov - initial API and implementation
*/
function update_settings() {
function update_settings()
{
global $settings, $settings_in_db, $mysqlprefix;
$link = connect();
foreach ($settings as $key => $value) {
if(!isset($settings_in_db[$key])) {
perform_query("insert into ${mysqlprefix}chatconfig (vckey) values ('$key')",$link);
if (!isset($settings_in_db[$key])) {
perform_query("insert into ${mysqlprefix}chatconfig (vckey) values ('$key')", $link);
}
$query = sprintf("update ${mysqlprefix}chatconfig set vcvalue='%s' where vckey='$key'", mysql_real_escape_string($value));
perform_query($query,$link);
$query = sprintf("update ${mysqlprefix}chatconfig set vcvalue='%s' where vckey='$key'", mysql_real_escape_string($value));
perform_query($query, $link);
}
mysql_close($link);
}
function setup_settings_tabs($active) {
function setup_settings_tabs($active)
{
global $page, $webimroot;
$page['tabselected'] = $active;
$page['tabs'] = array(
array('title'=> getlocal("page_settings.tab.main"), 'link' => "$webimroot/operator/settings.php"),
array('title'=> getlocal("page_settings.tab.features"), 'link' => "$webimroot/operator/features.php"),
array('title'=> getlocal("page_settings.tab.performance"), 'link' => "$webimroot/operator/performance.php"),
array('title'=> getlocal("page_settings.tab.themes"), 'link' => "$webimroot/operator/themes.php"),
array('title' => getlocal("page_settings.tab.main"), 'link' => "$webimroot/operator/settings.php"),
array('title' => getlocal("page_settings.tab.features"), 'link' => "$webimroot/operator/features.php"),
array('title' => getlocal("page_settings.tab.performance"), 'link' => "$webimroot/operator/performance.php"),
array('title' => getlocal("page_settings.tab.themes"), 'link' => "$webimroot/operator/themes.php"),
);
}

View File

@ -19,38 +19,40 @@
* Evgeny Gryaznov - initial API and implementation
*/
function get_useragent_version($userAgent) {
global $knownAgents;
if (is_array($knownAgents)) {
$userAgent = strtolower($userAgent);
foreach( $knownAgents as $agent ) {
if( strstr($userAgent,$agent) ) {
if( preg_match( "/".$agent."[\\s\/]?(\\d+(\\.\\d+(\\.\\d+(\\.\\d+)?)?)?)/", $userAgent, $matches ) ) {
$ver = $matches[1];
if($agent=='safari') {
if(preg_match( "/version\/(\\d+(\\.\\d+(\\.\\d+)?)?)/", $userAgent, $matches)) {
$ver = $matches[1];
} else {
$ver = "1 or 2 (build ".$ver.")";
function get_useragent_version($userAgent)
{
global $knownAgents;
if (is_array($knownAgents)) {
$userAgent = strtolower($userAgent);
foreach ($knownAgents as $agent) {
if (strstr($userAgent, $agent)) {
if (preg_match("/" . $agent . "[\\s\/]?(\\d+(\\.\\d+(\\.\\d+(\\.\\d+)?)?)?)/", $userAgent, $matches)) {
$ver = $matches[1];
if ($agent == 'safari') {
if (preg_match("/version\/(\\d+(\\.\\d+(\\.\\d+)?)?)/", $userAgent, $matches)) {
$ver = $matches[1];
} else {
$ver = "1 or 2 (build " . $ver . ")";
}
if (preg_match("/mobile\/(\\d+(\\.\\d+(\\.\\d+)?)?)/", $userAgent, $matches)) {
$userAgent = "iPhone " . $matches[1] . " ($agent $ver)";
break;
}
}
if(preg_match( "/mobile\/(\\d+(\\.\\d+(\\.\\d+)?)?)/", $userAgent, $matches)) {
$userAgent = "iPhone ".$matches[1]." ($agent $ver)";
break;
}
}
$userAgent = ucfirst($agent)." ".$ver;
break;
$userAgent = ucfirst($agent) . " " . $ver;
break;
}
}
}
}
}
return $userAgent;
return $userAgent;
}
function get_user_addr($addr) {
function get_user_addr($addr)
{
global $settings;
if($settings['geolink'] && preg_match( "/(\\d+\\.\\d+\\.\\d+\\.\\d+)/", $addr, $matches )) {
if ($settings['geolink'] && preg_match("/(\\d+\\.\\d+\\.\\d+\\.\\d+)/", $addr, $matches)) {
$userip = $matches[1];
return get_popup(str_replace("{ip}", $userip, $settings['geolink']), '', htmlspecialchars($addr), "GeoLocation", "ip$userip", $settings['geolinkparams']);
}

View File

@ -29,47 +29,47 @@ require_once('../libs/expand.php');
$operator = check_login();
loadsettings();
if($settings['enablessl'] == "1" && $settings['forcessl'] == "1") {
if(!is_secure_request()) {
if ($settings['enablessl'] == "1" && $settings['forcessl'] == "1") {
if (!is_secure_request()) {
$requested = $_SERVER['PHP_SELF'];
if($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['QUERY_STRING']) {
header("Location: ".get_app_location(true,true)."/operator/agent.php?".$_SERVER['QUERY_STRING']);
if ($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['QUERY_STRING']) {
header("Location: " . get_app_location(true, true) . "/operator/agent.php?" . $_SERVER['QUERY_STRING']);
} else {
die("only https connections are handled");
}
}
exit;
}
}
$threadid = verifyparam( "thread", "/^\d{1,8}$/");
$threadid = verifyparam("thread", "/^\d{1,8}$/");
if( !isset($_GET['token']) ) {
if (!isset($_GET['token'])) {
$remote_level = get_remote_level($_SERVER['HTTP_USER_AGENT']);
if( $remote_level != "ajaxed" ) {
if ($remote_level != "ajaxed") {
die("old browser is used, please update it");
}
$thread = thread_by_id($threadid);
if( !$thread || !isset($thread['ltoken']) ) {
if (!$thread || !isset($thread['ltoken'])) {
die("wrong thread");
}
$viewonly = verifyparam( "viewonly", "/^true$/", false);
$viewonly = verifyparam("viewonly", "/^true$/", false);
$forcetake = verifyparam("force", "/^true$/", false);
if( !$viewonly && $thread['istate'] == $state_chatting && $operator['operatorid'] != $thread['agentId'] ) {
if (!$viewonly && $thread['istate'] == $state_chatting && $operator['operatorid'] != $thread['agentId']) {
if(!is_capable($can_takeover, $operator)) {
if (!is_capable($can_takeover, $operator)) {
$errors = array("Cannot take over");
start_html_output();
expand("../styles", getchatstyle(), "error.tpl");
exit;
}
if( $forcetake == false ) {
if ($forcetake == false) {
$page = array(
'user' => topage($thread['userName']), 'agent' => topage($thread['agentName']), 'link' => $_SERVER['PHP_SELF']."?thread=$threadid&amp;force=true"
'user' => topage($thread['userName']), 'agent' => topage($thread['agentName']), 'link' => $_SERVER['PHP_SELF'] . "?thread=$threadid&amp;force=true"
);
start_html_output();
require('../view/confirm.php');
@ -78,8 +78,8 @@ if( !isset($_GET['token']) ) {
}
if (!$viewonly) {
take_thread($thread,$operator);
} else if(!is_capable($can_viewthreads, $operator)) {
take_thread($thread, $operator);
} else if (!is_capable($can_viewthreads, $operator)) {
$errors = array("Cannot view threads");
start_html_output();
expand("../styles", getchatstyle(), "error.tpl");
@ -91,14 +91,14 @@ if( !isset($_GET['token']) ) {
exit;
}
$token = verifyparam( "token", "/^\d{1,8}$/");
$token = verifyparam("token", "/^\d{1,8}$/");
$thread = thread_by_id($threadid);
if( !$thread || !isset($thread['ltoken']) || $token != $thread['ltoken'] ) {
if (!$thread || !isset($thread['ltoken']) || $token != $thread['ltoken']) {
die("wrong thread");
}
if($thread['agentId'] != $operator['operatorid'] && !is_capable($can_viewthreads, $operator)) {
if ($thread['agentId'] != $operator['operatorid'] && !is_capable($can_viewthreads, $operator)) {
$errors = array("Cannot view threads");
start_html_output();
expand("../styles", getchatstyle(), "error.tpl");
@ -109,9 +109,9 @@ setup_chatview_for_operator($thread, $operator);
start_html_output();
$pparam = verifyparam( "act", "/^(redirect)$/", "default");
if( $pparam == "redirect" ) {
setup_redirect_links($threadid,$token);
$pparam = verifyparam("act", "/^(redirect)$/", "default");
if ($pparam == "redirect") {
setup_redirect_links($threadid, $token);
expand("../styles", getchatstyle(), "redirect.tpl");
} else {
expand("../styles", getchatstyle(), "chat.tpl");

View File

@ -25,7 +25,7 @@ require_once('../libs/operator.php');
$operator = check_login(false);
start_xml_output();
if($operator) {
if ($operator) {
echo "<login><status>OK</status></login>";
} else {
echo "<login><status>FAILED</status></login>";

View File

@ -25,57 +25,57 @@ require_once('../libs/operator_settings.php');
$operator = check_login();
$opId = verifyparam( "op","/^\d{1,9}$/");
$opId = verifyparam("op", "/^\d{1,9}$/");
$page = array('opid' => $opId, 'avatar' => '');
$errors = array();
$canmodify = ($opId == $operator['operatorid'] && is_capable($can_modifyprofile, $operator))
|| is_capable($can_administrate, $operator);
$canmodify = ($opId == $operator['operatorid'] && is_capable($can_modifyprofile, $operator))
|| is_capable($can_administrate, $operator);
$op = operator_by_id($opId);
if( !$op ) {
if (!$op) {
$errors[] = getlocal("no_such_operator");
} else if( isset($_POST['op']) ) {
} else if (isset($_POST['op'])) {
$avatar = $op['vcavatar'];
if(!$canmodify) {
if (!$canmodify) {
$errors[] = getlocal('page_agent.cannot_modify');
} else if( isset($_FILES['avatarFile']) && $_FILES['avatarFile']['name']) {
$valid_types = array("gif","jpg", "png", "tif");
} else if (isset($_FILES['avatarFile']) && $_FILES['avatarFile']['name']) {
$valid_types = array("gif", "jpg", "png", "tif");
$orig_filename = $_FILES['avatarFile']['name'];
$tmp_file_name = $_FILES['avatarFile']['tmp_name'];
$orig_filename = $_FILES['avatarFile']['name'];
$tmp_file_name = $_FILES['avatarFile']['tmp_name'];
$ext = strtolower(substr($orig_filename, 1 + strrpos($orig_filename, ".")));
$new_file_name = "$opId.$ext";
loadsettings();
$ext = strtolower(substr($orig_filename, 1 + strrpos($orig_filename, ".")));
$new_file_name = "$opId.$ext";
loadsettings();
$file_size = $_FILES['avatarFile']['size'];
if ($file_size == 0 || $file_size > $settings['max_uploaded_file_size']) {
$errors[] = failed_uploading_file($orig_filename, "errors.file.size.exceeded");
} elseif(!in_array($ext, $valid_types)) {
$errors[] = failed_uploading_file($orig_filename, "errors.invalid.file.type");
} else {
$avatar_local_dir = "../images/avatar/";
$full_file_path = $avatar_local_dir.$new_file_name;
if (file_exists($full_file_path)) {
unlink($full_file_path);
}
if (!move_uploaded_file($_FILES['avatarFile']['tmp_name'], $full_file_path)) {
$errors[] = failed_uploading_file($orig_filename, "errors.file.move.error");
} else {
$avatar = "$webimroot/images/avatar/$new_file_name";
}
}
} else {
$errors[] = "No file selected";
}
$file_size = $_FILES['avatarFile']['size'];
if ($file_size == 0 || $file_size > $settings['max_uploaded_file_size']) {
$errors[] = failed_uploading_file($orig_filename, "errors.file.size.exceeded");
} elseif (!in_array($ext, $valid_types)) {
$errors[] = failed_uploading_file($orig_filename, "errors.invalid.file.type");
} else {
$avatar_local_dir = "../images/avatar/";
$full_file_path = $avatar_local_dir . $new_file_name;
if (file_exists($full_file_path)) {
unlink($full_file_path);
}
if (!move_uploaded_file($_FILES['avatarFile']['tmp_name'], $full_file_path)) {
$errors[] = failed_uploading_file($orig_filename, "errors.file.move.error");
} else {
$avatar = "$webimroot/images/avatar/$new_file_name";
}
}
} else {
$errors[] = "No file selected";
}
if(count($errors) == 0) {
update_operator_avatar($op['operatorid'],$avatar);
if (count($errors) == 0) {
update_operator_avatar($op['operatorid'], $avatar);
if ($opId && $avatar && $_SESSION[$mysqlprefix . 'operator'] && $operator['operatorid'] == $opId) {
$_SESSION[$mysqlprefix . 'operator']['vcavatar'] = $avatar;
@ -88,18 +88,18 @@ if( !$op ) {
} else {
if (isset($_GET['delete']) && $_GET['delete'] == "true" && $canmodify) {
update_operator_avatar($op['operatorid'],'');
update_operator_avatar($op['operatorid'], '');
header("Location: $webimroot/operator/avatar.php?op=$opId");
exit;
}
$page['avatar'] = topage($op['vcavatar']);
}
$page['currentop'] = $op ? topage(get_operator_name($op))." (".$op['vclogin'].")" : "-not found-";
$page['currentop'] = $op ? topage(get_operator_name($op)) . " (" . $op['vclogin'] . ")" : "-not found-";
$page['canmodify'] = $canmodify ? "1" : "";
prepare_menu($operator);
setup_operator_settings_tabs($opId,1);
setup_operator_settings_tabs($opId, 1);
start_html_output();
require('../view/avatar.php');
?>

View File

@ -31,55 +31,55 @@ $page['thread'] = '';
$page['threadid'] = '';
$errors = array();
if( isset($_POST['address']) ) {
$banId = verifyparam( "banId", "/^(\d{1,9})?$/", "");
if (isset($_POST['address'])) {
$banId = verifyparam("banId", "/^(\d{1,9})?$/", "");
$address = getparam("address");
$days = getparam("days");
$comment = getparam('comment');
$threadid = isset($_POST['threadid']) ? getparam('threadid') : "";
if( !$address ) {
if (!$address) {
$errors[] = no_field("form.field.address");
}
if( !preg_match( "/^\d+$/", $days )) {
if (!preg_match("/^\d+$/", $days)) {
$errors[] = wrong_field("form.field.ban_days");
}
if( !$comment ) {
if (!$comment) {
$errors[] = no_field("form.field.ban_comment");
}
$link = connect();
$existing_ban = ban_for_addr_($address,$link);
$existing_ban = ban_for_addr_($address, $link);
mysql_close($link);
if( (!$banId && $existing_ban) ||
( $banId && $existing_ban && $banId != $existing_ban['banid']) ) {
$errors[] = getlocal2("ban.error.duplicate",array($address,$existing_ban['banid']));
if ((!$banId && $existing_ban) ||
($banId && $existing_ban && $banId != $existing_ban['banid'])) {
$errors[] = getlocal2("ban.error.duplicate", array($address, $existing_ban['banid']));
}
if( count($errors) == 0 ) {
if (count($errors) == 0) {
$link = connect();
$utime = time() + $days * 24*60*60;
$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)",
mysql_real_escape_string($address,$link),
mysql_real_escape_string($comment,$link));
perform_query($query,$link);
mysql_real_escape_string($address, $link),
mysql_real_escape_string($comment, $link));
perform_query($query, $link);
} else {
$query = sprintf(
"update ${mysqlprefix}chatban set dtmtill = %s,address = '%s',comment = '%s' where banid = $banId",
"FROM_UNIXTIME($utime)",
mysql_real_escape_string($address,$link),
mysql_real_escape_string($comment,$link));
perform_query($query,$link);
}
mysql_real_escape_string($address, $link),
mysql_real_escape_string($comment, $link));
perform_query($query, $link);
}
mysql_close($link);
if(!$threadid) {
if (!$threadid) {
header("Location: $webimroot/operator/blocked.php");
exit;
} else {
@ -93,24 +93,24 @@ if( isset($_POST['address']) ) {
$page['formcomment'] = topage($comment);
$page['threadid'] = $threadid;
}
} else if(isset($_GET['id'])) {
$banId = verifyparam( 'id', "/^\d{1,9}$/");
} 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);
mysql_close($link);
if( $ban ) {
if ($ban) {
$page['banId'] = topage($ban['banid']);
$page['formaddress'] = topage($ban['address']);
$page['formdays'] = topage(round($ban['days']/86400));
$page['formdays'] = topage(round($ban['days'] / 86400));
$page['formcomment'] = topage($ban['comment']);
} else {
$errors[] = "Wrong id";
}
} else if(isset($_GET['thread'])) {
$threadid = verifyparam( 'thread', "/^\d{1,9}$/");
} else if (isset($_GET['thread'])) {
$threadid = verifyparam('thread', "/^\d{1,9}$/");
$thread = thread_by_id($threadid);
if( $thread ) {
if ($thread) {
$page['thread'] = topage($thread['userName']);
$page['threadid'] = $threadid;
$page['formaddress'] = topage($thread['remote']);

View File

@ -32,22 +32,22 @@ setlocale(LC_TIME, getstring("time.locale"));
$link = connect();
if( isset($_GET['act']) && $_GET['act'] == 'del' ) {
if (isset($_GET['act']) && $_GET['act'] == 'del') {
$banId = isset($_GET['id']) ? $_GET['id'] : "";
if( !preg_match( "/^\d+$/", $banId )) {
if (!preg_match("/^\d+$/", $banId)) {
$errors[] = "Cannot delete: wrong argument";
}
if( count($errors) == 0 ) {
perform_query("delete from ${mysqlprefix}chatban where banid = $banId",$link);
if (count($errors) == 0) {
perform_query("delete from ${mysqlprefix}chatban where banid = $banId", $link);
header("Location: $webimroot/operator/blocked.php");
exit;
}
}
$result = mysql_query("select banid,unix_timestamp(dtmtill) as till,address,comment from ${mysqlprefix}chatban", $link)
or die(' Query failed: ' .mysql_error());
or die(' Query failed: ' . mysql_error());
$blockedList = array();
while ($ban = mysql_fetch_array($result, MYSQL_ASSOC)) {

View File

@ -31,33 +31,34 @@ loadsettings();
$errors = array();
$page = array();
function load_canned_messages($locale, $groupid) {
function load_canned_messages($locale, $groupid)
{
global $mysqlprefix;
$link = connect();
$query = "select id, vcvalue from ${mysqlprefix}chatresponses ".
"where locale = '".$locale."' AND (".
($groupid
? "groupid = $groupid"
: "groupid is NULL OR groupid = 0").
$query = "select id, 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);
if(!$groupid && count($result) == 0) {
foreach(explode("\n", getstring_('chat.predefined_answers', $locale)) as $answer) {
if (!$groupid && count($result) == 0) {
foreach (explode("\n", getstring_('chat.predefined_answers', $locale)) as $answer) {
$result[] = array('id' => '', 'vcvalue' => $answer);
}
if(count($result) > 0) {
if (count($result) > 0) {
$updatequery = "insert into ${mysqlprefix}chatresponses (vcvalue,locale,groupid) values ";
for($i=0;$i<count($result);$i++) {
if($i > 0) {
for ($i = 0; $i < count($result); $i++) {
if ($i > 0) {
$updatequery .= ", ";
}
$updatequery .= "('".mysql_real_escape_string($result[$i]['vcvalue'], $link)."','$locale', NULL)";
$updatequery .= "('" . mysql_real_escape_string($result[$i]['vcvalue'], $link) . "','$locale', NULL)";
}
perform_query($updatequery, $link);
$result = select_multi_assoc($query, $link);
}
}
}
mysql_close($link);
return $result;
}
@ -66,24 +67,24 @@ function load_canned_messages($locale, $groupid) {
$all_locales = get_available_locales();
$locales_with_label = array();
foreach($all_locales as $id) {
$locales_with_label[] = array('id' => $id, 'name' => getlocal_($id,"names"));
foreach ($all_locales as $id) {
$locales_with_label[] = array('id' => $id, 'name' => getlocal_($id, "names"));
}
$page['locales'] = $locales_with_label;
$lang = verifyparam("lang", "/^[\w-]{2,5}$/", "");
if( !$lang || !in_array($lang,$all_locales) ) {
$lang = in_array($current_locale,$all_locales) ? $current_locale : $all_locales[0];
if (!$lang || !in_array($lang, $all_locales)) {
$lang = in_array($current_locale, $all_locales) ? $current_locale : $all_locales[0];
}
# groups
$groupid = "";
if($settings['enablegroups'] == '1') {
$groupid = verifyparam( "group", "/^\d{0,8}$/", "");
if($groupid) {
if ($settings['enablegroups'] == '1') {
$groupid = verifyparam("group", "/^\d{0,8}$/", "");
if ($groupid) {
$group = group_by_id($groupid);
if(!$group) {
if (!$group) {
$errors[] = getlocal("page.group.no_such");
$groupid = "";
}
@ -94,23 +95,23 @@ if($settings['enablegroups'] == '1') {
mysql_close($link);
$page['groups'] = array();
$page['groups'][] = array('groupid' => '', 'vclocalname' => getlocal("page.gen_button.default_group"));
foreach($allgroups as $g) {
foreach ($allgroups as $g) {
$page['groups'][] = $g;
}
}
}
# delete
if(isset($_GET['act']) && $_GET['act'] == 'delete') {
if (isset($_GET['act']) && $_GET['act'] == 'delete') {
$key = isset($_GET['key']) ? $_GET['key'] : "";
if( !preg_match( "/^\d+$/", $key )) {
if (!preg_match("/^\d+$/", $key)) {
$errors[] = "Wrong key";
}
if( count($errors) == 0 ) {
if (count($errors) == 0) {
$link = connect();
perform_query("delete from ${mysqlprefix}chatresponses where id = $key",$link);
perform_query("delete from ${mysqlprefix}chatresponses where id = $key", $link);
mysql_close($link);
header("Location: $webimroot/operator/canned.php?lang=$lang&group=$groupid");
exit;

View File

@ -23,7 +23,8 @@ require_once('../libs/common.php');
require_once('../libs/operator.php');
require_once('../libs/pagination.php');
function load_message($key) {
function load_message($key)
{
global $mysqlprefix;
$link = connect();
$result = select_one_row("select vcvalue from ${mysqlprefix}chatresponses where id = $key", $link);
@ -31,20 +32,22 @@ function load_message($key) {
return $result ? $result['vcvalue'] : null;
}
function save_message($key,$message) {
function save_message($key, $message)
{
global $mysqlprefix;
$link = connect();
perform_query("update ${mysqlprefix}chatresponses set vcvalue = '".mysql_real_escape_string($message,$link)."' ".
"where id = $key", $link);
perform_query("update ${mysqlprefix}chatresponses set vcvalue = '" . mysql_real_escape_string($message, $link) . "' " .
"where id = $key", $link);
mysql_close($link);
}
function add_message($locale,$groupid,$message) {
function add_message($locale, $groupid, $message)
{
global $mysqlprefix;
$link = connect();
perform_query("insert into ${mysqlprefix}chatresponses (locale,groupid,vcvalue) values ('$locale',".
($groupid ? "$groupid, " : "null, ").
"'".mysql_real_escape_string($message,$link)."')", $link);
perform_query("insert into ${mysqlprefix}chatresponses (locale,groupid,vcvalue) values ('$locale'," .
($groupid ? "$groupid, " : "null, ") .
"'" . mysql_real_escape_string($message, $link) . "')", $link);
mysql_close($link);
}
@ -56,9 +59,9 @@ $stringid = verifyparam("key", "/^\d{0,9}$/", "");
$errors = array();
$page = array();
if($stringid) {
if ($stringid) {
$message = load_message($stringid);
if(!$message) {
if (!$message) {
$errors[] = getlocal("cannededit.no_such");
$stringid = "";
}
@ -66,19 +69,19 @@ if($stringid) {
$message = "";
$page['locale'] = verifyparam("lang", "/^[\w-]{2,5}$/", "");
$page['groupid'] = "";
if($settings['enablegroups'] == '1') {
$page['groupid'] = verifyparam( "group", "/^\d{0,8}$/");
if ($settings['enablegroups'] == '1') {
$page['groupid'] = verifyparam("group", "/^\d{0,8}$/");
}
}
if(isset($_POST['message'])) {
if (isset($_POST['message'])) {
$message = getparam('message');
if(!$message) {
if (!$message) {
$errors[] = no_field("form.field.message");
}
if(count($errors) == 0) {
if($stringid) {
if (count($errors) == 0) {
if ($stringid) {
save_message($stringid, $message);
} else {
add_message($page['locale'], $page['groupid'], $message);

View File

@ -29,30 +29,30 @@ $page = array('agentId' => '');
$errors = array();
$options = array(
'enableban', 'usercanchangename', 'enablegroups', 'enablestatistics', 'enablejabber',
'enablessl', 'forcessl',
'enablepresurvey', 'surveyaskmail', 'surveyaskgroup', 'surveyaskmessage',
'enablepopupnotification', 'showonlineoperators',
'enablecaptcha');
'enableban', 'usercanchangename', 'enablegroups', 'enablestatistics', 'enablejabber',
'enablessl', 'forcessl',
'enablepresurvey', 'surveyaskmail', 'surveyaskgroup', 'surveyaskmessage',
'enablepopupnotification', 'showonlineoperators',
'enablecaptcha');
loadsettings();
if($settings['featuresversion'] != $featuresversion) {
if ($settings['featuresversion'] != $featuresversion) {
$settings['featuresversion'] = $featuresversion;
update_settings();
}
$params = array();
foreach($options as $opt) {
foreach ($options as $opt) {
$params[$opt] = $settings[$opt];
}
if (isset($_POST['sent'])) {
if (is_capable($can_administrate, $operator)) {
foreach($options as $opt) {
$settings[$opt] = verifyparam($opt,"/^on$/", "") == "on" ? "1" : "0";
foreach ($options as $opt) {
$settings[$opt] = verifyparam($opt, "/^on$/", "") == "on" ? "1" : "0";
}
update_settings();
header("Location: $webimroot/operator/features.php?stored");
exit;
update_settings();
header("Location: $webimroot/operator/features.php?stored");
exit;
} else {
$errors[] = "Not an administrator";
}
@ -60,8 +60,8 @@ if (isset($_POST['sent'])) {
$page['canmodify'] = is_capable($can_administrate, $operator);
$page['stored'] = isset($_GET['stored']);
foreach($options as $opt) {
$page["form$opt"] = $params[$opt] == "1";
foreach ($options as $opt) {
$page["form$opt"] = $params[$opt] == "1";
}
prepare_menu($operator);

View File

@ -29,7 +29,7 @@ loadsettings();
$imageLocales = get_image_locales_map("../locales");
$image = verifyparam(isset($_GET['image']) ? "image" : "i", "/^\w+$/", "webim");
if(!isset($imageLocales[$image])) {
if (!isset($imageLocales[$image])) {
$errors[] = "Unknown image: $image";
$avail = array_keys($imageLocales);
$image = $avail[0];
@ -37,31 +37,31 @@ if(!isset($imageLocales[$image])) {
$image_locales = $imageLocales[$image];
$stylelist = get_style_list("../styles");
$style = verifyparam("style","/^\w*$/", "");
if($style && !in_array($style, $stylelist)) {
$style = verifyparam("style", "/^\w*$/", "");
if ($style && !in_array($style, $stylelist)) {
$style = "";
}
$groupid = verifyparam_groupid("group");
$showhost = verifyparam("hostname","/^on$/", "") == "on";
$forcesecure = verifyparam("secure","/^on$/", "") == "on";
$modsecurity = verifyparam("modsecurity","/^on$/", "") == "on";
$showhost = verifyparam("hostname", "/^on$/", "") == "on";
$forcesecure = verifyparam("secure", "/^on$/", "") == "on";
$modsecurity = verifyparam("modsecurity", "/^on$/", "") == "on";
$lang = verifyparam("lang", "/^[\w-]{2,5}$/", "");
if( !$lang || !in_array($lang,$image_locales) )
$lang = in_array($current_locale,$image_locales) ? $current_locale : $image_locales[0];
if (!$lang || !in_array($lang, $image_locales))
$lang = in_array($current_locale, $image_locales) ? $current_locale : $image_locales[0];
$file = "../locales/${lang}/button/${image}_on.gif";
$size = get_gifimage_size($file);
$imagehref = get_app_location($showhost,$forcesecure)."/b.php?i=$image&amp;lang=$lang";
if($groupid) {
$imagehref = get_app_location($showhost, $forcesecure) . "/b.php?i=$image&amp;lang=$lang";
if ($groupid) {
$imagehref .= "&amp;group=$groupid";
}
$message = get_image($imagehref,$size[0],$size[1]);
$message = get_image($imagehref, $size[0], $size[1]);
$page = array();
$page['buttonCode'] = generate_button("",$lang,$style,$groupid,$message,$showhost,$forcesecure,$modsecurity);
$page['buttonCode'] = generate_button("", $lang, $style, $groupid, $message, $showhost, $forcesecure, $modsecurity);
$page['availableImages'] = array_keys($imageLocales);
$page['availableLocales'] = $image_locales;
$page['availableStyles'] = $stylelist;

View File

@ -28,26 +28,26 @@ $operator = check_login();
loadsettings();
$stylelist = get_style_list("../styles");
$style = verifyparam("style","/^\w*$/", "");
if($style && !in_array($style, $stylelist)) {
$style = verifyparam("style", "/^\w*$/", "");
if ($style && !in_array($style, $stylelist)) {
$style = "";
}
$groupid = verifyparam_groupid("group");
$showhost = verifyparam("hostname","/^on$/", "") == "on";
$forcesecure = verifyparam("secure","/^on$/", "") == "on";
$modsecurity = verifyparam("modsecurity","/^on$/", "") == "on";
$showhost = verifyparam("hostname", "/^on$/", "") == "on";
$forcesecure = verifyparam("secure", "/^on$/", "") == "on";
$modsecurity = verifyparam("modsecurity", "/^on$/", "") == "on";
$allLocales = get_available_locales();
$lang = verifyparam("lang", "/^[\w-]{2,5}$/", "");
if( !$lang || !in_array($lang,$allLocales) )
$lang = in_array($current_locale,$allLocales) ? $current_locale : $allLocales[0];
if (!$lang || !in_array($lang, $allLocales))
$lang = in_array($current_locale, $allLocales) ? $current_locale : $allLocales[0];
$message = "Click to chat"; // TODO
$page = array();
$page['buttonCode'] = generate_button("",$lang,$style,$groupid,$message,$showhost,$forcesecure,$modsecurity);
$page['buttonCode'] = generate_button("", $lang, $style, $groupid, $message, $showhost, $forcesecure, $modsecurity);
$page['availableLocales'] = $allLocales;
$page['availableStyles'] = $stylelist;
$page['groups'] = get_groups_list();

View File

@ -29,34 +29,37 @@ $page = array('grid' => '');
$errors = array();
$groupid = '';
function group_by_name($name) {
function group_by_name($name)
{
global $mysqlprefix;
$link = connect();
$group = select_one_row(
"select * from ${mysqlprefix}chatgroup where vclocalname = '".mysql_real_escape_string($name)."'", $link );
"select * from ${mysqlprefix}chatgroup where vclocalname = '" . mysql_real_escape_string($name) . "'", $link);
mysql_close($link);
return $group;
}
function create_group($name,$descr,$commonname,$commondescr) {
function create_group($name, $descr, $commonname, $commondescr)
{
global $mysqlprefix;
$link = connect();
$query = sprintf(
"insert into ${mysqlprefix}chatgroup (vclocalname,vclocaldescription,vccommonname,vccommondescription) values ('%s','%s','%s','%s')",
mysql_real_escape_string($name),
mysql_real_escape_string($descr),
mysql_real_escape_string($commonname),
mysql_real_escape_string($commondescr));
perform_query($query,$link);
mysql_real_escape_string($name),
mysql_real_escape_string($descr),
mysql_real_escape_string($commonname),
mysql_real_escape_string($commondescr));
perform_query($query, $link);
$id = mysql_insert_id($link);
$newdep = select_one_row("select * from ${mysqlprefix}chatgroup where groupid = $id", $link );
$newdep = select_one_row("select * from ${mysqlprefix}chatgroup where groupid = $id", $link);
mysql_close($link);
return $newdep;
}
function update_group($groupid,$name,$descr,$commonname,$commondescr) {
function update_group($groupid, $name, $descr, $commonname, $commondescr)
{
global $mysqlprefix;
$link = connect();
$query = sprintf(
@ -65,35 +68,35 @@ function update_group($groupid,$name,$descr,$commonname,$commondescr) {
mysql_real_escape_string($descr),
mysql_real_escape_string($commonname),
mysql_real_escape_string($commondescr),
$groupid );
$groupid);
perform_query($query,$link);
perform_query($query, $link);
mysql_close($link);
}
if( isset($_POST['name'])) {
$groupid = verifyparam( "gid", "/^(\d{1,9})?$/", "");
if (isset($_POST['name'])) {
$groupid = verifyparam("gid", "/^(\d{1,9})?$/", "");
$name = getparam('name');
$description = getparam('description');
$commonname = getparam('commonname');
$commondescription = getparam('commondescription');
if( !$name )
if (!$name)
$errors[] = no_field("form.field.groupname");
$existing_group = group_by_name($name);
if( (!$groupid && $existing_group) ||
( $groupid && $existing_group && $groupid != $existing_group['groupid']) )
if ((!$groupid && $existing_group) ||
($groupid && $existing_group && $groupid != $existing_group['groupid']))
$errors[] = getlocal("page.group.duplicate_name");
if( count($errors) == 0 ) {
if (count($errors) == 0) {
if (!$groupid) {
$newdep = create_group($name,$description,$commonname,$commondescription);
header("Location: $webimroot/operator/groupmembers.php?gid=".$newdep['groupid']);
$newdep = create_group($name, $description, $commonname, $commondescription);
header("Location: $webimroot/operator/groupmembers.php?gid=" . $newdep['groupid']);
exit;
} else {
update_group($groupid,$name,$description,$commonname,$commondescription);
update_group($groupid, $name, $description, $commonname, $commondescription);
header("Location: $webimroot/operator/group.php?gid=$groupid&stored");
exit;
}
@ -105,11 +108,11 @@ if( isset($_POST['name'])) {
$page['grid'] = topage($groupid);
}
} else if( isset($_GET['gid']) ) {
$groupid = verifyparam( 'gid', "/^\d{1,9}$/");
} else if (isset($_GET['gid'])) {
$groupid = verifyparam('gid', "/^\d{1,9}$/");
$group = group_by_id($groupid);
if( !$group ) {
if (!$group) {
$errors[] = getlocal("page.group.no_such");
$page['grid'] = topage($groupid);
} else {

View File

@ -25,7 +25,8 @@ require_once('../libs/groups.php');
$operator = check_login();
function get_group_members($groupid) {
function get_group_members($groupid)
{
global $mysqlprefix;
$link = connect();
$query = "select operatorid from ${mysqlprefix}chatgroupoperator where groupid = $groupid";
@ -34,17 +35,19 @@ function get_group_members($groupid) {
return $result;
}
function update_group_members($groupid,$newvalue) {
function update_group_members($groupid, $newvalue)
{
global $mysqlprefix;
$link = connect();
perform_query("delete from ${mysqlprefix}chatgroupoperator where groupid = $groupid", $link);
foreach($newvalue as $opid) {
foreach ($newvalue as $opid) {
perform_query("insert into ${mysqlprefix}chatgroupoperator (groupid, operatorid) values ($groupid,$opid)", $link);
}
mysql_close($link);
}
function get_operators() {
function get_operators()
{
global $mysqlprefix;
$link = connect();
@ -54,25 +57,25 @@ function get_operators() {
return $result;
}
$groupid = verifyparam( "gid","/^\d{1,9}$/");
$groupid = verifyparam("gid", "/^\d{1,9}$/");
$page = array('groupid' => $groupid);
$page['operators'] = get_operators();
$errors = array();
$group = group_by_id($groupid);
if( !$group ) {
if (!$group) {
$errors[] = getlocal("page.group.no_such");
} else if( isset($_POST['gid']) ) {
} else if (isset($_POST['gid'])) {
$new_members = array();
foreach($page['operators'] as $op) {
if( verifyparam("op".$op['operatorid'],"/^on$/", "") == "on") {
foreach ($page['operators'] as $op) {
if (verifyparam("op" . $op['operatorid'], "/^on$/", "") == "on") {
$new_members[] = $op['operatorid'];
}
}
update_group_members($groupid, $new_members);
header("Location: $webimroot/operator/groupmembers.php?gid=$groupid&stored");
exit;
@ -81,7 +84,7 @@ if( !$group ) {
$page['formop'] = array();
$page['currentgroup'] = $group ? topage(htmlspecialchars($group['vclocalname'])) : "";
foreach(get_group_members($groupid) as $rel) {
foreach (get_group_members($groupid) as $rel) {
$page['formop'][] = $rel['operatorid'];
}

View File

@ -24,37 +24,39 @@ require_once('../libs/operator.php');
$operator = check_login();
if( isset($_GET['act']) && $_GET['act'] == 'del' ) {
if (isset($_GET['act']) && $_GET['act'] == 'del') {
$groupid = isset($_GET['gid']) ? $_GET['gid'] : "";
if( !preg_match( "/^\d+$/", $groupid )) {
if (!preg_match("/^\d+$/", $groupid)) {
$errors[] = "Cannot delete: wrong argument";
}
if( !is_capable($can_administrate, $operator)) {
if (!is_capable($can_administrate, $operator)) {
$errors[] = "You are not allowed to remove groups";
}
if( count($errors) == 0 ) {
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);
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);
mysql_close($link);
header("Location: $webimroot/operator/groups.php");
exit;
}
}
function is_online($group) {
function is_online($group)
{
global $settings;
return $group['ilastseen'] !== NULL && $group['ilastseen'] < $settings['online_timeout'] ? "1" : "";
return $group['ilastseen'] !== NULL && $group['ilastseen'] < $settings['online_timeout'] ? "1" : "";
}
function is_away($group) {
function is_away($group)
{
global $settings;
return $group['ilastseenaway'] !== NULL && $group['ilastseenaway'] < $settings['online_timeout'] ? "1" : "";
return $group['ilastseenaway'] !== NULL && $group['ilastseenaway'] < $settings['online_timeout'] ? "1" : "";
}

View File

@ -33,31 +33,31 @@ setlocale(LC_TIME, getstring("time.locale"));
$page = array();
$query = isset($_GET['q']) ? myiconv(getoutputenc(), $webim_encoding, $_GET['q']) : false;
if($query !== false) {
if ($query !== false) {
$link = connect();
$result = mysql_query("select ${mysqlprefix}chatgroup.groupid as groupid, vclocalname ".
"from ${mysqlprefix}chatgroup order by vclocalname", $link);
$result = mysql_query("select ${mysqlprefix}chatgroup.groupid as groupid, vclocalname " .
"from ${mysqlprefix}chatgroup order by vclocalname", $link);
$groupName = array();
while ($group = mysql_fetch_array($result, MYSQL_ASSOC)) {
$groupName[$group['groupid']] = $group['vclocalname'];
}
mysql_free_result($result);
$page['groupName'] = $groupName;
$escapedQuery = mysql_real_escape_string($query,$link);
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",
"((${mysqlprefix}chatthread.userName LIKE '%%$escapedQuery%%') or (${mysqlprefix}chatmessage.tmessage LIKE '%%$escapedQuery%%'))"
),
"order by created DESC",
"DISTINCT ${mysqlprefix}chatthread.dtmcreated", $link);
$escapedQuery = mysql_real_escape_string($query, $link);
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",
"((${mysqlprefix}chatthread.userName LIKE '%%$escapedQuery%%') or (${mysqlprefix}chatmessage.tmessage LIKE '%%$escapedQuery%%'))"
),
"order by created DESC",
"DISTINCT ${mysqlprefix}chatthread.dtmcreated", $link);
mysql_close($link);
$page['formq'] = topage($query);

View File

@ -23,21 +23,21 @@ require_once('../libs/common.php');
require_once('../libs/operator.php');
$errors = array();
$page = array( 'formisRemember' => true, 'version' => $version);
$page = array('formisRemember' => true, 'version' => $version);
if( isset($_POST['login']) && isset($_POST['password']) ) {
if (isset($_POST['login']) && isset($_POST['password'])) {
$login = getparam('login');
$password = getparam('password');
$remember = isset($_POST['isRemember']) && $_POST['isRemember'] == "on";
$operator = operator_by_login( $login );
if( $operator && isset($operator['vcpassword']) && $operator['vcpassword'] == md5($password) ) {
$operator = operator_by_login($login);
if ($operator && isset($operator['vcpassword']) && $operator['vcpassword'] == md5($password)) {
$target = isset($_SESSION['backpath'])
? $_SESSION['backpath']
: "$webimroot/operator/index.php";
login_operator($operator,$remember);
login_operator($operator, $remember);
header("Location: $target");
exit;
} else {

View File

@ -29,18 +29,19 @@ $page = array();
setlocale(LC_TIME, getstring("time.locale"));
function notification_info($id) {
function notification_info($id)
{
global $mysqlprefix;
$link = connect();
$notification = select_one_row(db_build_select(
"id, locale, vckind, vcto, unix_timestamp(dtmcreated) as created, vcsubject, tmessage, refoperator", "${mysqlprefix}chatnotification",
array("id = $id"), ""), $link);
"id, locale, vckind, vcto, unix_timestamp(dtmcreated) as created, vcsubject, tmessage, refoperator", "${mysqlprefix}chatnotification",
array("id = $id"), ""), $link);
mysql_close($link);
return $notification;
}
$notificationid = verifyparam( "id", "/^(\d{1,9})$/");
$notificationid = verifyparam("id", "/^(\d{1,9})$/");
$page['notification'] = notification_info($notificationid);
prepare_menu($operator, false);

View File

@ -28,7 +28,7 @@ $operator = check_login();
$page = array();
$errors = array();
if( !is_capable($can_administrate, $operator)) {
if (!is_capable($can_administrate, $operator)) {
die("Permission denied.");
}
@ -38,13 +38,13 @@ setlocale(LC_TIME, getstring("time.locale"));
$all_locales = get_available_locales();
$locales_with_label = array(array('id' => '', 'name' => getlocal("notifications.locale.all")));
foreach($all_locales as $id) {
$locales_with_label[] = array('id' => $id, 'name' => getlocal_($id,"names"));
foreach ($all_locales as $id) {
$locales_with_label[] = array('id' => $id, 'name' => getlocal_($id, "names"));
}
$page['locales'] = $locales_with_label;
$lang = verifyparam("lang", "/^([\w-]{2,5})?$/", "");
if( $lang && !in_array($lang,$all_locales) ) {
if ($lang && !in_array($lang, $all_locales)) {
$lang = "";
}
@ -56,10 +56,10 @@ $page['allkinds'] = array('', 'mail', 'xmpp');
# fetch
$conditions = array();
if($kind) {
if ($kind) {
$conditions[] = "vckind = '$kind'";
}
if($lang) {
}
if ($lang) {
$conditions[] = "locale = '$lang'";
}

View File

@ -30,8 +30,8 @@ $errors = array();
$opId = '';
loadsettings();
if( isset($_POST['login']) && isset($_POST['password']) ) {
$opId = verifyparam( "opid", "/^(\d{1,9})?$/", "");
if (isset($_POST['login']) && isset($_POST['password'])) {
$opId = verifyparam("opid", "/^(\d{1,9})?$/", "");
$login = getparam('login');
$email = getparam('email');
$jabber = getparam('jabber');
@ -39,58 +39,58 @@ if( isset($_POST['login']) && isset($_POST['password']) ) {
$passwordConfirm = getparam('passwordConfirm');
$localname = getparam('name');
$commonname = getparam('commonname');
$jabbernotify = verifyparam("jabbernotify","/^on$/", "") == "on";
$jabbernotify = verifyparam("jabbernotify", "/^on$/", "") == "on";
if( !$localname )
if (!$localname)
$errors[] = no_field("form.field.agent_name");
if( !$commonname )
if (!$commonname)
$errors[] = no_field("form.field.agent_commonname");
if( !$login ) {
if (!$login) {
$errors[] = no_field("form.field.login");
} else if( !preg_match( "/^[\w_\.]+$/",$login) ) {
} else if (!preg_match("/^[\w_\.]+$/", $login)) {
$errors[] = getlocal("page_agent.error.wrong_login");
}
if($email != '' && !is_valid_email($email))
if ($email != '' && !is_valid_email($email))
$errors[] = wrong_field("form.field.mail");
if($jabber != '' && !is_valid_email($jabber))
if ($jabber != '' && !is_valid_email($jabber))
$errors[] = wrong_field("form.field.jabber");
if($jabbernotify && $jabber == '') {
if( $settings['enablejabber'] == "1" ) {
if ($jabbernotify && $jabber == '') {
if ($settings['enablejabber'] == "1") {
$errors[] = no_field("form.field.jabber");
} else {
$jabbernotify = false;
}
}
if( !$opId && !$password )
if (!$opId && !$password)
$errors[] = no_field("form.field.password");
if( $password != $passwordConfirm )
if ($password != $passwordConfirm)
$errors[] = getlocal("my_settings.error.password_match");
$existing_operator = operator_by_login($login);
if( (!$opId && $existing_operator) ||
( $opId && $existing_operator && $opId != $existing_operator['operatorid']) )
if ((!$opId && $existing_operator) ||
($opId && $existing_operator && $opId != $existing_operator['operatorid']))
$errors[] = getlocal("page_agent.error.duplicate_login");
$canmodify = ($opId == $operator['operatorid'] && is_capable($can_modifyprofile, $operator))
|| is_capable($can_administrate, $operator);
if(!$canmodify) {
$canmodify = ($opId == $operator['operatorid'] && is_capable($can_modifyprofile, $operator))
|| is_capable($can_administrate, $operator);
if (!$canmodify) {
$errors[] = getlocal('page_agent.cannot_modify');
}
if( count($errors) == 0 ) {
if (count($errors) == 0) {
if (!$opId) {
$newop = create_operator($login,$email,$jabber,$password,$localname,$commonname,$jabbernotify ? 1 : 0);
header("Location: $webimroot/operator/avatar.php?op=".$newop['operatorid']);
$newop = create_operator($login, $email, $jabber, $password, $localname, $commonname, $jabbernotify ? 1 : 0);
header("Location: $webimroot/operator/avatar.php?op=" . $newop['operatorid']);
exit;
} else {
update_operator($opId,$login,$email,$jabber,$password,$localname,$commonname,$jabbernotify ? 1 : 0);
update_operator($opId, $login, $email, $jabber, $password, $localname, $commonname, $jabbernotify ? 1 : 0);
header("Location: $webimroot/operator/operator.php?op=$opId&stored");
exit;
}
@ -104,11 +104,11 @@ if( isset($_POST['login']) && isset($_POST['password']) ) {
$page['opid'] = topage($opId);
}
} else if( isset($_GET['op']) ) {
$opId = verifyparam( 'op', "/^\d{1,9}$/");
} else if (isset($_GET['op'])) {
$opId = verifyparam('op', "/^\d{1,9}$/");
$op = operator_by_id($opId);
if( !$op ) {
if (!$op) {
$errors[] = getlocal("no_such_operator");
$page['opid'] = topage($opId);
} else {
@ -122,19 +122,19 @@ if( isset($_POST['login']) && isset($_POST['password']) ) {
}
}
if(!$opId && !is_capable($can_administrate, $operator)) {
if (!$opId && !is_capable($can_administrate, $operator)) {
$errors[] = "You are not allowed to create operators";
}
$canmodify = ($opId == $operator['operatorid'] && is_capable($can_modifyprofile, $operator))
|| is_capable($can_administrate, $operator);
$canmodify = ($opId == $operator['operatorid'] && is_capable($can_modifyprofile, $operator))
|| is_capable($can_administrate, $operator);
$page['stored'] = isset($_GET['stored']);
$page['canmodify'] = $canmodify ? "1" : "";
$page['showjabber'] = $settings['enablejabber'] == "1";
$page['showjabber'] = $settings['enablejabber'] == "1";
prepare_menu($operator);
setup_operator_settings_tabs($opId,0);
setup_operator_settings_tabs($opId, 0);
start_html_output();
require('../view/agent.php');
?>

View File

@ -24,36 +24,36 @@ require_once('../libs/operator.php');
$operator = check_login();
if( isset($_GET['act']) && $_GET['act'] == 'del' ) {
if (isset($_GET['act']) && $_GET['act'] == 'del') {
$operatorid = isset($_GET['id']) ? $_GET['id'] : "";
if( !preg_match( "/^\d+$/", $operatorid )) {
if (!preg_match("/^\d+$/", $operatorid)) {
$errors[] = "Cannot delete: wrong argument";
}
if( !is_capable($can_administrate, $operator)) {
if (!is_capable($can_administrate, $operator)) {
$errors[] = "You are not allowed to remove operators";
}
if( $operatorid == $operator['operatorid']) {
if ($operatorid == $operator['operatorid']) {
$errors[] = "Cannot remove self";
}
if(count($errors) == 0) {
if (count($errors) == 0) {
$op = operator_by_id($operatorid);
if( !$op ) {
if (!$op) {
$errors[] = getlocal("no_such_operator");
} else if($op['vclogin'] == 'admin') {
$errors[] = 'Cannot remove operator "admin"';
}
} else if ($op['vclogin'] == 'admin') {
$errors[] = 'Cannot remove operator "admin"';
}
}
if( count($errors) == 0 ) {
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);
perform_query("delete from ${mysqlprefix}chatgroupoperator where operatorid = $operatorid", $link);
perform_query("delete from ${mysqlprefix}chatoperator where operatorid = $operatorid", $link);
mysql_close($link);
header("Location: $webimroot/operator/operators.php");
exit;
}

View File

@ -25,65 +25,66 @@ require_once('../libs/operator_settings.php');
$operator = check_login();
function update_operator_groups($operatorid,$newvalue) {
function update_operator_groups($operatorid, $newvalue)
{
global $mysqlprefix;
$link = connect();
perform_query("delete from ${mysqlprefix}chatgroupoperator where operatorid = $operatorid", $link);
foreach($newvalue as $groupid) {
foreach ($newvalue as $groupid) {
perform_query("insert into ${mysqlprefix}chatgroupoperator (groupid, operatorid) values ($groupid,$operatorid)", $link);
}
mysql_close($link);
}
$opId = verifyparam( "op","/^\d{1,9}$/");
$opId = verifyparam("op", "/^\d{1,9}$/");
$page = array('opid' => $opId);
$link = connect();
$page['groups'] = get_all_groups($link);
mysql_close($link);
$errors = array();
$canmodify = ($opId == $operator['operatorid'] && is_capable($can_modifyprofile, $operator))
|| is_capable($can_administrate, $operator);
$canmodify = ($opId == $operator['operatorid'] && is_capable($can_modifyprofile, $operator))
|| is_capable($can_administrate, $operator);
$op = operator_by_id($opId);
if( !$op ) {
if (!$op) {
$errors[] = getlocal("no_such_operator");
} else if( isset($_POST['op']) ) {
} else if (isset($_POST['op'])) {
if(!$canmodify) {
if (!$canmodify) {
$errors[] = getlocal('page_agent.cannot_modify');
}
if(count($errors) == 0) {
if (count($errors) == 0) {
$new_groups = array();
foreach($page['groups'] as $group) {
if( verifyparam("group".$group['groupid'],"/^on$/", "") == "on") {
foreach ($page['groups'] as $group) {
if (verifyparam("group" . $group['groupid'], "/^on$/", "") == "on") {
$new_groups[] = $group['groupid'];
}
}
update_operator_groups($op['operatorid'],$new_groups);
update_operator_groups($op['operatorid'], $new_groups);
header("Location: $webimroot/operator/opgroups.php?op=$opId&stored");
exit;
}
}
$page['formgroup'] = array();
$page['currentop'] = $op ? topage(get_operator_name($op))." (".$op['vclogin'].")" : "-not found-";
$page['currentop'] = $op ? topage(get_operator_name($op)) . " (" . $op['vclogin'] . ")" : "-not found-";
$page['canmodify'] = $canmodify ? "1" : "";
if($op) {
foreach(get_operator_groupids($opId) as $rel) {
if ($op) {
foreach (get_operator_groupids($opId) as $rel) {
$page['formgroup'][] = $rel['groupid'];
}
}
$page['stored'] = isset($_GET['stored']);
prepare_menu($operator);
setup_operator_settings_tabs($opId,2);
setup_operator_settings_tabs($opId, 2);
start_html_output();
require('../view/operator_groups.php');
?>

View File

@ -29,49 +29,49 @@ $page = array('agentId' => '');
$errors = array();
$options = array(
'online_timeout', 'updatefrequency_operator', 'updatefrequency_chat',
'updatefrequency_oldchat', 'max_connections_from_one_host');
'online_timeout', 'updatefrequency_operator', 'updatefrequency_chat',
'updatefrequency_oldchat', 'max_connections_from_one_host');
loadsettings();
$params = array();
foreach($options as $opt) {
foreach ($options as $opt) {
$params[$opt] = $settings[$opt];
}
if (isset($_POST['onlinetimeout'])) {
$params['online_timeout'] = getparam('onlinetimeout');
if(!is_numeric($params['online_timeout'])) {
$errors[] = wrong_field("settings.onlinetimeout");
}
$params['updatefrequency_operator'] = getparam('frequencyoperator');
if(!is_numeric($params['updatefrequency_operator'])) {
$errors[] = wrong_field("settings.frequencyoperator");
}
$params['updatefrequency_chat'] = getparam('frequencychat');
if(!is_numeric($params['updatefrequency_chat'])) {
$errors[] = wrong_field("settings.frequencychat");
}
$params['updatefrequency_oldchat'] = getparam('frequencyoldchat');
if(!is_numeric($params['updatefrequency_oldchat'])) {
$errors[] = wrong_field("settings.frequencyoldchat");
}
$params['online_timeout'] = getparam('onlinetimeout');
if (!is_numeric($params['online_timeout'])) {
$errors[] = wrong_field("settings.onlinetimeout");
}
$params['updatefrequency_operator'] = getparam('frequencyoperator');
if (!is_numeric($params['updatefrequency_operator'])) {
$errors[] = wrong_field("settings.frequencyoperator");
}
$params['updatefrequency_chat'] = getparam('frequencychat');
if (!is_numeric($params['updatefrequency_chat'])) {
$errors[] = wrong_field("settings.frequencychat");
}
$params['updatefrequency_oldchat'] = getparam('frequencyoldchat');
if (!is_numeric($params['updatefrequency_oldchat'])) {
$errors[] = wrong_field("settings.frequencyoldchat");
}
$params['max_connections_from_one_host'] = getparam('onehostconnections');
if(!is_numeric($params['max_connections_from_one_host'])) {
$errors[] = getlocal("settings.wrong.onehostconnections");
}
if (count($errors) == 0) {
foreach($options as $opt) {
if (!is_numeric($params['max_connections_from_one_host'])) {
$errors[] = getlocal("settings.wrong.onehostconnections");
}
if (count($errors) == 0) {
foreach ($options as $opt) {
$settings[$opt] = $params[$opt];
}
update_settings();
header("Location: $webimroot/operator/performance.php?stored");
exit;
}
update_settings();
header("Location: $webimroot/operator/performance.php?stored");
exit;
}
}
$page['formonlinetimeout'] = $params['online_timeout'];

View File

@ -25,42 +25,43 @@ require_once('../libs/operator_settings.php');
$operator = check_login();
function update_operator_permissions($operatorid,$newvalue) {
function update_operator_permissions($operatorid, $newvalue)
{
global $mysqlprefix;
$link = connect();
$query = "update ${mysqlprefix}chatoperator set iperm = $newvalue where operatorid = $operatorid";
perform_query($query,$link);
perform_query($query, $link);
mysql_close($link);
}
$opId = verifyparam( "op","/^\d{1,9}$/");
$opId = verifyparam("op", "/^\d{1,9}$/");
$page = array('opid' => $opId, 'canmodify' => is_capable($can_administrate, $operator) ? "1" : "");
$errors = array();
$op = operator_by_id($opId);
if( !$op ) {
if (!$op) {
$errors[] = getlocal("no_such_operator");
} else if( isset($_POST['op']) ) {
} else if (isset($_POST['op'])) {
if(!is_capable($can_administrate, $operator)) {
if (!is_capable($can_administrate, $operator)) {
$errors[] = getlocal('page_agent.cannot_modify');
}
$new_permissions = isset($op['iperm']) ? $op['iperm'] : 0;
foreach($permission_ids as $perm => $id) {
if( verifyparam("permissions$id","/^on$/", "") == "on") {
foreach ($permission_ids as $perm => $id) {
if (verifyparam("permissions$id", "/^on$/", "") == "on") {
$new_permissions |= (1 << $perm);
} else {
$new_permissions &= ~ (1 << $perm);
$new_permissions &= ~(1 << $perm);
}
}
if(count($errors) == 0) {
update_operator_permissions($op['operatorid'],$new_permissions);
if (count($errors) == 0) {
update_operator_permissions($op['operatorid'], $new_permissions);
if ($opId && $_SESSION["${mysqlprefix}operator"] && $operator['operatorid'] == $opId) {
$_SESSION["${mysqlprefix}operator"]['iperm'] = $new_permissions;
@ -73,11 +74,11 @@ if( !$op ) {
$page['permissionsList'] = get_permission_list();
$page['formpermissions'] = array("");
$page['currentop'] = $op ? topage(get_operator_name($op))." (".$op['vclogin'].")" : "-not found-";
$page['currentop'] = $op ? topage(get_operator_name($op)) . " (" . $op['vclogin'] . ")" : "-not found-";
if($op) {
foreach($permission_ids as $perm => $id) {
if(is_capable($perm,$op)) {
if ($op) {
foreach ($permission_ids as $perm => $id) {
if (is_capable($perm, $op)) {
$page['formpermissions'][] = $id;
}
}
@ -85,7 +86,7 @@ if($op) {
$page['stored'] = isset($_GET['stored']);
prepare_menu($operator);
setup_operator_settings_tabs($opId,3);
setup_operator_settings_tabs($opId, 3);
start_html_output();
require('../view/permissions.php');
?>

View File

@ -27,30 +27,30 @@ require_once('../libs/groups.php');
$operator = check_login();
$threadid = verifyparam( "thread", "/^\d{1,8}$/");
$token = verifyparam( "token", "/^\d{1,8}$/");
$threadid = verifyparam("thread", "/^\d{1,8}$/");
$token = verifyparam("token", "/^\d{1,8}$/");
$thread = thread_by_id($threadid);
if( !$thread || !isset($thread['ltoken']) || $token != $thread['ltoken'] ) {
if (!$thread || !isset($thread['ltoken']) || $token != $thread['ltoken']) {
die("wrong thread");
}
$page = array();
$errors = array();
if(isset($_GET['nextGroup'])) {
$nextid = verifyparam( "nextGroup", "/^\d{1,8}$/");
if (isset($_GET['nextGroup'])) {
$nextid = verifyparam("nextGroup", "/^\d{1,8}$/");
$nextGroup = group_by_id($nextid);
if( $nextGroup ) {
$page['message'] = getlocal2("chat.redirected.group.content",array(topage(get_group_name($nextGroup))));
if( $thread['istate'] == $state_chatting ) {
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);
commit_thread($threadid,
array("istate" => $state_waiting, "nextagent" => 0, "groupid" => $nextid, "agentId" => 0, "agentName" => "''"), $link);
post_message_($thread['threadid'], $kind_events,
getstring2_("chat.status.operator.redirect",
array(get_operator_name($operator)),$thread['locale']), $link);
getstring2_("chat.status.operator.redirect",
array(get_operator_name($operator)), $thread['locale']), $link);
mysql_close($link);
} else {
$errors[] = getlocal("chat.redirect.cannot");
@ -60,23 +60,23 @@ if(isset($_GET['nextGroup'])) {
}
} else {
$nextid = verifyparam( "nextAgent", "/^\d{1,8}$/");
$nextid = verifyparam("nextAgent", "/^\d{1,8}$/");
$nextOperator = operator_by_id($nextid);
if( $nextOperator ) {
$page['message'] = getlocal2("chat.redirected.content",array(topage(get_operator_name($nextOperator))));
if( $thread['istate'] == $state_chatting ) {
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)) {
if ($thread['groupid'] != 0) {
if (FALSE === select_one_row("select groupid from ${mysqlprefix}chatgroupoperator where operatorid = $nextid and groupid = " . $thread['groupid'], $link)) {
$threadupdate['groupid'] = 0;
}
}
commit_thread( $threadid, $threadupdate, $link);
commit_thread($threadid, $threadupdate, $link);
post_message_($thread['threadid'], $kind_events,
getstring2_("chat.status.operator.redirect",
array(get_operator_name($operator)),$thread['locale']), $link);
getstring2_("chat.status.operator.redirect",
array(get_operator_name($operator)), $thread['locale']), $link);
mysql_close($link);
} else {
$errors[] = getlocal("chat.redirect.cannot");
@ -87,7 +87,7 @@ if(isset($_GET['nextGroup'])) {
}
setup_logo();
if( count($errors) > 0 ) {
if (count($errors) > 0) {
expand("../styles", getchatstyle(), "error.tpl");
} else {
expand("../styles", getchatstyle(), "redirected.tpl");

View File

@ -26,15 +26,15 @@ require_once('../libs/settings.php');
$errors = array();
$page = array('version' => $version, 'showform' => true);
$opId = verifyparam( "id", "/^\d{1,9}$/");
$opId = verifyparam("id", "/^\d{1,9}$/");
$token = verifyparam("token", "/^[\dabcdef]+$/");
$operator = operator_by_id($opId);
if(!$operator) {
if (!$operator) {
$errors[] = "No such operator";
$page['showform'] = false;
} else if($token != $operator['vcrestoretoken']) {
} else if ($token != $operator['vcrestoretoken']) {
$errors[] = "Wrong token";
$page['showform'] = false;
}
@ -42,25 +42,25 @@ if(!$operator) {
if (count($errors) == 0 && isset($_POST['password'])) {
$password = getparam('password');
$passwordConfirm = getparam('passwordConfirm');
if( !$password )
if (!$password)
$errors[] = no_field("form.field.password");
if( $password != $passwordConfirm )
if ($password != $passwordConfirm)
$errors[] = getlocal("my_settings.error.password_match");
if (count($errors) == 0) {
$page['isdone'] = true;
$link = connect();
$query = "update ${mysqlprefix}chatoperator set vcpassword = '".md5($password)."', vcrestoretoken = '' where operatorid = ".$opId;
$query = "update ${mysqlprefix}chatoperator set vcpassword = '" . md5($password) . "', vcrestoretoken = '' where operatorid = " . $opId;
perform_query($query, $link);
mysql_close($link);
start_html_output();
require('../view/resetpwd.php');
exit;
}
}
}
$page['id'] = $opId;

View File

@ -30,32 +30,32 @@ $loginoremail = "";
if (isset($_POST['loginoremail'])) {
$loginoremail = getparam("loginoremail");
$torestore = is_valid_email($loginoremail) ? operator_by_email($loginoremail) : operator_by_login($loginoremail);
if(!$torestore) {
if (!$torestore) {
$errors[] = getlocal("no_such_operator");
}
$email = $torestore['vcemail'];
if(count($errors) == 0 && !is_valid_email($email)) {
if (count($errors) == 0 && !is_valid_email($email)) {
$errors[] = "Operator hasn't set his e-mail";
}
if (count($errors) == 0) {
$token = md5((time() + microtime()).rand(0,99999999));
$token = md5((time() + microtime()) . rand(0, 99999999));
$link = connect();
$query = "update ${mysqlprefix}chatoperator set dtmrestore = CURRENT_TIMESTAMP, vcrestoretoken = '$token' where operatorid = ".$torestore['operatorid'];
$query = "update ${mysqlprefix}chatoperator set dtmrestore = CURRENT_TIMESTAMP, vcrestoretoken = '$token' where operatorid = " . $torestore['operatorid'];
perform_query($query, $link);
$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);
$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);
mysql_close($link);
$page['isdone'] = true;
require('../view/restore.php');
exit;
}
}
}
$page['formloginoremail'] = topage($loginoremail);

View File

@ -30,7 +30,7 @@ $errors = array();
$stylelist = array();
$stylesfolder = "../styles";
if($handle = opendir($stylesfolder)) {
if ($handle = opendir($stylesfolder)) {
while (false !== ($file = readdir($handle))) {
if (preg_match("/^\w+$/", $file) && is_dir("$stylesfolder/$file")) {
$stylelist[] = $file;
@ -40,57 +40,57 @@ if($handle = opendir($stylesfolder)) {
}
$options = array(
'email', 'title', 'logo', 'hosturl', 'usernamepattern',
'chatstyle', 'chattitle', 'geolink', 'geolinkparams', 'sendmessagekey');
'email', 'title', 'logo', 'hosturl', 'usernamepattern',
'chatstyle', 'chattitle', 'geolink', 'geolinkparams', 'sendmessagekey');
loadsettings();
$params = array();
foreach($options as $opt) {
foreach ($options as $opt) {
$params[$opt] = $settings[$opt];
}
if (isset($_POST['email']) && isset($_POST['title']) && isset($_POST['logo'])) {
$params['email'] = getparam('email');
$params['title'] = getparam('title');
$params['logo'] = getparam('logo');
$params['hosturl'] = getparam('hosturl');
$params['usernamepattern'] = getparam('usernamepattern');
$params['chattitle'] = getparam('chattitle');
$params['geolink'] = getparam('geolink');
$params['email'] = getparam('email');
$params['title'] = getparam('title');
$params['logo'] = getparam('logo');
$params['hosturl'] = getparam('hosturl');
$params['usernamepattern'] = getparam('usernamepattern');
$params['chattitle'] = getparam('chattitle');
$params['geolink'] = getparam('geolink');
$params['geolinkparams'] = getparam('geolinkparams');
$params['sendmessagekey'] = verifyparam('sendmessagekey', "/^c?enter$/");
$params['chatstyle'] = verifyparam("chatstyle","/^\w+$/", $params['chatstyle']);
if(!in_array($params['chatstyle'], $stylelist)) {
$params['chatstyle'] = verifyparam("chatstyle", "/^\w+$/", $params['chatstyle']);
if (!in_array($params['chatstyle'], $stylelist)) {
$params['chatstyle'] = $stylelist[0];
}
if($params['email'] && !is_valid_email($params['email'])) {
$errors[] = getlocal("settings.wrong.email");
}
if($params['geolinkparams']) {
foreach(preg_split("/,/", $params['geolinkparams']) as $oneparam) {
if(!preg_match("/^\s*(toolbar|scrollbars|location|status|menubar|width|height|resizable)=\d{1,4}$/", $oneparam)) {
$errors[] = "Wrong link parameter: \"$oneparam\", should be one of 'toolbar, scrollbars, location, status, menubar, width, height or resizable'";
}
}
}
if ($params['email'] && !is_valid_email($params['email'])) {
$errors[] = getlocal("settings.wrong.email");
}
if (count($errors) == 0) {
foreach($options as $opt) {
if ($params['geolinkparams']) {
foreach (preg_split("/,/", $params['geolinkparams']) as $oneparam) {
if (!preg_match("/^\s*(toolbar|scrollbars|location|status|menubar|width|height|resizable)=\d{1,4}$/", $oneparam)) {
$errors[] = "Wrong link parameter: \"$oneparam\", should be one of 'toolbar, scrollbars, location, status, menubar, width, height or resizable'";
}
}
}
if (count($errors) == 0) {
foreach ($options as $opt) {
$settings[$opt] = $params[$opt];
}
update_settings();
header("Location: $webimroot/operator/settings.php?stored");
exit;
}
update_settings();
header("Location: $webimroot/operator/settings.php?stored");
exit;
}
}
$page['formemail'] = topage($params['email']);
$page['formtitle'] = topage($params['title']);
$page['formlogo'] = topage($params['logo']);
$page['formhosturl'] = topage($params['hosturl']);
$page['formlogo'] = topage($params['logo']);
$page['formhosturl'] = topage($params['hosturl']);
$page['formgeolink'] = topage($params['geolink']);
$page['formgeolinkparams'] = topage($params['geolinkparams']);
$page['formusernamepattern'] = topage($params['usernamepattern']);

View File

@ -29,55 +29,55 @@ setlocale(LC_TIME, getstring("time.locale"));
$page = array();
$page['operator'] = topage(get_operator_name($operator));
$page['availableDays'] = range(1,31);
$page['availableMonth'] = get_month_selection(time()-400*24*60*60,time()+50*24*60*60 );
$page['availableDays'] = range(1, 31);
$page['availableMonth'] = get_month_selection(time() - 400 * 24 * 60 * 60, time() + 50 * 24 * 60 * 60);
$page['showresults'] = false;
$errors = array();
if(isset($_GET['startday'])) {
$startday = verifyparam("startday","/^\d+$/");
$startmonth = verifyparam("startmonth","/^\d{2}.\d{2}$/");
$endday = verifyparam("endday","/^\d+$/");
$endmonth = verifyparam("endmonth","/^\d{2}.\d{2}$/");
$start = get_form_date($startday,$startmonth);
$end = get_form_date($endday, $endmonth)+24*60*60;
if (isset($_GET['startday'])) {
$startday = verifyparam("startday", "/^\d+$/");
$startmonth = verifyparam("startmonth", "/^\d{2}.\d{2}$/");
$endday = verifyparam("endday", "/^\d+$/");
$endmonth = verifyparam("endmonth", "/^\d{2}.\d{2}$/");
$start = get_form_date($startday, $startmonth);
$end = get_form_date($endday, $endmonth) + 24 * 60 * 60;
} else {
$curr = getdate(time());
if( $curr['mday'] < 7 ) {
if ($curr['mday'] < 7) {
// previous month
if($curr['mon'] == 1) {
$month = 12;
$year = $curr['year']-1;
if ($curr['mon'] == 1) {
$month = 12;
$year = $curr['year'] - 1;
} else {
$month = $curr['mon']-1;
$month = $curr['mon'] - 1;
$year = $curr['year'];
}
$start = mktime(0,0,0,$month,1,$year);
$end = mktime(0,0,0,$month, date("t",$start),$year)+24*60*60;
$start = mktime(0, 0, 0, $month, 1, $year);
$end = mktime(0, 0, 0, $month, date("t", $start), $year) + 24 * 60 * 60;
} else {
$start = mktime(0,0,0,$curr['mon'],1,$curr['year']);
$end = time()+24*60*60;
$start = mktime(0, 0, 0, $curr['mon'], 1, $curr['year']);
$end = time() + 24 * 60 * 60;
}
}
set_form_date($start, "start");
set_form_date($end-24*60*60, "end");
set_form_date($end - 24 * 60 * 60, "end");
if( $start > $end ) {
if ($start > $end) {
$errors[] = getlocal("statistics.wrong.dates");
}
$link = connect();
$page['reportByDate'] = select_multi_assoc("select DATE(dtmcreated) as date, COUNT(distinct threadid) as threads, SUM(${mysqlprefix}chatmessage.ikind = $kind_agent) as agents, SUM(${mysqlprefix}chatmessage.ikind = $kind_user) as users ".
"from ${mysqlprefix}chatmessage where unix_timestamp(dtmcreated) >= $start AND unix_timestamp(dtmcreated) < $end group by DATE(dtmcreated) order by dtmcreated desc", $link);
$page['reportByDate'] = select_multi_assoc("select DATE(dtmcreated) as date, COUNT(distinct threadid) as threads, SUM(${mysqlprefix}chatmessage.ikind = $kind_agent) as agents, SUM(${mysqlprefix}chatmessage.ikind = $kind_user) as users " .
"from ${mysqlprefix}chatmessage where unix_timestamp(dtmcreated) >= $start AND unix_timestamp(dtmcreated) < $end group by DATE(dtmcreated) order by dtmcreated desc", $link);
$page['reportByDateTotal'] = select_one_row("select COUNT(distinct threadid) as threads, SUM(${mysqlprefix}chatmessage.ikind = $kind_agent) as agents, SUM(${mysqlprefix}chatmessage.ikind = $kind_user) as users ".
"from ${mysqlprefix}chatmessage where unix_timestamp(dtmcreated) >= $start AND unix_timestamp(dtmcreated) < $end", $link);
$page['reportByDateTotal'] = select_one_row("select COUNT(distinct threadid) as threads, SUM(${mysqlprefix}chatmessage.ikind = $kind_agent) as agents, SUM(${mysqlprefix}chatmessage.ikind = $kind_user) as users " .
"from ${mysqlprefix}chatmessage where unix_timestamp(dtmcreated) >= $start AND unix_timestamp(dtmcreated) < $end", $link);
$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'] = 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['showresults'] = count($errors) == 0;

View File

@ -31,7 +31,7 @@ $operator = check_login();
$stylelist = array();
$stylesfolder = "../styles";
if($handle = opendir($stylesfolder)) {
if ($handle = opendir($stylesfolder)) {
while (false !== ($file = readdir($handle))) {
if (preg_match("/^\w+$/", $file) && is_dir("$stylesfolder/$file")) {
$stylelist[] = $file;
@ -40,55 +40,55 @@ if($handle = opendir($stylesfolder)) {
closedir($handle);
}
$preview = verifyparam("preview","/^\w+$/", "default");
if(!in_array($preview, $stylelist)) {
$preview = verifyparam("preview", "/^\w+$/", "default");
if (!in_array($preview, $stylelist)) {
$preview = $stylelist[0];
}
$show = verifyparam("show", "/^(chat|chatsimple|nochat|mail|mailsent|survey|leavemessage|leavemessagesent|redirect|redirected|agentchat|agentrochat|error)$/", "");
$showerrors = verifyparam("showerr", "/^on$/", "") == "on";
$errors = array();
if($showerrors || $show == 'error') {
if ($showerrors || $show == 'error') {
$errors[] = "Test error";
}
if($show == 'chat' || $show == 'mail' || $show == 'leavemessage' || $show == 'leavemessagesent' || $show == 'chatsimple' || $show == 'nochat') {
setup_chatview_for_user(array('threadid' => 0,'userName' => getstring("chat.default.username"), 'ltoken' => 123), "ajaxed");
if ($show == 'chat' || $show == 'mail' || $show == 'leavemessage' || $show == 'leavemessagesent' || $show == 'chatsimple' || $show == 'nochat') {
setup_chatview_for_user(array('threadid' => 0, 'userName' => getstring("chat.default.username"), 'ltoken' => 123), "ajaxed");
$page['mailLink'] = "$webimroot/operator/themes.php?preview=$preview&amp;show=mail";
$page['info'] = "";
expand("../styles", "$preview", "$show.tpl");
exit;
}
if($show == 'survey') {
if ($show == 'survey') {
loadsettings();
setup_survey("Visitor", "", "", "", "http://google.com");
setup_logo();
expand("../styles", "$preview", "$show.tpl");
exit;
}
if($show == 'mailsent' || $show == 'error') {
if ($show == 'mailsent' || $show == 'error') {
$page['email'] = "admin@yourdomain.com";
setup_logo();
expand("../styles", "$preview", "$show.tpl");
exit;
}
if($show == 'redirect' || $show == 'redirected' || $show == 'agentchat' || $show == 'agentrochat' ) {
if ($show == 'redirect' || $show == 'redirected' || $show == 'agentchat' || $show == 'agentrochat') {
setup_chatview_for_operator(
array(
'threadid' => 0,
'userName' => getstring("chat.default.username"),
'remote' => "1.2.3.4",
'agentId' => 1,
'userid' => 'visitor1',
'locale' => $current_locale,
'ltoken' => $show=='agentrochat' ? 124 : 123),
'threadid' => 0,
'userName' => getstring("chat.default.username"),
'remote' => "1.2.3.4",
'agentId' => 1,
'userid' => 'visitor1',
'locale' => $current_locale,
'ltoken' => $show == 'agentrochat' ? 124 : 123),
array(
'operatorid' => ($show=='agentrochat' ? 2 : 1),
));
if($show=='redirect') {
setup_redirect_links( 0,$show=='agentrochat' ? 124 : 123);
} elseif($show=='redirected') {
$page['message'] = getlocal2("chat.redirected.content",array("Administrator"));
'operatorid' => ($show == 'agentrochat' ? 2 : 1),
));
if ($show == 'redirect') {
setup_redirect_links(0, $show == 'agentrochat' ? 124 : 123);
} elseif ($show == 'redirected') {
$page['message'] = getlocal2("chat.redirected.content", array("Administrator"));
}
$page['redirectLink'] = "$webimroot/operator/themes.php?preview=$preview&amp;show=redirect";
expand("../styles", "$preview", "$show.tpl");
@ -126,12 +126,12 @@ $page['availableTemplates'] = array(
"agentchat", "agentrochat", "error",
"all");
$page['showlink'] = "$webimroot/operator/themes.php?preview=$preview&amp;".($showerrors?"showerr=on&amp;":"")."show=";
$page['showlink'] = "$webimroot/operator/themes.php?preview=$preview&amp;" . ($showerrors ? "showerr=on&amp;" : "") . "show=";
$page['previewList'] = array();
foreach($templateList as $tpl) {
if($tpl['id'] == $template || $template == 'all') {
$page['previewList'][] = $tpl;
foreach ($templateList as $tpl) {
if ($tpl['id'] == $template || $template == 'all') {
$page['previewList'][] = $tpl;
}
}

View File

@ -31,23 +31,24 @@ $page = array();
loadsettings();
setlocale(LC_TIME, getstring("time.locale"));
function thread_info($id) {
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 );
$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);
mysql_close($link);
return $thread;
}
if( isset($_GET['threadid'])) {
$threadid = verifyparam( "threadid", "/^(\d{1,9})?$/", "");
if (isset($_GET['threadid'])) {
$threadid = verifyparam("threadid", "/^(\d{1,9})?$/", "");
$lastid = -1;
$page['threadMessages'] = get_messages($threadid,"html",false,$lastid);
$page['threadMessages'] = get_messages($threadid, "html", false, $lastid);
$page['thread'] = thread_info($threadid);
}

View File

@ -23,27 +23,30 @@ require_once('../libs/common.php');
require_once('../libs/operator.php');
require_once('../libs/pagination.php');
function compare_localization_by_l1($a, $b) {
if ($a == $b) {
return 0;
}
return ($a['l1'] < $b['l1']) ? -1 : 1;
function compare_localization_by_l1($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a['l1'] < $b['l1']) ? -1 : 1;
}
function compare_localization_by_id($a, $b) {
if ($a == $b) {
return 0;
}
return ($a['id'] < $b['id']) ? -1 : 1;
function compare_localization_by_id($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a['id'] < $b['id']) ? -1 : 1;
}
function load_idlist($name) {
function load_idlist($name)
{
$result = array();
$fp = @fopen(dirname(__FILE__)."/../locales/names/$name", "r");
if($fp !== FALSE) {
$fp = @fopen(dirname(__FILE__) . "/../locales/names/$name", "r");
if ($fp !== FALSE) {
while (!feof($fp)) {
$line = trim(fgets($fp, 4096));
if($line && preg_match("/^[\w_\.]+$/", $line)) {
if ($line && preg_match("/^[\w_\.]+$/", $line)) {
$result[] = $line;
}
}
@ -52,62 +55,64 @@ function load_idlist($name) {
return $result;
}
function save_message($locale,$key,$value) {
function save_message($locale, $key, $value)
{
global $webim_encoding;
$result = "";
$added = false;
$current_encoding = $webim_encoding;
$fp = fopen(dirname(__FILE__)."/../locales/$locale/properties", "r");
$fp = fopen(dirname(__FILE__) . "/../locales/$locale/properties", "r");
while (!feof($fp)) {
$line = fgets($fp, 4096);
$keyval = preg_split("/=/", $line, 2 );
if( isset($keyval[1]) ) {
if($keyval[0] == 'encoding') {
$keyval = preg_split("/=/", $line, 2);
if (isset($keyval[1])) {
if ($keyval[0] == 'encoding') {
$current_encoding = trim($keyval[1]);
} else if(!$added && $keyval[0] == $key) {
$line = "$key=".myiconv($webim_encoding, $current_encoding, str_replace("\r", "",str_replace("\n", "\\n",trim($value))))."\n";
} else if (!$added && $keyval[0] == $key) {
$line = "$key=" . myiconv($webim_encoding, $current_encoding, str_replace("\r", "", str_replace("\n", "\\n", trim($value)))) . "\n";
$added = true;
}
}
$result .= $line;
}
fclose($fp);
if(!$added) {
$result .= "$key=".myiconv($webim_encoding, $current_encoding, str_replace("\r", "",str_replace("\n", "\\n",trim($value))))."\n";
if (!$added) {
$result .= "$key=" . myiconv($webim_encoding, $current_encoding, str_replace("\r", "", str_replace("\n", "\\n", trim($value)))) . "\n";
}
$fp = @fopen(dirname(__FILE__)."/../locales/$locale/properties", "w");
if($fp !== FALSE) {
$fp = @fopen(dirname(__FILE__) . "/../locales/$locale/properties", "w");
if ($fp !== FALSE) {
fwrite($fp, $result);
fclose($fp);
} else {
die("cannot write /locales/$locale/properties, please check file permissions on your server");
}
$fp = @fopen(dirname(__FILE__)."/../locales/$locale/properties.log", "a");
if($fp !== FALSE) {
$fp = @fopen(dirname(__FILE__) . "/../locales/$locale/properties.log", "a");
if ($fp !== FALSE) {
$extAddr = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) &&
$_SERVER['HTTP_X_FORWARDED_FOR'] != $_SERVER['REMOTE_ADDR']) {
$extAddr = $_SERVER['REMOTE_ADDR'].' ('.$_SERVER['HTTP_X_FORWARDED_FOR'].')';
$_SERVER['HTTP_X_FORWARDED_FOR'] != $_SERVER['REMOTE_ADDR']) {
$extAddr = $_SERVER['REMOTE_ADDR'] . ' (' . $_SERVER['HTTP_X_FORWARDED_FOR'] . ')';
}
$userbrowser = $_SERVER['HTTP_USER_AGENT'];
$remoteHost = isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : $extAddr;
fwrite($fp,"# ".date(DATE_RFC822)." by $remoteHost using $userbrowser\n");
fwrite($fp,"$key=".myiconv($webim_encoding, $current_encoding, str_replace("\r", "",str_replace("\n", "\\n",trim($value))))."\n");
fwrite($fp, "# " . date(DATE_RFC822) . " by $remoteHost using $userbrowser\n");
fwrite($fp, "$key=" . myiconv($webim_encoding, $current_encoding, str_replace("\r", "", str_replace("\n", "\\n", trim($value)))) . "\n");
fclose($fp);
}
}
function get_auxiliary($s) {
function get_auxiliary($s)
{
$res = "";
if(preg_match_all("/<[^>]+?>|[:]|\{\d+\}|[Mm]ibew|[Ww]ebim/", $s, $matches, PREG_PATTERN_ORDER)) {
if (preg_match_all("/<[^>]+?>|[:]|\{\d+\}|[Mm]ibew|[Ww]ebim/", $s, $matches, PREG_PATTERN_ORDER)) {
foreach ($matches[0] as $val) {
if($val != "<br/>") {
if ($val != "<br/>") {
$res .= $val;
}
}
}
}
if(substr(trim($s),-1) == "." || substr(trim($s),-1) == "?") {
if (substr(trim($s), -1) == "." || substr(trim($s), -1) == "?") {
$res .= ".";
}
return $res;
@ -119,11 +124,11 @@ $source = verifyparam("source", "/^[\w-]{2,5}$/", $default_locale);
$target = verifyparam("target", "/^[\w-]{2,5}$/", $current_locale);
$stringid = verifyparam("key", "/^[_\.\w]+$/", "");
if(!isset($messages[$source])) {
if (!isset($messages[$source])) {
load_messages($source);
}
$lang1 = $messages[$source];
if(!isset($messages[$target])) {
if (!isset($messages[$target])) {
load_messages($target);
}
$lang2 = $messages[$target];
@ -136,16 +141,16 @@ $page = array(
'title2' => isset($lang2["localeid"]) ? $lang2["localeid"] : $target
);
if($stringid) {
if ($stringid) {
$translation = isset($lang2[$stringid]) ? $lang2[$stringid] : "";
if(isset($_POST['translation'])) {
if (isset($_POST['translation'])) {
$translation = getparam('translation');
if(!$translation) {
if (!$translation) {
$errors[] = no_field("form.field.translation");
}
if(count($errors) == 0) {
if (count($errors) == 0) {
save_message($target, $stringid, $translation);
$page['saved'] = true;
@ -169,7 +174,7 @@ if($stringid) {
$localesList = array();
$allLocales = get_available_locales();
foreach($allLocales as $loc) {
foreach ($allLocales as $loc) {
$localesList[] = array("id" => $loc, "name" => getlocal_("localeid", $loc));
}
@ -177,35 +182,35 @@ $show = verifyparam("show", "/^(all|s1|s2|s3)$/", "all");
$result = array();
$allkeys = array_keys($lang1);
if($show == 's1') {
if ($show == 's1') {
$allkeys = array_intersect($allkeys, load_idlist('level1'));
} else if($show == 's2') {
} else if ($show == 's2') {
$allkeys = array_intersect($allkeys, load_idlist('level2'));
} else if($show == 's3') {
} else if ($show == 's3') {
$allkeys = array_diff($allkeys, load_idlist('level1'), load_idlist('level2'));
}
foreach($allkeys as $key) {
if($key != 'output_charset') {
foreach ($allkeys as $key) {
if ($key != 'output_charset') {
$tsource = htmlspecialchars($lang1[$key]);
if(isset($lang2[$key])) {
if (isset($lang2[$key])) {
$value = htmlspecialchars($lang2[$key]);
if(get_auxiliary($lang2[$key]) != get_auxiliary($lang1[$key])) {
if (get_auxiliary($lang2[$key]) != get_auxiliary($lang1[$key])) {
$value = "<font color=\"#6030c1\"><b>$value</b></font> <strong>(wrong formatting)</strong>";
}
} else {
$value = "<font color=\"#c13030\"><b>absent</b></font>";
$value = "<font color=\"#c13030\"><b>absent</b></font>";
}
$result[] = array(
'id' => $key,
'l1' => $tsource,
'l2' => $value );
'id' => $key,
'l1' => $tsource,
'l2' => $value);
}
}
$order = verifyparam("sort", "/^(id|l1)$/", "id");
usort($result, "compare_localization_by_$order");
setup_pagination($result,100);
setup_pagination($result, 100);
$page['formtarget'] = $target;
$page['formsource'] = $source;

View File

@ -26,9 +26,9 @@ require_once('../libs/operator.php');
require_once('../libs/groups.php');
$operator = get_logged_in();
if( !$operator ) {
if (!$operator) {
start_xml_output();
echo "<error><descr>".myiconv($webim_encoding,"utf-8",escape_with_cdata(getstring("agent.not_logged_in")))."</descr></error>";
echo "<error><descr>" . myiconv($webim_encoding, "utf-8", escape_with_cdata(getstring("agent.not_logged_in"))) . "</descr></error>";
exit;
}
@ -49,110 +49,113 @@ $threadstate_key = array(
$state_loading => "chat.thread.state_loading"
);
function thread_to_xml($thread,$link) {
function thread_to_xml($thread, $link)
{
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, $mysqlprefix;
$state = $threadstate_to_string[$thread['istate']];
$result = "<thread id=\"".$thread['threadid']."\" stateid=\"$state\"";
if( $state == "closed" )
return $result."/>";
$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'], $link) : null;
$threadoperator = $nextagent ? get_operator_name($nextagent)
: ($thread['agentName'] ? $thread['agentName'] : "-");
if($threadoperator == "-" && $thread['groupname']) {
$threadoperator = "- ".$thread['groupname']." -";
: ($thread['agentName'] ? $thread['agentName'] : "-");
if ($threadoperator == "-" && $thread['groupname']) {
$threadoperator = "- " . $thread['groupname'] . " -";
}
if(!($thread['istate'] == $state_chatting && $thread['agentId'] != $operator['operatorid'] && !is_capable($can_takeover,$operator))) {
if (!($thread['istate'] == $state_chatting && $thread['agentId'] != $operator['operatorid'] && !is_capable($can_takeover, $operator))) {
$result .= " canopen=\"true\"";
}
if ($thread['agentId'] != $operator['operatorid'] && $thread['nextagent'] != $operator['operatorid']
&& is_capable($can_viewthreads, $operator)) {
&& is_capable($can_viewthreads, $operator)) {
$result .= " canview=\"true\"";
}
if ($settings['enableban'] == "1") {
$result .= " canban=\"true\"";
}
$banForThread = $settings['enableban'] == "1" ? ban_for_addr_($thread['remote'],$link) : false;
if($banForThread) {
$result .= " ban=\"blocked\" banid=\"".$banForThread['banid']."\"";
$banForThread = $settings['enableban'] == "1" ? ban_for_addr_($thread['remote'], $link) : false;
if ($banForThread) {
$result .= " ban=\"blocked\" banid=\"" . $banForThread['banid'] . "\"";
}
$result .= " state=\"$state\" typing=\"".$thread['userTyping']."\">";
$result .="<name>";
if($banForThread) {
$result .= " state=\"$state\" typing=\"" . $thread['userTyping'] . "\">";
$result .= "<name>";
if ($banForThread) {
$result .= htmlspecialchars(getstring('chat.client.spam.prefix'));
}
$result .= htmlspecialchars(htmlspecialchars(get_user_name($thread['userName'],$thread['remote'], $thread['userid'])))."</name>";
$result .= "<addr>".htmlspecialchars(get_user_addr($thread['remote']))."</addr>";
$result .= "<agent>".htmlspecialchars(htmlspecialchars($threadoperator))."</agent>";
$result .= "<time>".$thread['unix_timestamp(dtmcreated)']."000</time>";
$result .= "<modified>".$thread['unix_timestamp(dtmmodified)']."000</modified>";
$result .= htmlspecialchars(htmlspecialchars(get_user_name($thread['userName'], $thread['remote'], $thread['userid']))) . "</name>";
$result .= "<addr>" . htmlspecialchars(get_user_addr($thread['remote'])) . "</addr>";
$result .= "<agent>" . htmlspecialchars(htmlspecialchars($threadoperator)) . "</agent>";
$result .= "<time>" . $thread['unix_timestamp(dtmcreated)'] . "000</time>";
$result .= "<modified>" . $thread['unix_timestamp(dtmmodified)'] . "000</modified>";
if($banForThread) {
$result .= "<reason>".$banForThread['comment']."</reason>";
if ($banForThread) {
$result .= "<reason>" . $banForThread['comment'] . "</reason>";
}
$userAgent = get_useragent_version($thread['userAgent']);
$result .= "<useragent>".$userAgent."</useragent>";
if( $thread["shownmessageid"] != 0 ) {
$query = "select tmessage from ${mysqlprefix}chatmessage where messageid = ".$thread["shownmessageid"];
$result .= "<useragent>" . $userAgent . "</useragent>";
if ($thread["shownmessageid"] != 0) {
$query = "select tmessage from ${mysqlprefix}chatmessage where messageid = " . $thread["shownmessageid"];
$line = select_one_row($query, $link);
if( $line ) {
if ($line) {
$message = preg_replace("/[\r\n\t]+/", " ", $line["tmessage"]);
$result .= "<message>".htmlspecialchars(htmlspecialchars($message))."</message>";
$result .= "<message>" . htmlspecialchars(htmlspecialchars($message)) . "</message>";
}
}
$result .= "</thread>";
return $result;
}
function print_pending_threads($groupids,$since) {
function print_pending_threads($groupids, $since)
{
global $webim_encoding, $settings, $state_closed, $state_left, $mysqlprefix;
$link = connect();
$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 "
: "").
$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)"
: "").
") "
: "").
? "AND (groupid is NULL" . ($groupids
? " OR groupid IN ($groupids)"
: "") .
") "
: "") .
"ORDER BY threadid";
$rows = select_multi_assoc($query, $link);
foreach ($rows as $row) {
$thread = thread_to_xml($row,$link);
$thread = thread_to_xml($row, $link);
$output[] = $thread;
if( $row['lrevision'] > $revision )
if ($row['lrevision'] > $revision)
$revision = $row['lrevision'];
}
mysql_close($link);
echo "<threads revision=\"$revision\" time=\"".time()."000\">";
foreach( $output as $thr ) {
print myiconv($webim_encoding,"utf-8",$thr);
echo "<threads revision=\"$revision\" time=\"" . time() . "000\">";
foreach ($output as $thr) {
print myiconv($webim_encoding, "utf-8", $thr);
}
echo "</threads>";
}
function print_operators() {
function print_operators()
{
echo "<operators>";
$operators = operator_get_all();
foreach($operators as $operator) {
foreach ($operators as $operator) {
if (!operator_is_online($operator))
continue;
@ -161,27 +164,27 @@ function print_operators() {
echo "<operator name=\"$name\"$away/>";
}
echo "</operators>";
echo "</operators>";
}
$since = verifyparam( "since", "/^\d{1,9}$/", 0);
$status = verifyparam( "status", "/^\d{1,2}$/", 0);
$showonline = verifyparam( "showonline", "/^1$/", 0);
$since = verifyparam("since", "/^\d{1,9}$/", 0);
$status = verifyparam("status", "/^\d{1,2}$/", 0);
$showonline = verifyparam("showonline", "/^1$/", 0);
$link = connect();
loadsettings_($link);
if(!isset($_SESSION['operatorgroups'])) {
$_SESSION['operatorgroups'] = get_operator_groupslist($operator['operatorid'], $link);
if (!isset($_SESSION['operatorgroups'])) {
$_SESSION['operatorgroups'] = get_operator_groupslist($operator['operatorid'], $link);
}
mysql_close($link);
$groupids = $_SESSION['operatorgroups'];
start_xml_output();
echo '<update>';
if($showonline) {
if ($showonline) {
print_operators();
}
print_pending_threads($groupids,$since);
print_pending_threads($groupids, $since);
echo '</update>';
notify_operator_alive($operator['operatorid'], $status);
exit;

View File

@ -34,8 +34,8 @@ $page = array(
'version' => $version,
);
foreach($default_extensions as $ext) {
if(!extension_loaded($ext)) {
foreach ($default_extensions as $ext) {
if (!extension_loaded($ext)) {
$page['phpVersion'] .= " $ext/absent";
} else {
$ver = phpversion($ext);

View File

@ -33,23 +33,24 @@ $page = array();
setlocale(LC_TIME, getstring("time.locale"));
$userid = "";
if( isset($_GET['userid'])) {
$userid = verifyparam( "userid", "/^.{0,63}$/", "");
if (isset($_GET['userid'])) {
$userid = verifyparam("userid", "/^.{0,63}$/", "");
}
function threads_by_userid($userid) {
function threads_by_userid($userid)
{
global $mysqlprefix;
if ($userid == "") {
return null;
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);
$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);
$result = mysql_query($query, $link) or die(' Query failed: ' .mysql_error().": ".$query);
$result = mysql_query($query, $link) or die(' Query failed: ' . mysql_error() . ": " . $query);
$foundThreads = array();
while ($thread = mysql_fetch_array($result, MYSQL_ASSOC)) {
@ -64,7 +65,7 @@ function threads_by_userid($userid) {
$found = threads_by_userid($userid);
prepare_menu($operator);
setup_pagination($found,6);
setup_pagination($found, 6);
start_html_output();
require('../view/userhistory.php');
?>

View File

@ -30,7 +30,7 @@ notify_operator_alive($operator['operatorid'], $status);
$link = connect();
loadsettings_($link);
$_SESSION['operatorgroups'] = get_operator_groupslist($operator['operatorid'], $link);
$_SESSION['operatorgroups'] = get_operator_groupslist($operator['operatorid'], $link);
mysql_close($link);
$page = array();