function GroupBuilder($_internalUsers, $_internalGroups, $_config) { $this->InternalUsers = $_internalUsers; $this->InternalGroups = $_internalGroups; $this->Config = $_config; $this->GroupValues["groups_online"] = array(); $this->GroupValues["groups_offline"] = array(); $this->GroupValues["groups_online_amounts"] = array(); $this->GroupValues["groups_output"] = array(); $this->GroupValues["groups_hidden"] = array(); $this->GroupValues["set_by_get_user"] = null; $this->GroupValues["set_by_get_group"] = null; $this->GroupValues["set_by_cookie"] = null; $this->GroupValues["set_by_standard"] = null; $this->GroupValues["set_by_online"] = null; $this->GroupValues["req_for_user"] = isset($_GET[GET_EXTERN_INTERN_USER_ID]); $this->GroupValues["req_for_group"] = isset($_GET[GET_EXTERN_GROUP]); $parameters = getTargetParameters(); if ($parameters["include_group"] != null) { foreach ($_internalGroups as $gid => $group) { if (!in_array($gid, $parameters["include_group"])) { $this->GroupValues["groups_hidden"][] = $gid; } } } else { if ($parameters["include_user"] != null) { foreach ($_internalGroups as $gid => $group) { if (!in_array($gid, $_internalUsers[getInternSessIdByUserId($parameters["include_user"])]->Groups)) { $this->GroupValues["groups_hidden"][] = $gid; } } } else { if ($parameters["exclude"] != null) { $this->GroupValues["groups_hidden"] = $parameters["exclude"]; } } } }
function getInternal($desired = "", $util = 0, $fromCookie = null) { global $CONFIG, $INTERNAL, $GROUPS, $USER, $ISFORWARDPROCESSED, $INTLIST, $INTBUSY; $INTLIST = array(); $INTBUSY = 0; $backup_target = null; $fromDepartment = $fromDepartmentBusy = false; if (!isnull($USER->Browsers[0]->DesiredChatPartner) && isset($INTERNAL[$USER->Browsers[0]->DesiredChatPartner]) && $INTERNAL[$USER->Browsers[0]->DesiredChatPartner]->Status < USER_STATUS_OFFLINE) { $desired = $USER->Browsers[0]->DesiredChatPartner; } else { $USER->Browsers[0]->DesiredChatPartner = null; if (isset($_POST[POST_EXTERN_REQUESTED_INTERNID]) && !isnull($_POST[POST_EXTERN_REQUESTED_INTERNID])) { $desired = getInternSessIdByUserId(AJAXDecode($_POST[POST_EXTERN_REQUESTED_INTERNID])); } else { if (!isnull(getCookieValue("internal_user")) && !isnull($CONFIG["gl_save_op"])) { $desired = getInternSessIdByUserId(getCookieValue("internal_user")); $fromCookie = $desired; } } } foreach ($GROUPS as $id => $group) { $utilization[$id] = 0; } foreach ($INTERNAL as $sessId => $internal) { if ($internal->LastActive > time() - $CONFIG["timeout_clients"]) { $group_chats[$sessId] = $internal->GetExternalChatAmount(); $group_names[$sessId] = $internal->Fullname; $group_available[$sessId] = GROUP_STATUS_UNAVAILABLE; if (in_array($USER->Browsers[0]->DesiredChatGroup, $internal->Groups)) { $lca = $internal->GetLastChatAllocation(); if ($internal->Status == USER_STATUS_ONLINE && $lca < time() - $CONFIG["poll_frequency_clients"] * 3) { $group_available[$sessId] = GROUP_STATUS_AVAILABLE; } elseif ($internal->Status == USER_STATUS_BUSY || $lca >= time() - $CONFIG["poll_frequency_clients"] * 3) { $group_available[$sessId] = GROUP_STATUS_BUSY; $INTBUSY++; } } else { if ($internal->Status == USER_STATUS_ONLINE) { $backup_target = $internal; } else { if ($internal->Status == USER_STATUS_BUSY && isnull($backup_target)) { $backup_target = $internal; } } if (!isnull($USER->Browsers[0]->DesiredChatPartner) && $USER->Browsers[0]->DesiredChatPartner == $sessId) { $USER->Browsers[0]->DesiredChatPartner = null; } } for ($count = 0; $count < count($internal->Groups); $count++) { if ($USER->Browsers[0]->DesiredChatGroup == $internal->Groups[$count]) { if (!is_array($utilization[$internal->Groups[$count]])) { $utilization[$internal->Groups[$count]] = array(); } if ($group_available[$sessId] == GROUP_STATUS_AVAILABLE) { $utilization[$internal->Groups[$count]][$sessId] = $group_chats[$sessId]; } } } } } if (isset($utilization[$USER->Browsers[0]->DesiredChatGroup]) && is_array($utilization[$USER->Browsers[0]->DesiredChatGroup])) { arsort($utilization[$USER->Browsers[0]->DesiredChatGroup]); reset($utilization[$USER->Browsers[0]->DesiredChatGroup]); $util = end($utilization[$USER->Browsers[0]->DesiredChatGroup]); $INTLIST = $utilization[$USER->Browsers[0]->DesiredChatGroup]; } if (isset($group_available) && is_array($group_available) && in_array(GROUP_STATUS_AVAILABLE, $group_available)) { $fromDepartment = true; } elseif (isset($group_available) && is_array($group_available) && in_array(GROUP_STATUS_BUSY, $group_available)) { $fromDepartmentBusy = true; } isForward(); if (isset($group_chats) && is_array($group_chats) && isset($fromDepartment) && $fromDepartment) { foreach ($group_chats as $sessId => $amount) { if ($group_available[$sessId] == GROUP_STATUS_AVAILABLE && $amount <= $util || $ISFORWARDPROCESSED && isset($desired) && $sessId == $desired) { $available_internals[] = $sessId; } } } if ($fromDepartment && sizeof($available_internals) > 0) { if (is_array($available_internals)) { if (!isnull($desired) && (in_array($desired, $available_internals) || $INTERNAL[$desired]->Status == USER_STATUS_ONLINE)) { $matching_internal = $desired; } else { $matching_internal = array_rand($available_internals, 1); $matching_internal = $available_internals[$matching_internal]; } } if ($CONFIG["gl_alloc_mode"] != ALLOCATION_MODE_ALL || $fromCookie == $matching_internal) { $USER->Browsers[0]->DesiredChatPartner = $matching_internal; } } elseif ($fromDepartmentBusy) { if (!$USER->Browsers[0]->Waiting) { $USER->Browsers[0]->Waiting = true; } } else { $USER->AddFunctionCall("lz_chat_add_system_text(8,null);", false); $USER->AddFunctionCall("lz_chat_stop_system();", false); $INTLIST = array(); } }
function operatorsAvailable($_amount = 0, $_exclude = null, $include_group = null, $include_user = null) { global $CONFIG, $INTERNAL, $GROUPS; if (!DB_CONNECTION) { return 0; } getData(true, true, false, false); if (!isnull($include_user)) { $include_group = $INTERNAL[getInternSessIdByUserId($include_user)]->Groups; } foreach ($INTERNAL as $sysId => $internaluser) { if ($internaluser->IsExternal($GROUPS, $_exclude, $include_group) && $internaluser->Status < USER_STATUS_OFFLINE) { $_amount++; } } return $_amount; }
function up_3183_3184($_prefix, $_link) { global $INTERNAL, $GROUPS; $result = @mysql_query("ALTER TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_INFO . "` ADD `chat_id` INT NOT NULL DEFAULT '11700'", $_link); if (!$result && mysql_errno() != 1060) { return mysql_errno() . ": " . mysql_error(); } $result = @mysql_query("ALTER TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_INFO . "` ADD `ticket_id` INT NOT NULL DEFAULT '11700'", $_link); if (!$result && mysql_errno() != 1060) { return mysql_errno() . ": " . mysql_error(); } $result = @mysql_query("ALTER TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_CHATS . "` ADD `transcript_sent` tinyint(1) unsigned NOT NULL default '0'", $_link); if (!$result && mysql_errno() != 1060) { return mysql_errno() . ": " . mysql_error(); } $result = @mysql_query("ALTER TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_RESOURCES . "` CHANGE `html` `value` longtext character set utf8 collate utf8_bin NOT NULL", $_link); if (!$result && mysql_errno() != 1054) { return mysql_errno() . ": " . mysql_error(); } $result = @mysql_query("ALTER TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_RESOURCES . "` ADD `size` bigint(20) unsigned NOT NULL default '0'", $_link); if (!$result && mysql_errno() != 1060) { return mysql_errno() . ": " . mysql_error(); } $dirs = array(PATH_UPLOADS_INTERNAL, PATH_UPLOADS_EXTERNAL); $baseFolderInternal = $baseFolderExternal = false; foreach ($dirs as $tdir) { $subdirs = getDirectory($tdir, false, true); foreach ($subdirs as $dir) { if (@is_dir($tdir . $dir . "/")) { if ($tdir == PATH_UPLOADS_INTERNAL) { $owner = getInternSessIdByUserId($dir); } else { $owner = CALLER_SYSTEM_ID; } if (!isset($INTERNAL[$owner])) { continue; } $files = getDirectory($tdir . $dir . "/", false, true); foreach ($files as $file) { if ($file != FILE_INDEX && $file != FILE_INDEX_OLD) { if ($tdir == PATH_UPLOADS_INTERNAL) { $parentId = $owner; $type = 3; if (!$baseFolderInternal) { createFileBaseFolders($owner, true); $baseFolderInternal = true; } processResource($owner, $owner, $INTERNAL[$owner]->Fullname, 0, $INTERNAL[$owner]->Fullname, 0, 4, 3); } else { $parentId = 5; $owner = CALLER_SYSTEM_ID; $type = 4; if (!$baseFolderExternal) { createFileBaseFolders($owner, false); $baseFolderExternal = true; } } $cfile = $tdir != PATH_UPLOADS_INTERNAL ? base64_decode($file) : $file; $size = filesize($tdir . $dir . "/" . $file); $fid = md5($file . $owner . $size); $filename = $owner . "_" . $fid; copy($tdir . $dir . "/" . $file, PATH_UPLOADS . $filename); processResource($owner, $fid, $filename, $type, $cfile, 0, $parentId, 4, $size); } } } } } $sql = "CREATE TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_PREDEFINED . "` (`id` int(11) unsigned NOT NULL,`internal_id` varchar(32) character set utf8 collate utf8_bin NOT NULL,`group_id` varchar(32) character set utf8 collate utf8_bin NOT NULL,`lang_iso` varchar(2) character set utf8 collate utf8_bin NOT NULL,`invitation` mediumtext character set utf8 collate utf8_bin NOT NULL,`welcome` mediumtext character set utf8 collate utf8_bin NOT NULL,`website_push` mediumtext character set utf8 collate utf8_bin NOT NULL,`browser_ident` tinyint(1) unsigned NOT NULL default '0',`is_default` tinyint(1) unsigned NOT NULL default '0', `auto_welcome` tinyint(1) unsigned NOT NULL default '0',PRIMARY KEY (`id`)) ENGINE=MyISAM;"; $result = mysql_query($sql, $_link); if (!$result && mysql_errno() != 1050) { return mysql_errno() . ": " . mysql_error(); } else { if ($result) { $counter = 0; foreach ($GROUPS as $gid => $group) { @mysql_query("INSERT INTO `" . mysql_real_escape_string($_prefix) . DATABASE_PREDEFINED . "` (`id` ,`internal_id`, `group_id` ,`lang_iso` ,`invitation` ,`welcome` ,`website_push` ,`browser_ident` ,`is_default` ,`auto_welcome`) VALUES ('" . mysql_real_escape_string($counter++) . "', '', '" . mysql_real_escape_string($gid) . "', 'EN', 'Hello, my name is %name%. Do you need help? Start Live-Chat now to get assistance.', 'Hello %external_name%, my name is %name%, how may I help you?', 'Website Operator %name% would like to redirect you to this URL:\r\n\r\n%url%', '1', '1', '1');", $_link); @mysql_query("INSERT INTO `" . mysql_real_escape_string($_prefix) . DATABASE_PREDEFINED . "` (`id` ,`internal_id`, `group_id` ,`lang_iso` ,`invitation` ,`welcome` ,`website_push` ,`browser_ident` ,`is_default` ,`auto_welcome`) VALUES ('" . mysql_real_escape_string($counter++) . "', '', '" . mysql_real_escape_string($gid) . "', 'DE', '" . utf8_encode("Guten Tag, meine Name ist %name%. Benötigen Sie Hilfe? Gerne berate ich Sie in einem Live Chat") . "', 'Guten Tag %external_name%, mein Name ist %name% wie kann ich Ihnen helfen?', '" . utf8_encode("Ein Betreuer dieser Webseite (%name%) möchte Sie auf einen anderen Bereich weiterleiten:\\r\\n\\r\\n%url%") . "', '1', '0', '1');", $_link); } } } $sql = "CREATE TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_ROOMS . "` (`id` int(11) NOT NULL,`time` int(11) NOT NULL,`last_active` int(11) NOT NULL,`status` tinyint(1) NOT NULL default '0',`target_group` varchar(64) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM;"; $result = mysql_query($sql, $_link); if (!$result && mysql_errno() != 1050) { return mysql_errno() . ": " . mysql_error(); } $sql = "CREATE TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_POSTS . "` (`id` varchar(32) character set utf8 collate utf8_bin NOT NULL,`time` int(10) unsigned NOT NULL default '0',`micro` int(10) unsigned NOT NULL default '0',`sender` varchar(32) character set utf8 collate utf8_bin NOT NULL,`receiver` varchar(32) character set utf8 collate utf8_bin NOT NULL,`receiver_group` varchar(32) character set utf8 collate utf8_bin NOT NULL,`text` mediumtext character set utf8 collate utf8_bin NOT NULL,`received` tinyint(1) unsigned NOT NULL default '0',`persistent` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`id`)) ENGINE=MyISAM"; $result = mysql_query($sql, $_link); if (!$result && mysql_errno() != 1050) { return mysql_errno() . ": " . mysql_error(); } $sql = "CREATE TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_TICKETS . "` (`id` varchar(32) character set utf8 collate utf8_bin NOT NULL,`user_id` varchar(32) character set utf8 collate utf8_bin NOT NULL,`target_group_id` varchar(32) character set utf8 collate utf8_bin NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM;"; $result = mysql_query($sql, $_link); if (!$result && mysql_errno() != 1050) { return mysql_errno() . ": " . mysql_error(); } $sql = "CREATE TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_TICKET_EDITORS . "` (`ticket_id` int(10) unsigned NOT NULL,`internal_fullname` varchar(32) character set utf8 collate utf8_bin NOT NULL,`status` tinyint(1) unsigned NOT NULL default '1',`time` int(10) unsigned NOT NULL,PRIMARY KEY (`ticket_id`)) ENGINE=MyISAM;"; $result = mysql_query($sql, $_link); if (!$result && mysql_errno() != 1050) { return mysql_errno() . ": " . mysql_error(); } $sql = "CREATE TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_TICKET_MESSAGES . "` (`id` int(11) unsigned NOT NULL auto_increment,`time` int(11) unsigned NOT NULL,`ticket_id` varchar(32) character set utf8 collate utf8_bin NOT NULL,`text` mediumtext character set utf8 collate utf8_bin NOT NULL,`fullname` varchar(32) character set utf8 collate utf8_bin NOT NULL,`email` varchar(50) character set utf8 collate utf8_bin NOT NULL,`company` varchar(50) character set utf8 collate utf8_bin NOT NULL,`ip` varchar(15) character set utf8 collate utf8_bin NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1;"; $result = mysql_query($sql, $_link); if (!$result && mysql_errno() != 1050) { return mysql_errno() . ": " . mysql_error(); } $sql = "CREATE TABLE `" . mysql_real_escape_string($_prefix) . DATABASE_RATINGS . "` (`id` varchar(32) character set utf8 collate utf8_bin NOT NULL, `time` int(11) unsigned NOT NULL, `user_id` varchar(32) character set utf8 collate utf8_bin NOT NULL, `internal_id` varchar(32) character set utf8 collate utf8_bin NOT NULL, `fullname` varchar(32) character set utf8 collate utf8_bin NOT NULL, `email` varchar(50) character set utf8 collate utf8_bin NOT NULL, `company` varchar(50) character set utf8 collate utf8_bin NOT NULL, `qualification` tinyint(1) unsigned NOT NULL, `politeness` tinyint(1) unsigned NOT NULL, `comment` varchar(400) character set utf8 collate utf8_bin NOT NULL, `ip` varchar(15) character set utf8 collate utf8_bin NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM;"; $result = mysql_query($sql, $_link); if (!$result && mysql_errno() != 1050) { return mysql_errno() . ": " . mysql_error(); } return TRUE; }
function GetXML($_internal, $_full) { if ($_full) { $intern = isset($_internal[getInternSessIdByUserId($this->InternId)]) ? $_internal[getInternSessIdByUserId($this->InternId)]->Fullname : $this->InternId; return "<val id=\"" . base64_encode($this->Id) . "\" cr=\"" . base64_encode($this->Created) . "\" rc=\"" . base64_encode($this->RateComment) . "\" rp=\"" . base64_encode($this->RatePoliteness) . "\" rq=\"" . base64_encode($this->RateQualification) . "\" fn=\"" . base64_encode($this->Fullname) . "\" em=\"" . base64_encode($this->Email) . "\" co=\"" . base64_encode($this->Company) . "\" ii=\"" . base64_encode($intern) . "\" ui=\"" . base64_encode($this->UserId) . "\" />\r\n"; } else { return "<val id=\"" . base64_encode($this->Id) . "\" />\r\n"; } }