diff --git a/app/Enums/Planning/CellModel.php b/app/Enums/Planning/CellModel.php new file mode 100644 index 0000000..0d800ee --- /dev/null +++ b/app/Enums/Planning/CellModel.php @@ -0,0 +1,40 @@ + (new Ticket())->getTable(), + 'site' => (new Site())->getTable(), + 'project' => (new Project())->getTable(), + ]; + } + + protected static function labels(): array + { + return [ + 'ticket' => trans('Ticket'), + 'site' => trans('Site'), + 'project' => trans('Projet') + ]; + } +} diff --git a/app/Enums/Planning/CellType.php b/app/Enums/Planning/CellType.php new file mode 100644 index 0000000..0059847 --- /dev/null +++ b/app/Enums/Planning/CellType.php @@ -0,0 +1,43 @@ + '#c6e0b4', + 'rnd' => '#b4c6e7', + 'dev' => '#00b0f0', + 'projects' => '#ffe699', + 'management' => '#f4b084', + 'absence' => '#aeaaaa' + ]; + } + + protected static function labels(): array + { + return [ + 'support' => trans('Support'), + 'rnd' => trans('R&D'), + 'dev' => trans('Développement/Facturable'), + 'projects' => trans('Projets & Réunions'), + 'management' => trans('Organisation management'), + 'absence' => trans('Absence'), + ]; + } +} diff --git a/app/Enums/Planning/TableRow.php b/app/Enums/Planning/TableRow.php new file mode 100644 index 0000000..1cca988 --- /dev/null +++ b/app/Enums/Planning/TableRow.php @@ -0,0 +1,36 @@ + 1, + 'matin2' => 2, + 'apresmidi1' => 3, + 'apresmidi2' => 4, + ]; + } + + protected static function labels(): array + { + return [ + 'matin1' => trans('Matin 1'), + 'matin2' => trans('Matin 2'), + 'apresmidi1' => trans('Après-midi 1'), + 'apresmidi2' => trans('Après-midi 2') + ]; + } +} diff --git a/app/Http/Controllers/PlanningController.php b/app/Http/Controllers/PlanningController.php new file mode 100644 index 0000000..7b439c3 --- /dev/null +++ b/app/Http/Controllers/PlanningController.php @@ -0,0 +1,65 @@ +startOfWeek(); + if ($request->p) { + $date = Carbon::createFromTimestamp($request->p)->startOfWeek(); + } + $userIds = User::where('role', Role::developper())->pluck('id'); + $weeks = WeekPlanning::whereDate('start', $date) + ->with('user')->get(); + foreach ($userIds as $id) { + // auto create missing planning for user + if ($date >= Carbon::now() and !$weeks->contains('user.id', $id)) { + $wp = new WeekPlanning([ + 'start' => $date, + 'planning' => WeekPlanning::getWeekBlock($date), + 'user_id' => $id + ]); + $wp->saveOrFail(); + $weeks->push($wp); + } + } + return view('planning.index', compact('weeks', 'date')); + } + + public function setCellContent(SetCellContentRequest $request) + { + $wp = WeekPlanning::findOrFail($request->id); + if (!isset($wp->planning[$request->day][$request->row])) { + abort(422, trans('Ce jour et ce moment n\'existent pas.')); + } + $planning = $wp->planning; + $planning[$request->day][$request->row] = + array_merge(WeekPlanning::getCell(), array_intersect_key($request->all(), WeekPlanning::getCell())); + $wp->planning = $planning; + $wp->saveOrFail(); + return \response()->json(['status' => true]); + } + + public function eraseCellContent(EraseCellContentRequest $request) + { + $wp = WeekPlanning::findOrFail($request->id); + if (!isset($wp->planning[$request->day][$request->row])) { + abort(422, trans('Ce jour et ce moment n\'existent pas.')); + } + $planning = $wp->planning; + $planning[$request->day][$request->row] = WeekPlanning::getCell(); + $wp->planning = $planning; + $wp->saveOrFail(); + return \response()->json(['status' => true]); + } +} diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 9966c8e..483a579 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -3,6 +3,8 @@ namespace App\Http\Controllers; use App\Models\Project; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; use Kwaadpepper\CrudPolicies\Http\Requests\CrudIndexRequest; use Kwaadpepper\CrudPolicies\Traits\CrudController; @@ -28,10 +30,13 @@ class ProjectController extends Controller return view('projects.index', $view->getData()); } - public function show(Project $model) + public function show(Request $request, Project $model) { /** @var \Illuminate\View\View */ - $view = $this->crudshow($model); + $view = $this->crudshow($request, $model); + if ($view instanceof JsonResponse) { + return $view; + } return view('projects.show', $view->getData()); } } diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php index d362273..bb804f5 100644 --- a/app/Http/Controllers/TicketController.php +++ b/app/Http/Controllers/TicketController.php @@ -34,6 +34,32 @@ class TicketController extends Controller public function index(SortTickets $request) { + // handle ajax + if ($request->ajax()) { + $tickets = Ticket::with('user'); + if ($request->s) { + $tickets = $tickets->where('text', 'LIKE', "%$request->s%") + ->orWhere('id', $request->s) + ->orWhereHas('user', function ($q) use ($request) { + $q->where('name', 'LIKE', "%$request->s%"); + }); + } + /** @var \Illuminate/Pagination/LengthAwarePaginator $tickets */ + $tickets = $tickets->paginate(); + return \response()->json($tickets->getCollection()->map(function (Ticket $ticket) { + return [ + 'label' => sprintf( + 'Ticket %d (%s): %s', + $ticket->id, + $ticket->user->name, + Str::limit(\preg_replace('/[[:cntrl:]]+/', '', $ticket->text), 35) + ), + 'value' => $ticket->id + ]; + })); + } + + /** @var \App\Models\User */ $user = auth()->user(); $tickets = Ticket::with('site')->has('site'); @@ -132,8 +158,19 @@ class TicketController extends Controller }); } - public function show(Ticket $ticket) + public function show(Request $request, Ticket $ticket) { + if ($request->ajax()) { + return \response()->json([ + 'label' => sprintf( + 'Ticket %d (%s): %s', + $ticket->id, + $ticket->user->name, + Str::limit(\preg_replace('/[[:cntrl:]]+/', '', $ticket->text), 35) + ), + 'value' => $ticket->id + ]); + } $messages = $ticket->messages()->orderBy('created_at', 'DESC')->get(); $isSubscribed = (bool)$ticket->subscriptions()->where('user_id', Auth::user()->id)->count(); return view('ticket.show', compact('ticket', 'messages', 'isSubscribed')); diff --git a/app/Http/Requests/EraseCellContentRequest.php b/app/Http/Requests/EraseCellContentRequest.php new file mode 100644 index 0000000..2e08203 --- /dev/null +++ b/app/Http/Requests/EraseCellContentRequest.php @@ -0,0 +1,37 @@ +check() and $this->ajax(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'id' => 'required|exists:week_plannings,id', + 'day' => 'required|numeric', + 'row' => [ + 'required', + new EnumIsValidRule(TableRow::class) + ], + ]; + } +} diff --git a/app/Http/Requests/SetCellContentRequest.php b/app/Http/Requests/SetCellContentRequest.php new file mode 100644 index 0000000..da5dc61 --- /dev/null +++ b/app/Http/Requests/SetCellContentRequest.php @@ -0,0 +1,63 @@ +merge([ + 'model' => $this->model ?? null, + 'foreign' => $this->foreign ?? null, + 'text' => $this->text ?? '' + ]); + return auth()->check() and $this->ajax(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'id' => 'required|exists:week_plannings,id', + 'day' => 'required|numeric', + 'row' => [ + 'required', + new EnumIsValidRule(TableRow::class) + ], + 'type' => [ + 'required', + new EnumIsValidRule(CellType::class) + ], + 'cellModel' => \sprintf( + 'nullable', + new EnumIsValidRule(CellModel::class) + ), + 'foreign' => 'required_with:cellModel|nullable|numeric', + 'text' => 'required|string|min:10|max:90' + ]; + } + + public function attributes() + { + return [ + 'cellModel' => 'Type d\'élément lié', + 'foreign' => 'Élément lié', + 'text' => 'Description courte' + ]; + } +} diff --git a/app/Models/WeekPlanning.php b/app/Models/WeekPlanning.php new file mode 100644 index 0000000..bf8afd1 --- /dev/null +++ b/app/Models/WeekPlanning.php @@ -0,0 +1,61 @@ + 'date', + 'planning' => 'array' + ]; + + protected $fillable = [ + 'start', 'planning', 'user_id' + ]; + + public static function getWeekBlock(Carbon $start): array + { + $start = $start->copy(); + $out = []; + $daysOfWeek = 5; + for ($i = 1; $i <= $daysOfWeek; $i++) { + $out[$start->timestamp] = []; + foreach (TableRow::toArray() as $tableRow) { + $out[$start->timestamp][$tableRow->value] = \array_replace( + self::getCell(), + [ + 'row' => $tableRow->value + ] + ); + } + $day = $start->addDay(); + } + return $out; + } + + public static function getCell(): array + { + return [ + /** @var \App\Enums\Planning\CellType */ + 'type' => null, + /** @var \App\Enums\Planning\TableRow */ + 'row' => null, + 'foreign' => null, + /** @var \App\Enums\Planning\CellModel */ + 'cellModel' => null, + 'text' => '' + ]; + } + + public function user() + { + return $this->belongsTo(User::class); + } +} diff --git a/composer.json b/composer.json index 33f39a2..c1c4502 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "fideloper/proxy": "^4.4", "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", - "kwaadpepper/crud-policies": "^0.1.19", + "kwaadpepper/crud-policies": "^0.1.20", "kwaadpepper/enum": "^2.1", "kwaadpepper/exception-handler": "^0.0.3", "laravel-lang/lang": "~8.0", diff --git a/composer.lock b/composer.lock index 72d4604..6a230a0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c6cfdc6c682ed3ffca2b8da4da0b304a", + "content-hash": "860dfd7bc135b1a4a79652323e319ddd", "packages": [ { "name": "asm89/stack-cors", @@ -41,9 +41,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Alexander", @@ -52,10 +50,7 @@ ], "description": "Cross-origin resource sharing library and stack middleware", "homepage": "https://github.com/asm89/stack-cors", - "keywords": [ - "cors", - "stack" - ], + "keywords": ["cors", "stack"], "support": { "issues": "https://github.com/asm89/stack-cors/issues", "source": "https://github.com/asm89/stack-cors/tree/v2.0.3" @@ -92,9 +87,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Arbitrary-precision arithmetic library", "keywords": [ "Arbitrary-precision", @@ -161,9 +154,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Marco Pivetta", @@ -236,9 +227,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Guilherme Blanco", @@ -330,9 +319,7 @@ "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": [ - "bin/doctrine-dbal" - ], + "bin": ["bin/doctrine-dbal"], "type": "library", "autoload": { "psr-4": { @@ -340,9 +327,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Guilherme Blanco", @@ -435,9 +420,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", "homepage": "https://www.doctrine-project.org/", "support": { @@ -482,9 +465,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Guilherme Blanco", @@ -576,9 +557,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Guilherme Blanco", @@ -669,9 +648,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Guilherme Blanco", @@ -688,13 +665,7 @@ ], "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], + "keywords": ["annotations", "docblock", "lexer", "parser", "php"], "support": { "issues": "https://github.com/doctrine/lexer/issues", "source": "https://github.com/doctrine/lexer/tree/1.2.1" @@ -749,9 +720,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Chris Tankersley", @@ -760,10 +729,7 @@ } ], "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], + "keywords": ["cron", "schedule"], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", "source": "https://github.com/dragonmantank/cron-expression/tree/v3.1.0" @@ -815,9 +781,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Eduardo Gulias Davis" @@ -872,9 +836,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Emanuil Rusev", @@ -884,10 +846,7 @@ ], "description": "Parser for Markdown.", "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ], + "keywords": ["markdown", "parser"], "support": { "issues": "https://github.com/erusev/parsedown/issues", "source": "https://github.com/erusev/parsedown/tree/1.7.x" @@ -919,17 +878,11 @@ "psr-0": { "HTMLPurifier": "library/" }, - "files": [ - "library/HTMLPurifier.composer.php" - ], - "exclude-from-classmap": [ - "/library/HTMLPurifier/Language/" - ] + "files": ["library/HTMLPurifier.composer.php"], + "exclude-from-classmap": ["/library/HTMLPurifier/Language/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], + "license": ["LGPL-2.1-or-later"], "authors": [ { "name": "Edward Z. Yang", @@ -939,9 +892,7 @@ ], "description": "Standards compliant HTML filter written in PHP", "homepage": "http://htmlpurifier.org/", - "keywords": [ - "html" - ], + "keywords": ["html"], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", "source": "https://github.com/ezyang/htmlpurifier/tree/master" @@ -985,22 +936,13 @@ "psr-4": { "Facade\\FlareClient\\": "src" }, - "files": [ - "src/helpers.php" - ] + "files": ["src/helpers.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Send PHP errors to Flare", "homepage": "https://github.com/facade/flare-client-php", - "keywords": [ - "exception", - "facade", - "flare", - "reporting" - ], + "keywords": ["exception", "facade", "flare", "reporting"], "support": { "issues": "https://github.com/facade/flare-client-php/issues", "source": "https://github.com/facade/flare-client-php/tree/1.9.1" @@ -1042,9 +984,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Freek Van der Herten", @@ -1055,11 +995,7 @@ ], "description": "Solution contracts for Ignition", "homepage": "https://github.com/facade/ignition-contracts", - "keywords": [ - "contracts", - "flare", - "ignition" - ], + "keywords": ["contracts", "flare", "ignition"], "support": { "issues": "https://github.com/facade/ignition-contracts/issues", "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" @@ -1103,9 +1039,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Chris Fidao", @@ -1113,11 +1047,7 @@ } ], "description": "Set trusted proxies for Laravel", - "keywords": [ - "load balancing", - "proxy", - "trusted proxy" - ], + "keywords": ["load balancing", "proxy", "trusted proxy"], "support": { "issues": "https://github.com/fideloper/TrustedProxy/issues", "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1" @@ -1158,9 +1088,7 @@ "dev-master": "2.0-dev" }, "laravel": { - "providers": [ - "Fruitcake\\Cors\\CorsServiceProvider" - ] + "providers": ["Fruitcake\\Cors\\CorsServiceProvider"] } }, "autoload": { @@ -1169,9 +1097,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fruitcake", @@ -1183,12 +1109,7 @@ } ], "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", - "keywords": [ - "api", - "cors", - "crossdomain", - "laravel" - ], + "keywords": ["api", "cors", "crossdomain", "laravel"], "support": { "issues": "https://github.com/fruitcake/laravel-cors/issues", "source": "https://github.com/fruitcake/laravel-cors/tree/v2.0.4" @@ -1229,9 +1150,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Graham Campbell", @@ -1308,14 +1227,10 @@ "psr-4": { "GuzzleHttp\\": "src/" }, - "files": [ - "src/functions_include.php" - ] + "files": ["src/functions_include.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Michael Dowling", @@ -1395,14 +1310,10 @@ "psr-4": { "GuzzleHttp\\Promise\\": "src/" }, - "files": [ - "src/functions_include.php" - ] + "files": ["src/functions_include.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Michael Dowling", @@ -1411,9 +1322,7 @@ } ], "description": "Guzzle promises library", - "keywords": [ - "promise" - ], + "keywords": ["promise"], "support": { "issues": "https://github.com/guzzle/promises/issues", "source": "https://github.com/guzzle/promises/tree/1.4.1" @@ -1464,9 +1373,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Michael Dowling", @@ -1502,16 +1409,16 @@ }, { "name": "kwaadpepper/crud-policies", - "version": "0.1.19", + "version": "0.1.20", "source": { "type": "git", "url": "https://github.com/Kwaadpepper/crud-policies.git", - "reference": "542aff403fbe4a42722e76f5aae03d1f874b1eb2" + "reference": "7e73d7485236b3710933861981b319076aa823ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Kwaadpepper/crud-policies/zipball/542aff403fbe4a42722e76f5aae03d1f874b1eb2", - "reference": "542aff403fbe4a42722e76f5aae03d1f874b1eb2", + "url": "https://api.github.com/repos/Kwaadpepper/crud-policies/zipball/7e73d7485236b3710933861981b319076aa823ae", + "reference": "7e73d7485236b3710933861981b319076aa823ae", "shasum": "" }, "require": { @@ -1540,9 +1447,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jérémy Munsch", @@ -1552,17 +1457,12 @@ ], "description": "Makes CRUD easy, make policies easy and everyone happy", "homepage": "https://github.com/kwaadpepper/crud-policies", - "keywords": [ - "Scafolding", - "crud", - "laravel", - "policies" - ], + "keywords": ["Scafolding", "crud", "laravel", "policies"], "support": { "issues": "https://github.com/Kwaadpepper/crud-policies/issues", - "source": "https://github.com/Kwaadpepper/crud-policies/tree/0.1.19" + "source": "https://github.com/Kwaadpepper/crud-policies/tree/0.1.20" }, - "time": "2021-09-21T15:10:56+00:00" + "time": "2021-10-02T08:53:09+00:00" }, { "name": "kwaadpepper/enum", @@ -1591,9 +1491,7 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Kwaadpepper\\Enum\\EnumServiceProvider" - ] + "providers": ["Kwaadpepper\\Enum\\EnumServiceProvider"] } }, "autoload": { @@ -1602,9 +1500,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jérémy Munsch", @@ -1614,10 +1510,7 @@ ], "description": "Enums to use for any project", "homepage": "https://github.com/kwaadpepper/enum", - "keywords": [ - "enum", - "laravel" - ], + "keywords": ["enum", "laravel"], "support": { "issues": "https://github.com/Kwaadpepper/enum/issues", "source": "https://github.com/Kwaadpepper/enum/tree/2.1.1" @@ -1661,9 +1554,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jérémy Munsch", @@ -1673,12 +1564,7 @@ ], "description": "Send emails when exceptions occurs", "homepage": "https://github.com/kwaadpepper/exception-handler", - "keywords": [ - "email", - "exception", - "laravel", - "policies" - ], + "keywords": ["email", "exception", "laravel", "policies"], "support": { "issues": "https://github.com/Kwaadpepper/exception-handler/issues", "source": "https://github.com/Kwaadpepper/exception-handler/tree/0.0.3" @@ -1716,9 +1602,7 @@ }, "type": "library", "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Laravel-Lang Team", @@ -1726,12 +1610,7 @@ } ], "description": "Languages for Laravel", - "keywords": [ - "lang", - "languages", - "laravel", - "lpm" - ], + "keywords": ["lang", "languages", "laravel", "lpm"], "support": { "issues": "https://github.com/Laravel-Lang/lang/issues", "source": "https://github.com/Laravel-Lang/lang" @@ -1888,9 +1767,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -1899,10 +1776,7 @@ ], "description": "The Laravel Framework.", "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], + "keywords": ["framework", "laravel"], "support": { "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" @@ -1943,9 +1817,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -1957,11 +1829,7 @@ } ], "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": [ - "closure", - "laravel", - "serializable" - ], + "keywords": ["closure", "laravel", "serializable"], "support": { "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" @@ -2003,9 +1871,7 @@ "dev-master": "2.x-dev" }, "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] + "providers": ["Laravel\\Tinker\\TinkerServiceProvider"] } }, "autoload": { @@ -2014,9 +1880,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -2024,12 +1888,7 @@ } ], "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ], + "keywords": ["REPL", "Tinker", "laravel", "psysh"], "support": { "issues": "https://github.com/laravel/tinker/issues", "source": "https://github.com/laravel/tinker/tree/v2.6.2" @@ -2063,9 +1922,7 @@ "dev-master": "3.x-dev" }, "laravel": { - "providers": [ - "Laravel\\Ui\\UiServiceProvider" - ] + "providers": ["Laravel\\Ui\\UiServiceProvider"] } }, "autoload": { @@ -2075,9 +1932,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -2085,10 +1940,7 @@ } ], "description": "Laravel UI utilities and presets.", - "keywords": [ - "laravel", - "ui" - ], + "keywords": ["laravel", "ui"], "support": { "source": "https://github.com/laravel/ui/tree/v3.3.0" }, @@ -2128,9 +1980,7 @@ "scrutinizer/ocular": "^1.5", "symfony/finder": "^4.2" }, - "bin": [ - "bin/commonmark" - ], + "bin": ["bin/commonmark"], "type": "library", "autoload": { "psr-4": { @@ -2138,9 +1988,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Colin O'Dell", @@ -2248,9 +2096,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Frank de Jonge", @@ -2319,9 +2165,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Frank de Jonge", @@ -2378,9 +2222,7 @@ "type": "package", "extra": { "laravel": { - "providers": [ - "Mews\\Purifier\\PurifierServiceProvider" - ], + "providers": ["Mews\\Purifier\\PurifierServiceProvider"], "aliases": { "Purifier": "Mews\\Purifier\\Facades\\Purifier" } @@ -2390,14 +2232,10 @@ "psr-4": { "Mews\\Purifier\\": "src/" }, - "files": [ - "src/helpers.php" - ] + "files": ["src/helpers.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Muharrem ERİN", @@ -2492,9 +2330,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jordi Boggiano", @@ -2504,11 +2340,7 @@ ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], + "keywords": ["log", "logging", "psr-3"], "support": { "issues": "https://github.com/Seldaek/monolog/issues", "source": "https://github.com/Seldaek/monolog/tree/2.3.4" @@ -2556,9 +2388,7 @@ "phpunit/phpunit": "^7.5.20 || ^8.5.14", "squizlabs/php_codesniffer": "^3.4" }, - "bin": [ - "bin/carbon" - ], + "bin": ["bin/carbon"], "type": "library", "extra": { "branch-alias": { @@ -2566,14 +2396,10 @@ "dev-master": "2.x-dev" }, "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] + "providers": ["Carbon\\Laravel\\ServiceProvider"] }, "phpstan": { - "includes": [ - "extension.neon" - ] + "includes": ["extension.neon"] } }, "autoload": { @@ -2582,9 +2408,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Brian Nesbitt", @@ -2598,11 +2422,7 @@ ], "description": "An API extension for DateTime that supports 281 different languages.", "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], + "keywords": ["date", "datetime", "time"], "support": { "issues": "https://github.com/briannesbitt/Carbon/issues", "source": "https://github.com/briannesbitt/Carbon" @@ -2641,9 +2461,7 @@ "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, - "bin": [ - "bin/php-parse" - ], + "bin": ["bin/php-parse"], "type": "library", "extra": { "branch-alias": { @@ -2656,19 +2474,14 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Nikita Popov" } ], "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], + "keywords": ["parser", "php"], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0" @@ -2706,14 +2519,10 @@ "psr-4": { "Opis\\Closure\\": "src/" }, - "files": [ - "functions.php" - ] + "files": ["functions.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Marius Sarca", @@ -2773,9 +2582,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], + "license": ["Apache-2.0"], "authors": [ { "name": "Johannes M. Schmitt", @@ -2787,12 +2594,7 @@ } ], "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], + "keywords": ["language", "option", "php", "type"], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", "source": "https://github.com/schmittjoh/php-option/tree/1.8.0" @@ -2833,9 +2635,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -2886,9 +2686,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -2896,11 +2694,7 @@ } ], "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], + "keywords": ["events", "psr", "psr-14"], "support": { "issues": "https://github.com/php-fig/event-dispatcher/issues", "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" @@ -2937,9 +2731,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -2948,12 +2740,7 @@ ], "description": "Common interface for HTTP clients", "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], + "keywords": ["http", "http-client", "psr", "psr-18"], "support": { "source": "https://github.com/php-fig/http-client/tree/master" }, @@ -2989,9 +2776,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -3043,9 +2828,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -3096,9 +2879,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -3107,11 +2888,7 @@ ], "description": "Common interface for logging libraries", "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], + "keywords": ["log", "psr", "psr-3"], "support": { "source": "https://github.com/php-fig/log/tree/1.1.4" }, @@ -3146,9 +2923,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -3156,13 +2931,7 @@ } ], "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], + "keywords": ["cache", "caching", "psr", "psr-16", "simple-cache"], "support": { "source": "https://github.com/php-fig/simple-cache/tree/master" }, @@ -3201,9 +2970,7 @@ "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." }, - "bin": [ - "bin/psysh" - ], + "bin": ["bin/psysh"], "type": "library", "extra": { "branch-alias": { @@ -3211,17 +2978,13 @@ } }, "autoload": { - "files": [ - "src/functions.php" - ], + "files": ["src/functions.php"], "psr-4": { "Psy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Justin Hileman", @@ -3231,12 +2994,7 @@ ], "description": "An interactive shell for modern PHP.", "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], + "keywords": ["REPL", "console", "interactive", "shell"], "support": { "issues": "https://github.com/bobthecow/psysh/issues", "source": "https://github.com/bobthecow/psysh/tree/v0.10.8" @@ -3266,14 +3024,10 @@ }, "type": "library", "autoload": { - "files": [ - "src/getallheaders.php" - ] + "files": ["src/getallheaders.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Ralph Khattar", @@ -3331,9 +3085,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Ben Ramsey", @@ -3342,14 +3094,7 @@ } ], "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], + "keywords": ["array", "collection", "hash", "map", "queue", "set"], "support": { "issues": "https://github.com/ramsey/collection/issues", "source": "https://github.com/ramsey/collection/tree/1.2.1" @@ -3434,20 +3179,12 @@ "psr-4": { "Ramsey\\Uuid\\": "src/" }, - "files": [ - "src/functions.php" - ] + "files": ["src/functions.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], + "keywords": ["guid", "identifier", "uuid"], "support": { "issues": "https://github.com/ramsey/uuid/issues", "source": "https://github.com/ramsey/uuid/tree/4.2.3" @@ -3499,14 +3236,10 @@ } }, "autoload": { - "files": [ - "lib/swift_required.php" - ] + "files": ["lib/swift_required.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Chris Corbyn" @@ -3518,11 +3251,7 @@ ], "description": "Swiftmailer, free feature-rich PHP mailer", "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], + "keywords": ["email", "mail", "mailer"], "support": { "issues": "https://github.com/swiftmailer/swiftmailer/issues", "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.7" @@ -3593,14 +3322,10 @@ "psr-4": { "Symfony\\Component\\Console\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -3613,12 +3338,7 @@ ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], + "keywords": ["cli", "command line", "console", "terminal"], "support": { "source": "https://github.com/symfony/console/tree/v5.3.7" }, @@ -3661,14 +3381,10 @@ "psr-4": { "Symfony\\Component\\CssSelector\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -3732,14 +3448,10 @@ } }, "autoload": { - "files": [ - "function.php" - ] + "files": ["function.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -3800,14 +3512,10 @@ "psr-4": { "Symfony\\Component\\ErrorHandler\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -3885,14 +3593,10 @@ "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -3961,9 +3665,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -4026,14 +3728,10 @@ "psr-4": { "Symfony\\Component\\Finder\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -4101,9 +3799,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -4177,14 +3873,10 @@ "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -4289,14 +3981,10 @@ "psr-4": { "Symfony\\Component\\HttpKernel\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -4368,14 +4056,10 @@ "psr-4": { "Symfony\\Component\\Mime\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -4388,10 +4072,7 @@ ], "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], + "keywords": ["mime", "mime-type"], "support": { "source": "https://github.com/symfony/mime/tree/v5.3.8" }, @@ -4445,14 +4126,10 @@ "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, - "files": [ - "bootstrap.php" - ] + "files": ["bootstrap.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Gert de Pagter", @@ -4465,12 +4142,7 @@ ], "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], + "keywords": ["compatibility", "ctype", "polyfill", "portable"], "support": { "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" }, @@ -4524,14 +4196,10 @@ "psr-4": { "Symfony\\Polyfill\\Iconv\\": "" }, - "files": [ - "bootstrap.php" - ] + "files": ["bootstrap.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -4604,14 +4272,10 @@ "psr-4": { "Symfony\\Polyfill\\Intl\\Grapheme\\": "" }, - "files": [ - "bootstrap.php" - ] + "files": ["bootstrap.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -4687,14 +4351,10 @@ "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" }, - "files": [ - "bootstrap.php" - ] + "files": ["bootstrap.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Laurent Bassin", @@ -4772,17 +4432,11 @@ "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] + "files": ["bootstrap.php"], + "classmap": ["Resources/stubs"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -4856,14 +4510,10 @@ "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, - "files": [ - "bootstrap.php" - ] + "files": ["bootstrap.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -4933,14 +4583,10 @@ "psr-4": { "Symfony\\Polyfill\\Php72\\": "" }, - "files": [ - "bootstrap.php" - ] + "files": ["bootstrap.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -4953,12 +4599,7 @@ ], "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "keywords": ["compatibility", "polyfill", "portable", "shim"], "support": { "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" }, @@ -5009,17 +4650,11 @@ "psr-4": { "Symfony\\Polyfill\\Php73\\": "" }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] + "files": ["bootstrap.php"], + "classmap": ["Resources/stubs"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -5032,12 +4667,7 @@ ], "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "keywords": ["compatibility", "polyfill", "portable", "shim"], "support": { "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" }, @@ -5088,17 +4718,11 @@ "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] + "files": ["bootstrap.php"], + "classmap": ["Resources/stubs"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Ion Bazan", @@ -5115,12 +4739,7 @@ ], "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "keywords": ["compatibility", "polyfill", "portable", "shim"], "support": { "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" }, @@ -5171,17 +4790,11 @@ "psr-4": { "Symfony\\Polyfill\\Php81\\": "" }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] + "files": ["bootstrap.php"], + "classmap": ["Resources/stubs"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -5194,12 +4807,7 @@ ], "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "keywords": ["compatibility", "polyfill", "portable", "shim"], "support": { "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" }, @@ -5242,14 +4850,10 @@ "psr-4": { "Symfony\\Component\\Process\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -5326,14 +4930,10 @@ "psr-4": { "Symfony\\Component\\Routing\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -5346,12 +4946,7 @@ ], "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], + "keywords": ["router", "routing", "uri", "url"], "support": { "source": "https://github.com/symfony/routing/tree/v5.3.7" }, @@ -5408,9 +5003,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -5483,17 +5076,11 @@ "psr-4": { "Symfony\\Component\\String\\": "" }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] + "files": ["Resources/functions.php"], + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -5583,20 +5170,14 @@ }, "type": "library", "autoload": { - "files": [ - "Resources/functions.php" - ], + "files": ["Resources/functions.php"], "psr-4": { "Symfony\\Component\\Translation\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -5664,9 +5245,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -5740,25 +5319,17 @@ "ext-intl": "To show region name in time zone dump", "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, - "bin": [ - "Resources/bin/var-dump-server" - ], + "bin": ["Resources/bin/var-dump-server"], "type": "library", "autoload": { - "files": [ - "Resources/functions/dump.php" - ], + "files": ["Resources/functions/dump.php"], "psr-4": { "Symfony\\Component\\VarDumper\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -5771,10 +5342,7 @@ ], "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], + "keywords": ["debug", "dump"], "support": { "source": "https://github.com/symfony/var-dumper/tree/v5.3.8" }, @@ -5829,9 +5397,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Tijs Verkoyen", @@ -5890,9 +5456,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Graham Campbell", @@ -5906,11 +5470,7 @@ } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], + "keywords": ["dotenv", "env", "environment"], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0" @@ -5957,9 +5517,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Lars Moelleken", @@ -5968,11 +5526,7 @@ ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], + "keywords": ["ascii", "clean", "php"], "support": { "issues": "https://github.com/voku/portable-ascii/issues", "source": "https://github.com/voku/portable-ascii/tree/1.5.6" @@ -6038,9 +5592,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Bernhard Schussek", @@ -6048,11 +5600,7 @@ } ], "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], + "keywords": ["assert", "check", "validate"], "support": { "issues": "https://github.com/webmozarts/assert/issues", "source": "https://github.com/webmozarts/assert/tree/1.10.0" @@ -6095,9 +5643,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Franck Nijhof", @@ -6164,9 +5710,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Marco Pivetta", @@ -6176,10 +5720,7 @@ ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], + "keywords": ["constructor", "instantiate"], "support": { "issues": "https://github.com/doctrine/instantiator/issues", "source": "https://github.com/doctrine/instantiator/tree/1.4.0" @@ -6240,9 +5781,7 @@ "dev-master": "2.x-dev" }, "laravel": { - "providers": [ - "Facade\\Ignition\\IgnitionServiceProvider" - ], + "providers": ["Facade\\Ignition\\IgnitionServiceProvider"], "aliases": { "Flare": "Facade\\Ignition\\Facades\\Flare" } @@ -6252,22 +5791,13 @@ "psr-4": { "Facade\\Ignition\\": "src" }, - "files": [ - "src/helpers.php" - ] + "files": ["src/helpers.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "A beautiful error page for Laravel applications.", "homepage": "https://github.com/facade/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], + "keywords": ["error", "flare", "laravel", "page"], "support": { "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", "forum": "https://twitter.com/flareappio", @@ -6321,20 +5851,14 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "François Zaninotto" } ], "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], + "keywords": ["data", "faker", "fixtures"], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", "source": "https://github.com/FakerPHP/Faker/tree/v1.16.0" @@ -6380,9 +5904,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Filipe Dobreira", @@ -6445,18 +5967,12 @@ } }, "autoload": { - "classmap": [ - "hamcrest" - ] + "classmap": ["hamcrest"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], + "keywords": ["test"], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" @@ -6500,9 +6016,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Pádraic Brady", @@ -6565,14 +6079,10 @@ "psr-4": { "DeepCopy\\": "src/DeepCopy/" }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] + "files": ["src/DeepCopy/deep_copy.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Create deep copies (clones) of your objects", "keywords": [ "clone", @@ -6638,9 +6148,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nuno Maduro", @@ -6708,14 +6216,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Arne Blankerts", @@ -6759,14 +6263,10 @@ }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Arne Blankerts", @@ -6820,9 +6320,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jaap van Otterdijk", @@ -6880,9 +6378,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Mike van Riel", @@ -6934,9 +6430,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Mike van Riel", @@ -6987,9 +6481,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Konstantin Kudryashov", @@ -7003,14 +6495,7 @@ ], "description": "Highly opinionated mocking framework for PHP 5.3+", "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], + "keywords": ["Double", "Dummy", "fake", "mock", "spy", "stub"], "support": { "issues": "https://github.com/phpspec/prophecy/issues", "source": "https://github.com/phpspec/prophecy/tree/1.14.0" @@ -7050,15 +6535,11 @@ }, "autoload": { "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] + "PHPStan\\PhpDocParser\\": ["src/"] } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", @@ -7109,14 +6590,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7126,11 +6603,7 @@ ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], + "keywords": ["coverage", "testing", "xunit"], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.7" @@ -7170,14 +6643,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7187,10 +6656,7 @@ ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], + "keywords": ["filesystem", "iterator"], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" @@ -7234,14 +6700,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7251,9 +6713,7 @@ ], "description": "Invoke callables with a timeout", "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], + "keywords": ["process"], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" @@ -7293,14 +6753,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7310,9 +6766,7 @@ ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], + "keywords": ["template"], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" @@ -7352,14 +6806,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7369,9 +6819,7 @@ ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], + "keywords": ["timer"], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" @@ -7436,9 +6884,7 @@ "ext-soap": "*", "ext-xdebug": "*" }, - "bin": [ - "phpunit" - ], + "bin": ["phpunit"], "type": "library", "extra": { "branch-alias": { @@ -7446,17 +6892,11 @@ } }, "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" - ] + "classmap": ["src/"], + "files": ["src/Framework/Assert/Functions.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7466,11 +6906,7 @@ ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], + "keywords": ["phpunit", "testing", "xunit"], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" @@ -7514,14 +6950,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7570,14 +7002,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7626,14 +7054,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7683,14 +7107,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7711,11 +7131,7 @@ ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], + "keywords": ["comparator", "compare", "equality"], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" @@ -7756,14 +7172,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7813,14 +7225,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7833,12 +7241,7 @@ ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], + "keywords": ["diff", "udiff", "unidiff", "unified diff"], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" @@ -7881,14 +7284,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7897,11 +7296,7 @@ ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], + "keywords": ["Xdebug", "environment", "hhvm"], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" @@ -7943,14 +7338,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -7975,10 +7366,7 @@ ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], + "keywords": ["export", "exporter"], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" @@ -8024,14 +7412,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -8040,9 +7424,7 @@ ], "description": "Snapshotting of global state", "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], + "keywords": ["global state"], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" @@ -8083,14 +7465,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -8141,14 +7519,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -8196,14 +7570,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -8251,14 +7621,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -8314,14 +7680,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -8369,14 +7731,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -8422,14 +7780,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -8492,9 +7846,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", "support": { "issues": "https://github.com/slevomat/coding-standard/issues", @@ -8535,10 +7887,7 @@ "require-dev": { "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], + "bin": ["bin/phpcs", "bin/phpcbf"], "type": "library", "extra": { "branch-alias": { @@ -8546,9 +7895,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Greg Sherwood", @@ -8557,10 +7904,7 @@ ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], + "keywords": ["phpcs", "standards"], "support": { "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", "source": "https://github.com/squizlabs/PHP_CodeSniffer", @@ -8590,14 +7934,10 @@ }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Arne Blankerts", diff --git a/config/app.php b/config/app.php index 8b1a654..3602bed 100644 --- a/config/app.php +++ b/config/app.php @@ -234,6 +234,10 @@ return [ 'Role' => App\Enums\Role::class, 'FileType' => App\Enums\FileType::class, 'LoadLevel' => App\Enums\LoadLevel::class, + 'CellModel' => App\Enums\Planning\CellModel::class, + 'CellType' => App\Enums\Planning\CellType::class, + 'TableRow' => App\Enums\Planning\TableRow::class, + 'Carbon' => 'Carbon\Carbon' ], ]; diff --git a/database/factories/WeekPlanningFactory.php b/database/factories/WeekPlanningFactory.php new file mode 100644 index 0000000..f3e3dee --- /dev/null +++ b/database/factories/WeekPlanningFactory.php @@ -0,0 +1,76 @@ +states)->last()); + if (static::$user_id and $func->getStaticVariables()['state']['user_id'] != static::$user_id) { + static::$currentDate = null; + } + if (!static::$currentDate) { + static::$user_id = $func->getStaticVariables()['state']['user_id']; + static::$currentDate = $func->getStaticVariables()['state']['start']; + } else { + static::$currentDate = static::$currentDate->endOfWeek()->addDay(); + } + $wBlock = WeekPlanning::getWeekBlock(static::$currentDate); + foreach ($wBlock as &$dayRows) { + foreach ($dayRows as &$cell) { + $cell['type'] = collect(CellType::toArray())->random()->value; + if (rand(0, 3)) { + $cellModel = collect(CellModel::toArray())->random(); + $cell['cellModel'] = $cellModel->value; + switch ($cellModel) { + case (new Ticket())->getTable(): + $cell['foreign'] = Ticket::select(['id']) + ->inRandomOrder()->first()->id; + break; + case (new Site())->getTable(): + $cell['foreign'] = Site::select(['id']) + ->inRandomOrder()->first()->id; + break; + case (new Project())->getTable(): + $cell['foreign'] = Project::select(['id']) + ->inRandomOrder()->first()->id; + break; + } + $cell['text'] = $this->faker->text(rand(20, 50)); + } + } + } + return [ + 'start' => static::$currentDate, + 'planning' => $wBlock + ]; + } +} diff --git a/database/migrations/2021_10_01_090053_create_week_plannings_table.php b/database/migrations/2021_10_01_090053_create_week_plannings_table.php new file mode 100644 index 0000000..b65939b --- /dev/null +++ b/database/migrations/2021_10_01_090053_create_week_plannings_table.php @@ -0,0 +1,37 @@ +id(); + + $table->date('start'); + $table->text('planning'); + + $table->foreignId('user_id')->constrained('users')->cascadeOnDelete(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('week_plannings'); + } +} diff --git a/database/seeders/WeekPlanningSeeder.php b/database/seeders/WeekPlanningSeeder.php new file mode 100644 index 0000000..550c728 --- /dev/null +++ b/database/seeders/WeekPlanningSeeder.php @@ -0,0 +1,29 @@ +get() as $user) { + WeekPlanning::factory(13)->create([ + 'start' => Carbon::now()->startOfWeek(), + 'user_id' => $user->id + ]); + } + } +} diff --git a/package-lock.json b/package-lock.json index b282e99..ba8d060 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,12 +12,13 @@ "laravel-mix": "^6.0.16", "laravel-mix-polyfill": "^3.0.1", "lodash": "^4.17.19", + "moment": "^2.29.1", "resolve-url-loader": "^3.1.0", "sass": "^1.15.2", "sass-loader": "^8.0.0", "vue": "^2.6.14", "vue-loader": "^15.9.7", - "vue-select": "^3.11.2", + "vue-select": "^3.13.0", "vue-template-compiler": "^2.6.12" } }, @@ -6359,6 +6360,15 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -14750,6 +14760,12 @@ "minimist": "^1.2.5" } }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", diff --git a/package.json b/package.json index b03e1af..d2e13b2 100644 --- a/package.json +++ b/package.json @@ -17,12 +17,13 @@ "laravel-mix": "^6.0.16", "laravel-mix-polyfill": "^3.0.1", "lodash": "^4.17.19", + "moment": "^2.29.1", "resolve-url-loader": "^3.1.0", "sass": "^1.15.2", "sass-loader": "^8.0.0", "vue": "^2.6.14", "vue-loader": "^15.9.7", - "vue-select": "^3.11.2", + "vue-select": "^3.13.0", "vue-template-compiler": "^2.6.12" } } diff --git a/resources/js/app.js b/resources/js/app.js index 40c55f6..f531b4f 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1 +1,107 @@ require('./bootstrap'); +window.Vue = require('vue/dist/vue.min.js'); +import moment from 'moment' +import vSelect from "vue-select" + +// v-select +Vue.component('v-select', vSelect) + +// Configure moment +moment.locale('fr', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse : /\d{1,2}(er|e)/, + ordinal : function (number) { + return number + (number === 1 ? 'er' : 'e'); + }, + meridiemParse : /PD|MD/, + isPM : function (input) { + return input.charAt(0) === 'M'; + }, + // In case the meridiem units are not separated around 12, then implement + // this function (look at locale/id.js for an example). + // meridiemHour : function (hour, meridiem) { + // return /* 0-23 hour, given meridiem token and hour 1-12 */ ; + // }, + meridiem : function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // Used to determine first week of the year. + } +}); + +moment.locale('fr'); +Vue.prototype.moment = moment + +// Register modules +const modules = require.context("./modules", true, /\.js$/i); +modules.keys().map(key => Vue.mixin(modules(key).default)); + +// Register components +const vues = require.context("./components", true, /\.vue$/i); +vues.keys().map(key => + Vue.component( + key + .split("/") + .pop() + .split(".")[0] + .replace(/\.?([A-Z])/g, function (x, y) { + return "-" + y.toLowerCase(); + }) + .replace(/^-/, ""), + vues(key).default + ) +); + +// Register vue function +Vue.filter('str_limit', function (value, size) { + if (!value) return ''; + value = value.toString(); + if (value.length <= size) { + return value; + } + return value.substr(0, size) + '...'; +}); + +for (let el of document.getElementsByClassName('vueComponent')) { + new Vue({ el: el }); +} + diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js index cdf8c36..46dc22f 100644 --- a/resources/js/bootstrap.js +++ b/resources/js/bootstrap.js @@ -15,6 +15,7 @@ window._ = require('lodash'); window.axios = require('axios'); window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; +window.axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); /** * Echo exposes an expressive API for subscribing to channels and listening diff --git a/resources/js/components/PlanningComponent.vue b/resources/js/components/PlanningComponent.vue new file mode 100644 index 0000000..15f020c --- /dev/null +++ b/resources/js/components/PlanningComponent.vue @@ -0,0 +1,505 @@ + + + + + diff --git a/resources/js/components/PlanningsComponent.vue b/resources/js/components/PlanningsComponent.vue new file mode 100644 index 0000000..ee79671 --- /dev/null +++ b/resources/js/components/PlanningsComponent.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/resources/js/modules/route.js b/resources/js/modules/route.js new file mode 100644 index 0000000..072c670 --- /dev/null +++ b/resources/js/modules/route.js @@ -0,0 +1,45 @@ +export default { + methods: { + route(routeName, parameters = []) { + let route = Object.keys(window._routes).indexOf(routeName) !== -1 ? + window._routes[routeName] : null; + if (!route) { + return route; + } + // copy parameters + let iParameters = Object.assign({}, parameters); + let origin = window.location.origin; + let pathname = route.replace(origin, ''); + let hash = window.location.hash; + + // replace in path name + for (let paramName in iParameters) { + let paramValue = parameters[paramName]; + if (pathname.indexOf(paramName) !== -1) { + pathname = pathname.replace(paramName, paramValue); + } + delete parameters[paramName]; + } + + // search, dont copy if target url is different than actual + let search = pathname == window.location.pathname ? window.location.search : '' + + for (let paramName in parameters) { + let paramValue = parameters[paramName]; + if (search.indexOf(paramName + "=") >= 0) { + prefix = search.substring(0, search.indexOf(paramName + "=")); + suffix = search.substring(search.indexOf(paramName + "=")); + suffix = suffix.substring(suffix.indexOf("=") + 1); + suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : ''; + search = prefix + paramName + "=" + paramValue + suffix; + } else if (search.indexOf("?") < 0) { + search += "?" + paramName + "=" + paramValue + } else { + search += "&" + paramName + "=" + paramValue + } + } + return origin + pathname + search + hash; + } + }, +} + diff --git a/resources/views/layout/app.blade.php b/resources/views/layout/app.blade.php index 2bba5b5..8eb1a57 100644 --- a/resources/views/layout/app.blade.php +++ b/resources/views/layout/app.blade.php @@ -2,6 +2,7 @@ + Support LDCWEB diff --git a/resources/views/planning/index.blade.php b/resources/views/planning/index.blade.php new file mode 100644 index 0000000..b831adc --- /dev/null +++ b/resources/views/planning/index.blade.php @@ -0,0 +1,41 @@ +@extends('layout.app') + +@section('content') +
+
+ +
+

Légende

+
+ @foreach(CellType::toArray() as $type) + {{ $type->label }} + @endforeach +
+
+
+ +
+@endsection + +@push('scriptsConstants') + +@endpush diff --git a/routes/web.php b/routes/web.php index 205ae0b..7146932 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,6 +3,7 @@ use App\Http\Controllers\FileController; use App\Http\Controllers\HomeController; use App\Http\Controllers\LogController; +use App\Http\Controllers\PlanningController; use App\Http\Controllers\ProjectController; use App\Http\Controllers\SiteController; use App\Http\Controllers\TicketController; @@ -61,16 +62,24 @@ Route::middleware(['auth'])->group(function () { ->middleware('can:reopen,ticket') ->name('reopen'); Route::post('/{ticket}/status', [TicketController::class, 'changeStatus']) - ->middleware('can:changeStatus,ticket') - ->name('changeStatus'); + ->middleware('can:changeStatus,ticket') + ->name('changeStatus'); Route::post('/{ticket}/subscribe', [TicketController::class, 'subscribe']) - ->middleware('can:suscribeToTicket,ticket') - ->name('subscribe'); + ->middleware('can:suscribeToTicket,ticket') + ->name('subscribe'); Route::put('/{ticket}/archive', [TicketController::class, 'setToArchive']) - ->middleware('can:changeStatus,ticket') - ->name('archive'); + ->middleware('can:changeStatus,ticket') + ->name('archive'); Route::put('/{ticket}/message/create', [TicketController::class, 'createMessage']) - ->middleware('can:createMessage,ticket') - ->name('message.create'); + ->middleware('can:createMessage,ticket') + ->name('message.create'); + }); + + Route::prefix('/planning')->name('planning.')->group(function () { + Route::get('/', [PlanningController::class, 'index'])->name('index'); + Route::post('/setCellContent', [PlanningController::class, 'setCellContent']) + ->name('setCellContent'); + Route::post('/eraseCellContent', [PlanningController::class, 'eraseCellContent']) + ->name('eraseCellContent'); }); });