No Description

SubscriberStats.php 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace MailPoet\API\JSON\v1;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\API\JSON\Endpoint as APIEndpoint;
  5. use MailPoet\API\JSON\Error as APIError;
  6. use MailPoet\Config\AccessControl;
  7. use MailPoet\Entities\SubscriberEntity;
  8. use MailPoet\Newsletter\Statistics\WooCommerceRevenue;
  9. use MailPoet\Subscribers\Statistics\SubscriberStatisticsRepository;
  10. use MailPoet\Subscribers\SubscribersRepository;
  11. use MailPoet\WP\Functions as WPFunctions;
  12. class SubscriberStats extends APIEndpoint {
  13. public $permissions = [
  14. 'global' => AccessControl::PERMISSION_MANAGE_SUBSCRIBERS,
  15. ];
  16. /** @var SubscribersRepository */
  17. private $subscribersRepository;
  18. /** @var SubscriberStatisticsRepository */
  19. private $subscribersStatisticsRepository;
  20. public function __construct(
  21. SubscribersRepository $subscribersRepository,
  22. SubscriberStatisticsRepository $subscribersStatisticsRepository
  23. ) {
  24. $this->subscribersRepository = $subscribersRepository;
  25. $this->subscribersStatisticsRepository = $subscribersStatisticsRepository;
  26. }
  27. public function get($data) {
  28. $subscriber = isset($data['subscriber_id'])
  29. ? $this->subscribersRepository->findOneById((int)$data['subscriber_id'])
  30. : null;
  31. if (!$subscriber instanceof SubscriberEntity) {
  32. return $this->errorResponse([
  33. APIError::NOT_FOUND => WPFunctions::get()->__('This subscriber does not exist.', 'mailpoet'),
  34. ]);
  35. }
  36. $statistics = $this->subscribersStatisticsRepository->getStatistics($subscriber);
  37. $response = [
  38. 'email' => $subscriber->getEmail(),
  39. 'total_sent' => $statistics->getTotalSentCount(),
  40. 'open' => $statistics->getOpenCount(),
  41. 'machine_open' => $statistics->getMachineOpenCount(),
  42. 'click' => $statistics->getClickCount(),
  43. 'engagement_score' => $subscriber->getEngagementScore(),
  44. ];
  45. $lastEngagement = $subscriber->getLastEngagementAt();
  46. if ($lastEngagement instanceof \DateTimeInterface) {
  47. $response['last_engagement'] = $lastEngagement->format('Y-m-d H:i:s');
  48. }
  49. $woocommerce = $statistics->getWooCommerceRevenue();
  50. if ($woocommerce instanceof WooCommerceRevenue) {
  51. $response['woocommerce'] = $woocommerce->asArray();
  52. }
  53. return $this->successResponse($response);
  54. }
  55. }