Bez popisu

Url.php 2.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace MailPoet\Newsletter;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Entities\NewsletterEntity;
  5. use MailPoet\Entities\SendingQueueEntity;
  6. use MailPoet\Entities\SubscriberEntity;
  7. use MailPoet\Models\Subscriber as SubscriberModel;
  8. use MailPoet\Router\Endpoints\ViewInBrowser as ViewInBrowserEndpoint;
  9. use MailPoet\Router\Router;
  10. use MailPoet\Subscribers\LinkTokens;
  11. use MailPoet\Subscribers\SubscribersRepository;
  12. class Url {
  13. /** @var LinkTokens */
  14. private $linkTokens;
  15. /** @var SubscribersRepository */
  16. private $subscribersRepository;
  17. public function __construct(
  18. LinkTokens $linkTokens,
  19. SubscribersRepository $subscribersRepository
  20. ) {
  21. $this->linkTokens = $linkTokens;
  22. $this->subscribersRepository = $subscribersRepository;
  23. }
  24. public function getViewInBrowserUrl(
  25. $newsletter,
  26. $subscriber = false,
  27. $queue = false,
  28. bool $preview = true
  29. ) {
  30. if ($subscriber instanceof SubscriberModel) {
  31. $subscriberEntity = $this->subscribersRepository->findOneById($subscriber->id);
  32. if ($subscriberEntity instanceof SubscriberEntity) {
  33. $subscriber->token = $this->linkTokens->getToken($subscriberEntity);
  34. }
  35. }
  36. $data = $this->createUrlDataObject($newsletter, $subscriber, $queue, $preview);
  37. return Router::buildRequest(
  38. ViewInBrowserEndpoint::ENDPOINT,
  39. ViewInBrowserEndpoint::ACTION_VIEW,
  40. $data
  41. );
  42. }
  43. public function createUrlDataObject($newsletter, $subscriber, $queue, $preview) {
  44. if ($newsletter instanceof NewsletterEntity) {
  45. $newsletterId = (!empty($newsletter->getId())) ? (int)$newsletter->getId() : 0;
  46. $newsletterHash = (!empty($newsletter->getHash())) ? $newsletter->getHash() : 0;
  47. } else {
  48. $newsletterId = (!empty($newsletter->id)) ? (int)$newsletter->id : 0;
  49. $newsletterHash = (!empty($newsletter->hash)) ? $newsletter->hash : 0;
  50. }
  51. if ($queue instanceof SendingQueueEntity) {
  52. $sendingQueueId = (!empty($queue->getId())) ? (int)$queue->getId() : 0;
  53. } else {
  54. $sendingQueueId = (!empty($queue->id)) ? (int)$queue->id : 0;
  55. }
  56. return [
  57. $newsletterId,
  58. $newsletterHash,
  59. (!empty($subscriber->id)) ?
  60. (int)$subscriber->id :
  61. 0,
  62. (!empty($subscriber->token)) ?
  63. $subscriber->token :
  64. 0,
  65. $sendingQueueId,
  66. (int)$preview,
  67. ];
  68. }
  69. public function transformUrlDataObject($data) {
  70. reset($data);
  71. if (!is_int(key($data))) return $data;
  72. $transformedData = [];
  73. $transformedData['newsletter_id'] = (!empty($data[0])) ? $data[0] : false;
  74. $transformedData['newsletter_hash'] = (!empty($data[1])) ? $data[1] : false;
  75. $transformedData['subscriber_id'] = (!empty($data[2])) ? $data[2] : false;
  76. $transformedData['subscriber_token'] = (!empty($data[3])) ? $data[3] : false;
  77. $transformedData['queue_id'] = (!empty($data[4])) ? $data[4] : false;
  78. $transformedData['preview'] = (!empty($data[5])) ? $data[5] : false;
  79. return $transformedData;
  80. }
  81. }