/** * Создает пакет. * * @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; }
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; }
/** * Удаляет файл из кэша. * * @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))); } }
/** * Подписать пользователя на рассылку */ public function addSubscribeUser($uid = null) { global $DB; if (!$uid) { $uid = $_SESSION['uid']; } $memBuff = new memBuff(); $memBuff->delete("verify_count"); // Очищаем кеш return $DB->insert("verify", array("uid" => $uid)); }
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; }
/** * Получает курсы валют ЦБ и обновляет их у нас (используется в crone файл hourly.php) */ function updateCBRates() { // Удаляем старые курсы из кеша $memBuff = new memBuff(); $memBuff->delete('getCBRates'); $CBRates = getCBRates(); if ($CBRates) { $pex = self::GetAll(false); $exs = array(); $exs[12] = $pex[12]; $exs[13] = $pex[13]; $exs[14] = $pex[14]; $exs[24] = str_replace(",", ".", $CBRates['USD']['Value']); $exs[34] = str_replace(",", ".", $CBRates['EUR']['Value']); $error = 0; foreach ($exs as $k => $v) { if ((double) $v <= 0) { $error = 1; break; } $pex[$k] = $v; } if (!$error) { $ex_cnt = 4; for ($i = 1; $i <= $ex_cnt; $i++) { @($pex[$i . '1'] = 1 / $pex['1' . $i]); $pex[$i . $i] = 1; } for ($i = 2; $i <= $ex_cnt; $i++) { for ($j = 2; $j <= $ex_cnt; $j++) { $pex[$j . $i] = $pex[$j . $j] / $pex[$i . $j]; } } self::BatchUpdate($pex); } } }
/** * Уничтожает данные по временному проекту, удаляет из кэша. * * @return integer 0 */ function destroy() { if ($this->_tmpFiles) { $cfile = new CFile(); foreach ($this->_tmpFiles as $fname) { $cfile->Delete(0, $this->_tmpAbsDir, $fname); } } $this->_project = NULL; $this->_attach = NULL; $this->_logo = NULL; $this->_transactionId = NULL; $this->_addedTopDays = 0; $this->_uid = NULL; $this->_tmpFiles = NULL; $this->_deletedFiles = NULL; $this->_isEdit = NULL; $this->_buffer = NULL; $this->_categories = NULL; if ($this->_memkey) { $memBuff = new memBuff(); $memBuff->delete($this->_memkey); } return 0; }
$alert[3] = "Этот пользователь заблокирован. Вы не можете отправить ему личное сообщение"; } $dlg_user = users::GetUid($err, $user->login); $dlg_user_login = $user->login; if ($post_denied = ignor::CheckIgnored($dlg_user, $_SESSION['uid']) || in_array($user->login, array('admin', 'Anonymous'))) { $error = "Пользователь запретил отправлять ему сообщения"; } if (!$post_denied && is_emp($user->role)) { $is_allow_messages = messages::isAllowed($user->uid, $uid); $post_denied = !$is_allow_messages; } $prjname = $_POST['prjname']; $cnt_role = substr($user->role, 0, 1) == '0' ? "frl" : "emp"; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/memBuff.php"; $memBuff = new memBuff(); $memBuff->delete("msgsCnt" . get_uid(false)); # $css_file = ""; } } else { switch ($page) { case "unread": $cur_folder = -7; break; case "team": $cur_folder = -1; break; case "ignor": $cur_folder = -2; break; case "del": $cur_folder = -3;
/** * Помечает все жалобы на сообщение удаленными (решение админа) * * @param int $nSpamerId UID спамера * @param string $sMsgMd5 MD5 хэш текста сообщения * @param int $nResolve Решение админа: 0 - еще не решил, 1 - это не спам, 2 - предупреждение, 3 - бан * @return bool true - успех, false - провал */ function deleteSpamByMsg($nSpamerId = 0, $sMsgMd5 = '', $nResolve = 0) { $bRet = false; if ($nSpamerId && $sMsgMd5) { $DB = new DB('plproxy'); $DB->query("SELECT messages_spam_del_msg(?i, ?, ?i)", $nSpamerId, $sMsgMd5, $nResolve); if (!$DB->error) { $bRet = true; $oMemBuf = new memBuff(); if (($nCount = $oMemBuf->get('messages_spam_count')) !== false) { $nCount = $nCount - 1; if ($nCount < 0) { $nCount = 0; } $oMemBuf->set('messages_spam_count', $nCount, 3600); } else { $oMemBuf->delete('messages_spam_count'); $this->getSpamCount(); } } } return $bRet; }
/** * Подписаться на топик сообщества. * * @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; }
/** * Новый отзыв по заказу ТУ * * @global type $uid * @global type $orderModel * @param type $params * @return \xajaxResponse */ function tservicesOrdersNewFeedback($params) { $uid = get_uid(false); $orderModel = TServiceOrderModel::model(); $objResponse =& new xajaxResponse(); $order_id = intval(@$params['oid']); $hash = @$params['hash']; $test_hash = md5(TServiceOrderModel::SOLT . $order_id); if ($uid <= 0 || $hash !== $test_hash) { return $objResponse; } $memebuff = new memBuff(); if ($memebuff->get('feedback_process_' . $order_id)) { return $objResponse; } $memebuff->set('feedback_process_' . $order_id, true); $is_emp = is_emp(); $prefix = $is_emp ? 'emp' : 'frl'; $sufix = $is_emp ? 'frl' : 'emp'; $allow_status = array(TServiceOrderModel::STATUS_ACCEPT, TServiceOrderModel::STATUS_FIX, TServiceOrderModel::STATUS_EMPCLOSE, TServiceOrderModel::STATUS_FRLCLOSE); $feedback = @$params['feedback']; $is_feedback = !empty($feedback); $fbtype = @$params['fbtype']; $orderData = $orderModel->getCard($order_id, $uid); //Если не существует или статус не подходящий if (!$orderData || !in_array($orderData['status'], $allow_status)) { $memebuff->delete('feedback_process_' . $order_id); return $objResponse; } //Если есть отзыв и он не удален if (!empty($orderData[$prefix . '_feedback'])) { $memebuff->delete('feedback_process_' . $order_id); return $objResponse; } $order_id = $orderData['id']; $status = $orderData['status']; if ($orderModel->isDisallowFeedback()) { $memebuff->delete('feedback_process_' . $order_id); return $objResponse; } //Меняем статус при необходимости и тем самым закрываем заказ if ($status != TServiceOrderModel::STATUS_EMPCLOSE) { try { $new_status = $orderModel->changeStatus($order_id, 'close', $is_emp, $fbtype); } catch (Exception $e) { $sHtml = tservices_helper::getMessage($e->getMessage(), 'error'); $objResponse->call('TServices_Order.showBeforeStatus', $order_id, $sHtml); $memebuff->delete('feedback_process_' . $order_id); return $objResponse; } $orderData['status'] = $new_status; } //Сохраняем отзыв если он есть if ($is_feedback) { $orderFeedbackModel = new TServiceOrderFeedbackModel(); $is_valid = $orderFeedbackModel->attributes(array('feedback' => $feedback, 'rating' => $fbtype, 'is_emp' => $is_emp, 'user_id' => $uid)); //Тут обрабатывать ошибки при валидации if (!$is_valid || !$orderFeedbackModel->addFeedback($order_id)) { $memebuff->delete('feedback_process_' . $order_id); return $objResponse; } $attributes = $orderFeedbackModel->attributes(); $orderData[$prefix . '_feedback'] = $attributes['feedback']; $orderData[$prefix . '_rating'] = $attributes['rating']; //Сохранить действие в историю $history = new tservices_order_history($order_id); $history->saveFeedback($is_emp, $fbtype); //Чистим кеш кол-во новых сообщений юзера после написания комментария $orderModel->clearCountEvent($orderData["{$sufix}_id"]); /* if ($status == TServiceOrderModel::STATUS_EMPCLOSE && $is_emp && $fbtype < 0) { $orderModel->cancelTax($order_id); } */ } //Уведомление на почту $tservices_smail = new tservices_smail(); $tservices_smail->attributes(array('order' => $orderData, 'is_emp' => $is_emp)); $tservices_smail->closeOrderAndFeedback($status); $tserviceOrderStatusWidget = new TServiceOrderStatus(); $tserviceOrderStatusWidget->setIsEmp($is_emp); $tserviceOrderStatusWidget->setOrder($orderData); $tserviceOrderStatusWidget->init(); ob_start(); $tserviceOrderStatusWidget->run(); $sHtml = ob_get_contents(); ob_end_clean(); $objResponse->assign('tservices_order_status_' . $order_id, 'innerHTML', $sHtml); //если фрилансер закрывает заказ или оставляет отзыв //то обновляем ему информацию о состоянии счета if (!$is_emp) { //не показываем отрицательную сумму //$balance = ($_SESSION['ac_sum'] > 0)?number_format(round(zin($_SESSION['ac_sum']),2), 2, ",", " ").' руб.':'Мои услуги'; //$balance = '<span class="b-bar__icon b-bar__icon_fm"></span>' . $balance; //для новой шапки $balance = number_format(round(zin($_SESSION['ac_sum']), 2), 2, ",", " ") . ' Р'; $objResponse->script("\$\$('.b-user-menu-wallet-clause a').set('html', '" . $balance . "');"); } //Обновляем события так как у mootools нет Live //а Delegation не работает. $objResponse->script(' Bar_Ext.popuper(); window.order_feedback_factory = new OrderFeedbackFactory(); '); $memebuff->delete('feedback_process_' . $order_id); return $objResponse; }
/** * Отказываемся от проекта * * @param integer $uid * @param integer $pid */ public static function Refuse($uid, $pid) { global $DB; $sql = "UPDATE projects_offers SET frl_refused = true WHERE user_id = ?i AND project_id = ?i RETURNING frl_refused"; $ref = $DB->val($sql, $uid, $pid); if (!$DB->error) { // находим id работодателя и стираем количество непросмотренных событий в проектах $sql = "SELECT p.user_id \n FROM projects p\n WHERE p.id = ?i"; $emp_id = $DB->val($sql, $pid); $mem = new memBuff(); $mem->delete('prjEventsCnt' . $emp_id); } return $ref; }
/** * Добавляет новое сообщение (комментарий) в этапе сделки по данным пользовательского запроса. * @todo Функция для нового СБР. возвращает не Ид сообщения а xact_id для корректного якоря на новое событие * * @param array $request $_GET | $_POST * @param array $files $_FILES * @return boolean успешно? */ function _new_addMsg($request, $files) { $this->_new_msgInitFromRequest($request, $files); // !!! разбить такие функции с возможностю передачи уже обработанных данных if ($this->error) { return false; } $sql_data = $this->_new_preMsgSql(); $is_admin = $this->sbr->isAdmin() ? 't' : 'f'; $xact_id = $this->_openXact(true); if (!$xact_id) { return false; } $sql = "\n INSERT INTO sbr_stages_msgs (stage_id, user_id, parent_id, msgtext, yt_link, is_admin)\n VALUES ({$this->data['id']}, {$this->sbr->uid}, {$sql_data['parent_id']}, '{$sql_data['msgtext']}', '{$sql_data['yt_link']}', '{$is_admin}')\n RETURNING id;\n "; if (!($res = pg_query(self::connect(false), $sql))) { $this->_abortXact(); return false; } $this->post_msg['id'] = pg_fetch_result($res, 0, 0); $sql_attach = ''; if ($this->uploaded_files) { foreach ($this->uploaded_files as $file) { if (!$file->id) { continue; } $originalName = $file->shortenName($file->original_name, 128); $sql_attach .= "INSERT INTO sbr_stages_msgs_attach(msg_id, file_id, orig_name) VALUES({$this->post_msg['id']}, {$file->id}, '{$originalName}');"; } } if (!$this->setMsgsRead($this->data['read_msgs_count'] + 1) || $sql_attach && !pg_query(self::connect(false), $sql_attach)) { $this->_abortXact(); unset($this->post_msg['id']); return false; } $oMemBuff = new memBuff(); if ($this->sbr->uid != $this->sbr->frl_id) { $oMemBuff->delete('sbrMsgsCnt' . $sbr->frl_id); } if ($this->sbr->uid != $this->sbr->emp_id) { $oMemBuff->delete('sbrMsgsCnt' . $sbr->emp_id); } $this->_commitXact(); $msg_id = $this->post_msg['id']; unset($this->post_msg); return $xact_id; }
/** * Сохранить настройки * * @return boolean */ public function save() { if (!$this->is_valid) { return false; } $cache_keys = array(); $key = sprintf(FreelancersPreviewModel::TAG_CURRENT_USER_PREVIEW, $this->group_id, $this->prof_id); $cache_keys[$key] = $key; if ($this->id > 0) { $res = $this->db()->update(self::TABLE, $this->data, 'id = ?i AND user_id = ?i', $this->id, $this->uid); if ($this->is_default) { $this->setDefaultByGroupAndProf(false); } } else { if (count($this->data)) { foreach ($this->data as $insert_data) { $ret_id = $this->db()->insert(self::TABLE, $insert_data, 'id'); if ($insert_data['pos'] == $this->pos && $insert_data['prof_id'] == $this->prof_id && $insert_data['group_id'] == $this->group_id) { $this->id = $ret_id; } } $res = $this->id > 0; } } if ($this->data_extra_update) { foreach ($this->data_extra_update as $insert_data) { $key = sprintf(FreelancersPreviewModel::TAG_CURRENT_USER_PREVIEW, $insert_data['group_id'], $insert_data['prof_id']); if (!isset($cache_keys[$key])) { $this->clearByProfAndGroup($insert_data['prof_id'], $insert_data['group_id']); $cache_keys[$key] = $key; } $this->db()->insert(self::TABLE, $insert_data); } } //Чистим кеш выборки где присутствовали превью юзера if ($res) { $memBuff = new memBuff(); foreach ($cache_keys as $value) { $memBuff->delete($value); } unset($_SESSION[self::SESS_EXIST_PREVIEW_DATA]); } return $res; }
/** * Удаляет все жалобы на предложение * * @param int $nOfferId Идентификатор предложения * @return bool true - успех, false - провал */ function deleteOfferComplaints($nOfferId = 0) { $GLOBALS['DB']->query('DELETE FROM freelance_offers_complains WHERE offer_id = ?i', $nOfferId); if (!$GLOBALS['DB']->error) { $oMemBuf = new memBuff(); if (($nCount = $oMemBuf->get('complain_offers_count')) !== false) { $nCount = $nCount - 1; $oMemBuf->set('complain_offers_count', $nCount, 3600); } else { $oMemBuf->delete('complain_offers_count'); } } return !$GLOBALS['DB']->error; }
/** * Оплата услуг. * * @param array $order Данные по оплачивоемой услуге * * @return bool */ public function paymentOrder($order) { $_op_code = self::getOpCodeByDiscount($order['op_code']); switch ($_op_code) { // Верификация банковской картой через ЯКассу case 191: $error = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['descr'], $order['comment']); if (!$error) { $success = true; //Устанавливаем флаг верификации require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/Verification.php'; $verify = new Verification(); $verify->cardYK($this->user['uid']); //Обновляем сессию //@todo: эта штука не работает! $session = new session(); $session->UpdateVerification($this->user['login']); //Обновляем имя и фамилию $fio = mb_unserialize($order['option']); if (isset($fio['uname']) && isset($fio['usurname'])) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $u = new users(); $u->GetUserByUID($this->user['uid']); $u->uname = $fio['uname']; $u->usurname = $fio['usurname']; $u->Update($this->user['uid'], $db_errors); } //Назначаем возврат require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/billing/BillPayback.php'; BillPayback::getInstance()->requestPayback($order['id'], $this->paymentSysParams['invoiceId'], $order['ammount']); } break; //------------------------------------------------------------------ // Верификация через FF //------------------------------------------------------------------ // Верификация через FF case 117: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/Verification.php'; $error = $this->account->Buy($account_operation_id, $this->transaction, Verification::FF_OP_CODE, $this->user['uid'], $order['comment'], $order['descr'], 1, 0); $verify = new Verification(); $verify->data = unserialize($order['option']); $this->_db->query('UPDATE verify_ff SET is_pro = ?, bill_id = ? WHERE id = ?', false, $account_operation_id, $order['src_id']); if ($verify->verify($this->user['uid'])) { $this->_db->query('UPDATE verify_ff SET result = TRUE WHERE id = ?', $order['src_id']); $success = true; } break; //------------------------------------------------------------------ // Конкурс //------------------------------------------------------------------ // Конкурс case 9: case 106: case 121: case 122: case 123: case 124: case 125: case 126: case 127: case 128: case 129: case 130: // Платный конкурс // Платный конкурс case 86: // Платный проект (вакансия, устаревший опкод) // Платный проект (вакансия, устаревший опкод) case 53: //Покупка вакансии //Покупка вакансии case 113: //пользователь не PRO //пользователь не PRO case 192: //пользователь PRO //Платные услуги проектов //пользователь PRO //Платные услуги проектов case 138: case 139: case 140: case 141: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/drafts.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/uploader/uploader.php'; // Публикуем платный проект if ($order['parent_table'] == 'draft_projects') { $draft_id = $order['parent_id']; $this->project_key = md5(uniqid($this->user['uid'])); $tmpPrj = new tmp_project($this->project_key); $tmpPrj->initFromDraft($draft_id, $this->user['uid']); $tproject = $tmpPrj->getProject(); $isMovedToVacancy = false; // Нет конкурса значит его уже опубликовали и оплатили, оставляем деньги на личном счете if ((int) $tproject['prj_id'] <= 0) { // Не тратим деньги на такой конкурс if ($tmpPrj->isKonkurs() && strtotime($tproject['end_date']) <= time()) { $success = true; break; } $error = $tmpPrj->saveProject($this->user['uid'], $proj, $this->ordersPromoCodes); $success = !$error; // Отработали все по конкурсу удаляем его чтобы не мешал (после отработки всех операций) $this->setAfterQuery($this->_db->parse('DELETE FROM draft_projects WHERE id = ? AND uid = ?', $draft_id, $this->user['uid']), $order['parent_id']); $sql = 'UPDATE draft_projects SET prj_id = ? WHERE id = ? AND uid = ?'; $this->_db->query($sql, $proj['id'], $draft_id, $this->user['uid']); } else { $success = true; } } elseif ($order['parent_table'] == 'projects') { $prj_id = $order['parent_id']; $this->project_key = md5(uniqid($this->user['uid'])); $tmpPrj = new tmp_project($this->project_key); $tmpPrj->setInitFromDB($prj_id); $tproject = $tmpPrj->getProject(); $isMovedToVacancy = $tmpPrj->isStateMovedToVacancy(); // Если закрыт или заблокирован не тратим деньги if ($tproject['closed'] == 't' || $tproject['is_blocked'] == 't') { $success = true; break; } switch ($order['option']) { case 'top': $tmpPrj->setAddedTopDays($order['op_count']); break; case 'logo': $LogoFile = new CFile($order['src_id']); $tmpPrj->initLogo($LogoFile, $order['descr']); break; case 'urgent': $tmpPrj->setProjectField('urgent', 't'); break; case 'hide': $tmpPrj->setProjectField('hide', 't'); break; case 'office': $tmpPrj->setProjectField('old_state', $tproject['state']); $tmpPrj->setProjectField('state', projects::STATE_PUBLIC); //Если оплачивается не перемещенная вакансия //то работаем как обычно и подымаем вверх if ($tproject['state'] != projects::STATE_MOVED_TO_VACANCY) { $tmpPrj->setProjectField('post_now', true); } break; } $error = $tmpPrj->saveProject($this->user['uid'], $proj, $this->ordersPromoCodes); $success = !$error; if ($success) { if (isset($tmpPrj->account_operation_id) && $tmpPrj->account_operation_id > 0) { $account_operation_id = $tmpPrj->account_operation_id; } switch ($order['option']) { case 'office': if ($tproject['state'] == projects::STATE_MOVED_TO_VACANCY) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php'; $smail = new smail(); $smail->sendMovedToVacancySuccessPayed($tproject); require_once $_SERVER['DOCUMENT_ROOT'] . '/guest/models/GuestInviteModel.php'; $guestInviteModel = new GuestInviteModel(); $guestInviteModel->updateDatePublicBySrc($prj_id, array(GuestConst::TYPE_PROJECT, GuestConst::TYPE_VACANCY)); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/autoresponse.php'; $autoresponse = new autoresponse(); $autoresponse->reduceByProject($prj_id); } break; } } } //Сохраняем, чтобы показать попап юзеру $memBuff = new memBuff(); $memBuff->add('bill_ok_project_' . $this->user['uid'], $proj['id']); //Если это оплата вакансии или конкусра то предлагаем еще купить платные опции if (in_array($order['option'], array('office', 'contest')) && !$isMovedToVacancy) { $memBuff->add('bill_ok_project_payed_' . $this->user['uid'], true); } break; //------------------------------------------------------------------ // Платное место в карусели //------------------------------------------------------------------ // Платное место в карусели case 65: // На главной странице $catalog = 0; case 73: // В каталоге require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pay_place.php'; $payPlace = new pay_place(isset($catalog) ? $catalog : 1); $buyMain = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['comment'], $order['descr'], $order['op_count'], 0, $order['promo_code']); if ($buyMain === 0) { $options = unserialize($order['option']); if (isset($options['adHead'])) { //поддержка старого режима $success = $payPlace->addUser($this->user['uid'], $options['adHead'], $options['adText'], $options['adImg']); } else { $success = $payPlace->addUserRequest($this->user['uid'], $options); } } break; //------------------------------------------------------------------ // ПРО аккаунт фрилансеры //------------------------------------------------------------------ // ПРО аккаунт фрилансеры case 47: // Тестовый ПРО на 1 неделю if (payed::IsUserWasPro($this->user['uid'])) { return false; break; } case 15: // Про на 1 месяц (emp) // Про на 1 месяц (emp) case 48: // Про на 1 месяц (frl) // Про на 1 месяц (frl) case 118: // Про на 3 месяца (emp) // Про на 3 месяца (emp) case 49: // Про на 3 месяца (frl) // Про на 3 месяца (frl) case 119: // Про на 6 месяцeв (emp) // Про на 6 месяцeв (emp) case 50: // Про на 6 месяцев (frl) // Про на 6 месяцев (frl) case 120: // Про на 1 год (emp) // Про на 1 год (emp) case 51: // Про на 1 год (frl) // Про на 1 год (frl) case 132: // Про на 1 день (frl) // Про на 1 день (frl) case 131: // Про на 1 неделю (frl) // Про на 1 неделю (frl) case 163: // Тестовый ПРО на месяц // Тестовый ПРО на месяц case 164: // PROFI на 1 месяц require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/payed.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/employer.php'; $payed = new payed(); $user = is_emp($this->user['role']) ? new employer() : new freelancer(); $success = $payed->SetOrderedTarif($this->user['uid'], $this->transaction, $order['op_count'], $order['comment'], $order['op_code'], $order['promo_code'], $error); if ($success) { if (isset($payed->account_operation_id) && $payed->account_operation_id > 0) { $account_operation_id = $payed->account_operation_id; } // Обновим сессию сразу! if (get_uid(false) == $this->user['uid']) { $_SESSION['pro_last'] = payed::ProLast($this->user['login']); $_SESSION['pro_last'] = $_SESSION['pro_last']['is_freezed'] ? false : $_SESSION['pro_last']['cnt']; if ($_SESSION['pro_last']['is_freezed']) { $_SESSION['payed_to'] = $_SESSION['pro_last']['cnt']; } } else { $membuff = new memBuff(); $membuff->set('is_changed_pro_' . $this->user['uid'], true); //Этот подход не работает //$session = new session(); //$session->UpdateProEndingDate($this->user['login']); } if ($order['auto'] == 't') { $user->setPROAutoProlong('on', $this->user['uid']); } else { $user->setPROAutoProlong('off', $this->user['uid']); } //Опубликовать перемещенные вакансии при покупке ПРО //@todo: Теперь вакансии для всех платные разница лишь в цене для ПРО дешевле //поэтому отключаем публикацию после покупки ПРО //https://beta.free-lance.ru/mantis/view.php?id=28579 /* if (is_emp($this->user['role'])) { require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php"); $project = new projects(); $project->publishedMovedToVacancy($this->user); }*/ //Чистим кеш каталога PROFI пользователей if ($order['op_code'] == 164) { freelancer::clearCacheProfiCatalog(); } } break; //------------------------------------------------------------------ //------------------------------------------------------------------ case 45: // рассылка по каталогу require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/masssending.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/messages.php'; $masssending = masssending::Get($order['parent_id']); $masssending = $masssending[0]; $error = $this->account->Buy($account_operation_id, $this->transaction, masssending::OPER_CODE, $this->user['uid'], $order['descr'], $order['comment'], $masssending['pre_sum'], 0, $order['promo_code']); if ($error) { break; } masssending::UpdateAcOpID($order['parent_id'], $account_operation_id); $success = (bool) messages::Masssending($masssending['user_id'], $masssending['id'], $masssending['msgtext'], $masssending['posted_time']); break; //------------------------------------------------------------------ /* * Погашение задолженности */ //------------------------------------------------------------------ /* * Погашение задолженности */ case 135: $error = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['descr'], $order['comment'], 1, 1, 0, 0, $order['ammount']); if (!$error) { $success = true; //Начисление погашенной комиссии и удаление блокировки ТУ require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php'; TServiceOrderModel::model()->clearDebt($this->user['uid']); } break; //------------------------------------------------------------------- /* * Операции над бизнес логикой резерва средств * при успешном зачислении денег */ //------------------------------------------------------------------- /* * Операции над бизнес логикой резерва средств * при успешном зачислении денег */ case 136: $success = false; $data = @$this->list_service[$order['id']]['info']; if (!$data) { break; } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesModelFactory.php'; $reserveInstance = ReservesModelFactory::getInstance($data['type']); //Уже была зарезервирована или нет нужный параметров то //ничего не покупаем деньги остаются на ЛС if (!$reserveInstance || !isset($this->paymentSysParams['invoiceId'])) { break; } //Невозможно сменить статус сделки выходим $reserveInstance->setReserveData($data); if (!$reserveInstance->allowChangeStatus(ReservesModel::STATUS_RESERVE)) { break; } $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['descr'], $order['comment'], $order['ammount']); if ($ret === 0) { //Успешно купили услугу и теперь меняем статус резерва $data['invoice_id'] = $this->paymentSysParams['invoiceId']; $data['acc_op_id'] = $account_operation_id; $reserveInstance->setReserveData($data); $success = $reserveInstance->changeStatus(ReservesModel::STATUS_RESERVE); } break; //------------------------------------------------------------------ /* * Завершение покупки автоответов. */ //------------------------------------------------------------------ /* * Завершение покупки автоответов. */ case 137: $success = false; $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $order['descr'], $order['comment'], $order['ammount'], 1, $order['promo_code']); if ($ret === 0 && isset($order['parent_id']) && intval($order['parent_id'])) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/autoresponse.php'; autoresponse::$db = $GLOBALS['DB']; // Активация покупки услуги автоответа if ($autoresponse = autoresponse::get($order['parent_id'])) { $autoresponse->activate(); $success = true; } } break; //------------------------------------------------------------------ // Закрепление в каталоге фрилансеров //------------------------------------------------------------------ // Закрепление в каталоге фрилансеров case 142: // В корневом разделе // В корневом разделе case 143: // В разделе $is_spec = false; case 144: // В подразделе if (!isset($is_spec)) { $is_spec = true; } $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer_binds.php'; $freelancer_binds = new freelancer_binds(); $freelancer_binds->prepare($this->user['uid'], $order['src_id'], $is_spec, $order['op_count']); $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $freelancer_binds->bind_info['descr'], $freelancer_binds->bind_info['comment'], $order['ammount'], 1, $order['promo_code']); if ($ret === 0) { $success = $freelancer_binds->create(); } break; //------------------------------------------------------------------ // Продление закрепления в каталоге фрилансеров //------------------------------------------------------------------ // Продление закрепления в каталоге фрилансеров case 148: // В корневом разделе // В корневом разделе case 149: // В разделе $is_spec = false; case 150: // В подразделе if (!isset($is_spec)) { $is_spec = true; } $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer_binds.php'; $freelancer_binds = new freelancer_binds(); $bind_id = $freelancer_binds->isUserBinded($this->user['uid'], $order['src_id'], $is_spec); $ret = true; if ($bind_id) { $freelancer_binds->getProlongInfo($this->user['uid'], $order['src_id'], $is_spec, $order['op_count']); $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $freelancer_binds->bind_info['descr'], $freelancer_binds->bind_info['comment'], $order['ammount']); } if ($ret === 0) { $success = $freelancer_binds->prolong($bind_id, $order['op_count'], $order['src_id'], $is_spec); } break; //------------------------------------------------------------------ // Поднятие закрепления в каталоге фрилансеров //------------------------------------------------------------------ // Поднятие закрепления в каталоге фрилансеров case 151: // В корневом разделе // В корневом разделе case 152: // В разделе $is_spec = false; case 153: // В подразделе // В подразделе case 194: //Оплата из буфера if (!isset($is_spec)) { $is_spec = $order['src_id'] > 0; } $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer_binds.php'; $freelancer_binds = new freelancer_binds(); $bind_id = $freelancer_binds->isUserBinded($this->user['uid'], $order['src_id'], $is_spec); if ($bind_id) { $freelancer_binds->getUpInfo($this->user['uid'], $order['src_id'], $is_spec); $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $freelancer_binds->bind_info['descr'], '', $order['ammount']); if ($ret === 0) { $success = $freelancer_binds->up($bind_id, $order['src_id'], $is_spec); } } break; //------------------------------------------------------------------ // Закрепление/продление в каталоге услуг //------------------------------------------------------------------ // Закрепление/продление в каталоге услуг case 155: // В лендинге // В лендинге case 156: // В корневом разделе // В корневом разделе case 157: // В разделе // В разделе case 158: // В подразделе $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/tservices/tservices_binds.php'; $tservices_binds = new tservices_binds(tservices_binds::KIND_LANDING); $tservices_binds->setKindByOpCode($_op_code); $option = unserialize($order['option']); $tservice_id = isset($option['tservice_id']) ? $option['tservice_id'] : $order['option']; $is_prolong = isset($option['is_prolong']) ? $option['is_prolong'] : false; $tservices_binds->prepare($this->user['uid'], $tservice_id, $order['src_id'], $order['op_count'], $is_prolong); if ($tservices_binds->bind_info) { $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $tservices_binds->bind_info['descr'], $tservices_binds->bind_info['comment'], $order['ammount']); if ($ret === 0) { $success = $is_prolong ? $tservices_binds->update() : $tservices_binds->create(); } } break; //------------------------------------------------------------------ // Поднятие закрепления в каталоге услуг //------------------------------------------------------------------ // Поднятие закрепления в каталоге услуг case 159: // В лендинге // В лендинге case 160: // В корневом разделе // В корневом разделе case 161: // В разделе // В разделе case 162: // В подразделе // В подразделе case 193: //Оплата из буфера $success = false; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/tservices/tservices_binds.php'; $tservices_binds = new tservices_binds(tservices_binds::KIND_LANDING); $tservices_binds->setKindByOpCode($_op_code); $bind = $tservices_binds->getItemById($order['src_id']); $tservices_binds->makeUpInfo($bind); if ($tservices_binds->bind_info) { $ret = $this->account->Buy($account_operation_id, $this->transaction, $order['op_code'], $this->user['uid'], $tservices_binds->bind_info['descr'], $tservices_binds->bind_info['comment'], $order['ammount']); if ($ret === 0) { $success = $tservices_binds->update(); } } break; } if ($success) { $update = array('status' => self::STATUS_COMPLETE); $this->update($order['id'], $update); $memBuff = new memBuff(); $memBuff->delete('last_operation_' . $order['uid'] . '_' . $order['service']); //Если только что была оплата из яндекс.кассы if ($this->paymentSysParams['invoiceId']) { //Фиксируем ID транзакции $label = op_codes::getLabel($order['op_code']); if (isset($account_operation_id) && $account_operation_id > 0) { $label = (empty($label) ? '' : "{$label},") . "trans_{$account_operation_id}"; } // Посылаем данные о покупке в google analytics $this->_db->query("SELECT pgq.insert_event('statistic', 'service_payed', ?)", http_build_query(array('is_emp' => is_emp($this->user['role']), 'label' => $label, 'ammount' => floatval($order['ammount']), 'cid' => $this->getCid()))); } } return $success; }
/** * Разрешить отправку сообщений. * * @global type $DB * * @param type $to_id * @param type $from_id * * @return bool */ public static function setIsAllowed($to_id, $from_id, $stop_check = false) { global $DB; if (!$stop_check && self::_isAllowed($to_id, $from_id)) { return true; } $DB->val(' INSERT INTO ' . self::TABLE_ALLOWED . ' (to_id, from_id) SELECT ?i, ?i WHERE NOT EXISTS(SELECT 1 FROM ' . self::TABLE_ALLOWED . ' WHERE to_id = ?i AND from_id = ?i LIMIT 1); ', $to_id, $from_id, $to_id, $from_id); $mem = new memBuff(); $cache_tag_key = sprintf(self::CACHE_TAG_IS_ALLOWED, $from_id); $mem->delete($cache_tag_key); if (is_beta()) { require_once ABS_PATH . '/classes/log.php'; $log = new log('debug/0029319-%d%m%Y.log'); $log->writeln('----- ' . date('d.m.Y H:i:s')); $log->writeln("to_id = {$to_id}, from_id = {$from_id}"); } }
/** * Осуществляет операцию Зачисление ЯД. * * @param float $tr_amt сумма платежа * @param string $dstacnt_nr номер счета (кошелька) ЯД * @param string $cont основание для зачисления платежа * * @return float зачисленная сумма */ public function pay($tr_amt = null, $dstacnt_nr = null, $cont = null) { $this->_pdata = array('tr_amt' => $tr_amt, 'dstacnt_nr' => $dstacnt_nr, 'cont' => $cont); if ($this->_initPayment()) { if ($this->_initTr()) { $this->_analyzeTr(); } $this->_commitPayment(); } $this->log("Зачислено:\t{$this->_performedAmt}"); $this->pmt = $this->_pmt; $this->tr = $this->_tr ? $this->_tr : $this->_pdata; $memBuff = new memBuff(); $memBuff->delete(self::BALANCE_MEM_KEY); return $this->_performedAmt; }
/** * Захват/перехват потока пользователем * * @param int $content_id идентификатор сущности из admin_contents * @param string $stream_id идентификатор потока * @param int $user_id UID пользователя * @return string идентификатор захваченного потока - успех, пустая строка - провал */ function chooseStream($content_id = 0, $stream_id = '', $user_id = 0) { $sStreamId = ''; if ($this->content_streams === false || $this->first_update === false || $this->last_update === false) { $this->_initStreams(); } else { if (isset($this->content_streams[$content_id]) && count($this->content_streams[$content_id])) { $bChoose = false; foreach ($this->content_streams[$content_id] as $sKey => $aOne) { if ($aOne['stream_id'] == $stream_id) { if ($aOne['admin_id'] == $user_id) { // пользователь пытается захватить свой же поток $sStreamId = 'user_id'; } else { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $users = new users(); $login = $users->GetField($user_id, $error, 'login'); if (empty($aOne['admin_id'])) { // захват свободного потока $bChoose = true; $aOne['resolve_cnt'] = 0; } $aOne['admin_id'] = $user_id; $aOne['admin_name'] = iconv('CP1251', 'UTF-8', $login); $aOne['time'] = time(); $this->content_streams[$content_id][$sKey] = $aOne; $sStreamId = $stream_id; } break; } } if ($bChoose) { $stream_num = $this->_countChosenStreams($content_id, $stream_id); if ($stream_num !== false) { $nLimit = $content_id == self::MODER_MSSAGES ? self::MESSAGES_PER_PAGE : self::CONTENTS_PER_PAGE; $this->chooseContent($content_id, $stream_id, $stream_num, $nLimit); $memBuff = new memBuff(); $memBuff->delete('ucs_streams_queue'); } } } $this->last_update = time(); $this->_saveStreams(); } return $sStreamId; }
/** * Инкементирует количество переходов на работу в портфолио пользователя с платного размещения * @param integer $portf_id id портфолио * @param integer $user_id uid пользователя * @param integer $prof_id id размещения в каталоге (из таблицы professions) * @return boolean успех операции */ function IncJump2WorkCount($portf_id, $user_id, $prof_id) { global $DB; $sql = "UPDATE ufp_portfolio p\n SET jumptowork_count = jumptowork_count + 1\n FROM users_first_page ufp\n WHERE ufp.user_id = ?i\n AND ufp.profession = ?i\n AND ufp.payed = true\n AND ufp.from_date <= now() AND ufp.from_date + ufp.to_date >= now()\n AND p.portfolio_id = ?i\n AND p.ufp_description_id = ufp.ufp_description_id\n RETURNING ufp.id"; $ufp_id = $DB->val($sql, $user_id, $prof_id, $portf_id); if ($ufp_id) { $mc = new memBuff(); $mckey = "firstpage.mg_rightContent.{$ufp_id}."; $mc->delete($mckey . '1'); // убираем из кэша только авторский вариант вывода, т.к. там обновляется статистика. return 1; } return NULL; }
/** * Посылает ответ сервису ifree, который в свою очередь пересылает ее в виде SMS абоненту, и завершает работу. * @param string $sms текст сообщения */ private function _response($sms) { if ($this->_oplock) { $mcache = new memBuff(); $mcache->delete($this->_oplock); } die('<Response><SmsText><![CDATA[' . iconv('windows-1251', 'UTF-8', 'Free-lance.ru. ' . $sms) . ']]></SmsText></Response>'); }
/** * Выполняет покупку. */ public function order() { //Запрещаем вывод ошибок $this->db()->error_output = false; $orderid = $_GET['orderid']; if (!$orderid) { exit; } $json_data = array('status' => '0', 'time' => time()); $payment = $this->getPayment($orderid); if ($payment) { $data = isset($_REQUEST['data']) && is_array($_REQUEST['data']) ? $_REQUEST['data'] : array(); $sig = $this->getSig($payment['price'], $orderid, $payment['billing_id'], $data); if ($sig == $_GET['sig']) { $json_data['status'] = '1'; $op_id = 0; //Занесли деньги $account = new account(); $error = $account->deposit($op_id, $payment['billing_id'], $payment['price'], "Платеж через \"Плати потом\". Сумма - {$payment['price']}, номер покупки - {$orderid}", self::PAYMENT_CODE, $payment['price']); if (!$error) { //Пробуем купить $billing = new billing($account->uid); $billing->buyOrder($payment['bill_reserve_id'], 12, array()); $this->db()->query("DELETE FROM {$this->TABLE} WHERE id = ?", $orderid); $memBuff = new memBuff(); $memBuff->delete('platipotom_max_price_' . $account->uid); } } } return $json_data; }
<?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; }
/** * Залогинивает юзера. Возвращает UID юзера. Выставляет куки "автологина". * ВНИМАНИЕ! возвращает UID юзера, если находит его. Либо возвращает * 0 - не найден * -1 - аккаунт забанен * -2 - аккаунт неактивирован * -3 - IP не входит в список IP разрешенных пользователем * -4 - требуется 2ой этап авторизации * * @param string $login логин юзера * @param string $pwd пароль * @param integer $autologin флаг "автологина" * @return integer UID юзера */ function login($login, $pwd, $autologin = 0, $annoy_check = true) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/annoy.php"; $annoy = new annoy(); $user = new users(); if ($annoy_check) { if (intval($_SESSION['login_wait_time']) > time()) { $redirect_checkpass = true; } else { // Проверить сколько раз воодился пароль if (isset($_SESSION['login_wait_time'])) { $annoy->Clear(getRemoteIP()); } $login_count = $annoy->Check(getRemoteIP()); if ($login_count >= $GLOBALS['max_login_tries']) { $_SESSION['login_wait_time'] = time() + $GLOBALS['login_wait_time'] * 60; $redirect_checkpass = true; } } if ($redirect_checkpass == true) { header("Location: /checkpass.php"); exit; } } //Получаем логин и проверяем счетчик $_uid = $user->getUidByLoginEmailPhone($login); if ($_uid > 0 && !$annoy->allowRepeatPass($_uid)) { header("Location: /banned.php"); exit; } //@todo: нет проверок наличия ключей $t_filter_prj = $_SESSION['f_project_filter']; $t_filter_frl = $_SESSION['f_freelancers_filter']; $t_ref_uri2 = $_SESSION['ref_uri2']; $adCatalog = $_SESSION['toppayed_catalog']; $adMain = $_SESSION['toppayed_main']; $adHead = $_SESSION['toppayed_head']; $adText = $_SESSION['toppayed_text']; $masssending = $_SESSION['masssending']; $newPrjName = $_SESSION['new_project_name']; $newPrjCost = $_SESSION['new_project_cost']; //Сохраняем значение типа 2хэпапной авторизации перед очисткой сессии $_2fa_provider = isset($_SESSION['2fa_provider']) ? $_SESSION['2fa_provider'] : null; $_2fa_redirect = isset($_SESSION['2fa_redirect']) ? $_SESSION['2fa_redirect'] : null; //Переносим хеши ссылок на уже зафиксированные местки для юзера при выходе/входе $_ga_stat_url_hash = isset($_SESSION['ga_stat_url_hash']) ? $_SESSION['ga_stat_url_hash'] : null; //Последняя посещенная страница $_ref_uri = isset($_SESSION['ref_uri']) ? $_SESSION['ref_uri'] : null; $_pda = isset($_SESSION['pda']) ? $_SESSION['pda'] : null; $_customer_wizard = isset($_SESSION['customer_wizard']) ? $_SESSION['customer_wizard'] : null; session_unset(); if ($_customer_wizard) { $_SESSION['customer_wizard'] = $_customer_wizard; } if ($_pda) { $_SESSION['pda'] = $_pda; } if ($_ref_uri) { $_SESSION['ref_uri'] = $_ref_uri; } //Воссанавливаем значение хешей ссылок if ($_ga_stat_url_hash) { $_SESSION['ga_stat_url_hash'] = $_ga_stat_url_hash; } //Востанавливаем значение 2хэпапной авторизации после очистки сессии if ($_2fa_provider !== null) { $_SESSION['2fa_provider'] = $_2fa_provider; } if ($_2fa_redirect !== null) { $_SESSION['2fa_redirect'] = $_2fa_redirect; } //Выключаем проверку 2ого этапа авторизации //если это вход из куки или еще откуда (но неявно от пользователя) //где мы уже уверены что 2этапа пройдены ранее юзером $is_2fa_off = $annoy_check === false; //Авторизация $id = $user->Auth($login, $pwd, $_SESSION, $is_2fa_off); //Считаем и блокируем по количеству неудачных авторизаций if (!$id && $_uid > 0) { $annoy->wrongRepeatPass($_uid); } //Успешная авторизация if ($id > 0) { $annoy->clearRepeatPass($id); require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/payed.php"; $pro_last = payed::ProLast($_SESSION['login']); //Покупал ли пользователь ПРО 1 мес и более или тестовый if (!is_emp()) { $_SESSION['is_was_pro'] = $pro_last ? true : payed::isWasPro($_SESSION['uid']); } $_SESSION['pro_last'] = $pro_last['is_freezed'] ? false : $pro_last['cnt']; if ($_SESSION['pro_last'] && $_SESSION['is_pro_new'] != 't') { payed::checkNewPro($id); } if ($pro_last['freeze_to']) { $_SESSION['freeze_from'] = $pro_last['freeze_from']; $_SESSION['freeze_to'] = $pro_last['freeze_to']; $_SESSION['is_freezed'] = $pro_last['is_freezed']; $_SESSION['payed_to'] = $pro_last['cnt']; } if ($_SESSION['anti_login']) { $pro_last = payed::ProLast($_SESSION['anti_login']); $_SESSION['anti_pro_last'] = $pro_last['freeze_to'] ? false : $pro_last['cnt']; } require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/memBuff.php"; $memBuff = new memBuff(); $memBuff->delete("msgsCnt{$id}"); //Получение спецализаций фрилансера if (!is_emp()) { require_once ABS_PATH . "/classes/freelancer.php"; $specData = freelancer::getAllSpecAndGroup($id, is_pro()); $_SESSION['specs'] = $specData['specs']; //Список специализаций $_SESSION['groups'] = $specData['groups']; //Список групп //@todo: пока не используется //$_SESSION['specs_tree'] = $specData['specs_tree']; //Ввиде древа группа > специализации } require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/drafts.php"; $iDraftsCount = drafts::getCount($id); $_SESSION['drafts_count'] = $iDraftsCount; if ($autologin == 1) { setcookie('id', $id, time() + 60 * 60 * 24 * 30, '/', $GLOBALS['domain4cookie'], COOKIE_SECURE, true); setcookie('name', $login, time() + 60 * 60 * 24 * 30, '/', $GLOBALS['domain4cookie'], COOKIE_SECURE); setcookie('pwd', users::cookieHashPasswd($id), time() + 60 * 60 * 24 * 30, '/', $GLOBALS['domain4cookie'], COOKIE_SECURE, true); } $_SESSION['f_project_filter'] = $t_filter_prj; $_SESSION['f_freelancers_filter'] = $t_filter_frl; $_SESSION['ref_uri2'] = $t_ref_uri2; $_SESSION['toppayed_catalog'] = $adCatalog; $_SESSION['toppayed_main'] = $adMain; $_SESSION['toppayed_head'] = $adHead; $_SESSION['toppayed_text'] = $adText; if ($masssending) { $_SESSION['masssending'] = $masssending; } $_SESSION['new_project_name'] = $newPrjName; $_SESSION['new_project_cost'] = $newPrjCost; if ($t_filter_prj) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_filter.php"; $prj_filter = new projects_filters(); $prj_filter->SaveFromAnon(); } if ($t_filter_frl) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/freelancers_filter.php"; $frl_filter = new freelancers_filters(); $frl_filter->SaveFromAnon(); } //var_dump($_SESSION['customer_wizard']); //var_dump($_SESSION['customer_wizard_filled']); //exit; //Если заказчик пытается опубликовать проект через мастер то публикуем после авторизации if (is_emp() && isset($_SESSION['customer_wizard']['filled'])) { require_once ABS_PATH . '/guest/models/GuestActivationModel.php'; $_SESSION['ref_uri'] = GuestActivationModel::model()->published($id, $_SESSION['email']); } } // случайное число, используемое в get/post запросах для защиты. if (!$_SESSION['rand']) { $_SESSION['rand'] = csrf_token(); } return $id; }
/** * Совершить покупку * * @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; }
/** * Обновляем или записываем данные по конкретному дню. * * @global type $DB * * @param array $edate Данные для обновления * @param string $act Действие функции (обновить или записать новую запись) * * @return type */ public function updateExcDays($edate, $act = 'update') { global $DB; $mem = new memBuff(); $mem->delete("exc_days_{$edate['year']}"); if ($act == 'update') { $sql = 'UPDATE exception_date SET holidays = ?, workdays = ? WHERE id = ?i'; $res = $DB->query($sql, $edate['holidays'], $edate['workdays'], $edate['id']); } else { $sql = 'INSERT INTO exception_date (year, holidays, workdays) VALUES(?, ?, ?)'; $res = $DB->query($sql, $edate['year'], $edate['holidays'], $edate['workdays']); } return $res; }
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) { unset($_SESSION['quickmas_is_begin']);
/** * Удаляем кеш тк прочитали сообщения. * * @param type $user_id */ public function markReadComments($user_id) { $memBuff = new memBuff(); $memBuff->delete('prjMsgsCnt' . $user_id); $memBuff->delete('prjMsgsCntWst' . $user_id); }
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 $user_id id фрилансера * * @return string сообщение об ошибке, в случае неуспеха */ public function ResetAllEvents($frl_id) { global $DB; if (!is_array($prj_id)) { $prj_id = array($prj_id); } $sql = 'UPDATE projects_offers SET po_frl_read = true WHERE user_id = ?i AND po_frl_read = false'; $DB->query($sql, $frl_id); $mem = new memBuff(); $mem->delete('prjEventsCnt' . $frl_id); $mem->delete('prjEventsCntWst' . $frl_id); $mem->delete('prjMsgsCnt' . $frl_id); $mem->delete('prjMsgsCntWst' . $frl_id); return $DB->error; }