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 / Abilities / WooCommerceAutomationTemplates.php
mailpoet / lib / Abilities Last commit date
Abilities.php 1 month ago WooCommerceAutomationTemplates.php 1 month ago WooCommerceMarketingStatus.php 1 month ago index.php 1 month ago
WooCommerceAutomationTemplates.php
150 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Abilities;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use Automattic\WooCommerce\Abilities\AbilityDefinition;
9 use MailPoet\Automation\Engine\Data\AutomationTemplate;
10 use MailPoet\Automation\Engine\Registry;
11 use MailPoet\Config\AccessControl;
12 use MailPoet\DI\ContainerWrapper;
13 use MailPoet\WP\Functions as WPFunctions;
14
15 if (!defined('ABSPATH')) exit;
16
17 if (!interface_exists(AbilityDefinition::class)) {
18 return;
19 }
20
21 class WooCommerceAutomationTemplates implements AbilityDefinition {
22 private const CATEGORIES = [
23 'abandoned-cart',
24 'bookings',
25 'purchase',
26 'review',
27 'subscriptions',
28 ];
29
30 public static function get_name(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps -- Required by WooCommerce's AbilityDefinition interface.
31 return 'mailpoet/list-woocommerce-automation-templates';
32 }
33
34 public static function get_registration_args(): array { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps -- Required by WooCommerce's AbilityDefinition interface.
35 return [
36 'label' => __('List MailPoet WooCommerce automation templates', 'mailpoet'),
37 'description' => __('List MailPoet automation templates for WooCommerce marketing workflows.', 'mailpoet'),
38 'category' => 'woocommerce',
39 'input_schema' => self::getInputSchema(),
40 'output_schema' => self::getOutputSchema(),
41 'execute_callback' => [self::class, 'execute'],
42 'permission_callback' => [self::class, 'canReadTemplates'],
43 'meta' => [
44 'show_in_rest' => true,
45 'mcp' => [
46 'public' => true,
47 'type' => 'tool',
48 ],
49 'annotations' => [
50 'readonly' => true,
51 'destructive' => false,
52 'idempotent' => true,
53 ],
54 ],
55 ];
56 }
57
58 public static function execute($input = []): array {
59 $category = is_array($input) && isset($input['category']) && is_string($input['category']) ? $input['category'] : '';
60 if ($category !== '' && !in_array($category, self::CATEGORIES, true)) {
61 return ['templates' => []];
62 }
63
64 $container = ContainerWrapper::getInstance();
65
66 /** @var Registry $registry */
67 $registry = $container->get(Registry::class);
68
69 $templates = $registry->getTemplates($category !== '' ? $category : null);
70 $templates = array_filter($templates, function (AutomationTemplate $template): bool {
71 return in_array($template->getCategory(), self::CATEGORIES, true);
72 });
73
74 return [
75 'templates' => array_values(array_map([self::class, 'formatTemplate'], $templates)),
76 ];
77 }
78
79 public static function canReadTemplates(): bool {
80 return WPFunctions::get()->currentUserCan(AccessControl::PERMISSION_MANAGE_AUTOMATIONS);
81 }
82
83 private static function formatTemplate(AutomationTemplate $template): array {
84 return [
85 'slug' => $template->getSlug(),
86 'name' => $template->getName(),
87 'description' => $template->getDescription(),
88 'category' => $template->getCategory(),
89 'type' => $template->getType(),
90 'required_capabilities' => $template->getRequiredCapabilities(),
91 'is_recommended' => $template->isRecommended(),
92 ];
93 }
94
95 private static function getInputSchema(): array {
96 return [
97 'type' => 'object',
98 'properties' => [
99 'category' => [
100 'type' => 'string',
101 'enum' => self::CATEGORIES,
102 ],
103 ],
104 'additionalProperties' => false,
105 ];
106 }
107
108 private static function getOutputSchema(): array {
109 return [
110 'type' => 'object',
111 'properties' => [
112 'templates' => [
113 'type' => 'array',
114 'items' => [
115 'type' => 'object',
116 'properties' => [
117 'slug' => ['type' => 'string'],
118 'name' => ['type' => 'string'],
119 'description' => ['type' => 'string'],
120 'category' => [
121 'type' => 'string',
122 'enum' => self::CATEGORIES,
123 ],
124 'type' => [
125 'type' => 'string',
126 'enum' => [
127 AutomationTemplate::TYPE_DEFAULT,
128 AutomationTemplate::TYPE_PREMIUM,
129 AutomationTemplate::TYPE_COMING_SOON,
130 ],
131 ],
132 'required_capabilities' => [
133 'type' => 'object',
134 'additionalProperties' => [
135 'type' => ['boolean', 'integer'],
136 ],
137 ],
138 'is_recommended' => ['type' => 'boolean'],
139 ],
140 'required' => ['slug', 'name', 'description', 'category', 'type', 'required_capabilities', 'is_recommended'],
141 'additionalProperties' => false,
142 ],
143 ],
144 ],
145 'required' => ['templates'],
146 'additionalProperties' => false,
147 ];
148 }
149 }
150