17 define(
'PLUGINS_PREFIX',
'plugins/');
32 if ($category !==
null) {
33 if (!isset($plugins[$category])) $plugins[$category] = [];
34 return $plugins[$category];
46 if (!empty($plugins))
foreach ($plugins as $list) {
47 if (is_array($list)) $allPlugins += $list;
64 static function register($category, $plugin, $path, $mainContextId =
null) {
65 $pluginName = $plugin->getName();
69 if (!$plugin->register($category, $path, $mainContextId))
return false;
72 if (isset($plugins[$category][$pluginName]))
return false;
74 if (isset($plugins[$category])) $plugins[$category][$pluginName] = $plugin;
75 else $plugins[$category] = [$pluginName => $plugin];
87 return $plugins[$category][$name]??
null;
103 static function loadCategory ($category, $enabledOnly =
false, $mainContextId =
null) {
105 $categoryDir = PLUGINS_PREFIX . $category;
106 if (!is_dir($categoryDir))
return $plugins;
111 $products =
$application->getEnabledProducts(
'plugins.'.$category, $mainContextId);
112 foreach ($products as $product) {
113 $file = $product->getProduct();
115 if ($plugin instanceof
Plugin) {
116 $plugins[$plugin->getSeq()][
"$categoryDir/$file"] = $plugin;
123 $handle = opendir($categoryDir);
124 while (($file = readdir($handle)) !==
false) {
125 if ($file ==
'.' || $file ==
'..')
continue;
127 if ($plugin && is_object($plugin)) {
128 $plugins[$plugin->getSeq()][
"$categoryDir/$file"] = $plugin;
140 foreach ($plugins as $seq => $junk1) {
141 foreach ($plugins[$seq] as $pluginPath => $junk2) {
142 self::register($category, $plugins[$seq][$pluginPath], $pluginPath, $mainContextId);
155 uasort($plugins,
function($a, $b) {
156 return $a->getSeq() - $b->getSeq();
175 static function loadPlugin($category, $pathName, $mainContextId =
null) {
176 $pluginPath = PLUGINS_PREFIX . $category .
'/' . $pathName;
177 if (!is_dir($pluginPath) || !file_exists($pluginPath .
'/index.php'))
return null;
179 $plugin = @include(
"$pluginPath/index.php");
180 if (!is_object($plugin))
return null;
210 foreach (self::getCategories() as $category) {
232 if(!is_null($classToCheck) && !preg_match(
'/[a-zA-Z0-9]+/', $file))
throw new Exception(
'Invalid product name "'.$file.
'"!');
234 $pluginPath =
"$categoryDir/$file";
235 if (!is_dir($pluginPath))
return null;
239 $pluginWrapper =
"$pluginPath/index.php";
240 if (file_exists($pluginWrapper)) {
241 $plugin = include($pluginWrapper);
242 assert(is_a($plugin, $classToCheck ?:
'Plugin'));
246 $pluginClassName = ucfirst($file).ucfirst($category).
'Plugin';
247 $pluginClassFile = $pluginClassName.
'.inc.php';
248 if (file_exists(
"$pluginPath/$pluginClassFile")) {
250 $pluginPackage =
'plugins.'.$category.
'.'.$file;
251 $plugin =
instantiate($pluginPackage.
'.'.$pluginClassName, $pluginClassName, $pluginPackage,
'register');
252 assert(is_a($plugin, $classToCheck ?:
'Plugin'));