PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
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 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / API / JSON / v1 / AutomatedLatestContent.php
mailpoet / lib / API / JSON / v1 Last commit date
Analytics.php 3 years ago AutomatedLatestContent.php 2 months ago AutomaticEmails.php 3 years ago Captcha.php 1 year ago Coupons.php 2 years ago CustomFields.php 2 months ago DynamicProducts.php 1 year ago DynamicSegments.php 2 months ago FeatureFlags.php 3 years ago Forms.php 2 months ago Help.php 1 year ago ImportExport.php 2 months ago Mailer.php 1 year ago NewsletterLinks.php 2 months ago NewsletterTemplates.php 2 months ago Newsletters.php 2 months ago Premium.php 10 months ago RedirectResponse.php 1 year ago Segments.php 2 months ago SendingQueue.php 2 months ago Services.php 6 months ago Settings.php 2 months ago Setup.php 1 year ago StatisticsExport.php 3 months ago SubscriberStats.php 1 month ago Subscribers.php 2 months ago Tags.php 3 years ago UserFlags.php 2 years ago WoocommerceProductVariations.php 2 months ago WoocommerceSettings.php 3 years ago index.php 3 years ago
AutomatedLatestContent.php
161 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\API\JSON\v1;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\API\JSON\Endpoint as APIEndpoint;
9 use MailPoet\API\JSON\SuccessResponse;
10 use MailPoet\Config\AccessControl;
11 use MailPoet\Newsletter\AutomatedLatestContent as ALC;
12 use MailPoet\Newsletter\BlockPostQuery;
13 use MailPoet\Util\APIPermissionHelper;
14 use MailPoet\WP\Functions as WPFunctions;
15 use MailPoet\WP\Posts as WPPosts;
16
17 class AutomatedLatestContent extends APIEndpoint {
18 /** @var ALC */
19 public $ALC;
20
21 /*** @var WPFunctions */
22 private $wp;
23
24 /*** @var APIPermissionHelper */
25 private $permissionHelper;
26
27 public $permissions = [
28 'global' => AccessControl::PERMISSION_MANAGE_EMAILS,
29 ];
30
31 public function __construct(
32 ALC $alc,
33 APIPermissionHelper $permissionHelper,
34 WPFunctions $wp
35 ) {
36 $this->ALC = $alc;
37 $this->wp = $wp;
38 $this->permissionHelper = $permissionHelper;
39 }
40
41 public function getPostTypes() {
42 $postTypes = array_map(function($postType) {
43 return [
44 'name' => $postType->name,
45 'label' => $postType->label,
46 ];
47 }, WPPosts::getTypes([], 'objects'));
48 return $this->successResponse(
49 array_filter($postTypes)
50 );
51 }
52
53 public function getTaxonomies($data = []) {
54 $postType = (isset($data['postType'])) ? $data['postType'] : 'post';
55 $allTaxonomies = WPFunctions::get()->getObjectTaxonomies($postType, 'objects');
56 $taxonomiesWithLabel = array_filter($allTaxonomies, function($taxonomy) {
57 return $taxonomy->label;
58 });
59 return $this->successResponse($taxonomiesWithLabel);
60 }
61
62 public function getTerms($data = []) {
63 $taxonomies = (isset($data['taxonomies'])) ? $data['taxonomies'] : [];
64 $search = (isset($data['search'])) ? $data['search'] : '';
65 $limit = (isset($data['limit'])) ? (int)$data['limit'] : 100;
66 $page = (isset($data['page'])) ? (int)$data['page'] : 1;
67 $args = [
68 'taxonomy' => $taxonomies,
69 'hide_empty' => false,
70 'search' => $search,
71 'number' => $limit,
72 'offset' => $limit * ($page - 1),
73 'orderby' => 'name',
74 'order' => 'ASC',
75 ];
76
77 $args = (array)$this->wp->applyFilters('mailpoet_search_terms_args', $args);
78 $terms = WPFunctions::get()->getTerms($args);
79
80 $parentIds = array_unique(array_filter(array_column((array)$terms, 'parent')));
81 if ($parentIds) {
82 $parentArgs = (array)$this->wp->applyFilters('mailpoet_search_terms_args', [
83 'taxonomy' => $taxonomies,
84 'include' => $parentIds,
85 'hide_empty' => false,
86 'number' => 0,
87 ]);
88 $parents = WPFunctions::get()->getTerms($parentArgs);
89 $parentMap = [];
90 foreach ($parents as $parent) {
91 $parentMap[$parent->term_id] = $parent->name; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
92 }
93 foreach ($terms as $key => $term) {
94 if (!$term instanceof \WP_Term) {
95 continue;
96 }
97 if ($term->parent && isset($parentMap[$term->parent])) {
98 $cloned = clone $term;
99 $cloned->name = $parentMap[$term->parent] . ' > ' . $term->name;
100 $terms[$key] = $cloned;
101 }
102 }
103 }
104
105 return $this->successResponse(array_values($terms));
106 }
107
108 /**
109 * Fetches posts for Posts static block
110 */
111 public function getPosts(array $data = []): SuccessResponse {
112 return $this->successResponse(
113 $this->getPermittedPosts($this->ALC->getPosts(new BlockPostQuery(['args' => $data, 'dynamic' => false])))
114 );
115 }
116
117 /**
118 * Fetches products for Abandoned Cart Content dynamic block
119 */
120 public function getTransformedPosts(array $data = []): SuccessResponse {
121 $posts = $this->getPermittedPosts($this->ALC->getPosts(new BlockPostQuery([
122 'args' => $data,
123 // If the request is for Posts or Products block then we are fetching data for a static block
124 'dynamic' => !(isset($data['type']) && in_array($data['type'], ["posts", "products"])),
125 ])));
126 return $this->successResponse(
127 $this->ALC->transformPosts($data, $posts)
128 );
129 }
130
131 /**
132 * Fetches different post types for ALC dynamic block
133 */
134 public function getBulkTransformedPosts(array $data = []): SuccessResponse {
135 $usedPosts = [];
136 $renderedPosts = [];
137
138 foreach ($data['blocks'] as $block) {
139 $query = new BlockPostQuery(['args' => $block, 'postsToExclude' => $usedPosts]);
140 $posts = $this->getPermittedPosts($this->ALC->getPosts($query));
141 $renderedPosts[] = $this->ALC->transformPosts($block, $posts);
142
143 foreach ($posts as $post) {
144 $usedPosts[] = $post->ID;
145 }
146 }
147
148 return $this->successResponse($renderedPosts);
149 }
150
151 /**
152 * @param \WP_Post[] $posts
153 * @return \WP_Post[]
154 */
155 private function getPermittedPosts($posts) {
156 return array_filter($posts, function ($post) {
157 return $this->permissionHelper->checkReadPermission($post);
158 });
159 }
160 }
161