Passed
Push — master ( 551ced...c681ac )
by Daniel
03:38 queued 01:44
created

Algolia_Woo_Indexer::deactivate_plugin()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
/**
3
 * Main Algolia Woo Indexer class
4
 * Called from main plugin file algolia-woo-indexer.php
5
 *
6
 * @package algolia-woo-indexer
7
 */
8
9
namespace Algowoo;
10
11
use \Algowoo\Algolia_Check_Requirements as Algolia_Check_Requirements;
12
use \Algowoo\Algolia_Verify_Nonces as Algolia_Verify_Nonces;
13
14
/**
15
 * Abort if this file is called directly
16
 */
17
if ( ! defined( 'ABSPATH' ) ) {
18
	exit;
19
}
20
21
/**
22
 * Include plugin file if function is_plugin_active does not exist
23
 */
24
if (! function_exists('is_plugin_active')) {
25
    require_once(ABSPATH . '/wp-admin/includes/plugin.php');
26
}
27
28
/**
29
 * Define the plugin version and the database table name
30
 */
31
define( 'ALGOWOO_DB_OPTION', '_algolia_woo_indexer' );
32
define( 'ALGOWOO_CURRENT_DB_VERSION', '0.3' );
33
34
/**
35
 * Define application constants
36
 */
37
define( 'CHANGE_ME', 'change me' );
38
39
/**
40
 * Database table names
41
 */
42
define('INDEX_NAME', '_index_name');
43
define('AUTOMATICALLY_SEND_NEW_PRODUCTS', '_automatically_send_new_products');
44
define('ALGOLIA_APPLICATION_ID', '_application_id');
45
define('ALGOLIA_API_KEY', '_admin_api_key');
46
47
if (! class_exists('Algolia_Woo_Indexer')) {
48
    /**
49
     * Algolia WooIndexer main class
50
     */
51
    class Algolia_Woo_Indexer
52
    {
53
        const PLUGIN_NAME      = 'Algolia Woo Indexer';
54
        const PLUGIN_TRANSIENT = 'algowoo-plugin-notice';
55
56
        /**
57
         * Class instance
58
         *
59
         * @var object
60
         */
61
        private static $instance;
62
63
        /**
64
         * The plugin URL
65
         *
66
         * @var string
67
         */
68
        private static $plugin_url = '';
69
70
        /**
71
         * The Algolia instance
72
         *
73
         * @var \Algolia\AlgoliaSearch\SearchClient
74
         */
75
        private static $algolia = null;
76
77
        /**
78
         * Class constructor
79
         *
80
         * @return void
81
         */
82
        public function __construct()
83
        {
84
            $this->init();
85
        }
86
87
        /**
88
         * Setup sections and fields to store and retrieve values from Settings API
89
         *
90
         * @return void
91
         */
92
        public static function setup_settings_sections()
93
        {
94
            /**
95
            * Setup arguments for settings sections and fields
96
            *
97
            * @see https://developer.wordpress.org/reference/functions/register_setting/
98
            */
99
            if (is_admin()) {
100
                $arguments = array(
101
                    'type'              => 'string',
102
                    'sanitize_callback' => 'settings_fields_validate_options',
103
                    'default'           => null,
104
                );
105
                register_setting('algolia_woo_options', 'algolia_woo_options', $arguments);
106
107
                /**
108
                 * Make sure we reference the instance of the current class by using self::get_instance()
109
                 * This way we can setup the correct callback function for add_settings_section and add_settings_field
110
                 */
111
                $algowooindexer = self::get_instance();
112
113
                /**
114
                 * Add our necessary settings sections and fields
115
                 */
116
                add_settings_section(
117
                    'algolia_woo_indexer_main',
118
                    esc_html__('Algolia Woo Plugin Settings', 'algolia-woo-indexer'),
119
                    array( $algowooindexer, 'algolia_woo_indexer_section_text' ),
120
                    'algolia_woo_indexer'
121
                );
122
                add_settings_field(
123
                    'algolia_woo_indexer_application_id',
124
                    esc_html__('Application ID', 'algolia-woo-indexer'),
125
                    array( $algowooindexer, 'algolia_woo_indexer_application_id_output' ),
126
                    'algolia_woo_indexer',
127
                    'algolia_woo_indexer_main'
128
                );
129
                add_settings_field(
130
                    'algolia_woo_indexer_admin_api_key',
131
                    esc_html__('Admin API Key', 'algolia-woo-indexer'),
132
                    array( $algowooindexer, 'algolia_woo_indexer_admin_api_key_output' ),
133
                    'algolia_woo_indexer',
134
                    'algolia_woo_indexer_main'
135
                );
136
                add_settings_field(
137
                    'algolia_woo_indexer_index_name',
138
                    esc_html__('Index name (will be created if not existing)', 'algolia-woo-indexer'),
139
                    array( $algowooindexer, 'algolia_woo_indexer_index_name_output' ),
140
                    'algolia_woo_indexer',
141
                    'algolia_woo_indexer_main'
142
                );
143
                add_settings_field(
144
                    'algolia_woo_indexer_automatically_send_new_products',
145
                    esc_html__('Automatically index new products', 'algolia-woo-indexer'),
146
                    array( $algowooindexer, 'algolia_woo_indexer_automatically_send_new_products_output' ),
147
                    'algolia_woo_indexer',
148
                    'algolia_woo_indexer_main'
149
                );
150
            }
151
        }
152
153
        /**
154
         * Output for admin API key field
155
         *
156
         * @see https://developer.wordpress.org/reference/functions/wp_nonce_field/
157
         *
158
         * @return void
159
         */
160
        public static function algolia_woo_indexer_admin_api_key_output()
161
        {
162
            $api_key = get_option(ALGOWOO_DB_OPTION . ALGOLIA_API_KEY);
163
            $api_key = is_string($api_key) ? $api_key : CHANGE_ME;
164
165
            wp_nonce_field('algolia_woo_indexer_admin_api_nonce_action', 'algolia_woo_indexer_admin_api_nonce_name');
166
167
            echo "<input id='algolia_woo_indexer_admin_api_key' name='algolia_woo_indexer_admin_api_key[key]'
168
				type='text' value='" . esc_attr($api_key) . "' />";
169
        }
170
171
        /**
172
         * Output for application ID field
173
         *
174
         * @return void
175
         */
176
        public static function algolia_woo_indexer_application_id_output()
177
        {
178
            $application_id = get_option(ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID);
179
            $application_id = is_string($application_id) ? $application_id : CHANGE_ME;
180
181
            echo "<input id='algolia_woo_indexer_application_id' name='algolia_woo_indexer_application_id[id]'
182
				type='text' value='" . esc_attr($application_id) . "' />";
183
        }
184
185
        /**
186
         * Output for index name field
187
         *
188
         * @return void
189
         */
190
        public static function algolia_woo_indexer_index_name_output()
191
        {
192
            $index_name = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
193
            $index_name = is_string($index_name) ? $index_name : CHANGE_ME;
194
195
            echo "<input id='algolia_woo_indexer_index_name' name='algolia_woo_indexer_index_name[name]'
196
				type='text' value='" . esc_attr($index_name) . "' />";
197
        }
198
        
199
        /**
200
         * Output for checkbox to check if we automatically send new products to Algolia
201
         *
202
         * @return void
203
         */
204
        public static function algolia_woo_indexer_automatically_send_new_products_output()
205
        {
206
            /**
207
             * Sanitization is not really needed as the variable is not directly echoed
208
             * But I have still done it to be 100% safe
209
             */
210
            $automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
211
            $automatically_send_new_products = (! empty($automatically_send_new_products)) ? 1 : 0; ?>
212
			<input id="algolia_woo_indexer_automatically_send_new_products" name="algolia_woo_indexer_automatically_send_new_products[checked]"
213
			type="checkbox" <?php checked(1, $automatically_send_new_products); ?> />
214
			<?php
215
        }
216
217
        /**
218
         * Section text for plugin settings section text
219
         *
220
         * @return void
221
         */
222
        public static function algolia_woo_indexer_section_text()
223
        {
224
            echo esc_html__('Enter your settings here', 'algolia-woo-indexer');
225
        }
226
227
        /**
228
         * Check if we are going to send products by verifying send products nonce
229
         *
230
         * @return void
231
         */
232
        public static function maybe_send_products()
233
        {
234
            if (true === Algolia_Verify_Nonces::verify_send_products_nonce()) {
235
                self::send_products_to_algolia();
236
            }
237
        }
238
239
        /**
240
         * Initialize class, setup settings sections and fields
241
         *
242
         * @return void
243
         */
244
        public static function init()
245
        {
246
247
            /**
248
             * Fetch the option to see if we are going to automatically send new products
249
             */
250
            $automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
251
252
            /**
253
             * Check that we have the minimum versions required and all of the required PHP extensions
254
             */
255
            Algolia_Check_Requirements::check_unmet_requirements();
256
257
            if (! Algolia_Check_Requirements::algolia_wp_version_check() || ! Algolia_Check_Requirements::algolia_php_version_check()) {
258
                add_action(
259
                    'admin_notices',
260
                    function () {
261
                        echo '<div class="error notice">
262
                                  <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>
263
                                </div>';
264
                    }
265
                );
266
            }
267
268
            $ob_class = get_called_class();
269
270
            /**
271
             * Setup translations
272
             */
273
            add_action('plugins_loaded', array( $ob_class, 'load_textdomain' ));
274
275
            /**
276
             * Add actions to setup admin menu
277
             */
278
            if (is_admin()) {
279
                add_action('admin_menu', array( $ob_class, 'admin_menu' ));
280
                add_action('admin_init', array( $ob_class, 'setup_settings_sections' ));
281
                add_action('admin_init', array( $ob_class, 'update_settings_options' ));
282
                add_action('admin_init', array( $ob_class, 'maybe_send_products' ));
283
284
                /**
285
                 * Register hook to automatically send new products if the option is set
286
                 */
287
288
                if ('1' === $automatically_send_new_products) {
289
                    add_action('save_post', array( $ob_class, 'send_new_product_to_algolia' ), 10, 3);
290
                }
291
292
                self::$plugin_url = admin_url('options-general.php?page=algolia-woo-indexer-settings');
293
294
                if (! is_plugin_active('woocommerce/woocommerce.php')) {
295
                    add_action(
296
                        'admin_notices',
297
                        function () {
298
                            echo '<div class="error notice">
299
								  <p>' . esc_html__('WooCommerce plugin must be enabled for Algolia Woo Indexer to work.', 'algolia-woo-indexer') . '</p>
300
								</div>';
301
                        }
302
                    );
303
                }
304
            }
305
        }
306
307
        /**
308
         * Send a single product to Algolia once a new product has been published
309
         *
310
         * @param int   $post_id ID of the product.
311
         * @param array $post Post array.
312
         *
313
         * @return void
314
         */
315
        public static function send_new_product_to_algolia($post_id, $post)
316
        {
317
            if ('publish' !== $post->post_status || 'product' !== $post->post_type) {
318
                return;
319
            }
320
            self::send_products_to_algolia($post_id);
321
        }
322
323
        /**
324
         * Verify nonces before we update options and settings
325
         * Also retrieve the value from the send_products_to_algolia hidden field to check if we are sending products to Algolia
326
         *
327
         * @return void
328
         */
329
        public static function update_settings_options()
330
        {
331
            Algolia_Verify_Nonces::verify_settings_nonce();
332
333
            /**
334
             * Do not proceed if we are going to send products
335
             */
336
            if (true === Algolia_Verify_Nonces::verify_send_products_nonce()) {
337
                return;
338
            }
339
340
            /**
341
             * Filter the application id, api key, index name and verify that the input is an array
342
             *
343
             * @see https://www.php.net/manual/en/function.filter-input.php
344
             */
345
            $post_application_id             = filter_input(INPUT_POST, 'algolia_woo_indexer_application_id', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
346
            $post_api_key                    = filter_input(INPUT_POST, 'algolia_woo_indexer_admin_api_key', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
347
            $post_index_name                 = filter_input(INPUT_POST, 'algolia_woo_indexer_index_name', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
348
            $automatically_send_new_products = filter_input(INPUT_POST, 'algolia_woo_indexer_automatically_send_new_products', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
349
350
            /**
351
             * Properly sanitize text fields before updating data
352
             *
353
             * @see https://developer.wordpress.org/reference/functions/sanitize_text_field/
354
             */
355
            $filtered_application_id = sanitize_text_field($post_application_id['id']);
356
            $filtered_api_key        = sanitize_text_field($post_api_key['key']);
357
            $filtered_index_name     = sanitize_text_field($post_index_name['name']);
358
359
            /**
360
             * Sanitizing by setting the value to either 1 or 0
361
             */
362
            $filtered_automatically_send_new_products = (! empty($automatically_send_new_products)) ? 1 : 0;
363
364
            /**
365
             * Values have been filtered and sanitized
366
             * Check if set and not empty and update the database
367
             *
368
             * @see https://developer.wordpress.org/reference/functions/update_option/
369
             */
370
            if (isset($filtered_application_id) && (! empty($filtered_application_id))) {
371
                update_option(
372
                    ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID,
373
                    $filtered_application_id
374
                );
375
            }
376
377
            if (isset($filtered_api_key) && (! empty($filtered_api_key))) {
378
                update_option(
379
                    ALGOWOO_DB_OPTION . ALGOLIA_API_KEY,
380
                    $filtered_api_key
381
                );
382
            }
383
384
            if (isset($filtered_index_name) && (! empty($filtered_index_name))) {
385
                update_option(
386
                    ALGOWOO_DB_OPTION . INDEX_NAME,
387
                    $filtered_index_name
388
                );
389
            }
390
391
            if (isset($filtered_automatically_send_new_products) && (! empty($filtered_automatically_send_new_products))) {
392
                update_option(
393
                    ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS,
394
                    $filtered_automatically_send_new_products
395
                );
396
            }
397
        }
398
399
		/**
400
		 * Check if values are empty and display error notice if not all values have been set
401
		 *
402
		 *  @param string $algolia_application_id Algolia application ID.
403
		 * 	@param string $algolia_api_key Algolia API key.
404
		 * 	@param string $algolia_index_name Algolia index name.
405
		 * 
406
		 */
407
		public static function check_algolia_input_values($algolia_application_id, $algolia_api_key, $algolia_index_name )
408
		{	
409
			if (empty($algolia_application_id) || empty($algolia_api_key || empty($algolia_index_name))) {
410
                add_action(
411
                    'admin_notices',
412
                    function () {
413
                        echo '<div class="error notice">
414
							  <p>' . esc_html__('All settings need to be set for the plugin to work.', 'algolia-woo-indexer') . '</p>
415
							</div>';
416
                    }
417
                );
418
                return;
419
            }
420
        }
421
422
		/**
423
		 * Check if we can connect to Algolia, if not, handle the exception, display an error and then return
424
		 */
425
		public static function can_connect_to_algolia() {
426
            try {
427
                self::$algolia->listApiKeys();
428
            } catch (\Algolia\AlgoliaSearch\Exceptions\UnreachableException $error) {
429
                add_action(
430
                    'admin_notices',
431
                    function () {
432
                        echo '<div class="error notice">
433
							  <p>' . esc_html__('An error has been encountered. Please check your application ID and API key. ', 'algolia-woo-indexer') . '</p>
434
							</div>';
435
                    }
436
                );
437
                return;
438
            }
439
		}
440
441
        /**
442
         * Send WooCommerce products to Algolia
443
         *
444
         * @param Int $id Product to send to Algolia if we send only a single product
445
         * @return void
446
         */
447
        public static function send_products_to_algolia($id = '')
448
        {
449
            /**
450
             * Remove classes from plugin URL and autoload Algolia with Composer
451
             */
452
453
            $base_plugin_directory = str_replace('classes', '', dirname(__FILE__));
454
            require_once $base_plugin_directory . '/vendor/autoload.php';
455
456
            /**
457
             * Fetch the required variables from the Settings API
458
             */
459
460
            $algolia_application_id = get_option(ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID);
461
            $algolia_api_key        = get_option(ALGOWOO_DB_OPTION . ALGOLIA_API_KEY);
462
            $algolia_index_name     = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
463
464
			/**
465
             * Display admin notice and return if not all values have been set
466
             */
467
468
			self::check_algolia_input_values($algolia_application_id, $algolia_api_key, $algolia_index_name);
0 ignored issues
show
Bug introduced by
It seems like $algolia_api_key can also be of type false; however, parameter $algolia_api_key of Algowoo\Algolia_Woo_Inde..._algolia_input_values() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

468
			self::check_algolia_input_values($algolia_application_id, /** @scrutinizer ignore-type */ $algolia_api_key, $algolia_index_name);
Loading history...
Bug introduced by
It seems like $algolia_index_name can also be of type false; however, parameter $algolia_index_name of Algowoo\Algolia_Woo_Inde..._algolia_input_values() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

468
			self::check_algolia_input_values($algolia_application_id, $algolia_api_key, /** @scrutinizer ignore-type */ $algolia_index_name);
Loading history...
Bug introduced by
It seems like $algolia_application_id can also be of type false; however, parameter $algolia_application_id of Algowoo\Algolia_Woo_Inde..._algolia_input_values() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

468
			self::check_algolia_input_values(/** @scrutinizer ignore-type */ $algolia_application_id, $algolia_api_key, $algolia_index_name);
Loading history...
469
470
            /**
471
             * Initiate the Algolia client
472
             */
473
            self::$algolia = \Algolia\AlgoliaSearch\SearchClient::create($algolia_application_id, $algolia_api_key);
474
475
			/**
476
             * Check if we can connect, if not, handle the exception, display an error and then return
477
             */
478
			self::can_connect_to_algolia();
479
			
480
			/**
481
             * Initialize the search index and set the name to the option from the database
482
             */
483
            $index = self::$algolia->initIndex($algolia_index_name);
484
485
            /**
486
             * Setup arguments for sending all products to Algolia
487
             *
488
             * Limit => -1 means we send all products
489
             */
490
            $arguments = array(
491
                'status'   => 'publish',
492
                'limit'    => -1,
493
                'paginate' => false,
494
            );
495
496
            /**
497
            * Setup arguments for sending only a single product
498
            */
499
            if (isset($id) && '' !== $id) {
500
                $arguments = array(
501
                    'status'   => 'publish',
502
                    'include'  => array( $id ),
503
                    'paginate' => false,
504
                );
505
            }
506
507
            /**
508
             * Fetch all products from WooCommerce
509
             *
510
             * @see https://docs.woocommerce.com/wc-apidocs/function-wc_get_products.html
511
             */
512
            $products = /** @scrutinizer ignore-call */ wc_get_products($arguments);
513
514
            if ( empty( $products ) ) {
515
                return;
516
            }
517
            $records = array();
518
            $record  = array();
519
520
            foreach ($products as $product) {
521
                /**
522
                 * Extract image from $product->get_image()
523
                 */
524
                preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $product->get_image(), $result);
525
                $product_image = array_pop($result);
526
                /**
527
                 * Build the record array using the information from the WooCommerce product
528
                 */
529
                $record['objectID']          = $product->get_id();
530
                $record['product_name']      = $product->get_name();
531
                $record['product_image']     = $product_image;
532
                $record['short_description'] = $product->get_short_description();
533
                $record['regular_price']     = $product->get_regular_price();
534
                $record['sale_price']        = $product->get_sale_price();
535
                $record['on_sale']           = $product->is_on_sale();
536
537
                $records[] = $record;
538
            }
539
            wp_reset_postdata();
540
541
            /**
542
             * Send the information to Algolia and save the result
543
             * If result is NullResponse, print an error message
544
             */
545
            $result = $index->saveObjects($records);
546
547
            if ('Algolia\AlgoliaSearch\Response\NullResponse' === get_class($result)) {
548
				wp_die(esc_html__('No response from the server. Please check your settings and try again', 'algolia_woo_indexer_settings'));    
549
            }
550
551
            /**
552
             * Display success message
553
             */
554
            echo '<div class="notice notice-success is-dismissible">
555
					 	<p>' . esc_html__('Product(s) sent to Algolia.', 'algolia-woo-indexer') . '</p>
556
				  		</div>';
557
        }
558
559
        /**
560
         * Sanitize input in settings fields and filter through regex to accept only a-z and A-Z
561
         *
562
         * @param string $input Settings text data
563
         * @return array
564
         */
565
        public static function settings_fields_validate_options($input)
566
        {
567
            $valid         = array();
568
            $valid['name'] = preg_replace(
569
                '/[^a-zA-Z\s]/',
570
                '',
571
                $input['name']
572
            );
573
            return $valid;
574
        }
575
576
        /**
577
         * Load text domain for translations
578
         *
579
         * @return void
580
         */
581
        public static function load_textdomain()
582
        {
583
            load_plugin_textdomain('algolia-woo-indexer', false, basename(dirname(__FILE__)) . '/languages/');
584
        }
585
586
        /**
587
         * Add the new menu to settings section so that we can configure the plugin
588
         *
589
         * @return void
590
         */
591
        public static function admin_menu()
592
        {
593
            add_submenu_page(
594
                'options-general.php',
595
                esc_html__('Algolia Woo Indexer Settings', 'algolia-woo-indexer'),
596
                esc_html__('Algolia Woo Indexer Settings', 'algolia-woo-indexer'),
597
                'manage_options',
598
                'algolia-woo-indexer-settings',
599
                array( get_called_class(), 'algolia_woo_indexer_settings' )
600
            );
601
        }
602
603
        /**
604
         * Display settings and allow user to modify them
605
         *
606
         * @return void
607
         */
608
        public static function algolia_woo_indexer_settings()
609
        {
610
            /**
611
            * Verify that the user can access the settings page
612
            */
613
            if (! current_user_can('manage_options')) {
614
                wp_die(esc_html__('Action not allowed.', 'algolia_woo_indexer_settings'));
615
            } ?>
616
			<div class="wrap">
617
				<h1><?php esc_html__('Algolia Woo Indexer Settings', 'algolia-woo-indexer'); ?></h1>
618
				<form action="<?php echo esc_url(self::$plugin_url); ?>" method="POST">
619
			<?php
620
            settings_fields('algolia_woo_options');
621
            do_settings_sections('algolia_woo_indexer');
622
            submit_button('', 'primary wide'); ?>
623
				</form>
624
				<form action="<?php echo esc_url(self::$plugin_url); ?>" method="POST">
625
					<?php wp_nonce_field('send_products_to_algolia_nonce_action', 'send_products_to_algolia_nonce_name'); ?>
626
					<input type="hidden" name="send_products_to_algolia" id="send_products_to_algolia" value="true" />
627
					<?php submit_button(esc_html__('Send products to Algolia', 'algolia_woo_indexer_settings'), 'primary wide', '', false); ?>
628
				</form>
629
			</div>
630
			<?php
631
        }
632
633
        /**
634
         * Get active object instance
635
         *
636
         * @return object
637
         */
638
        public static function get_instance()
639
        {
640
            if (! self::$instance) {
641
                self::$instance = new Algolia_Woo_Indexer();
642
            }
643
            return self::$instance;
644
        }
645
646
        /**
647
         * The actions to execute when the plugin is activated.
648
         *
649
         * @return void
650
         */
651
        public static function activate_plugin()
652
        {
653
654
            /**
655
             * Set default values for options if not already set
656
             */
657
            $automatically_send_new_products = get_option(ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS);
658
            $algolia_application_id          = get_option(ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID);
659
            $algolia_api_key                 = get_option(ALGOWOO_DB_OPTION . ALGOLIA_API_KEY);
660
            $algolia_index_name              = get_option(ALGOWOO_DB_OPTION . INDEX_NAME);
661
            
662
            if (empty($automatically_send_new_products)) {
663
                add_option(
664
                    ALGOWOO_DB_OPTION . AUTOMATICALLY_SEND_NEW_PRODUCTS,
665
                    '0'
666
                );
667
            }
668
669
            if (empty($algolia_application_id)) {
670
                add_option(
671
                    ALGOWOO_DB_OPTION . ALGOLIA_APPLICATION_ID,
672
                    'Change me'
673
                );
674
            }
675
676
            if (empty($algolia_api_key)) {
677
                add_option(
678
                    ALGOWOO_DB_OPTION . ALGOLIA_API_KEY,
679
                    'Change me'
680
                );
681
            }
682
683
            if (empty($algolia_index_name)) {
684
                add_option(
685
                    ALGOWOO_DB_OPTION . INDEX_NAME,
686
                    'Change me'
687
                );
688
            }
689
            set_transient(self::PLUGIN_TRANSIENT, true);
690
        }
691
692
        /**
693
         * The actions to execute when the plugin is deactivated.
694
         *
695
         * @return void
696
         */
697
        public static function deactivate_plugin()
698
        {
699
            delete_transient(self::PLUGIN_TRANSIENT);
700
        }
701
    }
702
}