# woo-mailerlite/2.0.2/includes/classes/settings/MailerLiteSettings.php

MailerLite – WooCommerce integration, version 2.0.2. 425 lines.

- Page: https://pluginprobe.com/plugins/woo-mailerlite/2.0.2/code/includes/classes/settings/MailerLiteSettings.php
- Raw: https://pluginprobe.com/plugins/woo-mailerlite/2.0.2/raw/includes/classes/settings/MailerLiteSettings.php
- Modified: 2023-09-19T07:12:44+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/woo-mailerlite/2.0.2/code/includes/classes/settings/MailerLiteSettings.php#L10-L20`.

```php
<?php

namespace MailerLite\Includes\Classes\Settings;

use MailerLite\Includes\Classes\Singleton;
use MailerLite\Includes\Shared\Api\PlatformAPI;
use MailerLite\Includes\Classes\Data\TrackingData;
use MailerLite\Includes\Classes\Process\ProductProcess;
use MailerLite\Includes\Shared\Api\ApiType;

class MailerLiteSettings extends Singleton
{
    /**
     * Class instance
     * @var $instance
     */
    protected static $instance;

    /**
     * Check if checkout action is active
     * woo_ml_is_active
     * @return mixed
     */
    public function isActive()
    {
        $api_status = $this->getMlOption('api_status', false);

        return $api_status;
    }

    /**
     * Get settings option
     * woo_ml_get_option
     *
     * @param $key
     * @param null $default
     *
     * @return null
     */
    public function getMlOption($key, $default = null)
    {
        $settings = get_option('woocommerce_mailerlite_settings');

        return (isset($settings[$key])) ? $settings[$key] : $default;
    }

    /**
     *
     * woo_ml_sync_failed
     * @return bool
     */
    public function syncFailed()
    {
        return get_option('woo_ml_resource_sync_failed') || (get_option('woo_ml_sync_active') && ! get_transient('woo_ml_resource_sync_in_progress'));
    }

    /**
     * Get settings group options
     * woo_ml_settings_get_group_options
     * @return array
     */
    public function getGroupOptions()
    {

        if ( ! is_admin()) {
            return [];
        }

        $options = array();

        $groups = mailerlite_wp_get_groups();

        if (is_array($groups) && sizeof($groups) > 0) {
            $options[''] = __('Select group', 'woo-mailerlite');
            foreach ($groups as $group) {
                if (isset($group['id']) && isset($group['name'])) {
                    $options[$group['id']] = $group['name'];
                }
            }
        } else {
            $options[''] = __('No groups found', 'woo-mailerlite');
        }

        return $options;
    }

    /**
     * Map array in correct structure for WooCommerce Integration
     * woo_ml_remap_list
     * @return array
     */
    public function remapList($products)
    {

        return array_map('strval', array_keys($products));
    }

    /**
     * Creates the ml_data table and sets the ml_data_table option flag
     * woo_create_mailer_data_table
     */
    public function createMailerDataTable()
    {

        global $wpdb;

        $charset_collate = $wpdb->get_charset_collate();

        $table = $wpdb->prefix . 'ml_data';

        $sql = "CREATE TABLE $table (
            data_name varchar(45) NOT NULL,
            data_value text NOT NULL,
            PRIMARY KEY  (data_name)
        ) $charset_collate;";

        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);

        update_option('ml_data_table', 1);

    }

    /**
     * Set WooCommerce MailerLite settings options
     * woo_ml_set_option
     *
     * @param $key
     * @param $value
     *
     * @return bool
     */
    public function setOption($key, $value)
    {
        $settings = get_option('woocommerce_mailerlite_settings');

        if (isset($settings[$key])) {
            $settings[$key] = $value;
        }

        update_option('woocommerce_mailerlite_settings', $settings);

        return true;
    }

    /**
     * Remove product from ignored
     * woo_ml_remove_ignore_product
     *
     * @param $product_id
     */
    public function removeIgnoreProduct($product_id)
    {

        delete_post_meta($product_id, '_woo_ml_product_ignored');
    }

    /**
     * Mark product as ignored for automation
     * woo_ml_ignore_product
     *
     * @param $product_id
     */
    public function ignoreProduct($product_id)
    {

        add_post_meta($product_id, '_woo_ml_product_ignored', true, true);
    }

    /**
     * Mark category as being tracked
     * woo_ml_complete_category_tracking
     *
     * @param $category_id
     * @param $ecommerce_id
     */
    public function completeCategoryTracking($category_id, $ecommerce_id)
    {

        add_term_meta($category_id, '_woo_ml_category_tracked', $ecommerce_id, true);
    }

    /**
     * Mark product as being tracked
     * woo_ml_complete_product_tracking
     *
     * @param $product_id
     */
    public function completeProductTracking($product_id)
    {

        add_post_meta($product_id, '_woo_ml_product_tracked', true, true);
    }

    /**
     * Check whether product was already tracked or not
     * woo_ml_product_tracking_completed
     *
     * @param $product_id
     *
     * @return bool
     */
    public function checkProductTracking($product_id)
    {

        $product_tracked = get_post_meta($product_id, '_woo_ml_product_tracked', true);

        return ('1' == $product_tracked) ? true : false;
    }

    /**
     * Get subscriber fields from customer data
     * woo_ml_get_subscriber_fields_from_customer_data
     *
     * @param $customer_data
     *
     * @return array
     */
    public function getSubscriberFieldsFromCustomerData($customer_data)
    {

        $subscriber_fields = array();

        if ( ! empty($customer_data['first_name'])) {
            $subscriber_fields['name'] = $customer_data['first_name'];
        }

        if ( ! empty($customer_data['last_name'])) {
            $subscriber_fields['last_name'] = $customer_data['last_name'];
        }

        if ( ! empty($customer_data['company'])) {
            $subscriber_fields['company'] = $customer_data['company'];
        }

        if ( ! empty($customer_data['city'])) {
            $subscriber_fields['city'] = $customer_data['city'];
        }

        if ( ! empty($customer_data['postcode'])) {
            $subscriber_fields['zip'] = $customer_data['postcode'];
        }

        if ( ! empty($customer_data['state'])) {
            $subscriber_fields['state'] = $customer_data['state'];
        }

        if ( ! empty($customer_data['country'])) {
            $subscriber_fields['country'] = $customer_data['country'];
        }

        if ( ! empty($customer_data['phone'])) {
            $subscriber_fields['phone'] = $customer_data['phone'];
        }

        return $subscriber_fields;
    }

    public function createGroup($name)
    {
        $mailerliteClient = new PlatformAPI(MAILERLITE_WP_API_KEY);
        $response         = $mailerliteClient->createGroup($name);
        if ($mailerliteClient->responseCode() === 200 || $mailerliteClient->responseCode() === 201) {
            set_transient('ml-admin-group-created', 'Group created successfully', 5);
        } else {
            set_transient('ml-admin-notice-invalid-key', 'Error: ' . $mailerliteClient->responseCode(), 5);
        }
        return $response;
    }

    public function updateSettings($data)
    {
        $data['resubscribe']           = $data['resubscribe'] ?? 'no';
        $data['additional_sub_fields'] = $data['additional_sub_fields'] ?? 'no';
        $data['checkout_preselect']    = $data['checkout_preselect'] ?? 'no';
        $data['disable_checkout_sync'] = $data['disable_checkout_sync'] ?? 'no';
        $data['popups']                = $data['popups'] ?? 'no';
        $data['auto_update_plugin']    = $data['auto_update_plugin'] ?? 'no';
        $data['double_optin']          = $data['double_optin'] ?? 'no';
        $data['checkout_hide']         = $data['checkout_hide'] ?? 'no';
        $data['checkout']              = $data['checkout'] ?? 'no';
        $data['checkout_label']        = (isset($data['checkout_label']) && ($data['checkout_label'] != '')) ? $data['checkout_label'] : 'Yes, I want to receive your newsletter.';
        $settings           = get_option('woocommerce_mailerlite_settings', null);
        $data['api_key']    = $settings['api_key'] ?? null;
        $data['api_status'] = $settings['api_status'] ?? false;

        if ( ! isset($data['group'])) {
            $data['group'] = $settings['group'] ?? '';
        }

        if ( ! isset($data['ignore_product_list'])) {
            $data['ignore_product_list'] = $settings['ignore_product_list'] ?? '';
        }

        $setup_integration        = false;
        $revoke_integration_setup = false;

        if (isset($data['api_key'])) {

            $api_status = $settings['api_status'];
            $api_key    = $settings['api_key'];

            if (empty($data['api_key'])) {

                $api_status               = false;
                $revoke_integration_setup = true;
                delete_option('woo_ml_key');
                delete_option('ml_account_authenticated');
            } elseif ( ! empty($data['api_key']) && $data['api_key'] != $api_key) {
                $validation = ApiSettings::getInstance()->validateApiKey(esc_html($data['api_key']));
                $api_status = ($validation);

                if ($api_status) {
                    $setup_integration = true;
                    update_option('woo_ml_key', $data['api_key']);
                }
                $data['api_key'] = "...." . substr($data['api_key'], -4);
            }

            // Store API validation
            $data['api_status'] = $api_status;

        }

        // Handle Double Opt-In
        if (isset($data['double_optin'])) {

            if ($data['double_optin'] != $settings['double_optin']) {

                $double_optin = ('yes' === $data['double_optin']) ? true : false;

                $data['double_optin'] = mailerlite_wp_set_double_optin($double_optin) === true ? 'yes' : 'no';
            }
        }

        // Handle Additional Subscriber
        if (isset($data['additional_sub_fields'])) {
            $sub_fields_enabled = $data['additional_sub_fields'] === 'yes' ? 1 : 0;
            update_option('mailerlite_additional_sub_fields', $sub_fields_enabled);

            if ($sub_fields_enabled) {
                woo_ml_setup_additional_sub_fields();
            }
        }

        // Handle Do not add subscribers on checkout
        if (isset($data['disable_checkout_sync'])) {
            $disable_checkout_sync = $data['disable_checkout_sync'] === 'yes' ? 1 : 0;
            update_option('mailerlite_disable_checkout_sync', $disable_checkout_sync);
        }

        if (isset($data['popups']) && ($data['popups'] !== $settings['popups'])) {
            $popups_disabled = $data['popups'] === 'no' ? 1 : 0;
            update_option('mailerlite_popups_disabled', $popups_disabled);
        }

        if (isset($data['auto_update_plugin'])) {
            $auto_update_enabled = $data['auto_update_plugin'] === 'yes' ? 1 : 0;
            update_option('woo_ml_auto_update', $auto_update_enabled);
        }

        // save shop to our db for ecommerce tracking
        // hiding the ck and cs values once save performed as we don't need to have them saved here anyway
        // we only need them for backwards connection from classic api to plugin to get products and categories.
        if (( ! empty($data['consumer_key']) && ! empty($data['consumer_secret'])) || (int)get_option('woo_mailerlite_platform',
                1) === ApiType::CURRENT) {

            if ((int)get_option('woo_mailerlite_platform', 1) === ApiType::CURRENT) {
                $data['consumer_key']    = '';
                $data['consumer_secret'] = '';
            }

            $resubscribe = isset($data['resubscribe']) && ($data['resubscribe'] === 'yes') ? 1 : 0;

            $result = ShopSettings::getInstance()->wpSetConsumerData(
                $data['consumer_key'],
                $data['consumer_secret'],
                $data['group'],
                $resubscribe,
                $data['ignore_product_list']);
            if (isset($result['errors']) || $result === false) {
                $data['consumer_key']    = '';
                $data['consumer_secret'] = '';
                do_action('mailerlite_alerts', $result);
                set_transient('invalid_consumer_keys', $result['errors'], 10);
            } else {
                $data['consumer_key']    = '....' . substr($data['consumer_key'], -4);
                $data['consumer_secret'] = '....' . substr($data['consumer_secret'], -4);

                //update product ignore list in ml_data
                $ignore_list = ProductProcess::getInstance()->getIgnoredProductList();

                $products = array_filter($ignore_list, function ($k) use ($data) {
                    return in_array($k, $data['ignore_product_list']);
                }, ARRAY_FILTER_USE_KEY);

                TrackingData::getInstance()->updateData($products);
            }
        }

        // Handle integration setup
        if ($revoke_integration_setup) {
            woo_ml_revoke_integration_setup();
        }

        if ($setup_integration) {
            woo_ml_setup_integration();
        }
        do_action('mailerlite_alerts', [
            'success' => 'Your settings have been saved.'
        ]);

        return $data;
    }

    public function softReset()
    {
        do {
            $finished = \MailerLite\Includes\Classes\Settings\ResetSettings::getInstance()->resetTrackedResources(true);
        } while (!$finished);
        ShopSettings::getInstance()->toggleShopConnection(0);
        header('Location: ' . admin_url('admin.php?page=mailerlite'));
    }
}

```
