public function editorAction($module) { if (!file_exists(Module::getModulePath($module) . '/generatorHash.php')) { Msg::add('Этот модуль был создан без помощи генератора. Возможности его изменения ограничены и могут привести к порче модуля', 'danger'); } $this->view->page(['data' => compact('module')]); }
public function beforeSave() { if ($this->id && $this->id == $this->parent_id) { $this->parent_id = 0; \Msg::add('Категория не может быть сама себе родителем'); } }
public function parseRequest($request) { if (!empty($request[$this->colName]['pass']) && !empty($request[$this->colName]['pass'])) { if (empty($request[$this->colName]['pass'])) { \Msg::add('Вы не ввели пароль в первое поле', 'danger'); return FALSE; } if (empty($request[$this->colName]['repeat'])) { \Msg::add('Вы не ввели пароль во второе поле', 'danger'); return FALSE; } if ($request[$this->colName]['pass'] != $request[$this->colName]['repeat']) { \Msg::add('Введенные пароли не совадают', 'danger'); return FALSE; } $this->activeForm->model->{$this->colName} = \App::$cur->users->hashpass($request[$this->colName]['pass']); } }
public function init() { \App::$cur->view->customAsset('js', '/static/moduleAsset/UserForms/js/formCatcher.js'); if (!empty($_POST['UserForms'])) { foreach ($_POST['UserForms'] as $form_id => $inputs) { $form = \UserForms\Form::get((int) $form_id); if (!$form) { continue; } $formRecive = new \UserForms\Recive(); $formRecive->user_id = (int) \Users\User::$cur->id; $formRecive->form_id = (int) $form_id; $data = []; $error = false; foreach ($form->inputs as $input) { if (isset($inputs['input' . $input->id])) { $data['input' . $input->id] = htmlspecialchars($inputs['input' . $input->id]); } elseif ($input->required) { $error = true; Msg::add('Вы не заполнили поле: ' . $input->label); } else { $data['input' . $input->id] = ''; } } if (!$error) { $formRecive->data = json_encode($data); $formRecive->save(); } } if (!$error && !empty(App::$cur->config['site']['email'])) { $text = ''; foreach ($form->inputs as $input) { if (isset($inputs['input' . $input->id])) { $text .= "<b>{$input->label}:</b> " . htmlspecialchars($inputs['input' . $input->id]) . "<br />"; } } if ($text) { $text = 'Дата получения по серверному времени: ' . date('Y-m-d H:i:s') . '<br />Заполненые поля:<br />' . $text; Tools::sendMail('noreply@' . INJI_DOMAIN_NAME, App::$cur->config['site']['email'], $form->name, $text); } } Tools::redirect($_SERVER['REQUEST_URI'], 'Ваша форма была успешно отправлена', 'success'); } }
public function init() { $callbacksData = filter_input(INPUT_POST, 'Callbacks', FILTER_REQUIRE_ARRAY); if (!empty($callbacksData)) { $callback = new \Callbacks\Callback(); $error = false; if (empty($callbacksData['text'])) { $error = true; Msg::add('Вы не написали текст отзыва'); } else { $callback->text = nl2br(htmlspecialchars($callbacksData['text'])); } if (empty($callbacksData['name'])) { $error = true; Msg::add('Вы не указали свое имя'); } else { $callback->name = htmlspecialchars($callbacksData['name']); } if (empty($callbacksData['phone'])) { $error = true; Msg::add('Вы не указали свой номер телефона'); } else { $callback->phone = htmlspecialchars($callbacksData['phone']); } $files = filter_var($_FILES['Callbacks'], FILTER_REQUIRE_ARRAY); if (!empty($files['tmp_name']['photo'])) { $callback->image_file_id = App::$cur->files->upload(['name' => $files['name']['photo'], 'tmp_name' => $files['tmp_name']['photo']]); } $callback->mail = htmlspecialchars($callbacksData['mail']); $callback->type_id = (int) $callbacksData['type']; if (!$error) { $callback->save(); if (!empty(App::$cur->config['site']['email'])) { $subject = 'Новый отзыв'; $text = 'Вы можете его посмотреть по этому адресу: <a href = "http://' . idn_to_utf8(INJI_DOMAIN_NAME) . '/admin/callbacks">http://' . idn_to_utf8(INJI_DOMAIN_NAME) . '/admin/callbacks</a>'; Tools::sendMail('noreply@' . INJI_DOMAIN_NAME, App::$cur->config['site']['email'], $subject, $text); } Tools::redirect('/', 'Ваш отзыв был получен и появится после обработки администратором', 'success'); } } }
public function exchangeAction() { $wallets = $this->module->getUserWallets(); $currency = !empty($_GET['currency_id']) ? \Money\Currency::get((int) $_GET['currency_id']) : null; if ($currency && empty($wallets[$currency->id])) { $currency = null; } $targetCurrency = !empty($_GET['target_currency_id']) ? \Money\Currency::get((int) $_GET['target_currency_id']) : null; if ($targetCurrency && empty($wallets[$targetCurrency->id])) { $targetCurrency = null; } $where = []; if ($currency) { $where[] = ['currency_id', $currency->id]; } else { $where[] = ['currency_id', implode(',', array_keys($wallets)), 'IN']; } if ($targetCurrency) { $where[] = ['target_currency_id', $targetCurrency->id]; } else { $where[] = ['target_currency_id', implode(',', array_keys($wallets)), 'IN']; } if ($where) { $rates = Money\Currency\ExchangeRate::getList(['where' => $where]); } else { $rates = []; } if (!empty($_GET['exchange']) && $currency && $targetCurrency && !empty($rates[$_GET['exchange']['rate_id']])) { $error = false; $rate = $rates[$_GET['exchange']['rate_id']]; if (empty($_GET['exchange']['give']['amount']) || !(double) $_GET['exchange']['give']['amount']) { Msg::add('Укажите сумму которую вы хотите отдать'); $error = true; } else { $amount = (double) $_GET['exchange']['give']['amount']; } if (!empty($amount) && $amount > $wallets[$currency->id]->amount) { Msg::add('Вы указали сумму большую чем вам доступно'); $error = true; } if (!$error) { $wallets[$currency->id]->diff(-$amount, 'Обмен валюты на ' . $targetCurrency->name()); $wallets[$targetCurrency->id]->diff($amount * $rate->rate, 'Обмне валюты с ' . $currency->name()); Tools::redirect('/users/cabinet', 'Обмен был успешно проведен'); } } $this->view->setTitle('Обмен валюты'); $this->view->page(['data' => compact('rates', 'currency', 'targetCurrency', 'wallets')]); }
<h3>Блокировки на счете</h3> <?php $currency_id = !empty($_GET['currency_id']) ? (int) $_GET['currency_id'] : 0; $wallets = App::$cur->money->getUserWallets(); if ($currency_id && empty($wallets[$currency_id])) { Msg::add('У вас нет такого кошелька'); Msg::show(); return; } if ($currency_id) { $ids = $wallets[$currency_id]->id; } else { $ids = []; foreach ($wallets as $wallet) { $ids[] = $wallet->id; } $ids = implode(',', $ids); } $table = new \Ui\Table(); $table->setCols(['№', 'Кошелек', 'Сумма', 'Комментарий', 'Дата']); //items pages $pages = new \Ui\Pages($_GET, ['count' => \Money\Wallet\Block::getCount(['where' => ['wallet_id', $ids, 'IN']]), 'limit' => 20]); $histories = \Money\Wallet\Block::getList(['where' => ['wallet_id', $ids, 'IN'], 'order' => [['date_create', 'DESC'], ['id', 'DESC']], 'start' => $pages->params['start'], 'limit' => $pages->params['limit']]); foreach ($histories as $history) { $amount = $history->amount; $table->addRow([$history->id, $history->wallet->currency->name(), '<span class = "' . ($amount > 0 ? "text-success" : 'text-danger') . '">' . $amount . '</span>', $history->comment, $history->date_create]); } $table->draw(); $pages->draw();
public function attachEmailAction() { if (Users\User::$cur->mail) { Tools::redirect('/', 'К вашему аккаунту уже привязан E-Mail'); } if (!empty($_POST['mail'])) { $user_mail = trim($_POST['mail']); if (!filter_var($user_mail, FILTER_VALIDATE_EMAIL)) { Msg::add('Вы ввели не корректный E-mail', 'danger'); } else { $user = Users\User::get($user_mail, 'mail'); if ($user && $user->id != Users\User::$cur->id) { Msg::add('Данный E-mail уже привязан к другому аккаунту', 'danger'); } else { Users\User::$cur->mail = $user_mail; if (!empty($this->module->config['needActivation'])) { Users\User::$cur->activation = Tools::randomString(); $from = 'noreply@' . INJI_DOMAIN_NAME; $to = $user_mail; $subject = 'Активация аккаунта на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME); $text = 'Для активации вашего аккаунта перейдите по ссылке <a href = "http://' . INJI_DOMAIN_NAME . '/users/activation/' . Users\User::$cur->id . '/' . Users\User::$cur->activation . '">http://' . idn_to_utf8(INJI_DOMAIN_NAME) . '/users/activation/' . Users\User::$cur->id . '/' . Users\User::$cur->activation . '</a>'; Tools::sendMail($from, $to, $subject, $text); Msg::add('На указанный почтовый ящик была выслана ваша ссылка для подтверждения E-Mail', 'success'); } else { Msg::add('Вы успешно привязали E-Mail к своему аккаунту', 'success'); } Users\User::$cur->save(); Tools::redirect('/'); } } } $this->view->page(); }
public function registration($data, $autorization = false) { extract($data); if (empty($user_mail)) { Msg::add('Вы не ввели E-mail', 'danger'); return false; } $user_mail = trim($user_mail); if (!filter_var($user_mail, FILTER_VALIDATE_EMAIL)) { Msg::add('Вы ввели не корректный E-mail', 'danger'); return false; } $user = $this->get($user_mail, 'mail'); if ($user) { Msg::add('Введенный вами почтовый ящик зарегистрирован в нашей системе, войдите или введите другой почтовый ящик', 'danger'); return false; } if (empty($user_login)) { $user_login = $user_mail; } $user_login = trim($user_login); $user = $this->get($user_login, 'login'); if ($user) { Msg::add('Введенный вами логин зарегистрирован в нашей системе, войдите или введите другой логин', 'danger'); return false; } if (empty($user_name)) { $user_name = ''; } if (empty($user_city)) { $user_city = ''; } if (empty($user_birthday)) { $user_birthday = ''; } if (empty($user_phone)) { $user_phone = ''; } $invite_code = !empty($data['invite_code']) ? $data['invite_code'] : (!empty($_POST['invite_code']) ? $_POST['invite_code'] : (!empty($_COOKIE['invite_code']) ? $_COOKIE['invite_code'] : (!empty($_GET['invite_code']) ? $_GET['invite_code'] : ''))); if (!empty($invite_code)) { $invite = Users\User\Invite::get($invite_code, 'code'); if (!$invite) { Msg::add('Такой код приглашения не найден', 'danger'); return false; } if ($invite->limit && !($invite->limit - $invite->count)) { Msg::add('Лимит приглашений для данного кода исчерпан', 'danger'); return false; } $parent_id = $invite->user_id; $inviter = $parent_id; $invite->count++; $invite->save(); } if (empty($parent_id) && !empty($this->config['defaultPartner'])) { $parent_id = $this->config['defaultPartner']; } $pass = Tools::randomString(10); $user = new Users\User(['pass' => $this->hashpass($pass), 'mail' => $user_mail, 'login' => htmlspecialchars($user_login), 'role_id' => 2, 'group_id' => 2, 'parent_id' => !empty($parent_id) ? $parent_id : 0]); if (!empty($this->config['needActivation'])) { $user->activation = Tools::randomString(); } $user->save(); if (!$user->id) { Msg::add('Не удалось зарегистрировать', 'danger'); return false; } $info = new \Users\User\Info(['user_id' => $user->id, 'first_name' => htmlspecialchars($user_name), 'city' => htmlspecialchars($user_city), 'bday' => htmlspecialchars($user_birthday), 'phone' => htmlspecialchars($user_phone)]); $info->save(); if (isset($inviter)) { $this->AddUserActivity($inviter, 2, "У вас зарегистрировался новый партнер, {$info->first_name} {$info->last_name} (id: {$user->id}, email: {$user->mail})"); } if ($autorization) { $this->autorization($user_mail, $pass, 'mail'); } if (!empty($this->config['needActivation'])) { $from = 'noreply@' . INJI_DOMAIN_NAME; $to = $user_mail; $subject = 'Регистрация на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME); $text = 'Вы были зарегистрированы на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME) . '<br />для входа используйте ваш почтовый ящик в качестве логина и пароль: ' . $pass; $text .= '<br />'; $text .= '<br />'; $text .= 'Для активации вашего аккаунта перейдите по ссылке <a href = "http://' . INJI_DOMAIN_NAME . '/users/activation/' . $user->id . '/' . $user->activation . '">http://' . idn_to_utf8(INJI_DOMAIN_NAME) . '/users/activation/' . $user->id . '/' . $user->activation . '</a>'; Tools::sendMail($from, $to, $subject, $text); Msg::add('Вы были зарегистрированы. На указанный почтовый ящик был выслан ваш пароль и ссылка для активации', 'success'); } else { $from = 'noreply@' . INJI_DOMAIN_NAME; $to = $user_mail; $subject = 'Регистрация на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME); $text = 'Вы были зарегистрированы на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME) . '<br />для входа используйте ваш почтовый ящик в качестве логина и пароль: ' . $pass; Tools::sendMail($from, $to, $subject, $text); Msg::add('Вы были зарегистрированы. На указанный почтовый ящик был выслан ваш пароль', 'success'); } return $user->id; }
public function checkRequest($params = [], $ajax = false) { if (!$this->checkAccess()) { $this->drawError('you not have access to "' . $this->modelName . '" manager with name: "' . $this->formName . '"'); return []; } $successId = 0; if (!empty($_POST[$this->requestFormName][$this->modelName])) { $request = $_POST[$this->requestFormName][$this->modelName]; if ($this->model) { $presets = !empty($this->form['preset']) ? $this->form['preset'] : []; if (!empty($this->form['userGroupPreset'][\Users\User::$cur->group_id])) { $presets = array_merge($presets, $this->form['userGroupPreset'][\Users\User::$cur->group_id]); } $afterSave = []; $error = false; foreach ($this->inputs as $col => $param) { if (!empty($presets[$col])) { continue; } if (is_object($param)) { $afterSave[] = $param; continue; } if (!empty($this->form['userGroupReadonly'][\Users\User::$cur->group_id]) && in_array($col, $this->form['userGroupReadonly'][\Users\User::$cur->group_id])) { continue; } $inputClassName = '\\Ui\\ActiveForm\\Input\\' . ucfirst($param['type']); $input = new $inputClassName(); $input->activeForm = $this; $input->activeFormParams = $params; $input->modelName = $this->modelName; $input->colName = $col; $input->colParams = $param; try { $input->validate($request); $input->parseRequest($request); } catch (\Exception $exc) { \Msg::add($exc->getMessage(), 'danger'); $error = true; } } if (!$error && empty($_GET['notSave'])) { foreach ($presets as $col => $preset) { if (!empty($preset['value'])) { $this->model->{$col} = $preset['value']; } elseif (!empty($preset['userCol'])) { if (strpos($preset['userCol'], ':')) { $rel = substr($preset['userCol'], 0, strpos($preset['userCol'], ':')); $param = substr($preset['userCol'], strpos($preset['userCol'], ':') + 1); $this->model->{$col} = \Users\User::$cur->{$rel}->{$param}; } else { $this->model->{$col} = \Users\User::$cur->{$preset['userCol']}; } } } if (!$this->parent) { if (!empty($this->form['successText'])) { $text = $this->form['successText']; } else { $text = $this->model->pk() ? 'Изменения были успешно сохранены' : 'Новый элемент был успешно добавлен'; } \Msg::add($text, 'success'); } $this->model->save(!empty($params['dataManagerParams']) ? $params['dataManagerParams'] : []); foreach ($afterSave as $form) { $form->checkRequest(); } if ($ajax) { \Msg::show(); } elseif (!empty($_GET['redirectUrl'])) { \Tools::redirect($_GET['redirectUrl'] . (!empty($_GET['dataManagerHash']) ? '#' . $_GET['dataManagerHash'] : '')); } $successId = $this->model->pk(); } } if (!is_array($params) && is_callable($params)) { $params($request); } } return $successId; }
public static function auth() { $config = static::getConfig(); if (empty($_GET['code']) && empty($_GET['error'])) { $query = ['client_id' => $config['appId'], 'scope' => 'email', 'response_type' => 'code', 'display' => 'page', 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/vk']; \Tools::redirect("https://oauth.vk.com/authorize?" . http_build_query($query)); } if (empty($_GET['code']) && !empty($_GET['error'])) { \Tools::redirect('/', 'Произошла ошибка во время авторизации через соц. сеть: ' . $_GET['error_description']); } $query = ['client_id' => $config['appId'], 'client_secret' => $config['secret'], 'code' => $_GET['code'], 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/vk']; $result = @file_get_contents("https://oauth.vk.com/access_token?" . http_build_query($query)); if ($result === false) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $result = json_decode($result, true); if (empty($result['user_id'])) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $userQuery = ['user_id' => $result['user_id'], 'fields' => 'sex, bdate, photo_max_orig, home_town', 'access_token' => $result['access_token']]; $userResult = @file_get_contents("https://api.vk.com/method/users.get?" . http_build_query($userQuery)); if (!$userResult) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $userDetail = json_decode($userResult, true); if (empty($userDetail['response'][0])) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $social = static::getObject(); $userSocial = \Users\User\Social::get([['uid', $result['user_id']], ['social_id', $social->id]]); if ($userSocial && $userSocial->user) { \App::$cur->users->newSession($userSocial->user); if (!empty(\App::$cur->users->config['loginUrl'][\App::$cur->type])) { \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type]); } } else { if ($userSocial && !$userSocial->user) { $userSocial->delete(); } if (!\Users\User::$cur->id) { $user = false; if (!empty($result['email'])) { $user = \Users\User::get($result['email'], 'mail'); } if (!$user) { $user = new \Users\User(); $user->group_id = 2; $user->role_id = 2; if (!empty($result['email'])) { $user->login = $user->mail = $result['email']; } $invite_code = !empty($_POST['invite_code']) ? $_POST['invite_code'] : (!empty($_COOKIE['invite_code']) ? $_COOKIE['invite_code'] : (!empty($_GET['invite_code']) ? $_GET['invite_code'] : '')); if (!empty($invite_code)) { $invite = \Users\User\Invite::get($invite_code, 'code'); $inveiteError = false; if (!$invite) { Msg::add('Такой код пришлашения не найден', 'danger'); $inveiteError = true; } if ($invite->limit && !($invite->limit - $invite->count)) { Msg::add('Лимит приглашений для данного кода исчерпан', 'danger'); $inveiteError = true; } if (!$inveiteError) { $user->parent_id = $invite->user_id; $invite->count++; $invite->save(); } } if (!$user->parent_id && !empty(\App::$cur->Users->config['defaultPartner'])) { $user->parent_id = \App::$cur->Users->config['defaultPartner']; } $user->save(); $userInfo = new \Users\User\Info(); $userInfo->user_id = $user->id; $userInfo->save(); } } else { $user = \Users\User::$cur; } if (!$user->info->photo_file_id && !empty($userDetail['response'][0]['photo_max_orig'])) { $user->info->photo_file_id = \App::$cur->files->uploadFromUrl($userDetail['response'][0]['photo_max_orig']); } if (!$user->info->first_name && !empty($userDetail['response'][0]['first_name'])) { $user->info->first_name = $userDetail['response'][0]['first_name']; } if (!$user->info->last_name && !empty($userDetail['response'][0]['last_name'])) { $user->info->last_name = $userDetail['response'][0]['last_name']; } if (!$user->info->city && !empty($userDetail['response'][0]['home_town'])) { $user->info->city = $userDetail['response'][0]['home_town']; } if (!$user->info->sex && !empty($userDetail['response'][0]['sex'])) { $user->info->sex = $userDetail['response'][0]['sex'] == 2 ? 1 : ($userDetail['response'][0]['sex'] == 1 ? 2 : 0); } if ($user->info->bday == '0000-00-00' && !empty($userDetail['response'][0]['bdate'])) { $user->info->bday = substr_count($userDetail['response'][0]['bdate'], '.') == 2 ? \DateTime::createFromFormat('d.m.Y', $userDetail['response'][0]['bdate'])->format('Y-m-d') : (substr_count($userDetail['response'][0]['bdate'], '.') == 1 ? \DateTime::createFromFormat('d.m', $userDetail['response'][0]['bdate'])->format('Y-m-1') : '0000-00-00'); } $user->info->save(); $userSocial = new \Users\User\Social(); $userSocial->uid = $result['user_id']; $userSocial->social_id = $social->id; $userSocial->user_id = $user->id; $userSocial->save(); \App::$cur->users->newSession($user); \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type], 'Вы успешно зарегистрировались через ВКонтакте', 'success'); } }
public function buyCardAction() { $this->view->setTitle('Покупка карты'); $bread = []; $bread[] = ['text' => 'Покупка карты']; $user = Users\User::$cur; if (!empty($_POST) && !empty($_POST['card_id'])) { $error = false; $card = \Ecommerce\Card::get((int) $_POST['card_id']); if (!$card) { $error = true; Msg::add('Такой карты не существует', 'danger'); } if (!Users\User::$cur->id) { $user_id = $this->Users->registration($_POST, true); if (!$user_id) { $error = true; $user = null; } else { $user = Users\User::get($user_id); } } $userCard = \Ecommerce\Card\Item::get([['card_id', $card->id], ['user_id', $user->id]]); if ($userCard) { $error = true; Msg::add('У вас уже есть такая карта', 'danger'); } $fields = \Ecommerce\UserAdds\Field::getList(); foreach ($fields as $field) { if (empty($_POST['userAdds']['fields'][$field->id]) && $field->required) { $error = 1; Msg::add('Вы не указали: ' . $field->name); } } if (!$error) { $cardItem = new \Ecommerce\Card\Item(); $cardItem->card_id = $card->id; $cardItem->user_id = $user->id; $cardItem->save(); $cart = new \Ecommerce\Cart(); $cart->user_id = $user->user_id; $cart->cart_status_id = 2; $cart->comment = htmlspecialchars($_POST['comment']); $cart->date_status = date('Y-m-d H:i:s'); $cart->complete_data = date('Y-m-d H:i:s'); if (!empty($_SESSION['cart']['cart_id'])) { $cart->card_item_id = $cardItem->id; } $cart->save(); $this->module->parseFields($_POST['userAdds']['fields'], $cart); $extra = new \Ecommerce\Cart\Extra(); $extra->name = $card->name; $extra->price = $card->price; $extra->count = 1; $extra->cart_id = $cart->id; $extra->info = 'card:' . $card->id . '|cardItem:' . $cardItem->id; $extra->save(); Tools::redirect('/ecommerce/cart/success'); } } $this->view->page(['data' => compact('bread')]); }
public function indexAction() { $cart = ''; $deliverys = \Ecommerce\Delivery::getList(['order' => ['weight', 'ASC']]); $payTypes = \Ecommerce\PayType::getList(['order' => ['weight', 'ASC']]); if (!empty($_SESSION['cart']['cart_id'])) { $cart = Ecommerce\Cart::get($_SESSION['cart']['cart_id']); if (!empty($_POST)) { $error = false; if (!Users\User::$cur->id) { $user_id = $this->Users->registration($_POST, true); if (!$user_id) { $error = true; } else { $user = Users\User::get($user_id); } } else { $user = Users\User::$cur; } $ids = []; if (!empty($_POST['cartItems'])) { foreach ($_POST['cartItems'] as $cartItemId => $cartItemCont) { $cartItem = \Ecommerce\Cart\Item::get((int) $cartItemId); if (!$cartItem) { continue; } if ($cartItem->cart_id != $cart->id) { continue; } $count = (double) $cartItemCont; if ($count < 0.001) { $count = 1; } $cartItem->count = $count; $cartItem->save(); $ids[] = $cartItemId; } } foreach ($cart->cartItems as $cartItem) { if (!in_array($cartItem->id, $ids)) { $cartItem->delete(); } } $cart = Ecommerce\Cart::get($cart->id); if (!$cart->cartItems) { Tools::redirect('/ecommerce', 'Ваша корзина пуста'); } if (empty($this->module->config['sell_over_warehouse'])) { foreach ($cart->cartItems as $cartitem) { $warecount = $cartitem->price->offer->warehouseCount($cart->id); if ($cartitem->count > $warecount) { $error = true; Msg::add('Вы заказали <b>' . $cartitem->item->name . '</b> больше чем есть на складе. на складе: <b>' . $warecount . '</b>', 'danger'); } } } if ($deliverys && empty($deliverys[$_POST['delivery']])) { $error = 1; Msg::add('Выберите способ доставки'); } elseif ($deliverys && !empty($deliverys[$_POST['delivery']])) { $cart->delivery_id = $_POST['delivery']; foreach ($deliverys[$cart->delivery_id]->fields as $field) { if (empty($_POST['deliveryFields'][$field->id]) && $field->required) { $error = 1; Msg::add('Вы не указали: ' . $field->name); } } } if ($payTypes && empty($payTypes[$_POST['payType']])) { $error = 1; Msg::add('Выберите способ оплаты'); } elseif ($payTypes && !empty($payTypes[$_POST['payType']])) { $payType = $payTypes[$_POST['payType']]; $cart->paytype_id = $payType->id; } else { $payType = null; } foreach (\Ecommerce\UserAdds\Field::getList() as $field) { if (empty($_POST['userAdds']['fields'][$field->id]) && $field->required) { $error = 1; Msg::add('Вы не указали: ' . $field->name); } } if (!empty($_POST['discounts']['card_item_id'])) { $userCard = \Ecommerce\Card\Item::get((int) $_POST['discounts']['card_item_id']); if (!$userCard) { $error = true; Msg::add('Такой карты не существует'); } elseif ($userCard->user_id != $user->id) { $error = true; Msg::add('Это не ваша карта'); } else { $cart->card_item_id = $userCard->id; } } $cart->save(); if (!$error && !empty($_POST['action']) && ($_POST['action'] = 'order')) { $cart->user_id = $user->user_id; $this->module->parseFields($_POST['userAdds']['fields'], $cart); if ($payTypes && !empty($payTypes[$cart->paytype_id]) && !empty($_POST['deliveryFields'])) { $this->module->parseDeliveryFields($_POST['deliveryFields'], $cart, $deliverys[$cart->delivery_id]->fields); } $cart->cart_status_id = 2; $cart->comment = htmlspecialchars($_POST['comment']); $cart->date_status = date('Y-m-d H:i:s'); $cart->complete_data = date('Y-m-d H:i:s'); $cart->warehouse_block = 1; $cart->save(); $cart = \Ecommerce\Cart::get($cart->id); foreach ($cart->cartItems as $cartItem) { $cartItem->discount = $cartItem->discount(); $cartItem->final_price = $cartItem->price->price - $cartItem->discount; $cartItem->save(); } $cart = \Ecommerce\Cart::get($cart->id); if (!empty(\App::$cur->ecommerce->config['notify_mail'])) { $text = 'Перейдите в админ панель чтобы просмотреть новый заказ <a href = "http://' . idn_to_utf8(INJI_DOMAIN_NAME) . '/admin/ecommerce/Cart">Админ панель</a>'; $title = 'Новый заказ в интернет магазине на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME); \Tools::sendMail('noreply@' . INJI_DOMAIN_NAME, \App::$cur->ecommerce->config['notify_mail'], $title, $text); } if ($this->notifications) { $notification = new Notifications\Notification(); $notification->name = 'Новый заказ в интернет магазине на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME); $notification->text = 'Перейдите в админ панель чтобы просмотреть новый заказ'; $notification->chanel_id = $this->notifications->getChanel('Ecommerce-orders')->id; $notification->save(); } $handlers = $this->ecommerce->getSnippets('payTypeHandler'); $redirect = ['/ecommerce/cart/success']; if ($payType && !empty($handlers[$payType->handler]['handler'])) { $newRedirect = $handlers[$payType->handler]['handler']($cart); if (!empty($newRedirect)) { $redirect = $newRedirect; } } unset($_SESSION['cart']['cart_id']); call_user_func_array(['Tools', 'redirect'], $redirect); } } } $this->view->setTitle('Корзина'); $bread = []; $bread[] = ['text' => 'Каталог', 'href' => '/ecommerce']; $bread[] = ['text' => 'Корзина', 'href' => '/ecommerce/cart']; $this->view->page(['data' => compact('cart', 'items', 'deliverys', 'payTypes', 'packItem', 'bread')]); }
public static function auth() { $config = static::getConfig(); if (empty($_GET['code']) && empty($_GET['error'])) { $query = ['client_id' => $config['appId'], 'scope' => 'email', 'response_type' => 'code', 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/facebook']; \Tools::redirect("https://www.facebook.com/dialog/oauth?" . http_build_query($query)); } if (empty($_GET['code']) && !empty($_GET['error'])) { \Tools::redirect('/', 'Произошла ошибка во время авторизации через соц. сеть: ' . $_GET['error_description']); } $query = ['client_id' => $config['appId'], 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/facebook', 'client_secret' => $config['secret'], 'code' => urldecode($_GET['code'])]; $result = @file_get_contents("https://graph.facebook.com/oauth/access_token?" . http_build_query($query)); if ($result === false) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } parse_str($result, $output); if (empty($output['access_token'])) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $userQuery = ['access_token' => $output['access_token'], 'fields' => 'first_name,middle_name,last_name,email,gender,location,picture']; $userResult = @file_get_contents("https://graph.facebook.com/me?" . http_build_query($userQuery)); if (!$userResult) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $userDetail = json_decode($userResult, true); if (empty($userDetail['id'])) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $social = static::getObject(); $userSocial = \Users\User\Social::get([['uid', $userDetail['id']], ['social_id', $social->id]]); if ($userSocial && $userSocial->user) { \App::$cur->users->newSession($userSocial->user); if (!empty(\App::$cur->users->config['loginUrl'][\App::$cur->type])) { \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type]); } } else { if ($userSocial && !$userSocial->user) { $userSocial->delete(); } if (!\Users\User::$cur->id) { $user = false; if (!empty($userDetail['email'])) { $user = \Users\User::get($userDetail['email'], 'mail'); } if (!$user) { $user = new \Users\User(); $user->group_id = 2; $user->role_id = 2; if (!empty($userDetail['email'])) { $user->login = $user->mail = $userDetail['email']; } $invite_code = !empty($_POST['invite_code']) ? $_POST['invite_code'] : (!empty($_COOKIE['invite_code']) ? $_COOKIE['invite_code'] : (!empty($_GET['invite_code']) ? $_GET['invite_code'] : '')); if (!empty($invite_code)) { $invite = \Users\User\Invite::get($invite_code, 'code'); $inveiteError = false; if (!$invite) { Msg::add('Такой код пришлашения не найден', 'danger'); $inveiteError = true; } if ($invite->limit && !($invite->limit - $invite->count)) { Msg::add('Лимит приглашений для данного кода исчерпан', 'danger'); $inveiteError = true; } if (!$inveiteError) { $user->parent_id = $invite->user_id; $invite->count++; $invite->save(); } } if (!$user->parent_id && !empty(\App::$cur->Users->config['defaultPartner'])) { $user->parent_id = \App::$cur->Users->config['defaultPartner']; } $user->save(); $userInfo = new \Users\User\Info(); $userInfo->user_id = $user->id; $userInfo->save(); } } else { $user = \Users\User::$cur; } if (!$user->info->photo_file_id && !empty($userDetail['picture']['data']['url'])) { $user->info->photo_file_id = \App::$cur->files->uploadFromUrl($userDetail['picture']['data']['url']); } if (!$user->info->first_name && !empty($userDetail['first_name'])) { $user->info->first_name = $userDetail['first_name']; } if (!$user->info->last_name && !empty($userDetail['last_name'])) { $user->info->last_name = $userDetail['last_name']; } if (!$user->info->middle_name && !empty($userDetail['middle_name'])) { $user->info->middle_name = $userDetail['middle_name']; } if (!$user->info->city && !empty($userDetail['location'])) { $user->info->city = $userDetail['location']; } if (!$user->info->sex && !empty($userDetail['gender'])) { $user->info->sex = $userDetail['gender'] == 'male' ? 1 : ($userDetail['gender'] == 'female' ? 2 : 0); } $user->info->save(); $userSocial = new \Users\User\Social(); $userSocial->uid = $userDetail['id']; $userSocial->social_id = $social->id; $userSocial->user_id = $user->id; $userSocial->save(); \App::$cur->users->newSession($user); if (!empty(\App::$cur->users->config['loginUrl'][\App::$cur->type])) { \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type], 'Вы успешно зарегистрировались через Facebook', 'success'); } else { \Tools::redirect('/users/cabinet/profile', 'Вы успешно зарегистрировались через Facebook', 'success'); } } }
/** * Redirect user from any place of code * * Also add message to message query for view * * @param string $href * @param string $text * @param string $status */ public static function redirect($href = null, $text = false, $status = 'info') { if ($href === null) { $href = $_SERVER['REQUEST_URI']; } if ($text !== false) { Msg::add($text, $status); } if (!headers_sent()) { header("Location: {$href}"); } else { echo '\'"><script>window.location="' . $href . '";</script>'; } exit("Перенаправление на: <a href = '{$href}'>{$href}</a>"); }
public static function auth() { $config = static::getConfig(); if (empty($_GET['code']) && empty($_GET['error'])) { $query = ['client_id' => $config['client_id'], 'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', 'response_type' => 'code', 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/google']; \Tools::redirect("https://accounts.google.com/o/oauth2/auth?" . http_build_query($query)); } if (empty($_GET['code']) && !empty($_GET['error'])) { \Tools::redirect('/', 'Произошла ошибка во время авторизации через соц. сеть: ' . $_GET['error_description']); } $query = ['client_id' => $config['client_id'], 'client_secret' => $config['secret'], 'code' => $_GET['code'], 'grant_type' => 'authorization_code', 'redirect_uri' => 'http://' . INJI_DOMAIN_NAME . '/users/social/auth/google']; $result = false; if ($curl = curl_init()) { curl_setopt($curl, CURLOPT_URL, 'https://accounts.google.com/o/oauth2/token'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($query)); $result = curl_exec($curl); curl_close($curl); } if ($result === false) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $result = json_decode($result, true); if (empty($result['access_token'])) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $userQuery = ['access_token' => $result['access_token']]; $userResult = @file_get_contents("https://www.googleapis.com/oauth2/v1/userinfo?" . http_build_query($userQuery)); if (!$userResult) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $userDetail = json_decode($userResult, true); if (empty($userDetail['id'])) { \Tools::redirect('/', 'Во время авторизации произошли ошибки', 'danger'); } $social = static::getObject(); $userSocial = \Users\User\Social::get([['uid', $userDetail['id']], ['social_id', $social->id]]); if ($userSocial && $userSocial->user) { \App::$cur->users->newSession($userSocial->user); if (!empty(\App::$cur->users->config['loginUrl'][\App::$cur->type])) { \Tools::redirect(\App::$cur->users->config['loginUrl'][\App::$cur->type]); } } else { if ($userSocial && !$userSocial->user) { $userSocial->delete(); } if (!\Users\User::$cur->id) { $user = false; if (!empty($userDetail['email']) && !empty($userDetail['verified_email'])) { $user = \Users\User::get($userDetail['email'], 'mail'); } if (!$user) { $user = new \Users\User(); $user->group_id = 2; $user->role_id = 2; if (!empty($userDetail['email']) && !empty($userDetail['verified_email'])) { $user->login = $user->mail = $userDetail['email']; } $invite_code = !empty($_POST['invite_code']) ? $_POST['invite_code'] : (!empty($_COOKIE['invite_code']) ? $_COOKIE['invite_code'] : (!empty($_GET['invite_code']) ? $_GET['invite_code'] : '')); if (!empty($invite_code)) { $invite = \Users\User\Invite::get($invite_code, 'code'); $inveiteError = false; if (!$invite) { Msg::add('Такой код пришлашения не найден', 'danger'); $inveiteError = true; } if ($invite->limit && !($invite->limit - $invite->count)) { Msg::add('Лимит приглашений для данного кода исчерпан', 'danger'); $inveiteError = true; } if (!$inveiteError) { $user->parent_id = $invite->user_id; $invite->count++; $invite->save(); } } if (!$user->parent_id && !empty(\App::$cur->Users->config['defaultPartner'])) { $user->parent_id = \App::$cur->Users->config['defaultPartner']; } $user->save(); $userInfo = new \Users\User\Info(); $userInfo->user_id = $user->id; $userInfo->save(); } } else { $user = \Users\User::$cur; } if (!$user->info->photo_file_id && !empty($userDetail['picture'])) { $user->info->photo_file_id = \App::$cur->files->uploadFromUrl($userDetail['picture']); } if (!$user->info->first_name && !empty($userDetail['given_name'])) { $user->info->first_name = $userDetail['given_name']; } if (!$user->info->last_name && !empty($userDetail['family_name'])) { $user->info->last_name = $userDetail['family_name']; } if (!$user->info->sex && !empty($userDetail['gender'])) { $user->info->sex = $userDetail['gender'] == 'male' ? 1 : ($userDetail['gender'] == 'female' ? 2 : 0); } $user->info->save(); $userSocial = new \Users\User\Social(); $userSocial->uid = $userDetail['id']; $userSocial->social_id = $social->id; $userSocial->user_id = $user->id; $userSocial->save(); \App::$cur->users->newSession($user); \Tools::redirect('/users/cabinet/profile', 'Вы успешно зарегистрировались через Google+', 'success'); } }