Files
piratepoet/lib/Cron/Workers/StatsNotifications/StatsNotificationsRepository.php
2020-01-14 15:22:42 +01:00

59 lines
1.6 KiB
PHP

<?php
namespace MailPoet\Cron\Workers\StatsNotifications;
use MailPoet\Doctrine\Repository;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\StatsNotificationEntity;
use MailPoetVendor\Carbon\Carbon;
class StatsNotificationsRepository extends Repository {
protected function getEntityClassName() {
return StatsNotificationEntity::class;
}
/**
* @param int $newsletterId
* @return StatsNotificationEntity|null
*/
public function findOneByNewsletterId($newsletterId) {
return $this->doctrineRepository
->createQueryBuilder('sn')
->andWhere('sn.newsletter = :newsletterId')
->setParameter('newsletterId', $newsletterId)
->setMaxResults(1)
->getQuery()
->getOneOrNullResult();
}
/**
* @param int|null $limit
* @return StatsNotificationEntity[]
*/
public function findScheduled($limit = null) {
$date = new Carbon();
$query = $this->doctrineRepository
->createQueryBuilder('sn')
->join('sn.task', 'tasks')
->join('sn.newsletter', 'n')
->addSelect('tasks')
->addSelect('n')
->addOrderBy('tasks.priority')
->addOrderBy('tasks.updated_at')
->where('tasks.deleted_at IS NULL')
->andWhere('tasks.status = :status')
->setParameter('status', ScheduledTaskEntity::STATUS_SCHEDULED)
->andWhere('tasks.scheduled_at < :date')
->setParameter('date', $date)
->andWhere('tasks.type = :workerType')
->setParameter('workerType', Worker::TASK_TYPE);
if (is_int($limit)) {
$query->setMaxResults($limit);
}
return $query->getQuery()->getResult();
}
}