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
));
}
}