/** * Действие при оплате заказа * Обновляет статус заказа на Оплачен, отправляет письма оповещения, генерирует хук. */ public function actionWhenPayment($args) { $result = true; ob_start(); $order = new Models_Order(); if (method_exists($order, 'updateOrder')) { $order->updateOrder(array('id' => $args['paymentOrderId'], 'status_id' => 2)); } if (method_exists($order, 'sendMailOfPayed')) { $order->sendMailOfPayed($args['paymentOrderId'], $args['paymentAmount'], $args['paymentID']); } if (method_exists($order, 'sendLinkForElectro')) { $order->sendLinkForElectro($args['paymentOrderId']); } $content = ob_get_contents(); ob_end_clean(); // если в ходе работы метода допущен вывод контента, то записать в лог ошибку. if (!empty($content)) { MG::loger('ERROR PAYMENT: ' . $content); } return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Парсинг XML и импортв БД товаров. * @param $filename - путь к файлу архива с данными. */ public function processImportXml($filename) { $importOnlyNew = false; $sep = DIRECTORY_SEPARATOR; $dirname = dirname(__FILE__); $realDocumentRoot = str_replace($sep . 'mg-core' . $sep . 'controllers', '', $dirname); $lastPositionProduct = $_SESSION['lastCountProduct1cImport']; $lastPositionOffer = $_SESSION['lastCountOffer1cImport']; $xml = $this->getImportXml($filename); if ($xml && $filename == 'import.xml') { foreach ($xml->Каталог->attributes() as $key => $val) { if ($key == 'СодержитТолькоИзменения' && $val == "true") { $importOnlyNew = true; } } if (isset($xml->Каталог->СодержитТолькоИзменения)) { $importOnlyNew = $xml->Каталог->СодержитТолькоИзменения[0] == 'true' ? true : false; } if (empty($lastPositionProduct) && $importOnlyNew == false) { // если установлена директива CLEAR_CATALOG = 1 в config.ini, то удаляем товары перед синхронизацией с 1с if (CLEAR_1С_CATALOG != 'CLEAR_1С_CATALOG' && CLEAR_1С_CATALOG != 0) { DB::query('DELETE FROM `' . PREFIX . 'product` WHERE 1'); DB::query('DELETE FROM `' . PREFIX . 'category` WHERE 1'); } } $category = $this->groupsGreate($xml->Классификатор, $category, 0); $this->propertyСreate($xml->Классификатор->Свойства); $model = new Models_Product(); $currentPosition = 0; foreach ($xml->Каталог->Товары[0] as $item) { $currentPosition++; if ($currentPosition <= $lastPositionProduct) { continue; } // Добавляем изображение товара в папку uploads $imageUrl = array(); if (isset($item->Картинка)) { foreach ($item->Картинка as $img) { $path = $item->Картинка; $image = basename($item->Картинка); if (!empty($image) && is_file($path)) { copy($path, $realDocumentRoot . $sep . 'uploads' . $sep . $image); $widthPreview = MG::getSetting('widthPreview') ? MG::getSetting('widthPreview') : 200; $widthSmallPreview = MG::getSetting('widthSmallPreview') ? MG::getSetting('widthSmallPreview') : 50; $heightPreview = MG::getSetting('heightPreview') ? MG::getSetting('heightPreview') : 100; $heightSmallPreview = MG::getSetting('heightSmallPreview') ? MG::getSetting('heightSmallPreview') : 50; $upload = new Upload(false); $upload->_reSizeImage('70_' . $image, $realDocumentRoot . $sep . 'uploads' . $sep . $image, $widthPreview, $heightPreview); // миниатюра по размерам из БД (150*100) $upload->_reSizeImage('30_' . $image, $realDocumentRoot . $sep . 'uploads' . $sep . $image, $widthSmallPreview, $heightSmallPreview); } $imageUrl[] = $image; } } $imageUrl = implode($imageUrl, "|"); $id = (string) $item->Группы->Ид[0]; $name = (string) $item->Наименование[0]; $description = ''; if (isset($item->Описание)) { $description = nl2br((string) $item->Описание[0], true); } foreach ($item->ЗначенияРеквизитов->ЗначениеРеквизита as $row) { if ($row->Наименование == 'Полное наименование') { $name = $row->Значение; } } $code = !empty($item->Артикул[0]) ? $item->Артикул[0] : $item->ШтрихКод[0]; $id_1c = (string) $item->Ид[0]; $dataProd = array('title' => $name, 'url' => str_replace('\\', '-', URL::prepareUrl(MG::translitIt($name))), 'code' => $code, 'price' => 0, 'description' => $description, 'old_price' => '', 'image_url' => $imageUrl, 'count' => 0, 'cat_id' => $category[$id]['category_id'], 'meta_title' => $name, 'meta_keywords' => $name, 'meta_desc' => MG::textMore($description, 157), 'recommend' => 0, 'activity' => 1, 'new' => 0, 'related' => '', 'inside_cat' => '', '1c_id' => $id_1c, 'weight' => '0'); MG::loger($importOnlyNew); MG::loger(print_r($dataProd, 1)); if ($importOnlyNew) { unset($dataProd['description']); unset($dataProd['image_url']); unset($dataProd['meta_title']); unset($dataProd['meta_keywords']); unset($dataProd['recommend']); unset($dataProd['activity']); unset($dataProd['new']); unset($dataProd['related']); unset($dataProd['inside_cat']); unset($dataProd['weight']); } MG::loger(print_r($dataProd, 1)); $res = DB::query('SELECT * FROM ' . PREFIX . 'product WHERE `1c_id`=' . DB::quote($id_1c)); if ($row = DB::fetchAssoc($res)) { DB::query(' UPDATE `' . PREFIX . 'product` SET ' . DB::buildPartQuery($dataProd) . ' WHERE `1c_id`=' . DB::quote($id_1c)); } else { $model->addProduct($dataProd); } // Привязываем свойства. if (isset($item->ЗначенияСвойств)) { foreach ($item->ЗначенияСвойств->ЗначенияСвойства as $prop) { $this->propertyConnect($id_1c, $prop->Ид, $prop->Значение, $category[$id]['category_id']); } } $execTime = microtime(true) - $this->startTime; if ($execTime + 1 >= $this->maxExecTime) { header("Content-type: text/xml; charset=utf-8"); echo ""; echo "progress\r\n"; echo "Выгружено товаров: {$currentPosition}"; $_SESSION['lastCountProduct1cImport'] = $currentPosition; exit; } } if ($this->unlinkFile) { unlink($filename); } $_SESSION['lastCountProduct1cImport'] = 0; } elseif ($xml && $filename == 'offers.xml') { $currentPosition = 0; foreach ($xml->ПакетПредложений[0]->Предложения[0] as $item) { $currentPosition++; if ($currentPosition <= $lastPositionOffer) { continue; } $id = (string) $item->Ид[0]; $price = (string) $item->Цены->Цена->ЦенаЗаЕдиницу[0]; $count = (string) $item->Количество[0]; $code = !empty($item->Артикул[0]) ? $item->Артикул[0] : $item->ШтрихКод[0]; $partProd = array('price' => $price, 'count' => $count, 'code' => $code, 'price_course' => $price); DB::query(' UPDATE `' . PREFIX . 'product` SET ' . DB::buildPartQuery($partProd) . ' WHERE 1c_id = ' . DB::quote($id) . ' '); $execTime = microtime(true) - $this->startTime; if ($execTime + 1 >= $this->maxExecTime) { header("Content-type: text/xml; charset=utf-8"); echo ""; echo "progress\r\n"; echo "Выгружено предложений: {$currentPosition}"; $_SESSION['lastCountOffer1cImport'] = $currentPosition; exit; } } if ($this->unlinkFile) { unlink($filename); } $_SESSION['lastCountOffer1cImport'] = 0; Storage::clear(); } else { echo "Ошибка загрузки XML\n"; foreach (libxml_get_errors() as $error) { echo "\t", $error->message; exit; } } }