simple_paypal_field-8.x-1.1/src/Controller/PayPalSmartButtonsController.php
src/Controller/PayPalSmartButtonsController.php
<?php
namespace Drupal\simple_paypal_field\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\simple_paypal_field\Event\PaypalSmartButtonsEvent;
use Drupal\simple_paypal_field\Event\PayPalSmartButtonsEvents;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Controller class for requests from the smart buttons.
*/
class PayPalSmartButtonsController extends ControllerBase {
/**
* Drupal event dispatcher.
*
* @var \Symfony\Component\EventDispatcher\EventDispatcherInterface
*/
protected $eventDispatcher;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container->get('event_dispatcher'));
}
/**
* PayPalSmartButtonsController constructor.
*
* @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $eventDispatcher
* Drupal event dispatcher.
*/
public function __construct(EventDispatcherInterface $eventDispatcher) {
$this->eventDispatcher = $eventDispatcher;
}
/**
* Callback requested after approving the order.
*
* Dispatches the 'approve' event to Drupal.
*
* @param \Symfony\Component\HttpFoundation\Request $request
* Request object.
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
* Response for buttons.
*/
public function approve(Request $request) {
$content = $request->getContent();
if (!empty($content)) {
$data = json_decode($content, TRUE);
$element = [];
try {
[
$element['entity_type'],
$element['bundle'],
$element['field'],
$element['entity_id'],
$element['field_id'],
] = explode('-', $data['element']);
}
finally {
unset($data['element']);
}
$this->getLogger('simple_paypal_field')->debug(var_export($data['details'], TRUE));
$event = new PaypalSmartButtonsEvent($data['details'], $element);
$this->eventDispatcher->dispatch(
PayPalSmartButtonsEvents::APPROVE_ORDER,
$event
);
return new JsonResponse('ok');
}
else {
return new JsonResponse(NULL, Response::HTTP_NOT_ACCEPTABLE);
}
}
}
