Нет описания

StatisticsNewsletters.php 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace MailPoet\Models;
  3. if (!defined('ABSPATH')) exit;
  4. /**
  5. * @property string|null $sentAt
  6. */
  7. class StatisticsNewsletters extends Model {
  8. public static $_table = MP_STATISTICS_NEWSLETTERS_TABLE; // phpcs:ignore PSR2.Classes.PropertyDeclaration
  9. public static function createMultiple(array $data) {
  10. $values = [];
  11. foreach ($data as $value) {
  12. if (!empty($value['newsletter_id']) &&
  13. !empty($value['subscriber_id']) &&
  14. !empty($value['queue_id'])
  15. ) {
  16. $values[] = $value['newsletter_id'];
  17. $values[] = $value['subscriber_id'];
  18. $values[] = $value['queue_id'];
  19. }
  20. }
  21. if (!count($values)) return false;
  22. return self::rawExecute(
  23. 'INSERT INTO `' . self::$_table . '` ' .
  24. '(newsletter_id, subscriber_id, queue_id) ' .
  25. 'VALUES ' . rtrim(
  26. str_repeat('(?,?,?), ', count($values) / 3),
  27. ', '
  28. ),
  29. $values
  30. );
  31. }
  32. public static function getAllForSubscriber(Subscriber $subscriber) {
  33. return static::tableAlias('statistics')
  34. ->select('statistics.newsletter_id', 'newsletter_id')
  35. ->select('newsletter_rendered_subject')
  36. ->select('opens.created_at', 'opened_at')
  37. ->select('sent_at')
  38. ->join(
  39. SendingQueue::$_table,
  40. ['statistics.queue_id', '=', 'queue.id'],
  41. 'queue'
  42. )
  43. ->leftOuterJoin(
  44. StatisticsOpens::$_table,
  45. 'statistics.newsletter_id = opens.newsletter_id AND statistics.subscriber_id = opens.subscriber_id',
  46. 'opens'
  47. )
  48. ->where('statistics.subscriber_id', $subscriber->id())
  49. ->orderByAsc('newsletter_id');
  50. }
  51. }