PluginProbe
MailPoet – Newsletters, Email Marketing, and Automation / 3.65.0
MailPoet – Newsletters, Email Marketing, and Automation v3.65.0
5.38.0 5.37.0 5.36.1 5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 All 542 releases
mailpoet / lib / Config / Shortcodes.php

Shortcodes.php in MailPoet – Newsletters, Email Marketing, and Automation 3.65.0, at lib/Config/Shortcodes.php

163 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace MailPoet\Config;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Entities\SubscriberEntity;
9 use MailPoet\Form\Widget;
10 use MailPoet\Models\Newsletter;
11 use MailPoet\Models\Subscriber;
12 use MailPoet\Newsletter\Url as NewsletterUrl;
13 use MailPoet\Segments\SegmentSubscribersRepository;
14 use MailPoet\Subscribers\SubscribersRepository;
15 use MailPoet\Subscription\Pages;
16 use MailPoet\WP\Functions as WPFunctions;
17
18 class Shortcodes {
19 /** @var Pages */
20 private $subscriptionPages;
21
22 /** @var WPFunctions */
23 private $wp;
24
25 /** @var SegmentSubscribersRepository */
26 private $segmentSubscribersRepository;
27
28 /** @var SubscribersRepository */
29 private $subscribersRepository;
30
31 /** @var NewsletterUrl */
32 private $newsletterUrl;
33
34 public function __construct(
35 Pages $subscriptionPages,
36 WPFunctions $wp,
37 SegmentSubscribersRepository $segmentSubscribersRepository,
38 SubscribersRepository $subscribersRepository,
39 NewsletterUrl $newsletterUrl
40 ) {
41 $this->subscriptionPages = $subscriptionPages;
42 $this->wp = $wp;
43 $this->segmentSubscribersRepository = $segmentSubscribersRepository;
44 $this->subscribersRepository = $subscribersRepository;
45 $this->newsletterUrl = $newsletterUrl;
46 }
47
48 public function init() {
49 // form widget shortcode
50 $this->wp->addShortcode('mailpoet_form', [$this, 'formWidget']);
51
52 // subscribers count shortcode
53 $this->wp->addShortcode('mailpoet_subscribers_count', [
54 $this, 'getSubscribersCount',
55 ]);
56 $this->wp->addShortcode('wysija_subscribers_count', [
57 $this, 'getSubscribersCount',
58 ]);
59
60 // archives page
61 $this->wp->addShortcode('mailpoet_archive', [
62 $this, 'getArchive',
63 ]);
64
65 $this->wp->addFilter('mailpoet_archive_date', [
66 $this, 'renderArchiveDate',
67 ], 2);
68 $this->wp->addFilter('mailpoet_archive_subject', [
69 $this, 'renderArchiveSubject',
70 ], 2, 3);
71 // initialize subscription pages data
72 $this->subscriptionPages->init();
73 // initialize subscription management shortcodes
74 $this->subscriptionPages->initShortcodes();
75 }
76
77 public function formWidget($params = []) {
78 // IMPORTANT: fixes conflict with MagicMember
79 $this->wp->removeShortcode('user_list');
80
81 if (isset($params['id']) && (int)$params['id'] > 0) {
82 $formWidget = new Widget();
83 return $formWidget->widget([
84 'form' => (int)$params['id'],
85 'form_type' => 'shortcode',
86 ]);
87 }
88 }
89
90 public function getSubscribersCount($params) {
91 if (!empty($params['segments'])) {
92 $segmentIds = array_map(function($segmentId) {
93 return (int)trim($segmentId);
94 }, explode(',', $params['segments']));
95 }
96
97 if (empty($segmentIds)) {
98 return $this->wp->numberFormatI18n(Subscriber::filter('subscribed')->count());
99 } else {
100 return $this->wp->numberFormatI18n(
101 $this->segmentSubscribersRepository->getSubscribersCountBySegmentIds($segmentIds, SubscriberEntity::STATUS_SUBSCRIBED)
102 );
103 }
104 }
105
106 public function getArchive($params) {
107 $segmentIds = [];
108 if (!empty($params['segments'])) {
109 $segmentIds = array_map(function($segmentId) {
110 return (int)trim($segmentId);
111 }, explode(',', $params['segments']));
112 }
113
114 $html = '';
115
116 $newsletters = Newsletter::getArchives($segmentIds);
117
118 $subscriber = $this->subscribersRepository->getCurrentWPUser();
119 $subscriber = $subscriber ? Subscriber::findOne($subscriber->getId()) : null;
120
121 if (empty($newsletters)) {
122 return $this->wp->applyFilters(
123 'mailpoet_archive_no_newsletters',
124 $this->wp->__('Oops! There are no newsletters to display.', 'mailpoet')
125 );
126 } else {
127 $title = $this->wp->applyFilters('mailpoet_archive_title', '');
128 if (!empty($title)) {
129 $html .= '<h3 class="mailpoet_archive_title">' . $title . '</h3>';
130 }
131 $html .= '<ul class="mailpoet_archive">';
132 foreach ($newsletters as $newsletter) {
133 $queue = $newsletter->queue()->findOne();
134 $html .= '<li>' .
135 '<span class="mailpoet_archive_date">' .
136 $this->wp->applyFilters('mailpoet_archive_date', $newsletter) .
137 '</span>
138 <span class="mailpoet_archive_subject">' .
139 $this->wp->applyFilters('mailpoet_archive_subject', $newsletter, $subscriber, $queue) .
140 '</span>
141 </li>';
142 }
143 $html .= '</ul>';
144 }
145 return $html;
146 }
147
148 public function renderArchiveDate($newsletter) {
149 return $this->wp->dateI18n(
150 $this->wp->getOption('date_format'),
151 strtotime($newsletter->processedAt)
152 );
153 }
154
155 public function renderArchiveSubject($newsletter, $subscriber, $queue) {
156 $previewUrl = $this->newsletterUrl->getViewInBrowserUrl($newsletter, $subscriber, $queue);
157 return '<a href="' . esc_attr($previewUrl) . '" target="_blank" title="'
158 . esc_attr(__('Preview in a new tab', 'mailpoet')) . '">'
159 . esc_attr($newsletter->newsletterRenderedSubject) .
160 '</a>';
161 }
162 }
163