diff --git a/app-modules/task/src/Enums/TaskStatus.php b/app-modules/task/src/Enums/TaskStatus.php index 6c1ef8c61f..a368340dac 100644 --- a/app-modules/task/src/Enums/TaskStatus.php +++ b/app-modules/task/src/Enums/TaskStatus.php @@ -2,10 +2,18 @@ namespace Assist\Task\Enums; +use Bvtterfly\ModelStateMachine\Attributes\InitialState; +use Bvtterfly\ModelStateMachine\Attributes\AllowTransitionTo; + enum TaskStatus: string { + #[InitialState] + #[AllowTransitionTo(self::IN_PROGRESS)] + #[AllowTransitionTo(self::CANCELLED)] case PENDING = 'pending'; + #[AllowTransitionTo(self::COMPLETED)] + #[AllowTransitionTo(self::CANCELLED)] case IN_PROGRESS = 'in_progress'; case COMPLETED = 'completed'; diff --git a/app-modules/task/src/Filament/Resources/TaskResource/Pages/CreateTask.php b/app-modules/task/src/Filament/Resources/TaskResource/Pages/CreateTask.php index 056fdfe044..72c01c0eec 100644 --- a/app-modules/task/src/Filament/Resources/TaskResource/Pages/CreateTask.php +++ b/app-modules/task/src/Filament/Resources/TaskResource/Pages/CreateTask.php @@ -3,7 +3,6 @@ namespace Assist\Task\Filament\Resources\TaskResource\Pages; use Filament\Forms\Form; -use Assist\Task\Enums\TaskStatus; use Assist\Prospect\Models\Prospect; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; @@ -26,12 +25,6 @@ public function form(Form $form): Form ->label('Description') ->required() ->string(), - Select::make('status') - ->label('Status') - ->options(collect(TaskStatus::cases())->mapWithKeys(fn (TaskStatus $status) => [$status->value => str($status->name)->title()->headline()])) - ->required() - ->enum(TaskStatus::class) - ->default(TaskStatus::PENDING->value), DateTimePicker::make('due') ->label('Due Date') ->native(false), diff --git a/app-modules/task/src/Filament/Resources/TaskResource/Pages/ListTasks.php b/app-modules/task/src/Filament/Resources/TaskResource/Pages/ListTasks.php index 3701963879..0caf4b21cc 100644 --- a/app-modules/task/src/Filament/Resources/TaskResource/Pages/ListTasks.php +++ b/app-modules/task/src/Filament/Resources/TaskResource/Pages/ListTasks.php @@ -82,14 +82,18 @@ public function table(Table $table): Table ]) ->actions([ ViewAction::make() - //->action(fn (Task $record) => $record->update(['status' => TaskStatus::COMPLETED])) ->extraModalFooterActions( [ + Action::make('mark_as_in_progress') + ->label('Mark as In Progress') + ->action(fn (Task $record) => $record->getStateMachine('status')->transitionTo(TaskStatus::IN_PROGRESS)) + ->cancelParentActions() + ->hidden(fn (Task $record) => $record->getStateMachine('status')->getStateTransitions()->doesntContain(TaskStatus::IN_PROGRESS->value)), Action::make('mark_as_completed') ->label('Mark as Completed') - ->action(fn (Task $record) => $record->update(['status' => TaskStatus::COMPLETED])) + ->action(fn (Task $record) => $record->getStateMachine('status')->transitionTo(TaskStatus::COMPLETED)) ->cancelParentActions() - ->hidden(fn (Task $record) => $record->status->value === TaskStatus::COMPLETED->value), + ->hidden(fn (Task $record) => $record->getStateMachine('status')->getStateTransitions()->doesntContain(TaskStatus::COMPLETED->value)), ] ) ->infolist( diff --git a/app-modules/task/src/Models/Task.php b/app-modules/task/src/Models/Task.php index 68b35ee49a..64d23b76d0 100644 --- a/app-modules/task/src/Models/Task.php +++ b/app-modules/task/src/Models/Task.php @@ -7,6 +7,7 @@ use Assist\Task\Enums\TaskStatus; use OwenIt\Auditing\Contracts\Auditable; use Illuminate\Database\Eloquent\SoftDeletes; +use Bvtterfly\ModelStateMachine\HasStateMachine; use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -21,10 +22,10 @@ class Task extends BaseModel implements Auditable, CanTriggerAutoSubscription use HasUuids; use AuditableTrait; use SoftDeletes; + use HasStateMachine; protected $fillable = [ 'description', - 'status', 'due', 'assigned_to', 'concern_id', @@ -36,6 +37,13 @@ class Task extends BaseModel implements Auditable, CanTriggerAutoSubscription 'due' => 'datetime', ]; + public function getStateMachineFields(): array + { + return [ + 'status', + ]; + } + public function concern(): MorphTo { return $this->morphTo(); diff --git a/composer.json b/composer.json index 7f0a3c5dce..2b1cd6e7bb 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "php": "^8.2", "ext-pdo": "*", "awcodes/filament-tiptap-editor": "^3.0@beta", + "bvtterfly/model-state-machine": "^0.3.0", "canyon-gbs/assist-data-model": "*", "canyon-gbs/audit": "*", "canyon-gbs/authorization": "*", diff --git a/composer.lock b/composer.lock index 78da5f1b69..fb12dedfce 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": "8debcbe38220d13cfd5387aefb06fc88", + "content-hash": "96dd297d3f7fb950cc7b84f8e8067fad", "packages": [ { "name": "awcodes/filament-tiptap-editor", @@ -140,16 +140,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.279.9", + "version": "3.280.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "cbf446e410c04a405192cc0d018f29a91fe36375" + "reference": "bf4f3079bc59af44a752677cfbcd43f7953c4343" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/cbf446e410c04a405192cc0d018f29a91fe36375", - "reference": "cbf446e410c04a405192cc0d018f29a91fe36375", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/bf4f3079bc59af44a752677cfbcd43f7953c4343", + "reference": "bf4f3079bc59af44a752677cfbcd43f7953c4343", "shasum": "" }, "require": { @@ -229,9 +229,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.279.9" + "source": "https://github.com/aws/aws-sdk-php/tree/3.280.0" }, - "time": "2023-08-29T18:11:18+00:00" + "time": "2023-08-30T18:19:33+00:00" }, { "name": "blade-ui-kit/blade-heroicons", @@ -434,6 +434,77 @@ ], "time": "2023-01-15T23:15:59+00:00" }, + { + "name": "bvtterfly/model-state-machine", + "version": "0.3.0", + "source": { + "type": "git", + "url": "https://github.com/bvtterfly/model-state-machine.git", + "reference": "a6d94e9f83c54968b103c0b35ec42fef03eee6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bvtterfly/model-state-machine/zipball/a6d94e9f83c54968b103c0b35ec42fef03eee6f3", + "reference": "a6d94e9f83c54968b103c0b35ec42fef03eee6f3", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^9.0|^10.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.9.2" + }, + "require-dev": { + "nunomaduro/collision": "^6.0", + "nunomaduro/larastan": "^2.0.1", + "orchestra/testbench": "^7.0|^8.0", + "pestphp/pest": "^1.21", + "pestphp/pest-plugin-laravel": "^1.1", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Bvtterfly\\ModelStateMachine\\ModelStateMachineServiceProvider" + ], + "aliases": { + "StateMachine": "Bvtterfly\\StateMachine\\Facades\\StateMachine" + } + } + }, + "autoload": { + "psr-4": { + "Bvtterfly\\ModelStateMachine\\": "src", + "Bvtterfly\\ModelStateMachine\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ari", + "email": "thearihdrn@gmail.com", + "role": "Developer" + } + ], + "description": "Laravel Model State Machine", + "homepage": "https://github.com/bvtterfly/model-state-machine", + "keywords": [ + "bvtterfly", + "laravel", + "model-state-machine" + ], + "support": { + "issues": "https://github.com/bvtterfly/model-state-machine/issues", + "source": "https://github.com/bvtterfly/model-state-machine/tree/0.3.0" + }, + "time": "2023-03-05T21:00:11+00:00" + }, { "name": "canyon-gbs/assist-data-model", "version": "1.0", @@ -829,16 +900,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.3.6", + "version": "1.3.7", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "90d087e988ff194065333d16bc5cf649872d9cdb" + "reference": "76e46335014860eec1aa5a724799a00a2e47cc85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/90d087e988ff194065333d16bc5cf649872d9cdb", - "reference": "90d087e988ff194065333d16bc5cf649872d9cdb", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/76e46335014860eec1aa5a724799a00a2e47cc85", + "reference": "76e46335014860eec1aa5a724799a00a2e47cc85", "shasum": "" }, "require": { @@ -885,7 +956,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.3.6" + "source": "https://github.com/composer/ca-bundle/tree/1.3.7" }, "funding": [ { @@ -901,7 +972,7 @@ "type": "tidelift" } ], - "time": "2023-06-06T12:02:59+00:00" + "time": "2023-08-30T09:31:38+00:00" }, { "name": "composer/class-map-generator", @@ -2387,16 +2458,16 @@ }, { "name": "filament/actions", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "8355c09388e325d1dab45022c056773d53cf9a1d" + "reference": "96e1292c659c28ac3b616bb1b9de8d2610aa2f77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/8355c09388e325d1dab45022c056773d53cf9a1d", - "reference": "8355c09388e325d1dab45022c056773d53cf9a1d", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/96e1292c659c28ac3b616bb1b9de8d2610aa2f77", + "reference": "96e1292c659c28ac3b616bb1b9de8d2610aa2f77", "shasum": "" }, "require": { @@ -2433,20 +2504,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2023-08-24T21:02:36+00:00" + "time": "2023-08-29T20:13:02+00:00" }, { "name": "filament/filament", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "621d6d4a1133777987cec19be74521bb0d36fd9f" + "reference": "1fb578e40c6dd37d03e5fcc064e0eb5cba2a21b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/621d6d4a1133777987cec19be74521bb0d36fd9f", - "reference": "621d6d4a1133777987cec19be74521bb0d36fd9f", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/1fb578e40c6dd37d03e5fcc064e0eb5cba2a21b5", + "reference": "1fb578e40c6dd37d03e5fcc064e0eb5cba2a21b5", "shasum": "" }, "require": { @@ -2498,20 +2569,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2023-08-28T07:56:37+00:00" + "time": "2023-08-29T20:13:12+00:00" }, { "name": "filament/forms", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "d7ac6113144d1cef0d2293168d84faed26a5b121" + "reference": "88a62e9bebe4c35ffaac1723f34fdfdef762f685" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/d7ac6113144d1cef0d2293168d84faed26a5b121", - "reference": "d7ac6113144d1cef0d2293168d84faed26a5b121", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/88a62e9bebe4c35ffaac1723f34fdfdef762f685", + "reference": "88a62e9bebe4c35ffaac1723f34fdfdef762f685", "shasum": "" }, "require": { @@ -2554,20 +2625,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2023-08-24T15:59:57+00:00" + "time": "2023-08-29T20:13:10+00:00" }, { "name": "filament/infolists", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", - "reference": "19c0db5c9497d347c2707635a5322607e103b26e" + "reference": "d8a03c2db80fb946239fe1cefbbe9891fb3622eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/19c0db5c9497d347c2707635a5322607e103b26e", - "reference": "19c0db5c9497d347c2707635a5322607e103b26e", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/d8a03c2db80fb946239fe1cefbbe9891fb3622eb", + "reference": "d8a03c2db80fb946239fe1cefbbe9891fb3622eb", "shasum": "" }, "require": { @@ -2605,20 +2676,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2023-08-24T15:59:54+00:00" + "time": "2023-08-29T20:13:10+00:00" }, { "name": "filament/notifications", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", - "reference": "f99fcb0ed34b3f8dddc1db984f61df7c3729aa4f" + "reference": "e2625ddb10aaad18f42d45d2dc66e48490bb11e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/notifications/zipball/f99fcb0ed34b3f8dddc1db984f61df7c3729aa4f", - "reference": "f99fcb0ed34b3f8dddc1db984f61df7c3729aa4f", + "url": "https://api.github.com/repos/filamentphp/notifications/zipball/e2625ddb10aaad18f42d45d2dc66e48490bb11e2", + "reference": "e2625ddb10aaad18f42d45d2dc66e48490bb11e2", "shasum": "" }, "require": { @@ -2657,11 +2728,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2023-08-24T15:59:53+00:00" + "time": "2023-08-29T20:13:03+00:00" }, { "name": "filament/spatie-laravel-media-library-plugin", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/spatie-laravel-media-library-plugin.git", @@ -2698,7 +2769,7 @@ }, { "name": "filament/spatie-laravel-settings-plugin", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/spatie-laravel-settings-plugin.git", @@ -2745,16 +2816,16 @@ }, { "name": "filament/support", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "c420d73a915a5525ff81eb3bb81f2d57e911f25d" + "reference": "b4e8f17592b02e05fdac9e7801603feb71f1b4cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/c420d73a915a5525ff81eb3bb81f2d57e911f25d", - "reference": "c420d73a915a5525ff81eb3bb81f2d57e911f25d", + "url": "https://api.github.com/repos/filamentphp/support/zipball/b4e8f17592b02e05fdac9e7801603feb71f1b4cb", + "reference": "b4e8f17592b02e05fdac9e7801603feb71f1b4cb", "shasum": "" }, "require": { @@ -2798,20 +2869,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2023-08-28T07:48:43+00:00" + "time": "2023-08-29T20:13:03+00:00" }, { "name": "filament/tables", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "1d75a80618276cf3c613971affcc1c1553f4e491" + "reference": "0a6c11db2d4a1a831a62714c059e17285c712ac5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/1d75a80618276cf3c613971affcc1c1553f4e491", - "reference": "1d75a80618276cf3c613971affcc1c1553f4e491", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/0a6c11db2d4a1a831a62714c059e17285c712ac5", + "reference": "0a6c11db2d4a1a831a62714c059e17285c712ac5", "shasum": "" }, "require": { @@ -2851,11 +2922,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2023-08-28T07:48:50+00:00" + "time": "2023-08-29T20:13:11+00:00" }, { "name": "filament/widgets", - "version": "v3.0.36", + "version": "v3.0.37", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", @@ -4372,16 +4443,16 @@ }, { "name": "league/commonmark", - "version": "2.4.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048" + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d44a24690f16b8c1808bf13b1bd54ae4c63ea048", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", "shasum": "" }, "require": { @@ -4474,7 +4545,7 @@ "type": "tidelift" } ], - "time": "2023-03-24T15:16:10+00:00" + "time": "2023-08-30T16:55:00+00:00" }, { "name": "league/config", @@ -4971,16 +5042,16 @@ }, { "name": "league/uri", - "version": "7.1.0", + "version": "7.2.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "c0bf6dfa86b7804fe870b3f3d9c653e35a2c9e3e" + "reference": "795796acd29983cc1433261ffd9d0ebab10c03b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/c0bf6dfa86b7804fe870b3f3d9c653e35a2c9e3e", - "reference": "c0bf6dfa86b7804fe870b3f3d9c653e35a2c9e3e", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/795796acd29983cc1433261ffd9d0ebab10c03b9", + "reference": "795796acd29983cc1433261ffd9d0ebab10c03b9", "shasum": "" }, "require": { @@ -5049,7 +5120,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.1.0" + "source": "https://github.com/thephpleague/uri/tree/7.2.0" }, "funding": [ { @@ -5057,20 +5128,20 @@ "type": "github" } ], - "time": "2023-08-21T20:15:03+00:00" + "time": "2023-08-30T19:43:38+00:00" }, { "name": "league/uri-interfaces", - "version": "7.1.0", + "version": "7.2.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "c3ea9306c67c9a1a72312705e8adfcb9cf167310" + "reference": "43fa071050fcba89aefb5d4789a4a5a73874c44b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c3ea9306c67c9a1a72312705e8adfcb9cf167310", - "reference": "c3ea9306c67c9a1a72312705e8adfcb9cf167310", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/43fa071050fcba89aefb5d4789a4a5a73874c44b", + "reference": "43fa071050fcba89aefb5d4789a4a5a73874c44b", "shasum": "" }, "require": { @@ -5133,7 +5204,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.1.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.2.0" }, "funding": [ { @@ -5141,7 +5212,7 @@ "type": "github" } ], - "time": "2023-08-21T20:15:03+00:00" + "time": "2023-08-30T19:43:38+00:00" }, { "name": "livewire/livewire", @@ -12129,16 +12200,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "35af3cbbacfa91e164b252a28ec0b644f1ed4e78" + "reference": "bb6c9d7945dcbf6942e151b018c44d3767e21403" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/35af3cbbacfa91e164b252a28ec0b644f1ed4e78", - "reference": "35af3cbbacfa91e164b252a28ec0b644f1ed4e78", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/bb6c9d7945dcbf6942e151b018c44d3767e21403", + "reference": "bb6c9d7945dcbf6942e151b018c44d3767e21403", "shasum": "" }, "require": { @@ -12214,7 +12285,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.23.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.24.0" }, "funding": [ { @@ -12222,7 +12293,7 @@ "type": "github" } ], - "time": "2023-08-14T12:27:35+00:00" + "time": "2023-08-29T23:18:45+00:00" }, { "name": "hamcrest/hamcrest-php",