diff --git a/core/lib/Thelia/Action/Area.php b/core/lib/Thelia/Action/Area.php new file mode 100644 index 000000000..d9173ae93 --- /dev/null +++ b/core/lib/Thelia/Action/Area.php @@ -0,0 +1,131 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Action; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Thelia\Core\Event\Area\AreaAddCountryEvent; +use Thelia\Core\Event\Area\AreaCreateEvent; +use Thelia\Core\Event\Area\AreaDeleteEvent; +use Thelia\Core\Event\Area\AreaRemoveCountryEvent; +use Thelia\Core\Event\Area\AreaUpdatePostageEvent; +use Thelia\Core\Event\TheliaEvents; +use Thelia\Model\AreaQuery; +use Thelia\Model\CountryQuery; +use Thelia\Action\BaseAction; +use Thelia\Model\Area as AreaModel; + + +/** + * Class Area + * @package Thelia\Action + * @author Manuel Raynaud + */ +class Area extends BaseAction implements EventSubscriberInterface +{ + + public function addCountry(AreaAddCountryEvent $event) + { + if (null !== $country = CountryQuery::create()->findPk($event->getCountryId())) { + $country->setDispatcher($this->getDispatcher()); + $country->setAreaId($event->getAreaId()) + ->save(); + + $event->setArea($country->getArea()); + } + } + + public function removeCountry(AreaRemoveCountryEvent $event) + { + if (null !== $country = CountryQuery::create()->findPk($event->getCountryId())) { + $country->setDispatcher($this->getDispatcher()); + $country->setAreaId(null) + ->save(); + } + } + + public function updatePostage(AreaUpdatePostageEvent $event) + { + if (null !== $area = AreaQuery::create()->findPk($event->getAreaId())) { + $area->setDispatcher($this->getDispatcher()); + $area + ->setPostage($event->getPostage()) + ->save(); + + $event->setArea($area); + } + } + + public function delete(AreaDeleteEvent $event) + { + if (null !== $area = AreaQuery::create()->findPk($event->getAreaId())) { + $area->setDispatcher($this->getDispatcher()); + $area->delete(); + + $event->setArea($area); + } + } + + public function create(AreaCreateEvent $event) + { + $area = new AreaModel(); + + $area + ->setDispatcher($this->getDispatcher()) + ->setName($event->getAreaName()) + ->save(); + + $event->setArea($area); + } + + + /** + * Returns an array of event names this subscriber wants to listen to. + * + * The array keys are event names and the value can be: + * + * * The method name to call (priority defaults to 0) + * * An array composed of the method name to call and the priority + * * An array of arrays composed of the method names to call and respective + * priorities, or 0 if unset + * + * For instance: + * + * * array('eventName' => 'methodName') + * * array('eventName' => array('methodName', $priority)) + * * array('eventName' => array(array('methodName1', $priority), array('methodName2')) + * + * @return array The event names to listen to + * + * @api + */ + public static function getSubscribedEvents() + { + return array( + TheliaEvents::AREA_ADD_COUNTRY => array('addCountry', 128), + TheliaEvents::AREA_REMOVE_COUNTRY => array('removeCountry', 128), + TheliaEvents::AREA_POSTAGE_UPDATE => array('updatePostage', 128), + TheliaEvents::AREA_DELETE => array('delete', 128), + TheliaEvents::AREA_CREATE => array('create', 128) + ); + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Action/Country.php b/core/lib/Thelia/Action/Country.php index 9bccfcea5..69bf3c568 100644 --- a/core/lib/Thelia/Action/Country.php +++ b/core/lib/Thelia/Action/Country.php @@ -59,7 +59,19 @@ class Country extends BaseAction implements EventSubscriberInterface public function update(CountryUpdateEvent $event) { + if (null !== $country = CountryQuery::create()->findPk($event->getCountryId())) { + $country + ->setIsocode($event->getIsocode()) + ->setIsoalpha2($event->getIsoAlpha2()) + ->setIsoalpha3($event->getIsoAlpha3()) + ->setLocale($event->getLocale()) + ->setTitle($event->getTitle()) + ->setChapo($event->getChapo()) + ->setDescription($event->getDescription()) + ->save(); + $event->setCountry($country); + } } public function delete(CountryDeleteEvent $event) diff --git a/core/lib/Thelia/Action/ShippingZone.php b/core/lib/Thelia/Action/ShippingZone.php new file mode 100644 index 000000000..517a5ca25 --- /dev/null +++ b/core/lib/Thelia/Action/ShippingZone.php @@ -0,0 +1,92 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Action; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Thelia\Core\Event\ShippingZone\ShippingZoneAddAreaEvent; +use Thelia\Core\Event\ShippingZone\ShippingZoneRemoveAreaEvent; +use Thelia\Core\Event\TheliaEvents; +use Thelia\Model\AreaDeliveryModule; +use Thelia\Model\AreaDeliveryModuleQuery; + + +/** + * Class ShippingZone + * @package Thelia\Action + * @author Manuel Raynaud + */ +class ShippingZone extends BaseAction implements EventSubscriberInterface +{ + + public function addArea(ShippingZoneAddAreaEvent $event) + { + $areaDelivery = new AreaDeliveryModule(); + + $areaDelivery + ->setAreaId($event->getAreaId()) + ->setDeliveryModuleId($event->getShoppingZoneId()) + ->save(); + } + + public function removeArea(ShippingZoneRemoveAreaEvent $event) + { + $areaDelivery = AreaDeliveryModuleQuery::create() + ->filterByAreaId($event->getAreaId()) + ->filterByDeliveryModuleId($event->getShoppingZoneId()) + ->findOne(); + + if($areaDelivery) { + $areaDelivery->delete(); + } else { + throw new \RuntimeException(sprintf('areaDeliveryModule not found with area_id = %d and delivery_module_id = %d', $event->getAreaId(), $event->getShoppingZoneId())); + } + } + + /** + * Returns an array of event names this subscriber wants to listen to. + * + * The array keys are event names and the value can be: + * + * * The method name to call (priority defaults to 0) + * * An array composed of the method name to call and the priority + * * An array of arrays composed of the method names to call and respective + * priorities, or 0 if unset + * + * For instance: + * + * * array('eventName' => 'methodName') + * * array('eventName' => array('methodName', $priority)) + * * array('eventName' => array(array('methodName1', $priority), array('methodName2')) + * + * @return array The event names to listen to + * + * @api + */ + public static function getSubscribedEvents() + { + return array( + TheliaEvents::SHIPPING_ZONE_ADD_AREA => array('addArea', 128), + TheliaEvents::SHIPPING_ZONE_REMOVE_AREA => array('removeArea', 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 939cc9d88..b3bc085bf 100755 --- a/core/lib/Thelia/Config/Resources/action.xml +++ b/core/lib/Thelia/Config/Resources/action.xml @@ -126,6 +126,16 @@ + + + + + + + + + + diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml index 5e2227989..88675d5b8 100755 --- a/core/lib/Thelia/Config/Resources/config.xml +++ b/core/lib/Thelia/Config/Resources/config.xml @@ -7,6 +7,7 @@ + @@ -125,6 +126,13 @@
+ + + + + + + diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml index 9803bc866..55ee6a90f 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -405,29 +405,6 @@ Thelia\Controller\Admin\FolderController::updatePositionAction - - - - Thelia\Controller\Admin\CountryController::defaultAction - - - - Thelia\Controller\Admin\CountryController::createAction - - - - Thelia\Controller\Admin\CountryController::updateAction - \d+ - - - - Thelia\Controller\Admin\CountryController::deleteAction - - - - Thelia\Controller\Admin\CountryController::toggleDefaultAction - - Thelia\Controller\Admin\ContentController::createAction @@ -706,21 +683,79 @@ \d+ + + Thelia\Controller\Admin\ShippingZoneController::addArea + + + + Thelia\Controller\Admin\ShippingZoneController::removeArea + + - Thelia\Controller\Admin\ShippingConfigurationController::indexAction + Thelia\Controller\Admin\AreaController::defaultAction - - Thelia\Controller\Admin\ShippingConfigurationController::updateAction - \d+ + + Thelia\Controller\Admin\AreaController::updateAction + \d+ + + + + Thelia\Controller\Admin\AreaController::deleteAction + + + + Thelia\Controller\Admin\AreaController::createAction + + + + Thelia\Controller\Admin\AreaController::updatePostageAction + \d+ + + + + Thelia\Controller\Admin\AreaController::addCountry + + + + Thelia\Controller\Admin\AreaController::removeCountry + + + + Thelia\Controller\Admin\CountryController::defaultAction + + + + Thelia\Controller\Admin\CountryController::createAction + + + + Thelia\Controller\Admin\CountryController::updateAction + \d+ + + + + Thelia\Controller\Admin\CountryController::processUpdateAction + \d+ + + + + Thelia\Controller\Admin\CountryController::deleteAction + + + + Thelia\Controller\Admin\CountryController::toggleDefaultAction + + + diff --git a/core/lib/Thelia/Controller/Admin/AreaController.php b/core/lib/Thelia/Controller/Admin/AreaController.php new file mode 100644 index 000000000..d6ac7918a --- /dev/null +++ b/core/lib/Thelia/Controller/Admin/AreaController.php @@ -0,0 +1,326 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Controller\Admin; + +use Thelia\Core\Event\Area\AreaAddCountryEvent; +use Thelia\Core\Event\Area\AreaCreateEvent; +use Thelia\Core\Event\Area\AreaDeleteEvent; +use Thelia\Core\Event\Area\AreaRemoveCountryEvent; +use Thelia\Core\Event\Area\AreaUpdateEvent; +use Thelia\Core\Event\Area\AreaUpdatePostageEvent; +use Thelia\Core\Event\TheliaEvents; +use Thelia\Form\Area\AreaCountryForm; +use Thelia\Form\Area\AreaCreateForm; +use Thelia\Form\Area\AreaModificationForm; +use Thelia\Form\Area\AreaPostageForm; +use Thelia\Form\Exception\FormValidationException; +use Thelia\Model\AreaQuery; + +/** + * Class AreaController + * @package Thelia\Controller\Admin + * @author Manuel Raynaud + */ +class AreaController extends AbstractCrudController +{ + + public function __construct() + { + parent::__construct( + 'area', + null, + null, + + 'admin.area.default', + 'admin.area.create', + 'admin.area.update', + 'admin.area.delete', + + TheliaEvents::AREA_CREATE, + TheliaEvents::AREA_UPDATE, + TheliaEvents::AREA_DELETE + ); + } + + protected function getAreaId() + { + return $this->getRequest()->get('area_id', 0); + } + + /** + * Return the creation form for this object + */ + protected function getCreationForm() + { + return new AreaCreateForm($this->getRequest()); + } + + /** + * Return the update form for this object + */ + protected function getUpdateForm() + { + return new AreaModificationForm($this->getRequest()); + } + + /** + * Hydrate the update form for this object, before passing it to the update template + * + * @param unknown $object + */ + protected function hydrateObjectForm($object) + { + $data = array( + 'name' => $object->getName() + ); + + return new AreaModificationForm($this->getRequest(), 'form', $data); + } + + /** + * Creates the creation event with the provided form data + * + * @param unknown $formData + * + * @return \Thelia\Core\Event\Area\AreaCreateEvent + */ + protected function getCreationEvent($formData) + { + $event = new AreaCreateEvent(); + + return $this->hydrateEvent($event, $formData); + } + + /** + * Creates the update event with the provided form data + * + * @param unknown $formData + */ + protected function getUpdateEvent($formData) + { + $event = new AreaUpdateEvent(); + + return $this->hydrateEvent($event, $formData); + } + + private function hydrateEvent($event, $formData) + { + $event->setAreaName($formData['name']); + + return $event; + } + + /** + * Creates the delete event with the provided form data + */ + protected function getDeleteEvent() + { + return new AreaDeleteEvent($this->getAreaId()); + } + + /** + * Return true if the event contains the object, e.g. the action has updated the object in the event. + * + * @param \Thelia\Core\Event\Area\AreaEvent $event + */ + protected function eventContainsObject($event) + { + return $event->hasArea(); + } + + /** + * Get the created object from an event. + * + * @param \Thelia\Core\Event\Area\AreaEvent $event + */ + protected function getObjectFromEvent($event) + { + return $event->getArea(); + } + + /** + * Load an existing object from the database + */ + protected function getExistingObject() + { + return AreaQuery::create()->findPk($this->getAreaId()); + } + + /** + * Returns the object label form the object event (name, title, etc.) + * + * @param \Thelia\Model\Area $object + */ + protected function getObjectLabel($object) + { + return $object->getName(); + } + + /** + * Returns the object ID from the object + * + * @param \Thelia\Model\Area $object + */ + protected function getObjectId($object) + { + return $object->getId(); + } + + /** + * Render the main list template + * + * @param unknown $currentOrder, if any, null otherwise. + */ + protected function renderListTemplate($currentOrder) + { + return $this->render("shipping-configuration"); + } + + /** + * Render the edition template + */ + protected function renderEditionTemplate() + { + return $this->render('shipping-configuration-edit',array( + 'area_id' => $this->getAreaId() + )); + } + + /** + * Redirect to the edition template + */ + protected function redirectToEditionTemplate() + { + $this->redirectToRoute('admin.configuration.shipping-configuration.update.view', array(), array( + "area_id" => $this->getAreaId() + ) + ); + } + + /** + * Redirect to the list template + */ + protected function redirectToListTemplate() + { + $this->redirectToRoute('admin.configuration.shipping-configuration.default'); + } + + /** + * add a country to a define area + */ + public function addCountry() + { + // Check current user authorization + if (null !== $response = $this->checkAuth($this->updatePermissionIdentifier)) return $response; + + $areaCountryForm = new AreaCountryForm($this->getRequest()); + $error_msg = null; + try { + + $form = $this->validateForm($areaCountryForm); + + $event = new AreaAddCountryEvent($form->get('area_id')->getData(), $form->get('country_id')->getData()); + + $this->dispatch(TheliaEvents::AREA_ADD_COUNTRY, $event); + + if (! $this->eventContainsObject($event)) + throw new \LogicException( + $this->getTranslator()->trans("No %obj was updated.", array('%obj', $this->objectName))); + + // Log object modification + if (null !== $changedObject = $this->getObjectFromEvent($event)) { + $this->adminLogAppend(sprintf("%s %s (ID %s) modified, new country added", ucfirst($this->objectName), $this->getObjectLabel($changedObject), $this->getObjectId($changedObject))); + } + + // Redirect to the success URL + $this->redirect($areaCountryForm->getSuccessUrl()); + + } catch (FormValidationException $ex) { + // Form cannot be validated + $error_msg = $this->createStandardFormValidationErrorMessage($ex); + } catch (\Exception $ex) { + // Any other error + $error_msg = $ex->getMessage(); + } + + $this->setupFormErrorContext( + $this->getTranslator()->trans("%obj modification", array('%obj' => $this->objectName)), $error_msg, $areaCountryForm); + + // At this point, the form has errors, and should be redisplayed. + return $this->renderEditionTemplate(); + } + + public function removeCountry() + { + // Check current user authorization + if (null !== $response = $this->checkAuth($this->updatePermissionIdentifier)) return $response; + $request = $this->getRequest(); + $removeCountryEvent = new AreaRemoveCountryEvent($request->request->get('areai_id', 0), $request->request->get('country_id', 0)); + + $this->dispatch(TheliaEvents::AREA_REMOVE_COUNTRY, $removeCountryEvent); + + $this->redirectToEditionTemplate(); + } + + public function updatePostageAction() + { + if (null !== $response = $this->checkAuth($this->updatePermissionIdentifier)) return $response; + + $areaUpdateForm = new AreaPostageForm($this->getRequest()); + $error_msg = null; + + try { + $form = $this->validateForm($areaUpdateForm); + + $event = new AreaUpdatePostageEvent($form->get('area_id')->getData()); + $event->setPostage($form->get('postage')->getData()); + + $this->dispatch(TheliaEvents::AREA_POSTAGE_UPDATE, $event); + + if (! $this->eventContainsObject($event)) + throw new \LogicException( + $this->getTranslator()->trans("No %obj was updated.", array('%obj', $this->objectName))); + + // Log object modification + if (null !== $changedObject = $this->getObjectFromEvent($event)) { + $this->adminLogAppend(sprintf("%s %s (ID %s) modified, country remove", ucfirst($this->objectName), $this->getObjectLabel($changedObject), $this->getObjectId($changedObject))); + } + + // Redirect to the success URL + $this->redirect($areaUpdateForm->getSuccessUrl()); + } catch (FormValidationException $ex) { + // Form cannot be validated + $error_msg = $this->createStandardFormValidationErrorMessage($ex); + } catch (\Exception $ex) { + // Any other error + $error_msg = $ex->getMessage(); + } + + $this->setupFormErrorContext( + $this->getTranslator()->trans("%obj modification", array('%obj' => $this->objectName)), $error_msg, $areaUpdateForm); + + // At this point, the form has errors, and should be redisplayed. + return $this->renderEditionTemplate(); + } +} diff --git a/core/lib/Thelia/Controller/Admin/BaseAdminController.php b/core/lib/Thelia/Controller/Admin/BaseAdminController.php index 5d99a877b..9adb7a19a 100755 --- a/core/lib/Thelia/Controller/Admin/BaseAdminController.php +++ b/core/lib/Thelia/Controller/Admin/BaseAdminController.php @@ -246,7 +246,7 @@ class BaseAdminController extends BaseController * @param unknown $routeId the route ID, as found in Config/Resources/routing/admin.xml * @param unknown $urlParameters the URL parametrs, as a var/value pair array */ - public function redirectToRoute($routeId, $urlParameters = array(), $routeParameters = array()) + public function redirectToRoute($routeId, array $urlParameters = array(), array $routeParameters = array()) { $this->redirect(URL::getInstance()->absoluteUrl($this->getRoute($routeId, $routeParameters), $urlParameters)); } diff --git a/core/lib/Thelia/Controller/Admin/CountryController.php b/core/lib/Thelia/Controller/Admin/CountryController.php index a272f7364..91160311f 100644 --- a/core/lib/Thelia/Controller/Admin/CountryController.php +++ b/core/lib/Thelia/Controller/Admin/CountryController.php @@ -39,24 +39,6 @@ use Thelia\Model\CountryQuery; class CountryController extends AbstractCrudController { - /** - * @param string $objectName the lower case object name. Example. "message" - * - * @param string $defaultListOrder the default object list order, or null if list is not sortable. Example: manual - * @param string $orderRequestParameterName Name of the request parameter that set the list order (null if list is not sortable) - * - * @param string $viewPermissionIdentifier the 'view' permission identifier. Example: "admin.configuration.message.view" - * @param string $createPermissionIdentifier the 'create' permission identifier. Example: "admin.configuration.message.create" - * @param string $updatePermissionIdentifier the 'update' permission identifier. Example: "admin.configuration.message.update" - * @param string $deletePermissionIdentifier the 'delete' permission identifier. Example: "admin.configuration.message.delete" - * - * @param string $createEventIdentifier the dispatched create TheliaEvent identifier. Example: TheliaEvents::MESSAGE_CREATE - * @param string $updateEventIdentifier the dispatched update TheliaEvent identifier. Example: TheliaEvents::MESSAGE_UPDATE - * @param string $deleteEventIdentifier the dispatched delete TheliaEvent identifier. Example: TheliaEvents::MESSAGE_DELETE - * - * @param string $visibilityToggleEventIdentifier the dispatched visibility toggle TheliaEvent identifier, or null if the object has no visible options. Example: TheliaEvents::MESSAGE_TOGGLE_VISIBILITY - * @param string $changePositionEventIdentifier the dispatched position change TheliaEvent identifier, or null if the object has no position. Example: TheliaEvents::MESSAGE_UPDATE_POSITION - */ public function __construct() { parent::__construct( @@ -129,7 +111,7 @@ class CountryController extends AbstractCrudController */ protected function getUpdateEvent($formData) { - $event = new CountryUpdateEvent(); + $event = new CountryUpdateEvent($formData['id']); return $this->hydrateEvent($event, $formData); } @@ -139,6 +121,8 @@ class CountryController extends AbstractCrudController $event ->setLocale($formData['locale']) ->setTitle($formData['title']) + ->setChapo($formData['chapo']) + ->setDescription($formData['description']) ->setIsocode($formData['isocode']) ->setIsoAlpha2($formData['isoalpha2']) ->setIsoAlpha3($formData['isoalpha3']) @@ -236,7 +220,10 @@ class CountryController extends AbstractCrudController */ protected function redirectToEditionTemplate() { - $this->redirectToRoute('admin.configuration.countries.update', array(), $this->getRequest()->get('country_id', 0)); + $this->redirectToRoute('admin.configuration.countries.update', array(), array( + "country_id" => $this->getRequest()->get('country_id', 0) + ) + ); } /** diff --git a/core/lib/Thelia/Controller/Admin/ShippingZoneController.php b/core/lib/Thelia/Controller/Admin/ShippingZoneController.php index 0084c861b..d68de4808 100644 --- a/core/lib/Thelia/Controller/Admin/ShippingZoneController.php +++ b/core/lib/Thelia/Controller/Admin/ShippingZoneController.php @@ -22,6 +22,12 @@ /*************************************************************************************/ namespace Thelia\Controller\Admin; +use Thelia\Core\Event\ShippingZone\ShippingZoneAddAreaEvent; +use Thelia\Core\Event\ShippingZone\ShippingZoneRemoveAreaEvent; +use Thelia\Core\Event\TheliaEvents; +use Thelia\Form\Exception\FormValidationException; +use Thelia\Form\ShippingZone\ShippingZoneAddArea; +use Thelia\Form\ShippingZone\ShippingZoneRemoveArea; /** * Class ShippingZoneController @@ -30,6 +36,8 @@ namespace Thelia\Controller\Admin; */ class ShippingZoneController extends BaseAdminController { + public $objectName = 'areaDeliveryModule'; + public function indexAction() { if (null !== $response = $this->checkAuth("admin.shipping-zones.view")) return $response; @@ -38,8 +46,99 @@ class ShippingZoneController extends BaseAdminController public function updateAction($shipping_zones_id) { + if (null !== $response = $this->checkAuth("admin.shipping-zones.view")) return $response; return $this->render("shipping-zones-edit", array( "shipping_zones_id" => $shipping_zones_id )); } + + /** + * @return mixed|\Symfony\Component\HttpFoundation\Response + */ + public function addArea() + { + if (null !== $response = $this->checkAuth("admin.shipping-zones.update")) return $response; + + $shippingAreaForm = new ShippingZoneAddArea($this->getRequest()); + $error_msg = null; + + try { + $form = $this->validateForm($shippingAreaForm); + + $event = new ShippingZoneAddAreaEvent( + $form->get('area_id')->getData(), + $form->get('shipping_zone_id')->getData() + ); + + $this->dispatch(TheliaEvents::SHIPPING_ZONE_ADD_AREA, $event); + + // Redirect to the success URL + $this->redirect($shippingAreaForm->getSuccessUrl()); + + } catch (FormValidationException $ex) { + // Form cannot be validated + $error_msg = $this->createStandardFormValidationErrorMessage($ex); + } catch (\Exception $ex) { + // Any other error + $error_msg = $ex->getMessage(); + } + + $this->setupFormErrorContext( + $this->getTranslator()->trans("%obj modification", array('%obj' => $this->objectName)), $error_msg, $shippingAreaForm); + + // At this point, the form has errors, and should be redisplayed. + return $this->renderEditionTemplate(); + } + + public function removeArea() + { + if (null !== $response = $this->checkAuth("admin.shipping-zones.update")) return $response; + + $shippingAreaForm = new ShippingZoneRemoveArea($this->getRequest()); + $error_msg = null; + + try { + $form = $this->validateForm($shippingAreaForm); + + $event = new ShippingZoneRemoveAreaEvent( + $form->get('area_id')->getData(), + $form->get('shipping_zone_id')->getData() + ); + + $this->dispatch(TheliaEvents::SHIPPING_ZONE_REMOVE_AREA, $event); + + // Redirect to the success URL + $this->redirect($shippingAreaForm->getSuccessUrl()); + + } catch (FormValidationException $ex) { + // Form cannot be validated + $error_msg = $this->createStandardFormValidationErrorMessage($ex); + } catch (\Exception $ex) { + // Any other error + $error_msg = $ex->getMessage(); + } + + $this->setupFormErrorContext( + $this->getTranslator()->trans("%obj modification", array('%obj' => $this->objectName)), $error_msg, $shippingAreaForm); + + // At this point, the form has errors, and should be redisplayed. + return $this->renderEditionTemplate(); + } + + /** + * Render the edition template + */ + protected function renderEditionTemplate() + { + return $this->render("shipping-zones-edit", array( + "shipping_zones_id" => $this->getShippingZoneId() + )); + } + + protected function getShippingZoneId() + { + return $this->getRequest()->get('shipping_zone_id', 0); + } + + } diff --git a/core/lib/Thelia/Core/Event/Area/AreaAddCountryEvent.php b/core/lib/Thelia/Core/Event/Area/AreaAddCountryEvent.php new file mode 100644 index 000000000..b6af3c5b3 --- /dev/null +++ b/core/lib/Thelia/Core/Event/Area/AreaAddCountryEvent.php @@ -0,0 +1,86 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\Area; + + +/** + * Class AreaAddCountryEvent + * @package Thelia\Core\Event\Area + * @author Manuel Raynaud + */ +class AreaAddCountryEvent extends AreaEvent +{ + protected $area_id; + protected $country_id; + + function __construct($area_id, $country_id) + { + $this->area_id = $area_id; + $this->country_id = $country_id; + } + + /** + * @param mixed $area_id + * + * @return $this + */ + public function setAreaId($area_id) + { + $this->area_id = $area_id; + + return $this; + } + + /** + * @return mixed + */ + public function getAreaId() + { + return $this->area_id; + } + + /** + * @param mixed $country_id + * + * @return $this + */ + public function setCountryId($country_id) + { + $this->country_id = $country_id; + + return $this; + } + + /** + * @return mixed + */ + public function getCountryId() + { + return $this->country_id; + } + + + + +} \ No newline at end of file diff --git a/core/lib/Thelia/Controller/Admin/ShippingConfigurationController.php b/core/lib/Thelia/Core/Event/Area/AreaCreateEvent.php similarity index 68% rename from core/lib/Thelia/Controller/Admin/ShippingConfigurationController.php rename to core/lib/Thelia/Core/Event/Area/AreaCreateEvent.php index 92b73a83e..d63afa5b9 100644 --- a/core/lib/Thelia/Controller/Admin/ShippingConfigurationController.php +++ b/core/lib/Thelia/Core/Event/Area/AreaCreateEvent.php @@ -1,7 +1,7 @@ . */ +/* along with this program. If not, see . */ /* */ /*************************************************************************************/ -namespace Thelia\Controller\Admin; +namespace Thelia\Core\Event\Area; + /** - * Class ShippingConfigurationController - * @package Thelia\Controller\Admin + * Class AreaCreateEvent + * @package Thelia\Core\Event\Area * @author Manuel Raynaud */ -class ShippingConfigurationController extends BaseAdminController +class AreaCreateEvent extends AreaEvent { - public function indexAction() + protected $name; + + /** + * @param mixed $name + */ + public function setAreaName($name) { - if (null !== $response = $this->checkAuth("admin.shipping-configuration.view")) return $response; - return $this->render("shipping-configuration", array("display_shipping_configuration" => 20)); + $this->name = $name; } - public function updateAction($shipping_configuration_id) + /** + * @return mixed + */ + public function getAreaName() { - return $this->render("shipping-configuration-edit", array( - "shipping_configuration_id" => $shipping_configuration_id - )); + return $this->name; } -} + + +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/Area/AreaDeleteEvent.php b/core/lib/Thelia/Core/Event/Area/AreaDeleteEvent.php new file mode 100644 index 000000000..86f936140 --- /dev/null +++ b/core/lib/Thelia/Core/Event/Area/AreaDeleteEvent.php @@ -0,0 +1,65 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\Area; + + +/** + * Class AreaDeleteEvent + * @package Thelia\Core\Event\Area + * @author Manuel Raynaud + */ +class AreaDeleteEvent extends AreaEvent +{ + /** + * @var int area id + */ + protected $area_id; + + public function __construct($area_id) + { + $this->area_id = $area_id; + } + + /** + * @param null $area_id + * + * @return $this + */ + public function setAreaId($area_id) + { + $this->area_id = $area_id; + + return $this; + } + + /** + * @return null + */ + public function getAreaId() + { + return $this->area_id; + } + + +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/Area/AreaEvent.php b/core/lib/Thelia/Core/Event/Area/AreaEvent.php new file mode 100644 index 000000000..892d00843 --- /dev/null +++ b/core/lib/Thelia/Core/Event/Area/AreaEvent.php @@ -0,0 +1,66 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\Area; +use Thelia\Core\Event\ActionEvent; + + +/** + * Class AreaEvent + * @package Thelia\Core\Event\Shipping + * @author Manuel Raynaud + */ +class AreaEvent extends ActionEvent +{ + protected $area; + + public function __construct($area = null) + { + $this->area = $area; + } + + /** + * @param mixed $area + * + * @return $this + */ + public function setArea($area) + { + $this->area = $area; + + return $this; + } + + /** + * @return mixed + */ + public function getArea() + { + return $this->area; + } + + public function hasArea() + { + return null !== $this->area; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/Area/AreaRemoveCountryEvent.php b/core/lib/Thelia/Core/Event/Area/AreaRemoveCountryEvent.php new file mode 100644 index 000000000..84c8f10d2 --- /dev/null +++ b/core/lib/Thelia/Core/Event/Area/AreaRemoveCountryEvent.php @@ -0,0 +1,35 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\Area; + + +/** + * Class AreaRemoveCountryEvent + * @package Thelia\Core\Event\Area + * @author Manuel Raynaud + */ +class AreaRemoveCountryEvent extends AreaAddCountryEvent +{ + +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/Area/AreaUpdateEvent.php b/core/lib/Thelia/Core/Event/Area/AreaUpdateEvent.php new file mode 100644 index 000000000..f5f7c8704 --- /dev/null +++ b/core/lib/Thelia/Core/Event/Area/AreaUpdateEvent.php @@ -0,0 +1,35 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\Area; + + +/** + * Class AreaUpdateEvent + * @package Thelia\Core\Event\Area + * @author Manuel Raynaud + */ +class AreaUpdateEvent extends AreaCreateEvent +{ + +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/Area/AreaUpdatePostageEvent.php b/core/lib/Thelia/Core/Event/Area/AreaUpdatePostageEvent.php new file mode 100644 index 000000000..5f799b93c --- /dev/null +++ b/core/lib/Thelia/Core/Event/Area/AreaUpdatePostageEvent.php @@ -0,0 +1,85 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\Area; + + +/** + * Class AreaUpdatePostageEvent + * @package Thelia\Core\Event\Area + * @author Manuel Raynaud + */ +class AreaUpdatePostageEvent extends AreaEvent +{ + protected $area_id; + protected $postage; + + function __construct($area_id) + { + $this->area_id = $area_id; + } + + /** + * @param mixed $area_id + * + * @return $this + */ + public function setAreaId($area_id) + { + $this->area_id = $area_id; + + return $this; + } + + /** + * @return mixed + */ + public function getAreaId() + { + return $this->area_id; + } + + /** + * @param mixed $postage + * + * @return $this + */ + public function setPostage($postage) + { + $this->postage = $postage; + + return $this; + } + + /** + * @return mixed + */ + public function getPostage() + { + return $this->postage; + } + + + + +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/Country/CountryUpdateEvent.php b/core/lib/Thelia/Core/Event/Country/CountryUpdateEvent.php index 5c4ad1cf3..496904172 100644 --- a/core/lib/Thelia/Core/Event/Country/CountryUpdateEvent.php +++ b/core/lib/Thelia/Core/Event/Country/CountryUpdateEvent.php @@ -31,5 +31,90 @@ namespace Thelia\Core\Event\Country; */ class CountryUpdateEvent extends CountryCreateEvent { + protected $country_id; + + protected $chapo; + protected $description; + protected $postscriptum; + + function __construct($country_id) + { + $this->country_id = $country_id; + } + + /** + * @param mixed $chapo + */ + public function setChapo($chapo) + { + $this->chapo = $chapo; + + return $this; + } + + /** + * @return mixed + */ + public function getChapo() + { + return $this->chapo; + } + + /** + * @param mixed $description + */ + public function setDescription($description) + { + $this->description = $description; + + return $this; + } + + /** + * @return mixed + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param mixed $postscriptum + */ + public function setPostscriptum($postscriptum) + { + $this->postscriptum = $postscriptum; + + return $this; + } + + /** + * @return mixed + */ + public function getPostscriptum() + { + return $this->postscriptum; + } + + /** + * @param mixed $country_id + */ + public function setCountryId($country_id) + { + $this->country_id = $country_id; + + return $this; + } + + /** + * @return mixed + */ + public function getCountryId() + { + return $this->country_id; + } + + + } \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/ShippingZone/ShippingZoneAddAreaEvent.php b/core/lib/Thelia/Core/Event/ShippingZone/ShippingZoneAddAreaEvent.php new file mode 100644 index 000000000..d1e406646 --- /dev/null +++ b/core/lib/Thelia/Core/Event/ShippingZone/ShippingZoneAddAreaEvent.php @@ -0,0 +1,87 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\ShippingZone; +use Thelia\Core\Event\ActionEvent; + + +/** + * Class ShippingZoneAddAreaEvent + * @package Thelia\Core\Event\ShippingZone + * @author Manuel Raynaud + */ +class ShippingZoneAddAreaEvent extends ActionEvent +{ + protected $area_id; + protected $shopping_zone_id; + + function __construct($area_id, $shopping_zone_id) + { + $this->area_id = $area_id; + $this->shopping_zone_id = $shopping_zone_id; + } + + /** + * @param mixed $area_id + * + * @return $this + */ + public function setAreaId($area_id) + { + $this->area_id = $area_id; + + return $this; + } + + /** + * @return mixed + */ + public function getAreaId() + { + return $this->area_id; + } + + /** + * @param mixed $shopping_zone_id + * + * @return $this + */ + public function setShoppingZoneId($shopping_zone_id) + { + $this->shopping_zone_id = $shopping_zone_id; + + return $this; + } + + /** + * @return mixed + */ + public function getShoppingZoneId() + { + return $this->shopping_zone_id; + } + + + + +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/ShippingZone/ShippingZoneRemoveAreaEvent.php b/core/lib/Thelia/Core/Event/ShippingZone/ShippingZoneRemoveAreaEvent.php new file mode 100644 index 000000000..6dc6094d6 --- /dev/null +++ b/core/lib/Thelia/Core/Event/ShippingZone/ShippingZoneRemoveAreaEvent.php @@ -0,0 +1,35 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\ShippingZone; + + +/** + * Class ShippingZoneRemoveAreaEvent + * @package Thelia\Core\Event\ShippingZone + * @author Manuel Raynaud + */ +class ShippingZoneRemoveAreaEvent extends ShippingZoneAddAreaEvent +{ + +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php index a21e0a9c9..aa365e54a 100755 --- a/core/lib/Thelia/Core/Event/TheliaEvents.php +++ b/core/lib/Thelia/Core/Event/TheliaEvents.php @@ -232,6 +232,30 @@ final class TheliaEvents const BEFORE_UPDATECOUNTRY = "action.before_updateCountry"; const AFTER_UPDATECOUNTRY = "action.after_updateCountry"; + // -- AREA CONFIGURATION MANAGEMENT + + const AREA_CREATE = 'action.createArea'; + const AREA_UPDATE = 'action.updateArea'; + const AREA_DELETE = 'action.deleteArea'; + + const AREA_ADD_COUNTRY = 'action.area.addCountry'; + const AREA_REMOVE_COUNTRY = 'action.area.removeCountry'; + const AREA_POSTAGE_UPDATE = 'action.area.postageUpdate'; + + const BEFORE_CREATEAREA = 'action.before_createArea'; + const AFTER_CREATEAREA = 'action.after_createArea'; + + const BEFORE_UPDATEAREA = 'action.before_updateArea'; + const AFTER_UPDATEAREA = 'action.after_updateArea'; + + const BEFORE_DELETEAREA = 'action.before_deleteArea'; + const AFTER_DELETEAREA = 'action.after_deleteArea'; + + // -- SHIPPING ZONE MANAGEMENT + + const SHIPPING_ZONE_ADD_AREA = 'action.shippingZone.addArea'; + const SHIPPING_ZONE_REMOVE_AREA = 'action.shippingZone.removeArea'; + // -- Categories Associated Content ---------------------------------------- const BEFORE_CREATECATEGORY_ASSOCIATED_CONTENT = "action.before_createCategoryAssociatedContent"; diff --git a/core/lib/Thelia/Core/Template/Loop/Area.php b/core/lib/Thelia/Core/Template/Loop/Area.php new file mode 100644 index 000000000..4d43f524b --- /dev/null +++ b/core/lib/Thelia/Core/Template/Loop/Area.php @@ -0,0 +1,144 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Template\Loop; +use Propel\Runtime\ActiveQuery\Criteria; +use Thelia\Core\Template\Element\BaseLoop; +use Thelia\Core\Template\Element\LoopResult; +use Thelia\Core\Template\Element\LoopResultRow; +use Thelia\Core\Template\Loop\Argument\Argument; +use Thelia\Core\Template\Loop\Argument\ArgumentCollection; +use Thelia\Model\AreaQuery; + + +/** + * Class Area + * @package Thelia\Core\Template\Loop + * @author Manuel Raynaud + */ +class Area extends BaseLoop +{ + public $timestampable = true; + + /** + * + * define all args used in your loop + * + * + * example : + * + * public function getArgDefinitions() + * { + * return new ArgumentCollection( + * Argument::createIntListTypeArgument('id'), + * new Argument( + * 'ref', + * new TypeCollection( + * new Type\AlphaNumStringListType() + * ) + * ), + * Argument::createIntListTypeArgument('category'), + * Argument::createBooleanTypeArgument('new'), + * Argument::createBooleanTypeArgument('promo'), + * Argument::createFloatTypeArgument('min_price'), + * Argument::createFloatTypeArgument('max_price'), + * Argument::createIntTypeArgument('min_stock'), + * Argument::createFloatTypeArgument('min_weight'), + * Argument::createFloatTypeArgument('max_weight'), + * Argument::createBooleanTypeArgument('current'), + * + * ); + * } + * + * @return \Thelia\Core\Template\Loop\Argument\ArgumentCollection + */ + protected function getArgDefinitions() + { + return new ArgumentCollection( + Argument::createIntListTypeArgument('id'), + Argument::createIntTypeArgument('with_zone'), + Argument::createIntTypeArgument('without_zone') + ); + } + + /** + * + * this function have to be implement in your own loop class. + * + * All loops parameters can be accessible via getter. + * + * for example, ref parameter is accessible through getRef method + * + * @param $pagination + * + * @return mixed + */ + public function exec(&$pagination) + { + $id = $this->getId(); + + $search = AreaQuery::create(); + + if ($id) { + $search->filterById($id, Criteria::IN); + } + + $withZone = $this->getWith_zone(); + + if ($withZone) { + $search->joinAreaDeliveryModule('with_zone') + ->where('`with_zone`.delivery_module_id '.Criteria::EQUAL.' ?', $withZone, \PDO::PARAM_INT); + } + + $withoutZone = $this->getWithout_zone(); + + if($withoutZone) + { + $search->joinAreaDeliveryModule('without_zone', Criteria::LEFT_JOIN) + ->addJoinCondition('without_zone', 'delivery_module_id '.Criteria::EQUAL.' ?', $withoutZone, null, \PDO::PARAM_INT) + ->where('`without_zone`.delivery_module_id '.Criteria::ISNULL); + } + + //echo $search->toString(); exit; + + $areas = $this->search($search, $pagination); + + $loopResult = new LoopResult($areas); + + foreach ($areas as $area) { + $loopResultRow = new LoopResultRow($loopResult, $area, $this->versionable, $this->timestampable, $this->countable); + + $loopResultRow + ->set('ID', $area->getId()) + ->set('NAME', $area->getName()) + ->set('POSTAGE', $area->getPostage()) + ; + + $loopResult->addRow($loopResultRow); + } + + return $loopResult; + } + + +} \ No newline at end of file diff --git a/core/lib/Thelia/Form/Area/AreaCountryForm.php b/core/lib/Thelia/Form/Area/AreaCountryForm.php new file mode 100644 index 000000000..c511e0b3c --- /dev/null +++ b/core/lib/Thelia/Form/Area/AreaCountryForm.php @@ -0,0 +1,89 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Form\Area; + +use Thelia\Core\Translation\Translator; +use Symfony\Component\Validator\Constraints\GreaterThan; +use Symfony\Component\Validator\Constraints\NotBlank; +use Thelia\Form\BaseForm; + + +/** + * Class AreaCountryForm + * @package Thelia\Form\Area + * @author Manuel Raynaud + */ +class AreaCountryForm extends BaseForm +{ + + /** + * + * in this function you add all the fields you need for your Form. + * Form this you have to call add method on $this->formBuilder attribute : + * + * $this->formBuilder->add("name", "text") + * ->add("email", "email", array( + * "attr" => array( + * "class" => "field" + * ), + * "label" => "email", + * "constraints" => array( + * new \Symfony\Component\Validator\Constraints\NotBlank() + * ) + * ) + * ) + * ->add('age', 'integer'); + * + * @return null + */ + protected function buildForm() + { + $this->formBuilder + ->add('area_id', 'integer', array( + 'constraints' => array( + new GreaterThan(array('value' => 0)), + new NotBlank() + ) + + )) + ->add('country_id', 'integer', array( + 'constraints' => array( + new GreaterThan(array('value' => 0)), + new NotBlank() + ), + 'label_attr' => array( + 'for' => 'area_country' + ), + 'label' => Translator::getInstance()->trans('Country') + )); + } + + /** + * @return string the name of you form. This name must be unique + */ + public function getName() + { + return 'thelia_area_country'; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Form/Area/AreaCreateForm.php b/core/lib/Thelia/Form/Area/AreaCreateForm.php new file mode 100644 index 000000000..590001867 --- /dev/null +++ b/core/lib/Thelia/Form/Area/AreaCreateForm.php @@ -0,0 +1,79 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Form\Area; +use Thelia\Core\Translation\Translator; +use Symfony\Component\Validator\Constraints\NotBlank; +use Thelia\Form\BaseForm; + + +/** + * Class AreaCreateForm + * @package Thelia\Form\Shipping + * @author Manuel Raynaud + */ +class AreaCreateForm extends BaseForm +{ + + /** + * + * in this function you add all the fields you need for your Form. + * Form this you have to call add method on $this->formBuilder attribute : + * + * $this->formBuilder->add("name", "text") + * ->add("email", "email", array( + * "attr" => array( + * "class" => "field" + * ), + * "label" => "email", + * "constraints" => array( + * new \Symfony\Component\Validator\Constraints\NotBlank() + * ) + * ) + * ) + * ->add('age', 'integer'); + * + * @return null + */ + protected function buildForm() + { + $this->formBuilder + ->add('name', 'text', array( + 'constraints' => array( + new NotBlank() + ), + 'label_attr' => array('for' => 'shipping_name'), + 'label' => Translator::getInstance()->trans('shipping area name') + )) + + ; + } + + /** + * @return string the name of you form. This name must be unique + */ + public function getName() + { + return 'thelia_area_creation'; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Form/Area/AreaModificationForm.php b/core/lib/Thelia/Form/Area/AreaModificationForm.php new file mode 100644 index 000000000..eefcb825a --- /dev/null +++ b/core/lib/Thelia/Form/Area/AreaModificationForm.php @@ -0,0 +1,49 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Form\Area; +use Symfony\Component\Validator\Constraints\GreaterThan; +use Thelia\Form\Area\AreaCreateForm; + + +/** + * Class AreaModificationForm + * @package Thelia\Form\Shipping + * @author Manuel Raynaud + */ +class AreaModificationForm extends AreaCreateForm +{ + public function buildForm() + { + parent::buildForm(); + + $this->formBuilder + ->add("id", "hidden", array("constraints" => array(new GreaterThan(array('value' => 0))))) + ; + } + + public function getName() + { + return 'thelia_area_modification'; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Form/Area/AreaPostageForm.php b/core/lib/Thelia/Form/Area/AreaPostageForm.php new file mode 100644 index 000000000..ba24499e8 --- /dev/null +++ b/core/lib/Thelia/Form/Area/AreaPostageForm.php @@ -0,0 +1,88 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Form\Area; + +use Symfony\Component\Validator\Constraints\GreaterThan; +use Symfony\Component\Validator\Constraints\GreaterThanOrEqual; +use Symfony\Component\Validator\Constraints\NotBlank; +use Thelia\Form\BaseForm; +use Thelia\Core\Translation\Translator; + + +/** + * Class AreaPostageForm + * @package Thelia\Form\Area + * @author Manuel Raynaud + */ +class AreaPostageForm extends BaseForm +{ + + /** + * + * in this function you add all the fields you need for your Form. + * Form this you have to call add method on $this->formBuilder attribute : + * + * $this->formBuilder->add("name", "text") + * ->add("email", "email", array( + * "attr" => array( + * "class" => "field" + * ), + * "label" => "email", + * "constraints" => array( + * new \Symfony\Component\Validator\Constraints\NotBlank() + * ) + * ) + * ) + * ->add('age', 'integer'); + * + * @return null + */ + protected function buildForm() + { + $this->formBuilder + ->add('area_id', 'integer', array( + 'constraints' => array( + new GreaterThan(array('value' => 0)), + new NotBlank() + ) + )) + ->add('postage', 'number', array( + 'constraints' => array( + new GreaterThanOrEqual(array('value' => 0)), + new NotBlank() + ), + 'label_attr' => array('for' => 'area_postage'), + 'label' => Translator::getInstance()->trans('Postage') + )) + ; + } + + /** + * @return string the name of you form. This name must be unique + */ + public function getName() + { + return 'thelia_area_postage'; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Form/Image/DocumentModification.php b/core/lib/Thelia/Form/Image/DocumentModification.php index 31de5af98..dbb85f5b3 100644 --- a/core/lib/Thelia/Form/Image/DocumentModification.php +++ b/core/lib/Thelia/Form/Image/DocumentModification.php @@ -122,16 +122,6 @@ abstract class DocumentModification extends BaseForm ) ) ) - ->add( - 'postscriptum', - 'text', - array( - 'constraints' => array(), - 'label' => Translator::getInstance()->trans('Post Scriptum'), - 'label_attr' => array( - 'for' => 'postscriptum' - ) - ) - ); + ; } } diff --git a/core/lib/Thelia/Form/Image/ImageModification.php b/core/lib/Thelia/Form/Image/ImageModification.php index e95a39c37..368f82410 100644 --- a/core/lib/Thelia/Form/Image/ImageModification.php +++ b/core/lib/Thelia/Form/Image/ImageModification.php @@ -130,16 +130,6 @@ abstract class ImageModification extends BaseForm ) ) ) - ->add( - 'postscriptum', - 'text', - array( - 'constraints' => array(), - 'label' => Translator::getInstance()->trans('Post Scriptum'), - 'label_attr' => array( - 'for' => 'postscriptum' - ) - ) - ); + ; } } diff --git a/core/lib/Thelia/Form/ShippingZone/ShippingZoneAddArea.php b/core/lib/Thelia/Form/ShippingZone/ShippingZoneAddArea.php new file mode 100644 index 000000000..81dd422b6 --- /dev/null +++ b/core/lib/Thelia/Form/ShippingZone/ShippingZoneAddArea.php @@ -0,0 +1,87 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Form\ShippingZone; + +use Thelia\Core\Translation\Translator; +use Symfony\Component\Validator\Constraints\GreaterThan; +use Symfony\Component\Validator\Constraints\NotBlank; +use Thelia\Form\BaseForm; + + +/** + * Class ShippingZoneAddArea + * @package Thelia\Form\ShippingZone + * @author Manuel Raynaud + */ +class ShippingZoneAddArea extends BaseForm +{ + + /** + * + * in this function you add all the fields you need for your Form. + * Form this you have to call add method on $this->formBuilder attribute : + * + * $this->formBuilder->add("name", "text") + * ->add("email", "email", array( + * "attr" => array( + * "class" => "field" + * ), + * "label" => "email", + * "constraints" => array( + * new \Symfony\Component\Validator\Constraints\NotBlank() + * ) + * ) + * ) + * ->add('age', 'integer'); + * + * @return null + */ + protected function buildForm() + { + $this->formBuilder + ->add('area_id', 'integer', array( + 'constraints' => array( + new NotBlank(), + new GreaterThan(array('value' => 0)) + ), + 'label_attr' => array('for' => 'shipping_area'), + 'label' => Translator::getInstance()->trans('Area') + )) + ->add('shipping_zone_id', 'integer', array( + 'constraints' => array( + new NotBlank(), + new GreaterThan(array('value' => 0)) + ) + )) + ; + } + + /** + * @return string the name of you form. This name must be unique + */ + public function getName() + { + return 'thelia_shippingzone_area'; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Form/ShippingZone/ShippingZoneRemoveArea.php b/core/lib/Thelia/Form/ShippingZone/ShippingZoneRemoveArea.php new file mode 100644 index 000000000..5c4e5597b --- /dev/null +++ b/core/lib/Thelia/Form/ShippingZone/ShippingZoneRemoveArea.php @@ -0,0 +1,42 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Form\ShippingZone; + + +/** + * Class ShippingZoneRemoveArea + * @package Thelia\Form\ShippingZone + * @author Manuel Raynaud + */ +class ShippingZoneRemoveArea extends ShippingZoneAddArea +{ + + /** + * @return string the name of you form. This name must be unique + */ + public function getName() + { + return 'thelia_shippingzone_remove_area'; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Model/Area.php b/core/lib/Thelia/Model/Area.php index 2a91e7cd3..f826c0fcd 100755 --- a/core/lib/Thelia/Model/Area.php +++ b/core/lib/Thelia/Model/Area.php @@ -2,8 +2,49 @@ namespace Thelia\Model; +use Propel\Runtime\Connection\ConnectionInterface; +use Thelia\Core\Event\Area\AreaEvent; +use Thelia\Core\Event\TheliaEvents; use Thelia\Model\Base\Area as BaseArea; class Area extends BaseArea { + use \Thelia\Model\Tools\ModelEventDispatcherTrait; + + public function preInsert(ConnectionInterface $con = null) + { + $this->dispatchEvent(TheliaEvents::BEFORE_CREATEAREA, new AreaEvent($this)); + + return true; + } + + public function postInsert(ConnectionInterface $con = null) + { + $this->dispatchEvent(TheliaEvents::AFTER_CREATEAREA, new AreaEvent($this)); + } + + public function preUpdate(ConnectionInterface $con = null) + { + $this->dispatchEvent(TheliaEvents::BEFORE_UPDATEAREA, new AreaEvent($this)); + + return true; + } + + public function postUpdate(ConnectionInterface $con = null) + { + $this->dispatchEvent(TheliaEvents::AFTER_UPDATEAREA, new AreaEvent($this)); + } + + public function preDelete(ConnectionInterface $con = null) + { + $this->dispatchEvent(TheliaEvents::BEFORE_DELETEAREA, new AreaEvent($this)); + + return true; + } + + public function postDelete(ConnectionInterface $con = null) + { + $this->dispatchEvent(TheliaEvents::AFTER_DELETEAREA, new AreaEvent($this)); + } + } diff --git a/templates/admin/default/category-edit.html b/templates/admin/default/category-edit.html index f8b564822..78cb7b681 100755 --- a/templates/admin/default/category-edit.html +++ b/templates/admin/default/category-edit.html @@ -66,7 +66,7 @@ {form_hidden_fields form=$form} {form_field form=$form field='success_url'} - + {/form_field} {form_field form=$form field='locale'} diff --git a/templates/admin/default/countries.html b/templates/admin/default/countries.html index 6de45aa38..6791131df 100644 --- a/templates/admin/default/countries.html +++ b/templates/admin/default/countries.html @@ -52,17 +52,17 @@ {loop name="countries" type="country" backend_context="1" lang=$lang_id order=$order} {$ID} - {$TITLE} + {$TITLE}
- +{*
- + *} {$ISOCODE} {$ISOALPHA3} diff --git a/templates/admin/default/country-edit.html b/templates/admin/default/country-edit.html index b5d68e46b..447a6b355 100644 --- a/templates/admin/default/country-edit.html +++ b/templates/admin/default/country-edit.html @@ -30,8 +30,8 @@
{form name="thelia.admin.country.modification"} - - + + {include file = "includes/inner-form-toolbar.html"}
{* Be sure to get the country ID, even if the form could not be validated *} @@ -40,8 +40,12 @@ {form_hidden_fields form=$form} {form_field form=$form field='success_url'} - - {/form_field} + + {/form_field} + + {form_field form=$form field='locale'} + + {/form_field} {if $form_error}
{$form_error_message}
{/if} @@ -74,51 +78,26 @@
{/form_field} -
- -
- {intl l="Translations"} -
- {loop type="lang" name="lang"} -
-
-
-

- {intl l=$TITLE} {$TITLE} -

-
-
- {form_field form=$form field='title'} -
- - -
- {/form_field} - {form_field form=$form field='chapo'} -
- - -
- {/form_field} - {form_field form=$form field='description'} -
- - -
- {/form_field} -
+ {form_field form=$form field='title'} +
+ +
-
- {/loop} - -
- + {/form_field} + {form_field form=$form field='chapo'} +
+ + +
+ {/form_field} + {form_field form=$form field='description'} +
+ + +
+ {/form_field}
-
{/form} diff --git a/templates/admin/default/shipping-configuration-edit.html b/templates/admin/default/shipping-configuration-edit.html index b17dc6de4..9e0268d0f 100644 --- a/templates/admin/default/shipping-configuration-edit.html +++ b/templates/admin/default/shipping-configuration-edit.html @@ -8,12 +8,12 @@
- + {loop name="area-edit" type="area" id=$area_id}
@@ -21,30 +21,40 @@
- {intl l='Edit shipping configuration %title' title=$TITLE} + {intl l='Edit shipping configuration %title' title=$NAME}
+ {form name="thelia.admin.area.country"} +
+ {form_hidden_fields form=$form} - - + {form_field form=$form field='success_url'} + + {/form_field} + + {form_field form=$form field='area_id'} + + {/form_field} + {form_field form=$form field='country_id'} +
- + {loop name="country-without-area" type="country" with_area="0" backend_context="1" lang=$lang_id} + + {/loop}
- + {/form_field}
- + {/form}
@@ -57,44 +67,46 @@ + {loop name="country-area" type="country" area=$area_id backend_context="1"} - Wallis-et-Futuna + {$TITLE} - - - - - - - Polynésie française - - - - - - - - USA - Alabama - - + + {/loop} -
- -
- + {form name="thelia.admin.area.postage"} + + {form_hidden_fields form=$form} + + {form_field form=$form field='success_url'} + + {/form_field} + + {form_field form=$form field='area_id'} + + {/form_field} + {form_field form=$form field='postage'} + +
+ + {if $error } + {$message} + {/if}
+ {/form_field} + {/form} @@ -106,14 +118,23 @@
+ {/loop} + {elseloop rel="area-edit"} +
+
+ {intl l="No area defined with this id"} +
+
+ {/elseloop}
{* Delete related content confirmation dialog *} {capture "delete_country_dialog"} - + + {/capture} {include @@ -123,7 +144,7 @@ dialog_title = {intl l="Remove country"} dialog_message = {intl l="Do you really want to remove this country ?"} - form_action = {url path=''} + form_action = {url path='/admin/configuration/shipping_configuration/country/remove'} form_content = {$smarty.capture.delete_country_dialog nofilter} } {/block} @@ -135,4 +156,12 @@ {javascripts file='assets/js/bootstrap-select/bootstrap-select.js'} {/javascripts} + + {/block} \ No newline at end of file diff --git a/templates/admin/default/shipping-configuration.html b/templates/admin/default/shipping-configuration.html index 067256d5f..d4c8147c2 100644 --- a/templates/admin/default/shipping-configuration.html +++ b/templates/admin/default/shipping-configuration.html @@ -41,66 +41,24 @@ + {loop name="area-list" type="area" backend_context="1"} - France + {$NAME} {module_include location='shipping_configuration_table_row'} - {if ! $SECURED} -
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-configuration.change"} - - {/loop} - {loop type="auth" name="can_delete" roles="ADMIN" permissions="admin.configuration.shipping-configuration.delete"} - - {/loop} -
- {else} - - {/if} - - - - Outre-Mer DOM - - {module_include location='shipping_configuration_table_row'} - - - {if ! $SECURED} -
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-configuration.change"} - - {/loop} - {loop type="auth" name="can_delete" roles="ADMIN" permissions="admin.configuration.shipping-configuration.delete"} - - {/loop} -
- {else} - - {/if} - - - - Outre-Mer TOM - - {module_include location='shipping_configuration_table_row'} - - - {if ! $SECURED} -
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-configuration.change"} - - {/loop} - {loop type="auth" name="can_delete" roles="ADMIN" permissions="admin.configuration.shipping-configuration.delete"} - - {/loop} -
- {else} - - {/if} +
+ {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-configuration.change"} + + {/loop} + {loop type="auth" name="can_delete" roles="ADMIN" permissions="admin.configuration.shipping-configuration.delete"} + + {/loop} +
+ {/loop}
@@ -117,16 +75,23 @@ {* Capture the dialog body, to pass it to the generic dialog *} {capture "creation_dialog"} + {form name="thelia.admin.area.create"} + {form_hidden_fields form=$form} - + {form_field form=$form field='success_url'} + {* on success, redirect to the edition page, _ID_ is replaced with the created object ID, see controller *} + + {/form_field} + {form_field form=$form field="name"}
- - + +
+ {/form_field} {module_include location='shipping_configuration_create_form'} - + {/form} {/capture} {include @@ -139,7 +104,7 @@ dialog_ok_label = {intl l="Create this shipping configuration"} dialog_cancel_label = {intl l="Cancel"} - form_action = {url path='/admin/configuration/configuration/shipping_configuration/create'} + form_action = {url path='/admin/configuration/shipping_configuration/create'} form_enctype = '' form_error_message = $form_error_message } @@ -147,7 +112,7 @@ {* Delete confirmation dialog *} {capture "delete_dialog"} - + {module_include location='shipping_configuration_delete_form'} @@ -163,4 +128,14 @@ form_action = {url path='/admin/configuration/shipping_configuration/delete'} form_content = {$smarty.capture.delete_dialog nofilter} } +{/block} + +{block name="javascript-initialization"} + {/block} \ No newline at end of file diff --git a/templates/admin/default/shipping-zones-edit.html b/templates/admin/default/shipping-zones-edit.html index c330f9064..139e3d164 100644 --- a/templates/admin/default/shipping-zones-edit.html +++ b/templates/admin/default/shipping-zones-edit.html @@ -26,25 +26,33 @@
- -
- + {form name="thelia.shopping_zone_area"} + + {form_hidden_fields form=$form} + {form_field form=$form field='success_url'} + {* the url the user is redirected to on login success *} + {/form_field} + + {form_field form=$form field='shipping_zone_id'} + + {/form_field} + + {form_field form=$form field='area_id'} +
- + {loop name="area.module.not_associated" type="area" without_zone=$shipping_zones_id} + + {/loop}
- + {/form_field}
- + {/form}
@@ -57,30 +65,16 @@ + {loop type="area" name="area.module.associated" with_zone=$shipping_zones_id} - France + {$NAME} - - - - - - - Zone 1 - - - - - - - - Zone 2 - - + + {/loop}
@@ -97,7 +91,22 @@ {* Delete related content confirmation dialog *} {capture "delete_zone_dialog"} - + {form name="thelia.shopping_zone_remove_area"} + {form_hidden_fields form=$form} + + {form_field form=$form field='success_url'} + {* the url the user is redirected to on login success *} + {/form_field} + + {form_field form=$form field='shipping_zone_id'} + + {/form_field} + + {form_field form=$form field='area_id'} + + {/form_field} + + {/form} {/capture} {include @@ -107,7 +116,7 @@ dialog_title = {intl l="Remove zone"} dialog_message = {intl l="Do you really want to remove this zone ?"} - form_action = {url path=''} + form_action = {url path='/admin/configuration/shipping_zones/area/remove'} form_content = {$smarty.capture.delete_zone_dialog nofilter} } {/block} @@ -119,4 +128,12 @@ {javascripts file='assets/js/bootstrap-select/bootstrap-select.js'} {/javascripts} + + {/block} \ No newline at end of file diff --git a/templates/admin/default/shipping-zones.html b/templates/admin/default/shipping-zones.html index 20ffef799..5eeed61c4 100644 --- a/templates/admin/default/shipping-zones.html +++ b/templates/admin/default/shipping-zones.html @@ -36,57 +36,21 @@ + {loop type="delivery" name="delivery.list" backend_context="1"} - So Colissimo + {$TITLE} {module_include location='shipping_zones_table_row'} - {if ! $SECURED} -
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-zones.change"} - - {/loop} -
- {else} - - {/if} +
+ {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-zones.change"} + + {/loop} +
- - - Chronopost - - {module_include location='shipping_zones_table_row'} - - - {if ! $SECURED} -
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-zones.change"} - - {/loop} -
- {else} - - {/if} - - - - Kiala - - {module_include location='shipping_zones_table_row'} - - - {if ! $SECURED} -
- {loop type="auth" name="can_change" roles="ADMIN" permissions="admin.configuration.shipping-zones.change"} - - {/loop} -
- {else} - - {/if} - - + + {/loop}
@@ -98,24 +62,4 @@
- - {* Delete confirmation dialog *} - - {capture "delete_dialog"} - - - {module_include location='shipping_zones_delete_form'} - - {/capture} - - {include - file = "includes/generic-confirm-dialog.html" - - dialog_id = "delete_dialog" - dialog_title = {intl l="Delete shipping zone"} - dialog_message = {intl l="Do you really want to delete this shipping zone ?"} - - form_action = {url path='/admin/configuration/shipping_zones/delete'} - form_content = {$smarty.capture.delete_dialog nofilter} - } {/block} \ No newline at end of file