PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
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 / Automation / Integrations / WordPress / ContextFactory.php
mailpoet / lib / Automation / Integrations / WordPress Last commit date
Fields 1 year ago Payloads 1 year ago SubjectTransformers 2 years ago Subjects 5 months ago ContextFactory.php 2 months ago WordPressIntegration.php 2 years ago index.php 3 years ago
ContextFactory.php
171 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Automation\Integrations\WordPress;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Automation\Engine\WordPress;
9
10 class ContextFactory {
11 private const ELEVATED_CAPABILITIES = [
12 'activate_plugins',
13 'create_users',
14 'delete_plugins',
15 'delete_themes',
16 'delete_users',
17 'edit_files',
18 'edit_plugins',
19 'edit_themes',
20 'edit_users',
21 'install_plugins',
22 'install_themes',
23 'manage_network',
24 'manage_network_options',
25 'manage_network_plugins',
26 'manage_network_themes',
27 'manage_network_users',
28 'manage_options',
29 'manage_sites',
30 'manage_woocommerce',
31 'mailpoet_manage_settings',
32 'promote_users',
33 'remove_users',
34 'switch_themes',
35 'unfiltered_html',
36 'update_core',
37 'update_plugins',
38 'update_themes',
39 'upgrade_network',
40 ];
41
42 /** @var WordPress */
43 private $wp;
44
45 public function __construct(
46 WordPress $wp
47 ) {
48 $this->wp = $wp;
49 }
50
51 /** @return mixed[] */
52 public function getContextData(): array {
53 return [
54 'comment_statuses' => $this->getCommentStatuses(),
55 'editable_roles' => $this->getEditableRoles(),
56 'post_types' => $this->getPostTypes(),
57 'taxonomies' => $this->getTaxonomies(),
58 ];
59 }
60
61 /**
62 * @return string[][]
63 */
64 private function getCommentStatuses(): array {
65 $statiMap = $this->wp->getCommentStatuses();
66 $stati = [];
67 foreach ($statiMap as $id => $name) {
68 $stati[] = [
69 'id' => $id,
70 'name' => $name,
71 ];
72 }
73 return $stati;
74 }
75
76 /**
77 * @return string[][]
78 */
79 private function getEditableRoles(): array {
80 $roles = [];
81 foreach ($this->wp->getEditableRoles() as $id => $role) {
82 $roleId = (string)$id;
83 if ($this->isElevatedRole($roleId, $role)) {
84 continue;
85 }
86 $roles[] = [
87 'id' => $roleId,
88 'name' => (string)($role['name'] ?? $roleId),
89 ];
90 }
91 return $roles;
92 }
93
94 /**
95 * @param string $id
96 * @param array{name?: string, capabilities?: array<string, bool>} $role
97 */
98 private function isElevatedRole(string $id, array $role): bool {
99 if ($id === 'administrator') {
100 return true;
101 }
102 $capabilities = $role['capabilities'] ?? [];
103 foreach (self::ELEVATED_CAPABILITIES as $capability) {
104 if (!empty($capabilities[$capability])) {
105 return true;
106 }
107 }
108 return false;
109 }
110
111 /**
112 * @return array<int, array<string, array<string, bool>|bool|string>>
113 */
114 private function getPostTypes(): array {
115 /** @var \WP_Post_Type[] $postTypes */
116 $postTypes = $this->wp->getPostTypes([], 'objects');
117 return array_values(array_map(function(\WP_Post_Type $type): array {
118
119 $supports = ['comments' => false];
120 foreach (array_keys($supports) as $key) {
121 $supports[$key] = $this->wp->postTypeSupports($type->name, $key);
122 }
123
124 return [
125 'name' => $type->name,
126 'label' => $type->label,
127 'supports' => $supports,
128 //phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
129 'show_in_rest' => $type->show_in_rest,
130 //phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
131 'rest_base' => $type->rest_base,
132 //phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
133 'rest_namespace' => $type->rest_namespace,
134 'public' => $type->public,
135 ];
136 },
137 $postTypes));
138 }
139
140 /**
141 * @return array<int, array<string, string[]|bool|string>>
142 */
143 private function getTaxonomies(): array {
144 /** @var \WP_Taxonomy[] $taxonomies */
145 $taxonomies = array_filter(
146 $this->wp->getTaxonomies([], 'objects'),
147 function($object): bool {
148 return $object instanceof \WP_Taxonomy;
149 }
150 );
151 return array_values(array_map(
152 function(\WP_Taxonomy $taxonomy): array {
153 return [
154 'name' => $taxonomy->name,
155 'label' => $taxonomy->label,
156 //phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
157 'show_in_rest' => $taxonomy->show_in_rest,
158 'public' => $taxonomy->public,
159 //phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
160 'rest_base' => $taxonomy->rest_base,
161 //phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
162 'rest_namespace' => $taxonomy->rest_namespace,
163 //phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
164 'object_type' => (array)$taxonomy->object_type,
165 ];
166 },
167 $taxonomies
168 ));
169 }
170 }
171