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; }
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 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; }
/** * Отправляет сообщение о смене статуса заказа, его владельцу. * @param int $id = номер заказа * @param int $statusId = новый статус */ public function sendStatusToEmail($id, $statusId) { $order = $this->getOrder('id = ' . $id); $lang = MG::get('lang'); $statusArray = self::$status; $statusName = $lang[$statusArray[$statusId]]; $statusOldName = $lang[$statusArray[$order[$id]['status_id']]]; $paramToMail = array('orderInfo' => $order[$id], 'statusId' => $statusId, 'statusName' => $statusName, 'statusOldName' => $statusOldName); if ($statusName !== $statusOldName) { $emailToUser = MG::layoutManager('email_order_status', $paramToMail); Mailer::addHeaders(array("Reply-to" => MG::getSetting('noReplyEmail'))); Mailer::sendMimeMail(array('nameFrom' => MG::getSetting('noReplyEmail'), 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => $order[$id]['user_email'], 'emailTo' => $order[$id]['user_email'], 'subject' => "Заказ №" . $order[$id]['number'] . " " . $statusName, 'body' => $emailToUser, 'html' => true)); } else { return false; } }
/** * Проверяем, нужно ли отчислить коммисионные по пришедшей оплате для заказа с сервисов оплаты * @param $arg - параметры переданые из payment.php */ static function updateOrder($arg) { $orderId = $arg["args"]["paymentOrderId"]; $model = new Models_Order(); $order = $model->getOrder(PREFIX . 'order.id=' . $orderId); // если статус заказа становится "Оплачен или выполнен", то отправляем письмо админу, о том что заказ оформлен благодаря партнеру. // в базе сохраняется привязка. Если в последствии изменить статус, то привязка останется! if ($order[$orderId]['status_id'] == 2) { $partner = self::closeOrderPartner($orderId); if (empty($partner)) { return true; } //Отправляем админам $sitename = MG::getSetting('sitename'); $message = 'Заказ #' . $orderId . ' был оплачен после перехода по реферальной ссылке <b>партнера #' . $partner['id'] . '</b>. На счет пользователя <b>' . $partner['email'] . '</b> зачислены коммисионные ' . $partner['summ'] . ' ' . MG::getSetting('currency'); $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" => MG::getSetting('noReplyEmail'))); Mailer::sendMimeMail(array('nameFrom' => $sitename, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => $sitename, 'emailTo' => $mail, 'subject' => $partner['percent'] . '% от заказа #' . $partner['id'] . ' зачислено на счет партнеру ' . $partner['email'], 'body' => $message, 'html' => true)); } } } return true; }
/** * Получает данные об ошибке произошедшей в админке и отправляет на support@moguta.ru. * @return boolean */ public function sendBugReport() { $this->messageSucces = "Отчет отправлен"; $this->messageError = "Неудалось отправить отчет"; $body .= 'Непредвиденная ошибка на сайте ' . $_SERVER['SERVER_NAME']; $body .= '<br/><br/><br/><strong>Информация о системе</strong>'; $body .= '<br/>Версия Moguta.CMS: ' . VER; $body .= '<br/>Версия php: ' . phpversion(); $body .= '<br/>USER_AGENT: ' . $_SERVER['HTTP_USER_AGENT']; $body .= '<br/>IP: ' . $_SERVER['SERVER_ADDR']; $body .= '<br/><strong>Информация о магазине</strong>'; $product = new Models_Product(); $body .= '<br/>Количество товаров: ' . $product->getProductsCount(); $body .= '<br/>Количество категорий: ' . MG::get('category')->getCategoryCount(); $body .= '<br/>Шаблон: ' . MG::getSetting('templateName'); $body .= '<br/>E-mail администратора: ' . MG::getSetting('adminEmail'); $body .= '<br/><strong>Баг-репорт</strong>'; $body .= '<br/>' . $_POST['text']; $body .= '<br/><br/><img alt="Embedded Image" src="data:' . $_POST['screen'] . '" />'; Mailer::addHeaders(array("Reply-to" => MG::getSetting('adminEmail'))); Mailer::sendMimeMail(array('nameFrom' => MG::getSetting('adminEmail'), 'emailFrom' => MG::getSetting('adminEmail'), 'nameTo' => "*****@*****.**", 'emailTo' => "*****@*****.**", 'subject' => "Отчет об ошибке с сайта " . $_SERVER['SERVER_NAME'], 'body' => $body, 'html' => true)); return true; }
/** * Сохраняет заказ в базу сайта. * Добавляет в массив корзины третий параметр 'цена товара', для сохранения в заказ. * Это нужно для тогою чтобы в последствии вывести детальную информацию о заказе. * Если оставить только id то информация может оказаться неверной, так как цены меняютcя. * @return int $id номер заказа. */ public function addOrder($adminOrder = false) { $itemPosition = new Models_Product(); $cart = new Models_Cart(); $catalog = new Models_Catalog(); $categoryArray = $catalog->getCategoryArray(); $this->summ = 0; // Массив запросов на обновление количества товаров. $updateCountProd = array(); // Добавляем в массив корзины параметр 'цена товара'. if ($adminOrder) { $this->email = $adminOrder['user_email']; $this->phone = $adminOrder['phone']; $this->address = $adminOrder['address']; $this->delivery = $adminOrder['delivery_id']; $this->delivery_cost = $adminOrder['delivery_cost']; $this->payment = $adminOrder['payment_id']; $this->fio = $adminOrder['user_email']; $formatedDate = date('Y-m-d H:i:s'); // Форматированная дата ГГГГ-ММ-ДД ЧЧ:ММ:СС. foreach ($adminOrder['order_content'] as $item) { $product = $itemPosition->getProduct($item['id']); $_SESSION['couponCode'] = $item['coupon']; $productUrl = $product['category_url'] . '/' . $product['url']; $itemCount = $item['count']; if (!empty($product)) { $product['price'] = $item['price']; $product['price'] = $cart->applyCoupon($_SESSION['couponCode'], $product['price'], $product); $discount = 100 - $product['price'] * 100 / $item['price']; $productPositions[] = array('id' => $product['id'], 'name' => $item['title'], 'url' => $productUrl, 'code' => $item['code'], 'price' => $product['price'], 'count' => $itemCount, 'property' => $item['property'], 'coupon' => $_SESSION['couponCode'], 'discount' => $discount, 'info' => $this->info); $this->summ += $product['price'] * $itemCount; $product['count'] = $product['count'] - $itemCount >= 0 ? $product['count'] - $itemCount : 0; // По ходу формируем массив запросов на обновление количества товаров. $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count`= " . DB::quote($product['count']) . " WHERE `id`=" . DB::quote($product['id']) . " AND `count`>0"; } } } elseif (!empty($_SESSION['cart'])) { foreach ($_SESSION['cart'] as $item) { $product = $itemPosition->getProduct($item['id']); // Дописываем к массиву продуктов данные о выбранных характеристиках из корзины покупок, чтобы приплюсовать к сумме заказа. if ($item['id'] == $product['id']) { $product['property_html'] = $item['propertyReal']; } $variant = null; if (!empty($item['variantId']) && $item['id'] == $product['id']) { $variants = $itemPosition->getVariants($product['id']); $variant = $variants[$item['variantId']]; $product['price'] = $variant['price']; $product['price'] = $cart->applyCoupon($_SESSION['couponCode'], $product['price'], $product); $product['code'] = $variant['code']; $product['count'] = $variant['count']; $product['title'] .= " " . $variant['title_variant']; //По ходу формируем массив запросов на обновление количества товаров $resCount = $variant['code']; $resCount = $variant['count'] - $item['count'] >= 0 ? $variant['count'] - $item['count'] : 0; $updateCountProd[] = "UPDATE `" . PREFIX . "product_variant` SET `count`= " . DB::quote($resCount) . " WHERE `id`=" . DB::quote($item['variantId']) . " AND `count`>0"; } $productUrl = $product['category_url'] . '/' . $product['url']; // Eсли куки не актуальны исключает попадание несуществующего продукта в заказ if (!empty($product)) { $product['price'] = SmalCart::plusPropertyMargin($product['price'], $product['property_html']); $tempPrice = $product['price']; $product['price'] = $cart->applyCoupon($_SESSION['couponCode'], $product['price'], $product); $discount = 100 - $product['price'] * 100 / $tempPrice; $productPositions[] = array('id' => $product['id'], 'name' => $product['title'], 'url' => $productUrl, 'code' => $product['code'], 'price' => $product['price'], 'count' => $item['count'], 'property' => $item['property'], 'coupon' => $_SESSION['couponCode'], 'discount' => $discount, 'info' => $this->info); $this->summ += $product['price'] * $item['count']; if (!$resCount) { $resCount = $product['count'] - $item['count'] >= 0 ? $product['count'] - $item['count'] : 0; } //По ходу формируем массив запросов на обновление количества товаров $updateCountProd[] = "UPDATE `" . PREFIX . "product` SET `count`= " . DB::quote($resCount) . " WHERE `id`=" . DB::quote($product['id']) . " AND `count`>0"; $resCount = null; } } } // Сериализует данные в строку для записи в бд. $orderContent = addslashes(serialize($productPositions)); // Сериализует данные в строку для записи в бд информации об юридическом лице. $yurInfo = ''; if (!empty($adminOrder['yur_info'])) { $yurInfo = addslashes(serialize($adminOrder['yur_info'])); } if (!empty($_POST['yur_info'])) { $yurInfo = addslashes(serialize($_POST['yur_info'])); } // Создает новую модель корзины, чтобы узнать сумму заказа. $cart = new Models_Cart(); // Генерируем уникальный хэш для подтверждения заказа. $hash = $this->_getHash($this->email); // Формируем массив параметров для SQL запроса. $array = array('user_email' => $this->email, 'summ' => $this->summ, 'order_content' => $orderContent, 'phone' => $this->phone, 'address' => $this->address, 'delivery_id' => $this->delivery, 'delivery_cost' => $this->delivery_cost, 'payment_id' => $this->payment, 'paided' => '0', 'status_id' => '0', 'confirmation' => $hash, 'yur_info' => $yurInfo, 'name_buyer' => $this->fio); // Если заказ оформляется через админку. if ($adminOrder) { $array['comment'] = $adminOrder['comment']; $array['status_id'] = $adminOrder['status_id']; $array['add_date'] = $formatedDate; DB::buildQuery("INSERT INTO `" . PREFIX . "order` SET ", $array); } else { // Отдает на обработку родительской функции buildQuery. DB::buildQuery("INSERT INTO `" . PREFIX . "order` SET add_date = now(), ", $array); } // Заказ номер id добавлен в базу. $id = null; $id = DB::insertId(); unset($_SESSION['couponCode']); // Ссылка для подтверждения заказа $link = 'ссылке <a href="' . SITE . '/order?sec=' . $hash . '&id=' . $id . '" target="blank">' . SITE . '/order?sec=' . $hash . '&id=' . $id . '</a>'; $table = ""; // Формирование тела письма. if ($id) { // Уменьшаем количество купленных товаров if (!empty($updateCountProd)) { foreach ($updateCountProd as $sql) { DB::query($sql); } } // Если заказ создался, то уменьшаем количество товаров на складе. $settings = MG::get('settings'); $delivery = $this->getDeliveryMethod(false, $this->delivery); $sitename = $settings['sitename']; $currency = MG::getSetting('currency'); $subj = 'Оформлена заявка №' . $id . ' на сайте ' . $sitename; $subj = str_replace('№', '#', $subj); if ($this->fio) { $table .= '<br/><b>Покупатель:</b> ' . $this->fio; } $table .= '<br/><b>E-mail:</b> ' . $this->email; $table .= '<br/><b>Тел:</b> ' . $this->phone; if ($this->address) { $table .= '<br/><b>Адрес:</b> ' . $this->address; } $table .= '<br/><b>Доставка:</b> ' . $delivery['description']; $paymentArray = $this->getPaymentMethod($this->payment); $table .= '<br/><b>Оплата:</b> ' . $paymentArray['name']; $table .= ' <style> table {border: 4px double black;border-collapse: collapse;} th {text-align: left;background: #ccc;padding: 5px;border: 1px solid black;} td {padding: 5px;border: 1px solid black;} </style>'; $table .= '<br><br><table>'; if (!empty($_SESSION['cart']) || $adminOrder) { $table .= ' <tr> <th>Наименование товара</th> <th>Артикул</th> <th>Стоимость</th> <th>Количество</th> </tr>'; foreach ($productPositions as $product) { $product['property'] = htmlspecialchars_decode(str_replace('&', '&', $product['property'])); $table .= ' <tr> <td>' . $product['name'] . $product['property'] . '</td> <td>' . $product['code'] . '</td> <td>' . $product['price'] . ' ' . $currency . '</td> <td>' . $product['count'] . ' шт.</td> </tr>'; } } $table .= '</table>'; $table .= '<br><b>Итого:</b> ' . $this->summ . ' ' . $currency; $table .= '<br/><b>Стоимость доставки:</b> ' . $this->delivery_cost . " " . $currency; $totalSumm = $this->delivery_cost + $this->summ; $table .= '<br/><b>Всего к оплате:</b> <span style="color:red">' . $totalSumm . ' ' . $currency . '</span>'; $msg = MG::getSetting('orderMessage') . '<br><u>Обязательно подтвердите</u> свой заказ, перейдя по ' . $link . '.<br>' . $table; $msg = str_replace('#ORDER#', $id, $msg); $msg = str_replace('#SITE#', $sitename, $msg); $msg = str_replace('№', '#', $msg); $mails = explode(',', MG::getSetting('adminEmail')); // Отправка заявки админам. // Дополнительная информация для админов. $msgAdmin .= '<br/><br/><b>Покупатель перешел к нам на сайт из: </b><br/>' . $_SESSION['lastvisit'] . '<br/><br/><b>Покупатель впервые перешел к нам на сайт из: </b><br/>' . $_SESSION['firstvisit']; 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" => $this->email)); Mailer::sendMimeMail(array('nameFrom' => $this->fio, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => $sitename, 'emailTo' => $mail, 'subject' => $subj, 'body' => $msg . $msgAdmin, 'html' => true)); } } // Добавление в тело письма ссылки для задания пароля. $msg .= '<br>Подтвердите свой заказ, перейдя по ' . $link; // Отправка заявки пользователю. Mailer::sendMimeMail(array('nameFrom' => $sitename, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => $this->fio, 'emailTo' => $this->email, 'subject' => $subj, 'body' => $msg, 'html' => true)); // Если заказ успешно записан, то очищает корзину. if (!$adminOrder) { $cart->clearCart(); } } // Возвращаем номер созданого заказа. $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $id, $args); }