Viewing File: /home/maglabs/ultex/wp-content/plugins/extendify/app/Assist/Admin.php

<?php
/**
 * Admin.
 */

namespace Extendify\Assist;

use Extendify\Assist\DataProvider\ResourceData;
use Extendify\Assist\Controllers\GlobalsController;
use Extendify\Assist\Controllers\RouterController;
use Extendify\Assist\Controllers\TasksController;
use Extendify\PartnerData;
use Extendify\Config;

/**
 * This class handles any file loading for the admin area.
 */
class Admin
{
    /**
     * The instance
     *
     * @var $instance
     */
    public static $instance = null;

    /**
     * Adds various actions to set up the page
     *
     * @return self|void
     */
    public function __construct()
    {
        if (self::$instance) {
            return self::$instance;
        }

        self::$instance = $this;

        if (PartnerData::$id === 'no-partner' && Config::$environment === 'PRODUCTION') {
            return;
        }

        $this->loadScripts();

        ResourceData::scheduleCache();
    }

    /**
     * Adds scripts to the admin
     *
     * @return void
     */
    public function loadScripts()
    {
        \add_action('admin_enqueue_scripts', [$this, 'loadPageScripts']);
    }

    /**
     * Adds scripts to the main admin page
     *
     * @return void
     */
    public function loadPageScripts()
    {
        if (!current_user_can(Config::$requiredCapability)) {
            return;
        }

        // phpcs:ignore WordPress.Security.NonceVerification.Recommended
        if (!isset($_GET['page']) || $_GET['page'] !== 'extendify-assist') {
            return;
        }

        $siteInstalled = \get_users([
            'orderby' => 'registered',
            'order' => 'ASC',
            'number' => 1,
            'fields' => ['user_registered'],
        ])[0]->user_registered;

        $version = Config::$environment === 'PRODUCTION' ? Config::$version : uniqid();
        $scriptAssetPath = EXTENDIFY_PATH . 'public/build/' . Config::$assetManifest['extendify-assist-page.php'];
        $fallback = [
            'dependencies' => [],
            'version' => $version,
        ];
        $scriptAsset = file_exists($scriptAssetPath) ? require $scriptAssetPath : $fallback;

        foreach ($scriptAsset['dependencies'] as $style) {
            \wp_enqueue_style($style);
        }

        \wp_enqueue_script(
            Config::$slug . '-assist-page-scripts',
            EXTENDIFY_BASE_URL . 'public/build/' . Config::$assetManifest['extendify-assist-page.js'],
            $scriptAsset['dependencies'],
            $scriptAsset['version'],
            true
        );

        $assistState = \get_option('extendify_assist_globals');
        $dismissed = isset($assistState['state']['dismissedNotices']) ? $assistState['state']['dismissedNotices'] : [];
        \wp_add_inline_script(
            Config::$slug . '-assist-page-scripts',
            'window.extAssistData = ' . \wp_json_encode([
                'devbuild' => \esc_attr(Config::$environment === 'DEVELOPMENT'),
                'siteId' => \esc_attr(\get_option('extendify_site_id', '')),
                // Only send insights if they have opted in explicitly.
                'insightsEnabled' => defined('EXTENDIFY_INSIGHTS_URL'),
                'root' => \esc_url_raw(\rest_url(Config::$slug . '/' . Config::$apiVersion)),
                'nonce' => \wp_create_nonce('wp_rest'),
                'adminUrl' => \esc_url_raw(\admin_url()),
                'home' => \esc_url_raw(\get_home_url()),
                'siteCreatedAt' => $siteInstalled ? $siteInstalled : null,
                'asset_path' => \esc_url(EXTENDIFY_URL . 'public/assets'),
                'launchCompleted' => (bool) \esc_attr(Config::$launchCompleted),
                'dismissedNotices' => $dismissed,
                'partnerLogo' => \esc_attr(PartnerData::$logo),
                'partnerName' => \esc_attr(PartnerData::$name),
                'partnerId' => \esc_attr(PartnerData::$id),
                'blockTheme' => \wp_is_block_theme(),
                'hasCustomizer' => \has_action('customize_register'),
                'themeSlug' => \esc_attr(\get_option('stylesheet')),
                'wpLanguage' => \get_locale(),
                'disableRecommendations' => (bool) \esc_attr(PartnerData::setting('disableRecommendations')),
                'domainsSuggestionSettings' => [
                    'showBanner' => (bool) \esc_attr(PartnerData::setting('showDomainBanner')),
                    'showTask' => (bool) \esc_attr(PartnerData::setting('showDomainTask')),
                    'showSecondaryBanner' => (bool) \esc_attr(PartnerData::setting('showSecondaryDomainBanner')),
                    'showSecondaryTask' => (bool) \esc_attr(PartnerData::setting('showSecondaryDomainTask')),
                    'stagingSites' => array_map('esc_attr', PartnerData::setting('stagingSites')),
                    'searchUrl' => \esc_attr(PartnerData::setting('domainSearchURL')),
                ],
                'userData' => [
                    'taskData' => TasksController::get(),
                    'globalData' => GlobalsController::get(),
                    'routerData' => RouterController::get(),
                    'recommendationData' => RouterController::get(),
                    'tasksDependencies' => $this->getTasksDependecies(),
                ],
                'resourceData' => (new ResourceData())->getData(),
                'canSeeRestartLaunch' => (bool) \esc_attr($this->canRunLaunchAgain()),
                'editSiteNavigationMenuLink' => \current_theme_supports('menus') ? esc_url(\admin_url('nav-menus.php')) : esc_url(\admin_url('site-editor.php?path=%2Fnavigation')),
            ]),
            'before'
        );

        \wp_set_script_translations(Config::$slug . '-assist-page-scripts', 'extendify-local', EXTENDIFY_PATH . 'languages/js');

        \wp_enqueue_style(
            Config::$slug . '-assist-page-styles',
            EXTENDIFY_BASE_URL . 'public/build/' . Config::$assetManifest['extendify-assist-page.css'],
            [],
            Config::$version,
            'all'
        );
    }


    /**
     * Check to see if the user can re-run Launch
     *
     * @return boolean
     */
    public function canRunLaunchAgain()
    {
        if (\get_option('stylesheet') !== 'extendable') {
            return false;
        }

        $launchCompleted = \get_option('extendify_onboarding_completed', false);

        if (!$launchCompleted) {
            return false;
        }

        try {
            $datetime1 = new \DateTime($launchCompleted);
            $interval = $datetime1->diff(new \DateTime());
            return $interval->format('%d') <= 2;
        } catch (\Exception $exception) {
            return false;
        }
    }

    /**
     * Check to see if specific tasks are completed or not.
     *
     * @return array
     */
    public function getTasksDependecies()
    {
        $give = \get_option('give_onboarding', false);
        $completedSetupGivewp = isset($give['form_id']) && $give['form_id'] > 0;

        $woo = \get_option('woocommerce_onboarding_profile', false);
        $completedwWoocommerceStore = (isset($woo['completed']) && $woo['completed']) || (isset($woo['skipped']) && $woo['skipped']);

        return [
            'completedSetupGivewp' => $completedSetupGivewp,
            'completedWoocommerceStore' => $completedwWoocommerceStore,
        ];
    }
}
Back to Directory File Manager