PluginProbe
MailerLite – WooCommerce integration / 1.8.7
MailerLite – WooCommerce integration v1.8.7
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 / woo-mailerlite.php

woo-mailerlite.php in MailerLite – WooCommerce integration 1.8.7, at woo-mailerlite.php

413 lines 12.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 use MailerLite\Includes\Classes\Process\CheckoutProcess;
4 use MailerLite\Includes\Classes\Settings\ShopSettings;
5
6 /**
7 * Plugin Name: MailerLite - WooCommerce integration
8 * Plugin URI: https://wordpress.org/plugins/woo-mailerlite/
9 * Description: Official MailerLite integration for WooCommerce. Track sales and campaign ROI, import products details, automate emails based on purchases and seamlessly add your customers to your email marketing lists via WooCommerce's checkout process.
10 * Version: 1.8.7
11 * Author: MailerLite
12 * Author URI: https://mailerlite.com
13 * Text Domain: woo-mailerlite
14 * WC tested up to: 7.4.1
15 * WC requires at least: 3.0.0
16 */
17
18 // Exit if accessed directly
19 if (!defined('ABSPATH')) {
20 exit;
21 }
22
23 // Plugin path
24 define('WOO_MAILERLITE_DIR', plugin_dir_path(__FILE__));
25
26 if (!class_exists('Woo_Mailerlite')) {
27
28 /**
29 * Main Woo_Mailerlite class
30 *
31 * @since 1.0.0
32 */
33 class Woo_Mailerlite
34 {
35
36 /**
37 * @var Woo_Mailerlite $instance The one true Woo_Mailerlite
38 * @since 1.0.0
39 */
40 private static $instance;
41
42 /**
43 * Get active instance
44 *
45 * @access public
46 * @return object self::$instance The one true Woo_Mailerlite
47 * @since 1.0.0
48 */
49 public static function instance()
50 {
51 if (!self::$instance) {
52 self::$instance = new Woo_Mailerlite();
53 self::$instance->setup_constants();
54 self::$instance->includes();
55 self::$instance->hooks();
56 self::$instance->load_textdomain();
57 }
58
59 return self::$instance;
60 }
61
62
63 /**
64 * Setup plugin constants
65 *
66 * @access private
67 * @return void
68 * @since 1.0.0
69 */
70 private function setup_constants()
71 {
72 // Plugin name
73 define('WOO_MAILERLITE_NAME', 'MailerLite - WooCommerce integration');
74
75 // Plugin version
76 define('WOO_MAILERLITE_VER', '1.8.7');
77
78 // Plugin URL
79 define('WOO_MAILERLITE_URL', plugin_dir_url(__FILE__));
80
81 // Plugin prefix
82 define('WOO_MAILERLITE_PREFIX', 'woo_ml_');
83
84 // API Key
85 if (!defined('MAILERLITE_WP_API_KEY')) {
86 $option_value = get_option('woo_ml_key');
87
88 $api_key = $option_value ?: '';
89 define('MAILERLITE_WP_API_KEY', $api_key);
90
91 }
92 // Other
93 define('WOO_MAILERLITE_MIN_PHP_VERSION', '7.2.5');
94 }
95
96 /**
97 * Include necessary files
98 *
99 * @access private
100 * @return void
101 * @since 1.0.0
102 */
103 private function includes()
104 {
105
106 // Get out if WooCommerce is not active
107 if (!class_exists('WC_Integration')) {
108 return;
109 }
110
111 if (!$this->check_server_requirements()) {
112 return;
113 }
114
115 $this->check_plugin_version();
116
117 // Classes
118 initClasses();
119 // Dependencies
120 require_once WOO_MAILERLITE_DIR . 'includes/shared/api/class.woo-mailerlite-api-type.php';
121 require_once WOO_MAILERLITE_DIR . 'includes/shared/api/class.woo-mailerlite-api-client.php';
122 require_once WOO_MAILERLITE_DIR . 'includes/shared/api/class.woo-mailerlite-platform-api.php';
123 require_once WOO_MAILERLITE_DIR . 'includes/shared/api/class.woo-mailerlite-classic-api.php';
124 require_once WOO_MAILERLITE_DIR . 'includes/shared/api/class.woo-mailerlite-api.php';
125 require_once WOO_MAILERLITE_DIR . 'includes/shared/mailerlite-wp-functions.php';
126
127 // Core functions and hooks
128 require_once WOO_MAILERLITE_DIR . 'includes/functions.php';
129 require_once WOO_MAILERLITE_DIR . 'includes/integration-setup-functions.php';
130 require_once WOO_MAILERLITE_DIR . 'includes/hooks.php';
131 require_once WOO_MAILERLITE_DIR . 'includes/scripts.php';
132
133 // Admin functions and hooks
134 if (is_admin()) {
135 require_once WOO_MAILERLITE_DIR . 'includes/admin/hooks.php';
136 require_once WOO_MAILERLITE_DIR . 'includes/admin/ajax.php';
137 require_once WOO_MAILERLITE_DIR . 'includes/admin/meta-boxes.php';
138 }
139
140 // Include our integration class.
141 include_once WOO_MAILERLITE_DIR . 'includes/class.woo-mailerlite-integration.php';
142
143 // Register the integration.
144 add_filter('woocommerce_integrations', array($this, 'add_integration'));
145 }
146
147 /**
148 * Fire some hooks
149 */
150 private function hooks()
151 {
152 add_filter('plugin_action_links', array($this, 'plugin_action_links'), 10, 2);
153
154 $auto_update = get_option('woo_ml_auto_update');
155
156 if ($auto_update != false) {
157 add_filter('auto_update_plugin', array($this, 'plugin_update'), PHP_INT_MAX, 2);
158 }
159 }
160
161 /**
162 * Add plugin action links
163 *
164 * @param $links
165 * @param $file
166 *
167 * @return mixed
168 */
169 public function plugin_action_links($links, $file)
170 {
171
172 if ($file !== 'woo-mailerlite/woo-mailerlite.php') {
173 return $links;
174 }
175
176 if (!$this->check_server_requirements()) {
177 $info = '<span style="color: #ff0000; font-weight: bold;">' . sprintf(esc_html__('PHP Version %1$s or newer required',
178 'woo-mailerlaite'), WOO_MAILERLITE_MIN_PHP_VERSION) . '</span>';
179 array_unshift($links, $info);
180
181 return $links;
182 }
183
184 if (class_exists('WC_Integration')) {
185 $settings_link = '<a href="' . admin_url('admin.php?page=wc-settings&tab=integration&section=mailerlite') . '">' . esc_html__('Settings',
186 'woo-mailerlite') . '</a>';
187 array_unshift($links, $settings_link);
188 }
189
190 return $links;
191 }
192
193 /**
194 * Enable always update for MailerLite plugin
195 *
196 * @param $update
197 * @param $item
198 *
199 * @return bool
200 */
201 public function plugin_update($update, $item)
202 {
203
204 $plugins = [
205 'woo-mailerlite'
206 ];
207
208 if (isset($item->slug)) {
209
210 if (in_array($item->slug, $plugins)) {
211 // Always update plugins
212 return true;
213 }
214 }
215
216 return $update;
217 }
218
219 /**
220 * Adding integration to WooCommerce.
221 *
222 * @param $integrations
223 *
224 * @return array
225 */
226 public function add_integration($integrations)
227 {
228
229 if (is_admin()) {
230 $integrations[] = 'Woo_Mailerlite_Integration';
231 }
232
233 return $integrations;
234 }
235
236 /**
237 * Internationalization
238 *
239 * @access public
240 * @return void
241 * @since 1.0.0
242 */
243 public function load_textdomain()
244 {
245 // Set filter for language directory
246 $lang_dir = WOO_MAILERLITE_DIR . '/languages/';
247 $lang_dir = apply_filters('woo_mailerlite_languages_directory', $lang_dir);
248
249 // Traditional WordPress plugin locale filter
250 $locale = apply_filters('plugin_locale', get_locale(), 'woo-mailerlite');
251 $mofile = sprintf('%1$s-%2$s.mo', 'woo-mailerlite', $locale);
252
253 // Setup paths to current locale file
254 $mofile_local = $lang_dir . $mofile;
255 $mofile_global = WP_LANG_DIR . '/woo-mailerlite/' . $mofile;
256
257 if (file_exists($mofile_global)) {
258 // Look in global /wp-content/languages/woo-mailerlite/ folder
259 load_textdomain('woo-mailerlite', $mofile_global);
260 } elseif (file_exists($mofile_local)) {
261 // Look in local /wp-content/plugins/woo-mailerlite/languages/ folder
262 load_textdomain('woo-mailerlite', $mofile_local);
263 } else {
264 // Load the default language files
265 load_plugin_textdomain('woo-mailerlite', false, $lang_dir);
266 }
267 }
268
269 /**
270 * Check web server requirements
271 *
272 * @return bool
273 */
274 private function check_server_requirements()
275 {
276
277 if (version_compare(phpversion(), WOO_MAILERLITE_MIN_PHP_VERSION, '<')) {
278 return false;
279 }
280
281 return true;
282 }
283
284 /**
285 * Check plugin is updated
286 *
287 * @return bool
288 */
289
290 private function check_plugin_version()
291 {
292
293 if (!is_admin()) {
294 return false;
295 }
296
297 return true;
298 }
299 }
300 } // End if class_exists check
301
302 /**
303 * The main function responsible for returning the one true Woo_Mailerlite
304 * instance to functions everywhere
305 * @return \Woo_Mailerlite The one true Woo_Mailerlite
306 *
307 * @since 1.0.0
308 */
309 function woo_ml_load()
310 {
311 return Woo_Mailerlite::instance();
312 }
313
314 add_action('plugins_loaded', 'woo_ml_load');
315
316 function woo_ml_deactivate()
317 {
318 require_once WOO_MAILERLITE_DIR . 'includes/functions.php';
319 ShopSettings::getInstance()->toggleShopConnection(0);
320 }
321
322 register_deactivation_hook(__FILE__, 'woo_ml_deactivate');
323
324 function woo_ml_activate()
325 {
326 require_once WOO_MAILERLITE_DIR . 'includes/functions.php';
327 initClasses();
328 ShopSettings::getInstance()->toggleShopConnection(1);
329 }
330
331 register_activation_hook(__FILE__, 'woo_ml_activate');
332
333 function woo_mlb_reload_checkout()
334 {
335 require_once WOO_MAILERLITE_DIR . 'includes/functions.php';
336 initClasses();
337 CheckoutProcess::getInstance()->reloadCheckout();
338 }
339
340 add_action('init', 'woo_mlb_reload_checkout');
341
342 function woo_ml_deactivate_woo_ml_plugin($deactivate = false)
343 {
344 if ($deactivate) {
345 woo_mlb_reload_checkout();
346
347 require_once(ABSPATH . 'wp-admin/includes/plugin.php');
348 deactivate_plugins(plugin_basename(__FILE__), true);
349 }
350 }
351
352 add_action('woocommerce_blocks_loaded', function () {
353
354 if (class_exists('\Automattic\WooCommerce\Blocks\Package') &&
355 interface_exists('\Automattic\WooCommerce\Blocks\Integrations\IntegrationInterface')) {
356
357 require_once __DIR__ . '/includes/woo-mailerlite-blocks-integration.php';
358
359 add_action(
360 'woocommerce_blocks_checkout_block_registration',
361 function ($integration_registry) {
362 $integration_registry->register(new WooMlBlock_Integration());
363 }
364 );
365
366 add_filter(
367 '__experimental_woocommerce_blocks_add_data_attributes_to_block',
368 function ($allowed_blocks) {
369 $allowed_blocks[] = 'mailerlite-block/woo-mailerlite';
370
371 return $allowed_blocks;
372 },
373 10,
374 1
375 );
376 }
377 });
378
379 function register_WooML_block_category($categories)
380 {
381
382 return array_merge(
383 $categories,
384 [
385 [
386 'slug' => 'woo-mailerlite',
387 'title' => __('MailerLite - WooCommerce integration block', 'woo-mailerlite'),
388 ],
389 ]
390 );
391 }
392
393 function initClasses()
394 {
395 // Classes
396 require_once WOO_MAILERLITE_DIR . 'includes/classes/Singleton.php';
397 require_once WOO_MAILERLITE_DIR . 'includes/classes/data/TrackingData.php';
398 require_once WOO_MAILERLITE_DIR . 'includes/classes/settings/MailerLiteSettings.php';
399 require_once WOO_MAILERLITE_DIR . 'includes/classes/settings/ShopSettings.php';
400 require_once WOO_MAILERLITE_DIR . 'includes/classes/settings/ApiSettings.php';
401 require_once WOO_MAILERLITE_DIR . 'includes/classes/settings/SynchronizeSettings.php';
402 require_once WOO_MAILERLITE_DIR . 'includes/classes/settings/ResetSettings.php';
403 require_once WOO_MAILERLITE_DIR . 'includes/classes/process/OrderProcess.php';
404 require_once WOO_MAILERLITE_DIR . 'includes/classes/process/ProductProcess.php';
405 require_once WOO_MAILERLITE_DIR . 'includes/classes/process/CartProcess.php';
406 require_once WOO_MAILERLITE_DIR . 'includes/classes/process/CheckoutProcess.php';
407 require_once WOO_MAILERLITE_DIR . 'includes/classes/process/OrderSyncProcess.php';
408
409
410 }
411
412 add_action('block_categories_all', 'register_WooML_block_category', 10, 2);
413