%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/1857783/root/var/www/cwg/wp-content/plugins/wp-grid-builder/admin/
Upload File :
Create Path :
Current File : //proc/1857783/root/var/www/cwg/wp-content/plugins/wp-grid-builder/admin/class-menu.php

<?php
/**
 * Menu
 *
 * @package   WP Grid Builder
 * @author    Loïc Blascos
 * @copyright 2019-2021 Loïc Blascos
 */

namespace WP_Grid_Builder\Admin;

use WP_Grid_Builder\Includes\Helpers;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Handle admin Menu
 *
 * @class WP_Grid_Builder\Admin\Menu
 * @since 1.0.0
 */
class Menu {

	/**
	 * Holds submenus (children => parents)
	 *
	 * @since 1.2.2
	 * @var array
	 */
	public $submenus = [
		'card-builder'   => 'cards',
		'grid-settings'  => 'grids',
		'facet-settings' => 'facets',
	];

	/**
	 * Constructor
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function __construct() {

		// Add admin menu/pages.
		add_action( 'admin_menu', [ $this, 'admin_menu' ] );
		// Remove unwanted submenus.
		add_action( 'admin_head', [ $this, 'remove_submenus' ] );
		// Highlight submenus.
		add_filter( 'submenu_file', [ $this, 'highlight_submenu' ], 10, 2 );
		// Remove all admin notices.
		add_action( 'admin_head', [ $this, 'remove_notices' ] );
		// Redirect setting pages.
		add_action( 'admin_post_' . WPGB_SLUG . '_form', [ $this, 'redirect' ] );
		// Add plugin buttons in plugin list page.
		add_filter( 'plugin_action_links_' . WPGB_BASE, [ $this, 'plugin_action_links' ], 10, 4 );

	}

	/**
	 * Add admin menu and submenu items in Dashboard.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function admin_menu() {

		$capability = Helpers::get_user_capability();
		$submenus   = [
			'dashboard' => esc_html__( 'Dashboard', 'wp-grid-builder' ),
			'grids'     => esc_html__( 'All Grids', 'wp-grid-builder' ),
			'cards'     => esc_html__( 'All Cards', 'wp-grid-builder' ),
			'facets'    => esc_html__( 'All Facets', 'wp-grid-builder' ),
			'add-ons'   => esc_html__( 'Add-ons', 'wp-grid-builder' ),
			'settings'  => esc_html__( 'Settings', 'wp-grid-builder' ),
		] + $this->submenus;

		add_menu_page(
			WPGB_SLUG,
			WPGB_NAME,
			$capability,
			WPGB_SLUG,
			null,
			$this->menu_icon()
		);

		foreach ( $submenus as $slug => $name ) {

			$admin_page = add_submenu_page(
				WPGB_SLUG,
				$name,
				$name,
				$capability,
				WPGB_SLUG . '-' . $slug,
				[ $this, 'load_page' ]
			);

		}

		// Remove first menu item (prevent duplicate menu item).
		remove_submenu_page( WPGB_SLUG, WPGB_SLUG );

	}

	/**
	 * Remove unwanted submenus
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function remove_submenus() {

		foreach ( $this->submenus as $submenu => $parent ) {
			remove_submenu_page( WPGB_SLUG, WPGB_SLUG . '-' . $submenu );
		}

	}

	/**
	 * Highlights parent of current submenu.
	 *
	 * @since 1.2.2
	 * @access public
	 *
	 * @param string $submenu_file The submenu file.
	 * @param string $parent_file  The submenu item's parent file.
	 * @return string
	 */
	public function highlight_submenu( $submenu_file, $parent_file ) {

		$plugin_page = Helpers::get_plugin_page();

		if ( WPGB_SLUG === $parent_file && isset( $this->submenus[ $plugin_page ] ) ) {
			$submenu_file = WPGB_SLUG . '-' . $this->submenus[ $plugin_page ];
		}

		return $submenu_file;

	}

	/**
	 * Add menu icon as data uri to prevent additional HTTP requests (CSS+Font) in admin dashboard
	 * Base64-encoded SVG using a data URI, still allow to preserve the color scheme
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function menu_icon() {

		$color = Helpers::get_plugin_page() ? '#ffffff' : '#82878c';
		$icon  = '<svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 1000 1000"><path fill="' . esc_attr( $color ) . '" d="M838.071 0H161.928C72.496 0 0 72.495 0 161.928v676.143C0 927.504 72.496 1000 161.928 1000H838.07c89.433 0 161.929-72.496 161.929-161.929V161.928C999.999 72.495 927.503 0 838.071 0zM721.246 801.412c0 11.589-6.238 17.827-17.832 17.833H297.056c-11.588 0-17.833-6.244-17.833-17.833V696.188c0-11.594 6.246-17.833 17.833-17.833h406.358c11.588 0 17.832 6.239 17.832 17.833v105.224zM500.283 621.389c-126.023 0-226.131-92.06-226.131-213.619 0-121.554 99.824-213.347 225.848-213.347v127.544c-50.051 0-83.732 39.325-83.732 85.802s33.959 85.809 84.016 85.809c49.155 0 83.12-39.332 83.12-85.809l-.006-1.032h142.116l.006 1.032c-.001 121.561-100.11 213.62-225.237 213.62zm225.61-270.771H554.764V179.49h157.493c7.526.003 13.629 6.102 13.636 13.63v157.498z"/></svg>';

		// phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
		return 'data:image/svg+xml;base64,' . base64_encode( $icon );

	}

	/**
	 * Remove all admin notices in plugin pages
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function remove_notices() {

		$plugin_page = Helpers::get_plugin_page();

		if ( ! $plugin_page ) {
			return;
		}

		remove_all_actions( 'admin_notices' );
		remove_all_actions( 'all_admin_notices' );

	}


	/**
	 * Output page content
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function load_page() {

		$current_page = Helpers::get_plugin_page();
		$current_path = WPGB_PATH . 'admin/views/pages/' . $current_page . '.php';
		$current_path = apply_filters( 'wp_grid_builder/admin/load_page', $current_path, $current_page );

		if ( ! file_exists( $current_path ) ) {
			return;
		}

		require_once WPGB_PATH . 'admin/views/layout/wrapper-start.php';
		require_once WPGB_PATH . 'admin/views/layout/header.php';
		require_once WPGB_PATH . 'admin/views/layout/content-start.php';
		require_once $current_path;
		require_once WPGB_PATH . 'admin/views/layout/content-end.php';
		require_once WPGB_PATH . 'admin/views/modules/popup.php';
		require_once WPGB_PATH . 'admin/views/layout/wrapper-end.php';

	}

	/**
	 * Redirect admin page if no ASYNC method or JS issue
	 *
	 * @since 1.0.0
	 * @access private
	 */
	public function redirect() {

		if ( ! Helpers::current_user_can() ) {

			wp_safe_redirect( esc_url_raw( admin_url() ), 302, WPGB_NAME );
			exit;

		}

		$page = wp_get_referer();

		if ( ! $page ) {
			$page = admin_url();
		}

		wp_safe_redirect( esc_url_raw( $page ), 302, WPGB_NAME );
		exit;

	}

	/**
	 * Add edit/doc links on plugin list page
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @param  array $links Array action links.
	 * @return array Array action links
	 */
	public function plugin_action_links( $links ) {

		if ( ! Helpers::current_user_can() ) {
			return $links;
		}

		$settings_url = add_query_arg(
			[
				'page' => 'wpgb-dashboard',
			],
			admin_url( 'admin.php' )
		);

		// Add custom action links.
		return array_merge(
			[
				'<a href="' . esc_url( $settings_url ) . '" aria-label="' . esc_attr__( 'Got to plugin settings', 'wp-grid-builder' ) . '">' . esc_html__( 'Settings', 'wp-grid-builder' ) . '</a>',
				'<a href="https://docs.wpgridbuilder.com" target="_blank" rel="external noopener noreferrer" aria-label="' . esc_attr__( 'Go to plugin documentation', 'wp-grid-builder' ) . '">' . esc_html__( 'Docs', 'wp-grid-builder' ) . '</a>',
				'<a href="https://wpgridbuilder.com/account/support/" target="_blank" rel="external noopener noreferrer" aria-label="' . esc_attr__( 'Open a ticket', 'wp-grid-builder' ) . '">' . esc_html__( 'Support', 'wp-grid-builder' ) . '</a>',
			],
			$links
		);

	}
}

Zerion Mini Shell 1.0