This repository has been archived on 2026-10-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
grisefest-web/wp-content/plugins/google-analytics-for-wordpress/admin/class-admin-menu.php
T
2015-05-01 18:05:29 +02:00

255 lines
8.4 KiB
PHP

<?php
/**
* @package GoogleAnalytics\Admin
*/
/**
* This class is for the backend, extendable for all child classes
*/
class Yoast_GA_Admin_Menu {
/**
* @var object $target_object The property used for storing target object (class admin)
*/
private $target_object;
/**
* @var boolean $dashboard_disabled The dashboards disabled bool
*/
private $dashboards_disabled;
/**
* The parent slug for the submenu items based on if the dashboards are disabled or not.
*
* @var string
*/
private $parent_slug;
/**
* Setting the target_object and adding actions
*
* @param object $target_object
*/
public function __construct( $target_object ) {
$this->target_object = $target_object;
add_action( 'admin_menu', array( $this, 'create_admin_menu' ), 10 );
if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
}
if ( is_plugin_active_for_network( GAWP_PATH ) ) {
add_action( 'network_admin_menu', array( $this, 'create_admin_menu' ), 5 );
}
$this->dashboards_disabled = Yoast_GA_Settings::get_instance()->dashboards_disabled();
$this->parent_slug = ( ( $this->dashboards_disabled ) ? 'yst_ga_settings' : 'yst_ga_dashboard' );
}
/**
* Create the admin menu
*/
public function create_admin_menu() {
/**
* Filter: 'wpga_menu_on_top' - Allows filtering of menu location of the GA plugin, if false is returned, it moves to bottom.
*
* @api book unsigned
*/
// Base 64 encoded SVG image
$icon_svg = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWw0KCTwhRU5USVRZIG5zX2Zsb3dzICJodHRwOi8vbnMuYWRvYmUuY29tL0Zsb3dzLzEuMC8iPg0KCTwhRU5USVRZIG5zX2V4dGVuZCAiaHR0cDovL25zLmFkb2JlLmNvbS9FeHRlbnNpYmlsaXR5LzEuMC8iPg0KCTwhRU5USVRZIG5zX2FpICJodHRwOi8vbnMuYWRvYmUuY29tL0Fkb2JlSWxsdXN0cmF0b3IvMTAuMC8iPg0KCTwhRU5USVRZIG5zX2dyYXBocyAiaHR0cDovL25zLmFkb2JlLmNvbS9HcmFwaHMvMS4wLyI+DQpdPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYWFnXzEiIHhtbG5zOng9IiZuc19leHRlbmQ7IiB4bWxuczppPSImbnNfYWk7IiB4bWxuczpncmFwaD0iJm5zX2dyYXBoczsiDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOmE9Imh0dHA6Ly9ucy5hZG9iZS5jb20vQWRvYmVTVkdWaWV3ZXJFeHRlbnNpb25zLzMuMC8iDQoJIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNDAgMzEuODkiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQwIDMxLjg5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTQwLDEyLjUyNEM0MCw1LjYwOCwzMS40NjksMCwyMCwwQzguNTMsMCwwLDUuNjA4LDAsMTIuNTI0YzAsNS41Niw1LjI0MywxMC4yNzIsMTMuNTU3LDExLjkwN3YtNC4wNjUNCgljMCwwLDAuMDQtMS0wLjI4LTEuOTJjLTAuMzItMC45MjEtMS43Ni0zLjAwMS0xLjc2LTUuMTIxYzAtMi4xMjEsMi41NjEtOS41NjMsNS4xMjItMTAuNDQ0Yy0wLjQsMS4yMDEtMC4zMiw3LjY4My0wLjMyLDcuNjgzDQoJczEuNCwyLjcyLDQuNjQxLDIuNzJjMy4yNDIsMCw0LjUxMS0xLjc2LDQuNzE1LTIuMmMwLjIwNi0wLjQ0LDAuODQ2LTguNzIzLDAuODQ2LTguNzIzczQuMDgyLDQuNDAyLDMuNjgyLDkuMzYzDQoJYy0wLjQwMSw0Ljk2Mi00LjQ4Miw3LjIwMy02LjEyMiw5LjEyM2MtMS4yODYsMS41MDUtMi4yMjQsMy4xMy0yLjYyOSw0LjE2OGMwLjgwMS0wLjAzNCwxLjU4Ny0wLjA5OCwyLjM2MS0wLjE4NGw5LjE1MSw3LjA1OQ0KCWwtNC44ODQtNy44M0MzNS41MzUsMjIuMTYxLDQwLDE3LjcxMyw0MCwxMi41MjR6Ii8+DQo8L2c+DQo8L3N2Zz4=';
$menu_name = is_network_admin() ? 'extensions' : 'dashboard';
if ( $this->dashboards_disabled ) {
$menu_name = 'settings';
}
// Add main page
add_menu_page(
__( 'Yoast Google Analytics:', 'google-analytics-for-wordpress' ) . ' ' . __( 'General settings', 'google-analytics-for-wordpress' ), __( 'Analytics', 'google-analytics-for-wordpress' ), 'manage_options', 'yst_ga_' . $menu_name,
array(
$this->target_object,
'load_page',
),
$icon_svg,
$this->get_menu_position()
);
$this->add_submenu_pages();
}
/**
* Get the menu position of the Analytics item
*
* @return string
*/
private function get_menu_position() {
$on_top = apply_filters( 'wpga_menu_on_top', true );
if ( $on_top ) {
$position = $this->get_menu_position_value( 'top' );
}
else {
$position = $this->get_menu_position_value( 'bottom' );
}
// If the dashboards are disabled, force the menu item to stay at the bottom of the menu
if ( $this->dashboards_disabled ) {
$position = $this->get_menu_position_value( 'bottom' );
}
return $position;
}
/**
* Get the top or bottom menu location number
*
* @param string $location
*
* @return string
*/
private function get_menu_position_value( $location ) {
if ( $location == 'top' ) {
return '2.00013467543';
}
return '100.00013467543';
}
/**
* Prepares an array that can be used to add a submenu page to the Google Analytics for Wordpress menu
*
* @param string $submenu_name
* @param string $submenu_slug
* @param string $font_color
*
* @return array
*/
private function prepare_submenu_page( $submenu_name, $submenu_slug, $font_color = '' ) {
return array(
'parent_slug' => $this->parent_slug,
'page_title' => __( 'Yoast Google Analytics:', 'google-analytics-for-wordpress' ) . ' ' . $submenu_name,
'menu_title' => $this->parse_menu_title( $submenu_name, $font_color ),
'capability' => 'manage_options',
'menu_slug' => 'yst_ga_' . $submenu_slug,
'submenu_function' => array( $this->target_object, 'load_page' ),
);
}
/**
* Parsing the menutitle
*
* @param string $menu_title
* @param string $font_color
*
* @return string
*/
private function parse_menu_title( $menu_title, $font_color ) {
if ( ! empty( $font_color ) ) {
$menu_title = '<span style="color:' . $font_color . '">' . $menu_title . '</span>';
}
return $menu_title;
}
/**
* Adds a submenu page to the Google Analytics for WordPress menu
*
* @param array $submenu_page
*/
private function add_submenu_page( $submenu_page ) {
$page = add_submenu_page( $submenu_page['parent_slug'], $submenu_page['page_title'], $submenu_page['menu_title'], $submenu_page['capability'], $submenu_page['menu_slug'], $submenu_page['submenu_function'] );
$is_dashboard = ( 'yst_ga_dashboard' === $submenu_page['menu_slug'] );
$this->add_assets( $page, $is_dashboard );
}
/**
* Adding stylesheets and based on $is_not_dashboard maybe some more styles and scripts.
*
* @param string $page
* @param boolean $is_dashboard
*/
private function add_assets( $page, $is_dashboard ) {
add_action( 'admin_print_styles-' . $page, array( 'Yoast_GA_Admin_Assets', 'enqueue_styles' ) );
add_action( 'admin_print_styles-' . $page, array( 'Yoast_GA_Admin_Assets', 'enqueue_settings_styles' ) );
add_action( 'admin_print_scripts-' . $page, array( 'Yoast_GA_Admin_Assets', 'enqueue_scripts' ) );
if ( ! $is_dashboard && filter_input( INPUT_GET, 'page' ) === 'yst_ga_dashboard' ) {
Yoast_GA_Admin_Assets::enqueue_dashboard_assets();
}
}
/**
* Prepares and adds submenu pages to the Google Analytics for Wordpress menu:
* - Dashboard
* - Settings
* - Extensions
*
* @return void
*/
private function add_submenu_pages() {
foreach ( $this->get_submenu_types() as $submenu ) {
if ( isset( $submenu['color'] ) ) {
$submenu_page = $this->prepare_submenu_page( $submenu['label'], $submenu['slug'], $submenu['color'] );
}
else {
$submenu_page = $this->prepare_submenu_page( $submenu['label'], $submenu['slug'] );
}
$this->add_submenu_page( $submenu_page );
}
}
/**
* Determine which submenu types should be added as a submenu page.
*
* Dashboard can be disables by user
*
* Dashboard and settings are disables in network admin
*
* @return array
*/
private function get_submenu_types() {
/**
* Array structure:
*
* array(
* $submenu_name => array(
* 'color' => $font_color,
* 'label' => __( 'text-label', 'google-analytics-for-wordpress' ),
* 'slug' => $menu_slug,
* ),
* ..,
* )
*
* $font_color can be left empty.
*
*/
$submenu_types = array();
if ( ! is_network_admin() ) {
if ( ! $this->dashboards_disabled ) {
$submenu_types['dashboard'] = array(
'label' => __( 'Dashboard', 'google-analytics-for-wordpress' ),
'slug' => 'dashboard',
);
}
$submenu_types['settings'] = array(
'label' => __( 'Settings', 'google-analytics-for-wordpress' ),
'slug' => 'settings',
);
}
$submenu_types['extensions'] = array(
'color' => '#f18500',
'label' => __( 'Extensions', 'google-analytics-for-wordpress' ),
'slug' => 'extensions',
);
return $submenu_types;
}
}