WordPress.org

Make WordPress Core

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

File 4787-check-plugin-activated.diff, 2.8 KB (added by ozh, 11 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