Overview

Namespaces

  • Charcoal
    • Email
      • Script
      • ServiceProvider

Classes

  • Charcoal\Email\Email
  • Charcoal\Email\EmailConfig
  • Charcoal\Email\EmailLog
  • Charcoal\Email\EmailQueueItem
  • Charcoal\Email\EmailQueueManager
  • Charcoal\Email\GenericEmailTemplate
  • Charcoal\Email\Script\ProcessQueueScript
  • Charcoal\Email\ServiceProvider\EmailServiceProvider

Interfaces

  • Charcoal\Email\EmailInterface

Traits

  • Charcoal\Email\EmailAwareTrait
  • Overview
  • Namespace
  • Class
  1: <?php
  2: 
  3: namespace Charcoal\Email\Script;
  4: 
  5: // PSR-7 (http messaging) dependencies
  6: use \Psr\Http\Message\RequestInterface;
  7: use \Psr\Http\Message\ResponseInterface;
  8: 
  9: use \Pimple\Container;
 10: 
 11: // Module `charcoal-app` dependencies
 12: use \Charcoal\App\Script\AbstractScript;
 13: use \Charcoal\App\Script\CronScriptInterface;
 14: use \Charcoal\App\Script\CronScriptTrait;
 15: 
 16: // Module `charcoal-factory` dependencies
 17: use \Charcoal\Factory\FactoryInterface;
 18: 
 19: // Local dependencies
 20: use \Charcoal\Email\EmailQueueManager;
 21: 
 22: /**
 23:  * Process Email Queue script.
 24:  *
 25:  * Can also be used as a cron script.
 26:  */
 27: class ProcessQueueScript extends AbstractScript implements CronScriptInterface
 28: {
 29:     use CronScriptTrait;
 30: 
 31:     /**
 32:      * @var FactoryInterface $queueItemFactory
 33:      */
 34:     private $queueItemFactory;
 35: 
 36:     /**
 37:      * A copy of all sent message.
 38:      *
 39:      * @var array $sent
 40:      */
 41:     private $sent;
 42: 
 43:     /**
 44:      * @param Container $container Pimple DI container.
 45:      * @return void
 46:      */
 47:     public function setDependencies(Container $container)
 48:     {
 49:         parent::setDependencies($container);
 50:         $this->setQueueItemFactory($container['model/factory']);
 51:     }
 52: 
 53:     /**
 54:      * @param FactoryInterface $factory The factory to create queue items.
 55:      * @return void
 56:      */
 57:     private function setQueueItemFactory(FactoryInterface $factory)
 58:     {
 59:         $this->queueItemFactory = $factory;
 60:     }
 61: 
 62:     /**
 63:      * Process all messages currently in queue.
 64:      *
 65:      * @param  RequestInterface  $request  A PSR-7 compatible Request instance.
 66:      * @param  ResponseInterface $response A PSR-7 compatible Response instance.
 67:      * @return ResponseInterface
 68:      */
 69:     public function run(RequestInterface $request, ResponseInterface $response)
 70:     {
 71:         // Unused parameter
 72:         unset($request);
 73: 
 74:         $this->startLock();
 75: 
 76:         $climate = $this->climate();
 77: 
 78:         $processedCallback = function($success, $failures, $skipped) use ($climate) {
 79:             if (!empty($success)) {
 80:                 $climate->green()->out(sprintf('%s emails were successfully sent.', count($success)));
 81:             }
 82: 
 83:             if (!empty($failures)) {
 84:                 $climate->red()->out(sprintf('%s emails were not successfully sent', count($failures)));
 85:             }
 86: 
 87:             if (!empty($skipped)) {
 88:                 $climate->orange()->out(sprintf('%s emails were skipped.', count($skipped)));
 89:             }
 90:         };
 91: 
 92:         $queueManager = new EmailQueueManager([
 93:             'logger' => $this->logger,
 94:             'queue_item_factory' => $this->queueItemFactory
 95:         ]);
 96:         $queueManager->setProcessedCallback($processedCallback);
 97:         $queueManager->processQueue();
 98: 
 99:         $this->stopLock();
100: 
101:         return $response;
102:     }
103: }
104: 
API documentation generated by ApiGen