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) . '|';
 }
Example #4
0
 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);
     }
 }
Example #5
0
 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;
 }
Example #7
0
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) . "|";
 }
Example #10
0
  	  }
  	  
	  $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'); ?>
Example #11
0
    //            $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;
}
Example #13
0
    //            $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;
Example #14
0
/**
 * Отправка диалога в службу поддержки 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;
}