add support for callback of enabling/disabling/deleting plugins
This commit is contained in:
parent
10a9397fd0
commit
9486f19f5d
21
app/Events/PluginWasDisabled.php
Normal file
21
app/Events/PluginWasDisabled.php
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Events;
|
||||||
|
|
||||||
|
use App\Services\Plugin;
|
||||||
|
|
||||||
|
class PluginWasDisabled extends Event
|
||||||
|
{
|
||||||
|
public $plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new event instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(Plugin $plugin)
|
||||||
|
{
|
||||||
|
$this->plugin = $plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
21
app/Events/PluginWasEnabled.php
Normal file
21
app/Events/PluginWasEnabled.php
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Events;
|
||||||
|
|
||||||
|
use App\Services\Plugin;
|
||||||
|
|
||||||
|
class PluginWasEnabled extends Event
|
||||||
|
{
|
||||||
|
public $plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new event instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(Plugin $plugin)
|
||||||
|
{
|
||||||
|
$this->plugin = $plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -2,12 +2,25 @@
|
||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use Event;
|
||||||
|
use App\Events;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use App\Services\PluginManager;
|
use App\Services\PluginManager;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
class PluginServiceProvider extends ServiceProvider
|
class PluginServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Map of event class names to callback names.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $eventCallbackMap = [
|
||||||
|
Events\PluginWasEnabled::class => 'enabled',
|
||||||
|
Events\PluginWasDeleted::class => 'deleted',
|
||||||
|
Events\PluginWasDisabled::class => 'disabled'
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bootstrap any application services.
|
* Bootstrap any application services.
|
||||||
*
|
*
|
||||||
|
|
@ -33,6 +46,7 @@ class PluginServiceProvider extends ServiceProvider
|
||||||
$loader->addNamespace($plugin->getNameSpace(), $plugin->getPath()."/lang");
|
$loader->addNamespace($plugin->getNameSpace(), $plugin->getPath()."/lang");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->registerPluginCallbackListener();
|
||||||
$this->registerClassAutoloader($src_paths);
|
$this->registerClassAutoloader($src_paths);
|
||||||
|
|
||||||
$bootstrappers = $plugins->getEnabledBootstrappers();
|
$bootstrappers = $plugins->getEnabledBootstrappers();
|
||||||
|
|
@ -44,6 +58,20 @@ class PluginServiceProvider extends ServiceProvider
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function registerPluginCallbackListener()
|
||||||
|
{
|
||||||
|
Event::listen(array_keys($this->eventCallbackMap), function ($event) {
|
||||||
|
// call callback functions of plugin
|
||||||
|
if (file_exists($filename = $event->plugin->getPath()."/callbacks.php")) {
|
||||||
|
$callbacks = require $filename;
|
||||||
|
|
||||||
|
$callback = array_get($callbacks, $this->eventCallbackMap[get_class($event)]);
|
||||||
|
|
||||||
|
return $callback ? call_user_func($callback, $event->plugin) : null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register any application services.
|
* Register any application services.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,8 @@
|
||||||
|
|
||||||
namespace App\Services;
|
namespace App\Services;
|
||||||
|
|
||||||
|
use App\Events;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use App\Events\PluginWasEnabled;
|
|
||||||
use App\Events\PluginWasDisabled;
|
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use App\Events\PluginWasUninstalled;
|
use App\Events\PluginWasUninstalled;
|
||||||
use Illuminate\Filesystem\Filesystem;
|
use Illuminate\Filesystem\Filesystem;
|
||||||
|
|
@ -131,7 +130,7 @@ class PluginManager
|
||||||
|
|
||||||
$plugin->setEnabled(true);
|
$plugin->setEnabled(true);
|
||||||
|
|
||||||
// $this->dispatcher->fire(new PluginWasEnabled($plugin));
|
$this->dispatcher->fire(new Events\PluginWasEnabled($plugin));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -153,7 +152,7 @@ class PluginManager
|
||||||
|
|
||||||
$plugin->setEnabled(false);
|
$plugin->setEnabled(false);
|
||||||
|
|
||||||
// $this->dispatcher->fire(new PluginWasDisabled($plugin));
|
$this->dispatcher->fire(new Events\PluginWasDisabled($plugin));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -173,7 +172,7 @@ class PluginManager
|
||||||
// refresh plugin list
|
// refresh plugin list
|
||||||
$this->plugins = null;
|
$this->plugins = null;
|
||||||
|
|
||||||
// $this->dispatcher->fire(new PluginWasUninstalled($plugin));
|
$this->dispatcher->fire(new Events\PluginWasDeleted($plugin));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user