-
-
Notifications
You must be signed in to change notification settings - Fork 482
/
AppServiceProvider.php
141 lines (116 loc) · 6.5 KB
/
AppServiceProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?php
namespace Statamic\Providers;
use Illuminate\Routing\Router;
use Illuminate\Support\Carbon;
use Illuminate\Support\ServiceProvider;
use Statamic\Facades\Preference;
use Statamic\Sites\Sites;
use Statamic\Statamic;
class AppServiceProvider extends ServiceProvider
{
protected $root = __DIR__.'/../..';
protected $configFiles = [
'amp', 'api', 'assets', 'cp', 'editions', 'forms', 'git', 'graphql', 'live_preview', 'oauth', 'protect', 'revisions',
'routes', 'search', 'static_caching', 'sites', 'stache', 'system', 'users',
];
public function boot()
{
$this->app->booted(function () {
Statamic::runBootedCallbacks();
$this->loadRoutesFrom("{$this->root}/routes/routes.php");
});
$this->registerMiddlewareGroup();
$this->app[\Illuminate\Contracts\Http\Kernel::class]
->pushMiddleware(\Statamic\Http\Middleware\PoweredByHeader::class)
->pushMiddleware(\Statamic\Http\Middleware\CheckComposerJsonScripts::class)
->pushMiddleware(\Statamic\Http\Middleware\CheckMultisite::class)
->pushMiddleware(\Statamic\Http\Middleware\DisableFloc::class);
$this->loadViewsFrom("{$this->root}/resources/views", 'statamic');
collect($this->configFiles)->each(function ($config) {
$this->publishes(["{$this->root}/config/$config.php" => config_path("statamic/$config.php")], 'statamic');
});
$this->publishes([
"{$this->root}/resources/users" => resource_path('users'),
], 'statamic');
$this->publishes([
"{$this->root}/resources/dist" => public_path('vendor/statamic/cp'),
], 'statamic-cp');
$this->loadTranslationsFrom("{$this->root}/resources/lang", 'statamic');
$this->loadJsonTranslationsFrom("{$this->root}/resources/lang");
$this->publishes([
"{$this->root}/resources/lang" => resource_path('lang/vendor/statamic'),
], 'statamic-translations');
$this->loadViewsFrom("{$this->root}/resources/views/extend", 'statamic');
$this->publishes([
"{$this->root}/resources/views/extend/forms" => resource_path('views/vendor/statamic/forms'),
], 'statamic-forms');
$this->app['redirect']->macro('cpRoute', function ($route, $parameters = []) {
return $this->to(cp_route($route, $parameters));
});
Carbon::setToStringFormat(config('statamic.system.date_format'));
Carbon::macro('inPreferredFormat', function () {
return $this->format(
Preference::get('date_format', config('statamic.cp.date_format'))
);
});
}
public function register()
{
collect($this->configFiles)->each(function ($config) {
$this->mergeConfigFrom("{$this->root}/config/$config.php", "statamic.$config");
});
$this->app->singleton(Sites::class, function () {
return new Sites(config('statamic.sites'));
});
collect([
\Statamic\Contracts\Entries\EntryRepository::class => \Statamic\Stache\Repositories\EntryRepository::class,
\Statamic\Contracts\Taxonomies\TermRepository::class => \Statamic\Stache\Repositories\TermRepository::class,
\Statamic\Contracts\Taxonomies\TaxonomyRepository::class => \Statamic\Stache\Repositories\TaxonomyRepository::class,
\Statamic\Contracts\Entries\CollectionRepository::class => \Statamic\Stache\Repositories\CollectionRepository::class,
\Statamic\Contracts\Globals\GlobalRepository::class => \Statamic\Stache\Repositories\GlobalRepository::class,
\Statamic\Contracts\Assets\AssetContainerRepository::class => \Statamic\Stache\Repositories\AssetContainerRepository::class,
\Statamic\Contracts\Structures\StructureRepository::class => \Statamic\Structures\StructureRepository::class,
\Statamic\Contracts\Structures\CollectionTreeRepository::class => \Statamic\Stache\Repositories\CollectionTreeRepository::class,
\Statamic\Contracts\Structures\NavTreeRepository::class => \Statamic\Stache\Repositories\NavTreeRepository::class,
\Statamic\Contracts\Structures\NavigationRepository::class => \Statamic\Stache\Repositories\NavigationRepository::class,
\Statamic\Contracts\Assets\AssetRepository::class => \Statamic\Assets\AssetRepository::class,
\Statamic\Contracts\Forms\FormRepository::class => \Statamic\Forms\FormRepository::class,
])->each(function ($concrete, $abstract) {
if (! $this->app->bound($abstract)) {
Statamic::repository($abstract, $concrete);
}
});
$this->app->singleton(\Statamic\Contracts\Data\DataRepository::class, function ($app) {
return (new \Statamic\Data\DataRepository)
->setRepository('entry', \Statamic\Contracts\Entries\EntryRepository::class)
->setRepository('term', \Statamic\Contracts\Taxonomies\TermRepository::class)
->setRepository('collection', \Statamic\Contracts\Entries\CollectionRepository::class)
->setRepository('taxonomy', \Statamic\Contracts\Taxonomies\TaxonomyRepository::class)
->setRepository('global', \Statamic\Contracts\Globals\GlobalRepository::class)
->setRepository('asset', \Statamic\Contracts\Assets\AssetRepository::class)
->setRepository('user', \Statamic\Contracts\Auth\UserRepository::class);
});
$this->app->bind(\Statamic\Fields\BlueprintRepository::class, function () {
return (new \Statamic\Fields\BlueprintRepository)
->setDirectory(resource_path('blueprints'))
->setFallback('default', function () {
return \Statamic\Facades\Blueprint::makeFromFields([
'content' => ['type' => 'markdown', 'localizable' => true],
]);
});
});
$this->app->bind(\Statamic\Fields\FieldsetRepository::class, function () {
return (new \Statamic\Fields\FieldsetRepository)
->setDirectory(resource_path('fieldsets'));
});
}
protected function registerMiddlewareGroup()
{
$this->app->make(Router::class)->middlewareGroup('statamic.web', [
\Statamic\Http\Middleware\StacheLock::class,
\Statamic\Http\Middleware\Localize::class,
\Statamic\Http\Middleware\AuthGuard::class,
\Statamic\StaticCaching\Middleware\Cache::class,
]);
}
}