<?php /** * Standard PerfOps One admin bar handling. * * @package PerfOpsOne * @author Pierre Lannoy <https://pierre.lannoy.fr/>. * @since 2.1.0 */ namespace PerfOpsOne; use PerfOpsOne\Resources; /** * Standard PerfOps One admin bar handling. * * This class defines all code necessary to initialize and handle PerfOps One admin bar. * * @package Plugin * @author Pierre Lannoy <https://pierre.lannoy.fr/>. * @since 2.1.0 */ if ( ! class_exists( 'PerfOpsOne\AdminBar' ) ) { class AdminBar { /** * The PerfOps One admin bar items. * * @since 2.1.0 * @var array $items Maintains the PerfOps One admin bar items. */ private static $items = []; /** * Are the menus already initialized. * * @since 2.1.0 * @var boolean $initialized Maintains the menus initialization status. */ private static $initialized = false; /** * Initialize the admin bar items. * * @since 2.1.0 */ public static function initialize() { if ( ! self::$initialized ) { wp_register_style( PERFOO_ASSETS_ID, PERFOO_ASSETS_CSS, [], true ); wp_enqueue_style( PERFOO_ASSETS_ID ); add_action( 'admin_bar_menu', [ self::class, 'finalize' ], PHP_INT_MAX, 1 ); self::$initialized = true; } self::$items = apply_filters( 'init_perfopsone_admin_bar', [] ); } /** * Dispatch the admin menus. * * @since 2.1.0 */ public static function finalize( $admin_bar ) { if ( apply_filters( 'poo_hide_adminbar', false ) ) { return; } if ( 0 < count( self::$items ) ) { usort( self::$items, function( $a, $b ) { return strcmp( strtolower( $a['title'] ), strtolower( $b['title'] ) ); } ); $id = 'perfopsone-dashboard'; $admin_bar->add_node( [ 'id' => $id, 'href' => esc_url( admin_url( 'admin.php?page=' . $id ) ), 'title' => '<span class="ab-icon poo-ico-logo" style="padding-top: 6px;"></span><span class="ab-label">' . PERFOO_PRODUCT_NAME . '</span>', ] ); foreach ( self::$items as $item ) { $admin_bar->add_node( array_merge( $item, [ 'parent' => $id ] ) ); } } self::$initialized = true; } } }