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 / Subscribers / ImportExport / ImportExportFactory.php
mailpoet / lib / Subscribers / ImportExport Last commit date
Export 2 months ago Import 2 weeks ago PersonalDataExporters 2 months ago ImportExportFactory.php 2 months ago ImportExportRepository.php 2 months ago index.php 3 years ago
ImportExportFactory.php
196 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Subscribers\ImportExport;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\CustomFields\CustomFieldsRepository;
9 use MailPoet\DI\ContainerWrapper;
10 use MailPoet\Entities\SegmentEntity;
11 use MailPoet\Entities\TagEntity;
12 use MailPoet\Segments\SegmentsSimpleListRepository;
13 use MailPoet\Tags\TagRepository;
14 use MailPoet\Util\Helpers;
15
16 class ImportExportFactory {
17 const IMPORT_ACTION = 'import';
18 const EXPORT_ACTION = 'export';
19
20 /** @var string|null */
21 public $action;
22
23 /** @var SegmentsSimpleListRepository */
24 private $segmentsListRepository;
25
26 /** @var CustomFieldsRepository */
27 private $customFieldsRepository;
28
29 /** @var TagRepository */
30 private $tagRepository;
31
32 public function __construct(
33 $action = null
34 ) {
35 $this->action = $action;
36 $this->segmentsListRepository = ContainerWrapper::getInstance()->get(SegmentsSimpleListRepository::class);
37 $this->customFieldsRepository = ContainerWrapper::getInstance()->get(CustomFieldsRepository::class);
38 $this->tagRepository = ContainerWrapper::getInstance()->get(TagRepository::class);
39 }
40
41 public function getSegments() {
42 if ($this->action === self::IMPORT_ACTION) {
43 $segments = $this->segmentsListRepository->getListWithSubscribedSubscribersCounts([SegmentEntity::TYPE_DEFAULT]);
44 } else {
45 $segments = $this->segmentsListRepository->getListWithAssociatedSubscribersCounts();
46 $segments = $this->segmentsListRepository->addVirtualSubscribersWithoutListSegment($segments);
47 $segments = array_values(array_filter($segments, function($segment) {
48 return $segment['subscribers'] > 0;
49 }));
50 }
51
52 return array_map(function($segment) {
53 return [
54 'id' => $segment['id'],
55 'name' => esc_attr($segment['name']),
56 'count' => $segment['subscribers'],
57 ];
58 }, $segments);
59 }
60
61 public function getSubscriberFields() {
62 $fields = [
63 'email' => __('Email', 'mailpoet'),
64 'first_name' => __('First name', 'mailpoet'),
65 'last_name' => __('Last name', 'mailpoet'),
66 'subscribed_ip' => __('Subscription IP', 'mailpoet'),
67 'created_at' => __('Subscription time', 'mailpoet'),
68 'confirmed_at' => __('Confirmation time', 'mailpoet'),
69 'confirmed_ip' => __('Confirmation IP', 'mailpoet'),
70 ];
71 if ($this->action === 'export') {
72 $fields = array_merge(
73 $fields,
74 [
75 'last_subscribed_at' => __('Last subscribed on', 'mailpoet'),
76 'list_status' => _x('List status', 'Subscription status', 'mailpoet'),
77 'global_status' => _x('Global status', 'Subscription status', 'mailpoet'),
78 ]
79 );
80 }
81 return $fields;
82 }
83
84 public function formatSubscriberFields($subscriberFields) {
85 return array_map(function($fieldId, $fieldName) {
86 return [
87 'id' => $fieldId,
88 'name' => $fieldName,
89 'text' => $fieldName, // Required for select2 default functionality
90 'type' => in_array($fieldId, ['confirmed_at', 'created_at', 'last_subscribed_at'], true) ? 'date' : null,
91 'custom' => false,
92 ];
93 }, array_keys($subscriberFields), $subscriberFields);
94 }
95
96 public function getSubscriberCustomFields() {
97 return $this->customFieldsRepository->findAllAsArray();
98 }
99
100 public function formatSubscriberCustomFields($subscriberCustomFields) {
101 return array_map(function($field) {
102 return [
103 'id' => $field['id'],
104 'name' => $field['name'],
105 'text' => $field['name'], // Required for select2 default functionality
106 'type' => $field['type'],
107 'params' => unserialize($field['params']),
108 'custom' => true,
109 ];
110 }, $subscriberCustomFields);
111 }
112
113 public function formatFieldsForSelect2(
114 $subscriberFields,
115 $subscriberCustomFields
116 ) {
117 $actions = ($this->action === 'import') ?
118 [
119 [
120 'id' => 'ignore',
121 'name' => __('Ignore field...', 'mailpoet'),
122 'text' => __('Ignore field...', 'mailpoet'), // Required for select2 default functionality
123 ],
124 [
125 'id' => 'create',
126 'name' => __('Create new field...', 'mailpoet'),
127 'text' => __('Create new field...', 'mailpoet'), // Required for select2 default functionality
128 ],
129 ] :
130 [
131 [
132 'id' => 'select',
133 'name' => __('Select all...', 'mailpoet'),
134 'text' => __('Select all...', 'mailpoet'), // Required for select2 default functionality
135 ],
136 [
137 'id' => 'deselect',
138 'name' => __('Deselect all...', 'mailpoet'),
139 'text' => __('Deselect all...', 'mailpoet'), // Required for select2 default functionality
140 ],
141 ];
142 $select2Fields = [
143 [
144 'name' => __('Actions', 'mailpoet'),
145 'text' => __('Actions', 'mailpoet'), // Required for select2 default functionality
146 'children' => $actions,
147 ],
148 [
149 'name' => __('System fields', 'mailpoet'),
150 'text' => __('System fields', 'mailpoet'), // Required for select2 default functionality
151 'children' => $this->formatSubscriberFields($subscriberFields),
152 ],
153 ];
154 if ($subscriberCustomFields) {
155 array_push($select2Fields, [
156 'name' => __('User fields', 'mailpoet'),
157 'text' => __('User fields', 'mailpoet'), // Required for select2 default functionality
158 'children' => $this->formatSubscriberCustomFields(
159 $subscriberCustomFields
160 ),
161 ]);
162 }
163 return $select2Fields;
164 }
165
166 public function bootstrap() {
167 $subscriberFields = $this->getSubscriberFields();
168 $subscriberCustomFields = $this->getSubscriberCustomFields();
169 $data['segments'] = json_encode($this->getSegments());
170 $data['subscriberFieldsSelect2'] = json_encode(
171 $this->formatFieldsForSelect2(
172 $subscriberFields,
173 $subscriberCustomFields
174 )
175 );
176 if ($this->action === 'import') {
177 $data['subscriberFields'] = json_encode(
178 array_merge(
179 $this->formatSubscriberFields($subscriberFields),
180 $this->formatSubscriberCustomFields($subscriberCustomFields)
181 )
182 );
183 $data['maxPostSizeBytes'] = Helpers::getMaxPostSize('bytes');
184 $data['maxPostSize'] = Helpers::getMaxPostSize();
185 $data['tags'] = array_map(function (TagEntity $tag): array {
186 return [
187 'id' => $tag->getId(),
188 'name' => $tag->getName(),
189 ];
190 }, $this->tagRepository->findAll());
191 }
192 $data['zipExtensionLoaded'] = extension_loaded('zip');
193 return $data;
194 }
195 }
196