diff --git a/core/lib/Thelia/Action/Attribute.php b/core/lib/Thelia/Action/Attribute.php
index a2e956d8e..44c5968a4 100644
--- a/core/lib/Thelia/Action/Attribute.php
+++ b/core/lib/Thelia/Action/Attribute.php
@@ -41,6 +41,7 @@ use Thelia\Core\Event\CategoryEvent;
use Thelia\Core\Event\AttributeEvent;
use Thelia\Model\AttributeTemplate;
use Thelia\Model\AttributeTemplateQuery;
+use Thelia\Model\TemplateQuery;
class Attribute extends BaseAction implements EventSubscriberInterface
{
@@ -137,23 +138,33 @@ class Attribute extends BaseAction implements EventSubscriberInterface
}
}
- public function addToAllTemplates(AttributeEvent $event)
+ protected function doAddToAllTemplates(AttributeModel $attribute)
{
- $templates = AttributeTemplateQuery::create()->find();
+ $templates = TemplateQuery::create()->find();
foreach($templates as $template) {
- $pat = new AttributeTemplate();
- $pat->setTemplate($template->getId())
- ->setAttributeId($event->getAttribute()->getId())
- ->save();
+ $attribute_template = new AttributeTemplate();
+
+ if (null === AttributeTemplateQuery::create()->filterByAttribute($attribute)->filterByTemplate($template)->findOne()) {
+ $attribute_template
+ ->setAttribute($attribute)
+ ->setTemplate($template)
+ ->save()
+ ;
+ }
}
}
+ public function addToAllTemplates(AttributeEvent $event)
+ {
+ $this->doAddToAllTemplates($event->getAttribute());
+ }
+
public function removeFromAllTemplates(AttributeEvent $event)
{
// Delete this attribute from all product templates
- AttributeTemplateQuery::create()->filterByAttributeId($event->getAttribute()->getId())->delete();
+ AttributeTemplateQuery::create()->filterByAttribute($event->getAttribute())->delete();
}
/**
diff --git a/core/lib/Thelia/Action/Cart.php b/core/lib/Thelia/Action/Cart.php
index 5549f3eb3..22760a4c7 100755
--- a/core/lib/Thelia/Action/Cart.php
+++ b/core/lib/Thelia/Action/Cart.php
@@ -65,7 +65,7 @@ class Cart extends BaseAction implements EventSubscriberInterface
->filterByProductSaleElementsId($productSaleElementsId)
->findOne();
- $this->doAddItem($cart, $productId, $productSaleElementsId, $quantity, $productPrice);
+ $this->doAddItem($cart, $productId, $productPrice->getProductSaleElements(), $quantity, $productPrice);
}
if ($append && $cartItem !== null) {
@@ -166,17 +166,18 @@ class Cart extends BaseAction implements EventSubscriberInterface
* @param float $quantity
* @param ProductPrice $productPrice
*/
- protected function doAddItem(\Thelia\Model\Cart $cart, $productId, $productSaleElementsId, $quantity, ProductPrice $productPrice)
+ protected function doAddItem(\Thelia\Model\Cart $cart, $productId, \Thelia\Model\ProductSaleElements $productSaleElements, $quantity, ProductPrice $productPrice)
{
$cartItem = new CartItem();
$cartItem->setDisptacher($this->getDispatcher());
$cartItem
->setCart($cart)
->setProductId($productId)
- ->setProductSaleElementsId($productSaleElementsId)
+ ->setProductSaleElementsId($productSaleElements->getId())
->setQuantity($quantity)
->setPrice($productPrice->getPrice())
->setPromoPrice($productPrice->getPromoPrice())
+ ->setPromo($productSaleElements->getPromo())
->setPriceEndOfLife(time() + ConfigQuery::read("cart.priceEOF", 60*60*24*30))
->save();
}
diff --git a/core/lib/Thelia/Action/Feature.php b/core/lib/Thelia/Action/Feature.php
new file mode 100644
index 000000000..a746ce4e2
--- /dev/null
+++ b/core/lib/Thelia/Action/Feature.php
@@ -0,0 +1,186 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Action;
+
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+use Thelia\Model\FeatureQuery;
+use Thelia\Model\Feature as FeatureModel;
+
+use Thelia\Core\Event\TheliaEvents;
+
+use Thelia\Core\Event\FeatureUpdateEvent;
+use Thelia\Core\Event\FeatureCreateEvent;
+use Thelia\Core\Event\FeatureDeleteEvent;
+use Thelia\Model\ConfigQuery;
+use Thelia\Model\FeatureAv;
+use Thelia\Model\FeatureAvQuery;
+use Thelia\Core\Event\UpdatePositionEvent;
+use Thelia\Core\Event\CategoryEvent;
+use Thelia\Core\Event\FeatureEvent;
+use Thelia\Model\FeatureTemplate;
+use Thelia\Model\FeatureTemplateQuery;
+use Thelia\Model\TemplateQuery;
+
+class Feature extends BaseAction implements EventSubscriberInterface
+{
+ /**
+ * Create a new feature entry
+ *
+ * @param FeatureCreateEvent $event
+ */
+ public function create(FeatureCreateEvent $event)
+ {
+ $feature = new FeatureModel();
+
+ $feature
+ ->setDispatcher($this->getDispatcher())
+
+ ->setLocale($event->getLocale())
+ ->setTitle($event->getTitle())
+
+ ->save()
+ ;
+
+ $event->setFeature($feature);
+
+ // Add atribute to all product templates if required
+ if ($event->getAddToAllTemplates() != 0) {
+ // TODO: add to all product template
+ }
+ }
+
+ /**
+ * Change a product feature
+ *
+ * @param FeatureUpdateEvent $event
+ */
+ public function update(FeatureUpdateEvent $event)
+ {
+ $search = FeatureQuery::create();
+
+ if (null !== $feature = FeatureQuery::create()->findPk($event->getFeatureId())) {
+
+ $feature
+ ->setDispatcher($this->getDispatcher())
+
+ ->setLocale($event->getLocale())
+ ->setTitle($event->getTitle())
+ ->setDescription($event->getDescription())
+ ->setChapo($event->getChapo())
+ ->setPostscriptum($event->getPostscriptum())
+
+ ->save();
+
+ $event->setFeature($feature);
+ }
+ }
+
+ /**
+ * Delete a product feature entry
+ *
+ * @param FeatureDeleteEvent $event
+ */
+ public function delete(FeatureDeleteEvent $event)
+ {
+
+ if (null !== ($feature = FeatureQuery::create()->findPk($event->getFeatureId()))) {
+
+ $feature
+ ->setDispatcher($this->getDispatcher())
+ ->delete()
+ ;
+
+ $event->setFeature($feature);
+ }
+ }
+
+ /**
+ * Changes position, selecting absolute ou relative change.
+ *
+ * @param CategoryChangePositionEvent $event
+ */
+ public function updatePosition(UpdatePositionEvent $event)
+ {
+ if (null !== $feature = FeatureQuery::create()->findPk($event->getObjectId())) {
+
+ $feature->setDispatcher($this->getDispatcher());
+
+ $mode = $event->getMode();
+
+ if ($mode == UpdatePositionEvent::POSITION_ABSOLUTE)
+ return $feature->changeAbsolutePosition($event->getPosition());
+ else if ($mode == UpdatePositionEvent::POSITION_UP)
+ return $feature->movePositionUp();
+ else if ($mode == UpdatePositionEvent::POSITION_DOWN)
+ return $feature->movePositionDown();
+ }
+ }
+
+ protected function doAddToAllTemplates(FeatureModel $feature)
+ {
+ $templates = TemplateQuery::create()->find();
+
+ foreach($templates as $template) {
+
+ $feature_template = new FeatureTemplate();
+
+ if (null === FeatureTemplateQuery::create()->filterByFeature($feature)->filterByTemplate($template)->findOne()) {
+ $feature_template
+ ->setFeature($feature)
+ ->setTemplate($template)
+ ->save()
+ ;
+ }
+ }
+ }
+
+ public function addToAllTemplates(FeatureEvent $event)
+ {
+ $this->doAddToAllTemplates($event->getFeature());
+ }
+
+ public function removeFromAllTemplates(FeatureEvent $event)
+ {
+ // Delete this feature from all product templates
+ FeatureTemplateQuery::create()->filterByFeature($event->getFeature())->delete();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public static function getSubscribedEvents()
+ {
+ return array(
+ TheliaEvents::FEATURE_CREATE => array("create", 128),
+ TheliaEvents::FEATURE_UPDATE => array("update", 128),
+ TheliaEvents::FEATURE_DELETE => array("delete", 128),
+ TheliaEvents::FEATURE_UPDATE_POSITION => array("updatePosition", 128),
+
+ TheliaEvents::FEATURE_REMOVE_FROM_ALL_TEMPLATES => array("removeFromAllTemplates", 128),
+ TheliaEvents::FEATURE_ADD_TO_ALL_TEMPLATES => array("addToAllTemplates", 128),
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/core/lib/Thelia/Action/FeatureAv.php b/core/lib/Thelia/Action/FeatureAv.php
new file mode 100644
index 000000000..2bd117b4b
--- /dev/null
+++ b/core/lib/Thelia/Action/FeatureAv.php
@@ -0,0 +1,143 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Action;
+
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+use Thelia\Model\FeatureAvQuery;
+use Thelia\Model\FeatureAv as FeatureAvModel;
+
+use Thelia\Core\Event\TheliaEvents;
+
+use Thelia\Core\Event\FeatureAvUpdateEvent;
+use Thelia\Core\Event\FeatureAvCreateEvent;
+use Thelia\Core\Event\FeatureAvDeleteEvent;
+use Thelia\Model\ConfigQuery;
+use Thelia\Core\Event\UpdatePositionEvent;
+
+class FeatureAv extends BaseAction implements EventSubscriberInterface
+{
+ /**
+ * Create a new feature entry
+ *
+ * @param FeatureAvCreateEvent $event
+ */
+ public function create(FeatureAvCreateEvent $event)
+ {
+ $feature = new FeatureAvModel();
+
+ $feature
+ ->setDispatcher($this->getDispatcher())
+
+ ->setFeatureId($event->getFeatureId())
+ ->setLocale($event->getLocale())
+ ->setTitle($event->getTitle())
+
+ ->save()
+ ;
+
+ $event->setFeatureAv($feature);
+ }
+
+ /**
+ * Change a product feature
+ *
+ * @param FeatureAvUpdateEvent $event
+ */
+ public function update(FeatureAvUpdateEvent $event)
+ {
+ $search = FeatureAvQuery::create();
+
+ if (null !== $feature = FeatureAvQuery::create()->findPk($event->getFeatureAvId())) {
+
+ $feature
+ ->setDispatcher($this->getDispatcher())
+
+ ->setLocale($event->getLocale())
+ ->setTitle($event->getTitle())
+ ->setDescription($event->getDescription())
+ ->setChapo($event->getChapo())
+ ->setPostscriptum($event->getPostscriptum())
+
+ ->save();
+
+ $event->setFeatureAv($feature);
+ }
+ }
+
+ /**
+ * Delete a product feature entry
+ *
+ * @param FeatureAvDeleteEvent $event
+ */
+ public function delete(FeatureAvDeleteEvent $event)
+ {
+
+ if (null !== ($feature = FeatureAvQuery::create()->findPk($event->getFeatureAvId()))) {
+
+ $feature
+ ->setDispatcher($this->getDispatcher())
+ ->delete()
+ ;
+
+ $event->setFeatureAv($feature);
+ }
+ }
+
+ /**
+ * Changes position, selecting absolute ou relative change.
+ *
+ * @param CategoryChangePositionEvent $event
+ */
+ public function updatePosition(UpdatePositionEvent $event)
+ {
+ if (null !== $feature = FeatureAvQuery::create()->findPk($event->getObjectId())) {
+
+ $feature->setDispatcher($this->getDispatcher());
+
+ $mode = $event->getMode();
+
+ if ($mode == UpdatePositionEvent::POSITION_ABSOLUTE)
+ return $feature->changeAbsolutePosition($event->getPosition());
+ else if ($mode == UpdatePositionEvent::POSITION_UP)
+ return $feature->movePositionUp();
+ else if ($mode == UpdatePositionEvent::POSITION_DOWN)
+ return $feature->movePositionDown();
+ }
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public static function getSubscribedEvents()
+ {
+ return array(
+ TheliaEvents::FEATURE_AV_CREATE => array("create", 128),
+ TheliaEvents::FEATURE_AV_UPDATE => array("update", 128),
+ TheliaEvents::FEATURE_AV_DELETE => array("delete", 128),
+ TheliaEvents::FEATURE_AV_UPDATE_POSITION => array("updatePosition", 128),
+ );
+ }
+}
\ No newline at end of file
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/action.xml b/core/lib/Thelia/Config/Resources/action.xml
index f2fa776c3..a586667d1 100755
--- a/core/lib/Thelia/Config/Resources/action.xml
+++ b/core/lib/Thelia/Config/Resources/action.xml
@@ -67,11 +67,21 @@
* 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/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/core/lib/Thelia/Core/Template/Loop/Feed.php b/core/lib/Thelia/Core/Template/Loop/Feed.php
index a40f84647..cf29cf3b7 100755
--- a/core/lib/Thelia/Core/Template/Loop/Feed.php
+++ b/core/lib/Thelia/Core/Template/Loop/Feed.php
@@ -78,7 +78,7 @@ class Feed extends BaseLoop
$indexes[] = $idx;
}
- $loopResult = new LoopResult($query);
+ $loopResult = new LoopResult($indexes);
foreach ($indexes as $idx) {
@@ -92,7 +92,7 @@ class Feed extends BaseLoop
$date = $item->get_date('d/m/Y');
- $loopResultRow = new LoopResultRow($loopResult, $item, $this->versionable, $this->timestampable, $this->countable);
+ $loopResultRow = new LoopResultRow($loopResult, null, $this->versionable, $this->timestampable, $this->countable);
$loopResultRow->set("URL", $item->get_permalink());
$loopResultRow->set("TITLE", $item->get_title());
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/core/lib/Thelia/Form/CartAdd.php b/core/lib/Thelia/Form/CartAdd.php
index fbecd25e1..53496c513 100755
--- a/core/lib/Thelia/Form/CartAdd.php
+++ b/core/lib/Thelia/Form/CartAdd.php
@@ -84,7 +84,7 @@ class CartAdd extends BaseForm
"required" => true
))
- ->add("quantity", "text", array(
+ ->add("quantity", "number", array(
"constraints" => array(
new Constraints\NotBlank(),
new Constraints\Callback(array("methods" => array(
diff --git a/core/lib/Thelia/Form/CountryCreationForm.php b/core/lib/Thelia/Form/CountryCreationForm.php
new file mode 100644
index 000000000..ad6701a64
--- /dev/null
+++ b/core/lib/Thelia/Form/CountryCreationForm.php
@@ -0,0 +1,85 @@
+. */
+/* */
+/*************************************************************************************/
+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("Country title *"),
+ "label_attr" => array(
+ "for" => "title"
+ )
+ ))
+ ->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_creation";
+ }
+}
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/core/lib/Thelia/Form/FeatureAvCreationForm.php b/core/lib/Thelia/Form/FeatureAvCreationForm.php
new file mode 100644
index 000000000..504cc9338
--- /dev/null
+++ b/core/lib/Thelia/Form/FeatureAvCreationForm.php
@@ -0,0 +1,62 @@
+. */
+/* */
+/*************************************************************************************/
+namespace Thelia\Form;
+
+use Symfony\Component\Validator\Constraints;
+use Thelia\Model\CurrencyQuery;
+use Symfony\Component\Validator\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Thelia\Core\Translation\Translator;
+
+class FeatureAvCreationForm extends BaseForm
+{
+ protected function buildForm()
+ {
+ $this->formBuilder
+ ->add("title" , "text" , array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Title *"),
+ "label_attr" => array(
+ "for" => "title"
+ ))
+ )
+ ->add("locale" , "text" , array(
+ "constraints" => array(
+ new NotBlank()
+ ))
+ )
+ ->add("feature_id", "hidden", array(
+ "constraints" => array(
+ new NotBlank()
+ ))
+ )
+ ;
+ }
+
+ public function getName()
+ {
+ return "thelia_featureav_creation";
+ }
+}
\ No newline at end of file
diff --git a/core/lib/Thelia/Form/FeatureCreationForm.php b/core/lib/Thelia/Form/FeatureCreationForm.php
new file mode 100644
index 000000000..1977bd78b
--- /dev/null
+++ b/core/lib/Thelia/Form/FeatureCreationForm.php
@@ -0,0 +1,66 @@
+. */
+/* */
+/*************************************************************************************/
+namespace Thelia\Form;
+
+use Symfony\Component\Validator\Constraints;
+use Thelia\Model\CurrencyQuery;
+use Symfony\Component\Validator\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Thelia\Core\Translation\Translator;
+
+class FeatureCreationForm extends BaseForm
+{
+ protected function buildForm()
+ {
+ $this->formBuilder
+ ->add("title" , "text" , array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Title *"),
+ "label_attr" => array(
+ "for" => "title"
+ ))
+ )
+ ->add("locale" , "text" , array(
+ "constraints" => array(
+ new NotBlank()
+ ))
+ )
+ ->add("add_to_all" , "checkbox" , array(
+ "constraints" => array(
+ new NotBlank()
+ ),
+ "label" => Translator::getInstance()->trans("Add to all product templates"),
+ "label_attr" => array(
+ "for" => "add_to_all"
+ ))
+ )
+ ;
+ }
+
+ public function getName()
+ {
+ return "thelia_feature_creation";
+ }
+}
diff --git a/core/lib/Thelia/Form/FeatureModificationForm.php b/core/lib/Thelia/Form/FeatureModificationForm.php
new file mode 100644
index 000000000..1702f299e
--- /dev/null
+++ b/core/lib/Thelia/Form/FeatureModificationForm.php
@@ -0,0 +1,62 @@
+. */
+/* */
+/*************************************************************************************/
+namespace Thelia\Form;
+
+use Symfony\Component\Validator\Constraints;
+use Thelia\Model\CurrencyQuery;
+use Symfony\Component\Validator\ExecutionContextInterface;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Thelia\Core\Translation\Translator;
+use Symfony\Component\Validator\Constraints\GreaterThan;
+
+class FeatureModificationForm extends FeatureCreationForm
+{
+ use StandardDescriptionFieldsTrait;
+
+ protected function buildForm()
+ {
+ $this->formBuilder
+ ->add("id", "hidden", array(
+ "constraints" => array(
+ new GreaterThan(
+ array('value' => 0)
+ )
+ )
+ ))
+/* FIXME: doesn't work
+ ->add('feature_values', 'collection', array(
+ 'type' => 'text',
+ 'options' => array('required' => false)
+ ))
+*/
+ ;
+
+ // Add standard description fields
+ $this->addStandardDescFields();
+ }
+
+ public function getName()
+ {
+ return "thelia_feature_modification";
+ }
+}
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/Cart.php b/core/lib/Thelia/Model/Cart.php
index 78e19daa4..89eeff249 100755
--- a/core/lib/Thelia/Model/Cart.php
+++ b/core/lib/Thelia/Model/Cart.php
@@ -45,16 +45,18 @@ class Cart extends BaseCart
$item->setQuantity($cartItem->getQuantity());
$item->setProductSaleElements($productSaleElements);
if ($currentDateTime <= $cartItem->getPriceEndOfLife()) {
- $item->setPrice($cartItem->getPrice());
- $item->setPromoPrice($cartItem->getPromoPrice());
+ $item->setPrice($cartItem->getPrice())
+ ->setPromoPrice($cartItem->getPromoPrice())
+ ->setPromo($productSaleElements->getPromo())
// TODO : new price EOF or duplicate current priceEOF from $cartItem ?
- $item->setPriceEndOfLife($cartItem->getPriceEndOfLife());
+ ->setPriceEndOfLife($cartItem->getPriceEndOfLife());
} else {
$productPrices = ProductPriceQuery::create()->filterByProductSaleElements($productSaleElements)->findOne();
- $item->setPrice($productPrices->getPrice());
- $item->setPromoPrice($productPrices->getPromoPrice());
- $item->setPriceEndOfLife(time() + ConfigQuery::read("cart.priceEOF", 60*60*24*30));
+ $item->setPrice($productPrices->getPrice())
+ ->setPromoPrice($productPrices->getPromoPrice())
+ ->setPromo($productSaleElements->getPromo())
+ ->setPriceEndOfLife(time() + ConfigQuery::read("cart.priceEOF", 60*60*24*30));
}
$item->save();
}
diff --git a/core/lib/Thelia/Model/Feature.php b/core/lib/Thelia/Model/Feature.php
index ce7c57b1d..cf0284d2b 100755
--- a/core/lib/Thelia/Model/Feature.php
+++ b/core/lib/Thelia/Model/Feature.php
@@ -3,7 +3,70 @@
namespace Thelia\Model;
use Thelia\Model\Base\Feature as BaseFeature;
+use Propel\Runtime\Connection\ConnectionInterface;
+use Thelia\Core\Event\TheliaEvents;
+use Thelia\Core\Event\FeatureEvent;
class Feature extends BaseFeature {
+ use \Thelia\Model\Tools\ModelEventDispatcherTrait;
+ use \Thelia\Model\Tools\PositionManagementTrait;
+
+ /**
+ * {@inheritDoc}
+ */
+ public function preInsert(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::BEFORE_CREATEFEATURE, new FeatureEvent($this));
+
+ // Set the current position for the new object
+ $this->setPosition($this->getNextPosition());
+
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function postInsert(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::AFTER_CREATEFEATURE, new FeatureEvent($this));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function preUpdate(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::BEFORE_UPDATEFEATURE, new FeatureEvent($this));
+
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function postUpdate(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::AFTER_UPDATEFEATURE, new FeatureEvent($this));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function preDelete(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::BEFORE_DELETEFEATURE, new FeatureEvent($this));
+
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function postDelete(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::AFTER_DELETEFEATURE, new FeatureEvent($this));
+ }
+
}
diff --git a/core/lib/Thelia/Model/FeatureAv.php b/core/lib/Thelia/Model/FeatureAv.php
index 68b6fa92a..ae6e35087 100755
--- a/core/lib/Thelia/Model/FeatureAv.php
+++ b/core/lib/Thelia/Model/FeatureAv.php
@@ -3,7 +3,78 @@
namespace Thelia\Model;
use Thelia\Model\Base\FeatureAv as BaseFeatureAv;
+use Thelia\Core\Event\TheliaEvents;
+use Propel\Runtime\Connection\ConnectionInterface;
+use Thelia\Core\Event\FeatureAvEvent;
class FeatureAv extends BaseFeatureAv {
+ use \Thelia\Model\Tools\ModelEventDispatcherTrait;
+
+ use \Thelia\Model\Tools\PositionManagementTrait;
+
+ /**
+ * when dealing with position, be sure to work insite the current feature.
+ */
+ protected function addCriteriaToPositionQuery($query) {
+ $query->filterByFeatureId($this->getFeatureId());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function preInsert(ConnectionInterface $con = null)
+ {
+ // Set the current position for the new object
+ $this->setPosition($this->getNextPosition());
+
+ $this->dispatchEvent(TheliaEvents::BEFORE_CREATEFEATURE_AV, new FeatureAvEvent($this));
+
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function postInsert(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::AFTER_CREATEFEATURE_AV, new FeatureAvEvent($this));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function preUpdate(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::BEFORE_UPDATEFEATURE_AV, new FeatureAvEvent($this));
+
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function postUpdate(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::AFTER_UPDATEFEATURE_AV, new FeatureAvEvent($this));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function preDelete(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::BEFORE_DELETEFEATURE_AV, new FeatureAvEvent($this));
+
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function postDelete(ConnectionInterface $con = null)
+ {
+ $this->dispatchEvent(TheliaEvents::AFTER_DELETEFEATURE_AV, new FeatureAvEvent($this));
+ }
+
}
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/core/lib/Thelia/Tests/Constraint/ConstraintValidatorTest.php b/core/lib/Thelia/Tests/Constraint/ConstraintValidatorTest.php
index 17b6b49e1..68818a092 100644
--- a/core/lib/Thelia/Tests/Constraint/ConstraintValidatorTest.php
+++ b/core/lib/Thelia/Tests/Constraint/ConstraintValidatorTest.php
@@ -65,6 +65,9 @@ class ConstraintValidatorTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue($ConstraintValidator));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -99,6 +102,9 @@ class ConstraintValidatorTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue($ConstraintValidator));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -136,6 +142,9 @@ class ConstraintValidatorTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(5));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue($ConstraintValidator));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -183,6 +192,9 @@ class ConstraintValidatorTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(5));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue($ConstraintValidator));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
diff --git a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForTotalAmountTest.php b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForTotalAmountTest.php
index 4c6da4ad2..c3f7249df 100644
--- a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForTotalAmountTest.php
+++ b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForTotalAmountTest.php
@@ -23,6 +23,7 @@
namespace Thelia\Coupon;
+use Thelia\Constraint\ConstraintValidator;
use Thelia\Constraint\Rule\AvailableForTotalAmountManager;
use Thelia\Constraint\Rule\Operators;
@@ -169,6 +170,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -205,6 +209,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -241,6 +248,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -277,6 +287,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -313,6 +326,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -349,6 +365,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -385,6 +404,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -421,6 +443,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -457,6 +482,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -493,6 +521,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -529,6 +560,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -565,6 +599,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -601,6 +638,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
@@ -637,6 +677,9 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getCheckoutCurrency')
->will($this->returnValue('EUR'));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForTotalAmountManager($stubAdapter);
$operators = array(
diff --git a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php
index 76a744848..4ecbcb8ac 100644
--- a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php
+++ b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php
@@ -23,6 +23,7 @@
namespace Thelia\Coupon;
+use Thelia\Constraint\ConstraintValidator;
use Thelia\Constraint\Rule\AvailableForXArticlesManager;
use Thelia\Constraint\Rule\Operators;
use Thelia\Constraint\Rule\SerializableRule;
@@ -192,6 +193,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -224,6 +228,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -256,6 +263,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -288,6 +298,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -320,6 +333,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -352,6 +368,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -384,6 +403,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -416,6 +438,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -448,6 +473,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -480,6 +508,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -512,6 +543,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -544,6 +578,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -570,6 +607,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
@@ -602,6 +642,9 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
$stubAdapter->expects($this->any())
->method('getNbArticlesInCart')
->will($this->returnValue(4));
+ $stubAdapter->expects($this->any())
+ ->method('getConstraintValidator')
+ ->will($this->returnValue(new ConstraintValidator()));
$rule1 = new AvailableForXArticlesManager($stubAdapter);
$operators = array(
diff --git a/install/faker.php b/install/faker.php
index f15570e8a..66303f05a 100755
--- a/install/faker.php
+++ b/install/faker.php
@@ -1,7 +1,5 @@
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();
@@ -327,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();
@@ -366,6 +340,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;
@@ -623,6 +598,8 @@ Sed facilisis pellentesque nisl, eu tincidunt erat scelerisque a. Nullam malesua
$coupon1->setMaxUsage(40);
$coupon1->setIsCumulative(1);
$coupon1->setIsRemovingPostage(0);
+ $coupon1->setIsAvailableOnSpecialOffers(1);
+
$coupon1->save();
@@ -671,8 +648,10 @@ Sed facilisis pellentesque nisl, eu tincidunt erat scelerisque a. Nullam malesua
$serializedRules = $constraintFactory->serializeCouponRuleCollection($rules);
$coupon2->setSerializedRules($serializedRules);
- $coupon1->setMaxUsage(-1);
+ $coupon2->setMaxUsage(-1);
$coupon2->setIsCumulative(0);
$coupon2->setIsRemovingPostage(1);
+ $coupon2->setIsAvailableOnSpecialOffers(1);
+
$coupon2->save();
}
diff --git a/install/insert.sql b/install/insert.sql
index a49dc7231..01d7fbce2 100755
--- a/install/insert.sql
+++ b/install/insert.sql
@@ -60,271 +60,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 7e1818ef6..f178467a1 100755
--- a/install/thelia.sql
+++ b/install/thelia.sql
@@ -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`),
diff --git a/local/modules/DebugBar/DataCollector/PropelCollector.php b/local/modules/DebugBar/DataCollector/PropelCollector.php
index b0d503b18..c0ce87746 100644
--- a/local/modules/DebugBar/DataCollector/PropelCollector.php
+++ b/local/modules/DebugBar/DataCollector/PropelCollector.php
@@ -40,7 +40,9 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
protected $peakMemory = 0;
- public function __construct()
+ protected $alternativeLogger;
+
+ public function __construct(LoggerInterface $alternativeLogger = null)
{
$serviceContainer = Propel::getServiceContainer();
$serviceContainer->setLogger('defaultLogger', $this);
@@ -54,6 +56,8 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
'commit',
'rollBack',
));
+
+ $this->alternativeLogger = $alternativeLogger;
}
/**
@@ -118,6 +122,10 @@ class PropelCollector extends DataCollector implements Renderable, LoggerInterfa
list($sql, $duration_str) = $this->parseAndLogSqlQuery($message);
$message = "$sql ($duration_str)";
+
+ if ($this->alternativeLogger) {
+ $this->alternativeLogger->log($level, $message);
+ }
}
/**
@@ -172,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);
}
/**
@@ -187,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);
}
/**
@@ -201,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);
}
/**
@@ -214,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);
}
/**
@@ -229,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);
}
/**
@@ -241,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);
}
/**
@@ -255,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);
}
/**
@@ -267,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);
}
diff --git a/local/modules/DebugBar/Listeners/DebugBarListeners.php b/local/modules/DebugBar/Listeners/DebugBarListeners.php
index f789a9a13..edcd5cb21 100644
--- a/local/modules/DebugBar/Listeners/DebugBarListeners.php
+++ b/local/modules/DebugBar/Listeners/DebugBarListeners.php
@@ -50,7 +50,7 @@ class DebugBarListeners extends BaseAction implements EventSubscriberInterface {
//$debugBar->addCollector(new RequestDataCollector());
$debugBar->addCollector(new TimeDataCollector());
$debugBar->addCollector(new MemoryCollector());
- $debugBar->addCollector(new PropelCollector());
+ $debugBar->addCollector(new PropelCollector(\Thelia\Log\Tlog::getInstance()));
}
/**
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'}
| {intl l='ID'} | + +{intl l='Attribute title'} | + + {module_include location='template_attributes_table_header'} + +{intl l="Actions"} | +
|---|---|---|
| {$ID} | + ++ {$TITLE} + | + + {module_include location='template_attributes_table_row'} + +
+
+ {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.configuration.template.attribute.delete"}
+
+
+
+ {/loop}
+
+ |
+
|
+
+ {intl l="This template contains no attributes"}
+
+ |
+ ||
| {intl l='ID'} | + +{intl l='Feature title'} | + + {module_include location='template_features_table_header'} + +{intl l="Actions"} | +
|---|---|---|
| {$ID} | + ++ {$TITLE} + | + + {module_include location='template_features_table_row'} + +
+
+ {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.configuration.template.feature.delete"}
+
+
+
+ {/loop}
+
+ |
+
|
+
+ {intl l="This template contains no features"}
+
+ |
+ ||
{$DESCRIPTION|strip_tags|unescape:"htmlall"|truncate:250:"...":true nofilter}
- -{$DESCRIPTION|strip_tags|unescape:"htmlall"|truncate:250:"...":true nofilter}
+{intl l="Go to administration home"}
+ {block name="error-message"}