Files
ntspi-app/app/Providers/AppServiceProvider.php
T
F4ilji 1853b087f4 chore: update seeders, add MockDataSeeder and AssignAllPermissions command
- DatabaseSeeder: replace old seeders with MockDataSeeder
- RolesSeeder: update role definitions
- Add AssignAllPermissions artisan command
- Register MockDataSeeder in AppServiceProvider
- Register command in ConsoleKernel
2026-09-18 01:39:28 +05:00

145 lines
5.5 KiB
PHP
Executable File

<?php
namespace App\Providers;
use App\Containers\AdditionalEducation\Models\AdditionalEducation;
use App\Containers\AppStructure\Models\MainSection;
use App\Containers\AppStructure\Models\Page;
use App\Containers\AppStructure\Models\SubSection;
use App\Containers\Article\Models\Post;
use App\Containers\Education\Models\AdmissionCampaign;
use App\Containers\Education\Models\AdmissionPlan;
use App\Containers\Education\Models\DirectionStudy;
use App\Containers\Education\Models\EducationalProgram;
use App\Containers\Event\Models\Event;
use App\Containers\InstituteStructure\Models\Department;
use App\Containers\InstituteStructure\Models\Division;
use App\Containers\InstituteStructure\Models\Faculty;
use App\Containers\Schedule\Models\Schedule;
use App\Containers\Science\Models\AcademicJournal;
use App\Containers\User\Models\User;
use App\Containers\User\Models\UserDetail;
use App\Containers\User\Observers\UserDetailObserver;
use App\Containers\Widget\Models\ContactWidget;
use App\Containers\Widget\Models\PageReferenceList;
use App\Containers\Widget\Models\Slide;
use App\Filament\Resources\MainSectionResource\RelationManagers\SubSectionsRelationManager;
use App\Observers\AcademicJournalObserver;
use App\Observers\AdditionalEducationObserver;
use App\Observers\AdmissionCampaignObserver;
use App\Observers\ContactWidgetObserver;
use App\Observers\DepartmentObserver;
use App\Observers\DivisionObserver;
use App\Observers\EducationalProgramObserver;
use App\Observers\EventObserver;
use App\Observers\FacultyObserver;
use App\Observers\MainSectionObserver;
use App\Observers\PageObserver;
use App\Observers\PageReferenceListObserver;
use App\Observers\PostObserver;
use App\Observers\ScheduleObserver;
use App\Observers\SlideObserver;
use App\Observers\SubSectionObserver;
use App\Observers\UserObserver;
use App\Services\App\Cache\SliderCacheService;
use App\Services\App\Cache\SubSectionCacheService;
use App\Ship\Contracts\SeoServiceInterface;
use App\Ship\Services\SeoPageService;
use Carbon\Carbon;
use Filament\Facades\Filament;
use Filament\Support\Facades\FilamentView;
use Filament\Tables\View\TablesRenderHook;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Vite;
use Illuminate\Support\Facades\Str;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Sleep;
use Intervention\Image\Facades\Image;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
$this->app->bind(SeoServiceInterface::class, SeoPageService::class);
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
self::configureFactoryResolution();
self::setObserversByModel();
self::setLocaleTime();
Model::preventLazyLoading(!app()->isProduction());
self::registerFilamentNavigationGroups();
FilamentView::registerRenderHook(TablesRenderHook::TOOLBAR_REORDER_TRIGGER_AFTER, function () {
(new SliderCacheService())->clearAllCacheByModel();
(new SubSectionCacheService())->clearAllCacheByModel();
});
}
private static function configureFactoryResolution(): void
{
Factory::guessFactoryNamesUsing(function (string $modelName) {
$appNamespace = 'App\\';
if (str_starts_with($modelName, $appNamespace.'Models\\')) {
$modelName = substr($modelName, strlen($appNamespace.'Models\\'));
} else {
$modelName = substr($modelName, strlen($appNamespace));
}
return 'Database\\Factories\\'.$modelName.'Factory';
});
}
private static function setObserversByModel() : void {
Page::observe(PageObserver::class);
Post::observe(PostObserver::class);
MainSection::observe(MainSectionObserver::class);
SubSection::observe(SubSectionObserver::class);
Slide::observe(SlideObserver::class);
AcademicJournal::observe(AcademicJournalObserver::class);
AdditionalEducation::observe(AdditionalEducationObserver::class);
Department::observe(DepartmentObserver::class);
Division::observe(DivisionObserver::class);
Event::observe(EventObserver::class);
Faculty::observe(FacultyObserver::class);
User::observe(UserObserver::class);
UserDetail::observe(UserDetailObserver::class);
EducationalProgram::observe(EducationalProgramObserver::class);
Schedule::observe(ScheduleObserver::class);
ContactWidget::observe(ContactWidgetObserver::class);
PageReferenceList::observe(PageReferenceListObserver::class);
AdmissionPlan::observe(AdmissionCampaignObserver::class);
AdmissionCampaign::observe(AdmissionCampaignObserver::class);
DirectionStudy::observe(AdmissionCampaignObserver::class);
}
private static function setLocaleTime() : void {
setlocale(LC_TIME, 'ru_RU.UTF-8');
Carbon::setLocale(config('app.locale'));
}
private static function registerFilamentNavigationGroups(): void
{
Filament::registerNavigationGroups([
'Виджеты',
'Новости и мероприятия',
'Структура приложения',
'Структура института',
'Образование',
'Расписание и группы',
'Наука',
'Settings',
]);
}
}