Merge pull request #298 from roadster31/profilefix

Profilefix
This commit is contained in:
Manuel Raynaud
2014-04-16 08:14:02 +02:00
22 changed files with 403 additions and 164 deletions

View File

@@ -16,6 +16,10 @@
<default key="_controller">Thelia\Controller\Admin\HomeController::defaultAction</default> <default key="_controller">Thelia\Controller\Admin\HomeController::defaultAction</default>
</route> </route>
<route id="admin.home.view" path="/admin/latest-thelia-version">
<default key="_controller">Thelia\Controller\Admin\HomeController::getLatestTheliaVersion</default>
</route>
<route id="admin.home.stats" path="/admin/home/stats"> <route id="admin.home.stats" path="/admin/home/stats">
<default key="_controller">Thelia\Controller\Admin\HomeController::loadStatsAjaxAction</default> <default key="_controller">Thelia\Controller\Admin\HomeController::loadStatsAjaxAction</default>
</route> </route>
@@ -767,9 +771,9 @@
<default key="_controller">Thelia\Controller\Admin\ShippingZoneController::indexAction</default> <default key="_controller">Thelia\Controller\Admin\ShippingZoneController::indexAction</default>
</route> </route>
<route id="admin.configuration.shipping-zones.update.view" path="/admin/configuration/shipping_zones/update/{shipping_zones_id}" methods="get"> <route id="admin.configuration.shipping-zones.update.view" path="/admin/configuration/shipping_zones/update/{delivery_module_id}" methods="get">
<default key="_controller">Thelia\Controller\Admin\ShippingZoneController::updateAction</default> <default key="_controller">Thelia\Controller\Admin\ShippingZoneController::updateAction</default>
<requirement key="shipping_zones_id">\d+</requirement> <requirement key="delivery_module_id">\d+</requirement>
</route> </route>
<route id="admin.configuration.shipping-zones.area.add" path="/admin/configuration/shipping_zones/area/add" methods="post"> <route id="admin.configuration.shipping-zones.area.add" path="/admin/configuration/shipping_zones/area/add" methods="post">

View File

@@ -23,6 +23,7 @@
namespace Thelia\Controller\Admin; namespace Thelia\Controller\Admin;
use Thelia\Core\HttpFoundation\Response;
use Thelia\Core\Security\AccessManager; use Thelia\Core\Security\AccessManager;
use Thelia\Model\CustomerQuery; use Thelia\Model\CustomerQuery;
use Thelia\Model\OrderQuery; use Thelia\Model\OrderQuery;
@@ -39,6 +40,26 @@ class HomeController extends BaseAdminController
return $this->render('home'); return $this->render('home');
} }
/**
* Get the latest available Thelia version from the Thelia web site.
*
* @return Thelia\Core\HttpFoundation\Response the response
*/
public function getLatestTheliaVersion()
{
if (null !== $response = $this->checkAuth(self::RESOURCE_CODE, array(), AccessManager::VIEW)) return $response;
// get the latest version
$version = @file_get_contents("http://thelia.net/version.php");
if ($version === false)
$version = $this->getTranslator()->trans("Not found");
else if (! preg_match("/^[0-9.]*$/", $version))
$version = $this->getTranslator()->trans("Unavailable");
return Response::create($version);
}
public function loadStatsAjaxAction() public function loadStatsAjaxAction()
{ {
if (null !== $response = $this->checkAuth(self::RESOURCE_CODE, array(), AccessManager::VIEW)) return $response; if (null !== $response = $this->checkAuth(self::RESOURCE_CODE, array(), AccessManager::VIEW)) return $response;

View File

@@ -46,11 +46,11 @@ class ShippingZoneController extends BaseAdminController
return $this->render("shipping-zones", array("display_shipping_zone" => 20)); return $this->render("shipping-zones", array("display_shipping_zone" => 20));
} }
public function updateAction($shipping_zones_id) public function updateAction($delivery_module_id)
{ {
if (null !== $response = $this->checkAuth(AdminResources::SHIPPING_ZONE, array(), AccessManager::VIEW)) return $response; if (null !== $response = $this->checkAuth(AdminResources::SHIPPING_ZONE, array(), AccessManager::VIEW)) return $response;
return $this->render("shipping-zones-edit", array( return $this->render("shipping-zones-edit", array(
"shipping_zones_id" => $shipping_zones_id "delivery_module_id" => $delivery_module_id
)); ));
} }
@@ -133,13 +133,13 @@ class ShippingZoneController extends BaseAdminController
protected function renderEditionTemplate() protected function renderEditionTemplate()
{ {
return $this->render("shipping-zones-edit", array( return $this->render("shipping-zones-edit", array(
"shipping_zones_id" => $this->getShippingZoneId() "delivery_module_id" => $this->getDeliveryModuleId()
)); ));
} }
protected function getShippingZoneId() protected function getDeliveryModuleId()
{ {
return $this->getRequest()->get('shipping_zone_id', 0); return $this->getRequest()->get('delivery_module_id', 0);
} }
} }

View File

@@ -80,6 +80,8 @@ final class AdminResources
const FOLDER = "admin.folder"; const FOLDER = "admin.folder";
const HOME = "admin.home";
const LANGUAGE = "admin.configuration.language"; const LANGUAGE = "admin.configuration.language";
const MAILING_SYSTEM = "admin.configuration.mailing-system"; const MAILING_SYSTEM = "admin.configuration.mailing-system";

View File

@@ -77,7 +77,8 @@ class Area extends BaseLoop implements PropelSearchLoopInterface
return new ArgumentCollection( return new ArgumentCollection(
Argument::createIntListTypeArgument('id'), Argument::createIntListTypeArgument('id'),
Argument::createIntTypeArgument('with_zone'), Argument::createIntTypeArgument('with_zone'),
Argument::createIntTypeArgument('without_zone') Argument::createIntTypeArgument('without_zone'),
Argument::createBooleanOrBothTypeArgument('unassigned')
); );
} }
@@ -106,6 +107,14 @@ class Area extends BaseLoop implements PropelSearchLoopInterface
->where('`without_zone`.delivery_module_id '.Criteria::ISNULL); ->where('`without_zone`.delivery_module_id '.Criteria::ISNULL);
} }
$notAssigned = $this->getUnassigned();
if ($notAssigned) {
$search
->joinAreaDeliveryModule('unassigned', Criteria::LEFT_JOIN)
->where('`unassigned`.delivery_module_id ' . Criteria::ISNULL);
}
return $search; return $search;
} }

View File

@@ -62,7 +62,7 @@ class AreaCreateForm extends BaseForm
new NotBlank() new NotBlank()
), ),
'label_attr' => array('for' => 'shipping_name'), 'label_attr' => array('for' => 'shipping_name'),
'label' => Translator::getInstance()->trans('shipping area name') 'label' => Translator::getInstance()->trans('Shipping zone name')
)) ))
; ;

View File

@@ -65,7 +65,7 @@ class ShippingZoneAddArea extends BaseForm
new GreaterThan(array('value' => 0)) new GreaterThan(array('value' => 0))
), ),
'label_attr' => array('for' => 'shipping_area'), 'label_attr' => array('for' => 'shipping_area'),
'label' => Translator::getInstance()->trans('Area') 'label' => Translator::getInstance()->trans('Available shipping zones')
)) ))
->add('shipping_zone_id', 'integer', array( ->add('shipping_zone_id', 'integer', array(
'constraints' => array( 'constraints' => array(

View File

@@ -1270,7 +1270,8 @@ INSERT INTO resource (`id`, `code`, `created_at`, `updated_at`) VALUES
(22, 'admin.configuration.tax', NOW(), NOW()), (22, 'admin.configuration.tax', NOW(), NOW()),
(23, 'admin.configuration.template', NOW(), NOW()), (23, 'admin.configuration.template', NOW(), NOW()),
(24, 'admin.configuration.system-log', NOW(), NOW()), (24, 'admin.configuration.system-log', NOW(), NOW()),
(25, 'admin.cache', NOW(), NOW()); (25, 'admin.cache', NOW(), NOW()),
(26, 'admin.home', NOW(), NOW());
/** /**
generated with command : php Thelia thelia:generate-resources --output sql-i18n generated with command : php Thelia thelia:generate-resources --output sql-i18n
@@ -1325,8 +1326,9 @@ INSERT INTO resource_i18n (`id`, `locale`, `title`) VALUES
(24, 'en_US', 'Configuration / System Log'), (24, 'en_US', 'Configuration / System Log'),
(24, 'fr_FR', 'Configuration / Logs système'), (24, 'fr_FR', 'Configuration / Logs système'),
(25, 'en_US', 'Configuration / Cache'), (25, 'en_US', 'Configuration / Cache'),
(25, 'fr_FR', 'Configuration / Cache'); (25, 'fr_FR', 'Configuration / Cache'),
(26, 'en_US', 'Back-office home page'),
(26, 'fr_FR', 'Page d''acceuil de l''administration');
INSERT INTO `message` (`id`, `name`, `secured`, `created_at`, `updated_at`, `version`, `version_created_at`, `version_created_by`) VALUES INSERT INTO `message` (`id`, `name`, `secured`, `created_at`, `updated_at`, `version`, `version_created_at`, `version_created_by`) VALUES
(1, 'order_confirmation', NULL, NOW(), NOW(), 2, NOW(), NULL), (1, 'order_confirmation', NULL, NOW(), NOW(), 2, NOW(), NULL),

View File

@@ -17,7 +17,7 @@ ALTER TABLE `product_image` ADD INDEX `idx_product_image_product_id_position` (`
ALTER TABLE `category_image` ADD INDEX `idx_category_image_category_id_position` (`category_id`, `position`); ALTER TABLE `category_image` ADD INDEX `idx_category_image_category_id_position` (`category_id`, `position`);
ALTER TABLE `content_image` ADD INDEX `idx_content_image_content_id_position` (`content_id`, `position`); ALTER TABLE `content_image` ADD INDEX `idx_content_image_content_id_position` (`content_id`, `position`);
ALTER TABLE `folder_image` ADD INDEX `idx_folder_image_folder_id_position` (`folder_id`, `position`); ALTER TABLE `folder_image` ADD INDEX `idx_folder_image_folder_id_position` (`folder_id`, `position`);
ALTER TABLE `module_image` ADD INDEX `idx_module_image_module_id_position` (`module_id`, `position`) ALTER TABLE `module_image` ADD INDEX `idx_module_image_module_id_position` (`module_id`, `position`);
ALTER TABLE `rewriting_url` ADD INDEX `idx_rewriting_url_view_updated_at` (`view`, `updated_at`); ALTER TABLE `rewriting_url` ADD INDEX `idx_rewriting_url_view_updated_at` (`view`, `updated_at`);
ALTER TABLE `rewriting_url` ADD INDEX `idx_rewriting_url_view_id_view_view_locale_updated_at` (`view_id`, `view`, `view_locale`, `updated_at`); ALTER TABLE `rewriting_url` ADD INDEX `idx_rewriting_url_view_id_view_view_locale_updated_at` (`view_id`, `view`, `view_locale`, `updated_at`);
@@ -38,4 +38,13 @@ INSERT INTO resource_i18n (`id`, `locale`, `title`) VALUES
(@max, 'en_US', 'Configuration / Cache'), (@max, 'en_US', 'Configuration / Cache'),
(@max, 'fr_FR', 'Configuration / Cache'); (@max, 'fr_FR', 'Configuration / Cache');
SET @max := @max+1;
INSERT INTO resource (`id`, `code`, `created_at`, `updated_at`) VALUES
(@max, 'admin.cache', NOW(), NOW());
INSERT INTO resource_i18n (`id`, `locale`, `title`) VALUES
(@max, 'en_US', 'Back-office home page'),
(@max, 'fr_FR', 'Page d''acceuil de l''administration');
SET FOREIGN_KEY_CHECKS = 1; SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -2,6 +2,7 @@
return array( return array(
' (default)' => '(défaut)', ' (default)' => '(défaut)',
'%count more...' => '%count de plus...',
'&copy; Thelia 2013' => '&copy; Thelia 2013', '&copy; Thelia 2013' => '&copy; Thelia 2013',
'(edit)' => '(modification)', '(edit)' => '(modification)',
'<a href="http://en.wikipedia.org/wiki/ISO_639-1_language_matrix" target="_other">Check the list</a> of ISO 639-1 codes' => '<a href="http://en.wikipedia.org/wiki/ISO_639-1_language_matrix" target="_other">Consulter la liste</a> des codes ISO 639-1', '<a href="http://en.wikipedia.org/wiki/ISO_639-1_language_matrix" target="_other">Check the list</a> of ISO 639-1 codes' => '<a href="http://en.wikipedia.org/wiki/ISO_639-1_language_matrix" target="_other">Consulter la liste</a> des codes ISO 639-1',
@@ -9,6 +10,7 @@ return array(
'<strong>Cannot translate all fields.</strong> According to your PHP configuration, forms cannot contains more than %current_max_input_vars input fields, but at least %required_max_input_vars are required. Please change the value of max_input_vars in your PHP configuration of change the translation file by hand.' => '<strong>Limitation système bloquante !</strong> Votre configuration PHP limite le nombre de champs d\'une forme HTML à %current_max_input_vars champs. Au moins %required_max_input_vars champs sont nécessaires pour effectuer les traductions. Merci de modifier en conséquence la variable max_input_vars de votre configuration PHP. Vous pouvez aussi modifier les fichiers de traduction à la main.', '<strong>Cannot translate all fields.</strong> According to your PHP configuration, forms cannot contains more than %current_max_input_vars input fields, but at least %required_max_input_vars are required. Please change the value of max_input_vars in your PHP configuration of change the translation file by hand.' => '<strong>Limitation système bloquante !</strong> Votre configuration PHP limite le nombre de champs d\'une forme HTML à %current_max_input_vars champs. Au moins %required_max_input_vars champs sont nécessaires pour effectuer les traductions. Merci de modifier en conséquence la variable max_input_vars de votre configuration PHP. Vous pouvez aussi modifier les fichiers de traduction à la main.',
'<strong>Congratulations</strong>, all text is now translated !' => '<strong>Félicitations</strong>, tous les textes ont été traduits !', '<strong>Congratulations</strong>, all text is now translated !' => '<strong>Félicitations</strong>, tous les textes ont été traduits !',
'<strong>Did not found any text to translate</strong>. It\'s probably normal. If not, please be sure to use Smarty\'s "intl" function in templates, or the Translator::trans() method in PHP files.' => '<streong>Aucun texte à traduire</strong>. C\'est probablement normal. Si ce n\'est pas le cas vérifiez que vous utilisez bien la fonction Smarty "intl" ou bien le translator Translator::trans dans un fichier php', '<strong>Did not found any text to translate</strong>. It\'s probably normal. If not, please be sure to use Smarty\'s "intl" function in templates, or the Translator::trans() method in PHP files.' => '<streong>Aucun texte à traduire</strong>. C\'est probablement normal. Si ce n\'est pas le cas vérifiez que vous utilisez bien la fonction Smarty "intl" ou bien le translator Translator::trans dans un fichier php',
'<strong>Warning</strong>, some of your shipping zones are not attached to any delivery module:' => '<strong>Attention</strong>, les zones de livraison suivantes ne sont associées à aucun module:',
'A content could be attached to more than one folder. Select here the additional folders for this content.' => 'Un contenu peut être rattaché à plusieurs dossiers. Sélectionnez ici les dossiers dans lesquels ce contenu apparaîtra', 'A content could be attached to more than one folder. Select here the additional folders for this content.' => 'Un contenu peut être rattaché à plusieurs dossiers. Sélectionnez ici les dossiers dans lesquels ce contenu apparaîtra',
'A product could be attached to more than one category. Select here the additional categories for this product.' => 'Un produit peut être associé à plusieurs rubriques. Sélectionner les rubrique pour lesquels le produit sera associé', 'A product could be attached to more than one category. Select here the additional categories for this product.' => 'Un produit peut être associé à plusieurs rubriques. Sélectionner les rubrique pour lesquels le produit sera associé',
'A short description, used when a summary or an introduction is required' => 'Une courte description, utilisée lorsqu\'un résumé ou une introduction est requise', 'A short description, used when a summary or an introduction is required' => 'Une courte description, utilisée lorsqu\'un résumé ou une introduction est requise',
@@ -33,7 +35,7 @@ return array(
'Add a new product attribute' => 'Ajouter une nouvelle déclinaison produit', 'Add a new product attribute' => 'Ajouter une nouvelle déclinaison produit',
'Add a new product feature' => 'Ajouter une nouvelle caractéristique produit', 'Add a new product feature' => 'Ajouter une nouvelle caractéristique produit',
'Add a new product template' => 'Ajouter un nouveau template produit', 'Add a new product template' => 'Ajouter un nouveau template produit',
'Add a new shipping configuration' => 'Ajouter une nouvelle configuration de livraison', 'Add a new shipping zone' => 'Ajouter une nouvelle zone de livraison',
'Add a new variable' => 'Ajouter une nouvelle variable', 'Add a new variable' => 'Ajouter une nouvelle variable',
'Add tax to this group' => 'Ajouter une taxe à ce groupe', 'Add tax to this group' => 'Ajouter une taxe à ce groupe',
'Add this attribute to all product templates' => 'Ajouter cette déclinaison à tous les templates produit', 'Add this attribute to all product templates' => 'Ajouter cette déclinaison à tous les templates produit',
@@ -45,8 +47,10 @@ return array(
'Additional categories' => 'Rubriques supplémentaires', 'Additional categories' => 'Rubriques supplémentaires',
'Address' => 'Adresse', 'Address' => 'Adresse',
'Administration logs' => 'Journal des logs', 'Administration logs' => 'Journal des logs',
'Administration profiles' => 'Gestion des profils', 'Administration profiles' => 'Profils d\'administration',
'Administrators' => 'Administrateurs', 'Administrators' => 'Administrateurs',
'Afficher ce profil' => 'View this profile',
'All countries are assigned to a shipping zone.' => 'Tous les pays sont assignés à une zone de livraison.',
'All orders' => 'Toutes les commandes', 'All orders' => 'Toutes les commandes',
'Alpha code 2' => 'Code alpha 2', 'Alpha code 2' => 'Code alpha 2',
'Alpha code 3' => 'Code alpha 3', 'Alpha code 3' => 'Code alpha 3',
@@ -55,6 +59,7 @@ return array(
'And' => 'Et', 'And' => 'Et',
'Application field' => 'Champs d\'application', 'Application field' => 'Champs d\'application',
'Apply' => 'Appliquer', 'Apply' => 'Appliquer',
'Associated countries' => 'Pays dans la zone',
'Associations' => 'Associations', 'Associations' => 'Associations',
'Attribute' => 'Déclinaison', 'Attribute' => 'Déclinaison',
'Attribute Combinations' => 'Combinaison de déclinaisons', 'Attribute Combinations' => 'Combinaison de déclinaisons',
@@ -74,6 +79,7 @@ return array(
'Browse files' => 'Parcourir les fichiers', 'Browse files' => 'Parcourir les fichiers',
'Browse this category' => 'Parcourir cette catégorie', 'Browse this category' => 'Parcourir cette catégorie',
'Browse this folder' => 'Parcourir ce dossier', 'Browse this folder' => 'Parcourir ce dossier',
'Cache' => 'Cache',
'Can\'t be cumulative' => 'Ne peut pas se cumuler', 'Can\'t be cumulative' => 'Ne peut pas se cumuler',
'Can\'t load documents, please refresh this page.' => 'Impossible de charger les documents. Rechargez la page', 'Can\'t load documents, please refresh this page.' => 'Impossible de charger les documents. Rechargez la page',
'Can\'t load images, please refresh this page.' => 'Impossible de charger l\'image. Rechargez la page', 'Can\'t load images, please refresh this page.' => 'Impossible de charger l\'image. Rechargez la page',
@@ -101,7 +107,6 @@ return array(
'Change this product feature' => 'Modifier cette caractéristique produit', 'Change this product feature' => 'Modifier cette caractéristique produit',
'Change this product template' => 'Modifier ce template produit', 'Change this product template' => 'Modifier ce template produit',
'Change this profile' => 'Changer ce profil', 'Change this profile' => 'Changer ce profil',
'Change this shipping configuration' => 'Modifier cette configuration de livraison',
'Change this shipping zone' => 'Modifier cette zone de livraison', 'Change this shipping zone' => 'Modifier cette zone de livraison',
'Change this tax' => 'Modifier cette taxe', 'Change this tax' => 'Modifier cette taxe',
'Change this tax rule' => 'Modifier cette règle de taxe', 'Change this tax rule' => 'Modifier cette règle de taxe',
@@ -135,6 +140,7 @@ return array(
'Contents in %fold' => 'Contenus dans %fold', 'Contents in %fold' => 'Contenus dans %fold',
'Copy source text in input field' => 'Copier la source dans le champs de traduction', 'Copy source text in input field' => 'Copier la source dans le champs de traduction',
'Countries' => 'Pays', 'Countries' => 'Pays',
'Countries assigned to this zone' => 'Pays inclus dans cette zone',
'Countries that have the same tax rule' => 'Pays qui ont les même règles de taxe', 'Countries that have the same tax rule' => 'Pays qui ont les même règles de taxe',
'Country' => 'Pays', 'Country' => 'Pays',
'Country description' => 'Description du pays', 'Country description' => 'Description du pays',
@@ -164,7 +170,7 @@ return array(
'Create a new product' => 'Créer un nouveau produit', 'Create a new product' => 'Créer un nouveau produit',
'Create a new product template' => 'Créer un nouveau template produit', 'Create a new product template' => 'Créer un nouveau template produit',
'Create a new profile' => 'Créer un nouveau profil', 'Create a new profile' => 'Créer un nouveau profil',
'Create a new shipping configuration' => 'Créer une nouvelle configuration de livraison', 'Create a new shipping zone' => 'Créer une nouvelle zone de livraison',
'Create a new tax' => 'Créer une nouvelle taxe', 'Create a new tax' => 'Créer une nouvelle taxe',
'Create a new tax rule' => 'Créer une nouvelle règle de taxe', 'Create a new tax rule' => 'Créer une nouvelle règle de taxe',
'Create a new variable' => 'Créer une nouvelle variable', 'Create a new variable' => 'Créer une nouvelle variable',
@@ -184,7 +190,7 @@ return array(
'Create this mailing template' => 'Créer ce template de mailing', 'Create this mailing template' => 'Créer ce template de mailing',
'Create this product' => 'Créer ce produit', 'Create this product' => 'Créer ce produit',
'Create this product template' => 'Créer ce template produit', 'Create this product template' => 'Créer ce template produit',
'Create this shipping configuration' => 'Créer cette nouvelle configuration de livraison', 'Create this shipping zone' => 'Créer cette zone de livraison',
'Create this value' => 'Créer cette valeur', 'Create this value' => 'Créer cette valeur',
'Create this variable' => 'Ajouter cette variable', 'Create this variable' => 'Ajouter cette variable',
'Currencies' => 'Devises', 'Currencies' => 'Devises',
@@ -230,7 +236,7 @@ return array(
'Delete mailing template' => 'Supprimer ce template de mailing', 'Delete mailing template' => 'Supprimer ce template de mailing',
'Delete product' => 'Supprimer ce produit', 'Delete product' => 'Supprimer ce produit',
'Delete profile' => 'Supprimer le profil', 'Delete profile' => 'Supprimer le profil',
'Delete shipping configuration' => 'Supprimer cette configuration de livraison', 'Delete shipping zone' => 'Supprimer une zone de livraison',
'Delete tax' => 'Supprimer la taxe', 'Delete tax' => 'Supprimer la taxe',
'Delete tax rule' => 'Supprimer cette règle de taxe', 'Delete tax rule' => 'Supprimer cette règle de taxe',
'Delete template' => 'Supprimer ce template produit', 'Delete template' => 'Supprimer ce template produit',
@@ -253,7 +259,7 @@ return array(
'Delete this product feature' => 'Supprimer cette caractéristique produit', 'Delete this product feature' => 'Supprimer cette caractéristique produit',
'Delete this product template' => 'Supprimer ce template produit', 'Delete this product template' => 'Supprimer ce template produit',
'Delete this profile' => 'Supprimer ce profil', 'Delete this profile' => 'Supprimer ce profil',
'Delete this shipping configuration' => 'Supprimer cette configuration de livraison', 'Delete this shipping zone' => 'Supprimer cette zone de livraison',
'Delete this tax' => 'Supprimer cette taxe', 'Delete this tax' => 'Supprimer cette taxe',
'Delete this tax rule' => 'Supprimer cette règle de taxe', 'Delete this tax rule' => 'Supprimer cette règle de taxe',
'Delete this value' => 'Supprimer cette valeur', 'Delete this value' => 'Supprimer cette valeur',
@@ -290,7 +296,7 @@ return array(
'Do you really want to delete this module ?' => 'Voulez-vous vraiment supprimer ce module ?', 'Do you really want to delete this module ?' => 'Voulez-vous vraiment supprimer ce module ?',
'Do you really want to delete this product ?' => 'Voulez-vous vraiment supprimer ce produit ?', 'Do you really want to delete this product ?' => 'Voulez-vous vraiment supprimer ce produit ?',
'Do you really want to delete this profile ?' => 'Voulez-vous vraiment supprimer ce profil ?', 'Do you really want to delete this profile ?' => 'Voulez-vous vraiment supprimer ce profil ?',
'Do you really want to delete this shipping configuration ?' => 'Voulez-vous vraiment supprimer cette configuration de livraison ?', 'Do you really want to delete this shipping zone ?' => 'Confirmez vous la suppression de cette zone de livraison ?',
'Do you really want to delete this tax ?' => 'Voulez-vous vraiment supprimer cette taxe ?', 'Do you really want to delete this tax ?' => 'Voulez-vous vraiment supprimer cette taxe ?',
'Do you really want to delete this tax rule ?' => 'Voulez-vous vraiment supprimer cette règle de taxe ?', 'Do you really want to delete this tax rule ?' => 'Voulez-vous vraiment supprimer cette règle de taxe ?',
'Do you really want to delete this template ? It will be removed from all products.' => 'Voulez-vous vraiment supprimer ce template ? Il sera supprimé de tous les produits.', 'Do you really want to delete this template ? It will be removed from all products.' => 'Voulez-vous vraiment supprimer ce template ? Il sera supprimé de tous les produits.',
@@ -301,7 +307,7 @@ return array(
'Do you really want to remove this accessory from the product ?' => 'êtes-vous sur de vouloir supprimer cet accessoire ?', 'Do you really want to remove this accessory from the product ?' => 'êtes-vous sur de vouloir supprimer cet accessoire ?',
'Do you really want to remove this attribute from all product templates ? You\'ll loose all product related data for this attribute.' => 'Voulez-vous vraiment supprimer cette déclinaison de tous les templates produits ? Vous allez perdre toutes les informations produit liées à cette déclinaison.', 'Do you really want to remove this attribute from all product templates ? You\'ll loose all product related data for this attribute.' => 'Voulez-vous vraiment supprimer cette déclinaison de tous les templates produits ? Vous allez perdre toutes les informations produit liées à cette déclinaison.',
'Do you really want to remove this attribute from the template ?' => 'êtes-vous sur de vouloir retirer cette déclinaison de ce template', 'Do you really want to remove this attribute from the template ?' => 'êtes-vous sur de vouloir retirer cette déclinaison de ce template',
'Do you really want to remove this country ?' => 'Voulez-vous vraiment enlever ce pays ?', 'Do you really want to remove this country from this shipping zone ?' => 'Voulez-vous retirer ce pays de la zone de livraison ?',
'Do you really want to remove this feature from all product templates ? You\'ll loose all product related data for this feature.' => 'Voulez-vous vraiment enlever cette caractéristique de tous les templates produit ? Vous allez perdre toutes les informations des produits liées à cette caractéristique.', 'Do you really want to remove this feature from all product templates ? You\'ll loose all product related data for this feature.' => 'Voulez-vous vraiment enlever cette caractéristique de tous les templates produit ? Vous allez perdre toutes les informations des produits liées à cette caractéristique.',
'Do you really want to remove this feature from the template ?' => 'Voulez-vous vraiment supprimer cette caractéristique de ce template ?', 'Do you really want to remove this feature from the template ?' => 'Voulez-vous vraiment supprimer cette caractéristique de ce template ?',
'Do you really want to remove this related content ?' => 'Voulez-vous vraiment supprimer ce contenu lié ?', 'Do you really want to remove this related content ?' => 'Voulez-vous vraiment supprimer ce contenu lié ?',
@@ -371,14 +377,13 @@ return array(
'Edit prices in %curr' => 'Modifier les prix en %curr', 'Edit prices in %curr' => 'Modifier les prix en %curr',
'Edit product' => 'Modifier le produit', 'Edit product' => 'Modifier le produit',
'Edit product %title' => 'Modifier le produit %title', 'Edit product %title' => 'Modifier le produit %title',
'Edit shipping configuration %title' => 'Modifier la configuration de livraison %title',
'Edit shipping zone %title' => 'Modifier la zone de livraison %title',
'Edit tax rule taxes' => 'Modifier les taxes de la règle de taxe', 'Edit tax rule taxes' => 'Modifier les taxes de la règle de taxe',
'Edit template "%name"' => 'Modifier le template "%name"', 'Edit template "%name"' => 'Modifier le template "%name"',
'Edit this address' => 'Editer cette adresse', 'Edit this address' => 'Editer cette adresse',
'Edit this category' => 'Editer cette rubrique', 'Edit this category' => 'Editer cette rubrique',
'Edit this content' => 'Modifier ce contenu', 'Edit this content' => 'Modifier ce contenu',
'Edit this customer' => 'Modifier ce client', 'Edit this customer' => 'Modifier ce client',
'Edit this delivery zone' => 'Modifier cette zone de livraison',
'Edit this folder' => 'Modifier ce dossier', 'Edit this folder' => 'Modifier ce dossier',
'Edit this module' => 'Modifier ce module', 'Edit this module' => 'Modifier ce module',
'Edit this order' => 'Editer cette commande', 'Edit this order' => 'Editer cette commande',
@@ -397,8 +402,9 @@ return array(
'Editing mailing template "%name"' => 'En cours de modification du template de mailing "%name"', 'Editing mailing template "%name"' => 'En cours de modification du template de mailing "%name"',
'Editing module' => 'Module en cours de modification', 'Editing module' => 'Module en cours de modification',
'Editing profile' => 'Modification du profil', 'Editing profile' => 'Modification du profil',
'Editing shipping configuration "%name"' => 'En cours de modification de la configuration de livraison "%name"', 'Editing profile \'%name\'' => 'Edition du profil \'%name\' ',
'Editing shipping zone "%name"' => 'En cours de modification de la zone de livraison "%name"', 'Editing shipping configuration for module "%name"' => 'Configuration des zones de livraison du module "%title" ',
'Editing shipping zone "%name"' => 'Modification de la zone de livraison "%name"',
'Editing tax' => 'En cours de modification de la taxe', 'Editing tax' => 'En cours de modification de la taxe',
'Editing tax rule' => 'En cours de modification de la règle de taxe', 'Editing tax rule' => 'En cours de modification de la règle de taxe',
'Editing template "%name"' => 'Modification du template "%name"', 'Editing template "%name"' => 'Modification du template "%name"',
@@ -428,6 +434,8 @@ return array(
'Enter here the template name in the default language (%title)' => 'Renseignez le nom du template dans la langue par défaut (%title)', 'Enter here the template name in the default language (%title)' => 'Renseignez le nom du template dans la langue par défaut (%title)',
'Enter here the value in the current edit language (%language_name)' => 'Rensignez la valeur dans la langue d\'édition actuelle (%language_name)', 'Enter here the value in the current edit language (%language_name)' => 'Rensignez la valeur dans la langue d\'édition actuelle (%language_name)',
'Enter here the value in the current edit language (%title)' => 'Entrez la valeur dans la langue d\'édition courante (%title)', 'Enter here the value in the current edit language (%title)' => 'Entrez la valeur dans la langue d\'édition courante (%title)',
'Enter here the value in the default language (%title)' => 'Indiquez la valeur pour la langue par défaut (%title) ',
'Enter information in the default language (%title)' => 'Entrez les informations dans la langue par défaut (%title) ',
'Enter new accessory position' => 'Renseigner la nouvelle position pour cet accessoire', 'Enter new accessory position' => 'Renseigner la nouvelle position pour cet accessoire',
'Enter new attribute position' => 'Modifier la position de la déclinaison', 'Enter new attribute position' => 'Modifier la position de la déclinaison',
'Enter new category position' => 'Classement de la catégorie', 'Enter new category position' => 'Classement de la catégorie',
@@ -462,6 +470,7 @@ return array(
'First orders' => 'Premières commandes', 'First orders' => 'Premières commandes',
'FirstName' => 'Prénom', 'FirstName' => 'Prénom',
'Firstname' => 'Prénom', 'Firstname' => 'Prénom',
'Flush the cache' => 'Vider le cache',
'Folder created on %date_create. Last modification: %date_change' => 'Dossier créé le %date_create. Dernière modification le %date_change', 'Folder created on %date_create. Last modification: %date_change' => 'Dossier créé le %date_create. Dernière modification le %date_change',
'Folder title' => 'Titre du dossier', 'Folder title' => 'Titre du dossier',
'Folders' => 'Dossiers', 'Folders' => 'Dossiers',
@@ -524,6 +533,7 @@ return array(
'Leave empty to keep current password' => 'Laisser ce champ vide pour ne pas modifier le mot de passe', 'Leave empty to keep current password' => 'Laisser ce champ vide pour ne pas modifier le mot de passe',
'Lire la suite' => 'Lire la suite', 'Lire la suite' => 'Lire la suite',
'Loading Thelia lastest news...' => 'Chargement des dernières information Thelia...', 'Loading Thelia lastest news...' => 'Chargement des dernières information Thelia...',
'Loading...' => 'Chargement...',
'Locale' => 'Paramètre régional', 'Locale' => 'Paramètre régional',
'Log lines format' => 'Format d\'une ligne de log', 'Log lines format' => 'Format d\'une ligne de log',
'Log lines header format. You may use the following variables: ' => 'Format d\'une ligne de log. Vous pouvez utiliser ces variables : ', 'Log lines header format. You may use the following variables: ' => 'Format d\'une ligne de log. Vous pouvez utiliser ces variables : ',
@@ -606,9 +616,9 @@ return array(
'Please select a coupon type' => 'Merci d\'entrer le type de code', 'Please select a coupon type' => 'Merci d\'entrer le type de code',
'Please select another condition' => 'Merci de sélectionner une autre condition', 'Please select another condition' => 'Merci de sélectionner une autre condition',
'Please select items to translate' => 'Veuillez sélectionner un élément', 'Please select items to translate' => 'Veuillez sélectionner un élément',
'Please select the B.O. template to translate' => 'Sélectionnez le template back-office que vous souhaitez traduire', 'Please select the B.O. template to translate' => 'Sélectionnez le template back-office à traduire',
'Please select the E-mail template to translate' => 'Sélectionnez le template de mail à traduire', 'Please select the E-mail template to translate' => 'Sélectionnez le template de mail à traduire',
'Please select the F.O. template to translate' => 'Sélectionnez le template front-office que vous souhaitez traduire', 'Please select the F.O. template to translate' => 'Sélectionnez le template front-office à traduire',
'Please select the PDF template to translate' => 'Sélectionnez le template PDF à traduire', 'Please select the PDF template to translate' => 'Sélectionnez le template PDF à traduire',
'Please select the module to translate' => 'Sélectionnez le module à traduire', 'Please select the module to translate' => 'Sélectionnez le module à traduire',
'Please wait, loading' => 'Chargement, veuillez patienter', 'Please wait, loading' => 'Chargement, veuillez patienter',
@@ -697,6 +707,7 @@ return array(
'Save this condition' => 'Enregistrer cette condition', 'Save this condition' => 'Enregistrer cette condition',
'Save your modifications' => 'Enregistrer les modifications', 'Save your modifications' => 'Enregistrer les modifications',
'Search' => 'Recherche', 'Search' => 'Recherche',
'Search for \'%term\'' => 'Recherche de \'%term\'',
'Select a category and click (+) to add it to the additional category list' => 'Sélectionner une rubrique et cliquez sur (+) pour la rajouter dans la liste des rubrique associées', 'Select a category and click (+) to add it to the additional category list' => 'Sélectionner une rubrique et cliquez sur (+) pour la rajouter dans la liste des rubrique associées',
'Select a category to get its products' => 'Sélectionner une rubrique pour avoir les produits qu\'elle contient', 'Select a category to get its products' => 'Sélectionner une rubrique pour avoir les produits qu\'elle contient',
'Select a category...' => 'Sélectionner une rubrique...', 'Select a category...' => 'Sélectionner une rubrique...',
@@ -720,17 +731,22 @@ return array(
'Select here the tax applicable to this product' => 'Sélectionnez ici la taxe applicable sur ce produit', 'Select here the tax applicable to this product' => 'Sélectionnez ici la taxe applicable sur ce produit',
'Select the E-mail template you want to translate' => 'Sélectionnez le template de mail à traduire', 'Select the E-mail template you want to translate' => 'Sélectionnez le template de mail à traduire',
'Select the PDF template you want to translate' => 'Sélectionnez le template PDF à traduire', 'Select the PDF template you want to translate' => 'Sélectionnez le template PDF à traduire',
'Select the back-office template you want to translate' => 'Sélectionnez le template back-office que vous souhaitez traduire', 'Select the back-office template you want to translate' => 'Sélectionnez le template back-office à traduire',
'Select the front-office template you want to translate' => 'Sélectionnez le template front-office que vous souhaitez traduire', 'Select the front-office template you want to translate' => 'Sélectionnez le template front-office à traduire',
'Select the module you want to translate' => 'Sélectionnez le module à traduire', 'Select the module you want to translate' => 'Sélectionnez le module à traduire',
'Select which items you want to translate' => 'Sélectionnez l\'élément que vous souhaitez traduire', 'Select which items you want to translate' => 'Sélectionnez l\'élément à traduire',
'Send a mail to this customer' => 'Contacter ce client par mail', 'Send a mail to this customer' => 'Contacter ce client par mail',
'Send files' => 'Envoyer des fichiers', 'Send files' => 'Envoyer des fichiers',
'Sequential number of log line' => 'Sequential number of log line', 'Sequential number of log line' => 'Sequential number of log line',
'Set as default tax rule' => 'Configurer en tant que règle par défaut', 'Set as default tax rule' => 'Configurer en tant que règle par défaut',
'Shipping configuration' => 'Configuration du transport', 'Shipping configuration' => 'Configuration du transport',
'Shipping configuration name' => 'Nom de la configuration de livraison', 'Shipping configuration of delivery module "%title"' => 'Configuration des zones de livraison du module "%title" ',
'Shipping zone' => 'Zone de livraison',
'Shipping zone "%title"' => 'Zone de livraison "%title"',
'Shipping zone name' => 'Nom de la zone de livraison',
'Shipping zones' => 'Zones de livraison', 'Shipping zones' => 'Zones de livraison',
'Shipping zones for this module' => 'Zones de livraison associées à ce module',
'Shipping zones management' => 'Zones de livraison',
'Shop' => 'Boutique', 'Shop' => 'Boutique',
'Shop Informations' => 'Informations sur la boutique', 'Shop Informations' => 'Informations sur la boutique',
'Short conclusion' => 'Courte conclusion', 'Short conclusion' => 'Courte conclusion',
@@ -811,6 +827,7 @@ return array(
'Thelia support forum' => 'Forum de Thelia', 'Thelia support forum' => 'Forum de Thelia',
'Thelia system variables' => 'Variables Thelia', 'Thelia system variables' => 'Variables Thelia',
'Thelia, the open source e-commerce solution' => 'Thelia, la solution e-commerce libre', 'Thelia, the open source e-commerce solution' => 'Thelia, la solution e-commerce libre',
'There are no shipping zones attached to this module.' => 'Ce module de transport n\'est associé à aucune zone de livraison',
'There is currently no active module here.' => 'Il n\'y a aucun module actif ici', 'There is currently no active module here.' => 'Il n\'y a aucun module actif ici',
'There is no documents attached to this %type.' => 'Il n\'y a aucun document lié à ce %type.', 'There is no documents attached to this %type.' => 'Il n\'y a aucun document lié à ce %type.',
'There is no images attached to this %type.' => 'Il n\'y a pas d\'image liée à ce %type.', 'There is no images attached to this %type.' => 'Il n\'y a pas d\'image liée à ce %type.',
@@ -822,6 +839,7 @@ return array(
'This category has no sub-categories. To create a new one, click the + button above.' => 'Cette rubrique n\'a pas de sous-rubrique. Pour en créer une nouvelle, cliquez sur le bouton + ci-dessus.', 'This category has no sub-categories. To create a new one, click the + button above.' => 'Cette rubrique n\'a pas de sous-rubrique. Pour en créer une nouvelle, cliquez sur le bouton + ci-dessus.',
'This coupon is disabled, you can enable at the bottom of this form.' => 'Le code promo est désactivé. Vous pouvez l\'activer au début de ce formulaire', 'This coupon is disabled, you can enable at the bottom of this form.' => 'Le code promo est désactivé. Vous pouvez l\'activer au début de ce formulaire',
'This customer has not defined any delivery address' => 'Ce client n\'a pas saisi aucune adresse de livraison', 'This customer has not defined any delivery address' => 'Ce client n\'a pas saisi aucune adresse de livraison',
'This delivery module handles all shipping zones.' => 'Ce module livre dans toutes les zones de livraison.',
'This folder doesn\'t contains any contents. To add a new content, <strong>click the + button</strong> above.' => 'Ce dossier n\'a aucun contenu. Pour ajouter un nouveau contenu, <strong>cliquez sur le bouton + ci-dessus</strong>.', 'This folder doesn\'t contains any contents. To add a new content, <strong>click the + button</strong> above.' => 'Ce dossier n\'a aucun contenu. Pour ajouter un nouveau contenu, <strong>cliquez sur le bouton + ci-dessus</strong>.',
'This folder has no sub-folders.' => 'Ce dossier n\'a pas de sous-dossiers.', 'This folder has no sub-folders.' => 'Ce dossier n\'a pas de sous-dossiers.',
'This folder has no sub-folders. To create a new one, click the + button above.' => 'Ce dossier n\'a pas de sous-dossiers. Afin de créer un nouveau, cliquez sur le bouton + ci-dessus.', 'This folder has no sub-folders. To create a new one, click the + button above.' => 'Ce dossier n\'a pas de sous-dossiers. Afin de créer un nouveau, cliquez sur le bouton + ci-dessus.',
@@ -834,6 +852,7 @@ return array(
'This product doesn\'t belong to any additional category.' => 'Ce produit n\'est associé à aucune rubrique supplémentaire', 'This product doesn\'t belong to any additional category.' => 'Ce produit n\'est associé à aucune rubrique supplémentaire',
'This product doesn\'t belong to any additional folder.' => 'Ce produit n\'appartient à aucun dossier addoitionnel', 'This product doesn\'t belong to any additional folder.' => 'Ce produit n\'appartient à aucun dossier addoitionnel',
'This product template does not contains any features' => 'Ce gabarit de produit ne comporte aucune caractéristique', 'This product template does not contains any features' => 'Ce gabarit de produit ne comporte aucune caractéristique',
'This shipping zone does not contains any country.' => 'Cette zone de livraison ne comporte aucun pays',
'This template contains no attributes' => 'Ce template n\'a pas de déclinaison', 'This template contains no attributes' => 'Ce template n\'a pas de déclinaison',
'This template contains no features' => 'Ce template ne contient aucune caractéristique', 'This template contains no features' => 'Ce template ne contient aucune caractéristique',
'This the unique name of this message. Do not change this value unless you understand what you do.' => 'Ceci est le nom unique du message. Ne le modifiez que si vous savez ce que vous faîtes', 'This the unique name of this message. Do not change this value unless you understand what you do.' => 'Ceci est le nom unique du message. Ne le modifiez que si vous savez ce que vous faîtes',
@@ -860,6 +879,7 @@ return array(
'Translation' => 'Traductions', 'Translation' => 'Traductions',
'Translations' => 'Traductions', 'Translations' => 'Traductions',
'Type :' => 'Type : ', 'Type :' => 'Type : ',
'Unassigned countries' => 'Pays sans zone de livraison',
'Unit taxed price' => 'Prix unitaire TTC', 'Unit taxed price' => 'Prix unitaire TTC',
'Unit. price' => 'Prix unitaire', 'Unit. price' => 'Prix unitaire',
'Unlimited' => 'Illimité', 'Unlimited' => 'Illimité',
@@ -911,7 +931,7 @@ return array(
'You don\'t need to use commas or other punctuations.' => 'Vous n\'avez pas besoin d\'utiliser de virgules ou d\'autres signes de ponctuation', 'You don\'t need to use commas or other punctuations.' => 'Vous n\'avez pas besoin d\'utiliser de virgules ou d\'autres signes de ponctuation',
'Your current IP address is %ip' => 'Votre adresse IP est %ip', 'Your current IP address is %ip' => 'Votre adresse IP est %ip',
'Zip code' => 'Code postal', 'Zip code' => 'Code postal',
'Zones' => 'Zones', 'Zone name' => 'Nom de la zone',
'activate' => 'activer', 'activate' => 'activer',
'activate %title module' => 'Activez le module %title', 'activate %title module' => 'Activez le module %title',
'activation' => 'Activation', 'activation' => 'Activation',

View File

@@ -190,7 +190,7 @@
</li> </li>
{/loop} {/loop}
{loop name="menu-auth-config" type="auth" role="ADMIN" resource="admin.config" access="VIEW"} {loop name="menu-auth-config" type="auth" role="ADMIN" resource="admin.configuration.area" access="VIEW"}
<li class="{if $admin_current_location == 'configuration'}active{/if}" id="config_menu"> <li class="{if $admin_current_location == 'configuration'}active{/if}" id="config_menu">
<a href="{url path='/admin/configuration'}">{intl l="Configuration"}</a> <a href="{url path='/admin/configuration'}">{intl l="Configuration"}</a>
</li> </li>

View File

@@ -48,15 +48,27 @@
{loop type="admin" name="administrators" backend_context="1"} {loop type="admin" name="administrators" backend_context="1"}
{* the current current admin can always update its own profile *}
{$can_update = $ID == {admin attr="id"}}
{loop type="auth" name="can_change" role="ADMIN" resource="admin.configuration.administrator" access="UPDATE"}
{$can_update = true}
{/loop}
<tr> <tr>
<td data-field-class="js-login">{$LOGIN}</td> <td data-field-class="js-login">
{if $can_update}
<a class="js-update-administrator" title="{intl l='Change this administrator'}" href="#administrator_update_dialog" data-id="{$ID}" data-toggle="modal">{$LOGIN}</a>
{else}
{$LOGIN}
{/if}
</td>
<td data-field-class="js-firstname">{$FIRSTNAME}</td> <td data-field-class="js-firstname">{$FIRSTNAME}</td>
<td data-field-class="js-lastname">{$LASTNAME}</td> <td data-field-class="js-lastname">{$LASTNAME}</td>
<td data-field-class="js-locale">{$LOCALE}</td> <td data-field-class="js-locale">{$LOCALE}</td>
<td data-field-class="js-profile" data-value="{$PROFILE}"> <td data-field-class="js-profile" data-value="{$PROFILE}">
{if $PROFILE} {if $PROFILE}
{loop type="profile" name="admin-profile" id=$PROFILE} {loop type="profile" name="admin-profile" id=$PROFILE}
{$TITLE} <a title="{intl l='Afficher ce profil'}" href="{url path="/admin/configuration/profiles/update/$ID"}">{$TITLE}</a>
{/loop} {/loop}
{else} {else}
{intl l='Superadministrator'} {intl l='Superadministrator'}
@@ -68,12 +80,11 @@
- can UPDATE anyway - can UPDATE anyway
- cannot delete himself - cannot delete himself
*} *}
{if $ID == {admin attr="id"}} {if $can_update}
<a class="btn btn-default btn-xs js-update-administrator" title="{intl l='Change this administrator'}" href="#administrator_update_dialog" data-id="{$ID}" data-toggle="modal"><span class="glyphicon glyphicon-edit"></span></a> <a class="btn btn-default btn-xs js-update-administrator" title="{intl l='Change this administrator'}" href="#administrator_update_dialog" data-id="{$ID}" data-toggle="modal"><span class="glyphicon glyphicon-edit"></span></a>
{else} {/if}
{loop type="auth" name="can_change" role="ADMIN" resource="admin.configuration.administrator" access="UPDATE"}
<a class="btn btn-default btn-xs js-update-administrator" title="{intl l='Change this administrator'}" href="#administrator_update_dialog" data-id="{$ID}" data-toggle="modal"><span class="glyphicon glyphicon-edit"></span></a> {if $ID != {admin attr="id"}}
{/loop}
{loop type="auth" name="can_delete" role="ADMIN" resource="admin.configuration.administrator" access="DELETE"} {loop type="auth" name="can_delete" role="ADMIN" resource="admin.configuration.administrator" access="DELETE"}
<a class="btn btn-default btn-xs js-delete-administrator" title="{intl l='Delete this administrator'}" href="#administrator_delete_dialog" data-id="{$ID}" data-toggle="modal"><span class="glyphicon glyphicon-trash"></span></a> <a class="btn btn-default btn-xs js-delete-administrator" title="{intl l='Delete this administrator'}" href="#administrator_delete_dialog" data-id="{$ID}" data-toggle="modal"><span class="glyphicon glyphicon-trash"></span></a>
{/loop} {/loop}

View File

@@ -89,14 +89,14 @@
{loop type="auth" name="pcc2" role="ADMIN" resource="admin.configuration.shipping-zone" access="VIEW"} {loop type="auth" name="pcc2" role="ADMIN" resource="admin.configuration.shipping-zone" access="VIEW"}
<tr> <tr>
<td><a href="{url path='/admin/configuration/shipping_zones'}">{intl l='Shipping zones'}</a></td> <td><a href="{url path='/admin/configuration/shipping_zones'}">{intl l='Shipping configuration'}</a></td>
<td><a class="btn btn-default btn-xs" href="{url path='/admin/configuration/shipping_zones'}"><i class="glyphicon glyphicon-edit"></i></a></td> <td><a class="btn btn-default btn-xs" href="{url path='/admin/configuration/shipping_zones'}"><i class="glyphicon glyphicon-edit"></i></a></td>
</tr> </tr>
{/loop} {/loop}
{loop type="auth" name="pcc3" role="ADMIN" resource="admin.configuration.shipping-configuration" access="VIEW"} {loop type="auth" name="pcc3" role="ADMIN" resource="admin.configuration.shipping-configuration" access="VIEW"}
<tr> <tr>
<td><a href="{url path='/admin/configuration/shipping_configuration'}">{intl l='Shipping configuration'}</a></td> <td><a href="{url path='/admin/configuration/shipping_configuration'}">{intl l='Shipping zones management'}</a></td>
<td><a class="btn btn-default btn-xs" href="{url path='/admin/configuration/shipping_configuration'}"><i class="glyphicon glyphicon-edit"></i></a></td> <td><a class="btn btn-default btn-xs" href="{url path='/admin/configuration/shipping_configuration'}"><i class="glyphicon glyphicon-edit"></i></a></td>
</tr> </tr>
{/loop} {/loop}

View File

@@ -125,12 +125,24 @@
<input type="hidden" name="{$name}" value="{url path='/admin/configuration/country/update/_ID_'}" /> <input type="hidden" name="{$name}" value="{url path='/admin/configuration/country/update/_ID_'}" />
{/form_field} {/form_field}
{form_field form=$form field='title'} {loop type="lang" name="current-edit-lang" default_only="1"}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}" class="control-label">{$label} : </label> {form_field form=$form field='title'}
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$value}" title="{$label}" placeholder="{intl l='Country title'}"> <div class="form-group {if $error}has-error{/if}">
</div> <label for="{$label_attr.for}" class="control-label">{$label} : </label>
{/form_field} <div class="input-group">
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$value}" title="{$label}" placeholder="{intl l='Country title'}">
<span class="input-group-addon"><img src="{image file="assets/img/flags/{$CODE}.png"}" alt="{intl l=$TITLE}" /></span>
</div>
<div class="help-block">{intl l="Enter here the value in the default language (%title)" title=$TITLE}</div>
</div>
{/form_field}
{form_field form=$form field='locale'}
<input type="hidden" name="{$name}" value="{$LOCALE}" />
{/form_field}
{/loop}
{form_field form=$form field='area'} {form_field form=$form field='area'}
<div class="form-group {if $error}has-error{/if}"> <div class="form-group {if $error}has-error{/if}">
@@ -161,12 +173,6 @@
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$value}" title="{$label}" placeholder="{intl l='Alpha code 3'}"> <input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$value}" title="{$label}" placeholder="{intl l='Alpha code 3'}">
</div> </div>
{/form_field} {/form_field}
{loop type="lang" name="default-lang" default_only="1"}
<input type="hidden" name="edit_language_id" value="{$ID}" />
{form_field form=$form field='locale'}
<input type="hidden" name="{$name}" value="{$LOCALE}" />
{/form_field}
{/loop}
{module_include location='country_create_form'} {module_include location='country_create_form'}

View File

@@ -32,7 +32,13 @@
{form name="thelia.admin.country.modification"} {form name="thelia.admin.country.modification"}
<form method="POST" action="{url path="/admin/configuration/country/save/{$ID}"}" {form_enctype form=$form} class="clearfix"> <form method="POST" action="{url path="/admin/configuration/country/save/{$ID}"}" {form_enctype form=$form} class="clearfix">
{include file = "includes/inner-form-toolbar.html"} {include
file = "includes/inner-form-toolbar.html"
hide_submit_buttons = false
page_url = {url path="/admin/configuration/country/update/$ID"}
close_url = {url path="/admin/configuration/countries"}
}
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
{* Be sure to get the country ID, even if the form could not be validated *} {* Be sure to get the country ID, even if the form could not be validated *}
@@ -41,7 +47,7 @@
{form_hidden_fields form=$form} {form_hidden_fields form=$form}
{form_field form=$form field='success_url'} {form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{url path="/admin/configuration/country/update/{$ID}"}" /> <input type="hidden" name="{$name}" value="{url path="/admin/configuration/countries"}" />
{/form_field} {/form_field}
{form_field form=$form field='locale'} {form_field form=$form field='locale'}

View File

@@ -8,6 +8,7 @@
{module_include location='home_top'} {module_include location='home_top'}
{loop type="auth" name="can_view" role="ADMIN" resource="admin.order" access="VIEW"}
<div class="col-md-12 general-block-decorator dashboard"> <div class="col-md-12 general-block-decorator dashboard">
<div class="title title-without-tabs clearfix"> <div class="title title-without-tabs clearfix">
@@ -36,57 +37,78 @@
</div> </div>
</div> </div>
{/loop}
<div class="row"> <div class="row">
<div class="col-md-4">
<div class="general-block-decorator">
<div class="title title-without-tabs">{intl l="Shop Informations"}</div>
<div class="table-responsive">
<table class="table table-striped">
<tbody>
<tr>
<th>{intl l="Customers"}</th>
<td>
{count type="customer" current="false" backend_context="1"}
</td>
</tr>
<tr>
<th>{intl l="Categories"}</th>
<td>
{count type="category" visible="*" backend_context="1"}
</td>
</tr>
<tr>
<th>{intl l="Products"}</th>
<td>
{count type="product" visible="*" backend_context="1"}
</td>
</tr>
<tr>
<th>{intl l="Online products"}</th>
<td>
{count type="product" visible="true" backend_context="1"}
</td>
</tr>
<tr>
<th>{intl l="Offline products"}</th>
<td>
{count type="product" visible="false" backend_context="1"}
</td>
</tr>
<tr>
<th>{intl l="Orders"}</th>
<td>
{count type="order" status="*" backend_context="1"}
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
{* Do not display shop information block if user none of the required authorizations *}
{capture name="shop_information_block_content"}
{loop type="auth" name="can_view" role="ADMIN" resource="admin.customer" access="VIEW"}
<tr>
<th>{intl l="Customers"}</th>
<td>
{count type="customer" current="false" backend_context="1"}
</td>
</tr>
{/loop}
{loop type="auth" name="can_view" role="ADMIN" resource="admin.category" access="VIEW"}
<tr>
<th>{intl l="Categories"}</th>
<td>
{count type="category" visible="*" backend_context="1"}
</td>
</tr>
{/loop}
{loop type="auth" name="can_view" role="ADMIN" resource="admin.product" access="VIEW"}
<tr>
<th>{intl l="Products"}</th>
<td>
{count type="product" visible="*" backend_context="1"}
</td>
</tr>
<tr>
<th>{intl l="Online products"}</th>
<td>
{count type="product" visible="true" backend_context="1"}
</td>
</tr>
<tr>
<th>{intl l="Offline products"}</th>
<td>
{count type="product" visible="false" backend_context="1"}
</td>
</tr>
{/loop}
{loop type="auth" name="can_view" role="ADMIN" resource="admin.order" access="VIEW"}
<tr>
<th>{intl l="Orders"}</th>
<td>
{count type="order" status="*" backend_context="1"}
</td>
</tr>
{/loop}
{/capture}
{if trim($smarty.capture.shop_information_block_content) ne ""}
<div class="col-md-4">
<div class="general-block-decorator">
<div class="title title-without-tabs">{intl l="Shop Informations"}</div>
<div class="table-responsive">
<table class="table table-striped">
<tbody>
{$smarty.capture.shop_information_block_content nofilter}
</tbody>
</table>
</div>
</div>
</div>
{/if}
{loop type="auth" name="can_view" role="ADMIN" resource="admin.order" access="VIEW"}
<div class="col-md-4"> <div class="col-md-4">
<div class="general-block-decorator"> <div class="general-block-decorator">
<div class="title title-without-tabs">{intl l="Sales statistics"}</div> <div class="title title-without-tabs">{intl l="Sales statistics"}</div>
@@ -221,6 +243,7 @@
</div> </div>
</div> </div>
</div> </div>
{/loop}
<div class="col-md-4"> <div class="col-md-4">
<div class="general-block-decorator"> <div class="general-block-decorator">
@@ -234,11 +257,11 @@
</tr> </tr>
<tr> <tr>
<th>{intl l="Latest version available"}</th> <th>{intl l="Latest version available"}</th>
<td><a href="">V1.5.4.2</a></td> <td><a href="http://thelia.net/telechargement" id="latest-thelia-version">{intl l="Loading..."}</a></td>
</tr> </tr>
<tr> <tr>
<th>{intl l="News"}</th> <th>{intl l="News"}</th>
<td><a href="" target="_blank">{intl l="Click here"}</a></td> <td><a href="http://thelia.net/blog" target="_blank">{intl l="Click here"}</a></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@@ -396,9 +419,14 @@ jQuery(function($){
}); });
} }
{/literal} {/literal}
// Get the latest Thelia version
$('#latest-thelia-version').load("{url path='/admin/latest-thelia-version'}", function(response, status, xhr) {
if (status == "error")
$('#latest-thelia-version').text("Unavailable");
});
}); });
</script> </script>

View File

@@ -8,7 +8,6 @@
{block name="main-content"} {block name="main-content"}
{assign oder_tab {$smarty.get.tab|default:$smarty.post.tab|default:'data'}} {assign oder_tab {$smarty.get.tab|default:$smarty.post.tab|default:'data'}}
{assign asked_country {$smarty.get.country|default:{country ask="default" attr="id"}}}
<div class="profiles edit-profiles"> <div class="profiles edit-profiles">
@@ -26,8 +25,8 @@
<div class="row"> <div class="row">
<div class="col-md-12 general-block-decorator clearfix"> <div class="col-md-12 general-block-decorator clearfix">
<div class="lead clearfix"> <div class="row">
<span class='label label-default pull-left'>{$CODE}</span> <div class="col-md-12 title">{intl l="Editing profile '%name'" name=$TITLE}</div>
</div> </div>
<ul class="nav nav-tabs clearfix"> <ul class="nav nav-tabs clearfix">

View File

@@ -36,8 +36,9 @@
</caption> </caption>
<thead> <thead>
<tr> <tr>
<th class="col-md-1">{intl l="Code"}</th>
<th class="col-md-3">{intl l="Name"}</th> <th class="col-md-3">{intl l="Name"}</th>
<th class="col-md-5">{intl l="Description"}</th> <th class="col-md-4">{intl l="Description"}</th>
<th class="col-md-1">{intl l="Actions"}</th> <th class="col-md-1">{intl l="Actions"}</th>
</tr> </tr>
</thead> </thead>
@@ -45,14 +46,36 @@
{loop type="profile" name="profiles" backend_context="1"} {loop type="profile" name="profiles" backend_context="1"}
{$can_change = false}
{loop type="auth" name="can_change" role="ADMIN" resource="admin.configuration.profile" access="UPDATE"}
{$can_change = true}
{/loop}
<tr> <tr>
<td>{$TITLE}</td> <td>
{if $can_change}
<a title="{intl l='Change this profile'}" href="{url path="/admin/configuration/profiles/update/$ID"}">
{$CODE}
</a>
{else}
{$CODE}
{/if}
</td>
<td>
{if $can_change}
<a title="{intl l='Change this profile'}" href="{url path="/admin/configuration/profiles/update/$ID"}">
{$TITLE}
</a>
{else}
{$TITLE}
{/if}
</td>
<td>{$DESCRIPTION}</td> <td>{$DESCRIPTION}</td>
<td> <td>
<div class="btn-group"> <div class="btn-group">
{loop type="auth" name="can_change" role="ADMIN" resource="admin.configuration.profile" access="UPDATE"} {if $can_change}
<a class="btn btn-default btn-xs" title="{intl l='Change this profile'}" href="{url path="/admin/configuration/profiles/update/$ID"}"><span class="glyphicon glyphicon-edit"></span></a> <a class="btn btn-default btn-xs" title="{intl l='Change this profile'}" href="{url path="/admin/configuration/profiles/update/$ID"}"><span class="glyphicon glyphicon-edit"></span></a>
{/loop} {/if}
{assign linkedAdminCount {count name="linked-admin" type="admin" profile=$ID}} {assign linkedAdminCount {count name="linked-admin" type="admin" profile=$ID}}
@@ -93,9 +116,16 @@
{form_hidden_fields form=$form} {form_hidden_fields form=$form}
{form_field form=$form field='locale'} {loop type="lang" name="current-edit-lang" default_only="1"}
<input type="hidden" name="{$name}" value="{$edit_language_locale}" /> <div class="text-center well well-sm">
{/form_field} <img src="{image file="assets/img/flags/$CODE.png"}" alt="{intl l=$TITLE}" />
{intl l="Enter information in the default language (%title)" title=$TITLE}
</div>
{form_field form=$form field='locale'}
<input type="hidden" name="{$name}" value="{$LOCALE}" />
{/form_field}
{/loop}
{form_field form=$form field='code'} {form_field form=$form field='code'}
<div class="form-group {if $error}has-error{/if}"> <div class="form-group {if $error}has-error{/if}">

View File

@@ -14,21 +14,28 @@
<li><a href="{url path='/admin/home'}">{intl l="Home"}</a></li> <li><a href="{url path='/admin/home'}">{intl l="Home"}</a></li>
<li><a href="{url path='/admin/configuration'}">{intl l="Configuration"}</a></li> <li><a href="{url path='/admin/configuration'}">{intl l="Configuration"}</a></li>
<li><a href="{url path='/admin/configuration/shipping_configuration'}">{intl l="Shipping configuration"}</a></li> <li><a href="{url path='/admin/configuration/shipping_configuration'}">{intl l="Shipping configuration"}</a></li>
<li>{intl l='Editing shipping configuration "%name"' name="{$NAME}"}</li> <li>{intl l='Editing shipping zone "%name"' name="{$NAME}"}</li>
</ul> </ul>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="general-block-decorator"> <div class="general-block-decorator">
<div class="col-md-12 title title-without-tabs"> <div class="title title-without-tabs">
{intl l='Edit shipping configuration %title' title=$NAME} <div class="row">
<div class="col-md-10">
{intl l='Shipping zone "%title"' title=$NAME}
</div>
<div class="col-md-2 text-right">
<a href="{url path='/admin/configuration/shipping_configuration'}" class="btn btn-sm btn-default">{intl l='Close'} <span class="glyphicon glyphicon-remove"></span></a>
</div>
</div>
</div> </div>
<div class="form-container clearfix"> <div class="form-container clearfix">
<div class="col-md-4"> <div class="col-md-4">
{ifloop rel="country-without-area"}
{form name="thelia.admin.area.country"} {form name="thelia.admin.area.country"}
<form method="POST" action="{url path="/admin/configuration/shipping_configuration/country/add"}"> <form method="POST" action="{url path="/admin/configuration/shipping_configuration/country/add"}">
{form_hidden_fields form=$form} {form_hidden_fields form=$form}
@@ -41,7 +48,7 @@
<input type="hidden" name="{$name}" value="{$area_id}"> <input type="hidden" name="{$name}" value="{$area_id}">
{/form_field} {/form_field}
{form_field form=$form field='country_id'} {form_field form=$form field='country_id'}
<label class="control-label" for="{$label_attr.for}">{intl l="Country"}</label> <label class="control-label" for="{$label_attr.for}">{intl l="Unassigned countries"}</label>
<div class="input-group"> <div class="input-group">
<select name="{$name}" id="{$label_attr.for}" data-toggle="selectpicker"> <select name="{$name}" id="{$label_attr.for}" data-toggle="selectpicker">
@@ -56,6 +63,12 @@
{/form_field} {/form_field}
</form> </form>
{/form} {/form}
{/ifloop}
{elseloop rel="country-without-area"}
<div class="alert alert-info">
{intl l="All countries are assigned to a shipping zone."}
</div>
{/elseloop}
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
@@ -63,21 +76,26 @@
<table class="table table-striped table-condensed"> <table class="table table-striped table-condensed">
<thead> <thead>
<tr> <tr>
<th>{intl l="Country"}</th> <th>{intl l="Countries assigned to this zone"}</th>
<th>{intl l="Actions"}</th> <th class="text-center">{intl l="Actions"}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{loop name="country-area" type="country" area=$area_id backend_context="1"} {loop name="country-area" type="country" area=$area_id backend_context="1"}
<tr> <tr>
<td>{$TITLE}</td> <td>{$TITLE}</td>
<td> <td class="text-center">
<a class="btn btn-default btn-xs btn-delete-country" title="{intl l='Delete this country'}" href="#delete_country_dialog" data-id="{$ID}" data-toggle="modal"> <a class="btn btn-default btn-xs btn-delete-country" title="{intl l='Delete this country'}" href="#delete_country_dialog" data-id="{$ID}" data-toggle="modal">
<span class="glyphicon glyphicon-trash"></span> <span class="glyphicon glyphicon-trash"></span>
</a> </a>
</td> </td>
</tr> </tr>
{/loop} {/loop}
{elseloop rel="country-area"}
<td colspan="2">
{intl l="This shipping zone does not contains any country."}
</td>
{/elseloop}
</tbody> </tbody>
{module_include location='shipping-configuration-edit'} {module_include location='shipping-configuration-edit'}
</table> </table>
@@ -112,7 +130,7 @@
dialog_id = "delete_country_dialog" dialog_id = "delete_country_dialog"
dialog_title = {intl l="Remove country"} dialog_title = {intl l="Remove country"}
dialog_message = {intl l="Do you really want to remove this country ?"} dialog_message = {intl l="Do you really want to remove this country from this shipping zone ?"}
form_action = {url path='/admin/configuration/shipping_configuration/country/remove'} form_action = {url path='/admin/configuration/shipping_configuration/country/remove'}
form_content = {$smarty.capture.delete_country_dialog nofilter} form_content = {$smarty.capture.delete_country_dialog nofilter}

View File

@@ -13,7 +13,7 @@
<ul class="breadcrumb"> <ul class="breadcrumb">
<li><a href="{url path='/admin/home'}">{intl l="Home"}</a></li> <li><a href="{url path='/admin/home'}">{intl l="Home"}</a></li>
<li><a href="{url path='/admin/configuration'}">{intl l="Configuration"}</a></li> <li><a href="{url path='/admin/configuration'}">{intl l="Configuration"}</a></li>
<li><a href="{url path='/admin/configuration/shipping_configuration'}">{intl l="Shipping configuration"}</a></li> <li><a href="{url path='/admin/configuration/shipping_configuration'}">{intl l="Shipping zones management"}</a></li>
</ul> </ul>
{module_include location='shipping_configuration_top'} {module_include location='shipping_configuration_top'}
@@ -24,37 +24,54 @@
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped table-condensed table-left-aligned"> <table class="table table-striped table-condensed table-left-aligned">
<caption class="clearfix"> <caption class="clearfix">
{intl l='Thelia Shipping configuration'} {intl l='Shipping zones management'}
{loop type="auth" name="can_create" role="ADMIN" resource="admin.configuration.shipping-configuration" access="CREATE"} {loop type="auth" name="can_create" role="ADMIN" resource="admin.configuration.shipping-configuration" access="CREATE"}
<a class="btn btn-default btn-primary pull-right" title="{intl l='Add a new shipping configuration'}" href="#creation_dialog" data-toggle="modal"> <a class="btn btn-default btn-primary pull-right" title="{intl l='Add a new shipping zone'}" href="#creation_dialog" data-toggle="modal">
<span class="glyphicon glyphicon-plus-sign"></span> <span class="glyphicon glyphicon-plus-sign"></span>
</a> </a>
{/loop} {/loop}
</caption> </caption>
<thead> <thead>
<tr> <tr>
<th>{intl l="Description"}</th> <th>{intl l="Zone name"}</th>
<th>{intl l="Associated countries"}</th>
{module_include location='shipping_configuration_table_header'} {module_include location='shipping_configuration_table_header'}
<th>{intl l="Actions"}</th> <th class="text-center">{intl l="Actions"}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{loop name="area-list" type="area" backend_context="1"} {loop name="area-list" type="area" backend_context="1"}
<tr> <tr>
<td><a href="{url path="/admin/configuration/shipping_configuration/update/$ID"}">{$NAME}</a></td> <td><a href="{url path="/admin/configuration/shipping_configuration/update/$ID"}">{$NAME}</a></td>
<td>
{loop name="country-area" type="country" area=$ID backend_context="1" limit="6"}
{$TITLE}{if $LOOP_COUNT < $LOOP_TOTAL},{/if}
{/loop}
{ifloop rel="country-area-more"}
{$countries = ''}
{loop name="country-area-more" type="country" area=$ID backend_context="1" offset="6"}
{$countries = "$countries, $TITLE"}
{$ctry_count=$LOOP_COUNT}
{/loop}
{$countries = ltrim($countries, ', ')}
<span class="badge" title="{$countries}">{intl l="%count more..." count=$ctry_count}</span>
{/ifloop}
</td>
{module_include location='shipping_configuration_table_row'} {module_include location='shipping_configuration_table_row'}
<td> <td class="text-center">
<div class="btn-group"> <div class="btn-group">
{loop type="auth" name="can_change" role="ADMIN" resource="admin.configuration.shipping-configuration" access="UPDATE"} {loop type="auth" name="can_change" role="ADMIN" resource="admin.configuration.shipping-configuration" access="UPDATE"}
<a class="btn btn-default btn-xs area-configuration-change" title="{intl l='Change this shipping configuration'}" href="{url path="/admin/configuration/shipping_configuration/update/$ID"}"><i class="glyphicon glyphicon-edit"></i></a> <a class="btn btn-default btn-xs area-configuration-change" title="{intl l='Change this shipping zone'}" href="{url path="/admin/configuration/shipping_configuration/update/$ID"}"><i class="glyphicon glyphicon-edit"></i></a>
{/loop} {/loop}
{loop type="auth" name="can_delete" role="ADMIN" resource="admin.configuration.shipping-configuration" access="DELETE"} {loop type="auth" name="can_delete" role="ADMIN" resource="admin.configuration.shipping-configuration" access="DELETE"}
<a class="btn btn-default btn-xs area-configuration-delete" title="{intl l='Delete this shipping configuration'}" href="#delete_dialog" data-id="{$ID}" data-toggle="modal"><i class="glyphicon glyphicon-trash"></i></a> <a class="btn btn-default btn-xs area-configuration-delete" title="{intl l='Delete this shipping zone'}" href="#delete_dialog" data-id="{$ID}" data-toggle="modal"><i class="glyphicon glyphicon-trash"></i></a>
{/loop} {/loop}
</div> </div>
</td> </td>
@@ -72,7 +89,7 @@
</div> </div>
</div> </div>
{* Adding a new Shipping configuration *} {* Adding a new Shipping zone *}
{* Capture the dialog body, to pass it to the generic dialog *} {* Capture the dialog body, to pass it to the generic dialog *}
{capture "creation_dialog"} {capture "creation_dialog"}
@@ -86,7 +103,7 @@
{form_field form=$form field="name"} {form_field form=$form field="name"}
<div class="form-group"> <div class="form-group">
<label for="{$label_attr.for}" class="control-label">{$label} : </label> <label for="{$label_attr.for}" class="control-label">{$label} : </label>
<input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" title="{intl l="Name"}" placeholder="{intl l='Shipping configuration name'}"> <input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" title="{intl l="Name"}" placeholder="{intl l='Shipping zone name'}">
</div> </div>
{/form_field} {/form_field}
@@ -99,10 +116,10 @@
file = "includes/generic-create-dialog.html" file = "includes/generic-create-dialog.html"
dialog_id = "creation_dialog" dialog_id = "creation_dialog"
dialog_title = {intl l="Create a new shipping configuration"} dialog_title = {intl l="Create a new shipping zone"}
dialog_body = {$smarty.capture.creation_dialog nofilter} dialog_body = {$smarty.capture.creation_dialog nofilter}
dialog_ok_label = {intl l="Create this shipping configuration"} dialog_ok_label = {intl l="Create this shipping zone"}
dialog_cancel_label = {intl l="Cancel"} dialog_cancel_label = {intl l="Cancel"}
form_action = {url path='/admin/configuration/shipping_configuration/create'} form_action = {url path='/admin/configuration/shipping_configuration/create'}
@@ -123,8 +140,8 @@
file = "includes/generic-confirm-dialog.html" file = "includes/generic-confirm-dialog.html"
dialog_id = "delete_dialog" dialog_id = "delete_dialog"
dialog_title = {intl l="Delete shipping configuration"} dialog_title = {intl l="Delete shipping zone"}
dialog_message = {intl l="Do you really want to delete this shipping configuration ?"} dialog_message = {intl l="Do you really want to delete this shipping zone ?"}
form_action = {url path='/admin/configuration/shipping_configuration/delete'} form_action = {url path='/admin/configuration/shipping_configuration/delete'}
form_content = {$smarty.capture.delete_dialog nofilter} form_content = {$smarty.capture.delete_dialog nofilter}

View File

@@ -10,40 +10,51 @@
<div id="wrapper" class="container"> <div id="wrapper" class="container">
{loop type="module" id="$delivery_module_id" active="*" name="module.name" backend_context="1"}
<ul class="breadcrumb"> <ul class="breadcrumb">
<li><a href="{url path='/admin/home'}">{intl l="Home"}</a></li> <li><a href="{url path='/admin/home'}">{intl l="Home"}</a></li>
<li><a href="{url path='/admin/configuration'}">{intl l="Configuration"}</a></li> <li><a href="{url path='/admin/configuration'}">{intl l="Configuration"}</a></li>
<li><a href="{url path='/admin/configuration/shipping_zones'}">{intl l="Shipping zones"}</a></li> <li><a href="{url path='/admin/configuration/shipping_zones'}">{intl l="Shipping configuration"}</a></li>
<li>{intl l='Editing shipping zone "%name"' name="{$TITLE}"}</li> <li>{intl l='Editing shipping configuration for module "%name"' name="{$TITLE}"}</li>
</ul> </ul>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="general-block-decorator"> <div class="general-block-decorator">
<div class="col-md-12 title title-without-tabs"> <div class="title title-without-tabs">
{intl l='Edit shipping zone %title' title=$TITLE} <div class="row">
<div class="col-md-10">
{intl l='Shipping configuration of delivery module "%title"' title=$TITLE}
</div>
<div class="col-md-2 text-right">
<a href="{url path='/admin/configuration/shipping_zones'}" class="btn btn-sm btn-default">{intl l='Close'} <span class="glyphicon glyphicon-remove"></span></a>
</div>
</div>
</div> </div>
<div class="form-container clearfix"> <div class="form-container clearfix">
<div class="col-md-4"> <div class="col-md-4">
{ifloop rel="area.module.not_associated"}
{form name="thelia.shopping_zone_area"} {form name="thelia.shopping_zone_area"}
<form method="POST" action="{url path="/admin/configuration/shipping_zones/area/add"}"> <form method="POST" action="{url path="/admin/configuration/shipping_zones/area/add"}">
{form_hidden_fields form=$form} {form_hidden_fields form=$form}
{form_field form=$form field='success_url'} {form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{url path="/admin/configuration/shipping_zones/update/{$shipping_zones_id}"}" /> {* the url the user is redirected to on login success *} <input type="hidden" name="{$name}" value="{url path="/admin/configuration/shipping_zones/update/{$delivery_module_id}"}" /> {* the url the user is redirected to on login success *}
{/form_field} {/form_field}
{form_field form=$form field='shipping_zone_id'} {form_field form=$form field='shipping_zone_id'}
<input type="hidden" name="{$name}" value="{$shipping_zones_id}" /> <input type="hidden" name="{$name}" value="{$delivery_module_id}" />
{/form_field} {/form_field}
{form_field form=$form field='area_id'} {form_field form=$form field='area_id'}
<label class="control-label" for="{$label_attr.for}">{$label}</label> <label class="control-label" for="{$label_attr.for}">{$label}</label>
<div class="input-group"> <div class="input-group">
<select name="{$name}" id="{$label_attr.for}" data-toggle="selectpicker"> <select name="{$name}" id="{$label_attr.for}" data-toggle="selectpicker">
{loop name="area.module.not_associated" type="area" without_zone=$shipping_zones_id} {loop name="area.module.not_associated" type="area" without_zone=$delivery_module_id}
<option value="{$ID}">{$NAME}</option> <option value="{$ID}">{$NAME}</option>
{/loop} {/loop}
</select> </select>
@@ -54,6 +65,12 @@
{/form_field} {/form_field}
</form> </form>
{/form} {/form}
{/ifloop}
{elseloop rel="area.module.not_associated"}
<div class="alert alert-info">
{intl l="This delivery module handles all shipping zones."}
</div>
{/elseloop}
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
@@ -61,21 +78,30 @@
<table class="table table-striped table-condensed"> <table class="table table-striped table-condensed">
<thead> <thead>
<tr> <tr>
<th>{intl l="Zones"}</th> <th>{intl l="Shipping zone"}</th>
<th>{intl l="Actions"}</th> <th class="text-center">{intl l="Actions"}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{loop type="area" name="area.module.associated" with_zone=$shipping_zones_id} {loop type="area" name="area.module.associated" with_zone=$delivery_module_id}
<tr> <tr>
<td>{$NAME}</td> <td>{$NAME}</td>
<td> <td class="text-center">
<a class="btn btn-default btn-xs delete-zone-area" title="{intl l='Delete this zone'}" href="#delete_zone_dialog" data-id="{$ID}" data-toggle="modal"> <a class="btn btn-default btn-xs delete-zone-area" title="{intl l='Delete this zone'}" href="#delete_zone_dialog" data-id="{$ID}" data-toggle="modal">
<span class="glyphicon glyphicon-trash"></span> <span class="glyphicon glyphicon-trash"></span>
</a> </a>
</td> </td>
</tr> </tr>
{/loop} {/loop}
{elseloop rel="area.module.associated"}
<tr>
<td colspan="2">
<div class="text-center">
{intl l="There are no shipping zones attached to this module."}
</div>
</td>
</tr>
{/elseloop}
</tbody> </tbody>
</table> </table>
</div> </div>
@@ -86,6 +112,7 @@
</div> </div>
</div> </div>
{/loop}
</div> </div>
</div> </div>
@@ -96,11 +123,11 @@
{form_hidden_fields form=$form} {form_hidden_fields form=$form}
{form_field form=$form field='success_url'} {form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{url path="/admin/configuration/shipping_zones/update/{$shipping_zones_id}"}" /> {* the url the user is redirected to on login success *} <input type="hidden" name="{$name}" value="{url path="/admin/configuration/shipping_zones/update/{$delivery_module_id}"}" /> {* the url the user is redirected to on login success *}
{/form_field} {/form_field}
{form_field form=$form field='shipping_zone_id'} {form_field form=$form field='shipping_zone_id'}
<input type="hidden" name="{$name}" value="{$shipping_zones_id}" /> <input type="hidden" name="{$name}" value="{$delivery_module_id}" />
{/form_field} {/form_field}
{form_field form=$form field='area_id'} {form_field form=$form field='area_id'}

View File

@@ -21,18 +21,35 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="general-block-decorator"> <div class="general-block-decorator">
{ifloop rel="area-not-attached"}
<div class="row">
<div class="col-md-12">
<div class="alert alert-warning">
{intl l='<strong>Warning</strong>, some of your shipping zones are not attached to any delivery module:'}
{loop name="area-not-attached" type="area" unassigned=true}
<a href="{url path="/admin/configuration/shipping_configuration/update/$ID"}" title="{intl l='Edit this delivery zone'}">{$NAME}</a>{if $LOOP_COUNT < $LOOP_TOTAL},{else}.{/if}
{/loop}
</div>
</div>
</div>
{/ifloop}
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped table-condensed table-left-aligned"> <table class="table table-striped table-condensed table-left-aligned">
<caption> <caption>
{intl l='Thelia Shipping zones'} {intl l='Shipping zones'}
</caption> </caption>
<thead> <thead>
<tr> <tr>
<th>{intl l="Name"}</th> <th>{intl l="Delivery module"}</th>
<th>{intl l="Shipping zones for this module"}</th>
{module_include location='shipping_zones_table_header'} {module_include location='shipping_zones_table_header'}
<th>{intl l="Actions"}</th> <th class="text-center">{intl l="Actions"}</th>
</tr> </tr>
</thead> </thead>
@@ -40,10 +57,23 @@
{loop type="module" module_type="2" active="*" name="delivery.list" backend_context="1"} {loop type="module" module_type="2" active="*" name="delivery.list" backend_context="1"}
<tr> <tr>
<td><a href="{url path="/admin/configuration/shipping_zones/update/$ID"}">{$TITLE}</a></td> <td><a href="{url path="/admin/configuration/shipping_zones/update/$ID"}">{$TITLE}</a></td>
<td>
{loop name="area.module.associated" type="area" with_zone=$ID backend_context="1"}
{$countries = ''}
{loop name="country-area" type="country" area=$ID backend_context="1"}
{$countries = "$countries, $TITLE"}
{/loop}
{$countries = ltrim($countries, ', ')}
<a href="{url path="/admin/configuration/shipping_configuration/update/$ID"}" title="{$countries}">{$NAME}</a>{if $LOOP_COUNT < $LOOP_TOTAL},{/if}
{/loop}
{elseloop rel="area.module.associated"}
{intl l="There are no shipping zones attached to this module."}
{/elseloop}
</td>
{module_include location='shipping_zones_table_row'} {module_include location='shipping_zones_table_row'}
<td> <td class="text-center">
<div class="btn-group"> <div class="btn-group">
{loop type="auth" name="can_change" role="ADMIN" resource="admin.configuration.shipping-zone" access="UPDATE"} {loop type="auth" name="can_change" role="ADMIN" resource="admin.configuration.shipping-zone" access="UPDATE"}
<a class="btn btn-default btn-xs shipping-zones-change" title="{intl l='Change this shipping zone'}" href="{url path="/admin/configuration/shipping_zones/update/$ID"}"><i class="glyphicon glyphicon-edit"></i></a> <a class="btn btn-default btn-xs shipping-zones-change" title="{intl l='Change this shipping zone'}" href="{url path="/admin/configuration/shipping_zones/update/$ID"}"><i class="glyphicon glyphicon-edit"></i></a>