/** * Обрезает анимированный .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; // Если не смогли сохранить возвращаем оригинал }
/** * Печатает содержимое файлов, при запросе /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']); }
/** * Сохраняет или возвращает данные связывающие рассылку в личку с рассылкой в почту. Данные актуальны с * момента начала рассылки и до ее окончания. Данные хранятся в переменной (т.к. скрипт постоянно запущен) и * дублируются в 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; }
/** * Удаляет файл из кэша. * * @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))); } }
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 массив, индексированный кодами валют (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; }
/** * Возвращает количество жалоб о спаме, удовлетворяющих условиям выборки * * @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 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; }
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; }
*/ 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)))); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $host . '/income/ykassa.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_USERPWD, BASIC_AUTH); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); ob_start(); $res = curl_exec($ch);
/** * Совершить покупку * * @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; }
<?php require_once $_SERVER["DOCUMENT_ROOT"] . "/classes/stdf.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/professions.php"; $membuf = new memBuff(); $memkey = "b-combo-getprofandgroups"; $s = $membuf->get($memkey); if (!$s) { $rows = professions::GetProfessionsAndGroup(); $result = array(); foreach ($rows as $k => $i) { if ($result[$i["gid"]] === null) { $result[$i["gid"]] = array('0' => iconv("WINDOWS-1251", "UTF-8//IGNORE", $i["gname"]), "undefined_value" => iconv("WINDOWS-1251", "UTF-8//IGNORE", 'Все специальности')); if ($i["id"] !== null) { $result[$i["gid"]][$i["id"]] = iconv("WINDOWS-1251", "UTF-8//IGNORE", $i["name"]); } else { $result[$i["gid"]] = iconv("WINDOWS-1251", "UTF-8//IGNORE", $i["gname"]); } } else { if (is_array($result[$i["gid"]])) { $result[$i["gid"]][$i["id"]] = iconv("WINDOWS-1251", "UTF-8//IGNORE", $i["name"]); } } } $s = json_encode($result); $membuf->add($memkey, $s); } print 'var professionsList = ' . $s . '; professionsList["0"]["0"] = "Другое";professionsList["0"]["undefined_value"] = "Нет специализации";';
/** * Проверка возможности отправить сообщение ползователю. * * @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; }
/** * Берем курсы валют на определенный день * * @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; }
/** * Получение списка пользователей. * * @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); }
/** * формирует превью проекта на главной странице. */ 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; }
while ( $users = $ms->getData() ) { $cnt += count($users); sleep(1); unset($users); } */ $profiler->stop('read_frl_mem'); //$results['getData'] = print_r($ms->getData(),true); $results['isExistData'] = (int) $ms->isExistData(); $results['-'] = true; $results['Read all from mem cnt'] = $cnt; $results['read_frl_mem execution_time (sec)'] = number_format($profiler->get('read_frl_mem'), 5); $results['getDebugInfo'] = $ms->getDebugInfo(); $results['-'] = true; $memBuff = new memBuff(); $results['memBuff'] = $memBuff->get('mem_storage-newsletter_freelancer-pages'); $results['getMemBuff'] = $ms->getMemBuff()->get('mem_storage-newsletter_freelancer-pages'); //------------------------------------------------------------------------------ //$profiler->stop('read_frl_mem'); //$results['ID found in mem page'] = $ms->isExistItem(333); //------------------------------------------------------------------------------ /* $results += array( 'read_frl_mem execution_time (sec)' => number_format($profiler->get('read_frl_mem'),5) ); */ //------------------------------------------------------------------------------ array_walk($results, function (&$value, $key) { if ($key == '-') { $value = '------------------------------------------------------------------------------' . PHP_EOL; } else {
} 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 {
/** * Получить в случайном порядке профи пользователей только из кеша * * @param type $limit * @return type */ function getProfiAllRandomFromCache($limit = 39) { $sql = $this->getProfiAllSql($limit); $memBuff = new memBuff(); $frls = $memBuff->get(md5($sql)); shuffle($frls); return $frls; }
/** * Проверяет, включен ли чат в данные момент у пользователя (метод статический). * * @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; }
define('NO_CSRF', 1); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php'; $action = empty($_POST['action']) || !in_array($_POST['action'], array('role', 'info')) ? '' : $_POST['action']; $email = empty($_POST['email']) || !preg_match('/.+\\@.+/', $_POST['email']) ? '' : $_POST['email']; $login = empty($_POST['login']) || strlen($_POST['login']) < 3 || strlen($_POST['login']) > 15 ? '' : $_POST['login']; $pass = empty($_POST['password']) || strlen($_POST['password']) < 6 || strlen($_POST['password']) > 24 ? '' : $_POST['password']; $result = array('result' => 'no'); if (!$action || !$email && !$login || $action == 'info' && !$pass) { echo json_encode($result); exit(1); } $mem = new memBuff(); $key = md5("dizkon:{$action}_{$login}_{$email}_{$pass}"); if (($res = $mem->get($key)) !== false) { echo json_encode($res); exit(0); } 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') {
/** * Получает текущую таблицу для записи посещений. * @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; }
/** * Оплата выбранного сервиса и ответ пользователю об успехе или ошибке. */ 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); }
/** * ¬озвращает список публичных типовых услуг по заданным услови¤м и пагинацией * * @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 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; }
<?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) {
/** * Осуществляет операцию Запрос баланса Агента. * * @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; }
/** * Собирает 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'; } }
<?php if (!empty($_GET['subdomain']) && (!isset($_COOKIE['cdastop']) || !isset($_COOKIE[session_name()]))) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/memBuff2.php'; $mem = new memBuff(); if (!empty($_GET['cdakey'])) { $data = $mem->get(CROSSDOMAINAUTH_KEY_NAME . $_GET['cdakey']); if (empty($_COOKIE['cdastop']) && !empty($data['sess']) && !empty($data['time']) && mktime() - $data['time'] <= 120) { session_id($data['sess']); } setcookie('cdastop', 1, 0, '/'); $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; }