PluginProbe
MailerLite – WooCommerce integration / 3.1.18
MailerLite – WooCommerce integration v3.1.18
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.18, at admin/WooMailerLiteAdmin.php

234 lines 8.6 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'], null, 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-cdn', 'https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js', [], null, 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-cdn', 'woo-mailerlite-select2'], null, 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-cdn', '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 addModuleTypeScript($tag, $handle, $src)
145 {
146 if ('woo-mailerlite-admin' === $handle) {
147 // modify the <script> tag to include type="module"
148 $tag = '<script type="module" src="' . esc_url($src) . '"></script>';
149 }
150
151 return $tag;
152 }
153
154 public function ignoreProductBlock()
155 {
156 echo '<div class="inline-edit-group">';
157 woocommerce_wp_checkbox(array(
158 'id' => 'ml_ignore_product',
159 'label' => __('MailerLite e-commerce automations', 'woo-mailerlite'),
160 'description' => __('Ignore product', 'woo-mailerlite'),
161 'value' => '',
162 'desc_tip' => false
163 ));
164 echo '</div>';
165 }
166
167 public function populateIgnoreProductBlock($column, $post_id)
168 {
169
170 switch ($column) {
171 case 'name' :
172 $ignoredProducts = WooMailerLiteOptions::get('ignored_products', []);
173 ?>
174 <div class="hidden ml_ignore_product_inline" id="ml_ignore_product_inline_<?=intval($post_id) ?>">
175 <div class="_ml_ignore_product"><?php echo array_key_exists($post_id, $ignoredProducts) ? 'yes' : 'no' ?></div>
176 </div>
177 <?php
178
179 break;
180 }
181 }
182
183 public function abss()
184 {
185 global $post;
186 ?>
187 <div id="woo-ml-product-data" class="panel woocommerce_options_panel">
188 <?php
189
190 $ignoredProducts = WooMailerLiteOptions::get('ignored_products', []);
191
192 woocommerce_wp_checkbox(array(
193 'id' => 'ml_ignore_product',
194 'label' => __('Ignore Product', 'woo-mailerlite'),
195 'description' => __('Select if you do not wish to trigger any e-commerce automations for this product',
196 'woo-mailerlite'),
197 'value' => array_key_exists($post->ID, $ignoredProducts) ? 'yes' : 'no',
198 'desc_tip' => true,
199 ));
200 ?>
201 </div>
202 <?php
203 }
204
205 public function woo_ml_product_data_tab($product_data_tabs)
206 {
207 $product_data_tabs['woo-ml'] = array(
208 'label' => __('MailerLite', 'woo-mailerlite'),
209 'target' => 'woo-ml-product-data',
210 'class' => 'woo_mailerlite_product_tab',
211 'priority' => 99
212 );
213
214 return $product_data_tabs;
215 }
216
217 public function handleCustomProductQuery( $query, $query_vars ) {
218
219 if ( isset( $query_vars['metaQuery'] ) ) {
220 $query['meta_query'][] = $query_vars['metaQuery'];
221 }
222
223 return $query;
224 }
225
226 public function addSettingsOptionInPluginList($links)
227 {
228 $settings_url = admin_url('admin.php?page=mailerlite');
229 $settings_link = '<a href="' . esc_url($settings_url) . '">Settings</a>';
230 array_unshift($links, $settings_link);
231 return $links;
232 }
233 }
234