function __construct() { if (User::isAuth()) { MG::redirect('/'); } // Шаг первый. $form = 1; $fPass = new Models_Forgotpass(); // Ввторой шаг, производящий проверку введеного электронного адреса. if (URL::getQueryParametr('forgotpass')) { $email = URL::getQueryParametr('email'); if ($userInfo = USER::getUserInfoByEmail($email)) { //Если введенных адрес совпадает с зарегистрированным в системе, то $form = 0; $message = 'Инструкция по восстановлению пароля была отправлена на <strong>' . $email . '</strong>'; $hash = $fPass->getHash($email); //а) Случайный хэш заносится в БД. $fPass->sendHashToDB($email, $hash); $siteName = MG::getOption('sitename'); $emailMessage = MG::layoutManager('email_forgot', array('siteName' => $siteName, 'email' => $email, 'hash' => $hash, 'userId' => $userInfo->id, 'link' => SITE . '/forgotpass?sec=' . $hash . '&id=' . $userInfo->id)); $emailData = array('nameFrom' => $siteName, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => 'Пользователю сайта ' . $siteName, 'emailTo' => $email, 'subject' => 'Восстановление пароля на сайте ' . $siteName, 'body' => $emailMessage, 'html' => true); //б) На указанный электронный адрес отправляется письмо со сылкой на страницу восстановления пароля. $fPass->sendUrlToEmail($emailData); } else { $form = 0; $error = 'К сожалению, такой логин не найден<br> Если вы уверены, что данный логин существует, пожалуйста, свяжитесь с нами.'; } } // Шаг 3. Обработка перехода по ссылки. Принимается id пользователя и сгенерированный хэш. if ($_GET) { $userInfo = USER::getUserById(URL::getQueryParametr('id')); $hash = URL::getQueryParametr('sec'); // Если присланный хэш совпадает с хэшом из БД для соответствующего id. if ($userInfo->restore == $hash) { $form = 2; // Меняе в БД случайным образом хэш, делая невозможным повторный переход по ссылки. $fPass->sendHashToDB($userInfo->email, $fPass->getHash('0')); $_SESSION['id'] = URL::getQueryParametr('id'); } else { $form = 0; $error = 'Некорректная ссылка. Повторите заново запрос восстановления пароля.'; } } // Шаг 4. обрабатываем запрос на ввод нового пароля if (URL::getQueryParametr('chengePass')) { $form = 2; $person = new Models_Personal(); $msg = $person->changePass(URL::getQueryParametr('newPass'), $_SESSION['id'], true); if ('Пароль изменен' == $msg) { $form = 0; $message = $msg . '! ' . 'Вы можете войти в личный кабинет по адресу <a href="' . SITE . '/enter" >' . SITE . '/enter</a>'; $fPass->activateUser($_SESSION['id']); unset($_SESSION['id']); } else { $error = $msg; } } $this->data = array('error' => $error, 'message' => $message, 'form' => $form, 'meta_title' => 'Восстановление пароля', 'meta_keywords' => $model->currentCategory['meta_keywords'] ? $model->currentCategory['meta_keywords'] : "забыли пароль, восстановить пароль, восстановление пароля", 'meta_desc' => $model->currentCategory['meta_desc'] ? $model->currentCategory['meta_desc'] : "Если вы забыли пароль от личного кабинета, его модно восстановить с помощью формы восстановления паролей."); }
function __construct() { $html = MG::get('pages')->getPageByUrl('feedback'); $html['html_content'] = MG::inlineEditor(PREFIX . 'page', "html_content", $html['id'], $html['html_content']); $data = array('dislpayForm' => true, 'meta_title' => $html['meta_title'] ? $html['meta_title'] : $html['title'], 'meta_keywords' => $html['meta_keywords'], 'meta_desc' => $html['meta_desc'], 'html_content' => $html['html_content'], 'title' => $html['title']); // Если пришли данные с формы. if (isset($_POST['send'])) { // Создает модель отправки сообщения. $feedBack = new Models_Feedback(); // Проверяет на корректность вода. $error = $feedBack->isValidData($_POST); $data['error'] = $error; // Если есть ошибки заносит их в переменную. if (!$error) { $_POST['message'] = nl2br($_POST['message']); //Отправляем админам. $sitename = MG::getSetting('sitename'); //$message = str_replace('№', '#', $feedBack->getMessage()); $body = MG::layoutManager('email_feedback', array('msg' => $_POST['message'], 'email' => $feedBack->getEmail(), 'name' => $feedBack->getFio())); $mails = explode(',', MG::getSetting('adminEmail')); foreach ($mails as $mail) { if (preg_match('/^[-._a-zA-Z0-9]+@(?:[a-zA-Z0-9][-a-zA-Z0-9]+\\.)+[a-zA-Z]{2,6}$/', $mail)) { Mailer::addHeaders(array("Reply-to" => $feedBack->getEmail())); Mailer::sendMimeMail(array('nameFrom' => $feedBack->getFio(), 'emailFrom' => $feedBack->getEmail(), 'nameTo' => $sitename, 'emailTo' => $mail, 'subject' => 'Сообщение с формы обратной связи', 'body' => $body, 'html' => true)); } } MG::redirect('/feedback?thanks=1'); } } // Формирует сообщение. if (isset($_REQUEST['thanks'])) { $data = array('message' => 'Ваше сообщение отправлено!', 'dislpayForm' => false, 'meta_title' => 'Обратная связь', 'meta_keywords' => $model->currentCategory['meta_keywords'] ? $model->currentCategory['meta_keywords'] : "Обратная сввязь, быстрое сообщение, вопрос в поддержку", 'meta_desc' => $model->currentCategory['meta_desc'] ? $model->currentCategory['meta_desc'] : "Задайте свой вопрос по средствам формы обратной связи."); } $this->data = $data; }
/** * Возвращает меню в HTML виде. * @param string type = top или footer. Footer - вернет три списка с равным количеством пунктов */ public static function getMenuFull($type = 'top') { if ($type == 'top') { $pages = MG::get('pages')->getHierarchyPage(); $print = MG::layoutManager('layout_topmenu', array('pages' => $pages)); } if ($type == 'footer') { $print .= MG::get('pages')->getFooterPagesUl(0); } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $print, $args); }
/** * Выводит верстку содержащуюся в заданном layout. * @param $layout - название верстки в папке шаблона layout, без префикса 'layout_'; * @param $data - массив данных переданых в layout'; */ function layout($layout, $data = null) { if (in_array($layout, array('cart', 'auth', 'contacts', 'search'))) { $data = MG::get('templateData'); } if ($layout == 'topmenu') { echo Menu::getMenuFull('top'); return true; } if ($layout == 'leftmenu') { echo MG::get('category')->getCategoriesHTML(); return true; } if ($layout == 'horizontmenu') { echo MG::get('category')->getCategoriesHorHTML(); return true; } if ($layout == 'content') { $data = MG::get('templateData'); echo $data['content']; return true; } if ($layout == 'widget') { echo MG::getSetting('widgetCode'); return true; } if ($layout == 'logo') { $logo = MG::getSetting('shopLogo') != '' ? MG::getSetting('shopLogo') : "/mg-templates/" . MG::getSetting('templateName') . "/images/logo.png"; echo '<img src="' . SITE . $logo . '" alt="">'; return true; } echo MG::layoutManager('layout_' . $layout, $data); return true; }
/** * Выводит на экран печатную форму для печати квитанции на оплату заказа. * @param boolean вывод на печать в публичной части, либо в админке. * @return array */ public function printQittance($public = true) { MG::disableTemplate(); $data['line'] = "<p class='line'></p>"; $data['line2'] = "<p class='line2'></p>"; $data['name'] = !empty($_POST['name']) ? $_POST['name'] : $line; $data['inn'] = !empty($_POST['inn']) ? $_POST['inn'] : $line; $data['nsp'] = !empty($_POST['nsp']) ? $_POST['nsp'] : $line; $data['ncsp'] = !empty($_POST['ncsp']) ? $_POST['ncsp'] : $data['line2']; $data['bank'] = !empty($_POST['bank']) ? $_POST['bank'] : $line; $data['bik'] = !empty($_POST['bik']) ? $_POST['bik'] : $data['line2']; $data['appointment'] = !empty($_POST['appointment']) ? $_POST['appointment'] : $line; $data['nls'] = !empty($_POST['nls']) ? $_POST['nls'] : $line; $data['payer'] = !empty($_POST['payer']) ? $_POST['payer'] : $data['line2']; $data['addrPayer'] = !empty($_POST['addrPayer']) ? $_POST['addrPayer'] : $data['line2']; $data['sRub'] = !empty($_POST['sRub']) ? $_POST['sRub'] : '_______'; $data['sKop'] = !empty($_POST['sKop']) ? $_POST['sKop'] : 0; $data['uRub'] = !empty($_POST['uRub']) ? $_POST['uRub'] : '_______'; $data['uKop'] = !empty($_POST['uKop']) ? $_POST['uKop'] : 0; $data['day'] = !isset($_POST['day']) || $_POST['day'] == '_' ? '____' : $_POST['day']; $data['month'] = !isset($_POST['month']) || $_POST['month'] == '_' ? '___________________' : $_POST['month']; if (!isset($_POST['sKop'])) { $sKop = '___'; } if (!isset($_POST['uKop'])) { $uKop = '___'; } $sResult = !empty($sKop) ? $sResult = "{$sRub}.{$sKop}" : $sRub; $uResult = !empty($uKop) ? $uResult = "{$uRub}.{$uKop}" : $uRub; $rubResult = $sResult + $uResult; if (empty($rubResult)) { settype($rubResult, 'null'); } if (is_double($rubResult)) { list($rub, $kop) = explode('.', $rubResult); } else { if (is_int($rubResult)) { $rub = $rubResult; $kop = "0"; } } if (empty($rub)) { $rub = '_______'; } if (!isset($kop)) { $kop = '___'; } $data['rub'] = $rub; $data['kop'] = $kop; $data['uKop'] = $uKop; $data['sKop'] = $sKop; $html = MG::layoutManager('print_qittance', $data); if ($public) { echo $html; exit; } return $html; }
/** * Возвращает HTML блок связанных товаров * @param type $args * @return type */ public function createRelatedForm($args, $title = 'С этим товаром покупают', $layout = 'layout_related') { if ($args) { $data['title'] = $title; $stringRelated = ' null'; $sortRelated = array(); foreach (explode(',', $args) as $item) { $stringRelated .= ',' . DB::quote($item); $sortRelated[$item] = $item; } $stringRelated = substr($stringRelated, 1); $data['products'] = $this->getProductByUserFilter(' p.code IN (' . $stringRelated . ') and p.activity = 1 '); if (!empty($data['products'])) { $data['currency'] = MG::getSetting('currency'); foreach ($data['products'] as $item) { $img = explode('|', $item['image_url']); $item['img'] = $img[0]; $item['category_url'] = SHORT_LINK == '1' ? '' : $item['category_url'] . '/'; $item['url'] = SITE . '/' . (isset($item["category_url"]) ? $item["category_url"] : 'catalog/') . $item["product_url"]; $item['price'] = MG::priceCourse($item['price_course']); $sortRelated[$item['code']] = $item; } $data['products'] = array(); //сортируем связанные товары в том порядке, в котором они идут в строке артикулов foreach ($sortRelated as $item) { if (!empty($item['id']) && is_array($item)) { $data['products'][$item['id']] = $item; } } $result = MG::layoutManager($layout, $data); } } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Метод отправки письма для активации пользователя. * @param type $userEmail * @return void */ private function _sendActivationMail($userEmail) { $userId = USER::getUserInfoByEmail($userEmail)->id; $hash = $this->fPass->getHash($userEmail); $this->fPass->sendHashToDB($userEmail, $hash); $siteName = MG::getOption('sitename'); $link = '<a href="' . SITE . '/registration?sec=' . $hash . '&id=' . $userId . '" target="blank">' . SITE . '/registration?sec=' . $hash . '&id=' . $userId . '</a>'; $paramToMail = array('siteName' => $siteName, 'userEmail' => $userEmail, 'link' => $link); $message = MG::layoutManager('email_registry', $paramToMail); $emailData = array('nameFrom' => $siteName, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => 'Пользователю сайта ' . $siteName, 'emailTo' => $userEmail, 'subject' => 'Активация пользователя на сайте ' . $siteName, 'body' => $message, 'html' => true); $this->fPass->sendUrlToEmail($emailData); }
/** * Метод отправки письма администратору с сcылкой для отмены блокировки авторизации . * @param type $unlockCode * @return void */ private function sendUnlockMail($unlockCode) { $link = '<a href="' . SITE . '/enter?unlock=' . $unlockCode . '" target="blank">' . SITE . '/enter?unlock=' . $unlockCode . '</a>'; $siteName = MG::getOption('sitename'); $paramToMail = array('siteName' => $siteName, 'link' => $link); $message = MG::layoutManager('email_unclockauth', $paramToMail); $emailData = array('nameFrom' => $siteName, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => 'Администратору сайтй ' . $siteName, 'emailTo' => MG::getSetting('adminEmail'), 'subject' => 'Подбор паролей на сайте ' . $siteName . ' предотвращен!', 'body' => $message, 'html' => true); if (Mailer::sendMimeMail($emailData)) { return true; } return false; }
/** * Возвращает закэшированное горизонтальное меню категорий. */ public function getCategoriesHorHTML() { $result = Storage::get(md5('getCategoriesHorHTML')); if ($result == null) { $category = $this->getHierarchyCategory(); $result = MG::layoutManager('layout_horizontmenu', array('categories' => $category)); if (MG::getSetting("enabledSiteEditor") == "false") { Storage::save(md5('getCategoriesHorHTML'), $result); } } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }