From 566ed704a615c11ffba0fedbc3da7ecc7782cb23 Mon Sep 17 00:00:00 2001 From: Philipp Lang Date: Thu, 30 Nov 2023 23:54:16 +0100 Subject: [PATCH] Add payment_data for payments --- app/Invoice/Actions/InvoiceSendAction.php | 11 +- app/Invoice/BillDocument.php | 5 +- app/Invoice/DocumentFactory.php | 44 +- app/Invoice/Invoice.php | 105 +- app/Invoice/Page.php | 76 -- app/Invoice/Queries/InvoiceMemberQuery.php | 30 +- app/Invoice/Queries/SingleMemberQuery.php | 22 - app/Payment/Payment.php | 13 +- app/Payment/PaymentMail.php | 2 +- app/Payment/SendpaymentController.php | 15 +- app/Pdf/MemberPdfController.php | 27 - composer.lock | 1146 +++++++++-------- database/factories/Payment/PaymentFactory.php | 8 +- ...1_23_001310_create_invoice_data_column.php | 32 + packages/laravel-nami | 2 +- packages/tex | 2 +- phpstan.neon | 85 -- resources/views/tex/bill.tex | 14 +- resources/views/tex/remember.tex | 14 +- routes/web.php | 3 - ...yTest.php => BillRememberDocumentTest.php} | 61 +- .../Feature/Invoice/InvoiceSendActionTest.php | 34 +- tests/Feature/Sendpayment/SendpaymentTest.php | 77 +- tests/TestCase.php | 15 +- 24 files changed, 880 insertions(+), 963 deletions(-) delete mode 100644 app/Invoice/Page.php delete mode 100644 app/Invoice/Queries/SingleMemberQuery.php delete mode 100644 app/Pdf/MemberPdfController.php create mode 100644 database/migrations/2023_11_23_001310_create_invoice_data_column.php rename tests/Feature/Invoice/{DocumentFactoryTest.php => BillRememberDocumentTest.php} (71%) diff --git a/app/Invoice/Actions/InvoiceSendAction.php b/app/Invoice/Actions/InvoiceSendAction.php index 8b7a1d0b..df73156c 100644 --- a/app/Invoice/Actions/InvoiceSendAction.php +++ b/app/Invoice/Actions/InvoiceSendAction.php @@ -5,6 +5,7 @@ namespace App\Invoice\Actions; use App\Invoice\BillKind; use App\Invoice\DocumentFactory; use App\Invoice\Queries\BillKindQuery; +use App\Payment\Payment; use App\Payment\PaymentMail; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Storage; @@ -33,13 +34,13 @@ class InvoiceSendAction public function handle(): int { foreach (app(DocumentFactory::class)->getTypes() as $type) { - $invoices = app(DocumentFactory::class)->invoiceCollection($type, new BillKindQuery(BillKind::EMAIL)); + $memberCollection = (new BillKindQuery(BillKind::EMAIL))->type($type)->getMembers(); - foreach ($invoices as $invoice) { + foreach ($memberCollection as $members) { + $invoice = $type::fromMembers($members); $invoicePath = Storage::disk('temp')->path(Tex::compile($invoice)->storeIn('', 'temp')); - Mail::to($invoice->getRecipient()) - ->send(new PaymentMail($invoice, $invoicePath)); - app(DocumentFactory::class)->afterSingle($invoice); + Mail::to($invoice->getRecipient())->send(new PaymentMail($invoice, $invoicePath)); + app(DocumentFactory::class)->afterSingle($invoice, $members); } } diff --git a/app/Invoice/BillDocument.php b/app/Invoice/BillDocument.php index 707a1ac0..e5a635a3 100644 --- a/app/Invoice/BillDocument.php +++ b/app/Invoice/BillDocument.php @@ -29,7 +29,10 @@ class BillDocument extends Invoice public function afterSingle(Payment $payment): void { - $payment->update(['status_id' => 2]); + $payment->update([ + 'invoice_data' => $this->toArray(), + 'status_id' => 2, + ]); } public function getMailSubject(): string diff --git a/app/Invoice/DocumentFactory.php b/app/Invoice/DocumentFactory.php index e643d5ba..aee0723e 100644 --- a/app/Invoice/DocumentFactory.php +++ b/app/Invoice/DocumentFactory.php @@ -2,7 +2,7 @@ namespace App\Invoice; -use App\Invoice\Queries\InvoiceMemberQuery; +use App\Member\Member; use Illuminate\Support\Collection; class DocumentFactory @@ -24,44 +24,14 @@ class DocumentFactory } /** - * @param class-string $type + * @param Collection<(int|string), Member> $members */ - public function singleInvoice(string $type, InvoiceMemberQuery $query): ?Invoice + public function afterSingle(Invoice $invoice, Collection $members): void { - $pages = $query->getPages($type); - - if ($pages->isEmpty()) { - return null; + foreach ($members as $member) { + foreach ($member->payments as $payment) { + $invoice->afterSingle($payment); + } } - - return $this->resolve($type, $pages); - } - - /** - * @param class-string $type - * - * @return Collection - */ - public function invoiceCollection(string $type, InvoiceMemberQuery $query): Collection - { - return $query - ->getPages($type) - ->map(fn ($page) => $this->resolve($type, collect([$page]))); - } - - public function afterSingle(Invoice $invoice): void - { - foreach ($invoice->allPayments() as $payment) { - $invoice->afterSingle($payment); - } - } - - /** - * @param class-string $type - * @param Collection $pages - */ - private function resolve(string $type, Collection $pages): Invoice - { - return new $type($pages); } } diff --git a/app/Invoice/Invoice.php b/app/Invoice/Invoice.php index 4bb700b5..fa8cf8dd 100644 --- a/app/Invoice/Invoice.php +++ b/app/Invoice/Invoice.php @@ -2,10 +2,9 @@ namespace App\Invoice; +use App\Member\Member; use App\Payment\Payment; -use Carbon\Carbon; use Exception; -use Generator; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Collection; use Illuminate\Support\Str; @@ -16,11 +15,9 @@ use Zoomyboy\Tex\Template; abstract class Invoice extends Document { abstract public function getSubject(): string; - abstract public function view(): string; - + abstract public function afterSingle(Payment $payment): void; abstract public function linkLabel(): string; - abstract public static function sendAllLabel(): string; /** @@ -35,37 +32,46 @@ abstract class Invoice extends Document */ abstract public static function getDescription(): array; - abstract public function afterSingle(Payment $payment): void; - - /** - * @var Collection - */ - public Collection $pages; - public string $subject; - protected string $filename; public string $until; - public InvoiceSettings $settings; + public string $filename; /** - * @param Collection $pages + * @param array $positions */ - public function __construct(Collection $pages) - { - $this->pages = $pages; - $this->subject = $this->getSubject(); + public function __construct( + public string $familyName, + public string $singleName, + public string $address, + public string $zip, + public string $location, + public array $positions, + public string $usage, + public ?string $email, + ) { $this->until = now()->addWeeks(2)->format('d.m.Y'); - $this->setFilename(Str::slug("{$this->getSubject()} für {$pages->first()?->familyName}")); - $this->settings = app(InvoiceSettings::class); + $this->filename = Str::slug("{$this->getSubject()} für {$familyName}"); } - public function number(int $number): string + /** + * @param Collection<(int|string), Member> $members + */ + public static function fromMembers(Collection $members): self { - return number_format($number / 100, 2, '.', ''); + return static::withoutMagicalCreationFrom([ + 'familyName' => $members->first()->lastname, + 'singleName' => $members->first()->lastname, + 'address' => $members->first()->address, + 'zip' => $members->first()->zip, + 'location' => $members->first()->location, + 'email' => $members->first()->email_parents ?: $members->first()->email, + 'positions' => static::renderPositions($members), + 'usage' => "Mitgliedsbeitrag für {$members->first()->lastname}", + ]); } - public function getUntil(): Carbon + public function settings(): InvoiceSettings { - return now()->addWeeks(2); + return app(InvoiceSettings::class); } public function getEngine(): Engine @@ -92,20 +98,9 @@ abstract class Invoice extends Document public function getRecipient(): MailRecipient { - if (!$this->pages->first()?->email) { - throw new Exception('Cannot get Recipient. Mail not set.'); - } + throw_unless($this->email, Exception::class, 'Cannot get Recipient. Mail not set.'); - return new MailRecipient($this->pages->first()->email, $this->pages->first()->familyName); - } - - public function allPayments(): Generator - { - foreach ($this->pages as $page) { - foreach ($page->getPayments() as $payment) { - yield $payment; - } - } + return new MailRecipient($this->email, $this->familyName); } /** @@ -113,12 +108,38 @@ abstract class Invoice extends Document */ public function mailView(): string { - $view = 'mail.payment.'.Str::snake(class_basename($this)); + $view = 'mail.payment.' . Str::snake(class_basename($this)); - if (!view()->exists($view)) { - throw new Exception('Mail view '.$view.' existiert nicht.'); - } + throw_unless(view()->exists($view), Exception::class, 'Mail view ' . $view . ' existiert nicht.'); return $view; } + + /** + * @param Collection $members + * + * @return array + */ + public static function renderPositions(Collection $members): array + { + /** @var array */ + $result = []; + + foreach ($members->pluck('payments')->flatten(1) as $payment) { + if ($payment->subscription->split) { + foreach ($payment->subscription->children as $child) { + $result["{$payment->subscription->name} ({$child->name}) {$payment->nr} für {$payment->member->firstname} {$payment->member->lastname}"] = static::number($child->amount); + } + } else { + $result["{$payment->subscription->name} {$payment->nr} für {$payment->member->firstname} {$payment->member->lastname}"] = static::number($payment->subscription->getAmount()); + } + } + + return $result; + } + + public static function number(int $number): string + { + return number_format($number / 100, 2, '.', ''); + } } diff --git a/app/Invoice/Page.php b/app/Invoice/Page.php deleted file mode 100644 index 33760950..00000000 --- a/app/Invoice/Page.php +++ /dev/null @@ -1,76 +0,0 @@ - - */ - private Collection $members; - public string $familyName; - public string $singleName; - public string $address; - public string $zip; - public string $location; - public string $usage; - public ?string $email; - /** - * @var array - */ - public array $positions; - - /** - * @param Collection $members - */ - public function __construct(Collection $members) - { - $this->members = $members; - $this->familyName = $this->members->first()->lastname; - $this->singleName = $members->first()->lastname; - $this->address = $members->first()->address; - $this->zip = $members->first()->zip; - $this->location = $members->first()->location; - $this->email = $members->first()->email_parents ?: $members->first()->email; - $this->positions = $this->getPositions(); - $this->usage = "Mitgliedsbeitrag für {$this->familyName}"; - } - - /** - * @return array - */ - public function getPositions(): array - { - /** @var array */ - $result = []; - - foreach ($this->getPayments() as $payment) { - if ($payment->subscription->split) { - foreach ($payment->subscription->children as $child) { - $result["{$payment->subscription->name} ({$child->name}) {$payment->nr} für {$payment->member->firstname} {$payment->member->lastname}"] = $this->number($child->amount); - } - } else { - $result["{$payment->subscription->name} {$payment->nr} für {$payment->member->firstname} {$payment->member->lastname}"] = $this->number($payment->subscription->getAmount()); - } - } - - return $result; - } - - /** - * @return Collection - */ - public function getPayments(): Collection - { - return $this->members->pluck('payments')->flatten(1); - } - - public function number(int $number): string - { - return number_format($number / 100, 2, '.', ''); - } -} diff --git a/app/Invoice/Queries/InvoiceMemberQuery.php b/app/Invoice/Queries/InvoiceMemberQuery.php index dc8ba9b3..eebb0980 100644 --- a/app/Invoice/Queries/InvoiceMemberQuery.php +++ b/app/Invoice/Queries/InvoiceMemberQuery.php @@ -3,7 +3,6 @@ namespace App\Invoice\Queries; use App\Invoice\Invoice; -use App\Invoice\Page; use App\Member\Member; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection as EloquentCollection; @@ -12,35 +11,46 @@ use Illuminate\Support\Str; abstract class InvoiceMemberQuery { + /** + * @param class-string $type + */ + public string $type; + /** * @return Builder */ abstract protected function getQuery(): Builder; /** - * @param class-string $type - * - * @return Collection + * @return Collection<(int|string), EloquentCollection<(int|string), Member>> */ - public function getPages(string $type): Collection + public function getMembers(): Collection { - return $this->get($type)->groupBy( + return $this->get()->groupBy( fn ($member) => Str::slug( "{$member->lastname}{$member->address}{$member->zip}{$member->location}", ), - )->map(fn ($page) => new Page($page)); + )->toBase(); } /** * @param class-string $type - * + */ + public function type(string $type): self + { + $this->type = $type; + + return $this; + } + + /** * @return EloquentCollection */ - private function get(string $type): EloquentCollection + private function get(): EloquentCollection { return $this->getQuery() ->with([ - 'payments' => fn ($query) => $type::paymentsQuery($query) + 'payments' => fn ($query) => $this->type::paymentsQuery($query) ->orderByRaw('nr, member_id'), ]) ->get() diff --git a/app/Invoice/Queries/SingleMemberQuery.php b/app/Invoice/Queries/SingleMemberQuery.php deleted file mode 100644 index 882108f3..00000000 --- a/app/Invoice/Queries/SingleMemberQuery.php +++ /dev/null @@ -1,22 +0,0 @@ - - */ - protected function getQuery(): Builder - { - return Member::where($this->member->only(['lastname', 'address', 'zip', 'location'])); - } -} diff --git a/app/Payment/Payment.php b/app/Payment/Payment.php index 5035ba77..6b624291 100644 --- a/app/Payment/Payment.php +++ b/app/Payment/Payment.php @@ -12,7 +12,18 @@ class Payment extends Model { use HasFactory; - public $fillable = ['member_id', 'subscription_id', 'nr', 'status_id', 'last_remembered_at']; + /** + * @var array + */ + public $fillable = ['member_id', 'invoice_data', 'subscription_id', 'nr', 'status_id', 'last_remembered_at']; + + /** + * @var array + */ + public $casts = [ + 'invoice_data' => 'json', + 'last_remembered_at' => 'date', + ]; /** * @return BelongsTo diff --git a/app/Payment/PaymentMail.php b/app/Payment/PaymentMail.php index cbca05ee..eb16495b 100644 --- a/app/Payment/PaymentMail.php +++ b/app/Payment/PaymentMail.php @@ -25,7 +25,7 @@ class PaymentMail extends Mailable { $this->invoice = $invoice; $this->filename = $filename; - $this->salutation = 'Liebe Familie ' . $invoice->pages->first()->familyName; + $this->salutation = 'Liebe Familie ' . $invoice->familyName; } /** diff --git a/app/Payment/SendpaymentController.php b/app/Payment/SendpaymentController.php index 5036777d..5893d217 100644 --- a/app/Payment/SendpaymentController.php +++ b/app/Payment/SendpaymentController.php @@ -3,6 +3,7 @@ namespace App\Payment; use App\Http\Controllers\Controller; +use App\Invoice\BillDocument; use App\Invoice\BillKind; use App\Invoice\DocumentFactory; use App\Invoice\Queries\BillKindQuery; @@ -30,15 +31,19 @@ class SendpaymentController extends Controller */ public function send(Request $request) { - $invoice = app(DocumentFactory::class)->singleInvoice($request->type, new BillKindQuery(BillKind::POST)); + $memberCollection = (new BillKindQuery(BillKind::POST))->type($request->type)->getMembers(); - if (is_null($invoice)) { + if ($memberCollection->isEmpty()) { return response()->noContent(); } - $pdfFile = Tex::compile($invoice); - app(DocumentFactory::class)->afterSingle($invoice); + $documents = $memberCollection->map(function ($members) use ($request) { + $document = $request->type::fromMembers($members); + app(DocumentFactory::class)->afterSingle($document, $members); + return $document; + }); - return $pdfFile; + + return Tex::merge($documents->all()); } } diff --git a/app/Pdf/MemberPdfController.php b/app/Pdf/MemberPdfController.php deleted file mode 100644 index d6b85e02..00000000 --- a/app/Pdf/MemberPdfController.php +++ /dev/null @@ -1,27 +0,0 @@ -singleInvoice($request->type, new SingleMemberQuery($member)); - - return null === $invoice - ? response()->noContent() - : Tex::compile($invoice); - } -} diff --git a/composer.lock b/composer.lock index 1ba66c58..4c3083fd 100644 --- a/composer.lock +++ b/composer.lock @@ -594,16 +594,16 @@ }, { "name": "doctrine/dbal", - "version": "3.6.6", + "version": "3.7.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "63646ffd71d1676d2f747f871be31b7e921c7864" + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/63646ffd71d1676d2f747f871be31b7e921c7864", - "reference": "63646ffd71d1676d2f747f871be31b7e921c7864", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", "shasum": "" }, "require": { @@ -619,9 +619,9 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.29", + "phpstan/phpstan": "1.10.42", "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.9", + "phpunit/phpunit": "9.6.13", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.7.2", @@ -687,7 +687,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.6.6" + "source": "https://github.com/doctrine/dbal/tree/3.7.2" }, "funding": [ { @@ -703,20 +703,20 @@ "type": "tidelift" } ], - "time": "2023-08-17T05:38:17+00:00" + "time": "2023-11-19T08:06:58+00:00" }, { "name": "doctrine/deprecations", - "version": "v1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", "shasum": "" }, "require": { @@ -748,9 +748,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" + "source": "https://github.com/doctrine/deprecations/tree/1.1.2" }, - "time": "2023-06-03T09:27:29+00:00" + "time": "2023-09-27T20:04:15+00:00" }, { "name": "doctrine/event-manager", @@ -1144,16 +1144,16 @@ }, { "name": "egulias/email-validator", - "version": "4.0.1", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", - "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", "shasum": "" }, "require": { @@ -1162,8 +1162,8 @@ "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^4.30" + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -1199,7 +1199,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" }, "funding": [ { @@ -1207,20 +1207,20 @@ "type": "github" } ], - "time": "2023-01-14T14:17:03+00:00" + "time": "2023-10-06T06:47:41+00:00" }, { "name": "filp/whoops", - "version": "2.15.3", + "version": "2.15.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", + "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", "shasum": "" }, "require": { @@ -1270,7 +1270,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.3" + "source": "https://github.com/filp/whoops/tree/2.15.4" }, "funding": [ { @@ -1278,20 +1278,20 @@ "type": "github" } ], - "time": "2023-07-13T12:00:00+00:00" + "time": "2023-11-03T12:00:00+00:00" }, { "name": "firebase/php-jwt", - "version": "v6.8.1", + "version": "v6.9.0", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "5dbc8959427416b8ee09a100d7a8588c00fb2e26" + "reference": "f03270e63eaccf3019ef0f32849c497385774e11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/5dbc8959427416b8ee09a100d7a8588c00fb2e26", - "reference": "5dbc8959427416b8ee09a100d7a8588c00fb2e26", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/f03270e63eaccf3019ef0f32849c497385774e11", + "reference": "f03270e63eaccf3019ef0f32849c497385774e11", "shasum": "" }, "require": { @@ -1339,27 +1339,27 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.8.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.9.0" }, - "time": "2023-07-14T18:33:00+00:00" + "time": "2023-10-05T00:24:42+00:00" }, { "name": "fruitcake/php-cors", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/fruitcake/php-cors.git", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6" + "symfony/http-foundation": "^4.4|^5.4|^6|^7" }, "require-dev": { "phpstan/phpstan": "^1.4", @@ -1369,7 +1369,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.1-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -1400,7 +1400,7 @@ ], "support": { "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" }, "funding": [ { @@ -1412,20 +1412,20 @@ "type": "github" } ], - "time": "2022-02-20T15:07:15+00:00" + "time": "2023-10-12T05:21:21+00:00" }, { "name": "giggsey/libphonenumber-for-php", - "version": "8.13.20", + "version": "8.13.26", "source": { "type": "git", "url": "https://github.com/giggsey/libphonenumber-for-php.git", - "reference": "c8da9366ab46cbc83f9fd0e7b0ac12f8ddbb721a" + "reference": "1d730fe40d5f32641c12ca143a086757c95cfccf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/c8da9366ab46cbc83f9fd0e7b0ac12f8ddbb721a", - "reference": "c8da9366ab46cbc83f9fd0e7b0ac12f8ddbb721a", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/1d730fe40d5f32641c12ca143a086757c95cfccf", + "reference": "1d730fe40d5f32641c12ca143a086757c95cfccf", "shasum": "" }, "require": { @@ -1484,20 +1484,20 @@ "issues": "https://github.com/giggsey/libphonenumber-for-php/issues", "source": "https://github.com/giggsey/libphonenumber-for-php" }, - "time": "2023-09-07T06:33:03+00:00" + "time": "2023-11-23T07:57:25+00:00" }, { "name": "giggsey/locale", - "version": "2.4", + "version": "2.5", "source": { "type": "git", "url": "https://github.com/giggsey/Locale.git", - "reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb" + "reference": "e6d4540109a01dd2bc7334cdc842d6a6a67cf239" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/Locale/zipball/a6b33dfc9e8949b7e28133c4628b29cd9f1850bb", - "reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb", + "url": "https://api.github.com/repos/giggsey/Locale/zipball/e6d4540109a01dd2bc7334cdc842d6a6a67cf239", + "reference": "e6d4540109a01dd2bc7334cdc842d6a6a67cf239", "shasum": "" }, "require": { @@ -1536,30 +1536,30 @@ "description": "Locale functions required by libphonenumber-for-php", "support": { "issues": "https://github.com/giggsey/Locale/issues", - "source": "https://github.com/giggsey/Locale/tree/2.4" + "source": "https://github.com/giggsey/Locale/tree/2.5" }, - "time": "2023-04-13T07:40:58+00:00" + "time": "2023-11-01T17:19:48+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.1.1", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.1" + "phpoption/phpoption": "^1.9.2" }, "require-dev": { - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "autoload": { @@ -1588,7 +1588,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" }, "funding": [ { @@ -1600,7 +1600,7 @@ "type": "tidelift" } ], - "time": "2023-02-25T20:23:15+00:00" + "time": "2023-11-12T22:16:48+00:00" }, { "name": "guzzlehttp/guzzle", @@ -2009,16 +2009,16 @@ }, { "name": "inertiajs/inertia-laravel", - "version": "v0.6.10", + "version": "v0.6.11", "source": { "type": "git", "url": "https://github.com/inertiajs/inertia-laravel.git", - "reference": "609f960c9392e61f8f10418e333599cf1b12efbe" + "reference": "2a1e19048f95c0e4adb2b2733f9119e49c4fc09f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/609f960c9392e61f8f10418e333599cf1b12efbe", - "reference": "609f960c9392e61f8f10418e333599cf1b12efbe", + "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/2a1e19048f95c0e4adb2b2733f9119e49c4fc09f", + "reference": "2a1e19048f95c0e4adb2b2733f9119e49c4fc09f", "shasum": "" }, "require": { @@ -2069,7 +2069,7 @@ ], "support": { "issues": "https://github.com/inertiajs/inertia-laravel/issues", - "source": "https://github.com/inertiajs/inertia-laravel/tree/v0.6.10" + "source": "https://github.com/inertiajs/inertia-laravel/tree/v0.6.11" }, "funding": [ { @@ -2077,7 +2077,7 @@ "type": "github" } ], - "time": "2023-09-13T02:24:55+00:00" + "time": "2023-10-27T10:59:02+00:00" }, { "name": "intervention/image", @@ -2165,16 +2165,16 @@ }, { "name": "laravel/framework", - "version": "v9.52.15", + "version": "v9.52.16", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e3350e87a52346af9cc655a3012d2175d2d05ad7" + "reference": "082345d76fc6a55b649572efe10b11b03e279d24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e3350e87a52346af9cc655a3012d2175d2d05ad7", - "reference": "e3350e87a52346af9cc655a3012d2175d2d05ad7", + "url": "https://api.github.com/repos/laravel/framework/zipball/082345d76fc6a55b649572efe10b11b03e279d24", + "reference": "082345d76fc6a55b649572efe10b11b03e279d24", "shasum": "" }, "require": { @@ -2359,20 +2359,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-08-08T14:28:40+00:00" + "time": "2023-10-03T13:02:30+00:00" }, { "name": "laravel/horizon", - "version": "v5.20.1", + "version": "v5.21.4", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "6eaf4efebbfc9955be7504b5b6f045d9d10e86af" + "reference": "bdf58c84b592b83f62262cc6ca98b0debbbc308b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/6eaf4efebbfc9955be7504b5b6f045d9d10e86af", - "reference": "6eaf4efebbfc9955be7504b5b6f045d9d10e86af", + "url": "https://api.github.com/repos/laravel/horizon/zipball/bdf58c84b592b83f62262cc6ca98b0debbbc308b", + "reference": "bdf58c84b592b83f62262cc6ca98b0debbbc308b", "shasum": "" }, "require": { @@ -2435,9 +2435,9 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.20.1" + "source": "https://github.com/laravel/horizon/tree/v5.21.4" }, - "time": "2023-09-12T11:21:57+00:00" + "time": "2023-11-23T15:47:58+00:00" }, { "name": "laravel/passport", @@ -2592,16 +2592,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v1.3.1", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902" + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902", - "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", "shasum": "" }, "require": { @@ -2648,20 +2648,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-07-14T13:56:28+00:00" + "time": "2023-11-08T14:08:06+00:00" }, { "name": "laravel/telescope", - "version": "v4.16.2", + "version": "v4.17.2", "source": { "type": "git", "url": "https://github.com/laravel/telescope.git", - "reference": "aa7f7cba4987e6f0d793d61e6f34bbbb66c2e82a" + "reference": "64da53ee46b99ef328458eaed32202b51e325a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/telescope/zipball/aa7f7cba4987e6f0d793d61e6f34bbbb66c2e82a", - "reference": "aa7f7cba4987e6f0d793d61e6f34bbbb66c2e82a", + "url": "https://api.github.com/repos/laravel/telescope/zipball/64da53ee46b99ef328458eaed32202b51e325a11", + "reference": "64da53ee46b99ef328458eaed32202b51e325a11", "shasum": "" }, "require": { @@ -2717,9 +2717,9 @@ ], "support": { "issues": "https://github.com/laravel/telescope/issues", - "source": "https://github.com/laravel/telescope/tree/v4.16.2" + "source": "https://github.com/laravel/telescope/tree/v4.17.2" }, - "time": "2023-08-28T13:54:07+00:00" + "time": "2023-11-01T14:01:06+00:00" }, { "name": "laravel/tinker", @@ -3181,16 +3181,16 @@ }, { "name": "league/csv", - "version": "9.10.0", + "version": "9.11.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "d24b0d484812313b07ab74b0fe4db9661606df6c" + "reference": "33149c4bea4949aa4fa3d03fb11ed28682168b39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/d24b0d484812313b07ab74b0fe4db9661606df6c", - "reference": "d24b0d484812313b07ab74b0fe4db9661606df6c", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/33149c4bea4949aa4fa3d03fb11ed28682168b39", + "reference": "33149c4bea4949aa4fa3d03fb11ed28682168b39", "shasum": "" }, "require": { @@ -3265,7 +3265,7 @@ "type": "github" } ], - "time": "2023-08-04T15:12:48+00:00" + "time": "2023-09-23T10:09:54+00:00" }, { "name": "league/event", @@ -3323,16 +3323,16 @@ }, { "name": "league/flysystem", - "version": "3.16.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "4fdf372ca6b63c6e281b1c01a624349ccb757729" + "reference": "a326d8a2d007e4ca327a57470846e34363789258" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4fdf372ca6b63c6e281b1c01a624349ccb757729", - "reference": "4fdf372ca6b63c6e281b1c01a624349ccb757729", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a326d8a2d007e4ca327a57470846e34363789258", + "reference": "a326d8a2d007e4ca327a57470846e34363789258", "shasum": "" }, "require": { @@ -3350,8 +3350,8 @@ "symfony/http-client": "<5.2" }, "require-dev": { - "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.1", + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", "aws/aws-sdk-php": "^3.220.0", "composer/semver": "^3.0", "ext-fileinfo": "*", @@ -3361,7 +3361,7 @@ "google/cloud-storage": "^1.23", "microsoft/azure-storage-blob": "^1.1", "phpseclib/phpseclib": "^3.0.14", - "phpstan/phpstan": "^0.12.26", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", "sabre/dav": "^4.3.1" }, @@ -3397,7 +3397,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.16.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.21.0" }, "funding": [ { @@ -3409,20 +3409,20 @@ "type": "github" } ], - "time": "2023-09-07T19:22:17+00:00" + "time": "2023-11-18T13:59:15+00:00" }, { "name": "league/flysystem-local", - "version": "3.16.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "ec7383f25642e6fd4bb0c9554fc2311245391781" + "reference": "470eb1c09eaabd49ebd908ae06f23983ba3ecfe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ec7383f25642e6fd4bb0c9554fc2311245391781", - "reference": "ec7383f25642e6fd4bb0c9554fc2311245391781", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/470eb1c09eaabd49ebd908ae06f23983ba3ecfe7", + "reference": "470eb1c09eaabd49ebd908ae06f23983ba3ecfe7", "shasum": "" }, "require": { @@ -3457,7 +3457,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.16.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.21.0" }, "funding": [ { @@ -3469,7 +3469,7 @@ "type": "github" } ], - "time": "2023-08-30T10:23:59+00:00" + "time": "2023-11-18T13:41:42+00:00" }, { "name": "league/glide", @@ -3538,16 +3538,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.13.0", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96" + "reference": "b6a5854368533df0295c5761a0253656a2e52d9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96", - "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e", + "reference": "b6a5854368533df0295c5761a0253656a2e52d9e", "shasum": "" }, "require": { @@ -3578,7 +3578,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.13.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0" }, "funding": [ { @@ -3590,7 +3590,7 @@ "type": "tidelift" } ], - "time": "2023-08-05T12:09:49+00:00" + "time": "2023-10-17T14:13:20+00:00" }, { "name": "league/oauth2-server", @@ -4221,16 +4221,16 @@ }, { "name": "monolog/monolog", - "version": "2.9.1", + "version": "2.9.2", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", + "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", "shasum": "" }, "require": { @@ -4307,7 +4307,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + "source": "https://github.com/Seldaek/monolog/tree/2.9.2" }, "funding": [ { @@ -4319,20 +4319,20 @@ "type": "tidelift" } ], - "time": "2023-02-06T13:44:46+00:00" + "time": "2023-10-27T15:25:26+00:00" }, { "name": "nesbot/carbon", - "version": "2.70.0", + "version": "2.71.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "d3298b38ea8612e5f77d38d1a99438e42f70341d" + "reference": "98276233188583f2ff845a0f992a235472d9466a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d3298b38ea8612e5f77d38d1a99438e42f70341d", - "reference": "d3298b38ea8612e5f77d38d1a99438e42f70341d", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/98276233188583f2ff845a0f992a235472d9466a", + "reference": "98276233188583f2ff845a0f992a235472d9466a", "shasum": "" }, "require": { @@ -4425,20 +4425,20 @@ "type": "tidelift" } ], - "time": "2023-09-07T16:43:50+00:00" + "time": "2023-09-25T11:31:05+00:00" }, { "name": "nette/schema", - "version": "v1.2.4", + "version": "v1.2.5", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab" + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/c9ff517a53903b3d4e29ec547fb20feecb05b8ab", - "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab", + "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", "shasum": "" }, "require": { @@ -4485,22 +4485,22 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.4" + "source": "https://github.com/nette/schema/tree/v1.2.5" }, - "time": "2023-08-05T18:56:25+00:00" + "time": "2023-10-05T20:37:59+00:00" }, { "name": "nette/utils", - "version": "v4.0.1", + "version": "v4.0.3", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e" + "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/9124157137da01b1f5a5a22d6486cb975f26db7e", - "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e", + "url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015", + "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015", "shasum": "" }, "require": { @@ -4522,8 +4522,7 @@ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" }, "type": "library", "extra": { @@ -4572,9 +4571,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.1" + "source": "https://github.com/nette/utils/tree/v4.0.3" }, - "time": "2023-07-30T15:42:21+00:00" + "time": "2023-10-29T21:02:13+00:00" }, { "name": "nikic/php-parser", @@ -4808,16 +4807,16 @@ }, { "name": "nyholm/psr7", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/Nyholm/psr7.git", - "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be" + "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/3cb4d163b58589e47b35103e8e5e6a6a475b47be", - "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/aa5fc277a4f5508013d571341ade0c3886d4d00e", + "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e", "shasum": "" }, "require": { @@ -4870,7 +4869,7 @@ ], "support": { "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.8.0" + "source": "https://github.com/Nyholm/psr7/tree/1.8.1" }, "funding": [ { @@ -4882,7 +4881,7 @@ "type": "github" } ], - "time": "2023-05-02T11:26:24+00:00" + "time": "2023-11-13T09:31:12+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -5270,16 +5269,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.1", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", "shasum": "" }, "require": { @@ -5287,7 +5286,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "extra": { @@ -5329,7 +5328,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" }, "funding": [ { @@ -5341,20 +5340,20 @@ "type": "tidelift" } ], - "time": "2023-02-25T19:38:58+00:00" + "time": "2023-11-12T21:59:55+00:00" }, { "name": "phpseclib/phpseclib", - "version": "3.0.23", + "version": "3.0.34", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "866cc78fbd82462ffd880e3f65692afe928bed50" + "reference": "56c79f16a6ae17e42089c06a2144467acc35348a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/866cc78fbd82462ffd880e3f65692afe928bed50", - "reference": "866cc78fbd82462ffd880e3f65692afe928bed50", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/56c79f16a6ae17e42089c06a2144467acc35348a", + "reference": "56c79f16a6ae17e42089c06a2144467acc35348a", "shasum": "" }, "require": { @@ -5435,7 +5434,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.23" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.34" }, "funding": [ { @@ -5451,20 +5450,20 @@ "type": "tidelift" } ], - "time": "2023-09-18T17:22:01+00:00" + "time": "2023-11-27T11:13:31+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.1", + "version": "1.24.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9f854d275c2dbf84915a5c0ec9a2d17d2cd86b01" + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9f854d275c2dbf84915a5c0ec9a2d17d2cd86b01", - "reference": "9f854d275c2dbf84915a5c0ec9a2d17d2cd86b01", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", "shasum": "" }, "require": { @@ -5496,9 +5495,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" }, - "time": "2023-09-18T12:18:02+00:00" + "time": "2023-11-26T18:29:22+00:00" }, { "name": "psr/cache", @@ -5702,16 +5701,16 @@ }, { "name": "psr/http-client", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { @@ -5748,9 +5747,9 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/1.0.2" + "source": "https://github.com/php-fig/http-client" }, - "time": "2023-04-10T20:12:12+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", @@ -5963,16 +5962,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.21", + "version": "v0.11.22", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "bcb22101107f3bf770523b65630c9d547f60c540" + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/bcb22101107f3bf770523b65630c9d547f60c540", - "reference": "bcb22101107f3bf770523b65630c9d547f60c540", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b", + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b", "shasum": "" }, "require": { @@ -6001,7 +6000,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.11.x-dev" + "dev-0.11": "0.11.x-dev" }, "bamarni-bin": { "bin-links": false, @@ -6037,9 +6036,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.21" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.22" }, - "time": "2023-09-17T21:15:54+00:00" + "time": "2023-10-14T21:56:36+00:00" }, { "name": "pusher/pusher-php-server", @@ -6237,16 +6236,16 @@ }, { "name": "ramsey/uuid", - "version": "4.7.4", + "version": "4.7.5", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "60a4c63ab724854332900504274f6150ff26d286" + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", - "reference": "60a4c63ab724854332900504274f6150ff26d286", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", "shasum": "" }, "require": { @@ -6313,7 +6312,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.4" + "source": "https://github.com/ramsey/uuid/tree/4.7.5" }, "funding": [ { @@ -6325,20 +6324,20 @@ "type": "tidelift" } ], - "time": "2023-04-15T23:01:58+00:00" + "time": "2023-11-08T05:53:05+00:00" }, { "name": "sabre/dav", - "version": "4.4.0", + "version": "4.5.1", "source": { "type": "git", "url": "https://github.com/sabre-io/dav.git", - "reference": "b65362abc926520eda2c57e219f022a6c288069d" + "reference": "b29899b675371aee73920165d1dc5a2235aa104b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/dav/zipball/b65362abc926520eda2c57e219f022a6c288069d", - "reference": "b65362abc926520eda2c57e219f022a6c288069d", + "url": "https://api.github.com/repos/sabre-io/dav/zipball/b29899b675371aee73920165d1dc5a2235aa104b", + "reference": "b29899b675371aee73920165d1dc5a2235aa104b", "shasum": "" }, "require": { @@ -6361,11 +6360,11 @@ "sabre/xml": "^2.0.1" }, "require-dev": { - "evert/phpdoc-md": "~0.1.0", - "friendsofphp/php-cs-fixer": "^2.17.1", - "monolog/monolog": "^1.18", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + "friendsofphp/php-cs-fixer": "^2.19", + "monolog/monolog": "^1.27", + "phpstan/phpstan": "^0.12 || ^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, "suggest": { "ext-curl": "*", @@ -6379,10 +6378,7 @@ "type": "library", "autoload": { "psr-4": { - "Sabre\\DAV\\": "lib/DAV/", - "Sabre\\CalDAV\\": "lib/CalDAV/", - "Sabre\\DAVACL\\": "lib/DAVACL/", - "Sabre\\CardDAV\\": "lib/CardDAV/" + "Sabre\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6411,7 +6407,7 @@ "issues": "https://github.com/sabre-io/dav/issues", "source": "https://github.com/fruux/sabre-dav" }, - "time": "2022-06-27T09:07:55+00:00" + "time": "2023-11-23T04:33:31+00:00" }, { "name": "sabre/event", @@ -6604,16 +6600,16 @@ }, { "name": "sabre/vobject", - "version": "4.5.3", + "version": "4.5.4", "source": { "type": "git", "url": "https://github.com/sabre-io/vobject.git", - "reference": "fe6d9183154ed6f2f913f2b568d3d51d8ae9b308" + "reference": "a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/fe6d9183154ed6f2f913f2b568d3d51d8ae9b308", - "reference": "fe6d9183154ed6f2f913f2b568d3d51d8ae9b308", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772", + "reference": "a6d53a3e5bec85ed3dd78868b7de0f5b4e12f772", "shasum": "" }, "require": { @@ -6704,7 +6700,7 @@ "issues": "https://github.com/sabre-io/vobject/issues", "source": "https://github.com/fruux/sabre-vobject" }, - "time": "2023-01-22T12:21:50+00:00" + "time": "2023-11-09T12:54:37+00:00" }, { "name": "sabre/xml", @@ -7119,35 +7115,35 @@ }, { "name": "spatie/flare-client-php", - "version": "1.4.2", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544" + "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5f2c6a7a0d2c1d90c12559dc7828fd942911a544", - "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec", + "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec", "shasum": "" }, "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0", + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", "nesbot/carbon": "^2.62.1", "php": "^8.0", "spatie/backtrace": "^1.5.2", - "symfony/http-foundation": "^5.0|^6.0", - "symfony/mime": "^5.2|^6.0", - "symfony/process": "^5.2|^6.0", - "symfony/var-dumper": "^5.2|^6.0" + "symfony/http-foundation": "^5.2|^6.0|^7.0", + "symfony/mime": "^5.2|^6.0|^7.0", + "symfony/process": "^5.2|^6.0|^7.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0" }, "require-dev": { - "dms/phpunit-arraysubset-asserts": "^0.3.0", - "pestphp/pest": "^1.20", + "dms/phpunit-arraysubset-asserts": "^0.5.0", + "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", - "spatie/phpunit-snapshot-assertions": "^4.0" + "spatie/phpunit-snapshot-assertions": "^4.0|^5.0" }, "type": "library", "extra": { @@ -7177,7 +7173,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.4.2" + "source": "https://github.com/spatie/flare-client-php/tree/1.4.3" }, "funding": [ { @@ -7185,20 +7181,20 @@ "type": "github" } ], - "time": "2023-07-28T08:07:24+00:00" + "time": "2023-10-17T15:54:07+00:00" }, { "name": "spatie/ignition", - "version": "1.10.1", + "version": "1.11.3", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1" + "reference": "3d886de644ff7a5b42e4d27c1e1f67c8b5f00044" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/d92b9a081e99261179b63a858c7a4b01541e7dd1", - "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1", + "url": "https://api.github.com/repos/spatie/ignition/zipball/3d886de644ff7a5b42e4d27c1e1f67c8b5f00044", + "reference": "3d886de644ff7a5b42e4d27c1e1f67c8b5f00044", "shasum": "" }, "require": { @@ -7207,19 +7203,19 @@ "php": "^8.0", "spatie/backtrace": "^1.5.3", "spatie/flare-client-php": "^1.4.0", - "symfony/console": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "require-dev": { - "illuminate/cache": "^9.52", + "illuminate/cache": "^9.52|^10.0|^11.0", "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20", + "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", "psr/simple-cache-implementation": "*", - "symfony/cache": "^6.0", - "symfony/process": "^5.4|^6.0", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", "vlucas/phpdotenv": "^5.5" }, "suggest": { @@ -7268,7 +7264,7 @@ "type": "github" } ], - "time": "2023-08-21T15:06:37+00:00" + "time": "2023-10-18T14:09:40+00:00" }, { "name": "spatie/image", @@ -7341,28 +7337,28 @@ }, { "name": "spatie/image-optimizer", - "version": "1.7.1", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/spatie/image-optimizer.git", - "reference": "af179994e2d2413e4b3ba2d348d06b4eaddbeb30" + "reference": "62f7463483d1bd975f6f06025d89d42a29608fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/af179994e2d2413e4b3ba2d348d06b4eaddbeb30", - "reference": "af179994e2d2413e4b3ba2d348d06b4eaddbeb30", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/62f7463483d1bd975f6f06025d89d42a29608fe1", + "reference": "62f7463483d1bd975f6f06025d89d42a29608fe1", "shasum": "" }, "require": { "ext-fileinfo": "*", "php": "^7.3|^8.0", "psr/log": "^1.0 | ^2.0 | ^3.0", - "symfony/process": "^4.2|^5.0|^6.0" + "symfony/process": "^4.2|^5.0|^6.0|^7.0" }, "require-dev": { "pestphp/pest": "^1.21", "phpunit/phpunit": "^8.5.21|^9.4.4", - "symfony/var-dumper": "^4.2|^5.0|^6.0" + "symfony/var-dumper": "^4.2|^5.0|^6.0|^7.0" }, "type": "library", "autoload": { @@ -7390,22 +7386,22 @@ ], "support": { "issues": "https://github.com/spatie/image-optimizer/issues", - "source": "https://github.com/spatie/image-optimizer/tree/1.7.1" + "source": "https://github.com/spatie/image-optimizer/tree/1.7.2" }, - "time": "2023-07-27T07:57:32+00:00" + "time": "2023-11-03T10:08:02+00:00" }, { "name": "spatie/laravel-data", - "version": "3.9.0", + "version": "3.9.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-data.git", - "reference": "21bad55113a1e1e5180a0f89b695f02ce1732aef" + "reference": "dea1e755549a9b54f5895097cc56b9f244f97867" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-data/zipball/21bad55113a1e1e5180a0f89b695f02ce1732aef", - "reference": "21bad55113a1e1e5180a0f89b695f02ce1732aef", + "url": "https://api.github.com/repos/spatie/laravel-data/zipball/dea1e755549a9b54f5895097cc56b9f244f97867", + "reference": "dea1e755549a9b54f5895097cc56b9f244f97867", "shasum": "" }, "require": { @@ -7467,7 +7463,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-data/issues", - "source": "https://github.com/spatie/laravel-data/tree/3.9.0" + "source": "https://github.com/spatie/laravel-data/tree/3.9.2" }, "funding": [ { @@ -7475,7 +7471,7 @@ "type": "github" } ], - "time": "2023-09-15T12:04:39+00:00" + "time": "2023-10-20T10:18:36+00:00" }, { "name": "spatie/laravel-ignition", @@ -7569,16 +7565,16 @@ }, { "name": "spatie/laravel-medialibrary", - "version": "10.12.2", + "version": "10.15.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-medialibrary.git", - "reference": "38af83a445a9ccffede87b7251102580b6f3883f" + "reference": "f464c82357500c5c68ea350edff35ed9831fd48e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/38af83a445a9ccffede87b7251102580b6f3883f", - "reference": "38af83a445a9ccffede87b7251102580b6f3883f", + "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/f464c82357500c5c68ea350edff35ed9831fd48e", + "reference": "f464c82357500c5c68ea350edff35ed9831fd48e", "shasum": "" }, "require": { @@ -7661,7 +7657,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-medialibrary/issues", - "source": "https://github.com/spatie/laravel-medialibrary/tree/10.12.2" + "source": "https://github.com/spatie/laravel-medialibrary/tree/10.15.0" }, "funding": [ { @@ -7673,7 +7669,7 @@ "type": "github" } ], - "time": "2023-09-05T07:56:04+00:00" + "time": "2023-11-03T13:09:19+00:00" }, { "name": "spatie/laravel-package-tools", @@ -7824,16 +7820,16 @@ }, { "name": "spatie/temporary-directory", - "version": "2.1.2", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/spatie/temporary-directory.git", - "reference": "0c804873f6b4042aa8836839dca683c7d0f71831" + "reference": "efc258c9f4da28f0c7661765b8393e4ccee3d19c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/0c804873f6b4042aa8836839dca683c7d0f71831", - "reference": "0c804873f6b4042aa8836839dca683c7d0f71831", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/efc258c9f4da28f0c7661765b8393e4ccee3d19c", + "reference": "efc258c9f4da28f0c7661765b8393e4ccee3d19c", "shasum": "" }, "require": { @@ -7869,7 +7865,7 @@ ], "support": { "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/2.1.2" + "source": "https://github.com/spatie/temporary-directory/tree/2.2.0" }, "funding": [ { @@ -7881,7 +7877,7 @@ "type": "github" } ], - "time": "2023-04-28T07:47:42+00:00" + "time": "2023-09-25T07:13:36+00:00" }, { "name": "stella-maris/clock", @@ -7932,16 +7928,16 @@ }, { "name": "symfony/console", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + "reference": "cd9864b47c367450e14ab32f78fdbf98c44c26b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "url": "https://api.github.com/repos/symfony/console/zipball/cd9864b47c367450e14ab32f78fdbf98c44c26b6", + "reference": "cd9864b47c367450e14ab32f78fdbf98c44c26b6", "shasum": "" }, "require": { @@ -7949,7 +7945,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -7963,12 +7959,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8002,7 +8002,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.4" + "source": "https://github.com/symfony/console/tree/v6.4.0" }, "funding": [ { @@ -8018,20 +8018,20 @@ "type": "tidelift" } ], - "time": "2023-08-16T10:10:12+00:00" + "time": "2023-11-20T16:41:16+00:00" }, { "name": "symfony/css-selector", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57" + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4", + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4", "shasum": "" }, "require": { @@ -8067,7 +8067,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.3.2" + "source": "https://github.com/symfony/css-selector/tree/v6.4.0" }, "funding": [ { @@ -8083,11 +8083,11 @@ "type": "tidelift" } ], - "time": "2023-07-12T16:00:22+00:00" + "time": "2023-10-31T08:40:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -8134,7 +8134,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -8154,30 +8154,31 @@ }, { "name": "symfony/error-handler", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a", - "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5" + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -8208,7 +8209,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.3.2" + "source": "https://github.com/symfony/error-handler/tree/v6.4.0" }, "funding": [ { @@ -8224,20 +8225,20 @@ "type": "tidelift" } ], - "time": "2023-07-16T17:05:46+00:00" + "time": "2023-10-18T09:43:34+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d76d2632cfc2206eecb5ad2b26cd5934082941b6", + "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6", "shasum": "" }, "require": { @@ -8254,13 +8255,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8288,7 +8289,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.0" }, "funding": [ { @@ -8304,11 +8305,11 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2023-07-27T06:52:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -8364,7 +8365,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -8384,23 +8385,23 @@ }, { "name": "symfony/finder", - "version": "v6.3.3", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -8428,7 +8429,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.3" + "source": "https://github.com/symfony/finder/tree/v6.4.0" }, "funding": [ { @@ -8444,20 +8445,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T08:31:44+00:00" + "time": "2023-10-31T17:30:12+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "cac1556fdfdf6719668181974104e6fcfa60e844" + "reference": "44a6d39a9cc11e154547d882d5aac1e014440771" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844", - "reference": "cac1556fdfdf6719668181974104e6fcfa60e844", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/44a6d39a9cc11e154547d882d5aac1e014440771", + "reference": "44a6d39a9cc11e154547d882d5aac1e014440771", "shasum": "" }, "require": { @@ -8467,17 +8468,17 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.2" + "symfony/cache": "<6.3" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8505,7 +8506,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.4" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.0" }, "funding": [ { @@ -8521,29 +8522,29 @@ "type": "tidelift" } ], - "time": "2023-08-22T08:20:46+00:00" + "time": "2023-11-20T16:41:16+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb" + "reference": "16a29c453966f29466ad34444ce97970a336f3c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", - "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/16a29c453966f29466ad34444ce97970a336f3c8", + "reference": "16a29c453966f29466ad34444ce97970a336f3c8", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^6.3.4", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -8551,7 +8552,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.3.4", + "symfony/dependency-injection": "<6.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -8561,7 +8562,7 @@ "symfony/translation": "<5.4", "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", + "symfony/validator": "<6.4", "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, @@ -8570,26 +8571,26 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/clock": "^6.2", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3.4", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0", - "symfony/property-access": "^5.4.5|^6.0.5", - "symfony/routing": "^5.4|^6.0", - "symfony/serializer": "^6.3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^6.3", - "symfony/var-exporter": "^6.2", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, "type": "library", @@ -8618,7 +8619,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.3.4" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.0" }, "funding": [ { @@ -8634,20 +8635,20 @@ "type": "tidelift" } ], - "time": "2023-08-26T13:54:49+00:00" + "time": "2023-11-29T10:40:15+00:00" }, { "name": "symfony/mailer", - "version": "v6.3.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "7b03d9be1dea29bfec0a6c7b603f5072a4c97435" + "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/7b03d9be1dea29bfec0a6c7b603f5072a4c97435", - "reference": "7b03d9be1dea29bfec0a6c7b603f5072a4c97435", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", + "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", "shasum": "" }, "require": { @@ -8655,8 +8656,8 @@ "php": ">=8.1", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^6.2", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -8667,10 +8668,10 @@ "symfony/twig-bridge": "<6.2.1" }, "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/messenger": "^6.2", - "symfony/twig-bridge": "^6.2" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" }, "type": "library", "autoload": { @@ -8698,7 +8699,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.3.0" + "source": "https://github.com/symfony/mailer/tree/v6.4.0" }, "funding": [ { @@ -8714,20 +8715,20 @@ "type": "tidelift" } ], - "time": "2023-05-29T12:49:39+00:00" + "time": "2023-11-12T18:02:22+00:00" }, { "name": "symfony/mime", - "version": "v6.3.3", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98" + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", - "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", + "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", "shasum": "" }, "require": { @@ -8741,16 +8742,16 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" + "symfony/serializer": "<6.3.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "~6.2.13|^6.3.2" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3.2|^7.0" }, "type": "library", "autoload": { @@ -8782,7 +8783,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.3" + "source": "https://github.com/symfony/mime/tree/v6.4.0" }, "funding": [ { @@ -8798,7 +8799,7 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-10-17T11:49:05+00:00" }, { "name": "symfony/polyfill-ctype", @@ -9540,16 +9541,16 @@ }, { "name": "symfony/process", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "url": "https://api.github.com/repos/symfony/process/zipball/191703b1566d97a5425dc969e4350d32b8ef17aa", + "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa", "shasum": "" }, "require": { @@ -9581,7 +9582,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.4" + "source": "https://github.com/symfony/process/tree/v6.4.0" }, "funding": [ { @@ -9597,7 +9598,7 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:39:22+00:00" + "time": "2023-11-17T21:06:49+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -9690,16 +9691,16 @@ }, { "name": "symfony/routing", - "version": "v6.3.3", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a" + "reference": "ae014d60d7c8e80be5c3b644a286e91249a3e8f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a", - "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a", + "url": "https://api.github.com/repos/symfony/routing/zipball/ae014d60d7c8e80be5c3b644a286e91249a3e8f4", + "reference": "ae014d60d7c8e80be5c3b644a286e91249a3e8f4", "shasum": "" }, "require": { @@ -9715,11 +9716,11 @@ "require-dev": { "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -9753,7 +9754,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.3" + "source": "https://github.com/symfony/routing/tree/v6.4.0" }, "funding": [ { @@ -9769,20 +9770,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-11-29T08:04:54+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", "shasum": "" }, "require": { @@ -9835,7 +9836,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" }, "funding": [ { @@ -9851,20 +9852,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/string", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "53d1a83225002635bca3482fcbf963001313fb68" + "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", - "reference": "53d1a83225002635bca3482fcbf963001313fb68", + "url": "https://api.github.com/repos/symfony/string/zipball/b45fcf399ea9c3af543a92edf7172ba21174d809", + "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809", "shasum": "" }, "require": { @@ -9878,11 +9879,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -9921,7 +9922,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.2" + "source": "https://github.com/symfony/string/tree/v6.4.0" }, "funding": [ { @@ -9937,20 +9938,20 @@ "type": "tidelift" } ], - "time": "2023-07-05T08:41:27+00:00" + "time": "2023-11-28T20:41:49+00:00" }, { "name": "symfony/translation", - "version": "v6.3.3", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "url": "https://api.github.com/repos/symfony/translation/zipball/b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", "shasum": "" }, "require": { @@ -9975,17 +9976,17 @@ "require-dev": { "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -10016,7 +10017,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.3" + "source": "https://github.com/symfony/translation/tree/v6.4.0" }, "funding": [ { @@ -10032,20 +10033,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-11-29T08:14:36+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5", + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5", "shasum": "" }, "require": { @@ -10094,7 +10095,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.0" }, "funding": [ { @@ -10110,20 +10111,20 @@ "type": "tidelift" } ], - "time": "2023-05-30T17:17:10+00:00" + "time": "2023-07-25T15:08:44+00:00" }, { "name": "symfony/uid", - "version": "v6.3.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384" + "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/01b0f20b1351d997711c56f1638f7a8c3061e384", - "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384", + "url": "https://api.github.com/repos/symfony/uid/zipball/8092dd1b1a41372110d06374f99ee62f7f0b9a92", + "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92", "shasum": "" }, "require": { @@ -10131,7 +10132,7 @@ "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -10168,7 +10169,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.3.0" + "source": "https://github.com/symfony/uid/tree/v6.4.0" }, "funding": [ { @@ -10184,20 +10185,20 @@ "type": "tidelift" } ], - "time": "2023-04-08T07:25:02+00:00" + "time": "2023-10-31T08:18:17+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45" + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45", - "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c40f7d17e91d8b407582ed51a2bbf83c52c367f6", + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6", "shasum": "" }, "require": { @@ -10210,10 +10211,11 @@ }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", "twig/twig": "^2.13|^3.0.4" }, "bin": [ @@ -10252,7 +10254,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.4" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.0" }, "funding": [ { @@ -10268,7 +10270,7 @@ "type": "tidelift" } ], - "time": "2023-08-24T14:51:05+00:00" + "time": "2023-11-09T08:28:32+00:00" }, { "name": "thecodingmachine/safe", @@ -10464,31 +10466,31 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.5.0", + "version": "v5.6.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -10500,7 +10502,7 @@ "forward-command": true }, "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -10532,7 +10534,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" }, "funding": [ { @@ -10544,7 +10546,7 @@ "type": "tidelift" } ], - "time": "2022-10-16T01:01:54+00:00" + "time": "2023-11-12T22:43:29+00:00" }, { "name": "voku/portable-ascii", @@ -11072,27 +11074,27 @@ }, { "name": "laravel/sail", - "version": "v1.25.0", + "version": "v1.26.2", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "e81a7bd7ac1a745ccb25572830fecf74a89bb48a" + "reference": "c0177786b1cd05b687b0fa11364aeeecb42cd3d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/e81a7bd7ac1a745ccb25572830fecf74a89bb48a", - "reference": "e81a7bd7ac1a745ccb25572830fecf74a89bb48a", + "url": "https://api.github.com/repos/laravel/sail/zipball/c0177786b1cd05b687b0fa11364aeeecb42cd3d8", + "reference": "c0177786b1cd05b687b0fa11364aeeecb42cd3d8", "shasum": "" }, "require": { - "illuminate/console": "^8.0|^9.0|^10.0", - "illuminate/contracts": "^8.0|^9.0|^10.0", - "illuminate/support": "^8.0|^9.0|^10.0", + "illuminate/console": "^9.0|^10.0|^11.0", + "illuminate/contracts": "^9.0|^10.0|^11.0", + "illuminate/support": "^9.0|^10.0|^11.0", "php": "^8.0", - "symfony/yaml": "^6.0" + "symfony/yaml": "^6.0|^7.0" }, "require-dev": { - "orchestra/testbench": "^6.0|^7.0|^8.0", + "orchestra/testbench": "^7.0|^8.0|^9.0", "phpstan/phpstan": "^1.10" }, "bin": [ @@ -11133,7 +11135,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2023-09-11T17:37:09+00:00" + "time": "2023-11-27T14:46:06+00:00" }, { "name": "mockery/mockery", @@ -11377,22 +11379,23 @@ }, { "name": "orchestra/canvas", - "version": "v7.9.0", + "version": "v7.11.1", "source": { "type": "git", "url": "https://github.com/orchestral/canvas.git", - "reference": "10f49b2ae5df5a1f2964b474f9be26a5149113a5" + "reference": "ccfbf44bfd2b959fa05b6ad5c770c89641991edc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas/zipball/10f49b2ae5df5a1f2964b474f9be26a5149113a5", - "reference": "10f49b2ae5df5a1f2964b474f9be26a5149113a5", + "url": "https://api.github.com/repos/orchestral/canvas/zipball/ccfbf44bfd2b959fa05b6ad5c770c89641991edc", + "reference": "ccfbf44bfd2b959fa05b6ad5c770c89641991edc", "shasum": "" }, "require": { - "illuminate/database": "^9.45", - "illuminate/support": "^9.45", - "orchestra/canvas-core": "^7.6", + "illuminate/database": "^9.52.15", + "illuminate/support": "^9.52.15", + "orchestra/canvas-core": "^7.7", + "orchestra/testbench-core": "^7.31", "php": "^8.0", "symfony/yaml": "^5.4 || ^6.0" }, @@ -11400,7 +11403,6 @@ "laravel/framework": "^9.52.15", "laravel/pint": "^1.4", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.29.1", "phpstan/phpstan": "^1.10.5", "phpunit/phpunit": "^9.5.10", "spatie/laravel-ray": "^1.32.4" @@ -11441,37 +11443,43 @@ "description": "Code Generators for Laravel Applications and Packages", "support": { "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas/tree/v7.9.0" + "source": "https://github.com/orchestral/canvas/tree/v7.11.1" }, - "time": "2023-09-13T06:03:14+00:00" + "time": "2023-09-25T08:18:28+00:00" }, { "name": "orchestra/canvas-core", - "version": "v7.6.0", + "version": "v7.7.0", "source": { "type": "git", "url": "https://github.com/orchestral/canvas-core.git", - "reference": "686f0bd43b758f39215ec48bcf95d193ce75e854" + "reference": "7e1bc8933fd0bd40464e4119060065000fc2ab2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas-core/zipball/686f0bd43b758f39215ec48bcf95d193ce75e854", - "reference": "686f0bd43b758f39215ec48bcf95d193ce75e854", + "url": "https://api.github.com/repos/orchestral/canvas-core/zipball/7e1bc8933fd0bd40464e4119060065000fc2ab2f", + "reference": "7e1bc8933fd0bd40464e4119060065000fc2ab2f", "shasum": "" }, "require": { - "illuminate/console": "^9.45", - "illuminate/filesystem": "^9.45", + "illuminate/console": "^9.52.15", + "illuminate/filesystem": "^9.52.15", "php": "^8.0" }, "conflict": { - "orchestra/canvas": "<7.8.0", + "orchestra/canvas": "<7.10.0", "orchestra/testbench-core": "<7.25.0" }, "require-dev": { + "fakerphp/faker": "^1.21", + "laravel/framework": "^9.52.15", "laravel/pint": "^1.1", - "orchestra/testbench": "^7.30", - "phpstan/phpstan": "^1.10.6" + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.31", + "orchestra/workbench": "^0.3", + "phpstan/phpstan": "^1.10.6", + "phpunit/phpunit": "^9.6", + "symfony/yaml": "^6.0.9" }, "type": "library", "extra": { @@ -11506,30 +11514,30 @@ "description": "Code Generators Builder for Laravel Applications and Packages", "support": { "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas-core/tree/v7.6.0" + "source": "https://github.com/orchestral/canvas-core/tree/v7.7.0" }, - "time": "2023-09-13T05:53:17+00:00" + "time": "2023-09-19T04:21:54+00:00" }, { "name": "orchestra/testbench", - "version": "v7.30.0", + "version": "v7.35.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "7b8ae39da0adeb4729307f5e9f16a43d9b47061c" + "reference": "5ee0c02daaefa33cd3d85ac165b380116dd0bf85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/7b8ae39da0adeb4729307f5e9f16a43d9b47061c", - "reference": "7b8ae39da0adeb4729307f5e9f16a43d9b47061c", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/5ee0c02daaefa33cd3d85ac165b380116dd0bf85", + "reference": "5ee0c02daaefa33cd3d85ac165b380116dd0bf85", "shasum": "" }, "require": { "fakerphp/faker": "^1.21", "laravel/framework": "^9.52.15", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.30", - "orchestra/workbench": "^0.2.4", + "orchestra/testbench-core": "^7.35", + "orchestra/workbench": "^1.0 || ^7.0", "php": "^8.0", "phpunit/phpunit": "^9.5.10", "spatie/laravel-ray": "^1.32.4", @@ -11566,28 +11574,36 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v7.30.0" + "source": "https://github.com/orchestral/testbench/tree/v7.35.0" }, - "time": "2023-08-29T05:53:42+00:00" + "time": "2023-11-10T02:17:16+00:00" }, { "name": "orchestra/testbench-core", - "version": "v7.30.1", + "version": "v7.35.2", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "d2163a287e9ef3a4471e5564c4d5540af6d7f32d" + "reference": "55677902493d332e838151db81aa55663ed15a71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/d2163a287e9ef3a4471e5564c4d5540af6d7f32d", - "reference": "d2163a287e9ef3a4471e5564c4d5540af6d7f32d", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/55677902493d332e838151db81aa55663ed15a71", + "reference": "55677902493d332e838151db81aa55663ed15a71", "shasum": "" }, "require": { "php": "^8.0" }, + "conflict": { + "brianium/paratest": "<6.4.0 || >=7.0.0", + "laravel/framework": "<9.52.9 || >=10.0.0", + "nunomaduro/collision": "<6.2.0 || >=7.0.0", + "orchestra/workbench": "<1.0.0", + "phpunit/phpunit": "<9.5.10 || >=10.0.0" + }, "require-dev": { + "composer-runtime-api": "^2.2", "fakerphp/faker": "^1.21", "laravel/framework": "^9.52.9", "laravel/pint": "^1.4", @@ -11600,7 +11616,7 @@ "vlucas/phpdotenv": "^5.4.1" }, "suggest": { - "brianium/paratest": "Allow using parallel tresting (^6.4).", + "brianium/paratest": "Allow using parallel testing (^6.4).", "fakerphp/faker": "Allow using Faker for testing (^1.21).", "laravel/framework": "Required for testing (^9.52.9).", "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", @@ -11653,41 +11669,44 @@ "issues": "https://github.com/orchestral/testbench/issues", "source": "https://github.com/orchestral/testbench-core" }, - "time": "2023-09-09T02:23:26+00:00" + "time": "2023-11-20T22:29:08+00:00" }, { "name": "orchestra/workbench", - "version": "v0.2.6", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/orchestral/workbench.git", - "reference": "9cb449695fde6f7150c58dd4b112ff6d162fb66f" + "reference": "8a3d027432606f034ddcbe3ee62a4029bba9fc84" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/workbench/zipball/9cb449695fde6f7150c58dd4b112ff6d162fb66f", - "reference": "9cb449695fde6f7150c58dd4b112ff6d162fb66f", + "url": "https://api.github.com/repos/orchestral/workbench/zipball/8a3d027432606f034ddcbe3ee62a4029bba9fc84", + "reference": "8a3d027432606f034ddcbe3ee62a4029bba9fc84", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "illuminate/console": "^9.52.15 || ^10.17.0", - "illuminate/support": "^9.52.15 || ^10.17.0", + "fakerphp/faker": "^1.21", + "laravel/framework": "^9.52.15", "laravel/tinker": "^2.8.2", - "orchestra/canvas": "^7.8 || ^8.7", - "orchestra/testbench-core": "^7.30.0 || ^8.10.0", - "php": "^8.0" + "orchestra/canvas": "^7.10", + "orchestra/testbench-core": "^7.34", + "php": "^8.0", + "symfony/yaml": "^6.0.9" }, "require-dev": { "laravel/pint": "^1.4", - "orchestra/testbench": "^7.30.0 || ^8.10.0", + "mockery/mockery": "^1.5.1", "phpstan/phpstan": "^1.10.7", - "phpunit/phpunit": "^9.6" + "phpunit/phpunit": "^9.6", + "spatie/laravel-ray": "^1.32.4", + "symfony/process": "^6.0.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.2.x-dev" + "dev-master": "0.5.x-dev" } }, "autoload": { @@ -11714,9 +11733,9 @@ ], "support": { "issues": "https://github.com/orchestral/workbench/issues", - "source": "https://github.com/orchestral/workbench/tree/v0.2.6" + "source": "https://github.com/orchestral/workbench/tree/v7.0.0" }, - "time": "2023-09-05T00:41:58+00:00" + "time": "2023-11-07T08:45:14+00:00" }, { "name": "phar-io/manifest", @@ -11831,16 +11850,16 @@ }, { "name": "phpmyadmin/sql-parser", - "version": "5.8.1", + "version": "5.8.2", "source": { "type": "git", "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "b877ee6262a00f0f498da5e01335e8a5dc01d203" + "reference": "f1720ae19abe6294cb5599594a8a57bc3c8cc287" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/b877ee6262a00f0f498da5e01335e8a5dc01d203", - "reference": "b877ee6262a00f0f498da5e01335e8a5dc01d203", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/f1720ae19abe6294cb5599594a8a57bc3c8cc287", + "reference": "f1720ae19abe6294cb5599594a8a57bc3c8cc287", "shasum": "" }, "require": { @@ -11914,20 +11933,20 @@ "type": "other" } ], - "time": "2023-09-15T18:21:22+00:00" + "time": "2023-09-19T12:34:29+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.34", + "version": "1.10.46", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "7f806b6f1403e6914c778140e2ba07c293cb4901" + "reference": "90d3d25c5b98b8068916bbf08ce42d5cb6c54e70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/7f806b6f1403e6914c778140e2ba07c293cb4901", - "reference": "7f806b6f1403e6914c778140e2ba07c293cb4901", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/90d3d25c5b98b8068916bbf08ce42d5cb6c54e70", + "reference": "90d3d25c5b98b8068916bbf08ce42d5cb6c54e70", "shasum": "" }, "require": { @@ -11976,7 +11995,7 @@ "type": "tidelift" } ], - "time": "2023-09-13T09:49:47+00:00" + "time": "2023-11-28T14:57:26+00:00" }, { "name": "phpstan/phpstan-mockery", @@ -12030,16 +12049,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.28", + "version": "9.2.29", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef" + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef", - "reference": "7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", "shasum": "" }, "require": { @@ -12096,7 +12115,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.28" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" }, "funding": [ { @@ -12104,7 +12123,7 @@ "type": "github" } ], - "time": "2023-09-12T14:36:20+00:00" + "time": "2023-09-19T04:57:46+00:00" }, { "name": "phpunit/php-file-iterator", @@ -12349,16 +12368,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.12", + "version": "9.6.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a122c2ebd469b751d774aa0f613dc0d67697653f" + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a122c2ebd469b751d774aa0f613dc0d67697653f", - "reference": "a122c2ebd469b751d774aa0f613dc0d67697653f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", "shasum": "" }, "require": { @@ -12432,7 +12451,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.12" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13" }, "funding": [ { @@ -12448,7 +12467,7 @@ "type": "tidelift" } ], - "time": "2023-09-12T14:39:31+00:00" + "time": "2023-09-19T05:39:22+00:00" }, { "name": "pimple/pimple", @@ -13324,16 +13343,16 @@ }, { "name": "spatie/ray", - "version": "1.39.0", + "version": "1.40.1", "source": { "type": "git", "url": "https://github.com/spatie/ray.git", - "reference": "7ab6bd01dc6a8ecdd836b3182d40a04308ae0c75" + "reference": "8e6547ff47aae2e4f615a5dcea1e5e4911b1dc9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/7ab6bd01dc6a8ecdd836b3182d40a04308ae0c75", - "reference": "7ab6bd01dc6a8ecdd836b3182d40a04308ae0c75", + "url": "https://api.github.com/repos/spatie/ray/zipball/8e6547ff47aae2e4f615a5dcea1e5e4911b1dc9f", + "reference": "8e6547ff47aae2e4f615a5dcea1e5e4911b1dc9f", "shasum": "" }, "require": { @@ -13384,7 +13403,7 @@ ], "support": { "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.39.0" + "source": "https://github.com/spatie/ray/tree/1.40.1" }, "funding": [ { @@ -13396,7 +13415,7 @@ "type": "other" } ], - "time": "2023-09-18T10:36:07+00:00" + "time": "2023-11-20T08:20:15+00:00" }, { "name": "symfony/polyfill-iconv", @@ -13483,7 +13502,7 @@ }, { "name": "symfony/stopwatch", - "version": "v6.3.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", @@ -13525,7 +13544,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" + "source": "https://github.com/symfony/stopwatch/tree/v6.4.0" }, "funding": [ { @@ -13545,16 +13564,16 @@ }, { "name": "symfony/yaml", - "version": "v6.3.3", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add" + "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add", - "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4f9237a1bb42455d609e6687d2613dde5b41a587", + "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587", "shasum": "" }, "require": { @@ -13566,7 +13585,7 @@ "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -13597,7 +13616,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.3.3" + "source": "https://github.com/symfony/yaml/tree/v6.4.0" }, "funding": [ { @@ -13613,20 +13632,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-11-06T11:00:25+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -13655,7 +13674,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -13663,7 +13682,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" }, { "name": "zbateson/mail-mime-parser", @@ -13873,7 +13892,14 @@ "time": "2023-05-30T22:51:52+00:00" } ], - "aliases": [], + "aliases": [ + { + "package": "zoomyboy/tex", + "version": "dev-main", + "alias": "1.0", + "alias_normalized": "1.0.0.0" + } + ], "minimum-stability": "dev", "stability-flags": { "zoomyboy/laravel-nami": 20, diff --git a/database/factories/Payment/PaymentFactory.php b/database/factories/Payment/PaymentFactory.php index 0499e0e1..29f9d282 100644 --- a/database/factories/Payment/PaymentFactory.php +++ b/database/factories/Payment/PaymentFactory.php @@ -7,6 +7,7 @@ use App\Payment\Payment; use App\Payment\Status; use App\Payment\Subscription; use Illuminate\Database\Eloquent\Factories\Factory; +use Illuminate\Support\Carbon; use Tests\RequestFactories\Child; /** @@ -22,7 +23,7 @@ class PaymentFactory extends Factory 'nr' => $this->faker->year, 'subscription_id' => Subscription::factory()->create()->id, 'status_id' => Status::factory()->create()->id, - 'last_remembered_at' => $this->faker->dateTime, + 'last_remembered_at' => now(), ]; } @@ -31,6 +32,11 @@ class PaymentFactory extends Factory return $this->for(Status::whereName('Nicht bezahlt')->first()); } + public function pending(): self + { + return $this->for(Status::whereName('Rechnung gestellt')->first())->state(['last_remembered_at' => now()->subYears(2)]);; + } + public function paid(): self { return $this->for(Status::whereName('Rechnung beglichen')->first()); diff --git a/database/migrations/2023_11_23_001310_create_invoice_data_column.php b/database/migrations/2023_11_23_001310_create_invoice_data_column.php new file mode 100644 index 00000000..db977fec --- /dev/null +++ b/database/migrations/2023_11_23_001310_create_invoice_data_column.php @@ -0,0 +1,32 @@ +json('invoice_data')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('payments', function (Blueprint $table) { + $table->dropColumn('invoice_data'); + }); + } +}; diff --git a/packages/laravel-nami b/packages/laravel-nami index c5ea29af..af626f5d 160000 --- a/packages/laravel-nami +++ b/packages/laravel-nami @@ -1 +1 @@ -Subproject commit c5ea29af1bb1591238bb037da93739f5bd874334 +Subproject commit af626f5d3a14a365e97dc6437025a0b1da6b42bc diff --git a/packages/tex b/packages/tex index 6f162102..bbab104f 160000 --- a/packages/tex +++ b/packages/tex @@ -1 +1 @@ -Subproject commit 6f162102ef7ceca41822d18c3e694abd926f550b +Subproject commit bbab104f7e00c059ffffa115f6b769e2333e137a diff --git a/phpstan.neon b/phpstan.neon index a15a968c..9d1ff778 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -304,91 +304,6 @@ parameters: count: 1 path: packages/laravel-nami/src/Gender.php - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:__construct\\(\\) has parameter \\$options with no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:__construct\\(\\) has parameter \\$response with no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:__construct\\(\\) has parameter \\$title with no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:__construct\\(\\) has parameter \\$url with no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:fromHttp\\(\\) has no return type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:http\\(\\) has no return type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:http\\(\\) has parameter \\$options with no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:http\\(\\) has parameter \\$response with no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:http\\(\\) has parameter \\$title with no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:http\\(\\) has parameter \\$url with no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:level\\(\\) has no return type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Property Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:\\$errors has no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Property Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:\\$options has no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Property Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:\\$response has no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Property Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:\\$title has no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Property Zoomyboy\\\\LaravelNami\\\\Logger\\:\\:\\$url has no type specified\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - - - message: "#^Unsafe usage of new static\\(\\)\\.$#" - count: 1 - path: packages/laravel-nami/src/Logger.php - - message: "#^Method Zoomyboy\\\\LaravelNami\\\\LoginException\\:\\:setReason\\(\\) has no return type specified\\.$#" count: 1 diff --git a/resources/views/tex/bill.tex b/resources/views/tex/bill.tex index 10dfdad0..a4a38fea 100644 --- a/resources/views/tex/bill.tex +++ b/resources/views/tex/bill.tex @@ -1,6 +1,6 @@ \documentclass[silvaletter,12pt]{scrlttr2} -\setkomavar{subject}{<<< $subject >>>} +\setkomavar{subject}{<<< $getSubject >>>} \setkomavar{fromname}[<<<$settings->from>>>]{<<<$settings->from_long>>>} \setkomavar{frommobilephone}[Mobiltelefon: ]{<<<$settings->mobile>>>} \setkomavar{fromemail}[E-Mail: ]{<<<$settings->email>>>} @@ -11,17 +11,16 @@ \setkomavar{fromlogo}{\includegraphics[width=2cm]{logo.png}} % stammeslogo \begin{document} -@foreach($pages as $page) -\begin{letter}{Familie <<< $page->familyName >>>\\<<< $page->address >>>\\<<< $page->zip >>> <<< $page->location >>>} +\begin{letter}{Familie <<< $familyName >>>\\<<< $address >>>\\<<< $zip >>> <<< $location >>>} \sffamily \gdef\TotalHT{0} - \opening{Liebe Familie <<< $page->familyName >>>,} + \opening{Liebe Familie <<< $familyName >>>,} Hiermit stellen wir Ihnen den aktuellen Mitgliedsbeitrag für den \usekomavar*{fromname} und die DPSG in Rechnung. Dieser setzt sich wie folgt zusammen: \begin{center} \begin{tabular}{@{}p{0.8\textwidth}|r} - @foreach($page->positions as $desc => $price) + @foreach($positions as $desc => $price) \product{<<< $desc >>>}{<<< $price >>>} @endforeach \hline @@ -35,15 +34,14 @@ Kontoinhaber: & <<<$settings->from_long>>> \\ IBAN: & <<<$settings->iban>>> \\ Bic: & <<<$settings->bic>>> \\ - Verwendungszweck: & <<<$page->usage>>> + Verwendungszweck: & <<<$usage>>> \end{tabular} Bitte nehmen Sie zur Kenntnis, dass der für jedes Mitglied obligatorische Versicherungsschutz über die DPSG nur dann für Ihr Kind / Ihre Kinder gilt, wenn der Mitgliedsbeitrag bezahlt wurde. Wenn dies nicht geschieht, müssen wir Ihr Kind / Ihre Kinder von allen Pfadfinderaktionen ausschließen. Dazu gehören sowohl die Gruppenstunden sowie Tagesaktionen als auch mehrtägige Lager. - + Bei Fragen zur Rechnung können Sie mich auch persönlich erreichen. \closing{Viele Grüße \\ Der Stammesvorstand} \end{letter} -@endforeach \end{document} diff --git a/resources/views/tex/remember.tex b/resources/views/tex/remember.tex index 89876fa3..1126098c 100644 --- a/resources/views/tex/remember.tex +++ b/resources/views/tex/remember.tex @@ -1,6 +1,6 @@ \documentclass[silvaletter,12pt]{scrlttr2} -\setkomavar{subject}{<<< $subject >>>} +\setkomavar{subject}{<<< $getSubject >>>} \setkomavar{fromname}[<<<$settings->from>>>]{<<<$settings->from_long>>>} \setkomavar{frommobilephone}[Mobiltelefon: ]{<<<$settings->mobile>>>} \setkomavar{fromemail}[E-Mail: ]{<<<$settings->email>>>} @@ -11,17 +11,16 @@ \setkomavar{fromlogo}{\includegraphics[width=2cm]{logo.png}} % stammeslogo \begin{document} -@foreach($pages as $page) -\begin{letter}{Familie <<< $page->familyName >>>\\<<< $page->address >>>\\<<< $page->zip >>> <<< $page->location >>>} +\begin{letter}{Familie <<< $familyName >>>\\<<< $address >>>\\<<< $zip >>> <<< $location >>>} \sffamily \gdef\TotalHT{0} - \opening{Liebe Familie <<< $page->familyName >>>,} + \opening{Liebe Familie <<< $familyName >>>,} Ihr Mitgliedbeitrag ist noch ausstehend. Dieser setzt sich wie folgt zusammen: \begin{center} \begin{tabular}{@{}p{0.8\textwidth}|r} - @foreach($page->positions as $desc => $price) + @foreach($positions as $desc => $price) \product{<<< $desc >>>}{<<< $price >>>} @endforeach \hline @@ -35,15 +34,14 @@ Kontoinhaber: & <<<$settings->from_long>>> \\ IBAN: & <<<$settings->iban>>> \\ Bic: & <<<$settings->bic>>> \\ - Verwendungszweck: & <<<$page->usage>>> + Verwendungszweck: & <<<$usage>>> \end{tabular} Bitte nehmen Sie zur Kenntnis, dass der für jedes Mitglied obligatorische Versicherungsschutz über die DPSG nur dann für Ihr Kind / Ihre Kinder gilt, wenn der Mitgliedsbeitrag bezahlt wurde. Wenn dies nicht geschieht, müssen wir Ihr Kind / Ihre Kinder von allen Pfadfinderaktionen ausschließen. Dazu gehören sowohl die Gruppenstunden sowie Tagesaktionen als auch mehrtägige Lager. - + Bei Fragen zur Rechnung können Sie mich auch persönlich erreichen. \closing{Viele Grüße \\ Der Stammesvorstand} \end{letter} -@endforeach \end{document} diff --git a/routes/web.php b/routes/web.php index e98cfeef..abf66662 100644 --- a/routes/web.php +++ b/routes/web.php @@ -52,7 +52,6 @@ use App\Payment\Actions\PaymentStoreAction; use App\Payment\Actions\PaymentUpdateAction; use App\Payment\SendpaymentController; use App\Payment\SubscriptionController; -use App\Pdf\MemberPdfController; Route::group(['namespace' => 'App\\Http\\Controllers'], function (): void { Auth::routes(['register' => false]); @@ -71,8 +70,6 @@ Route::group(['middleware' => 'auth:web'], function (): void { Route::get('allpayment', AllpaymentPageAction::class)->name('allpayment.page'); Route::post('allpayment', AllpaymentStoreAction::class)->name('allpayment.store'); Route::resource('subscription', SubscriptionController::class); - Route::get('/member/{member}/pdf', MemberPdfController::class) - ->name('member.singlepdf'); Route::get('/sendpayment', [SendpaymentController::class, 'create'])->name('sendpayment.create'); Route::get('/sendpayment/pdf', [SendpaymentController::class, 'send'])->name('sendpayment.pdf'); Route::get('/member/{member}/efz', ShowEfzDocumentAction::class)->name('efz'); diff --git a/tests/Feature/Invoice/DocumentFactoryTest.php b/tests/Feature/Invoice/BillRememberDocumentTest.php similarity index 71% rename from tests/Feature/Invoice/DocumentFactoryTest.php rename to tests/Feature/Invoice/BillRememberDocumentTest.php index 55891eb4..e225f15d 100644 --- a/tests/Feature/Invoice/DocumentFactoryTest.php +++ b/tests/Feature/Invoice/BillRememberDocumentTest.php @@ -3,8 +3,11 @@ namespace Tests\Feature\Invoice; use App\Invoice\BillDocument; +use App\Invoice\BillKind; use App\Invoice\DocumentFactory; +use App\Invoice\Invoice; use App\Invoice\InvoiceSettings; +use App\Invoice\Queries\BillKindQuery; use App\Invoice\Queries\InvoiceMemberQuery; use App\Invoice\Queries\SingleMemberQuery; use App\Invoice\RememberDocument; @@ -15,7 +18,7 @@ use Tests\RequestFactories\Child; use Tests\TestCase; use Zoomyboy\Tex\Tex; -class DocumentFactoryTest extends TestCase +class BillRememberDocumentTest extends TestCase { use DatabaseTransactions; @@ -30,13 +33,14 @@ class DocumentFactoryTest extends TestCase 'zip' => '::zip::', 'location' => '::location::', ]) + ->postBillKind() ->has(Payment::factory()->notPaid()->nr('1995')->subscription('::subName::', [ new Child('a', 1000), new Child('a', 500), ])) ->create(); - $invoice = app(DocumentFactory::class)->singleInvoice(BillDocument::class, $this->query($member)); + $invoice = BillDocument::fromMembers($this->query(BillDocument::class)->getMembers()->first()); $invoice->assertHasAllContent([ 'Rechnung', @@ -51,6 +55,7 @@ class DocumentFactoryTest extends TestCase { $member = Member::factory() ->defaults() + ->postBillKind() ->state([ 'firstname' => '::firstname::', 'lastname' => '::lastname::', @@ -61,7 +66,7 @@ class DocumentFactoryTest extends TestCase ], ['split' => true])) ->create(); - $invoice = app(DocumentFactory::class)->singleInvoice(BillDocument::class, $this->query($member)); + $invoice = BillDocument::fromMembers($this->query(BillDocument::class)->getMembers()->first()); $invoice->assertHasAllContent([ 'Rechnung', @@ -75,46 +80,48 @@ class DocumentFactoryTest extends TestCase public function testBillSetsFilename(): void { - $member = Member::factory() + Member::factory() ->defaults() + ->postBillKind() ->state(['lastname' => '::lastname::']) ->has(Payment::factory()->notPaid()->nr('1995')) ->create(); - $invoice = app(DocumentFactory::class)->singleInvoice(BillDocument::class, $this->query($member)); + $invoice = BillDocument::fromMembers($this->query(BillDocument::class)->getMembers()->first()); $this->assertEquals('rechnung-fur-lastname.pdf', $invoice->compiledFilename()); } public function testRememberSetsFilename(): void { - $member = Member::factory() + Member::factory() + ->postBillKind() ->defaults() ->state(['lastname' => '::lastname::']) ->has(Payment::factory()->notPaid()->state(['last_remembered_at' => now()->subMonths(6)])) ->create(); - $invoice = app(DocumentFactory::class)->singleInvoice(RememberDocument::class, $this->query($member)); + $invoice = RememberDocument::fromMembers($this->query(RememberDocument::class)->getMembers()->first()); $this->assertEquals('zahlungserinnerung-fur-lastname.pdf', $invoice->compiledFilename()); } public function testItCreatesOneFileForFamilyMembers(): void { - $firstMember = Member::factory() + Member::factory() ->defaults() + ->postBillKind() ->state(['firstname' => 'Max1', 'lastname' => '::lastname::', 'address' => '::address::', 'zip' => '12345', 'location' => '::location::']) ->has(Payment::factory()->notPaid()->nr('nr1')) ->create(); Member::factory() ->defaults() + ->postBillKind() ->state(['firstname' => 'Max2', 'lastname' => '::lastname::', 'address' => '::address::', 'zip' => '12345', 'location' => '::location::']) ->has(Payment::factory()->notPaid()->nr('nr2')) ->create(); - $invoice = app(DocumentFactory::class)->singleInvoice(BillDocument::class, $this->query($firstMember)); - - $invoice->assertHasAllContent(['Max1', 'Max2', 'nr1', 'nr2']); + $this->assertCount(2, $this->query(BillDocument::class)->getMembers()->first()); } /** @@ -135,12 +142,13 @@ class DocumentFactoryTest extends TestCase 'iban' => 'DE444', 'bic' => 'SOLSSSSS', ]); - $member = Member::factory() + Member::factory() ->defaults() - ->has(Payment::factory()->notPaid()->nr('nr2')) + ->postBillKind() + ->has(Payment::factory()->notPaid()->nr('nr2')->state(['last_remembered_at' => now()->subYear()])) ->create(); - $invoice = app(DocumentFactory::class)->singleInvoice($type, $this->query($member)); + $invoice = BillDocument::fromMembers($this->query(BillDocument::class)->getMembers()->first()); $invoice->assertHasAllContent([ 'langer Stammesname', @@ -156,26 +164,11 @@ class DocumentFactoryTest extends TestCase ]); } - public function testItGeneratesAPdf(): void + /** + * @param class-string $type + */ + private function query(string $type): InvoiceMemberQuery { - Tex::fake(); - $member = Member::factory() - ->defaults() - ->has(Payment::factory()->notPaid()) - ->create(['lastname' => 'lastname']); - $this->withoutExceptionHandling(); - $this->login()->init()->loginNami(); - - $response = $this->call('GET', "/member/{$member->id}/pdf", [ - 'type' => BillDocument::class, - ]); - - $this->assertEquals('application/pdf', $response->headers->get('content-type')); - $this->assertEquals('inline; filename="rechnung-fur-lastname.pdf"', $response->headers->get('content-disposition')); - } - - private function query(Member $member): InvoiceMemberQuery - { - return new SingleMemberQuery($member); + return (new BillKindQuery(BillKind::POST))->type($type); } } diff --git a/tests/Feature/Invoice/InvoiceSendActionTest.php b/tests/Feature/Invoice/InvoiceSendActionTest.php index b71cb164..fd9a8c84 100644 --- a/tests/Feature/Invoice/InvoiceSendActionTest.php +++ b/tests/Feature/Invoice/InvoiceSendActionTest.php @@ -8,7 +8,6 @@ use App\Member\Member; use App\Payment\Payment; use App\Payment\PaymentMail; use Illuminate\Foundation\Testing\DatabaseTransactions; -use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Storage; use Tests\RequestFactories\Child; @@ -19,42 +18,29 @@ class InvoiceSendActionTest extends TestCase { use DatabaseTransactions; - public Member $member; - - public function setUp(): void + public function testItCanCreatePdfPayments(): void { - parent::setUp(); - + Mail::fake(); + Tex::spy(); Storage::fake('temp'); $this->withoutExceptionHandling(); $this->login()->loginNami(); - $this->member = Member::factory() + $member = Member::factory() ->defaults() ->has(Payment::factory()->notPaid()->nr('1997')->subscription('tollerbeitrag', [ new Child('a', 5400), ])) ->emailBillKind() ->create(['firstname' => 'Lah', 'lastname' => 'Mom', 'email' => 'peter@example.com']); - } - - public function testItCanCreatePdfPayments(): void - { - Mail::fake(); - - Artisan::call('invoice:send'); - - Mail::assertSent(PaymentMail::class, fn ($mail) => Storage::disk('temp')->path('rechnung-fur-mom.pdf') === $mail->filename && Storage::disk('temp')->exists('rechnung-fur-mom.pdf')); - } - - public function testItCanCompileAttachment(): void - { - Mail::fake(); - Tex::spy(); InvoiceSendAction::run(); - Tex::assertCompiled(BillDocument::class, fn ($document) => 'Mom' === $document->pages->first()->familyName - && $document->pages->first()->getPositions() === ['tollerbeitrag 1997 für Lah Mom' => '54.00'] + Mail::assertSent(PaymentMail::class, fn ($mail) => Storage::disk('temp')->path('rechnung-fur-mom.pdf') === $mail->filename && Storage::disk('temp')->exists('rechnung-fur-mom.pdf')); + Tex::assertCompiled( + BillDocument::class, + fn ($document) => 'Mom' === $document->familyName + && $document->positions === ['tollerbeitrag 1997 für Lah Mom' => '54.00'] ); + Tex::assertCompiledContent(BillDocument::class, BillDocument::from($member->payments->first()->invoice_data)->renderBody()); } } diff --git a/tests/Feature/Sendpayment/SendpaymentTest.php b/tests/Feature/Sendpayment/SendpaymentTest.php index 52ae2aef..c8726dfd 100644 --- a/tests/Feature/Sendpayment/SendpaymentTest.php +++ b/tests/Feature/Sendpayment/SendpaymentTest.php @@ -3,7 +3,12 @@ namespace Tests\Feature\Sendpayment; use App\Invoice\BillDocument; +use App\Invoice\BillKind; +use App\Invoice\DocumentFactory; use App\Invoice\InvoiceSettings; +use App\Invoice\Queries\BillKindQuery; +use App\Invoice\Queries\SingleMemberQuery; +use App\Invoice\RememberDocument; use App\Member\Member; use App\Payment\Payment; use App\Payment\Status; @@ -30,27 +35,81 @@ class SendpaymentTest extends TestCase $this->assertStringContainsString('BillDocument', $href); } + public function testItDownloadsPdfOfAllMembersForBill(): void + { + InvoiceSettings::fake(InvoiceSettingsFake::new()->create()); + $this->withoutExceptionHandling()->login()->loginNami(); + Member::factory()->defaults()->postBillKind()->count(3) + ->has(Payment::factory()->notPaid()->subscription('tollerbeitrag', [new Child('a', 5400)])) + ->create(); + + $response = $this->call('GET', route('sendpayment.pdf'), ['type' => 'App\\Invoice\\BillDocument']); + $response->assertOk(); + $this->assertPdfPageCount(3, $response->getFile()); + } + + public function testItDownloadsPdfOfAllMembersForRemember(): void + { + InvoiceSettings::fake(InvoiceSettingsFake::new()->create()); + $this->withoutExceptionHandling()->login()->loginNami(); + Member::factory()->defaults()->postBillKind()->count(3) + ->has(Payment::factory()->pending()->subscription('tollerbeitrag', [new Child('a', 5400)])) + ->create(); + + $response = $this->call('GET', route('sendpayment.pdf'), ['type' => 'App\\Invoice\\RememberDocument']); + $response->assertOk(); + $this->assertPdfPageCount(3, $response->getFile()); + } + public function testItCanCreatePdfPayments(): void { InvoiceSettings::fake(InvoiceSettingsFake::new()->create()); Tex::spy(); - $this->withoutExceptionHandling(); - $this->login()->loginNami(); - $member = Member::factory() + $this->withoutExceptionHandling()->login()->loginNami(); + $members = Member::factory() ->defaults() ->has(Payment::factory()->notPaid()->nr('1997')->subscription('tollerbeitrag', [new Child('a', 5400)])) ->has(Payment::factory()->paid()->nr('1998')->subscription('bezahltdesc', [new Child('b', 5800)])) ->postBillKind() + ->count(3) ->create(); + $member = $members->first(); - $response = $this->call('GET', route('sendpayment.pdf'), ['type' => 'App\\Invoice\\BillDocument']); - - $response->assertOk(); + $this->call('GET', route('sendpayment.pdf'), ['type' => 'App\\Invoice\\BillDocument']); $this->assertEquals(Status::firstWhere('name', 'Rechnung gestellt')->id, $member->payments->firstWhere('nr', '1997')->status_id); $this->assertEquals(Status::firstWhere('name', 'Rechnung beglichen')->id, $member->payments->firstWhere('nr', '1998')->status_id); - Tex::assertCompiled(BillDocument::class, fn ($document) => $document->hasAllContent(['1997', 'tollerbeitrag', '54.00']) - && $document->missesAllContent(['1998', 'bezahltdesc', '58.00']) + Tex::assertCompiled( + BillDocument::class, + fn ($document) => $document->hasAllContent(['1997', 'tollerbeitrag', '54.00']) + && $document->missesAllContent(['1998', 'bezahltdesc', '58.00']) ); + + $member->payments->firstWhere('nr', '1997')->update(['status_id' => Status::firstWhere('name', 'Nicht bezahlt')->id]); + $invoice = BillDocument::fromMembers((new BillKindQuery(BillKind::POST))->type(BillDocument::class)->getMembers()->first()); + $this->assertEquals( + BillDocument::from($member->payments->firstWhere('nr', '1997')->invoice_data)->renderBody(), + $invoice->renderBody() + ); + } + + public function testItCanCreatePdfPaymentsForRemember(): void + { + InvoiceSettings::fake(InvoiceSettingsFake::new()->create()); + Tex::spy(); + $this->withoutExceptionHandling()->login()->loginNami(); + $member = Member::factory() + ->defaults() + ->has(Payment::factory()->pending()->nr('1997')->subscription('tollerbeitrag', [new Child('a', 5400)])) + ->postBillKind() + ->create(); + + $this->call('GET', route('sendpayment.pdf'), ['type' => 'App\\Invoice\\RememberDocument']); + Tex::assertCompiled( + RememberDocument::class, + fn ($document) => $document->hasAllContent(['1997', 'tollerbeitrag', '54.00']) + ); + $this->assertNull($member->payments()->first()->invoice_data); + $this->assertEquals(now()->format('Y-m-d'), $member->payments->first()->last_remembered_at->format('Y-m-d')); } public function testItDoesntCreatePdfsWhenUserHasEmail(): void @@ -58,7 +117,7 @@ class SendpaymentTest extends TestCase Tex::spy(); $this->withoutExceptionHandling(); $this->login()->loginNami(); - $member = Member::factory() + Member::factory() ->defaults() ->has(Payment::factory()->notPaid()->nr('1997')->subscription('tollerbeitrag', [new Child('u', 5400)])) ->emailBillKind() diff --git a/tests/TestCase.php b/tests/TestCase.php index 38e8b9eb..a700f2c7 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -11,6 +11,7 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\Http; use Illuminate\Testing\TestResponse; use Phake; +use Symfony\Component\HttpFoundation\File\File; use Tests\Lib\MakesHttpCalls; use Tests\Lib\TestsInertia; use Zoomyboy\LaravelNami\Authentication\Auth; @@ -81,8 +82,8 @@ abstract class TestCase extends BaseTestCase $sessionErrors = $response->getSession()->get('errors')->getBag('default'); foreach ($errors as $key => $value) { - $this->assertTrue($sessionErrors->has($key), "Cannot find key {$key} in errors '".print_r($sessionErrors, true)); - $this->assertEquals($value, $sessionErrors->get($key)[0], "Failed to validate value for session error key {$key}. Actual value: ".print_r($sessionErrors, true)); + $this->assertTrue($sessionErrors->has($key), "Cannot find key {$key} in errors '" . print_r($sessionErrors, true)); + $this->assertEquals($value, $sessionErrors->get($key)[0], "Failed to validate value for session error key {$key}. Actual value: " . print_r($sessionErrors, true)); } return $this; @@ -106,4 +107,14 @@ abstract class TestCase extends BaseTestCase return $this; } + + public function assertPdfPageCount(int $pageCount, File $file): void + { + $this->assertTrue(file_exists($file->getPathname())); + exec('pdfinfo ' . escapeshellarg($file->getPathname()) . ' | grep ^Pages | sed "s/Pages:\s*//"', $output, $returnVar); + + $this->assertSame(0, $returnVar, 'Failed to get Pages of PDF File ' . $file->getPathname()); + $this->assertCount(1, $output, 'Failed to parse output format of pdfinfo'); + $this->assertEquals($pageCount, $output[0]); + } }