163 foreach ($this->settingListeners as $listener) {
164 Event::listen(
'eloquent.*: '.ModuleInstanceSetting::class, $listener);
177 $commandStore = $this->app->make(CommandStore::class);
178 foreach ($this->scheduledCommands as $command => $cron) {
179 $commandStore->schedule($this->
alias(), $command, $cron);
202 $this->app->make(ModuleManager::class)->register($this->
alias());
212 foreach ($this->permissions as $ability => $permission) {
213 if (!array_key_exists(
'name', $permission) || !array_key_exists(
'description', $permission)) {
214 throw new \Exception(
'Name and description of permission required.');
216 if (!array_key_exists(
'admin', $permission)) {
217 $permission[
'admin'] =
false;
219 Permission::register($this->
alias().
'.'.$ability, $permission[
'name'], $permission[
'description'], $this->
alias(), $permission[
'admin']);
230 $manager = $this->app->make(EventManager::class);
231 foreach ($this->events as $class => $meta) {
232 if (!array_key_exists(
'name', $meta) || !array_key_exists(
'description', $meta)) {
233 throw new \Exception(
'Name and description of event required.');
235 $manager->registerEvent($this->
alias(), $meta[
'name'], $class, $meta[
'description']);
244 $this->loadTranslationsFrom($this->
baseDirectory().
'/resources/lang', $this->
alias());
252 $this->publishes([$this->
baseDirectory().
'/config/config.php' => config_path($this->
alias().
'.php'),
254 $this->mergeConfigFrom(
265 $this->
baseDirectory().
'/resources/views' => resource_path(
'views/vendor/'.$this->
alias()),
278 if (!app()->environment(
'production')) {
279 $this->app->make(Factory::class)->load($this->
baseDirectory().
'/database/factories');
288 $this->loadMigrationsFrom($this->
baseDirectory().
'/database/migrations');
296 Route::prefix(
'/p/{activity_slug}/{module_instance_slug}/'.$this->
alias())
297 ->middleware([
'web',
'auth',
'verified',
'module',
'activity',
'participant',
'moduleparticipant'])
298 ->namespace($this->
namespace())
299 ->group($this->
baseDirectory().
'/routes/participant/web.php');
307 Route::prefix(
'/a/{activity_slug}/{module_instance_slug}/'.$this->
alias())
308 ->middleware([
'web',
'auth',
'verified',
'module',
'activity',
'administrator'])
309 ->namespace($this->
namespace())
318 Route::prefix(
'/api/p/{activity_slug}/{module_instance_slug}/'.$this->
alias())
319 ->middleware([
'api',
'auth',
'verified',
'module',
'activity',
'participant',
'moduleparticipant'])
320 ->namespace($this->
namespace())
321 ->group($this->
baseDirectory().
'/routes/participant/api.php');
329 Route::prefix(
'/api/a/{activity_slug}/{module_instance_slug}/'.$this->
alias())
330 ->middleware([
'api',
'auth',
'verified',
'module',
'activity',
'administrator'])
331 ->namespace($this->
namespace())
340 if ($this->app->runningInConsole()) {
341 $this->commands($this->commands);
350 $this->publishes([$this->
baseDirectory().
'/public/modules/'.$this->
alias() => public_path(
'modules/'.$this->
alias())]);
361 abstract public function namespace();
377 abstract public function alias(): string;
384 abstract public function settings(): Form;
393 $this->app->make(ModuleSettingsStore::class)->register($this->
alias(), $this->
settings());
405 View::composer(
'bristolsu::base',
function(\Illuminate\View\View $view) use ($path) {
406 $scripts = ($view->offsetExists(
'globalScripts') ? $view->offsetGet(
'globalScripts') : []);
407 $scripts[] = asset($path);
408 $view->with(
'globalScripts', $scripts);
mapParticipantApiRoutes()
registerScheduledCommands()
registerGlobalScript(string $path)
registerSettingListeners()