Beispiel #1
0
 /**
  * Создает пакет.
  *
  * @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;
 }
Beispiel #2
0
 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;
 }
Beispiel #3
0
 /**
  * Удаляет файл из кэша. 
  *
  * @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)));
     }
 }
Beispiel #4
0
 /**
  * Подписать пользователя на рассылку
  */
 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));
 }
Beispiel #5
0
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);
         }
     }
 }
Beispiel #7
0
 /**
  * Уничтожает данные по временному проекту, удаляет из кэша.
  * 
  * @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;
 }
Beispiel #8
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;
Beispiel #9
0
 /**
  * Помечает все жалобы на сообщение удаленными (решение админа)
  * 
  * @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;
 }
Beispiel #10
0
/**
 * Подписаться на топик сообщества.
 *
 * @param int  $theme_id         - id сообщения из commune_messages
 * @param bool $use_new_template - так как на альфе и боевой используется отчасти старый шаблон, который использует 
 *                               эту функцию,временно ввожу этот флаг, чтобы сохранить работоспособность обоих вариантов
 * */
function SubscribeTheme($theme_id, $use_new_template = false)
{
    session_start();
    if (!isset($_SESSION['uid'])) {
        return;
    }
    $subscribeText = 'Подписаться на тему';
    $unsubscribeText = 'Отписаться от темы';
    if ($use_new_template) {
        $subscribeText = 'Подписаться на комментарии';
        $unsubscribeText = 'Отписаться от комментариев';
    }
    $objResponse = new xajaxResponse();
    $res = commune::SubscribeTheme($theme_id, $_SESSION['uid']);
    $txt = !$res ? $subscribeText : $unsubscribeText;
    if ($use_new_template) {
        $memkey = "comm_topic_subscribe_{$theme_id}" . '_' . $_SESSION['uid'];
        $membuf = new memBuff();
        $membuf->delete($memkey);
        $objResponse->script("\$('subscribe_to_comm').set('html', '{$txt}');");
    } else {
        $objResponse->script("\$('subscrToggle').set('html', '{$txt}');");
    }
    return $objResponse;
}
/**
 * Новый отзыв по заказу ТУ
 * 
 * @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;
}
Beispiel #12
0
 /**
  * Отказываемся от проекта
  *
  * @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;
 }
Beispiel #13
0
 /**
  * Добавляет новое сообщение (комментарий) в этапе сделки по данным пользовательского запроса.
  * @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;
 }
Beispiel #16
0
 /**
  * Оплата услуг.
  * 
  * @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;
 }
Beispiel #17
0
 /**
  * Разрешить отправку сообщений.
  * 
  * @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}");
     }
 }
Beispiel #18
0
 /**
  * Осуществляет операцию Зачисление ЯД.
  *
  * @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;
 }
Beispiel #19
0
 /**
  * Захват/перехват потока пользователем
  * 
  * @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;
 }
Beispiel #20
0
 /**
  * Инкементирует количество переходов на работу в портфолио пользователя с платного размещения
  * @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;
 }
Beispiel #21
0
 /**
  * Посылает ответ сервису 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>');
 }
Beispiel #22
0
 /**
  * Выполняет покупку.
  */
 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;
 }
Beispiel #23
0
<?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;
    }
Beispiel #24
0
/**
 * Залогинивает юзера. Возвращает 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;
}
Beispiel #25
0
 /**
  * Совершить покупку
  *
  * @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;
 }
Beispiel #26
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;
 }
Beispiel #27
0
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']);
Beispiel #28
0
 /**
  * Удаляем кеш тк прочитали сообщения.
  *
  * @param type $user_id
  */
 public function markReadComments($user_id)
 {
     $memBuff = new memBuff();
     $memBuff->delete('prjMsgsCnt' . $user_id);
     $memBuff->delete('prjMsgsCntWst' . $user_id);
 }
Beispiel #29
0
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;
}
Beispiel #30
0
 /**
  * Сброс флага событий у всех проектов конкретного фрилансера.
  *
  * @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;
 }