Files
core/app/Providers/AppServiceProvider.php
T

121 lines
4.0 KiB
PHP

<?php
namespace App\Providers;
use App\CMS\Contracts\Repositories\Content as IContent;
use App\CMS\Contracts\Repositories\Module as IModule;
use App\CMS\Contracts\Repositories\Template as ITemplate;
use App\CMS\Handlers\Registrators\SearchEngineRegistrator;
use App\CMS\Handlers\Registrators\SettingsExtensionRegistrator;
use App\CMS\Handlers\Registrators\TemplateRegistrator;
use App\CMS\Handlers\Registrators\WidgetRegistrator;
use App\CMS\Handlers\Search\Content;
use App\CMS\Handlers\Search\Files;
use App\CMS\Handlers\Search\Presenters\AdminContent as AdminContentPresenter;
use App\CMS\Handlers\Search\Presenters\AdminFiles;
use App\CMS\Repositories\Content\Content as ContentRepository;
use App\CMS\Repositories\Module as ModuleRepository;
use App\CMS\Repositories\Templates\Template as TemplateRepository;
use App\CMS\Widgets\HtmlCode\HtmlCode;
use App\CMS\Widgets\Menu\Menu;
use Barryvdh\Debugbar\ServiceProvider as DebugBarServiceProvider;
use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;
use Pingpong\Menus\MenusServiceProvider;
use Pingpong\Modules\ModulesServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
* @return void
*/
public function boot()
{
// ignore running from artisan
if (App::runningInConsole()) {
return;
}
$this->registerWidgets();
$this->registerSettings();
$this->registerSearch();
$this->app->bind(IContent::class, ContentRepository::class);
$this->app->bind(IModule::class, ModuleRepository::class);
$this->app->bind(ITemplate::class, TemplateRepository::class);
}
/**
* Register any application services.
* @return void
*/
public function register()
{
if ($this->app->environment() == 'local' && class_exists(DebugBarServiceProvider::class)) {
$this->app->register(DebugBarServiceProvider::class);
}
// register PingPong module extension
$this->app->register(ModulesServiceProvider::class);
$this->app->register(MenusServiceProvider::class);
$this->app->register(LaravelLocalizationServiceProvider::class);
// create singletons for registering widgets
$this->app->singleton('registerWidget', function ($app) {
return new WidgetRegistrator($app);
});
// create registrator for template directories
$this->app->singleton('registerTemplateDir', function ($app) {
return new TemplateRegistrator($app);
});
$this->app->singleton('registerSettingsExtension', function ($app) {
return new SettingsExtensionRegistrator($app);
});
$this->app->singleton('registerSearchEngine', function ($app) {
return new SearchEngineRegistrator($app);
});
}
/**
* Method for registering widgets.
*/
private function registerWidgets()
{
/**
* @var $registrator WidgetRegistrator
*/
$registrator = $this->app->make('registerWidget');
// register all available widgets
$registrator->register(HtmlCode::class);
$registrator->register(Menu::class);
}
/**
* Register setting sections
*/
private function registerSettings()
{
$registrator = $this->app->make('registerSettingsExtension');
$registrator->register('basic', 'admin/settings.basic', 'admin.settings.parts.basic');
$registrator->register('meta', 'admin/settings.meta', 'admin.settings.parts.meta');
$registrator->register('social', 'admin/settings.socialSites', 'admin.settings.parts.social');
}
/**
* Register callbacks used for searching
*/
private function registerSearch()
{
$registrator = $this->app->make('registerSearchEngine');
$registrator->register(new Content(), new AdminContentPresenter(), SearchEngineRegistrator::ADMIN);
$registrator->register(new Files(), new AdminFiles(), SearchEngineRegistrator::ADMIN);
}
}