diff --git a/core/lib/Thelia/Action/Address.php b/core/lib/Thelia/Action/Address.php new file mode 100644 index 000000000..021927190 --- /dev/null +++ b/core/lib/Thelia/Action/Address.php @@ -0,0 +1,94 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Action; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Thelia\Core\Event\AddressCreateOrUpdateEvent; +use Thelia\Core\Event\TheliaEvents; +use Thelia\Model\Address as AddressModel; + + +/** + * Class Address + * @package Thelia\Action + * @author Manuel Raynaud + */ +class Address extends BaseAction implements EventSubscriberInterface +{ + + public function create(AddressCreateOrUpdateEvent $event) + { + $address = new AddressModel(); + $address->setCustomer($event->getCustomer()); + $this->createOrUpdate($address, $event); + } + + + protected function createOrUpdate(AddressModel $addressModel, AddressCreateOrUpdateEvent $event) + { + $addressModel->setDispatcher($this->getDispatcher()); + + $addressModel + ->setTitleId($event->getTitle()) + ->setFirstname($event->getFirstname()) + ->setLastname($event->getLastname()) + ->setAddress1($event->getAddress1()) + ->setAddress2($event->getAddress2()) + ->setAddress3($event->getAddress3()) + ->setZipcode($event->getZipcode()) + ->setCity($event->getCity()) + ->setCountryId($event->getCountry()) + ->setCellphone($event->getCellphone()) + ->setPhone($event->getPhone()) + ->setCompany($event->getCompany()) + ->save() + ; + } + + /** + * 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::ADDRESS_CREATE => array("create", 128) + ); + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Controller/Front/CustomerAddressController.php b/core/lib/Thelia/Controller/Front/CustomerAddressController.php index 4bf5faae8..4f44ce1d1 100644 --- a/core/lib/Thelia/Controller/Front/CustomerAddressController.php +++ b/core/lib/Thelia/Controller/Front/CustomerAddressController.php @@ -53,6 +53,7 @@ class CustomerAddressController extends BaseFrontController $event = $this->createAddressEvent($form->getData(), $customer); $this->dispatch(TheliaEvents::ADDRESS_CREATE, $event); + $this->redirectSuccess($addressCreate); }catch (FormValidationException $e) { $message = sprintf("Please check your input: %s", $e->getMessage()); @@ -60,6 +61,17 @@ class CustomerAddressController extends BaseFrontController catch (\Exception $e) { $message = sprintf("Sorry, an error occured: %s", $e->getMessage()); } + + if ($message !== false) { + \Thelia\Log\Tlog::getInstance()->error(sprintf("Error during address creation process : %s", $message)); + + $addressCreate->setErrorMessage($message); + + $this->getParserContext() + ->addForm($addressCreate) + ->setGeneralError($message) + ; + } } protected function createAddressEvent($data, Customer $customer) diff --git a/core/lib/Thelia/Core/Event/AddressCreateOrUpdateEvent.php b/core/lib/Thelia/Core/Event/AddressCreateOrUpdateEvent.php index 89a26d81a..81c836a83 100644 --- a/core/lib/Thelia/Core/Event/AddressCreateOrUpdateEvent.php +++ b/core/lib/Thelia/Core/Event/AddressCreateOrUpdateEvent.php @@ -22,6 +22,7 @@ /*************************************************************************************/ namespace Thelia\Core\Event; +use Symfony\Component\EventDispatcher\Event; use Thelia\Model\Customer; @@ -30,7 +31,8 @@ use Thelia\Model\Customer; * @package Thelia\Core\Event * @author Manuel Raynaud */ -class AddressCreateOrUpdateEvent { +class AddressCreateOrUpdateEvent extends Event +{ /** * @var string address label */ diff --git a/core/lib/Thelia/Model/Address.php b/core/lib/Thelia/Model/Address.php index c8efaa9e1..58e6285ca 100755 --- a/core/lib/Thelia/Model/Address.php +++ b/core/lib/Thelia/Model/Address.php @@ -2,12 +2,21 @@ namespace Thelia\Model; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Thelia\Model\Base\Address as BaseAddress; class Address extends BaseAddress { - public function createOrUpdate() - { + protected $dispatcher; + public function setDispatcher(EventDispatcherInterface $dispatcher) + { + $this->dispatcher = $dispatcher; } + + public function getDispatcher() + { + return $this->dispatcher; + } + }