->setParameter('dateTo', $dateTo); } if ($dateFrom) { $qb->andWhere('t.updatedAt > :dateFrom') ->setParameter('dateFrom', $dateFrom); } return $qb->getQuery()->getResult(); } public function getCampaignAnalyticsQuery() { $sevenDaysAgo = Carbon::now()->subDays(7); $thirtyDaysAgo = Carbon::now()->subDays(30); $threeMonthsAgo = Carbon::now()->subMonths(3); return $this->doctrineRepository->createQueryBuilder('q') ->select(' n.type as newsletterType, q.meta as sendingQueueMeta, CASE WHEN COUNT(s.id) > 0 THEN true ELSE false END as sentToSegment, CASE WHEN t.processedAt >= :sevenDaysAgo THEN true ELSE false END as sentLast7Days, CASE WHEN t.processedAt >= :thirtyDaysAgo THEN true ELSE false END as sentLast30Days, CASE WHEN t.processedAt >= :threeMonthsAgo THEN true ELSE false END as sentLast3Months') ->join('q.task', 't') ->leftJoin('q.newsletter', 'n') ->leftJoin('n.newsletterSegments', 'ns') ->leftJoin('ns.segment', 's', 'WITH', 's.type = :dynamicType') ->andWhere('t.status = :taskStatus') ->andWhere('t.processedAt >= :since') ->setParameter('sevenDaysAgo', $sevenDaysAgo) ->setParameter('thirtyDaysAgo', $thirtyDaysAgo) ->setParameter('threeMonthsAgo', $threeMonthsAgo) ->setParameter('dynamicType', SegmentEntity::TYPE_DYNAMIC) ->setParameter('taskStatus', ScheduledTaskEntity::STATUS_COMPLETED) ->setParameter('since', $threeMonthsAgo) ->groupBy('q.id') ->getQuery(); } public function pause(SendingQueueEntity $queue): void { if ($queue->getCountProcessed() !== $queue->getCountTotal()) { $task = $queue->getTask(); if ($task instanceof ScheduledTaskEntity) { $task->setStatus(ScheduledTaskEntity::STATUS_PAUSED); $this->flush(); } } } public function resume(SendingQueueEntity $queue): void { $task = $queue->getTask(); if (!$task instanceof ScheduledTaskEntity) return; if ($queue->getCountProcessed() === $queue->getCountTotal()) { $processedAt = Carbon::now()->millisecond(0); $task->setProcessedAt($processedAt); $task->setStatus(ScheduledTaskEntity::STATUS_COMPLETED); // Update also status of newsletter if necessary $newsletter = $queue->getNewsletter(); if ($newsletter instanceof NewsletterEntity && $newsletter->canBeSetSent()) { $newsletter->setStatus(NewsletterEntity::STATUS_SENT); } $this->flush(); } else { $newsletter = $queue->getNewsletter(); if (!$newsletter instanceof NewsletterEntity) return; if ($newsletter->getStatus() === NewsletterEntity::STATUS_CORRUPT) { // force a re-render $queue->setNewsletterRenderedBody(null); $this->persist($queue); } $newsletter->setStatus($newsletter->canBeSetActive() ? NewsletterEntity::STATUS_ACTIVE : NewsletterEntity::STATUS_SENDING); $task->setStatus(null); $this->flush(); } } public function deleteByTask(ScheduledTaskEntity $scheduledTask): void { $this->entityManager->createQueryBuilder() ->delete(SendingQueueEntity::class, 'sq') ->where('sq.task = :task') ->setParameter('task', $scheduledTask) ->getQuery() ->execute(); // delete was done via DQL, make sure the entities are also detached from the entity manager $this->detachAll(function (SendingQueueEntity $entity) use ($scheduledTask) { return $entity->getTask() === $scheduledTask; }); } public function saveCampaignId(SendingQueueEntity $queue, string $campaignId): void { $meta = $queue->getMeta(); if (!is_array($meta)) { $meta = []; } $meta['campaignId'] = $campaignId; $queue->setMeta($meta); $this->flush(); } public function saveFilterSegmentMeta(SendingQueueEntity $queue, SegmentEntity $filterSegmentEntity): void { $meta = $queue->getMeta() ?? []; $meta['filterSegment'] = [ 'id' => $filterSegmentEntity->getId(), 'name' => $filterSegmentEntity->getName(), 'updatedAt' => $filterSegmentEntity->getUpdatedAt(), 'filters' => array_map(function(DynamicSegmentFilterEntity $filterEntity) { $filter = $this->filterFactory->getFilterForFilterEntity($filterEntity); $data = $filterEntity->getFilterData(); $filterData = [ 'filterType' => $data->getFilterType(), 'action' => $data->getAction(), 'data' => $filterEntity->getFilterData()->getData(), 'lookupData' => [], ]; try { $filterData['lookupData'] = $filter->getLookupData($data); } catch (\Throwable $e) { $this->loggerFactory->getLogger(LoggerFactory::TOPIC_SEGMENTS)->error("Failed to save lookup data for filter {$filterEntity->getId()}: {$e->getMessage()}"); } return $filterData; }, $filterSegmentEntity->getDynamicFilters()->toArray()), ]; $queue->setMeta($meta); $this->flush(); } public function updateCounts(SendingQueueEntity $queue, ?int $count = null): void { if ($count) { // increment/decrement counts based on known subscriber count, don't exceed the bounds $queue->setCountProcessed(min($queue->getCountProcessed() + $count, $queue->getCountTotal())); $queue->setCountToProcess(max($queue->getCountToProcess() - $count, 0)); } else { // query DB to update counts, slower but more accurate, to be used if count isn't known $task = $queue->getTask(); $processed = $task ? $this->scheduledTaskSubscribersRepository->countProcessed($task) : 0; $unprocessed = $task ? $this->scheduledTaskSubscribersRepository->countUnprocessed($task) : 0; $queue->setCountProcessed($processed); $queue->setCountToProcess($unprocessed); $queue->setCountTotal($processed + $unprocessed); } $this->entityManager->flush(); } /** @param int[] $ids */ public function deleteByNewsletterIds(array $ids): void { $this->entityManager->createQueryBuilder() ->delete(SendingQueueEntity::class, 'q') ->where('q.newsletter IN (:ids)') ->setParameter('ids', $ids) ->getQuery() ->execute(); // delete was done via DQL, make sure the entities are also detached from the entity manager $this->detachAll(function (SendingQueueEntity $entity) use ($ids) { $newsletter = $entity->getNewsletter(); return $newsletter && in_array($newsletter->getId(), $ids, true); }); } }
Fatal error: Uncaught Error: Class "MailPoet\Newsletter\Sending\SendingQueuesRepository" not found in /htdocs/surfshop.ma/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php:4333 Stack trace: #0 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(4323): MailPoetGenerated\FreeCachedContainer->getSendingQueuesRepositoryService() #1 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(4283): MailPoetGenerated\FreeCachedContainer->getScheduledTasksRepositoryService() #2 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(5017): MailPoetGenerated\FreeCachedContainer->getWelcomeSchedulerService() #3 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(2902): MailPoetGenerated\FreeCachedContainer->getWPService() #4 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(2805): MailPoetGenerated\FreeCachedContainer->getPopulatorService() #5 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(2869): MailPoetGenerated\FreeCachedContainer->getActivatorService() #6 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/vendor-prefixed/symfony/dependency-injection/Container.php(122): MailPoetGenerated\FreeCachedContainer->getInitializerService() #7 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/vendor-prefixed/symfony/dependency-injection/Container.php(110): MailPoetVendor\Symfony\Component\DependencyInjection\Container->make('MailPoet\\Config...', 1) #8 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/lib/DI/ContainerWrapper.php(39): MailPoetVendor\Symfony\Component\DependencyInjection\Container->get('MailPoet\\Config...') #9 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/mailpoet_initializer.php(92): MailPoet\DI\ContainerWrapper->get('MailPoet\\Config...') #10 /htdocs/surfshop.ma/wp-content/plugins/mailpoet/mailpoet.php(179): require_once('/htdocs/surfsho...') #11 /htdocs/surfshop.ma/wp-settings.php(526): include_once('/htdocs/surfsho...') #12 /htdocs/surfshop.ma/wp-config.php(98): require_once('/htdocs/surfsho...') #13 /htdocs/surfshop.ma/wp-load.php(50): require_once('/htdocs/surfsho...') #14 /htdocs/surfshop.ma/wp-blog-header.php(13): require_once('/htdocs/surfsho...') #15 /htdocs/surfshop.ma/index.php(17): require('/htdocs/surfsho...') #16 {main} thrown in /htdocs/surfshop.ma/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php on line 4333