src/web/app/mu-plugins/bedrock-autoloader.php
author ymh <ymh.work@gmail.com>
Fri, 06 Dec 2019 01:17:36 +0100
changeset 5 170e0b52c451
parent 3 5301eb6ce6e2
permissions -rw-r--r--
Add languages
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * Plugin Name: Bedrock Autoloader
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * Plugin URI: https://github.com/roots/bedrock/
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * Description: An autoloader that enables standard plugins to be required just like must-use plugins. The autoloaded plugins are included during mu-plugin loading. An asterisk (*) next to the name of the plugin designates the plugins that have been autoloaded.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * Version: 1.0.0
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * Author: Roots
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * Author URI: https://roots.io/
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * License: MIT License
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
namespace Roots\Bedrock;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
if (!is_blog_installed()) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    return;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
}
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
/**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * Class Autoloader
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 * @package Roots\Bedrock
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * @author Roots
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 * @link https://roots.io/
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
class Autoloader
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
{
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    /** @var static Singleton instance */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    private static $instance;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    /** @var array Store Autoloader cache and site option */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    private $cache;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    /** @var array Autoloaded plugins */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    private $autoPlugins;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    /** @var array Autoloaded mu-plugins */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    private $muPlugins;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    /** @var int Number of plugins */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
    private $count;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    /** @var array Newly activated plugins */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
    private $activated;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    /** @var string Relative path to the mu-plugins dir */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    private $relativePath;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    /**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
     * Create singleton, populate vars, and set WordPress hooks
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
     */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    public function __construct()
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
    {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
        if (isset(self::$instance)) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
            return;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
        }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        self::$instance = $this;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        $this->relativePath = '/../' . basename(__DIR__);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        if (is_admin()) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
            add_filter('show_advanced_plugins', [$this, 'showInAdmin'], 0, 2);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
        $this->loadPlugins();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
   /**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    * Run some checks then autoload our plugins.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    public function loadPlugins()
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        $this->checkCache();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
        $this->validatePlugins();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
        $this->countPlugins();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        array_map(static function () {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
            include_once WPMU_PLUGIN_DIR . '/' . func_get_args()[0];
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
        }, array_keys($this->cache['plugins']));
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        $this->pluginHooks();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    /**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
     * Filter show_advanced_plugins to display the autoloaded plugins.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
     * @param $show bool Whether to show the advanced plugins for the specified plugin type.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
     * @param $type string The plugin type, i.e., `mustuse` or `dropins`
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
     * @return bool We return `false` to prevent WordPress from overriding our work
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
     * {@internal We add the plugin details ourselves, so we return false to disable the filter.}
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
     */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    public function showInAdmin($show, $type)
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
        $screen = get_current_screen();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
        $current = is_multisite() ? 'plugins-network' : 'plugins';
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        if ($screen->base !== $current || $type !== 'mustuse' || !current_user_can('activate_plugins')) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
            return $show;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
        }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
        $this->updateCache();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        $this->autoPlugins = array_map(function ($auto_plugin) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
            $auto_plugin['Name'] .= ' *';
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
            return $auto_plugin;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
        }, $this->autoPlugins);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        $GLOBALS['plugins']['mustuse'] = array_unique(array_merge($this->autoPlugins, $this->muPlugins), SORT_REGULAR);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        return false;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    /**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
     * This sets the cache or calls for an update
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
     */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
    private function checkCache()
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
    {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
        $cache = get_site_option('bedrock_autoloader');
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
        if ($cache === false || (isset($cache['plugins'], $cache['count']) && count($cache['plugins']) !== $cache['count'])) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
            $this->updateCache();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
            return;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
        }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
        $this->cache = $cache;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
    /**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
     * Get the plugins and mu-plugins from the mu-plugin path and remove duplicates.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
     * Check cache against current plugins for newly activated plugins.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
     * After that, we can update the cache.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
     */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    private function updateCache()
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
    {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
        $this->autoPlugins = get_plugins($this->relativePath);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
        $this->muPlugins   = get_mu_plugins();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
        $plugins           = array_diff_key($this->autoPlugins, $this->muPlugins);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
        $rebuild           = !is_array($this->cache['plugins']);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
        $this->activated   = $rebuild ? $plugins : array_diff_key($plugins, $this->cache['plugins']);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
        $this->cache       = ['plugins' => $plugins, 'count' => $this->countPlugins()];
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
        update_site_option('bedrock_autoloader', $this->cache);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
    /**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
     * This accounts for the plugin hooks that would run if the plugins were
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
     * loaded as usual. Plugins are removed by deletion, so there's no way
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
     * to deactivate or uninstall.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
     */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
    private function pluginHooks()
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
    {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
        if (!is_array($this->activated)) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
            return;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
        }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
        foreach ($this->activated as $plugin_file => $plugin_info) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
            do_action('activate_' . $plugin_file);
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
        }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
    }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
    /**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
     * Check that the plugin file exists, if it doesn't update the cache.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
     */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
    private function validatePlugins()
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
        foreach ($this->cache['plugins'] as $plugin_file => $plugin_info) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
            if (!file_exists(WPMU_PLUGIN_DIR . '/' . $plugin_file)) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
                $this->updateCache();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
                break;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
            }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
        }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
    }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
    /**
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
     * Count the number of autoloaded plugins.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
     *
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
     * Count our plugins (but only once) by counting the top level folders in the
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
     * mu-plugins dir. If it's more or less than last time, update the cache.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
     *
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
     * @return int Number of autoloaded plugins.
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
     */
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
    private function countPlugins()
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
    {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
        if (isset($this->count)) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
            return $this->count;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
        }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
        $count = count(glob(WPMU_PLUGIN_DIR . '/*/', GLOB_ONLYDIR | GLOB_NOSORT));
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
        if (!isset($this->cache['count']) || $count !== $this->cache['count']) {
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
            $this->count = $count;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
            $this->updateCache();
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
        }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
        return $this->count;
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
    }
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
}
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
5301eb6ce6e2 add missing files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
new Autoloader();