Passed
Branch master (65d26c)
by Daniel
02:15
created
uninstall.php 1 patch
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -9,14 +9,14 @@
 block discarded – undo
9 9
 /*
10 10
 *  If uninstall was not called from WordPress, then exit
11 11
 */
12
-if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
12
+if ( ! defined('WP_UNINSTALL_PLUGIN')) {
13 13
 	exit;
14 14
 }
15 15
 
16
-define( 'ALGOWOO_DB_OPTION', '_algolia_woo_indexer' );
16
+define('ALGOWOO_DB_OPTION', '_algolia_woo_indexer');
17 17
 
18
-delete_option( ALGOWOO_DB_OPTION . '_application_id' );
19
-delete_option( ALGOWOO_DB_OPTION . '_admin_api_key' );
20
-delete_option( ALGOWOO_DB_OPTION . '_index_name' );
21
-delete_option( ALGOWOO_DB_OPTION . '_index_in_stock' );
22
-delete_option( ALGOWOO_DB_OPTION . '_automatically_send_new_products' );
18
+delete_option(ALGOWOO_DB_OPTION . '_application_id');
19
+delete_option(ALGOWOO_DB_OPTION . '_admin_api_key');
20
+delete_option(ALGOWOO_DB_OPTION . '_index_name');
21
+delete_option(ALGOWOO_DB_OPTION . '_index_in_stock');
22
+delete_option(ALGOWOO_DB_OPTION . '_automatically_send_new_products');
Please login to merge, or discard this patch.
classes/class-verify-nonces.php 1 patch
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -11,11 +11,11 @@  discard block
 block discarded – undo
11 11
 /**
12 12
  * Abort if this file is called directly
13 13
  */
14
-if ( ! defined( 'ABSPATH' ) ) {
14
+if ( ! defined('ABSPATH')) {
15 15
 	exit;
16 16
 }
17 17
 
18
-if ( ! class_exists( 'Algolia_Verify_Nonces' ) ) {
18
+if ( ! class_exists('Algolia_Verify_Nonces')) {
19 19
 	/**
20 20
 	 * Verify submitted nonces
21 21
 	 */
@@ -29,12 +29,12 @@  discard block
 block discarded – undo
29 29
 			/**
30 30
 			 * Filter incoming nonces and values
31 31
 			 */
32
-			$settings_nonce = filter_input( INPUT_POST, 'algolia_woo_indexer_admin_api_nonce_name', FILTER_DEFAULT );
32
+			$settings_nonce = filter_input(INPUT_POST, 'algolia_woo_indexer_admin_api_nonce_name', FILTER_DEFAULT);
33 33
 
34 34
 			/**
35 35
 			 * Return if if no nonce has been set for either of the two forms
36 36
 			 */
37
-			if ( ! isset( $settings_nonce ) ) {
37
+			if ( ! isset($settings_nonce)) {
38 38
 				return;
39 39
 			}
40 40
 
@@ -49,22 +49,22 @@  discard block
 block discarded – undo
49 49
 			/**
50 50
 			 * Filter incoming nonces and values
51 51
 			 */
52
-			$send_products_nonce      = filter_input( INPUT_POST, 'send_products_to_algolia_nonce_name', FILTER_DEFAULT );
53
-			$send_products_to_algolia = filter_input( INPUT_POST, 'send_products_to_algolia', FILTER_DEFAULT );
52
+			$send_products_nonce      = filter_input(INPUT_POST, 'send_products_to_algolia_nonce_name', FILTER_DEFAULT);
53
+			$send_products_to_algolia = filter_input(INPUT_POST, 'send_products_to_algolia', FILTER_DEFAULT);
54 54
 
55 55
 			/**
56 56
 			 * Display error and die if nonce is not verified and does not pass security check
57 57
 			 * Also check if the hidden value field send_products_to_algolia is set
58 58
 			 */
59 59
 
60
-			if ( ! wp_verify_nonce( $send_products_nonce, 'send_products_to_algolia_nonce_action' ) && isset( $send_products_to_algolia ) ) {
61
-				wp_die( esc_html__( 'Action is not allowed.', 'algolia-woo-indexer' ), esc_html__( 'Error!', 'algolia-woo-indexer' ) );
60
+			if ( ! wp_verify_nonce($send_products_nonce, 'send_products_to_algolia_nonce_action') && isset($send_products_to_algolia)) {
61
+				wp_die(esc_html__('Action is not allowed.', 'algolia-woo-indexer'), esc_html__('Error!', 'algolia-woo-indexer'));
62 62
 			}
63 63
 
64 64
 			/**
65 65
 			 * If we have verified the send_products_nonce and the send_products hidden field is set, return true
66 66
 			 */
67
-			if ( wp_verify_nonce( $send_products_nonce, 'send_products_to_algolia_nonce_action' ) && isset( $send_products_to_algolia ) ) {
67
+			if (wp_verify_nonce($send_products_nonce, 'send_products_to_algolia_nonce_action') && isset($send_products_to_algolia)) {
68 68
 				return true;
69 69
 			}
70 70
 		}
Please login to merge, or discard this patch.
classes/class-check-requirements.php 2 patches
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -17,11 +17,11 @@  discard block
 block discarded – undo
17 17
 /**
18 18
  * Abort if this file is called directly
19 19
  */
20
-if (! defined('ABSPATH')) {
20
+if ( ! defined('ABSPATH')) {
21 21
     exit;
22 22
 }
23 23
 
24
-if (! class_exists('Algolia_Check_Requirements')) {
24
+if ( ! class_exists('Algolia_Check_Requirements')) {
25 25
     /**
26 26
      * Check requirements for Algolia plugin
27 27
      */
@@ -49,12 +49,12 @@  discard block
 block discarded – undo
49 49
 		 * 	@param string $algolia_index_name Algolia index name.
50 50
 		 * 
51 51
 		 */
52
-		public static function check_algolia_input_values($algolia_application_id, $algolia_api_key, $algolia_index_name )
52
+		public static function check_algolia_input_values($algolia_application_id, $algolia_api_key, $algolia_index_name)
53 53
 		{	
54 54
 			if (empty($algolia_application_id) || empty($algolia_api_key || empty($algolia_index_name))) {
55 55
                 add_action(
56 56
                     'admin_notices',
57
-                    function () {
57
+                    function() {
58 58
                         echo '<div class="error notice">
59 59
 							  <p>' . esc_html__('All settings need to be set for the plugin to work.', 'algolia-woo-indexer') . '</p>
60 60
 							</div>';
@@ -84,16 +84,16 @@  discard block
 block discarded – undo
84 84
          */
85 85
         public static function check_unmet_requirements()
86 86
         {
87
-            if (! extension_loaded('mbstring')) {
87
+            if ( ! extension_loaded('mbstring')) {
88 88
                 echo '<div class="error notice">
89 89
 					  <p>' . esc_html__('Algolia Woo Indexer requires the "mbstring" PHP extension to be enabled. Please contact your hosting provider.', 'algolia-woo-indexer') . '</p>
90 90
 				  </div>';
91
-            } elseif (! function_exists('mb_ereg_replace')) {
91
+            } elseif ( ! function_exists('mb_ereg_replace')) {
92 92
                 echo '<div class="error notice">
93 93
 					  <p>' . esc_html__('Algolia Woo Indexer needs "mbregex" NOT to be disabled. Please contact your hosting provider.', 'algolia-woo-indexer') . '</p>
94 94
 				  </div>';
95 95
             }
96
-            if (! extension_loaded('curl')) {
96
+            if ( ! extension_loaded('curl')) {
97 97
                 echo '<div class="error notice">
98 98
 					  <p>' . esc_html__('Algolia Woo Indexer requires the "cURL" PHP extension to be enabled. Please contact your hosting provider.', 'algolia-woo-indexer') . '</p>
99 99
 				  </div>';
Please login to merge, or discard this patch.
Indentation   +55 added lines, -55 removed lines patch added patch discarded remove patch
@@ -18,28 +18,28 @@  discard block
 block discarded – undo
18 18
  * Abort if this file is called directly
19 19
  */
20 20
 if (! defined('ABSPATH')) {
21
-    exit;
21
+	exit;
22 22
 }
23 23
 
24 24
 if (! class_exists('Algolia_Check_Requirements')) {
25
-    /**
26
-     * Check requirements for Algolia plugin
27
-     */
28
-    class Algolia_Check_Requirements
29
-    {
25
+	/**
26
+	 * Check requirements for Algolia plugin
27
+	 */
28
+	class Algolia_Check_Requirements
29
+	{
30 30
 
31
-        /**
32
-         * Check for required PHP version.
33
-         *
34
-         * @return bool
35
-         */
36
-        public static function algolia_php_version_check()
37
-        {
38
-            if (version_compare(PHP_VERSION, ALGOLIA_MIN_PHP_VERSION, '<')) {
39
-                return false;
40
-            }
41
-            return true;
42
-        }
31
+		/**
32
+		 * Check for required PHP version.
33
+		 *
34
+		 * @return bool
35
+		 */
36
+		public static function algolia_php_version_check()
37
+		{
38
+			if (version_compare(PHP_VERSION, ALGOLIA_MIN_PHP_VERSION, '<')) {
39
+				return false;
40
+			}
41
+			return true;
42
+		}
43 43
 
44 44
 		/**
45 45
 		 * Check if values are empty and display error notice if not all values have been set
@@ -52,52 +52,52 @@  discard block
 block discarded – undo
52 52
 		public static function check_algolia_input_values($algolia_application_id, $algolia_api_key, $algolia_index_name )
53 53
 		{	
54 54
 			if (empty($algolia_application_id) || empty($algolia_api_key || empty($algolia_index_name))) {
55
-                add_action(
56
-                    'admin_notices',
57
-                    function () {
58
-                        echo '<div class="error notice">
55
+				add_action(
56
+					'admin_notices',
57
+					function () {
58
+						echo '<div class="error notice">
59 59
 							  <p>' . esc_html__('All settings need to be set for the plugin to work.', 'algolia-woo-indexer') . '</p>
60 60
 							</div>';
61
-                    }
62
-                );    
63
-            }
64
-        }
61
+					}
62
+				);    
63
+			}
64
+		}
65 65
 
66
-        /**
67
-         * Check for required WordPress version.
68
-         *
69
-         * @return bool
70
-         */
71
-        public static function algolia_wp_version_check()
72
-        {
73
-            if (version_compare($GLOBALS['wp_version'], ALGOLIA_MIN_WP_VERSION, '<')) {
74
-                return false;
75
-            }
76
-            return true;
77
-        }
66
+		/**
67
+		 * Check for required WordPress version.
68
+		 *
69
+		 * @return bool
70
+		 */
71
+		public static function algolia_wp_version_check()
72
+		{
73
+			if (version_compare($GLOBALS['wp_version'], ALGOLIA_MIN_WP_VERSION, '<')) {
74
+				return false;
75
+			}
76
+			return true;
77
+		}
78 78
 
79
-        /**
80
-         * Check that we have all of the required PHP extensions installed
81
-         *
82
-         * @return void
83
-         */
84
-        public static function check_unmet_requirements()
85
-        {
86
-            if (! extension_loaded('mbstring')) {
87
-                echo '<div class="error notice">
79
+		/**
80
+		 * Check that we have all of the required PHP extensions installed
81
+		 *
82
+		 * @return void
83
+		 */
84
+		public static function check_unmet_requirements()
85
+		{
86
+			if (! extension_loaded('mbstring')) {
87
+				echo '<div class="error notice">
88 88
 					  <p>' . esc_html__('Algolia Woo Indexer requires the "mbstring" PHP extension to be enabled. Please contact your hosting provider.', 'algolia-woo-indexer') . '</p>
89 89
 				  </div>';
90
-            } elseif (! function_exists('mb_ereg_replace')) {
91
-                echo '<div class="error notice">
90
+			} elseif (! function_exists('mb_ereg_replace')) {
91
+				echo '<div class="error notice">
92 92
 					  <p>' . esc_html__('Algolia Woo Indexer needs "mbregex" NOT to be disabled. Please contact your hosting provider.', 'algolia-woo-indexer') . '</p>
93 93
 				  </div>';
94
-            }
95
-            if (! extension_loaded('curl')) {
96
-                echo '<div class="error notice">
94
+			}
95
+			if (! extension_loaded('curl')) {
96
+				echo '<div class="error notice">
97 97
 					  <p>' . esc_html__('Algolia Woo Indexer requires the "cURL" PHP extension to be enabled. Please contact your hosting provider.', 'algolia-woo-indexer') . '</p>
98 98
 				  </div>';
99
-                return;
100
-            }
101
-        }
99
+				return;
100
+			}
101
+		}
102 102
 	}
103 103
 }
Please login to merge, or discard this patch.
classes/class-algolia-woo-indexer.php 2 patches
Spacing   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -15,18 +15,18 @@  discard block
 block discarded – undo
15 15
 /**
16 16
  * Abort if this file is called directly
17 17
  */
18
-if ( ! defined( 'ABSPATH' ) ) {
18
+if ( ! defined('ABSPATH')) {
19 19
 	exit;
20 20
 }
21 21
 
22 22
 /**
23 23
  * Include plugin file if function is_plugin_active does not exist
24 24
  */
25
-if (! function_exists('is_plugin_active')) {
25
+if ( ! function_exists('is_plugin_active')) {
26 26
     require_once(ABSPATH . '/wp-admin/includes/plugin.php');
27 27
 }
28 28
 
29
-if (! class_exists('Algolia_Woo_Indexer')) {
29
+if ( ! class_exists('Algolia_Woo_Indexer')) {
30 30
     /**
31 31
      * Algolia WooIndexer main class
32 32
      */
@@ -98,34 +98,34 @@  discard block
 block discarded – undo
98 98
                 add_settings_section(
99 99
                     'algolia_woo_indexer_main',
100 100
                     esc_html__('Algolia Woo Plugin Settings', 'algolia-woo-indexer'),
101
-                    array( $algowooindexer, 'algolia_woo_indexer_section_text' ),
101
+                    array($algowooindexer, 'algolia_woo_indexer_section_text'),
102 102
                     'algolia_woo_indexer'
103 103
                 );
104 104
                 add_settings_field(
105 105
                     'algolia_woo_indexer_application_id',
106 106
                     esc_html__('Application ID', 'algolia-woo-indexer'),
107
-                    array( $algowooindexer, 'algolia_woo_indexer_application_id_output' ),
107
+                    array($algowooindexer, 'algolia_woo_indexer_application_id_output'),
108 108
                     'algolia_woo_indexer',
109 109
                     'algolia_woo_indexer_main'
110 110
                 );
111 111
                 add_settings_field(
112 112
                     'algolia_woo_indexer_admin_api_key',
113 113
                     esc_html__('Admin API Key', 'algolia-woo-indexer'),
114
-                    array( $algowooindexer, 'algolia_woo_indexer_admin_api_key_output' ),
114
+                    array($algowooindexer, 'algolia_woo_indexer_admin_api_key_output'),
115 115
                     'algolia_woo_indexer',
116 116
                     'algolia_woo_indexer_main'
117 117
                 );
118 118
                 add_settings_field(
119 119
                     'algolia_woo_indexer_index_name',
120 120
                     esc_html__('Index name (will be created if not existing)', 'algolia-woo-indexer'),
121
-                    array( $algowooindexer, 'algolia_woo_indexer_index_name_output' ),
121
+                    array($algowooindexer, 'algolia_woo_indexer_index_name_output'),
122 122
                     'algolia_woo_indexer',
123 123
                     'algolia_woo_indexer_main'
124 124
                 );
125 125
                 add_settings_field(
126 126
                     'algolia_woo_indexer_automatically_send_new_products',
127 127
                     esc_html__('Automatically index new products', 'algolia-woo-indexer'),
128
-                    array( $algowooindexer, 'algolia_woo_indexer_automatically_send_new_products_output' ),
128
+                    array($algowooindexer, 'algolia_woo_indexer_automatically_send_new_products_output'),
129 129
                     'algolia_woo_indexer',
130 130
                     'algolia_woo_indexer_main'
131 131
                 );
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
              * But I have still done it to be 100% safe
191 191
              */
192 192
             $automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
193
-            $automatically_send_new_products = (! empty($automatically_send_new_products)) ? 1 : 0; ?>
193
+            $automatically_send_new_products = ( ! empty($automatically_send_new_products)) ? 1 : 0; ?>
194 194
 			<input id="algolia_woo_indexer_automatically_send_new_products" name="algolia_woo_indexer_automatically_send_new_products[checked]"
195 195
 			type="checkbox" <?php checked(1, $automatically_send_new_products); ?> />
196 196
 			<?php
@@ -236,10 +236,10 @@  discard block
 block discarded – undo
236 236
              */
237 237
             Algolia_Check_Requirements::check_unmet_requirements();
238 238
 
239
-            if (! Algolia_Check_Requirements::algolia_wp_version_check() || ! Algolia_Check_Requirements::algolia_php_version_check()) {
239
+            if ( ! Algolia_Check_Requirements::algolia_wp_version_check() || ! Algolia_Check_Requirements::algolia_php_version_check()) {
240 240
                 add_action(
241 241
                     'admin_notices',
242
-                    function () {
242
+                    function() {
243 243
                         echo '<div class="error notice">
244 244
                                   <p>' . esc_html__('Please check the server requirements for Algolia Woo Indexer. <br/> It requires minimum PHP version 7.2 and WordPress version 5.0', 'algolia-woo-indexer') . '</p>
245 245
                                 </div>';
@@ -252,31 +252,31 @@  discard block
 block discarded – undo
252 252
             /**
253 253
              * Setup translations
254 254
              */
255
-            add_action('plugins_loaded', array( $ob_class, 'load_textdomain' ));
255
+            add_action('plugins_loaded', array($ob_class, 'load_textdomain'));
256 256
 
257 257
             /**
258 258
              * Add actions to setup admin menu
259 259
              */
260 260
             if (is_admin()) {
261
-                add_action('admin_menu', array( $ob_class, 'admin_menu' ));
262
-                add_action('admin_init', array( $ob_class, 'setup_settings_sections' ));
263
-                add_action('admin_init', array( $ob_class, 'update_settings_options' ));
264
-                add_action('admin_init', array( $ob_class, 'maybe_send_products' ));
261
+                add_action('admin_menu', array($ob_class, 'admin_menu'));
262
+                add_action('admin_init', array($ob_class, 'setup_settings_sections'));
263
+                add_action('admin_init', array($ob_class, 'update_settings_options'));
264
+                add_action('admin_init', array($ob_class, 'maybe_send_products'));
265 265
 
266 266
                 /**
267 267
                  * Register hook to automatically send new products if the option is set
268 268
                  */
269 269
 
270 270
                 if ('1' === $automatically_send_new_products) {
271
-                    add_action('save_post', array( $ob_class, 'send_new_product_to_algolia' ), 10, 3);
271
+                    add_action('save_post', array($ob_class, 'send_new_product_to_algolia'), 10, 3);
272 272
                 }
273 273
 
274 274
                 self::$plugin_url = admin_url('options-general.php?page=algolia-woo-indexer-settings');
275 275
 
276
-                if (! is_plugin_active('woocommerce/woocommerce.php')) {
276
+                if ( ! is_plugin_active('woocommerce/woocommerce.php')) {
277 277
                     add_action(
278 278
                         'admin_notices',
279
-                        function () {
279
+                        function() {
280 280
                             echo '<div class="error notice">
281 281
 								  <p>' . esc_html__('WooCommerce plugin must be enabled for Algolia Woo Indexer to work.', 'algolia-woo-indexer') . '</p>
282 282
 								</div>';
@@ -341,7 +341,7 @@  discard block
 block discarded – undo
341 341
             /**
342 342
              * Sanitizing by setting the value to either 1 or 0
343 343
              */
344
-            $filtered_automatically_send_new_products = (! empty($automatically_send_new_products)) ? 1 : 0;
344
+            $filtered_automatically_send_new_products = ( ! empty($automatically_send_new_products)) ? 1 : 0;
345 345
 
346 346
             /**
347 347
              * Values have been filtered and sanitized
@@ -349,28 +349,28 @@  discard block
 block discarded – undo
349 349
              *
350 350
              * @see https://developer.wordpress.org/reference/functions/update_option/
351 351
              */
352
-            if (isset($filtered_application_id) && (! empty($filtered_application_id))) {
352
+            if (isset($filtered_application_id) && ( ! empty($filtered_application_id))) {
353 353
                 update_option(
354 354
                     ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID,
355 355
                     $filtered_application_id
356 356
                 );
357 357
             }
358 358
 
359
-            if (isset($filtered_api_key) && (! empty($filtered_api_key))) {
359
+            if (isset($filtered_api_key) && ( ! empty($filtered_api_key))) {
360 360
                 update_option(
361 361
                     ALGOWOO_DB_OPTION . ALGOLIA_API_KEY,
362 362
                     $filtered_api_key
363 363
                 );
364 364
             }
365 365
 
366
-            if (isset($filtered_index_name) && (! empty($filtered_index_name))) {
366
+            if (isset($filtered_index_name) && ( ! empty($filtered_index_name))) {
367 367
                 update_option(
368 368
                     ALGOWOO_DB_OPTION . INDEX_NAME,
369 369
                     $filtered_index_name
370 370
                 );
371 371
             }
372 372
 
373
-            if (isset($filtered_automatically_send_new_products) && (! empty($filtered_automatically_send_new_products))) {
373
+            if (isset($filtered_automatically_send_new_products) && ( ! empty($filtered_automatically_send_new_products))) {
374 374
                 update_option(
375 375
                     ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS,
376 376
                     $filtered_automatically_send_new_products
@@ -418,7 +418,7 @@  discard block
 block discarded – undo
418 418
                 esc_html__('Algolia Woo Indexer Settings', 'algolia-woo-indexer'),
419 419
                 'manage_options',
420 420
                 'algolia-woo-indexer-settings',
421
-                array( get_called_class(), 'algolia_woo_indexer_settings' )
421
+                array(get_called_class(), 'algolia_woo_indexer_settings')
422 422
             );
423 423
         }
424 424
 
@@ -432,7 +432,7 @@  discard block
 block discarded – undo
432 432
             /**
433 433
             * Verify that the user can access the settings page
434 434
             */
435
-            if (! current_user_can('manage_options')) {
435
+            if ( ! current_user_can('manage_options')) {
436 436
                 wp_die(esc_html__('Action not allowed.', 'algolia_woo_indexer_settings'));
437 437
             } ?>
438 438
 			<div class="wrap">
@@ -459,7 +459,7 @@  discard block
 block discarded – undo
459 459
          */
460 460
         public static function get_instance()
461 461
         {
462
-            if (! self::$instance) {
462
+            if ( ! self::$instance) {
463 463
                 self::$instance = new Algolia_Woo_Indexer();
464 464
             }
465 465
             return self::$instance;
Please login to merge, or discard this patch.
Indentation   +464 added lines, -464 removed lines patch added patch discarded remove patch
@@ -23,418 +23,418 @@  discard block
 block discarded – undo
23 23
  * Include plugin file if function is_plugin_active does not exist
24 24
  */
25 25
 if (! function_exists('is_plugin_active')) {
26
-    require_once(ABSPATH . '/wp-admin/includes/plugin.php');
26
+	require_once(ABSPATH . '/wp-admin/includes/plugin.php');
27 27
 }
28 28
 
29 29
 if (! class_exists('Algolia_Woo_Indexer')) {
30
-    /**
31
-     * Algolia WooIndexer main class
32
-     */
33
-    class Algolia_Woo_Indexer
34
-    {
35
-        const PLUGIN_NAME      = 'Algolia Woo Indexer';
36
-        const PLUGIN_TRANSIENT = 'algowoo-plugin-notice';
37
-
38
-        /**
39
-         * Class instance
40
-         *
41
-         * @var object
42
-         */
43
-        private static $instance;
44
-
45
-        /**
46
-         * The plugin URL
47
-         *
48
-         * @var string
49
-         */
50
-        private static $plugin_url = '';
51
-
52
-        /**
53
-         * Class constructor
54
-         *
55
-         * @return void
56
-         */
57
-        public function __construct()
58
-        {
59
-            $this->init();
60
-        }
61
-
62
-        /**
63
-         * Setup sections and fields to store and retrieve values from Settings API
64
-         *
65
-         * @return void
66
-         */
67
-        public static function setup_settings_sections()
68
-        {
69
-            /**
70
-            * Setup arguments for settings sections and fields
71
-            *
72
-            * @see https://developer.wordpress.org/reference/functions/register_setting/
73
-            */
74
-            if (is_admin()) {
75
-                $arguments = array(
76
-                    'type'              => 'string',
77
-                    'sanitize_callback' => 'settings_fields_validate_options',
78
-                    'default'           => null,
79
-                );
80
-                register_setting('algolia_woo_options', 'algolia_woo_options', $arguments);
81
-
82
-                /**
83
-                 * Make sure we reference the instance of the current class by using self::get_instance()
84
-                 * This way we can setup the correct callback function for add_settings_section and add_settings_field
85
-                 */
86
-                $algowooindexer = self::get_instance();
87
-
88
-                /**
89
-                 * Add our necessary settings sections and fields
90
-                 */
91
-                add_settings_section(
92
-                    'algolia_woo_indexer_main',
93
-                    esc_html__('Algolia Woo Plugin Settings', 'algolia-woo-indexer'),
94
-                    array( $algowooindexer, 'algolia_woo_indexer_section_text' ),
95
-                    'algolia_woo_indexer'
96
-                );
97
-                add_settings_field(
98
-                    'algolia_woo_indexer_application_id',
99
-                    esc_html__('Application ID', 'algolia-woo-indexer'),
100
-                    array( $algowooindexer, 'algolia_woo_indexer_application_id_output' ),
101
-                    'algolia_woo_indexer',
102
-                    'algolia_woo_indexer_main'
103
-                );
104
-                add_settings_field(
105
-                    'algolia_woo_indexer_admin_api_key',
106
-                    esc_html__('Admin API Key', 'algolia-woo-indexer'),
107
-                    array( $algowooindexer, 'algolia_woo_indexer_admin_api_key_output' ),
108
-                    'algolia_woo_indexer',
109
-                    'algolia_woo_indexer_main'
110
-                );
111
-                add_settings_field(
112
-                    'algolia_woo_indexer_index_name',
113
-                    esc_html__('Index name (will be created if not existing)', 'algolia-woo-indexer'),
114
-                    array( $algowooindexer, 'algolia_woo_indexer_index_name_output' ),
115
-                    'algolia_woo_indexer',
116
-                    'algolia_woo_indexer_main'
117
-                );
118
-                add_settings_field(
119
-                    'algolia_woo_indexer_automatically_send_new_products',
120
-                    esc_html__('Automatically index new products', 'algolia-woo-indexer'),
121
-                    array( $algowooindexer, 'algolia_woo_indexer_automatically_send_new_products_output' ),
122
-                    'algolia_woo_indexer',
123
-                    'algolia_woo_indexer_main'
124
-                );
125
-            }
126
-        }
127
-
128
-        /**
129
-         * Output for admin API key field
130
-         *
131
-         * @see https://developer.wordpress.org/reference/functions/wp_nonce_field/
132
-         *
133
-         * @return void
134
-         */
135
-        public static function algolia_woo_indexer_admin_api_key_output()
136
-        {
137
-            $api_key = get_option(ALGOWOO_DB_OPTION . ALGOLIA_API_KEY);
138
-            $api_key = is_string($api_key) ? $api_key : CHANGE_ME;
139
-
140
-            wp_nonce_field('algolia_woo_indexer_admin_api_nonce_action', 'algolia_woo_indexer_admin_api_nonce_name');
141
-
142
-            echo "<input id='algolia_woo_indexer_admin_api_key' name='algolia_woo_indexer_admin_api_key[key]'
30
+	/**
31
+	 * Algolia WooIndexer main class
32
+	 */
33
+	class Algolia_Woo_Indexer
34
+	{
35
+		const PLUGIN_NAME      = 'Algolia Woo Indexer';
36
+		const PLUGIN_TRANSIENT = 'algowoo-plugin-notice';
37
+
38
+		/**
39
+		 * Class instance
40
+		 *
41
+		 * @var object
42
+		 */
43
+		private static $instance;
44
+
45
+		/**
46
+		 * The plugin URL
47
+		 *
48
+		 * @var string
49
+		 */
50
+		private static $plugin_url = '';
51
+
52
+		/**
53
+		 * Class constructor
54
+		 *
55
+		 * @return void
56
+		 */
57
+		public function __construct()
58
+		{
59
+			$this->init();
60
+		}
61
+
62
+		/**
63
+		 * Setup sections and fields to store and retrieve values from Settings API
64
+		 *
65
+		 * @return void
66
+		 */
67
+		public static function setup_settings_sections()
68
+		{
69
+			/**
70
+			 * Setup arguments for settings sections and fields
71
+			 *
72
+			 * @see https://developer.wordpress.org/reference/functions/register_setting/
73
+			 */
74
+			if (is_admin()) {
75
+				$arguments = array(
76
+					'type'              => 'string',
77
+					'sanitize_callback' => 'settings_fields_validate_options',
78
+					'default'           => null,
79
+				);
80
+				register_setting('algolia_woo_options', 'algolia_woo_options', $arguments);
81
+
82
+				/**
83
+				 * Make sure we reference the instance of the current class by using self::get_instance()
84
+				 * This way we can setup the correct callback function for add_settings_section and add_settings_field
85
+				 */
86
+				$algowooindexer = self::get_instance();
87
+
88
+				/**
89
+				 * Add our necessary settings sections and fields
90
+				 */
91
+				add_settings_section(
92
+					'algolia_woo_indexer_main',
93
+					esc_html__('Algolia Woo Plugin Settings', 'algolia-woo-indexer'),
94
+					array( $algowooindexer, 'algolia_woo_indexer_section_text' ),
95
+					'algolia_woo_indexer'
96
+				);
97
+				add_settings_field(
98
+					'algolia_woo_indexer_application_id',
99
+					esc_html__('Application ID', 'algolia-woo-indexer'),
100
+					array( $algowooindexer, 'algolia_woo_indexer_application_id_output' ),
101
+					'algolia_woo_indexer',
102
+					'algolia_woo_indexer_main'
103
+				);
104
+				add_settings_field(
105
+					'algolia_woo_indexer_admin_api_key',
106
+					esc_html__('Admin API Key', 'algolia-woo-indexer'),
107
+					array( $algowooindexer, 'algolia_woo_indexer_admin_api_key_output' ),
108
+					'algolia_woo_indexer',
109
+					'algolia_woo_indexer_main'
110
+				);
111
+				add_settings_field(
112
+					'algolia_woo_indexer_index_name',
113
+					esc_html__('Index name (will be created if not existing)', 'algolia-woo-indexer'),
114
+					array( $algowooindexer, 'algolia_woo_indexer_index_name_output' ),
115
+					'algolia_woo_indexer',
116
+					'algolia_woo_indexer_main'
117
+				);
118
+				add_settings_field(
119
+					'algolia_woo_indexer_automatically_send_new_products',
120
+					esc_html__('Automatically index new products', 'algolia-woo-indexer'),
121
+					array( $algowooindexer, 'algolia_woo_indexer_automatically_send_new_products_output' ),
122
+					'algolia_woo_indexer',
123
+					'algolia_woo_indexer_main'
124
+				);
125
+			}
126
+		}
127
+
128
+		/**
129
+		 * Output for admin API key field
130
+		 *
131
+		 * @see https://developer.wordpress.org/reference/functions/wp_nonce_field/
132
+		 *
133
+		 * @return void
134
+		 */
135
+		public static function algolia_woo_indexer_admin_api_key_output()
136
+		{
137
+			$api_key = get_option(ALGOWOO_DB_OPTION . ALGOLIA_API_KEY);
138
+			$api_key = is_string($api_key) ? $api_key : CHANGE_ME;
139
+
140
+			wp_nonce_field('algolia_woo_indexer_admin_api_nonce_action', 'algolia_woo_indexer_admin_api_nonce_name');
141
+
142
+			echo "<input id='algolia_woo_indexer_admin_api_key' name='algolia_woo_indexer_admin_api_key[key]'
143 143
 				type='text' value='" . esc_attr($api_key) . "' />";
144
-        }
145
-
146
-        /**
147
-         * Output for application ID field
148
-         *
149
-         * @return void
150
-         */
151
-        public static function algolia_woo_indexer_application_id_output()
152
-        {
153
-            $application_id = get_option(ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID);
154
-            $application_id = is_string($application_id) ? $application_id : CHANGE_ME;
155
-
156
-            echo "<input id='algolia_woo_indexer_application_id' name='algolia_woo_indexer_application_id[id]'
144
+		}
145
+
146
+		/**
147
+		 * Output for application ID field
148
+		 *
149
+		 * @return void
150
+		 */
151
+		public static function algolia_woo_indexer_application_id_output()
152
+		{
153
+			$application_id = get_option(ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID);
154
+			$application_id = is_string($application_id) ? $application_id : CHANGE_ME;
155
+
156
+			echo "<input id='algolia_woo_indexer_application_id' name='algolia_woo_indexer_application_id[id]'
157 157
 				type='text' value='" . esc_attr($application_id) . "' />";
158
-        }
159
-
160
-        /**
161
-         * Output for index name field
162
-         *
163
-         * @return void
164
-         */
165
-        public static function algolia_woo_indexer_index_name_output()
166
-        {
167
-            $index_name = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
168
-            $index_name = is_string($index_name) ? $index_name : CHANGE_ME;
169
-
170
-            echo "<input id='algolia_woo_indexer_index_name' name='algolia_woo_indexer_index_name[name]'
158
+		}
159
+
160
+		/**
161
+		 * Output for index name field
162
+		 *
163
+		 * @return void
164
+		 */
165
+		public static function algolia_woo_indexer_index_name_output()
166
+		{
167
+			$index_name = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
168
+			$index_name = is_string($index_name) ? $index_name : CHANGE_ME;
169
+
170
+			echo "<input id='algolia_woo_indexer_index_name' name='algolia_woo_indexer_index_name[name]'
171 171
 				type='text' value='" . esc_attr($index_name) . "' />";
172
-        }
172
+		}
173 173
         
174
-        /**
175
-         * Output for checkbox to check if we automatically send new products to Algolia
176
-         *
177
-         * @return void
178
-         */
179
-        public static function algolia_woo_indexer_automatically_send_new_products_output()
180
-        {
181
-            /**
182
-             * Sanitization is not really needed as the variable is not directly echoed
183
-             * But I have still done it to be 100% safe
184
-             */
185
-            $automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
186
-            $automatically_send_new_products = (! empty($automatically_send_new_products)) ? 1 : 0; ?>
174
+		/**
175
+		 * Output for checkbox to check if we automatically send new products to Algolia
176
+		 *
177
+		 * @return void
178
+		 */
179
+		public static function algolia_woo_indexer_automatically_send_new_products_output()
180
+		{
181
+			/**
182
+			 * Sanitization is not really needed as the variable is not directly echoed
183
+			 * But I have still done it to be 100% safe
184
+			 */
185
+			$automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
186
+			$automatically_send_new_products = (! empty($automatically_send_new_products)) ? 1 : 0; ?>
187 187
 			<input id="algolia_woo_indexer_automatically_send_new_products" name="algolia_woo_indexer_automatically_send_new_products[checked]"
188 188
 			type="checkbox" <?php checked(1, $automatically_send_new_products); ?> />
189 189
 			<?php
190
-        }
191
-
192
-        /**
193
-         * Section text for plugin settings section text
194
-         *
195
-         * @return void
196
-         */
197
-        public static function algolia_woo_indexer_section_text()
198
-        {
199
-            echo esc_html__('Enter your settings here', 'algolia-woo-indexer');
200
-        }
201
-
202
-        /**
203
-         * Check if we are going to send products by verifying send products nonce
204
-         *
205
-         * @return void
206
-         */
207
-        public static function maybe_send_products()
208
-        {
209
-            if (true === Algolia_Verify_Nonces::verify_send_products_nonce()) {
210
-                Algolia_Send_Products::send_products_to_algolia();
211
-            }
212
-        }
213
-
214
-        /**
215
-         * Initialize class, setup settings sections and fields
216
-         *
217
-         * @return void
218
-         */
219
-        public static function init()
220
-        {
221
-
222
-            /**
223
-             * Fetch the option to see if we are going to automatically send new products
224
-             */
225
-            $automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
226
-
227
-            /**
228
-             * Check that we have the minimum versions required and all of the required PHP extensions
229
-             */
230
-            Algolia_Check_Requirements::check_unmet_requirements();
231
-
232
-            if (! Algolia_Check_Requirements::algolia_wp_version_check() || ! Algolia_Check_Requirements::algolia_php_version_check()) {
233
-                add_action(
234
-                    'admin_notices',
235
-                    function () {
236
-                        echo '<div class="error notice">
190
+		}
191
+
192
+		/**
193
+		 * Section text for plugin settings section text
194
+		 *
195
+		 * @return void
196
+		 */
197
+		public static function algolia_woo_indexer_section_text()
198
+		{
199
+			echo esc_html__('Enter your settings here', 'algolia-woo-indexer');
200
+		}
201
+
202
+		/**
203
+		 * Check if we are going to send products by verifying send products nonce
204
+		 *
205
+		 * @return void
206
+		 */
207
+		public static function maybe_send_products()
208
+		{
209
+			if (true === Algolia_Verify_Nonces::verify_send_products_nonce()) {
210
+				Algolia_Send_Products::send_products_to_algolia();
211
+			}
212
+		}
213
+
214
+		/**
215
+		 * Initialize class, setup settings sections and fields
216
+		 *
217
+		 * @return void
218
+		 */
219
+		public static function init()
220
+		{
221
+
222
+			/**
223
+			 * Fetch the option to see if we are going to automatically send new products
224
+			 */
225
+			$automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
226
+
227
+			/**
228
+			 * Check that we have the minimum versions required and all of the required PHP extensions
229
+			 */
230
+			Algolia_Check_Requirements::check_unmet_requirements();
231
+
232
+			if (! Algolia_Check_Requirements::algolia_wp_version_check() || ! Algolia_Check_Requirements::algolia_php_version_check()) {
233
+				add_action(
234
+					'admin_notices',
235
+					function () {
236
+						echo '<div class="error notice">
237 237
                                   <p>' . esc_html__('Please check the server requirements for Algolia Woo Indexer. <br/> It requires minimum PHP version 7.2 and WordPress version 5.0', 'algolia-woo-indexer') . '</p>
238 238
                                 </div>';
239
-                    }
240
-                );
241
-            }
242
-
243
-            $ob_class = get_called_class();
244
-
245
-            /**
246
-             * Setup translations
247
-             */
248
-            add_action('plugins_loaded', array( $ob_class, 'load_textdomain' ));
249
-
250
-            /**
251
-             * Add actions to setup admin menu
252
-             */
253
-            if (is_admin()) {
254
-                add_action('admin_menu', array( $ob_class, 'admin_menu' ));
255
-                add_action('admin_init', array( $ob_class, 'setup_settings_sections' ));
256
-                add_action('admin_init', array( $ob_class, 'update_settings_options' ));
257
-                add_action('admin_init', array( $ob_class, 'maybe_send_products' ));
258
-
259
-                /**
260
-                 * Register hook to automatically send new products if the option is set
261
-                 */
262
-
263
-                if ('1' === $automatically_send_new_products) {
264
-                    add_action('save_post', array( $ob_class, 'send_new_product_to_algolia' ), 10, 3);
265
-                }
266
-
267
-                self::$plugin_url = admin_url('options-general.php?page=algolia-woo-indexer-settings');
268
-
269
-                if (! is_plugin_active('woocommerce/woocommerce.php')) {
270
-                    add_action(
271
-                        'admin_notices',
272
-                        function () {
273
-                            echo '<div class="error notice">
239
+					}
240
+				);
241
+			}
242
+
243
+			$ob_class = get_called_class();
244
+
245
+			/**
246
+			 * Setup translations
247
+			 */
248
+			add_action('plugins_loaded', array( $ob_class, 'load_textdomain' ));
249
+
250
+			/**
251
+			 * Add actions to setup admin menu
252
+			 */
253
+			if (is_admin()) {
254
+				add_action('admin_menu', array( $ob_class, 'admin_menu' ));
255
+				add_action('admin_init', array( $ob_class, 'setup_settings_sections' ));
256
+				add_action('admin_init', array( $ob_class, 'update_settings_options' ));
257
+				add_action('admin_init', array( $ob_class, 'maybe_send_products' ));
258
+
259
+				/**
260
+				 * Register hook to automatically send new products if the option is set
261
+				 */
262
+
263
+				if ('1' === $automatically_send_new_products) {
264
+					add_action('save_post', array( $ob_class, 'send_new_product_to_algolia' ), 10, 3);
265
+				}
266
+
267
+				self::$plugin_url = admin_url('options-general.php?page=algolia-woo-indexer-settings');
268
+
269
+				if (! is_plugin_active('woocommerce/woocommerce.php')) {
270
+					add_action(
271
+						'admin_notices',
272
+						function () {
273
+							echo '<div class="error notice">
274 274
 								  <p>' . esc_html__('WooCommerce plugin must be enabled for Algolia Woo Indexer to work.', 'algolia-woo-indexer') . '</p>
275 275
 								</div>';
276
-                        }
277
-                    );
278
-                }
279
-            }
280
-        }
281
-
282
-        /**
283
-         * Send a single product to Algolia once a new product has been published
284
-         *
285
-         * @param int   $post_id ID of the product.
286
-         * @param array $post Post array.
287
-         *
288
-         * @return void
289
-         */
290
-        public static function send_new_product_to_algolia($post_id, $post)
291
-        {
292
-            if ('publish' !== $post->post_status || 'product' !== $post->post_type) {
293
-                return;
294
-            }
295
-            Algolia_Send_Products::send_products_to_algolia($post_id);
296
-        }
297
-
298
-        /**
299
-         * Verify nonces before we update options and settings
300
-         * Also retrieve the value from the send_products_to_algolia hidden field to check if we are sending products to Algolia
301
-         *
302
-         * @return void
303
-         */
304
-        public static function update_settings_options()
305
-        {
306
-            Algolia_Verify_Nonces::verify_settings_nonce();
307
-
308
-            /**
309
-             * Do not proceed if we are going to send products
310
-             */
311
-            if (true === Algolia_Verify_Nonces::verify_send_products_nonce()) {
312
-                return;
313
-            }
314
-
315
-            /**
316
-             * Filter the application id, api key, index name and verify that the input is an array
317
-             *
318
-             * @see https://www.php.net/manual/en/function.filter-input.php
319
-             */
320
-            $post_application_id             = filter_input(INPUT_POST, 'algolia_woo_indexer_application_id', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
321
-            $post_api_key                    = filter_input(INPUT_POST, 'algolia_woo_indexer_admin_api_key', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
322
-            $post_index_name                 = filter_input(INPUT_POST, 'algolia_woo_indexer_index_name', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
323
-            $automatically_send_new_products = filter_input(INPUT_POST, 'algolia_woo_indexer_automatically_send_new_products', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
324
-
325
-            /**
326
-             * Properly sanitize text fields before updating data
327
-             *
328
-             * @see https://developer.wordpress.org/reference/functions/sanitize_text_field/
329
-             */
330
-            $filtered_application_id = sanitize_text_field($post_application_id['id']);
331
-            $filtered_api_key        = sanitize_text_field($post_api_key['key']);
332
-            $filtered_index_name     = sanitize_text_field($post_index_name['name']);
333
-
334
-            /**
335
-             * Sanitizing by setting the value to either 1 or 0
336
-             */
337
-            $filtered_automatically_send_new_products = (! empty($automatically_send_new_products)) ? 1 : 0;
338
-
339
-            /**
340
-             * Values have been filtered and sanitized
341
-             * Check if set and not empty and update the database
342
-             *
343
-             * @see https://developer.wordpress.org/reference/functions/update_option/
344
-             */
345
-            if (isset($filtered_application_id) && (! empty($filtered_application_id))) {
346
-                update_option(
347
-                    ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID,
348
-                    $filtered_application_id
349
-                );
350
-            }
351
-
352
-            if (isset($filtered_api_key) && (! empty($filtered_api_key))) {
353
-                update_option(
354
-                    ALGOWOO_DB_OPTION . ALGOLIA_API_KEY,
355
-                    $filtered_api_key
356
-                );
357
-            }
358
-
359
-            if (isset($filtered_index_name) && (! empty($filtered_index_name))) {
360
-                update_option(
361
-                    ALGOWOO_DB_OPTION . INDEX_NAME,
362
-                    $filtered_index_name
363
-                );
364
-            }
365
-
366
-            if (isset($filtered_automatically_send_new_products) && (! empty($filtered_automatically_send_new_products))) {
367
-                update_option(
368
-                    ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS,
369
-                    $filtered_automatically_send_new_products
370
-                );
371
-            }
372
-        }
373
-
374
-        /**
375
-         * Sanitize input in settings fields and filter through regex to accept only a-z and A-Z
376
-         *
377
-         * @param string $input Settings text data
378
-         * @return array
379
-         */
380
-        public static function settings_fields_validate_options($input)
381
-        {
382
-            $valid         = array();
383
-            $valid['name'] = preg_replace(
384
-                '/[^a-zA-Z\s]/',
385
-                '',
386
-                $input['name']
387
-            );
388
-            return $valid;
389
-        }
390
-
391
-        /**
392
-         * Load text domain for translations
393
-         *
394
-         * @return void
395
-         */
396
-        public static function load_textdomain()
397
-        {
398
-            load_plugin_textdomain('algolia-woo-indexer', false, basename(dirname(__FILE__)) . '/languages/');
399
-        }
400
-
401
-        /**
402
-         * Add the new menu to settings section so that we can configure the plugin
403
-         *
404
-         * @return void
405
-         */
406
-        public static function admin_menu()
407
-        {
408
-            add_submenu_page(
409
-                'options-general.php',
410
-                esc_html__('Algolia Woo Indexer Settings', 'algolia-woo-indexer'),
411
-                esc_html__('Algolia Woo Indexer Settings', 'algolia-woo-indexer'),
412
-                'manage_options',
413
-                'algolia-woo-indexer-settings',
414
-                array( get_called_class(), 'algolia_woo_indexer_settings' )
415
-            );
416
-        }
417
-
418
-        /**
419
-         * Display settings and allow user to modify them
420
-         *
421
-         * @return void
422
-         */
423
-        public static function algolia_woo_indexer_settings()
424
-        {
425
-            /**
426
-            * Verify that the user can access the settings page
427
-            */
428
-            if (! current_user_can('manage_options')) {
429
-                wp_die(esc_html__('Action not allowed.', 'algolia_woo_indexer_settings'));
430
-            } ?>
276
+						}
277
+					);
278
+				}
279
+			}
280
+		}
281
+
282
+		/**
283
+		 * Send a single product to Algolia once a new product has been published
284
+		 *
285
+		 * @param int   $post_id ID of the product.
286
+		 * @param array $post Post array.
287
+		 *
288
+		 * @return void
289
+		 */
290
+		public static function send_new_product_to_algolia($post_id, $post)
291
+		{
292
+			if ('publish' !== $post->post_status || 'product' !== $post->post_type) {
293
+				return;
294
+			}
295
+			Algolia_Send_Products::send_products_to_algolia($post_id);
296
+		}
297
+
298
+		/**
299
+		 * Verify nonces before we update options and settings
300
+		 * Also retrieve the value from the send_products_to_algolia hidden field to check if we are sending products to Algolia
301
+		 *
302
+		 * @return void
303
+		 */
304
+		public static function update_settings_options()
305
+		{
306
+			Algolia_Verify_Nonces::verify_settings_nonce();
307
+
308
+			/**
309
+			 * Do not proceed if we are going to send products
310
+			 */
311
+			if (true === Algolia_Verify_Nonces::verify_send_products_nonce()) {
312
+				return;
313
+			}
314
+
315
+			/**
316
+			 * Filter the application id, api key, index name and verify that the input is an array
317
+			 *
318
+			 * @see https://www.php.net/manual/en/function.filter-input.php
319
+			 */
320
+			$post_application_id             = filter_input(INPUT_POST, 'algolia_woo_indexer_application_id', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
321
+			$post_api_key                    = filter_input(INPUT_POST, 'algolia_woo_indexer_admin_api_key', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
322
+			$post_index_name                 = filter_input(INPUT_POST, 'algolia_woo_indexer_index_name', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
323
+			$automatically_send_new_products = filter_input(INPUT_POST, 'algolia_woo_indexer_automatically_send_new_products', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
324
+
325
+			/**
326
+			 * Properly sanitize text fields before updating data
327
+			 *
328
+			 * @see https://developer.wordpress.org/reference/functions/sanitize_text_field/
329
+			 */
330
+			$filtered_application_id = sanitize_text_field($post_application_id['id']);
331
+			$filtered_api_key        = sanitize_text_field($post_api_key['key']);
332
+			$filtered_index_name     = sanitize_text_field($post_index_name['name']);
333
+
334
+			/**
335
+			 * Sanitizing by setting the value to either 1 or 0
336
+			 */
337
+			$filtered_automatically_send_new_products = (! empty($automatically_send_new_products)) ? 1 : 0;
338
+
339
+			/**
340
+			 * Values have been filtered and sanitized
341
+			 * Check if set and not empty and update the database
342
+			 *
343
+			 * @see https://developer.wordpress.org/reference/functions/update_option/
344
+			 */
345
+			if (isset($filtered_application_id) && (! empty($filtered_application_id))) {
346
+				update_option(
347
+					ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID,
348
+					$filtered_application_id
349
+				);
350
+			}
351
+
352
+			if (isset($filtered_api_key) && (! empty($filtered_api_key))) {
353
+				update_option(
354
+					ALGOWOO_DB_OPTION . ALGOLIA_API_KEY,
355
+					$filtered_api_key
356
+				);
357
+			}
358
+
359
+			if (isset($filtered_index_name) && (! empty($filtered_index_name))) {
360
+				update_option(
361
+					ALGOWOO_DB_OPTION . INDEX_NAME,
362
+					$filtered_index_name
363
+				);
364
+			}
365
+
366
+			if (isset($filtered_automatically_send_new_products) && (! empty($filtered_automatically_send_new_products))) {
367
+				update_option(
368
+					ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS,
369
+					$filtered_automatically_send_new_products
370
+				);
371
+			}
372
+		}
373
+
374
+		/**
375
+		 * Sanitize input in settings fields and filter through regex to accept only a-z and A-Z
376
+		 *
377
+		 * @param string $input Settings text data
378
+		 * @return array
379
+		 */
380
+		public static function settings_fields_validate_options($input)
381
+		{
382
+			$valid         = array();
383
+			$valid['name'] = preg_replace(
384
+				'/[^a-zA-Z\s]/',
385
+				'',
386
+				$input['name']
387
+			);
388
+			return $valid;
389
+		}
390
+
391
+		/**
392
+		 * Load text domain for translations
393
+		 *
394
+		 * @return void
395
+		 */
396
+		public static function load_textdomain()
397
+		{
398
+			load_plugin_textdomain('algolia-woo-indexer', false, basename(dirname(__FILE__)) . '/languages/');
399
+		}
400
+
401
+		/**
402
+		 * Add the new menu to settings section so that we can configure the plugin
403
+		 *
404
+		 * @return void
405
+		 */
406
+		public static function admin_menu()
407
+		{
408
+			add_submenu_page(
409
+				'options-general.php',
410
+				esc_html__('Algolia Woo Indexer Settings', 'algolia-woo-indexer'),
411
+				esc_html__('Algolia Woo Indexer Settings', 'algolia-woo-indexer'),
412
+				'manage_options',
413
+				'algolia-woo-indexer-settings',
414
+				array( get_called_class(), 'algolia_woo_indexer_settings' )
415
+			);
416
+		}
417
+
418
+		/**
419
+		 * Display settings and allow user to modify them
420
+		 *
421
+		 * @return void
422
+		 */
423
+		public static function algolia_woo_indexer_settings()
424
+		{
425
+			/**
426
+			 * Verify that the user can access the settings page
427
+			 */
428
+			if (! current_user_can('manage_options')) {
429
+				wp_die(esc_html__('Action not allowed.', 'algolia_woo_indexer_settings'));
430
+			} ?>
431 431
 			<div class="wrap">
432 432
 				<h1><?php esc_html__('Algolia Woo Indexer Settings', 'algolia-woo-indexer'); ?></h1>
433 433
 				<form action="<?php echo esc_url(self::$plugin_url); ?>" method="POST">
434 434
 			<?php
435
-            settings_fields('algolia_woo_options');
436
-            do_settings_sections('algolia_woo_indexer');
437
-            submit_button('', 'primary wide'); ?>
435
+			settings_fields('algolia_woo_options');
436
+			do_settings_sections('algolia_woo_indexer');
437
+			submit_button('', 'primary wide'); ?>
438 438
 				</form>
439 439
 				<form action="<?php echo esc_url(self::$plugin_url); ?>" method="POST">
440 440
 					<?php wp_nonce_field('send_products_to_algolia_nonce_action', 'send_products_to_algolia_nonce_name'); ?>
@@ -443,75 +443,75 @@  discard block
 block discarded – undo
443 443
 				</form>
444 444
 			</div>
445 445
 			<?php
446
-        }
447
-
448
-        /**
449
-         * Get active object instance
450
-         *
451
-         * @return object
452
-         */
453
-        public static function get_instance()
454
-        {
455
-            if (! self::$instance) {
456
-                self::$instance = new Algolia_Woo_Indexer();
457
-            }
458
-            return self::$instance;
459
-        }
460
-
461
-        /**
462
-         * The actions to execute when the plugin is activated.
463
-         *
464
-         * @return void
465
-         */
466
-        public static function activate_plugin()
467
-        {
468
-
469
-            /**
470
-             * Set default values for options if not already set
471
-             */
472
-            $automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
473
-            $algolia_application_id          = get_option(ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID);
474
-            $algolia_api_key                 = get_option(ALGOWOO_DB_OPTION . ALGOLIA_API_KEY);
475
-            $algolia_index_name              = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
446
+		}
447
+
448
+		/**
449
+		 * Get active object instance
450
+		 *
451
+		 * @return object
452
+		 */
453
+		public static function get_instance()
454
+		{
455
+			if (! self::$instance) {
456
+				self::$instance = new Algolia_Woo_Indexer();
457
+			}
458
+			return self::$instance;
459
+		}
460
+
461
+		/**
462
+		 * The actions to execute when the plugin is activated.
463
+		 *
464
+		 * @return void
465
+		 */
466
+		public static function activate_plugin()
467
+		{
468
+
469
+			/**
470
+			 * Set default values for options if not already set
471
+			 */
472
+			$automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
473
+			$algolia_application_id          = get_option(ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID);
474
+			$algolia_api_key                 = get_option(ALGOWOO_DB_OPTION . ALGOLIA_API_KEY);
475
+			$algolia_index_name              = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
476 476
             
477
-            if (empty($automatically_send_new_products)) {
478
-                add_option(
479
-                    ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS,
480
-                    '0'
481
-                );
482
-            }
483
-
484
-            if (empty($algolia_application_id)) {
485
-                add_option(
486
-                    ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID,
487
-                    'Change me'
488
-                );
489
-            }
490
-
491
-            if (empty($algolia_api_key)) {
492
-                add_option(
493
-                    ALGOWOO_DB_OPTION . ALGOLIA_API_KEY,
494
-                    'Change me'
495
-                );
496
-            }
497
-
498
-            if (empty($algolia_index_name)) {
499
-                add_option(
500
-                    ALGOWOO_DB_OPTION . INDEX_NAME,
501
-                    'Change me'
502
-                );
503
-            }
504
-            set_transient(self::PLUGIN_TRANSIENT, true);
505
-        }
506
-
507
-        /**
508
-         * The actions to execute when the plugin is deactivated.
509
-         *
510
-         * @return void
511
-         */
512
-        public static function deactivate_plugin()
513
-        {
514
-            delete_transient(self::PLUGIN_TRANSIENT);
515
-        }
516
-    }
477
+			if (empty($automatically_send_new_products)) {
478
+				add_option(
479
+					ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS,
480
+					'0'
481
+				);
482
+			}
483
+
484
+			if (empty($algolia_application_id)) {
485
+				add_option(
486
+					ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID,
487
+					'Change me'
488
+				);
489
+			}
490
+
491
+			if (empty($algolia_api_key)) {
492
+				add_option(
493
+					ALGOWOO_DB_OPTION . ALGOLIA_API_KEY,
494
+					'Change me'
495
+				);
496
+			}
497
+
498
+			if (empty($algolia_index_name)) {
499
+				add_option(
500
+					ALGOWOO_DB_OPTION . INDEX_NAME,
501
+					'Change me'
502
+				);
503
+			}
504
+			set_transient(self::PLUGIN_TRANSIENT, true);
505
+		}
506
+
507
+		/**
508
+		 * The actions to execute when the plugin is deactivated.
509
+		 *
510
+		 * @return void
511
+		 */
512
+		public static function deactivate_plugin()
513
+		{
514
+			delete_transient(self::PLUGIN_TRANSIENT);
515
+		}
516
+	}
517 517
 }
518 518
\ No newline at end of file
Please login to merge, or discard this patch.
algolia-woo-indexer.php 1 patch
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -18,31 +18,31 @@
 block discarded – undo
18 18
 /**
19 19
  * Abort if this file is called directly
20 20
  */
21
-if ( ! defined( 'ABSPATH' ) ) {
21
+if ( ! defined('ABSPATH')) {
22 22
 	exit;
23 23
 }
24 24
 
25 25
 /**
26 26
  * Main class file
27 27
  */
28
-require_once plugin_dir_path( __FILE__ ) . '/classes/class-algolia-woo-indexer.php';
28
+require_once plugin_dir_path(__FILE__) . '/classes/class-algolia-woo-indexer.php';
29 29
 
30 30
 /**
31 31
  * Class for checking plugin requirements
32 32
  */
33
-require_once plugin_dir_path( __FILE__ ) . '/classes/class-check-requirements.php';
33
+require_once plugin_dir_path(__FILE__) . '/classes/class-check-requirements.php';
34 34
 
35 35
 /**
36 36
  * Class for verifying nonces
37 37
  */
38
-require_once plugin_dir_path( __FILE__ ) . '/classes/class-verify-nonces.php';
38
+require_once plugin_dir_path(__FILE__) . '/classes/class-verify-nonces.php';
39 39
 
40 40
 /**
41 41
  * Class for sending products
42 42
  */
43
-require_once plugin_dir_path( __FILE__ ) . '/classes/class-send-products.php';
43
+require_once plugin_dir_path(__FILE__) . '/classes/class-send-products.php';
44 44
 
45 45
 $algowooindexer = \Algowoo\Algolia_Woo_Indexer::get_instance();
46 46
 
47
-register_activation_hook( __FILE__, array( $algowooindexer, 'activate_plugin' ) );
48
-register_deactivation_hook( __FILE__, array( $algowooindexer, 'deactivate_plugin' ) );
47
+register_activation_hook(__FILE__, array($algowooindexer, 'activate_plugin'));
48
+register_deactivation_hook(__FILE__, array($algowooindexer, 'deactivate_plugin'));
Please login to merge, or discard this patch.
classes/class-send-products.php 2 patches
Indentation   +187 added lines, -187 removed lines patch added patch discarded remove patch
@@ -15,14 +15,14 @@  discard block
 block discarded – undo
15 15
  * Abort if this file is called directly
16 16
  */
17 17
 if (!defined('ABSPATH')) {
18
-    exit;
18
+	exit;
19 19
 }
20 20
 
21 21
 /**
22 22
  * Include plugin file if function is_plugin_active does not exist
23 23
  */
24 24
 if (!function_exists('is_plugin_active')) {
25
-    require_once(ABSPATH . '/wp-admin/includes/plugin.php');
25
+	require_once(ABSPATH . '/wp-admin/includes/plugin.php');
26 26
 }
27 27
 
28 28
 /**
@@ -45,193 +45,193 @@  discard block
 block discarded – undo
45 45
 define('ALGOLIA_API_KEY', '_admin_api_key');
46 46
 
47 47
 if (!class_exists('Algolia_Send_Products')) {
48
-    /**
49
-     * Algolia WooIndexer main class
50
-     */
51
-    class Algolia_Send_Products
52
-    {
53
-        const PLUGIN_NAME      = 'Algolia Woo Indexer';
54
-        const PLUGIN_TRANSIENT = 'algowoo-plugin-notice';
55
-
56
-        /**
57
-         * The Algolia instance
58
-         *
59
-         * @var \Algolia\AlgoliaSearch\SearchClient
60
-         */
61
-        private static $algolia = null;
62
-
63
-        /**
64
-         * Check if we can connect to Algolia, if not, handle the exception, display an error and then return
65
-         */
66
-        public static function can_connect_to_algolia()
67
-        {
68
-            try {
69
-                self::$algolia->listApiKeys();
70
-            } catch (\Algolia\AlgoliaSearch\Exceptions\UnreachableException $error) {
71
-                add_action(
72
-                    'admin_notices',
73
-                    function () {
74
-                        echo '<div class="error notice">
48
+	/**
49
+	 * Algolia WooIndexer main class
50
+	 */
51
+	class Algolia_Send_Products
52
+	{
53
+		const PLUGIN_NAME      = 'Algolia Woo Indexer';
54
+		const PLUGIN_TRANSIENT = 'algowoo-plugin-notice';
55
+
56
+		/**
57
+		 * The Algolia instance
58
+		 *
59
+		 * @var \Algolia\AlgoliaSearch\SearchClient
60
+		 */
61
+		private static $algolia = null;
62
+
63
+		/**
64
+		 * Check if we can connect to Algolia, if not, handle the exception, display an error and then return
65
+		 */
66
+		public static function can_connect_to_algolia()
67
+		{
68
+			try {
69
+				self::$algolia->listApiKeys();
70
+			} catch (\Algolia\AlgoliaSearch\Exceptions\UnreachableException $error) {
71
+				add_action(
72
+					'admin_notices',
73
+					function () {
74
+						echo '<div class="error notice">
75 75
 							  <p>' . esc_html__('An error has been encountered. Please check your application ID and API key. ', 'algolia-woo-indexer') . '</p>
76 76
 							</div>';
77
-                    }
78
-                );
79
-                return;
80
-            }
81
-        }
82
-
83
-        /**
84
-         * Get sale price or regular price based on product type
85
-         *
86
-         * @param  mixed $product Product to check   
87
-         * @return array ['sale_price' => $sale_price,'regular_price' => $regular_price] Array with regular price and sale price
88
-         */
89
-        public static function get_product_type_price($product)
90
-        {
91
-            $sale_price = 0;
92
-            $regular_price = 0;
93
-            if ($product->is_type('simple')) {
94
-                $sale_price     =  $product->get_sale_price();
95
-                $regular_price  =  $product->get_regular_price();
96
-            } elseif ($product->is_type('variable')) {
97
-                $sale_price     =  $product->get_variation_sale_price('min', true);
98
-                $regular_price  =  $product->get_variation_regular_price('max', true);
99
-            }
100
-            return array(
101
-                'sale_price' => $sale_price,
102
-                'regular_price' => $regular_price
103
-            );
104
-        }
105
-
106
-        /**
107
-         * Send WooCommerce products to Algolia
108
-         *
109
-         * @param Int $id Product to send to Algolia if we send only a single product
110
-         * @return void
111
-         */
112
-        public static function send_products_to_algolia($id = '')
113
-        {
114
-            /**
115
-             * Remove classes from plugin URL and autoload Algolia with Composer
116
-             */
117
-
118
-            $base_plugin_directory = str_replace('classes', '', dirname(__FILE__));
119
-            require_once $base_plugin_directory . '/vendor/autoload.php';
120
-
121
-            /**
122
-             * Fetch the required variables from the Settings API
123
-             */
124
-
125
-            $algolia_application_id = get_option(ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID);
126
-            $algolia_application_id = is_string($algolia_application_id) ? $algolia_application_id : CHANGE_ME;
127
-
128
-            $algolia_api_key        = get_option(ALGOWOO_DB_OPTION . ALGOLIA_API_KEY);
129
-            $algolia_api_key        = is_string($algolia_api_key) ? $algolia_api_key : CHANGE_ME;
130
-
131
-            $algolia_index_name     = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
132
-            $algolia_index_name        = is_string($algolia_index_name) ? $algolia_index_name : CHANGE_ME;
133
-
134
-            /**
135
-             * Display admin notice and return if not all values have been set
136
-             */
137
-
138
-            Algolia_Check_Requirements::check_algolia_input_values($algolia_application_id, $algolia_api_key, $algolia_index_name);
139
-
140
-            /**
141
-             * Initiate the Algolia client
142
-             */
143
-            self::$algolia = \Algolia\AlgoliaSearch\SearchClient::create($algolia_application_id, $algolia_api_key);
144
-
145
-            /**
146
-             * Check if we can connect, if not, handle the exception, display an error and then return
147
-             */
148
-            self::can_connect_to_algolia();
149
-
150
-            /**
151
-             * Initialize the search index and set the name to the option from the database
152
-             */
153
-            $index = self::$algolia->initIndex($algolia_index_name);
154
-
155
-            /**
156
-             * Setup arguments for sending all products to Algolia
157
-             *
158
-             * Limit => -1 means we send all products
159
-             */
160
-            $arguments = array(
161
-                'status'   => 'publish',
162
-                'limit'    => -1,
163
-                'paginate' => false,
164
-            );
165
-
166
-            /**
167
-             * Setup arguments for sending only a single product
168
-             */
169
-            if (isset($id) && '' !== $id) {
170
-                $arguments = array(
171
-                    'status'   => 'publish',
172
-                    'include'  => array($id),
173
-                    'paginate' => false,
174
-                );
175
-            }
176
-
177
-            /**
178
-             * Fetch all products from WooCommerce
179
-             *
180
-             * @see https://docs.woocommerce.com/wc-apidocs/function-wc_get_products.html
181
-             */
182
-            $products =
183
-                /** @scrutinizer ignore-call */
184
-                wc_get_products($arguments);
185
-
186
-            if (empty($products)) {
187
-                return;
188
-            }
189
-            $records = array();
190
-            $record  = array();
191
-
192
-            foreach ($products as $product) {
193
-                /**
194
-                 * Set sale price or regular price based on product type
195
-                 */
196
-                $product_type_price = self::get_product_type_price($product);
197
-                $sale_price = $product_type_price['sale_price'];
198
-                $regular_price = $product_type_price['regular_price']; 
199
-
200
-                /**
201
-                 * Extract image from $product->get_image()
202
-                 */
203
-                preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $product->get_image(), $result);
204
-                $product_image = array_pop($result);
205
-                /**
206
-                 * Build the record array using the information from the WooCommerce product
207
-                 */
208
-                $record['objectID']                      = $product->get_id();
209
-                $record['product_name']                  = $product->get_name();
210
-                $record['product_image']                 = $product_image;
211
-                $record['short_description']             = $product->get_short_description();
212
-                $record['regular_price']                 = $regular_price;
213
-                $record['sale_price']                    = $sale_price;
214
-                $record['on_sale']                       = $product->is_on_sale();
215
-                $records[] = $record;
216
-            }
217
-            wp_reset_postdata();
218
-
219
-            /**
220
-             * Send the information to Algolia and save the result
221
-             * If result is NullResponse, print an error message
222
-             */
223
-            $result = $index->saveObjects($records);
224
-
225
-            if ('Algolia\AlgoliaSearch\Response\NullResponse' === get_class($result)) {
226
-                wp_die(esc_html__('No response from the server. Please check your settings and try again', 'algolia_woo_indexer_settings'));
227
-            }
228
-
229
-            /**
230
-             * Display success message
231
-             */
232
-            echo '<div class="notice notice-success is-dismissible">
77
+					}
78
+				);
79
+				return;
80
+			}
81
+		}
82
+
83
+		/**
84
+		 * Get sale price or regular price based on product type
85
+		 *
86
+		 * @param  mixed $product Product to check   
87
+		 * @return array ['sale_price' => $sale_price,'regular_price' => $regular_price] Array with regular price and sale price
88
+		 */
89
+		public static function get_product_type_price($product)
90
+		{
91
+			$sale_price = 0;
92
+			$regular_price = 0;
93
+			if ($product->is_type('simple')) {
94
+				$sale_price     =  $product->get_sale_price();
95
+				$regular_price  =  $product->get_regular_price();
96
+			} elseif ($product->is_type('variable')) {
97
+				$sale_price     =  $product->get_variation_sale_price('min', true);
98
+				$regular_price  =  $product->get_variation_regular_price('max', true);
99
+			}
100
+			return array(
101
+				'sale_price' => $sale_price,
102
+				'regular_price' => $regular_price
103
+			);
104
+		}
105
+
106
+		/**
107
+		 * Send WooCommerce products to Algolia
108
+		 *
109
+		 * @param Int $id Product to send to Algolia if we send only a single product
110
+		 * @return void
111
+		 */
112
+		public static function send_products_to_algolia($id = '')
113
+		{
114
+			/**
115
+			 * Remove classes from plugin URL and autoload Algolia with Composer
116
+			 */
117
+
118
+			$base_plugin_directory = str_replace('classes', '', dirname(__FILE__));
119
+			require_once $base_plugin_directory . '/vendor/autoload.php';
120
+
121
+			/**
122
+			 * Fetch the required variables from the Settings API
123
+			 */
124
+
125
+			$algolia_application_id = get_option(ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID);
126
+			$algolia_application_id = is_string($algolia_application_id) ? $algolia_application_id : CHANGE_ME;
127
+
128
+			$algolia_api_key        = get_option(ALGOWOO_DB_OPTION . ALGOLIA_API_KEY);
129
+			$algolia_api_key        = is_string($algolia_api_key) ? $algolia_api_key : CHANGE_ME;
130
+
131
+			$algolia_index_name     = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
132
+			$algolia_index_name        = is_string($algolia_index_name) ? $algolia_index_name : CHANGE_ME;
133
+
134
+			/**
135
+			 * Display admin notice and return if not all values have been set
136
+			 */
137
+
138
+			Algolia_Check_Requirements::check_algolia_input_values($algolia_application_id, $algolia_api_key, $algolia_index_name);
139
+
140
+			/**
141
+			 * Initiate the Algolia client
142
+			 */
143
+			self::$algolia = \Algolia\AlgoliaSearch\SearchClient::create($algolia_application_id, $algolia_api_key);
144
+
145
+			/**
146
+			 * Check if we can connect, if not, handle the exception, display an error and then return
147
+			 */
148
+			self::can_connect_to_algolia();
149
+
150
+			/**
151
+			 * Initialize the search index and set the name to the option from the database
152
+			 */
153
+			$index = self::$algolia->initIndex($algolia_index_name);
154
+
155
+			/**
156
+			 * Setup arguments for sending all products to Algolia
157
+			 *
158
+			 * Limit => -1 means we send all products
159
+			 */
160
+			$arguments = array(
161
+				'status'   => 'publish',
162
+				'limit'    => -1,
163
+				'paginate' => false,
164
+			);
165
+
166
+			/**
167
+			 * Setup arguments for sending only a single product
168
+			 */
169
+			if (isset($id) && '' !== $id) {
170
+				$arguments = array(
171
+					'status'   => 'publish',
172
+					'include'  => array($id),
173
+					'paginate' => false,
174
+				);
175
+			}
176
+
177
+			/**
178
+			 * Fetch all products from WooCommerce
179
+			 *
180
+			 * @see https://docs.woocommerce.com/wc-apidocs/function-wc_get_products.html
181
+			 */
182
+			$products =
183
+				/** @scrutinizer ignore-call */
184
+				wc_get_products($arguments);
185
+
186
+			if (empty($products)) {
187
+				return;
188
+			}
189
+			$records = array();
190
+			$record  = array();
191
+
192
+			foreach ($products as $product) {
193
+				/**
194
+				 * Set sale price or regular price based on product type
195
+				 */
196
+				$product_type_price = self::get_product_type_price($product);
197
+				$sale_price = $product_type_price['sale_price'];
198
+				$regular_price = $product_type_price['regular_price']; 
199
+
200
+				/**
201
+				 * Extract image from $product->get_image()
202
+				 */
203
+				preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $product->get_image(), $result);
204
+				$product_image = array_pop($result);
205
+				/**
206
+				 * Build the record array using the information from the WooCommerce product
207
+				 */
208
+				$record['objectID']                      = $product->get_id();
209
+				$record['product_name']                  = $product->get_name();
210
+				$record['product_image']                 = $product_image;
211
+				$record['short_description']             = $product->get_short_description();
212
+				$record['regular_price']                 = $regular_price;
213
+				$record['sale_price']                    = $sale_price;
214
+				$record['on_sale']                       = $product->is_on_sale();
215
+				$records[] = $record;
216
+			}
217
+			wp_reset_postdata();
218
+
219
+			/**
220
+			 * Send the information to Algolia and save the result
221
+			 * If result is NullResponse, print an error message
222
+			 */
223
+			$result = $index->saveObjects($records);
224
+
225
+			if ('Algolia\AlgoliaSearch\Response\NullResponse' === get_class($result)) {
226
+				wp_die(esc_html__('No response from the server. Please check your settings and try again', 'algolia_woo_indexer_settings'));
227
+			}
228
+
229
+			/**
230
+			 * Display success message
231
+			 */
232
+			echo '<div class="notice notice-success is-dismissible">
233 233
 					 	<p>' . esc_html__('Product(s) sent to Algolia.', 'algolia-woo-indexer') . '</p>
234 234
 				  		</div>';
235
-        }
236
-    }
235
+		}
236
+	}
237 237
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -14,14 +14,14 @@  discard block
 block discarded – undo
14 14
 /**
15 15
  * Abort if this file is called directly
16 16
  */
17
-if (!defined('ABSPATH')) {
17
+if ( ! defined('ABSPATH')) {
18 18
     exit;
19 19
 }
20 20
 
21 21
 /**
22 22
  * Include plugin file if function is_plugin_active does not exist
23 23
  */
24
-if (!function_exists('is_plugin_active')) {
24
+if ( ! function_exists('is_plugin_active')) {
25 25
     require_once(ABSPATH . '/wp-admin/includes/plugin.php');
26 26
 }
27 27
 
@@ -44,7 +44,7 @@  discard block
 block discarded – undo
44 44
 define('ALGOLIA_APPLICATION_ID', '_application_id');
45 45
 define('ALGOLIA_API_KEY', '_admin_api_key');
46 46
 
47
-if (!class_exists('Algolia_Send_Products')) {
47
+if ( ! class_exists('Algolia_Send_Products')) {
48 48
     /**
49 49
      * Algolia WooIndexer main class
50 50
      */
@@ -70,7 +70,7 @@  discard block
 block discarded – undo
70 70
             } catch (\Algolia\AlgoliaSearch\Exceptions\UnreachableException $error) {
71 71
                 add_action(
72 72
                     'admin_notices',
73
-                    function () {
73
+                    function() {
74 74
                         echo '<div class="error notice">
75 75
 							  <p>' . esc_html__('An error has been encountered. Please check your application ID and API key. ', 'algolia-woo-indexer') . '</p>
76 76
 							</div>';
@@ -91,11 +91,11 @@  discard block
 block discarded – undo
91 91
             $sale_price = 0;
92 92
             $regular_price = 0;
93 93
             if ($product->is_type('simple')) {
94
-                $sale_price     =  $product->get_sale_price();
95
-                $regular_price  =  $product->get_regular_price();
94
+                $sale_price     = $product->get_sale_price();
95
+                $regular_price  = $product->get_regular_price();
96 96
             } elseif ($product->is_type('variable')) {
97
-                $sale_price     =  $product->get_variation_sale_price('min', true);
98
-                $regular_price  =  $product->get_variation_regular_price('max', true);
97
+                $sale_price     = $product->get_variation_sale_price('min', true);
98
+                $regular_price  = $product->get_variation_regular_price('max', true);
99 99
             }
100 100
             return array(
101 101
                 'sale_price' => $sale_price,
@@ -129,7 +129,7 @@  discard block
 block discarded – undo
129 129
             $algolia_api_key        = is_string($algolia_api_key) ? $algolia_api_key : CHANGE_ME;
130 130
 
131 131
             $algolia_index_name     = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
132
-            $algolia_index_name        = is_string($algolia_index_name) ? $algolia_index_name : CHANGE_ME;
132
+            $algolia_index_name = is_string($algolia_index_name) ? $algolia_index_name : CHANGE_ME;
133 133
 
134 134
             /**
135 135
              * Display admin notice and return if not all values have been set
Please login to merge, or discard this patch.