subscriberStatisticsRepository = $subscriberStatisticsRepository; } /** @return Field[] */ public function getFields(): array { return [ new Field( 'mailpoet:subscriber:email-sent-count', Field::TYPE_INTEGER, __('Email — sent count', 'mailpoet'), function (SubscriberPayload $payload, array $params = []) { $startTime = $this->getStartTime($params); return $this->subscriberStatisticsRepository->getTotalSentCount($payload->getSubscriber(), $startTime); } ), new Field( 'mailpoet:subscriber:email-opened-count', Field::TYPE_INTEGER, __('Email — opened count', 'mailpoet'), function (SubscriberPayload $payload, array $params = []) { $startTime = $this->getStartTime($params); return $this->subscriberStatisticsRepository->getStatisticsOpenCount($payload->getSubscriber(), $startTime); } ), new Field( 'mailpoet:subscriber:email-machine-opened-count', Field::TYPE_INTEGER, __('Email — machine opened count', 'mailpoet'), function (SubscriberPayload $payload) { $stats = $this->subscriberStatisticsRepository->getStatistics($payload->getSubscriber()); return $stats->getMachineOpenCount(); } ), new Field( 'mailpoet:subscriber:email-clicked-count', Field::TYPE_INTEGER, __('Email — clicked count', 'mailpoet'), function (SubscriberPayload $payload) { $stats = $this->subscriberStatisticsRepository->getStatistics($payload->getSubscriber()); return $stats->getClickCount(); } ), ]; } private function getStartTime(array $params): ?Carbon { $inTheLastSeconds = $params['in_the_last_seconds'] ?? null; return $inTheLastSeconds ? Carbon::now()->subSeconds((int)$inTheLastSeconds) : null; } }