Example #1
0
 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;
 }
Example #2
0
 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;
 }
Example #3
0
 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;
 }
Example #4
0
 /**
  * Отправляет сообщение о смене статуса заказа, его владельцу.
  * @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;
     }
 }
Example #5
0
 /**
  * Проверяем, нужно ли отчислить коммисионные по пришедшей оплате для заказа с сервисов оплаты
  * @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;
 }
Example #6
0
 /**
  * Получает данные об ошибке произошедшей в админке и отправляет на 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;
 }
Example #7
0
 /**
  * Сохраняет заказ в базу сайта.
  * Добавляет в массив корзины третий параметр 'цена товара', для сохранения в заказ.
  * Это нужно для тогою чтобы в последствии вывести детальную информацию о заказе.
  * Если оставить только 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('&amp;', '&', $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);
 }