WordPress.org

Make WordPress Core

Ticket #4787: 4787-check-plugin-activated.diff

File 4787-check-plugin-activated.diff, 2.8 KB (added by ozh, 8 years ago)

diff (applies from /wp-admin) for menu-header.php and includes/plugin.php

  • includes/plugin.php

     
    379379        return true; 
    380380} 
    381381 
     382/** 
     383 * Checks if a file is (seems to be) a plugin (Ozh) 
     384 *  
     385 * @param string $plugin_file The filename of plugin (full path) 
     386 * @return boolean 
     387 */ 
     388function is_pluginfile($plugin_file) { 
     389        if ( !is_readable( $plugin_file ) || substr($plugin_file, -4) != '.php' ) 
     390                return false; 
     391                 
     392        $plugin_data = get_plugin_data( $plugin_file ); 
     393 
     394        if ( empty ( $plugin_data['Name'] ) ) 
     395                return false; 
     396 
     397        return true; 
     398} 
     399 
     400/** 
     401 * Checks if a plugin is activated (Ozh) 
     402 *  
     403 * Checks first if the file is (seems to be) a plugin 
     404 * @param string $plugin_file The filename of plugin (full path, or relative path to plugins dir as stored in options table under 'plugins_activated') 
     405 * @return boolean 
     406 */ 
     407function is_activatedplugin($plugin_file) { 
     408        if ( get_option('active_plugins') ) { 
     409                $current_plugins = get_option('active_plugins'); 
     410        } else { 
     411                return false; 
     412        } 
     413         
     414        $plugin_root = ABSPATH . PLUGINDIR; 
     415        // $plugin_file can be a full or relative filename path, so sanitize it and make it always relative 
     416        $plugin_file = plugin_basename($plugin_file); 
     417 
     418        if ( is_pluginfile($plugin_root .'/'. $plugin_file) && in_array($plugin_file, $current_plugins) ) { 
     419                return true; 
     420        } else { 
     421                return false; 
     422        } 
     423} 
     424 
     425 
    382426?> 
  • menu-header.php

     
    1414        if ( !empty($submenu[$item[2]]) ) { 
    1515                $submenu[$item[2]] = array_values($submenu[$item[2]]);  // Re-index. 
    1616                $menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]); 
    17                 if ( file_exists(ABSPATH . PLUGINDIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook)) 
     17                if ( is_activatedplugin(ABSPATH . PLUGINDIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook)) 
    1818                        echo "\n\t<li><a href='admin.php?page={$submenu[$item[2]][0][2]}'$class>{$item[0]}</a></li>"; 
    1919                else 
    2020                        echo "\n\t<li><a href='{$submenu[$item[2]][0][2]}'$class>{$item[0]}</a></li>"; 
    2121        } else if ( current_user_can($item[1]) ) { 
    22                 if ( file_exists(ABSPATH . PLUGINDIR . "/{$item[2]}") ) 
     22                if ( is_activatedplugin(ABSPATH . PLUGINDIR . "/{$item[2]}") ) 
    2323                        echo "\n\t<li><a href='admin.php?page={$item[2]}'$class>{$item[0]}</a></li>"; 
    2424                else 
    2525                        echo "\n\t<li><a href='{$item[2]}'$class>{$item[0]}</a></li>"; 
     
    4747 
    4848$menu_hook = get_plugin_page_hook($item[2], $parent_file); 
    4949 
    50 if (file_exists(ABSPATH . PLUGINDIR . "/{$item[2]}") || ! empty($menu_hook)) { 
     50if (is_activatedplugin(ABSPATH . PLUGINDIR . "/{$item[2]}") || ! empty($menu_hook)) { 
    5151        if ( 'admin.php' == $pagenow ) 
    5252                echo "\n\t<li><a href='admin.php?page={$item[2]}'$class>{$item[0]}</a></li>"; 
    5353        else