Пример #1
0
 /**
  * Создает таблицу плагина в БД
  */
 static function createDateBase()
 {
     // Если плагин впервые активирован, то задаются настройки по умолчанию
     if (!MG::getOption('pozvonimOption')) {
         $array = array('email' => '', 'phone' => '', 'host' => '');
         MG::setOption(array('option' => 'pozvonimOption', 'value' => addslashes(serialize($array))));
     }
 }
Пример #2
0
 /**
  * Сохраняет  опции плагина
  * @return boolean
  */
 public function saveBaseOption()
 {
     $this->messageSucces = 'Настройки применены';
     $this->messageError = 'Настройки не применены';
     if (!empty($_POST['data'])) {
         MG::setOption(array('option' => 'partners-program', 'value' => addslashes(serialize($_POST['data']))));
     }
     return true;
 }
Пример #3
0
 /**
  * Создает таблицу для функционирования плагина партнерки
  */
 static function createDateBase()
 {
     DB::query("CREATE TABLE IF NOT EXISTS `" . PREFIX . "partner` (\n      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер партнера',\n      `user_id` int(11) NOT NULL COMMENT 'Партнер',\n      `percent` float NOT NULL COMMENT 'Процент', \n      `payments_amount` float NOT NULL COMMENT 'Всего было выплачено', \n      PRIMARY KEY (`id`)\n    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
     DB::query("\n      CREATE TABLE IF NOT EXISTS `" . PREFIX . "partner_order` (\n      `partner_id` int(11) NOT NULL,\n      `order_id` int(11) UNIQUE NOT NULL,\n      `percent` double NOT NULL,\n      `summ` double NOT NULL\n    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Связь партнеров с оплаченными заказами';\n     ");
     DB::query("\n      CREATE TABLE IF NOT EXISTS `" . PREFIX . "partner_payments_amount` (\n        `id` int(11) NOT NULL AUTO_INCREMENT,\n        `partner_id` int(11) NOT NULL,\n        `date` datetime NOT NULL,\n        `summ` double NOT NULL,\n        PRIMARY KEY (`id`)\n      ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;\n     ");
     //добавляем статическу страницу /affiliate, чтобы ее было удобно редактировать.
     DB::query("INSERT IGNORE INTO `" . PREFIX . "page` ( `title`, `url`, `html_content`, `meta_title`, `meta_keywords`, `meta_desc`) VALUES\n                ( 'Партнерская программа', 'affiliate.html', '[affiliate]', 'Партнерская программа', 'Партнерская программа', 'Партнерская программа на " . MG::getSetting('sitename') . ", зарабатывайте с нами!');");
     $array = array('percent' => 20, 'exitMoneyLimit' => 1000);
     MG::setOption(array('option' => 'partners-program', 'value' => addslashes(serialize($array))));
 }
Пример #4
0
 public function saveBaseOption()
 {
     $this->messageSucces = $this->lang['SAVE_BASE'];
     $this->messageError = $this->lang['NOT_SAVE'];
     $data = $_POST['data'];
     if (!empty($data)) {
         MG::setOption(array('option' => 'uLoginSettings', 'value' => addslashes(serialize($_POST['data']))));
         return true;
     }
     return false;
 }
Пример #5
0
 /**
  * Создает таблицу плагина в БД
  */
 static function createDateBase()
 {
     DB::query("\r\n     CREATE TABLE IF NOT EXISTS `" . PREFIX . self::$pluginName . "` (\r\n      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Порядковый номер записи',\r\n      `type` varchar(255) NOT NULL COMMENT 'Тип слайда картинка или HTML',\r\n\t    `nameaction` text NOT NULL COMMENT 'Название слайда',\r\n      `href` text NOT NULL COMMENT 'ссылка', \r\n      `value` text NOT NULL COMMENT 'значение',      \r\n      `sort` int(11) NOT NULL COMMENT 'Порядок слайдов',\r\n      `invisible` int(1) NOT NULL COMMENT 'видимость',\r\n      PRIMARY KEY (`id`)\r\n    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
     // запрос для проверки, был ли плагин установлен ранее.
     $res = DB::query("\r\n      SELECT id\r\n      FROM `" . PREFIX . self::$pluginName . "`\r\n      WHERE id in (1,2,3) \r\n    ");
     // если плагин впервые активирован то задаются настройки по умолчанию
     if (!DB::numRows($res)) {
         DB::query("\r\n      INSERT INTO `" . PREFIX . self::$pluginName . "` (`id`, `type`,`nameaction`, `href`, `value`, `sort`, `invisible`) VALUES\r\n        (1, 'img', 'Акция 1','" . SITE . "/catalog', " . DB::quote("<img src='" . SITE . '/mg-plugins/' . self::$pluginName . "/images/pic/slide1.jpg' alt=''>") . ", 1,1),\r\n        (2, 'img', 'Акция 2','" . SITE . "/feedback', " . DB::quote("<img src='" . SITE . '/mg-plugins/' . self::$pluginName . "/images/pic/slide2.jpg' alt=''>") . ", 2,1),\r\n        (3, 'html', 'Акция 3','" . SITE . "/contacts', '<div style=\"background-color: blue; width: 1000px; height: 300px; text-align: center; background:rgb(214, 214, 214);\"><br />\n<span style=\"color:#006400;\"><span style=\"font-size:24px;\"><strong><font face=\"georgia, serif\">Название акциии<br />\n<br />\n<br />\n<br />\n<br />\nЛюбой HTML контент</font></strong></span></span><br />\n<br />\n<br />\n&nbsp;</div>\n', 3,1);\r\n      ");
         $array = array('width' => '', 'height' => '', 'speed' => '2000', 'pause' => '1500', 'mode' => 'horizontal', 'position' => 'left');
         MG::setOption(array('option' => 'sliderActionOption', 'value' => addslashes(serialize($array))));
     }
 }
Пример #6
0
 /**
  * Сохраняет  опции плагина
  *
  * @return boolean
  */
 public function saveBaseOption()
 {
     $this->messageSucces = $this->lang['SAVE_BASE'];
     $this->messageError = $this->lang['NOT_SAVE_BASE'];
     if (!empty($_POST['data'])) {
         @($oldData = unserialize(stripslashes(MG::getOption('pozvonimOption'))));
         $oldData = is_array($oldData) ? $oldData : array();
         $data = $_POST['data'];
         if (isset($data['reset'])) {
             $data = unserialize(stripslashes(MG::getOption('pozvonimOption')));
             if (is_array($data)) {
                 unset($data['id']);
                 MG::setOption(array('option' => 'pozvonimOption', 'value' => addslashes(serialize($data))));
             }
             $this->removeShortCode();
             $this->messageSucces = 'reload';
             return true;
         }
         if (isset($data['code']) && !empty($data['code'])) {
             $data['token'] = $oldData['token'];
             if (!preg_match('/\\/([a-z0-9]{32})\\/connect/iu', $data['code'], $code)) {
                 $this->messageError = $this->lang['BAD_CODE'];
                 return false;
             }
             $code = $code[1];
             $data['key'] = $code;
             MG::setOption(array('option' => 'pozvonimOption', 'value' => addslashes(serialize($data))));
             $this->messageSucces = $this->lang['CODE_SAVED'];
             $this->installShortCode();
             return true;
         }
         if ($data = $this->valid($data)) {
             if (isset($data['code'])) {
                 unset($data['code']);
             }
             MG::setOption(array('option' => 'pozvonimOption', 'value' => addslashes(serialize($data))));
             if ($data = $this->register($data)) {
                 if (isset($data['code'])) {
                     unset($data['code']);
                 }
                 MG::setOption(array('option' => 'pozvonimOption', 'value' => addslashes(serialize($data))));
                 $this->messageSucces = 'reload';
             } else {
                 $this->messageError = $this->apiError ? $this->apiError : $this->lang['EMAIL_EXIST'];
                 return false;
             }
         } else {
             return false;
         }
     }
     return true;
 }
Пример #7
0
 public static function createDateBaseNews()
 {
     DB::query("\n     CREATE TABLE IF NOT EXISTS  `mpl_news` (\n     `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,\n     `title` VARCHAR( 255 ) NOT NULL ,\n     `description` TEXT NOT NULL ,\n     `add_date` DATETIME NOT NULL ,\n     `url` VARCHAR( 255 ) NOT NULL ,\n     `image_url` VARCHAR( 255 ) NOT NULL ,\n     `meta_title` varchar(255) NOT NULL,\n     `meta_keywords` varchar(512) NOT NULL,\n     `meta_desc` text NOT NULL,\n     PRIMARY KEY ( `id` )\n     ) ENGINE = MYISAM DEFAULT CHARSET=utf8;\n   ");
     MG::setOption('countPrintRowsNews', 5);
     $realDocumentRoot = str_replace(DIRECTORY_SEPARATOR . 'mg-plugins' . DIRECTORY_SEPARATOR . 'news', '', dirname(__FILE__));
     $path = $realDocumentRoot . '/uploads/news/';
     if (!file_exists($path)) {
         chdir($realDocumentRoot . "/uploads/");
         mkdir("news", 0777);
         chdir($realDocumentRoot . "/uploads/news/");
         mkdir("thumbs", 0777);
     }
 }
Пример #8
0
 static function createTable()
 {
     DB::query("\n\t     CREATE TABLE IF NOT EXISTS `" . PREFIX . "call_back` (\n\t      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Порядковый номер записи',\n\t\t  `name` text NOT NULL COMMENT 'Имя',\n\t      `phone` text NOT NULL COMMENT 'Телефон',      \n\t      `time` timestamp DEFAULT NOW() COMMENT 'Время добавления заявки',\n\t      `invisible` int(1) NOT NULL COMMENT 'Просмотр заявки',\n\t      `comment` text NULL COMMENT 'Комментарий к заявке',\n\t      PRIMARY KEY (`id`)\n\t    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
     DB::query("\n\t    \tCREATE TABLE IF NOT EXISTS `" . PREFIX . "call_back_config` (\n\t    \t`id` int(11) NOT NULL AUTO_INCREMENT ,\n\t    \t`send_mail` ENUM('0','1') DEFAULT '0',\n\t    \t`email_address` VARCHAR(200) NOT NULL DEFAULT '" . MG::getOption('adminEmail') . "',\n\t    \tPRIMARY KEY (`id`)\n\t    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;");
     $seeds = DB::query("SELECT * FROM `" . PREFIX . 'call_back_config' . "`");
     $numb = DB::numRows($seeds);
     if ($numb == 0) {
         DB::query("\n\t    \t\tINSERT INTO `" . PREFIX . 'call_back_config' . "` VALUES(NULL, '0', '" . MG::getOption('adminEmail') . "')\n\t    \t");
     }
     // Был ли плагин активирован ранее?
     $res = DB::query("\n\t    \tSELECT id\n\t    \tFROM `" . PREFIX . "call_back`\n\t    \tWHERE id in (1,2,3)\n\t    ");
     // Если плагин впервые активирован, то задаются настройки по умолчанию
     if (!DB::numRows($res)) {
         $array = array('countRows' => '10');
         MG::setOption(array('option' => 'call-backOption', 'value' => addslashes(serialize($array))));
     }
 }
Пример #9
0
 /**
  * Создает таблицу плагина в БД
  */
 static function createDateBase()
 {
     // Запрос для проверки, был ли плагин установлен ранее.
     $exist = false;
     $result = DB::query('SHOW TABLES LIKE "' . PREFIX . self::$pluginName . '"');
     if (DB::numRows($result)) {
         $exist = true;
     }
     if (!$exist) {
         DB::query("\r\n     CREATE TABLE IF NOT EXISTS `" . PREFIX . self::$pluginName . "` (\r\n       `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Порядковый номер',      \r\n       `title` text NOT NULL COMMENT 'Загаловок',\r\n       `settings` text NOT NULL COMMENT 'Настройки',       \r\n       PRIMARY KEY (`id`)\r\n    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
         DB::query("\r\n     CREATE TABLE IF NOT EXISTS `" . PREFIX . self::$pluginName . "-elements` (\r\n       `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Порядковый номер',      \r\n       `parent` int(11) NOT NULL COMMENT 'id блока',\r\n       `text` text  NOT NULL COMMENT 'Текст триггера',\r\n       `icon` text  NOT NULL COMMENT 'Иконка или url картинки',\r\n       `sort` int(11) NOT NULL COMMENT 'Сортировка',\r\n       PRIMARY KEY (`id`)\r\n    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
         $settings = array('form' => 'square', 'place' => 'left', 'color_icon' => '000', 'background_icon' => 'fff', 'background' => 'fff', 'width' => '31', 'height' => '90', 'layout' => 'horfloat');
         DB::query("INSERT INTO `" . PREFIX . self::$pluginName . "` SET `id`=1,\r\n        `settings` = " . DB::quote(addslashes(serialize($settings))) . " ");
         DB::query("INSERT INTO `" . PREFIX . self::$pluginName . "-elements` (`id`, `parent`, `text`, `icon`, `sort`) VALUES\r\n(8, 1, '<div><span style=\"color: rgb(0, 0, 0); font-family: Tahoma, Verdana, sans-serif; line-height: 21px;\">Гарантия качества на все товары</span></div>\n', '<i class=\"fa fa-check-circle-o fa-5x\"></i>', 8),\r\n(10, 1, '<div><span style=\"color: rgb(0, 0, 0); font-family: Tahoma, Verdana, sans-serif; line-height: 21px;\">Оплата Visa и MasterCard</span></div>\n', '<i class=\"fa fa-cc-visa fa-4x\"></i>', 10),\r\n(9, 1, '<div><span style=\"color: rgb(0, 0, 0); font-family: Tahoma, Verdana, sans-serif; line-height: 21px;\">Бесплатная доставка от 3 тыс. руб.</span></div>\n', '<i class=\"fa fa-truck fa-4x\"></i>', 9)");
         // Если плагин впервые активирован, то задаются настройки по умолчанию
         MG::setOption(array('option' => 'countPrintRowsTrigger', 'value' => 10));
     }
 }
Пример #10
0
 /**
  * Устанавливает количество отображаемых записей в разделе новостей
  * @return boolean
  */
 public function setCountPrintRowsComments()
 {
     $count = 20;
     if (is_numeric($_POST['count']) && !empty($_POST['count'])) {
         $count = $_POST['count'];
     }
     MG::setOption('countPrintRowsComments', $count);
     return true;
 }
Пример #11
0
 public static function preDownload($version)
 {
     $post = 'step=1' . '&sName=' . $_SERVER['SERVER_NAME'] . '&sIP=' . ($_SERVER['SERVER_ADDR'] == "::1" ? '127.0.0.1' : $_SERVER['SERVER_ADDR']) . '&sKey=' . MG::getOption('licenceKey') . '&ver=' . $version;
     $res = self::sendCurl(self::$_updataServer . '/updataserver', $post);
     try {
         $data = json_decode($res, true);
     } catch (Exception $exc) {
         $data['msg'] = $exc;
         $data['status'] = 'error';
     }
     MG::setOption(array('option' => 'dateActivateKey ', 'value' => $data['dateActivateKey']));
     if ('succes' == $data['status']) {
         $file = self::updataSystem($data['msg'], $version);
         if (!file_exists($file)) {
             $data['msg'] = 'Обновление не удалось!';
             $data['status'] = 'error';
         }
     }
     return $data;
 }
Пример #12
0
 /**
  * Парсинг 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');
                 DB::query('DELETE FROM `' . PREFIX . 'product_variant` WHERE 1');
             }
         }
         $category = $this->groupsGreate($xml->Классификатор, $category, 0);
         $this->propertyСreate($xml->Классификатор->Свойства);
         $model = new Models_Product();
         $currentPosition = 0;
         $upload = new Upload(false);
         $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;
         foreach ($xml->Каталог->Товары[0] as $item) {
             $currentPosition++;
             if ($currentPosition <= $lastPositionProduct) {
                 continue;
             }
             // Добавляем изображение товара в папку uploads
             $imageUrl = array();
             $realImgPath = array();
             if (isset($item->Картинка)) {
                 foreach ($item->Картинка as $img) {
                     $path = 'tempcml' . $sep . $img;
                     $realImgPath[] = $path;
                     $image = basename($img);
                     $imageUrl[] = $image;
                 }
             }
             $imageUrl = implode($imageUrl, "|");
             $id = (string) $item->Группы->Ид[0];
             $name = (string) $item->Наименование[0];
             $description = '';
             $desExist = false;
             if (isset($item->Описание)) {
                 $description = nl2br((string) $item->Описание[0], true);
                 $desExist = true;
             }
             foreach ($item->ЗначенияРеквизитов->ЗначениеРеквизита as $row) {
                 if ($row->Наименование == 'Полное наименование') {
                     // если в файле нет специального тега с описанием, то берем из полного наименования
                     if (!$desExist) {
                         $description = (string) $row->Значение ? (string) $row->Значение : $description;
                         $description = nl2br($description, true);
                     } else {
                         // иначе полное наименование подставляем в title товара
                         $name = (string) $row->Значение ? (string) $row->Значение : $name;
                     }
                 }
             }
             $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), true)), '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');
             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']);
             }
             $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));
                 $productId = $row['id'];
             } else {
                 $newProd = $model->addProduct($dataProd);
                 $productId = $newProd['id'];
             }
             $arImgPath = explode('/', $realImgPath[0]);
             array_pop($arImgPath);
             $path = implode($sep, $arImgPath);
             $imageUrl = explode('|', $imageUrl);
             $dir = floor($productId / 100) . '00';
             if (!empty($realImgPath)) {
                 foreach ($realImgPath as $cell => $image) {
                     if (!empty($image) && is_file($image)) {
                         $upload->_reSizeImage('70_' . $imageUrl[$cell], $realDocumentRoot . $sep . $image, $widthPreview, $heightPreview, 'PROPORTIONAL', 'uploads' . $sep . $addPath . 'thumbs' . $sep);
                         $upload->_reSizeImage('30_' . $imageUrl[$cell], $realDocumentRoot . $sep . $image, $widthSmallPreview, $heightSmallPreview, 'PROPORTIONAL', 'uploads/' . $addPath . 'thumbs/');
                     }
                 }
                 $model->movingProductImage($imageUrl, $productId, $path);
             }
             // Привязываем свойства.
             if (isset($item->ЗначенияСвойств)) {
                 foreach ($item->ЗначенияСвойств->ЗначенияСвойства as $prop) {
                     $propVal = '';
                     $tempProp = '' . $prop->Значение[0];
                     if (!empty($_SESSION['variant_value'][$tempProp])) {
                         $propVal = $_SESSION['variant_value'][$tempProp];
                     }
                     if (empty($propVal)) {
                         $propVal = '';
                         $idVal = '' . $prop->ИдЗначения;
                         if (!empty($_SESSION['variant_value'][$idVal])) {
                             $propVal = $_SESSION['variant_value'][$idVal];
                         }
                     }
                     $this->propertyConnect($id_1c, $prop->Ид, $propVal, $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($realDocumentRoot . '/tempcml/' . $filename);
         }
         $_SESSION['lastCountProduct1cImport'] = 0;
     } elseif ($xml && $filename == 'offers.xml') {
         $currentPosition = 0;
         $model = new Models_Product();
         $currencyRate = MG::getSetting('currencyRate');
         $currencyShort = MG::getSetting('currencyShort');
         foreach ($xml->ПакетПредложений[0]->Предложения[0] as $item) {
             $currentPosition++;
             if ($currentPosition <= $lastPositionOffer) {
                 continue;
             }
             $id = (string) $item->Ид[0];
             $price = (string) $item->Цены->Цена->ЦенаЗаЕдиницу[0];
             $iso = $this->getIsoByCode((string) $item->Цены->Цена->Валюта[0]);
             if ($iso == 'NULL') {
                 $iso = substr(MG::translitIt((string) $item->Цены->Цена->Валюта[0]), 0, 3);
             }
             $count = (string) $item->Количество[0];
             // если валюта товара не задана ранее в магазине, то добавим ее. (Курс нужно будет установить вручную в настройках)
             $currency = array();
             if (empty($currencyRate[$iso])) {
                 $currency['iso'] = htmlspecialchars($iso);
                 $currency['short'] = $currency['iso'];
                 $currency['rate'] = 1;
                 $currencyRate[$currency['iso']] = $currency['rate'];
                 $currencyShort[$currency['iso']] = $currency['short'];
                 MG::setOption(array('option' => 'currencyRate', 'value' => addslashes(serialize($currencyRate))));
                 MG::setOption(array('option' => 'currencyShort', 'value' => addslashes(serialize($currencyShort))));
             }
             $partProd = array('price' => $price, 'count' => $count < 0 ? 0 : $count, 'currency_iso' => $iso);
             // проверяем, вдруг это предложение является вариантом для товара
             $ids1c = explode('#', (string) $item->Ид[0]);
             $variantId = '';
             // если id варианта не найден
             if (empty($ids1c[1])) {
                 // просто товар, не вариант
                 DB::query('
          UPDATE `' . PREFIX . 'product`
          SET ' . DB::buildPartQuery($partProd) . ' , `price_course` = ROUND(' . DB::quote($price * $currencyRate[$iso], TRUE) . ',2) 
          WHERE 1c_id = ' . DB::quote($ids1c[0]) . '
       ');
             } else {
                 // если товарное предложение является вариантом для продукта
                 $productId = '';
                 $variantId = $ids1c[1];
                 $variant = array();
                 $dbRes = DB::query('
         SELECT id FROM `' . PREFIX . 'product`          
         WHERE 1c_id = ' . DB::quote($ids1c[0]) . '
       ');
                 if ($row = DB::fetchArray($dbRes)) {
                     $productId = $row['id'];
                     $name = array();
                     foreach ($item->ХарактеристикиТовара->ХарактеристикаТовара as $prop) {
                         $name[] = $prop->Значение;
                     }
                     $name = implode(', ', $name);
                     $titleVariant = $name;
                     $variant = array('title_variant' => $titleVariant, 'code' => $item->Артикул[0], 'price' => $price, 'old_price' => '', 'image' => '', 'count' => $count < 0 ? 0 : $count, '1c_id' => $variantId, 'weight' => '0', 'activity' => 1, 'currency_iso' => $iso);
                     // ******
                     //  ищем варианты для этого товара
                     $dbRes = DB::query('
           SELECT id FROM `' . PREFIX . 'product_variant`           
           WHERE product_id = ' . DB::quote($productId) . '
         ');
                     // если еще ни одного небыло, то создаем и обновляем в таблице product значения по первому варианту
                     if ($row != DB::fetchArray($dbRes)) {
                         DB::query('
            UPDATE `' . PREFIX . 'product`
            SET ' . DB::buildPartQuery($partProd) . ' , `price_course` = ROUND(' . DB::quote($price * $currencyRate[$iso], TRUE) . ',2) 
            WHERE 1c_id = ' . DB::quote($ids1c[0]) . '
           ');
                     }
                     // ******
                     // проверяем, импортирован ли ранее этот вариант
                     $dbRes = DB::query('
           SELECT id FROM `' . PREFIX . 'product_variant`           
           WHERE 1c_id = ' . DB::quote($ids1c[1]) . '
         ');
                     // если еще нет, то получаем массив всех имеющихся вариантов по этому продукту,
                     // добавляем к нему новый вариант и обновляем массив вариантов стандартными средствами
                     if (!($row = DB::fetchArray($dbRes))) {
                         $arrVariants = array();
                         $res = DB::query('
               SELECT  pv.*
               FROM `' . PREFIX . 'product_variant` pv    
               WHERE pv.product_id = ' . DB::quote($productId) . '
               ORDER BY sort
             ');
                         if (!empty($res)) {
                             while ($var = DB::fetchAssoc($res)) {
                                 $arrVariants[$var['id']] = $var;
                             }
                         }
                         $variant['price_course'] = round($price * $currencyRate[$iso], 2);
                         $arrVariants[] = $variant;
                         $model->saveVariants($arrVariants, $productId);
                     } else {
                         // обновить вариант
                         DB::query('
            UPDATE `' . PREFIX . 'product_variant`
            SET ' . DB::buildPartQuery($variant) . ',`price_course` = ROUND(' . DB::quote($price * $currencyRate[$iso], TRUE) . ',2)
            WHERE 1c_id = ' . DB::quote($ids1c[0]) . '
           ');
                     }
                 }
             }
             $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($realDocumentRoot . '/tempcml/' . $filename);
         }
         $_SESSION['lastCountOffer1cImport'] = 0;
         Storage::clear();
     } else {
         echo "Ошибка загрузки XML\n";
         foreach (libxml_get_errors() as $error) {
             echo "\t", $error->message;
             exit;
         }
     }
 }
Пример #13
0
/**
 * Устанавливает значение для опции (настройки).
 * @param array $data -  может содержать значения для полей таблицы.
 * <code>
 * $data = array(
 *   option => 'идентификатор опции например: sitename'
 *   value  => 'значение опции например: moguta.ru'
 *   active => 'в будущем будет отвечать за автоподгрузку опций в кеш Y/N'
 *   name => 'Метка для опции например: Имя сайта'
 *   desc => 'Описание опции: Настройа задает имя для сайта'
 * )
 * </code>
 * @return void
 */
function setOption($data)
{
    // Если функция вызвана вот так: setOption('option', 'value');
    if (func_num_args() == 2) {
        $arg = func_get_args();
        $data = array();
        $data['option'] = $arg[0];
        $data['value'] = $arg[1];
    }
    MG::setOption($data);
}
Пример #14
0
 /**
  * Сохраняет  опции плагина
  * @return boolean
  */
 public function saveBaseOption()
 {
     $this->messageSucces = $this->lang['SAVE_BASE'];
     $this->messageError = $this->lang['NOT_SAVE_BASE'];
     if (!empty($_POST['data'])) {
         MG::setOption(array('option' => 'preview-photo-option', 'value' => addslashes(serialize($_POST['data']))));
     }
     return true;
 }
Пример #15
0
 public static function checkPluginsUpdate($plugins = array())
 {
     if (empty($plugins)) {
         foreach (self::$pluginsInfo as $plugin) {
             if (preg_match('/\\d(.\\d(.\\d)?)?/', $plugin['Version'], $version)) {
                 $plugins[$plugin['folderName']] = $version[0];
             }
         }
     }
     if (!empty($plugins)) {
         $post = 'check=y&plugins=' . serialize($plugins);
         $curlRes = self::sendCurl(self::$_updateServer . '/updateplugin', $post);
         if ($curlRes) {
             $curlData = self::stdToArray(json_decode($curlRes));
             MG::setOption('pluginsVersionInfo', addslashes(serialize($curlData)));
         } else {
             return false;
         }
     }
     return true;
 }
Пример #16
0
 static function createDataComments()
 {
     $sql = "\n  \t\t CREATE TABLE IF NOT EXISTS `" . PREFIX . "comments` (\n  \t\t\t`id` INT AUTO_INCREMENT NOT NULL,\n        `name` VARCHAR(45) NOT NULL,\n        `email` VARCHAR(45) NOT NULL,\n        `comment` TEXT NoT NULL,\n        `date` TIMESTAMP NOT NULL,\n        `uri` VARCHAR(255) NOT NULL,\n        `approved` TINYINT NOT NULL DEFAULT 0, \n        PRIMARY KEY(`id`)\n  \t\t\t) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
     DB::query($sql);
     MG::setOption('countPrintRowsComments', 5);
 }
Пример #17
0
 /**
  * Устанавливает количество отображаемых записей в разделе новостей
  * @return boolean
  */
 public function setCountPrintRowsNews()
 {
     $count = 20;
     if (is_numeric($_POST['count']) && !empty($_POST['count'])) {
         $count = $_POST['count'];
     }
     MG::setOption(array('option' => 'countPrintRowsNews ', 'value' => $count));
     return true;
 }
Пример #18
0
 /**
  * Устанавливает количество отображаемых записей в разделе новостей
  * @return boolean
  */
 public function setCountPrintRowsComments()
 {
     USER::AccessOnly('1,4', 'exit()');
     $count = 20;
     if (is_numeric($_POST['count']) && !empty($_POST['count'])) {
         $count = $_POST['count'];
     }
     MG::setOption(array('option' => 'countPrintRowsComments', 'value' => $count));
     return true;
 }
Пример #19
0
 /**
  * Сохраняет реквизиты в настройках заказа.
  * @return boolean
  */
 public function savePropertyOrder()
 {
     $this->messageSucces = "Настройки сохранены";
     $this->messageError = "Неудалось сохранить настройки";
     $propertyOrder = serialize($_POST);
     $propertyOrder = addslashes($propertyOrder);
     MG::setOption(array('option' => 'propertyOrder', 'value' => $propertyOrder));
     return true;
 }