403Webshell
Server IP : 54.36.91.62  /  Your IP : 216.73.216.15
Web Server : Apache
System : Linux webm021.cluster127.gra.hosting.ovh.net 6.18.39-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Tue Jul 21 12:03:15 CEST 2026 x86_64
User : uxhactp ( 169076)
PHP Version : 7.4.33
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/uxhactp/www/wp-content/plugins/onecom-vcache/onecom-addons/inc/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/uxhactp/www/wp-content/plugins/onecom-vcache/onecom-addons/inc/lib//validator.php
<?php
/**
 * Name: Validator
 * Version: 0.2.6
 * Copyright: one.com
 * Any type of modification/duplication/distribution of this script is strictly prohibited.
 */

// Essential declarations
if (!defined('OC_VALIDATOR_DOMAIN')) {
    define('OC_VALIDATOR_DOMAIN', 'validator');
}
if (!defined('OC_DOMAIN_NAME')) {
    define('OC_DOMAIN_NAME', isset($_SERVER['ONECOM_DOMAIN_NAME']) ? $_SERVER['ONECOM_DOMAIN_NAME'] : '');
}
if (!defined('OC_WP_API')) {
    define('OC_WP_API', empty($_SERVER['ONECOM_WP_ADDONS_API']) ? '' : $_SERVER['ONECOM_WP_ADDONS_API']);
}

// Formal Sonar string repetition fixes
if (!defined('OC_GENERIC_ERR_MSG')) {
    define('OC_GENERIC_ERR_MSG', __("Some error occurred, please reload the page and try again.", OC_VALIDATOR_DOMAIN));
}
if (!defined('OC_GENERIC_LEARN_MORE')) {
    define('OC_GENERIC_LEARN_MORE', __('Learn more', OC_VALIDATOR_DOMAIN));
}
if (!defined('OC_MAIN_GUIDE_STR')) {
    define('OC_MAIN_GUIDE_STR', 'main_guide');
}
if (!defined('OC_DISC_GUIDE_STR')) {
    define('OC_DISC_GUIDE_STR', 'discouraged_guide');
}
if (!defined('OC_COOKIE_GUIDE_STR')) {
    define('OC_COOKIE_GUIDE_STR', 'cookie_guide');
}
if (!defined('OC_STG_GUIDE_STR')) {
    define('OC_STG_GUIDE_STR', 'staging_guide');
}
if (!defined('OC_PRM_PAGE_STR')) {
    define('OC_PRM_PAGE_STR', 'premium_page');
}
if (!defined('OC_ERR_STR')) {
    define('OC_ERR_STR', 'error');
}
if (!defined('OC_SUCCESS_STR')) {
    define('OC_SUCCESS_STR', 'success');
}
if (!defined('OC_THM_STR')) {
    define('OC_THM_STR', 'theme');
}
if (!defined('OC_THMS_STR')) {
    define('OC_THMS_STR', 'themes');
}
if (!defined('OC_FTR_STR')) {
    define('OC_FTR_STR', 'feature');
}
if (!defined('OC_AUTHOR_STR')) {
    define('OC_AUTHOR_STR', 'Author');
}
if (!defined('OC_NAME_STR')) {
    define('OC_NAME_STR', 'Name');
}
if (!defined('OC_ITM_COUNT_STR')) {
    define('OC_ITM_COUNT_STR', 'item_count');
}
if (!defined('OC_PUSH_STATS')) {
    define('OC_PUSH_STATS', 'OCPushStats');
}
if (!defined('PREMIUM')) {
    define('PREMIUM', 'premium');
}


// Item Identifiers
if (!defined('OC_ID_OCI')) {
    define('OC_ID_OCI', 'ONE_CLICK_INSTALL');
}
if (!defined('OC_ID_PRM_THMS')) {
    define('OC_ID_PRM_THMS', 'PREMIUM_THEMES');
}
if (!defined('OC_ID_STD_THMS')) {
    define('OC_ID_STD_THMS', 'STANDARD_THEMES');
}
if (!defined('ONECOM_WP_CORE_VERSION')) {
    global $wp_version;
    define('ONECOM_WP_CORE_VERSION', $wp_version);
}
if (!defined('ONECOM_PHP_VERSION')) {
    define('ONECOM_PHP_VERSION', phpversion());
}

/* send validation headers with api calls */
add_filter('http_request_args', 'oc_add_http_headers', 10, 2);

/* TOTP lib */

use OTPHP\TOTP;
use ParagonIE\ConstantTime\Base32;

$filepath = __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($filepath)) {
    include $filepath;

}


add_action('plugins_loaded', 'oc_validator_load_textdomain');
if (!function_exists('oc_validator_load_textdomain')) {
    function oc_validator_load_textdomain()
    {

        // load english tranlsations [as] if any unsupported language is selected in WP-Admin
        if (strpos(get_locale(), 'en_') === 0) {
            load_textdomain(OC_VALIDATOR_DOMAIN, dirname(__FILE__) . '/languages/validator-en_US.mo');
        } else if ( strpos( get_locale(), 'pt_BR' ) === 0 ) {
            load_textdomain( OC_VALIDATOR_DOMAIN, dirname( __FILE__ ) . '/languages/validator-pt_PT.mo' );
        } else if ( strpos( get_locale(), 'fi' ) === 0 ) {
            load_textdomain( OC_VALIDATOR_DOMAIN, dirname( __FILE__ ) . '/languages/validator-fi_FI.mo' );
        } else {
            load_plugin_textdomain(OC_VALIDATOR_DOMAIN, false, trailingslashit(dirname(plugin_basename(__FILE__))) . trailingslashit('languages'));
        }
    }
}

// fallback check for MIDDLEWARE_URL, define it if not already defined
if (!defined('MIDDLEWARE_URL')) {
    $api_version = 'v1.0';
    if (!empty(OC_WP_API)) {
        $ONECOM_WP_ADDONS_API = OC_WP_API;
    } elseif (defined('ONECOM_WP_ADDONS_API') && ONECOM_WP_ADDONS_API != '' && ONECOM_WP_ADDONS_API) {
        $ONECOM_WP_ADDONS_API = ONECOM_WP_ADDONS_API;
    } else {
        $ONECOM_WP_ADDONS_API = 'https://wpapi.one.com/';
    }
    $ONECOM_WP_ADDONS_API = rtrim($ONECOM_WP_ADDONS_API, '/');
    define('MIDDLEWARE_URL', $ONECOM_WP_ADDONS_API . '/api/' . $api_version);
}

if (!function_exists('oc_generate_totp')) {
    function oc_generate_totp($valid_for = 30, $length = 6)
    {
        $fileString = '{}';
        if (file_exists('/run/domain.conf')) {
            $fileString = trim(file_get_contents("/run/domain.conf"));
        } else if (file_exists('/run/mail.conf')) {
            $fileString = trim(file_get_contents("/run/mail.conf"));
        }

        $domainInfo = json_decode($fileString);
        $hash = 'oc';
        if (isset($domainInfo->hash) && $domainInfo->hash) {
            $hash = $domainInfo->hash;
        }
        $mySecret = trim(Base32::encodeUpper($hash));
        $otp = TOTP::create($mySecret, $valid_for, 'sha1', $length);

        return $otp->now();
    }
}

if (!function_exists('oc_validate_domain')) {
    function oc_validate_domain($force = false, $domain = null)
    {
        // check transient
        $oc_validate_domain = get_site_transient('oc_validate_domain');
        if ( ! empty( $oc_validate_domain ) && ! $force ) {
            return $oc_validate_domain;
        }
        if (!$domain) {
            $domain = isset($_SERVER['ONECOM_DOMAIN_NAME']) ? $_SERVER['ONECOM_DOMAIN_NAME'] : false;
        }
        if (!$domain) {
            return [
                'data' => null,
                'error' => 'Empty domain',
                'success' => false,
            ];
        }
        $totp = oc_generate_totp();
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => MIDDLEWARE_URL . '/features',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => array(
                "Cache-Control: no-cache",
                "X-Onecom-Client-Domain: " . $domain,
                "X-TOTP: " . $totp,
                "cache-control: no-cache",
            ),
        ));
        $response = curl_exec($curl);
        $response = json_decode($response, true);
        $err = curl_error($curl);
        curl_close($curl);

        if ($err) {
            return [
                'data' => null,
                'error' => __("Some error occurred, please reload the page and try again.", "validator"),
                'success' => false,
            ];
        } else {
            // save transient for next calls
            if (is_blog_installed()) {
                set_site_transient('oc_validate_domain', $response, 12 * HOUR_IN_SECONDS);
            }
            // return latest response
            return $response;
        }
    }
}
add_action('admin_init', 'oc_set_premi_flag');
if (!function_exists('oc_set_premi_flag')) {
    function oc_set_premi_flag($force = false)
    {
        $oc_premi_flag = get_site_transient('oc_premi_flag');
        if ((!$oc_premi_flag) || $force) {
            $oc_premi_flag = oc_validate_domain($force);
            if (isset($oc_premi_flag['data']) && $oc_premi_flag['data']) {
                if (is_blog_installed()) {
                    set_site_transient('oc_premi_flag', $oc_premi_flag['data'], 12 * HOUR_IN_SECONDS);
                }
            }
        }

        if (!isset($oc_premi_flag['data'])) {
            $oc_premi_flag['data'] = $oc_premi_flag;
        }

        return $oc_premi_flag;
    }
}
// hook onto WP CRON to check transients
add_action('wp_version_check', 'oc_set_premi_flag_cron');
if (!function_exists('oc_set_premi_flag_cron')) {
    function oc_set_premi_flag_cron()
    {
        oc_set_premi_flag(true);
    }
}

/**
 * Feature mapping
 */
if (!function_exists('oc_pm_features')) {
    function oc_pm_features($key, $val)
    {
        $operations = [
            'ins' => OC_ID_OCI,
            'stg' => 'STAGING_ENV',
            'stheme' => OC_ID_STD_THMS,
            'ptheme' => OC_ID_PRM_THMS,
            'pcache' => 'PERFORMANCE_CACHE',
            'mwp' => 'MWP_ADDON',
        ];
        if (!array_key_exists($key, $operations)) {
            return false;
        }

        return in_array($operations[$key], (array)$val);
    }
}

/**
 * Function oc_get_logline()
 * Function to prepare log data to be sent to WPAPI
 *
 * @param array $post_data An array of varialbles intercepted from $_POST.
 *
 * @return string
 * @since v0.1.3
 */
if (!function_exists('oc_get_logline')) {
    function oc_get_logline($post_data)
    {
        $is_premium = strip_tags($post_data['isPremium']);
        $message = "isPremium:$is_premium";

        $state = 'state';

        $feature_condition = (isset($post_data[OC_FTR_STR]) && ($post_data[OC_FTR_STR] != ''));
        $theme_condition = (isset($post_data[OC_THM_STR]) && ($post_data[OC_THM_STR] != ''));

        if (!($feature_condition || $theme_condition)) {
            return false;
        }

        if (isset($post_data[OC_FTR_STR]) && $post_data[OC_FTR_STR] != '') {
            $feature = strip_tags($post_data[OC_FTR_STR]);
            $message .= ";feature:$feature";
        }

        if (isset($post_data[$state]) && $post_data[$state] != '') {
            $state = filter_var($post_data[$state], FILTER_SANITIZE_NUMBER_INT);
            $message .= ";state:$state";
        }

        if (isset($post_data['featureAction']) && $post_data['featureAction'] != '') {
            $feature_action = strip_tags($post_data['featureAction']);
            $message .= ";featureAction:$feature_action";
        }

        if (isset($post_data[OC_THM_STR]) && ($post_data[OC_THM_STR] != '')) {
            $theme = strip_tags($post_data[OC_THM_STR]);
            $message .= ";theme:$theme";
        }

        //append the available features at the end
        $feature_array = oc_set_premi_flag(true);
        $feature_string = implode('|', $feature_array['data']);
        $feature_string = rtrim($feature_string, '|');

        return $message . ";features_available:$feature_string";
    }
}

/**
 * Function to handle validation by ajax
 */
add_action('wp_ajax_oc_validate_action', 'oc_validate_action_cb');

if (!function_exists('oc_validate_action_cb')) {
    function oc_validate_action_cb()
    {
        $data = isset($_POST['operation']) ? strip_tags($_POST['operation']) : '';
        $action_type = isset($_POST['actionType']) ? strip_tags($_POST['actionType']) : '';
        $result = oc_set_premi_flag(true);
        $status = 'status';
        $data_str = 'data';
        $referrer = '';

        if (isset($_POST['referrer'])) {

            $referrer = strpos($_POST['referrer'], 'step=theme') ? 'install_wizard' : 'themes_page';
        }

        if ($result[$data_str] == null && $result[OC_SUCCESS_STR] != 1) {
            $response = [
                $status => '',
                'msg' => OC_GENERIC_ERR_MSG . ' [' . $result[OC_ERR_STR] . ']'
            ];
        } else if (oc_pm_features($data, $result[$data_str]) || in_array('MWP_ADDON', $result[$data_str])) {
            $response = [
                $status => OC_SUCCESS_STR,
            ];
        } else {
            $response = [
                $status => 'failed'
            ];
        }

        // push stats

        if ($action_type != '' && class_exists(OC_PUSH_STATS)) {

            $premium = (empty($_POST["isPremium"]) || $_POST["isPremium"] !== 'true') ? 0 : 1;
            $slug = isset($_POST['theme']) ? $_POST['theme'] : '';


            if ($action_type === 'wppremium_install_theme' && isset($_POST['theme'])) {
                (class_exists(OC_PUSH_STATS) ? \OCPushStats::push_stats_event_themes_and_plugins('install', 'theme', "$slug", $referrer, array(PREMIUM => "$premium")) : '');

            } elseif ($action_type === 'wppremium_preview_theme' && isset($_POST['theme'])) {
                (class_exists(OC_PUSH_STATS) ? \OCPushStats::push_stats_event_themes_and_plugins('preview', 'theme', "$slug", $referrer, array(PREMIUM => "$premium")) : '');

            } elseif ($action_type === 'wppremium_click_upgrade' && $_POST['feature'] === 'theme') {

                (class_exists(OC_PUSH_STATS) ? \OCPushStats::push_stats_event_themes_and_plugins('click_upgrade', 'theme', $_POST['theme'], $referrer, array(PREMIUM => "$premium")) : '');

            } elseif ($action_type === 'wppremium_close_upgrade' && $_POST['feature'] === 'theme') {

                (class_exists(OC_PUSH_STATS) ? \OCPushStats::push_stats_event_themes_and_plugins('close_upgrade', 'theme', $_POST['theme'], $referrer, array(PREMIUM => "$premium")) : '');

            }


        }
        echo wp_send_json($response);
        wp_die();
    }
}

/* validator scripts */
add_action('admin_print_scripts', function () {
    ?>
    <script>
        /**
         * Top Notifier
         */
        function oc_alert(msg = '', type = '<?php echo OC_ERR_STR; ?>', time = 5000) {

            jQuery('.onecom-notifier').html(msg).attr('type', type).addClass('show');
            setTimeout(function () {
                jQuery('.onecom-notifier').removeClass('show');
                jQuery('.loading-overlay.fullscreen-loader').removeClass('show');
            }, time);
        }
    </script>

    <script type="text/javascript">
        function oc_validate_action(action) {

            return jQuery.ajax({
                url: ajaxurl,
                type: "POST",
                dataType: "JSON",
                data: {
                    action: 'oc_validate_action',
                    operation: action
                },
                error: function (xhr, textStatus, errorThrown) {
                    oc_alert("<?php echo htmlentities(OC_GENERIC_ERR_MSG); ?>", OC_ERR_STR, 5000)
                }
            });
        }
    </script>
    <script>
        /**
         * Function oc_trigger_log()
         * Function to trigger log after a feature is activated successfully.
         * This checks the domain's eligibility for a feature redundantly and this can be improved.
         * @param: Object data - an object consisting of following keys
         * actionType, isPremium, feature, featureAction, state and theme
         */

        function oc_trigger_log(logData) {
            jQuery.ajax({
                url: ajaxurl,
                type: "POST",
                dataType: "JSON",
                data: {
                    action: 'oc_validate_action',
                    actionType: logData.actionType,
                    isPremium: logData.isPremium,
                    feature: logData.feature,
                    theme: logData.theme || null,
                    featureAction: logData.featureAction || null,
                    referrer: logData.referrer || null,
                    state: logData.state || null
                },
                error: function (xhr, textStatus, errorThrown) {
                    console.log("Some error occured during logging!");
                }
            });
        }
    </script>
    <?php
}, 9999);

/**
 * function to add Modal HTML in wp-admin footer
 */
add_action('wp_ajax_show_plugin_dependent_popup', 'onecom_upgrade_modal');
add_action('admin_footer', 'onecom_upgrade_modal');
if (!function_exists('onecom_upgrade_modal')) {
    function onecom_upgrade_modal()
    {
        $type = null;
        $current_screen = get_current_screen();
        $thm_screens = array(OC_THMS_STR, 'one-com_page_onecom-wp-themes');
        if (in_array($current_screen->base, $thm_screens)) {
            $type = OC_THMS_STR;
        }

        if(isset($_POST['action']) && $_POST['action'] === 'show_plugin_dependent_popup') {
            $dependent_plugin = prepare_dependent_plugin_popup($_POST['popupContent']);
            wp_send_json(array('success' => true,"data" => $dependent_plugin));
        } else { ?>
            <div id="oc_um_overlay" style="display:none;">
                <div id="oc_um_wrapper">
                    <div class="oc-bg-white">
                        <div id="oc_um_head">
                            <h5>
                                <?php echo __('Make your WordPress more powerful', OC_VALIDATOR_DOMAIN); ?>
                            </h5>
                        </div>
                        <div id="oc_um_body">
                            <?php
                            echo __('Spend less time worrying about your site and more time growing your business with one.com Managed WordPress.', OC_VALIDATOR_DOMAIN);
                            echo '<ul>' . '<li><span>' . __('Quick fix or ignore recommendations', OC_VALIDATOR_DOMAIN) . '</span></li>';
                            echo '<li><span>' . __('Get better performance with Performance Cache and CDN', OC_VALIDATOR_DOMAIN) . '</span></li>';
                            echo '<li><span>' . __('Get notified about security with Vulnerability Monitoring', OC_VALIDATOR_DOMAIN) . '</span></li>';
                            echo '<li><span>' . __('Get helpful tips with Advanced Error Page', OC_VALIDATOR_DOMAIN) . '</span></li>';
                            echo '<li><span>' . __('Get access to our Premium themes', OC_VALIDATOR_DOMAIN) . '</span></li>';
                            echo '<li><span>' . __('Increase your authentication security', OC_VALIDATOR_DOMAIN) . '</span></li>';
                            echo '<li><span>' . __('Host on our WordPress servers built for speed', OC_VALIDATOR_DOMAIN) . '</span></li>';
                            echo '</ul>';
                            ?>
                        </div>

                        <div id="oc_um_footer">
                            <a href="<?php echo oc_upgrade_link('upgrade_modal'); ?>"
                               target="_blank"
                               class="oc_um_btn oc_up_btn"><?php echo __('Free upgrade', OC_VALIDATOR_DOMAIN); ?></a>
                            <a href="javascript:;"
                               onclick="jQuery('#oc_um_overlay').hide();jQuery('.loading-overlay.fullscreen-loader').removeClass('show');"
                               class="oc_um_btn oc_cancel_btn"><?php echo __('Cancel', OC_VALIDATOR_DOMAIN); ?></a>
                        </div>
                    </div>
                </div>
            </div>
        <?php } ?>
        <style>
            #oc_um_overlay {
                position: fixed;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                background: rgba(0, 0, 0, 0.2);
                z-index: 99999;
            }

            .oc-bg-white {
                background: #fff;
                padding: 40px;
                width: calc(100% - 80px);
            }

            #oc_phased-in {
                background: #fff;
                margin: 8px 0 0 0;
                padding: 24px 40px;
                display: flex;
                align-items: center;
            }

            #oc_um_body ul {
                font-family: "Open Sans", sans-serif;
                font-size: 16px;
                font-style: normal;
                font-weight: 600;
                line-height: 24px;
                letter-spacing: 0px;
            }

            #oc_um_body ul li {
                margin: 20px 0;
            }
            #oc_um_body .extra-footerspace {
                height: 15px;
            }
            #oc_um_body ul li > span {
                display:table-cell;
            }
            #oc_phased-in p {
                font-family: "Open Sans", sans-serif;
                font-size: 14px;
                font-style: normal;
                font-weight: 400;
                line-height: 22px;
                letter-spacing: 0px;
                margin: 0 0 0 24px;
            }

            #oc_um_wrapper {
                margin: 0;
                position: fixed;
                top: 50%;
                left: 50%;
                -ms-transform: translate(-50%, -50%);
                transform: translate(-50%, -50%);
                -webkit-transform: translate(-50%, -50%);
                min-width: 504px;
                min-height: 246px;
                color: #3C3C3C;
                -webkit-font-smoothing: antialiased;
                -moz-osx-font-smoothing: grayscale;
                box-shadow: 0 0 12px rgba(0, 0, 0, .4);
                display: flex;
                justify-content: space-between;
                align-items: flex-start;
                flex-direction: column;
                max-width:578px;
                width:100%;
            }

            .oc_notice {
                border: 1px solid #0078C8;
                padding: 0 12px;
                padding-left: 32px;
                padding-right: 32px;
                background: #D9EBF7;
                margin: 40px 0 0 0;
                display: flex;
                align-items: center;
                justify-content: flex-end;
            }

            .oc_notice div:first-child {
                margin-right: auto;
            }

            .oc_notice div {
                margin: 12px 0;
                padding: 11px 0;
            }

            /* new button design */
            div#oc_um_footer a {
                text-decoration: none;
                display: inline-block;
            }

            div#oc_um_footer a.cancel-plugin-dependent,
            div#oc_um_footer a.upgrade-plugin-dependent
            {
                font-style: normal;
                font-weight: 500;
                font-size: 14px;
                line-height: 22px;
                letter-spacing: 0.25px;
                padding: 12px 24px;
                border-radius: 100px;
                font-family: "Open Sans", sans-serif;
            }
            div#oc_um_footer a.cancel-plugin-dependent {
                color: #3C3C3C;
                border: 1px solid #BBBBBB;
                margin-right: 24px;
            }

            div#oc_um_footer a.upgrade-plugin-dependent {
                background: #0078C8;
                color: #FFFFFF;
            }
            /* new button design end */

            @media (max-width: 960px) {
                .oc_notice {
                    padding: 32px;
                    display: block;
                }

                .oc_notice div {
                    margin: 0;
                    padding: 0;
                }

                .oc_notice div .inline_icon,
                .oc_notice span {
                    display: block !important;
                    margin-bottom: 32px;
                }
            }

            @media (max-width: 767px) {
                #oc_um_footer{
                    text-align:center;
                }
                #oc_um_footer .oc_up_btn {
                    margin-bottom: 15px;
                }
                #oc_um_footer .oc_cancel_btn {
                    margin: 0;
                    display: block;
                }
                /* new button design */
                div#oc_um_footer a.upgrade-plugin-dependent {
                    margin-top: 24px;
                }

                div#oc_um_footer a.cancel-plugin-dependent {
                    margin-right: 0 !important;
                }
                /* new button design end */
            }
            @media (max-width: 600px) {
                #oc_um_wrapper {
                    max-width: 75%;
                    min-width: 75%;
                    max-height: 80%;
                    overflow-y: scroll;
                }

                #oc_um_body, #oc_um_body p {
                    margin: 25px 0;
                }
            }

            #oc_um_wrapper h5 {
                font-family: "Open Sans", sans-serif;
                font-size: 24px;
                font-style: normal;
                font-weight: 600;
                line-height: 32px;
                letter-spacing: 0px;
                text-align: left;
                margin: 0 0 12px 0;
            }

            #oc_um_head {
                min-height: 56px;
            }

            #oc_um_footer {
                margin: 36px 0 0 0;
            }

            .oc_um_btn,
            .oc_um_btn:hover {
                font-family: "Open Sans", sans-serif;
                font-style: normal;
                font-weight: 600;
                font-size: 16px;
                line-height: 24px;
                color: #8A8989;
                background: #fff;
                align-items: center;
                display: inline-flex;
                border-radius: 0;
                cursor: pointer;
                text-decoration: none;
            }

            .oc_up_btn,
            .oc_up_btn:hover {
                background: #0078C8;
                border-color: #0078C8;
                color: #fff;
                padding: 8px 32px;
                font-family: "Open Sans", sans-serif;
                font-size: 16px;
                font-style: normal;
                font-weight: 600;
                line-height: 24px;
                letter-spacing: 0em;
                text-align: center;
                border-radius: 100px;
            }

            .oc_cancel_btn {
                margin: 0 0 0 46px;
            }

            .oc_up_btn:focus, .oc_up_btn:active, .oc_up_btn:visited {
                color: #fff;
            }

            #oc_um_body, #oc_um_body p {
                font-family: "Open Sans", sans-serif;
                font-size: 16px;
                font-style: normal;
                font-weight: 400;
                line-height: 24px;
                letter-spacing: 0px;
                text-align: left;
            }
            #oc_um_body ul li:before {
                content: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTMiIHZpZXdCb3g9IjAgMCAxNiAxMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGQ9Ik0wLjc1IDUuNzVMNS43NSAxMC43NUwxNS4yNSAxLjI1IiBzdHJva2U9IiM3NkI4MkEiIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4K);
                display: table-cell;
                padding-right: 20px;
            }
        </style>
        <script>
            jQuery(document).ready(function(){
                if(jQuery('#oc_um_overlay').length) {
                    var oldpopup = jQuery('#oc_um_overlay').html();
                    jQuery(document).on('click','#oc_um_footer a.oc_um_btn.oc_cancel_btn',function () {
                        jQuery('#oc_um_overlay').html(oldpopup);
                    });
                }
            });
        </script>
        <?php
    }
}

/**
 * prepare dependent plugin popup
 */
if(!function_exists('prepare_dependent_plugin_popup')){
    function prepare_dependent_plugin_popup($data){
        ob_start();
        ?>
        <div id="oc_um_wrapper">
            <div class="oc-bg-white">
                <div id="oc_um_head">
                    <h5>
                        <?php echo nl2br(stripslashes(__($data['title'], OC_VALIDATOR_DOMAIN))); ?>
                    </h5>
                </div>
                <div id="oc_um_body">
                    <?php
                    echo nl2br(stripslashes(__($data['top-desc'], OC_VALIDATOR_DOMAIN)));
                    echo '<ul>';
                    foreach($data['bodylist'] as $key => $liVal) {
                        echo '<li><span>' . nl2br(stripslashes(__($liVal, OC_VALIDATOR_DOMAIN))) . '</span></li>';
                    }
                    echo '</ul>';
                    echo '<div class="extra-footerspace"></div>';
                    echo nl2br(stripslashes(__($data['footer-desc'], OC_VALIDATOR_DOMAIN)));
                    ?>
                </div>
                <div id="oc_um_footer">
                    <a href="javascript:;"
                       onclick="jQuery('#oc_um_overlay').hide();jQuery('.loading-overlay.fullscreen-loader').removeClass('show');"
                       class="cancel-plugin-dependent"><?php echo __('Cancel', OC_VALIDATOR_DOMAIN); ?></a>
                    <a href="<?php echo oc_upgrade_link('upgrade_modal'); ?>"
                       target="_blank"
                       class="upgrade-plugin-dependent"><?php echo __('Try Managed WordPress', OC_VALIDATOR_DOMAIN); ?></a>
                </div>
            </div>
        </div>
        <?php
        return ob_get_clean();
    }
}

/**
 * Function to show premium Ribbon on theme thumbnails.
 **/
add_filter('onecom_premium_theme_badge', 'oc_theme_badge', 10);
if (!function_exists('oc_theme_badge')) {
    function oc_theme_badge($tag)
    {
        if (!(is_array($tag) && in_array(PREMIUM, $tag))) {
            return;
        }
        echo '<span class="badge_bg" style="position: absolute; top: 0; right: 0; padding: 4px 10px; background-color: #fff; color: #76B82A; font-size: 16px; line-height: 24px; z-index: 100; font-weight: 600;">' . __("Premium", OC_VALIDATOR_DOMAIN) . '</span>';
    }
}

/**
 * Function to show inline premium badge
 */
$oc_inline_badge_fn = 'oc_inline_badge';
add_filter('onecom_premium_inline_badge', $oc_inline_badge_fn, 10, 3); // attach with MM
add_filter('oc_preview_install', $oc_inline_badge_fn, 10, 3); // attach with preview install
add_filter('oc_staging_button_create', $oc_inline_badge_fn, 10, 3); // attach with staging create
add_filter('oc_staging_button_delete', $oc_inline_badge_fn, 10, 3); // attach with staging delete
if (!function_exists($oc_inline_badge_fn)) {
    function oc_inline_badge($html, $type = '', $feature = '')
    {
        $features = (array)oc_set_premi_flag();
        // Check if Premium features

        if (isset($features['data'])) {
            $features = $features['data'];
        }

        

        if (oc_pm_features($feature, $features) || in_array('MWP_ADDON', $features)) {
            $badge = '<span class="inline_badge" style="display: inline-flex;height: 28px;vertical-align: middle;margin-left: 20px;align-items: center;color: #76a338;font-size: 14px;-webkit-font-smoothing: antialiased;"><svg style="width: 16px;height: 16px;pointer-events: none;margin-right:6px;"><use xlink:href="#premium_checkmark_91c2f8cf40d052f90c7b36218d17f875"><svg viewBox="0 0 13 13" id="premium_checkmark_91c2f8cf40d052f90c7b36218d17f875"><path d="M5.815 7.383L8.95 4.271l1.06 1.06-3.255 3.232-.953.953L3.354 7.01l1.06-1.06 1.4 1.433zM6.5 12.5a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z" fill="#76a338"></path></svg></use></svg> Premium</span>';
        } else {
            if ($type == '') {
                $type = __("This is a Premium Theme", OC_VALIDATOR_DOMAIN);
            }
            $badge = '<span class="inline_badge" style="display: inline-flex; height: 28px; vertical-align: middle; margin-left: 20px; align-items: center;"><em class="inline_icon" style="background:url(\'data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZmlsbDojOTUyNjVFOyIgd2lkdGg9IjkiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCA5IDE0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xLjQ5IDBoNi4wMTdsLTIgNC44NzNMOSA0Ljg2NSAyLjE0MiAxNGwxLjYzLTYuNzIzTDAgNy4yNzR6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=\');height: 13.5px;display: inline-block;vertical-align: middle;background-repeat: no-repeat;width: 9px;"></em><span class="inline_badge_text" style="-webkit-font-smoothing: antialiased;margin-left: 10px; opacity: 0.9;color: #333;font-family: Open Sans;font-size: 13px;line-height: 18px;">' . $type . '</span> <a class="inline_badge_link" target="_blank" style="border-bottom:0;margin-left: 5px;color: #95265e;font-family: Open Sans;-webkit-font-smoothing: antialiased;font-size: 13px;font-weight: 600;line-height: 18px;cursor: pointer;text-decoration:none;" href="' . oc_upgrade_link('inline_badge') . '">' . __("Learn more", OC_VALIDATOR_DOMAIN) . '</a></span>';
        }

        return $html . $badge;
    }
}

/**
 * Function oc_val_exclude_themes
 * Remove ILO app theme from Theme listing  in plugin section
 *
 * @param array $themes , an array of onecom themes
 * @param bool $exclude_themes , weather or not to exclude ilo theme?
 *
 * @return array
 */
if (!function_exists('oc_val_exclude_themes')) {
    function oc_val_exclude_themes($themes, $exclude_themes)
    {
        if (!$exclude_themes || !is_array($themes)) {
            return $themes;
        }
        foreach ($themes as $theme_item) {
            if (isset($theme_item->collection)) {
                foreach ($theme_item->collection as $key => $theme) {
                    if (isset($theme->slug) && ($theme->slug === 'onecom-ilotheme')) {
                        unset($theme_item->collection[$key]);
                    }
                }
            }
        }

        return $themes;
    }
}

/**
 * Function to query update
 **/
if (!function_exists('onecom_query_check')) {
    function onecom_query_check($url, $page = null)
    {
        if ($page != null || $page != 1 || $page != "1") {
            $url = add_query_arg(
                array(
                    'page' => $page,
                ), $url
            );
        }

        return add_query_arg(
            array(
                'wp' => ONECOM_WP_CORE_VERSION,
                'php' => ONECOM_PHP_VERSION,
                OC_ITM_COUNT_STR => 1000
            ), $url
        );
    }
}

/**
 * Fetch one.com themes
 */
if (!function_exists('onecom_fetch_themes')) {
    function onecom_fetch_themes($page = 1, $exclude_ilotheme = false)
    {
        $themes = array();
        $transientName = 'onecom_themes';

        $themes = (array)get_site_transient($transientName);

        /* Note- simple switch over from previous data to new data structure */
        if (!isset($themes['total']) && !empty($themes)) {
            delete_site_transient($transientName);
            $themes = (array)get_site_transient($transientName);
        }

        // If requested page already exists in transient, return
        if (!empty($themes) && isset($themes[OC_ITM_COUNT_STR]) && $themes[OC_ITM_COUNT_STR] >= 1000) {
            if (array_key_exists($page, $themes)) { // page exists in current themes
                $themes = oc_val_exclude_themes($themes, $exclude_ilotheme);

                return $themes[$page];
            }
        }

        $fetch_themes_url = MIDDLEWARE_URL . '/themes';

        $fetch_themes_url = onecom_query_check($fetch_themes_url, $page);

        global $wp_version;
        $args = array(
            'timeout' => 5,
            'httpversion' => '1.0',
            'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url(),
            'body' => null,
            'compress' => false,
            'decompress' => true,
            'sslverify' => true,
            'stream' => false,
        );
        $response = wp_remote_get($fetch_themes_url, $args);

        if (is_wp_error($response)) {
            if (isset($response->errors['http_request_failed'])) {
                $errorMessage = __('Connection timed out', OC_VALIDATOR_DOMAIN);
            } else {
                $errorMessage = $response->get_error_message();
            }
        } else {
            if (wp_remote_retrieve_response_code($response) != 200) {
                $errorMessage = '(' . wp_remote_retrieve_response_code($response) . ') ' . wp_remote_retrieve_response_message($response);
            } else {
                $body = wp_remote_retrieve_body($response);
                $body = json_decode($body);
                if (!empty($body) && $body->success) {
                    $themes[OC_ITM_COUNT_STR] = $body->data->item_count;
                    $themes['total'] = $body->data->total;
                    $themes[$body->data->current_page] = (object)array();
                    $themes[$body->data->current_page]->collection = $body->data->collection;
                    $themes[$body->data->current_page]->page_number = $body->data->current_page;
                } elseif (!$body->success) {
                    if ($body->error == 'RESOURCE NOT FOUND') {
                        $try_again_url = add_query_arg(
                            array(
                                'request' => OC_THMS_STR,
                            ),
                            ''
                        );
                        $try_again_url = wp_nonce_url($try_again_url, '_wpnonce');
                        $errorMessage = __('Sorry, no compatible themes found for your version of WordPress and PHP.', OC_VALIDATOR_DOMAIN) . '&nbsp;<a href="' . $try_again_url . '">' . __('Try again', OC_VALIDATOR_DOMAIN) . '</a>';
                    } else {
                        $errorMessage = $body->error;
                    }
                }
            }
            $themes = oc_val_exclude_themes($themes, $exclude_ilotheme);
            if (is_blog_installed()) {
                set_site_transient($transientName, $themes, 3 * HOUR_IN_SECONDS);
            }
        }

        if (empty($themes) || !isset($themes[$page])) {
            return new WP_Error('message', $errorMessage);
        } else {
            return $themes[$page];
        }
    }
}

/**
 * Get premium themes names
 */
if (!function_exists('onecom_is_premium_theme')) {
    function onecom_is_premium_theme($name = null)
    {
        $themes = onecom_fetch_themes();
        $themes = (isset($themes->collection) && !empty($themes->collection)) ? $themes->collection : array();
        $themes = array_reverse(array_reverse($themes));

        $premium_themes = [];
        foreach ($themes as $theme) {
            if (in_array(PREMIUM, (array)$theme->tags)) {
                $premium_themes[] = $theme->name;
            }
        }

        if ($name == null) {
            return $premium_themes;
        }


        if (in_array($name, $premium_themes)) {
            return true;
        }

        return false;
    }
}

/**
 * Check if theme is to be activated
 */
if (!function_exists('oc_check_theme_eligibility')) {
    function oc_check_theme_eligibility($features, $stylesheet = '')
    {
        // exit if it is not a one.com theme
        $theme = wp_get_theme($stylesheet);

        if ('one.com' !== strtolower($theme->display(OC_AUTHOR_STR, false))) {
            return true;
        }

        // exit if premium package
        if (in_array(OC_ID_PRM_THMS, $features)) {
            return true;
        }

        // check if non-premium WP package & trying to use STANDARD THEME
        if (
            (in_array(OC_ID_OCI, $features) || in_array(OC_ID_STD_THMS, $features))
            && !onecom_is_premium_theme($theme->display(OC_AUTHOR_STR, false))
        ) {
            return true;
        }

        return false;
    }
}

// Show notice for a non-premium WP package
if (!function_exists('onecom_premium_theme_admin_notice')) {
    function onecom_premium_theme_admin_notice($html = '')
    {
        global $current_screen;
        // only show banner on the onecom plugins allowed screens
        $allowed_screens = array(
            '_page_onecom-wp-plugins',
            'admin_page_onecom-wp-recommended-plugins',
            'admin_page_onecom-wp-discouraged-plugins'
        );
        if ( isset( $current_screen->id ) && ! in_array( $current_screen->id, $allowed_screens ) ) {
            return false;
        }
        $badge = '<div class="oc_notice"><div><em class="inline_icon" style="background:url(\'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuNSA0Ny41VjYuNUg0MS41VjQ3LjVIMC41WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzNDM0MzQyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPgo8cGF0aCBkPSJNMTEuNzcyNiAxMy44QzEyLjQzMzQgMTMuOCAxMi45NjkgMTMuMjYyOCAxMi45NjkgMTIuNkMxMi45NjkgMTEuOTM3MyAxMi40MzM0IDExLjQgMTEuNzcyNiAxMS40QzExLjExMTggMTEuNCAxMC41NzYyIDExLjkzNzMgMTAuNTc2MiAxMi42QzEwLjU3NjIgMTMuMjYyOCAxMS4xMTE4IDEzLjggMTEuNzcyNiAxMy44WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzNDM0MzQyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPgo8cGF0aCBkPSJNNi45ODIwNyAxMy44QzcuNjQyODQgMTMuOCA4LjE3ODUgMTMuMjYyOCA4LjE3ODUgMTIuNkM4LjE3ODUgMTEuOTM3MyA3LjY0Mjg0IDExLjQgNi45ODIwNyAxMS40QzYuMzIxMyAxMS40IDUuNzg1NjQgMTEuOTM3MyA1Ljc4NTY0IDEyLjZDNS43ODU2NCAxMy4yNjI4IDYuMzIxMyAxMy44IDYuOTgyMDcgMTMuOFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMzQzNDM0MiIHN0cm9rZS1taXRlcmxpbWl0PSIxLjUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz4KPHBhdGggZD0iTTUuNSA0MC41QzUuNSAzOS4zOTU0IDYuMzk1NDMgMzguNSA3LjUgMzguNUgzNC41QzM1LjYwNDYgMzguNSAzNi41IDM5LjM5NTQgMzYuNSA0MC41QzM2LjUgNDEuNjA0NiAzNS42MDQ2IDQyLjUgMzQuNSA0Mi41SDcuNUM2LjM5NTQzIDQyLjUgNS41IDQxLjYwNDYgNS41IDQwLjVaIiBmaWxsPSIjRkZDMzgyIiBzdHJva2U9IiMzQzNDM0MiIHN0cm9rZS1taXRlcmxpbWl0PSIxLjUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz4KPHBhdGggZD0iTTUuNSAzNC41VjE4LjVIMzYuNVYzNC41SDUuNVoiIGZpbGw9IiNFREVERUQiIHN0cm9rZT0iIzNDM0MzQyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPgo8cGF0aCBkPSJNMjEgMjEuNzVWMzEuMjUiIHN0cm9rZT0iIzNDM0MzQyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPgo8cGF0aCBkPSJNMjUuNDI4NiAyNi41SDE2IiBzdHJva2U9IiMzQzNDM0MiIHN0cm9rZS1taXRlcmxpbWl0PSIxLjUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz4KPGNpcmNsZSBjeD0iMzQuNSIgY3k9IjEzLjUiIHI9IjEzIiBmaWxsPSIjNzZCODJBIiBzdHJva2U9IiMzQzNDM0MiIHN0cm9rZS1taXRlcmxpbWl0PSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8bWFzayBpZD0ibWFzazAiIG1hc2stdHlwZT0iYWxwaGEiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjIxIiB5PSIwIiB3aWR0aD0iMjciIGhlaWdodD0iMjciPgo8Y2lyY2xlIGN4PSIzNC41IiBjeT0iMTMuNSIgcj0iMTMiIGZpbGw9IiNGRkMzODIiIHN0cm9rZT0iIzNDM0MzQyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvbWFzaz4KPGcgbWFzaz0idXJsKCNtYXNrMCkiPgo8cGF0aCBkPSJNNDUuODUwOCA2LjkwMzY3TDQ2LjA2MTkgNi4yNUg0NS4zNzVINDIuNjExSDQyLjIzOTNMNDIuMTMyMiA2LjYwNTk3TDM5LjE2NTEgMTYuNDY5NkwzNi4yMzE1IDYuNjA3NDVMMzYuMTI1MiA2LjI1SDM1Ljc1MjNIMzMuNDQwNEgzMy4wNzA0TDMyLjk2MjIgNi42MDM3NEwyOS45NjI3IDE2LjQwOThMMjcuMDgwNiA2LjYwODk0TDI2Ljk3NTEgNi4yNUgyNi42MDA5SDIzLjYyNUgyMi45MzgxTDIzLjE0OTIgNi45MDM2N0wyNy45OTM5IDIxLjkwMzdMMjguMTA1OCAyMi4yNUgyOC40Njk3SDMxLjE0NzdIMzEuNTE3OEwzMS42MjU5IDIxLjg5NjFMMzQuNTM0NCAxMi4zNzQ5TDM3LjM5MjcgMjEuODkzOEwzNy40OTk2IDIyLjI1SDM3Ljg3MTZINDAuNTMwM0g0MC44OTQyTDQxLjAwNjEgMjEuOTAzN0w0NS44NTA4IDYuOTAzNjdaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjM0MzQzNDIi8+CjwvZz4KPC9zdmc+Cg==\');height: 48px;display: inline-block;vertical-align: middle;background-repeat: no-repeat;width: 48px; margin-right: 16px;"></em><span style="font-size: 16px; line-height: 24px;">' . sprintf(__('Make your website even more powerful with %sManaged WordPress%s', OC_VALIDATOR_DOMAIN), '<strong>', '</strong>') . '</div><div><a class="inline_badge_link oc_um_btn oc_up_btn" style="font-size: 14px; padding: 8px 30px;" href="' . oc_upgrade_link('top_banner') . '" target="_blank" class="oc_num_btn oc_up_bt" >' . OC_GENERIC_LEARN_MORE . '</a></div></div>';
        if ($html != '') {
            return $html . $badge;
        }
        echo $badge;

    }
}

// Admin one.com notice css
if (!function_exists('onecom_premium_error_activation_style')) {
    function onecom_premium_error_activation_style()
    {
        echo '<style>span.inline_badge{margin-left: 0px !important;height: 17px !important;}.notice:not(.oc_notice){display:none !important;}</style>';
    }
}

/**
 * Validate premium theme activation
 */
add_action('after_switch_theme', 'onecom_premium_theme_check', 10, 2);
if (!function_exists('onecom_premium_theme_check')) {
    function onecom_premium_theme_check($oldtheme_name, $oldtheme)
    {

        // just using the variable to reduce sonar warning
        $oldtheme_name;

        // exit if it is not a one.com theme
        $theme = wp_get_theme();
        if ('one.com' !== strtolower($theme->display(OC_AUTHOR_STR, false))) {
            return true;
        }

        // exit if premium package
        $features = (array)oc_set_premi_flag(true)['data'];

        if (in_array(OC_ID_PRM_THMS, $features) || in_array('MWP_ADDON', $features)) {
            return true;
        }

        // check if non-premium WP package & trying to use STANDARD THEME
        if (
            (in_array(OC_ID_OCI, $features) || in_array(OC_ID_STD_THMS, $features)) &&
            !onecom_is_premium_theme($theme->display(OC_NAME_STR, false))
        ) {
            return true;
        }

        // Show notice for a non-WP package
        add_action('admin_notices', 'onecom_premium_theme_admin_notice', 2);

        // Custom styling for default admin notice.
        add_action('admin_head', 'onecom_premium_error_activation_style');

        // Switch back to previous theme.
        switch_theme($oldtheme->stylesheet);

        return true;
    }
}

/**
 * Add headers to the provided object
 * This function intends to add domain validation headers in outgoing requests
 */
if (!function_exists('oc_add_http_headers')) {
    function oc_add_http_headers($data, $url)
    {
        if (strpos($url, 'wpapi') === false || strpos($url, '.one.com') === false) {
            return $data;
        }
        $totp = oc_generate_totp();
        $domain = !empty(OC_DOMAIN_NAME) ? OC_DOMAIN_NAME : 'localhost';
        $data['headers']['X-Onecom-Client-Domain'] = $domain;
        $data['headers']['X-TOTP'] = $totp;
        $data['headers']['X-ONECOM-CLIENT-IP'] = onecom_get_client_ip_env();

        return $data;
    }
}
/**
 * Function for checking the theme before activating/enabling it.
 */
add_action('load-themes.php', 'oc_check_theme_before_switch');
if (!function_exists('oc_check_theme_before_switch')) {
    function oc_check_theme_before_switch()
    {

        // Exit if not a GET request
        if (!isset($_GET) || empty($_GET)) {
            return;
        }
        // return if no action
        if (!isset($_GET['action'])) {
            return;
        }

        if (!(isset($_GET['enable'])) && !(isset($_GET[OC_THM_STR]) || isset($_GET['stylesheet']))) {
            return;
        }

        // Exit for all these types of requests
        if (defined('XMLRPC_REQUEST') || defined('DOING_AJAX') || defined('IFRAME_REQUEST') || wp_is_json_request()) {
            return;
        }

        // get current screen
        $current_page = get_current_screen()->base;

        // exit if not on themes page
        if (!(isset($_GET) && !empty($_GET) && ($current_page == OC_THMS_STR || $current_page == 'themes-network'))) {
            return;
        }

        // check if oc_error
        if (isset($_GET[OC_ERR_STR]) && 'oc_error' == $_GET[OC_ERR_STR]) {
            $network = is_multisite() ? 'network_' : '';
            add_action($network . 'admin_notices', 'onecom_premium_theme_admin_notice', 2);
        }

        // exit if theme action is not for activating/enabling
        if (!($_GET['action'] == 'enable' || $_GET['action'] == 'activate')) {
            return;
        }

        // exit if theme stylesheet not available
        if (!(isset($_GET[OC_THM_STR]) || isset($_GET['stylesheet']))) {
            return;
        }

        // get stylesheet name for single/network site
        $stylesheet = isset($_GET[OC_THM_STR]) ? $_GET[OC_THM_STR] : $_GET['stylesheet'];

        // check if this theme is available for the current package; exit if available
        $features = (array)oc_set_premi_flag(true);
        if (oc_check_theme_eligibility($features, $stylesheet)) {
            return true;
        }

        // if theme not available, prepare for redirecting back on the themes page
        $temp_args = array('enabled', OC_ERR_STR);
        $_SERVER['REQUEST_URI'] = remove_query_arg($temp_args, $_SERVER['REQUEST_URI']);
        $referer = remove_query_arg($temp_args, wp_get_referer());

        if (false === strpos($referer, '/network/themes.php')) {
            wp_redirect(network_admin_url('themes.php?error=oc_error'));
        } else {
            wp_safe_redirect(add_query_arg(OC_ERR_STR, 'oc_error', $referer));
        }
        exit;
    }
}

add_action('admin_print_footer_scripts', 'oc_pm_badge_injection', 999);

if (!function_exists('oc_pm_badge_injection')) {
    function oc_pm_badge_injection($hook_suffix)
    {
        $installed_themes = wp_get_themes();
        $themes_to_mark_array = [];
        foreach ($installed_themes as $theme) {
            if ('one.com' === strtolower($theme->display(OC_AUTHOR_STR, false))
                && onecom_is_premium_theme($theme->display(OC_AUTHOR_STR, false))
            ) {
                $themes_to_mark_array[] = str_replace(' ', '-', strtolower($theme->display(OC_AUTHOR_STR, false)));
                $themes_to_mark = json_encode($themes_to_mark_array);
            }
        }
        ?>
        <script>
            function _oc_pm_ribbon_injection(element) {
                jQuery(element).append('<span class="badge_bg" style="position: absolute;transform: rotate(45deg);z-index: 80;width: 105px;height: 73px;padding-top: 0px;top: -26px;right: -42px;background-color: #95265e;"></span><span class="badge_icon" style="position: absolute;transform: rotate(45deg);z-index: 80;pointer-events: none;top: 8px;right: 13px;"><svg style="height: 15px;width: 9px;display: inline-block;"><use xlink:href="#topmenu_upgrade_large_d56dd1cace1438b6cbed4763fd6e5119"><svg viewBox="0 0 9 15" id="topmenu_upgrade_large_d56dd1cace1438b6cbed4763fd6e5119"><path d="M1.486 0h6L5.492 5.004l3.482-.009-6.839 9.38 1.627-6.903L0 7.469z" fill="#FFF" fill-rule="evenodd"></path></svg></use></svg></span><span class="badge_text" style="position: absolute;transform: rotate(45deg);z-index: 80;color: #fff;text-transform: uppercase;font-style: normal;font-weight: 600;font-family: \'Open Sans\', sans-serif;display: block;text-align: center;top: 18px;font-size: 11px;right: 2px;-webkit-font-smoothing: antialiased;">Premium</span>').css('overflow', 'hidden');
            }

            function _oc_pm_ribbon_btn(themes_list) {
                if (!jQuery('.theme-info .theme-name').html()) {
                    return
                }
                $exp_name = jQuery('.theme-info .theme-name').html().toLowerCase();
                $exp_name = $exp_name.split("<span");
                if (-1 !== themes_list.indexOf($exp_name[0])) {
                    _oc_pm_ribbon_injection('.theme-overlay .screenshot');
                }
            }

            jQuery(document).ready(function () {
                //get a list of themes to mark as premium, if found none, initiate with empty json array
                var themes_to_mark = '<?php echo isset($themes_to_mark) ? $themes_to_mark : "[]"; ?>';
                var themes_list = JSON.parse(themes_to_mark);
                var dataslug;
                jQuery(".theme-browser .themes .theme").each(function (i, v) {
                    dataslug = jQuery(v).attr('data-slug');
                    if (dataslug) {
                        if (-1 !== themes_list.indexOf(dataslug) || -1 !== themes_list.indexOf(dataslug.replace('onecom-', ''))) {
                            _oc_pm_ribbon_injection(v)
                        }
                    }

                });
                jQuery(document).on('click', ".theme-browser .themes .theme", function () {
                    _oc_pm_ribbon_btn(themes_list);
                    jQuery(document).on('click', ".theme-header button.left,   .theme-header button.right", function () {
                        _oc_pm_ribbon_btn(themes_list);
                    });
                });

            });

        </script>
        <!-- Bind action with Upgrade button -->
        <script>
            function ocSetModalData(data) {
                if (!data) {
                    console.info('ValidateAction :: No data to set!');
                }
                jQuery('#oc_um_wrapper').attr({
                    'data-is_premium': data.isPremium,
                    'data-feature': data.feature,
                    'data-theme': data.theme,
                    'data-feature_action': data.featureAction,
                    'data-state': data.state || null
                });
            }

            jQuery(document).ready(function () {
                jQuery("#oc_um_footer a.oc_up_btn").click(function () {
                    jQuery.ajax({
                        url: ajaxurl,
                        type: "POST",
                        dataType: "JSON",
                        data: {
                            action: 'oc_validate_action',
                            operation: 'click_upgrade',
                            actionType: 'wppremium_click_upgrade',
                            isPremium: jQuery('#oc_um_wrapper').attr('data-is_premium'),
                            feature: jQuery('#oc_um_wrapper').attr('data-feature'),
                            theme: jQuery('#oc_um_wrapper').attr('data-theme') || null,
                            featureAction: jQuery('#oc_um_wrapper').attr('data-feature_action')
                        },
                        error: function (xhr, textStatus, errorThrown) {
                            console.log("Some error occured during logging!");
                        }
                    });
                    jQuery('#oc_um_wrapper').removeAttr('data-is_premium data-feature data-theme data-feature_action');
                });

                jQuery("#oc_um_close").click(function () {
                    if (!jQuery('#oc_um_wrapper').attr('data-feature')) {
                        return;
                    }
                    jQuery.ajax({
                        url: ajaxurl,
                        type: "POST",
                        dataType: "JSON",
                        data: {
                            action: 'oc_validate_action',
                            operation: 'close_upgrade',
                            actionType: 'wppremium_close_upgrade',
                            isPremium: jQuery('#oc_um_wrapper').attr('data-is_premium'),
                            feature: jQuery('#oc_um_wrapper').attr('data-feature'),
                            theme: jQuery('#oc_um_wrapper').attr('data-theme') || null,
                            featureAction: jQuery('#oc_um_wrapper').attr('data-feature_action'),
                            state: jQuery('#oc_um_wrapper').attr('data-state') || null
                        },
                        error: function (xhr, textStatus, errorThrown) {
                            console.log("Some error occured during logging!");
                        }
                    });
                    jQuery('#oc_um_wrapper').removeAttr('data-is_premium data-feature data-theme data-feature_action');
                });

                jQuery("#oc_um_footer a.oc_cancel_btn").click(function () {
                    if (!jQuery('#oc_um_wrapper').attr('data-feature')) {
                        return;
                    }
                    jQuery.ajax({
                        url: ajaxurl,
                        type: "POST",
                        dataType: "JSON",
                        data: {
                            action: 'oc_validate_action',
                            operation: 'close_upgrade',
                            actionType: 'wppremium_close_upgrade',
                            isPremium: jQuery('#oc_um_wrapper').attr('data-is_premium'),
                            feature: jQuery('#oc_um_wrapper').attr('data-feature'),
                            theme: jQuery('#oc_um_wrapper').attr('data-theme') || null,
                            featureAction: jQuery('#oc_um_wrapper').attr('data-feature_action'),
                            state: jQuery('#oc_um_wrapper').attr('data-state') || null
                        },
                        error: function (xhr, textStatus, errorThrown) {
                            console.log("Some error occured during logging!");
                        }
                    });
                    jQuery('#oc_um_wrapper').removeAttr('data-is_premium data-feature data-theme data-feature_action');
                });


            });
        </script>

        <?php
    }
}


/* Cutomizer controls */
add_action('customize_controls_enqueue_scripts', function () {

    $installed_themes = wp_get_themes();
    $themes_to_mark_arr = [];
    $themes_to_mark = "[]";
    foreach ($installed_themes as $theme) {
        if ('one.com' === strtolower($theme->display(OC_AUTHOR_STR, false))
            && onecom_is_premium_theme($theme->display(OC_AUTHOR_STR, false))
        ) {
            $themes_to_mark_arr[] = strtolower($theme->display(OC_AUTHOR_STR, false));
            $themes_to_mark = json_encode($themes_to_mark_arr);
        }
    }

    wp_add_inline_script('customize-controls', '(function ( api ) {
        api.bind( "ready", function () {
            var _query = api.previewer.query;

            api.previewer.query = function () {
                var theme_ = ' . $themes_to_mark . ';
                var query = _query.call( this );
                // console.log($themes_to_mark);
                // console.log(query.customize_theme)
                if(-1 !== theme_.indexOf(query.customize_theme)){
                   //alert("halt!!");
                }
                query.foo = "bar";
                return query;
            };
        });
    })( wp.customize );'
    );
});

/**
 * Function to get the client ip address
 **/
if (!function_exists('onecom_get_client_ip_env')) {
    function onecom_get_client_ip_env()
    {
        if (getenv('HTTP_CLIENT_IP')) {
            $clientIP = @getenv('HTTP_CLIENT_IP');
        } else if (getenv('REMOTE_ADDR')) {
            $clientIP = @getenv('REMOTE_ADDR');
        } else {
            $clientIP = $_SERVER['ONECOM_CLIENT_IP'] = '0.0.0.0';
        }

        return $clientIP;
    }
}

/**
 * Function to buil URLs as per locale
 */
global $onecom_global_links;
$onecom_global_links = array();
$onecom_global_links['en'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/en-us/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/en-us/articles/115005586029-Discouraged-WordPress-plugins',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/en-us/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/en-us/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/en/wordpress-hosting'
);
$onecom_global_links['cs_CZ'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/cs/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/cs/articles/115005586029-Nedoporu%C4%8Dovan%C3%A9-moduly-plug-in-ve-WordPressu',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/cs/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/cs/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/cs/wordpress'
);
$onecom_global_links['da_DK'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/da/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/da/articles/115005586029-Frar%C3%A5dede-WordPress-plugins',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/da/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/da/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/da/wordpress'
);
$onecom_global_links['de_DE'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/de/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/de/articles/115005586029-Nicht-empfohlene-Plugins',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/de/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/de/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/de/wordpress'
);
$onecom_global_links['es_ES'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/es/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/es/articles/115005586029-Plugins-de-WordPress-no-recomendados',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/es/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/es/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/es/wordpress'
);
$onecom_global_links['fr_FR'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/fr/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/fr/articles/115005586029-Les-plugins-WordPress-d%C3%A9conseill%C3%A9s',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/fr/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/fr/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/fr/wordpress'
);
$onecom_global_links['it_IT'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/it/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/it/articles/115005586029-Plugin-per-WordPress-sconsigliati',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/it/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/it/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/it/wordpress'
);
$onecom_global_links['nb_NO'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/no/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/no/articles/115005586029-Ikke-anbefalte-WordPress-plugins',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/no/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/no/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/no/wordpress'
);
$onecom_global_links['nl_NL'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/nl/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/nl/articles/115005586029-Niet-aanbevolen-WordPress-plugins',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/nl/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/nl/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/nl/wordpress-hosting'
);
$onecom_global_links['pl_PL'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/pl/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/pl/articles/115005586029-Niezalecane-wtyczki-WordPress',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/pl/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/pl/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/pl/wordpress'
);
$onecom_global_links['pt_PT'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/pt/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/pt/articles/115005586029-Plugins-para-o-WordPress-desaconselh%C3%A1veis',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/pt/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/pt/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/pt/wordpress'
);
$onecom_global_links['fi'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/fi/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/fi/articles/115005586029-WordPress-lis%C3%A4osat-joiden-k%C3%A4ytt%C3%B6%C3%A4-ei-suositella',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/fi/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/fi/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/fi/wordpress'
);
$onecom_global_links['sv_SE'] = array(
    OC_MAIN_GUIDE_STR => 'https://help.one.com/hc/sv/categories/360002171377-WordPress',
    OC_DISC_GUIDE_STR => 'https://help.one.com/hc/sv/articles/115005586029-WordPress-till%C3%A4gg-som-vi-avr%C3%A5der-fr%C3%A5n',
    OC_STG_GUIDE_STR => 'https://help.one.com/hc/sv/articles/360000020617',
    OC_COOKIE_GUIDE_STR => 'https://help.one.com/hc/sv/articles/360001472758',
    OC_PRM_PAGE_STR => 'https://www.one.com/sv/wordpress-hosting'
);

if (!function_exists('onecom_generic_locale_link')) {
    function onecom_generic_locale_link($request, $locale, $lang_only = 0)
    {
        global $onecom_global_links;
        if (!empty($onecom_global_links) && array_key_exists($locale, $onecom_global_links)) {

            if ($lang_only != 0) {
                return strstr($locale, '_', true);
            }

            if (!empty($onecom_global_links[$locale][$request])) {
                return $onecom_global_links[$locale][$request];
            }
        }

        if ($lang_only != 0) {
            return 'en';
        }

        return $onecom_global_links['en'][$request];
    }
}

/**
 * Hide one.com plugins from WordPress plugin listing
 */
if (!function_exists('onecom_hide_plugins')) {
    function onecom_hide_plugins($plugins)
    {
        global $wp_list_table;
        $url_condition = (empty($_GET['premium']) || intval($_GET['premium']) !== 1);
        foreach ($wp_list_table->items as $key => $plugin) {

            if ($url_condition && in_array($plugin['Author'], ['onecom', 'one.com'])) {
                unset($wp_list_table->items[$key]);
            }
        }
    }
}
/* Deactivated hiding the plugins until we ensure a reliable auto-updates solution */
//add_action( 'pre_current_active_plugins', 'onecom_hide_plugins' );

/*
 * Force enable automatic updates for one.com plugins
 * Disable email notification if one.com plugin update
 * */
function onecom_autoupdates($update, $item)
{
    if (
        is_object($item)
        && property_exists($item, 'Author')
        && in_array($item->Author, ['one.com', 'onecom'])
    ) {
        add_filter( 'auto_plugin_update_send_email', '__return_false' );
        return true;
    }
    return $update;
}

add_filter('auto_update_plugin', 'onecom_autoupdates', 10, 2);

// one.com actions (stats) after automatic update completed
function onecom_automatic_updates_complete( $update_results ) {
    // return if it is not a plugin update
	if ( empty( $update_results ) || !isset($update_results['plugin']) ) {
		return;
	}
	
	// fetch each one.com plugin update
	foreach ( $update_results['plugin'] as $result ) {
	    if ( property_exists($result, 'item')
	        && property_exists($result->item, 'Author')
            && in_array($result->item->Author, ['one.com', 'onecom'])
        ) {
            
            // prepare data to push into stats
            $plugin_slug = $result->item->slug;
            $additional_info = array(
                'additional_info' => json_encode(array(
                    'current_version' => $result->item->current_version,
                    'new_version' => $result->item->new_version,
                ))
            );
            if(strpos('onecom-vcache',dirname(__FILE__))){
				$referrer = basename(dirname(dirname(dirname(dirname(__FILE__)))));
			} else{
				$referrer = basename(dirname(dirname(dirname(__FILE__))));
			}
			// Push auto update stats
            (class_exists(OC_PUSH_STATS) ? \OCPushStats::push_stats_event_themes_and_plugins('auto_update', 'plugin', $plugin_slug, $referrer, $additional_info) : '');
        }
	}
}
add_action( 'automatic_updates_complete', 'onecom_automatic_updates_complete' );

// Function to get UTM medium (current page tracking) for CP links landing
if (!function_exists('oc_utm_medium')) {
    function oc_utm_medium() {
        
        if (isset($_GET['page']) && 
            $_GET['page'] == 'onecom-wp-health-monitor') {
                return $utm_medium = 'health_monitor';
        } else if (isset($_GET['page']) &&
            $_GET['page'] == 'onecom-wp-vulnerability-monitor') {
                return $utm_medium = 'vulnerability_monitor';
        } else if (isset($_GET['page']) &&
            $_GET['page'] == 'onecom-wp-under-construction') {
                return $utm_medium = 'maintenance_mode';
        } else if (isset($_GET['page']) &&
            $_GET['page'] == 'onecom-vcache-plugin') {
                return $utm_medium = 'performance_cache';
        } else if (isset($_GET['page']) &&
            $_GET['page'] == 'onecom-wp-spam-protection') {
                return $utm_medium = 'spam_protection';   
        } else if (isset($_GET['page']) &&
            $_GET['page'] == 'onecom-wp-staging') {
                return $utm_medium = 'staging';   
        } else if (isset($_GET['page'])) {
            $current_page = str_replace('-', '_', $_GET['page']);
            return $utm_medium = $current_page;
        } else {
            // Ideally, there should not be any current case
            return $utm_medium = '';
        }
    }
}


if (!function_exists('oc_upgrade_link')) {

    function oc_upgrade_link($type = '')
    {
        // Set UTM medium as a combination of current page + link type/location
        if (isset($type) && !empty($type)) {
            $utm_medium_location = oc_utm_medium().'_'.$type;
        } else {
            $utm_medium_location = oc_utm_medium();
        }

        $first_part = "https://www.one.com/admin/select-admin-domain.do?domain=";
        $middle_part = !empty(OC_DOMAIN_NAME) ? OC_DOMAIN_NAME : "";
        $last_part = "&targetUrl=/admin/managedwp/upgrade.do";
        $utm_param = "&utm_source=onecom_wp_plugin&utm_medium=".$utm_medium_location;

        return $first_part . $middle_part . $last_part . $utm_param;

    }

}

if (!defined('OC_INLINE_LOGO')) {
    define('OC_INLINE_LOGO', sprintf('<img src="%s" alt="%s" />', plugin_dir_url(__FILE__) . '/assets/images/one.com.black.svg', __('One.com', OC_VALIDATOR_DOMAIN)));
}

// function moved from generic plugin to validator //


if (!function_exists('onecom_get_free_menu_position')) {
    function onecom_get_free_menu_position($start, $increment = 0.3)
    {
        foreach ($GLOBALS['menu'] as $key => $menu) {
            $menus_positions[] = $key;
        }

        if (!in_array($start, $menus_positions)) {
            return $start;
        }

        /* the position is already reserved find the closet one */
        while (in_array($start, $menus_positions)) {
            $start += $increment;
        }

        return (string)$start;
    }
}

// ------------ redesign notice --------------- //
//ajax handle for set trasient forever
add_action('wp_ajax_oc_set_redesign_notice_forever','oc_set_redesign_notice_forever_callback');
function oc_set_redesign_notice_forever_callback(){

    $status     = false;
    $message    = __("Some error occurred, please reload the page and try again.", OC_VALIDATOR_DOMAIN);

    if(isset($_POST['action']) && $_POST['action'] === 'oc_set_redesign_notice_forever' && $_POST['setTransient'] === 'forever'){
        $plugin_forever_key = 'redesign_notices_forever_dismiss_'.get_current_user_id();
        set_site_transient($plugin_forever_key, 1, 0);//WITH NO EXPIRATION
        $status = true;
        $message = __("Updated",OC_VALIDATOR_DOMAIN);
    }

    wp_send_json(array( "status" => $status,"message" => $message));wp_die();
}

//To add admin notices on dashboard about plugin redesign
if (!function_exists('oc_plugin_redesign_notices')) {
    function oc_plugin_redesign_notices() {

        $user = wp_get_current_user();

        //return if not administrator user role
        if ( (!isset($user->roles)) || (! in_array( 'administrator', (array) $user->roles )) ) {
            return;
        }

        //Prepare redesign transient keys
        $plugin_30days_key      =   'redesign_notices_show_for_30_days_'.get_current_user_id();
        $plugin_forever_key     =   'redesign_notices_forever_dismiss_'.get_current_user_id();
        $isExecuted             =   'redesign_notices_for_executed_'.get_current_user_id();

        $get_30days_transient           =   get_site_transient($plugin_30days_key);
        $get_forever_dismiss_transient  =   get_site_transient($plugin_forever_key);
        $isSetExecuted                  =   get_site_transient($isExecuted);


        //return if dismiss for forever
        if($get_forever_dismiss_transient || !empty($get_forever_dismiss_transient)){
            return;
        }

        if((!$get_30days_transient || empty($get_30days_transient)) && (!$isSetExecuted || empty($isSetExecuted))) {
            set_site_transient($plugin_30days_key, 1, 30 * DAY_IN_SECONDS);//for 30 days
            //set_site_transient($plugin_30days_key, 1, 2 * MINUTE_IN_SECONDS);//for 2 minute
            set_site_transient($isExecuted, 1, 0);
        }

        $get_30days_transient           =   get_site_transient($plugin_30days_key);
        //if 30 days transient expire then simply return
        if(!$get_30days_transient || empty($get_30days_transient)){
            return;
        }

        $img_url                =   plugin_dir_url(__FILE__) . 'assets/images/one.com-pl.svg';
        $plugin_redesign_img    =   plugin_dir_url(__FILE__) . 'assets/images/plugin-redesign.svg';
        $crossIcon              =   plugin_dir_url(__FILE__) . 'assets/images/notice-cross-icon.svg';
        ?>
        <style>
            .oc-plugin-redesign-notices-wrap {
                display: flex;
                align-items: flex-start;
                padding: 0 43px 0 16px;
            }

            .oc-plugin-redesign-notices-desc {
                flex: 2;
                padding-top: 12px;
                padding-bottom: 12px;
                padding-right: 40px;
            }

            .oc-plugin-redesign-notices {
                padding: 16px;
                background: #E6F2FA;
                /*min-height: 157px;*/
                position: relative;
                display: inline-table;
                border: 1px solid #80BBE3;
                width: 100%;
                width: -moz-available;          /* WebKit-based browsers will ignore this. */
                width: -webkit-fill-available;  /* Mozilla-based browsers will ignore this. */
                width: fill-available;
            }

            .notice.plugin-redesign {
                padding: 0;
                border: 0;
                box-shadow: none;
                margin: 16px 0;
                width: 100%;
                display: inline-table;
                background: #E6F2FA;
            }

            .oc-plugin-redesign-notices-img{
                height:125px;
            }

            .oc-plugin-redesign-notices-img img {
                height: 100%;
            }
            .oc-plugin-redesign-notices-desc .welcome_text {
                font-family: "Open Sans", sans-serif;
                font-style: normal;
                font-weight: 400;
                font-size: 23px;
                line-height: 28px;
                color: #3C3C3C;
                flex: none;
                order: 0;
                flex-grow: 0;
                margin: 0;
                padding:0;
            }
            .oc-plugin-redesign-notices-desc p {
                font-family:"Open Sans", sans-serif;
                font-style: normal;
                font-weight: normal;
                font-size: 14px;
                line-height: 19px;
                color: #6D6D6D;
                flex: none;
                order: 0;
                align-self: stretch;
                flex-grow: 0;
                margin: 5px 0;
            }
            .oc-plugin-redesign-cta{
                text-decoration: none;
                display:inline-block;
                text-align:center;
                font-size:12px;
                line-height: 30px;
                font-weight: 600;
                color:#0078C8;
                padding:0 30px;
                border: 1px solid #80BBE3;
                border-radius:100px;
                margin-top:12px;
            }
            .redesign-notice-cross {
                width: 14px;
                position: absolute;
                right: 20px;
                height: 14px;
                z-index: 999;
                padding: 17px;
                cursor: pointer;
            }
            @media (min-width: 320px) and (max-width: 480px) {
                .oc-plugin-redesign-notices-desc{
                    flex:1;
                    padding:0;
                }
                .oc-plugin-redesign-notices-img{
                    display:none;
                }
            }
        </style>
        <div class="notice plugin-redesign">
            <div class="redesign-notice-cross"><img src="<?php echo $crossIcon;?>" alt="x"></div>
            <div class="oc-plugin-redesign-notices">
                <div class="oc-plugin-redesign-notices-wrap">
                    <div class="oc-plugin-redesign-notices-desc">
                        <p class="welcome_text"><?php echo sprintf(__('Welcome to %s plugins', OC_VALIDATOR_DOMAIN),'one.com'); ?></p>
                        <p><?php echo __('Look after the health, security and performance of your website, and customise it with recommended themes and plugins.',OC_VALIDATOR_DOMAIN);?></p>
                        <a class="oc-plugin-redesign-cta" href="<?php menu_page_url("onecom-wp-health-monitor", true);?>"><?php echo __('Explore plugins', OC_VALIDATOR_DOMAIN)?></a>
                    </div>
                    <div class="oc-plugin-redesign-notices-img">
                        <img src="<?php echo $plugin_redesign_img;?>" alt="<?php echo __('one.com', OC_VALIDATOR_DOMAIN);?>">
                    </div>
                </div>
            </div>
        </div>

        <script type="text/javascript">
            jQuery(document).ready(function(){
                jQuery(document).on('click','.redesign-notice-cross',function(){
                    jQuery.ajax({
                        url: ajaxurl,
                        type: "POST",
                        dataType: "JSON",
                        data: {
                            action: 'oc_set_redesign_notice_forever',
                            setTransient:'forever'
                        },
                        success: function(response){

                            //let result = response;//jQuery.parseJSON(response);
                            if (response.message === 'Updated') {
                                jQuery('.notice.plugin-redesign').remove();
                            }else{
                                oc_alert("<?php echo htmlentities(OC_GENERIC_ERR_MSG); ?>", response.message, 5000)
                            }
                        },
                        error: function (xhr, textStatus, errorThrown) {
                            oc_alert("<?php echo htmlentities(OC_GENERIC_ERR_MSG); ?>", 'error', 5000)
                        }
                    });
                });
            });
        </script>
        <?php
    }
}

//load notices only dashboard
add_action( 'load-index.php','wp_dashboard_notices_call');
if (!function_exists('wp_dashboard_notices_call')) {
    function wp_dashboard_notices_call(){
        add_action('admin_notices', 'oc_plugin_redesign_notices');
    }
}
// ------------ redesign notice end --------------- //
// --------------------------inclusion ends ------------//

Youez - 2016 - github.com/yon3zu
LinuXploit