smsplatform-1.0.x-dev/src/SmsIncomingController.php
src/SmsIncomingController.php
<?php
declare(strict_types=1);
namespace Drupal\smsplatform;
use Drupal\Core\Controller\ControllerBase;
use Drupal\smsplatform\Entity\SmsGatewayInterface;
use Drupal\smsplatform\Provider\SmsProviderInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface;
/**
* Provides a controller for receiving incoming messages.
*/
class SmsIncomingController extends ControllerBase {
/**
* Creates an incoming route controller.
*
* @param \Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface $argumentResolver
* The argument resolver.
* @param \Drupal\smsplatform\Provider\SmsProviderInterface $smsProvider
* The SMS service provider.
*/
public function __construct(
protected ArgumentResolverInterface $argumentResolver,
protected SmsProviderInterface $smsProvider,
) {
}
/**
* Receives incoming messages for a gateway.
*
* @param \Symfony\Component\HttpFoundation\Request $request
* The current HTTP request.
* @param \Drupal\smsplatform\Entity\SmsGatewayInterface $sms_gateway
* The gateway which is handling the incoming request.
*
* @return mixed
* A response to return.
*/
public function processIncoming(Request $request, SmsGatewayInterface $sms_gateway) {
$controller = [$sms_gateway->getPlugin(), 'processIncoming'];
$arguments = $this->argumentResolver
->getArguments($request, $controller);
/** @var \Drupal\smsplatform\SmsProcessingResponse $response */
$response = call_user_func_array($controller, $arguments);
foreach ($response->getMessages() as $message) {
$this->smsProvider->queue($message);
}
return $response->getResponse();
}
}
