public static function list_all()
{
$plugins = array();
$plugindirs = array(HABARI_PATH . '/system/plugins/', HABARI_PATH . '/3rdparty/plugins/', HABARI_PATH . '/user/plugins/');
if (Site::CONFIG_LOCAL != Site::$config_type) {
// include site-specific plugins
$plugindirs[] = Site::get_dir('config') . '/plugins/';
}
$dirs = array();
foreach ($plugindirs as $plugindir) {
if (file_exists($plugindir)) {
$dirs = array_merge($dirs, Utils::glob($plugindir . '*', GLOB_ONLYDIR | GLOB_MARK));
}
}
foreach ($dirs as $dir) {
$dirfiles = Utils::glob($dir . '*.plugin.php');
if (!empty($dirfiles)) {
$dirfiles = array_combine(array_map('basename', $dirfiles), array_map(function ($s) {
return str_replace('\\', '/', $s);
}, $dirfiles));
$plugins = array_merge($plugins, $dirfiles);
}
$dirfiles = Utils::glob($dir . '*.phar');
foreach ($dirfiles as $filename) {
if (preg_match('/\\.phar$/i', $filename)) {
$d = new \DirectoryIterator('phar://' . $filename);
foreach ($d as $fileinfo) {
if ($fileinfo->isFile() && preg_match('/\\.plugin.php$/i', $fileinfo->getFilename())) {
$plugins[$fileinfo->getFilename()] = str_replace('\\', '/', $fileinfo->getPathname());
}
}
}
}
}
ksort($plugins);
return $plugins;
}