137 lines
4.0 KiB
PHP
137 lines
4.0 KiB
PHP
|
<?php
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
/**
|
||
|
* CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
|
||
|
* Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
|
||
|
*
|
||
|
* Licensed under The MIT License
|
||
|
* For full copyright and license information, please see the LICENSE.txt
|
||
|
* Redistributions of files must retain the above copyright notice.
|
||
|
*
|
||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
|
||
|
* @link https://cakephp.org CakePHP(tm) Project
|
||
|
* @since 2.0.0
|
||
|
* @license https://opensource.org/licenses/mit-license.php MIT License
|
||
|
*/
|
||
|
namespace Cake\Core;
|
||
|
|
||
|
/**
|
||
|
* Plugin is used to load and locate plugins.
|
||
|
*
|
||
|
* It also can retrieve plugin paths and load their bootstrap and routes files.
|
||
|
*
|
||
|
* @link https://book.cakephp.org/4/en/plugins.html
|
||
|
*/
|
||
|
class Plugin
|
||
|
{
|
||
|
/**
|
||
|
* Holds a list of all loaded plugins and their configuration
|
||
|
*
|
||
|
* @var \Cake\Core\PluginCollection|null
|
||
|
*/
|
||
|
protected static $plugins;
|
||
|
|
||
|
/**
|
||
|
* Returns the filesystem path for a plugin
|
||
|
*
|
||
|
* @param string $name name of the plugin in CamelCase format
|
||
|
* @return string path to the plugin folder
|
||
|
* @throws \Cake\Core\Exception\MissingPluginException If the folder for plugin was not found
|
||
|
* or plugin has not been loaded.
|
||
|
*/
|
||
|
public static function path(string $name): string
|
||
|
{
|
||
|
$plugin = static::getCollection()->get($name);
|
||
|
|
||
|
return $plugin->getPath();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the filesystem path for plugin's folder containing class files.
|
||
|
*
|
||
|
* @param string $name name of the plugin in CamelCase format.
|
||
|
* @return string Path to the plugin folder containing class files.
|
||
|
* @throws \Cake\Core\Exception\MissingPluginException If plugin has not been loaded.
|
||
|
*/
|
||
|
public static function classPath(string $name): string
|
||
|
{
|
||
|
$plugin = static::getCollection()->get($name);
|
||
|
|
||
|
return $plugin->getClassPath();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the filesystem path for plugin's folder containing config files.
|
||
|
*
|
||
|
* @param string $name name of the plugin in CamelCase format.
|
||
|
* @return string Path to the plugin folder containing config files.
|
||
|
* @throws \Cake\Core\Exception\MissingPluginException If plugin has not been loaded.
|
||
|
*/
|
||
|
public static function configPath(string $name): string
|
||
|
{
|
||
|
$plugin = static::getCollection()->get($name);
|
||
|
|
||
|
return $plugin->getConfigPath();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the filesystem path for plugin's folder containing template files.
|
||
|
*
|
||
|
* @param string $name name of the plugin in CamelCase format.
|
||
|
* @return string Path to the plugin folder containing template files.
|
||
|
* @throws \Cake\Core\Exception\MissingPluginException If plugin has not been loaded.
|
||
|
*/
|
||
|
public static function templatePath(string $name): string
|
||
|
{
|
||
|
$plugin = static::getCollection()->get($name);
|
||
|
|
||
|
return $plugin->getTemplatePath();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the plugin $plugin is already loaded.
|
||
|
*
|
||
|
* @param string $plugin Plugin name.
|
||
|
* @return bool
|
||
|
* @since 3.7.0
|
||
|
*/
|
||
|
public static function isLoaded(string $plugin): bool
|
||
|
{
|
||
|
return static::getCollection()->has($plugin);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return a list of loaded plugins.
|
||
|
*
|
||
|
* @return array<string> A list of plugins that have been loaded
|
||
|
*/
|
||
|
public static function loaded(): array
|
||
|
{
|
||
|
$names = [];
|
||
|
foreach (static::getCollection() as $plugin) {
|
||
|
$names[] = $plugin->getName();
|
||
|
}
|
||
|
sort($names);
|
||
|
|
||
|
return $names;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the shared plugin collection.
|
||
|
*
|
||
|
* This method should generally not be used during application
|
||
|
* runtime as plugins should be set during Application startup.
|
||
|
*
|
||
|
* @return \Cake\Core\PluginCollection
|
||
|
*/
|
||
|
public static function getCollection(): PluginCollection
|
||
|
{
|
||
|
if (!isset(static::$plugins)) {
|
||
|
static::$plugins = new PluginCollection();
|
||
|
}
|
||
|
|
||
|
return static::$plugins;
|
||
|
}
|
||
|
}
|