registerAll(); /* * Error handling for uncaught Exceptions */ App::error(function(\Exception $exception, $httpCode, $isConsole){ $handler = new ErrorHandler; return $handler->handleException($exception, $httpCode, $isConsole); }); /* * Register .htm extension for Twig views */ App::make('view')->addExtension('htm', 'twig', function() { $twigEnvironment = new Twig_Environment(new TwigLoader(), ['auto_reload' => true]); return new TwigEngine($twigEnvironment); }); /* * Override system email with email settings */ Event::listen('mailer.register', function() { if (EmailSettings::isConfigured()) EmailSettings::applyConfigValues(); }); /* * Register other module providers */ foreach (Config::get('cms.loadModules', []) as $module) { if (strtolower(trim($module)) == 'system') continue; App::register('\\' . $module . '\ServiceProvider'); } /* * Register navigation */ BackendMenu::registerCallback(function($manager) { $manager->registerMenuItems('October.System', [ 'system' => [ 'label' => 'system::lang.system.menu_label', 'icon' => 'icon-cog', 'url' => Backend::url('system/settings'), 'permissions' => ['backend.*', 'system.*'], 'order' => 1000, 'sideMenu' => [ 'settings' => [ 'label' => 'system::lang.settings.menu_label', 'icon' => 'icon-cogs', 'url' => Backend::url('system/settings'), 'permissions' => ['system.manage_settings'] ], 'users' => [ 'label' => 'backend::lang.user.menu_label', 'icon' => 'icon-user', 'url' => Backend::url('backend/users'), 'permissions' => ['backend.manage_users'] ], 'updates' => [ 'label' => 'system::lang.updates.menu_label', 'icon' => 'icon-cloud-download', 'url' => Backend::url('system/updates'), 'permissions' => ['system.manage_updates'] ] ] ] ]); }); /* * Register report widgets */ WidgetManager::instance()->registerReportWidgets(function($manager){ $manager->registerReportWidget('System\ReportWidgets\Status', [ 'label' => 'System status', 'context' => 'dashboard' ]); }); /* * Register permissions */ BackendAuth::registerCallback(function($manager) { $manager->registerPermissions('October.System', [ 'system.manage_settings' => ['label' => 'Manage system settings', 'tab' => 'System'], 'system.manage_updates' => ['label' => 'Manage software updates', 'tab' => 'System'], ]); }); /* * Register settings */ SettingsManager::instance()->registerCallback(function($manager){ $manager->registerSettingItems('October.System', [ 'email' => [ 'label' => 'Email Configuration', 'description' => 'Manage email configuration.', 'category' => 'System', 'icon' => 'icon-envelope', 'class' => 'System\Models\EmailSettings', 'sort' => 100 ], ]); }); /* * Register console commands */ $this->registerConsoleCommand('october.up', 'System\Console\OctoberUp'); $this->registerConsoleCommand('october.down', 'System\Console\OctoberDown'); $this->registerConsoleCommand('october.update', 'System\Console\OctoberUpdate'); $this->registerConsoleCommand('plugin.install', 'System\Console\PluginInstall'); $this->registerConsoleCommand('plugin.remove', 'System\Console\PluginRemove'); $this->registerConsoleCommand('plugin.refresh', 'System\Console\PluginRefresh'); /* * Override clear cache command */ App::bindShared('command.cache.clear', function($app) { return new \System\Console\CacheClear($app['cache'], $app['files']); }); } /** * Bootstrap the module events. * * @return void */ public function boot() { /* * Boot plugins */ $pluginManager = PluginManager::instance(); $pluginManager->bootAll(); parent::boot('system'); } }