コード例 #1
0
 /**
  * Печатает содержимое файлов, при запросе /static.php?t=$seed.
  * Сжимает содержимое, контролирует кэширование на сервере и клиенте.
  *
  * @param string $seed закодировнная строка (параметр ?t).
  */
 public function output($seed)
 {
     $log = $this->_log;
     if (($type = $this->_decodeSeed($seed, $seed_expired)) === false) {
         $log->writeln("\n\nstatic_compressor::output()\n");
         $log->writeln("Error _decodeSeed - seed:{$seed}\n\n");
         exit;
     }
     if ($seed_expired) {
         $seed = $this->_encodeSeed($type);
     }
     $last_mod = $this->getLastModified($type);
     $mem_key = md5('static_compress.output' . $seed);
     $mem_data = $this->memBuff->get($mem_key);
     if (!$mem_data || $last_mod != $mem_data['last_mod']) {
         $mem_data['body'] = $this->_compress($type, true);
         $mem_data['etag'] = '"' . md5($mem_data['body']) . '"';
         $mem_data['last_mod'] = $last_mod;
         $mem_data['length'] = strlen($mem_data['body']);
         $this->memBuff->set($mem_key, $mem_data, self::GC_LIFE);
     }
     header('Content-Type: text/' . ($this->types[$type] == 'js' ? 'javascript' : 'css') . '; charset=' . self::getCharsetType($type));
     header('Cache-Control: public, must-revalidate, max-age=0');
     header('ETag: ' . $mem_data['etag']);
     header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $mem_data['last_mod']) . ' GMT');
     if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $mem_data['etag'] && (!isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $mem_data['last_mod'])) {
         header('HTTP/1.1 304 Not Modified');
         $mem_data['length'] = 0;
         $mem_data['body'] = null;
     }
     header('Content-Length: ' . $mem_data['length']);
     exit($mem_data['body']);
 }
コード例 #2
0
ファイル: share.php プロジェクト: Nikitian/fl-ru-damp
 public function process_event(&$event)
 {
     $r = FALSE;
     switch ($event->type) {
         case 'memcache_delete':
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/memBuff.php';
             $memBuff = new memBuff();
             $memBuff->delete($event->data['key']);
             $r = TRUE;
             break;
         case 'memcache_flush_group':
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/memBuff.php';
             $memBuff = new memBuff();
             $memBuff->flushGroup($event->data['key']);
             $r = TRUE;
             break;
         case 'static_compress.createBatchBySeed':
             $GLOBALS['DEBUG_VAR'] = array();
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/static_compress.php';
             $memBuff = new memBuff();
             $memBuff->set('eto.kostyl.inache.tupit.set.v.createBatch', 1, 1);
             $stc = new static_compress();
             $r = !($error = $stc->createBatchBySeed($event->data['seed']));
             break;
     }
     if ($event->type) {
         $this->log->notice("Function {$event->type}... " . ($r ? 'Success' : 'Error ' . $error));
         $this->log->notice(base64_decode($event->data['seed']));
         $this->log->notice(var_export($GLOBALS['DEBUG_VAR']));
     }
     return PGQ_EVENT_OK;
 }
コード例 #3
0
ファイル: masssend.php プロジェクト: Nikitian/fl-ru-damp
 /**
  * Сохраняет или возвращает данные связывающие рассылку в личку с рассылкой в почту. Данные актуальны с 
  * момента начала рассылки и до ее окончания. Данные хранятся в переменной (т.к. скрипт постоянно запущен) и
  * дублируются в memcahce на случай отключения скрипта во время рассылки. Если во время рассылки в личку 
  * остановить скрипт и перегрузить memcahce, то данные данные потеряются и рассылка в почту не пойдет.
  * Если сделать то же во время рассылки на почту, есть вероятность отправить части пользователей повторные
  * письма.
  * 
  * @param  integer $messId  id личного сообщения
  * @param  array   $data    массив с данными для сохранения или NULL если данные нужно получить
  * @return array            если $data == NULL, возвращает массив данных для $messId
  */
 public function bind($messId, $data = NULL)
 {
     $cache = new memBuff();
     $idx = -1;
     if (empty($this->_binds)) {
         $this->_binds = $cache->get(self::MASSSEND_BIND_CACHE_KEY);
         if (!is_array($this->_binds)) {
             $this->_binds = array();
         }
     }
     if (count($this->_binds) >= 100) {
         array_shift($this->_binds);
     }
     for ($i = count($this->_binds) - 1; $i >= 0; $i--) {
         if ($this->_binds[$i]['__messId'] == $messId) {
             $idx = $i;
             break;
         }
     }
     if (is_null($data)) {
         return $idx >= 0 ? $this->_binds[$idx] : array();
     } else {
         $data['__messId'] = $messId;
         if ($idx >= 0) {
             $this->_binds[$idx] = $data;
         } else {
             $this->_binds[] = $data;
         }
         $cache->set(self::MASSSEND_BIND_CACHE_KEY, $this->_binds, 3600 * 48);
     }
 }
コード例 #4
0
 /**
  * Обновить кеш цен
  * 
  * @global type $DB
  * @return boolean
  */
 public static function updateCache()
 {
     global $DB;
     self::$_cache_data = null;
     $data = $DB->rows("SELECT * FROM " . get_class($this));
     if ($data) {
         //Преобразуем в удобную форму пользования
         foreach ($data as $el) {
             self::$_cache_data[$el['op_code']][$el['param']] = $el['sum'];
         }
         $memBuff = new memBuff();
         return $memBuff->set(self::OP_CODES_PRICE_MEMCACHE_TAG, self::$_cache_data, self::OP_CODES_PRICE_MEMCACHE_LIFE);
     }
     return false;
 }
コード例 #5
0
ファイル: stdf5.php プロジェクト: amage/fl-ru-damp
/**
 * Получает курсы валют с сайта ЦБ
 *
 * @return array массив, индексированный кодами валют (USD, EUR и т.д.), элементы которого есть свойства данной валюты.
 *               Курс рубля к каждой валюте берется из свойства 'Value'.
 */
function getCBRates()
{
    static $rates = NULL;
    if ($rates) {
        return $rates;
    }
    $memBuff = new memBuff();
    $curr_day = strtotime(date('d.m.Y'));
    if ($rdata = $memBuff->get('getCBRates')) {
        $rates = $rdata['rates'];
        if ($rdata['day'] == $curr_day) {
            return $rates;
        }
    }
    $xml = @file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp', false, stream_context_create(array('http' => array('timeout' => 1))));
    //было 5 сек
    if ($xml && get_http_response_code($http_response_header) == 200) {
        $xmlDoc = new DOMDocument();
        if (@$xmlDoc->loadXML($xml)) {
            $rates = NULL;
            $xpath = new DOMXPath($xmlDoc);
            $valutes = $xpath->query('//Valute/CharCode');
            foreach ($valutes as $v) {
                $name = $v->nodeValue;
                if ($children = $v->parentNode->childNodes) {
                    foreach ($children as $ch) {
                        if ($ch->nodeType == XML_ELEMENT_NODE) {
                            $rates[$name][$ch->nodeName] = $ch->nodeValue;
                        }
                    }
                }
            }
            //@todo: кешируем курс пока на сутки потом нужно перерабоать в крон и БД
            $memBuff->set('getCBRates', array('day' => $curr_day, 'rates' => $rates), 86400);
        }
    }
    return $rates;
}
コード例 #6
0
ファイル: messages_spam.php プロジェクト: Nikitian/fl-ru-damp
 /**
  * Возвращает количество жалоб о спаме, удовлетворяющих условиям выборки
  * 
  * @param  array $filter фильтр
  * @return int
  */
 function getSpamCount($filter = array())
 {
     $DB = new DB();
     // plproxy
     $aFilter = array();
     $oMemBuf = new memBuff();
     $nCount = 0;
     if (is_array($filter) && count($filter)) {
         foreach ($filter as $sKey => $sVal) {
             $aFilter[] = array($sKey, $sVal);
         }
     }
     if (empty($aFilter) && ($nCount = $oMemBuf->get('messages_spam_count')) !== false) {
         return $nCount;
     } else {
         $sQuery = 'SELECT messages_spam_get_count(?a)';
         $nCount = $DB->val($sQuery, $aFilter);
         if (empty($aFilter) && !$DB->error) {
             $oMemBuf->set('messages_spam_count', $nCount, 3600);
         }
     }
     return $nCount;
 }
コード例 #7
0
 /**
  * ¬озвращает список публичных типовых услуг по заданным услови¤м и пагинацией
  * 
  * @return array
  */
 public function getList($excluded_ids = array())
 {
     $criteria = array($this->category_id, $this->city_id, $this->country_id, $this->keywords, $this->limit, $this->offset, $this->price_ranges, $this->price_max, $this->order, $excluded_ids, $this->user_id);
     $membuf = new memBuff();
     $memkey = __METHOD__ . '#' . md5(serialize($criteria));
     if (false !== ($result = $membuf->get($memkey)) && is_release()) {
         return $result;
     }
     $sort = $this->getSort();
     # @see http://sphinxsearch.com/forum/view.html?id=11538 about city = x or country = y
     $sphinxClient = new SphinxClient();
     $sphinxClient->SetServer(SEARCHHOST, SEARCHPORT);
     $sphinxClient->SetLimits($this->offset, $this->limit, 20000);
     $sphinxClient->SetSortMode(SPH_SORT_EXTENDED, $sort);
     $sphinxClient->SetFieldWeights(array('title' => 2, 'extra_title' => 1));
     //$sphinxClient->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
     $selectExpression = '*';
     // все колонки
     if ($this->user_id) {
         $selectExpression .= ", IF(user_id = {$this->user_id}, 1, 0) as match_user";
         $sphinxClient->setFilter('match_user', array(1));
     }
     if ($this->category_id) {
         $selectExpression .= ", IF(category_id = {$this->category_id} or category_parent_id = {$this->category_id}, 1, 0) as match_category";
         $sphinxClient->setFilter('match_category', array(1));
     }
     if ($this->country_id) {
         $selectExpression .= ", IF(user_country_id = {$this->country_id} or country_id = {$this->country_id}, 1, 0) as match_country";
         $sphinxClient->setFilter('match_country', array(1));
     }
     if ($this->city_id) {
         $selectExpression .= ", IF(user_city_id = {$this->city_id} or city_id = {$this->city_id}, 1, 0) as match_city";
         $sphinxClient->setFilter('match_city', array(1));
     }
     if (count($this->price_ranges)) {
         $match_price_exprs = array();
         foreach ($this->getPriceRanges() as $i => $price_range) {
             if (!isset($this->price_ranges[$i])) {
                 continue;
             }
             $match_price_exprs[] = "price_{$i} = 1";
         }
         $match_price_exprs = implode(' or ', $match_price_exprs);
         $selectExpression .= ", IF({$match_price_exprs}, 1, 0) as match_price";
         $sphinxClient->setFilter('match_price', array(1));
     }
     if ($this->price_max > 0) {
         $selectExpression .= ", IF(price <= {$this->price_max}, 1, 0) as match_price_max";
         $sphinxClient->setFilter('match_price_max', array(1));
     }
     $searchString = '';
     if (!empty($this->keywords)) {
         $keywords = implode(' ', array_filter(preg_split('/\\s*,\\s*/', $this->keywords)));
         $searchString = trim($keywords);
         //$searchString = $this->GetSphinxKeyword($searchString);
         $sphinxClient->SetMatchMode(SPH_MATCH_ANY);
         //SPH_MATCH_EXTENDED2);
     }
     if (count($excluded_ids)) {
         $sphinxClient->setFilter('tservice_id', $excluded_ids, true);
     }
     $sphinxClient->SetSelect($selectExpression);
     $queryResult = $sphinxClient->query($searchString, "tservices;delta_tservices");
     //echo '<pre>error: ', $sphinxClient->GetLastError(), '</pre>';
     //echo '<pre>warn : ', $sphinxClient->GetLastWarning(), '</pre>';
     $list = array();
     $total = 0;
     if (isset($queryResult['matches'])) {
         foreach ($queryResult['matches'] as $id => $row) {
             $row['attrs']['id'] = $id;
             $list[] = $row['attrs'];
         }
         $total = $queryResult['total_found'] < $queryResult['total'] ? $queryResult['total_found'] : $queryResult['total'];
     }
     $result = array('list' => $list, 'total' => $total);
     if ($this->_ttl) {
         $membuf->set($memkey, $result, $this->_ttl);
     }
     return $result;
 }
コード例 #8
0
 /**
  * Устанавливает таблицу для записи посещений.
  * @see stat_collector::Step1()
  *
  * @param string $table       имя таблицы (stat_log|stat_log_t)
  * @param boolean $only_mem   true: сохранить только в мемкэш, иначе еще и в БД.
  * @return boolean   успешно?
  */
 private function _setLogTable($table, $only_mem = false)
 {
     $MEM = new memBuff();
     if ($only_mem || $this->_sDB->update('stat_variables', array('value' => $table), 'name = ?', 'log_table')) {
         return $MEM->set(stat_collector::LOGTBL_MEM_KEY, $table, 3000);
     }
     return false;
 }
コード例 #9
0
ファイル: QChat.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Запускает "постоянное соединение" и в цикле начинает проверять новые серверные события и отсылать их
  * клиентам.
  */
 public function stream($type)
 {
     $timer = 0;
     $sConn = round(self::CONNECT_TTL * 0.7);
     $disconnect = false;
     $this->_isStream = true;
     // обязательно отключаем работу с сессией, т.к. скрипт работает длительное время
     // и он может переписать сделанные другими скриптами изменения на старые
     session_write_close();
     ob_implicit_flush(true);
     $this->_counter('connects', 1);
     while (true) {
         // переодически сохраняем данные соединения
         if (++$timer % $sConn == 0) {
             $this->_saveConnect();
         }
         // проверяем новые события при необходимости
         foreach ($this->_sEvents as $name => $event) {
             $time = microtime(true);
             $key = self::MEMBUFF_EVENTS_TIMER_KEY . $this->_uid . ':' . $name;
             $evTime = (int) $this->_memBuff->get($key);
             if ($evTime + $event['check'] < $time) {
                 $this->_memBuff->set($key, $time, self::CONNECT_TTL);
                 call_user_func(array($this, $event['func']));
             }
         }
         // поспим
         sleep(1);
         // теперь можно все отдать клиенту
         $evid = $this->_counter('evid');
         if ($this->_connect['evid'] < $evid) {
             $this->_sendEvent($this->_connect['evid'] + 1);
             $this->_connect['evid'] = $evid;
             $this->_saveConnect();
             if ($type != 'hold') {
                 $disconnect = true;
             }
         }
         if ($disconnect || $timer >= self::SCRIPT_LIVE) {
             break;
         }
         // и пробел для поддержания соеденения
         //$this->_sendByte();
     }
 }
コード例 #10
0
ファイル: index.php プロジェクト: Nikitian/fl-ru-damp
        header("Location: " . str_replace($GLOBALS['host'], '', $location));
        //перекидываем на текущую страницу, чтобы нельзя было повторить POST по F5
        exit;
        break;
}
$header = "../header.php";
$footer = "../footer.html";
if (!$user->login) {
    include ABS_PATH . "/404.php";
    exit;
}
$obj_memcache = new memBuff();
if ($_SESSION['login']) {
    if ($_SESSION['login'] != $user->login) {
        if (!$obj_memcache->get('user_view_' . strtolower($user->login) . '_' . strtolower($_SESSION['login']))) {
            $obj_memcache->set('user_view_' . strtolower($user->login) . '_' . strtolower($_SESSION['login']), 1, 3600);
            $user->IncHits($user->login);
        }
    }
} else {
    if (!$obj_memcache->get('user_view_' . strtolower($user->login) . '_' . getRemoteIP())) {
        $obj_memcache->set('user_view_' . strtolower($user->login) . '_' . getRemoteIP(), 1, 3600);
        $user->IncHits($user->login);
    }
}
if ($user->is_banned && !hasPermissions('users')) {
    if (!$content) {
        $content = "ban.php";
    }
} else {
    if (!$content) {
コード例 #11
0
ファイル: public.server.php プロジェクト: kapai69/fl-ru-damp
/**
 * формирует превью проекта на главной странице.
 */
function GetPreview($data)
{
    $objResponse = new xajaxResponse();
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/attachedfiles.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/CFile.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/HTML/projects_lenta.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/project_exrates.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/memBuff2.php';
    $kind = 1;
    $memBuff = new memBuff();
    $htmlLenta = $memBuff->get('projectsLentaHTML');
    if (!$htmlLenta) {
        $prj = new new_projects();
        $prjs = $prj->getProjects($num_prjs, -1, 1, false, null, true);
        foreach ($prjs as &$proj) {
            // стираем принадлежность проекта к пользователю, чтобы не появилось кнопок РЕДАКТИРОВАТЬ и пр.
            unset($proj['user_id']);
        }
        unset($proj);
        $htmlPrj = new HTMLProjects();
        $htmlPrj->template = '/projects/tpl.lenta.new.php';
        $prj_content = $htmlPrj->ShowProjects($num_prjs, $prjs, 1, 1, null, true);
        $prfs = new professions();
        $profs = $prfs->GetAllProfessions('', 0, 1);
        // подложка с лентой проектов
        ob_start();
        include $_SERVER['DOCUMENT_ROOT'] . '/templates/main.php';
        $htmlLenta = ob_get_clean();
        // кэшируем ленту проектов
        $memBuff->set('projectsLentaHTML', $htmlLenta, 1800);
    }
    // подготавливаем данные для шаблона в ленту проектов
    $row = array();
    $row['kind'] = __paramValue('int', $data['kind']);
    $row['cost'] = __paramValue('int', $data['cost']);
    $row['currency'] = __paramValue('int', $data['currency_db_id']);
    $row['priceby'] = __paramValue('int', $data['priceby_db_id']);
    $row['name'] = stripslashes(__paramValue('html', $data['name'], null, true));
    $contacts = array('phone' => array('name' => 'Телефон', 'value' => ''), 'site' => array('name' => 'Сайт', 'value' => ''), 'icq' => array('name' => 'ICQ', 'value' => ''), 'skype' => array('name' => 'Skype', 'value' => ''), 'email' => array('name' => 'E-mail', 'value' => ''));
    if (isset($data['contacts'])) {
        foreach ($data['contacts'] as $name => $value) {
            if (!isset($contacts[$name])) {
                continue;
            }
            switch ($name) {
                case 'site':
                    if (!url_validate(ltrim(ltrim($value, 'http://'), 'https://')) && trim($value) != '') {
                        $error["contact_{$name}"] = 'Поле заполнено некорректно';
                    }
                    if (strpos($value, 'htt') === false && trim($value) != '') {
                        $value = 'http://' . $value;
                    }
                    break;
                case 'email':
                    if (!is_email($value) && trim($value) != '') {
                        $error["contact_{$name}"] = 'Поле заполнено некорректно';
                    }
                    break;
            }
            $contacts[$name]['value'] = __paramValue('htmltext', stripslashes($value));
        }
        $row['contacts'] = serialize($contacts);
    }
    $descrFull = stripslashes(__paramValue('html', $data['descr'], null, true));
    $descr = preg_replace('/^ /', "", $descrFull);
    $descr = preg_replace("/(\n) /", "\$1", $descr);
    $descr = reformat(strip_tags(htmlspecialchars(LenghtFormatEx(htmlspecialchars_decode($descr, ENT_QUOTES), 180), ENT_QUOTES), '<br />'), 50, 1, 0, 1);
    $descr = preg_replace("//", '&nbsp;', $descr);
    $row['descr'] = $descr;
    $row['t_is_payed'] = $data['logo_ok'] || $data['top_ok'];
    $row['t_is_ontop'] = __paramValue('bool', $data['top_ok']);
    $row['t_pro_only'] = $data['pro_only'] ? 't' : 'f';
    $row['t_verify_only'] = $data['verify_only'] ? 't' : 'f';
    $row['t_urgent'] = $data['urgent'] ? 't' : 'f';
    $row['t_hide'] = $data['hide'] ? 't' : 'f';
    $row['create_date'] = date('Y-m-d H:i', strtotime(date('Y-m-d H:i:s')) - 120);
    // делаем дату публикации 2 минуты назад
    $row['end_date'] = __paramValue('string', $data['end_date']);
    $row['win_date'] = __paramValue('string', $data['win_date']);
    $row['country'] = __paramValue('int', $data['project_location_columns'][0]);
    $row['city'] = __paramValue('int', $data['project_location_columns'][1]);
    list($row['country_name'], $row['city_name']) = explode(': ', __paramValue('string', $data['location']));
    $logoOK = __paramValue('bool', $data['logo_ok']);
    $topOK = __paramValue('bool', $data['top_ok']);
    $row['link'] = __paramValue('string', $data['link']);
    if ($logoOK) {
        $logoAttach = new attachedfiles($data['logo_attachedfiles_session']);
        $logoFiles = $logoAttach->getFiles(array(1));
        if (count($logoFiles)) {
            $logoFile = array_pop($logoFiles);
            // загружено может быть несколько файлов, берем последний
            $logoCFile = new CFile($logoFile['id']);
        } elseif (__paramValue('int', $data['logo_file_id'])) {
            $logoCFile = new CFile(__paramValue('int', $data['logo_file_id']));
        }
        $row['logo_name'] = $logoCFile->name;
        $row['logo_path'] = $logoCFile->path;
    }
    $is_ajax = true;
    // подготовка данных для подробной страницы проекта
    $project = $row;
    $categories = array();
    for ($i = 0; $i < 3; ++$i) {
        $categoryID = __paramValue('int', $data['project_profession' . $i . '_columns'][0]);
        $subcategoryID = __paramValue('int', $data['project_profession' . $i . '_spec_columns'][0]);
        if ($categoryID || $subcategoryID) {
            $categories[] = array('category_id' => $categoryID, 'subcategory_id' => $subcategoryID);
        }
    }
    $project['spec_txt'] = projects::_getSpecsStr($categories, ' / ', ', ', true);
    $project['ico_payed'] = $logoOK;
    $project['is_upped'] = $topOK;
    $project['descr'] = $descrFull;
    $project['logo_id'] = $logoCFile->id;
    $project['prefer_sbr'] = __paramValue('bool', $data['prefer_sbr']) ? 't' : 'f';
    $project['urgent'] = __paramValue('bool', $data['urgent']) ? 't' : 'f';
    $project['hide'] = __paramValue('bool', $data['hide']) ? 't' : 'f';
    if (trim($project['contacts']) != '') {
        $contacts_employer = unserialize($project['contacts']);
        $empty_contacts_employer = 0;
        foreach ($contacts_employer as $name => $contact) {
            if (trim($contact['value']) == '') {
                $empty_contacts_employer++;
            }
        }
        $is_contacts_employer_empty = count($contacts_employer) == $empty_contacts_employer;
    }
    $isPreview = true;
    $project_exRates = project_exrates::GetAll();
    $translate_exRates = array(0 => 2, 1 => 3, 2 => 4, 3 => 1);
    ob_start();
    include $_SERVER['DOCUMENT_ROOT'] . '/public/new/tpl.preview.php';
    ?>
    <?php 
    $htmlProject = ob_get_clean();
    $objResponse->assign('project_preview_lenta', 'innerHTML', $htmlLenta);
    $objResponse->assign('project_preview_content', 'innerHTML', $htmlProject);
    $objResponse->script('Public.showPreview()');
    return $objResponse;
}
コード例 #12
0
ファイル: qiwipay_soap.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Создание счета @see class qiwipay.
  *
  * @param array $request параметры ($_POST).
  *
  * @return unknown
  */
 public function createBill($request)
 {
     if (!$this->uid) {
         return 'Пользователь не определен';
     }
     $account = new account();
     $account->GetInfo($this->uid, true);
     if ($error = $this->validate($request, $account->id)) {
         return $error;
     }
     $this->DB->start();
     $aData = array('account_id' => $account->id, 'phone' => $this->form['phone'], 'sum' => $this->form['sum']);
     $id = $this->DB->insert('qiwi_account', $aData, 'id');
     if ($id) {
         $params = new createBill();
         $params->login = $this->login;
         // логин
         $params->password = $this->passwd;
         // пароль
         $params->user = $this->form['phone'];
         // пользователь, которому выставляется счет
         $params->amount = $this->form['sum'];
         // сумма
         $params->comment = $this->form['comment'];
         // комментарий
         $params->txn = $id;
         // номер заказа
         $params->lifetime = $this->ltime;
         // время жизни (если пусто, используется по умолчанию 30 дней)
         $params->alarm = $this->alarm_sms;
         if ($this->passwd == 'debug') {
             $result = 1;
         } else {
             $result = $this->service->createBill($params)->createBillResult;
         }
         if ($err = $this->_checkResultError($result)) {
             $error['qiwi'] = $err;
             $this->DB->rollback();
             die;
             return $error;
         }
         unset($aData['sum']);
         $sCode = substr($aData['phone'], 0, 3);
         $sNum = substr($aData['phone'], 3);
         $sOper = $this->DB->val('SELECT COALESCE(operator_id, 0) FROM mobile_operator_codes 
             WHERE code = ? AND ? >= start_num AND ? <= end_num', $sCode, $sNum, $sNum);
         $aData['operator_id'] = $sOper;
         $this->DB->insert('qiwi_phone', $aData);
         $memBuff = new memBuff();
         $nStamp = time();
         $sKey = 'qiwiPhone' . $account->id . '_' . $aData['phone'];
         if (!($aData = $memBuff->get($sKey))) {
             $aData = array('time' => $nStamp, 'cnt' => 0);
         }
         $aData['time'] = $aData['time'] + 3600 > $nStamp ? $aData['time'] : $nStamp;
         $aData['cnt'] = $aData['time'] + 3600 > $nStamp ? $aData['cnt'] + 1 : 1;
         $memBuff->set($sKey, $aData, 3600);
         //-----------------------------------
     }
     $this->DB->commit();
     $this->saveBillForm();
     return 0;
 }
コード例 #13
0
 /**
  * Возвращает количество новых событий в проектах фрилансера.
  *
  * @param integer $user_id id фрилансера
  * @param boolean $waster  учитывать проекты в корзине?
  *
  * @return integer
  */
 public function GetNewFrlEventsCount($user_id, $waste = true)
 {
     global $DB;
     $mem = new memBuff();
     $key = 'prjEventsCnt' . ($waste ? 'Wst' : '') . $user_id;
     $count = $mem->get($key);
     if ($count === FALSE || is_array($count)) {
         $ex_where = $waste ? '' : ' AND po.is_waste = false ';
         $sql = "\n                SELECT count(po.*) \n                FROM projects_offers AS po\n                LEFT JOIN projects p \n                    ON p.id = po.project_id\n                WHERE \n                    p.state = 0\n                    AND po.po_frl_read = false \n                    {$ex_where}\n                    AND po.user_id = ?i \n               LIMIT 1";
         $count = (int) $DB->val($sql, $user_id);
         $mem->set($key, $count, 1800);
     }
     return $count;
 }
コード例 #14
0
ファイル: LocalDateTime.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Берем данные за определенный год.
  * 
  * @global type $DB
  *
  * @param mixed $year  Год, если нет текущий
  * @param bool  $set   Записать данные сразу в переменные класса или нет
  * @param bool  $cache Использовать кеш или нет
  *
  * @return type
  */
 public function getExcDaysInit($year = false, $set = false, $cache = true)
 {
     global $DB;
     if ($year == false) {
         $year = $this->format('Y');
     }
     $mem = new memBuff();
     $exc_days = $cache ? $mem->get("exc_days_{$year}") : false;
     if ($exc_days === false) {
         $sql = 'SELECT * FROM exception_date WHERE year = ?';
         $exc_days = $DB->row($sql, $year);
         $mem->set("exc_days_{$year}", $exc_days, 1800);
     }
     if (!$exc_days) {
         return array();
     }
     $workdays = $this->initCollectionDate($exc_days['workdays']);
     $holidays = $this->initCollectionDate($exc_days['holidays']);
     if ($set) {
         $this->setWorkdays($workdays, true);
         $this->setHolidays($holidays, true);
         return;
     }
     return $exc_days;
 }
コード例 #15
0
ファイル: platipotom.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Возвращает максимальную сумму покупки, проверив, покупал ли юзер 
  * что-нибудь через Плати потом ранее.
  *
  * @param type $bill_id ИД счета
  *
  * @return int
  */
 public function getMaxPrice($bill_id = 0)
 {
     $maxPrice = self::PRICE_MAX;
     if ($this->is_pro) {
         $maxPrice = self::PRICE_MAX_PRO;
     } else {
         $uid = get_uid(false);
         if ($uid > 0) {
             $memBuff = new memBuff();
             if ($maxPriceSaved = $memBuff->get('platipotom_max_price_' . $uid)) {
                 return $maxPriceSaved;
             } else {
                 if (!$bill_id) {
                     $account = new account();
                     $account->GetInfo($uid, true);
                     $bill_id = $account->id;
                 }
                 $sql = 'SELECT id FROM account_operations WHERE op_code = 12 AND payment_sys = ?i AND billing_id = ?i';
                 $operation_id = $this->db()->val($sql, self::PAYMENT_CODE, $bill_id);
                 if ($operation_id) {
                     $maxPrice = self::PRICE_MAX_MORE;
                 }
                 $memBuff->set('platipotom_max_price_' . $uid, $maxPrice);
             }
         }
     }
     return $maxPrice;
 }
コード例 #16
0
ファイル: index.php プロジェクト: kapai69/fl-ru-damp
        $mem->delete(CROSSDOMAINAUTH_KEY_NAME . $_GET['cdakey']);
    } else {
        mt_srand();
        $key = md5(uniqid($_SERVER['HTTP_HOST'], true));
        $back = HTTP_PREFIX . $_GET['subdomain'] . '.' . preg_replace('~^' . HTTP_PREFIX . '(?:www\\.)?~', '', $GLOBALS['host']) . '/';
        if (!empty($_GET['direction'])) {
            $back .= 'catalog/' . $_GET['direction'] . '/';
        }
        if (!empty($_GET['cat'])) {
            $back .= $_GET['cat'] . '/';
        }
        if (!empty($_GET['dir'])) {
            $back .= $_GET['dir'] . '.html';
        }
        $data = array('back' => $back, 'time' => mktime());
        $mem->set(CROSSDOMAINAUTH_KEY_NAME . $key, $data, 120);
        $redirectUri = "{$GLOBALS['host']}/crossauth.php?cdakey={$key}";
        //header("Location: {$GLOBALS['host']}/crossauth.php?cdakey={$key}");
        //exit;
    }
}
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/seo.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/city.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/country.php';
$g_page_id = '0|1';
session_start();
//$_SESSION['subdomain'] =
$content_type = '';
$uid = get_uid();
$subdomain = $_GET['subdomain'];
//@todo автоматом в эту переменную надо передавать субдомен
コード例 #17
0
 /**
  * Получение списка пользователей.
  *
  * @todo кеш и js
  * 
  * @param string $s        - поисковая строка
  * @param string $limit    - сколько записей запрашивать
  * @param int    $userType - фильтр результатов поиска:  0 - искать и фриленсеров и работодателей,   
  *                         1 - искать только фриленсеров,
  *                         2 - искать только работодателей,
  * @param int    $scope    - определяет, где искать:  0 - в СБР/контактах и общем списке пользователей,
  *                         1 - в СБР/контактах,
  *                         2 - в общем списке пользователей
  *
  * @return string - список пользователей в формате JSON
  */
 public function getUsersList($s, $limit = 'ALL', $userType = 0, $scope = 0)
 {
     session_start();
     $uid = get_uid(false);
     $result = array();
     $contacts = array();
     $more = array();
     // подготовка строки для поиска в shpinx
     if ($s != '') {
         $s = iconv('UTF-8', 'WINDOWS-1251//IGNORE', $s);
         $s = substr(trim($s), 0, 60);
         $r = preg_split("/\\s+/", $s);
         $s = '';
         // если введено два слова, то пологаем что это имя и фамилия и обрабатываем вариант такого поиска особо
         // если одно из слов состоит только из /^[-_a-z0-9]+$/i также полагаем что это может быть часть логина
         if (count($r) == 2) {
             $s = "(@uname {$r[0]} & (@usurname *{$r[1]}* | @usurname {$r[1]})) | (@usurname {$r[0]} & (@uname *{$r[1]}* | @uname {$r[1]}))";
             if (preg_match('/^[-_a-z0-9]+$/i', $r[0])) {
                 $s .= " | (@login *{$r[0]}* & (@uname *{$r[1]}* | @usurname *{$r[1]}*)) | @login *{$r[0]}*";
             }
             if (preg_match('/^[-_a-z0-9]+$/i', $r[1])) {
                 $s .= " | (@login *{$r[1]}* & (@uname {$r[0]} | @usurname {$r[0]})) | @login *{$r[1]}*";
             }
             // во всех остальных случаях полагаем что все слова кроме последнего введены полностью и просто ищем совпадения
         } else {
             for ($i = 0; $i < count($r) - 1; ++$i) {
                 $s .= "{$r[$i]} | ";
             }
             $s .= "*{$r[$i]}* | {$r[$i]}";
         }
     }
     // если нужны контакты в сбр и личке, то получаем их id
     if ($scope == 0 || $scope == 1) {
         // контакты в сбр
         $memBuff = new memBuff();
         $contacts = $memBuff->get("bComboUsers{$uid}");
         if ($contacts === false) {
             if (is_emp()) {
                 $sbr = new sbr_emp($uid);
             } else {
                 $sbr = new sbr_frl($uid);
             }
             $contacts = $sbr->getPartersId();
             // контакты в личке
             $mess = new messages();
             $rows = $mess->GetContacts($uid);
             for ($i = 0; $i < count($rows); ++$i) {
                 if (!in_array($rows[$i]['uid'], $contacts)) {
                     $contacts[] = $rows[$i]['uid'];
                 }
             }
             $memBuff->set("bComboUsers{$uid}", $contacts, 600);
         }
     }
     // $i = 0-контакты, 1-остальные пользователи
     for ($i = 0; $i <= 1; ++$i) {
         if (!$i && !$contacts) {
             continue;
         }
         $rows = array();
         // если поиск не требуется
         if ($s == '') {
             if (!$i) {
                 if ($userType) {
                     $table = $userType == 2 ? 'employer' : 'freelancer';
                 } else {
                     $table = 'users';
                 }
                 $rows = users::GetUsersInfoByIds($limit == 'ALL' ? $contacts : array_slice($contacts, 0, $limit), $table);
             }
             // если требуется
         } else {
             $filter = array();
             if ($contacts) {
                 if (!$i) {
                     $filter['uids'] = $contacts;
                 } else {
                     $filter['nouids'] = $contacts;
                 }
             }
             if ($userType) {
                 $filter['utype'] = $userType - 1;
             }
             $search = new search(get_uid(false));
             $search->addElement('users_simple', true);
             $search->search($s, 0, $filter, $limit == 'ALL' ? 1000 : $limit);
             $res = $search->getElements();
             $rows = $res['users_simple']->getRecords();
             $more[$i] = $res['users_simple']->total - count($rows);
         }
         // готовим вывод
         foreach ($rows as $k => $v) {
             if ($v['uid'] == null) {
                 $v['uid'] = $v['id'];
             }
             $v['uname'] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $v['uname']);
             $v['usurname'] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $v['usurname']);
             if ($v['photo']) {
                 $v['path'] = 'users/' . substr($v['login'], 0, 2) . '/' . $v['login'] . '/foto';
                 $v['photo'] = get_unanimated_gif($v['login'], $v['photo']);
             } else {
                 $v['photo'] = '/images/temp/small-pic.gif';
             }
             $v['isContacts'] = (int) (!(bool) $i);
             $result[] = $v;
         }
     }
     //return $result;
     // выводим
     $data = array('list' => $result, 'counters' => array('moreContacts' => $more[0], 'moreUsers' => $more[1]), 'dav' => WDCPREFIX);
     return json_encode($data);
 }
コード例 #18
0
ファイル: projects.php プロジェクト: amage/fl-ru-damp
 /**
  *  Сохраняем объект в кэше.
  */
 function fix()
 {
     if ($this->_memkey) {
         $data = array();
         $memBuff = new memBuff();
         foreach ($this as $member => $value) {
             $data[$member] = $value;
         }
         $memBuff->set($this->_memkey, $data, self::MEM_LIFE_TIME, self::getMemGrKey($_SESSION['login']));
     }
 }
コード例 #19
0
ファイル: account.php プロジェクト: Nikitian/fl-ru-damp
 /**
  * Занести деньги на счет юзера (предполагается, что оплата прошла успешно)
  *
  * @param integer $op_id			возвращает идентификатор платежной операции
  * @param integer $dep_id			номер счета
  * @param float   $ammount			сумма перевода (numeric(8,2)) в FM
  * @param string  $descr			описание перевода
  * @param integer $payment_sys		тип системы через которую осуществлен перевод
  * @param float   $trs_sum			кол-во денег в единицах исходной системы
  * @param integer $op_code			номер операции (по дефолту - 12 занесение денег на счет)
  * @param integer $op_add			Доп. инфа по операции (например id Сделки без Риска)
  * @return string					возвращает сообщение об ошибке
  */
 function deposit(&$op_id, $dep_id, $ammount, $descr, $payment_sys = 0, $trs_sum = 0, $op_code = 12, $op_add = 0, $date = 'now()')
 {
     global $DB;
     //setlocale(LC_ALL, "en_US");
     //$ammount = (float)$ammount; // фикс (540.3/30) -- вместо 18.01 округление дает 18.00.
     //$ammount = round($ammount * 100) / 100;
     $row = $DB->row("\n            SELECT u.uid, u.role, u.login \n            FROM account AS a \n            INNER JOIN users AS u ON (a.uid=u.uid) \n            WHERE a.id = ?", $dep_id);
     if ($DB->error) {
         return $DB->error;
     }
     if (!$row) {
         return 'Аккаунт не существует';
     }
     $this->uid = $row['uid'];
     $login = $row['login'];
     $this->GetInfo($this->uid);
     $memBuff = new memBuff();
     $memBuff->set("ac_sum_old_" . $this->uid, $this->sum);
     $op_id = $DB->insert('account_operations', array('billing_id' => $dep_id, 'op_code' => $op_code, 'ammount' => $ammount, 'descr' => $descr, 'payment_sys' => $payment_sys, 'trs_sum' => $trs_sum, 'op_date' => $date), 'id');
     if (!$op_id) {
         return "Ошибка сервера";
     }
     // количество операций
     $_SESSION['account_operations'] = intval($_SESSION['account_operations']) + 1;
     // Обновляем сессию пользователю сразу
     // при поступлении денежных средств
     $session = new session();
     $session->UpdateAccountSum($login);
     //if (!$result) {
     //session_start();
     //$this->GetInfo($gid);
     //$_SESSION['ac_sum'] = $this->sum;
     // Обновляем сессию пользователю сразу
     // при поступлении денежных средств
     //$session = new session();
     //$session->UpdateAccountSum($login);
     //}
     //if (!$result) {
     //$this->buyOrdersList($gid, $op_code, $login);
     // Обновляем сессию пользователю сразу при поступлении денежных средств
     //$session = new session();
     //$session->UpdateAccountSum($login);
     //@todo: по идее более не используется
     /*
     			require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/sbr.php');
     			switch ($op_code) {
     				case sbr::OP_RESERVE: // новая СБР.
     					$sbr = new sbr_emp($gid);
                         $sbr->setGetterSchemes(1);// Новая СБР
     					$sbr->initFromId($op_add, false, false);
     					if (!$sbr->error) {
     						$sbr->reserve($op_id);
     						$sbr_stage = $sbr->getStages();
                             foreach($sbr_stage as $stage) {
                                 $sbr->setUserReqvHistory($gid, intval($stage->data['id']), 0); // Сохраняем для всех этапов, Резервирование работодателя
                             }
     					}
     					break;
     				default:  //Зачисление денег на счет
     			}*/
     //}
     return false;
 }
コード例 #20
0
ファイル: sms_services.php プロジェクト: Nikitian/fl-ru-damp
 /**
  * Берем курсы валют на определенный день
  *
  * @param string $date Дата (в формате 01/01/2009), по умолчанию текущий день
  * @return array|boolean Курсы валют где ключ это название валюты а значение это массив [units=>Единиц, kurs=> Курс по отношению к рублю], либо false если не удалось взять курсы валют
  */
 function getCurrencyForDate($date = false)
 {
     if (!$date) {
         $date = date("d/m/Y");
     }
     $mb = new memBuff();
     if ($tmp = $mb->get('currency_for_date')) {
         if ($tmp['date'] == $date && $tmp['data']) {
             return $tmp['data'];
         }
     }
     libxml_disable_entity_loader();
     $file = file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req={$date}&d=1");
     // Валюты которые меняются раз в месяц
     $file2 = file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req={$date}&d=0");
     // Валюты которые меняются раз в день
     $p = simplexml_load_string($file);
     $p2 = simplexml_load_string($file2);
     $v = "Valute";
     foreach ($p->{$v} as $key => $value) {
         $cur[(string) $value->CharCode] = array("units" => intval($value->Nominal), "kurs" => round(str_replace(",", ".", $value->Value), 4));
     }
     foreach ($p2->{$v} as $key => $value) {
         $cur[(string) $value->CharCode] = array("units" => intval($value->Nominal), "kurs" => round(str_replace(",", ".", $value->Value), 4));
     }
     if (!isset($cur)) {
         return false;
     }
     $cur['RUB'] = array("units" => 1, "kurs" => 1);
     // Заглушка для рубля
     $mb->set('currency_for_date', array('date' => $date, 'data' => $cur));
     return $cur;
 }
コード例 #21
0
ファイル: ykassa_aviso.php プロジェクト: kapai69/fl-ru-damp
        ob_start();
        $res = curl_exec($ch);
        $complete = ob_get_clean();
        echo '<p>Результат <strong>paymentAviso</strong>:</p>';
        echo '<pre>';
        print_r(htmlspecialchars($complete));
        echo '</pre>';
    }
    echo '<p><a href="/bill/success/">Вернуться в магазин</a></p>';
    exit;
} else {
    //Данные платежной формы
    $paypost = $_POST;
    //Сохраняем в сессию, т.к. яндекс
    //это помнит при двух последующих запросах
    $memBuff->set($key, $paypost);
}
$payway = array(yandex_kassa::PAYMENT_YD => 'Яндекс.Деньги', yandex_kassa::PAYMENT_AC => 'Карта', yandex_kassa::PAYMENT_WM => 'Webmoney', yandex_kassa::PAYMENT_AB => 'Альфа-Клик', yandex_kassa::PAYMENT_SB => 'Сбербанк Онлайн');
?>

<h2>Тестовая оплата Яндекс.Касса</h2>
<p>
    Оплата услуг аккаунт <strong>#<?php 
echo intval($paypost['customerNumber']);
?>
</strong><br />
    Cумма оплаты <strong><?php 
echo to_money($paypost['Sum'], 2);
?>
 рублей</strong><br />
    Cпособ оплаты <strong><?php 
コード例 #22
0
ファイル: messages.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Проверка возможности отправить сообщение ползователю.
  * 
  * @global type $DB
  * @staticvar null $exists_allowed
  *
  * @param type $to_id
  * @param type $from_id
  *
  * @return bool
  */
 public static function isAllowed($to_id, $from_id = null)
 {
     $is_auth = isset($_SESSION['uid']) && $_SESSION['uid'] > 0;
     if (!$from_id && !$is_auth) {
         return false;
     }
     if (!$from_id) {
         $from_id = $_SESSION['uid'];
     }
     if ($is_auth && (currentUserHasPermissions('users') || is_emp())) {
         return true;
     }
     $is_allowed = self::_isAllowed($to_id, $from_id);
     if (!$is_allowed) {
         //Была ли уже проверка доступности
         //тогда пользователю запрещено писать
         $key_check_is_allowed = sprintf(self::KEY_CHECK_IS_ALLOWED, $from_id, $to_id);
         $mem = new memBuff();
         if ($mem->get($key_check_is_allowed)) {
             return false;
         }
         //Иначе делаем проверку
         //Которые уже хотя бы раз общались с заказчиком через личку,
         //например если заказчик инициировал общение или они ранее общались
         $proxy_db = new DB();
         $is_allowed = $proxy_db->val('SELECT messages_dialog_count(?i, ?i)', $to_id, $from_id) > 0;
         //Которых заказчик выбрал исполнителем в любом своем проекте
         if (!$is_allowed) {
             require_once ABS_PATH . '/classes/projects.php';
             $is_allowed = (bool) projects::isExec($from_id, $to_id);
         }
         //В список условий я бы еще добавил проведение заказа на сайте - если есть завершенный заказ
         //(с резервом или без, по ТУ, проекту или прямой) с данным заказчиком, то тоже разрешать
         //исполнителю писать ему в личку, так как в заказе светится логин заказчика и они уже сотрудничали.
         if (!$is_allowed) {
             require_once ABS_PATH . '/tu/models/TServiceOrderModel.php';
             $is_allowed = (bool) TServiceOrderModel::hasSuccessfulOrder($from_id, $to_id);
         }
         //Если фрилансер был выбран на любое призовое место в конкурсе то
         //он может писать сообщения заказчику.
         if (!$is_allowed) {
             require_once ABS_PATH . '/classes/contest.php';
             $is_allowed = (bool) contest::isPrizePlace($from_id, $to_id);
         }
         if ($is_allowed) {
             self::setIsAllowed($to_id, $from_id, true);
         }
         $mem->set($key_check_is_allowed, 1, 0, self::KEY_CHECK_TAG_IS_ALLOWED);
     }
     return $is_allowed;
 }
コード例 #23
0
ファイル: sbr.server.php プロジェクト: kapai69/fl-ru-damp
function resendCode($sbr_id, $stage_id)
{
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pskb.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/memBuff.php';
    $sbr_id = __paramValue('int', $sbr_id);
    $stage_id = __paramValue('int', $stage_id);
    $objResponse = new xajaxResponse();
    $objResponse->script("\$('alert_sms').removeClass('b-layout__txt_color_56bd06').removeClass('b-layout__txt_color_c7271e'); ");
    if (!$sbr_id) {
        $objResponse->script("\$('alert_sms').addClass('b-layout__txt_color_c7271e'); \n                              \$('alert_sms').set('html', 'Запрос не может быть обработан.');");
        //$objResponse->alert('Запрос не может быть обработан.');
        return $objResponse;
    }
    $m = new memBuff();
    $lasttime = $m->get(pskb::SMS_RESEND_KEY . $sbr_id);
    if ($lasttime) {
        $mins = ceil(($lasttime + 300 - time()) / 60);
        $objResponse->script("\$('alert_sms').addClass('b-layout__txt_color_c7271e'); \n                              \$('alert_sms').set('html', 'Еще раз выслать код можно будет через {$mins} минут" . ending($mins, 'у', 'ы', '') . ".');");
        //$objResponse->alert("Повторный запрос можно будет сделать примерно через {$mins} минут" . ending($mins, 'у', 'ы', '') );
        return $objResponse;
    }
    $uid = get_uid(0);
    if (!$uid) {
        $objResponse->redirect('/');
        return $objResponse;
    }
    $sbr = sbr_meta::getInstance();
    if (!$sbr->initFromId($sbr_id)) {
        $objResponse->script("\$('alert_sms').addClass('b-layout__txt_color_c7271e'); \n                              \$('alert_sms').set('html', 'Запрос не может быть обработан.');");
        return $objResponse;
    }
    $stage = $sbr->initFromStage($stage_id, false);
    if (!$stage) {
        $objResponse->script("\$('alert_sms').addClass('b-layout__txt_color_c7271e'); \n                              \$('alert_sms').set('html', 'Запрос не может быть обработан.');");
        return $objResponse;
    }
    if ($uid != $sbr->data['frl_id']) {
        $objResponse->script("\$('alert_sms').addClass('b-layout__txt_color_c7271e'); \n                              \$('alert_sms').set('html', 'Запрос не может быть обработан.');");
        //$objResponse->alert('Запрос не может быть обработан.');
        return $objResponse;
    }
    $pskb = new pskb($sbr);
    if (!$pskb->resendCode($stage)) {
        $objResponse->script("\$('alert_sms').addClass('b-layout__txt_color_c7271e'); \n                              \$('alert_sms').set('html', 'Не удалось выслать код.');");
        //$objResponse->alert('Ошибка запроса. Попробуйте еще раз.');
        return $objResponse;
    }
    $m->set(pskb::SMS_RESEND_KEY . $sbr_id, time(), 300);
    $objResponse->script("\$('alert_sms').addClass('b-layout__txt_color_56bd06'); \n                          \$('alert_sms').set('html', 'Код отправлен повторно.');\n                          \$('send_sms').destroy();\n                          \$('resend_sms').set('html', 'Еще раз выслать код можно будет через 5 минут.')");
    //$objResponse->alert('Код отправлен повторно.');
    if (defined('PSKB_TEST_MODE')) {
        $objResponse->script('document.location.reload();');
    }
    return $objResponse;
}
コード例 #24
0
ファイル: dizkon.php プロジェクト: kapai69/fl-ru-damp
if ($email) {
    $user = new users();
    $user = $user->getUserBySocialEmail($email);
    if (empty($user['login'])) {
        $action = '';
    } else {
        $login = $user['login'];
    }
}
if ($login) {
    $user = new users();
    if ($action == 'info') {
        $user->GetUserByLoginPasswd($login, $user->hashPasswd($pass));
    } else {
        $user->GetUser($login);
    }
    if (empty($user->login)) {
        $action = '';
    }
}
switch ($action) {
    case 'role':
        $result = array('result' => 'ok', 'role' => is_emp($user->role) ? 1 : 2);
        break;
    case 'info':
        $sbr = sbr_meta::getUserReqvs($user->uid);
        $result = array('result' => 'ok', 'user' => array('login' => $user->login, 'email' => $user->email, 'phone' => $sbr[$sbr['form_type']]['mob_phone'] != '' ? $sbr[$sbr['form_type']]['mob_phone'] : '', 'firstname' => $user->uname ? iconv('CP1251', 'UTF-8', $user->uname) : '', 'lastname' => $user->usurname ? iconv('CP1251', 'UTF-8', $user->usurname) : '', 'role' => is_emp($user->role) ? 1 : 2, 'avatar' => $user->photo != '' ? WDCPREFIX . '/users/' . $user->login . '/foto/' . $user->photo : ''));
        break;
}
$mem->set($key, $result, 600);
echo json_encode($result);
コード例 #25
0
ファイル: qiwipay.php プロジェクト: Nikitian/fl-ru-damp
 /**
  * Создает новый счет, отправляет на регистрацию в платежную систему.
  *
  * @param integer $uid    ид. пользователя.
  * @param array $request    параметры ($_POST).
  * @return array $error   массив ошибок.
  */
 function createBill($request)
 {
     if (!$this->uid) {
         return 'Пользователь не определен';
     }
     $account = new account();
     $account->GetInfo($this->uid, true);
     if ($error = $this->validate($request, $account->id)) {
         return $error;
     }
     $this->DB->start();
     $aData = array('account_id' => $account->id, 'phone' => $this->form['phone'], 'sum' => $this->form['sum']);
     $id = $this->DB->insert("qiwi_account", $aData, "id");
     $oper_xml = '';
     switch ($request['oper_code']) {
         case 'megafon':
             $oper_xml = '<extra name="megafon2-acc">1</extra>';
             break;
         case 'mts':
             $oper_xml = '<extra name="mts-acc">1</extra>';
             break;
         case 'beeline':
             $oper_xml = '<extra name="beeline-acc">1</extra>';
             break;
     }
     if ($id) {
         $xml = '<?xml version="1.0" encoding="' . $this->encode . '"?>' . '<request>' . '<protocol-version>4.00</protocol-version>' . '<request-type>30</request-type>' . '<extra name="password">' . $this->passwd . '</extra>' . '<terminal-id>' . $this->login . '</terminal-id>' . '<extra name="txn-id">' . $id . '</extra>' . '<extra name="to-account">' . $this->form['phone'] . '</extra>' . '<extra name="amount">' . $this->form['sum'] . '</extra>' . '<extra name="comment">' . $this->form['comment'] . '</extra>' . '<extra name="create-agt">' . $this->create_agt . '</extra>' . '<extra name="ltime">' . $this->ltime . '</extra>' . '<extra name="ALARM_SMS">' . $this->alarm_sms . '</extra>' . '<extra name="ACCEPT_CALL">' . $this->accept_call . '</extra>' . $oper_xml . '</request>';
         if ($this->passwd == 'debug') {
             $result = '<response><result-code fatal="false">0</result-code></response>';
         } else {
             $result = $this->_request($xml);
         }
         if ($err = $this->_checkResultError($result)) {
             $error['qiwi'] = $err;
             $this->DB->rollback();
             die;
             return $error;
         }
         // различные ограничения по телефонному номеру
         unset($aData['sum']);
         $sCode = substr($aData['phone'], 0, 3);
         $sNum = substr($aData['phone'], 3);
         $sOper = $this->DB->val('SELECT COALESCE(operator_id, 0) FROM mobile_operator_codes 
             WHERE code = ? AND ? >= start_num AND ? <= end_num', $sCode, $sNum, $sNum);
         $aData['operator_id'] = $sOper;
         $this->DB->insert('qiwi_phone', $aData);
         $memBuff = new memBuff();
         $nStamp = time();
         $sKey = 'qiwiPhone' . $account->id . '_' . $aData['phone'];
         if (!($aData = $memBuff->get($sKey))) {
             $aData = array('time' => $nStamp, 'cnt' => 0);
         }
         $aData['time'] = $aData['time'] + 3600 > $nStamp ? $aData['time'] : $nStamp;
         $aData['cnt'] = $aData['time'] + 3600 > $nStamp ? $aData['cnt'] + 1 : 1;
         $memBuff->set($sKey, $aData, 3600);
         //-----------------------------------
     }
     $this->DB->commit();
     $this->saveBillForm();
     return 0;
 }
コード例 #26
0
ファイル: ifreepay.php プロジェクト: Nikitian/fl-ru-damp
 /**
  * Оплата выбранного сервиса и ответ пользователю об успехе или ошибке.
  */
 public function processRequest()
 {
     if (!$this->_isValidated) {
         $this->validate();
     }
     // Блокируем входящие запросы с данным ид., пока текущая операция не выполнится (см. self::_response())
     $mcache = new memBuff();
     $mkey = 'ifreepay.evtId' . $this->_request['evtId'];
     if ($mcache->get($mkey)) {
         $this->_errorif(TRUE, 'Предыдущий запрос в процессе обработки.');
     }
     $mcache->set($mkey, 1, 60);
     $this->_oplock = $mkey;
     $op_id = 0;
     $dup = 0;
     $profit = floatval($this->_request['profit']);
     $currency_str = trim(strtoupper($this->_request['profitCurrency']));
     // Внимание! Прежде чем менять текст описания операции, загляните в account::getSmsInfo() и sms_service::checkEvtId().
     $descr = "SMS #{$this->_request['evtId']} с номера {$this->_request['phone']} ({$this->_request['country']})" . " на номер {$this->_request['serviceNumber']}, ID абонента {$this->_request['abonentId']}," . " оператор {$this->_request['operator']}, текст: {$this->_smsDecoded}, обработан {$this->_request['now']}," . " профит {$profit} {$currency_str}," . " номер попытки: " . intval($this->_request['retry']);
     // Для обработки повторных запросов (в случае сбоев на одной из сторон).
     if (intval($this->_request['retry']) > 0) {
         $dup = sms_services::checkEvtId($this->_request['evtId'], $op_id);
     }
     switch ($this->_type) {
         case 1:
             if (!$dup && $operator != 'i-Free') {
                 $this->GetInfo($this->_user->uid);
                 $this->_errorif(!$this->id, 'Счет пользователя не открыт.');
                 $error = $this->deposit($op_id, $this->id, $this->_tariff['fm_sum'], $descr, self::PAYMENT_SYS, $this->_tariff['usd_sum'], $this->_opcode);
                 $this->_errorif(!!$error, $error);
             }
             $res_text = "Ваш счет пополнен на {$this->_tariff['fm_sum']} FM";
         case 2:
             $new_password = users::ResetPasswordSMS($this->_user->uid, $this->_request['phone']);
             $this->_errorif(!$new_password, "Неверный логин или телефон не привязан к аккаунту.");
             if (!$dup) {
                 $this->_errorif(!($tr_id = $this->start_transaction($this->_user->uid)), "Ошибка при проведении операции по счету.");
                 $this->_errorif($this->BuyFromSMS($op_id, $tr_id, $this->_opcode, $this->_user->uid, $descr, '', $this->_tariff['usd_sum'], 1, self::PAYMENT_SYS), "Ошибка при проведении денежной операции.");
             }
             $res_text = "Ваш новый пароль: {$new_password}";
         case 3:
             if (!$dup) {
                 $answers = new projects_offers_answers();
                 $this->_errorif(!$answers->AddPayAnswers($this->_user->uid, 1), "Ошибка добавления ответа.");
                 $this->_errorif(!($tr_id = $this->start_transaction($this->_user->uid)), "Ошибка при проведении операции по счету.");
                 $this->_errorif($this->BuyFromSMS($op_id, $tr_id, $this->_opcode, $this->_user->uid, $descr, '', $this->_tariff['usd_sum'], 1, self::PAYMENT_SYS), "Ошибка при проведении денежной операции.");
             }
             $res_text = 'Спасибо за покупку. Теперь вы можете ответить на проект.';
         default:
             $this->_errorif(true, "Тип услуги не найден.");
     }
     if (!$dup || $dup == sms_services::DUP_OP_NOTSAVED) {
         $sms_opid = sms_services::saveEvtId($op_id, $profit, $currency_str, $this->_request['evtId']);
     }
     $this->_response($res_text);
 }
コード例 #27
0
ファイル: hand-masssend.php プロジェクト: Nikitian/fl-ru-damp
            die("Unknown mode\n");
    }
} else {
    $count = 0;
    $res = $master->query($sql);
    while ($user = pg_fetch_assoc($res)) {
        $msg = preg_replace("/\\{\\{([-_A-Za-z0-9]+)\\}\\}/e", "\$user['\\1']", $pMessage);
        $plproxy->query("SELECT messages_add(?, ?, ?, ?, ?a)", $sender['uid'], $user['uid'], $msg, TRUE, $pFiles);
        if ($count > 0 && $count % $printStatus == 0) {
            echo "Working... {$count} emails sended\n";
        }
        $count++;
    }
}
$memBuff = new memBuff();
$memBuff->set("msgsCnt_updated", time());
if (is_null($count)) {
    die("Settings error\n");
} else {
    if ($count) {
        echo "OK. Total: {$count} users\n";
    } else {
        echo "OK.\n";
    }
}
if ($mass) {
    while (!$plproxy->val("SELECT COUNT(*) FROM messages(?) WHERE id = ?", $sender['uid'], $message_id)) {
        echo "Wait PGQ (10 seconds)...\n";
        sleep(10);
    }
    $res = $plproxy->query("SELECT * FROM messages_zeros_userdata(?, ?)", $sender['uid'], $message_id);
コード例 #28
0
ファイル: stop_words.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Сохраняет список подозрительных слов и регулярные выражения для модерирования пользовательского контента.
  * 
  * @param int  $nType   тип: 1 - слова, 2 - регулярные выражения
  * @param bool $bMemBuf установить в true если данные брать из мемкеша
  *
  * @return array
  */
 private function _getAdminStopWords($nType = 0, $bMemBuf = true)
 {
     $aWords = array();
     $sMemKey = self::_getAdminStopWordsMemKey($nType);
     $oMemBuf = new memBuff();
     if ($bMemBuf) {
         $aWords = $oMemBuf->get($sMemKey);
     }
     if (!$bMemBuf || $aWords === false) {
         $aWords = $GLOBALS['DB']->col('SELECT word FROM ' . self::$stop_words_table . ' WHERE type = ?i ORDER BY id', $nType);
         $oMemBuf->set($sMemKey, $aWords, 3600);
     }
     return $aWords;
 }
コード例 #29
0
ファイル: freelancer_seo.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Собирает FROM часть SQL запроса по условие выборки в $this->aGet.
  */
 public function fseoSetFrom()
 {
     global $DB;
     $sRndSelect = '';
     $sRndRestrict = '';
     // если выборка должна быть случайной, то нужно случайное число
     if (!empty($this->aGet['random'])) {
         $memBuff = new memBuff();
         if (!($nRnd = $memBuff->get('fseo_' . $this->sLinkId . '_rnd'))) {
             $nRnd = mt_rand(1, 1000);
             $memBuff->set('fseo_' . $this->sLinkId . '_rnd', $nRnd, self::CATALOG_MEM_LIFE);
         }
         $sRndSelect = ", fu.uid % {$nRnd} AS rnd_num";
         $sRndRestrict = 'ORDER BY rnd_num LIMIT ' . self::RANDOM_LIMIT;
     }
     if (!empty($this->aGet['main_prof']) || !empty($this->aGet['additional_prof'])) {
         // когда есть основная или дополнительная профа
         $aSQL = array();
         if (!empty($this->aGet['main_prof'])) {
             // когда есть основная профа
             $aSQL['main_choise'] = 'SELECT *' . $sRndSelect . ' FROM fu WHERE spec_orig = ' . $this->sSQLProfId;
         } elseif (!empty($this->aGet['additional_prof'])) {
             // когда есть дополнительная профа
             $aSQL['add_choise'] = 'SELECT fu.*' . $sRndSelect . ' FROM fu 
                 INNER JOIN spec_add_choise sp ON sp.user_id = fu.uid 
                 AND sp.prof_id = ' . $this->sSQLProfId . ' WHERE fu.is_pro = true';
             $aSQL['paid_choise'] = 'SELECT fu.*' . $sRndSelect . ' FROM fu 
                 INNER JOIN spec_paid_choise pc ON pc.user_id = fu.uid 
                 AND pc.prof_id  = ' . $this->sSQLProfId . ' AND pc.paid_to > NOW()';
         }
         $sBegin = $sRndRestrict ? '((' : '(';
         $sEnd = $sRndRestrict ? ") {$sRndRestrict} ) AS s " : ' ) AS s ';
         $this->aSQL['from'] = $sBegin . implode(' UNION ALL ', $aSQL) . $sEnd;
     } else {
         // когда нет вообще никаких проф
         $this->aSQL['from'] = $sRndSelect ? '(SELECT *' . $sRndSelect . ' FROM fu ' . $sRndRestrict . ') s' : 'fu s';
     }
 }
コード例 #30
0
ファイル: yd_payments.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Осуществляет операцию Запрос баланса Агента.
  *
  * @param bool $nocache запрещает брать данные из кэша.
  *
  * @return string ответ сервера
  */
 public function balance($nocache = false)
 {
     $memBuff = new memBuff();
     $balance = $nocache ? false : $memBuff->get(self::BALANCE_MEM_KEY);
     if ($balance === false) {
         if ($answer = $this->_send(array('ACT_CD' => self::ACT_BALANCE))) {
             $balance = $answer['balance'];
             $memBuff->set(self::BALANCE_MEM_KEY, $balance, 180);
         }
     }
     return $balance;
 }