fix re-enable an enabled plugin

This commit is contained in:
Pig Fang 2020-08-22 15:10:33 +08:00
parent 02ca2108a3
commit acddaf92ba
No known key found for this signature in database
GPG Key ID: A8198F548DADA9E2
2 changed files with 26 additions and 16 deletions

View File

@ -267,29 +267,35 @@ class PluginManager
*/
public function enable($plugin)
{
/** @var Plugin|null */
$plugin = is_string($plugin) ? $this->get($plugin) : $plugin;
if ($plugin && !$plugin->isEnabled()) {
$unsatisfied = $this->getUnsatisfied($plugin);
$conflicts = $this->getConflicts($plugin);
if ($unsatisfied->isNotEmpty() || $conflicts->isNotEmpty()) {
return compact('unsatisfied', 'conflicts');
}
$this->enabled->put($plugin->name, ['version' => $plugin->version]);
$this->saveEnabled();
$plugin->setEnabled(true);
$this->dispatcher->dispatch(new Events\PluginWasEnabled($plugin));
return true;
} else {
if (empty($plugin)) {
return false;
}
if ($plugin->isEnabled()) {
return true;
}
$unsatisfied = $this->getUnsatisfied($plugin);
$conflicts = $this->getConflicts($plugin);
if ($unsatisfied->isNotEmpty() || $conflicts->isNotEmpty()) {
return compact('unsatisfied', 'conflicts');
}
$this->enabled->put($plugin->name, ['version' => $plugin->version]);
$this->saveEnabled();
$plugin->setEnabled(true);
$this->dispatcher->dispatch(new Events\PluginWasEnabled($plugin));
return true;
}
public function disable($plugin)
{
/** @var Plugin|null */
$plugin = is_string($plugin) ? $this->get($plugin) : $plugin;
if ($plugin && $plugin->isEnabled()) {
$this->enabled->pull($plugin->name);

View File

@ -588,6 +588,10 @@ class PluginManagerTest extends TestCase
$this->assertFalse($manager->enable('nope'));
$this->assertTrue($manager->enable('fake'));
// re-enable should be allowed
$this->assertTrue($manager->enable('fake'));
Event::assertDispatched(Events\PluginWasEnabled::class, function ($event) {
$this->assertEquals('fake', $event->plugin->name);