413 lines
16 KiB
PHP
413 lines
16 KiB
PHP
<?php
|
|
/**
|
|
* WP ADMIN assets will be enqueued here.
|
|
*
|
|
* @package monsterinsights
|
|
*/
|
|
|
|
/**
|
|
* Class MonsterInsights_Admin_Assets
|
|
* This class is responsible for load CSS and JS in admin panel.
|
|
*/
|
|
class MonsterInsights_Admin_Assets {
|
|
/**
|
|
* MonsterInsights handles.
|
|
*/
|
|
private $own_handles = array(
|
|
'monsterinsights-vue-script',
|
|
'monsterinsights-vue-frontend',
|
|
'monsterinsights-vue-reports',
|
|
'monsterinsights-vue-widget',
|
|
);
|
|
|
|
/**
|
|
* Store manifest.json file content.
|
|
*
|
|
* @var array
|
|
*/
|
|
private static $manifest_data;
|
|
|
|
/**
|
|
* Class constructor.
|
|
*/
|
|
public function __construct() {
|
|
add_filter( 'script_loader_tag', array( $this, 'script_loader_tag' ), 99999, 3 );
|
|
|
|
add_action( 'admin_enqueue_scripts', array( $this, 'admin_styles' ) );
|
|
|
|
add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
|
|
|
|
$this->get_manifest_data();
|
|
}
|
|
|
|
/**
|
|
* Update script tag.
|
|
* The vue code needs type=module.
|
|
*/
|
|
public function script_loader_tag( $tag, $handle, $src ) {
|
|
|
|
if ( ! in_array( $handle, $this->own_handles ) ) {
|
|
return $tag;
|
|
}
|
|
|
|
// Change the script tag by adding type="module" and return it.
|
|
return sprintf(
|
|
'<script type="module" src="%1$s" id="%2$s-js"></script>%3$s',
|
|
$src,
|
|
$handle,
|
|
PHP_EOL
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Loads styles for all MonsterInsights-based Administration Screens.
|
|
*
|
|
* @return null Return early if not on the proper screen.
|
|
*/
|
|
public function admin_styles() {
|
|
|
|
$suffix = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '' : '.min';
|
|
|
|
// Load Common admin styles.
|
|
wp_register_style('monsterinsights-admin-common-style', plugins_url('assets/css/admin-common' . $suffix . '.css', MONSTERINSIGHTS_PLUGIN_FILE), array(), monsterinsights_get_asset_version());
|
|
wp_enqueue_style('monsterinsights-admin-common-style');
|
|
|
|
// Get current screen.
|
|
$screen = get_current_screen();
|
|
|
|
// Bail if we're not on a MonsterInsights screen.
|
|
if (empty($screen->id) || strpos($screen->id, 'monsterinsights') === false) {
|
|
return;
|
|
}
|
|
|
|
// For the settings page, load the Vue app styles.
|
|
if (monsterinsights_is_settings_page()) {
|
|
if (!defined('MONSTERINSIGHTS_LOCAL_JS_URL')) {
|
|
$this->enqueue_script_specific_css( 'src/modules/settings/settings.js' );
|
|
}
|
|
|
|
// Don't load other styles on the settings page.
|
|
return;
|
|
}
|
|
|
|
if (monsterinsights_is_reports_page()) {
|
|
if (!defined('MONSTERINSIGHTS_LOCAL_JS_URL')) {
|
|
$this->enqueue_script_specific_css( 'src/modules/reports/reports.js' );
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
// Tooltips
|
|
wp_enqueue_script('jquery-ui-tooltip');
|
|
}
|
|
|
|
/**
|
|
* Loads scripts for all MonsterInsights-based Administration Screens.
|
|
*
|
|
* @return null Return early if not on the proper screen.
|
|
*/
|
|
public function admin_scripts() {
|
|
|
|
// Our Common Admin JS.
|
|
$suffix = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '' : '.min';
|
|
|
|
wp_enqueue_script('monsterinsights-admin-common-script', plugins_url('assets/js/admin-common' . $suffix . '.js', MONSTERINSIGHTS_PLUGIN_FILE), array('jquery'), monsterinsights_get_asset_version(), true);
|
|
|
|
wp_localize_script(
|
|
'monsterinsights-admin-common-script',
|
|
'monsterinsights_admin_common',
|
|
array(
|
|
'ajax' => admin_url('admin-ajax.php'),
|
|
'dismiss_notice_nonce' => wp_create_nonce('monsterinsights-dismiss-notice'),
|
|
)
|
|
);
|
|
|
|
// Get current screen.
|
|
$screen = get_current_screen();
|
|
|
|
// Bail if we're not on a MonsterInsights screen.
|
|
if (empty($screen->id) || strpos($screen->id, 'monsterinsights') === false) {
|
|
return;
|
|
}
|
|
|
|
$version_path = monsterinsights_is_pro_version() ? 'pro' : 'lite';
|
|
|
|
// For the settings page, load the Vue app.
|
|
if (monsterinsights_is_settings_page()) {
|
|
$app_js_url = self::get_js_url( 'src/modules/settings/settings.js' );
|
|
wp_register_script('monsterinsights-vue-script', $app_js_url, array(), monsterinsights_get_asset_version(), true);
|
|
wp_enqueue_script('monsterinsights-vue-script');
|
|
|
|
$plugins = get_plugins();
|
|
$install_amp_url = false;
|
|
if (monsterinsights_can_install_plugins()) {
|
|
$amp_key = 'amp/amp.php';
|
|
if (array_key_exists($amp_key, $plugins)) {
|
|
$install_amp_url = wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=' . $amp_key), 'activate-plugin_' . $amp_key);
|
|
} else {
|
|
$install_amp_url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=amp'), 'install-plugin_amp');
|
|
}
|
|
}
|
|
|
|
$install_woocommerce_url = false;
|
|
if (monsterinsights_can_install_plugins()) {
|
|
$woo_key = 'woocommerce/woocommerce.php';
|
|
if (array_key_exists($woo_key, $plugins)) {
|
|
$install_woocommerce_url = wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=' . $woo_key), 'activate-plugin_' . $woo_key);
|
|
} else {
|
|
$install_woocommerce_url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=woocommerce'), 'install-plugin_woocommerce');
|
|
}
|
|
}
|
|
|
|
$prepared_dimensions = array();
|
|
if (class_exists('MonsterInsights_Admin_Custom_Dimensions')) {
|
|
$dimensions = new MonsterInsights_Admin_Custom_Dimensions();
|
|
$dimensions = $dimensions->custom_dimensions();
|
|
$prepared_dimensions = array();
|
|
foreach ($dimensions as $dimension_type => $dimension) {
|
|
$dimension['type'] = $dimension_type;
|
|
$prepared_dimensions[] = $dimension;
|
|
}
|
|
}
|
|
|
|
$is_authed = (MonsterInsights()->auth->is_authed() || MonsterInsights()->auth->is_network_authed());
|
|
|
|
wp_localize_script(
|
|
'monsterinsights-vue-script',
|
|
'monsterinsights',
|
|
array(
|
|
'ajax' => admin_url('admin-ajax.php'),
|
|
'nonce' => wp_create_nonce('mi-admin-nonce'),
|
|
'network' => is_network_admin(),
|
|
'translations' => wp_get_jed_locale_data(monsterinsights_is_pro_version() ? 'ga-premium' : 'google-analytics-for-wordpress'),
|
|
'assets' => plugins_url($version_path . '/assets/vue', MONSTERINSIGHTS_PLUGIN_FILE),
|
|
'roles' => monsterinsights_get_roles(),
|
|
'roles_manage_options' => monsterinsights_get_manage_options_roles(),
|
|
'shareasale_id' => monsterinsights_get_shareasale_id(),
|
|
'shareasale_url' => monsterinsights_get_shareasale_url(monsterinsights_get_shareasale_id(), ''),
|
|
'addons_url' => is_multisite() ? network_admin_url('admin.php?page=monsterinsights_network#/addons') : admin_url('admin.php?page=monsterinsights_settings#/addons'),
|
|
'seo_settings_page_url' => is_multisite() ? network_admin_url('admin.php?page=monsterinsights_network#/seo') : admin_url('admin.php?page=monsterinsights_settings#/seo'),
|
|
'aioseo_dashboard_url' => is_multisite() ? network_admin_url('admin.php?page=aioseo') : admin_url('admin.php?page=aioseo'),
|
|
'wp_plugins_page_url' => is_multisite() ? network_admin_url('plugins.php') : admin_url('plugins.php'),
|
|
'email_summary_url' => admin_url('admin.php?monsterinsights_email_preview&monsterinsights_email_template=summary'),
|
|
'install_amp_url' => $install_amp_url,
|
|
'install_woo_url' => $install_woocommerce_url,
|
|
'dimensions' => $prepared_dimensions,
|
|
'wizard_url' => is_network_admin() ? network_admin_url('index.php?page=monsterinsights-onboarding') : admin_url('index.php?page=monsterinsights-onboarding'),
|
|
'install_plugins' => monsterinsights_can_install_plugins(),
|
|
'unfiltered_html' => current_user_can('unfiltered_html'),
|
|
'activate_nonce' => wp_create_nonce('monsterinsights-activate'),
|
|
'deactivate_nonce' => wp_create_nonce('monsterinsights-deactivate'),
|
|
'install_nonce' => wp_create_nonce('monsterinsights-install'),
|
|
// Used to add notices for future deprecations.
|
|
'versions' => monsterinsights_get_php_wp_version_warning_data(),
|
|
'plugin_version' => MONSTERINSIGHTS_VERSION,
|
|
'is_admin' => true,
|
|
'admin_email' => get_option('admin_email'),
|
|
'site_url' => get_site_url(),
|
|
'reports_url' => add_query_arg('page', 'monsterinsights_reports', admin_url('admin.php')),
|
|
'ecommerce_report_url' => add_query_arg('page', 'monsterinsights_reports#/ecommerce', admin_url('admin.php')),
|
|
'ecommerce_settings_tab_url' => add_query_arg('page', 'monsterinsights_settings#/ecommerce', admin_url('admin.php')),
|
|
'first_run_notice' => apply_filters('monsterinsights_settings_first_time_notice_hide', monsterinsights_get_option('monsterinsights_first_run_notice')),
|
|
'getting_started_url' => is_network_admin() ? network_admin_url('admin.php?page=monsterinsights_network#/about') : admin_url('admin.php?page=monsterinsights_settings#/about/getting-started'),
|
|
'authed' => $is_authed,
|
|
'new_pretty_link_url' => admin_url('post-new.php?post_type=pretty-link'),
|
|
'wpmailsmtp_admin_url' => admin_url('admin.php?page=wp-mail-smtp'),
|
|
'load_headline_analyzer_settings' => monsterinsights_load_gutenberg_app() ? 'true' : 'false',
|
|
'exit_url' => add_query_arg('page', 'monsterinsights_settings', admin_url('admin.php')),
|
|
'timezone' => date('e'),
|
|
'funnelkit_stripe_woo_page_url' => admin_url( 'admin.php?page=wc-settings&tab=fkwcs_api_settings' ),
|
|
'funnelkit_stripe_woo_nonce' => wp_create_nonce('monsterinsights-funnelkit-stripe-woo-nonce'),
|
|
)
|
|
);
|
|
|
|
// Don't load other scripts on the settings page.
|
|
return;
|
|
}
|
|
|
|
if (monsterinsights_is_reports_page()) {
|
|
|
|
$app_js_url = self::get_js_url( 'src/modules/reports/reports.js' );
|
|
wp_register_script('monsterinsights-vue-reports', $app_js_url, array(), monsterinsights_get_asset_version(), true);
|
|
wp_enqueue_script('monsterinsights-vue-reports');
|
|
|
|
// We do not have a current auth.
|
|
$auth = MonsterInsights()->auth;
|
|
$site_auth = $auth->get_viewname();
|
|
$ms_auth = is_multisite() && $auth->get_network_viewname();
|
|
|
|
wp_localize_script(
|
|
'monsterinsights-vue-reports',
|
|
'monsterinsights',
|
|
array(
|
|
'ajax' => admin_url('admin-ajax.php'),
|
|
'nonce' => wp_create_nonce('mi-admin-nonce'),
|
|
'network' => is_network_admin(),
|
|
'translations' => wp_get_jed_locale_data(monsterinsights_is_pro_version() ? 'ga-premium' : 'google-analytics-for-wordpress'),
|
|
'assets' => plugins_url($version_path . '/assets/vue', MONSTERINSIGHTS_PLUGIN_FILE),
|
|
'pro_assets' => plugins_url($version_path . '/assets', MONSTERINSIGHTS_PLUGIN_FILE),
|
|
'shareasale_id' => monsterinsights_get_shareasale_id(),
|
|
'shareasale_url' => monsterinsights_get_shareasale_url(monsterinsights_get_shareasale_id(), ''),
|
|
'addons_url' => is_multisite() ? network_admin_url('admin.php?page=monsterinsights_network#/addons') : admin_url('admin.php?page=monsterinsights_settings#/addons'),
|
|
'timezone' => date('e'), // phpcs:ignore
|
|
'authed' => $site_auth || $ms_auth,
|
|
'settings_url' => add_query_arg('page', 'monsterinsights_settings', admin_url('admin.php')),
|
|
// Used to add notices for future deprecations.
|
|
'versions' => monsterinsights_get_php_wp_version_warning_data(),
|
|
'plugin_version' => MONSTERINSIGHTS_VERSION,
|
|
'is_admin' => true,
|
|
'admin_email' => get_option('admin_email'),
|
|
'site_url' => get_site_url(),
|
|
'wizard_url' => is_network_admin() ? network_admin_url('index.php?page=monsterinsights-onboarding') : admin_url('index.php?page=monsterinsights-onboarding'),
|
|
'install_nonce' => wp_create_nonce('monsterinsights-install'),
|
|
'activate_nonce' => wp_create_nonce('monsterinsights-activate'),
|
|
'deactivate_nonce' => wp_create_nonce('monsterinsights-deactivate'),
|
|
'update_settings' => current_user_can('monsterinsights_save_settings'),
|
|
'migrated' => monsterinsights_get_option('gadwp_migrated', 0),
|
|
'yearinreview' => monsterinsights_yearinreview_dates(),
|
|
'reports_url' => add_query_arg('page', 'monsterinsights_reports', admin_url('admin.php')),
|
|
)
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
// ublock notice
|
|
add_action('admin_print_footer_scripts', array( $this, 'monsterinsights_settings_ublock_error_js' ), 9999999);
|
|
}
|
|
|
|
/**
|
|
* Need to identify why this function is using.
|
|
*/
|
|
public function monsterinsights_settings_ublock_error_js() {
|
|
echo "<script type='text/javascript'>\n";
|
|
echo "jQuery( document ).ready( function( $ ) {
|
|
if ( window.uorigindetected == null){
|
|
$('#monsterinsights-ublock-origin-error').show();
|
|
$('.monsterinsights-nav-tabs').hide();
|
|
$('.monsterinsights-nav-container').hide();
|
|
$('#monsterinsights-addon-heading').hide();
|
|
$('#monsterinsights-addons').hide();
|
|
$('#monsterinsights-reports').hide();
|
|
}
|
|
});";
|
|
echo "\n</script>";
|
|
}
|
|
|
|
/**
|
|
* Load CSS from manifest.json
|
|
*/
|
|
public static function enqueue_script_specific_css( $js_file_path ) {
|
|
if ( defined( 'MONSTERINSIGHTS_LOCAL_JS_URL' ) ) {
|
|
return;
|
|
}
|
|
|
|
$version_path = monsterinsights_is_pro_version() ? 'pro' : 'lite';
|
|
$plugin_path = plugin_dir_path( MONSTERINSIGHTS_PLUGIN_FILE );
|
|
|
|
if ( ! isset( self::$manifest_data[ $js_file_path ] ) ) {
|
|
return;
|
|
}
|
|
|
|
$js_imports = self::$manifest_data[ $js_file_path ]['imports'];
|
|
$css_file_path = $plugin_path . $version_path . '/assets/vue/';
|
|
|
|
// Add JS own CSS file.
|
|
if ( isset( self::$manifest_data[ $js_file_path ]['css'] ) ) {
|
|
self::add_js_own_css_files( self::$manifest_data[ $js_file_path ]['css'], $version_path );
|
|
}
|
|
|
|
// Loop through all imported js file of entry file.
|
|
foreach( $js_imports as $js_filename ) {
|
|
// Check imported file available in manifest.json
|
|
if ( ! isset( self::$manifest_data[ $js_filename ] ) ) {
|
|
continue;
|
|
}
|
|
|
|
// Check imported js file has it's own css.
|
|
if ( ! isset( self::$manifest_data[ $js_filename ]['css'] ) ) {
|
|
continue;
|
|
}
|
|
|
|
$js_file_css = self::$manifest_data[ $js_filename ]['css'];
|
|
|
|
// css must be array.
|
|
if ( ! is_array( $js_file_css ) ) {
|
|
continue;
|
|
}
|
|
|
|
// Loop to css files of a imported js file.
|
|
foreach ( $js_file_css as $css_hash_name ) {
|
|
if ( file_exists( $css_file_path . $css_hash_name ) ) {
|
|
wp_enqueue_style(
|
|
'monsterinsights-style-' . basename( $css_hash_name ),
|
|
plugins_url( $version_path . '/assets/vue/' . $css_hash_name, MONSTERINSIGHTS_PLUGIN_FILE ),
|
|
array(),
|
|
monsterinsights_get_asset_version()
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add JS it's own CSS build file.
|
|
*/
|
|
private static function add_js_own_css_files( $css_files, $version_path ) {
|
|
foreach ( $css_files as $css_filename ) {
|
|
wp_enqueue_style(
|
|
'monsterinsights-style-' . basename( $css_filename ),
|
|
plugins_url( $version_path . '/assets/vue/' . $css_filename, MONSTERINSIGHTS_PLUGIN_FILE ),
|
|
array(),
|
|
monsterinsights_get_asset_version()
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get JS build file URL of a entry file.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_js_url( $path ) {
|
|
if ( ! $path ) {
|
|
return;
|
|
}
|
|
|
|
if ( defined( 'MONSTERINSIGHTS_LOCAL_JS_URL' ) && MONSTERINSIGHTS_LOCAL_JS_URL ) {
|
|
return MONSTERINSIGHTS_LOCAL_JS_URL . $path;
|
|
}
|
|
|
|
// If the file is not available on manifest.
|
|
if ( ! isset( self::$manifest_data[ $path ] ) ) {
|
|
return;
|
|
}
|
|
|
|
$js_file = self::$manifest_data[ $path ]['file'];
|
|
$version_path = monsterinsights_is_pro_version() ? 'pro' : 'lite';
|
|
|
|
return plugins_url( $version_path . '/assets/vue/' . $js_file, MONSTERINSIGHTS_PLUGIN_FILE );
|
|
}
|
|
|
|
/**
|
|
* Fetch manifest.json data and store it to array for future use.
|
|
*
|
|
* @return void
|
|
*/
|
|
private function get_manifest_data() {
|
|
$version_path = monsterinsights_is_pro_version() ? 'pro' : 'lite';
|
|
$plugin_path = plugin_dir_path( MONSTERINSIGHTS_PLUGIN_FILE );
|
|
$manifest_path = $plugin_path . $version_path . '/assets/vue/manifest.json';
|
|
|
|
// Return if manifest.json not exists.
|
|
if ( ! file_exists( $manifest_path ) ) {
|
|
return;
|
|
}
|
|
|
|
self::$manifest_data = json_decode( file_get_contents( $manifest_path ), true );
|
|
}
|
|
}
|
|
|
|
new MonsterInsights_Admin_Assets();
|