Вход Регистрация
Файл: oc-includes/osclass/helpers/hAdminMenu.php
Строк: 604
<?php
/*
 * Copyright 2014 Osclass
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

    /**
     * Helper Menu Admin
     * @package Osclass
     * @subpackage Helpers
     * @author Osclass
     */

    /**
     * Draws menu with sections and subsections
     */
    
function osc_draw_admin_menu()
    {
        
// actual url
        
$actual_url  = urldecode(Params::getServerParam('QUERY_STRING', false, false));
        
$actual_page = Params::getParam('page');

        
$something_selected = false;
        
$adminMenu          = AdminMenu::newInstance();
        
$aMenu              = $adminMenu->get_array_menu();
        
$current_menu_id    = osc_current_menu();
        
$is_moderator       = osc_is_moderator();
        
// DEPRECATED : Remove hook admin_menu when osclass 4.0 be released
        // hack, compatibility with menu plugins.
        
ob_start();
        
osc_run_hook('admin_menu');
        
$plugins_out = ob_get_contents();
        
ob_end_clean();
        
// clean old menus (remove h3 element)
        
$plugins_out = preg_replace('|<h3><a .*>(.*)</a></h3>|', '<li class="submenu-divide">$1</li>', $plugins_out);
        
$plugins_out = preg_replace('|<ul>|', '', $plugins_out);
        
$plugins_out = preg_replace('|</ul>|', '', $plugins_out);

        
// -----------------------------------------------------

        
$sub_current = false;
        
$sMenu = '<!-- menu -->'.PHP_EOL;
        
$sMenu .= '<div id="sidebar">'.PHP_EOL;
        
$sMenu .= '<ul class="oscmenu">'.PHP_EOL;

        
// find current menu section
        
$current_menu = '';
        
$priority = 0;
        
$urlLenght = 0;

        foreach(
$aMenu as $key => $value) {
            
// --- submenu section
            
if( array_key_exists('sub', $value) ) {
                
$aSubmenu = $value['sub'];
                foreach(
$aSubmenu as $aSub) {
                    
$credential_sub = isset($aSub[4])?$aSub[4]:$aSub[3];

                    if(!
$is_moderator || ($is_moderator && $credential_sub == 'moderator')) { // show

                        
$url_submenu   = $aSub[1];
                        
$url_submenu   = str_replace(osc_admin_base_url(true).'?', '', $url_submenu);
                        
$url_submenu   = str_replace(osc_admin_base_url(), '', $url_submenu);

                        if( 
strpos($actual_url, $url_submenu, 0) === 0 && $priority<=2  && $url_submenu != '') {

                            if( 
$urlLenght<strlen($url_submenu) ) {
                                
$urlLenght = strlen($url_submenu);
                                
$sub_current = true;
                                
$current_menu = $value[2];
                                
$priority  = 2;
                            }
                        } else if( 
$actual_page == $value[2] && $priority<1 ) {
                            
$sub_current = true;
                            
$current_menu = $value[2];
                            
$priority  = 1;
                        }
                    }
                }
            }

            
// --- menu section
            
$url_menu   = $value[1];
            
$url_menu   = str_replace(osc_admin_base_url(true).'?', '', $url_menu);
            
$url_menu   = str_replace(osc_admin_base_url(), '', $url_menu);

            if(@
strpos($actual_url, $url_menu) === 0  && $priority<=2 && $url_menu != '') {
                if( 
$urlLenght<strlen($url_menu) ) {
                    
$urlLenght = strlen($url_menu);
                    
$sub_current = true;
                    
$current_menu = $value[2];
                    
$priority  = 2;
                }
            } else if(
$actual_page == $value[2] &&  $priority<1 ) {
                
$sub_current = true;
                
$current_menu = $value[2];
                
$priority  = 1;
            } else if(
$url_menu == $actual_page) {
                
$sub_current = true;
                
$current_menu = $value[2];
                
$priority  = 0;
            }
        }
        
$value = array();
        foreach(
$aMenu as $key => $value) {

            
$sSubmenu   = "";
            
$credential = $value[3];
            if(!
$is_moderator || $is_moderator && $credential == 'moderator') { // show

                
$class      = '';
                if( 
array_key_exists('sub', $value) ) {
                    
// submenu
                    
$aSubmenu = $value['sub'];
                    if(
$aSubmenu) {
                        
$sSubmenu .= "<ul>".PHP_EOL;
                        foreach(
$aSubmenu as $aSub) {
                            
$credential_sub = isset($aSub[4])?$aSub[4]:$aSub[3];
                            if(!
$is_moderator || $is_moderator && $credential_sub == 'moderator') { // show
                                
if(substr($aSub[1], 0, 8)=="divider_") {
                                    
$sSubmenu .= '<li class="submenu-divide">'.$aSub[0].'</li>'.PHP_EOL;
                                } else {
                                    
$sSubmenu .= '<li><a id="'.$aSub[2].'" href="'.$aSub[1].'">'.$aSub[0].'</a></li>'.PHP_EOL;
                                }
                            }
                        }
                        
// hardcoded plugins/themes under menu plugins
                        
if($key == 'plugins' && !$is_moderator) {
                            
$sSubmenu .= $plugins_out;
                        }

                        
$sSubmenu .= '<li class="arrow"></li>'.PHP_EOL;
                        
$sSubmenu .= "</ul>".PHP_EOL;
                    }
                }

                
$class = osc_apply_filter('current_admin_menu_'.$value[2],$class);

                
$icon = '';
                if(isset(
$value[4])) {
                    
$icon = '<div class="ico ico-48" style="background-image:url(''.$value[4].'');">';
                } else {
                    
$icon = '<div class="ico ico-48 ico-'.$value[2].'">';
                }

                if( 
$current_menu == $value[2] ) { $class = 'current'; }
                
$sMenu .= '<li id="menu_'.$value[2].'" class="'.$class.'">'.PHP_EOL;
                
$sMenu .= '<h3><a id="'.$value[2].'" href="'.$value[1].'">'.$icon.'</div>'.$value[0].'</a></h3>'.PHP_EOL;
                
$sMenu .= $sSubmenu;
                
$sMenu .= '</li>'.PHP_EOL;
            }


        }
        
$sMenu .= '</ul>'. PHP_EOL;

        
$sMenu .= '<div id="show-more">'.PHP_EOL;
        
$sMenu .= '<h3><a id="stats" href="#"><div class="ico ico-48 ico-more"></div>' . __('Show more') . '</a></h3>'.PHP_EOL;
        
$sMenu .= '<ul id="hidden-menus">'.PHP_EOL;
        
$sMenu .= '</ul>'.PHP_EOL;
        
$sMenu .= '</div>'.PHP_EOL;
        
$sMenu .= '<div class="osc_switch_mode"><a id="osc_toolbar_switch_mode" href="'.osc_admin_base_url(true).'?page=ajax&action=runhook&hook=compactmode"><div class="background"></div><div class="skin"></div><div class="trigger"></div></a><h3>'.__('Compact').'</h3></div>'.PHP_EOL;

        
$sMenu .= '</div>'.PHP_EOL;
        
$sMenu .= '<!-- menu end -->'.PHP_EOL;
        echo 
$sMenu;
    }

    
/**
     * Add menu entry
     *
     * @param type $array
     * @param type $id_menu
     */
    
function osc_add_admin_menu_page( $menu_title, $url, $menu_id, $capability = 'administrator', $icon_url = null, $position = null )
    {
        
AdminMenu::newInstance()->add_menu($menu_title, $url, $menu_id, $capability, $icon_url = null, $position);
    }

    
/**
     * Remove the whole menu
     */
    
function osc_remove_admin_menu()
    {
        
AdminMenu::newInstance()->clear_menu();
    }

    
/**
     * Remove menu section with id $id_menu
     * @param type $id_menu
     */
    
function osc_remove_admin_menu_page($menu_id)
    {
        
AdminMenu::newInstance()->remove_menu( $menu_id );
    }

    
/**
     * Add submenu under menu id $id_menu, with $array information
     * @param type $array
     * @param type $id_menu
     */
    
function osc_add_admin_submenu_page( $menu_id, $submenu_title, $url, $submenu_id, $capability = 'administrator')
    {
        
AdminMenu::newInstance()->add_submenu( $menu_id, $submenu_title, $url, $submenu_id, $capability);
    }

    
/**
     * Remove submenu with id $id_submenu under menu id $id_menu
     *
     * @param type $id_menu
     * @param type $id_submenu
     */
    
function osc_remove_admin_submenu_page( $menu_id, $submenu_id )
    {
        
AdminMenu::newInstance()->remove_submenu( $menu_id, $submenu_id );
    }

    
/**
     * Add submenu divider under menu id $id_menu, with $array information
     * @param type $array
     * @param type $id_menu
     * @since 3.1
     */
    
function osc_add_admin_submenu_divider( $menu_id, $submenu_title, $submenu_id, $capability = null)
    {
        
AdminMenu::newInstance()->add_submenu_divider( $menu_id, $submenu_title, $submenu_id, $capability);
    }

    
/**
     * Remove submenu divider with id $id_submenu under menu id $id_menu
     *
     * @param type $id_menu
     * @param type $id_submenu
     * @since 3.1
     */
    
function osc_remove_admin_submenu_divider( $menu_id, $submenu_id )
    {
        
AdminMenu::newInstance()->remove_submenu_divider( $menu_id, $submenu_id );
    }

    
/**
     * Add submenu into items menu page
     */
    
function osc_admin_menu_items( $submenu_title, $url, $submenu_id, $capability = null, $icon_url = null )
    {
        
AdminMenu::newInstance()->add_menu_items( $submenu_title, $url, $submenu_id, $capability, $icon_url);
    }

    
/**
     * Add submenu into items menu page
     */
    
function osc_admin_menu_categories( $submenu_title, $url, $submenu_id, $capability = null, $icon_url = null )
    {
        
AdminMenu::newInstance()->add_menu_categories( $submenu_title, $url, $submenu_id, $capability, $icon_url);
    }

    
/**
     * Add submenu into items menu page
     */
    
function osc_admin_menu_pages( $submenu_title, $url, $submenu_id, $capability = null, $icon_url= null)
    {
        
AdminMenu::newInstance()->add_menu_pages( $submenu_title, $url, $submenu_id, $capability, $icon_url);
    }

    
/**
     * Add submenu into items menu page
     */
    
function osc_admin_menu_appearance( $submenu_title, $url, $submenu_id, $capability = null, $icon_url = null )
    {
        
AdminMenu::newInstance()->add_menu_appearance( $submenu_title, $url, $submenu_id, $capability, $icon_url);
    }

    
/**
     * Add submenu into items menu page
     */
    
function osc_admin_menu_plugins( $submenu_title, $url, $submenu_id, $capability = null, $icon_url = null )
    {
        
AdminMenu::newInstance()->add_menu_plugins( $submenu_title, $url, $submenu_id, $capability, $icon_url);
    }

    
/**
     * Add submenu into items menu page
     */
    
function osc_admin_menu_settings( $submenu_title, $url, $submenu_id, $capability = null, $icon_url = null )
    {
        
AdminMenu::newInstance()->add_menu_settings( $submenu_title, $url, $submenu_id, $capability, $icon_url);
    }

    
/**
     * Add submenu into items menu page
     */
    
function osc_admin_menu_tools( $submenu_title, $url, $submenu_id,$capability = null, $icon_url = null )
    {
        
AdminMenu::newInstance()->add_menu_tools( $submenu_title, $url, $submenu_id, $capability, $icon_url);
    }

    
/**
     * Add submenu into items menu page
     */
    
function osc_admin_menu_users( $submenu_title, $url, $submenu_id, $capability = null, $icon_url = null )
    {
        
AdminMenu::newInstance()->add_menu_users( $submenu_title, $url, $submenu_id, $capability, $icon_url);
    }

    
/**
     * Add submenu into items menu page
     */
    
function osc_admin_menu_stats( $submenu_title, $url, $submenu_id, $capability = null, $icon_url = null )
    {
        
AdminMenu::newInstance()->add_menu_stats( $submenu_title, $url, $submenu_id, $capability, $icon_url);
    }

    function 
osc_current_menu() {
        
$menu_id            = '';
        
$current_menu       = 'dash';
        
$something_selected = false;
        
$aMenu = AdminMenu::newInstance()->get_array_menu();

        
$url_actual = '?'.Params::getServerParam('QUERY_STRING', false, false);
        if(
preg_match('/(^.*action=w+)/', $url_actual, $matches)) {
            
$url_actual = $matches[1];
        } else if(
preg_match('/(^.*page=w+)/', $url_actual, $matches)) {
            
$url_actual = $matches[1];
        } else if(
$url_actual == '?') {
            
$url_actual = '';
        }

        foreach(
$aMenu as $key => $value) {
            
$aMenu_actions = array();
            
$url = $value[1];
            
$url = str_replace(osc_admin_base_url(true) , '', $url );
            
$url = str_replace(osc_admin_base_url()     , '', $url );

            
array_push($aMenu_actions, $url);
            if( 
array_key_exists('sub', $value) ) {
                
$aSubmenu = $value['sub'];
                if(
$aSubmenu) {
                    foreach(
$aSubmenu as $aSub) {
                        
$url = str_replace(osc_admin_base_url(true), '', $aSub[1] );
                        
array_push($aMenu_actions, $url);
                    }
                }
            }

            if(
in_array($url_actual , $aMenu_actions)) {
                
$something_selected = true;
                
$menu_id = $value[2];
            }
        }

        if(
$something_selected)
            return 
$menu_id;

        
// try again without action
        
$url_actual = preg_replace('/(&action=.+)/', '', $url_actual);
        foreach(
$aMenu as $key => $value) {
            
$aMenu_actions = array();
            
$url = $value[1];
            
$url = str_replace(osc_admin_base_url(true) , '', $url );
            
$url = str_replace(osc_admin_base_url()     , '', $url );

            
array_push($aMenu_actions, $url);
            if( 
array_key_exists('sub', $value) ) {
                
$aSubmenu = $value['sub'];
                if(
$aSubmenu) {
                    foreach(
$aSubmenu as $aSub) {
                        
$url = str_replace(osc_admin_base_url(true), '', $aSub[1] );
                        
array_push($aMenu_actions, $url);
                    }
                }
            }
            if(
in_array($url_actual , $aMenu_actions)) {
                
$something_selected = true;
                
$menu_id = $value[2];
            }
        }

        return 
$menu_id;
    }
?>
Онлайн: 1
Реклама