1: <?php
2:
3: namespace Yajra\Datatables;
4:
5: use Collective\Html\HtmlServiceProvider;
6: use Illuminate\Support\ServiceProvider;
7: use League\Fractal\Manager;
8: use League\Fractal\Serializer\DataArraySerializer;
9: use Maatwebsite\Excel\ExcelServiceProvider;
10: use Yajra\Datatables\Generators\DataTablesMakeCommand;
11: use Yajra\Datatables\Generators\DataTablesScopeCommand;
12:
13: 14: 15: 16: 17: 18:
19: class DatatablesServiceProvider extends ServiceProvider
20: {
21: 22: 23: 24: 25:
26: protected $defer = false;
27:
28: 29: 30: 31: 32:
33: public function boot()
34: {
35: $this->loadViewsFrom(__DIR__ . '/resources/views', 'datatables');
36:
37: $this->publishAssets();
38:
39: $this->registerCommands();
40: }
41:
42: 43: 44:
45: protected function publishAssets()
46: {
47: $this->publishes([
48: __DIR__ . '/config/config.php' => config_path('datatables.php'),
49: ], 'datatables');
50:
51: $this->publishes([
52: __DIR__ . '/resources/assets/buttons.server-side.js' => public_path('vendor/datatables/buttons.server-side.js'),
53: ], 'datatables');
54:
55: $this->publishes([
56: __DIR__ . '/resources/views' => base_path('/resources/views/vendor/datatables'),
57: ], 'datatables');
58: }
59:
60: 61: 62:
63: protected function registerCommands()
64: {
65: $this->commands(DataTablesMakeCommand::class);
66: $this->commands(DataTablesScopeCommand::class);
67: }
68:
69: 70: 71: 72: 73:
74: public function register()
75: {
76: if ($this->isLumen()) {
77: require_once 'fallback.php';
78: }
79:
80: $this->registerRequiredProviders();
81:
82: $this->app->singleton('datatables', function () {
83: return new Datatables($this->app->make(Request::class));
84: });
85:
86: $this->app->singleton('datatables.fractal', function () {
87: $fractal = new Manager;
88: $config = $this->app['config'];
89: $request = $this->app['request'];
90:
91: $includesKey = $config->get('datatables.fractal.includes', 'include');
92: if ($request->get($includesKey)) {
93: $fractal->parseIncludes($request->get($includesKey));
94: }
95:
96: $serializer = $config->get('datatables.fractal.serializer', DataArraySerializer::class);
97: $fractal->setSerializer(new $serializer);
98:
99: return $fractal;
100: });
101:
102: $this->registerAliases();
103: }
104:
105: 106: 107: 108: 109:
110: protected function isLumen()
111: {
112: return str_contains($this->app->version(), 'Lumen');
113: }
114:
115: 116: 117:
118: protected function registerRequiredProviders()
119: {
120: $this->app->register(HtmlServiceProvider::class);
121: $this->app->register(ExcelServiceProvider::class);
122: }
123:
124: 125: 126:
127: protected function registerAliases()
128: {
129: if (class_exists('Illuminate\Foundation\AliasLoader')) {
130: $loader = \Illuminate\Foundation\AliasLoader::getInstance();
131: $loader->alias('Datatables', \Yajra\Datatables\Facades\Datatables::class);
132: }
133: }
134:
135: 136: 137: 138: 139:
140: public function provides()
141: {
142: return ['datatables'];
143: }
144: }
145: