mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
MDL-42497 add listing of orphaned subplugin types
This commit is contained in:
parent
5386f0bbfe
commit
a35fce24ca
2 changed files with 109 additions and 0 deletions
|
@ -356,6 +356,13 @@ class core_plugin_manager {
|
|||
|
||||
$types = core_component::get_plugin_types();
|
||||
|
||||
if (!isset($types[$type])) {
|
||||
// Orphaned subplugins!
|
||||
$plugintypeclass = self::resolve_plugininfo_class($type);
|
||||
$this->pluginsinfo[$type] = $plugintypeclass::get_plugins($type, null, $plugintypeclass);
|
||||
return $this->pluginsinfo[$type];
|
||||
}
|
||||
|
||||
/** @var \core\plugininfo\base $plugintypeclass */
|
||||
$plugintypeclass = self::resolve_plugininfo_class($type);
|
||||
$plugins = $plugintypeclass::get_plugins($type, $types[$type], $plugintypeclass);
|
||||
|
@ -386,6 +393,14 @@ class core_plugin_manager {
|
|||
foreach ($plugintypes as $plugintype => $plugintyperootdir) {
|
||||
$this->pluginsinfo[$plugintype] = null;
|
||||
}
|
||||
|
||||
// Add orphaned subplugin types.
|
||||
$this->load_installed_plugins();
|
||||
foreach ($this->installedplugins as $plugintype => $unused) {
|
||||
if (!isset($plugintypes[$plugintype])) {
|
||||
$this->pluginsinfo[$plugintype] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -395,6 +410,11 @@ class core_plugin_manager {
|
|||
* @return string name of pluginfo class for give plugin type
|
||||
*/
|
||||
public static function resolve_plugininfo_class($type) {
|
||||
$plugintypes = core_component::get_plugin_types();
|
||||
if (!isset($plugintypes[$type])) {
|
||||
return '\core\plugininfo\orphaned';
|
||||
}
|
||||
|
||||
$parent = core_component::get_subtype_parent($type);
|
||||
|
||||
if ($parent) {
|
||||
|
|
89
lib/classes/plugininfo/orphaned.php
Normal file
89
lib/classes/plugininfo/orphaned.php
Normal file
|
@ -0,0 +1,89 @@
|
|||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Defines class used for orphaned subplugins.
|
||||
*
|
||||
* @package core
|
||||
* @copyright 2013 Petr Skoda {@link http://skodak.org}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
namespace core\plugininfo;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
|
||||
/**
|
||||
* Orphaned subplugins class.
|
||||
*/
|
||||
class orphaned extends base {
|
||||
public function is_uninstall_allowed() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* We do not know if orphaned subplugins are enabled.
|
||||
* @return bool
|
||||
*/
|
||||
public function is_enabled() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* No lang strings are present.
|
||||
*/
|
||||
public function init_display_name() {
|
||||
$this->displayname = $this->component;
|
||||
}
|
||||
|
||||
/**
|
||||
* Oprhaned plugins can not be enabled.
|
||||
* @return array|null of enabled plugins $pluginname=>$pluginname, null means unknown
|
||||
*/
|
||||
public static function get_enabled_plugins() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gathers and returns the information about all plugins of the given type,
|
||||
* either on disk or previously installed.
|
||||
*
|
||||
* @param string $type the name of the plugintype, eg. mod, auth or workshopform
|
||||
* @param string $typerootdir full path to the location of the plugin dir
|
||||
* @param string $typeclass the name of the actually called class
|
||||
* @return array of plugintype classes, indexed by the plugin name
|
||||
*/
|
||||
public static function get_plugins($type, $typerootdir, $typeclass) {
|
||||
$return = array();
|
||||
$manager = \core_plugin_manager::instance();
|
||||
$plugins = $manager->get_installed_plugins($type);
|
||||
|
||||
foreach ($plugins as $name => $version) {
|
||||
$plugin = new $typeclass();
|
||||
$plugin->type = $type;
|
||||
$plugin->typerootdir = $typerootdir;
|
||||
$plugin->name = $name;
|
||||
$plugin->rootdir = null;
|
||||
$plugin->displayname = $name;
|
||||
$plugin->versiondb = $version;
|
||||
$plugin->init_is_standard();
|
||||
|
||||
$return[$name] = $plugin;
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue