mirror of
https://github.com/flarum/framework.git
synced 2025-03-10 04:05:30 +08:00
Recalculate enabled extensions and their dependencies if some listed in settings aren't installed (#2629)
This commit is contained in:
parent
75359162c6
commit
2b69deef72
@ -115,6 +115,21 @@ class ExtensionManager
|
|||||||
$extension->calculateDependencies($installedSet, $enabledIds);
|
$extension->calculateDependencies($installedSet, $enabledIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$needsReset = false;
|
||||||
|
$enabledExtensions = [];
|
||||||
|
foreach ($this->getEnabled() as $enabledKey) {
|
||||||
|
$extension = $extensions->get($enabledKey);
|
||||||
|
if (is_null($extension)) {
|
||||||
|
$needsReset = true;
|
||||||
|
} else {
|
||||||
|
$enabledExtensions[] = $extension;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($needsReset) {
|
||||||
|
$this->setEnabledExtensions($enabledExtensions);
|
||||||
|
}
|
||||||
|
|
||||||
$this->extensions = $extensions->sortBy(function ($extension, $name) {
|
$this->extensions = $extensions->sortBy(function ($extension, $name) {
|
||||||
return $extension->getTitle();
|
return $extension->getTitle();
|
||||||
});
|
});
|
||||||
@ -161,13 +176,13 @@ class ExtensionManager
|
|||||||
|
|
||||||
$this->dispatcher->dispatch(new Enabling($extension));
|
$this->dispatcher->dispatch(new Enabling($extension));
|
||||||
|
|
||||||
$enabledIds[] = $name;
|
|
||||||
|
|
||||||
$this->migrate($extension);
|
$this->migrate($extension);
|
||||||
|
|
||||||
$this->publishAssets($extension);
|
$this->publishAssets($extension);
|
||||||
|
|
||||||
$this->setEnabled($enabledIds);
|
$enabledExtensions = $this->getEnabledExtensions();
|
||||||
|
$enabledExtensions[] = $extension;
|
||||||
|
$this->setEnabledExtensions($enabledExtensions);
|
||||||
|
|
||||||
$extension->enable($this->container);
|
$extension->enable($this->container);
|
||||||
|
|
||||||
@ -181,17 +196,16 @@ class ExtensionManager
|
|||||||
*/
|
*/
|
||||||
public function disable($name)
|
public function disable($name)
|
||||||
{
|
{
|
||||||
$enabled = $this->getEnabled();
|
$extension = $this->getExtension($name);
|
||||||
|
$enabledExtensions = $this->getEnabledExtensions();
|
||||||
|
|
||||||
if (($k = array_search($name, $enabled)) === false) {
|
if (($k = array_search($extension, $enabledExtensions)) === false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$extension = $this->getExtension($name);
|
|
||||||
|
|
||||||
$dependentExtensions = [];
|
$dependentExtensions = [];
|
||||||
|
|
||||||
foreach ($this->getEnabledExtensions() as $possibleDependent) {
|
foreach ($enabledExtensions as $possibleDependent) {
|
||||||
if (in_array($extension->getId(), $possibleDependent->getExtensionDependencyIds())) {
|
if (in_array($extension->getId(), $possibleDependent->getExtensionDependencyIds())) {
|
||||||
$dependentExtensions[] = $possibleDependent;
|
$dependentExtensions[] = $possibleDependent;
|
||||||
}
|
}
|
||||||
@ -203,9 +217,8 @@ class ExtensionManager
|
|||||||
|
|
||||||
$this->dispatcher->dispatch(new Disabling($extension));
|
$this->dispatcher->dispatch(new Disabling($extension));
|
||||||
|
|
||||||
unset($enabled[$k]);
|
unset($enabledExtensions[$k]);
|
||||||
|
$this->setEnabledExtensions($enabledExtensions);
|
||||||
$this->setEnabled($enabled);
|
|
||||||
|
|
||||||
$extension->disable($this->container);
|
$extension->disable($this->container);
|
||||||
|
|
||||||
@ -350,15 +363,11 @@ class ExtensionManager
|
|||||||
/**
|
/**
|
||||||
* Persist the currently enabled extensions.
|
* Persist the currently enabled extensions.
|
||||||
*
|
*
|
||||||
* @param array $enabledIds
|
* @param array $enabledExtensions
|
||||||
*/
|
*/
|
||||||
protected function setEnabled(array $enabledIds)
|
protected function setEnabledExtensions(array $enabledExtensions)
|
||||||
{
|
{
|
||||||
$enabled = array_map(function ($id) {
|
$sortedEnabled = static::resolveExtensionOrder($enabledExtensions)['valid'];
|
||||||
return $this->getExtension($id);
|
|
||||||
}, array_unique($enabledIds));
|
|
||||||
|
|
||||||
$sortedEnabled = static::resolveExtensionOrder($enabled)['valid'];
|
|
||||||
|
|
||||||
$sortedEnabledIds = array_map(function (Extension $extension) {
|
$sortedEnabledIds = array_map(function (Extension $extension) {
|
||||||
return $extension->getId();
|
return $extension->getId();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user