. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Modules\Crm\Jobs; use Espo\Core\Job\JobDataLess; use Espo\Core\ORM\EntityManager; use Espo\Core\Utils\DateTime; use Espo\Core\Utils\Log; use Espo\Modules\Crm\Entities\MassEmail; use Espo\Modules\Crm\Tools\MassEmail\QueueCreator; use Espo\Modules\Crm\Tools\MassEmail\SendingProcessor; use Throwable; /** * @noinspection PhpUnused */ class ProcessMassEmail implements JobDataLess { public function __construct( private SendingProcessor $processor, private QueueCreator $queue, private EntityManager $entityManager, private Log $log ) {} public function run(): void { $this->processCreateQueue(); $this->processSend(); } private function processCreateQueue(): void { $pendingMassEmails = $this->entityManager ->getRDBRepositoryByClass(MassEmail::class) ->where([ 'status' => MassEmail::STATUS_PENDING, 'startAt<=' => date(DateTime::SYSTEM_DATE_TIME_FORMAT), ]) ->find(); foreach ($pendingMassEmails as $massEmail) { try { $this->queue->create($massEmail); } catch (Throwable $e) { $this->log->error("Create queue error. {id}. {message}", [ 'id' => $massEmail->getId(), 'message' => $e->getMessage(), 'exception' => $e, ]); } } } private function processSend(): void { $inProcessMassEmails = $this->entityManager ->getRDBRepositoryByClass(MassEmail::class) ->where([ 'status' => MassEmail::STATUS_IN_PROCESS, ]) ->find(); foreach ($inProcessMassEmails as $massEmail) { try { $this->processor->process($massEmail); } catch (Throwable $e) { $this->log->error("Sending mass email error. {id}. {message}", [ 'id' => $massEmail->getId(), 'message' => $e->getMessage(), 'exception' => $e, ]); } } } }