initialize_hooks(); } /** * Init Hooks. * * @since 1.0.0 * @return void */ public function initialize_hooks() { /* Setup the Admin Menu */ add_action( 'admin_menu', array( $this, 'setup_menu' ) ); add_action( 'admin_init', array( $this, 'settings_admin_scripts' ) ); /* Add the Action Links */ add_filter( 'plugin_action_links_' . UAGB_BASE, array( $this, 'add_action_links' ) ); /* Render admin content view */ add_action( 'uag_render_admin_page_content', array( $this, 'render_content' ), 10, 2 ); } /** * Show action on plugin page. * * @param array $links links. * @return array */ public function add_action_links( $links ) { $default_url = admin_url( 'admin.php?page=' . $this->menu_slug ); $mylinks = array( '' . __( 'Settings', 'ultimate-addons-for-gutenberg' ) . '', ); return array_merge( $mylinks, $links ); } /** * Initialize after Spectra gets loaded. */ public function settings_admin_scripts() { // Enqueue admin scripts. if ( ! empty( $_GET['page'] ) && ( $this->menu_slug === $_GET['page'] || false !== strpos( sanitize_text_field( $_GET['page'] ), $this->menu_slug . '_' ) ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended add_action( 'admin_enqueue_scripts', array( $this, 'styles_scripts' ) ); add_filter( 'admin_footer_text', array( $this, 'add_footer_link' ), 99 ); } } /** * Add submenu to admin menu. * * @since 1.0.0 */ public function setup_menu() { if ( ! current_user_can( 'manage_options' ) ) { return; } $menu_slug = $this->menu_slug; $capability = 'manage_options'; $icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDcwIDcwIiBmaWxsPSJub25lIiBjbGFzcz0ic3BlY3RyYS1wYWdlLXNldHRpbmdzLWJ1dHRvbiIgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiPiA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM1IDcwQzU0LjMzIDcwIDcwIDU0LjMzIDcwIDM1QzcwIDE1LjY3IDU0LjMzIDAgMzUgMEMxNS42NyAwIDAgMTUuNjcgMCAzNUMwIDU0LjMzIDE1LjY3IDcwIDM1IDcwWk0yNC40NDcxIDIzLjUxMTJDMTguOTcyMiAyNi43NDAzIDIwLjI4NTIgMzUuMzc1OSAyNi41MDMyIDM3LjAzNTFMMzYuODg3NSAzOS44MDZDMzcuNzUzMyA0MC4wMzcgMzcuOTEgNDEuMjI0IDM3LjEzNSA0MS42ODExTDI3LjA5NzIgNDcuNTc5OUwyNi4wMzYgNThMNDUuNTUyOSA0Ni40ODg4QzUxLjAyNzggNDMuMjU5NyA0OS43MTQ4IDM0LjYyNDEgNDMuNDk2OCAzMi45NjQ5TDMzLjExMjUgMzAuMTk0MUMzMi4yNDY3IDI5Ljk2MyAzMi4wOSAyOC43NzYgMzIuODY1IDI4LjMxODlMNDIuOTAyOCAyMi40MjAyTDQzLjk2NCAxMkwyNC40NDcxIDIzLjUxMTJaIj48L3BhdGg+IDwvc3ZnPg=='; // Add the Spectra Menu. add_menu_page( __( 'Spectra', 'ultimate-addons-for-gutenberg' ), __( 'Spectra', 'ultimate-addons-for-gutenberg' ), $capability, $menu_slug, array( $this, 'render' ), $icon, 30 ); // Add the Dashboard Submenu. add_submenu_page( $menu_slug, __( 'Spectra', 'ultimate-addons-for-gutenberg' ), __( 'Dashboard', 'ultimate-addons-for-gutenberg' ), $capability, $menu_slug, array( $this, 'render' ) ); // Add the Blocks / Extensions Submenu. add_submenu_page( $menu_slug, __( 'Spectra', 'ultimate-addons-for-gutenberg' ), __( 'Blocks', 'ultimate-addons-for-gutenberg' ), $capability, $menu_slug . '&path=blocks', array( $this, 'render' ) ); // Use this action hook to add sub menu to above menu. do_action( 'spectra_after_menu_register' ); // Finally, add the Settings Submenu. add_submenu_page( $menu_slug, __( 'Spectra', 'ultimate-addons-for-gutenberg' ), __( 'Settings', 'ultimate-addons-for-gutenberg' ), $capability, $menu_slug . '&path=settings', array( $this, 'render' ) ); } /** * Renders the admin settings. * * @since 1.0.0 * @return void */ public function render() { $menu_page_slug = ( ! empty( $_GET['page'] ) ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : $this->menu_slug; //phpcs:ignore WordPress.Security.NonceVerification.Recommended $page_action = ''; if ( isset( $_GET['action'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended $page_action = sanitize_text_field( wp_unslash( $_GET['action'] ) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended $page_action = str_replace( '_', '-', $page_action ); } include_once UAG_ADMIN_DIR . 'views/admin-base.php'; } /** * Renders the admin settings content. * * @since 1.0.0 * @param sting $menu_page_slug current page name. * @param sting $page_action current page action. * * @return void */ public function render_content( $menu_page_slug, $page_action ) { if ( $this->menu_slug === $menu_page_slug ) { include_once UAG_ADMIN_DIR . 'views/dashboard-app.php'; } } /** * Enqueues the needed CSS/JS for the builder's admin settings page. * * @since 1.0.0 */ public function styles_scripts() { $admin_slug = 'uag-admin'; $blocks_info = $this->get_blocks_info_for_activation_deactivation(); wp_enqueue_style( $admin_slug . '-font', 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap', array(), UAGB_VER ); // Styles. wp_enqueue_style( 'wp-components' ); $theme = wp_get_theme(); $theme_data = \WP_Theme_JSON_Resolver::get_theme_data(); $theme_settings = $theme_data->get_settings(); $theme_font_families = isset( $theme_settings['typography']['fontFamilies']['theme'] ) && is_array( $theme_settings['typography']['fontFamilies']['theme'] ) ? $theme_settings['typography']['fontFamilies']['theme'] : array(); $localize = apply_filters( 'uag_react_admin_localize', array( 'current_user' => ! empty( wp_get_current_user()->user_firstname ) ? wp_get_current_user()->user_firstname : wp_get_current_user()->display_name, 'admin_base_url' => admin_url(), 'uag_base_url' => admin_url( 'admin.php?page=' . $this->menu_slug ), 'plugin_dir' => UAGB_URL, 'plugin_ver' => UAGB_VER, 'admin_url' => admin_url( 'admin.php' ), 'ajax_url' => admin_url( 'admin-ajax.php' ), 'wp_pages_url' => admin_url( 'post-new.php?post_type=page' ), 'home_slug' => $this->menu_slug, 'rollback_url' => esc_url( add_query_arg( 'version', 'VERSION', wp_nonce_url( admin_url( 'admin-post.php?action=uag_rollback' ), 'uag_rollback' ) ) ), 'blocks_info' => $blocks_info, 'reusable_url' => esc_url( admin_url( 'edit.php?post_type=wp_block' ) ), 'global_data' => Admin_Helper::get_options(), 'uag_content_width_set_by' => \UAGB_Admin_Helper::get_admin_settings_option( 'uag_content_width_set_by', __( 'Spectra', 'ultimate-addons-for-gutenberg' ) ), 'spectra_pro_installed' => file_exists( UAGB_DIR . '../spectra-pro/spectra-pro.php' ), 'spectra_pro_status' => is_plugin_active( 'spectra-pro/spectra-pro.php' ), 'spectra_pro_ver' => defined( 'SPECTRA_PRO_VER' ) ? SPECTRA_PRO_VER : null, 'spectra_custom_fonts' => apply_filters( 'spectra_system_fonts', array() ), 'is_allow_registration' => (bool) get_option( 'users_can_register' ), 'theme_fonts' => $theme_font_families, ) ); $this->settings_app_scripts( $localize ); } /** * Create an Array of Blocks info which we need to show in Admin dashboard. */ public function get_blocks_info_for_activation_deactivation() { $blocks = \UAGB_Admin_Helper::get_block_options(); array_multisort( array_map( function( $element ) { if ( isset( $element['priority'] ) ) { return $element['priority']; } return; }, $blocks ), SORT_ASC, $blocks ); $cf7_status = $this->get_plugin_status( 'contact-form-7/wp-contact-form-7.php' ); $gf_status = $this->get_plugin_status( 'gravityforms/gravityforms.php' ); if ( is_array( $blocks ) && ! empty( $blocks ) ) { $blocks_names = array(); foreach ( $blocks as $addon => $info ) { $addon = str_replace( 'uagb/', '', $addon ); $exclude_blocks = array( 'column', 'icon-list-child', 'social-share-child', 'buttons-child', 'faq-child', 'forms-name', 'forms-email', 'forms-hidden', 'forms-phone', 'forms-textarea', 'forms-url', 'forms-select', 'forms-radio', 'forms-checkbox', 'forms-upload', 'forms-toggle', 'forms-date', 'forms-accept', 'post-title', 'post-image', 'post-button', 'post-excerpt', 'post-taxonomy', 'post-meta', 'restaurant-menu-child', 'content-timeline-child', 'tabs-child', 'how-to-step', 'slider-child', 'slider-pro', 'image-gallery-pro', 'loop-wrapper', ); if ( ( 'cf7-styler' === $addon && 'active' !== $cf7_status ) || ( 'gf-styler' === $addon && 'active' !== $gf_status ) ) { $exclude_blocks[] = $addon; } $enable_legacy_blocks = \UAGB_Admin_Helper::get_admin_settings_option( 'uag_enable_legacy_blocks', ( 'yes' === get_option( 'uagb-old-user-less-than-2' ) ) ? 'yes' : 'no' ); if ( 'yes' !== $enable_legacy_blocks ) { $exclude_blocks[] = 'wp-search'; $exclude_blocks[] = 'columns'; $exclude_blocks[] = 'section'; $exclude_blocks[] = 'cf7-styler'; $exclude_blocks[] = 'gf-styler'; $exclude_blocks[] = 'post-masonry'; } if ( array_key_exists( 'extension', $info ) && $info['extension'] ) { continue; } if ( in_array( $addon, $exclude_blocks, true ) ) { continue; } $info['slug'] = $addon; $blocks_names[] = $info; } return $blocks_names; } return array(); } /** * Get plugin status * * @since 2.0.0 * * @param string $plugin_init_file Plguin init file. * @return mixed */ public function get_plugin_status( $plugin_init_file ) { $installed_plugins = get_plugins(); if ( ! isset( $installed_plugins[ $plugin_init_file ] ) ) { return 'not-installed'; } elseif ( is_plugin_active( $plugin_init_file ) ) { return 'active'; } else { return 'inactive'; } } /** * Settings app scripts * * @param array $localize Variable names. */ public function settings_app_scripts( $localize ) { $handle = 'uag-admin-settings'; $build_path = UAG_ADMIN_DIR . 'assets/build/'; $build_url = UAG_ADMIN_URL . 'assets/build/'; $script_asset_path = $build_path . 'dashboard-app.asset.php'; $script_info = file_exists( $script_asset_path ) ? include $script_asset_path : array( 'dependencies' => array(), 'version' => UAGB_VER, ); $script_dep = array_merge( $script_info['dependencies'], array( 'updates' ) ); wp_register_script( $handle, $build_url . 'dashboard-app.js', $script_dep, $script_info['version'], true ); wp_register_style( $handle, $build_url . 'dashboard-app.css', array(), UAGB_VER ); wp_register_style( 'uag-admin-google-fonts', 'https://fonts.googleapis.com/css2?family=Inter:wght@200&display=swap', array(), UAGB_VER ); wp_enqueue_script( $handle ); wp_set_script_translations( $handle, 'ultimate-addons-for-gutenberg' ); wp_enqueue_style( 'uag-admin-google-fonts' ); wp_enqueue_style( $handle ); wp_style_add_data( $handle, 'rtl', 'replace' ); wp_localize_script( $handle, 'uag_admin_react', $localize ); wp_localize_script( $handle, 'uag_react', $localize ); } /** * Add footer link. */ public function add_footer_link() { // translators: HTML entities. return '' . sprintf( __( 'Thank you for using %1$sSpectra.%2$s', 'ultimate-addons-for-gutenberg' ), '', '' ) . ''; } } Admin_Menu::get_instance();