diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml index 50b622451..e09d24a90 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -405,17 +405,26 @@ - + Thelia\Controller\Admin\ShippingZoneController::indexAction - - Thelia\Controller\Admin\ShippingZoneController::createAction + + Thelia\Controller\Admin\ShippingZoneController::updateAction + \d+ - - Thelia\Controller\Admin\ShippingZoneController::updateAction - \d+ + + + + + + Thelia\Controller\Admin\ShippingConfigurationController::indexAction + + + + Thelia\Controller\Admin\ShippingConfigurationController::updateAction + \d+ @@ -478,6 +487,15 @@ + + + + Thelia\Controller\Admin\ModuleController::indexAction + + + + + diff --git a/core/lib/Thelia/Controller/Admin/ModuleController.php b/core/lib/Thelia/Controller/Admin/ModuleController.php new file mode 100644 index 000000000..fe794abf9 --- /dev/null +++ b/core/lib/Thelia/Controller/Admin/ModuleController.php @@ -0,0 +1,46 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Controller\Admin; + +/** + * Class ModuleController + * @package Thelia\Controller\Admin + * @author Manuel Raynaud + */ +class ModuleController extends BaseAdminController +{ + public function indexAction() + { + if (null !== $response = $this->checkAuth("admin.module.view")) return $response; + return $this->render("modules", array("display_module" => 20)); + } + + public function updateAction($module_id) + { + + return $this->render("module-edit", array( + "module_id" => $module_id + )); + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Controller/Admin/ShippingConfigurationController.php b/core/lib/Thelia/Controller/Admin/ShippingConfigurationController.php new file mode 100644 index 000000000..71aa0ba2f --- /dev/null +++ b/core/lib/Thelia/Controller/Admin/ShippingConfigurationController.php @@ -0,0 +1,46 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Controller\Admin; + +/** + * Class ShippingConfigurationController + * @package Thelia\Controller\Admin + * @author Manuel Raynaud + */ +class ShippingConfigurationController extends BaseAdminController +{ + public function indexAction() + { + if (null !== $response = $this->checkAuth("admin.shipping-configuration.view")) return $response; + return $this->render("shipping-configuration", array("display_shipping_configuration" => 20)); + } + + public function updateAction($shipping_configuration_id) + { + + return $this->render("shipping-configuration-edit", array( + "shipping_configuration_id" => $shipping_configuration_id + )); + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Controller/Admin/ShippingZoneController.php b/core/lib/Thelia/Controller/Admin/ShippingZoneController.php index 8be799a73..ee34d11bd 100644 --- a/core/lib/Thelia/Controller/Admin/ShippingZoneController.php +++ b/core/lib/Thelia/Controller/Admin/ShippingZoneController.php @@ -24,7 +24,7 @@ namespace Thelia\Controller\Admin; /** - * Class FolderController + * Class ShippingZoneController * @package Thelia\Controller\Admin * @author Manuel Raynaud */ diff --git a/core/lib/Thelia/Core/Template/Loop/Image.php b/core/lib/Thelia/Core/Template/Loop/Image.php index 6a3dbfee1..a62f23702 100755 --- a/core/lib/Thelia/Core/Template/Loop/Image.php +++ b/core/lib/Thelia/Core/Template/Loop/Image.php @@ -93,7 +93,8 @@ class Image extends BaseI18nLoop new EnumType($this->possible_sources) ) ), - Argument::createIntTypeArgument('source_id') + Argument::createIntTypeArgument('source_id'), + Argument::createBooleanTypeArgument('force_return', true) ); // Add possible image sources diff --git a/install/import.php b/install/import.php new file mode 100644 index 000000000..c5fa3572a --- /dev/null +++ b/install/import.php @@ -0,0 +1,379 @@ +. */ +/* */ +/*************************************************************************************/ + +use Thelia\Constraint\ConstraintFactory; +use Thelia\Constraint\Rule\AvailableForTotalAmountManager; +use Thelia\Constraint\Rule\AvailableForXArticlesManager; +use Thelia\Constraint\Rule\Operators; +use Thelia\Coupon\CouponRuleCollection; + + +require __DIR__ . '/../core/bootstrap.php'; + +$thelia = new Thelia\Core\Thelia("dev", true); +$thelia->boot(); + +$faker = Faker\Factory::create(); +// Intialize URL management +$url = new Thelia\Tools\URL(); +$con = \Propel\Runtime\Propel::getConnection( + Thelia\Model\Map\ProductTableMap::DATABASE_NAME +); +$con->beginTransaction(); + +try { + $stmt = $con->prepare("SET foreign_key_checks = 0"); + $stmt->execute(); + clearTables(); + $stmt = $con->prepare("SET foreign_key_checks = 1"); + $stmt->execute(); + + + $categories = createCategories(); + $color = createColors(); + $brand = createBrand(); + + echo "creating templates\n"; + $template = new \Thelia\Model\Template(); + $template + ->setLocale('fr_FR') + ->setName('template de démo') + ->setLocale('en_US') + ->setName('demo template') + ->save(); + + $at = new Thelia\Model\AttributeTemplate(); + + $at + ->setTemplate($template) + ->setAttribute($color) + ->save(); + + $ft = new Thelia\Model\FeatureTemplate(); + + $ft + ->setTemplate($template) + ->setFeature($brand) + ->save(); + echo "end creating templates\n"; + + createProduct($faker, $categories, $template, $color, $brand); + + + + $con->commit(); +} catch (Exception $e) { + echo "error : ".$e->getMessage()."\n"; + $con->rollBack(); +} + +function createProduct($faker, $categories, $template, $attribute, $feature) +{ + echo "start creating products\n"; + $fileSystem = new \Symfony\Component\Filesystem\Filesystem(); + if (($handle = fopen(THELIA_ROOT . '/install/import/products.csv', "r")) !== FALSE) { + $row=0; + while (($data = fgetcsv($handle, 100000, ";")) !== FALSE) { + $row++; + if($row == 1) continue; + $product = new \Thelia\Model\Product(); + $productCategories = explode(';', $data[13]); + $product + ->setRef($data[0]) + ->setVisible(1) + ->setTaxRuleId(1) + ->setTemplate($template) + ; + foreach($productCategories as $productCategory) { + + $productCategory = trim($productCategory); + if(array_key_exists($productCategory, $categories)) { + $product->addCategory($categories[$productCategory]); + } + } + + + $product + ->setLocale('en_US') + ->setTitle($data[1]) + ->setChapo($data[2]) + ->setDescription($data[4]) + ->setPostscriptum($data[6]) + ->setLocale('fr_Fr') + ->setTitle($data[1]) + ->setChapo($data[3]) + ->setDescription($data[5]) + ->setPostscriptum($data[7]) + ->save(); + + $productCategories = $product->getProductCategories()->getFirst(); + $productCategories->setDefaultCategory(true) + ->save(); + + // Set the position + $product->setPosition($product->getNextPosition())->save(); + + $images = explode(';', $data[10]); + + foreach ($images as $image) { + $image = trim($image); + if(empty($image)) continue; + $productImage = new \Thelia\Model\ProductImage(); + $productImage + ->setProduct($product) + ->setFile($image) + ->save(); + $fileSystem->copy(THELIA_ROOT . 'install/import/images/'.$image, THELIA_ROOT . 'local/media/images/product/'.$image, true); + } + + $pses = explode(";", $data[12]); + + + foreach ($pses as $pse) { + if(empty($pse)) continue; + $stock = new \Thelia\Model\ProductSaleElements(); + $stock->setProduct($product); + $stock->setRef($product->getId() . '_' . uniqid('', true)); + $stock->setQuantity($faker->randomNumber(1,50)); + if(!empty($data[9])) { + $stock->setPromo(1); + } else { + $stock->setPromo(0); + } + + $stock->setNewness($faker->randomNumber(0,1)); + $stock->setWeight($faker->randomFloat(2, 100,10000)); + $stock->save(); + + $productPrice = new \Thelia\Model\ProductPrice(); + $productPrice->setProductSaleElements($stock); + $productPrice->setCurrencyId(1); + $productPrice->setPrice($data[8]); + $productPrice->setPromoPrice($data[9]); + $productPrice->save(); + + $attributeAv = \Thelia\Model\AttributeAvI18nQuery::create() + ->filterByLocale('en_US') + ->filterByTitle($pse) + ->findOne(); + + $attributeCombination = new \Thelia\Model\AttributeCombination(); + $attributeCombination + ->setAttributeId($attribute->getId()) + ->setAttributeAvId($attributeAv->getId()) + ->setProductSaleElements($stock) + ->save(); + } + + $brand = $data[11]; + $featurAv = \Thelia\Model\FeatureAvI18nQuery::create() + ->filterByLocale('en_US') + ->filterByTitle($brand) + ->findOne(); + + $featureProduct = new Thelia\Model\FeatureProduct(); + $featureProduct->setProduct($product) + ->setFeatureId($feature->getId()) + ->setFeatureAvId($featurAv->getId()) + ->save() + ; + + + + } + } + echo "end creating products\n"; +} + +function createBrand() +{ + echo "start creating brands feature\n"; + if (($handle = fopen(THELIA_ROOT . '/install/import/brand.csv', "r")) !== FALSE) { + $row=0; + $feature = new \Thelia\Model\Feature(); + $feature + ->setPosition(1) + ->setLocale('fr_FR') + ->setTitle('Marque') + ->setLocale('en_US') + ->setTitle('Brand'); + while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { + $row++; + $featureAv = new \Thelia\Model\FeatureAv(); + $featureAv + ->setPosition($row) + ->setLocale('fr_FR') + ->setTitle($data[0]) + ->setLocale('en_US') + ->setTitle($data[0]); + $feature->addFeatureAv($featureAv); + + } + $feature->save(); + fclose($handle); + } + echo "brands feature created successfully\n"; + + return $feature; +} + +function createCategories() +{ + echo "start creating categories\n"; + $categories = array(); + if (($handle = fopen(THELIA_ROOT . '/install/import/categories.csv', "r")) !== FALSE) { + $row=0; + while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { + $row++; + if($row==1) continue; + $category = new \Thelia\Model\Category(); + $category + ->setVisible(1) + ->setPosition($row-1) + ->setParent(0) + ->setLocale('fr_FR') + ->setTitle(trim($data[0])) + ->setLocale('en_US') + ->setTitle(trim($data[1])) + ->save(); + $categories[trim($data[1])] = $category; + } + fclose($handle); + } + echo "categories created successfully\n"; + return $categories; +} + +function createColors() +{ + echo "start creating colors attributes\n"; + if (($handle = fopen(THELIA_ROOT . '/install/import/colors.csv', "r")) !== FALSE) { + $row=0; + $attribute = new \Thelia\Model\Attribute(); + $attribute + ->setPosition(1) + ->setLocale('fr_FR') + ->setTitle('Couleur') + ->setLocale('en_US') + ->setTitle('Colors'); + + while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { + $row++; + $attributeAv = new \Thelia\Model\AttributeAv(); + $attributeAv + ->setPosition($row) + ->setLocale('fr_FR') + ->setTitle($data[0]) + ->setLocale('en_US') + ->setTitle($data[1]); + + $attribute->addAttributeAv($attributeAv); + } + $attribute->save(); + fclose($handle); + } + echo "colors attributes created with success\n"; + return $attribute; +} + +function clearTables() +{ + $productAssociatedContent = Thelia\Model\ProductAssociatedContentQuery::create() + ->find(); + $productAssociatedContent->delete(); + + $categoryAssociatedContent = Thelia\Model\CategoryAssociatedContentQuery::create() + ->find(); + $categoryAssociatedContent->delete(); + + $featureProduct = Thelia\Model\FeatureProductQuery::create() + ->find(); + $featureProduct->delete(); + + $attributeCombination = Thelia\Model\AttributeCombinationQuery::create() + ->find(); + $attributeCombination->delete(); + + $feature = Thelia\Model\FeatureQuery::create() + ->find(); + $feature->delete(); + + $feature = Thelia\Model\FeatureI18nQuery::create() + ->find(); + $feature->delete(); + + $featureAv = Thelia\Model\FeatureAvQuery::create() + ->find(); + $featureAv->delete(); + + $featureAv = Thelia\Model\FeatureAvI18nQuery::create() + ->find(); + $featureAv->delete(); + + $attribute = Thelia\Model\AttributeQuery::create() + ->find(); + $attribute->delete(); + + $attribute = Thelia\Model\AttributeI18nQuery::create() + ->find(); + $attribute->delete(); + + $attributeAv = Thelia\Model\AttributeAvQuery::create() + ->find(); + $attributeAv->delete(); + + $attributeAv = Thelia\Model\AttributeAvI18nQuery::create() + ->find(); + $attributeAv->delete(); + + $category = Thelia\Model\CategoryQuery::create() + ->find(); + $category->delete(); + + $category = Thelia\Model\CategoryI18nQuery::create() + ->find(); + $category->delete(); + + $product = Thelia\Model\ProductQuery::create() + ->find(); + $product->delete(); + + $product = Thelia\Model\ProductI18nQuery::create() + ->find(); + $product->delete(); + + + $accessory = Thelia\Model\AccessoryQuery::create() + ->find(); + $accessory->delete(); + + $stock = \Thelia\Model\ProductSaleElementsQuery::create() + ->find(); + $stock->delete(); + + $productPrice = \Thelia\Model\ProductPriceQuery::create() + ->find(); + $productPrice->delete(); + + \Thelia\Model\ProductImageQuery::create()->find()->delete(); +} \ No newline at end of file diff --git a/install/import/brand.csv b/install/import/brand.csv new file mode 100644 index 000000000..00cdf654b --- /dev/null +++ b/install/import/brand.csv @@ -0,0 +1,7 @@ +"MILAN" +"MAGIS" +"OXYO" +"OFFUS" +"PLINK" +"PARRY" +"TOKO" diff --git a/install/import/categories.csv b/install/import/categories.csv new file mode 100644 index 000000000..109e5c0f0 --- /dev/null +++ b/install/import/categories.csv @@ -0,0 +1,5 @@ +"CATEGORIES FR";"CATEGORIES UK" +"Chaises";"Chairs" +"Tabourets";"Stools" +"Fauteuils";"Armchairs" +"Canapés";"Sofas" diff --git a/install/import/colors.csv b/install/import/colors.csv new file mode 100644 index 000000000..9b5ebcb6a --- /dev/null +++ b/install/import/colors.csv @@ -0,0 +1,13 @@ +"Bleu";"Blue" +"Jaune";"Yellow" +"Orange";"Orange" +"Rose";"Pink" +"Vert";"Green" +"Violet";"Purple" +"Rouge";"Red" +"Gris";"Gray" +"Noir";"Black" +"Beige";"Beige" +"Turquoise";"Turquoise" +"Marron";"Brown" +"Blanc";"White" diff --git a/install/import/images/PROD001-1.jpg b/install/import/images/PROD001-1.jpg new file mode 100755 index 000000000..c340872f7 Binary files /dev/null and b/install/import/images/PROD001-1.jpg differ diff --git a/install/import/images/PROD001-2.jpg b/install/import/images/PROD001-2.jpg new file mode 100755 index 000000000..d1eba51b9 Binary files /dev/null and b/install/import/images/PROD001-2.jpg differ diff --git a/install/import/images/PROD001-3.jpg b/install/import/images/PROD001-3.jpg new file mode 100755 index 000000000..89f69a766 Binary files /dev/null and b/install/import/images/PROD001-3.jpg differ diff --git a/install/import/images/PROD001-4.jpg b/install/import/images/PROD001-4.jpg new file mode 100755 index 000000000..94eb80ce9 Binary files /dev/null and b/install/import/images/PROD001-4.jpg differ diff --git a/install/import/images/PROD001-5.jpg b/install/import/images/PROD001-5.jpg new file mode 100755 index 000000000..3036b2196 Binary files /dev/null and b/install/import/images/PROD001-5.jpg differ diff --git a/install/import/images/PROD002-1.jpg b/install/import/images/PROD002-1.jpg new file mode 100755 index 000000000..f38d005e0 Binary files /dev/null and b/install/import/images/PROD002-1.jpg differ diff --git a/install/import/images/PROD002-2.jpg b/install/import/images/PROD002-2.jpg new file mode 100755 index 000000000..61a57c5ad Binary files /dev/null and b/install/import/images/PROD002-2.jpg differ diff --git a/install/import/images/PROD002-3.jpg b/install/import/images/PROD002-3.jpg new file mode 100755 index 000000000..845a26031 Binary files /dev/null and b/install/import/images/PROD002-3.jpg differ diff --git a/install/import/images/PROD002-4.jpg b/install/import/images/PROD002-4.jpg new file mode 100755 index 000000000..f9570ca9b Binary files /dev/null and b/install/import/images/PROD002-4.jpg differ diff --git a/install/import/images/PROD002-5.jpg b/install/import/images/PROD002-5.jpg new file mode 100755 index 000000000..bbc71b065 Binary files /dev/null and b/install/import/images/PROD002-5.jpg differ diff --git a/install/import/images/PROD002-6.jpg b/install/import/images/PROD002-6.jpg new file mode 100755 index 000000000..73a1698c8 Binary files /dev/null and b/install/import/images/PROD002-6.jpg differ diff --git a/install/import/images/PROD003-1.jpg b/install/import/images/PROD003-1.jpg new file mode 100755 index 000000000..f968e29d5 Binary files /dev/null and b/install/import/images/PROD003-1.jpg differ diff --git a/install/import/images/PROD003-2.jpg b/install/import/images/PROD003-2.jpg new file mode 100755 index 000000000..aed200077 Binary files /dev/null and b/install/import/images/PROD003-2.jpg differ diff --git a/install/import/images/PROD003-3.jpg b/install/import/images/PROD003-3.jpg new file mode 100755 index 000000000..ff5f6a90c Binary files /dev/null and b/install/import/images/PROD003-3.jpg differ diff --git a/install/import/images/PROD004-1.jpg b/install/import/images/PROD004-1.jpg new file mode 100755 index 000000000..f33005c77 Binary files /dev/null and b/install/import/images/PROD004-1.jpg differ diff --git a/install/import/images/PROD004-2.jpg b/install/import/images/PROD004-2.jpg new file mode 100755 index 000000000..d844637a7 Binary files /dev/null and b/install/import/images/PROD004-2.jpg differ diff --git a/install/import/images/PROD005-1.jpg b/install/import/images/PROD005-1.jpg new file mode 100755 index 000000000..5e2e29dec Binary files /dev/null and b/install/import/images/PROD005-1.jpg differ diff --git a/install/import/images/PROD005-2.jpg b/install/import/images/PROD005-2.jpg new file mode 100755 index 000000000..c236abedd Binary files /dev/null and b/install/import/images/PROD005-2.jpg differ diff --git a/install/import/images/PROD005-3.jpg b/install/import/images/PROD005-3.jpg new file mode 100755 index 000000000..51697517f Binary files /dev/null and b/install/import/images/PROD005-3.jpg differ diff --git a/install/import/images/PROD005-4.jpg b/install/import/images/PROD005-4.jpg new file mode 100755 index 000000000..4f5165509 Binary files /dev/null and b/install/import/images/PROD005-4.jpg differ diff --git a/install/import/images/PROD005-5.jpg b/install/import/images/PROD005-5.jpg new file mode 100755 index 000000000..81c791943 Binary files /dev/null and b/install/import/images/PROD005-5.jpg differ diff --git a/install/import/images/PROD005-6.jpg b/install/import/images/PROD005-6.jpg new file mode 100755 index 000000000..f48cac242 Binary files /dev/null and b/install/import/images/PROD005-6.jpg differ diff --git a/install/import/images/PROD006-1.jpg b/install/import/images/PROD006-1.jpg new file mode 100755 index 000000000..ac75a7ba2 Binary files /dev/null and b/install/import/images/PROD006-1.jpg differ diff --git a/install/import/images/PROD006-2.jpg b/install/import/images/PROD006-2.jpg new file mode 100755 index 000000000..fb72ae255 Binary files /dev/null and b/install/import/images/PROD006-2.jpg differ diff --git a/install/import/images/PROD006-3.jpg b/install/import/images/PROD006-3.jpg new file mode 100755 index 000000000..bd7f5721e Binary files /dev/null and b/install/import/images/PROD006-3.jpg differ diff --git a/install/import/images/PROD006-4.jpg b/install/import/images/PROD006-4.jpg new file mode 100755 index 000000000..394283e56 Binary files /dev/null and b/install/import/images/PROD006-4.jpg differ diff --git a/install/import/images/PROD006-5.jpg b/install/import/images/PROD006-5.jpg new file mode 100755 index 000000000..d258db936 Binary files /dev/null and b/install/import/images/PROD006-5.jpg differ diff --git a/install/import/images/PROD006-6.jpg b/install/import/images/PROD006-6.jpg new file mode 100755 index 000000000..982815847 Binary files /dev/null and b/install/import/images/PROD006-6.jpg differ diff --git a/install/import/images/PROD007-1.jpg b/install/import/images/PROD007-1.jpg new file mode 100755 index 000000000..fda1d2880 Binary files /dev/null and b/install/import/images/PROD007-1.jpg differ diff --git a/install/import/images/PROD007-2.jpg b/install/import/images/PROD007-2.jpg new file mode 100755 index 000000000..a784790cf Binary files /dev/null and b/install/import/images/PROD007-2.jpg differ diff --git a/install/import/images/PROD007-3.jpg b/install/import/images/PROD007-3.jpg new file mode 100755 index 000000000..30b5637ae Binary files /dev/null and b/install/import/images/PROD007-3.jpg differ diff --git a/install/import/images/PROD007-4.jpg b/install/import/images/PROD007-4.jpg new file mode 100755 index 000000000..00556c665 Binary files /dev/null and b/install/import/images/PROD007-4.jpg differ diff --git a/install/import/images/PROD008-1.jpg b/install/import/images/PROD008-1.jpg new file mode 100755 index 000000000..dc8e0bead Binary files /dev/null and b/install/import/images/PROD008-1.jpg differ diff --git a/install/import/images/PROD008-2.jpg b/install/import/images/PROD008-2.jpg new file mode 100755 index 000000000..173bed1aa Binary files /dev/null and b/install/import/images/PROD008-2.jpg differ diff --git a/install/import/images/PROD008-3.jpg b/install/import/images/PROD008-3.jpg new file mode 100755 index 000000000..790d8add6 Binary files /dev/null and b/install/import/images/PROD008-3.jpg differ diff --git a/install/import/images/PROD008-4.jpg b/install/import/images/PROD008-4.jpg new file mode 100755 index 000000000..ec4af28cc Binary files /dev/null and b/install/import/images/PROD008-4.jpg differ diff --git a/install/import/images/PROD008-5.jpg b/install/import/images/PROD008-5.jpg new file mode 100755 index 000000000..91e7ebaa0 Binary files /dev/null and b/install/import/images/PROD008-5.jpg differ diff --git a/install/import/images/PROD009-1.jpg b/install/import/images/PROD009-1.jpg new file mode 100755 index 000000000..3a143de1a Binary files /dev/null and b/install/import/images/PROD009-1.jpg differ diff --git a/install/import/images/PROD009-2.jpg b/install/import/images/PROD009-2.jpg new file mode 100755 index 000000000..b5ccde667 Binary files /dev/null and b/install/import/images/PROD009-2.jpg differ diff --git a/install/import/images/PROD009-3.jpg b/install/import/images/PROD009-3.jpg new file mode 100755 index 000000000..76d465a47 Binary files /dev/null and b/install/import/images/PROD009-3.jpg differ diff --git a/install/import/images/PROD010-1.jpg b/install/import/images/PROD010-1.jpg new file mode 100755 index 000000000..5f9df3fbb Binary files /dev/null and b/install/import/images/PROD010-1.jpg differ diff --git a/install/import/images/PROD010-2.jpg b/install/import/images/PROD010-2.jpg new file mode 100755 index 000000000..3fe504716 Binary files /dev/null and b/install/import/images/PROD010-2.jpg differ diff --git a/install/import/images/PROD010-3.jpg b/install/import/images/PROD010-3.jpg new file mode 100755 index 000000000..867361eb9 Binary files /dev/null and b/install/import/images/PROD010-3.jpg differ diff --git a/install/import/images/PROD010-4.jpg b/install/import/images/PROD010-4.jpg new file mode 100755 index 000000000..f9681b9bf Binary files /dev/null and b/install/import/images/PROD010-4.jpg differ diff --git a/install/import/images/PROD011-1.jpg b/install/import/images/PROD011-1.jpg new file mode 100755 index 000000000..8130598bc Binary files /dev/null and b/install/import/images/PROD011-1.jpg differ diff --git a/install/import/images/PROD011-2.jpg b/install/import/images/PROD011-2.jpg new file mode 100755 index 000000000..e37c4baaf Binary files /dev/null and b/install/import/images/PROD011-2.jpg differ diff --git a/install/import/images/PROD011-3.jpg b/install/import/images/PROD011-3.jpg new file mode 100755 index 000000000..ba4530c3c Binary files /dev/null and b/install/import/images/PROD011-3.jpg differ diff --git a/install/import/images/PROD011-4.jpg b/install/import/images/PROD011-4.jpg new file mode 100755 index 000000000..b749649d8 Binary files /dev/null and b/install/import/images/PROD011-4.jpg differ diff --git a/install/import/images/PROD012-1.jpg b/install/import/images/PROD012-1.jpg new file mode 100755 index 000000000..ff885661d Binary files /dev/null and b/install/import/images/PROD012-1.jpg differ diff --git a/install/import/images/PROD012-2.jpg b/install/import/images/PROD012-2.jpg new file mode 100755 index 000000000..c27fd1cbb Binary files /dev/null and b/install/import/images/PROD012-2.jpg differ diff --git a/install/import/images/PROD013-1.jpg b/install/import/images/PROD013-1.jpg new file mode 100755 index 000000000..729fe97f7 Binary files /dev/null and b/install/import/images/PROD013-1.jpg differ diff --git a/install/import/images/PROD014-1.jpg b/install/import/images/PROD014-1.jpg new file mode 100755 index 000000000..384b1939e Binary files /dev/null and b/install/import/images/PROD014-1.jpg differ diff --git a/install/import/images/PROD014-2.jpg b/install/import/images/PROD014-2.jpg new file mode 100755 index 000000000..42de512f5 Binary files /dev/null and b/install/import/images/PROD014-2.jpg differ diff --git a/install/import/images/PROD014-3.jpg b/install/import/images/PROD014-3.jpg new file mode 100755 index 000000000..0270dc868 Binary files /dev/null and b/install/import/images/PROD014-3.jpg differ diff --git a/install/import/images/PROD014-4.jpg b/install/import/images/PROD014-4.jpg new file mode 100755 index 000000000..e845a8838 Binary files /dev/null and b/install/import/images/PROD014-4.jpg differ diff --git a/install/import/images/PROD015-1.jpg b/install/import/images/PROD015-1.jpg new file mode 100755 index 000000000..f99e9e275 Binary files /dev/null and b/install/import/images/PROD015-1.jpg differ diff --git a/install/import/images/PROD015-2.jpg b/install/import/images/PROD015-2.jpg new file mode 100755 index 000000000..b56a13951 Binary files /dev/null and b/install/import/images/PROD015-2.jpg differ diff --git a/install/import/images/PROD016-1.jpg b/install/import/images/PROD016-1.jpg new file mode 100755 index 000000000..3aff2648a Binary files /dev/null and b/install/import/images/PROD016-1.jpg differ diff --git a/install/import/images/PROD017-1.jpg b/install/import/images/PROD017-1.jpg new file mode 100755 index 000000000..1a620ab47 Binary files /dev/null and b/install/import/images/PROD017-1.jpg differ diff --git a/install/import/images/PROD017-2.jpg b/install/import/images/PROD017-2.jpg new file mode 100755 index 000000000..82a20f1fb Binary files /dev/null and b/install/import/images/PROD017-2.jpg differ diff --git a/install/import/images/PROD017-3.jpg b/install/import/images/PROD017-3.jpg new file mode 100755 index 000000000..d476eb773 Binary files /dev/null and b/install/import/images/PROD017-3.jpg differ diff --git a/install/import/images/PROD017-4.jpg b/install/import/images/PROD017-4.jpg new file mode 100755 index 000000000..b3a3e4707 Binary files /dev/null and b/install/import/images/PROD017-4.jpg differ diff --git a/install/import/images/PROD018-1.jpg b/install/import/images/PROD018-1.jpg new file mode 100755 index 000000000..cefa9992e Binary files /dev/null and b/install/import/images/PROD018-1.jpg differ diff --git a/install/import/images/PROD019-1.jpg b/install/import/images/PROD019-1.jpg new file mode 100755 index 000000000..2e45bb27f Binary files /dev/null and b/install/import/images/PROD019-1.jpg differ diff --git a/install/import/images/PROD019-2.jpg b/install/import/images/PROD019-2.jpg new file mode 100755 index 000000000..9b47f6ea1 Binary files /dev/null and b/install/import/images/PROD019-2.jpg differ diff --git a/install/import/images/PROD019-3.jpg b/install/import/images/PROD019-3.jpg new file mode 100755 index 000000000..02aa975da Binary files /dev/null and b/install/import/images/PROD019-3.jpg differ diff --git a/install/import/images/PROD019-4.jpg b/install/import/images/PROD019-4.jpg new file mode 100755 index 000000000..fad8bbf59 Binary files /dev/null and b/install/import/images/PROD019-4.jpg differ diff --git a/install/import/images/PROD019-5.jpg b/install/import/images/PROD019-5.jpg new file mode 100755 index 000000000..0e2377b8c Binary files /dev/null and b/install/import/images/PROD019-5.jpg differ diff --git a/install/import/images/PROD020-1.jpg b/install/import/images/PROD020-1.jpg new file mode 100755 index 000000000..14b7ae55b Binary files /dev/null and b/install/import/images/PROD020-1.jpg differ diff --git a/install/import/images/PROD021-1.jpg b/install/import/images/PROD021-1.jpg new file mode 100755 index 000000000..5cd5e27ed Binary files /dev/null and b/install/import/images/PROD021-1.jpg differ diff --git a/install/import/images/PROD021-2.jpg b/install/import/images/PROD021-2.jpg new file mode 100755 index 000000000..119afa3be Binary files /dev/null and b/install/import/images/PROD021-2.jpg differ diff --git a/install/import/images/PROD021-3.jpg b/install/import/images/PROD021-3.jpg new file mode 100755 index 000000000..0b4470d3c Binary files /dev/null and b/install/import/images/PROD021-3.jpg differ diff --git a/install/import/images/PROD021-4.jpg b/install/import/images/PROD021-4.jpg new file mode 100755 index 000000000..0cffa4dea Binary files /dev/null and b/install/import/images/PROD021-4.jpg differ diff --git a/install/import/images/PROD022-1.jpg b/install/import/images/PROD022-1.jpg new file mode 100755 index 000000000..72eb89cfe Binary files /dev/null and b/install/import/images/PROD022-1.jpg differ diff --git a/install/import/images/PROD022-2.jpg b/install/import/images/PROD022-2.jpg new file mode 100755 index 000000000..85292d60d Binary files /dev/null and b/install/import/images/PROD022-2.jpg differ diff --git a/install/import/images/PROD022-3.jpg b/install/import/images/PROD022-3.jpg new file mode 100755 index 000000000..e564ed1b6 Binary files /dev/null and b/install/import/images/PROD022-3.jpg differ diff --git a/install/import/images/PROD022-4.jpg b/install/import/images/PROD022-4.jpg new file mode 100755 index 000000000..09d39fd35 Binary files /dev/null and b/install/import/images/PROD022-4.jpg differ diff --git a/install/import/images/PROD022-5.jpg b/install/import/images/PROD022-5.jpg new file mode 100755 index 000000000..f47219289 Binary files /dev/null and b/install/import/images/PROD022-5.jpg differ diff --git a/install/import/images/PROD023-1.jpg b/install/import/images/PROD023-1.jpg new file mode 100755 index 000000000..e645f5eb9 Binary files /dev/null and b/install/import/images/PROD023-1.jpg differ diff --git a/install/import/images/PROD023-2.jpg b/install/import/images/PROD023-2.jpg new file mode 100755 index 000000000..ad438c981 Binary files /dev/null and b/install/import/images/PROD023-2.jpg differ diff --git a/install/import/images/PROD023-3.jpg b/install/import/images/PROD023-3.jpg new file mode 100755 index 000000000..ccafdb7fa Binary files /dev/null and b/install/import/images/PROD023-3.jpg differ diff --git a/install/import/images/PROD023-4.jpg b/install/import/images/PROD023-4.jpg new file mode 100755 index 000000000..a2fc55786 Binary files /dev/null and b/install/import/images/PROD023-4.jpg differ diff --git a/install/import/images/PROD023-5.jpg b/install/import/images/PROD023-5.jpg new file mode 100755 index 000000000..bf67ea4b0 Binary files /dev/null and b/install/import/images/PROD023-5.jpg differ diff --git a/install/import/images/PROD023-6.jpg b/install/import/images/PROD023-6.jpg new file mode 100755 index 000000000..5d037669b Binary files /dev/null and b/install/import/images/PROD023-6.jpg differ diff --git a/install/import/images/PROD024-1.jpg b/install/import/images/PROD024-1.jpg new file mode 100755 index 000000000..7f3874205 Binary files /dev/null and b/install/import/images/PROD024-1.jpg differ diff --git a/install/import/images/PROD024-2.jpg b/install/import/images/PROD024-2.jpg new file mode 100755 index 000000000..fcd4bd587 Binary files /dev/null and b/install/import/images/PROD024-2.jpg differ diff --git a/install/import/images/PROD024-3.jpg b/install/import/images/PROD024-3.jpg new file mode 100755 index 000000000..1d0c8deef Binary files /dev/null and b/install/import/images/PROD024-3.jpg differ diff --git a/install/import/images/PROD024-4.jpg b/install/import/images/PROD024-4.jpg new file mode 100755 index 000000000..7ff3957c1 Binary files /dev/null and b/install/import/images/PROD024-4.jpg differ diff --git a/install/import/images/PROD024-5.jpg b/install/import/images/PROD024-5.jpg new file mode 100755 index 000000000..53a63564c Binary files /dev/null and b/install/import/images/PROD024-5.jpg differ diff --git a/install/import/images/PROD025-1.jpg b/install/import/images/PROD025-1.jpg new file mode 100755 index 000000000..54fa325e5 Binary files /dev/null and b/install/import/images/PROD025-1.jpg differ diff --git a/install/import/images/PROD025-2.jpg b/install/import/images/PROD025-2.jpg new file mode 100755 index 000000000..fd3ba1611 Binary files /dev/null and b/install/import/images/PROD025-2.jpg differ diff --git a/install/import/images/PROD025-3.jpg b/install/import/images/PROD025-3.jpg new file mode 100755 index 000000000..6ec0c96ef Binary files /dev/null and b/install/import/images/PROD025-3.jpg differ diff --git a/install/import/images/PROD026-1.jpg b/install/import/images/PROD026-1.jpg new file mode 100755 index 000000000..96bb2b392 Binary files /dev/null and b/install/import/images/PROD026-1.jpg differ diff --git a/install/import/images/PROD027-1.jpg b/install/import/images/PROD027-1.jpg new file mode 100755 index 000000000..9ab635023 Binary files /dev/null and b/install/import/images/PROD027-1.jpg differ diff --git a/install/import/images/PROD028-1.jpg b/install/import/images/PROD028-1.jpg new file mode 100755 index 000000000..1a166e91b Binary files /dev/null and b/install/import/images/PROD028-1.jpg differ diff --git a/install/import/images/PROD029-1.jpg b/install/import/images/PROD029-1.jpg new file mode 100755 index 000000000..e25b56f18 Binary files /dev/null and b/install/import/images/PROD029-1.jpg differ diff --git a/install/import/images/PROD030-1.jpg b/install/import/images/PROD030-1.jpg new file mode 100755 index 000000000..731d82897 Binary files /dev/null and b/install/import/images/PROD030-1.jpg differ diff --git a/install/import/images/PROD030-2.jpg b/install/import/images/PROD030-2.jpg new file mode 100755 index 000000000..15ecbef26 Binary files /dev/null and b/install/import/images/PROD030-2.jpg differ diff --git a/install/import/images/PROD030-3.jpg b/install/import/images/PROD030-3.jpg new file mode 100755 index 000000000..8f3d9eb54 Binary files /dev/null and b/install/import/images/PROD030-3.jpg differ diff --git a/install/import/images/PROD030-4.jpg b/install/import/images/PROD030-4.jpg new file mode 100755 index 000000000..2d402e8d9 Binary files /dev/null and b/install/import/images/PROD030-4.jpg differ diff --git a/install/import/products.csv b/install/import/products.csv new file mode 100644 index 000000000..d2d84fb53 --- /dev/null +++ b/install/import/products.csv @@ -0,0 +1,35 @@ +"REF";"TITRE UK";"CHAPO UK";"CHAPO FR";"DESCRIPTIF UK";"DESCRIPTIF FR";"POSTSCRIPTUM UK";"POSTSCRIPTUM FR";"PRIX";"PRIX2";"PHOTO";"BRAND";"COULEUR UK";"CATEGORIE" +"PROD001";"Horatio";"Contemporary atypical chair";"Chaise contemporaine hors normes";"Its design is based on a very simple idea : atypical aesthetics for an everyday use. You may even choose to combine the various colours ! A specific look that will happily and impertinently fit with your furniture. ";"Son design est issu d'une idée très simple: un esthétique hors du commun pour un usage de tous les jours. On peut même choisir de combiner les différents coloris! Un look qui se mêle avec bonheur et impertinence à votre mobilier. +";"Dimensions : Width : 20'' – Depth: 19'' – Height: 42''";"Dimensions : Larg 52 cm - Prof 50 cm - Haut 108 cm";223;199;"PROD001-1.jpg;PROD001-2.jpg;PROD001-3.jpg;PROD001-4.jpg";"MILAN";"blue;pink;red;green;purple";"Chairs" +"PROD002";"Travis";"Ergonomic & affordable";"Ergonomique et économique";"Ergonomic, affordable, comfortable, stackable, easily dismantled, this little stool became a cult item. Decorative feature or occasional seat, it suits perfectly any room in the house. ";"Ergonomique, économique, confortable, empilable, démontable, ce petit tabouret est devenu un objet culte. Elément de décor ou siège d'appoint, il a sa place dans toute la maison. +";"Dimensions : Diam. 11'' – Height: 17''";"Dimensions : Diam 30 cm - Haut 45 cm";25;19;"PROD002-1.jpg;PROD002-2.jpg;PROD002-3.jpg;PROD002-4.jpg;PROD002-5.jpg;PROD002-6.jpg";"MAGIS";"blue;orange;yellow;pink;purple;green";"Stools" +"PROD003";"Stacy";"A successfull mix";"Un mariage réussi";"The ''Stacy'' armchair brings a taste of playfulness in the design's world for more than 20 years ! The successfull mix of French Regence style and ultra modern materials creates a strong charismatic personality. ";"Le fauteuil Stacy apporte une note de fantaisie dans le monde du design depuis plus de 20 ans ! Sa personnalité forte et charismatique s'exprime au travers de cette association de style Régence et de matériaux ultramoderne. ";"Dimensions : Width :44'' – Depth:31'' – Height: 42'' . Sitting : width : 25''– Height : 16'' . Armrests height : 27''";"Dimensions : Larg 114 cm x Prof 80 cm x H 108 cm - Assise : larg 65 cm x H 42 cm - Accoudoirs : H 69 cm";653;610;"PROD003-1.jpg;PROD003-2.jpg;PROD003-3.jpg;";"MILAN";"blue;purple;green";"Armchairs" +"PROD004";"Scarlett";"A timeless treasure";"Un trésor intemporel";"Treasured and timeless styling characterizes the luxury ''Scarlett'' Armchair. It will instantly add a dash of refined appeal to any living space. Beneath the luxurious fabric cover is a solid wood frame, ensuring that this piece will be passed on from generation to generation. ";"Un style précieux et intemporel caractérise la luxueuse banquette Scarlett. Elle apporte immédiatement une touche de raffinement à n'importe quel salon. Sous l'étoffe précieuse, un solide châssis bois vous assure que cette pièce traversera les époques et les générations. ";"Dimensions : Width :65'' – Depth:31''– Height: 38''";"Dimensions : Larg 165 cm x Prof 80 cm x H 95 cm";956;899;"PROD004-1.jpg;PROD004-2.jpg";"OXYO";"gray;black";"Armchairs" +"PROD005";"Owen";"An eye-catching armchair";"Un fauteuil surprenant";"Get a look at the future – retro style - with our cutout ''Owen'' armchair ! Eye-catching and incredibly fun, this armchair is a must-have for today's hottest living space ! ";"Revisitez le futur avec une note retro grâce à notre fauteuil Owen! Spectaculaire et incroyablement fun, ce fauteuil est incontournable pour un salon moderne et branché ! ";"Dimensions : Width :30'' – Depth:31''– Height: 35''";"Dimensions : Larg 75 cm - Prof 80 cm - Haut 90 cm";395;;"PROD005-1.jpg;PROD005-2.jpg;PROD005-3.jpg;PROD005-4.jpg;PROD005-5.jpg;PROD005-6.jpg";"OXYO";"blue;purple;green;pink;red;orange;";"Armchairs" +"PROD006";"Nigel";"A comfortable beauty";"Une beauté confortable";"This comfortable beauty does great solo as a lounger or in a book nook. With the ''Nigel'' sofa, you will get hours of cozy relaxation. This oversized seat is the ultimate lounger but the pure design still keeps it modern and hip. ";"La beauté confortable du sofa Nigel permet tous les solos dans votre salon ou votre bibliothèque. Relaxez vous tranquilement avec le canapé Nigel. Ce siège généreux est l'expression même du fauteuil mais ses lignes pures lui assurent un style moderne et tendance. ";"Dimensions: Width : 48"" - Depth : 32"" - Height : 28"" – 17"" seat Height";"Dimensions : Larg 120 cm – Prof  80 cm – Haut. 70 cm . Hauteur d'assise : 40 cm";638;;"PROD006-1.jpg;PROD006-2.jpg;PROD006-3.jpg;PROD006-4.jpg;PROD006-5.jpg;PROD006-6.jpg";"OXYO";"blue;beige;purple;green;pink;turquoise";"Sofas" +"PROD007";"Heathcliff";"A unique style";"Un style unique";"Provide a rich texture to any living space thanks to the tufting and velvet of the ''Heathcliff'' sofa. Arched roll arms and vibrant colours add to the fun and unique style of this sofa. ";"Enrichissez votre intérieur de velours et de textures capitonnées du canapé Heathcliff. Les accoudoirs arrondis en finition cloutée et la gamme de couleurs acidulées apportent un style et une fantaisie unique à ce sofa. ";"Dimensions: Width : 92"" - Depth : 43"" - Height : 36""";"Dimensions : Larg 230 cm – Prof. 110 cm – Haut. 90 cm";1120;;"PROD007-1.jpg;PROD007-2.jpg;PROD007-3.jpg;PROD007-4.jpg;";"OFFUS";"turquoise;blue;pink;purple";"Sofas" +"PROD008";"Wilson";"Pure luxury !";"Le luxe à l'état pur !";"Choose our ''Wilson'' armchair and surround yourself in luxury. You will appreciate it's high armrests that will keep you nestled in comfort. Beautiful coloured leather upholstery makes a fashion-forward design statement. ";"Adoptez notre fauteuil Wilson et plongez dans le luxe. Vous apprécierez ses hauts accoudoirs qui vous envelopperont de confort et de douceur. L'habillage en cuir de couleur vive en fait une pièce de design avant-gardiste. ";"Dimensions : Width : 38"" - Depth : 36"" - Height : 34""";"Dimensions : larg 95 cm – Prof. 90 cm – Haut. 90 cm";489;;"PROD008-1.jpg;PROD008-2.jpg;PROD008-3.jpg;PROD008-4.jpg;PROD008-5.jpg;";"PLINK";"blue;green;pink;purple;brown;";"Armchairs" +"PROD009";"Zoe";"An exceptional combination";"Une union exceptionnelle";"Contemporary ''Zoe'' armchair is an exceptional combination of function and design. +The seating is generously cushioned for comfort. Contoured, wrap-around back offers optimal support. The brushed stainless steel base ensures stability. +Swivel feature for added function. ";"Zoe est un fauteuil contemporain qui combine de manière exceptionnelle fonctionnalité et design. L'assise est garnie d'un coussin généreux pour plus de confort. Le dossier enveloppant offre un appui optimal. La stabilité de l'ensemble est assurée par une base en inox brossé. Siège pivotant. ";"Dimensions : Width : 30'' – Depth : 27'' – height : 31''";"Dimensions : Larg. 75 cm – Prof. 69 cm – Haut. 80 cm";520;;"PROD009-1.jpg;PROD009-2.jpg;PROD009-3.jpg";"PLINK";"blue;purple;orange";"Armchairs" +"PROD010";"Sigmund";"A fun project";"Un projet fou";"The contrast of a vintage couch and modern colours provides a really fun project called ''Sigmund'' ! It will instantly add a dash of impertinence for any hip living place. ";"Le projet fantastique appelé Sigmund provient d'un contraste étonnant entre un canapé vintage et un éventail de couleurs moderne. Ce canapé apportera immédiatement une touche d'impertinence à n'importe quel salon branché. ";"Dimensions: Width : 92"" - Depth : 43"" - Height : 36""";"Dimensions : Larg 230 cm – Prof. 110 cm – Haut. 90 cm";834;;"PROD010-1.jpg;PROD010-2.jpg;PROD010-3.jpg;PROD010-4.jpg";"OFFUS";"blue;purple;red;orange";"Armchairs ; Sofas" +"PROD011";"Tina";"The little plastic chair";"La petite chaise en plastique";"This little ''Tina'' plastic chair will become your new red hot favourite thanks to its efficient design. Stackable and made of recyclable material, Tina suits perfectly any room in the house ! ";"L'efficacité du design de cette petite chaise en plastique Tina en fera vite votre favorite. Empilable et recyclable, Tina se glissera parfaitement dans n'importe quelle pièce de votre maison ! ";"Dimensions : Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm ";75;;"PROD011-1.jpg;PROD011-2.jpg;PROD011-3.jpg;PROD011-4.jpg";"PARRY";"blue;orange;red;purple";"Chairs" +"PROD012";"Victoria";"Pure lines";"Des lignes éûrées";"A successfull combination of Regence style and ultra modern material. The pure lines of the ''Victoria'' armchair together with its translucent brilliance make a fashion-forward design statement. ";"Un mariage réussit du style Régence et de matériaux ultra modernes. Les lignes pures de la chaise Victoria associées à la brillance translucide de sa matière en font une pièce de design avant-gardiste. ";"Dimensions : Width :44'' – Depth:31'' – Height: 42'' . Sitting : width : 25''– Height : 16'' . Armrests height : 27''";"Dimensions : Larg 114 cm x Prof 80 cm x H 108 cm - Assise : larg 65 cm x H 42 cm - Accoudoirs : H 69 cm";138;;"PROD012-1.jpg;PROD012-2.jpg";"MILAN";"black";"Armchairs" +"PROD013";"Violet";"A beautifull classic";"Une beauté classique";"A new edition of a classic. Beneath a beautiful colorfull leather, a strong walnut wood frame. You will appreciate the luxurious stylish details of the ''Violet'' armless chair. ";"La réédition d'un classique. Sous un superbe cuir aux couleurs chatoyantes, une solide structure en noyer. Vous apprécierez les détails stylistiques luxueux de notre chaise Violet. ";"Dimensions : Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm";98;;"PROD013-1.jpg";"MAGIS";"Gray";"Chairs" +"PROD014";"Sally";"Contemporary atypical chair";"Chaise contemporaine hors normes";"Contemporary atypical chair. The atypical sitting of the ''Sally '' chair will nestled you in confort. Play with the vibrant colours range to create a unique dining room. ";"Chaise contemporaine hors normes. L'assise surprenante de la chaise Sally vous enveloppera de confort. Amusez vous avec l'éventail de couleurs lumineuses pour créer une salle à manger unique. ";"Dimensions : Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm";112;;"PROD014-1.jpg;PROD014-2.jpg;PROD014-3.jpg;PROD014-4.jpg";"PARRY";"blue;purple;orange;yellow";"Chairs" +"PROD015";"Oliver";"Comfort & Design";"Confort et Design";"Surround yourself in ultra modern luxury with the ''Oliver'' armchair and get a look at the future ! Eye-catching, this unique combination of comfort and design is a must-have for today's book nook. ";"Abandonnez vous à un univers de luxe ultra moderne avec le fauteuil Oliver et voyagez dans le futur ! Cette combinaison unique de confort et de design est spectaculaire. Un élément incontournable pour votre bibliothèque. ";"Dimensions : Width : 30'' – Depth : 27'' – height : 31''";"Dimensions : Larg. 75 cm – Prof. 69 cm – Haut. 80 cm";340;;"PROD015-1.jpg;PROD015-2.jpg;";"MAGIS";"white;black";"Armchairs;Chairs" +"PROD016";"Lexie";"A modern style";"Un style moderne";"Demonstrate your flair for modern style with our ''Lexie'' chair in your dining room. A rectangular cushioned back offers a contemporary feel, while the comfortable seat provides complete comfort. ";"Montrez que vous avez le sens de la modernité en choisissant la chaise ''Lexie'' pour votre salle à manger. Le coussin rectangulaire sur le dossier apporte une touche contemporaine. L'assise généreuse apporte un confort complet. ";"Dimensions : Width : 19'' – Depth : 23'' – Height : 40''";"Dimensions : larg. 50 cm – Prof. 60 cm – Haut. 100 cm";159;;"PROD016-1.jpg";"PLINK";;"Chairs" +"PROD017";"Flynn";"A touch of retro vibe";"Un petit air rétro";"If your destination is up-to-date décor with a touch of retro vibe, look no further than our ''Flynn'' sofa. Sleek, low track arms and high tapering legs give this piece a mid-century flavor. The vibrant tones of the woven upholstery will easily blend with any interior décor. ";"Si vous recherchez une décoration actuelle avec une touche rétro, n'allez pas plus loin et opter pour notre canapé ''Flynn''. Ce canapé a un petit air des années 50 grâce à ses accoudoirs bas, ses pieds allongés et ses lignes pures. Les couleurs chatoyantes de son revêtement en laine lui permettent de se fondre dans tous les intérieurs. ";"Dimensions : Width : 89'' – Depth : 37'' – Height : 36''";"Dimensions : Larg. 225 cm – Prof. 95 cm – Haut. 90 cm";1299;;"PROD017-1.jpg;PROD017-2.jpg;PROD017-3.jpg;PROD017-4.jpg";"OFFUS";"blue;green;red;purple";"Sofas" +"PROD018";"Emily";"A old-world feel";"Une touche d'histoire";"Our ''Emily'' armlesschair adds a touch of a old-world feel to your space. Perfect for when defining the seating space in a larger room. A medium wood finish sets off the delicate embellishments at the base, while the luxurous upholstery keeps the look fresh. The cushions guarantee that this is a chair worth relaxing in, not just admiring from afar. ";"La chaise ''Emily'' apporte une touche d'histoire à votre intérieur. Elle est parfaite pour structurer votre espace, notamment dans une grande pièce. Les finitions bois font la part belle à de délicates arabesques, tandis que le luxueux revêtement apporte un look frais. Cette chaise n'est pas destinée à la figuration grâce à la mousse confortable de l'assise. ";"Dimensions : Width : 33'' – Depth : 27'' – Height : 40''";"Dimensions : Larg. 85 cm – Prof. 69 cm – Haut. 100 cm";690;;"PROD018-1.jpg";"PARRY";"red";"Armchairs" +"PROD019";"Edgar";"A special spot";"Un endroit à part";"A special spot for reading, lounging or chatting, our '' Edgar '' armchair has no reservations when it comes to style. The design starts with mid-century modern elements like lean arms, while the brushed stainless steel base ensures stability. Swivel feature for added function. ";"Un endroit spécial où lire, rêver ou discuter, notre fauteuil ''Edgar'' n'a pas de limite quand il s'agit de style. Son design part d'éléments contemporains comme ses accoudoirs bas et fins, tandis que sa base en inox brossé assure la stabilité de l'ensemble. Siège pivotant. ";"Dimensions : Width : 33'' – Depth : 27'' – Height : 40''";"Dimensions: Larg. 85 cm – Prof. 69 cm – Haut. 100 cm";275;;"PROD019-1.jpg;PROD019-2.jpg;PROD019-3.jpg;PROD019-4.jpg;PROD019-5.jpg";"TOKO";"blue;yellow;orange;pink;purple";"Armchairs" +"PROD020";"Pamela";"Clean lines";"Des lignes pures";"By making our ''Pamela'' chair a centerpiece of your dining area, you'll demonstrate your eye for clean lines and comfortable seating. The contemporary touches of this chair are provided by the light brown wool, a flared seat back and slightly curved wood back legs. The color of the uphostery is the perfect complement to the wood finish of the chair legs. ";"Choisissez notre chaise '' Pamela'' comme pièce maitresse de votre salle à manger et faites la démonstration de votre maitrise des lignes épurées et du confort d'assise. L'allure contemporaine de cette chaise provient de la laine beige, du dossier légèrement évasé et des pieds en bois arrières délicatement incurvés. La couleur du revêtement fait parfaitement écho à la finition bois des pieds. Dimensions : larg. 50 cm – Prof. 60 cm – Haut. 100 cm";"Dimensions : Width : 19'' – Depth : 23'' – Height : 40''";"Dimensions : Width : 19'' – Depth : 23'' – Height : 40''";189;;"PROD020-1.jpg";"OFFUS";"brown";"Chairs" +"PROD021";"Courtney";"Mil madness";"Douce folie";"Add a dash of mild madness to your kitchen ! Eye-catching, this ''Courtney'' armless chair is a must-have for hip dining area.";"Mettez une touche de douce folie dans votre cuisine ! Surprenante, notre chaise ''Courtney'' est incontournable pour un coin repas branché. ";"Dimensions : Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm ";89;;"PROD021-1.jpg;PROD021-2.jpg;PROD021-3.jpg;PROD021-4.jpg";"TOKO";"blue;orange;green;purple";"Chairs" +"PROD022";"Barbara";"An amazing look";"Un look détonnant";"An amazing look for our ''Barbara'' chair ! A cut-out oval in the back provides a distinctive character, while the lively range of colours and the mat finish makes a big style statement. Dimensions : Width : 19'' – Depth : 23'' – Height : 31''";"Un look hors du commun pour la chaise ''Barbara'' ! L'ouverture oval du dossier apporte une personnalité toute particulière tandis que la large gamme de couleurs vives et le rendu mat provoque un vrai effet de style. Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm ";"Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm ";122;;"PROD022-1.jpg;PROD022-2.jpg;PROD022-3.jpg;PROD022-4.jpg;PROD022-5.jpg";"MAGIS";"blue;turquoise;yellow;orange;red";"Chairs" +"PROD023";"Haley";"An armless chair coming from outer space !";"Une chaise cosmique !";"This ''Haley'' amazing chair is as light as paper but sturdy as steel. Play with the vibrant colours range to create a unique dining area. ";"La chaise ''Haley'' est étonnante : légère comme le papier mais solide comme l'acier. Jouez avec la gamme de couleurs vibrantes pour composer un espace repas unique.";"Dimensions : Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm ";93;;"PROD023-1.jpg;PROD023-2.jpg;PROD023-3.jpg;PROD023-4.jpg;PROD023-5.jpg;PROD023-6.jpg";"MILAN";"purple;green;pink;red;orange;turquoise";"Chairs" +"PROD024";"Kyle";"A modern silhouette";"Un look moderne";"The modern silhouette of the ''Kyle'' sofa features cantilevered legs in a mirror chrome finish and pillow armrests. The button-tufted seat and back cushions highlight the detailed craftsmanship. ";"Le canapé ''Kyle'' offre une silhouette moderne grâce à ses pieds chromés en porte-à-faux et ses accoudoirs moelleux. L'assise et le dossier capitonnés mettent en valeur le travail précis de l'artisan.";"Dimensions: Width : 92"" - Depth : 43"" - Height : 36""";"Dimensions : Larg 230 cm – Prof. 110 cm – Haut. 90 cm";1799;;"PROD024-1.jpg;PROD024-2.jpg;PROD024-3.jpg;PROD024-4.jpg;PROD024-5.jpg";"TOKO";"blue;pink;red;green;purple";"Sofas" +"PROD025";"Kenny";"A fresh take on a classic chair ";"Un classique revisité";"Chic design elements and a lovely pattern bring cool interest to this ''Kenny'' chair. The well-lofted seat cushion offers ultimate comfort and support.";"Des éléments de design élégants et un motif chic apporte un nouvel intérêt à notre chaise ''Kenny''. Un coussin d'assise bien positionné offre un confort suprême.";"Dimensions : Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm";299;;"PROD025-1.jpg;PROD025-2.jpg;PROD025-3.jpg";"PLINK";"blue;purple;green";"Chairs" +"PROD026";"Stuart";"A masterpiece of furniture design";"Une pièce de designer !";"Get the on-trend look of modern masterpieces of furniture design with our ''Stuart'' chair. Paying homage to the classic design, this piece has an architecturally inspired silhouette with its sculptural wood frame and the clean lines of seat and back cushions. The crisp white hue will blend easily with a range of color schemes. ";"Offrez vous le look branché d'une grande pièce de designer avec la chaise ''Stuart''. Rendant hommage aux classiques du Design, cette chaise a une silhouette inspirée de l'architecture par son cadre bois sculptural et par les lignes pures de son assise et de son dossier. La fraiche nuance de blanc se fondera facilement dans toutes les harmonies de couleurs.";"Dimensions : Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm";189;;"PROD026-1.jpg";"PLINK";"white";"Chairs" +"PROD027";"Marie-Claire";"A naturally appealing";"Une sobre élégance";"There's no denying the naturally appealing of our Marie-Claire chair! Its organic feeling is enhanced by the pretty wood veneers and faux leather upholstery, adding rustic charm and comfort.";"On ne peut nier l'élégance sobre de notre chaise Marie-Claire. Son allure naturelle est rehaussée par les finitions bois et le revêtement imitation cuir ajoute à son charme rustique et son confort.";"Dimensions : Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm";104;;"PROD027-1.jpg";"TOKO";"green";"Chairs" +"PROD028";"Leela";"Contemporary fun chair";"Une fantaisie contemporaine";"At once contemporary and chic, The ''Leela'' chair makes your strong sense of personal style evident. Stylish, easy-clean, leather-like upholstery makes the cut-out in the back more stunning in the light of its vibrant yellow.";"Tout à la fois chic et contemporaine, la chaise ''Leela'' rend votre sens du style évident. Le revêtement en similicuir, facile d'entretien met en valeur l'ouverture du dossier par son jaune lumineux.";"Width : 19'' – Depth : 23'' – Height : 31''";"Dimensions : Larg. 50 cm – Prof.60 cm – Haut. 80 cm ";144;;"PROD028-1.jpg";"MILAN";"yellow";"Chairs;Armchairs" +"PROD029";"Nibbler";"A modern bar stool";"Un tabouret de bar moderne";"If you're looking for a chic, counter height stool that features clean lines and a modern sensibility, look no further than our ''Nibbler'' stool. A chrome-finished base, oval footrest and adjustable, gas-lift mechanism add to its modern look.";"Si vous recherchez un tabouret haut et chic, n'allez pas plus loin que notre tabouret ''Nibbler'' avec ses lignes pures et sa modernité. Une base chromée, un repose-pieds oval ajustable et un mécanisme à gaz ajoute à son look moderne.";"Dimensions : Width : 19'' – Depth : 18'' – Height : 29''";"Dimensions : Larg 50 cm – Prof. 45 cm – Haut. 75 cm";78;;"PROD029-1.jpg";"MAGIS";"black";"Stools" +"PROD030";"Ron";"Get a look at the futur";"Une incursion dans le futur";"Get a look at the future — retro style — with our ''Ron'' bar stool! The contemporary design of the seating with a cut-out oval in the back for distinctive character, while the lively range of colours and high gloss make a big style statement. A chrome-finished base, oval footrest and adjustable, gas-lift mechanism add to the fresh look. Eye-catching and fun, the ''ron'' stool is a must-have for today's hottest dining area and bars. ";"Revisitez le futur avec une note retro grâce au tabouret de bar ''Ron''! Le design contemporain de ce siège grâce à l'ouverture ovale dans son dossier et une large gamme de couleurs vives. Son rendu glossy lui donne un style tout particulier. Une base chromée, un repose-pieds oval ajustable et un mécanisme à gaz ajoute à son look moderne. Surprenant et joyeux, le tabouret ''Ron'' est un incontournable des coin repas et des bars les plus branchés";"Dimensions : Width : 19'' – Depth : 18'' – Height : 29''";"Dimensions : Larg 50 cm – Prof. 45 cm – Haut. 75 cm";96;;"PROD030-1.jpg;PROD030-2.jpg;PROD030-3.jpg;PROD030-4.jpg;";"OFFUS";"blue;yellow;orange;purple";"Stools" diff --git a/templates/admin/default/assets/js/bootstrap-select/bootstrap-select.js b/templates/admin/default/assets/js/bootstrap-select/bootstrap-select.js new file mode 100644 index 000000000..dcfd633a0 --- /dev/null +++ b/templates/admin/default/assets/js/bootstrap-select/bootstrap-select.js @@ -0,0 +1,709 @@ +/*! + * bootstrap-select v1.3.1 + * http://silviomoreto.github.io/bootstrap-select/ + * + * Copyright 2013 bootstrap-select + * Licensed under the MIT license + */ + +!function($) { + + "use strict"; + + $.expr[":"].icontains = $.expr.createPseudo(function(arg) { + return function( elem ) { + return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; + }; + }); + + var Selectpicker = function(element, options, e) { + if (e) { + e.stopPropagation(); + e.preventDefault(); + } + this.$element = $(element); + this.$newElement = null; + this.$button = null; + this.$menu = null; + + //Merge defaults, options and data-attributes to make our options + this.options = $.extend({}, $.fn.selectpicker.defaults, this.$element.data(), typeof options == 'object' && options); + + //If we have no title yet, check the attribute 'title' (this is missed by jq as its not a data-attribute + if (this.options.title == null) { + this.options.title = this.$element.attr('title'); + } + + //Expose public methods + this.val = Selectpicker.prototype.val; + this.render = Selectpicker.prototype.render; + this.refresh = Selectpicker.prototype.refresh; + this.setStyle = Selectpicker.prototype.setStyle; + this.selectAll = Selectpicker.prototype.selectAll; + this.deselectAll = Selectpicker.prototype.deselectAll; + this.init(); + }; + + Selectpicker.prototype = { + + constructor: Selectpicker, + + init: function(e) { + this.$element.hide(); + this.multiple = this.$element.prop('multiple'); + var id = this.$element.attr('id'); + this.$newElement = this.createView(); + this.$element.after(this.$newElement); + this.$menu = this.$newElement.find('> .dropdown-menu'); + this.$button = this.$newElement.find('> button'); + this.$searchbox = this.$newElement.find('input'); + + if (id !== undefined) { + var that = this; + this.$button.attr('data-id', id); + $('label[for="' + id + '"]').click(function(e) { + e.preventDefault(); + that.$button.focus(); + }); + } + + this.checkDisabled(); + this.checkTabIndex(); + this.clickListener(); + this.liveSearchListener(); + this.render(); + this.liHeight(); + this.setStyle(); + this.setWidth(); + if (this.options.container) { + this.selectPosition(); + } + this.$menu.data('this', this); + this.$newElement.data('this', this); + }, + + createDropdown: function() { + //If we are multiple, then add the show-tick class by default + var multiple = this.multiple ? ' show-tick' : ''; + var header = this.options.header ? '

' + this.options.header + '

' : ''; + var searchbox = this.options.liveSearch ? '' : ''; + var drop = + "
" + + "" + + "" + + "
"; + + return $(drop); + }, + + createView: function() { + var $drop = this.createDropdown(); + var $li = this.createLi(); + $drop.find('ul').append($li); + return $drop; + }, + + reloadLi: function() { + //Remove all children. + this.destroyLi(); + //Re build + var $li = this.createLi(); + this.$menu.find('ul').append( $li ); + }, + + destroyLi: function() { + this.$menu.find('li').remove(); + }, + + createLi: function() { + var that = this, + _liA = [], + _liHtml = ''; + + this.$element.find('option').each(function(index) { + var $this = $(this); + + //Get the class and text for the option + var optionClass = $this.attr("class") || ''; + var inline = $this.attr("style") || ''; + var text = $this.data('content') ? $this.data('content') : $this.html(); + var subtext = $this.data('subtext') !== undefined ? '' + $this.data('subtext') + '' : ''; + var icon = $this.data('icon') !== undefined ? ' ' : ''; + if (icon !== '' && ($this.is(':disabled') || $this.parent().is(':disabled'))) { + icon = ''+icon+''; + } + + if (!$this.data('content')) { + //Prepend any icon and append any subtext to the main text. + text = icon + '' + text + subtext + ''; + } + + if (that.options.hideDisabled && ($this.is(':disabled') || $this.parent().is(':disabled'))) { + _liA.push(''); + } else if ($this.parent().is('optgroup') && $this.data('divider') != true) { + if ($this.index() == 0) { + //Get the opt group label + var label = $this.parent().attr('label'); + var labelSubtext = $this.parent().data('subtext') !== undefined ? ''+$this.parent().data('subtext')+'' : ''; + var labelIcon = $this.parent().data('icon') ? ' ' : ''; + label = labelIcon + '' + label + labelSubtext + ''; + + if ($this[0].index != 0) { + _liA.push( + '
'+ + '
'+label+'
'+ + that.createA(text, "opt " + optionClass, inline ) + ); + } else { + _liA.push( + '
'+label+'
'+ + that.createA(text, "opt " + optionClass, inline )); + } + } else { + _liA.push(that.createA(text, "opt " + optionClass, inline )); + } + } else if ($this.data('divider') == true) { + _liA.push('
'); + } else if ($(this).data('hidden') == true) { + _liA.push(''); + } else { + _liA.push(that.createA(text, optionClass, inline )); + } + }); + + $.each(_liA, function(i, item) { + _liHtml += "
  • " + item + "
  • "; + }); + + //If we are not multiple, and we dont have a selected item, and we dont have a title, select the first element so something is set in the button + if (!this.multiple && this.$element.find('option:selected').length==0 && !this.options.title) { + this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected'); + } + + return $(_liHtml); + }, + + createA: function(text, classes, inline) { + return '' + + text + + '' + + ''; + }, + + render: function() { + var that = this; + + //Update the LI to match the SELECT + this.$element.find('option').each(function(index) { + that.setDisabled(index, $(this).is(':disabled') || $(this).parent().is(':disabled') ); + that.setSelected(index, $(this).is(':selected') ); + }); + + var selectedItems = this.$element.find('option:selected').map(function(index,value) { + var $this = $(this); + var icon = $this.data('icon') && that.options.showIcon ? ' ' : ''; + var subtext; + if (that.options.showSubtext && $this.attr('data-subtext') && !that.multiple) { + subtext = ' '+$this.data('subtext') +''; + } else { + subtext = ''; + } + if ($this.data('content') && that.options.showContent) { + return $this.data('content'); + } else if ($this.attr('title') != undefined) { + return $this.attr('title'); + } else { + return icon + $this.html() + subtext; + } + }).toArray(); + + //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled + //Convert all the values into a comma delimited string + var title = !this.multiple ? selectedItems[0] : selectedItems.join(", "); + + //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc.. + if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) { + var max = this.options.selectedTextFormat.split(">"); + var notDisabled = this.options.hideDisabled ? ':not([disabled])' : ''; + if ( (max.length>1 && selectedItems.length > max[1]) || (max.length==1 && selectedItems.length>=2)) { + title = this.options.countSelectedText.replace('{0}', selectedItems.length).replace('{1}', this.$element.find('option:not([data-divider="true"]):not([data-hidden="true"])'+notDisabled).length); + } + } + + //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text + if (!title) { + title = this.options.title != undefined ? this.options.title : this.options.noneSelectedText; + } + + this.$newElement.find('.filter-option').html(title); + }, + + setStyle: function(style, status) { + if (this.$element.attr('class')) { + this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device/gi, '')); + } + + var buttonClass = style ? style : this.options.style; + + if (status == 'add') { + this.$button.addClass(buttonClass); + } else if (status == 'remove') { + this.$button.removeClass(buttonClass); + } else { + this.$button.removeClass(this.options.style); + this.$button.addClass(buttonClass); + } + }, + + liHeight: function() { + var selectClone = this.$newElement.clone(); + selectClone.appendTo('body'); + var $menuClone = selectClone.addClass('open').find('> .dropdown-menu'); + var liHeight = $menuClone.find('li > a').outerHeight(); + var headerHeight = this.options.header ? $menuClone.find('.popover-title').outerHeight() : 0; + selectClone.remove(); + this.$newElement.data('liHeight', liHeight).data('headerHeight', headerHeight); + }, + + setSize: function() { + var that = this, + menu = this.$menu, + menuInner = menu.find('.inner'), + menuA = menuInner.find('li > a'), + selectHeight = this.$newElement.outerHeight(), + liHeight = this.$newElement.data('liHeight'), + headerHeight = this.$newElement.data('headerHeight'), + divHeight = menu.find('li .divider').outerHeight(true), + menuPadding = parseInt(menu.css('padding-top')) + + parseInt(menu.css('padding-bottom')) + + parseInt(menu.css('border-top-width')) + + parseInt(menu.css('border-bottom-width')), + notDisabled = this.options.hideDisabled ? ':not(.disabled)' : '', + $window = $(window), + menuExtras = menuPadding + parseInt(menu.css('margin-top')) + parseInt(menu.css('margin-bottom')) + 2, + menuHeight, + selectOffsetTop, + selectOffsetBot, + posVert = function() { + selectOffsetTop = that.$newElement.offset().top - $window.scrollTop(); + selectOffsetBot = $window.height() - selectOffsetTop - selectHeight; + }; + posVert(); + if (this.options.header) menu.css('padding-top', 0); + + if (this.options.size == 'auto') { + var getSize = function() { + var minHeight; + posVert(); + menuHeight = selectOffsetBot - menuExtras; + that.$newElement.toggleClass('dropup', (selectOffsetTop > selectOffsetBot) && (menuHeight - menuExtras) < menu.height() && that.options.dropupAuto); + if (that.$newElement.hasClass('dropup')) { + menuHeight = selectOffsetTop - menuExtras; + } + if ((menu.find('li').length + menu.find('dt').length) > 3) { + minHeight = liHeight*3 + menuExtras - 2; + } else { + minHeight = 0; + } + menu.css({'max-height' : menuHeight + 'px', 'overflow' : 'hidden', 'min-height' : minHeight + 'px'}); + menuInner.css({'max-height' : menuHeight - headerHeight- menuPadding + 'px', 'overflow-y' : 'auto', 'min-height' : minHeight - menuPadding + 'px'}); + } + getSize(); + $(window).resize(getSize); + $(window).scroll(getSize); + } else if (this.options.size && this.options.size != 'auto' && menu.find('li'+notDisabled).length > this.options.size) { + var optIndex = menu.find("li"+notDisabled+" > *").filter(':not(.div-contain)').slice(0,this.options.size).last().parent().index(); + var divLength = menu.find("li").slice(0,optIndex + 1).find('.div-contain').length; + menuHeight = liHeight*this.options.size + divLength*divHeight + menuPadding; + this.$newElement.toggleClass('dropup', (selectOffsetTop > selectOffsetBot) && menuHeight < menu.height() && this.options.dropupAuto); + menu.css({'max-height' : menuHeight + headerHeight + 'px', 'overflow' : 'hidden'}); + menuInner.css({'max-height' : menuHeight - menuPadding + 'px', 'overflow-y' : 'auto'}); + } + }, + + setWidth: function() { + if (this.options.width == 'auto') { + this.$menu.css('min-width', '0'); + + // Get correct width if element hidden + var selectClone = this.$newElement.clone().appendTo('body'); + var ulWidth = selectClone.find('> .dropdown-menu').css('width'); + selectClone.remove(); + + this.$newElement.css('width', ulWidth); + } else if (this.options.width == 'fit') { + // Remove inline min-width so width can be changed from 'auto' + this.$menu.css('min-width', ''); + this.$newElement.css('width', '').addClass('fit-width'); + } else if (this.options.width) { + // Remove inline min-width so width can be changed from 'auto' + this.$menu.css('min-width', ''); + this.$newElement.css('width', this.options.width); + } else { + // Remove inline min-width/width so width can be changed + this.$menu.css('min-width', ''); + this.$newElement.css('width', ''); + } + // Remove fit-width class if width is changed programmatically + if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') { + this.$newElement.removeClass('fit-width'); + } + }, + + selectPosition: function() { + var that = this, + drop = "
    ", + $drop = $(drop), + pos, + actualHeight, + getPlacement = function($element) { + $drop.addClass($element.attr('class')).toggleClass('dropup', $element.hasClass('dropup')); + pos = $element.offset(); + actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight; + $drop.css({'top' : pos.top + actualHeight, 'left' : pos.left, 'width' : $element[0].offsetWidth, 'position' : 'absolute'}); + }; + this.$newElement.on('click', function(e) { + getPlacement($(this)); + $drop.appendTo(that.options.container); + $drop.toggleClass('open', !$(this).hasClass('open')); + $drop.append(that.$menu); + }); + $(window).resize(function() { + getPlacement(that.$newElement); + }); + $(window).on('scroll', function(e) { + getPlacement(that.$newElement); + }); + $('html').on('click', function(e) { + if ($(e.target).closest(that.$newElement).length < 1) { + $drop.removeClass('open'); + } + }); + }, + + mobile: function() { + this.$element.addClass('mobile-device').appendTo(this.$newElement); + if (this.options.container) this.$menu.hide(); + }, + + refresh: function() { + this.reloadLi(); + this.render(); + this.setWidth(); + this.setStyle(); + this.checkDisabled(); + this.liHeight(); + }, + + setSelected: function(index, selected) { + this.$menu.find('li').eq(index).toggleClass('selected', selected); + }, + + setDisabled: function(index, disabled) { + if (disabled) { + this.$menu.find('li').eq(index).addClass('disabled').find('a').attr('href','#').attr('tabindex',-1); + } else { + this.$menu.find('li').eq(index).removeClass('disabled').find('a').removeAttr('href').attr('tabindex',0); + } + }, + + isDisabled: function() { + return this.$element.is(':disabled'); + }, + + checkDisabled: function() { + var that = this; + if (this.isDisabled()) { + this.$button.addClass('disabled'); + this.$button.attr('tabindex','-1'); + } else if (this.$button.hasClass('disabled')) { + this.$button.removeClass('disabled'); + this.$button.removeAttr('tabindex'); + } + this.$button.click(function() { + return !that.isDisabled(); + }); + }, + + checkTabIndex: function() { + if (this.$element.is('[tabindex]')) { + var tabindex = this.$element.attr("tabindex"); + this.$button.attr('tabindex', tabindex); + } + }, + + clickListener: function() { + var that = this; + + $('body').on('touchstart.dropdown', '.dropdown-menu', function(e) { + e.stopPropagation(); + }); + + this.$newElement.on('click', function() { + that.setSize(); + }); + + this.$menu.on('click', 'li a', function(e) { + var clickedIndex = $(this).parent().index(), + $this = $(this).parent(), + prevValue = that.$element.val(); + + //Dont close on multi choice menu + if (that.multiple) { + e.stopPropagation(); + } + + e.preventDefault(); + + //Dont run if we have been disabled + if (!that.isDisabled() && !$(this).parent().hasClass('disabled')) { + var $options = that.$element.find('option'); + var $option = $options.eq(clickedIndex); + + //Deselect all others if not multi select box + if (!that.multiple) { + $options.prop('selected', false); + $option.prop('selected', true); + } + //Else toggle the one we have chosen if we are multi select. + else { + var state = $option.prop('selected'); + + $option.prop('selected', !state); + } + + that.$button.focus(); + + // Trigger select 'change' + if (prevValue != that.$element.val()) { + that.$element.change(); + } + } + }); + + this.$menu.on('click', 'li.disabled a, li dt, li .div-contain, h3.popover-title', function(e) { + if (e.target == this) { + e.preventDefault(); + e.stopPropagation(); + that.$button.focus(); + } + }); + + this.$searchbox.on('click', function(e) { + e.stopPropagation(); + }); + + this.$element.change(function() { + that.render() + }); + }, + + liveSearchListener: function() { + var that = this; + + this.$newElement.on('click.dropdown.data-api', function(e){ + if(that.options.liveSearch) { + setTimeout(function() { + that.$searchbox.focus(); + }, 10); + } + }); + + this.$searchbox.on('input', function() { + that.$newElement.find('li').show().not(':icontains(' + that.$searchbox.val() + ')').hide(); + }); + }, + + val: function(value) { + + if (value != undefined) { + this.$element.val( value ); + + this.$element.change(); + return this.$element; + } else { + return this.$element.val(); + } + }, + + selectAll: function() { + this.$element.find('option').prop('selected', true).attr('selected', 'selected'); + this.render(); + }, + + deselectAll: function() { + this.$element.find('option').prop('selected', false).removeAttr('selected'); + this.render(); + }, + + keydown: function(e) { + var $this, + $items, + $parent, + index, + next, + first, + last, + prev, + nextPrev, + that; + + $this = $(this); + + $parent = $this.parent(); + + that = $parent.data('this'); + + if (that.options.container) $parent = that.$menu; + + $items = $('[role=menu] li:not(.divider):visible a', $parent); + + if (!$items.length) return; + + if (/(38|40)/.test(e.keyCode)) { + + index = $items.index($items.filter(':focus')); + first = $items.parent(':not(.disabled)').first().index(); + last = $items.parent(':not(.disabled)').last().index(); + next = $items.eq(index).parent().nextAll(':not(.disabled)').eq(0).index(); + prev = $items.eq(index).parent().prevAll(':not(.disabled)').eq(0).index(); + nextPrev = $items.eq(next).parent().prevAll(':not(.disabled)').eq(0).index(); + + if (e.keyCode == 38) { + if (index != nextPrev && index > prev) index = prev; + if (index < first) index = first; + } + + if (e.keyCode == 40) { + if (index != nextPrev && index < next) index = next; + if (index > last) index = last; + if (index == -1) index = 0; + } + + $items.eq(index).focus(); + } else { + var keyCodeMap = { + 48:"0", 49:"1", 50:"2", 51:"3", 52:"4", 53:"5", 54:"6", 55:"7", 56:"8", 57:"9", 59:";", + 65:"a", 66:"b", 67:"c", 68:"d", 69:"e", 70:"f", 71:"g", 72:"h", 73:"i", 74:"j", 75:"k", 76:"l", + 77:"m", 78:"n", 79:"o", 80:"p", 81:"q", 82:"r", 83:"s", 84:"t", 85:"u", 86:"v", 87:"w", 88:"x", 89:"y", 90:"z", + 96:"0", 97:"1", 98:"2", 99:"3", 100:"4", 101:"5", 102:"6", 103:"7", 104:"8", 105:"9" + } + + var keyIndex = []; + + $items.each(function() { + if ($(this).parent().is(':not(.disabled)')) { + if ($.trim($(this).text().toLowerCase()).substring(0,1) == keyCodeMap[e.keyCode]) { + keyIndex.push($(this).parent().index()); + } + } + }); + + var count = $(document).data('keycount'); + count++; + $(document).data('keycount',count); + + var prevKey = $.trim($(':focus').text().toLowerCase()).substring(0,1); + + if (prevKey != keyCodeMap[e.keyCode]) { + count = 1; + $(document).data('keycount',count); + } else if (count >= keyIndex.length) { + $(document).data('keycount',0); + } + + $items.eq(keyIndex[count - 1]).focus(); + } + + // select focused option if "Enter" or "Spacebar" are pressed + if (/(13|32)/.test(e.keyCode)) { + e.preventDefault(); + $(':focus').click(); + $(document).data('keycount',0); + } + }, + + hide: function() { + this.$newElement.hide(); + }, + + show: function() { + this.$newElement.show(); + }, + + destroy: function() { + this.$newElement.remove(); + this.$element.remove(); + } + }; + + $.fn.selectpicker = function(option, event) { + //get the args of the outer function.. + var args = arguments; + var value; + var chain = this.each(function() { + if ($(this).is('select')) { + var $this = $(this), + data = $this.data('selectpicker'), + options = typeof option == 'object' && option; + + if (!data) { + $this.data('selectpicker', (data = new Selectpicker(this, options, event))); + } else if (options) { + for(var i in options) { + data.options[i] = options[i]; + } + } + + if (typeof option == 'string') { + //Copy the value of option, as once we shift the arguments + //it also shifts the value of option. + var property = option; + if (data[property] instanceof Function) { + [].shift.apply(args); + value = data[property].apply(data, args); + } else { + value = data.options[property]; + } + } + } + }); + + if (value != undefined) { + return value; + } else { + return chain; + } + }; + + $.fn.selectpicker.defaults = { + style: 'btn-default', + size: 'auto', + title: null, + selectedTextFormat : 'values', + noneSelectedText : 'Nothing selected', + countSelectedText: '{0} of {1} selected', + width: false, + container: false, + hideDisabled: false, + showSubtext: false, + showIcon: true, + showContent: true, + dropupAuto: true, + header: false, + liveSearch: false + } + + $(document) + .data('keycount', 0) + .on('keydown', '[data-toggle=dropdown], [role=menu]' , Selectpicker.prototype.keydown) + +}(window.jQuery); diff --git a/templates/admin/default/assets/js/main.js b/templates/admin/default/assets/js/main.js index 094dfe623..1c7c3f2be 100644 --- a/templates/admin/default/assets/js/main.js +++ b/templates/admin/default/assets/js/main.js @@ -47,6 +47,11 @@ $('[rel="tooltip"]').tooltip(); } + // -- Bootstrap select -- + if($('[data-toggle="selectpicker"]').length){ + $('[data-toggle="selectpicker"]').selectpicker(); + } + // -- Confirm Box -- if($('[data-toggle="confirm"]').length){ $('[data-toggle="confirm"]').click(function(e){ diff --git a/templates/admin/default/assets/less/thelia/bootstrap-select.less b/templates/admin/default/assets/less/thelia/bootstrap-select.less new file mode 100644 index 000000000..5fb302a33 --- /dev/null +++ b/templates/admin/default/assets/less/thelia/bootstrap-select.less @@ -0,0 +1,275 @@ +/*! + * bootstrap-select v1.3.1 + * http://silviomoreto.github.io/bootstrap-select/ + * + * Copyright 2013 bootstrap-select + * Licensed under the MIT license + */ + + .input-group{ + + .bootstrap-select.btn-group, + .bootstrap-select.btn-group[class*="span"] { + width: 100%; + margin-bottom: 0; + + .btn{ + .border-right-radius(0); + } + } + + } + +.bootstrap-select.btn-group, +.bootstrap-select.btn-group[class*="span"] { + float: none; + display: inline-block; + margin-bottom: 10px; + margin-left: 0; +} +.form-search .bootstrap-select.btn-group, +.form-inline .bootstrap-select.btn-group, +.form-horizontal .bootstrap-select.btn-group { + margin-bottom: 0; +} + +.bootstrap-select.btn-group.pull-right, +.bootstrap-select.btn-group[class*="span"].pull-right, +.row-fluid .bootstrap-select.btn-group[class*="span"].pull-right { + float: right; +} + +.input-append .bootstrap-select.btn-group { + margin-left: -1px; +} + +.input-prepend .bootstrap-select.btn-group { + margin-right: -1px; +} + +.bootstrap-select:not([class*="span"]) { + width: 100%; +} + +.bootstrap-select { + /*width: 220px\9; IE8 and below*/ + width: 100%\0; /*IE9 and below*/ +} + +.bootstrap-select > .btn { + width: 100%; + .form-control-focus(); +} + + +.dropdown-menu { + z-index: 2000; +} + +.bootstrap-select.show-menu-arrow.open > .btn { + z-index: 2051; +} + +.bootstrap-select.btn-group .btn .filter-option { + overflow: hidden; + position: absolute; + left: 12px; + right: 25px; + text-align: left; + color: @input-color; +} + +.bootstrap-select.btn-group .btn .caret { + position: absolute; + top: 50%; + right: 12px; + margin-top: -2px; + vertical-align: middle; +} + +.bootstrap-select.btn-group > .disabled, +.bootstrap-select.btn-group .dropdown-menu li.disabled > a { + cursor: not-allowed; +} + +.bootstrap-select.btn-group > .disabled:focus { + outline: none !important; +} + +.bootstrap-select.btn-group[class*="span"] .btn { + width: 100%; +} + +.bootstrap-select.btn-group .dropdown-menu { + min-width: 100%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.bootstrap-select.btn-group .dropdown-menu.inner { + position: static; + border: 0; + padding: 0; + margin: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.bootstrap-select.btn-group .dropdown-menu dt { + display: block; + padding: 3px 20px; + cursor: default; +} + +.bootstrap-select.btn-group .div-contain { + overflow: hidden; +} + +.bootstrap-select.btn-group .dropdown-menu li a{ + color: @input-color; + + &:hover{ + color: #FFF; + } +} + +.bootstrap-select.btn-group .dropdown-menu li { + position: relative; + + &:focus, a:focus{ + outline: none; + } +} + +.bootstrap-select.btn-group .dropdown-menu li > a.opt { + position: relative; + padding-left: 35px; +} + +.bootstrap-select.btn-group .dropdown-menu li > a { + cursor: pointer; +} + +.bootstrap-select.btn-group .dropdown-menu li > dt small { + font-weight: normal; +} + +.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a i.check-mark { + display: inline-block; + position: absolute; + right: 15px; + margin-top: 2.5px; +} + +.bootstrap-select.btn-group .dropdown-menu li a i.check-mark { + display: none; +} + +.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text { + margin-right: 34px; +} + +.bootstrap-select.btn-group .dropdown-menu li small { + padding-left: 0.5em; +} + +.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) > a:hover small, +.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) > a:focus small { + color: #64b1d8; + color: rgba(255,255,255,0.4); +} + +.bootstrap-select.btn-group .dropdown-menu li > dt small { + font-weight: normal; +} + +.bootstrap-select.show-menu-arrow .dropdown-toggle:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #CCC; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; + bottom: -4px; + left: 9px; + display: none; +} + +.bootstrap-select.show-menu-arrow .dropdown-toggle:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid white; + position: absolute; + bottom: -4px; + left: 10px; + display: none; +} + +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before { + bottom: auto; + top: -3px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after { + bottom: auto; + top: -3px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before { + right: 12px; + left: auto; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after { + right: 13px; + left: auto; +} + +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before, +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after { + display: block; +} + +.mobile-device { + position: absolute; + top: 0; + left: 0; + display: block !important; + width: 100%; + height: 100% !important; + opacity: 0; +} + +.bootstrap-select.fit-width { + width: auto !important; +} + +.bootstrap-select.btn-group.fit-width .btn .filter-option { + position: static; +} + +.bootstrap-select.btn-group.fit-width .btn .caret { + position: static; + top: auto; + margin-top: -1px; +} + +.control-group.error .bootstrap-select .dropdown-toggle{ + border-color: #b94a48; +} + +.bootstrap-select-searchbox { + padding: 4px 8px; +} diff --git a/templates/admin/default/assets/less/thelia/forms.less b/templates/admin/default/assets/less/thelia/forms.less index 52c4b5b54..2291c15e9 100755 --- a/templates/admin/default/assets/less/thelia/forms.less +++ b/templates/admin/default/assets/less/thelia/forms.less @@ -167,6 +167,36 @@ form .info { } } +// Form validation states +// +// Used in forms.less to generate the form validation CSS for warnings, errors, +// and successes. + +.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) { + // Color the label and help text + .help-block, + .control-label { + color: @text-color; + } + // Set the border and box shadow on specific inputs to match + .form-control, .bootstrap-select .btn { + border-color: @border-color; + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work + &:focus { + border-color: darken(@border-color, 10%); + @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%); + .box-shadow(@shadow); + } + } + // Set validation states also for addons + .input-group-addon { + color: @text-color; + border-color: @border-color; + background-color: @background-color; + } +} + + // -- Sign in -- .form-signin{ // .form-control { diff --git a/templates/admin/default/assets/less/thelia/scaffolding.less b/templates/admin/default/assets/less/thelia/scaffolding.less index 1309638e4..01b6fbaf7 100755 --- a/templates/admin/default/assets/less/thelia/scaffolding.less +++ b/templates/admin/default/assets/less/thelia/scaffolding.less @@ -7,8 +7,9 @@ // ------------------------- body { - background: #FFF url("@{imgDir}/bg.jpg") top left no-repeat; - background-size: cover; + // background: #FFF url("@{imgDir}/bg.jpg") top left no-repeat; + // background-size: cover; + background-color: #eee; } diff --git a/templates/admin/default/assets/less/thelia/thelia.less b/templates/admin/default/assets/less/thelia/thelia.less index ba1654c7c..466f9d419 100644 --- a/templates/admin/default/assets/less/thelia/thelia.less +++ b/templates/admin/default/assets/less/thelia/thelia.less @@ -11,6 +11,7 @@ @import "wizard.less"; @import "bootstrap-editable.less"; @import "bootstrap-switch.less"; +@import "bootstrap-select.less"; @import "jqplot.less"; // -- Base styling ------------------------------------------------------------ diff --git a/templates/admin/default/modules.html b/templates/admin/default/modules.html new file mode 100644 index 000000000..e69de29bb diff --git a/templates/admin/default/shipping-configuration-edit.html b/templates/admin/default/shipping-configuration-edit.html new file mode 100644 index 000000000..39b69dcde --- /dev/null +++ b/templates/admin/default/shipping-configuration-edit.html @@ -0,0 +1,136 @@ +{extends file="admin-layout.tpl"} + +{block name="page-title"}{intl l='Edit a shipping configuration'}{/block} + +{block name="check-permissions"}admin.configuration.shipping-configuration.edit{/block} + +{block name="main-content"} +
    + +
    + + + +
    +
    +
    + +
    + {intl l='Edit shipping configuration %title' title=$TITLE} +
    + +
    +
    + + + +
    + + +
    + + + + +
    + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {intl l="Country"}{intl l="Actions"}
    Wallis-et-Futuna + + + +
    Polynésie française + + + +
    USA - Alabama + + + +
    +
    + +
    + + + + + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + + {* Delete related content confirmation dialog *} + + {capture "delete_country_dialog"} + + {/capture} + + {include + file = "includes/generic-confirm-dialog.html" + + dialog_id = "delete_country_dialog" + dialog_title = {intl l="Remove country"} + dialog_message = {intl l="Do you really want to remove this country ?"} + + form_action = {url path=''} + form_content = {$smarty.capture.delete_country_dialog nofilter} + } +{/block} + +{block name="javascript-initialization"} + {javascripts file='assets/js/main.js'} + + {/javascripts} + {javascripts file='assets/js/bootstrap-select/bootstrap-select.js'} + + {/javascripts} +{/block} \ No newline at end of file diff --git a/templates/admin/default/shipping-configuration.html b/templates/admin/default/shipping-configuration.html new file mode 100644 index 000000000..ae9090c70 --- /dev/null +++ b/templates/admin/default/shipping-configuration.html @@ -0,0 +1,164 @@ +{extends file="admin-layout.tpl"} + +{block name="page-title"}{intl l='Thelia Shipping configuration'}{/block} + +{block name="check-permissions"}admin.configuration.shipping-configuration.view{/block} + +{block name="main-content"} +
    + +
    + + + + {module_include location='shipping_configuration_top'} + +
    +
    +
    + + + + + + + {module_include location='shipping_configuration_table_header'} + + + + + + + + + + {module_include location='shipping_configuration_table_row'} + + + + + + + {module_include location='shipping_configuration_table_row'} + + + + + + + {module_include location='shipping_configuration_table_row'} + + + + +
    + {intl l='Thelia Shipping configuration'} + {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.configuration.shipping-configuration.create"} + + + + {/loop} +
    {intl l="Description"}{intl l="Actions"}
    France + {if ! $SECURED} +
    + {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-configuration.change"} + + {/loop} + {loop type="auth" name="can_delete" roles="ADMIN" permissions="admin.configuration.shipping-configuration.delete"} + + {/loop} +
    + {else} + + {/if} +
    Outre-Mer DOM + {if ! $SECURED} +
    + {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-configuration.change"} + + {/loop} + {loop type="auth" name="can_delete" roles="ADMIN" permissions="admin.configuration.shipping-configuration.delete"} + + {/loop} +
    + {else} + + {/if} +
    Outre-Mer TOM + {if ! $SECURED} +
    + {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-configuration.change"} + + {/loop} + {loop type="auth" name="can_delete" roles="ADMIN" permissions="admin.configuration.shipping-configuration.delete"} + + {/loop} +
    + {else} + + {/if} +
    +
    +
    +
    + + {module_include location='shipping_configuration_bottom'} + +
    +
    + + {* Adding a new Shipping configuration *} + + {* Capture the dialog body, to pass it to the generic dialog *} + {capture "creation_dialog"} + + +
    + + +
    + + + {module_include location='shipping_configuration_create_form'} + + {/capture} + + {include + file = "includes/generic-create-dialog.html" + + dialog_id = "creation_dialog" + dialog_title = {intl l="Create a new shipping configuration"} + dialog_body = {$smarty.capture.creation_dialog nofilter} + + dialog_ok_label = {intl l="Create this shipping configuration"} + dialog_cancel_label = {intl l="Cancel"} + + form_action = {url path='/admin/configuration/configuration/shipping_configuration/create'} + form_enctype = '' + form_error_message = $form_error_message + } + + {* Delete confirmation dialog *} + + {capture "delete_dialog"} + + + {module_include location='shipping_configuration_delete_form'} + + {/capture} + + {include + file = "includes/generic-confirm-dialog.html" + + dialog_id = "delete_dialog" + dialog_title = {intl l="Delete shipping configuration"} + dialog_message = {intl l="Do you really want to delete this shipping configuration ?"} + + form_action = {url path='/admin/configuration/shipping_configuration/delete'} + form_content = {$smarty.capture.delete_dialog nofilter} + } +{/block} \ No newline at end of file diff --git a/templates/admin/default/shipping-zones-edit.html b/templates/admin/default/shipping-zones-edit.html index cdb9886bf..70ee29a35 100644 --- a/templates/admin/default/shipping-zones-edit.html +++ b/templates/admin/default/shipping-zones-edit.html @@ -12,7 +12,7 @@ @@ -31,7 +31,7 @@
    - @@ -108,4 +108,13 @@ form_action = {url path=''} form_content = {$smarty.capture.delete_zone_dialog nofilter} } +{/block} + +{block name="javascript-initialization"} + {javascripts file='assets/js/main.js'} + + {/javascripts} + {javascripts file='assets/js/bootstrap-select/bootstrap-select.js'} + + {/javascripts} {/block} \ No newline at end of file diff --git a/templates/admin/default/shipping-zones.html b/templates/admin/default/shipping-zones.html index 7d9af91fe..e7c624b52 100644 --- a/templates/admin/default/shipping-zones.html +++ b/templates/admin/default/shipping-zones.html @@ -12,7 +12,7 @@ {module_include location='shipping_zones_top'} @@ -44,7 +44,7 @@ {if ! $SECURED}
    {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-zones.change"} - + {/loop}
    {else} @@ -61,7 +61,7 @@ {if ! $SECURED}
    {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-zones.change"} - + {/loop}
    {else} @@ -78,7 +78,7 @@ {if ! $SECURED}
    {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-zones.change"} - + {/loop}
    {else} @@ -113,7 +113,7 @@ dialog_title = {intl l="Delete shipping zone"} dialog_message = {intl l="Do you really want to delete this shipping zone ?"} - form_action = {url path='/admin/configuration/shipping-zones/delete'} + form_action = {url path='/admin/configuration/shipping_zones/delete'} form_content = {$smarty.capture.delete_dialog nofilter} } {/block} \ No newline at end of file diff --git a/templates/default/index.html b/templates/default/index.html index 6feaf9b81..b762df42f 100644 --- a/templates/default/index.html +++ b/templates/default/index.html @@ -40,7 +40,7 @@