public static function getGeoDataByIP($ip) { self::initGeoIP(); if (self::$haveCngeoip) { if (!isset(self::$indexesForLocales[WEBIM_CURRENT_LOCALE])) { $locale = self::$defaultLocale; } else { $locale = WEBIM_CURRENT_LOCALE; } if (!isset(self::$functionsForEncodings[WEBIM_ENCODING])) { $encoding = self::$defaultEncoding; } else { $encoding = WEBIM_ENCODING; } $data = call_user_func(self::$functionsForEncodings[$encoding], $ip); if (empty($data[0])) { return null; } if ($encoding != WEBIM_ENCODING) { foreach ($data as $key => $value) { $data[$key] = smarticonv($encoding, WEBIM_ENCODING, $value); } } $result = array("city" => $data[self::$indexesForLocales[$locale][0]], "country" => $data[self::$indexesForLocales[$locale][1]], "lat" => $data[3], "lng" => $data[4]); return $result; } return null; }
/** * Отправка диалога в службу поддержки Free-lance.ru * * @param int $dept номер отдела службы поддержки * @param string $name имя пользователя, который обращается в службу поддержки * @param string $email email пользователя, который обращается в службу поддержки * @param string $msg текст обращения в службу поддержки * @param int $uid UID пользователя Free-lance.ru, если он сам обращается в службу поддержки * @return array id и уникальный код обрашения в службу поддержки - успех, пустой массив - провал */ function feedbackAdd($dept = 0, $name = '', $email = '', $msg = '', $uid = 0) { $return = array(); $conf = $GLOBALS['pg_db']['master']; $connect = @pg_connect("host={$conf['host']} port={$conf['port']} dbname={$conf['name']} user={$conf['user']} password={$conf['pwd']}"); if ($connect) { mt_srand(); $uc = md5(microtime(1) . mt_rand()); // уникальный код обрашения в службу поддержки $uc = substr($uc, 0, 6) . substr($uc, 12, 6); $dept = intval($dept); $uid = intval($uid); $name = smarticonv('UTF-8', 'CP1251', $name); $email = smarticonv('UTF-8', 'CP1251', $email); $msg = smarticonv('UTF-8', 'CP1251', $msg); if ($uid) { $name = $_SESSION['login']; } $sql = "INSERT INTO feedback ( uc, dept_id, user_id, user_login, email, question, request_time ) \n VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', NOW() ) RETURNING id"; $sql = sprintf($sql, pg_escape_string((string) $uc), pg_escape_string((string) $dept), pg_escape_string((string) $uid), pg_escape_string((string) $name), pg_escape_string((string) $email), pg_escape_string((string) $msg)); $res = @pg_query($connect, $sql); if ($res) { $id = pg_fetch_assoc($res); $id = @current($id); if ($id) { $return = array('id' => $id, 'uc' => $uc); // Пишем статистику ображений в feedback $date = date('Y-m-d H:01:00'); $sql = "INSERT INTO stat_feedback( date, type, count) VALUES( '{$date}', '{$dept}', 1 )"; $res = @pg_query($connect, $sql); } } } return $return; }
public static function formatTableLine($values, $field_length) { $strings = array(); foreach ($values as $v) { if (is_int($v)) { $v = sprintf('%d', $v); } elseif (is_float($v)) { $v = sprintf('%.2f', $v); } else { $v = strval($v); } //TODO: not good block if (WEBIM_ENCODING == 'UTF-8') { $v = smarticonv('UTF-8', 'cp1251', $v); } $v = substr(sprintf("%{\n {$field_length}\n }s", $v), 0, $field_length); if (WEBIM_ENCODING == 'UTF-8') { $v = smarticonv('cp1251', 'UTF-8', $v); } $strings[] = $v; } return '|' . implode('|', $strings) . '|'; }
private function updateOperatorOnlineTime($operatorid, $threadid = -1) { $stats = array(); // папка online в мэмкэш -------------------- /*$filename = self::OperatorOnlineStatsFilename($operatorid); if(file_exists($filename)) {*/ //$data = @file_get_contents($filename); $data = MapperFactory::getMapper('OperatorOnline')->getOperatorMemStats($operatorid); if ($data !== false) { $tmp = @unserialize($data); if ($tmp !== false) { $stats = $tmp; } } // папка online в мэмкэш -------------------- /*} else { create_basedir($filename); }*/ $cur_date = date('Y-m-d'); if (isset($stats[$threadid], $stats[$threadid][$cur_date])) { $delta = time() - $stats[$threadid][$cur_date]['updated']; $stats[$threadid][$cur_date]['seconds'] = $stats[$threadid][$cur_date]['seconds'] + ($delta < TIMEOUT_OPERATOR_PING ? $delta : 1); } else { if (isset($stats[$threadid])) { $stats[$threadid] = array(); } $stats[$threadid][$cur_date]['seconds'] = 1; $stats[$threadid][$cur_date]['threadid'] = $threadid; $stats[$threadid][$cur_date]['date'] = $cur_date; } $stats[$threadid][$cur_date]['updated'] = time(); // папка online в мэмкэш -------------------- //@file_put_contents($filename, serialize($stats), LOCK_EX); $data = smarticonv('UTF-8', 'CP1251', serialize($stats)); // папка online в мэмкэш -------------------- //if(filesize($filename) > OPERATOR_ONLINE_STATS_FILE_MAX_SIZE) { if (strlen($data) > OPERATOR_ONLINE_STATS_FILE_MAX_SIZE) { // папка online в мэмкэш -------------------- //$this->pushOnlineStatsToDB($operatorid); MapperFactory::getMapper('OperatorOnline')->delOperatorMemStats($operatorid); MapperFactory::getMapper('OperatorOnline')->pushOnlineStatsForOperator($operatorid, $stats); } else { MapperFactory::getMapper('OperatorOnline')->setOperatorMemStats($operatorid, $data); } }
public function sendFirstMessageWithVisitorInfo($thread, $params = array()) { $visitSession = VisitSession::GetInstance()->GetVisitSessionById($thread['visitsessionid']); $firstPage = null; $visted_pages = ""; if (!session_id()) { session_start(); } if (isset($_SESSION['user_stats'])) { $stats = $_SESSION['user_stats']; } else { $stats = getUsersStatsFromCookie(); } if (isset($stats['visited_pages']) && is_array($stats['visited_pages'])) { if (count($stats['visited_pages']) > 0) { $firstPage = $stats['visited_pages'][0]; } $visted_pages = "\n" . Resources::Get("chat.visited_pages"); foreach ($stats['visited_pages'] as $vp) { $title = isset($_SESSION['titles'], $_SESSION['titles'][$vp['url']]) ? $_SESSION['titles'][$vp['url']] : ""; if (WEBIM_ENCODING != 'UTF-8') { $title = smarticonv('utf-8', WEBIM_ENCODING, $title); } if (empty($title)) { $title = Resources::Get("chat.visited_page.no_title"); } $visted_pages .= "\n" . Resources::Get("chat.visited_page", array($title, HTTP_PREFIX . $_SERVER['HTTP_HOST'] . $vp['url'], $vp['time'])); } } $openerText = self::formatOpenerWithTitle(); $message = Resources::Get(empty($openerText) ? 'chat.came.from.unknown' : 'chat.came.from', $openerText); $simple = "\n%PARAM%: %VALUE%"; $link = "\n%PARAM%: %VALUE% %URL%"; if (!empty($thread['departmentid'])) { $departmentid = $thread['departmentid']; $dep = MapperFactory::getMapper("DepartmentLocale")->getDepartmentLocale($departmentid, Resources::getCurrentLocale()); $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('pending.table.head.department'), $dep['departmentname']), $simple); } if ($firstPage !== null) { if (!empty($firstPage['referrer'])) { $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.referrer'), parseReferrer($firstPage['referrer'], 'chat.window.referrer')), $simple); } if (!empty($firstPage['url'])) { $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.landingpage'), $firstPage['url']), $simple); } } $visitor_geodata = GeoIPLookup::getGeoDataByIP($visitSession['ip']); if (!empty($visitor_geodata)) { $message .= str_replace(array('%PARAM%', '%URL%', '%VALUE%'), array(Resources::Get('chat.window.geolocation'), "http://maps.google.com/maps?q=" . $visitor_geodata['lat'] . "," . $visitor_geodata['lng'], $visitor_geodata['city'] . ' ' . $visitor_geodata['country']), $link); } $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.browser'), get_user_agent($visitSession['useragent'])), $simple); $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.ip'), WEBIM_WHOIS_LINK . urlencode($visitSession['ip'])), $simple); if (!empty($visitSession['remotehost'])) { $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.remotehost'), $visitSession['remotehost']), $simple); } if (!empty($params['email'])) { $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.email'), $params['email']), $simple); } $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.fl_login'), $visitSession['fl_login']), $simple); $chats = Thread::getInstance()->CountNonEmptyThreads($visitSession['visitorid']); if ($chats > 0) { $message .= str_replace(array('%PARAM%', '%URL%', '%VALUE%'), array(Resources::Get('chat.window.chats'), HTTP_PREFIX . $_SERVER['HTTP_HOST'] . WEBIM_ROOT . '/operator/history.php?q=' . $visitSession['visitorid'], $chats), $link); } $message .= $visted_pages; Thread::getInstance()->PostMessage($thread['threadid'], KIND_FOR_AGENT, $message); }
static function ConvertWebIMToEncoding($encoding, $dir) { if (Resources::compareEncodings(WEBIM_ORIGINAL_ENCODING, $encoding)) { return null; } $resources = listConvertableFiles($dir); foreach ($resources as $item) { $content = file_get_contents($item); $w_content = smarticonv(WEBIM_ORIGINAL_ENCODING, $encoding, $content); $result = file_put_contents($item, $w_content); if ($result === FALSE) { return Resources::Get("errors.write.failed", array($item)); } } return null; }
function initVisitedPage($visitsessionid, $theme) { $url = $_GET['url']; // TODO why we use _GET? $referrer = $_GET['from']; // TODO let's call referer 'referer' buy not from? $isSecure = isset($_GET['issecure']) ? $_GET['issecure'] : FALSE; // TODO, can we use false? hope so ... $title = isset($_GET['title']) ? $_GET['title'] : null; if (WEBIM_ENCODING != 'UTF-8') { $title = smarticonv('utf-8', WEBIM_ENCODING, $title); } $title = removeSpecialSymbols($title); $p_pageid = VisitedPage::GetInstance()->CreateVisitedPage($visitsessionid, $url, $referrer, $title); $p_location = get_app_location(true, $isSecure); $p_invitescript = $p_location . "/invite.php?pageid=" . $p_pageid . "&theme=" . $theme . "&issecure={$isSecure}"; $p_issecure = $isSecure; require 'js/invite/tracking.js'; }
function addOrUpdateFromSession($visitsessionid) { if (!session_id()) { session_start(); } $vpm = MapperFactory::getMapper("VisitedPage"); if (isset($_SESSION['user_stats'], $_SESSION['user_stats']['visited_pages']) && is_array($_SESSION['user_stats']['visited_pages'])) { foreach ($_SESSION['user_stats']['visited_pages'] as $k => $vp) { if (isset($vp['visitedpageid'])) { continue; } $title = isset($_SESSION['titles'], $_SESSION['titles'][$vp['url']]) ? $_SESSION['titles'][$vp['url']] : null; if (WEBIM_ENCODING != 'UTF-8') { $title = smarticonv('utf-8', 'cp1251', $title); } $visitedpageid = $vpm->save(array('visitsessionid' => $visitsessionid, 'uri' => $vp['url'], 'referrer' => $vp['referrer'], 'timespent' => $vp['time'], 'pagetitle' => $title, 'opened' => null, 'updated' => null, 'state' => VISITED_PAGE_LOADING)); $_SESSION['user_stats']['visted_pages'][$k]['visitedpageid'] = $visitedpageid; } } }
public static function formatTableLine($values, $field_length) { $strings = array(); foreach ($values as $v) { if (is_int($v)) { $v = sprintf("%d", $v); } else { if (is_float($v)) { $v = sprintf("%.2f", $v); } else { $v = strval($v); } } //TODO: not good block if (WEBIM_ENCODING == "UTF-8") { $v = smarticonv("UTF-8", "cp1251", $v); } $v = substr(sprintf("%{\n {$field_length}\n }s", $v), 0, $field_length); if (WEBIM_ENCODING == "UTF-8") { $v = smarticonv("cp1251", "UTF-8", $v); } $strings[] = $v; } return "|" . implode("|", $strings) . "|"; }
} $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ""; if (empty($visitor)) { return; } Thread::getInstance()->SendVisitedPageForOpenThreads($visitor['id'], $referer, $referer_title); } header('Content-type: text/javascript; charset='.BROWSER_CHARSET); ?> var rules = [ <?php $rules = MapperFactory::getMapper("AutoInvite")->getAll(); foreach ($rules as $rule): if(WEBIM_ENCODING != 'UTF-8') { $rule['text'] = smarticonv('cp1251', 'utf-8', $rule['text']); } ?> { id: <?php echo $rule['autoinviteid']; ?>, text: <?php echo $json->encode($rule['text'])?>, conditions: <?php echo $rule['conditions']?> }, <?endforeach;?> ]; <?php require_once('./ainvite.js'); ?>
// $obj->CloseThread($thread, $isvisitor); // } if ($isvisitor) { ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'visitor_browser_unload'); } show_ok_result("closed"); } elseif ($act == 'rate') { if (!$isvisitor) { show_error("visitor-only operation"); } $rate = verify_param("rate", "/^-?\\d{1,9}\$/", "0"); Thread::getInstance()->RateOperator($thread, $rate); show_ok_result("rate"); } elseif ($act == "contacts") { $name = !empty($_REQUEST['name']) ? smarticonv("UTF-8", WEBIM_ENCODING, $_REQUEST['name']) : ""; $email = !empty($_REQUEST['email']) ? smarticonv("UTF-8", WEBIM_ENCODING, $_REQUEST['email']) : ""; Thread::getInstance()->PostMessage($thread['threadid'], KIND_INFO, Resources::Get('contacts.submitted', array($name, $email))); updateContacts($name, $email, $phone, $threadid, $thread['visitsessionid']); show_ok_result("contacts"); } function show_ok_result($resid) { Browser::SendXmlHeaders(); echo "<{$resid}></{$resid}>"; exit; } function show_error($message) { Browser::SendXmlHeaders(); echo "<error><descr>{$message}</descr></error>"; exit;
function generateDepartmentKey() { $key = $_REQUEST['departmentname']; if (strtolower(WEBIM_ENCODING) !== "cp1251") { $key = smarticonv(WEBIM_ENCODING, "cp1251", $key); } $key = texttranslit($key); $key = preg_replace('/\\s+/', '_', $key); $key = preg_replace('/[^\\w\\_\\.\\d]/', '', $key); $key = strtolower($key); return $key; }
// $obj->CloseThread($thread, $isvisitor); // } if ($isvisitor) { ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'visitor_browser_unload'); } show_ok_result('closed'); } elseif ($act == 'rate') { if (!$isvisitor) { show_error('visitor-only operation'); } $rate = verify_param('rate', "/^-?\\d{1,9}\$/", '0'); Thread::getInstance()->RateOperator($thread, $rate); show_ok_result('rate'); } elseif ($act == 'contacts') { $name = !empty($_REQUEST['name']) ? smarticonv('UTF-8', WEBIM_ENCODING, $_REQUEST['name']) : ''; $email = !empty($_REQUEST['email']) ? smarticonv('UTF-8', WEBIM_ENCODING, $_REQUEST['email']) : ''; Thread::getInstance()->PostMessage($thread['threadid'], KIND_INFO, Resources::Get('contacts.submitted', array($name, $email))); updateContacts($name, $email, $phone, $threadid, $thread['visitsessionid']); show_ok_result('contacts'); } function show_ok_result($resid) { Browser::SendXmlHeaders(); echo "<{$resid}></{$resid}>"; exit; } function show_error($message) { Browser::SendXmlHeaders(); echo "<error><descr>{$message}</descr></error>"; exit;
/** * Отправка диалога в службу поддержки Free-lance.ru * * @param int $dept номер отдела службы поддержки * @param string $name имя пользователя, который обращается в службу поддержки * @param string $email email пользователя, который обращается в службу поддержки * @param string $msg текст обращения в службу поддержки * @param int $uid UID пользователя Free-lance.ru, если он сам обращается в службу поддержки * @return array id и уникальный код обрашения в службу поддержки - успех, пустой массив - провал */ function feedbackAdd($dept = 0, $name = '', $email = '', $msg = '', $uid = 0) { $return = array(); $conf = $GLOBALS['pg_db']['master']; $connect = @pg_connect("host={$conf['host']} port={$conf['port']} dbname={$conf['name']} user={$conf['user']} password={$conf['pwd']}"); if ($connect) { mt_srand(); $uc = md5(microtime(1) . mt_rand()); // уникальный код обрашения в службу поддержки $uc = substr($uc, 0, 6) . substr($uc, 12, 6); $dept = intval($dept); $uid = intval($uid); $name = smarticonv('UTF-8', 'CP1251', $name); $email = smarticonv('UTF-8', 'CP1251', $email); $msg = smarticonv('UTF-8', 'CP1251', $msg); if ($uid) { $name = $_SESSION['login']; } $sql = "INSERT INTO feedback ( uc, dept_id, user_id, user_login, email, question, request_time ) \n VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', NOW() ) RETURNING id"; $sql = sprintf($sql, pg_escape_string((string) $uc), pg_escape_string((string) $dept), pg_escape_string((string) $uid), pg_escape_string((string) $name), pg_escape_string((string) $email), pg_escape_string((string) $msg)); $res = @pg_query($connect, $sql); if ($res) { $id = pg_fetch_assoc($res); $id = @current($id); if ($id) { $return = array('id' => $id, 'uc' => $uc); // Пишем статистику ображений в feedback $date = date('Y-m-d H:01:00'); $sql = "INSERT INTO stat_feedback( date, type, count) VALUES( '{$date}', '{$dept}', 1 )"; $res = @pg_query($connect, $sql); } } } return $return; }