Ejemplo n.º 1
0
 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"];
             }
         }
     }
 }
Ejemplo n.º 2
0
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();
    }
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 5
0
 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";
     }
 }