/** * Парсит путь категории возвращает набор категорий. * @param type $path - список категорий через / */ public function parseCategoryPath($path) { $i = 1; $categories = array(); if (!$path) { return $categories; } $parent = $path; $parentTranslit = MG::translitIt($parent, 1); $parentTranslit = URL::prepareUrl($parentTranslit); $categories[$parent]['title'] = URL::parsePageUrl($parent); $categories[$parent]['url'] = URL::parsePageUrl($parentTranslit); $categories[$parent]['parent_url'] = URL::parseParentUrl($parentTranslit); $categories[$parent]['parent'] = 0; while ($parent != '/') { $parent = URL::parseParentUrl($parent); $parentTranslit = MG::translitIt($parent, 1); $parentTranslit = URL::prepareUrl($parentTranslit); if ($parent != '/') { $categories[$parent]['title'] = URL::parsePageUrl($parent); $categories[$parent]['url'] = URL::parsePageUrl($parentTranslit); $categories[$parent]['parent_url'] = URL::parseParentUrl($parentTranslit); $categories[$parent]['parent_url'] = $categories[$parent]['parent_url'] != '/' ? $categories[$parent]['parent_url'] : ''; $categories[$parent]['parent'] = 0; } } $categories = array_reverse($categories); return $categories; }
/** * Изменяет данные о товаре. * @param array $array массив с данными о товаре. * @param int $id id изменяемого товара. * @return bool */ public function updateProduct($array) { $id = $array['id']; $userProperty = !empty($array['userProperty']) ? $array['userProperty'] : null; //свойства товара $variants = !empty($array['variants']) ? $array['variants'] : array(); // варианты товара $updateFromModal = !empty($array['updateFromModal']) ? true : false; // варианты товара unset($array['userProperty']); unset($array['variants']); unset($array['updateFromModal']); if (!empty($array['url'])) { $array['url'] = URL::prepareUrl($array['url']); } $maskField = array('title', 'meta_title', 'meta_keywords', 'meta_desc', 'image_title', 'image_alt'); foreach ($array as $k => $v) { if (in_array($k, $maskField)) { $v = htmlspecialchars_decode($v); $array[$k] = htmlspecialchars($v); } } $result = false; // Если происходит обновление параметров. if (!empty($id)) { unset($array['delete_image']); // Обновляем стандартные свойства продукта. if (DB::query(' UPDATE `' . PREFIX . 'product` SET ' . DB::buildPartQuery($array) . ' WHERE id = ' . DB::quote($id))) { // Обновляем пользовательские свойства продукта. if (!empty($userProperty)) { $this->saveUserProperty($userProperty, $id); } // Эта проверка нужна только для того, чтобы исключить удаление //вариантов при обновлении продуктов не из карточки товара в админке, //например по нажатию на "лампочку". if (!empty($variants) || $updateFromModal) { // обновляем и добавляем варианты продукта. if ($variants === null) { $variants = array(); } $this->saveVariants($variants, $id); } $result = true; } } else { $result = $this->addProduct($array); } $currencyShopIso = MG::getSetting('currencyShopIso'); $this->updatePriceCourse($currencyShopIso, array($id)); $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Создание новой категории. * @param $category - категория. */ function newCategory($category) { $url = URL::prepareUrl(MG::translitIt($category['name'], 1)); $parent_url = MG::get('category')->getParentUrl($category['parent_id']); $parent = URL::prepareUrl(MG::translitIt($category['parentname'], 1)); $data = array('title' => $category['name'], 'url' => str_replace(array('/', '\\'), '-', $url), 'parent' => $category['parent_id'], 'html_content' => $category['description'], 'meta_title' => $category['name'], 'meta_keywords' => $category['name'], 'meta_desc' => MG::textMore($category['description'], 157), 'invisible' => 0, 'parent_url' => $parent_url, '1c_id' => $category['1c_id']); $res = DB::query('SELECT * FROM `' . PREFIX . 'category` WHERE `1c_id`=' . DB::quote($category['1c_id'])); if ($row = DB::fetchAssoc($res)) { DB::query(' UPDATE `' . PREFIX . 'category` SET ' . DB::buildPartQuery($data) . ' WHERE `1c_id`=' . DB::quote($category['1c_id'])); return $row['id']; } else { $data = MG::get('category')->addCategory($data); return $data['id']; } return 0; }
/** * Изменяет данные о категории. * * @param array $array массив с данными о категории. * @param int $id id изменяемой категории. * @return bool */ public function updateCategory($array) { $id = $array['id']; $result = false; if (!empty($array['url'])) { $array['url'] = URL::prepareUrl($array['url']); } $maskField = array('title', 'meta_title', 'meta_keywords', 'meta_desc', 'image_title', 'image_alt'); foreach ($array as $k => $v) { if (in_array($k, $maskField)) { $v = htmlspecialchars_decode($v); $array[$k] = htmlspecialchars($v); } } // Если назначаемая категория, является тойже. if ($array['parent'] === $id) { $this->messageError = 'Нельзя назначить выбраную категорию родительской!'; return false; } if ($id || $id === 0) { $childsCaterory = $this->getCategoryList($id); } // Если есть вложенные, и одна из них назначена родительской. if (!empty($childsCaterory)) { foreach ($childsCaterory as $cateroryId) { if ($array['parent'] == $cateroryId) { $this->messageError = 'Нельзя назначить выбраную категорию родительской!'; return false; } } } if ($_POST['parent'] === $id && !isset($array['parent'])) { $this->messageError = 'Нельзя назначить выбраную категорию родительской!'; return false; } if (!empty($array['image_url'])) { $array['image_url'] = self::resizeCategoryImg($array['image_url']); } if (!empty($id)) { // обновляем выбраную категорию if (DB::query(' UPDATE `' . PREFIX . 'category` SET ' . DB::buildPartQuery($array) . ' WHERE id = ' . DB::quote($id, true))) { $result = true; } // находим список всех вложенных в нее категорий $arrayChildCat = $this->getCategoryList($array['parent']); if (!empty($arrayChildCat)) { // обновляем parent_url у всех вложенных категорий, т.к. корень поменялся foreach ($arrayChildCat as $childCat) { $childCat = $this->getCategoryById($childCat); $upParentUrl = $this->getParentUrl($childCat['parent']); if (!empty($childCat['id'])) { if (DB::query(' UPDATE `' . PREFIX . 'category` SET parent_url=' . DB::quote($upParentUrl) . ' WHERE id = ' . DB::quote($childCat['id'], true))) { } } } } } else { $result = $this->addCategory($array); } //очищам кэш категорий Storage::clear(md5('category')); $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Изменяет данные о товаре. * @param array $array массив с данными о товаре. * @param int $id id изменяемого товара. * @return bool */ public function updateProduct($array) { $id = $array['id']; $userProperty = !empty($array['userProperty']) ? $array['userProperty'] : null; //свойства товара $variants = !empty($array['variants']) ? $array['variants'] : array(); // варианты товара $updateFromModal = !empty($array['updateFromModal']) ? true : false; // варианты товара unset($array['userProperty']); unset($array['variants']); unset($array['updateFromModal']); if (!empty($array['url'])) { $array['url'] = URL::prepareUrl($array['url']); } $result = false; // Если происходит обновление параметров. if (!empty($id)) { unset($array['delete_image']); // Обновляем стандартные свойства продукта. if (DB::query(' UPDATE `' . PREFIX . 'product` SET ' . DB::buildPartQuery($array) . ' WHERE id = %d ', $id)) { // Обновляем пользовательские свойства продукта. if (!empty($userProperty)) { $this->saveUserProperty($userProperty, $id); } // Эта проверка нужна только для того, чтобы исключить удаление //вариантов при обновлении продуктов не из карточки товара в админке, //например по нажатию на "лампочку". if (!empty($variants) || $updateFromModal) { // обновляем и добавляем варианты продукта. if ($variants === null) { $variants = array(); } $this->saveVariants($variants, $id); } $result = true; } } else { $result = $this->addProduct($array); } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }
/** * Изменяет данные о странице * * @param array $array массив с данными о категории. * @param int $id id изменяемой категории. * @return bool */ public function updatePage($array) { $id = $array['id']; $result = false; if (!empty($array['url']) && strpos($array['url'], 'http:') !== 0) { $array['url'] = URL::prepareUrl($array['url']); } $maskField = array('title', 'meta_title', 'meta_keywords', 'meta_desc', 'image_title', 'image_alt'); foreach ($array as $k => $v) { if (in_array($k, $maskField)) { $array[$k] = htmlspecialchars($v); } } // Если назначаемая категория, является тойже. if ($array['parent'] == $id) { $this->messageError = 'Нельзя назначить выбраную страницу родительской!'; return false; } $childsPage = $this->getPagesInside($id); // Если есть вложенные, и одна из них назначена родительской. if (!empty($childsPage)) { foreach ($childsPage as $cateroryId) { if ($array['parent'] == $cateroryId) { $this->messageError = 'Нельзя назначить выбраную страницу родительской!'; return false; } } } if ($_POST['parent'] == $id) { $this->messageError = 'Нельзя назначить выбраную страницу родительской!'; return false; } if (!empty($id)) { // обновляем выбраную страницу if (DB::query(' UPDATE `' . PREFIX . 'page` SET ' . DB::buildPartQuery($array) . ' WHERE id = ' . DB::quote($id, true))) { $result = true; } // находим список всех вложенных в нее страниц $arrayChildCat = $this->getPagesInside($array['parent']); if (!empty($arrayChildCat)) { // обновляем parent_url у всех вложенных категорий, т.к. корень поменялся foreach ($arrayChildCat as $childCat) { $childCat = $this->getPageById($childCat, true); $upParentUrl = $this->getParentUrl($childCat['parent']); if (DB::query(' UPDATE `' . PREFIX . 'page` SET parent_url=' . DB::quote($upParentUrl) . ' WHERE id = ' . DB::quote($childCat['id'], true))) { } } } } else { $result = $this->addPage($array); } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }