vendor/payum/core/Payum/Core/Action/ExecuteSameRequestWithModelDetailsAction.php line 22

Open in your IDE?
  1. <?php
  2. namespace Payum\Core\Action;
  3. use Payum\Core\Bridge\Spl\ArrayObject;
  4. use Payum\Core\Exception\RequestNotSupportedException;
  5. use Payum\Core\GatewayAwareInterface;
  6. use Payum\Core\GatewayAwareTrait;
  7. use Payum\Core\Model\DetailsAggregateInterface;
  8. use Payum\Core\Model\DetailsAwareInterface;
  9. use Payum\Core\Model\ModelAggregateInterface;
  10. use Payum\Core\Model\ModelAwareInterface;
  11. class ExecuteSameRequestWithModelDetailsAction implements ActionInterface, GatewayAwareInterface
  12. {
  13.     use GatewayAwareTrait;
  14.     /**
  15.      * {@inheritDoc}
  16.      *
  17.      * @param ModelAggregateInterface|ModelAwareInterface $request
  18.      */
  19.     public function execute($request)
  20.     {
  21.         RequestNotSupportedException::assertSupports($this, $request);
  22.         /** @var DetailsAggregateInterface $model */
  23.         $model = $request->getModel();
  24.         $details = $model->getDetails();
  25.         if (is_array($details)) {
  26.             $details = ArrayObject::ensureArrayObject($details);
  27.         }
  28.         $request->setModel($details);
  29.         try {
  30.             $this->gateway->execute($request);
  31.         } finally {
  32.             if ($model instanceof DetailsAwareInterface) {
  33.                 $model->setDetails($details);
  34.             }
  35.         }
  36.     }
  37.     /**
  38.      * {@inheritDoc}
  39.      */
  40.     public function supports($request)
  41.     {
  42.         return
  43.             $request instanceof ModelAggregateInterface &&
  44.             $request instanceof ModelAwareInterface &&
  45.             $request->getModel() instanceof DetailsAggregateInterface
  46.         ;
  47.     }
  48. }