PluginProbe
MailerLite – WooCommerce integration / 3.1.26
MailerLite – WooCommerce integration v3.1.26
3.1.27 3.1.25 3.1.26 3.1.24 3.1.23 3.1.22 3.1.21 3.1.20 3.1.19 3.1.18 3.1.17 3.1.16 3.1.15 1.8.7 1.8.8 2.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 All 148 releases
woo-mailerlite / admin / WooMailerLiteAdmin.php

WooMailerLiteAdmin.php in MailerLite – WooCommerce integration 3.1.26, at admin/WooMailerLiteAdmin.php

250 lines 9.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class WooMailerLiteAdmin
4 {
5 public static $instance;
6
7 public static function instance()
8 {
9 if (!empty(static::$instance)) {
10 return static::$instance;
11 }
12 static::$instance = new self();
13 return static::$instance;
14 }
15
16
17 public function addPluginAdminMenu()
18 {
19 add_submenu_page('woocommerce', 'MailerLite', 'MailerLite', 'manage_options', 'mailerlite',
20 [$this, 'wooMailerLiteSettingsPageCallback']);
21 }
22
23 public function enqueueScripts($hook)
24 {
25 if ($hook === 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] === 'product') {
26 wp_enqueue_script('woo-mailerlite-quick-edit', plugin_dir_url(__FILE__) . '../admin/assets/js/ml-quick-edit.js', ['jquery', 'inline-edit-post'], WOO_MAILERLITE_VERSION, true);
27 return;
28 }
29
30 if ($hook !== 'woocommerce_page_mailerlite') {
31 return;
32 }
33
34 wp_dequeue_script('select2');
35 wp_deregister_script('select2');
36
37 wp_enqueue_script('woo-mailerlite-vue', plugin_dir_url(__FILE__) . 'assets/js/lib/vue.global.prod.js', [], WOO_MAILERLITE_VERSION, true);
38 wp_localize_script('woo-mailerlite-admin', 'woo_mailerlite_admin_data', array(
39 'ajax_url' => admin_url('admin-ajax.php'),
40 'language' => get_locale()
41 ));
42
43 wp_enqueue_script('woo-mailerlite-select2', plugin_dir_url(__FILE__) . 'assets/js/lib/select2.min.js', ['jquery'], WOO_MAILERLITE_VERSION, true);
44 wp_enqueue_script('woo-mailerlite-admin', plugin_dir_url(__FILE__) . '../admin/assets/js/ml-app.js', ['jquery', 'woo-mailerlite-vue', 'woo-mailerlite-select2'], WOO_MAILERLITE_VERSION, true);
45
46 }
47
48 public function enqueueStyles($hook) {
49 if ($hook !== 'woocommerce_page_mailerlite') {
50 return;
51 }
52
53 wp_dequeue_style('select2');
54 wp_deregister_style('select2');
55
56 wp_enqueue_style('woo-mailerlite-admin-css', plugin_dir_url( __FILE__ ) . '../admin/assets/css/admin.css', false, WOO_MAILERLITE_VERSION);
57 wp_enqueue_style('woo-mailerlite-select2-css', plugin_dir_url( __FILE__ ) . 'assets/css/lib/select2.min.css', false, WOO_MAILERLITE_VERSION);
58 wp_enqueue_style('woo-mailerlite-select2-theme', plugin_dir_url( __FILE__ ) . '../public/css/mailerlite-select2.css', ['woo-mailerlite-select2-css'], WOO_MAILERLITE_VERSION);
59 }
60
61 public function removeConflictingSelect2($hook)
62 {
63 if ($hook !== 'woocommerce_page_mailerlite') {
64 return;
65 }
66
67 global $wp_scripts, $wp_styles;
68
69 $scriptPatterns = ['select2', 'selectWoo', 'wc-enhanced-select'];
70
71 foreach ($wp_scripts->registered as $handle => $script) {
72 if ($handle === 'woo-mailerlite-select2') {
73 continue;
74 }
75 foreach ($scriptPatterns as $pattern) {
76 if (strpos($script->src, $pattern) !== false) {
77 wp_dequeue_script($handle);
78 wp_deregister_script($handle);
79 break;
80 }
81 }
82 }
83
84 $stylePatterns = ['select2', 'selectWoo'];
85
86 foreach ($wp_styles->registered as $handle => $style) {
87 if ($handle === 'woo-mailerlite-select2-css' || $handle === 'woo-mailerlite-select2-theme') {
88 continue;
89 }
90 foreach ($stylePatterns as $pattern) {
91 if (strpos($style->src, $pattern) !== false) {
92 wp_dequeue_style($handle);
93 wp_deregister_style($handle);
94 break;
95 }
96 }
97 }
98 }
99
100 public function wooMailerLiteSettingsPageCallback()
101 {
102 $falseApi = false;
103 // if (!WooMailerLiteCache::get('valid_api')) {
104 // $response = WooMailerLiteApi::client()->ping();
105 // if ($response->status === 401) {
106 // $falseApi = true;
107 //// WooMailerLiteOptions::deleteAll();
108 // } else {
109 // WooMailerLiteCache::set('valid_api', true, 86400);
110 // }
111 // }
112 $untrackedResources = WooMailerLiteProduct::getUntrackedProductsCount() + WooMailerLiteCategory::getUntrackedCategoriesCount() + WooMailerLiteCustomer::getUntrackedCustomersCount();
113
114 wp_localize_script('woo-mailerlite-vue', 'woo_mailerlite_admin_data', [
115 'ajaxUrl' => admin_url('admin-ajax.php'),
116 'productsUrl' => esc_url(admin_url('edit.php?post_type=product')),
117 'currentStep' => WooMailerLiteOptions::get('wizardStep', 0),
118 'account' => [
119 'isConnected' => false,
120 'accountName' => WooMailerLiteOptions::get('accountName', ''),
121 'platform' => WooMailerLiteApi::getApiType() ?? 1,
122 ],
123 'selectedGroup' => WooMailerLiteOptions::get('group', []),
124 'woo_mailerlite_admin_nonce' => wp_create_nonce( 'woo_mailerlite_admin' ),
125 'ignoredProducts' => (array)WooMailerLiteOptions::get('ignored_products', []),
126 'sync' => [
127 'lastCustomerSync' => 0,
128 'newMLSync' => true,
129 'syncInProgress' => WooMailerLiteCache::get('manual_sync', false),
130 'totalUntrackedResources' => $untrackedResources,
131 'totalTrackedResources' => 0
132 ],
133 'settings' => WooMailerLiteOptions::get('settings', []),
134 'syncFields' => WooMailerLiteOptions::get('syncFields'),
135 // Need better solution for async sync, adding true for now and force sync (works)
136 'asyncSync' => WooMailerLiteCache::get('scheduled_jobs') && $untrackedResources,
137 'falseApi' => $falseApi,
138 'debugMode' => WooMailerLiteOptions::get('debugMode')
139 ]);
140
141 require_once __DIR__ . '/../views/mailerlite-app.php';
142 }
143
144 public function migrateProductVariantsOrIgnore()
145 {
146 if (WooMailerLiteOptions::get('productVariantsMigrated', false)) {
147 return;
148 }
149
150 if (!WooMailerLiteOptions::get('apiKey') || !WooMailerLiteOptions::get('shopId')) {
151 return;
152 }
153
154 WooMailerLiteOptions::update('productVariantsMigrated', true);
155 WooMailerLiteProductVariantsMigrationJob::dispatch();
156
157 WooMailerLiteLog()->info('variants:migration:started');
158 }
159
160 public function addModuleTypeScript($tag, $handle, $src)
161 {
162 if ('woo-mailerlite-admin' === $handle) {
163 // modify the <script> tag to include type="module"
164 $tag = '<script type="module" src="' . esc_url($src) . '"></script>';
165 }
166
167 return $tag;
168 }
169
170 public function ignoreProductBlock()
171 {
172 echo '<div class="inline-edit-group">';
173 woocommerce_wp_checkbox(array(
174 'id' => 'ml_ignore_product',
175 'label' => __('MailerLite e-commerce automations', 'woo-mailerlite'),
176 'description' => __('Ignore product', 'woo-mailerlite'),
177 'value' => '',
178 'desc_tip' => false
179 ));
180 echo '</div>';
181 }
182
183 public function populateIgnoreProductBlock($column, $post_id)
184 {
185
186 switch ($column) {
187 case 'name' :
188 $ignoredProducts = WooMailerLiteOptions::get('ignored_products', []);
189 ?>
190 <div class="hidden ml_ignore_product_inline" id="ml_ignore_product_inline_<?=intval($post_id) ?>">
191 <div class="_ml_ignore_product"><?php echo array_key_exists($post_id, $ignoredProducts) ? 'yes' : 'no' ?></div>
192 </div>
193 <?php
194
195 break;
196 }
197 }
198
199 public function abss()
200 {
201 global $post;
202 ?>
203 <div id="woo-ml-product-data" class="panel woocommerce_options_panel">
204 <?php
205
206 $ignoredProducts = WooMailerLiteOptions::get('ignored_products', []);
207
208 woocommerce_wp_checkbox(array(
209 'id' => 'ml_ignore_product',
210 'label' => __('Ignore Product', 'woo-mailerlite'),
211 'description' => __('Select if you do not wish to trigger any e-commerce automations for this product',
212 'woo-mailerlite'),
213 'value' => array_key_exists($post->ID, $ignoredProducts) ? 'yes' : 'no',
214 'desc_tip' => true,
215 ));
216 ?>
217 </div>
218 <?php
219 }
220
221 public function woo_ml_product_data_tab($product_data_tabs)
222 {
223 $product_data_tabs['woo-ml'] = array(
224 'label' => __('MailerLite', 'woo-mailerlite'),
225 'target' => 'woo-ml-product-data',
226 'class' => 'woo_mailerlite_product_tab',
227 'priority' => 99
228 );
229
230 return $product_data_tabs;
231 }
232
233 public function handleCustomProductQuery( $query, $query_vars ) {
234
235 if ( isset( $query_vars['metaQuery'] ) ) {
236 $query['meta_query'][] = $query_vars['metaQuery'];
237 }
238
239 return $query;
240 }
241
242 public function addSettingsOptionInPluginList($links)
243 {
244 $settings_url = admin_url('admin.php?page=mailerlite');
245 $settings_link = '<a href="' . esc_url($settings_url) . '">Settings</a>';
246 array_unshift($links, $settings_link);
247 return $links;
248 }
249 }
250