Нема описа

LogRepository.php 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace MailPoet\Logging;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Doctrine\Repository;
  5. use MailPoet\Entities\LogEntity;
  6. use MailPoet\Util\Helpers;
  7. use MailPoetVendor\Carbon\Carbon;
  8. /**
  9. * @extends Repository<LogEntity>
  10. */
  11. class LogRepository extends Repository {
  12. protected function getEntityClassName() {
  13. return LogEntity::class;
  14. }
  15. /**
  16. * @param \DateTimeInterface|null $dateFrom
  17. * @param \DateTimeInterface|null $dateTo
  18. * @param string|null $search
  19. * @param string $offset
  20. * @param string $limit
  21. * @return LogEntity[]
  22. */
  23. public function getLogs(
  24. \DateTimeInterface $dateFrom = null,
  25. \DateTimeInterface $dateTo = null,
  26. string $search = null,
  27. string $offset = null,
  28. string $limit = null
  29. ): array {
  30. $query = $this->doctrineRepository->createQueryBuilder('l')
  31. ->select('l');
  32. if ($dateFrom instanceof \DateTimeInterface) {
  33. $query
  34. ->andWhere('l.createdAt >= :dateFrom')
  35. ->setParameter('dateFrom', $dateFrom->format('Y-m-d 00:00:00'));
  36. }
  37. if ($dateTo instanceof \DateTimeInterface) {
  38. $query
  39. ->andWhere('l.createdAt <= :dateTo')
  40. ->setParameter('dateTo', $dateTo->format('Y-m-d 23:59:59'));
  41. }
  42. if ($search) {
  43. $search = Helpers::escapeSearch($search);
  44. $query
  45. ->andWhere('l.name LIKE :search or l.message LIKE :search')
  46. ->setParameter('search', "%$search%");
  47. }
  48. $query->orderBy('l.createdAt', 'desc');
  49. if ($offset !== null) {
  50. $query->setFirstResult((int)$offset);
  51. }
  52. if ($limit === null) {
  53. $query->setMaxResults(500);
  54. } else {
  55. $query->setMaxResults((int)$limit);
  56. }
  57. return $query->getQuery()->getResult();
  58. }
  59. public function purgeOldLogs(int $daysToKeepLogs) {
  60. $queryBuilder = $this->entityManager->createQueryBuilder();
  61. return $queryBuilder->delete(LogEntity::class, 'l')
  62. ->where('l.createdAt < :days')
  63. ->setParameter('days', Carbon::now()->subDays($daysToKeepLogs)->toDateTimeString())
  64. ->getQuery()->execute();
  65. }
  66. }