/** * Изменение позиции пользователя. * * @param integer $user uid пользователя * @param integer $transaction_id id транзакции * @param array $bids массив, в котором индекс элементов - id места размещения, значения - сумма для поднятия позиции * * @return integer id операции транзакции */ public function BidPlaces($user, $transaction_id, $bids, &$error) { $bill_id = 0; if ($bids) { foreach ($bids as $prof => $sum) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/account.php'; $account = new account(); $error = $account->Buy($bill_id, $transaction_id, 21, $user, $prof, '', $sum, 0); if ($error !== 0) { return 0; } global $DB; $sql = 'UPDATE users_first_page SET psum=psum+? WHERE id IN (SELECT id FROM users_first_page WHERE user_id = ? AND from_date+to_date >= now() AND payed=true AND ordered = true AND profession=? )'; $DB->query($sql, $sum, $user, $prof); $id = 1; } } if ($bill_id) { //$account->commit_transaction($transaction_id, $user, $bill_id); $memBuff = new memBuff(); $memBuff->flushGroup('firstpg'); } return $id; }
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; }
/** * Обрезает анимированный .gif, оставляя только первый кадр. * Обрезанный гиф сохраняет в той же директории, где и оригинал, под тем же именем, только с префиксом 'na_'. * Если файл с таким именем (с префиксом) уже есть, то ничего не делает. * Возвращает в случае успеха имя обрезанного гифа, в случае ошибки (или это не анимированный гиф) -- имя оригинала. * * @param string $dir путь к оригиналу (от корня, без '/' в начале) * @param string $orig_name имя гифа оригинала. * @param string $alt_dir имя альтернативной директории для поиска файла (отличной от foto) * @return string имя обрезанного гифа */ function get_unanimated_gif($dir, $orig_name, $alt_dir = false) { if (CFile::getext($orig_name) != 'gif') { return $orig_name; } $memBuff = new memBuff(); $res = $memBuff->get($orig_name); if ($res) { return $res; } $orig_file = $alt_dir ? trim($alt_dir, '/') . '/' . $orig_name : "users/" . substr($dir, 0, 2) . "/" . $dir . "/foto/" . $orig_name; $orig_content = @file_get_contents(WDCPREFIX_LOCAL . '/' . $orig_file); $unan_content = unanimate_gif($orig_content); if ($unan_content !== false) { $unan_name = "na_" . $orig_name; $unan_file = dirname($orig_file) . "/" . $unan_name; $unan = new CFile($unan_file); if (!$unan->id) { $unan = new CFile($orig_file); $unan->name = $unan_name; $unan->size = strlen($unan_content); $put = $unan->putContent($unan_file, $unan_content); // Записываем измененный файл if ($put) { $memBuff->set($orig_name, $unan_name, 3600 * 12); return $unan_name; } } else { $memBuff->set($orig_name, $unan_name, 3600 * 12); return $unan_name; } } return $orig_name; // Если не смогли сохранить возвращаем оригинал }
/** * Выбрать ТУ для списка пользователей * по указанному количеству на каждого * * @param type $uids * @param type $limit * @param type $expire * @param type $group * @return type */ public function getListByUids($uids, $limit = 3, $expire = 0, $group = false) { $sql = $this->db()->parse("\n SELECT \n DISTINCT ON (q.id) \n q.*,\n f.fname AS file\n FROM (\n SELECT \n s.id AS id, \n s.user_id,\n s.title AS title, \n s.price AS price,\n s.videos AS videos,\n s.total_feedbacks AS total_feedbacks,\n row_number() OVER(PARTITION BY s.user_id ORDER BY s.id DESC) AS rownum\n FROM {$this->TABLE} AS s \n LEFT JOIN {$this->TABLE_DEBT} AS od ON od.user_id = s.user_id \n LEFT JOIN {$this->TABLE_BLOCKED} AS sb ON sb.src_id = s.id \n WHERE \n s.user_id IN(?l) \n AND s.deleted = FALSE \n AND s.active = TRUE \n AND sb.src_id IS NULL\n AND (od.id IS NULL OR od.date >= NOW())\n ) AS q\n LEFT JOIN {$this->TABLE_FILES} AS f ON f.src_id = q.id AND f.small = 4\n WHERE q.rownum <= ?i\n ORDER BY q.id DESC, f.preview DESC, f.id \n ", $uids, $limit); $memBuff = new memBuff(); $result = $memBuff->getSql($error, $sql, $expire, true, $group); return $result; }
/** * Сохраняет или возвращает данные связывающие рассылку в личку с рассылкой в почту. Данные актуальны с * момента начала рассылки и до ее окончания. Данные хранятся в переменной (т.к. скрипт постоянно запущен) и * дублируются в 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); } }
/** * Количество подписавшихся на рассылку * @global type $DB * @return type */ public function getCountSubscribe() { global $DB; $memBuff = new memBuff(); $count = $memBuff->get('verify_count'); if (!$count) { $count = $DB->val("SELECT COUNT(*) as cnt FROM verify"); $memBuff->add('verify_count', $count, 600); } return $count; }
/** * Взять последнюю новость * * @return array Новость */ function GetLastNews() { $sql = "SELECT post_date, header FROM news ORDER BY post_date DESC, id DESC LIMIT 1"; $memBuff = new memBuff(); $headers = $memBuff->getSql($error, $sql, 1800); if ($error) { $error = parse_db_error($error); } else { $ret = $headers[0]; } return $ret; }
/** * Обновить кеш цен * * @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; }
/** * Создает пакет. * * @param int $type тип пакета (TYPE_CSS|TYPE_JS|TYPE_PHP_JS|TYPE_JS_UTF8) * @param string $batch_id ид. (хеш) пакета * @param string $batch_version устанавливаемая версия пакета (текущая версия всей статики). * @param string $filename вернется имя файла пакета * @param bool $light true, если сжимаем по облегченному варианту (сжатие быстрое, но не полное). * * @return int код ошибки или 0. */ private function _createBatch($type, $batch_id, $batch_version, &$filename, $light = false) { $log = $this->_log; $err = 0; $cfile = new CFile(); $filename = self::STATIC_WDPATH . '/' . $this->createFileName($batch_id, $batch_version, $this->types[$type]); $lock_key = $this->_createBatchLockKey($batch_id, $batch_version); if (!$light || !$cfile->CheckPath($filename, false)) { // проверка на случай, если pgq переполнится. $log->writeln("creating new batch file {$filename}, compressing content..."); if ($content = $this->_compress($type, $light)) { $cfile->exclude_reserved_wdc = true; if ($cfile->putContent($filename, $content)) { $log->writeln('saving batch info to memcached...'); if (!$this->setBatchVersion($batch_id, $batch_version)) { $err = 3; } } else { $err = 2; } } else { $err = 1; } } if ($err) { $log->writeln("failed ({$err})"); $filename = null; } $log->writeln('unset lock...'); $ok = $this->memBuff->delete($lock_key); $log->writeln($ok ? 'ok' : 'failed'); return $err; }
/** * Удаляет файл из кэша. * * @param string|int $key ключ [path+fname] или [id] */ public function del($key) { if ($r = $this->_cache[$key]) { unset($this->_cache[self::_k($r, 1)]); unset($this->_cache[self::_k($r, 2)]); } if ($r = $this->_memBuff->get(self::_memkey($key))) { $this->_memBuff->delete(self::_memkey(self::_k($r, 1))); $this->_memBuff->delete(self::_memkey(self::_k($r, 2))); } }
/** * Получает курсы валют с сайта ЦБ * * @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; }
function quickPRJPayAccount() { $objResponse = new xajaxResponse(); $uid = get_uid(false); ob_start(); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/billing.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/payed.php'; $bill = new billing($uid); $billReserveId = $bill->checkoutOrder(); $payed_sum = $bill->getOrderPayedSum(); if ($bill->isAllowPayFromAccount()) { $complete = $bill->buyOrder($billReserveId); if ($complete) { $_SESSION['quickprj_ok'] = 1; $memBuff = new memBuff(); $project_id = $memBuff->get('bill_ok_project_' . $uid); if ($project_id) { $is_payed = $memBuff->get('bill_ok_project_payed_' . $uid); if ($is_payed) { $memBuff->delete('bill_ok_project_payed_' . $uid); $friendly_url = "/public/?step=2&public={$project_id}"; } else { $friendly_url = getFriendlyURL('project', $project_id); $_SESSION['quickprj_ok'] = 1; $friendly_url .= '?quickprj_ok=1'; } $objResponse->script("window.location = '{$friendly_url}';"); $memBuff->delete('bill_ok_project_' . $uid); } else { $objResponse->script("window.location = '/?quickprj_ok=1';"); } } } ob_end_clean(); return $objResponse; }
/** * ¬озвращает список публичных типовых услуг по заданным услови¤м и пагинацией * * @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; }
/** * Создает новый счет, отправляет на регистрацию в платежную систему. * * @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; }
/** * Возвращает информацию по заданной HH-валюте * * @param string $code код валюты (USD, UAH и т.д.). * @return array */ function getHHCurrency($code) { global $DB; $sql = "SELECT * FROM hh_currency WHERE code ILIKE '{$code}'"; $memBuff = new memBuff(); if ($rows = $memBuff->getSql($error, $sql, self::MEM_LIFE)) { $ret = $rows[0]; } return $ret; }
/** * Получает текущую таблицу для записи посещений. * @see stat_collector::LogStat() * @return string stat_log|stat_log_t */ function getLogTable() { $MEM = new memBuff(); if (!($table = $MEM->get(stat_collector::LOGTBL_MEM_KEY))) { $table = $this->_sDB->val('SELECT value FROM stat_variables WHERE name = ?', 'log_table'); $this->_setLogTable($table, true); } if (!$table) { $table = 'stat_log'; } return $table; }
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; }
default: 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); }
function WstProj($offer_id, $cur_folder = 1) { session_start(); $objResponse = new xajaxResponse(); require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_offers.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_offers_dialogue.php"; $user_id = get_uid(false); if ($r = projects_offers::WasteProj($offer_id, $user_id)) { $objResponse->script("\n\t\t if(pobx = document.getElementById('prjoffer_box{$offer_id}')) {\n\t\t pobx.parentNode.removeChild(pobx,true);\n\t\t if(curfc = document.getElementById('prjfld_cnt{$cur_folder}')) {\n\t\t curfc.innerHTML = parseInt(curfc.innerHTML) + {$r};\n \t\t if(wstc = document.getElementById('prjfld_cnt5')) // корзина\n \t\t wstc.innerHTML = parseInt(wstc.innerHTML) - {$r};\n \t\t if(allc = document.getElementById('prjfld_cnt0')) // все вместе\n \t\t allc.innerHTML = parseInt(allc.innerHTML) + {$r};\n\t\t }\n\t\t dprj();\n\t\t }\n\t\t"); } // обновляем мигающий значек проекта if (!projects_offers::CheckNewFrlEvents($user_id, false) && !projects_offers_dialogue::CountMessagesForFrl($user_id, true, false)) { $objResponse->script("\n if(\$('new_offers_messages')) \$('new_offers_messages').removeClass('l-projects-a');\n "); } $memBuff = new memBuff(); $memBuff->delete("prjMsgsCnt{$user_id}"); $memBuff->delete("prjMsgsCntWst{$user_id}"); $objResponse->script("Notification()"); return $objResponse; }
/** * Совершить покупку * * @param integer $id возвращает id покупки * @param integer $transaction_id идентификатор текущей транзакции * @param integer $op_code идентификатор операции * @param integer $uid UID * @param string $descr описание для системы * @param string $comments описание для истории юзера * @param integer $ammount количество товара * @param integer $commit завершать ли транзакцию? * @param integer $promo_code ИД промо-кода * * @return integer 0 */ function Buy(&$id, $transaction_id, $op_code, $uid, $descr = "", $comments = "", $ammount = 1, $commit = 1, $promo_code = 0, $payment_sys = 0, $trs_sum = 0) { global $DB; if (!$transaction_id || $transaction_id != $this->check_transaction($transaction_id, $uid)) { return "Невозможно завершить транзакцию"; } else { $res = $DB->query("SELECT op_codes.sum as op_sum, account.sum, account.id FROM op_codes, account WHERE op_codes.id=? AND account.uid=?", $op_code, $uid); if (pg_errormessage()) { return "Ошибка при получении информации о счете!"; } list($op_sum, $ac_sum, $bill_id) = pg_fetch_row($res); $sum = $op_sum * $ammount; if ($promo_code) { $promoCodes = new PromoCodes(); $sum = $sum - $promoCodes->getDiscount($promo_code, $sum); } $ac_sum = round($ac_sum, 2); $sum = round($sum, 2); //@todo: зачем мемкеш? если занос денег deposit и покупка в отдной сессии php //можно было старое значение передать глобальной переменной или реестром $memBuff = new memBuff(); $ac_sum_old = round($memBuff->get("ac_sum_old_" . $uid), 2); $memBuff->delete("ac_sum_old_" . $uid); $new_ac_sum = $ac_sum_old < 0 ? $ac_sum - $ac_sum_old : $ac_sum; if ($sum > 0 && $sum > $new_ac_sum) { return "Недостаточно средств на счету!"; } if ($sum < 0) { return "Покупка на отрицательную сумму!"; } $id = $DB->insert('account_operations', array('billing_id' => $bill_id, 'op_code' => $op_code, 'ammount' => -$sum, 'descr' => $descr, 'comments' => $comments, 'payment_sys' => $payment_sys, 'trs_sum' => $trs_sum), 'id'); if ($DB->error) { return "Ошибка при записи счета!"; } else { if ($uid == get_uid(false)) { $_SESSION['ac_sum'] = $_SESSION['ac_sum'] - $sum; } } if ($promo_code) { $promoCodes->markUsed($promo_code); } // количество операций $_SESSION['account_operations'] = intval($_SESSION['account_operations']) + 1; // для счетчика everesttech.net (см. engine/templates/footer.tpl) if ($sum > 0) { $_SESSION['everesttech_conter'] = 1; } if ($commit) { $this->commit_transaction($transaction_id, $uid, $id); } } return 0; }
/** * Подписаться на топик сообщества. * * @param int $theme_id - id сообщения из commune_messages * @param bool $use_new_template - так как на альфе и боевой используется отчасти старый шаблон, который использует * эту функцию,временно ввожу этот флаг, чтобы сохранить работоспособность обоих вариантов * */ function SubscribeTheme($theme_id, $use_new_template = false) { session_start(); if (!isset($_SESSION['uid'])) { return; } $subscribeText = 'Подписаться на тему'; $unsubscribeText = 'Отписаться от темы'; if ($use_new_template) { $subscribeText = 'Подписаться на комментарии'; $unsubscribeText = 'Отписаться от комментариев'; } $objResponse = new xajaxResponse(); $res = commune::SubscribeTheme($theme_id, $_SESSION['uid']); $txt = !$res ? $subscribeText : $unsubscribeText; if ($use_new_template) { $memkey = "comm_topic_subscribe_{$theme_id}" . '_' . $_SESSION['uid']; $membuf = new memBuff(); $membuf->delete($memkey); $objResponse->script("\$('subscribe_to_comm').set('html', '{$txt}');"); } else { $objResponse->script("\$('subscrToggle').set('html', '{$txt}');"); } return $objResponse; }
/** * формирует превью проекта на главной странице. */ 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("//", ' ', $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; }
<?php /* * Удаляет ключи из мемкеша связанные с потоками и чисит таблицы в базе. * Это приводит к тому, что структура потоков создается заново. * * @author Max 'BlackHawk' Yastrembovich */ require_once '../classes/stdf.php'; require_once '../classes/user_content.php'; $mem_buff = new memBuff(); $DB9 = new DB('plproxy'); $mem_buff->touchTag('user_content'); $DB9->query('SELECT mod_streams_release()'); $user_content = new user_content(); $user_content->releaseDelayedStreams(); // чтобы отработал метод _initStreams
/** * Получение списка пользователей. * * @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); }
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/quick_payment/quickPaymentPopupFactory.php'; $uid = get_uid(false); if (!$uid) { header_location_exit('/404.php'); } $_SESSION['quickprj_is_success'] = 'y'; if ($_SESSION['quickprj_is_begin'] == 1) { unset($_SESSION['quickprj_is_begin']); $memBuff = new memBuff(); $project_id = $memBuff->get('bill_ok_project_' . $uid); if ($project_id) { $is_payed = $memBuff->get('bill_ok_project_payed_' . $uid); if ($is_payed) { $memBuff->delete('bill_ok_project_payed_' . $uid); header("Location: /public/?step=2&public={$project_id}"); } else { $friendly_url = getFriendlyURL('project', $project_id); $_SESSION['quickprj_ok'] = 1; header('Location: ' . $friendly_url . '?quickprj_ok=1'); } $memBuff->delete('bill_ok_project_' . $uid); } else { header('Location: /'); } exit; } $_SESSION['quickmas_is_success'] = 'y'; if ($_SESSION['quickmas_is_begin'] == 1) {
} } /* $q = (!empty($payment))?http_build_query($payment):null; $host .= "/test/bill/ykassa_order.php"; $host .= ($q)?"?{$q}":"?scid=52128&ShopID=17004&Sum=399&customerNumber=179&paymentType=PC&orderId=610&invoiceId=7777"; echo "<p><a href='{$host}'>{$host}</a></p>"; */ echo '<p>Результат <strong>paymentAviso</strong>:</p>'; echo '<pre>'; print_r(htmlspecialchars($complete)); echo '</pre>'; exit; $uid = get_uid(false); $key = 'post_payment_' . $uid; $memBuff = new memBuff(); if (isset($_GET['cancel'])) { //Отказ от платежа header('Location: /bill/fail'); exit; } elseif (isset($_GET['success'])) { $host = $GLOBALS['host']; $payment = $memBuff->get($key); $_SERVER['HTTP_X_REAL_IP'] = '77.75.157.166'; $invoceId = isset($payment['invoiceId']) ? $payment['invoiceId'] : rand(1, 50000); //Что нам говорит яндекс $post = array('requestDatetime' => date('c'), 'action' => 'checkOrder', 'shopId' => $payment['ShopID'], 'invoiceId' => $invoceId, 'customerNumber' => $payment['customerNumber'], 'orderCreatedDatetime' => date('c'), 'orderSumAmount' => floatval($payment['Sum']), 'orderSumCurrencyPaycash' => 643, 'orderSumBankPaycash' => 1001, 'shopSumAmount' => $payment['Sum'], 'shopSumCurrencyPaycash' => 643, 'shopSumBankPaycash' => 1001, 'paymentPayerCode' => 42007148320.0, 'paymentType' => $payment['paymentType']); if (isset($payment['orderId'])) { $post['orderId'] = $payment['orderId']; } $post['md5'] = strtoupper(md5(implode(';', array($post['action'], $post['orderSumAmount'], $post['orderSumCurrencyPaycash'], $post['orderSumBankPaycash'], $post['shopId'], $post['invoiceId'], $post['customerNumber'], YK_KEY))));
/** * Возвращает количество жалоб о спаме, удовлетворяющих условиям выборки * * @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; }
/** * Проверяет, включен ли чат в данные момент у пользователя (метод статический). * * @param int $uid uid пользователя для проверки * * @return bool true - чат в данный момент активен, false - нет */ public static function active($uid) { if (isset($this)) { $memBuff = $this->_memBuff; } else { $memBuff = new memBuff(); } $v = $memBuff->get(self::MEMBUFF_COUNTERS_KEY . $uid . ':connects'); return (bool) $v; }
/** * Собирает 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'; } }
$projects = new projects(); if ($prj_id && $user->is_pro == 't') { $error .= $projects->publishedMovedToVacancy(array('uid' => $uid), $prj_id); } 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) {