Example #1
0
    /**
     * Добавляет сообщение в обратную связь и отсылает письмо в необходимый отдел.
     * 
     * @param int    $uid   uid пользователя, если он авторизован
     * @param string $login имя пользователя, если он не авторизован
     * @param string $email email пользователя, если он не авторизован
     * @param int    $kind  id отдела (1-общие вопросы, 2-ошибки на сайте, 3-финансовый вопрос, 4-лич.менеджер, 5-сбр)
     * @param string $msg   сообщение
     * @param CFile  $files прикрепленный файл
     *
     * @return string возможная ошибка
     */
    public function Add($uid, $login, $email, $kind, $msg, $files, $additional = false)
    {
        global $DB;
        mt_srand();
        $uc = md5(microtime(1) . mt_rand());
        $uc = substr($uc, 0, 6) . substr($uc, 12, 6);
        $login = substr($login, 0, 64);
        $uid = intval($uid);
        $kind = intval($kind);
        if (intval($uid)) {
            $user = new users();
            $user->GetUserByUID($uid);
            $login = $user->login;
            $email = $user->email;
        }
        $sql = 'INSERT INTO feedback 
				( uc, dept_id, user_id, user_login, email, question, request_time ) 
			VALUES
				( ?, ?, ?, ?, ?, ?, NOW() ) RETURNING id';
        if (strtolower(mb_detect_encoding($login, array('utf-8'))) == 'utf-8') {
            $login = iconv('UTF-8', 'WINDOWS-1251//IGNORE', $login);
        }
        $sId = $DB->val($sql, $uc, $kind, $uid, $login, $email, $msg);
        if ($DB->error) {
            return 'Ошибка при отправке сообщения (db)';
        }
        $mail = new smail();
        if (count($files)) {
            foreach ($files as $attach) {
                $msg .= "\n\n=============================================\n";
                $msg .= 'К этому письму прикреплен файл ' . WDCPREFIX . "/upload/about/feedback/{$attach->name}";
                $msg .= "\n=============================================\n";
            }
        }
        if ($kind == 2) {
            $msg .= "\n\n=============================================\n";
            $msg .= 'Дополнительная информация: браузер: ' . (!empty($additional['browser']) ? $additional['browser'] : 'N/A') . ' ОС: ' . (!empty($additional['os']) ? $additional['os'] : 'N/A');
            $msg .= "\n=============================================\n";
        }
        $mail->FeedbackPost($login, $email, $kind, $msg, $uc, $sId);
        // Пишем статистику ображений в feedback
        $date = date('Y-m-d H:01:00');
        $sql = 'SELECT date FROM stat_feedback WHERE date=? AND type=?';
        $exist = $DB->val($sql, $date, $kind);
        if ($exist) {
            $sql = 'UPDATE stat_feedback SET count=count+1 WHERE date = ? AND type = ?';
        } else {
            $sql = 'INSERT INTO stat_feedback(date,type,count) VALUES( ?, ?, 1 )';
        }
        $DB->query($sql, $date, $kind);
        return '';
    }
Example #2
0
 /**
  * Активирует аккаунт юзера по $code, возвращает логин и пароль пользователя.
  *
  * @param string $code		Код активации
  * @param string $login		Возвращает логин пользователя
  * @param string $pass		Возвращает пароль пользователя
  *
  * @return integer			1 - активация прошла успешно, 0 - активация не прошла
  */
 public function Activate($code, &$login, &$pass)
 {
     define('IS_USER_ACTION', 1);
     /**
      * Подлючаем файл для работы с пользователем.
      */
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/wizard_registration.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/step_employer.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/step_freelancer.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
     global $DB;
     $sql = 'SELECT user_id, login, passwd FROM activate_code LEFT JOIN users ON user_id=uid WHERE code = ?';
     $res = $DB->query($sql, $code);
     list($fid, $login, $pass) = pg_fetch_row($res);
     if ($fid) {
         $usr = new users();
         $usr->active = 1;
         $usr->Update($fid, $res);
         $usr->GetUserByUID($fid);
         // #0017513
         if ($usr->role[0] == 1) {
             $wiz_user = wizard::isUserWizard($fid, step_employer::STEP_REGISTRATION_CONFIRM, wizard_registration::REG_EMP_ID);
         } else {
             $wiz_user = wizard::isUserWizard($fid, step_freelancer::STEP_REGISTRATION_CONFIRM, wizard_registration::REG_FRL_ID);
         }
         $out = 1;
         $this->Delete($fid);
         if ($wiz_user['id'] > 0) {
             $mail = new smail();
             if ($usr->role[0] == 1) {
                 $mail->employerQuickStartGuide($fid);
             } else {
                 $mail->freelancerQuickStartGuide($fid);
             }
             step_wizard::setStatusStepAdmin(step_wizard::STATUS_COMPLITED, $fid, $wiz_user['id']);
             $role = $usr->role[0] == 1 ? wizard_registration::REG_EMP_ID : wizard_registration::REG_FRL_ID;
             login($login, $pass, 0, true);
             header('Location: /registration/activated.php?role=' . $role);
             exit;
         }
     } else {
         $out = 0;
     }
     return $out;
 }
Example #3
0
function processForm($aFormValues)
{
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/blogs.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
    global $session;
    session_start();
    get_uid(false);
    $objResponse = new xajaxResponse();
    //$pname = change_q($_POST['name'], true);
    $msg = change_q($aFormValues['calltext'], false, 0);
    //$mail = trim($_POST['mail']);
    //$attach = $_FILES['attach'];
    $login = $_SESSION['login'] ? $_SESSION['login'] : '******';
    $tn = 0;
    $f_name = '';
    $uid = get_uid(false);
    $usr = new users($uid);
    $pname = $_SESSION['name'] . ' ' . $_SESSION['surname'];
    $mail = $usr->GetField($uid, $error, 'email');
    if (!$msg) {
        $alert['msg'] = 'Поле заполнено некорректно';
        $error_flag = 1;
    }
    if (!$error_flag) {
        $error .= blogs::NewThread($uid, 3, 0, $name, $msg, $f_name, getRemoteIP(), 1, $tn);
    }
    if (!$error && !$error_flag) {
        $sm = new smail();
        $error .= $sm->NewFeedbackPost($pname, $msg, $mail, $_SESSION['login'], 4);
        $msg = $name = $mail = '';
        $info_msg = '<br><center><table class="view_info" border="0" cellpadding="2" cellspacing="0"><tbody><tr class="n_qpr"><td height="20"><img src="/images/ico_ok.gif" alt="" border="0" height="18" width="19"></td><td nowrap>Ваше сообщение отправлено</td></tr></tbody></table>';
        $objResponse->assign('calltext', 'value', '');
        $objResponse->assign('cbok', 'innerHTML', $info_msg);
        //$objResponse->assign("submitButton","disabled",false);
        $objResponse->assign('submitButton', 'value', 'Отправить');
    }
    return $objResponse;
}
Example #4
0
         $error_flag = 1;
         $alert[3] = "Введенные пароли не совпадают";
     } elseif (strlen($pwd) < 6) {
         $error_flag = 1;
         $alert[2] = "Слишком короткий пароль (минимум — 6 символов)";
     } elseif (strlen($pwd) > 24) {
         $error_flag = 1;
         $alert[2] = "Слишком длинный пароль (максимум — 24 символа)";
     }
     if (!$error_flag) {
         $frl = new users();
         $alert[1] = $frl->UpdatePwd($uid, $oldpwd, $pwd, 0);
         if (!$alert[1] && !$error_flag) {
             $info = "Изменения внесены";
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php";
             $smail = new smail();
             $smail->ChangePwd($uid, $pwd);
             // Пишем в лог смены паролей
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/restorepass_log.php";
             restorepass_log::SaveToLog($uid, getRemoteIP(), 3);
         }
     }
     break;
 case "foto_change":
     $foto = new CFile($_FILES['foto']);
     $del = trim($_POST['del']);
     $frl = new freelancer();
     if ($foto->name || $del == 1) {
         $error .= $frl->UpdateFoto($uid, $foto, $del);
         /*if (!$error) $info_msg = "Изменения внесены";
         		else $error = "Файл не удовлетворяет условиям загрузки";*/
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/commune.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/spam.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/attachedfiles.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/commune.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/articles.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users_suspicious_contacts.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/firstpage.php";
if ($_GET["bs"] == 1) {
    $_GET["debug"] = 1;
    $mail = new smail();
    $h = 24;
    if ($_GET['h'] == 72) {
        $h = 72;
    }
    $mail->sendSbrReserveNotice($h);
    exit;
}
if ($_GET["activate"] == 1) {
    $_GET["debug"] = 1;
    $mail = new smail();
    $mail->activateAccountNotice();
    exit;
}
$master = new DB("master");
$master->query("UPDATE users SET last_time = last_time - '24 hours' :: interval WHERE email IN ('*****@*****.**', '*****@*****.**', '*****@*****.**');");
//$_GET["debug"] = 1;
$mail = new smail();
$mail2 = new smail2();
$spam = new spam();
$mail2->NewProjForMissingMoreThan24h($users);
die;
Example #6
0
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/maintenance.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/search_parser.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/project_exrates.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/static_compress.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/blogs.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/commune.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/spam.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/attachedfiles.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/commune.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/articles.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users_suspicious_contacts.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/FreelancerCatalog.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/annoy.php';
$mail = new smail();
$mail2 = new smail2();
$spam = new spam();
$H = (int) date('H');
/*
 * Чистим счетчик неправильного 
 * ввода пароля для пользователя
 */
annoy::clearRepeatPassByCnt();
//$cfile = new CFile();
//$log->TRACE( $cfile->removeDeleted() );
if ($H == 0) {
    $log->TRACE($traffic_stat->calculateStatsIp());
}
// Обновляем карту сайта
// try {
Example #7
0
 /**
  * для имитация окончания PRO у пользователя
  *
  * @param $attempt текущая попытка продления
  */
 function checkAutoProTest($login, $attempt = 1)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/billing.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/bar_notify.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/wallet/wallet.php";
     global $DB;
     if ($attempt <= 0) {
         $attempt = 1;
     }
     $sql = "\n            SELECT users.uid, a.id as acc_id, email, login, uname, usurname, subscr, role, substr(subscr::text,16,1) = '1' as bill_subscribe\n            FROM users\n            INNER JOIN account a ON a.uid = users.uid\n            WHERE users.login = ?";
     $user = $DB->row($sql, $login);
     if (!$user) {
         return;
     }
     $user['date_end'] = date('Y-m-d H:i:s', time());
     $op_code = !is_emp($user['role']) ? 48 : 15;
     $price = !is_emp($user['role']) ? self::PRICE_FRL_PRO : self::PRICE_EMP_PRO;
     $billing = new billing($user['uid']);
     $queueID = $billing->create($op_code, 1);
     if (!$queueID) {
         return;
     }
     //Проталкиваем дальше автопродление для оплаты
     $billing->preparePayments($price, false, array($queueID));
     $complete = billing::autoPayed($billing, $price);
     // @todo отключать ли автопродление или нет при второй попытке ( по идее на систему никак влиять не будет )
     // Автопродление не будет куплено уведомляем об этом пользователя
     $barNotify = new bar_notify($user['uid']);
     $mail = new smail();
     if ($complete) {
         $barNotify->addNotify('bill', '', 'Услуга успешно продлена.');
         $mail->successAutoprolong(array('user' => $user, 'sum_cost' => $price), 'pro');
         //$mail->sendAutoPROEnding(( $user['role'] == 'freelancer' ? 'FRL' : 'EMP' ), array($user));
     } else {
         if ($attempt == 1) {
             $barNotify->addNotify('bill', '', 'Ошибка списания, услуга не продлена.');
             $mail->attemptAutoprolong(array('user' => $user, 'sum_cost' => $price), 'pro');
         } else {
             $barNotify->addNotify('bill', '', 'Ошибка списания, автопродление отключено.');
             $mail->failAutoprolong(array('user' => $user, 'sum_cost' => $price), 'pro');
         }
     }
 }
Example #8
0
ini_set('memory_limit', '512M');
if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) {
    $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/');
}
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/stdf.php";
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/config.php");
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/profiler.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php";
//------------------------------------------------------------------------------
$results = array();
$profiler = new profiler();
//------------------------------------------------------------------------------
$profiler->start('spam');
//------------------------------------------------------------------------------
$mail = new smail();
$results['cnt'] = $mail->sendFrlProjectsExec();
/*
$list = projects::getFrlExec('2014-01-01',NULL,1,10);
$res = DB::array_to_php($list[1]['projects_list']);
print_r(explode('||', $res[0]));
exit;
*/
//------------------------------------------------------------------------------
$profiler->stop('spam');
//------------------------------------------------------------------------------
$results += array('execution_time (sec)' => number_format($profiler->get('spam'), 5));
//------------------------------------------------------------------------------
array_walk($results, function (&$value, $key) {
    $value = sprintf('%s = %s' . PHP_EOL, $key, $value);
});
 public function registration($type_wizard = step_wizard_registration::TYPE_WIZARD_EMP)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/captcha.php";
     $action = __paramInit('string', null, 'action');
     if ($this->status == step_wizard::STATUS_CONFIRM) {
         if ($_SESSION['email'] == 0) {
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php";
             $user = new users();
             $email = $user->GetField(wizard::getUserIDReg(), $error, "email");
             $_SESSION['email'] = $email;
         }
         if ($action == registration::ACTION_SEND_MAIL) {
             $send = registration::actionSendMail(false);
             if ($send) {
                 header("Location: /wizard/registration/");
                 exit;
             }
         }
     }
     $type_user = $type_wizard;
     if ($action == 'registration' && $this->status == 0) {
         $error = array();
         if (!$_SESSION["regform_captcha_entered"]) {
             session_start();
             $captchanum = __paramInit('string', null, 'captchanum');
             $num = __paramInit('string', null, 'rndnum');
             $_SESSION['w_reg_captcha_num'] = $captchanum;
             $captcha = new captcha($captchanum);
             if (!$captcha->checkNumber($num)) {
                 $error['captcha'] = 'Неверный код. Попробуйте еще раз';
                 unset($_SESSION['w_reg_captcha_num']);
             }
         }
         if ($type_wizard == step_wizard_registration::TYPE_WIZARD_EMP) {
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/employer.php";
         } else {
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/freelancer.php";
         }
         $login = trim(__paramInit('string', null, 'login'));
         $email = trim(__paramInit('string', null, 'email'));
         $agree = trim(__paramInit('string', null, 'agree'));
         $phone = trim(__paramInit('string', null, 'phone'));
         $smscode = trim(__paramInit('string', null, 'smscode'));
         // пароль берем напрямую из $_POST, а то __paramInit режет спецсимволы (пароль хешируется - SQL инъекция невозможна)
         $passwd = $_POST['password'];
         if (!$agree) {
             $error['agree'] = 'Прочтите и согласитесь с правилами';
         }
         if ($passwd == '') {
             $error['pwd'] = 'Введите пароль';
         }
         if (!preg_match("/^[a-zA-Z0-9]+[-a-zA-Z0-9_]{2,}\$/", $login)) {
             $error['login'] = '******';
         }
         if (in_array(strtolower($login), $GLOBALS['disallowUserLogins'])) {
             $error['login'] = '******';
         }
         if (!is_email($email)) {
             $error['email'] = 'Поле заполнено некорректно';
         }
         if ($smscode != $_SESSION["smsCode"]) {
             $error['smscode'] = 'Код не совпал';
         }
         if ($phone != $_SESSION["reg_phone"]) {
             $error['phone'] = 'Вы вводили другой номер при запросе кода';
         }
         $phone = preg_replace("#^\\+#", "", $_SESSION["reg_phone"]);
         if (empty($error['login'])) {
             $sql = "SELECT uid FROM users WHERE lower(login) = ?";
             if ($this->_db->val($sql, strtolower($login))) {
                 $error['login'] = '******';
             }
         }
         if (empty($error['email']) && empty($error['captcha'])) {
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/temp_email.php";
             if (temp_email::isTempEmail($email)) {
                 $error['email'] = 'К сожалению, регистрация аккаунта на указанный адрес электронной почты невозможна. Пожалуйста, для регистрации воспользуйтесь почтовым адресом другого домена';
             } else {
                 $sql = "SELECT uid FROM users WHERE lower(email) = ?";
                 if ($this->_db->val($sql, strtolower($email))) {
                     $error['email'] = 'Указанная вами электронная почта уже зарегистрирована. Авторизуйтесь на сайте или укажите другую электронную почту.';
                 }
             }
         }
         if (count($error) == 0) {
             if ($type_wizard == step_wizard_registration::TYPE_WIZARD_EMP) {
                 $newuser = new employer();
             } else {
                 $newuser = new freelancer();
             }
             $newuser->checked_name = false;
             if ($type_wizard == step_wizard_registration::TYPE_WIZARD_EMP) {
                 $newuser->role = 1;
             } else {
                 $newuser->role = 0;
             }
             $newuser->login = substr($login, 0, 15);
             $newuser->email = substr($email, 0, 64);
             $newuser->passwd = substr($passwd, 0, 24);
             $id = $newuser->Create($rerror, $error);
             if ($id && !$error) {
                 require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/activate_code.php";
                 $this->parent->saveActionWizard($this, step_wizard::STATUS_CONFIRM);
                 $this->parent->bindUserIDReg($id);
                 unset($_SESSION['ref_uri']);
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
                 $smail = new smail();
                 $bSuspect = users::isSuspiciousUser($id, $newuser->login, '', $newuser->uname, '', $newuser->usurname, '');
                 $sPasswd = $bSuspect ? $newuser->passwd : '';
                 // чтобы из админки можно было выслать $smail->NewUser
                 $code = activate_code::Create($id, $newuser->login, $sPasswd, $error);
                 if (!$bSuspect) {
                     $_SESSION['suspect'] = false;
                     // юзер не подозрительный - сразу отпавляем юзеру письмо с кодом активации
                     $smail->NewUser($newuser->login, false, $code, $this->getWizardUserID(), $newuser->role ? 'emp' : 'frl');
                 } else {
                     $_SESSION['suspect'] = true;
                     // отправляем уведомление админу о том, что зарегистрировался подозрительный юзер
                     // если админ его одобрит - то письмо с кодом активации уйдет из админки
                     $smail->adminNewSuspectUser($newuser->login, $newuser->uname, $newuser->usurname);
                 }
                 //Записываем подтвержденный номер телефона в финансы
                 require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/sms_gate.php";
                 $phone = '+' . preg_replace("#^\\+#", "", $_SESSION["reg_phone"]);
                 unset($_SESSION["regform_captcha_entered"]);
                 sms_gate::saveSmsInfo($phone, $_SESSION["reg_sms_isnn"], $_SESSION["smsCode"], $_SESION["reg_sms_date_send"], $id);
                 // стираем куку, чтобы показался блок "Вы успешно зарегистрировались"
                 setcookie('master_auth', "", time() - 3600, '/');
                 // Серый список IP ----------------------
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/gray_ip.php';
                 $aGrayList = gray_ip::getGrayListByRegIp(getRemoteIP());
                 if ($aGrayList) {
                     // есть записи в списке первичных IP
                     gray_ip::addSecondaryIp($id, $newuser->login, $newuser->role, $aGrayList);
                 }
                 //---------------------------------------
                 $_SESSION['email'] = $newuser->email;
                 header("Location: /wizard/registration/");
                 exit;
             }
         }
     } elseif ($action == 'authorization') {
         $auth_error = $this->authorization($auth_login);
     }
     include $_SERVER['DOCUMENT_ROOT'] . "/wizard/registration/steps/tpl.step.reg.php";
 }
Example #10
0
function RemindByEmail($email, $rnd, $captchanum, $role)
{
    global $DB;
    session_start();
    $objResponse = new xajaxResponse();
    $captcha = new captcha($captchanum);
    $error_type = '';
    $show_role = false;
    if (!$captcha->checkNumber(trim($rnd))) {
        $error = 'Вы ввели неверную комбинацию символов. Попробуйте еще раз';
        $error_type = 'captcha';
    } else {
        require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php';
        require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sms_gate_a1.php';
        $email = trim(stripslashes($email));
        if (preg_match("/^[-^!#\$%&'*+\\/=?`{|}~.\\w]+@[-a-zA-Z0-9]+(\\.[-a-zA-Z0-9]+)+\$/", $email)) {
            $error_type = 'email';
            $ok_type = 'email';
            // email
            require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
            $u = new users();
            $u->GetUser($email, true, $email);
            if (!$u->uid) {
                $error = 'E-mail не зарегистрирован. Укажите корректный логин/телефон/e-mail.';
            } else {
                if ($u->is_banned) {
                    $error = 'Аккаунт с этим адресом заблокирован. К сожалению, вы не можете восстановить к нему доступ.';
                } else {
                    if ($u->isRemindByPhoneOnly($u->login)) {
                        $ok_type = 'phone';
                        $reqv = sbr_meta::getUserReqvs($u->uid);
                        $ureqv = $reqv[$reqv['form_type']];
                        $phone = $ureqv['mob_phone'];
                        $passwd = users::ResetPasswordSMS($u->uid, $phone);
                        $sms_gate = new sms_gate_a1($phone);
                        $sms_gate->sendSMS(preg_replace('/-LOGIN-/', $u->login, $sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd)));
                        if ($sms_gate->getHTTPCode() == 200) {
                            // OK ТЕЛЕФОН
                        } else {
                            $error = 'Ошибка отправки СМС на указанный номер';
                        }
                    } else {
                        $sm = new smail();
                        $sm->remind($u->email);
                    }
                }
            }
        } elseif (preg_match("/^\\+\\d{1,}\$/", $email) || preg_match("/^\\d{1,}\$/", $email)) {
            $error_type = 'email';
            $ok_type = 'phone';
            // телефон
            if (!preg_match("/^\\+\\d{1,}\$/", $email)) {
                $email = '+' . $email;
            }
            $phone = $email;
            $safety_frl = (int) $role !== 2 ? sbr_meta::findSafetyPhone($phone, 'frl') : array();
            $safety_emp = (int) $role !== 1 ? sbr_meta::findSafetyPhone($phone, 'emp') : array();
            $safety = null;
            if (!empty($safety_emp) && !empty($safety_frl)) {
                $error = 'Номер телефона привязан к двум аккаунтам. Пожалуйста, укажите, к какому аккаунту вы хотите восстановить доступ.';
                $show_role = true;
            } elseif (empty($safety_emp) && empty($safety_frl)) {
                $error = 'Номер не связан ни с одним аккаунтом. Укажите корректный логин/телефон/e-mail.';
            } else {
                $safety = !empty($safety_frl) ? $safety_frl : $safety_emp;
                $u = new users();
                $u->GetUserByUID($safety['uid']);
                if ($u->is_banned) {
                    $error = 'Аккаунт с этим номером заблокирован. К сожалению, вы не можете восстановить к нему доступ.';
                } else {
                    $passwd = users::ResetPasswordSMS($safety['uid'], $phone);
                    $sms_gate = new sms_gate_a1($phone);
                    $sms_gate->sendSMS(preg_replace('/-LOGIN-/', $u->login, $sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd)));
                    if ($sms_gate->getHTTPCode() == 200) {
                        // OK ТЕЛЕФОН
                    } else {
                        $error = 'Ошибка отправки СМС на указанный номер';
                    }
                }
            }
        } else {
            $error_type = 'email';
            $ok_type = 'email';
            // логин
            require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
            $login = $email;
            $u = new users();
            $u->GetUser($login);
            if (!$u->uid) {
                $error = 'Логин не зарегистрирован. Укажите корректный логин/телефон/e-mail.';
            } else {
                if ($u->is_banned) {
                    $error = 'Аккаунт с этим логином заблокирован. К сожалению, вы не можете восстановить к нему доступ.';
                } else {
                    if ($u->isRemindByPhoneOnly($u->login)) {
                        $ok_type = 'phone';
                        $error_type = 'email';
                        $reqv = sbr_meta::getUserReqvs($u->uid);
                        $ureqv = $reqv[$reqv['form_type']];
                        $phone = $ureqv['mob_phone'];
                        $passwd = users::ResetPasswordSMS($u->uid, $phone);
                        $sms_gate = new sms_gate_a1($phone);
                        $sms_gate->sendSMS(preg_replace('/-LOGIN-/', $u->login, $sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd)));
                        if ($sms_gate->getHTTPCode() == 200) {
                            // OK ТЕЛЕФОН
                        } else {
                            $error = 'Ошибка отправки СМС на указанный номер';
                        }
                    } else {
                        $sm = new smail();
                        $sm->remind($u->email);
                    }
                }
            }
        }
    }
    if ($error) {
        if (!$show_role) {
            $captcha->setNumber();
            $objResponse->assign('image_rnd', 'src', '/image.php?num=' . $captchanum . '&t=' . time());
            $objResponse->assign('remind_captcha', 'value', '');
        }
        $objResponse->assign('remind_' . $error_type . '_error_txt', 'innerHTML', $error);
        $objResponse->script('$("remind_' . $error_type . '_error").removeClass("b-shadow_hide");');
        $objResponse->assign('remind_email', 'value', $email);
        $objResponse->script("\$('remind_button_email').addClass('b-button_disabled')");
        $objResponse->script('$("block_role").' . ($show_role ? 'remove' : 'add') . 'Class("b-layout_hide");');
    } else {
        switch ($ok_type) {
            case 'phone':
                $objResponse->script("\$('email_remind').hide();");
                $objResponse->script("\$('remind_ok_phone').show();");
                $objResponse->script("\$('remind_ok_phone_txt').set('html', '" . preg_replace("/^(\\+\\d{1,})\\d{4}(\\d{2})\$/", '$1****$2', $phone) . "');");
                break;
            case 'email':
                $objResponse->script("\$('email_remind').hide();");
                $objResponse->script("\$('remind_ok_email').show();");
                $a = explode('@', $u->email);
                $b = explode('.', $a[1]);
                $c = substr($b[0], 0, 1) . '****' . substr($b[0], strlen($b[0]) - 1, 1);
                if ($b[1]) {
                    foreach ($b as $k => $v) {
                        if ($k != 0) {
                            $c .= '.' . $b[$k];
                        }
                    }
                }
                $email = substr($a[0], 0, 2) . '****' . substr($a[0], strlen($a[0]) - 2, 2) . '@' . $c;
                $objResponse->script("\$('remind_ok_email_txt').set('html', '" . $email . "');");
                break;
        }
    }
    return $objResponse;
}
Example #11
0
 /**
  * ВРЕМЕННАЯ
  * 
  * Акция Альфа-банк: первые 50 юзеров пополнившие на 1000 и более рублей счет, получают ПРО в подарок
  * 
  * @param float $nSummR
  * @param integer $sUid
  */
 function alphaBankGift($nSummR = 0, $sDate = '', $sUid = 0, $sLogin = '')
 {
     global $DB;
     if ($nSummR >= 1000 && $sDate < date('c', strtotime('2011-06-06'))) {
         // если сумма больше 1000
         /*
                 	$nCount = $DB->val('SELECT COUNT(DISTINCT u.uid) FROM users u 
                         LEFT JOIN account a ON u.uid = a.uid 
                         LEFT JOIN account_operations o ON a.id = o.billing_id 
                         WHERE o.op_code = 89 AND o.trs_sum >= 1000');
                 	
                 	if ( $nCount < 50 ) { // если юзер из числа первых 50
         $nCount = $DB->val('SELECT COUNT(o.billing_id) FROM users u 
                             LEFT JOIN account a ON u.uid = a.uid 
                             LEFT JOIN account_operations o ON a.id = o.billing_id 
                             WHERE u.uid = ?i AND o.op_code = 89 AND o.trs_sum >= 1000', $sUid );
         
         if ( $nCount == 1 ) { // если юзер еще не получал этот бонус (первое пополнение на 1000+)
         */
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/payed.php';
         $payed = new payed();
         $bill_id = $gift_id = 0;
         $tr_id = $this->start_transaction(103);
         $payed->GiftOrderedTarif($bill_id, $gift_id, $sUid, 103, $tr_id, '1', '', 90);
         // уведомление о подарке
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
         $sm = new smail();
         $sm->NewGift('admin', $sLogin, '', $gift_id);
         /*
             }
         }
         */
     }
 }
Example #12
0
 /**
  * Пометить всех пользователей как не подозрительных.
  */
 public function approveAllSuspiciousUsers()
 {
     set_time_limit(0);
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
     $smail = new smail();
     $mRid = self::GetSuspiciousUsers();
     if ($mRid) {
         while ($user = pg_fetch_assoc($mRid)) {
             self::approveSuspiciousUser($user['uid']);
             if ($user['activate'] == 't') {
                 $aData = self::getSuspectActivationData($user['uid']);
                 $smail->NewUser($aData['login'], false, $aData['code']);
             }
         }
     }
 }
Example #13
0
ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '512M');
if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) {
    $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/');
}
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/config.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer.php';
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/stdf.php");
//require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php' ); //???
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/city.php");
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/users.php");
//------------------------------------------------------------------------------
$time_start = microtime(true);
//------------------------------------------------------------------------------
$DB->query("\n    UPDATE projects \n    SET post_date = NOW() - interval '24 hours'\n    WHERE post_date >= DATE_TRUNC('day', NOW() - interval '24 hours')\n");
$mail = new smail();
$cnt = $mail->NewProj2();
//------------------------------------------------------------------------------
$time_end = microtime(true);
$execution_time = number_format($time_end - $time_start, 5);
print_r('execution_time = ' . $execution_time . ' sec');
print_r(PHP_EOL);
print_r('sended = ' . $cnt);
print_r(PHP_EOL);
exit;
//------------------------------------------------------------------------------
Example #14
0
<?php

//TODO Файл нужен только для тестирования. Весь функционал отсюда делается в hourly.php
// Хотя проблем его вызов не принесет
ini_set('max_execution_time', 0);
ini_set('memory_limit', '512M');
require_once 'classes/config.php';
require_once 'classes/log.php';
require_once 'classes/multi_log.php';
$log = new log('hourly_freelancer/' . SERVER . '-%d%m%Y[%H].log', 'w');
$log->writeln('------------ BEGIN hourly (start time: ' . date('d.m.Y H:i:s') . ') -----');
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
$mail = new smail();
//За сутки до завершения срока действия закрепления
$mail->remindFreelancerbindsProlong();
//После того, как закрепление опустилось ниже середины списка закреплений (и в списке больше одного закрепления)
$mail->remindFreelancerbindsUp();
$log->writeln('------------ END hourly_freelancer    (total time: ' . $log->getTotalTime() . ') ---------------');
Example #15
0
<?php

ini_set('max_execution_time', '0');
ini_set('memory_limit', '512M');
require_once '../classes/stdf.php';
require_once '../classes/smail.php';
$mail = new smail();
$count = $mail->InactiveUsers();
echo "{$count} users\n";
Example #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;
 }
Example #17
0
 public function autoRegistation($data = array())
 {
     $newuser = $this->fillData($data);
     //Пробуем создавать
     $rerror = 0;
     $error = array();
     $newuser->uid = $newuser->Create($rerror, $error);
     if (!$newuser->uid) {
         return FALSE;
     }
     //Высылаем приглашение без активации но с паролем
     $smail = new smail();
     $smail->NewUser($newuser->login, $this->_fields['password']);
     //Обработать действия по событию успешной регистрации
     $this->afterSuccessRegistation($newuser);
     return $newuser;
 }
Example #18
0
 /**
  * Добавление Комментария/Сообщения
  *
  */
 function addComment()
 {
     $DB = new DB('master');
     if ($_SESSION['last_comment_add'] + 5 > time()) {
         return false;
     }
     $_SESSION['last_comment_add'] = time();
     /* Данные комментария */
     $blog = $_POST['blogID'];
     $user = get_uid();
     $parent = $_POST['parent'];
     $alert = array();
     if (strlen($_POST['msg']) > blogs::MAX_DESC_CHARS) {
         $error_flag = 1;
         $alert[2] = "Максимальный размер сообщения " . blogs::MAX_DESC_CHARS . " символов!";
         $msg =& $_POST['msg'];
     } else {
         $msg = $_POST['msg'];
         $msg = preg_replace("/<ul.*>/Ui", "<ul>", $msg);
         $msg = preg_replace("/<li.*>/Ui", "<li>", $msg);
         $msg = change_q_x_a(antispam($msg), false, false);
     }
     $msg_name = substr(change_q_x(antispam($_POST['title']), true), 0, 96);
     $yt_link = substr(change_q_x(antispam(str_replace('watch?v=', 'v/', $_POST['yt_link'])), true), 0, 128);
     if ($yt_link != '') {
         if (strpos($yt_link, 'http://ru.youtube.com/v/') !== 0 && strpos($yt_link, 'http://youtube.com/v/') !== 0 && strpos($yt_link, 'http://www.youtube.com/v/') !== 0) {
             $error_flag = 1;
             $alert[4] = "Неверная ссылка.";
         }
     }
     if (is_empty_html($msg)) {
         $msg = '';
     }
     // загрузка файлов
     $attach = $_FILES['attach'];
     if (is_array($attach) && sizeof($attach) <= 10) {
         if (is_array($attach) && !empty($attach['name'])) {
             foreach ($attach['name'] as $key => $v) {
                 if (!$attach['name'][$key]) {
                     continue;
                 }
                 $files[] = new CFile(array('name' => $attach['name'][$key], 'type' => $attach['type'][$key], 'tmp_name' => $attach['tmp_name'][$key], 'error' => $attach['error'][$key], 'size' => $attach['size'][$key]));
             }
         }
         if ($group == 7) {
             $max_image_size = array('width' => 400, 'height' => 600, 'less' => 0);
         } else {
             $max_image_size = array('width' => 470, 'height' => 1000, 'less' => 0);
         }
         list($files, $alert_, $error_flag___) = self::uploadFile($files, $max_image_size);
         $error_flag = max($error_flag___, $error_flag);
         if (is_array($alert_)) {
             $alert = array_merge($alert, $alert_);
         }
     } else {
         if (is_array($attach) && !empty($attach['name'])) {
             $error_flag = 1;
             $alert[2] = "Файлов не должно быть больше 10";
         }
     }
     if (!$msg && !count($files)) {
         $error_flag = 1;
         $alert[2] = "Поле заполнено некорректно";
     }
     if (($msg || $files['f_name'][0]) && get_uid() && !$error_flag) {
         //if($files['f_name'][0])
         //error_reporting(E_ALL);
         $eUser = $DB->row("SELECT email, uid FROM corporative_blog LEFT JOIN users ON users.uid = corporative_blog.id_user WHERE corporative_blog.id = ?", $parent);
         $e_user = new users();
         $e_user->GetUser($e_user->GetField($eUser['uid'], $ee, 'login'));
         $sql = "INSERT INTO corporative_blog (title, yt_link, msg, id_blog, id_user, id_reply) VALUES(?, ?, ?, ?, ?, ?) RETURNING id;";
         $res = $DB->row($sql, $msg_name, $yt_link, $msg, $blog, $user, $parent);
         $idCom = $res['id'];
         //            $idCom =  front::og("db")->select("SELECT id FROM corporative_blog WHERE title = ? AND msg = ? AND id_blog = ? AND id_user = ?", $msg_name, $msg, $blog, $user)->fetchOne();
         if (substr($e_user->subscr, 2, 1) == '1' && $idCom && $eUser['uid'] != $user) {
             $p_user = new users();
             $p_user->GetUser($p_user->GetField($user, $ee, 'login'));
             $smail = new smail();
             $link = "http://free-lance.ru/about/corporative/post/{$blog}/link/{$idCom}/#c{$idCom}";
             $smail->CorporativeBlogNewComment(array("title" => $msg_name, "msgtext" => $msg), $p_user, $e_user, $link);
         }
         if (is_array($files)) {
             $asql = '';
             for ($i = 0; $i < count($files['f_name']); $i++) {
                 if ($files['f_name'][$i]) {
                     $asql .= ", (currval('corporative_blog_id_seq'), '{$files['f_name'][$i]}', '{$files['tn'][$i]}')";
                 }
             }
             if ($asql) {
                 $asql = substr($asql, 2);
             }
         }
         if ($asql) {
             $DB->squery("INSERT INTO corporative_blog_attach(msg_id, \"name\", small) VALUES {$asql}");
         }
         $tags = $_POST['tags'];
         if ($tags) {
             $tags_arr = $tags;
             //explode(",", $tags);
             array_unique($tags_arr);
             $this->tagsDelete($idCom);
             $tg = tags::Add($tags_arr);
             $this->tagsAdd($idCom, $tg);
         }
         //Уведомление о комментарии
         //list($alert1, $error_flag, $error) = $sql_error;
         //list($alert1, $error_flag, $error) = $blog_obj->NewThread(get_uid(), $gr, $base, $name, $msg, $files, getRemoteIP(), $mod, 0, $tags, $yt_link, $ontop);
     }
     //if ($alert1) $alert = $alert + $alert1;
     //vardump($alert);
     front::og("tpl")->error_flag = $error_flag;
     //
     front::og("tpl")->alert = $alert;
     front::og("tpl")->post = array("blog" => $blog, "user" => $user, "parent" => $parent, "msg" => $msg, "title" => $msg_name, "yt_link" => $yt_link, "tags" => $_POST['tags']);
     return array($error_flag, $error, $idCom);
 }
Example #19
0
function JoinCommune($commune_id, $mode = false)
{
    session_start();
    if (!isset($_SESSION['uid'])) {
        return;
    }
    $cm = new commune();
    $objResponse = new xajaxResponse();
    $result = commune::Join($commune_id, $_SESSION['uid'], false);
    $objResponse->script("\$('ov-commune-confirm').setStyle('display','none');");
    $comm = $cm->getCommune($commune_id, $_SESSION['uid']);
    /*
    !!! Посылаем уведомление 
    todo не плохо бы придумать антиспам, пользователь может бесконечно раз выходить и входить в такое сообщество 
    с каждым входом автору сообщества будет высылаться уведомление (skif)
    */
    if ($result == commune::JOIN_STATUS_ASKED) {
        $sm = new smail();
        $sm->CommuneJoinAction($_SESSION['uid'], $comm);
    }
    if ($mode == 1) {
        $href = "'/commune/?id={$commune_id}'";
        $objResponse->script('document.location.href = ' . $href);
        return $objResponse;
    }
    if ($mode == 2) {
        $objResponse->script('document.location.href = document.location.href');
        return $objResponse;
    }
    $html = "<a href=\"javascript:void(0)\" onclick=\"xajax_OutCommune({$commune_id}); return false;\"><img src=\"/images/btn-cgoout.png\" alt=\"Выйти из сообщество\"/></a>";
    $objResponse->assign('join_' . $commune_id, 'innerHTML', $html);
    /*$href = "document.location.href";
      if($mode == true) {
          $href = "'/commune/?id={$commune_id}'";
      }
      
      $objResponse->script('document.location.href = '.$href);*/
    //  	$html = __commPrntJoinButton($comm, $_SESSION['uid'], null, true);
    //        $html_s = __commPrntSubmitButton($comm, $_SESSION['uid'], NULL, $mode);
    //        $mAcceptedCnt = $comm['a_count'] - $comm['w_count'] + 1;
    //	$objResponse->assign('join_btn_'.$commune_id,"innerHTML", $html);
    //        $objResponse->assign('commSubscrButton_'.$commune_id,"innerHTML", $html_s ? $html_s : '');
    //        $objResponse->assign('accepted_'.$commune_id,"innerHTML", $mAcceptedCnt);
    //        $objResponse->assign('idCommRating_'.$commune_id,'innerHTML',__commPrntRating($comm, $_SESSION['uid']));
    return $objResponse;
}
Example #20
0
function setReqvs($sbr_id, $params)
{
    $objResponse = new xajaxResponse();
    //@todo: запрещаем изменять финансы в старой СБР #29196
    $objResponse->alert('Прекращена поддержка СБР.');
    return $objResponse;
    $objResponse->script("\$('finance-update-btn').removeClass('b-button_disabled');");
    $sbr_id = intval($sbr_id);
    if (!$sbr_id) {
        return $objResponse;
    }
    $uid = get_uid(0);
    if (!$uid) {
        $objResponse->redirect('/');
        return $objResponse;
    }
    $reqvs = sbr_meta::getUserReqvs($uid);
    $sbr = sbr_meta::getInstance();
    $sbr->initFromId($sbr_id);
    if ($sbr->status == sbr::STATUS_CANCELED) {
        ob_start();
        include $_SERVER['DOCUMENT_ROOT'] . '/sbr/freelancer/tpl.sbr_refuse.php';
        $html = ob_get_clean();
        $objResponse->assign('master_content', 'innerHTML', $html);
        $objResponse->script('$$(".b-master").destroy();');
    }
    $form_type = intval($params['form_type']);
    $rez_type = intval($params['rez_type']);
    if (!$rez_type) {
        $rez_type = $reqvs['rez_type'];
    }
    if (!$form_type || !$rez_type) {
        return $objResponse;
    }
    $oreqvs = $reqvs;
    $error = array();
    $reqvs1 = array();
    foreach ($params as $k => $v) {
        if (!array_key_exists($k, $reqvs[$form_type])) {
            continue;
        }
        $reqvs1[$k] = $v;
        $reqvs[$form_type][$k] = $v;
    }
    //if($err = sbr_meta::setUserReqv($uid, $rez_type, $form_type, $reqvs1)) {
    //    $error = $err;
    //}
    //@todo: запрещаем изменять финансы в старой СБР #29196
    $error = 'Прекращена поддержка СБР.';
    if (empty($error) && ($reqvs1['mob_phone'] != $oreqvs[$form_type]['mob_phone'] && !($_SESSION['is_verify'] == 't') || $oreqvs['is_activate_mob'] == 'f')) {
        require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sms_gate_a1.php';
        if ($params['mob_phone'] != '') {
            $ureqv = $reqvs1;
            $sms_gate = new sms_gate_a1($ureqv['mob_phone']);
            $info = $sms_gate->getInfoSend();
            $success = false;
            if (!$sms_gate->isNextSend()) {
                $success = $sms_gate->sendAuthCellCode();
                if (SMS_GATE_DEBUG) {
                    $code_debug = $sms_gate->getAuthCode();
                }
            }
            if (SMS_GATE_DEBUG && !$code_debug) {
                $code_debug = $info['data'];
            }
            $callback_js = 'a_sms_act';
            $limitIsExceed = $sms_gate->limitSmsOnNumberIsExceed($params['mob_phone'], $recordId, $count, $message);
            $linkText = 'СМС не пришло';
            $linkStyle = sms_gate_a1::$enable_link_css;
            if ($message) {
                $linkText = "СМС не пришло ({$message})";
            }
            if ($limitIsExceed) {
                $linkText = sms_gate_a1::LIMIT_EXCEED_LINK_TEXT;
                $linkStyle = sms_gate_a1::$disable_link_css;
            }
            if ($success) {
                $limitIsExceed = false;
            }
            ob_start();
            include $_SERVER['DOCUMENT_ROOT'] . '/sbr/tpl.auth_sms_popup.php';
            $out = ob_get_clean();
            $objResponse->assign('auth_popup', 'innerHTML', $out);
            $objResponse->script("\$('auth_popup').show(); \$('auth_popup').removeClass('b-shadow_hide'); shadow_popup();");
            $objResponse->script("\$('send_btn').removeClass('b-button_rectangle_color_disable');\n                                  \$('send_btn').getElement('.b-button__txt').removeClass('b-button__txt_hide');\n                                  \$('send_btn').getElement('.b-button__load').hide();");
            return $objResponse;
        }
    } elseif ($oreqvs['is_activate_mob'] == 't' && $reqvs1['mob_phone'] != $oreqvs[$form_type]['mob_phone']) {
        $error['mob_phone'] = 'У вас привязка к другому номеру';
    }
    //Проверка наличия и идентификации веб-кошелька только для физиков!
    if (!$error && !is_emp()) {
        $phone = $oreqvs[$form_type]['mob_phone'];
        $pskb = new pskb();
        $res = $pskb->checkOrCreateWallet($phone);
        if (empty($res)) {
            $error['mob_phone'] = 'Ошибка соединения с Веб-кошельком.';
        } else {
            $res = json_decode($res, 1);
            if (empty($res['state']) || in_array($res['state'], array('COMPLETE'))) {
                //'EXIST'
                $error['mob_phone'] = '
                    Веб-кошелек с указанным номером отсутствует. Для проведения сделки 
                    зарегистрируйте и идентифицируйте Веб-кошелек на указанный номер.';
            } elseif (!$res['identified']) {
                $error['mob_phone'] = '
                    Ваш Веб-кошелек не идентифицирован. Для проведения сделки укажите 
                    другой номер телефона и кошелька или идентифицируйте текущий Веб-кошелек.';
            }
        }
    }
    if (!$error) {
        //$_SESSION['users.setup.fin_success'] = 1;
        if (!hasPermissions('users')) {
            $smail = new smail();
            $smail->FinanceChanged($_SESSION['login']);
        }
    }
    if ($error) {
        $objResponse->call('finance_err_set', $error, $form_type);
        return $objResponse;
    }
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pskb.php';
    $pskb_frl = new pskb_user($reqvs, intval(is_emp()), $sbr->getTotalCost());
    $psystems = $pskb_frl->getPsystems();
    $objResponse->script('psysDisabled = ' . json_encode($psystems['disabled']) . ';');
    $objResponse->script('psysHidden = ' . json_encode($psystems['hidden']) . ';');
    $objResponse->script('if(finance_check(null, true)) finance_prepare();');
    //    $objResponse->call('finance_spinn_hide');
    return $objResponse;
}
Example #21
0
 }
 if (!isset($_GET['days'])) {
     $_GET['days'] = 3;
 }
 if (!isset($_GET['auto'])) {
     $_GET['auto'] = 0;
 }
 if ($_GET['days'] != 1 && $_GET['days'] != 3) {
     echo "<strong style='color:red'>День может принимать значение 1 или 3</strong>";
     return;
 }
 if ($_GET['days'] == 1 && $_GET['auto'] == 1) {
     echo "<strong style='color:red'>Не может быть одновременно days = 1 и auto = 1</strong>";
     return;
 }
 $mail = new smail();
 if ($_GET['service'] == 'pro') {
     $sql = "SELECT u.*, a.id as acc_id FROM users u INNER JOIN account a ON a.uid = u.uid WHERE u.login = ?";
     $user = $DB->row($sql, $_GET['user']);
     if ($_GET['auto'] == 1) {
         $role = is_emp($user['role']) ? "employer" : "freelancer";
         $mail->remindAutoprolongPRO(array($user), $role, $_GET['days']);
     } else {
         $mail->remindTimeleftPRO(array($user), $_GET['days']);
     }
 } else {
     if ($_GET['auto'] == 1) {
         $mail->remindAutoprolongFirstpage($_GET['days'], $_GET['user']);
     } else {
         $mail->reminderFPNotAutopayed($_GET['days'], $_GET['user']);
     }
Example #22
0
 public function __construct()
 {
     parent::__construct();
     $server = defined('SERVER') ? strtolower(SERVER) : 'local';
     $this->is_local = $server == 'local';
 }
ini_set('max_execution_time', 0);
ini_set('memory_limit', '512M');
if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) {
    //@todo: укажите вместо '' относительное положение doc_root например '/../'
    $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(dirname(__FILE__) . ''), '/');
}
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/config.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/log.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/multi_log.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer.php';
$log = new log('hourly_projects_newsletter/' . SERVER . '-%d%m%Y[%H].log', 'w');
$log->writeln('------------ BEGIN hourly (start time: ' . date('d.m.Y H:i:s') . ') -----');
//if((int)date('H') == 1) {
//$mail = new smail();
//$log->TRACE();
//}
//------------------------------------------------------------------------------
$mail = new smail();
//------------------------------------------------------------------------------
//ответившим на проекты (пока самый тяжелый)
$log->TRACE($mail->sendFrlOffer());
//------------------------------------------------------------------------------
//исполнителям проектов
$log->TRACE($mail->sendFrlProjectsExec());
//------------------------------------------------------------------------------
//работодателям проектов
$log->TRACE($mail->sendEmpPrjFeedback());
//------------------------------------------------------------------------------
$log->writeln('------------ END hourly    (total time: ' . $log->getTotalTime() . ') ---------------');
Example #24
0
 /**
  * Вывод страницы /gift/ "Подарок".
  */
 public function giftAction()
 {
     include $_SERVER['DOCUMENT_ROOT'] . '/404.php';
     exit;
     /*
      * @deprecated Все что ниже пока не используется
      */
     front::og('tpl')->page = 'gift';
     self::isBlockMoney();
     /**
      * Подключаем AJAX для страницы.
      */
     require_once $_SERVER['DOCUMENT_ROOT'] . '/xajax/bill.common.php';
     front::og('tpl')->script = '/scripts/bill2.js';
     front::og('tpl')->xajax = $xajax;
     front::og('tpl')->mnth = 1;
     // Месяцев оплаты по умолчанию
     $val = $this->uri[0];
     switch ($val) {
         case 'pro':
             // Вывод подстраницы "Аккаунт «PRO»"
             /*
              * Обработка события "Подарить"
              */
             if ($_POST['act']) {
                 $mnth = intval(trim($_POST['mnth']));
                 // месяцев
                 $login = trim(strip_tags($_POST['login']));
                 // логин пользователя
                 $msg = change_q_x(__paramInit('string', null, 'msg', null, 300));
                 $usertype = trim(strip_tags($_POST['usertype']));
                 /**
                  * Подключаем класс для оплаты подарка.
                  */
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/payed.php';
                 $prof = new payed();
                 $tr_id = $_REQUEST['transaction_id'];
                 if (!$tr_id) {
                     $this->account->view_error('Невозможно завершить транзакцию. Попробуйте повторить операцию с самого начала.');
                 }
                 front::og('tpl')->tr_id = $tr_id;
                 front::og('tpl')->login = $login;
                 front::og('tpl')->msg = $msg;
                 front::og('tpl')->mnth = $mnth;
                 /*
                  * Если нет ошибок выводим
                  */
                 if ($mnth > 0 && $login) {
                     // Класс для работы с пользователем
                     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
                     $user = new users();
                     $gid = $user->GetUid($error, $login);
                     $user->GetUser($login);
                     if (!$gid) {
                         $alert['login'] = '******';
                     }
                     if ($gid == get_uid()) {
                         $alert['login'] = '******';
                     }
                     if (defined('SPEC_USER') && get_uid() == SPEC_USER) {
                         $alert['login'] = '******';
                     }
                     if (!$alert) {
                         $role = $user->GetRole($login, $error);
                         /*
                          * Высчитываем тариф для обработки. Тариф зависит от количества месяцев (Действуют специальные скидки)
                          */
                         if (substr($role, 0, 1) != '0') {
                             $tarif = 16;
                         } else {
                             $tarif = 52;
                             if ($mnth == 3) {
                                 $tarif = 66;
                             }
                             if ($mnth == 6) {
                                 $tarif = 67;
                             }
                             if ($mnth == 12) {
                                 $tarif = 68;
                             }
                         }
                         $ok = $prof->GiftOrderedTarif($bill_id, $gift_id, $gid, get_uid(), $tr_id, $mnth, $msg, $tarif);
                         // Оплата подарка
                         if ($ok) {
                             // Посылаем уведомление о подарке и переносим на страницу успешной оплаты
                             $sm = new smail();
                             $sm->NewGift($_SESSION['login'], $login, $msg, $gift_id);
                             $_SESSION['success_aid'] = $bill_id;
                             header("Location: /{$this->name_page}/success/");
                             exit;
                         }
                         unset($msg);
                     }
                 } else {
                     $alert['login'] = '******';
                 }
                 front::og('tpl')->error = $alert;
             }
             front::og('tpl')->display('bill/bill_gift_pro.tpl');
             break;
         case 'main':
             // Вывод подстраницы "Платное размещение в разделе"
             front::og('tpl')->type = 1;
             // Типа размещения = неделя
             /*
              * Обработка события "Подарить" - при нажатии кнопки подарить
              */
             if ($_POST['act']) {
                 $type = intval(trim($_POST['type']));
                 // Сколько недель
                 $login = trim(strip_tags($_POST['login']));
                 $msg = change_q_x(__paramInit('string', null, 'msg', null, 300));
                 /**
                  * Класс для обработки оплаты и взаимодействия механизма вывода.
                  */
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/firstpage.php';
                 $prof = new firstpage();
                 $tr_id = $_REQUEST['transaction_id'];
                 if (!$tr_id) {
                     $this->account->view_error('Невозможно завершить транзакцию. Попробуйте повторить операцию с самого начала.');
                 }
                 front::og('tpl')->tr_id = $tr_id;
                 front::og('tpl')->login = $login;
                 front::og('tpl')->msg = $msg;
                 front::og('tpl')->type = $type;
                 if (!$type) {
                     $alert['type'] = 'Не выбрано количество недель.';
                 } else {
                     $d_time = "{$type} неделя";
                     $intv = "{$type} weeks";
                     if ($login) {
                         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
                         $user = new users();
                         $gid = $user->GetUid($error, $login);
                         $user->GetUser($login);
                         if (!$gid) {
                             $alert['login'] = '******';
                         }
                         if (is_emp($user->role)) {
                             $alert['login'] = '******';
                         }
                         if ($gid == get_uid()) {
                             $alert['login'] = '******';
                         }
                         if (defined('SPEC_USER') && get_uid() == SPEC_USER) {
                             $alert['login'] = '******';
                         }
                         if (!$alert) {
                             $order_id = $prof->Gift($bill_id, $gift_id, $gid, get_uid(), $tr_id, $intv, 17, $msg, $type);
                             if (!$order_id) {
                                 header('Location: /bill/fail/');
                                 // Если оплата не прошла
                                 exit;
                             } else {
                                 // Уведомление на почту
                                 $sm = new smail();
                                 $sm->NewGift($_SESSION['login'], $login, $msg, $gift_id);
                                 $_SESSION['success_aid'] = $bill_id;
                                 header("Location: /{$this->name_page}/success/");
                                 // Если все прошло успешно переносим на страницу - Успешно
                                 exit;
                             }
                         }
                     } else {
                         $alert['login'] = '******';
                     }
                 }
                 front::og('tpl')->error = $alert;
             }
             front::og('tpl')->display('bill/bill_gift_main.tpl');
             break;
         case 'fronttop':
             // Обработка подстраницы "Платные места наверху главной страницы"
             // Событие нажатия кнопки "Подарить"
             if ($_POST['act']) {
                 $login = trim(strip_tags($_POST['login']));
                 // Логин
                 $msg = change_q_x(__paramInit('string', null, 'msg', null, 300));
                 $tr_id = $_REQUEST['transaction_id'];
                 if (!$tr_id) {
                     $this->account->view_error('Невозможно завершить транзакцию. Попробуйте повторить операцию с самого начала.');
                 }
                 front::og('tpl')->tr_id = $tr_id;
                 front::og('tpl')->login = $login;
                 front::og('tpl')->msg = $msg;
                 if ($login) {
                     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
                     $user = new users();
                     $gid = $user->GetUid($error, $login);
                     $user->GetUser($login);
                     if (is_emp($user->role)) {
                         $alert['login'] = '******';
                     }
                     if ($gid == get_uid()) {
                         $alert['login'] = '******';
                     }
                     if (defined('SPEC_USER') && get_uid() == SPEC_USER) {
                         $alert['login'] = '******';
                     }
                     if (!$gid) {
                         $alert['login'] = '******';
                     }
                     if (!$alert) {
                         /**
                          * Класс для работы с оплатой подарка.
                          */
                         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pay_place.php';
                         $place = new pay_place();
                         $tarif = 69;
                         $profs = $place->gift($bill_id, $gift_id, $tr_id, $gid, get_uid(), $msg, $tarif);
                         // Оплачиваем подарок
                         if ($profs) {
                             $_SESSION['success_aid'] = $bill_id;
                             header("Location: /{$this->name_page}/success/");
                             // Все прошло успешно
                             exit;
                         }
                     }
                 } else {
                     $alert['login'] = '******';
                 }
                 front::og('tpl')->error = @$alert;
                 // Переменная ошибок
             }
             front::og('tpl')->display('bill/bill_gift_fronttop.tpl');
             break;
         case 'cattop':
             // Обработка подстраницы "Платные места наверху каталога"
             // Событие нажатия кнопки "Подарить"
             if ($_POST['act']) {
                 $login = trim(strip_tags($_POST['login']));
                 // Логин
                 $msg = change_q_x(__paramInit('string', null, 'msg', null, 300));
                 $tr_id = $_REQUEST['transaction_id'];
                 if (!$tr_id) {
                     $this->account->view_error('Невозможно завершить транзакцию. Попробуйте повторить операцию с самого начала.');
                 }
                 front::og('tpl')->tr_id = $tr_id;
                 front::og('tpl')->login = $login;
                 front::og('tpl')->msg = $msg;
                 if ($login) {
                     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
                     $user = new users();
                     $gid = $user->GetUid($error, $login);
                     $user->GetUser($login);
                     if (!$gid) {
                         $alert['login'] = '******';
                     }
                     if (is_emp($user->role)) {
                         $alert['login'] = '******';
                     }
                     if ($gid == get_uid()) {
                         $alert['login'] = '******';
                     }
                     if (defined('SPEC_USER') && get_uid() == SPEC_USER) {
                         $alert['login'] = '******';
                     }
                     if (!$alert) {
                         /**
                          * Класс для работы с оплатой подарка.
                          */
                         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pay_place.php';
                         $place = new pay_place(1);
                         $tarif = 83;
                         $profs = $place->gift($bill_id, $gift_id, $tr_id, $gid, get_uid(), $msg, $tarif);
                         // Оплачиваем подарок
                         if ($profs) {
                             $_SESSION['success_aid'] = $bill_id;
                             header("Location: /{$this->name_page}/success/");
                             // Все прошло успешно
                             exit;
                         }
                     }
                 } else {
                     $alert['login'] = '******';
                 }
                 front::og('tpl')->error = @$alert;
                 // Переменная ошибок
             }
             front::og('tpl')->display('bill/bill_gift_cattop.tpl');
             break;
         case 'catalog':
             // Обработка подстраницы "Платные места в каталоге в подарок"
             // Событие нажатия кнопки "Подарить"
             front::og('tpl')->filter_categories = professions::GetAllGroupsLite(true);
             front::og('tpl')->filter_subcategories = professions::GetAllProfessions(1);
             $x = new op_codes();
             $x->GetRow(84);
             $top_p = $x->sum;
             $x->GetRow(85);
             $inside_p = $x->sum;
             front::og('tpl')->price_top = $top_p;
             front::og('tpl')->price_inside = $inside_p;
             if ($_POST['act']) {
                 $login = trim(strip_tags($_POST['login']));
                 // Логин
                 $msg = change_q_x(__paramInit('string', null, 'msg', null, 300));
                 $pf_category = __paramInit('int', null, 'pf_category', 0);
                 $pf_subcategory = __paramInit('int', null, 'pf_subcategory', 0);
                 //echo '<pre>'; print_r($_POST); exit('</pre>');
                 $tr_id = $_REQUEST['transaction_id'];
                 if (!$tr_id) {
                     $this->account->view_error('Невозможно завершить транзакцию. Попробуйте повторить операцию с самого начала.');
                 }
                 front::og('tpl')->tr_id = $tr_id;
                 front::og('tpl')->login = $login;
                 front::og('tpl')->msg = $msg;
                 front::og('tpl')->pf_category = $pf_category;
                 front::og('tpl')->pf_subcategory = $pf_subcategory;
                 if ($login) {
                     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
                     $user = new users();
                     $gid = $user->GetUid($error, $login);
                     $user->GetUser($login);
                     if (!$gid) {
                         $alert['login'] = '******';
                     }
                     if (is_emp($user->role)) {
                         $alert['login'] = '******';
                     }
                     if ($gid == get_uid()) {
                         $alert['login'] = '******';
                     }
                     if (defined('SPEC_USER') && get_uid() == SPEC_USER) {
                         $alert['login'] = '******';
                     }
                     $weeks = (int) $_POST['weeks'];
                     if (!$weeks) {
                         $alert['week'] = 'Данное поле является обязательным';
                     }
                     if (!$alert) {
                         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/firstpage.php';
                         $prof = new firstpage();
                         $pf_category = (int) $_POST['pf_category'];
                         $pf_subcategory = (int) $_POST['pf_subcategory'];
                         $page = !$pf_subcategory ? 0 : $pf_subcategory;
                         $place_info = array($page => $weeks);
                         $op_code = $page ? 85 : 84;
                         //                                                                               require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/account.php");
                         //                                                                                $account = new account();
                         //                                                                                $account ->/ view_error("Невозможно завершить транзакцию. Попробуйте повторить операцию с самого начала.");
                         $account = new account();
                         if ($prof->GiftOrderedCat($bill_id, $gift_id, $gid, get_uid(), $tr_id, $page, (int) $weeks, $op_code, $msg)) {
                             $_SESSION['success_aid'] = $bill_id;
                             header("Location: /{$this->name_page}/success/");
                             // Все прошло успешно
                             exit;
                         }
                     }
                 } else {
                     $alert['login'] = '******';
                 }
                 front::og('tpl')->error = @$alert;
                 // Переменная ошибок
             }
             front::og('tpl')->display('bill/bill_gift_catalog.tpl');
             break;
         default:
             /*
              * По умолчанию выводим главную страницу раздела "Подарки"
              */
             front::og('tpl')->display('bill/bill_gift.tpl');
             break;
     }
 }
Example #25
0
ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '512M');
if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) {
    $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/');
}
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php';
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/config.php");
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/profiler.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
//------------------------------------------------------------------------------
$results = array();
$profiler = new profiler();
//------------------------------------------------------------------------------
$profiler->start('spam');
//------------------------------------------------------------------------------
$mail = new smail();
$results['cnt'] = $mail->sendFrlOffer();
//------------------------------------------------------------------------------
$profiler->stop('spam');
//------------------------------------------------------------------------------
$results += array('execution_time (sec)' => number_format($profiler->get('spam'), 5));
//------------------------------------------------------------------------------
array_walk($results, function (&$value, $key) {
    $value = sprintf('%s = %s' . PHP_EOL, $key, $value);
});
print_r(implode('', $results));
exit;
Example #26
0
 /**
  * Функция автоподьема проектов если в них в течении 2х дней не было ни одного ответа
  * Поднимает только 1 раз
  * 
  * @global object $DB 
  */
 public static function autoSetTopProject()
 {
     global $DB;
     // Старые проекты (больше 7 дней) не повышаем
     $sql = "\n            SELECT \n              p.*, u.email, u.subscr, u.login, u.uname, u.usurname, us.key as unsubscribe_key \n            FROM projects p\n            LEFT JOIN projects_blocked pb ON pb.project_id = p.id\n            INNER JOIN employer u ON u.uid = p.user_id\n            INNER JOIN users_subscribe_keys us ON us.uid = u.uid\n            WHERE\n              pb.id IS NULL AND \n              p.strong_top = 0 AND top_to IS NULL AND\n              p.post_date = p.create_date AND \n              p.create_date + interval '2 days' <= now() AND \n              (now() - p.create_date) < '7 days' AND \n              p.offers_count = 0 AND \n              p.closed = false\n        ";
     $update = "UPDATE projects SET post_date = post_date + interval '2 days' WHERE id IN (?l)";
     $update_projects = $DB->rows($sql);
     foreach ($update_projects as $prj) {
         $prjid[] = $prj['id'];
     }
     if ($DB->query($update, $prjid)) {
         $smail = new smail();
         $smail->sendAutoSetTopProject($update_projects);
     }
 }
Example #27
0
 /**
  * Удаляет статью.
  *
  * @param integer $msg   идентификатор стаьи
  * @param integer $admin можно ли удалять статью
  *
  * @return char сообщение об ошибке
  */
 public function delArticle($id, $send_warn = '')
 {
     global $DB;
     $sql = 'DELETE FROM articles_new WHERE id=? RETURNING logo, user_id, title';
     $ret = $DB->row($sql, $id);
     if ($ret) {
         $file = new CFile();
         $file->Delete($ret['logo']);
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
         $smail = new smail();
         $smail->delArticleSendReason($ret['user_id'], $ret['title'], $send_warn);
     }
     return $DB->error;
 }
Example #28
0
 /**
  * Устанавливает статус "Документы пришли" на юзеров в определенных этапах.
  *
  * @param array $suids массив ключей этап_юзер.
  * @param bool  $mode  если NULL, то развернуть противоположно, иначе жестко установить в заданное значение.
  *
  * @return array данные по первой записи sbr_stages_users с флагом docs_ready -- документы на месте, можно отправлять в "Выплаты".
  */
 public function setDocsReceived($suids, $mode = null)
 {
     if (!is_array($suids)) {
         $suids = array($suids);
     }
     $suids = array_map('pg_escape_string', $suids);
     $mode = $mode === null ? 'NOT(docs_received)' : ($mode ? 'true' : 'false');
     $sql = "UPDATE sbr_stages_users SET docs_received = ?b WHERE stage_id||'_'||user_id IN (?l) RETURNING *, (uploaded_docs & " . sbr::DOCS_REQUIRED . ') = ' . sbr::DOCS_REQUIRED . ' as docs_ready';
     $sql = $this->db()->parse($sql, $mode, $suids);
     if (($res = pg_query(self::connect(), $sql)) && pg_num_rows($res)) {
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
         $smail = new smail();
         $smail->docsReceivedSBR($suids);
         return pg_fetch_assoc($res);
     }
     return;
 }
Example #29
0
    } elseif (strlen($pwd) < 6) {
        $error = 'Слишком короткий пароль (минимум — 6 символов)';
    } elseif (strlen($pwd) > 24) {
        $error = 'Слишком длинный пароль (максимум — 24 символа)';
    }
    if (!$error && $codes->user_id) {
        require_once ABS_PATH . '/classes/users.php';
        $user = new users();
        $user->passwd = $pwd;
        $err = $user->Update($codes->user_id, $res);
        $u_id = $codes->user_id;
        $codes->DelByUT($codes->user_id, 1);
        if (!$err) {
            $info = 'Изменения внесены';
            require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
            $smail = new smail();
            $smail->ChangePwd($codes->user_id, $pwd);
            // Пишем в лог смены паролей
            require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/restorepass_log.php';
            restorepass_log::SaveToLog($codes->user_id, getRemoteIP(), 1);
            $pwd = users::hashPasswd(trim(stripslashes($pwd)));
            $user->getUserByUID($u_id);
            login($user->login, $pwd);
            session_write_close();
            header('Location: /');
            exit;
        }
    }
}
$content = 'changepwd_inner.php';
include 'template3.php';
Example #30
0
 /**
  * Отметить удаленный блог, что он удален, для дальнейшего модерирования)
  *
  * @param integer $fid     ID Пользователя
  * @param integer $edit_id ИД Сообщения
  * @param string  $ip      ИП того кто удаляет
  * @param mixed   $error   Сообщение об ошибке
  * @param boolean $mod     Имеет ли юзер права на удаление
  * @param string  $reason    Причина удаления
  * @return integer $thread_id ИД удаленного сообщения
  */
 function MarkDeleteMsg($fid, $edit_id, $ip, &$error, $mod = 1, $reason = '')
 {
     global $DB;
     $sql = "SELECT fromuser_id, thread_id from blogs_msgs WHERE id = ?i";
     $res = $DB->row($sql, $edit_id);
     $from_id = $res['fromuser_id'];
     $thread_id = $res['thread_id'];
     $sql = "SELECT fromuser_id from blogs_msgs WHERE thread_id = ?i AND reply_to ISNULL";
     $buser_id = $DB->val($sql, $thread_id);
     if ($fid != $from_id && $mod == 1 && ($fid != $buser_id && $mod == 1)) {
         $err = "Вы не можете удалять чужие сообщения!";
         return $thread_id;
     }
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php';
     $sModer = ' , moderator_status = ' . ($fid == $from_id ? 'NULL' : $fid) . ' ';
     $sql = $DB->parse('DELETE FROM moderation WHERE rec_id = ?i AND rec_type = ?i;', $edit_id, user_content::MODER_BLOGS);
     $sql .= "UPDATE blogs_msgs SET deleted=NOW(), deluser_id=?i, deleted_reason = ? {$sModer} WHERE id = ?i";
     $userSubscribe = self::getUsersSubscribe(array($edit_id));
     $res = $DB->query($sql, $fid, $reason, $edit_id);
     $error = $DB->error;
     if (!$error) {
         require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php";
         $s = new smail();
         $s->sendBlogPostDeleted(get_uid(false), $userSubscribe);
     }
     return $thread_id;
 }