/ Gists / AfterSaveAction, events (own Kdyby implementation)
On gists

AfterSaveAction, events (own Kdyby implementation)

AW PHP Patterns

aftersaveEvent.php Raw #

<?php

final class EshopOrderAfterSaveRegister extends Nette\Object {

	/**
	 * Nette callback array of after order save actions
	 * 
	 * @var array
	 */
	public $onAfterSave;

	/**
	 * Array with IAfterSaveAction objects
	 * 
	 * @var array
	 */
	private $afterSaveActions = array();

	/**
	 * Nette callback array of actions after success payment
	 * 
	 * @var array
	 */
	public $onAfterSuccessPayment;

	/**
	 * Array with IAfterSaveAction objects
	 * 
	 * @var array
	 */
	private $afterSuccessPaymentActions = array();

	/**
	 * Nette callback array of actions after fail payment
	 * 
	 * @var array
	 */
	public $onAfterFailPayment;

	/**
	 * Array with IAfterSaveAction objects
	 * 
	 * @var array
	 */
	private $afterFailPaymentActions = array();

	/**
	 * Instance of current presenter
	 * 
	 * @var Presenter
	 */
	private $presenter;

	/**
	 * Model EshopOrder
	 * 
	 * @var EshopOrder
	 */
	private $modelEshopOrder;

	public function __construct(EshopOrder $modelEshopOrder) {
		$this->modelEshopOrder = $modelEshopOrder;
	}

	/**
	 * Register after save action
	 * 
	 * @param IAfterSaveAction
	 */
	public function addAfterSaveAction(IAfterSaveAction $action) {
		$this->afterSaveActions[] = $action;
		return $this;
	}

	/**
	 * Register after success payment action
	 * 
	 * @param IAfterSaveAction
	 */
	public function addAfterSuccessPaymentAction(IAfterSaveAction $action) {
		$this->afterSuccessPaymentActions[] = $action;
		return $this;
	}

	/**
	 * Register after success payment action
	 * 
	 * @param IAfterSaveAction
	 */
	public function addAfterFailPaymentAction(IAfterSaveAction $action) {
		$this->afterFailPaymentActions[] = $action;
		return $this;
	}

	/**
	 * Application presenter setter
	 * 
	 * @param Presenter
	 */
	public function setPresenter(Presenter $presenter) {
		$this->presenter = $presenter;
		return $this;
	}

	/**
	 * Inicialize and invoke after save actions
	 * 
	 * @param  int
	 * @return void
	 */
	public function invokeAfterSaveActions($orderId) {
		foreach($this->afterSaveActions as $action) {
			$action->setPresenter($this->presenter);
			$this->onAfterSave[] = array($action, 'doAction');
		}

		$eshopOrder 	= $this->modelEshopOrder->getOrder($orderId);
		$orderItems 	= $this->modelEshopOrder->getOrderItems($orderId);
		$orderVouchers 	= $this->modelEshopOrder->getOrderVouchers($orderId);

		$this->onAfterSave($eshopOrder, $orderItems, $orderVouchers);
	}

	/**
	 * Inicialize and invoke after success payment actions
	 * 
	 * @param  int
	 * @return void
	 */
	public function invokeAfterSuccessPaymentActions($orderId) {
		foreach($this->afterSuccessPaymentActions as $action) {
			$action->setPresenter($this->presenter);
			$this->onAfterSuccessPayment[] = array($action, 'doAction');
		}

		$eshopOrder 	= $this->modelEshopOrder->getOrder($orderId);
		$orderItems 	= $this->modelEshopOrder->getOrderItems($orderId);
		$orderVouchers 	= $this->modelEshopOrder->getOrderVouchers($orderId);

		$this->onAfterSuccessPayment($eshopOrder, $orderItems, $orderVouchers);
	}

	/**
	 * Inicialize and invoke after success payment actions
	 * 
	 * @param  int
	 * @return void
	 */
	public function invokeAfterFailPaymentActions($orderId) {
		foreach($this->afterFailPaymentActions as $action) {
			$action->setPresenter($this->presenter);
			$this->onAfterFailPayment[] = array($action, 'doAction');
		}

		$eshopOrder 	= $this->modelEshopOrder->getOrder($orderId);
		$orderItems 	= $this->modelEshopOrder->getOrderItems($orderId);
		$orderVouchers 	= $this->modelEshopOrder->getOrderVouchers($orderId);

		$this->onAfterFailPayment($eshopOrder, $orderItems, $orderVouchers);
	}

}

local.neon Raw #

		EshopOrderAfterSaveRegister:
				class: Model\EshopOrder\EshopOrderAfterSaveRegister
				setup:
					- addAfterSaveAction(@TruncateBasketAction)
					- addAfterSaveAction(@PaymentAction)
					- addAfterSaveAction(@PriceRoundingAction)
					- addAfterSaveAction(@SendMailAction)
					- addAfterSaveAction(@HeurekaOvereno)
					- addAfterSaveAction(@ZboziOvereno)
					- addAfterSaveAction(@RedirectThankYouAction)
					- addAfterSuccessPaymentAction(@EshopState7Action)
					- addAfterSuccessPaymentAction(@SendMailAction)
					- addAfterSuccessPaymentAction(@HeurekaOvereno)
					- addAfterSuccessPaymentAction(@ZboziOvereno)
					- addAfterSuccessPaymentAction(@SendMailToSalesDepartmentAction)
					- addAfterSuccessPaymentAction(@RedirectThankYouAction)
					- addAfterFailPaymentAction(@EshopState5Action)
					- addAfterFailPaymentAction(@SendMailToSalesDepartmentAction)
					- addAfterFailPaymentAction(@RedirectNotPaidAction)
					
					
			- EshopState7Action:
				class: Model\EshopOrder\ChangeOrderStateAction(7)

ChangeOrderStateAction.php Raw #

<?php

class ChangeOrderStateAction extends AfterSaveActionAbstraction {

	private $eshopOrderStateId;

	public function __construct($eshopOrderStateId) {
		$this->eshopOrderStateId = $eshopOrderStateId;
	}

	public function doAction(ActiveRow $eshopOrder, Selection $orderItems, Selection $orderVouchers) {
		$eshopOrder->update(array(
			'eshop_order_state_id' => $this->eshopOrderStateId
		));
	}

}