From 15d9b5528490c2bb1f75cc94606c25dbeb110c95 Mon Sep 17 00:00:00 2001
From: mespeche
Date: Mon, 16 Sep 2013 10:59:30 +0200
Subject: [PATCH 01/24] Countries view and routing creation
---
.../Thelia/Config/Resources/routing/admin.xml | 12 ++
.../Controller/Admin/CountryController.php | 39 ++++
core/lib/Thelia/Form/CountryCreationForm.php | 59 ++++++
templates/admin/default/countries.html | 168 ++++++++++++++++++
templates/admin/default/country-edit.html | 0
5 files changed, 278 insertions(+)
create mode 100644 core/lib/Thelia/Controller/Admin/CountryController.php
create mode 100644 core/lib/Thelia/Form/CountryCreationForm.php
create mode 100644 templates/admin/default/countries.html
create mode 100644 templates/admin/default/country-edit.html
diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml
index 5c9399e27..3ed059e7e 100755
--- a/core/lib/Thelia/Config/Resources/routing/admin.xml
+++ b/core/lib/Thelia/Config/Resources/routing/admin.xml
@@ -290,6 +290,18 @@
+
+
+
+ Thelia\Controller\Admin\CountryController::indexAction
+
+
+
+ Thelia\Controller\Admin\CountryController::createAction
+
+
+
+
diff --git a/core/lib/Thelia/Controller/Admin/CountryController.php b/core/lib/Thelia/Controller/Admin/CountryController.php
new file mode 100644
index 000000000..172552893
--- /dev/null
+++ b/core/lib/Thelia/Controller/Admin/CountryController.php
@@ -0,0 +1,39 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Controller\Admin;
+
+/**
+ * Class CustomerController
+ * @package Thelia\Controller\Admin
+ * @author Manuel Raynaud
+ */
+class CountryController extends BaseAdminController
+{
+ public function indexAction()
+ {
+ if (null !== $response = $this->checkAuth("admin.country.view")) return $response;
+ return $this->render("countries", array("display_country" => 20));
+ }
+
+}
\ No newline at end of file
diff --git a/core/lib/Thelia/Form/CountryCreationForm.php b/core/lib/Thelia/Form/CountryCreationForm.php
new file mode 100644
index 000000000..2c56a1b6a
--- /dev/null
+++ b/core/lib/Thelia/Form/CountryCreationForm.php
@@ -0,0 +1,59 @@
+. */
+/* */
+/*************************************************************************************/
+namespace Thelia\Form;
+
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Thelia\Core\Translation\Translator;
+
+class CountryCreationForm extends BaseForm
+{
+ protected function buildForm()
+ {
+ $this->formBuilder
+ ->add("title", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Category title *"),
+ "label_attr" => array(
+ "for" => "title"
+ )
+ ))
+ ->add("parent", "integer", array(
+ "constraints" => array(
+ new NotBlank()
+ )
+ ))
+ ->add("locale", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ )
+ ))
+ ;
+ }
+
+ public function getName()
+ {
+ return "thelia_country_creation";
+ }
+}
diff --git a/templates/admin/default/countries.html b/templates/admin/default/countries.html
new file mode 100644
index 000000000..b3e2254b8
--- /dev/null
+++ b/templates/admin/default/countries.html
@@ -0,0 +1,168 @@
+{extends file="admin-layout.tpl"}
+
+{block name="page-title"}{intl l='Countries'}{/block}
+
+{block name="check-permissions"}admin.configuration.countries.view{/block}
+
+{block name="main-content"}
+
+
+
+
+
+
+ {module_include location='countries_top'}
+
+
+
+ {module_include location='countries_bottom'}
+
+
+
+
+ {* Adding a new Country *}
+
+ {form name="thelia.admin.country.creation"}
+
+ {* Capture the dialog body, to pass it to the generic dialog *}
+ {capture "country_creation_dialog"}
+
+ {form_hidden_fields form=$form}
+
+ {form_field form=$form field='success_url'}
+ {* on success, redirect to the edition page, _ID_ is replaced with the created object ID, see controller *}
+
+ {/form_field}
+
+ {form_field form=$form field='parent'}
+
+ {/form_field}
+
+
+
+ {module_include location='country_create_form'}
+
+ {/capture}
+
+ {include
+ file = "includes/generic-create-dialog.html"
+
+ dialog_id = "add_country_dialog"
+ dialog_title = {intl l="Create a new country"}
+ dialog_body = {$smarty.capture.country_creation_dialog nofilter}
+
+ dialog_ok_label = {intl l="Create this country"}
+ dialog_cancel_label = {intl l="Cancel"}
+
+ form_action = {url path='/admin/configuration/countries/create'}
+ form_enctype = {form_enctype form=$form}
+ form_error_message = $form_error_message
+ }
+ {/form}
+
+{/block}
+
+{block name="javascript-initialization"}
+
+ {javascripts file='assets/js/bootstrap-switch/bootstrap-switch.js'}
+
+
+
+ {/javascripts}
+
+{/block}
\ No newline at end of file
diff --git a/templates/admin/default/country-edit.html b/templates/admin/default/country-edit.html
new file mode 100644
index 000000000..e69de29bb
From 8a19b8ec715e7cfde45bbed427a42fa7c63fa4c8 Mon Sep 17 00:00:00 2001
From: Manuel Raynaud
Date: Mon, 16 Sep 2013 12:15:04 +0200
Subject: [PATCH 02/24] fix faker script
---
install/faker.php | 1 +
.../DebugBar/DataCollector/PropelCollector.php | 18 +++++++++---------
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/install/faker.php b/install/faker.php
index 30831facd..38f2b9eb5 100755
--- a/install/faker.php
+++ b/install/faker.php
@@ -364,6 +364,7 @@ try {
$productAssociatedContent = new Thelia\Model\ProductAssociatedContent();
do {
$pick = array_rand($contentIdList, 1);
+ \Thelia\Log\Tlog::getInstance()->debug("pick : $pick");
} while(in_array($pick, $alreadyPicked));
$alreadyPicked[] = $pick;
diff --git a/local/modules/DebugBar/DataCollector/PropelCollector.php b/local/modules/DebugBar/DataCollector/PropelCollector.php
index dff0e6871..c0ce87746 100644
--- a/local/modules/DebugBar/DataCollector/PropelCollector.php
+++ b/local/modules/DebugBar/DataCollector/PropelCollector.php
@@ -124,7 +124,7 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
$message = "$sql ($duration_str)";
if ($this->alternativeLogger) {
- $this->alternativeLogger->info($message);
+ $this->alternativeLogger->log($level, $message);
}
}
@@ -180,7 +180,7 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
*/
public function emergency($message, array $context = array())
{
- $this->log(null, $message, $context);
+ $this->log(\Thelia\Log\Tlog::EMERGENCY, $message, $context);
}
/**
@@ -195,7 +195,7 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
*/
public function alert($message, array $context = array())
{
- $this->log(null, $message, $context);
+ $this->log(\Thelia\Log\Tlog::ALERT, $message, $context);
}
/**
@@ -209,7 +209,7 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
*/
public function critical($message, array $context = array())
{
- $this->log(null, $message, $context);
+ $this->log(\Thelia\Log\Tlog::CRITICAL, $message, $context);
}
/**
@@ -222,7 +222,7 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
*/
public function error($message, array $context = array())
{
- $this->log(null, $message, $context);
+ $this->log(\Thelia\Log\Tlog::ERROR, $message, $context);
}
/**
@@ -237,7 +237,7 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
*/
public function warning($message, array $context = array())
{
- $this->log(null, $message, $context);
+ $this->log(\Thelia\Log\Tlog::WARNING, $message, $context);
}
/**
@@ -249,7 +249,7 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
*/
public function notice($message, array $context = array())
{
- $this->log(null, $message, $context);
+ $this->log(\Thelia\Log\Tlog::NOTICE, $message, $context);
}
/**
@@ -263,7 +263,7 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
*/
public function info($message, array $context = array())
{
- $this->log(null, $message, $context);
+ $this->log(\Thelia\Log\Tlog::INFO, $message, $context);
}
/**
@@ -275,7 +275,7 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
*/
public function debug($message, array $context = array())
{
- $this->log(null, $message, $context);
+ $this->log(\Thelia\Log\Tlog::DEBUG, $message, $context);
}
From 8d2fab911c313c3f4f010275c3c82d9acdda68dc Mon Sep 17 00:00:00 2001
From: Manuel Raynaud
Date: Mon, 16 Sep 2013 12:41:19 +0200
Subject: [PATCH 03/24] fix faker
---
install/faker.php | 24 ------------------------
1 file changed, 24 deletions(-)
diff --git a/install/faker.php b/install/faker.php
index 0b0c471bb..66303f05a 100755
--- a/install/faker.php
+++ b/install/faker.php
@@ -37,14 +37,6 @@ try {
->find();
$categoryAssociatedContent->delete();
- $attributeCategory = Thelia\Model\AttributeCategoryQuery::create()
- ->find();
- $attributeCategory->delete();
-
- $featureCategory = Thelia\Model\FeatureCategoryQuery::create()
- ->find();
- $featureCategory->delete();
-
$featureProduct = Thelia\Model\FeatureProductQuery::create()
->find();
$featureProduct->delete();
@@ -325,22 +317,6 @@ try {
}
}
- //attribute_category and feature_category (all categories got all features/attributes)
- foreach($categoryIdList as $categoryId) {
- foreach($attributeList as $attributeId => $attributeAvId) {
- $attributeCategory = new Thelia\Model\AttributeCategory();
- $attributeCategory->setCategoryId($categoryId)
- ->setAttributeId($attributeId)
- ->save();
- }
- foreach($featureList as $featureId => $featureAvId) {
- $featureCategory = new Thelia\Model\FeatureCategory();
- $featureCategory->setCategoryId($categoryId)
- ->setFeatureId($featureId)
- ->save();
- }
- }
-
foreach($productIdList as $productId) {
//add random accessories - or not
$alreadyPicked = array();
From 696a2be8ba2a99c36a83f621dc5f72c12edf8185 Mon Sep 17 00:00:00 2001
From: franck
Date: Mon, 16 Sep 2013 12:52:35 +0200
Subject: [PATCH 04/24] Completed template management
---
core/lib/Thelia/Action/Template.php | 63 +++++++++++
.../Thelia/Config/Resources/routing/admin.xml | 24 ++++
.../Controller/Admin/TemplateController.php | 106 ++++++++++++++++++
.../Core/Event/TemplateAddAttributeEvent.php | 51 +++++++++
.../Core/Event/TemplateAddFeatureEvent.php | 51 +++++++++
.../Event/TemplateDeleteAttributeEvent.php | 51 +++++++++
.../Core/Event/TemplateDeleteFeatureEvent.php | 51 +++++++++
core/lib/Thelia/Core/Event/TheliaEvents.php | 6 +
.../Thelia/Core/Template/Loop/Attribute.php | 15 ++-
.../lib/Thelia/Core/Template/Loop/Feature.php | 37 ++++--
.../default/ajax/template-attribute-list.html | 101 +++++++++++++++--
.../default/ajax/template-feature-list.html | 102 +++++++++++++++++
templates/admin/default/template-edit.html | 4 +-
13 files changed, 639 insertions(+), 23 deletions(-)
create mode 100644 core/lib/Thelia/Core/Event/TemplateAddAttributeEvent.php
create mode 100644 core/lib/Thelia/Core/Event/TemplateAddFeatureEvent.php
create mode 100644 core/lib/Thelia/Core/Event/TemplateDeleteAttributeEvent.php
create mode 100644 core/lib/Thelia/Core/Event/TemplateDeleteFeatureEvent.php
create mode 100644 templates/admin/default/ajax/template-feature-list.html
diff --git a/core/lib/Thelia/Action/Template.php b/core/lib/Thelia/Action/Template.php
index a06e10430..18174dd26 100644
--- a/core/lib/Thelia/Action/Template.php
+++ b/core/lib/Thelia/Action/Template.php
@@ -42,6 +42,14 @@ use Thelia\Core\Event\TemplateEvent;
use Thelia\Model\TemplateTemplate;
use Thelia\Model\TemplateTemplateQuery;
use Thelia\Model\ProductQuery;
+use Thelia\Core\Event\TemplateAddAttributeEvent;
+use Thelia\Core\Event\TemplateDeleteAttributeEvent;
+use Thelia\Model\AttributeTemplateQuery;
+use Thelia\Model\AttributeTemplate;
+use Thelia\Core\Event\TemplateDeleteFeatureEvent;
+use Thelia\Core\Event\TemplateAddFeatureEvent;
+use Thelia\Model\FeatureTemplateQuery;
+use Thelia\Model\FeatureTemplate;
class Template extends BaseAction implements EventSubscriberInterface
{
@@ -113,6 +121,54 @@ class Template extends BaseAction implements EventSubscriberInterface
}
}
+ public function addAttribute(TemplateAddAttributeEvent $event) {
+
+ if (null === AttributeTemplateQuery::create()->filterByAttributeId($event->getAttributeId())->filterByTemplate($event->getTemplate())->findOne()) {
+
+ $attribute_template = new AttributeTemplate();
+
+ $attribute_template
+ ->setAttributeId($event->getAttributeId())
+ ->setTemplate($event->getTemplate())
+ ->save()
+ ;
+ }
+ }
+
+ public function deleteAttribute(TemplateDeleteAttributeEvent $event) {
+
+ $attribute_template = AttributeTemplateQuery::create()
+ ->filterByAttributeId($event->getAttributeId())
+ ->filterByTemplate($event->getTemplate())->findOne()
+ ;
+
+ if ($attribute_template !== null) $attribute_template->delete();
+ }
+
+ public function addFeature(TemplateAddFeatureEvent $event) {
+
+ if (null === FeatureTemplateQuery::create()->filterByFeatureId($event->getFeatureId())->filterByTemplate($event->getTemplate())->findOne()) {
+
+ $feature_template = new FeatureTemplate();
+
+ $feature_template
+ ->setFeatureId($event->getFeatureId())
+ ->setTemplate($event->getTemplate())
+ ->save()
+ ;
+ }
+ }
+
+ public function deleteFeature(TemplateDeleteFeatureEvent $event) {
+
+ $feature_template = FeatureTemplateQuery::create()
+ ->filterByFeatureId($event->getFeatureId())
+ ->filterByTemplate($event->getTemplate())->findOne()
+ ;
+
+ if ($feature_template !== null) $feature_template->delete();
+ }
+
/**
* {@inheritDoc}
*/
@@ -122,6 +178,13 @@ class Template extends BaseAction implements EventSubscriberInterface
TheliaEvents::TEMPLATE_CREATE => array("create", 128),
TheliaEvents::TEMPLATE_UPDATE => array("update", 128),
TheliaEvents::TEMPLATE_DELETE => array("delete", 128),
+
+ TheliaEvents::TEMPLATE_ADD_ATTRIBUTE => array("addAttribute", 128),
+ TheliaEvents::TEMPLATE_DELETE_ATTRIBUTE => array("deleteAttribute", 128),
+
+ TheliaEvents::TEMPLATE_ADD_FEATURE => array("addFeature", 128),
+ TheliaEvents::TEMPLATE_DELETE_FEATURE => array("deleteFeature", 128),
+
);
}
}
\ No newline at end of file
diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml
index 14ab8d4de..059ded5d6 100755
--- a/core/lib/Thelia/Config/Resources/routing/admin.xml
+++ b/core/lib/Thelia/Config/Resources/routing/admin.xml
@@ -234,6 +234,30 @@
Thelia\Controller\Admin\TemplateController::deleteAction
+
+ Thelia\Controller\Admin\TemplateController::getAjaxFeaturesAction
+
+
+
+ Thelia\Controller\Admin\TemplateController::addFeatureAction
+
+
+
+ Thelia\Controller\Admin\TemplateController::deleteFeatureAction
+
+
+
+ Thelia\Controller\Admin\TemplateController::getAjaxAttributesAction
+
+
+
+ Thelia\Controller\Admin\TemplateController::addAttributeAction
+
+
+
+ Thelia\Controller\Admin\TemplateController::deleteAttributeAction
+
+
diff --git a/core/lib/Thelia/Controller/Admin/TemplateController.php b/core/lib/Thelia/Controller/Admin/TemplateController.php
index aafc56e4b..3685a359a 100644
--- a/core/lib/Thelia/Controller/Admin/TemplateController.php
+++ b/core/lib/Thelia/Controller/Admin/TemplateController.php
@@ -35,6 +35,10 @@ use Thelia\Model\TemplateAv;
use Thelia\Model\TemplateAvQuery;
use Thelia\Core\Event\TemplateAvUpdateEvent;
use Thelia\Core\Event\TemplateEvent;
+use Thelia\Core\Event\TemplateDeleteAttributeEvent;
+use Thelia\Core\Event\TemplateAddAttributeEvent;
+use Thelia\Core\Event\TemplateAddFeatureEvent;
+use Thelia\Core\Event\TemplateDeleteFeatureEvent;
/**
* Manages templates sent by mail
@@ -193,4 +197,106 @@ class TemplateController extends AbstractCrudController
return null;
}
+ public function getAjaxFeaturesAction() {
+ return $this->render(
+ 'ajax/template-feature-list',
+ array('template_id' => $this->getRequest()->get('template_id'))
+ );
+ }
+
+ public function getAjaxAttributesAction() {
+ return $this->render(
+ 'ajax/template-attribute-list',
+ array('template_id' => $this->getRequest()->get('template_id'))
+ );
+ }
+
+ public function addAttributeAction() {
+
+ // Check current user authorization
+ if (null !== $response = $this->checkAuth("admin.configuration.template.attribute.add")) return $response;
+
+ $attribute_id = intval($this->getRequest()->get('attribute_id'));
+
+ if ($attribute_id > 0) {
+ $event = new TemplateAddAttributeEvent(
+ $this->getExistingObject(),
+ $attribute_id
+ );
+
+ try {
+ $this->dispatch(TheliaEvents::TEMPLATE_ADD_ATTRIBUTE, $event);
+ } catch (\Exception $ex) {
+ // Any error
+ return $this->errorPage($ex);
+ }
+ }
+
+ $this->redirectToEditionTemplate();
+ }
+
+ public function deleteAttributeAction() {
+
+ // Check current user authorization
+ if (null !== $response = $this->checkAuth("admin.configuration.template.attribute.delete")) return $response;
+
+ $event = new TemplateDeleteAttributeEvent(
+ $this->getExistingObject(),
+ intval($this->getRequest()->get('attribute_id'))
+ );
+
+ try {
+ $this->dispatch(TheliaEvents::TEMPLATE_DELETE_ATTRIBUTE, $event);
+ } catch (\Exception $ex) {
+ // Any error
+ return $this->errorPage($ex);
+ }
+
+ $this->redirectToEditionTemplate();
+ }
+
+ public function addFeatureAction() {
+
+ // Check current user authorization
+ if (null !== $response = $this->checkAuth("admin.configuration.template.feature.add")) return $response;
+
+ $feature_id = intval($this->getRequest()->get('feature_id'));
+
+ if ($feature_id > 0) {
+ $event = new TemplateAddFeatureEvent(
+ $this->getExistingObject(),
+ $feature_id
+ );
+
+ try {
+ $this->dispatch(TheliaEvents::TEMPLATE_ADD_FEATURE, $event);
+ } catch (\Exception $ex) {
+ // Any error
+ return $this->errorPage($ex);
+ }
+ }
+
+ $this->redirectToEditionTemplate();
+ }
+
+ public function deleteFeatureAction() {
+
+ // Check current user authorization
+ if (null !== $response = $this->checkAuth("admin.configuration.template.feature.delete")) return $response;
+
+ $event = new TemplateDeleteFeatureEvent(
+ $this->getExistingObject(),
+ intval($this->getRequest()->get('feature_id'))
+ );
+
+ try {
+ $this->dispatch(TheliaEvents::TEMPLATE_DELETE_FEATURE, $event);
+ } catch (\Exception $ex) {
+ // Any error
+ return $this->errorPage($ex);
+ }
+
+ $this->redirectToEditionTemplate();
+ }
+
}
\ No newline at end of file
diff --git a/core/lib/Thelia/Core/Event/TemplateAddAttributeEvent.php b/core/lib/Thelia/Core/Event/TemplateAddAttributeEvent.php
new file mode 100644
index 000000000..6adebf080
--- /dev/null
+++ b/core/lib/Thelia/Core/Event/TemplateAddAttributeEvent.php
@@ -0,0 +1,51 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Core\Event;
+
+use Thelia\Model\Template;
+class TemplateAddAttributeEvent extends TemplateEvent
+{
+ protected $attribute_id;
+
+ public function __construct(Template $template, $attribute_id)
+ {
+
+ parent::__construct($template);
+
+ $this->attribute_id = $attribute_id;
+ }
+
+ public function getAttributeId()
+ {
+ return $this->attribute_id;
+ }
+
+ public function setAttributeId($attribute_id)
+ {
+ $this->attribute_id = $attribute_id;
+
+ return $this;
+ }
+
+}
diff --git a/core/lib/Thelia/Core/Event/TemplateAddFeatureEvent.php b/core/lib/Thelia/Core/Event/TemplateAddFeatureEvent.php
new file mode 100644
index 000000000..ccfecb95a
--- /dev/null
+++ b/core/lib/Thelia/Core/Event/TemplateAddFeatureEvent.php
@@ -0,0 +1,51 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Core\Event;
+
+use Thelia\Model\Template;
+class TemplateAddFeatureEvent extends TemplateEvent
+{
+ protected $feature_id;
+
+ public function __construct(Template $template, $feature_id)
+ {
+
+ parent::__construct($template);
+
+ $this->feature_id = $feature_id;
+ }
+
+ public function getFeatureId()
+ {
+ return $this->feature_id;
+ }
+
+ public function setFeatureId($feature_id)
+ {
+ $this->feature_id = $feature_id;
+
+ return $this;
+ }
+
+}
diff --git a/core/lib/Thelia/Core/Event/TemplateDeleteAttributeEvent.php b/core/lib/Thelia/Core/Event/TemplateDeleteAttributeEvent.php
new file mode 100644
index 000000000..3df83422d
--- /dev/null
+++ b/core/lib/Thelia/Core/Event/TemplateDeleteAttributeEvent.php
@@ -0,0 +1,51 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Core\Event;
+
+use Thelia\Model\Template;
+
+class TemplateDeleteAttributeEvent extends TemplateEvent
+{
+ protected $attribute_id;
+
+ public function __construct(Template $template, $attribute_id)
+ {
+
+ parent::__construct($template);
+
+ $this->attribute_id = $attribute_id;
+ }
+
+ public function getAttributeId()
+ {
+ return $this->attribute_id;
+ }
+
+ public function setAttributeId($attribute_id)
+ {
+ $this->attribute_id = $attribute_id;
+
+ return $this;
+ }
+}
diff --git a/core/lib/Thelia/Core/Event/TemplateDeleteFeatureEvent.php b/core/lib/Thelia/Core/Event/TemplateDeleteFeatureEvent.php
new file mode 100644
index 000000000..83f73d923
--- /dev/null
+++ b/core/lib/Thelia/Core/Event/TemplateDeleteFeatureEvent.php
@@ -0,0 +1,51 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Core\Event;
+
+use Thelia\Model\Template;
+
+class TemplateDeleteFeatureEvent extends TemplateEvent
+{
+ protected $feature_id;
+
+ public function __construct(Template $template, $feature_id)
+ {
+
+ parent::__construct($template);
+
+ $this->feature_id = $feature_id;
+ }
+
+ public function getFeatureId()
+ {
+ return $this->feature_id;
+ }
+
+ public function setFeatureId($feature_id)
+ {
+ $this->feature_id = $feature_id;
+
+ return $this;
+ }
+}
diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php
index 6708449b5..220b4bf0d 100755
--- a/core/lib/Thelia/Core/Event/TheliaEvents.php
+++ b/core/lib/Thelia/Core/Event/TheliaEvents.php
@@ -343,6 +343,12 @@ final class TheliaEvents
const TEMPLATE_UPDATE = "action.updateTemplate";
const TEMPLATE_DELETE = "action.deleteTemplate";
+ const TEMPLATE_ADD_ATTRIBUTE = "action.templateAddAttribute";
+ const TEMPLATE_DELETE_ATTRIBUTE = "action.templateDeleteAttribute";
+
+ const TEMPLATE_ADD_FEATURE = "action.templateAddFeature";
+ const TEMPLATE_DELETE_FEATURE = "action.templateDeleteFeature";
+
const BEFORE_CREATETEMPLATE = "action.before_createTemplate";
const AFTER_CREATETEMPLATE = "action.after_createTemplate";
diff --git a/core/lib/Thelia/Core/Template/Loop/Attribute.php b/core/lib/Thelia/Core/Template/Loop/Attribute.php
index db9eb9b8f..e2ea7cf0f 100755
--- a/core/lib/Thelia/Core/Template/Loop/Attribute.php
+++ b/core/lib/Thelia/Core/Template/Loop/Attribute.php
@@ -64,6 +64,7 @@ class Attribute extends BaseI18nLoop
Argument::createIntListTypeArgument('id'),
Argument::createIntListTypeArgument('product'),
Argument::createIntListTypeArgument('template'),
+ Argument::createIntListTypeArgument('exclude_template'),
Argument::createIntListTypeArgument('exclude'),
new Argument(
'order',
@@ -115,15 +116,25 @@ class Attribute extends BaseI18nLoop
$template = $productObj->getTemplate();
}
-
// If we have to filter by template, find all attributes assigned to this template, and filter by found IDs
if (null !== $template) {
$search->filterById(
- AttributeTemplateQuery::create()->filterByTemplateId($template)->select('id')->find(),
+ AttributeTemplateQuery::create()->filterByTemplateId($template)->select('attribute_id')->find(),
Criteria::IN
);
}
+ $exclude_template = $this->getExcludeTemplate();
+
+ // If we have to filter by template, find all attributes assigned to this template, and filter by found IDs
+ if (null !== $exclude_template) {
+ // Exclure tous les attribut qui sont attachés aux templates indiqués
+ $search->filterById(
+ AttributeTemplateQuery::create()->filterByTemplateId($exclude_template)->select('attribute_id')->find(),
+ Criteria::NOT_IN
+ );
+ }
+
$orders = $this->getOrder();
foreach ($orders as $order) {
diff --git a/core/lib/Thelia/Core/Template/Loop/Feature.php b/core/lib/Thelia/Core/Template/Loop/Feature.php
index 7f412e4b0..f5c66d2e6 100755
--- a/core/lib/Thelia/Core/Template/Loop/Feature.php
+++ b/core/lib/Thelia/Core/Template/Loop/Feature.php
@@ -38,6 +38,7 @@ use Thelia\Model\Map\ProductCategoryTableMap;
use Thelia\Type\TypeCollection;
use Thelia\Type;
use Thelia\Type\BooleanOrBothType;
+use Thelia\Model\FeatureTemplateQuery;
/**
*
@@ -60,7 +61,8 @@ class Feature extends BaseI18nLoop
return new ArgumentCollection(
Argument::createIntListTypeArgument('id'),
Argument::createIntListTypeArgument('product'),
- Argument::createIntListTypeArgument('category'),
+ Argument::createIntListTypeArgument('template'),
+ Argument::createIntListTypeArgument('exclude_template'),
Argument::createBooleanOrBothTypeArgument('visible', 1),
Argument::createIntListTypeArgument('exclude'),
new Argument(
@@ -102,22 +104,33 @@ class Feature extends BaseI18nLoop
if ($visible != BooleanOrBothType::ANY) $search->filterByVisible($visible);
$product = $this->getProduct();
- $category = $this->getCategory();
+ $template = $this->getTemplate();
if (null !== $product) {
- $productCategories = ProductCategoryQuery::create()->select(array(ProductCategoryTableMap::CATEGORY_ID))->filterByProductId($product, Criteria::IN)->find()->getData();
+ // Find the template assigned to the product.
+ $productObj = ProductQuery::create()->findPk($product);
- if (null === $category) {
- $category = $productCategories;
- } else {
- $category = array_merge($category, $productCategories);
- }
+ // Ignore if the product cannot be found.
+ if ($productObj !== null)
+ $template = $productObj->getTemplate();
+ }
+
+ // If we have to filter by template, find all features assigned to this template, and filter by found IDs
+ if (null !== $template) {
+ $search->filterById(
+ FeatureTemplateQuery::create()->filterByTemplateId($template)->select('feature_id')->find(),
+ Criteria::IN
+ );
}
- if (null !== $category) {
- $search->filterByCategory(
- CategoryQuery::create()->filterById($category)->find(),
- Criteria::IN
+ $exclude_template = $this->getExcludeTemplate();
+
+ // If we have to filter by template, find all features assigned to this template, and filter by found IDs
+ if (null !== $exclude_template) {
+ // Exclure tous les attribut qui sont attachés aux templates indiqués
+ $search->filterById(
+ FeatureTemplateQuery::create()->filterByTemplateId($exclude_template)->select('feature_id')->find(),
+ Criteria::NOT_IN
);
}
diff --git a/templates/admin/default/ajax/template-attribute-list.html b/templates/admin/default/ajax/template-attribute-list.html
index b6379672a..772ed5883 100644
--- a/templates/admin/default/ajax/template-attribute-list.html
+++ b/templates/admin/default/ajax/template-attribute-list.html
@@ -1,15 +1,102 @@
+
+
+
+ {intl l='ID'}
+
+ {intl l='Attribute title'}
+
+ {module_include location='template_attributes_table_header'}
+
+ {intl l="Actions"}
+
+
+
+
+ {loop name="assigned_attributes" type="attribute" template="$template_id" backend_context="1" lang="$edit_language_id"}
+
+ {$ID}
+
+
+ {$TITLE}
+
+
+ {module_include location='template_attributes_table_row'}
+
+
+
+ {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.configuration.template.attribute.delete"}
+
+
+
+ {/loop}
+
+
+
+ {/loop}
+
+ {elseloop rel="assigned_attributes"}
+
+
+
+ {intl l="This template contains no attributes"}
+
+
+
+ {/elseloop}
+
+
+
+{* Delete value confirmation dialog *}
+
+{capture "delete_attribute_dialog"}
+
+
+{/capture}
+
+{include
+ file = "includes/generic-confirm-dialog.html"
+
+ dialog_id = "delete_attribute_dialog"
+ dialog_title = {intl l="Remove attribute"}
+ dialog_message = {intl l="Do you really want to remove this attribute from the template ?"}
+
+ form_action = {url path='/admin/configuration/templates/attributes/delete'}
+ form_content = {$smarty.capture.delete_attribute_dialog nofilter}
+}
+
+
diff --git a/templates/admin/default/ajax/template-feature-list.html b/templates/admin/default/ajax/template-feature-list.html
new file mode 100644
index 000000000..a20ff7125
--- /dev/null
+++ b/templates/admin/default/ajax/template-feature-list.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+ {intl l='ID'}
+
+ {intl l='Feature title'}
+
+ {module_include location='template_features_table_header'}
+
+ {intl l="Actions"}
+
+
+
+
+ {loop name="assigned_features" type="feature" template="$template_id" backend_context="1" lang="$edit_language_id"}
+
+ {$ID}
+
+
+ {$TITLE}
+
+
+ {module_include location='template_features_table_row'}
+
+
+
+ {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.configuration.template.feature.delete"}
+
+
+
+ {/loop}
+
+
+
+ {/loop}
+
+ {elseloop rel="assigned_features"}
+
+
+
+ {intl l="This template contains no features"}
+
+
+
+ {/elseloop}
+
+
+
+{* Delete value confirmation dialog *}
+
+{capture "delete_feature_dialog"}
+
+
+{/capture}
+
+{include
+ file = "includes/generic-confirm-dialog.html"
+
+ dialog_id = "delete_feature_dialog"
+ dialog_title = {intl l="Remove feature"}
+ dialog_message = {intl l="Do you really want to remove this feature from the template ?"}
+
+ form_action = {url path='/admin/configuration/templates/features/delete'}
+ form_content = {$smarty.capture.delete_feature_dialog nofilter}
+}
+
+
diff --git a/templates/admin/default/template-edit.html b/templates/admin/default/template-edit.html
index 0a073b719..7b9ddd4aa 100644
--- a/templates/admin/default/template-edit.html
+++ b/templates/admin/default/template-edit.html
@@ -108,8 +108,8 @@
{/block}
\ No newline at end of file
From 5e8749e0543005128fbc6167ea7cad95262ec026 Mon Sep 17 00:00:00 2001
From: mespeche
Date: Mon, 16 Sep 2013 12:55:34 +0200
Subject: [PATCH 05/24] - Edit country view creation - Delete and edit modalbox
creation - Countries routes management
---
core/lib/Thelia/Config/Resources/config.xml | 3 +
.../Thelia/Config/Resources/routing/admin.xml | 5 +
.../Controller/Admin/CountryController.php | 13 ++
core/lib/Thelia/Form/CountryCreationForm.php | 38 ++++-
.../Thelia/Form/CountryModificationForm.php | 107 +++++++++++++
templates/admin/default/admin-layout.tpl | 1 -
templates/admin/default/countries.html | 58 +++++++-
templates/admin/default/country-edit.html | 140 ++++++++++++++++++
8 files changed, 355 insertions(+), 10 deletions(-)
create mode 100644 core/lib/Thelia/Form/CountryModificationForm.php
diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml
index d8211c6cc..691cf2198 100755
--- a/core/lib/Thelia/Config/Resources/config.xml
+++ b/core/lib/Thelia/Config/Resources/config.xml
@@ -82,6 +82,9 @@
+
+
+
diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml
index 839d84756..eb2fbf3ca 100755
--- a/core/lib/Thelia/Config/Resources/routing/admin.xml
+++ b/core/lib/Thelia/Config/Resources/routing/admin.xml
@@ -302,6 +302,11 @@
Thelia\Controller\Admin\CountryController::createAction
+
+ Thelia\Controller\Admin\CountryController::updateAction
+ \d+
+
+
diff --git a/core/lib/Thelia/Controller/Admin/CountryController.php b/core/lib/Thelia/Controller/Admin/CountryController.php
index 172552893..fadca1e92 100644
--- a/core/lib/Thelia/Controller/Admin/CountryController.php
+++ b/core/lib/Thelia/Controller/Admin/CountryController.php
@@ -36,4 +36,17 @@ class CountryController extends BaseAdminController
return $this->render("countries", array("display_country" => 20));
}
+ /**
+ * update country action
+ *
+ * @param $country_id
+ * @return mixed|\Symfony\Component\HttpFoundation\Response
+ */
+ public function updateAction($country_id)
+ {
+ return $this->render("country-edit", array(
+ "country_id" => $country_id
+ ));
+ }
+
}
\ No newline at end of file
diff --git a/core/lib/Thelia/Form/CountryCreationForm.php b/core/lib/Thelia/Form/CountryCreationForm.php
index 2c56a1b6a..ad6701a64 100644
--- a/core/lib/Thelia/Form/CountryCreationForm.php
+++ b/core/lib/Thelia/Form/CountryCreationForm.php
@@ -34,21 +34,47 @@ class CountryCreationForm extends BaseForm
"constraints" => array(
new NotBlank()
),
- "label" => Translator::getInstance()->trans("Category title *"),
+ "label" => Translator::getInstance()->trans("Country title *"),
"label_attr" => array(
"for" => "title"
)
- ))
- ->add("parent", "integer", array(
+ ))
+ ->add("area", "text", array(
"constraints" => array(
new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Country area *"),
+ "label_attr" => array(
+ "for" => "area"
)
- ))
- ->add("locale", "text", array(
+ ))
+ ->add("isocode", "text", array(
"constraints" => array(
new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("ISO Code *"),
+ "label_attr" => array(
+ "for" => "isocode"
)
- ))
+ ))
+ ->add("isoalpha2", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Alpha code 2 *"),
+ "label_attr" => array(
+ "for" => "isoalpha2"
+ )
+ ))
+ ->add("isoalpha3", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Alpha code 3 *"),
+ "label_attr" => array(
+ "for" => "isoalpha3"
+ )
+ ))
;
}
diff --git a/core/lib/Thelia/Form/CountryModificationForm.php b/core/lib/Thelia/Form/CountryModificationForm.php
new file mode 100644
index 000000000..4c1581664
--- /dev/null
+++ b/core/lib/Thelia/Form/CountryModificationForm.php
@@ -0,0 +1,107 @@
+. */
+/* */
+/*************************************************************************************/
+namespace Thelia\Form;
+
+use Symfony\Component\Validator\Constraints\GreaterThan;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Thelia\Core\Translation\Translator;
+
+class CountryModificationForm extends CurrencyCreationForm
+{
+ protected function buildForm()
+ {
+ parent::buildForm(true);
+
+ $this->formBuilder
+ ->add("id", "hidden", array("constraints" => array(new GreaterThan(array('value' => 0)))))
+ ->add("title", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Country title *"),
+ "label_attr" => array(
+ "for" => "title"
+ )
+ ))
+ ->add("short-description", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Country short description *"),
+ "label_attr" => array(
+ "for" => "short-description"
+ )
+ ))
+ ->add("description", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Country description *"),
+ "label_attr" => array(
+ "for" => "description"
+ )
+ ))
+ ->add("area", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Country area *"),
+ "label_attr" => array(
+ "for" => "area"
+ )
+ ))
+ ->add("isocode", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("ISO Code *"),
+ "label_attr" => array(
+ "for" => "isocode"
+ )
+ ))
+ ->add("isoalpha2", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Alpha code 2 *"),
+ "label_attr" => array(
+ "for" => "isoalpha2"
+ )
+ ))
+ ->add("isoalpha3", "text", array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Alpha code 3 *"),
+ "label_attr" => array(
+ "for" => "isoalpha3"
+ )
+ ))
+ ;
+ }
+
+ public function getName()
+ {
+ return "thelia_country_modification";
+ }
+}
diff --git a/templates/admin/default/admin-layout.tpl b/templates/admin/default/admin-layout.tpl
index 3b97c069b..4cad798fb 100644
--- a/templates/admin/default/admin-layout.tpl
+++ b/templates/admin/default/admin-layout.tpl
@@ -206,7 +206,6 @@
- {intl l='Édité par OpenStudio'}
- {intl l='Forum Thelia'}
- {intl l='Contributions Thelia'}
- {intl l='interface par Steaw-Webdesign '}
{module_include location='in_footer'}
diff --git a/templates/admin/default/countries.html b/templates/admin/default/countries.html
index b3e2254b8..982db557f 100644
--- a/templates/admin/default/countries.html
+++ b/templates/admin/default/countries.html
@@ -124,11 +124,42 @@
{/form_field}
- {form_field form=$form field='parent'}
-
+ {form_field form=$form field='title'}
+
+ {intl l="{$label}"} :
+
+
{/form_field}
-
+ {form_field form=$form field='area'}
+
+ {intl l="{$label}"} :
+
+ {$TITLE}
+
+
+ {/form_field}
+
+ {form_field form=$form field='isocode'}
+
+ {intl l="{$label}"} :
+
+
+ {/form_field}
+
+ {form_field form=$form field='isoalpha2'}
+
+ {intl l="{$label}"} :
+
+
+ {/form_field}
+
+ {form_field form=$form field='isoalpha3'}
+
+ {intl l="{$label}"} :
+
+
+ {/form_field}
{module_include location='country_create_form'}
@@ -150,6 +181,27 @@
}
{/form}
+
+ {* Delete confirmation dialog *}
+
+ {capture "delete_dialog"}
+
+
+ {module_include location='country_delete_form'}
+
+ {/capture}
+
+ {include
+ file = "includes/generic-confirm-dialog.html"
+
+ dialog_id = "delete_dialog"
+ dialog_title = {intl l="Delete country"}
+ dialog_message = {intl l="Do you really want to delete this country ?"}
+
+ form_action = {url path='/admin/configuration/countries/delete'}
+ form_content = {$smarty.capture.delete_dialog nofilter}
+ }
+
{/block}
{block name="javascript-initialization"}
diff --git a/templates/admin/default/country-edit.html b/templates/admin/default/country-edit.html
index e69de29bb..cac7ec0b1 100644
--- a/templates/admin/default/country-edit.html
+++ b/templates/admin/default/country-edit.html
@@ -0,0 +1,140 @@
+{extends file="admin-layout.tpl"}
+
+{block name="page-title"}{intl l='Edit a country'}{/block}
+
+{block name="check-permissions"}admin.configuration.countries.edit{/block}
+
+{block name="main-content"}
+
+
+
+
+ {loop name="country_edit" type="country" id="$country_id" backend_context="1" lang="$edit_language_id"}
+
+
+
+
+
+
+
+
+ {intl l="Edit country $TITLE"}
+
+
+
+
+
+
+
+
+
+ {/loop}
+
+ {elseloop rel="country_edit"}
+
+
+
+ {intl l="Sorry, country ID=$country_id was not found."}
+
+
+
+ {/elseloop}
+
+
+
+{/block}
\ No newline at end of file
From dc807c4df812f53c83ffdf70a0cf5ef61ca0cd1a Mon Sep 17 00:00:00 2001
From: mespeche
Date: Mon, 16 Sep 2013 13:02:57 +0200
Subject: [PATCH 06/24] Add validation button on form
---
templates/admin/default/country-edit.html | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/templates/admin/default/country-edit.html b/templates/admin/default/country-edit.html
index cac7ec0b1..fe1a0f240 100644
--- a/templates/admin/default/country-edit.html
+++ b/templates/admin/default/country-edit.html
@@ -23,7 +23,7 @@
- {intl l="Edit country $TITLE"}
+ {intl l="Edit country $TITLE"}
@@ -111,6 +111,13 @@
{/loop}
+
+
+
+ {intl l="Save"}
+
+
+
{/form}
From 64bd7e17865bfcd8a896275a2bff15703935c59b Mon Sep 17 00:00:00 2001
From: mespeche
Date: Mon, 16 Sep 2013 13:14:37 +0200
Subject: [PATCH 07/24] Change error page design
---
templates/admin/default/general_error.html | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/templates/admin/default/general_error.html b/templates/admin/default/general_error.html
index 2c40f4038..c66f83502 100755
--- a/templates/admin/default/general_error.html
+++ b/templates/admin/default/general_error.html
@@ -10,11 +10,13 @@
From 2021ddfc9e733a64932e1164aea7327f2e625103 Mon Sep 17 00:00:00 2001
From: Etienne Roudeix
Date: Mon, 16 Sep 2013 14:42:00 +0200
Subject: [PATCH 08/24] feed loop is now countable
---
.../lib/Thelia/Core/Template/Element/LoopResult.php | 13 ++++++++++++-
.../Thelia/Core/Template/Element/LoopResultRow.php | 2 +-
core/lib/Thelia/Core/Template/Loop/Feed.php | 11 ++++++++---
3 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/core/lib/Thelia/Core/Template/Element/LoopResult.php b/core/lib/Thelia/Core/Template/Element/LoopResult.php
index f86ab203d..3ca1e91d3 100755
--- a/core/lib/Thelia/Core/Template/Element/LoopResult.php
+++ b/core/lib/Thelia/Core/Template/Element/LoopResult.php
@@ -37,7 +37,7 @@ class LoopResult implements \Iterator
public function __construct($modelCollection = null)
{
$this->position = 0;
- if ($modelCollection instanceof ObjectCollection || $modelCollection instanceof PropelModelPager) {
+ if ($modelCollection instanceof ObjectCollection || $modelCollection instanceof PropelModelPager || is_array($modelCollection)) {
$this->modelCollection = $modelCollection;
}
}
@@ -57,6 +57,17 @@ class LoopResult implements \Iterator
return count($this->collection);
}
+ public function getModelCollectionCount()
+ {
+ if ($this->modelCollection instanceof ObjectCollection || $this->modelCollection instanceof PropelModelPager) {
+ return $this->modelCollection->count();
+ } elseif (is_array($this->modelCollection)) {
+ return count($this->modelCollection);
+ } else {
+ return 0;
+ }
+ }
+
/**
* (PHP 5 >= 5.0.0)
* Return the current element
diff --git a/core/lib/Thelia/Core/Template/Element/LoopResultRow.php b/core/lib/Thelia/Core/Template/Element/LoopResultRow.php
index 15bb287b1..9c4f93586 100755
--- a/core/lib/Thelia/Core/Template/Element/LoopResultRow.php
+++ b/core/lib/Thelia/Core/Template/Element/LoopResultRow.php
@@ -107,7 +107,7 @@ class LoopResultRow
}
if (true === $this->countable) {
$this->set('LOOP_COUNT', 1 + $this->loopResult->getCount());
- $this->set('LOOP_TOTAL', $this->loopResult->modelCollection->count());
+ $this->set('LOOP_TOTAL', $this->loopResult->getModelCollectionCount());
}
}
}
diff --git a/core/lib/Thelia/Core/Template/Loop/Feed.php b/core/lib/Thelia/Core/Template/Loop/Feed.php
index 8e155a666..cf29cf3b7 100755
--- a/core/lib/Thelia/Core/Template/Loop/Feed.php
+++ b/core/lib/Thelia/Core/Template/Loop/Feed.php
@@ -73,9 +73,14 @@ class Feed extends BaseLoop
$limit = min(count($items), $this->getLimit());
- $loopResult = new LoopResult();
-
+ $indexes = array();
for ($idx = 0; $idx < $limit; $idx++) {
+ $indexes[] = $idx;
+ }
+
+ $loopResult = new LoopResult($indexes);
+
+ foreach ($indexes as $idx) {
$item = $items[$idx];
@@ -87,7 +92,7 @@ class Feed extends BaseLoop
$date = $item->get_date('d/m/Y');
- $loopResultRow = new LoopResultRow();
+ $loopResultRow = new LoopResultRow($loopResult, null, $this->versionable, $this->timestampable, $this->countable);
$loopResultRow->set("URL", $item->get_permalink());
$loopResultRow->set("TITLE", $item->get_title());
From 798e5e94a527009288a6b45eabfe790cc42af69f Mon Sep 17 00:00:00 2001
From: mespeche
Date: Mon, 16 Sep 2013 15:14:26 +0200
Subject: [PATCH 09/24] Beautiful login page
---
core/lib/Thelia/Form/AdminLogin.php | 15 ++-
.../admin/default/ajax/thelia_news_feed.html | 33 +++++--
templates/admin/default/login.html | 99 ++++++++++++-------
3 files changed, 99 insertions(+), 48 deletions(-)
diff --git a/core/lib/Thelia/Form/AdminLogin.php b/core/lib/Thelia/Form/AdminLogin.php
index 88b9964e4..00236161d 100755
--- a/core/lib/Thelia/Form/AdminLogin.php
+++ b/core/lib/Thelia/Form/AdminLogin.php
@@ -24,6 +24,7 @@ namespace Thelia\Form;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
+use Thelia\Core\Translation\Translator;
class AdminLogin extends BaseForm
{
@@ -34,15 +35,27 @@ class AdminLogin extends BaseForm
"constraints" => array(
new NotBlank(),
new Length(array("min" => 3))
+ ),
+ "label" => Translator::getInstance()->trans("Username *"),
+ "label_attr" => array(
+ "for" => "username"
)
))
->add("password", "password", array(
"constraints" => array(
new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Password *"),
+ "label_attr" => array(
+ "for" => "password"
)
))
->add("remember_me", "checkbox", array(
- 'value' => 'yes'
+ 'value' => 'yes',
+ "label" => Translator::getInstance()->trans("Remember me ?"),
+ "label_attr" => array(
+ "for" => "remember_me"
+ )
))
;
}
diff --git a/templates/admin/default/ajax/thelia_news_feed.html b/templates/admin/default/ajax/thelia_news_feed.html
index 09b3af020..f1b7e3133 100755
--- a/templates/admin/default/ajax/thelia_news_feed.html
+++ b/templates/admin/default/ajax/thelia_news_feed.html
@@ -1,11 +1,26 @@
{* this temlate is loaded via Ajax in the login page, to prevent login page slowdown *}
-{loop type="feed" name="thelia_feeds" url="http://thelia.net/Flux-rss.html?id_rubrique=8" limit="3"}
-
-
{$DATE}
-
- {* we use unescape:"htmlall" to unescape var before truncate, to prevent a cut in the middel of an HTML entity, eg &ea... *}
-
{$DESCRIPTION|strip_tags|unescape:"htmlall"|truncate:250:"...":true nofilter}
-
{intl l='Lire la suite »'}
-
-{/loop}
+
+ {loop type="feed" name="thelia_feeds" url="http://thelia.net/Flux-rss.html?id_rubrique=8" limit="3"}
+
+
+
+
+
+ {* we use unescape:"htmlall" to unescape var before truncate, to prevent a cut in the middel of an HTML entity, eg &ea... *}
+
{$DESCRIPTION|strip_tags|unescape:"htmlall"|truncate:250:"...":true nofilter}
+
+
+
+
+
+ {/loop}
+
\ No newline at end of file
diff --git a/templates/admin/default/login.html b/templates/admin/default/login.html
index 682d2b954..6bd00c9dc 100755
--- a/templates/admin/default/login.html
+++ b/templates/admin/default/login.html
@@ -6,52 +6,74 @@
{block name="page-title"}{intl l='Welcome'}{/block}
{block name="main-content"}
-
+
+
+
+
+
+
+
+
{intl l='Thelia Back Office'}
-
+
-
- {module_include location='index_middle'}
-
-
-
-
{intl l="Loading Thelia lastest news..."}
+
+
+
+
{intl l="Loading Thelia lastest news..."}
+
+
+
@@ -59,6 +81,7 @@
{module_include location='index_bottom'}
+
{/block}
{block name="javascript-initialization"}
From a58d0fb027d7da886135d539876944f988843b79 Mon Sep 17 00:00:00 2001
From: mespeche
Date: Mon, 16 Sep 2013 15:15:30 +0200
Subject: [PATCH 10/24] Autofocus on username field for better use
---
templates/admin/default/login.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/admin/default/login.html b/templates/admin/default/login.html
index 6bd00c9dc..c30eae514 100755
--- a/templates/admin/default/login.html
+++ b/templates/admin/default/login.html
@@ -37,7 +37,7 @@
{intl l="{$label}"} :
-
+
{/form_field}
From 5ca7136e6d8155308fcf825396e8074c0ddddea4 Mon Sep 17 00:00:00 2001
From: Etienne Roudeix
Date: Mon, 16 Sep 2013 15:30:46 +0200
Subject: [PATCH 11/24] default country
---
core/lib/Thelia/Model/Base/Country.php | 76 ++-
core/lib/Thelia/Model/Base/CountryQuery.php | 47 +-
core/lib/Thelia/Model/Map/CountryTableMap.php | 36 +-
install/insert.sql | 530 +++++++++---------
install/thelia.sql | 191 +++----
local/config/schema.xml | 7 +-
6 files changed, 498 insertions(+), 389 deletions(-)
diff --git a/core/lib/Thelia/Model/Base/Country.php b/core/lib/Thelia/Model/Base/Country.php
index 90fd48880..86cc8220b 100644
--- a/core/lib/Thelia/Model/Base/Country.php
+++ b/core/lib/Thelia/Model/Base/Country.php
@@ -93,6 +93,12 @@ abstract class Country implements ActiveRecordInterface
*/
protected $isoalpha3;
+ /**
+ * The value for the by_default field.
+ * @var int
+ */
+ protected $by_default;
+
/**
* The value for the created_at field.
* @var string
@@ -477,6 +483,17 @@ abstract class Country implements ActiveRecordInterface
return $this->isoalpha3;
}
+ /**
+ * Get the [by_default] column value.
+ *
+ * @return int
+ */
+ public function getByDefault()
+ {
+
+ return $this->by_default;
+ }
+
/**
* Get the [optionally formatted] temporal [created_at] column value.
*
@@ -626,6 +643,27 @@ abstract class Country implements ActiveRecordInterface
return $this;
} // setIsoalpha3()
+ /**
+ * Set the value of [by_default] column.
+ *
+ * @param int $v new value
+ * @return \Thelia\Model\Country The current object (for fluent API support)
+ */
+ public function setByDefault($v)
+ {
+ if ($v !== null) {
+ $v = (int) $v;
+ }
+
+ if ($this->by_default !== $v) {
+ $this->by_default = $v;
+ $this->modifiedColumns[] = CountryTableMap::BY_DEFAULT;
+ }
+
+
+ return $this;
+ } // setByDefault()
+
/**
* Sets the value of [created_at] column to a normalized version of the date/time value specified.
*
@@ -720,13 +758,16 @@ abstract class Country implements ActiveRecordInterface
$col = $row[TableMap::TYPE_NUM == $indexType ? 4 + $startcol : CountryTableMap::translateFieldName('Isoalpha3', TableMap::TYPE_PHPNAME, $indexType)];
$this->isoalpha3 = (null !== $col) ? (string) $col : null;
- $col = $row[TableMap::TYPE_NUM == $indexType ? 5 + $startcol : CountryTableMap::translateFieldName('CreatedAt', TableMap::TYPE_PHPNAME, $indexType)];
+ $col = $row[TableMap::TYPE_NUM == $indexType ? 5 + $startcol : CountryTableMap::translateFieldName('ByDefault', TableMap::TYPE_PHPNAME, $indexType)];
+ $this->by_default = (null !== $col) ? (int) $col : null;
+
+ $col = $row[TableMap::TYPE_NUM == $indexType ? 6 + $startcol : CountryTableMap::translateFieldName('CreatedAt', TableMap::TYPE_PHPNAME, $indexType)];
if ($col === '0000-00-00 00:00:00') {
$col = null;
}
$this->created_at = (null !== $col) ? PropelDateTime::newInstance($col, null, '\DateTime') : null;
- $col = $row[TableMap::TYPE_NUM == $indexType ? 6 + $startcol : CountryTableMap::translateFieldName('UpdatedAt', TableMap::TYPE_PHPNAME, $indexType)];
+ $col = $row[TableMap::TYPE_NUM == $indexType ? 7 + $startcol : CountryTableMap::translateFieldName('UpdatedAt', TableMap::TYPE_PHPNAME, $indexType)];
if ($col === '0000-00-00 00:00:00') {
$col = null;
}
@@ -739,7 +780,7 @@ abstract class Country implements ActiveRecordInterface
$this->ensureConsistency();
}
- return $startcol + 7; // 7 = CountryTableMap::NUM_HYDRATE_COLUMNS.
+ return $startcol + 8; // 8 = CountryTableMap::NUM_HYDRATE_COLUMNS.
} catch (Exception $e) {
throw new PropelException("Error populating \Thelia\Model\Country object", 0, $e);
@@ -1043,6 +1084,9 @@ abstract class Country implements ActiveRecordInterface
if ($this->isColumnModified(CountryTableMap::ISOALPHA3)) {
$modifiedColumns[':p' . $index++] = 'ISOALPHA3';
}
+ if ($this->isColumnModified(CountryTableMap::BY_DEFAULT)) {
+ $modifiedColumns[':p' . $index++] = 'BY_DEFAULT';
+ }
if ($this->isColumnModified(CountryTableMap::CREATED_AT)) {
$modifiedColumns[':p' . $index++] = 'CREATED_AT';
}
@@ -1075,6 +1119,9 @@ abstract class Country implements ActiveRecordInterface
case 'ISOALPHA3':
$stmt->bindValue($identifier, $this->isoalpha3, PDO::PARAM_STR);
break;
+ case 'BY_DEFAULT':
+ $stmt->bindValue($identifier, $this->by_default, PDO::PARAM_INT);
+ break;
case 'CREATED_AT':
$stmt->bindValue($identifier, $this->created_at ? $this->created_at->format("Y-m-d H:i:s") : null, PDO::PARAM_STR);
break;
@@ -1152,9 +1199,12 @@ abstract class Country implements ActiveRecordInterface
return $this->getIsoalpha3();
break;
case 5:
- return $this->getCreatedAt();
+ return $this->getByDefault();
break;
case 6:
+ return $this->getCreatedAt();
+ break;
+ case 7:
return $this->getUpdatedAt();
break;
default:
@@ -1191,8 +1241,9 @@ abstract class Country implements ActiveRecordInterface
$keys[2] => $this->getIsocode(),
$keys[3] => $this->getIsoalpha2(),
$keys[4] => $this->getIsoalpha3(),
- $keys[5] => $this->getCreatedAt(),
- $keys[6] => $this->getUpdatedAt(),
+ $keys[5] => $this->getByDefault(),
+ $keys[6] => $this->getCreatedAt(),
+ $keys[7] => $this->getUpdatedAt(),
);
$virtualColumns = $this->virtualColumns;
foreach($virtualColumns as $key => $virtualColumn)
@@ -1263,9 +1314,12 @@ abstract class Country implements ActiveRecordInterface
$this->setIsoalpha3($value);
break;
case 5:
- $this->setCreatedAt($value);
+ $this->setByDefault($value);
break;
case 6:
+ $this->setCreatedAt($value);
+ break;
+ case 7:
$this->setUpdatedAt($value);
break;
} // switch()
@@ -1297,8 +1351,9 @@ abstract class Country implements ActiveRecordInterface
if (array_key_exists($keys[2], $arr)) $this->setIsocode($arr[$keys[2]]);
if (array_key_exists($keys[3], $arr)) $this->setIsoalpha2($arr[$keys[3]]);
if (array_key_exists($keys[4], $arr)) $this->setIsoalpha3($arr[$keys[4]]);
- if (array_key_exists($keys[5], $arr)) $this->setCreatedAt($arr[$keys[5]]);
- if (array_key_exists($keys[6], $arr)) $this->setUpdatedAt($arr[$keys[6]]);
+ if (array_key_exists($keys[5], $arr)) $this->setByDefault($arr[$keys[5]]);
+ if (array_key_exists($keys[6], $arr)) $this->setCreatedAt($arr[$keys[6]]);
+ if (array_key_exists($keys[7], $arr)) $this->setUpdatedAt($arr[$keys[7]]);
}
/**
@@ -1315,6 +1370,7 @@ abstract class Country implements ActiveRecordInterface
if ($this->isColumnModified(CountryTableMap::ISOCODE)) $criteria->add(CountryTableMap::ISOCODE, $this->isocode);
if ($this->isColumnModified(CountryTableMap::ISOALPHA2)) $criteria->add(CountryTableMap::ISOALPHA2, $this->isoalpha2);
if ($this->isColumnModified(CountryTableMap::ISOALPHA3)) $criteria->add(CountryTableMap::ISOALPHA3, $this->isoalpha3);
+ if ($this->isColumnModified(CountryTableMap::BY_DEFAULT)) $criteria->add(CountryTableMap::BY_DEFAULT, $this->by_default);
if ($this->isColumnModified(CountryTableMap::CREATED_AT)) $criteria->add(CountryTableMap::CREATED_AT, $this->created_at);
if ($this->isColumnModified(CountryTableMap::UPDATED_AT)) $criteria->add(CountryTableMap::UPDATED_AT, $this->updated_at);
@@ -1385,6 +1441,7 @@ abstract class Country implements ActiveRecordInterface
$copyObj->setIsocode($this->getIsocode());
$copyObj->setIsoalpha2($this->getIsoalpha2());
$copyObj->setIsoalpha3($this->getIsoalpha3());
+ $copyObj->setByDefault($this->getByDefault());
$copyObj->setCreatedAt($this->getCreatedAt());
$copyObj->setUpdatedAt($this->getUpdatedAt());
@@ -2287,6 +2344,7 @@ abstract class Country implements ActiveRecordInterface
$this->isocode = null;
$this->isoalpha2 = null;
$this->isoalpha3 = null;
+ $this->by_default = null;
$this->created_at = null;
$this->updated_at = null;
$this->alreadyInSave = false;
diff --git a/core/lib/Thelia/Model/Base/CountryQuery.php b/core/lib/Thelia/Model/Base/CountryQuery.php
index 1e565e9c0..5e60f1821 100644
--- a/core/lib/Thelia/Model/Base/CountryQuery.php
+++ b/core/lib/Thelia/Model/Base/CountryQuery.php
@@ -27,6 +27,7 @@ use Thelia\Model\Map\CountryTableMap;
* @method ChildCountryQuery orderByIsocode($order = Criteria::ASC) Order by the isocode column
* @method ChildCountryQuery orderByIsoalpha2($order = Criteria::ASC) Order by the isoalpha2 column
* @method ChildCountryQuery orderByIsoalpha3($order = Criteria::ASC) Order by the isoalpha3 column
+ * @method ChildCountryQuery orderByByDefault($order = Criteria::ASC) Order by the by_default column
* @method ChildCountryQuery orderByCreatedAt($order = Criteria::ASC) Order by the created_at column
* @method ChildCountryQuery orderByUpdatedAt($order = Criteria::ASC) Order by the updated_at column
*
@@ -35,6 +36,7 @@ use Thelia\Model\Map\CountryTableMap;
* @method ChildCountryQuery groupByIsocode() Group by the isocode column
* @method ChildCountryQuery groupByIsoalpha2() Group by the isoalpha2 column
* @method ChildCountryQuery groupByIsoalpha3() Group by the isoalpha3 column
+ * @method ChildCountryQuery groupByByDefault() Group by the by_default column
* @method ChildCountryQuery groupByCreatedAt() Group by the created_at column
* @method ChildCountryQuery groupByUpdatedAt() Group by the updated_at column
*
@@ -66,6 +68,7 @@ use Thelia\Model\Map\CountryTableMap;
* @method ChildCountry findOneByIsocode(string $isocode) Return the first ChildCountry filtered by the isocode column
* @method ChildCountry findOneByIsoalpha2(string $isoalpha2) Return the first ChildCountry filtered by the isoalpha2 column
* @method ChildCountry findOneByIsoalpha3(string $isoalpha3) Return the first ChildCountry filtered by the isoalpha3 column
+ * @method ChildCountry findOneByByDefault(int $by_default) Return the first ChildCountry filtered by the by_default column
* @method ChildCountry findOneByCreatedAt(string $created_at) Return the first ChildCountry filtered by the created_at column
* @method ChildCountry findOneByUpdatedAt(string $updated_at) Return the first ChildCountry filtered by the updated_at column
*
@@ -74,6 +77,7 @@ use Thelia\Model\Map\CountryTableMap;
* @method array findByIsocode(string $isocode) Return ChildCountry objects filtered by the isocode column
* @method array findByIsoalpha2(string $isoalpha2) Return ChildCountry objects filtered by the isoalpha2 column
* @method array findByIsoalpha3(string $isoalpha3) Return ChildCountry objects filtered by the isoalpha3 column
+ * @method array findByByDefault(int $by_default) Return ChildCountry objects filtered by the by_default column
* @method array findByCreatedAt(string $created_at) Return ChildCountry objects filtered by the created_at column
* @method array findByUpdatedAt(string $updated_at) Return ChildCountry objects filtered by the updated_at column
*
@@ -164,7 +168,7 @@ abstract class CountryQuery extends ModelCriteria
*/
protected function findPkSimple($key, $con)
{
- $sql = 'SELECT ID, AREA_ID, ISOCODE, ISOALPHA2, ISOALPHA3, CREATED_AT, UPDATED_AT FROM country WHERE ID = :p0';
+ $sql = 'SELECT ID, AREA_ID, ISOCODE, ISOALPHA2, ISOALPHA3, BY_DEFAULT, CREATED_AT, UPDATED_AT FROM country WHERE ID = :p0';
try {
$stmt = $con->prepare($sql);
$stmt->bindValue(':p0', $key, PDO::PARAM_INT);
@@ -424,6 +428,47 @@ abstract class CountryQuery extends ModelCriteria
return $this->addUsingAlias(CountryTableMap::ISOALPHA3, $isoalpha3, $comparison);
}
+ /**
+ * Filter the query on the by_default column
+ *
+ * Example usage:
+ *
+ * $query->filterByByDefault(1234); // WHERE by_default = 1234
+ * $query->filterByByDefault(array(12, 34)); // WHERE by_default IN (12, 34)
+ * $query->filterByByDefault(array('min' => 12)); // WHERE by_default > 12
+ *
+ *
+ * @param mixed $byDefault The value to use as filter.
+ * Use scalar values for equality.
+ * Use array values for in_array() equivalent.
+ * Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
+ * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
+ *
+ * @return ChildCountryQuery The current query, for fluid interface
+ */
+ public function filterByByDefault($byDefault = null, $comparison = null)
+ {
+ if (is_array($byDefault)) {
+ $useMinMax = false;
+ if (isset($byDefault['min'])) {
+ $this->addUsingAlias(CountryTableMap::BY_DEFAULT, $byDefault['min'], Criteria::GREATER_EQUAL);
+ $useMinMax = true;
+ }
+ if (isset($byDefault['max'])) {
+ $this->addUsingAlias(CountryTableMap::BY_DEFAULT, $byDefault['max'], Criteria::LESS_EQUAL);
+ $useMinMax = true;
+ }
+ if ($useMinMax) {
+ return $this;
+ }
+ if (null === $comparison) {
+ $comparison = Criteria::IN;
+ }
+ }
+
+ return $this->addUsingAlias(CountryTableMap::BY_DEFAULT, $byDefault, $comparison);
+ }
+
/**
* Filter the query on the created_at column
*
diff --git a/core/lib/Thelia/Model/Map/CountryTableMap.php b/core/lib/Thelia/Model/Map/CountryTableMap.php
index e7c356f08..519af7176 100644
--- a/core/lib/Thelia/Model/Map/CountryTableMap.php
+++ b/core/lib/Thelia/Model/Map/CountryTableMap.php
@@ -57,7 +57,7 @@ class CountryTableMap extends TableMap
/**
* The total number of columns
*/
- const NUM_COLUMNS = 7;
+ const NUM_COLUMNS = 8;
/**
* The number of lazy-loaded columns
@@ -67,7 +67,7 @@ class CountryTableMap extends TableMap
/**
* The number of columns to hydrate (NUM_COLUMNS - NUM_LAZY_LOAD_COLUMNS)
*/
- const NUM_HYDRATE_COLUMNS = 7;
+ const NUM_HYDRATE_COLUMNS = 8;
/**
* the column name for the ID field
@@ -94,6 +94,11 @@ class CountryTableMap extends TableMap
*/
const ISOALPHA3 = 'country.ISOALPHA3';
+ /**
+ * the column name for the BY_DEFAULT field
+ */
+ const BY_DEFAULT = 'country.BY_DEFAULT';
+
/**
* the column name for the CREATED_AT field
*/
@@ -125,12 +130,12 @@ class CountryTableMap extends TableMap
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/
protected static $fieldNames = array (
- self::TYPE_PHPNAME => array('Id', 'AreaId', 'Isocode', 'Isoalpha2', 'Isoalpha3', 'CreatedAt', 'UpdatedAt', ),
- self::TYPE_STUDLYPHPNAME => array('id', 'areaId', 'isocode', 'isoalpha2', 'isoalpha3', 'createdAt', 'updatedAt', ),
- self::TYPE_COLNAME => array(CountryTableMap::ID, CountryTableMap::AREA_ID, CountryTableMap::ISOCODE, CountryTableMap::ISOALPHA2, CountryTableMap::ISOALPHA3, CountryTableMap::CREATED_AT, CountryTableMap::UPDATED_AT, ),
- self::TYPE_RAW_COLNAME => array('ID', 'AREA_ID', 'ISOCODE', 'ISOALPHA2', 'ISOALPHA3', 'CREATED_AT', 'UPDATED_AT', ),
- self::TYPE_FIELDNAME => array('id', 'area_id', 'isocode', 'isoalpha2', 'isoalpha3', 'created_at', 'updated_at', ),
- self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, )
+ self::TYPE_PHPNAME => array('Id', 'AreaId', 'Isocode', 'Isoalpha2', 'Isoalpha3', 'ByDefault', 'CreatedAt', 'UpdatedAt', ),
+ self::TYPE_STUDLYPHPNAME => array('id', 'areaId', 'isocode', 'isoalpha2', 'isoalpha3', 'byDefault', 'createdAt', 'updatedAt', ),
+ self::TYPE_COLNAME => array(CountryTableMap::ID, CountryTableMap::AREA_ID, CountryTableMap::ISOCODE, CountryTableMap::ISOALPHA2, CountryTableMap::ISOALPHA3, CountryTableMap::BY_DEFAULT, CountryTableMap::CREATED_AT, CountryTableMap::UPDATED_AT, ),
+ self::TYPE_RAW_COLNAME => array('ID', 'AREA_ID', 'ISOCODE', 'ISOALPHA2', 'ISOALPHA3', 'BY_DEFAULT', 'CREATED_AT', 'UPDATED_AT', ),
+ self::TYPE_FIELDNAME => array('id', 'area_id', 'isocode', 'isoalpha2', 'isoalpha3', 'by_default', 'created_at', 'updated_at', ),
+ self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, )
);
/**
@@ -140,12 +145,12 @@ class CountryTableMap extends TableMap
* e.g. self::$fieldKeys[self::TYPE_PHPNAME]['Id'] = 0
*/
protected static $fieldKeys = array (
- self::TYPE_PHPNAME => array('Id' => 0, 'AreaId' => 1, 'Isocode' => 2, 'Isoalpha2' => 3, 'Isoalpha3' => 4, 'CreatedAt' => 5, 'UpdatedAt' => 6, ),
- self::TYPE_STUDLYPHPNAME => array('id' => 0, 'areaId' => 1, 'isocode' => 2, 'isoalpha2' => 3, 'isoalpha3' => 4, 'createdAt' => 5, 'updatedAt' => 6, ),
- self::TYPE_COLNAME => array(CountryTableMap::ID => 0, CountryTableMap::AREA_ID => 1, CountryTableMap::ISOCODE => 2, CountryTableMap::ISOALPHA2 => 3, CountryTableMap::ISOALPHA3 => 4, CountryTableMap::CREATED_AT => 5, CountryTableMap::UPDATED_AT => 6, ),
- self::TYPE_RAW_COLNAME => array('ID' => 0, 'AREA_ID' => 1, 'ISOCODE' => 2, 'ISOALPHA2' => 3, 'ISOALPHA3' => 4, 'CREATED_AT' => 5, 'UPDATED_AT' => 6, ),
- self::TYPE_FIELDNAME => array('id' => 0, 'area_id' => 1, 'isocode' => 2, 'isoalpha2' => 3, 'isoalpha3' => 4, 'created_at' => 5, 'updated_at' => 6, ),
- self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, )
+ self::TYPE_PHPNAME => array('Id' => 0, 'AreaId' => 1, 'Isocode' => 2, 'Isoalpha2' => 3, 'Isoalpha3' => 4, 'ByDefault' => 5, 'CreatedAt' => 6, 'UpdatedAt' => 7, ),
+ self::TYPE_STUDLYPHPNAME => array('id' => 0, 'areaId' => 1, 'isocode' => 2, 'isoalpha2' => 3, 'isoalpha3' => 4, 'byDefault' => 5, 'createdAt' => 6, 'updatedAt' => 7, ),
+ self::TYPE_COLNAME => array(CountryTableMap::ID => 0, CountryTableMap::AREA_ID => 1, CountryTableMap::ISOCODE => 2, CountryTableMap::ISOALPHA2 => 3, CountryTableMap::ISOALPHA3 => 4, CountryTableMap::BY_DEFAULT => 5, CountryTableMap::CREATED_AT => 6, CountryTableMap::UPDATED_AT => 7, ),
+ self::TYPE_RAW_COLNAME => array('ID' => 0, 'AREA_ID' => 1, 'ISOCODE' => 2, 'ISOALPHA2' => 3, 'ISOALPHA3' => 4, 'BY_DEFAULT' => 5, 'CREATED_AT' => 6, 'UPDATED_AT' => 7, ),
+ self::TYPE_FIELDNAME => array('id' => 0, 'area_id' => 1, 'isocode' => 2, 'isoalpha2' => 3, 'isoalpha3' => 4, 'by_default' => 5, 'created_at' => 6, 'updated_at' => 7, ),
+ self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, )
);
/**
@@ -169,6 +174,7 @@ class CountryTableMap extends TableMap
$this->addColumn('ISOCODE', 'Isocode', 'VARCHAR', true, 4, null);
$this->addColumn('ISOALPHA2', 'Isoalpha2', 'VARCHAR', false, 2, null);
$this->addColumn('ISOALPHA3', 'Isoalpha3', 'VARCHAR', false, 4, null);
+ $this->addColumn('BY_DEFAULT', 'ByDefault', 'TINYINT', false, null, null);
$this->addColumn('CREATED_AT', 'CreatedAt', 'TIMESTAMP', false, null, null);
$this->addColumn('UPDATED_AT', 'UpdatedAt', 'TIMESTAMP', false, null, null);
} // initialize()
@@ -351,6 +357,7 @@ class CountryTableMap extends TableMap
$criteria->addSelectColumn(CountryTableMap::ISOCODE);
$criteria->addSelectColumn(CountryTableMap::ISOALPHA2);
$criteria->addSelectColumn(CountryTableMap::ISOALPHA3);
+ $criteria->addSelectColumn(CountryTableMap::BY_DEFAULT);
$criteria->addSelectColumn(CountryTableMap::CREATED_AT);
$criteria->addSelectColumn(CountryTableMap::UPDATED_AT);
} else {
@@ -359,6 +366,7 @@ class CountryTableMap extends TableMap
$criteria->addSelectColumn($alias . '.ISOCODE');
$criteria->addSelectColumn($alias . '.ISOALPHA2');
$criteria->addSelectColumn($alias . '.ISOALPHA3');
+ $criteria->addSelectColumn($alias . '.BY_DEFAULT');
$criteria->addSelectColumn($alias . '.CREATED_AT');
$criteria->addSelectColumn($alias . '.UPDATED_AT');
}
diff --git a/install/insert.sql b/install/insert.sql
index 03fbc690c..1b8327a10 100755
--- a/install/insert.sql
+++ b/install/insert.sql
@@ -59,271 +59,271 @@ VALUES
(3, 'en_US', 'UK Pound');
-INSERT INTO `country` (`id`, `area_id`, `isocode`, `isoalpha2`, `isoalpha3`, `created_at`, `updated_at`) VALUES
-(1, NULL, '4', 'AF', 'AFG', NOW(), NOW()),
-(2, NULL, '710', 'ZA', 'ZAF', NOW(), NOW()),
-(3, NULL, '8', 'AL', 'ALB', NOW(), NOW()),
-(4, NULL, '12', 'DZ', 'DZA', NOW(), NOW()),
-(5, NULL, '276', 'DE', 'DEU', NOW(), NOW()),
-(6, NULL, '20', 'AD', 'AND', NOW(), NOW()),
-(7, NULL, '24', 'AO', 'AGO', NOW(), NOW()),
-(8, NULL, '28', 'AG', 'ATG', NOW(), NOW()),
-(9, NULL, '682', 'SA', 'SAU', NOW(), NOW()),
-(10, NULL, '32', 'AR', 'ARG', NOW(), NOW()),
-(11, NULL, '51', 'AM', 'ARM', NOW(), NOW()),
-(12, NULL, '36', 'AU', 'AUS', NOW(), NOW()),
-(13, NULL, '40', 'AT', 'AUT', NOW(), NOW()),
-(14, NULL, '31', 'AZ', 'AZE', NOW(), NOW()),
-(15, NULL, '44', 'BS', 'BHS', NOW(), NOW()),
-(16, NULL, '48', 'BR', 'BHR', NOW(), NOW()),
-(17, NULL, '50', 'BD', 'BGD', NOW(), NOW()),
-(18, NULL, '52', 'BB', 'BRB', NOW(), NOW()),
-(19, NULL, '585', 'PW', 'PLW', NOW(), NOW()),
-(20, NULL, '56', 'BE', 'BEL', NOW(), NOW()),
-(21, NULL, '84', 'BL', 'BLZ', NOW(), NOW()),
-(22, NULL, '204', 'BJ', 'BEN', NOW(), NOW()),
-(23, NULL, '64', 'BT', 'BTN', NOW(), NOW()),
-(24, NULL, '112', 'BY', 'BLR', NOW(), NOW()),
-(25, NULL, '104', 'MM', 'MMR', NOW(), NOW()),
-(26, NULL, '68', 'BO', 'BOL', NOW(), NOW()),
-(27, NULL, '70', 'BA', 'BIH', NOW(), NOW()),
-(28, NULL, '72', 'BW', 'BWA', NOW(), NOW()),
-(29, NULL, '76', 'BR', 'BRA', NOW(), NOW()),
-(30, NULL, '96', 'BN', 'BRN', NOW(), NOW()),
-(31, NULL, '100', 'BG', 'BGR', NOW(), NOW()),
-(32, NULL, '854', 'BF', 'BFA', NOW(), NOW()),
-(33, NULL, '108', 'BI', 'BDI', NOW(), NOW()),
-(34, NULL, '116', 'KH', 'KHM', NOW(), NOW()),
-(35, NULL, '120', 'CM', 'CMR', NOW(), NOW()),
-(37, NULL, '132', 'CV', 'CPV', NOW(), NOW()),
-(38, NULL, '152', 'CL', 'CHL', NOW(), NOW()),
-(39, NULL, '156', 'CN', 'CHN', NOW(), NOW()),
-(40, NULL, '196', 'CY', 'CYP', NOW(), NOW()),
-(41, NULL, '170', 'CO', 'COL', NOW(), NOW()),
-(42, NULL, '174', 'KM', 'COM', NOW(), NOW()),
-(43, NULL, '178', 'CG', 'COG', NOW(), NOW()),
-(44, NULL, '184', 'CK', 'COK', NOW(), NOW()),
-(45, NULL, '408', 'KP', 'PRK', NOW(), NOW()),
-(46, NULL, '410', 'KR', 'KOR', NOW(), NOW()),
-(47, NULL, '188', 'CR', 'CRI', NOW(), NOW()),
-(48, NULL, '384', 'CI', 'CIV', NOW(), NOW()),
-(49, NULL, '191', 'HR', 'HRV', NOW(), NOW()),
-(50, NULL, '192', 'CU', 'CUB', NOW(), NOW()),
-(51, NULL, '208', 'DK', 'DNK', NOW(), NOW()),
-(52, NULL, '262', 'DJ', 'DJI', NOW(), NOW()),
-(53, NULL, '212', 'DM', 'DMA', NOW(), NOW()),
-(54, NULL, '818', 'EG', 'EGY', NOW(), NOW()),
-(55, NULL, '784', 'AE', 'ARE', NOW(), NOW()),
-(56, NULL, '218', 'EC', 'ECU', NOW(), NOW()),
-(57, NULL, '232', 'ER', 'ERI', NOW(), NOW()),
-(58, NULL, '724', 'ES', 'ESP', NOW(), NOW()),
-(59, NULL, '233', 'EE', 'EST', NOW(), NOW()),
-(61, NULL, '231', 'ET', 'ETH', NOW(), NOW()),
-(62, NULL, '242', 'FJ', 'FJI', NOW(), NOW()),
-(63, NULL, '246', 'FI', 'FIN', NOW(), NOW()),
-(64, NULL, '250', 'FR', 'FRA', NOW(), NOW()),
-(65, NULL, '266', 'GA', 'GAB', NOW(), NOW()),
-(66, NULL, '270', 'GM', 'GMB', NOW(), NOW()),
-(67, NULL, '268', 'GE', 'GEO', NOW(), NOW()),
-(68, NULL, '288', 'GH', 'GHA', NOW(), NOW()),
-(69, NULL, '300', 'GR', 'GRC', NOW(), NOW()),
-(70, NULL, '308', 'GD', 'GRD', NOW(), NOW()),
-(71, NULL, '320', 'GT', 'GTM', NOW(), NOW()),
-(72, NULL, '324', 'GN', 'GIN', NOW(), NOW()),
-(73, NULL, '624', 'GW', 'GNB', NOW(), NOW()),
-(74, NULL, '226', 'GQ', 'GNQ', NOW(), NOW()),
-(75, NULL, '328', 'GY', 'GUY', NOW(), NOW()),
-(76, NULL, '332', 'HT', 'HTI', NOW(), NOW()),
-(77, NULL, '340', 'HN', 'HND', NOW(), NOW()),
-(78, NULL, '348', 'HU', 'HUN', NOW(), NOW()),
-(79, NULL, '356', 'IN', 'IND', NOW(), NOW()),
-(80, NULL, '360', 'ID', 'IDN', NOW(), NOW()),
-(81, NULL, '364', 'IR', 'IRN', NOW(), NOW()),
-(82, NULL, '368', 'IQ', 'IRQ', NOW(), NOW()),
-(83, NULL, '372', 'IE', 'IRL', NOW(), NOW()),
-(84, NULL, '352', 'IS', 'ISL', NOW(), NOW()),
-(85, NULL, '376', 'IL', 'ISR', NOW(), NOW()),
-(86, NULL, '380', 'IT', 'ITA', NOW(), NOW()),
-(87, NULL, '388', 'JM', 'JAM', NOW(), NOW()),
-(88, NULL, '392', 'JP', 'JPN', NOW(), NOW()),
-(89, NULL, '400', 'JO', 'JOR', NOW(), NOW()),
-(90, NULL, '398', 'KZ', 'KAZ', NOW(), NOW()),
-(91, NULL, '404', 'KE', 'KEN', NOW(), NOW()),
-(92, NULL, '417', 'KG', 'KGZ', NOW(), NOW()),
-(93, NULL, '296', 'KI', 'KIR', NOW(), NOW()),
-(94, NULL, '414', 'KW', 'KWT', NOW(), NOW()),
-(95, NULL, '418', 'LA', 'LAO', NOW(), NOW()),
-(96, NULL, '426', 'LS', 'LSO', NOW(), NOW()),
-(97, NULL, '428', 'LV', 'LVA', NOW(), NOW()),
-(98, NULL, '422', 'LB', 'LBN', NOW(), NOW()),
-(99, NULL, '430', 'LR', 'LBR', NOW(), NOW()),
-(100, NULL, '343', 'LY', 'LBY', NOW(), NOW()),
-(101, NULL, '438', 'LI', 'LIE', NOW(), NOW()),
-(102, NULL, '440', 'LT', 'LTU', NOW(), NOW()),
-(103, NULL, '442', 'LU', 'LUX', NOW(), NOW()),
-(104, NULL, '807', 'MK', 'MKD', NOW(), NOW()),
-(105, NULL, '450', 'MD', 'MDG', NOW(), NOW()),
-(106, NULL, '458', 'MY', 'MYS', NOW(), NOW()),
-(107, NULL, '454', 'MW', 'MWI', NOW(), NOW()),
-(108, NULL, '462', 'MV', 'MDV', NOW(), NOW()),
-(109, NULL, '466', 'ML', 'MLI', NOW(), NOW()),
-(110, NULL, '470', 'MT', 'MLT', NOW(), NOW()),
-(111, NULL, '504', 'MA', 'MAR', NOW(), NOW()),
-(112, NULL, '584', 'MH', 'MHL', NOW(), NOW()),
-(113, NULL, '480', 'MU', 'MUS', NOW(), NOW()),
-(114, NULL, '478', 'MR', 'MRT', NOW(), NOW()),
-(115, NULL, '484', 'MX', 'MEX', NOW(), NOW()),
-(116, NULL, '583', 'FM', 'FSM', NOW(), NOW()),
-(117, NULL, '498', 'MD', 'MDA', NOW(), NOW()),
-(118, NULL, '492', 'MC', 'MCO', NOW(), NOW()),
-(119, NULL, '496', 'MN', 'MNG', NOW(), NOW()),
-(120, NULL, '508', 'MZ', 'MOZ', NOW(), NOW()),
-(121, NULL, '516', 'NA', 'NAM', NOW(), NOW()),
-(122, NULL, '520', 'NR', 'NRU', NOW(), NOW()),
-(123, NULL, '524', 'NP', 'NPL', NOW(), NOW()),
-(124, NULL, '558', 'NI', 'NIC', NOW(), NOW()),
-(125, NULL, '562', 'NE', 'NER', NOW(), NOW()),
-(126, NULL, '566', 'NG', 'NGA', NOW(), NOW()),
-(127, NULL, '570', 'NU', 'NIU', NOW(), NOW()),
-(128, NULL, '578', 'NO', 'NOR', NOW(), NOW()),
-(129, NULL, '554', 'NZ', 'NZL', NOW(), NOW()),
-(130, NULL, '512', 'OM', 'OMN', NOW(), NOW()),
-(131, NULL, '800', 'UG', 'UGA', NOW(), NOW()),
-(132, NULL, '860', 'UZ', 'UZB', NOW(), NOW()),
-(133, NULL, '586', 'PK', 'PAK', NOW(), NOW()),
-(134, NULL, '591', 'PA', 'PAN', NOW(), NOW()),
-(135, NULL, '598', 'PG', 'PNG', NOW(), NOW()),
-(136, NULL, '600', 'PY', 'PRY', NOW(), NOW()),
-(137, NULL, '528', 'NL', 'NLD', NOW(), NOW()),
-(138, NULL, '604', 'PE', 'PER', NOW(), NOW()),
-(139, NULL, '608', 'PH', 'PHL', NOW(), NOW()),
-(140, NULL, '616', 'PL', 'POL', NOW(), NOW()),
-(141, NULL, '620', 'PT', 'PRT', NOW(), NOW()),
-(142, NULL, '634', 'QA', 'QAT', NOW(), NOW()),
-(143, NULL, '140', 'CF', 'CAF', NOW(), NOW()),
-(144, NULL, '214', 'DO', 'DOM', NOW(), NOW()),
-(145, NULL, '203', 'CZ', 'CZE', NOW(), NOW()),
-(146, NULL, '642', 'RO', 'ROU', NOW(), NOW()),
-(147, NULL, '826', 'GB', 'GBR', NOW(), NOW()),
-(148, NULL, '643', 'RU', 'RUS', NOW(), NOW()),
-(149, NULL, '646', 'RW', 'RWA', NOW(), NOW()),
-(150, NULL, '659', 'KN', 'KNA', NOW(), NOW()),
-(151, NULL, '662', 'LC', 'LCA', NOW(), NOW()),
-(152, NULL, '674', 'SM', 'SMR', NOW(), NOW()),
-(153, NULL, '670', 'VC', 'VCT', NOW(), NOW()),
-(154, NULL, '90', 'SB', 'SLB', NOW(), NOW()),
-(155, NULL, '222', 'SV', 'SLV', NOW(), NOW()),
-(156, NULL, '882', 'WS', 'WSM', NOW(), NOW()),
-(157, NULL, '678', 'ST', 'STP', NOW(), NOW()),
-(158, NULL, '686', 'SN', 'SEN', NOW(), NOW()),
-(159, NULL, '690', 'SC', 'SYC', NOW(), NOW()),
-(160, NULL, '694', 'SL', 'SLE', NOW(), NOW()),
-(161, NULL, '702', 'SG', 'SGP', NOW(), NOW()),
-(162, NULL, '703', 'SK', 'SVK', NOW(), NOW()),
-(163, NULL, '705', 'SI', 'SVN', NOW(), NOW()),
-(164, NULL, '706', 'SO', 'SOM', NOW(), NOW()),
-(165, NULL, '729', 'SD', 'SDN', NOW(), NOW()),
-(166, NULL, '144', 'LK', 'LKA', NOW(), NOW()),
-(167, NULL, '752', 'SE', 'SWE', NOW(), NOW()),
-(168, NULL, '756', 'CH', 'CHE', NOW(), NOW()),
-(169, NULL, '740', 'SR', 'SUR', NOW(), NOW()),
-(170, NULL, '748', 'SZ', 'SWZ', NOW(), NOW()),
-(171, NULL, '760', 'SY', 'SYR', NOW(), NOW()),
-(172, NULL, '762', 'TJ', 'TJK', NOW(), NOW()),
-(173, NULL, '834', 'TZ', 'TZA', NOW(), NOW()),
-(174, NULL, '148', 'TD', 'TCD', NOW(), NOW()),
-(175, NULL, '764', 'TH', 'THA', NOW(), NOW()),
-(176, NULL, '768', 'TG', 'TGO', NOW(), NOW()),
-(177, NULL, '776', 'TO', 'TON', NOW(), NOW()),
-(178, NULL, '780', 'TT', 'TTO', NOW(), NOW()),
-(179, NULL, '788', 'TN', 'TUN', NOW(), NOW()),
-(180, NULL, '795', 'TM', 'TKM', NOW(), NOW()),
-(181, NULL, '792', 'TR', 'TUR', NOW(), NOW()),
-(182, NULL, '798', 'TV', 'TUV', NOW(), NOW()),
-(183, NULL, '804', 'UA', 'UKR', NOW(), NOW()),
-(184, NULL, '858', 'UY', 'URY', NOW(), NOW()),
-(185, NULL, '336', 'VA', 'VAT', NOW(), NOW()),
-(186, NULL, '548', 'VU', 'VUT', NOW(), NOW()),
-(187, NULL, '862', 'VE', 'VEN', NOW(), NOW()),
-(188, NULL, '704', 'VN', 'VNM', NOW(), NOW()),
-(189, NULL, '887', 'YE', 'YEM', NOW(), NOW()),
-(190, NULL, '807', 'MK', 'MKD', NOW(), NOW()),
-(191, NULL, '180', 'CD', 'COD', NOW(), NOW()),
-(192, NULL, '894', 'ZM', 'ZMB', NOW(), NOW()),
-(193, NULL, '716', 'ZW', 'ZWE', NOW(), NOW()),
-(196, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(197, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(198, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(199, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(200, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(201, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(202, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(203, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(204, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(205, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(206, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(207, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(208, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(209, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(210, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(211, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(212, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(213, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(214, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(215, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(216, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(217, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(218, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(219, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(220, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(221, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(222, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(223, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(224, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(225, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(226, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(227, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(228, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(229, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(230, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(231, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(232, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(233, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(234, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(235, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(236, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(237, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(238, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(239, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(240, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(241, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(242, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(243, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(244, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(245, NULL, '840', 'US', 'USA', NOW(), NOW()),
-(246, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(247, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(248, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(249, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(250, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(251, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(252, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(253, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(254, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(255, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(256, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(257, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(258, NULL, '124', 'CA', 'CAN', NOW(), NOW()),
-(259, NULL, '312', 'GP', 'GLP', NOW(), NOW()),
-(260, NULL, '254', 'GF', 'GUF', NOW(), NOW()),
-(261, NULL, '474', 'MQ', 'MTQ', NOW(), NOW()),
-(262, NULL, '175', 'YT', 'MYT', NOW(), NOW()),
-(263, NULL, '638', 'RE', 'REU', NOW(), NOW()),
-(264, NULL, '666', 'PM', 'SPM', NOW(), NOW()),
-(265, NULL, '540', 'NC', 'NCL', NOW(), NOW()),
-(266, NULL, '258', 'PF', 'PYF', NOW(), NOW()),
-(267, NULL, '876', 'WF', 'WLF', NOW(), NOW()),
-(268, NULL, '840', 'US', 'USA', NOW(), NOW());
+INSERT INTO `country` (`id`, `area_id`, `isocode`, `isoalpha2`, `isoalpha3`, `by_default`, `created_at`, `updated_at`) VALUES
+(1, NULL, '4', 'AF', 'AFG', 0, NOW(), NOW()),
+(2, NULL, '710', 'ZA', 'ZAF', 0, NOW(), NOW()),
+(3, NULL, '8', 'AL', 'ALB', 0, NOW(), NOW()),
+(4, NULL, '12', 'DZ', 'DZA', 0, NOW(), NOW()),
+(5, NULL, '276', 'DE', 'DEU', 0, NOW(), NOW()),
+(6, NULL, '20', 'AD', 'AND', 0, NOW(), NOW()),
+(7, NULL, '24', 'AO', 'AGO', 0, NOW(), NOW()),
+(8, NULL, '28', 'AG', 'ATG', 0, NOW(), NOW()),
+(9, NULL, '682', 'SA', 'SAU', 0, NOW(), NOW()),
+(10, NULL, '32', 'AR', 'ARG', 0, NOW(), NOW()),
+(11, NULL, '51', 'AM', 'ARM', 0, NOW(), NOW()),
+(12, NULL, '36', 'AU', 'AUS', 0, NOW(), NOW()),
+(13, NULL, '40', 'AT', 'AUT', 0, NOW(), NOW()),
+(14, NULL, '31', 'AZ', 'AZE', 0, NOW(), NOW()),
+(15, NULL, '44', 'BS', 'BHS', 0, NOW(), NOW()),
+(16, NULL, '48', 'BR', 'BHR', 0, NOW(), NOW()),
+(17, NULL, '50', 'BD', 'BGD', 0, NOW(), NOW()),
+(18, NULL, '52', 'BB', 'BRB', 0, NOW(), NOW()),
+(19, NULL, '585', 'PW', 'PLW', 0, NOW(), NOW()),
+(20, NULL, '56', 'BE', 'BEL', 0, NOW(), NOW()),
+(21, NULL, '84', 'BL', 'BLZ', 0, NOW(), NOW()),
+(22, NULL, '204', 'BJ', 'BEN', 0, NOW(), NOW()),
+(23, NULL, '64', 'BT', 'BTN', 0, NOW(), NOW()),
+(24, NULL, '112', 'BY', 'BLR', 0, NOW(), NOW()),
+(25, NULL, '104', 'MM', 'MMR', 0, NOW(), NOW()),
+(26, NULL, '68', 'BO', 'BOL', 0, NOW(), NOW()),
+(27, NULL, '70', 'BA', 'BIH', 0, NOW(), NOW()),
+(28, NULL, '72', 'BW', 'BWA', 0, NOW(), NOW()),
+(29, NULL, '76', 'BR', 'BRA', 0, NOW(), NOW()),
+(30, NULL, '96', 'BN', 'BRN', 0, NOW(), NOW()),
+(31, NULL, '100', 'BG', 'BGR', 0, NOW(), NOW()),
+(32, NULL, '854', 'BF', 'BFA', 0, NOW(), NOW()),
+(33, NULL, '108', 'BI', 'BDI', 0, NOW(), NOW()),
+(34, NULL, '116', 'KH', 'KHM', 0, NOW(), NOW()),
+(35, NULL, '120', 'CM', 'CMR', 0, NOW(), NOW()),
+(37, NULL, '132', 'CV', 'CPV', 0, NOW(), NOW()),
+(38, NULL, '152', 'CL', 'CHL', 0, NOW(), NOW()),
+(39, NULL, '156', 'CN', 'CHN', 0, NOW(), NOW()),
+(40, NULL, '196', 'CY', 'CYP', 0, NOW(), NOW()),
+(41, NULL, '170', 'CO', 'COL', 0, NOW(), NOW()),
+(42, NULL, '174', 'KM', 'COM', 0, NOW(), NOW()),
+(43, NULL, '178', 'CG', 'COG', 0, NOW(), NOW()),
+(44, NULL, '184', 'CK', 'COK', 0, NOW(), NOW()),
+(45, NULL, '408', 'KP', 'PRK', 0, NOW(), NOW()),
+(46, NULL, '410', 'KR', 'KOR', 0, NOW(), NOW()),
+(47, NULL, '188', 'CR', 'CRI', 0, NOW(), NOW()),
+(48, NULL, '384', 'CI', 'CIV', 0, NOW(), NOW()),
+(49, NULL, '191', 'HR', 'HRV', 0, NOW(), NOW()),
+(50, NULL, '192', 'CU', 'CUB', 0, NOW(), NOW()),
+(51, NULL, '208', 'DK', 'DNK', 0, NOW(), NOW()),
+(52, NULL, '262', 'DJ', 'DJI', 0, NOW(), NOW()),
+(53, NULL, '212', 'DM', 'DMA', 0, NOW(), NOW()),
+(54, NULL, '818', 'EG', 'EGY', 0, NOW(), NOW()),
+(55, NULL, '784', 'AE', 'ARE', 0, NOW(), NOW()),
+(56, NULL, '218', 'EC', 'ECU', 0, NOW(), NOW()),
+(57, NULL, '232', 'ER', 'ERI', 0, NOW(), NOW()),
+(58, NULL, '724', 'ES', 'ESP', 0, NOW(), NOW()),
+(59, NULL, '233', 'EE', 'EST', 0, NOW(), NOW()),
+(61, NULL, '231', 'ET', 'ETH', 0, NOW(), NOW()),
+(62, NULL, '242', 'FJ', 'FJI', 0, NOW(), NOW()),
+(63, NULL, '246', 'FI', 'FIN', 0, NOW(), NOW()),
+(64, NULL, '250', 'FR', 'FRA', 1, NOW(), NOW()),
+(65, NULL, '266', 'GA', 'GAB', 0, NOW(), NOW()),
+(66, NULL, '270', 'GM', 'GMB', 0, NOW(), NOW()),
+(67, NULL, '268', 'GE', 'GEO', 0, NOW(), NOW()),
+(68, NULL, '288', 'GH', 'GHA', 0, NOW(), NOW()),
+(69, NULL, '300', 'GR', 'GRC', 0, NOW(), NOW()),
+(70, NULL, '308', 'GD', 'GRD', 0, NOW(), NOW()),
+(71, NULL, '320', 'GT', 'GTM', 0, NOW(), NOW()),
+(72, NULL, '324', 'GN', 'GIN', 0, NOW(), NOW()),
+(73, NULL, '624', 'GW', 'GNB', 0, NOW(), NOW()),
+(74, NULL, '226', 'GQ', 'GNQ', 0, NOW(), NOW()),
+(75, NULL, '328', 'GY', 'GUY', 0, NOW(), NOW()),
+(76, NULL, '332', 'HT', 'HTI', 0, NOW(), NOW()),
+(77, NULL, '340', 'HN', 'HND', 0, NOW(), NOW()),
+(78, NULL, '348', 'HU', 'HUN', 0, NOW(), NOW()),
+(79, NULL, '356', 'IN', 'IND', 0, NOW(), NOW()),
+(80, NULL, '360', 'ID', 'IDN', 0, NOW(), NOW()),
+(81, NULL, '364', 'IR', 'IRN', 0, NOW(), NOW()),
+(82, NULL, '368', 'IQ', 'IRQ', 0, NOW(), NOW()),
+(83, NULL, '372', 'IE', 'IRL', 0, NOW(), NOW()),
+(84, NULL, '352', 'IS', 'ISL', 0, NOW(), NOW()),
+(85, NULL, '376', 'IL', 'ISR', 0, NOW(), NOW()),
+(86, NULL, '380', 'IT', 'ITA', 0, NOW(), NOW()),
+(87, NULL, '388', 'JM', 'JAM', 0, NOW(), NOW()),
+(88, NULL, '392', 'JP', 'JPN', 0, NOW(), NOW()),
+(89, NULL, '400', 'JO', 'JOR', 0, NOW(), NOW()),
+(90, NULL, '398', 'KZ', 'KAZ', 0, NOW(), NOW()),
+(91, NULL, '404', 'KE', 'KEN', 0, NOW(), NOW()),
+(92, NULL, '417', 'KG', 'KGZ', 0, NOW(), NOW()),
+(93, NULL, '296', 'KI', 'KIR', 0, NOW(), NOW()),
+(94, NULL, '414', 'KW', 'KWT', 0, NOW(), NOW()),
+(95, NULL, '418', 'LA', 'LAO', 0, NOW(), NOW()),
+(96, NULL, '426', 'LS', 'LSO', 0, NOW(), NOW()),
+(97, NULL, '428', 'LV', 'LVA', 0, NOW(), NOW()),
+(98, NULL, '422', 'LB', 'LBN', 0, NOW(), NOW()),
+(99, NULL, '430', 'LR', 'LBR', 0, NOW(), NOW()),
+(100, NULL, '343', 'LY', 'LBY', 0, NOW(), NOW()),
+(101, NULL, '438', 'LI', 'LIE', 0, NOW(), NOW()),
+(102, NULL, '440', 'LT', 'LTU', 0, NOW(), NOW()),
+(103, NULL, '442', 'LU', 'LUX', 0, NOW(), NOW()),
+(104, NULL, '807', 'MK', 'MKD', 0, NOW(), NOW()),
+(105, NULL, '450', 'MD', 'MDG', 0, NOW(), NOW()),
+(106, NULL, '458', 'MY', 'MYS', 0, NOW(), NOW()),
+(107, NULL, '454', 'MW', 'MWI', 0, NOW(), NOW()),
+(108, NULL, '462', 'MV', 'MDV', 0, NOW(), NOW()),
+(109, NULL, '466', 'ML', 'MLI', 0, NOW(), NOW()),
+(110, NULL, '470', 'MT', 'MLT', 0, NOW(), NOW()),
+(111, NULL, '504', 'MA', 'MAR', 0, NOW(), NOW()),
+(112, NULL, '584', 'MH', 'MHL', 0, NOW(), NOW()),
+(113, NULL, '480', 'MU', 'MUS', 0, NOW(), NOW()),
+(114, NULL, '478', 'MR', 'MRT', 0, NOW(), NOW()),
+(115, NULL, '484', 'MX', 'MEX', 0, NOW(), NOW()),
+(116, NULL, '583', 'FM', 'FSM', 0, NOW(), NOW()),
+(117, NULL, '498', 'MD', 'MDA', 0, NOW(), NOW()),
+(118, NULL, '492', 'MC', 'MCO', 0, NOW(), NOW()),
+(119, NULL, '496', 'MN', 'MNG', 0, NOW(), NOW()),
+(120, NULL, '508', 'MZ', 'MOZ', 0, NOW(), NOW()),
+(121, NULL, '516', 'NA', 'NAM', 0, NOW(), NOW()),
+(122, NULL, '520', 'NR', 'NRU', 0, NOW(), NOW()),
+(123, NULL, '524', 'NP', 'NPL', 0, NOW(), NOW()),
+(124, NULL, '558', 'NI', 'NIC', 0, NOW(), NOW()),
+(125, NULL, '562', 'NE', 'NER', 0, NOW(), NOW()),
+(126, NULL, '566', 'NG', 'NGA', 0, NOW(), NOW()),
+(127, NULL, '570', 'NU', 'NIU', 0, NOW(), NOW()),
+(128, NULL, '578', 'NO', 'NOR', 0, NOW(), NOW()),
+(129, NULL, '554', 'NZ', 'NZL', 0, NOW(), NOW()),
+(130, NULL, '512', 'OM', 'OMN', 0, NOW(), NOW()),
+(131, NULL, '800', 'UG', 'UGA', 0, NOW(), NOW()),
+(132, NULL, '860', 'UZ', 'UZB', 0, NOW(), NOW()),
+(133, NULL, '586', 'PK', 'PAK', 0, NOW(), NOW()),
+(134, NULL, '591', 'PA', 'PAN', 0, NOW(), NOW()),
+(135, NULL, '598', 'PG', 'PNG', 0, NOW(), NOW()),
+(136, NULL, '600', 'PY', 'PRY', 0, NOW(), NOW()),
+(137, NULL, '528', 'NL', 'NLD', 0, NOW(), NOW()),
+(138, NULL, '604', 'PE', 'PER', 0, NOW(), NOW()),
+(139, NULL, '608', 'PH', 'PHL', 0, NOW(), NOW()),
+(140, NULL, '616', 'PL', 'POL', 0, NOW(), NOW()),
+(141, NULL, '620', 'PT', 'PRT', 0, NOW(), NOW()),
+(142, NULL, '634', 'QA', 'QAT', 0, NOW(), NOW()),
+(143, NULL, '140', 'CF', 'CAF', 0, NOW(), NOW()),
+(144, NULL, '214', 'DO', 'DOM', 0, NOW(), NOW()),
+(145, NULL, '203', 'CZ', 'CZE', 0, NOW(), NOW()),
+(146, NULL, '642', 'RO', 'ROU', 0, NOW(), NOW()),
+(147, NULL, '826', 'GB', 'GBR', 0, NOW(), NOW()),
+(148, NULL, '643', 'RU', 'RUS', 0, NOW(), NOW()),
+(149, NULL, '646', 'RW', 'RWA', 0, NOW(), NOW()),
+(150, NULL, '659', 'KN', 'KNA', 0, NOW(), NOW()),
+(151, NULL, '662', 'LC', 'LCA', 0, NOW(), NOW()),
+(152, NULL, '674', 'SM', 'SMR', 0, NOW(), NOW()),
+(153, NULL, '670', 'VC', 'VCT', 0, NOW(), NOW()),
+(154, NULL, '90', 'SB', 'SLB', 0, NOW(), NOW()),
+(155, NULL, '222', 'SV', 'SLV', 0, NOW(), NOW()),
+(156, NULL, '882', 'WS', 'WSM', 0, NOW(), NOW()),
+(157, NULL, '678', 'ST', 'STP', 0, NOW(), NOW()),
+(158, NULL, '686', 'SN', 'SEN', 0, NOW(), NOW()),
+(159, NULL, '690', 'SC', 'SYC', 0, NOW(), NOW()),
+(160, NULL, '694', 'SL', 'SLE', 0, NOW(), NOW()),
+(161, NULL, '702', 'SG', 'SGP', 0, NOW(), NOW()),
+(162, NULL, '703', 'SK', 'SVK', 0, NOW(), NOW()),
+(163, NULL, '705', 'SI', 'SVN', 0, NOW(), NOW()),
+(164, NULL, '706', 'SO', 'SOM', 0, NOW(), NOW()),
+(165, NULL, '729', 'SD', 'SDN', 0, NOW(), NOW()),
+(166, NULL, '144', 'LK', 'LKA', 0, NOW(), NOW()),
+(167, NULL, '752', 'SE', 'SWE', 0, NOW(), NOW()),
+(168, NULL, '756', 'CH', 'CHE', 0, NOW(), NOW()),
+(169, NULL, '740', 'SR', 'SUR', 0, NOW(), NOW()),
+(170, NULL, '748', 'SZ', 'SWZ', 0, NOW(), NOW()),
+(171, NULL, '760', 'SY', 'SYR', 0, NOW(), NOW()),
+(172, NULL, '762', 'TJ', 'TJK', 0, NOW(), NOW()),
+(173, NULL, '834', 'TZ', 'TZA', 0, NOW(), NOW()),
+(174, NULL, '148', 'TD', 'TCD', 0, NOW(), NOW()),
+(175, NULL, '764', 'TH', 'THA', 0, NOW(), NOW()),
+(176, NULL, '768', 'TG', 'TGO', 0, NOW(), NOW()),
+(177, NULL, '776', 'TO', 'TON', 0, NOW(), NOW()),
+(178, NULL, '780', 'TT', 'TTO', 0, NOW(), NOW()),
+(179, NULL, '788', 'TN', 'TUN', 0, NOW(), NOW()),
+(180, NULL, '795', 'TM', 'TKM', 0, NOW(), NOW()),
+(181, NULL, '792', 'TR', 'TUR', 0, NOW(), NOW()),
+(182, NULL, '798', 'TV', 'TUV', 0, NOW(), NOW()),
+(183, NULL, '804', 'UA', 'UKR', 0, NOW(), NOW()),
+(184, NULL, '858', 'UY', 'URY', 0, NOW(), NOW()),
+(185, NULL, '336', 'VA', 'VAT', 0, NOW(), NOW()),
+(186, NULL, '548', 'VU', 'VUT', 0, NOW(), NOW()),
+(187, NULL, '862', 'VE', 'VEN', 0, NOW(), NOW()),
+(188, NULL, '704', 'VN', 'VNM', 0, NOW(), NOW()),
+(189, NULL, '887', 'YE', 'YEM', 0, NOW(), NOW()),
+(190, NULL, '807', 'MK', 'MKD', 0, NOW(), NOW()),
+(191, NULL, '180', 'CD', 'COD', 0, NOW(), NOW()),
+(192, NULL, '894', 'ZM', 'ZMB', 0, NOW(), NOW()),
+(193, NULL, '716', 'ZW', 'ZWE', 0, NOW(), NOW()),
+(196, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(197, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(198, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(199, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(200, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(201, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(202, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(203, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(204, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(205, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(206, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(207, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(208, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(209, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(210, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(211, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(212, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(213, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(214, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(215, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(216, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(217, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(218, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(219, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(220, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(221, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(222, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(223, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(224, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(225, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(226, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(227, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(228, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(229, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(230, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(231, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(232, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(233, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(234, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(235, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(236, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(237, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(238, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(239, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(240, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(241, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(242, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(243, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(244, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(245, NULL, '840', 'US', 'USA', 0, NOW(), NOW()),
+(246, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(247, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(248, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(249, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(250, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(251, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(252, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(253, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(254, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(255, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(256, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(257, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(258, NULL, '124', 'CA', 'CAN', 0, NOW(), NOW()),
+(259, NULL, '312', 'GP', 'GLP', 0, NOW(), NOW()),
+(260, NULL, '254', 'GF', 'GUF', 0, NOW(), NOW()),
+(261, NULL, '474', 'MQ', 'MTQ', 0, NOW(), NOW()),
+(262, NULL, '175', 'YT', 'MYT', 0, NOW(), NOW()),
+(263, NULL, '638', 'RE', 'REU', 0, NOW(), NOW()),
+(264, NULL, '666', 'PM', 'SPM', 0, NOW(), NOW()),
+(265, NULL, '540', 'NC', 'NCL', 0, NOW(), NOW()),
+(266, NULL, '258', 'PF', 'PYF', 0, NOW(), NOW()),
+(267, NULL, '876', 'WF', 'WLF', 0, NOW(), NOW()),
+(268, NULL, '840', 'US', 'USA', 0, NOW(), NOW());
INSERT INTO `country_i18n` (`id`, `locale`, `title`, `description`, `chapo`, `postscriptum`) VALUES
(1, 'en_US', 'Afghanistan', '', '', ''),
diff --git a/install/thelia.sql b/install/thelia.sql
index 26f371a6b..f178467a1 100755
--- a/install/thelia.sql
+++ b/install/thelia.sql
@@ -21,7 +21,7 @@ CREATE TABLE `category`
`version_created_at` DATETIME,
`version_created_by` VARCHAR(100),
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product
@@ -54,7 +54,7 @@ CREATE TABLE `product`
CONSTRAINT `fk_product_template1`
FOREIGN KEY (`template_id`)
REFERENCES `template` (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_category
@@ -81,7 +81,7 @@ CREATE TABLE `product_category`
REFERENCES `category` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- country
@@ -96,6 +96,7 @@ CREATE TABLE `country`
`isocode` VARCHAR(4) NOT NULL,
`isoalpha2` VARCHAR(2),
`isoalpha3` VARCHAR(4),
+ `by_default` TINYINT,
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`),
@@ -105,7 +106,7 @@ CREATE TABLE `country`
REFERENCES `area` (`id`)
ON UPDATE RESTRICT
ON DELETE SET NULL
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- tax
@@ -121,7 +122,7 @@ CREATE TABLE `tax`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- tax_rule
@@ -135,7 +136,7 @@ CREATE TABLE `tax_rule`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- tax_rule_country
@@ -170,7 +171,7 @@ CREATE TABLE `tax_rule_country`
REFERENCES `country` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- feature
@@ -186,7 +187,7 @@ CREATE TABLE `feature`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- feature_av
@@ -208,7 +209,7 @@ CREATE TABLE `feature_av`
REFERENCES `feature` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- feature_product
@@ -245,7 +246,7 @@ CREATE TABLE `feature_product`
REFERENCES `feature_av` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- feature_template
@@ -271,7 +272,7 @@ CREATE TABLE `feature_template`
CONSTRAINT `fk_feature_template`
FOREIGN KEY (`template_id`)
REFERENCES `template` (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- attribute
@@ -286,7 +287,7 @@ CREATE TABLE `attribute`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- attribute_av
@@ -308,7 +309,7 @@ CREATE TABLE `attribute_av`
REFERENCES `attribute` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- attribute_combination
@@ -340,7 +341,7 @@ CREATE TABLE `attribute_combination`
CONSTRAINT `fk_attribute_combination_product_sale_elements_id`
FOREIGN KEY (`product_sale_elements_id`)
REFERENCES `product_sale_elements` (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_sale_elements
@@ -367,7 +368,7 @@ CREATE TABLE `product_sale_elements`
REFERENCES `product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- attribute_template
@@ -393,7 +394,7 @@ CREATE TABLE `attribute_template`
CONSTRAINT `fk_attribute_template`
FOREIGN KEY (`template_id`)
REFERENCES `template` (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- config
@@ -412,7 +413,7 @@ CREATE TABLE `config`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `name_UNIQUE` (`name`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- customer
@@ -446,7 +447,7 @@ CREATE TABLE `customer`
REFERENCES `customer_title` (`id`)
ON UPDATE RESTRICT
ON DELETE RESTRICT
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- address
@@ -493,7 +494,7 @@ CREATE TABLE `address`
REFERENCES `country` (`id`)
ON UPDATE RESTRICT
ON DELETE RESTRICT
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- customer_title
@@ -509,7 +510,7 @@ CREATE TABLE `customer_title`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- lang
@@ -535,7 +536,7 @@ CREATE TABLE `lang`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- folder
@@ -555,7 +556,7 @@ CREATE TABLE `folder`
`version_created_at` DATETIME,
`version_created_by` VARCHAR(100),
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- content
@@ -574,7 +575,7 @@ CREATE TABLE `content`
`version_created_at` DATETIME,
`version_created_by` VARCHAR(100),
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_image
@@ -597,7 +598,7 @@ CREATE TABLE `product_image`
REFERENCES `product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_document
@@ -620,7 +621,7 @@ CREATE TABLE `product_document`
REFERENCES `product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- order
@@ -679,7 +680,7 @@ CREATE TABLE `order`
REFERENCES `order_status` (`id`)
ON UPDATE RESTRICT
ON DELETE SET NULL
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- currency
@@ -698,7 +699,7 @@ CREATE TABLE `currency`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- order_address
@@ -723,7 +724,7 @@ CREATE TABLE `order_address`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- order_product
@@ -752,7 +753,7 @@ CREATE TABLE `order_product`
REFERENCES `order` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- order_status
@@ -767,7 +768,7 @@ CREATE TABLE `order_status`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- order_feature
@@ -790,7 +791,7 @@ CREATE TABLE `order_feature`
REFERENCES `order_product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- module
@@ -810,7 +811,7 @@ CREATE TABLE `module`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `code_UNIQUE` (`code`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- accessory
@@ -839,7 +840,7 @@ CREATE TABLE `accessory`
REFERENCES `product` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- area
@@ -855,7 +856,7 @@ CREATE TABLE `area`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- delivzone
@@ -877,7 +878,7 @@ CREATE TABLE `delivzone`
REFERENCES `area` (`id`)
ON UPDATE RESTRICT
ON DELETE SET NULL
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- group
@@ -893,7 +894,7 @@ CREATE TABLE `group`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `code_UNIQUE` (`code`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- resource
@@ -909,7 +910,7 @@ CREATE TABLE `resource`
`updated_at` DATETIME,
PRIMARY KEY (`id`),
UNIQUE INDEX `code_UNIQUE` (`code`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- admin
@@ -931,7 +932,7 @@ CREATE TABLE `admin`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- admin_group
@@ -959,7 +960,7 @@ CREATE TABLE `admin_group`
REFERENCES `admin` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- group_resource
@@ -989,7 +990,7 @@ CREATE TABLE `group_resource`
REFERENCES `resource` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- group_module
@@ -1018,7 +1019,7 @@ CREATE TABLE `group_module`
REFERENCES `module` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- message
@@ -1038,7 +1039,7 @@ CREATE TABLE `message`
`version_created_by` VARCHAR(100),
PRIMARY KEY (`id`),
UNIQUE INDEX `name_UNIQUE` (`name`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- coupon
@@ -1074,7 +1075,7 @@ CREATE TABLE `coupon`
INDEX `idx_is_removing_postage` (`is_removing_postage`),
INDEX `idx_max_usage` (`max_usage`),
INDEX `idx_is_available_on_special_offers` (`is_available_on_special_offers`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- coupon_order
@@ -1096,7 +1097,7 @@ CREATE TABLE `coupon_order`
REFERENCES `order` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- admin_log
@@ -1115,7 +1116,7 @@ CREATE TABLE `admin_log`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- content_folder
@@ -1142,7 +1143,7 @@ CREATE TABLE `content_folder`
REFERENCES `folder` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- cart
@@ -1179,7 +1180,7 @@ CREATE TABLE `cart`
CONSTRAINT `fk_cart_currency_id`
FOREIGN KEY (`currency_id`)
REFERENCES `currency` (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- cart_item
@@ -1214,7 +1215,7 @@ CREATE TABLE `cart_item`
CONSTRAINT `fk_cart_item_product_sale_elements_id`
FOREIGN KEY (`product_sale_elements_id`)
REFERENCES `product_sale_elements` (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_price
@@ -1241,7 +1242,7 @@ CREATE TABLE `product_price`
FOREIGN KEY (`currency_id`)
REFERENCES `currency` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- category_image
@@ -1264,7 +1265,7 @@ CREATE TABLE `category_image`
REFERENCES `category` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- folder_image
@@ -1287,7 +1288,7 @@ CREATE TABLE `folder_image`
REFERENCES `folder` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- content_image
@@ -1310,7 +1311,7 @@ CREATE TABLE `content_image`
REFERENCES `content` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- category_document
@@ -1333,7 +1334,7 @@ CREATE TABLE `category_document`
REFERENCES `category` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- content_document
@@ -1356,7 +1357,7 @@ CREATE TABLE `content_document`
REFERENCES `content` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- folder_document
@@ -1379,7 +1380,7 @@ CREATE TABLE `folder_document`
REFERENCES `folder` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_associated_content
@@ -1408,7 +1409,7 @@ CREATE TABLE `product_associated_content`
REFERENCES `content` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- category_associated_content
@@ -1437,7 +1438,7 @@ CREATE TABLE `category_associated_content`
REFERENCES `content` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- rewriting_url
@@ -1464,7 +1465,7 @@ CREATE TABLE `rewriting_url`
REFERENCES `rewriting_url` (`id`)
ON UPDATE RESTRICT
ON DELETE RESTRICT
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- rewriting_argument
@@ -1486,7 +1487,7 @@ CREATE TABLE `rewriting_argument`
REFERENCES `rewriting_url` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- template
@@ -1500,7 +1501,7 @@ CREATE TABLE `template`
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- category_i18n
@@ -1521,7 +1522,7 @@ CREATE TABLE `category_i18n`
FOREIGN KEY (`id`)
REFERENCES `category` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_i18n
@@ -1542,7 +1543,7 @@ CREATE TABLE `product_i18n`
FOREIGN KEY (`id`)
REFERENCES `product` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- country_i18n
@@ -1563,7 +1564,7 @@ CREATE TABLE `country_i18n`
FOREIGN KEY (`id`)
REFERENCES `country` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- tax_i18n
@@ -1582,7 +1583,7 @@ CREATE TABLE `tax_i18n`
FOREIGN KEY (`id`)
REFERENCES `tax` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- tax_rule_i18n
@@ -1601,7 +1602,7 @@ CREATE TABLE `tax_rule_i18n`
FOREIGN KEY (`id`)
REFERENCES `tax_rule` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- feature_i18n
@@ -1622,7 +1623,7 @@ CREATE TABLE `feature_i18n`
FOREIGN KEY (`id`)
REFERENCES `feature` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- feature_av_i18n
@@ -1643,7 +1644,7 @@ CREATE TABLE `feature_av_i18n`
FOREIGN KEY (`id`)
REFERENCES `feature_av` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- attribute_i18n
@@ -1664,7 +1665,7 @@ CREATE TABLE `attribute_i18n`
FOREIGN KEY (`id`)
REFERENCES `attribute` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- attribute_av_i18n
@@ -1685,7 +1686,7 @@ CREATE TABLE `attribute_av_i18n`
FOREIGN KEY (`id`)
REFERENCES `attribute_av` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- config_i18n
@@ -1706,7 +1707,7 @@ CREATE TABLE `config_i18n`
FOREIGN KEY (`id`)
REFERENCES `config` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- customer_title_i18n
@@ -1725,7 +1726,7 @@ CREATE TABLE `customer_title_i18n`
FOREIGN KEY (`id`)
REFERENCES `customer_title` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- folder_i18n
@@ -1746,7 +1747,7 @@ CREATE TABLE `folder_i18n`
FOREIGN KEY (`id`)
REFERENCES `folder` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- content_i18n
@@ -1767,7 +1768,7 @@ CREATE TABLE `content_i18n`
FOREIGN KEY (`id`)
REFERENCES `content` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_image_i18n
@@ -1788,7 +1789,7 @@ CREATE TABLE `product_image_i18n`
FOREIGN KEY (`id`)
REFERENCES `product_image` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_document_i18n
@@ -1809,7 +1810,7 @@ CREATE TABLE `product_document_i18n`
FOREIGN KEY (`id`)
REFERENCES `product_document` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- currency_i18n
@@ -1827,7 +1828,7 @@ CREATE TABLE `currency_i18n`
FOREIGN KEY (`id`)
REFERENCES `currency` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- order_status_i18n
@@ -1848,7 +1849,7 @@ CREATE TABLE `order_status_i18n`
FOREIGN KEY (`id`)
REFERENCES `order_status` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- module_i18n
@@ -1869,7 +1870,7 @@ CREATE TABLE `module_i18n`
FOREIGN KEY (`id`)
REFERENCES `module` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- group_i18n
@@ -1890,7 +1891,7 @@ CREATE TABLE `group_i18n`
FOREIGN KEY (`id`)
REFERENCES `group` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- resource_i18n
@@ -1911,7 +1912,7 @@ CREATE TABLE `resource_i18n`
FOREIGN KEY (`id`)
REFERENCES `resource` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- message_i18n
@@ -1932,7 +1933,7 @@ CREATE TABLE `message_i18n`
FOREIGN KEY (`id`)
REFERENCES `message` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- coupon_i18n
@@ -1952,7 +1953,7 @@ CREATE TABLE `coupon_i18n`
FOREIGN KEY (`id`)
REFERENCES `coupon` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- category_image_i18n
@@ -1973,7 +1974,7 @@ CREATE TABLE `category_image_i18n`
FOREIGN KEY (`id`)
REFERENCES `category_image` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- folder_image_i18n
@@ -1994,7 +1995,7 @@ CREATE TABLE `folder_image_i18n`
FOREIGN KEY (`id`)
REFERENCES `folder_image` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- content_image_i18n
@@ -2015,7 +2016,7 @@ CREATE TABLE `content_image_i18n`
FOREIGN KEY (`id`)
REFERENCES `content_image` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- category_document_i18n
@@ -2036,7 +2037,7 @@ CREATE TABLE `category_document_i18n`
FOREIGN KEY (`id`)
REFERENCES `category_document` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- content_document_i18n
@@ -2057,7 +2058,7 @@ CREATE TABLE `content_document_i18n`
FOREIGN KEY (`id`)
REFERENCES `content_document` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- folder_document_i18n
@@ -2078,7 +2079,7 @@ CREATE TABLE `folder_document_i18n`
FOREIGN KEY (`id`)
REFERENCES `folder_document` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- template_i18n
@@ -2096,7 +2097,7 @@ CREATE TABLE `template_i18n`
FOREIGN KEY (`id`)
REFERENCES `template` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- category_version
@@ -2120,7 +2121,7 @@ CREATE TABLE `category_version`
FOREIGN KEY (`id`)
REFERENCES `category` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- product_version
@@ -2146,7 +2147,7 @@ CREATE TABLE `product_version`
FOREIGN KEY (`id`)
REFERENCES `product` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- folder_version
@@ -2170,7 +2171,7 @@ CREATE TABLE `folder_version`
FOREIGN KEY (`id`)
REFERENCES `folder` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- content_version
@@ -2193,7 +2194,7 @@ CREATE TABLE `content_version`
FOREIGN KEY (`id`)
REFERENCES `content` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- message_version
@@ -2216,7 +2217,7 @@ CREATE TABLE `message_version`
FOREIGN KEY (`id`)
REFERENCES `message` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- coupon_version
@@ -2246,7 +2247,7 @@ CREATE TABLE `coupon_version`
FOREIGN KEY (`id`)
REFERENCES `coupon` (`id`)
ON DELETE CASCADE
-) ENGINE=InnoDB CHARACTER SET='utf8';
+) ENGINE=InnoDB;
# This restores the fkey checks, after having unset them earlier
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/local/config/schema.xml b/local/config/schema.xml
index d5cccb9da..186bdbfd6 100755
--- a/local/config/schema.xml
+++ b/local/config/schema.xml
@@ -1,9 +1,5 @@
-
+
-
-
-
-
@@ -84,6 +80,7 @@
+
From a229f555cbd8855623ebfdc7e45f20934efa7122 Mon Sep 17 00:00:00 2001
From: mespeche
Date: Mon, 16 Sep 2013 15:32:52 +0200
Subject: [PATCH 12/24] No alert bloc
---
templates/admin/default/general_error.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/admin/default/general_error.html b/templates/admin/default/general_error.html
index c66f83502..eae6614c9 100755
--- a/templates/admin/default/general_error.html
+++ b/templates/admin/default/general_error.html
@@ -13,7 +13,7 @@
{intl l="Oops! An Error Occurred"}
- {block name="error-message"}
{$error_message}
{/block}
+ {block name="error-message"}
{$error_message}
{/block}
{intl l="Go to administration home"}
From 785057c0be9fffd32221c6fdff4b0270ab39c535 Mon Sep 17 00:00:00 2001
From: Manuel Raynaud
Date: Mon, 16 Sep 2013 15:42:25 +0200
Subject: [PATCH 13/24] add some information for OSX requirements
---
Readme.md | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/Readme.md b/Readme.md
index 791b61d1e..3481d508c 100755
--- a/Readme.md
+++ b/Readme.md
@@ -12,13 +12,34 @@ Here is the most recent developed code for the next major version (v2). You can
Most part of the code can possibly change, a large part will be refactor soon, graphical setup does not exist yet.
+Requirements
+------------
+
+* php 5.4
+* apache 2
+* mysql 5
+
+If you use Mac OSX, they still don't use php 5.4 as default php version... There are many solutions for you :
+
+* use linux (the better one)
+* use last MAMP version and put the php bin directory in your path and :
+
+```bash
+$ vim ~/.bash_profile
+then put this line : export PATH=/Applications/MAMP/bin/php/php5.4.x/bin/:$PATH
+$ . .bash_profile
+```
+
+* configure a complete development environment : http://php-osx.liip.ch/
+* use a virtual machine with vagrant and puppet : https://puphpet.com/
+
Installation
------------
``` bash
$ git clone --recursive https://github.com/thelia/thelia.git
$ cd thelia
-$ wget http://getcomposer.org/composer.phar
+$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar install
```
From 1dcde3ff2ca5925fb0f9b247fbfae1646123ca91 Mon Sep 17 00:00:00 2001
From: Manuel Raynaud
Date: Mon, 16 Sep 2013 15:47:32 +0200
Subject: [PATCH 14/24] fix typo
---
Readme.md | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/Readme.md b/Readme.md
index 3481d508c..c0c3ebef5 100755
--- a/Readme.md
+++ b/Readme.md
@@ -19,15 +19,13 @@ Requirements
* apache 2
* mysql 5
-If you use Mac OSX, they still don't use php 5.4 as default php version... There are many solutions for you :
+If you use Mac OSX, it still doesn't use php 5.4 as default php version... There are many solutions for you :
-* use linux (the better one)
-* use last MAMP version and put the php bin directory in your path and :
+* use linux (the best one)
+* use last MAMP version and put the php bin directory in your path :
```bash
-$ vim ~/.bash_profile
-then put this line : export PATH=/Applications/MAMP/bin/php/php5.4.x/bin/:$PATH
-$ . .bash_profile
+export PATH=/Applications/MAMP/bin/php/php5.4.x/bin/:$PATH
```
* configure a complete development environment : http://php-osx.liip.ch/
From 2309a2e7885a1f763291cc0429f1767ee94a87ac Mon Sep 17 00:00:00 2001
From: Manuel Raynaud
Date: Mon, 16 Sep 2013 16:29:09 +0200
Subject: [PATCH 15/24] remove script part of composer.json file
---
composer.json | 4 ----
1 file changed, 4 deletions(-)
diff --git a/composer.json b/composer.json
index 2d315bd3a..c8291305d 100755
--- a/composer.json
+++ b/composer.json
@@ -53,9 +53,5 @@
"": "local/modules/",
"Thelia" : "core/lib/"
}
- },
- "scripts" : {
- "post-update-cmd": "composer dump-autoload -o",
- "post-install-cmd": "composer dump-autoload -o"
}
}
From aa4e0636e8f270d4c3f79cba3d758bb4a9954822 Mon Sep 17 00:00:00 2001
From: Manuel Raynaud
Date: Mon, 16 Sep 2013 16:31:13 +0200
Subject: [PATCH 16/24] use dump autoloader in all compser scripts
---
Readme.md | 2 +-
composer.lock | 2 +-
reset_install.sh | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Readme.md b/Readme.md
index c0c3ebef5..ac0862dae 100755
--- a/Readme.md
+++ b/Readme.md
@@ -38,7 +38,7 @@ Installation
$ git clone --recursive https://github.com/thelia/thelia.git
$ cd thelia
$ curl -sS https://getcomposer.org/installer | php
-$ php composer.phar install
+$ php composer.phar install --optimize-autoloader
```
Finish the installation using cli tools :
diff --git a/composer.lock b/composer.lock
index 61160ea49..acc232713 100755
--- a/composer.lock
+++ b/composer.lock
@@ -3,7 +3,7 @@
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
],
- "hash": "28dfdc7a840f9e70df422581f82a871f",
+ "hash": "6db52c20c300000aa218e3be92ef978e",
"packages": [
{
"name": "imagine/imagine",
diff --git a/reset_install.sh b/reset_install.sh
index 399156b67..380a80a5f 100755
--- a/reset_install.sh
+++ b/reset_install.sh
@@ -8,7 +8,7 @@ echo -e "\n\e[01;34m[INFO] Clearing caches\e[00m\n"
php Thelia cache:clear
echo -e "\n\e[01;34m[INFO] Downloading vendors\e[00m\n"
-composer install --prefer-dist
+composer install --prefer-dist --optimize-autoloader
cd local/config/
From 035d9dd0e94fdcb992d72518bb8d7f9dd4da4582 Mon Sep 17 00:00:00 2001
From: Manuel Raynaud
Date: Mon, 16 Sep 2013 16:57:08 +0200
Subject: [PATCH 17/24] add swiftmailer in composer
---
composer.json | 3 ++-
composer.lock | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/composer.json b/composer.json
index c8291305d..4a3798384 100755
--- a/composer.json
+++ b/composer.json
@@ -36,7 +36,8 @@
"simplepie/simplepie": "dev-master",
"imagine/imagine": "dev-master",
- "symfony/icu": "1.0"
+ "symfony/icu": "1.0",
+ "swiftmailer/swiftmailer": "5.0.*"
},
"require-dev" : {
"phpunit/phpunit": "3.7.*",
diff --git a/composer.lock b/composer.lock
index acc232713..b0310c075 100755
--- a/composer.lock
+++ b/composer.lock
@@ -3,7 +3,7 @@
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
],
- "hash": "6db52c20c300000aa218e3be92ef978e",
+ "hash": "a40be01c82e68ba0c446dc204d2667da",
"packages": [
{
"name": "imagine/imagine",
@@ -445,6 +445,55 @@
],
"time": "2013-07-02 16:38:47"
},
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "v5.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swiftmailer/swiftmailer.git",
+ "reference": "f3917ecef35a4e4d98b303eb9fee463bc983f379"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/f3917ecef35a4e4d98b303eb9fee463bc983f379",
+ "reference": "f3917ecef35a4e4d98b303eb9fee463bc983f379",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "lib/swift_required.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Chris Corbyn"
+ }
+ ],
+ "description": "Swiftmailer, free feature-rich PHP mailer",
+ "homepage": "http://swiftmailer.org",
+ "keywords": [
+ "mail",
+ "mailer"
+ ],
+ "time": "2013-08-30 12:35:21"
+ },
{
"name": "symfony-cmf/routing",
"version": "1.0.0",
From 874c5f6cacc6a83e25b710ca4836c22f0d4e32db Mon Sep 17 00:00:00 2001
From: Manuel Raynaud
Date: Mon, 16 Sep 2013 18:20:15 +0200
Subject: [PATCH 18/24] integrate swiftMailer as mailer solution
---
core/lib/Thelia/Config/Resources/config.xml | 4 +
core/lib/Thelia/Controller/BaseController.php | 9 ++
.../Core/Event/MailTransporterEvent.php | 52 +++++++++++
core/lib/Thelia/Core/Event/TheliaEvents.php | 5 +
core/lib/Thelia/Mailer/MailerFactory.php | 91 +++++++++++++++++++
5 files changed, 161 insertions(+)
create mode 100644 core/lib/Thelia/Core/Event/MailTransporterEvent.php
create mode 100644 core/lib/Thelia/Mailer/MailerFactory.php
diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml
index 691cf2198..bed490b4a 100755
--- a/core/lib/Thelia/Config/Resources/config.xml
+++ b/core/lib/Thelia/Config/Resources/config.xml
@@ -267,6 +267,10 @@
+
+
+
+
diff --git a/core/lib/Thelia/Controller/BaseController.php b/core/lib/Thelia/Controller/BaseController.php
index 19e62a400..8bf9aeec3 100755
--- a/core/lib/Thelia/Controller/BaseController.php
+++ b/core/lib/Thelia/Controller/BaseController.php
@@ -281,4 +281,13 @@ class BaseController extends ContainerAware
$this->accessDenied();
}
}
+
+ /**
+ * @return \Swift_Mailer
+ */
+ public function getMailer()
+ {
+ $mailer = $this->container->get('mailer');
+ return $mailer->getSwiftMailer();
+ }
}
diff --git a/core/lib/Thelia/Core/Event/MailTransporterEvent.php b/core/lib/Thelia/Core/Event/MailTransporterEvent.php
new file mode 100644
index 000000000..d47ac693f
--- /dev/null
+++ b/core/lib/Thelia/Core/Event/MailTransporterEvent.php
@@ -0,0 +1,52 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Core\Event;
+
+
+/**
+ * Class MailTransporterEvent
+ * @package Thelia\Core\Event
+ * @author Manuel Raynaud
+ */
+class MailTransporterEvent extends ActionEvent {
+ /**
+ * @var \Swift_Transport
+ */
+ protected $transporter;
+
+ public function setMailerTransporter(\Swift_Transport $transporter)
+ {
+ $this->transporter = $transporter;
+ }
+
+ public function getTransporter()
+ {
+ return $this->transporter;
+ }
+
+ public function hasTransporter()
+ {
+ return null !== $this->transporter;
+ }
+}
\ No newline at end of file
diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php
index 2867762aa..242fde4e4 100755
--- a/core/lib/Thelia/Core/Event/TheliaEvents.php
+++ b/core/lib/Thelia/Core/Event/TheliaEvents.php
@@ -430,4 +430,9 @@ final class TheliaEvents
const BEFORE_DELETEFEATURE_AV = "action.before_deleteFeatureAv";
const AFTER_DELETEFEATURE_AV = "action.after_deleteFeatureAv";
+ /**
+ * sent when system find a mailer transporter.
+ */
+ const MAILTRANSPORTER_CONFIG = 'action.mailertransporter.config';
+
}
diff --git a/core/lib/Thelia/Mailer/MailerFactory.php b/core/lib/Thelia/Mailer/MailerFactory.php
new file mode 100644
index 000000000..5cd952270
--- /dev/null
+++ b/core/lib/Thelia/Mailer/MailerFactory.php
@@ -0,0 +1,91 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Mailer;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Thelia\Core\Event\MailTransporterEvent;
+use Thelia\Core\Event\TheliaEvents;
+use Thelia\Model\ConfigQuery;
+
+
+/**
+ * Class MailerFactory
+ * @package Thelia\Mailer
+ * @author Manuel Raynaud
+ */
+class MailerFactory {
+ /**
+ * @var \Swift_Mailer
+ */
+ protected $swiftMailer;
+
+ protected $dispatcher;
+
+ public function _construct(EventDispatcherInterface $dispatcher)
+ {
+
+ $this->dispatcher = $dispatcher;
+
+ $transporterEvent = new MailTransporterEvent();
+ $this->dispatcher->dispatch(TheliaEvents::MAILTRANSPORTER_CONFIG, $transporterEvent);
+
+ if($transporterEvent->hasTransporter()) {
+ $transporter = $transporterEvent->getTransporter();
+ } else {
+ if (ConfigQuery::read("smtp.enabled")) {
+ $transporter = $this->configureSmtp();
+ } else {
+ $transporter = \Swift_MailTransport::newInstance();
+ }
+ }
+
+ $this->swiftMailer = new \Swift_Mailer($transporter);
+ }
+
+ private function configureSmtp()
+ {
+ $smtpTransporter = new \Swift_SmtpTransport();
+ $smtpTransporter->setHost(Configquery::read('smtp.host', 'localhost'))
+ ->setPort(ConfigQuery::read('smtp.host'))
+ ->setEncryption(ConfigQuery::read('smtp.encryption'))
+ ->setUsername(ConfigQuery::read('smtp.username'))
+ ->setPassword(ConfigQuery::read('smtp.password'))
+ ->setAuthMode(ConfigQuery::read('smtp.authmode'))
+ ->setTimeout(ConfigQuery::read('smtp.timeout', 30))
+ ->setSourceIp(ConfigQuery::read('smtp.sourceip'))
+ ;
+ return $smtpTransporter;
+ }
+
+ public function send(\Swift_Mime_Message $message, &$failedRecipients = null)
+ {
+ $this->swiftMailer->send($message, $failedRecipients);
+ }
+
+ public function getSwiftMailer()
+ {
+ return $this->swiftMailer;
+ }
+
+
+}
\ No newline at end of file
From 67b6e5f07de74cfd019d3b5c32141067fde3c981 Mon Sep 17 00:00:00 2001
From: Manuel Raynaud
Date: Mon, 16 Sep 2013 18:21:07 +0200
Subject: [PATCH 19/24] add some php doc
---
core/lib/Thelia/Controller/BaseController.php | 3 +++
1 file changed, 3 insertions(+)
diff --git a/core/lib/Thelia/Controller/BaseController.php b/core/lib/Thelia/Controller/BaseController.php
index 8bf9aeec3..3c4c0a5bc 100755
--- a/core/lib/Thelia/Controller/BaseController.php
+++ b/core/lib/Thelia/Controller/BaseController.php
@@ -283,6 +283,9 @@ class BaseController extends ContainerAware
}
/**
+ *
+ * return an instance of \Swift_Mailer with good Transporter configured.
+ *
* @return \Swift_Mailer
*/
public function getMailer()
From 2f41d4db6f15f88387638af4c70ff51f1ebf2945 Mon Sep 17 00:00:00 2001
From: franck
Date: Mon, 16 Sep 2013 18:58:45 +0200
Subject: [PATCH 20/24] Started category management
---
core/lib/Thelia/Action/Category.php | 262 +++----
core/lib/Thelia/Action/Config.php | 70 +-
core/lib/Thelia/Action/Currency.php | 6 +-
core/lib/Thelia/Action/Message.php | 4 +-
core/lib/Thelia/Config/Resources/config.xml | 2 +-
.../Thelia/Config/Resources/routing/admin.xml | 2 +-
.../Admin/AbstractCrudController.php | 59 +-
.../Admin/AttributeAvController.php | 2 +-
.../Controller/Admin/AttributeController.php | 2 +-
.../Controller/Admin/CategoryController.php | 419 ++++-------
.../Controller/Admin/ConfigController.php | 2 +-
.../Controller/Admin/CurrencyController.php | 2 +-
.../Controller/Admin/FeatureAvController.php | 2 +-
.../Controller/Admin/FeatureController.php | 2 +-
.../Controller/Admin/TemplateController.php | 2 +-
.../Thelia/Core/Event/CategoryCreateEvent.php | 20 +-
.../Event/CategoryToggleVisibilityEvent.php | 28 +
.../Thelia/Core/Event/CategoryUpdateEvent.php | 13 -
core/lib/Thelia/Core/Event/TheliaEvents.php | 43 +-
.../Core/Template/Loop/CategoryTree.php | 4 +-
core/lib/Thelia/Form/CategoryCreationForm.php | 6 +-
.../Thelia/Form/CategoryModificationForm.php | 8 +-
core/lib/Thelia/Model/Category.php | 24 +-
.../default/assets/less/thelia/thelia.less | 8 +-
templates/admin/default/categories.html | 710 +++++++-----------
templates/admin/default/category-edit.html | 243 +++---
templates/admin/default/currency-edit.html | 8 +-
.../default/includes/catalog-breadcrumb.html | 4 +-
templates/admin/default/message-edit.html | 12 +-
templates/admin/default/orders.html | 6 +-
templates/admin/default/variable-edit.html | 6 +-
templates/admin/default/variables.html | 2 +-
32 files changed, 772 insertions(+), 1211 deletions(-)
create mode 100644 core/lib/Thelia/Core/Event/CategoryToggleVisibilityEvent.php
diff --git a/core/lib/Thelia/Action/Category.php b/core/lib/Thelia/Action/Category.php
index 297cd64da..a34f4a85e 100755
--- a/core/lib/Thelia/Action/Category.php
+++ b/core/lib/Thelia/Action/Category.php
@@ -24,52 +24,88 @@
namespace Thelia\Action;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-use Thelia\Core\Event\TheliaEvents;
-use Thelia\Model\Category as CategoryModel;
+
use Thelia\Model\CategoryQuery;
+use Thelia\Model\Category as CategoryModel;
-use Propel\Runtime\ActiveQuery\Criteria;
-use Propel\Runtime\Propel;
-use Thelia\Model\Map\CategoryTableMap;
+use Thelia\Core\Event\TheliaEvents;
+use Thelia\Core\Event\CategoryUpdateEvent;
use Thelia\Core\Event\CategoryCreateEvent;
use Thelia\Core\Event\CategoryDeleteEvent;
+use Thelia\Model\ConfigQuery;
+use Thelia\Core\Event\UpdatePositionEvent;
use Thelia\Core\Event\CategoryToggleVisibilityEvent;
-use Thelia\Core\Event\CategoryChangePositionEvent;
class Category extends BaseAction implements EventSubscriberInterface
{
+ /**
+ * Create a new category entry
+ *
+ * @param CategoryCreateEvent $event
+ */
public function create(CategoryCreateEvent $event)
{
$category = new CategoryModel();
$category
->setDispatcher($this->getDispatcher())
- ->create(
- $event->getTitle(),
- $event->getParent(),
- $event->getLocale()
- );
+
+ ->setLocale($event->getLocale())
+ ->setTitle($event->getTitle())
+ ->setParent($event->getParent())
+ ->setVisible($event->getVisible())
+
+ ->save()
+ ;
$event->setCategory($category);
}
- public function update(CategoryChangeEvent $event)
+ /**
+ * Change a category
+ *
+ * @param CategoryUpdateEvent $event
+ */
+ public function update(CategoryUpdateEvent $event)
{
+ $search = CategoryQuery::create();
+
+ if (null !== $category = CategoryQuery::create()->findPk($event->getCategoryId())) {
+
+ $category
+ ->setDispatcher($this->getDispatcher())
+
+ ->setLocale($event->getLocale())
+ ->setTitle($event->getTitle())
+ ->setDescription($event->getDescription())
+ ->setChapo($event->getChapo())
+ ->setPostscriptum($event->getPostscriptum())
+
+ ->setParent($event->getParent())
+ ->setVisible($event->getVisible())
+
+ ->save();
+
+ $event->setCategory($category);
+ }
}
/**
- * Delete a category
+ * Delete a category entry
*
- * @param ActionEvent $event
+ * @param CategoryDeleteEvent $event
*/
public function delete(CategoryDeleteEvent $event)
{
- $category = CategoryQuery::create()->findPk($event->getCategoryId());
+ if (null !== $category = CategoryQuery::create()->findPk($event->getCategoryId())) {
- if ($category !== null) {
+ $category
+ ->setDispatcher($this->getDispatcher())
+ ->delete()
+ ;
- $category->setDispatcher($this->getDispatcher())->delete();
+ $event->setCategory($category);
}
}
@@ -80,178 +116,48 @@ class Category extends BaseAction implements EventSubscriberInterface
*/
public function toggleVisibility(CategoryToggleVisibilityEvent $event)
{
- $category = CategoryQuery::create()->findPk($event->getCategoryId());
+ $category = $event->getCategory();
- if ($category !== null) {
-
- $category
- ->setDispatcher($this->getDispatcher())
- ->setVisible($category->getVisible() ? false : true)
- ->save()
+ $category
+ ->setDispatcher($this->getDispatcher())
+ ->setVisible($category->getVisible() ? false : true)
+ ->save()
;
+ }
+
+ /**
+ * Changes position, selecting absolute ou relative change.
+ *
+ * @param CategoryChangePositionEvent $event
+ */
+ public function updatePosition(UpdatePositionEvent $event)
+ {
+ if (null !== $category = CategoryQuery::create()->findPk($event->getObjectId())) {
+
+ $category->setDispatcher($this->getDispatcher());
+
+ $mode = $event->getMode();
+
+ if ($mode == UpdatePositionEvent::POSITION_ABSOLUTE)
+ return $category->changeAbsolutePosition($event->getPosition());
+ else if ($mode == UpdatePositionEvent::POSITION_UP)
+ return $category->movePositionUp();
+ else if ($mode == UpdatePositionEvent::POSITION_DOWN)
+ return $category->movePositionDown();
}
}
/**
- * Changes category position, selecting absolute ou relative change.
- *
- * @param CategoryChangePositionEvent $event
- */
- public function changePosition(CategoryChangePositionEvent $event)
- {
- if ($event->getMode() == CategoryChangePositionEvent::POSITION_ABSOLUTE)
- return $this->changeAbsolutePosition($event);
- else
- return $this->exchangePosition($event);
- }
-
- /**
- * Move up or down a category
- *
- * @param CategoryChangePositionEvent $event
- */
- protected function exchangePosition(CategoryChangePositionEvent $event)
- {
- $category = CategoryQuery::create()->findPk($event->getCategoryId());
-
- if ($category !== null) {
-
- // The current position of the category
- $my_position = $category->getPosition();
-
- // Find category to exchange position with
- $search = CategoryQuery::create()
- ->filterByParent($category->getParent());
-
- // Up or down ?
- if ($event->getMode() == CategoryChangePositionEvent::POSITION_UP) {
- // Find the category immediately before me
- $search->filterByPosition(array('max' => $my_position-1))->orderByPosition(Criteria::DESC);
- } elseif ($event->getMode() == CategoryChangePositionEvent::POSITION_DOWN) {
- // Find the category immediately after me
- $search->filterByPosition(array('min' => $my_position+1))->orderByPosition(Criteria::ASC);
- } else
-
- return;
-
- $result = $search->findOne();
-
- // If we found the proper category, exchange their positions
- if ($result) {
-
- $cnx = Propel::getWriteConnection(CategoryTableMap::DATABASE_NAME);
-
- $cnx->beginTransaction();
-
- try {
- $category
- ->setDispatcher($this->getDispatcher())
- ->setPosition($result->getPosition())
- ->save()
- ;
-
- $result->setPosition($my_position)->save();
-
- $cnx->commit();
- } catch (Exception $e) {
- $cnx->rollback();
- }
- }
- }
- }
-
- /**
- * Changes category position
- *
- * @param CategoryChangePositionEvent $event
- */
- protected function changeAbsolutePosition(CategoryChangePositionEvent $event)
- {
- $category = CategoryQuery::create()->findPk($event->getCategoryId());
-
- if ($category !== null) {
-
- // The required position
- $new_position = $event->getPosition();
-
- // The current position
- $current_position = $category->getPosition();
-
- if ($new_position != null && $new_position > 0 && $new_position != $current_position) {
-
- // Find categories to offset
- $search = CategoryQuery::create()->filterByParent($category->getParent());
-
- if ($new_position > $current_position) {
- // The new position is after the current position -> we will offset + 1 all categories located between us and the new position
- $search->filterByPosition(array('min' => 1+$current_position, 'max' => $new_position));
-
- $delta = -1;
- } else {
- // The new position is brefore the current position -> we will offset - 1 all categories located between us and the new position
- $search->filterByPosition(array('min' => $new_position, 'max' => $current_position - 1));
-
- $delta = 1;
- }
-
- $results = $search->find();
-
- $cnx = Propel::getWriteConnection(CategoryTableMap::DATABASE_NAME);
-
- $cnx->beginTransaction();
-
- try {
- foreach ($results as $result) {
- $result->setPosition($result->getPosition() + $delta)->save($cnx);
- }
-
- $category
- ->setDispatcher($this->getDispatcher())
- ->setPosition($new_position)
- ->save($cnx)
- ;
-
- $cnx->commit();
- } catch (Exception $e) {
- $cnx->rollback();
- }
- }
- }
- }
-
- /**
- * Returns an array of event names this subscriber listens to.
- *
- * The array keys are event names and the value can be:
- *
- * * The method name to call (priority defaults to 0)
- * * An array composed of the method name to call and the priority
- * * An array of arrays composed of the method names to call and respective
- * priorities, or 0 if unset
- *
- * For instance:
- *
- * * array('eventName' => 'methodName')
- * * array('eventName' => array('methodName', $priority))
- * * array('eventName' => array(array('methodName1', $priority), array('methodName2'))
- *
- * @return array The event names to listen to
- *
- * @api
+ * {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
- TheliaEvents::CATEGORY_CREATE => array("create", 128),
- TheliaEvents::CATEGORY_UPDATE => array("update", 128),
- TheliaEvents::CATEGORY_DELETE => array("delete", 128),
-
+ TheliaEvents::CATEGORY_CREATE => array("create", 128),
+ TheliaEvents::CATEGORY_UPDATE => array("update", 128),
+ TheliaEvents::CATEGORY_DELETE => array("delete", 128),
TheliaEvents::CATEGORY_TOGGLE_VISIBILITY => array("toggleVisibility", 128),
- TheliaEvents::CATEGORY_CHANGE_POSITION => array("changePosition", 128),
-
- "action.updateCategoryPositionU" => array("changePositionUp", 128),
- "action.updateCategoryPositionDown" => array("changePositionDown", 128),
- "action.updateCategoryPosition" => array("changePosition", 128),
+ TheliaEvents::CATEGORY_UPDATE_POSITION => array("updatePosition", 128)
);
}
}
diff --git a/core/lib/Thelia/Action/Config.php b/core/lib/Thelia/Action/Config.php
index 83df28524..f8a7c027c 100644
--- a/core/lib/Thelia/Action/Config.php
+++ b/core/lib/Thelia/Action/Config.php
@@ -22,7 +22,6 @@
/*************************************************************************************/
namespace Thelia\Action;
-
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Model\ConfigQuery;
@@ -45,18 +44,9 @@ class Config extends BaseAction implements EventSubscriberInterface
{
$config = new ConfigModel();
- $config
- ->setDispatcher($this->getDispatcher())
-
- ->setName($event->getEventName())
- ->setValue($event->getValue())
- ->setLocale($event->getLocale())
- ->setTitle($event->getTitle())
- ->setHidden($event->getHidden())
- ->setSecured($event->getSecured())
-
- ->save()
- ;
+ $config->setDispatcher($this->getDispatcher())->setName($event->getEventName())->setValue($event->getValue())
+ ->setLocale($event->getLocale())->setTitle($event->getTitle())->setHidden($event->getHidden())
+ ->setSecured($event->getSecured())->save();
$event->setConfig($config);
}
@@ -70,18 +60,13 @@ class Config extends BaseAction implements EventSubscriberInterface
{
$search = ConfigQuery::create();
- if (null !== $config = $search->findOneById($event->getConfigId())) {
+ if (null !== $config = $search->findPk($event->getConfigId())) {
if ($event->getValue() !== $config->getValue()) {
- $config
- ->setDispatcher($this->getDispatcher())
+ $config->setDispatcher($this->getDispatcher())->setValue($event->getValue())->save();
- ->setValue($event->getValue())
- ->save()
- ;
-
- $event->setConfig($config);
+ $event->setConfig($config);
}
}
}
@@ -95,23 +80,12 @@ class Config extends BaseAction implements EventSubscriberInterface
{
$search = ConfigQuery::create();
- if (null !== $config = ConfigQuery::create()->findOneById($event->getConfigId())) {
+ if (null !== $config = ConfigQuery::create()->findPk($event->getConfigId())) {
- $config
- ->setDispatcher($this->getDispatcher())
-
- ->setName($event->getEventName())
- ->setValue($event->getValue())
- ->setHidden($event->getHidden())
- ->setSecured($event->getSecured())
-
- ->setLocale($event->getLocale())
- ->setTitle($event->getTitle())
- ->setDescription($event->getDescription())
- ->setChapo($event->getChapo())
- ->setPostscriptum($event->getPostscriptum())
-
- ->save();
+ $config->setDispatcher($this->getDispatcher())->setName($event->getEventName())->setValue($event->getValue())
+ ->setHidden($event->getHidden())->setSecured($event->getSecured())->setLocale($event->getLocale())
+ ->setTitle($event->getTitle())->setDescription($event->getDescription())->setChapo($event->getChapo())
+ ->setPostscriptum($event->getPostscriptum())->save();
$event->setConfig($config);
}
@@ -125,14 +99,11 @@ class Config extends BaseAction implements EventSubscriberInterface
public function delete(ConfigDeleteEvent $event)
{
- if (null !== ($config = ConfigQuery::create()->findOneById($event->getConfigId()))) {
+ if (null !== ($config = ConfigQuery::create()->findPk($event->getConfigId()))) {
- if (! $config->getSecured()) {
+ if (!$config->getSecured()) {
- $config
- ->setDispatcher($this->getDispatcher())
- ->delete()
- ;
+ $config->setDispatcher($this->getDispatcher())->delete();
$event->setConfig($config);
}
@@ -145,10 +116,15 @@ class Config extends BaseAction implements EventSubscriberInterface
public static function getSubscribedEvents()
{
return array(
- TheliaEvents::CONFIG_CREATE => array("create", 128),
- TheliaEvents::CONFIG_SETVALUE => array("setValue", 128),
- TheliaEvents::CONFIG_UPDATE => array("modify", 128),
- TheliaEvents::CONFIG_DELETE => array("delete", 128),
+ TheliaEvents::CONFIG_CREATE => array(
+ "create", 128
+ ), TheliaEvents::CONFIG_SETVALUE => array(
+ "setValue", 128
+ ), TheliaEvents::CONFIG_UPDATE => array(
+ "modify", 128
+ ), TheliaEvents::CONFIG_DELETE => array(
+ "delete", 128
+ ),
);
}
}
diff --git a/core/lib/Thelia/Action/Currency.php b/core/lib/Thelia/Action/Currency.php
index 7908d1f0d..946fee375 100644
--- a/core/lib/Thelia/Action/Currency.php
+++ b/core/lib/Thelia/Action/Currency.php
@@ -71,7 +71,7 @@ class Currency extends BaseAction implements EventSubscriberInterface
{
$search = CurrencyQuery::create();
- if (null !== $currency = CurrencyQuery::create()->findOneById($event->getCurrencyId())) {
+ if (null !== $currency = CurrencyQuery::create()->findPk($event->getCurrencyId())) {
$currency
->setDispatcher($this->getDispatcher())
@@ -97,7 +97,7 @@ class Currency extends BaseAction implements EventSubscriberInterface
{
$search = CurrencyQuery::create();
- if (null !== $currency = CurrencyQuery::create()->findOneById($event->getCurrencyId())) {
+ if (null !== $currency = CurrencyQuery::create()->findPk($event->getCurrencyId())) {
if ($currency->getByDefault() != $event->getIsDefault()) {
@@ -123,7 +123,7 @@ class Currency extends BaseAction implements EventSubscriberInterface
public function delete(CurrencyDeleteEvent $event)
{
- if (null !== ($currency = CurrencyQuery::create()->findOneById($event->getCurrencyId()))) {
+ if (null !== ($currency = CurrencyQuery::create()->findPk($event->getCurrencyId()))) {
$currency
->setDispatcher($this->getDispatcher())
diff --git a/core/lib/Thelia/Action/Message.php b/core/lib/Thelia/Action/Message.php
index faac35bf2..8918913fe 100644
--- a/core/lib/Thelia/Action/Message.php
+++ b/core/lib/Thelia/Action/Message.php
@@ -70,7 +70,7 @@ class Message extends BaseAction implements EventSubscriberInterface
{
$search = MessageQuery::create();
- if (null !== $message = MessageQuery::create()->findOneById($event->getMessageId())) {
+ if (null !== $message = MessageQuery::create()->findPk($event->getMessageId())) {
$message
->setDispatcher($this->getDispatcher())
@@ -99,7 +99,7 @@ class Message extends BaseAction implements EventSubscriberInterface
public function delete(MessageDeleteEvent $event)
{
- if (null !== ($message = MessageQuery::create()->findOneById($event->getMessageId()))) {
+ if (null !== ($message = MessageQuery::create()->findPk($event->getMessageId()))) {
$message
->setDispatcher($this->getDispatcher())
diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml
index 691cf2198..0c0973db9 100755
--- a/core/lib/Thelia/Config/Resources/config.xml
+++ b/core/lib/Thelia/Config/Resources/config.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml
index dc650d8d6..53c137988 100755
--- a/core/lib/Thelia/Config/Resources/routing/admin.xml
+++ b/core/lib/Thelia/Config/Resources/routing/admin.xml
@@ -85,7 +85,7 @@
- Thelia\Controller\Admin\CategoryController::toggleOnlineAction
+ Thelia\Controller\Admin\CategoryController::setToggleVisibilityAction
diff --git a/core/lib/Thelia/Controller/Admin/AbstractCrudController.php b/core/lib/Thelia/Controller/Admin/AbstractCrudController.php
index fad774023..5b7f8b60a 100644
--- a/core/lib/Thelia/Controller/Admin/AbstractCrudController.php
+++ b/core/lib/Thelia/Controller/Admin/AbstractCrudController.php
@@ -240,6 +240,17 @@ abstract class AbstractCrudController extends BaseAdminController
return null;
}
+ /**
+ * Put in this method post object position change processing if required.
+ *
+ * @param unknown $deleteEvent the delete event
+ * @return Response a response, or null to continue normal processing
+ */
+ protected function performAdditionalUpdatePositionAction($positionChangeEvent)
+ {
+ return null;
+ }
+
/**
* Return the current list order identifier, updating it in the same time.
*/
@@ -309,14 +320,18 @@ abstract class AbstractCrudController extends BaseAdminController
$this->adminLogAppend(sprintf("%s %s (ID %s) created", ucfirst($this->objectName), $this->getObjectLabel($createdObject), $this->getObjectId($createdObject)));
}
- $this->performAdditionalCreateAction($createEvent);
+ $response = $this->performAdditionalCreateAction($createEvent);
- // Substitute _ID_ in the URL with the ID of the created object
- $successUrl = str_replace('_ID_', $this->getObjectId($createdObject), $creationForm->getSuccessUrl());
-
- // Redirect to the success URL
- $this->redirect($successUrl);
+ if ($response == null) {
+ // Substitute _ID_ in the URL with the ID of the created object
+ $successUrl = str_replace('_ID_', $this->getObjectId($createdObject), $creationForm->getSuccessUrl());
+ // Redirect to the success URL
+ $this->redirect($successUrl);
+ }
+ else {
+ return $response;
+ }
}
catch (FormValidationException $ex) {
// Form cannot be validated
@@ -396,16 +411,21 @@ abstract class AbstractCrudController extends BaseAdminController
$this->adminLogAppend(sprintf("%s %s (ID %s) modified", ucfirst($this->objectName), $this->getObjectLabel($changedObject), $this->getObjectId($changedObject)));
}
- $this->performAdditionalUpdateAction($changeEvent);
+ $response = $this->performAdditionalUpdateAction($changeEvent);
- // If we have to stay on the same page, do not redirect to the succesUrl,
- // just redirect to the edit page again.
- if ($this->getRequest()->get('save_mode') == 'stay') {
- $this->redirectToEditionTemplate($this->getRequest());
+ if ($response == null) {
+ // If we have to stay on the same page, do not redirect to the succesUrl,
+ // just redirect to the edit page again.
+ if ($this->getRequest()->get('save_mode') == 'stay') {
+ $this->redirectToEditionTemplate($this->getRequest());
+ }
+
+ // Redirect to the success URL
+ $this->redirect($changeForm->getSuccessUrl());
+ }
+ else {
+ return $response;
}
-
- // Redirect to the success URL
- $this->redirect($changeForm->getSuccessUrl());
}
catch (FormValidationException $ex) {
// Form cannot be validated
@@ -452,7 +472,14 @@ abstract class AbstractCrudController extends BaseAdminController
return $this->errorPage($ex);
}
- $this->redirectToListTemplate();
+ $response = $this->performAdditionalUpdatePositionAction($event);
+
+ if ($response == null) {
+ $this->redirectToListTemplate();
+ }
+ else {
+ return $response;
+ }
}
/**
@@ -475,7 +502,7 @@ abstract class AbstractCrudController extends BaseAdminController
return $this->errorPage($ex);
}
- $this->redirectToRoute('admin.categories.default');
+ $this->redirectToListTemplate();
}
/**
diff --git a/core/lib/Thelia/Controller/Admin/AttributeAvController.php b/core/lib/Thelia/Controller/Admin/AttributeAvController.php
index b3afa687d..1ab12a081 100644
--- a/core/lib/Thelia/Controller/Admin/AttributeAvController.php
+++ b/core/lib/Thelia/Controller/Admin/AttributeAvController.php
@@ -33,7 +33,7 @@ use Thelia\Form\AttributeAvCreationForm;
use Thelia\Core\Event\UpdatePositionEvent;
/**
- * Manages attributes-av sent by mail
+ * Manages attributes-av
*
* @author Franck Allimant
*/
diff --git a/core/lib/Thelia/Controller/Admin/AttributeController.php b/core/lib/Thelia/Controller/Admin/AttributeController.php
index 247b89632..48a65baa7 100644
--- a/core/lib/Thelia/Controller/Admin/AttributeController.php
+++ b/core/lib/Thelia/Controller/Admin/AttributeController.php
@@ -37,7 +37,7 @@ use Thelia\Core\Event\AttributeAvUpdateEvent;
use Thelia\Core\Event\AttributeEvent;
/**
- * Manages attributes sent by mail
+ * Manages attributes
*
* @author Franck Allimant
*/
diff --git a/core/lib/Thelia/Controller/Admin/CategoryController.php b/core/lib/Thelia/Controller/Admin/CategoryController.php
index fba832ec8..15f620736 100755
--- a/core/lib/Thelia/Controller/Admin/CategoryController.php
+++ b/core/lib/Thelia/Controller/Admin/CategoryController.php
@@ -23,226 +23,160 @@
namespace Thelia\Controller\Admin;
-use Thelia\Core\Event\TheliaEvents;
-use Thelia\Core\Event\CategoryCreateEvent;
-use Thelia\Form\CategoryCreationForm;
use Thelia\Core\Event\CategoryDeleteEvent;
-use Thelia\Core\Event\CategoryUpdatePositionEvent;
+use Thelia\Core\Event\TheliaEvents;
+use Thelia\Core\Event\CategoryUpdateEvent;
+use Thelia\Core\Event\CategoryCreateEvent;
use Thelia\Model\CategoryQuery;
use Thelia\Form\CategoryModificationForm;
+use Thelia\Form\CategoryCreationForm;
+use Thelia\Core\Event\UpdatePositionEvent;
+use Thelia\Core\Event\CategoryToggleVisibilityEvent;
-class CategoryController extends BaseAdminController
+/**
+ * Manages categories
+ *
+ * @author Franck Allimant
+ */
+class CategoryController extends AbstractCrudController
{
- /**
- * Render the categories list, ensuring the sort order is set.
- *
- * @return Symfony\Component\HttpFoundation\Response the response
- */
- protected function renderList()
- {
- return $this->render('categories', $this->getTemplateArgs());
+ public function __construct() {
+ parent::__construct(
+ 'category',
+ 'manual',
+ 'category_order',
+
+ 'admin.categories.default',
+ 'admin.categories.create',
+ 'admin.categories.update',
+ 'admin.categories.delete',
+
+ TheliaEvents::CATEGORY_CREATE,
+ TheliaEvents::CATEGORY_UPDATE,
+ TheliaEvents::CATEGORY_DELETE,
+ TheliaEvents::CATEGORY_TOGGLE_VISIBILITY,
+ TheliaEvents::CATEGORY_UPDATE_POSITION
+ );
}
- protected function getTemplateArgs()
- {
- // Get the category ID
- $category_id = $this->getRequest()->get('category_id', 0);
+ protected function getCreationForm() {
+ return new CategoryCreationForm($this->getRequest());
+ }
- // Find the current category order
- $category_order = $this->getRequest()->get(
- 'order',
- $this->getSession()->get('admin.category_order', 'manual')
+ protected function getUpdateForm() {
+ return new CategoryModificationForm($this->getRequest());
+ }
+
+ protected function getCreationEvent($formData) {
+ $createEvent = new CategoryCreateEvent();
+
+ $createEvent
+ ->setTitle($formData['title'])
+ ->setLocale($formData["locale"])
+ ->setParent($formData['parent'])
+ ->setVisible($formData['visible'])
+ ;
+
+ return $createEvent;
+ }
+
+ protected function getUpdateEvent($formData) {
+ $changeEvent = new CategoryUpdateEvent($formData['id']);
+
+ // Create and dispatch the change event
+ $changeEvent
+ ->setLocale($formData['locale'])
+ ->setTitle($formData['title'])
+ ->setChapo($formData['chapo'])
+ ->setDescription($formData['description'])
+ ->setPostscriptum($formData['postscriptum'])
+ ->setVisible($formData['visible'])
+ ->setUrl($formData['url'])
+ ->setParent($formData['parent'])
+ ;
+
+ return $changeEvent;
+ }
+
+ protected function createUpdatePositionEvent($positionChangeMode, $positionValue) {
+
+ return new UpdatePositionEvent(
+ $this->getRequest()->get('category_id', null),
+ $positionChangeMode,
+ $positionValue
+ );
+ }
+
+ protected function getDeleteEvent() {
+ return new CategoryDeleteEvent($this->getRequest()->get('category_id', 0));
+ }
+
+ protected function eventContainsObject($event) {
+ return $event->hasCategory();
+ }
+
+ protected function hydrateObjectForm($object) {
+
+ // Prepare the data that will hydrate the form
+ $data = array(
+ 'id' => $object->getId(),
+ 'locale' => $object->getLocale(),
+ 'title' => $object->getTitle(),
+ 'chapo' => $object->getChapo(),
+ 'description' => $object->getDescription(),
+ 'postscriptum' => $object->getPostscriptum(),
+ 'visible' => $object->getVisible(),
+ 'url' => $object->getUrl($this->getCurrentEditionLocale()),
+ 'parent' => $object->getParent()
);
- $args = array(
- 'current_category_id' => $category_id,
- 'category_order' => $category_order,
+ // Setup the object form
+ return new CategoryModificationForm($this->getRequest(), "form", $data);
+ }
+
+ protected function getObjectFromEvent($event) {
+ return $event->hasCategory() ? $event->getCategory() : null;
+ }
+
+ protected function getExistingObject() {
+ return CategoryQuery::create()
+ ->joinWithI18n($this->getCurrentEditionLocale())
+ ->findOneById($this->getRequest()->get('category_id', 0));
+ }
+
+ protected function getObjectLabel($object) {
+ return $object->getTitle();
+ }
+
+ protected function getObjectId($object) {
+ return $object->getId();
+ }
+
+ protected function renderListTemplate($currentOrder) {
+ return $this->render('categories',
+ array(
+ 'category_order' => $currentOrder,
+ 'category_id' => $this->getRequest()->get('category_id', 0)
+ )
+ );
+ }
+
+ protected function renderEditionTemplate() {
+ return $this->render('category-edit', array('category_id' => $this->getRequest()->get('category_id', 0)));
+ }
+
+ protected function redirectToEditionTemplate() {
+ $this->redirectToRoute(
+ "admin.categories.update",
+ array('category_id' => $this->getRequest()->get('category_id', 0))
);
-
- // Store the current sort order in session
- $this->getSession()->set('admin.category_order', $category_order);
-
- return $args;
}
- /**
- * The default action is displaying the categories list.
- *
- * @return Symfony\Component\HttpFoundation\Response the response
- */
- public function defaultAction()
- {
- if (null !== $response = $this->checkAuth("admin.categories.view")) return $response;
- return $this->renderList();
- }
-
- /**
- * Create a new category object
- *
- * @return Symfony\Component\HttpFoundation\Response the response
- */
- public function createAction()
- {
- // Check current user authorization
- if (null !== $response = $this->checkAuth("admin.categories.create")) return $response;
-
- $error_msg = false;
-
- // Create the Creation Form
- $creationForm = new CategoryCreationForm($this->getRequest());
-
- try {
-
- // Validate the form, create the CategoryCreation event and dispatch it.
- $form = $this->validateForm($creationForm, "POST");
-
- $data = $form->getData();
-
- $createEvent = new CategoryCreateEvent(
- $data["title"],
- $data["parent"],
- $data["locale"]
- );
-
- $this->dispatch(TheliaEvents::CATEGORY_CREATE, $createEvent);
-
- if (! $createEvent->hasCategory()) throw new \LogicException($this->getTranslator()->trans("No category was created."));
-
- $createdObject = $createEvent->getCategory();
-
- // Log category creation
- $this->adminLogAppend(sprintf("Category %s (ID %s) created", $createdObject->getTitle(), $createdObject->getId()));
-
- // Substitute _ID_ in the URL with the ID of the created object
- $successUrl = str_replace('_ID_', $createdObject->getId(), $creationForm->getSuccessUrl());
-
- // Redirect to the success URL
- $this->redirect($successUrl);
- } catch (FormValidationException $ex) {
- // Form cannot be validated
- $error_msg = $this->createStandardFormValidationErrorMessage($ex);
- } catch (\Exception $ex) {
- // Any other error
- $error_msg = $ex->getMessage();
- }
-
- $this->setupFormErrorContext("category creation", $error_msg, $creationForm, $ex);
-
- // At this point, the form has error, and should be redisplayed.
- return $this->renderList();
- }
-
- /**
- * Load a category object for modification, and display the edit template.
- *
- * @return Symfony\Component\HttpFoundation\Response the response
- */
- public function changeAction()
- {
- // Check current user authorization
- if (null !== $response = $this->checkAuth("admin.categories.update")) return $response;
-
- // Load the category object
- $category = CategoryQuery::create()
- ->joinWithI18n($this->getCurrentEditionLocale())
- ->findOneById($this->getRequest()->get('category_id'));
-
- if ($category != null) {
-
- // Prepare the data that will hydrate the form
- $data = array(
- 'id' => $category->getId(),
- 'locale' => $category->getLocale(),
- 'title' => $category->getTitle(),
- 'chapo' => $category->getChapo(),
- 'description' => $category->getDescription(),
- 'postscriptum' => $category->getPostscriptum(),
- 'parent' => $category->getParent(),
- 'visible' => $category->getVisible() ? true : false,
- 'url' => $category->getUrl($this->getCurrentEditionLocale())
- // tbc !!!
- );
-
- // Setup the object form
- $changeForm = new CategoryModificationForm($this->getRequest(), "form", $data);
-
- // Pass it to the parser
- $this->getParserContext()->addForm($changeForm);
- }
-
- // Render the edition template.
- return $this->render('category-edit', $this->getTemplateArgs());
- }
-
- /**
- * Save changes on a modified category object, and either go back to the category list, or stay on the edition page.
- *
- * @return Symfony\Component\HttpFoundation\Response the response
- */
- public function saveChangeAction()
- {
- // Check current user authorization
- if (null !== $response = $this->checkAuth("admin.categories.update")) return $response;
-
- $error_msg = false;
-
- // Create the form from the request
- $changeForm = new CategoryModificationForm($this->getRequest());
-
- // Get the category ID
- $category_id = $this->getRequest()->get('category_id');
-
- try {
-
- // Check the form against constraints violations
- $form = $this->validateForm($changeForm, "POST");
-
- // Get the form field values
- $data = $form->getData();
-
- $changeEvent = new CategoryUpdateEvent($data['id']);
-
- // Create and dispatch the change event
- $changeEvent
- ->setCategoryName($data['name'])
- ->setLocale($data["locale"])
- ->setSymbol($data['symbol'])
- ->setCode($data['code'])
- ->setRate($data['rate'])
- ;
-
- $this->dispatch(TheliaEvents::CATEGORY_UPDATE, $changeEvent);
-
- if (! $createEvent->hasCategory()) throw new \LogicException($this->getTranslator()->trans("No category was updated."));
-
- // Log category modification
- $changedObject = $changeEvent->getCategory();
-
- $this->adminLogAppend(sprintf("Category %s (ID %s) modified", $changedObject->getTitle(), $changedObject->getId()));
-
- // If we have to stay on the same page, do not redirect to the succesUrl,
- // just redirect to the edit page again.
- if ($this->getRequest()->get('save_mode') == 'stay') {
- $this->redirectToRoute(
- "admin.categories.update",
- array('category_id' => $category_id)
+ protected function redirectToListTemplate() {
+ $this->redirectToRoute(
+ 'admin.categories.default',
+ array('category_id' => $this->getRequest()->get('category_id', 0))
);
- }
-
- // Redirect to the success URL
- $this->redirect($changeForm->getSuccessUrl());
- } catch (FormValidationException $ex) {
- // Form cannot be validated
- $error_msg = $this->createStandardFormValidationErrorMessage($ex);
- } catch (\Exception $ex) {
- // Any other error
- $error_msg = $ex->getMessage();
- }
-
- $this->setupFormErrorContext("category modification", $error_msg, $changeForm, $ex);
-
- // At this point, the form has errors, and should be redisplayed.
- return $this->render('category-edit', array('category_id' => $category_id));
}
/**
@@ -253,74 +187,41 @@ class CategoryController extends BaseAdminController
// Check current user authorization
if (null !== $response = $this->checkAuth("admin.categories.update")) return $response;
- $changeEvent = new CategoryUpdateEvent($this->getRequest()->get('category_id', 0));
-
- // Create and dispatch the change event
- $changeEvent->setIsDefault(true);
+ $event = new CategoryToggleVisibilityEvent($this->getExistingObject());
try {
- $this->dispatch(TheliaEvents::CATEGORY_SET_DEFAULT, $changeEvent);
+ $this->dispatch(TheliaEvents::CATEGORY_TOGGLE_VISIBILITY, $event);
} catch (\Exception $ex) {
// Any error
return $this->errorPage($ex);
}
- $this->redirectToRoute('admin.categories.default');
+ // Ajax response -> no action
+ return $this->nullResponse();
}
- /**
- * Update categoryposition
- */
- public function updatePositionAction()
+ protected function performAdditionalDeleteAction($deleteEvent)
{
- // Check current user authorization
- if (null !== $response = $this->checkAuth("admin.categories.update")) return $response;
+ // Redirect to parent category list
+ $this->redirectToRoute(
+ 'admin.categories.default',
+ array('category_id' => $deleteEvent->getCategory()->getParent())
+ );
+ }
- try {
- $mode = $this->getRequest()->get('mode', null);
+ protected function performAdditionalUpdatePositionAction($event)
+ {
- if ($mode == 'up')
- $mode = CategoryUpdatePositionEvent::POSITION_UP;
- else if ($mode == 'down')
- $mode = CategoryUpdatePositionEvent::POSITION_DOWN;
- else
- $mode = CategoryUpdatePositionEvent::POSITION_ABSOLUTE;
+ $category = CategoryQuery::create()->findPk($event->getObjectId());
- $position = $this->getRequest()->get('position', null);
-
- $event = new CategoryUpdatePositionEvent(
- $this->getRequest()->get('category_id', null),
- $mode,
- $this->getRequest()->get('position', null)
+ if ($category != null) {
+ // Redirect to parent category list
+ $this->redirectToRoute(
+ 'admin.categories.default',
+ array('category_id' => $category->getParent())
);
-
- $this->dispatch(TheliaEvents::CATEGORY_UPDATE_POSITION, $event);
- } catch (\Exception $ex) {
- // Any error
- return $this->errorPage($ex);
}
- $this->redirectToRoute('admin.categories.default');
- }
-
- /**
- * Delete a category object
- *
- * @return Symfony\Component\HttpFoundation\Response the response
- */
- public function deleteAction()
- {
- // Check current user authorization
- if (null !== $response = $this->checkAuth("admin.categories.delete")) return $response;
-
- // Get the category id, and dispatch the deleted request
- $event = new CategoryDeleteEvent($this->getRequest()->get('category_id'));
-
- $this->dispatch(TheliaEvents::CATEGORY_DELETE, $event);
-
- if ($event->hasCategory())
- $this->adminLogAppend(sprintf("Category %s (ID %s) deleted", $event->getCategory()->getTitle(), $event->getCategory()->getId()));
-
- $this->redirectToRoute('admin.categories.default');
+ return null;
}
}
diff --git a/core/lib/Thelia/Controller/Admin/ConfigController.php b/core/lib/Thelia/Controller/Admin/ConfigController.php
index ff0e4bb39..8701710b0 100644
--- a/core/lib/Thelia/Controller/Admin/ConfigController.php
+++ b/core/lib/Thelia/Controller/Admin/ConfigController.php
@@ -33,7 +33,7 @@ use Thelia\Form\ConfigCreationForm;
use Thelia\Core\Event\UpdatePositionEvent;
/**
- * Manages variables sent by mail
+ * Manages variables
*
* @author Franck Allimant
*/
diff --git a/core/lib/Thelia/Controller/Admin/CurrencyController.php b/core/lib/Thelia/Controller/Admin/CurrencyController.php
index 4f3fdaaea..f0081d698 100644
--- a/core/lib/Thelia/Controller/Admin/CurrencyController.php
+++ b/core/lib/Thelia/Controller/Admin/CurrencyController.php
@@ -33,7 +33,7 @@ use Thelia\Form\CurrencyCreationForm;
use Thelia\Core\Event\UpdatePositionEvent;
/**
- * Manages currencies sent by mail
+ * Manages currencies
*
* @author Franck Allimant
*/
diff --git a/core/lib/Thelia/Controller/Admin/FeatureAvController.php b/core/lib/Thelia/Controller/Admin/FeatureAvController.php
index 25c7a5495..fc6571ccc 100644
--- a/core/lib/Thelia/Controller/Admin/FeatureAvController.php
+++ b/core/lib/Thelia/Controller/Admin/FeatureAvController.php
@@ -33,7 +33,7 @@ use Thelia\Form\FeatureAvCreationForm;
use Thelia\Core\Event\UpdatePositionEvent;
/**
- * Manages features-av sent by mail
+ * Manages features-av
*
* @author Franck Allimant
*/
diff --git a/core/lib/Thelia/Controller/Admin/FeatureController.php b/core/lib/Thelia/Controller/Admin/FeatureController.php
index 92cb89d33..f81f55919 100644
--- a/core/lib/Thelia/Controller/Admin/FeatureController.php
+++ b/core/lib/Thelia/Controller/Admin/FeatureController.php
@@ -37,7 +37,7 @@ use Thelia\Core\Event\FeatureAvUpdateEvent;
use Thelia\Core\Event\FeatureEvent;
/**
- * Manages features sent by mail
+ * Manages features
*
* @author Franck Allimant
*/
diff --git a/core/lib/Thelia/Controller/Admin/TemplateController.php b/core/lib/Thelia/Controller/Admin/TemplateController.php
index 3685a359a..c9e30612c 100644
--- a/core/lib/Thelia/Controller/Admin/TemplateController.php
+++ b/core/lib/Thelia/Controller/Admin/TemplateController.php
@@ -41,7 +41,7 @@ use Thelia\Core\Event\TemplateAddFeatureEvent;
use Thelia\Core\Event\TemplateDeleteFeatureEvent;
/**
- * Manages templates sent by mail
+ * Manages product templates
*
* @author Franck Allimant
*/
diff --git a/core/lib/Thelia/Core/Event/CategoryCreateEvent.php b/core/lib/Thelia/Core/Event/CategoryCreateEvent.php
index 5a687217c..41529019c 100644
--- a/core/lib/Thelia/Core/Event/CategoryCreateEvent.php
+++ b/core/lib/Thelia/Core/Event/CategoryCreateEvent.php
@@ -28,13 +28,7 @@ class CategoryCreateEvent extends CategoryEvent
protected $title;
protected $parent;
protected $locale;
-
- public function __construct($title, $parent, $locale)
- {
- $this->title = $title;
- $this->parent = $parent;
- $this->locale = $locale;
- }
+ protected $visible;
public function getTitle()
{
@@ -71,4 +65,16 @@ class CategoryCreateEvent extends CategoryEvent
return $this;
}
+
+ public function getVisible()
+ {
+ return $this->visible;
+ }
+
+ public function setVisible($visible)
+ {
+ $this->visible = $visible;
+
+ return $this;
+ }
}
diff --git a/core/lib/Thelia/Core/Event/CategoryToggleVisibilityEvent.php b/core/lib/Thelia/Core/Event/CategoryToggleVisibilityEvent.php
new file mode 100644
index 000000000..f90378e38
--- /dev/null
+++ b/core/lib/Thelia/Core/Event/CategoryToggleVisibilityEvent.php
@@ -0,0 +1,28 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Core\Event;
+
+class CategoryToggleVisibilityEvent extends CategoryEvent
+{
+}
diff --git a/core/lib/Thelia/Core/Event/CategoryUpdateEvent.php b/core/lib/Thelia/Core/Event/CategoryUpdateEvent.php
index 44e760549..f5f775a22 100644
--- a/core/lib/Thelia/Core/Event/CategoryUpdateEvent.php
+++ b/core/lib/Thelia/Core/Event/CategoryUpdateEvent.php
@@ -32,7 +32,6 @@ class CategoryUpdateEvent extends CategoryCreateEvent
protected $postscriptum;
protected $url;
- protected $visibility;
protected $parent;
public function __construct($category_id)
@@ -100,18 +99,6 @@ class CategoryUpdateEvent extends CategoryCreateEvent
return $this;
}
- public function getVisibility()
- {
- return $this->visibility;
- }
-
- public function setVisibility($visibility)
- {
- $this->visibility = $visibility;
-
- return $this;
- }
-
public function getParent()
{
return $this->parent;
diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php
index 2867762aa..a305f134a 100755
--- a/core/lib/Thelia/Core/Event/TheliaEvents.php
+++ b/core/lib/Thelia/Core/Event/TheliaEvents.php
@@ -145,50 +145,21 @@ final class TheliaEvents
// -- END ADDRESS MANAGEMENT ---------------------------------------------------------
- /**
- * Sent once the category creation form has been successfully validated, and before category insertion in the database.
- */
- const BEFORE_CREATECATEGORY = "action.before_createcategory";
+ // -- Categories management -----------------------------------------------
- /**
- * Create, change or delete a category
- */
- const CATEGORY_CREATE = "action.createCategory";
- const CATEGORY_UPDATE = "action.updateCategory";
- const CATEGORY_DELETE = "action.deleteCategory";
-
- /**
- * Toggle category visibility
- */
+ const CATEGORY_CREATE = "action.createCategory";
+ const CATEGORY_UPDATE = "action.updateCategory";
+ const CATEGORY_DELETE = "action.deleteCategory";
const CATEGORY_TOGGLE_VISIBILITY = "action.toggleCategoryVisibility";
+ const CATEGORY_UPDATE_POSITION = "action.updateCategoryPosition";
- /**
- * Change category position
- */
- const CATEGORY_CHANGE_POSITION = "action.updateCategoryPosition";
-
- /**
- * Sent just after a successful insert of a new category in the database.
- */
+ const BEFORE_CREATECATEGORY = "action.before_createcategory";
const AFTER_CREATECATEGORY = "action.after_createcategory";
- /**
- * Sent befonre deleting a category
- */
- const BEFORE_DELETECATEGORY = "action.before_deletecategory";
- /**
- * Sent just after a successful delete of a category from the database.
- */
+ const BEFORE_DELETECATEGORY = "action.before_deletecategory";
const AFTER_DELETECATEGORY = "action.after_deletecategory";
- /**
- * Sent just before a successful change of a category in the database.
- */
const BEFORE_UPDATECATEGORY = "action.before_updateCategory";
-
- /**
- * Sent just after a successful change of a category in the database.
- */
const AFTER_UPDATECATEGORY = "action.after_updateCategory";
/**
diff --git a/core/lib/Thelia/Core/Template/Loop/CategoryTree.php b/core/lib/Thelia/Core/Template/Loop/CategoryTree.php
index afcd0410e..712767954 100755
--- a/core/lib/Thelia/Core/Template/Loop/CategoryTree.php
+++ b/core/lib/Thelia/Core/Template/Loop/CategoryTree.php
@@ -59,7 +59,7 @@ class CategoryTree extends BaseI18nLoop
}
// changement de rubrique
- protected function buildCategoryTree($parent, $visible, $level, $max_level, array $exclude, LoopResult &$loopResult)
+ protected function buildCategoryTree($parent, $visible, $level, $max_level, $exclude, LoopResult &$loopResult)
{
if ($level > $max_level) return;
@@ -73,7 +73,7 @@ class CategoryTree extends BaseI18nLoop
if ($visible != BooleanOrBothType::ANY) $search->filterByVisible($visible);
- $search->filterById($exclude, Criteria::NOT_IN);
+ if ($exclude != null) $search->filterById($exclude, Criteria::NOT_IN);
$search->orderByPosition(Criteria::ASC);
diff --git a/core/lib/Thelia/Form/CategoryCreationForm.php b/core/lib/Thelia/Form/CategoryCreationForm.php
index 5dce6a049..172b09ee6 100755
--- a/core/lib/Thelia/Form/CategoryCreationForm.php
+++ b/core/lib/Thelia/Form/CategoryCreationForm.php
@@ -39,7 +39,8 @@ class CategoryCreationForm extends BaseForm
"for" => "title"
)
))
- ->add("parent", "integer", array(
+ ->add("parent", "text", array(
+ "label" => Translator::getInstance()->trans("Parent category *"),
"constraints" => array(
new NotBlank()
)
@@ -49,6 +50,9 @@ class CategoryCreationForm extends BaseForm
new NotBlank()
)
))
+ ->add("visible", "integer", array(
+ "label" => Translator::getInstance()->trans("This category is online on the front office.")
+ ))
;
}
diff --git a/core/lib/Thelia/Form/CategoryModificationForm.php b/core/lib/Thelia/Form/CategoryModificationForm.php
index d9de36d16..42b5893c1 100644
--- a/core/lib/Thelia/Form/CategoryModificationForm.php
+++ b/core/lib/Thelia/Form/CategoryModificationForm.php
@@ -24,6 +24,7 @@ namespace Thelia\Form;
use Symfony\Component\Validator\Constraints\GreaterThan;
use Thelia\Core\Translation\Translator;
+use Symfony\Component\Validator\Constraints\NotBlank;
class CategoryModificationForm extends CategoryCreationForm
{
@@ -36,12 +37,13 @@ class CategoryModificationForm extends CategoryCreationForm
$this->formBuilder
->add("id", "hidden", array("constraints" => array(new GreaterThan(array('value' => 0)))))
- ->add("visible", "checkbox", array(
- "label" => Translator::getInstance()->trans("This category is online on the front office.")
+ ->add("url", "text", array(
+ "label" => Translator::getInstance()->trans("Rewriten URL *"),
+ "constraints" => array(new NotBlank())
))
;
- // Add standard description fields
+ // Add standard description fields, excluding title and locale, which a re defined in parent class
$this->addStandardDescFields(array('title', 'locale'));
}
diff --git a/core/lib/Thelia/Model/Category.php b/core/lib/Thelia/Model/Category.php
index ced10c94b..5533eaf42 100755
--- a/core/lib/Thelia/Model/Category.php
+++ b/core/lib/Thelia/Model/Category.php
@@ -28,26 +28,6 @@ class Category extends BaseCategory
return URL::getInstance()->retrieve('category', $this->getId(), $locale)->toString();
}
- /**
- * Create a new category.
- *
- * @param string $title the category title
- * @param int $parent the ID of the parent category
- * @param string $locale the locale of the title
- */
- public function create($title, $parent, $locale)
- {
- $this
- ->setLocale($locale)
- ->setTitle($title)
- ->setParent($parent)
- ->setVisible(1)
- ->setPosition($this->getNextPosition($parent))
- ;
-
- $this->save();
- }
-
/**
*
* count all products for current category and sub categories
@@ -73,6 +53,8 @@ class Category extends BaseCategory
public function preInsert(ConnectionInterface $con = null)
{
+ $this->setPosition($this->getNextPosition($this->parent));
+
$this->dispatchEvent(TheliaEvents::BEFORE_CREATECATEGORY, new CategoryEvent($this));
return true;
@@ -98,6 +80,8 @@ class Category extends BaseCategory
public function preDelete(ConnectionInterface $con = null)
{
$this->dispatchEvent(TheliaEvents::BEFORE_DELETECATEGORY, new CategoryEvent($this));
+
+ return true;
}
public function postDelete(ConnectionInterface $con = null)
diff --git a/templates/admin/default/assets/less/thelia/thelia.less b/templates/admin/default/assets/less/thelia/thelia.less
index 50cd9bde6..6dc130918 100644
--- a/templates/admin/default/assets/less/thelia/thelia.less
+++ b/templates/admin/default/assets/less/thelia/thelia.less
@@ -34,7 +34,7 @@
.topbar {
- background: url("@{imgDir}/top.jpg") repeat-x;
+ background: url("@{imgDir}/top.jpg") repeat-x;
font-weight: bold;
.version-info {
@@ -202,7 +202,7 @@
border-bottom: 2px solid #A5CED8;
margin-bottom: 0.5em;
}
-
+
// The action bar on the right
.actions {
text-align: right;
@@ -217,6 +217,10 @@
text-transform: none;
}
}
+
+ .inner-actions {
+ margin-top: 0.5em;
+ }
}
// The overall form container
diff --git a/templates/admin/default/categories.html b/templates/admin/default/categories.html
index 6fe06f8bc..32b9e6cba 100755
--- a/templates/admin/default/categories.html
+++ b/templates/admin/default/categories.html
@@ -1,396 +1,260 @@
{extends file="admin-layout.tpl"}
-{block name="page-title"}{intl l='Catalog'}{/block}
+{block name="page-title"}{intl l='Categories'}{/block}
-{block name="check-permissions"}admin.catalog.view{/block}
+{block name="check-permissions"}admin.categories.view{/block}
{block name="main-content"}
-
-
+
- {include file="includes/catalog-breadcrumb.html"}
+
- {module_include location='catalog_top'}
+ {include file="includes/catalog-breadcrumb.html"}
-
-
-
-
-
- {* display parent category name, and get current cat ID *}
- {loop name="category_title" type="category" visible="*" id=$current_category_id}
- {intl l="Categories in %cat" cat=$TITLE}
- {$cat_id = $ID}
- {/loop}
- {elseloop rel="category_title"}
- {intl l="Top level categories"}
- {/elseloop}
+ {module_include location='categories_top'}
- {module_include location='category_list_caption'}
+
+
+
+
+
+ {* display parent category name, and get current cat ID *}
+ {loop name="category_title" type="category" visible="*" id=$category_id}
+ {intl l="Categories in %cat" cat=$TITLE}
+ {$cat_id = $ID}
+ {/loop}
+ {elseloop rel="category_title"}
+ {intl l="Top level categories"}
+ {/elseloop}
- {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.categories.create"}
-
-
-
- {/loop}
-
+ {module_include location='category_list_caption'}
- {ifloop rel="category_list"}
-
-
-
- {admin_sortable_header
- current_order=$category_order
- order='id'
- reverse_order='id_reverse'
- path={url path='/admin/catalog' id_category=$current_category_id}
- label="{intl l='ID'}"
- }
-
+ {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.categories.create"}
+
+
+
+ {/loop}
+
-
+ {ifloop rel="category_list"}
+
+
+
+ {admin_sortable_header
+ current_order=$category_order
+ order='id'
+ reverse_order='id_reverse'
+ path={url path='/admin/categories' id_category=$category_id}
+ request_parameter_name='category_order'
+ label="{intl l='ID'}"
+ }
+
-
- {admin_sortable_header
- current_order=$category_order
- order='alpha'
- reverse_order='alpha_reverse'
- path={url path='/admin/catalog' id_category=$current_category_id}
- label="{intl l='Category title'}"
- }
-
+
- {module_include location='category_list_header'}
+
+ {admin_sortable_header
+ current_order=$category_order
+ order='alpha'
+ reverse_order='alpha_reverse'
+ path={url path='/admin/categories' id_category=$category_id}
+ request_parameter_name='category_order'
+ label="{intl l='Category title'}"
+ }
+
-
- {admin_sortable_header
- current_order=$category_order
- order='visible'
- reverse_order='visible_reverse'
- path={url path='/admin/catalog' id_category=$current_category_id}
- label="{intl l='Online'}"
- }
-
+ {module_include location='category_list_header'}
-
- {admin_sortable_header
- current_order=$category_order
- order='manual'
- reverse_order='manual_reverse'
- path={url path='/admin/catalog' id_category=$current_category_id}
- label="{intl l='Position'}"
- }
-
+
+ {admin_sortable_header
+ current_order=$category_order
+ order='visible'
+ reverse_order='visible_reverse'
+ path={url path='/admin/categories' id_category=$category_id}
+ request_parameter_name='category_order'
+ label="{intl l='Online'}"
+ }
+
- {intl l='Actions'}
-
-
+
+ {admin_sortable_header
+ current_order=$category_order
+ order='manual'
+ reverse_order='manual_reverse'
+ path={url path='/admin/categories' id_category=$category_id}
+ request_parameter_name='category_order'
+ label="{intl l='Position'}"
+ }
+
-
- {loop name="category_list" type="category" visible="*" parent=$current_category_id order=$category_order backend_context="1" lang=$lang_id}
-
- {$ID}
+ {intl l='Actions'}
+
+
-
- {loop type="image" name="cat_image" source="category" source_id="$ID" limit="1" width="50" height="50" resize_mode="crop" backend_context="1"}
-
- {/loop}
-
+
+ {loop name="category_list" type="category" visible="*" parent=$category_id order=$category_order backend_context="1" lang=$lang_id}
+
+ {$ID}
-
-
- {$TITLE}
-
-
-
- {module_include location='category_list_row'}
-
-
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.categories.edit"}
-
-
-
- {/loop}
-
- {elseloop rel="can_change"}
-
-
-
- {/elseloop}
-
-
-
- {admin_position_block
- permission="admin.categories.edit"
- path={url path='admin/category/update-position' category_id=$ID}
- url_parameter="category_id"
- in_place_edit_class="categoryPositionChange"
- position=$POSITION
- id=$ID
- }
-
-
-
-
-
-
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.categories.edit"}
-
- {/loop}
-
- {loop type="auth" name="can_delete" roles="ADMIN" permissions="admin.categories.delete"}
-
- {/loop}
-
-
-
- {/loop}
-
- {/ifloop}
-
- {elseloop rel="category_list"}
-
-
-
-
- {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.categories.create"}
- {intl l="This category has no sub-categories. To create a new one, click the + button above."}
- {/loop}
-
- {elseloop rel="can_create"}
- {intl l="This category has no sub-categories."}
- {/elseloop}
-
-
-
-
- {/elseloop}
-
-
-
-
-
-
-
-
-
-
- {* display parent category name *}
- {loop name="category_title" type="category" visible="*" id=$current_category_id}
- {intl l="Products in %cat" cat=$TITLE}
- {/loop}
-
- {elseloop rel="category_title"}
- {intl l="Top level Products"}
- {/elseloop}
-
- {module_include location='product_list_caption'}
-
-
-
-
-
-
- {ifloop rel="product_list"}
-
-
-
- {admin_sortable_header
- current_order=$product_order
- order='id'
- reverse_order='id_reverse'
- path={url path='/admin/product' category_id=$current_category_id}
- label="{intl l='ID'}"
- }
-
-
-
-
- {admin_sortable_header
- current_order=$product_order
- order='ref'
- reverse_order='ref_reverse'
- path={url path='/admin/product' category_id=$current_category_id}
- label="{intl l='Reference'}"
- }
-
-
-
- {admin_sortable_header
- current_order=$product_order
- order='alpha'
- reverse_order='alpha_reverse'
- path={url path='/admin/product' category_id=$current_category_id}
- label="{intl l='Product title'}"
- }
-
- {module_include location='product_list_header'}
-
-
- {admin_sortable_header
- current_order=$product_order
- order='visible'
- reverse_order='visible_reverse'
- path={url path='/admin/product' category_id=$current_category_id}
- label="{intl l='Online'}"
- }
-
-
-
- {admin_sortable_header
- current_order=$product_order
- order='manual'
- reverse_order='manual_reverse'
- path={url path='/admin/product' category_id=$current_category_id}
- label="{intl l='Position'}"
- }
-
-
-
-
-
-
-
- {loop name="product_list" type="product" category=$current_category_id order="manual"}
-
- {$ID}
-
-
- {loop type="image" name="cat_image" source="product" source_id="$ID" limit="1" width="50" height="50" resize_mode="crop" backend_context="1"}
-
-
-
- {/loop}
-
- {$REF}
-
- {$TITLE}
-
- {module_include location='product_list_row'}
-
-
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.products.edit"}
-
-
-
- {/loop}
-
- {elseloop rel="can_change"}
-
-
-
- {/elseloop}
-
-
-
- {admin_position_block
- permission="admin.product.edit"
- path={url path='admin/product' category_id=$ID}
- url_parameter="product_id"
- in_place_edit_class="productPositionChange"
- position=$POSITION
- id=$ID
- }
-
-
-
-
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.product.edit"}
-
- {/loop}
-
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.product.delete"}
-
+
+ {loop type="image" name="cat_image" source="category" source_id="$ID" limit="1" width="50" height="50" resize_mode="crop" backend_context="1"}
+
{/loop}
-
-
-
- {/loop}
-
- {/ifloop}
+
- {elseloop rel="product_list"}
-
-
- {intl l="This category doesn't have any products. To add a new product, click the + button above."}
-
-
- {/elseloop}
-
-
-
-
+
+
+ {$TITLE}
+
+
- {module_include location='catalog_bottom'}
-
-
+ {module_include location='category_list_row'}
- {* Adding a new Category *}
+
+ {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.categories.edit"}
+
+
+
+ {/loop}
- {form name="thelia.admin.category.creation"}
+ {elseloop rel="can_change"}
+
+
+
+ {/elseloop}
+
+
+
+ {admin_position_block
+ permission="admin.categories.edit"
+ path={url path='admin/categories/update-position' category_id=$ID}
+ url_parameter="category_id"
+ in_place_edit_class="categoryPositionChange"
+ position=$POSITION
+ id=$ID
+ }
+
+
+
+
+
+
+ {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.categories.edit"}
+
+ {/loop}
+
+ {loop type="auth" name="can_delete" roles="ADMIN" permissions="admin.categories.delete"}
+
+ {/loop}
+
+
+
+ {/loop}
+
+ {/ifloop}
+
+ {elseloop rel="category_list"}
+
+
+
+
+ {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.categories.create"}
+ {intl l="This category has no sub-categories. To create a new one, click the + button above."}
+ {/loop}
+
+ {elseloop rel="can_create"}
+ {intl l="This category has no sub-categories."}
+ {/elseloop}
+
+
+
+
+ {/elseloop}
+
+
+
+
+
+ {module_include location='categories_bottom'}
+
+
+
+
+
+ {* Adding a new category *}
+
+ {form name="thelia.admin.category.creation"}
{* Capture the dialog body, to pass it to the generic dialog *}
{capture "category_creation_dialog"}
{form_hidden_fields form=$form}
- {form_field form=$form field='success_url'}
- {* on success, redirect to the edition page, _ID_ is replaced with the created object ID, see controller *}
-
- {/form_field}
+ {form_field form=$form field='success_url'}
+ {* on success, redirect to the edition page, _ID_ is replaced with the created object ID, see controller *}
+
+ {/form_field}
- {form_field form=$form field='parent'}
-
- {/form_field}
+ {form_field form=$form field='parent'}
+
+ {/form_field}
- {form_field form=$form field='title'}
-
- {/form_field}
+ {form_field form=$form field='visible'}
+
+ {/form_field}
{module_include location='category_create_form'}
- {/capture}
+ {/capture}
- {include
- file = "includes/generic-create-dialog.html"
+ {include
+ file = "includes/generic-create-dialog.html"
- dialog_id = "add_category_dialog"
- dialog_title = {intl l="Create a new category"}
- dialog_body = {$smarty.capture.category_creation_dialog nofilter}
+ dialog_id = "category_creation_dialog"
+ dialog_title = {intl l="Create a new category"}
+ dialog_body = {$smarty.capture.category_creation_dialog nofilter}
- dialog_ok_label = {intl l="Create this category"}
- dialog_cancel_label = {intl l="Cancel"}
+ dialog_ok_label = {intl l="Create this category"}
- form_action = {url path='/admin/categories/create'}
- form_enctype = {form_enctype form=$form}
- form_error_message = $form_error_message
- }
+ form_action = {url path='/admin/categories/create'}
+ form_enctype = {form_enctype form=$form}
+ form_error_message = $form_error_message
+ }
{/form}
- {* Delete category confirmation dialog *}
+
+ {* Delete confirmation dialog *}
{capture "category_delete_dialog"}
-
-
+
{module_include location='category_delete_form'}
@@ -399,9 +263,9 @@
{include
file = "includes/generic-confirm-dialog.html"
- dialog_id = "delete_category_dialog"
- dialog_title = {intl l="Delete a category"}
- dialog_message = {intl l="Do you really want to delete this category, and
all its contents ?"}
+ dialog_id = "category_delete_dialog"
+ dialog_title = {intl l="Delete category"}
+ dialog_message = {intl l="Do you really want to delete this category and all its content ?"}
form_action = {url path='/admin/categories/delete'}
form_content = {$smarty.capture.category_delete_dialog nofilter}
@@ -410,108 +274,76 @@
{block name="javascript-initialization"}
- {javascripts file='assets/js/bootstrap-switch/bootstrap-switch.js'}
-
- {/javascripts}
+ {javascripts file='assets/js/bootstrap-switch/bootstrap-switch.js'}
+
+ {/javascripts}
- {javascripts file='assets/js/bootstrap-editable/bootstrap-editable.js'}
-
- {/javascripts}
+ {javascripts file='assets/js/bootstrap-editable/bootstrap-editable.js'}
+
+ {/javascripts}
-
+
{/block}
\ No newline at end of file
diff --git a/templates/admin/default/category-edit.html b/templates/admin/default/category-edit.html
index e01849475..9fa9e18e4 100755
--- a/templates/admin/default/category-edit.html
+++ b/templates/admin/default/category-edit.html
@@ -11,7 +11,7 @@
{include file="includes/catalog-breadcrumb.html"}
- {loop name="category_edit" type="category" visible="*" id="{$current_category_id}" backend_context="1" lang="$edit_language_id"}
+ {loop name="category_edit" type="category" visible="*" id="{$category_id}" backend_context="1" lang="$edit_language_id"}
-
+
+
-
-
-
+
-
-
+
+ klljkmk
+
-
+
+
-
+
+
-
-
-
- {/loop}
+
+
+
+
+
+ {/loop}
@@ -217,10 +154,6 @@