From b8341890d37fe061f768b6328d2081935536827a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=BCnther?=
| Zeitraum | +{{ event.eventBegin }} – {{ event.eventEnd }} ({{ event.duration }} Tage) | +
|---|---|
| Veranstaltungsort | +{{ event.postalCode }} {{ event.location }} | +
| Frühbuchen bis | +{{ event.earlyBirdEnd.formatted }} | +
| Anmeldeschluss | +{{ event.registrationFinalEnd.formatted }} | +
| Kontakt | ++ {{ event.email }} + | +
| Aktiv | -Preisgruppe | -Betrag | -Beschreibung | +Aktiv |
+ Preisgruppe |
+ Betrag |
+ Regulärer Beitrag |
+ Reduzierter Beitrag |
+ Solidaritätsbeitrag |
+ Beschreibung |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | - Regulärer Beitrag - | -+ | Teilnehmende |
- |
+
+
+ |
+
+
+ |
+
-
-
+
|
- | - - | -+ |
- |
+
+
+ |
+
+
+ |
+
+
-
-
+
|
@@ -171,29 +207,36 @@
- | - - | -+ |
- |
+
+
+ |
+
+
+ |
+
-
-
+
|
- |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @@ -203,10 +246,23 @@ |
- |
+
+
+ |
+
+
+ |
+
-
+
+
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/composables/useSignupForm.js b/app/Domains/Event/Views/Partials/SignUpForm/composables/useSignupForm.js
new file mode 100644
index 0000000..7697141
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/composables/useSignupForm.js
@@ -0,0 +1,98 @@
+import { ref, reactive, computed } from 'vue'
+import axios from 'axios'
+
+export function useSignupForm(event, participantData) {
+ const currentStep = ref(1)
+ const submitting = ref(false)
+ const summaryLoading = ref(false)
+ const submitResult = ref(null) // null | { type: 'success'|'exists', data: {} }
+
+ const selectedAddons = reactive({})
+console.log(participantData)
+
+ const formData = reactive({
+ eatingHabit: 'EATING_HABIT_VEGAN',
+ userId: participantData.id,
+ eventId: event.id,
+ vorname: participantData.firstname ?? '',
+ nachname: participantData.lastname ?? '',
+ pfadiname: participantData.nickname ?? '',
+ localGroup: participantData.localGroup ?? '-1',
+ geburtsdatum: participantData.birthday ?? '',
+ address1: participantData.address_1 ?? '',
+ address2: participantData.address_2 ?? '',
+ plz: participantData.postcode ?? '',
+ ort: participantData.city ?? '',
+ telefon_1: participantData.phone ?? '',
+ email_1: participantData.email ?? '',
+ participationType: '',
+ ansprechpartner: '',
+ telefon_2: '',
+ email_2: '',
+ badeerlaubnis: '-1',
+ first_aid: '-1',
+ participant_group: '',
+ beitrag: 'regular',
+ arrival: event.eventBeginInternal?.split('T')[0] ?? '',
+ departure: event.eventEndInternal?.split('T')[0] ?? '',
+ anreise_essen: '1',
+ abreise_essen: '2',
+ foto: { socialmedia: false, print: false, webseite: false, partner: false, intern: false },
+ allergien: participantData.allergies ?? '',
+ intolerances: participantData.intolerances ?? '',
+ medikamente: participantData.medications ?? '',
+ tetanusVaccination: participantData.tetanusVaccination ?? '',
+ essgewohnheit: 'vegetarian',
+ anmerkungen: '',
+ summary_information_correct: false,
+ summary_accept_terms: false,
+ legal_accepted: false,
+ payment: false,
+ })
+
+ const summaryAmount = ref('')
+
+ const goToStep = async (step) => {
+ if (step === 9) {
+ summaryLoading.value = true
+ summaryAmount.value = ''
+ try {
+ const res = await axios.post('/api/v1/event/' + event.id + '/calculate-amount', {
+ arrival: formData.arrival,
+ departure: formData.departure,
+ event_id: event.id,
+ participation_group: formData.participant_group,
+ selected_amount: formData.beitrag,
+ addons: selectedAddons,
+ participationType: formData.participationType,
+ beitrag: formData.beitrag,
+ })
+ summaryAmount.value = res.data.amount
+ } finally {
+ summaryLoading.value = false
+ }
+ }
+ currentStep.value = step
+ }
+
+ const submit = async () => {
+ if (!formData.summary_information_correct || !formData.summary_accept_terms || !formData.legal_accepted || !formData.payment) {
+ return
+ }
+ submitting.value = true
+ try {
+ const res = await axios.post('/api/v1/event/'+ event.id + '/signup', {
+ addons: selectedAddons,
+ registration_data: { ...formData },
+ })
+ submitResult.value = {
+ status: res.data.status,
+ participant: res.data.participant,
+ }
+ } finally {
+ submitting.value = false
+ }
+ }
+
+ return { currentStep, goToStep, formData, selectedAddons, submit, submitting, submitResult, summaryLoading, summaryAmount }
+}
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/steps/StepAddons.vue b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepAddons.vue
new file mode 100644
index 0000000..ad1b60c
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepAddons.vue
@@ -0,0 +1,45 @@
+
+
+
+ Hallo {{ props.participant.nicename }},+Vielen Dank für dein Interesse an der Veranstaltung {{event.name}}
+ Dein erweitertes Führungszeugnis konnte nicht automatisch geprüft werden. Bitte kontaktiere die Aktionsleitung.
+
+
+ Du hast noch kein erweitertes Führungszeugnis hinterlegt. Bitte reiche es umgehend ein.
+
+
+
+
+ Bitte beachte, dass deine Anmeldung erst nach Zahlungseiongang vollständig ist. + Du musst keinen Beitrag überweisen. Deine Anmeldung ist bestätigt. + + +
+ Du erhältst innerhalb von 2 Stunden eine E-Mail mit weiteren Informationen.
+
+
+
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/steps/StepAge.vue b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepAge.vue
new file mode 100644
index 0000000..364bad2
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepAge.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+ Beitrag+ + + +
+
+
+ Zusatzoptionen+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/steps/StepAllergies.vue b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepAllergies.vue
new file mode 100644
index 0000000..a9be072
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepAllergies.vue
@@ -0,0 +1,52 @@
+
+
+
+ Wer nimmt teil?+Bitte wähle deine Altersgruppe aus. + +
+
+
+
+
+
+
+
+
+
+ 👦
+
+
+ Mein Kind anmelden:+Mein Kind ist jünger als {{ event.alcoholicsAge }} Jahre. +
+
+
+
+
+ 🧑
+
+
+ Mich selbst anmelden+Ich bin {{ event.alcoholicsAge }} Jahre oder älter. +
+
+
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/steps/StepArrival.vue b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepArrival.vue
new file mode 100644
index 0000000..6db1dad
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepArrival.vue
@@ -0,0 +1,81 @@
+
+
+
+ Allergien & Ernährung+
+
+
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/steps/StepContactPerson.vue b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepContactPerson.vue
new file mode 100644
index 0000000..dd8c8b8
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepContactPerson.vue
@@ -0,0 +1,125 @@
+
+
+
+ An- und Abreise+
+
+
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/steps/StepPersonalData.vue b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepPersonalData.vue
new file mode 100644
index 0000000..257e5fa
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepPersonalData.vue
@@ -0,0 +1,124 @@
+
+
+
+ Kontaktperson+
+
+
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/steps/StepPhotoPermissions.vue b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepPhotoPermissions.vue
new file mode 100644
index 0000000..43e77e6
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepPhotoPermissions.vue
@@ -0,0 +1,33 @@
+
+
+
+ Persönliche Daten+
+
+
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/steps/StepRegistrationMode.vue b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepRegistrationMode.vue
new file mode 100644
index 0000000..b640e44
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepRegistrationMode.vue
@@ -0,0 +1,130 @@
+
+
+
+ Fotoerlaubnis+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/Domains/Event/Views/Partials/SignUpForm/steps/StepSummary.vue b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepSummary.vue
new file mode 100644
index 0000000..0a86f3e
--- /dev/null
+++ b/app/Domains/Event/Views/Partials/SignUpForm/steps/StepSummary.vue
@@ -0,0 +1,63 @@
+
+
+
+ Solidarbeitrag – Teilnahmegruppe+Ich nehme teil als ...+ +
+
+
+
+
+
+
diff --git a/app/Http/Controllers/GiroCodeGetController.php b/app/Http/Controllers/GiroCodeGetController.php
new file mode 100644
index 0000000..331bdb7
--- /dev/null
+++ b/app/Http/Controllers/GiroCodeGetController.php
@@ -0,0 +1,31 @@
+ $participantToken])->first();
+ if (null === $participant) {
+ return response()->json(['message' => 'Participant not found'], 404);
+ }
+
+ $amount = $participant->amount;
+ $amount->subtractAmount($participant->amount_paid);
+
+ $girocodeProvider = new GiroCodeProvider(
+ $participant->event()->first()->account_owner,
+ $participant->event()->first()->account_iban,
+ $participant->amount->getAmount(),
+ $participant->payment_purpose
+ );
+
+ return response($girocodeProvider->create(), 200,
+ ['Content-Type' => 'image/png']
+ );
+ }
+}
diff --git a/app/Models/Event.php b/app/Models/Event.php
index 0d1a388..0b0fcf6 100644
--- a/app/Models/Event.php
+++ b/app/Models/Event.php
@@ -7,12 +7,14 @@ use App\Casts\AmountCast;
use App\Enumerations\EatingHabit;
use App\Enumerations\ParticipationFeeType;
use App\RelationModels\EventParticipationFee;
+use App\Resources\EventResource;
use App\Scopes\CommonModel;
use App\Scopes\InstancedModel;
use DateTime;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
+use Illuminate\Http\Resources\Json\JsonResource;
/**
* @property string $tenant
@@ -53,6 +55,7 @@ class Event extends InstancedModel
'tenant',
'cost_unit_id',
'name',
+ 'identifier',
'location',
'postal_code',
'email',
@@ -169,4 +172,5 @@ class Event extends InstancedModel
public function participants() : hasMany {
return $this->hasMany(EventParticipant::class);
}
+
}
diff --git a/app/Models/EventParticipant.php b/app/Models/EventParticipant.php
index 2a47262..6177ff2 100644
--- a/app/Models/EventParticipant.php
+++ b/app/Models/EventParticipant.php
@@ -20,6 +20,7 @@ class EventParticipant extends InstancedModel
'tenant',
'event_id',
'user_id',
+ 'identifier',
'firstname',
'lastname',
@@ -42,6 +43,8 @@ class EventParticipant extends InstancedModel
'allergies',
'intolerances',
+ 'medications',
+ 'tetanus_vaccination',
'eating_habits',
'swimming_permission',
'first_aid_permission',
@@ -60,12 +63,14 @@ class EventParticipant extends InstancedModel
'notes',
'amount',
'amount_paid',
+ 'payment_purpose',
'efz_status',
'unregistered_at',
];
protected $casts = [
'birthday' => 'datetime',
+ 'tetanus_vaccination' => 'datetime',
'arrival_date' => 'datetime',
'departure_date' => 'datetime',
'unregistered_at' => 'datetime',
@@ -131,5 +136,21 @@ class EventParticipant extends InstancedModel
return $this->belongsTo(EfzStatus::class, 'efz_status', 'slug');
}
+ public function getOfficialName() : string {
+ return sprintf('%1$s %2$s', $this->firstname, $this->lastname);
+ }
+
+ public function getFullname() : string {
+ return sprintf('%1$1s %2$s %3$s',
+ $this->firstname,
+ $this->lastname,
+ $this->nickname !== null ? '(' . $this->nickname . ')' : '',
+ )
+ |>trim(...);
+ }
+
+ public function getNicename() : string {
+ return $this->nickname ?? $this->firstname;
+ }
}
diff --git a/app/Models/User.php b/app/Models/User.php
index e752d25..e58e871 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -66,6 +66,7 @@ class User extends Authenticatable
'medications',
'allergies',
'intolerances',
+ 'tetanus_vaccination',
'eating_habits',
'swimming_permission',
'first_aid_permission',
diff --git a/app/Providers/GiroCodeProvider.php b/app/Providers/GiroCodeProvider.php
new file mode 100644
index 0000000..4cfaa3c
--- /dev/null
+++ b/app/Providers/GiroCodeProvider.php
@@ -0,0 +1,27 @@
+recipient\n".
+ "$this->iban\n".
+ "EUR$this->amount\n".
+ "\n".
+ "$this->paymentPurpose";
+
+ return
+ QrCode::format('png')->size(300)->generate($data)
+
+ ;
+ }
+}
diff --git a/app/Providers/GlobalDataProvider.php b/app/Providers/GlobalDataProvider.php
index 36aa563..08b7df9 100644
--- a/app/Providers/GlobalDataProvider.php
+++ b/app/Providers/GlobalDataProvider.php
@@ -135,7 +135,7 @@ class GlobalDataProvider {
}
$navigation['common'][] = ['url' => '/invoice/new', 'display' => 'Neue Abrechnung'];
- $navigation['common'][] = ['url' => '/available-events', 'display' => 'Verfügbare Veranstaltungen'];
+ $navigation['common'][] = ['url' => '/event/available-events', 'display' => 'Verfügbare Veranstaltungen'];
return $navigation;
}
diff --git a/app/RelationModels/EventParticipationFee.php b/app/RelationModels/EventParticipationFee.php
index 35a66ef..b21634f 100644
--- a/app/RelationModels/EventParticipationFee.php
+++ b/app/RelationModels/EventParticipationFee.php
@@ -4,6 +4,7 @@ namespace App\RelationModels;
use App\Casts\AmountCast;
use App\Enumerations\ParticipationFeeType;
+use App\Enumerations\ParticipationType;
use App\Models\Tenant;
use App\Scopes\CommonModel;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
@@ -12,14 +13,19 @@ class EventParticipationFee extends CommonModel
{
protected $table = 'event_participation_fees';
- protected $fillable = ['tenant', 'type', 'name', 'description', 'amount'];
- protected $casts = ['amount' => AmountCast::class];
+ protected $fillable = ['tenant', 'type', 'name', 'description', 'amount_standard', 'amount_reduced', 'amount_solidarity', 'active'];
+ protected $casts = [
+ 'amount_standard' => AmountCast::class,
+ 'amount_reduced' => AmountCast::class,
+ 'amount_solidarity' => AmountCast::class,
+
+ ];
public function tenant() : BelongsTo {
return $this->belongsTo(Tenant::class, 'tenant', 'slug');
}
public function type() : BelongsTo {
- return $this->belongsTo(ParticipationFeeType::class, 'type', 'slug');
+ return $this->belongsTo(ParticipationType::class, 'type', 'slug');
}
}
diff --git a/app/Repositories/EventRepository.php b/app/Repositories/EventRepository.php
index f0290d8..716cb31 100644
--- a/app/Repositories/EventRepository.php
+++ b/app/Repositories/EventRepository.php
@@ -7,6 +7,7 @@ use App\Models\CostUnit;
use App\Models\Event;
use App\Resources\CostUnitResource;
use Illuminate\Database\Eloquent\Collection;
+use Psy\Readline\Hoa\EventBucket;
class EventRepository {
public function listAll() : array {
@@ -16,6 +17,17 @@ class EventRepository {
}
+ public function getAvailable(bool $accessCheck = true) : array {
+ return $this->getEventsByCriteria([
+ 'archived' => false,
+ 'registration_allowed' => true
+ ],$accessCheck);
+ }
+
+ public function getForRegistration(int $id) : ?Event {
+ $events = self::getEventsByCriteria(['id' => $id, 'registration_allowed' => true]);
+ }
+
public function getById(int $id, bool $accessCheck = true) : ?Event {
$events = self::getEventsByCriteria(['id' => $id], $accessCheck);
return $events[0] ?? null;
@@ -50,7 +62,7 @@ class EventRepository {
/** @var Event $event */
foreach (Event::where($criteria)->get() as $event) {
- if ($event->eventManagers()->where('user_id', $user->id)->exists() || $canSeeAll || !$accessCheck) {
+ if ($canSeeAll || !$accessCheck || $event->eventManagers()->where('user_id', $user->id)->exists()) {
$visibleEvents[] = $event;
}
}
diff --git a/app/Resources/EventParticipantResource.php b/app/Resources/EventParticipantResource.php
new file mode 100644
index 0000000..5ef447f
--- /dev/null
+++ b/app/Resources/EventParticipantResource.php
@@ -0,0 +1,33 @@
+resource->event;
+
+
+
+ return array_merge(
+ $this->resource->toArray(),
+ [
+ 'needs_payment' => $this->resource->amount->getAmount() > 0 && $event->pay_direct,
+ 'nicename' => $this->resource->getNicename(),
+ 'arrival' => $this->resource->arrival_date->format('d.m.Y'),
+ 'departure' => $this->resource->departure_date->format('d.m.Y'),
+ 'amount_left_string' => $this->resource->amount->toString(),
+ ]
+
+ );
+ }
+}
diff --git a/app/Resources/EventResource.php b/app/Resources/EventResource.php
index f3fb76b..cd84658 100644
--- a/app/Resources/EventResource.php
+++ b/app/Resources/EventResource.php
@@ -5,17 +5,20 @@ namespace App\Resources;
use App\Enumerations\ParticipationFeeType;
use App\Models\Event;
use App\ValueObjects\Amount;
+use DateTime;
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
-class EventResource {
+class EventResource extends JsonResource{
private Event $event;
public function __construct(Event $event) {
$this->event = $event;
}
- public function toArray() : array {
- $duration = $this->event->end_date->diff($this->event->start_date)->d + 1;
-
+ public function toArray(Request $request) : array
+ {
+ $duration = $this->event->end_date->diff($this->event->start_date)->days + 1;
$returnArray = [
'id' => $this->event->id,
@@ -25,13 +28,31 @@ class EventResource {
'email' => $this->event->email,
'accountOwner' => $this->event->account_owner,
'accountIban' => $this->event->account_iban,
+ 'accountOwner' => $this->event->account_owner,
+ 'accountIban' => $this->event->account_iban,
'alcoholicsAge' => $this->event->alcoholics_age,
'sendWeeklyReports' => $this->event->send_weekly_report,
'registrationAllowed' => $this->event->registration_allowed,
'earlyBirdEnd' => ['internal' => $this->event->early_bird_end->format('Y-m-d'), 'formatted' => $this->event->early_bird_end->format('d.m.Y')],
'registrationFinalEnd' => ['internal' => $this->event->registration_final_end->format('Y-m-d'), 'formatted' => $this->event->registration_final_end->format('d.m.Y')],
+ 'refundAfterEarlyBirdEnd' => 100 - $this->event->early_bird_end_amount_increase,
];
+ $returnArray['swimmingPermissions'] = \App\Enumerations\SwimmingPermission::query()
+ ->get()
+ ->map(fn ($permission) => [
+ 'slug' => $permission->slug,
+ 'name' => $permission->name,
+ ])
+ ->toArray();
+
+ $returnArray['firstAidPermissions'] = \App\Enumerations\FirstAidPermission::query()
+ ->get()
+ ->map(fn ($permission) => [
+ 'slug' => $permission->slug,
+ 'name' => $permission->name,
+ ])
+ ->toArray();
$returnArray['costUnit'] = new CostUnitResource($this->event->costUnit()->first())->toArray(true);
@@ -58,52 +79,122 @@ class EventResource {
$returnArray['managers'] = $this->event->eventManagers()->get()->map(fn($user) => new UserResource($user))->toArray();
$returnArray['supportPersonCalced'] = $this->event->support_per_person->toString();
- $returnArray['contributingLocalGroups'] = $this->event->localGroups()->get()->map(fn($localGroup) => new LocalGroupResource($localGroup))->toArray();
+ $returnArray['contributingLocalGroups'] = $this->event->localGroups
+ ->map(fn ($localGroup) => new LocalGroupResource($localGroup)->toArray($request))
+ ->toArray();
+
$returnArray['eatingHabits'] = $this->event->eatingHabits()->get()->map(
fn($eatingHabit) => new EatingHabitResource($eatingHabit))->toArray();
+ $returnArray['participationTypes'] = [];
+
+ $multiplier = $this->getMultiplier();
+
for ($i = 1; $i <= 4; $i++) {
$returnArray['participationFee_' . $i] = [
'active' => false,
'name' => '',
'description' => '',
- 'amount' => '0,00',
- 'type' => null
+ 'amount_standard' => null,
+ 'amount_reduced' => null,
+ 'amount_solidarity' => null,
+ 'type' => null,
];
if ($this->event->{'participation_fee_' . $i} === null) {
continue;
}
+ $participationFee = $this->event->{'participationFee' . $i}()->first();
- $returnArray['participationFee_' . $i] = [
+ $feeType = [
'active' => true,
- 'amount' => $this->event->{'participationFee' . $i}()->first()->amount->getFormattedAmount(),
- 'name' => $this->event->{'participationFee' . $i}->first()->name,
- 'description' => $this->event->{'participationFee' . $i}()->first()->description,
- 'type' => $this->event->{'participationFee' . $i}->first()->type
+ 'amount_standard_edit' => $participationFee->amount_standard->getFormattedAmount(),
+ 'amount_standard' => [
+ 'internal' => [
+ 'amount' => $participationFee->amount_standard->getAmount(),
+ 'currency' => $participationFee->amount_standard->getCurrency(),
+ ],
+ 'readable' => $participationFee->amount_standard->multiply($multiplier)->toString(),
+ ],
+ 'amount_reduced_edit' => $participationFee->amount_reduced === null ? null : $participationFee->amount_reduced->getFormattedAmount(),
+ 'amount_reduced' => $participationFee->amount_reduced === null
+ ? null
+ : [
+ 'internal' => [
+ 'amount' => $participationFee->amount_reduced->getAmount(),
+ 'currency' => $participationFee->amount_reduced->getCurrency(),
+ ],
+ 'readable' => $participationFee->amount_reduced->multiply($multiplier)->toString(),
+ ],
+ 'amount_solidarity_edit' => $participationFee->amount_solidarity === null ? null : $participationFee->amount_solidarity->getFormattedAmount(),
+ 'amount_solidarity' => $participationFee->amount_solidarity === null
+ ? null
+ : [
+ 'internal' => [
+ 'amount' => $participationFee->amount_solidarity->getAmount(),
+ 'currency' => $participationFee->amount_solidarity->getCurrency(),
+ ],
+ 'readable' => $participationFee->amount_solidarity->multiply($multiplier)->toString(),
+ ],
+ 'name' => $participationFee->name,
+ 'description' => $participationFee->description,
+ 'type' => (new ParticipationTypeResource($participationFee->type()->first()))->toArray($request),
];
-
- if ($this->event->participation_fee_type === ParticipationFeeType::PARTICIPATION_FEE_TYPE_SOLIDARITY) {
- $returnArray['participationFee_1' . $i]['description'] = '';
- $returnArray['participationFee_2' . $i]['description'] = '';
- $returnArray['participationFee_3' . $i]['description'] = 'Nach Verfügbarkeit';
- }
-
-
+ $returnArray['participationFee_' . $i] = $feeType;
+ $returnArray['participationTypes'][] = $feeType;
}
return $returnArray;
}
+ public function getMultiplier() : float {
+ $earlyBirdEnd = $this->event->early_bird_end;
+ if ($earlyBirdEnd > now()) {
+ return 1;
+ }
+
+ return 1 + $this->event->early_bird_end_amount_increase / 100;
+ }
+
public function calculateIncomes() : Amount {
$amount = new Amount(0, 'Euro');
$amount->addAmount($this->event->support_flat);
return $amount;
}
+
+ public function calculateAmount(
+ string $participationType,
+ string $feeType,
+ DateTime $arrival,
+ DateTime $departure
+ ) : Amount {
+ $fee = collect([
+ $this->event->participationFee1,
+ $this->event->participationFee2,
+ $this->event->participationFee3,
+ $this->event->participationFee4,
+ ])->filter(fn ($participationFee) => $participationFee !== null)
+ ->first(fn ($participationFee) => $participationFee->type === $participationType);
+
+ if ($fee === null) {
+ return new Amount(0, 'Euro');
+ }
+
+ /** @var Amount $basicFee */
+ $basicFee = $fee['amount_' . $feeType];
+ $basicFee = $basicFee->multiply($this->getMultiplier());
+
+ if ($this->event->pay_per_day) {
+ $days = $arrival->diff($departure)->days;
+ $basicFee = $basicFee->multiply($days);
+ }
+
+ return $basicFee;
+ }
}
diff --git a/app/Resources/LocalGroupResource.php b/app/Resources/LocalGroupResource.php
index 1d23f19..7ac11eb 100644
--- a/app/Resources/LocalGroupResource.php
+++ b/app/Resources/LocalGroupResource.php
@@ -6,19 +6,17 @@ use App\Models\Tenant;
use Illuminate\Http\Resources\Json\JsonResource;
class LocalGroupResource extends JsonResource {
- private Tenant $tenant;
-
public function __construct(Tenant $tenant) {
- $this->tenant = $tenant;
+ parent::__construct($tenant);
}
public function toArray($request) : array {
return [
- 'id' => $this->tenant->id,
- 'name' => $this->tenant->name,
- 'email' => $this->tenant->email,
- 'city' => $this->tenant->city,
- 'postalcode'=> $this->tenant->postcode
+ 'id' => $this->resource->id,
+ 'name' => $this->resource->name,
+ 'email' => $this->resource->email,
+ 'city' => $this->resource->city,
+ 'postalcode' => $this->resource->postcode,
];
}
}
diff --git a/app/Resources/ParticipationFeeTypeResource.php b/app/Resources/ParticipationFeeTypeResource.php
new file mode 100644
index 0000000..a69853b
--- /dev/null
+++ b/app/Resources/ParticipationFeeTypeResource.php
@@ -0,0 +1,34 @@
+ new ParticipationTypeResource($this->participationFee->type()->first())->toArray($request),
+ 'name' => $this->participationFee->name,
+ 'description' => $this->participationFee->description,
+ 'amount_standard' => ['internal' => $this->participationFee->amount_standard, 'readable' => $this->participationFee->amount_standard->toString()],
+ 'amount_reduced' => ['internal' => null, 'readable' => null],
+ 'amount_solidarity' => ['internal' => null, 'readable' => null],
+ ];
+
+ if ($this->participationFee->amount_reduced !== null) {
+ $return['amount_reduced'] = ['internal' => $this->participationFee->amount_reduced, 'readable' => $this->participationFee->amount_reduced->toString()];
+ }
+
+ if ($this->participationFee->amount_solidarity !== null) {
+ $return['amount_solidarity'] = ['internal' => $this->participationFee->amount_solidarity, 'readable' => $this->participationFee->amount_solidarity->toString()];
+ }
+
+ return $return;
+ }
+}
diff --git a/app/Resources/ParticipationTypeResource.php b/app/Resources/ParticipationTypeResource.php
new file mode 100644
index 0000000..0a56d1b
--- /dev/null
+++ b/app/Resources/ParticipationTypeResource.php
@@ -0,0 +1,21 @@
+
+ */
+ public function toArray(Request $request): array
+ {
+ return ['slug' => $this->participationType->slug, 'name' => $this->participationType->name];
+ }
+}
diff --git a/app/Resources/UserResource.php b/app/Resources/UserResource.php
index 016ac29..d6e32c8 100644
--- a/app/Resources/UserResource.php
+++ b/app/Resources/UserResource.php
@@ -17,8 +17,9 @@ class UserResource extends JsonResource {
$this->user->toArray(),
[
'nicename' => $this->user->getNicename(),
- 'fullname' => $this->user->getFullName()
- ]);
+ 'fullname' => $this->user->getFullName(),
+ 'localGroup' => $this->user->localGroup()->id,
+ ]);
unset($data['password']);
unset($data['remember_token']);
@@ -39,6 +40,7 @@ class UserResource extends JsonResource {
'firstname' => $this->user->firstname,
'lastname' => $this->user->lastname,
'localGroup' => $this->user->localGroup()->name,
+ 'localGroupId' => $this->user->localGroup()->id,
];
}
}
diff --git a/app/Scopes/CommonModel.php b/app/Scopes/CommonModel.php
index b937fc2..b09c891 100644
--- a/app/Scopes/CommonModel.php
+++ b/app/Scopes/CommonModel.php
@@ -3,8 +3,18 @@
namespace App\Scopes;
use Illuminate\Database\Eloquent\Model;
+use Illuminate\Http\Resources\Json\JsonResource;
abstract class CommonModel extends Model
{
+ public function toResource(?string $resourceClass = null) : JsonResource {
+ $modelClass = class_basename($this); // z.B. "Event"
+ $resourceClass = "App\\Resources\\{$modelClass}Resource";
+ if (!class_exists($resourceClass)) {
+ throw new \RuntimeException("Resource {$resourceClass} not found.");
+ }
+
+ return new $resourceClass($this);
+ }
}
diff --git a/app/Scopes/InstancedModel.php b/app/Scopes/InstancedModel.php
index 7ef172d..7908c25 100644
--- a/app/Scopes/InstancedModel.php
+++ b/app/Scopes/InstancedModel.php
@@ -3,6 +3,7 @@
namespace App\Scopes;
use Illuminate\Database\Eloquent\Model;
+use Illuminate\Http\Resources\Json\JsonResource;
abstract class InstancedModel extends Model
{
@@ -10,4 +11,15 @@ abstract class InstancedModel extends Model
{
static::addGlobalScope(new SiteScope());
}
+
+ public function toResource(?string $resourceClass = null) : JsonResource {
+ $modelClass = class_basename($this); // z.B. "Event"
+ $resourceClass = "App\\Resources\\{$modelClass}Resource";
+
+ if (!class_exists($resourceClass)) {
+ throw new \RuntimeException("Resource {$resourceClass} not found.");
+ }
+
+ return new $resourceClass($this);
+ }
}
diff --git a/app/ValueObjects/Age.php b/app/ValueObjects/Age.php
new file mode 100644
index 0000000..b40dfe7
--- /dev/null
+++ b/app/ValueObjects/Age.php
@@ -0,0 +1,16 @@
+diff($this->birthday)->y;
+ }
+
+ public function isfullAged() : bool {
+ return $this->getAge() >= 18;
+ }
+}
diff --git a/app/ValueObjects/Amount.php b/app/ValueObjects/Amount.php
index 87ae949..97e154e 100644
--- a/app/ValueObjects/Amount.php
+++ b/app/ValueObjects/Amount.php
@@ -45,6 +45,11 @@ class Amount {
$this->amount -= $amount->getAmount();
}
+ public function multiply(float $factor) : Amount {
+ $this->amount *= $factor;
+ return $this;
+ }
+
public function getFormattedAmount() : string {
$value = number_format( round( $this->amount, 2 ), 2, ',', '.' );
return $value
diff --git a/composer.json b/composer.json
index 6c221a6..989a38e 100644
--- a/composer.json
+++ b/composer.json
@@ -12,7 +12,12 @@
"laravel/tinker": "^2.10.1",
"ext-dom": "*",
"contelli/webdav-sync": "^1.0",
- "ext-zip": "*"
+ "ext-zip": "*",
+ "simplesoftwareio/simple-qrcode": "*",
+ "dompdf/dompdf": "^3.0",
+ "setasign/fpdf": "^1.8",
+ "setasign/fpdi": "^2.6",
+ "maennchen/zipstream-php": "^3.1"
},
"require-dev": {
"fakerphp/faker": "^1.23",
@@ -21,11 +26,7 @@
"laravel/sail": "^1.41",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.6",
- "phpunit/phpunit": "^11.5.3",
- "dompdf/dompdf": "^3.0",
- "setasign/fpdf": "^1.8",
- "setasign/fpdi": "^2.6",
- "maennchen/zipstream-php": "^3.1"
+ "phpunit/phpunit": "^11.5.3"
},
"autoload": {
"psr-4": {
diff --git a/composer.lock b/composer.lock
index 31bec50..44a8e3a 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,62 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "19f52629617de390dc3e1aa33f8cd050",
+ "content-hash": "9fb8095137a8e9d664e44b9fca5f1f5a",
"packages": [
+ {
+ "name": "bacon/bacon-qr-code",
+ "version": "2.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Bacon/BaconQrCode.git",
+ "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22",
+ "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22",
+ "shasum": ""
+ },
+ "require": {
+ "dasprid/enum": "^1.0.3",
+ "ext-iconv": "*",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "phly/keep-a-changelog": "^2.1",
+ "phpunit/phpunit": "^7 | ^8 | ^9",
+ "spatie/phpunit-snapshot-assertions": "^4.2.9",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "suggest": {
+ "ext-imagick": "to generate QR code images"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "BaconQrCode\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Ben Scholzen 'DASPRiD'",
+ "email": "mail@dasprids.de",
+ "homepage": "https://dasprids.de/",
+ "role": "Developer"
+ }
+ ],
+ "description": "BaconQrCode is a QR code generator for PHP.",
+ "homepage": "https://github.com/Bacon/BaconQrCode",
+ "support": {
+ "issues": "https://github.com/Bacon/BaconQrCode/issues",
+ "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8"
+ },
+ "time": "2022-12-07T17:46:57+00:00"
+ },
{
"name": "brick/math",
"version": "0.14.8",
@@ -181,6 +235,56 @@
},
"time": "2024-12-19T10:59:00+00:00"
},
+ {
+ "name": "dasprid/enum",
+ "version": "1.0.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/DASPRiD/Enum.git",
+ "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce",
+ "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1 <9.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11",
+ "squizlabs/php_codesniffer": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DASPRiD\\Enum\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Ben Scholzen 'DASPRiD'",
+ "email": "mail@dasprids.de",
+ "homepage": "https://dasprids.de/",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP 7.1 enum implementation",
+ "keywords": [
+ "enum",
+ "map"
+ ],
+ "support": {
+ "issues": "https://github.com/DASPRiD/Enum/issues",
+ "source": "https://github.com/DASPRiD/Enum/tree/1.0.7"
+ },
+ "time": "2025-09-16T12:23:56+00:00"
+ },
{
"name": "dflydev/dot-access-data",
"version": "v3.0.3",
@@ -423,6 +527,161 @@
],
"time": "2024-02-05T11:56:58+00:00"
},
+ {
+ "name": "dompdf/dompdf",
+ "version": "v3.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/dompdf.git",
+ "reference": "f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496",
+ "reference": "f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496",
+ "shasum": ""
+ },
+ "require": {
+ "dompdf/php-font-lib": "^1.0.0",
+ "dompdf/php-svg-lib": "^1.0.0",
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "masterminds/html5": "^2.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "ext-gd": "*",
+ "ext-json": "*",
+ "ext-zip": "*",
+ "mockery/mockery": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11",
+ "squizlabs/php_codesniffer": "^3.5",
+ "symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0"
+ },
+ "suggest": {
+ "ext-gd": "Needed to process images",
+ "ext-gmagick": "Improves image processing performance",
+ "ext-imagick": "Improves image processing performance",
+ "ext-zlib": "Needed for pdf stream compression"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Dompdf\\": "src/"
+ },
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "The Dompdf Community",
+ "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
+ }
+ ],
+ "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
+ "homepage": "https://github.com/dompdf/dompdf",
+ "support": {
+ "issues": "https://github.com/dompdf/dompdf/issues",
+ "source": "https://github.com/dompdf/dompdf/tree/v3.1.5"
+ },
+ "time": "2026-03-03T13:54:37+00:00"
+ },
+ {
+ "name": "dompdf/php-font-lib",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/php-font-lib.git",
+ "reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a6e9a688a2a80016ac080b97be73d3e10c444c9a",
+ "reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11 || ^12"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "FontLib\\": "src/FontLib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-or-later"
+ ],
+ "authors": [
+ {
+ "name": "The FontLib Community",
+ "homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md"
+ }
+ ],
+ "description": "A library to read, parse, export and make subsets of different types of font files.",
+ "homepage": "https://github.com/dompdf/php-font-lib",
+ "support": {
+ "issues": "https://github.com/dompdf/php-font-lib/issues",
+ "source": "https://github.com/dompdf/php-font-lib/tree/1.0.2"
+ },
+ "time": "2026-01-20T14:10:26+00:00"
+ },
+ {
+ "name": "dompdf/php-svg-lib",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/php-svg-lib.git",
+ "reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/8259ffb930817e72b1ff1caef5d226501f3dfeb1",
+ "reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": "^7.1 || ^8.0",
+ "sabberworm/php-css-parser": "^8.4 || ^9.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Svg\\": "src/Svg"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "The SvgLib Community",
+ "homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md"
+ }
+ ],
+ "description": "A library to read, parse and export to PDF SVG files.",
+ "homepage": "https://github.com/dompdf/php-svg-lib",
+ "support": {
+ "issues": "https://github.com/dompdf/php-svg-lib/issues",
+ "source": "https://github.com/dompdf/php-svg-lib/tree/1.0.2"
+ },
+ "time": "2026-01-02T16:01:13+00:00"
+ },
{
"name": "dragonmantank/cron-expression",
"version": "v3.6.0",
@@ -898,16 +1157,16 @@
},
{
"name": "guzzlehttp/psr7",
- "version": "2.8.0",
+ "version": "2.9.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "21dc724a0583619cd1652f673303492272778051"
+ "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
- "reference": "21dc724a0583619cd1652f673303492272778051",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884",
+ "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884",
"shasum": ""
},
"require": {
@@ -923,6 +1182,7 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
+ "jshttp/mime-db": "1.54.0.1",
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
@@ -994,7 +1254,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.8.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.9.0"
},
"funding": [
{
@@ -1010,7 +1270,7 @@
"type": "tidelift"
}
],
- "time": "2025-08-23T21:21:41+00:00"
+ "time": "2026-03-10T16:41:02+00:00"
},
{
"name": "guzzlehttp/uri-template",
@@ -1100,31 +1360,34 @@
},
{
"name": "inertiajs/inertia-laravel",
- "version": "v2.0.20",
+ "version": "v2.0.22",
"source": {
"type": "git",
"url": "https://github.com/inertiajs/inertia-laravel.git",
- "reference": "02a719d1120378aed68053b5b2d35157140df50e"
+ "reference": "4d5849328d4c64231f886d1422fdc945882f9094"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/02a719d1120378aed68053b5b2d35157140df50e",
- "reference": "02a719d1120378aed68053b5b2d35157140df50e",
+ "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/4d5849328d4c64231f886d1422fdc945882f9094",
+ "reference": "4d5849328d4c64231f886d1422fdc945882f9094",
"shasum": ""
},
"require": {
"ext-json": "*",
- "laravel/framework": "^10.0|^11.0|^12.0",
+ "laravel/framework": "^10.0|^11.0|^12.0|^13.0",
"php": "^8.1.0",
- "symfony/console": "^6.2|^7.0"
+ "symfony/console": "^6.2|^7.0|^8.0"
+ },
+ "conflict": {
+ "laravel/boost": "<2.2.0"
},
"require-dev": {
"guzzlehttp/guzzle": "^7.2",
"larastan/larastan": "^3.0",
"laravel/pint": "^1.16",
"mockery/mockery": "^1.3.3",
- "orchestra/testbench": "^8.0|^9.2|^10.0",
- "phpunit/phpunit": "^10.4|^11.5",
+ "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0",
+ "phpunit/phpunit": "^10.4|^11.5|^12.0",
"roave/security-advisories": "dev-master"
},
"suggest": {
@@ -1164,22 +1427,22 @@
],
"support": {
"issues": "https://github.com/inertiajs/inertia-laravel/issues",
- "source": "https://github.com/inertiajs/inertia-laravel/tree/v2.0.20"
+ "source": "https://github.com/inertiajs/inertia-laravel/tree/v2.0.22"
},
- "time": "2026-02-13T11:53:06+00:00"
+ "time": "2026-03-11T15:51:16+00:00"
},
{
"name": "laravel/framework",
- "version": "v12.51.0",
+ "version": "v12.55.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16"
+ "reference": "6d9185a248d101b07eecaf8fd60b18129545fd33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/ce4de3feb211e47c4f959d309ccf8a2733b1bc16",
- "reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/6d9185a248d101b07eecaf8fd60b18129545fd33",
+ "reference": "6d9185a248d101b07eecaf8fd60b18129545fd33",
"shasum": ""
},
"require": {
@@ -1200,7 +1463,7 @@
"guzzlehttp/uri-template": "^1.0",
"laravel/prompts": "^0.3.0",
"laravel/serializable-closure": "^1.3|^2.0",
- "league/commonmark": "^2.7",
+ "league/commonmark": "^2.8.1",
"league/flysystem": "^3.25.1",
"league/flysystem-local": "^3.25.1",
"league/uri": "^7.5.1",
@@ -1295,7 +1558,7 @@
"orchestra/testbench-core": "^10.9.0",
"pda/pheanstalk": "^5.0.6|^7.0.0",
"php-http/discovery": "^1.15",
- "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan": "^2.1.41",
"phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1",
"predis/predis": "^2.3|^3.0",
"resend/resend-php": "^0.10.0|^1.0",
@@ -1388,20 +1651,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2026-02-10T18:20:19+00:00"
+ "time": "2026-03-18T14:28:59+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.3.13",
+ "version": "v0.3.15",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "ed8c466571b37e977532fb2fd3c272c784d7050d"
+ "reference": "4bb8107ec97651fd3f17f897d6489dbc4d8fb999"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/ed8c466571b37e977532fb2fd3c272c784d7050d",
- "reference": "ed8c466571b37e977532fb2fd3c272c784d7050d",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/4bb8107ec97651fd3f17f897d6489dbc4d8fb999",
+ "reference": "4bb8107ec97651fd3f17f897d6489dbc4d8fb999",
"shasum": ""
},
"require": {
@@ -1445,22 +1708,22 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.3.13"
+ "source": "https://github.com/laravel/prompts/tree/v0.3.15"
},
- "time": "2026-02-06T12:17:10+00:00"
+ "time": "2026-03-17T13:45:17+00:00"
},
{
"name": "laravel/serializable-closure",
- "version": "v2.0.9",
+ "version": "v2.0.10",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "8f631589ab07b7b52fead814965f5a800459cb3e"
+ "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/8f631589ab07b7b52fead814965f5a800459cb3e",
- "reference": "8f631589ab07b7b52fead814965f5a800459cb3e",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/870fc81d2f879903dfc5b60bf8a0f94a1609e669",
+ "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669",
"shasum": ""
},
"require": {
@@ -1508,7 +1771,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2026-02-03T06:55:34+00:00"
+ "time": "2026-02-20T19:59:49+00:00"
},
{
"name": "laravel/tinker",
@@ -1578,16 +1841,16 @@
},
{
"name": "league/commonmark",
- "version": "2.8.0",
+ "version": "2.8.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb"
+ "reference": "59fb075d2101740c337c7216e3f32b36c204218b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
- "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b",
+ "reference": "59fb075d2101740c337c7216e3f32b36c204218b",
"shasum": ""
},
"require": {
@@ -1612,9 +1875,9 @@
"phpstan/phpstan": "^1.8.2",
"phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
"scrutinizer/ocular": "^1.8.1",
- "symfony/finder": "^5.3 | ^6.0 | ^7.0",
- "symfony/process": "^5.4 | ^6.0 | ^7.0",
- "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
+ "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0",
"unleashedtech/php-coding-standard": "^3.1.1",
"vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
},
@@ -1681,7 +1944,7 @@
"type": "tidelift"
}
],
- "time": "2025-11-26T21:48:24+00:00"
+ "time": "2026-03-19T13:16:38+00:00"
},
{
"name": "league/config",
@@ -1767,16 +2030,16 @@
},
{
"name": "league/flysystem",
- "version": "3.31.0",
+ "version": "3.32.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff"
+ "reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1717e0b3642b0df65ecb0cc89cdd99fa840672ff",
- "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/254b1595b16b22dbddaaef9ed6ca9fdac4956725",
+ "reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725",
"shasum": ""
},
"require": {
@@ -1844,9 +2107,9 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.31.0"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.32.0"
},
- "time": "2026-01-23T15:38:47+00:00"
+ "time": "2026-02-25T17:01:41+00:00"
},
{
"name": "league/flysystem-local",
@@ -1955,20 +2218,20 @@
},
{
"name": "league/uri",
- "version": "7.8.0",
+ "version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
- "reference": "4436c6ec8d458e4244448b069cc572d088230b76"
+ "reference": "08cf38e3924d4f56238125547b5720496fac8fd4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76",
- "reference": "4436c6ec8d458e4244448b069cc572d088230b76",
+ "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4",
+ "reference": "08cf38e3924d4f56238125547b5720496fac8fd4",
"shasum": ""
},
"require": {
- "league/uri-interfaces": "^7.8",
+ "league/uri-interfaces": "^7.8.1",
"php": "^8.1",
"psr/http-factory": "^1"
},
@@ -2041,7 +2304,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri/tree/7.8.0"
+ "source": "https://github.com/thephpleague/uri/tree/7.8.1"
},
"funding": [
{
@@ -2049,20 +2312,20 @@
"type": "github"
}
],
- "time": "2026-01-14T17:24:56+00:00"
+ "time": "2026-03-15T20:22:25+00:00"
},
{
"name": "league/uri-interfaces",
- "version": "7.8.0",
+ "version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git",
- "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4"
+ "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
- "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
+ "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928",
+ "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928",
"shasum": ""
},
"require": {
@@ -2125,7 +2388,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0"
+ "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1"
},
"funding": [
{
@@ -2133,7 +2396,152 @@
"type": "github"
}
],
- "time": "2026-01-15T06:54:53+00:00"
+ "time": "2026-03-08T20:05:35+00:00"
+ },
+ {
+ "name": "maennchen/zipstream-php",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/maennchen/ZipStream-PHP.git",
+ "reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/682f1098a8fddbaf43edac2306a691c7ad508ec5",
+ "reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "ext-zlib": "*",
+ "php-64bit": "^8.3"
+ },
+ "require-dev": {
+ "brianium/paratest": "^7.7",
+ "ext-zip": "*",
+ "friendsofphp/php-cs-fixer": "^3.86",
+ "guzzlehttp/guzzle": "^7.5",
+ "mikey179/vfsstream": "^1.6",
+ "php-coveralls/php-coveralls": "^2.5",
+ "phpunit/phpunit": "^12.0",
+ "vimeo/psalm": "^6.0"
+ },
+ "suggest": {
+ "guzzlehttp/psr7": "^2.4",
+ "psr/http-message": "^2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ZipStream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paul Duncan",
+ "email": "pabs@pablotron.org"
+ },
+ {
+ "name": "Jonatan Männchen",
+ "email": "jonatan@maennchen.ch"
+ },
+ {
+ "name": "Jesse Donat",
+ "email": "donatj@gmail.com"
+ },
+ {
+ "name": "András Kolesár",
+ "email": "kolesar@kolesar.hu"
+ }
+ ],
+ "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
+ "keywords": [
+ "stream",
+ "zip"
+ ],
+ "support": {
+ "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
+ "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/maennchen",
+ "type": "github"
+ }
+ ],
+ "time": "2025-12-10T09:58:31+00:00"
+ },
+ {
+ "name": "masterminds/html5",
+ "version": "2.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Masterminds/html5-php.git",
+ "reference": "fcf91eb64359852f00d921887b219479b4f21251"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
+ "reference": "fcf91eb64359852f00d921887b219479b4f21251",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Masterminds\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matt Butcher",
+ "email": "technosophos@gmail.com"
+ },
+ {
+ "name": "Matt Farina",
+ "email": "matt@mattfarina.com"
+ },
+ {
+ "name": "Asmir Mustafic",
+ "email": "goetas@gmail.com"
+ }
+ ],
+ "description": "An HTML5 parser and serializer.",
+ "homepage": "http://masterminds.github.io/html5-php",
+ "keywords": [
+ "HTML5",
+ "dom",
+ "html",
+ "parser",
+ "querypath",
+ "serializer",
+ "xml"
+ ],
+ "support": {
+ "issues": "https://github.com/Masterminds/html5-php/issues",
+ "source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
+ },
+ "time": "2025-07-25T09:04:22+00:00"
},
{
"name": "monolog/monolog",
@@ -2240,16 +2648,16 @@
},
{
"name": "nesbot/carbon",
- "version": "3.11.1",
+ "version": "3.11.3",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
- "reference": "f438fcc98f92babee98381d399c65336f3a3827f"
+ "reference": "6a7e652845bb018c668220c2a545aded8594fbbf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/f438fcc98f92babee98381d399c65336f3a3827f",
- "reference": "f438fcc98f92babee98381d399c65336f3a3827f",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/6a7e652845bb018c668220c2a545aded8594fbbf",
+ "reference": "6a7e652845bb018c668220c2a545aded8594fbbf",
"shasum": ""
},
"require": {
@@ -2341,20 +2749,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-29T09:26:29+00:00"
+ "time": "2026-03-11T17:23:39+00:00"
},
{
"name": "nette/schema",
- "version": "v1.3.4",
+ "version": "v1.3.5",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
- "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7"
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/schema/zipball/086497a2f34b82fede9b5a41cc8e131d087cd8f7",
- "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7",
+ "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002",
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002",
"shasum": ""
},
"require": {
@@ -2362,8 +2770,10 @@
"php": "8.1 - 8.5"
},
"require-dev": {
+ "nette/phpstan-rules": "^1.0",
"nette/tester": "^2.6",
- "phpstan/phpstan": "^2.0@stable",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1.39@stable",
"tracy/tracy": "^2.8"
},
"type": "library",
@@ -2404,9 +2814,9 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
- "source": "https://github.com/nette/schema/tree/v1.3.4"
+ "source": "https://github.com/nette/schema/tree/v1.3.5"
},
- "time": "2026-02-08T02:54:00+00:00"
+ "time": "2026-02-23T03:47:12+00:00"
},
{
"name": "nette/utils",
@@ -2559,31 +2969,31 @@
},
{
"name": "nunomaduro/termwind",
- "version": "v2.3.3",
+ "version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/termwind.git",
- "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017"
+ "reference": "712a31b768f5daea284c2169a7d227031001b9a8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017",
- "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017",
+ "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8",
+ "reference": "712a31b768f5daea284c2169a7d227031001b9a8",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "^8.2",
- "symfony/console": "^7.3.6"
+ "symfony/console": "^7.4.4 || ^8.0.4"
},
"require-dev": {
- "illuminate/console": "^11.46.1",
- "laravel/pint": "^1.25.1",
+ "illuminate/console": "^11.47.0",
+ "laravel/pint": "^1.27.1",
"mockery/mockery": "^1.6.12",
- "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.1.3",
+ "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2",
"phpstan/phpstan": "^1.12.32",
"phpstan/phpstan-strict-rules": "^1.6.2",
- "symfony/var-dumper": "^7.3.5",
+ "symfony/var-dumper": "^7.3.5 || ^8.0.4",
"thecodingmachine/phpstan-strict-rules": "^1.0.0"
},
"type": "library",
@@ -2615,7 +3025,7 @@
"email": "enunomaduro@gmail.com"
}
],
- "description": "Its like Tailwind CSS, but for the console.",
+ "description": "It's like Tailwind CSS, but for the console.",
"keywords": [
"cli",
"console",
@@ -2626,7 +3036,7 @@
],
"support": {
"issues": "https://github.com/nunomaduro/termwind/issues",
- "source": "https://github.com/nunomaduro/termwind/tree/v2.3.3"
+ "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0"
},
"funding": [
{
@@ -2642,7 +3052,7 @@
"type": "github"
}
],
- "time": "2025-11-20T02:34:59+00:00"
+ "time": "2026-02-16T23:10:27+00:00"
},
{
"name": "phpoption/phpoption",
@@ -3133,16 +3543,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.12.20",
+ "version": "v0.12.21",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "19678eb6b952a03b8a1d96ecee9edba518bb0373"
+ "reference": "4821fab5b7cd8c49a673a9fd5754dc9162bb9e97"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/19678eb6b952a03b8a1d96ecee9edba518bb0373",
- "reference": "19678eb6b952a03b8a1d96ecee9edba518bb0373",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4821fab5b7cd8c49a673a9fd5754dc9162bb9e97",
+ "reference": "4821fab5b7cd8c49a673a9fd5754dc9162bb9e97",
"shasum": ""
},
"require": {
@@ -3206,9 +3616,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.12.20"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.21"
},
- "time": "2026-02-11T15:05:28+00:00"
+ "time": "2026-03-06T21:21:28+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -3408,6 +3818,272 @@
},
"time": "2025-12-14T04:43:48+00:00"
},
+ {
+ "name": "sabberworm/php-css-parser",
+ "version": "v9.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
+ "reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949",
+ "reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
+ "thecodingmachine/safe": "^1.3 || ^2.5 || ^3.4"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-parallel-lint": "1.4.0",
+ "phpstan/extension-installer": "1.4.3",
+ "phpstan/phpstan": "1.12.32 || 2.1.32",
+ "phpstan/phpstan-phpunit": "1.4.2 || 2.0.8",
+ "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.7",
+ "phpunit/phpunit": "8.5.52",
+ "rawr/phpunit-data-provider": "3.3.1",
+ "rector/rector": "1.2.10 || 2.2.8",
+ "rector/type-perfect": "1.0.0 || 2.1.0",
+ "squizlabs/php_codesniffer": "4.0.1",
+ "thecodingmachine/phpstan-safe-rule": "1.2.0 || 1.4.1"
+ },
+ "suggest": {
+ "ext-mbstring": "for parsing UTF-8 CSS"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "9.4.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Rule/Rule.php",
+ "src/RuleSet/RuleContainer.php"
+ ],
+ "psr-4": {
+ "Sabberworm\\CSS\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Raphael Schweikert"
+ },
+ {
+ "name": "Oliver Klee",
+ "email": "github@oliverklee.de"
+ },
+ {
+ "name": "Jake Hotson",
+ "email": "jake.github@qzdesign.co.uk"
+ }
+ ],
+ "description": "Parser for CSS Files written in PHP",
+ "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
+ "keywords": [
+ "css",
+ "parser",
+ "stylesheet"
+ ],
+ "support": {
+ "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
+ "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.3.0"
+ },
+ "time": "2026-03-03T17:31:43+00:00"
+ },
+ {
+ "name": "setasign/fpdf",
+ "version": "1.8.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Setasign/FPDF.git",
+ "reference": "0838e0ee4925716fcbbc50ad9e1799b5edfae0a0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Setasign/FPDF/zipball/0838e0ee4925716fcbbc50ad9e1799b5edfae0a0",
+ "reference": "0838e0ee4925716fcbbc50ad9e1799b5edfae0a0",
+ "shasum": ""
+ },
+ "require": {
+ "ext-gd": "*",
+ "ext-zlib": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "fpdf.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Olivier Plathey",
+ "email": "oliver@fpdf.org",
+ "homepage": "http://fpdf.org/"
+ }
+ ],
+ "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.",
+ "homepage": "http://www.fpdf.org",
+ "keywords": [
+ "fpdf",
+ "pdf"
+ ],
+ "support": {
+ "source": "https://github.com/Setasign/FPDF/tree/1.8.6"
+ },
+ "time": "2023-06-26T14:44:25+00:00"
+ },
+ {
+ "name": "setasign/fpdi",
+ "version": "v2.6.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Setasign/FPDI.git",
+ "reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Setasign/FPDI/zipball/de0cf35911be3e9ea63b48e0f307883b1c7c48ac",
+ "reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac",
+ "shasum": ""
+ },
+ "require": {
+ "ext-zlib": "*",
+ "php": ">=7.2 <=8.5.99999"
+ },
+ "conflict": {
+ "setasign/tfpdf": "<1.31"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.52",
+ "setasign/fpdf": "~1.8.6",
+ "setasign/tfpdf": "~1.33",
+ "squizlabs/php_codesniffer": "^3.5",
+ "tecnickcom/tcpdf": "^6.8"
+ },
+ "suggest": {
+ "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "setasign\\Fpdi\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Slabon",
+ "email": "jan.slabon@setasign.com",
+ "homepage": "https://www.setasign.com"
+ },
+ {
+ "name": "Maximilian Kresse",
+ "email": "maximilian.kresse@setasign.com",
+ "homepage": "https://www.setasign.com"
+ }
+ ],
+ "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+ "homepage": "https://www.setasign.com/fpdi",
+ "keywords": [
+ "fpdf",
+ "fpdi",
+ "pdf"
+ ],
+ "support": {
+ "issues": "https://github.com/Setasign/FPDI/issues",
+ "source": "https://github.com/Setasign/FPDI/tree/v2.6.6"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-13T08:38:20+00:00"
+ },
+ {
+ "name": "simplesoftwareio/simple-qrcode",
+ "version": "4.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/SimpleSoftwareIO/simple-qrcode.git",
+ "reference": "916db7948ca6772d54bb617259c768c9cdc8d537"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/SimpleSoftwareIO/simple-qrcode/zipball/916db7948ca6772d54bb617259c768c9cdc8d537",
+ "reference": "916db7948ca6772d54bb617259c768c9cdc8d537",
+ "shasum": ""
+ },
+ "require": {
+ "bacon/bacon-qr-code": "^2.0",
+ "ext-gd": "*",
+ "php": ">=7.2|^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1",
+ "phpunit/phpunit": "~9"
+ },
+ "suggest": {
+ "ext-imagick": "Allows the generation of PNG QrCodes.",
+ "illuminate/support": "Allows for use within Laravel."
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "aliases": {
+ "QrCode": "SimpleSoftwareIO\\QrCode\\Facades\\QrCode"
+ },
+ "providers": [
+ "SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SimpleSoftwareIO\\QrCode\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Simple Software LLC",
+ "email": "support@simplesoftware.io"
+ }
+ ],
+ "description": "Simple QrCode is a QR code generator made for Laravel.",
+ "homepage": "https://www.simplesoftware.io/#/docs/simple-qrcode",
+ "keywords": [
+ "Simple",
+ "generator",
+ "laravel",
+ "qrcode",
+ "wrapper"
+ ],
+ "support": {
+ "issues": "https://github.com/SimpleSoftwareIO/simple-qrcode/issues",
+ "source": "https://github.com/SimpleSoftwareIO/simple-qrcode/tree/4.2.0"
+ },
+ "time": "2021-02-08T20:43:55+00:00"
+ },
{
"name": "symfony/clock",
"version": "v8.0.0",
@@ -3487,16 +4163,16 @@
},
{
"name": "symfony/console",
- "version": "v7.4.4",
+ "version": "v7.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894"
+ "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
- "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
+ "url": "https://api.github.com/repos/symfony/console/zipball/e1e6770440fb9c9b0cf725f81d1361ad1835329d",
+ "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d",
"shasum": ""
},
"require": {
@@ -3561,7 +4237,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.4.4"
+ "source": "https://github.com/symfony/console/tree/v7.4.7"
},
"funding": [
{
@@ -3581,20 +4257,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-13T11:36:38+00:00"
+ "time": "2026-03-06T14:06:20+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v8.0.0",
+ "version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "6225bd458c53ecdee056214cb4a2ffaf58bd592b"
+ "reference": "2a178bf80f05dbbe469a337730eba79d61315262"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/6225bd458c53ecdee056214cb4a2ffaf58bd592b",
- "reference": "6225bd458c53ecdee056214cb4a2ffaf58bd592b",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/2a178bf80f05dbbe469a337730eba79d61315262",
+ "reference": "2a178bf80f05dbbe469a337730eba79d61315262",
"shasum": ""
},
"require": {
@@ -3630,7 +4306,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v8.0.0"
+ "source": "https://github.com/symfony/css-selector/tree/v8.0.6"
},
"funding": [
{
@@ -3650,7 +4326,7 @@
"type": "tidelift"
}
],
- "time": "2025-10-30T14:17:19+00:00"
+ "time": "2026-02-17T13:07:04+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -3964,16 +4640,16 @@
},
{
"name": "symfony/finder",
- "version": "v7.4.5",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb"
+ "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
- "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
+ "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
"shasum": ""
},
"require": {
@@ -4008,7 +4684,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v7.4.5"
+ "source": "https://github.com/symfony/finder/tree/v7.4.6"
},
"funding": [
{
@@ -4028,20 +4704,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-26T15:07:59+00:00"
+ "time": "2026-01-29T09:40:50+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v7.4.5",
+ "version": "v7.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "446d0db2b1f21575f1284b74533e425096abdfb6"
+ "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/446d0db2b1f21575f1284b74533e425096abdfb6",
- "reference": "446d0db2b1f21575f1284b74533e425096abdfb6",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f94b3e7b7dafd40e666f0c9ff2084133bae41e81",
+ "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81",
"shasum": ""
},
"require": {
@@ -4090,7 +4766,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v7.4.5"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.4.7"
},
"funding": [
{
@@ -4110,20 +4786,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-27T16:16:02+00:00"
+ "time": "2026-03-06T13:15:18+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.4.5",
+ "version": "v7.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a"
+ "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/229eda477017f92bd2ce7615d06222ec0c19e82a",
- "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3b3fcf386c809be990c922e10e4c620d6367cab1",
+ "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1",
"shasum": ""
},
"require": {
@@ -4165,7 +4841,7 @@
"symfony/config": "^6.4|^7.0|^8.0",
"symfony/console": "^6.4|^7.0|^8.0",
"symfony/css-selector": "^6.4|^7.0|^8.0",
- "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0",
"symfony/dom-crawler": "^6.4|^7.0|^8.0",
"symfony/expression-language": "^6.4|^7.0|^8.0",
"symfony/finder": "^6.4|^7.0|^8.0",
@@ -4209,7 +4885,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/v7.4.5"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.4.7"
},
"funding": [
{
@@ -4229,20 +4905,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-28T10:33:42+00:00"
+ "time": "2026-03-06T16:33:18+00:00"
},
{
"name": "symfony/mailer",
- "version": "v7.4.4",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6"
+ "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/7b750074c40c694ceb34cb926d6dffee231c5cd6",
- "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
+ "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
"shasum": ""
},
"require": {
@@ -4293,7 +4969,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v7.4.4"
+ "source": "https://github.com/symfony/mailer/tree/v7.4.6"
},
"funding": [
{
@@ -4313,20 +4989,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-08T08:25:11+00:00"
+ "time": "2026-02-25T16:50:00+00:00"
},
{
"name": "symfony/mime",
- "version": "v7.4.5",
+ "version": "v7.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148"
+ "reference": "da5ab4fde3f6c88ab06e96185b9922f48b677cd1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/b18c7e6e9eee1e19958138df10412f3c4c316148",
- "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/da5ab4fde3f6c88ab06e96185b9922f48b677cd1",
+ "reference": "da5ab4fde3f6c88ab06e96185b9922f48b677cd1",
"shasum": ""
},
"require": {
@@ -4337,7 +5013,7 @@
},
"conflict": {
"egulias/email-validator": "~3.0.0",
- "phpdocumentor/reflection-docblock": "<5.2|>=6",
+ "phpdocumentor/reflection-docblock": "<5.2|>=7",
"phpdocumentor/type-resolver": "<1.5.1",
"symfony/mailer": "<6.4",
"symfony/serializer": "<6.4.3|>7.0,<7.0.3"
@@ -4345,7 +5021,7 @@
"require-dev": {
"egulias/email-validator": "^2.1.10|^3.1|^4",
"league/html-to-markdown": "^5.0",
- "phpdocumentor/reflection-docblock": "^5.2",
+ "phpdocumentor/reflection-docblock": "^5.2|^6.0",
"symfony/dependency-injection": "^6.4|^7.0|^8.0",
"symfony/process": "^6.4|^7.0|^8.0",
"symfony/property-access": "^6.4|^7.0|^8.0",
@@ -4382,7 +5058,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v7.4.5"
+ "source": "https://github.com/symfony/mime/tree/v7.4.7"
},
"funding": [
{
@@ -4402,7 +5078,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-27T08:59:58+00:00"
+ "time": "2026-03-05T15:24:09+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -5300,16 +5976,16 @@
},
{
"name": "symfony/routing",
- "version": "v7.4.4",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "0798827fe2c79caeed41d70b680c2c3507d10147"
+ "reference": "238d749c56b804b31a9bf3e26519d93b65a60938"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/0798827fe2c79caeed41d70b680c2c3507d10147",
- "reference": "0798827fe2c79caeed41d70b680c2c3507d10147",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/238d749c56b804b31a9bf3e26519d93b65a60938",
+ "reference": "238d749c56b804b31a9bf3e26519d93b65a60938",
"shasum": ""
},
"require": {
@@ -5361,7 +6037,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v7.4.4"
+ "source": "https://github.com/symfony/routing/tree/v7.4.6"
},
"funding": [
{
@@ -5381,7 +6057,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-12T12:19:02+00:00"
+ "time": "2026-02-25T16:50:00+00:00"
},
{
"name": "symfony/service-contracts",
@@ -5472,16 +6148,16 @@
},
{
"name": "symfony/string",
- "version": "v8.0.4",
+ "version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "758b372d6882506821ed666032e43020c4f57194"
+ "reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/758b372d6882506821ed666032e43020c4f57194",
- "reference": "758b372d6882506821ed666032e43020c4f57194",
+ "url": "https://api.github.com/repos/symfony/string/zipball/6c9e1108041b5dce21a9a4984b531c4923aa9ec4",
+ "reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4",
"shasum": ""
},
"require": {
@@ -5538,7 +6214,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v8.0.4"
+ "source": "https://github.com/symfony/string/tree/v8.0.6"
},
"funding": [
{
@@ -5558,20 +6234,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-12T12:37:40+00:00"
+ "time": "2026-02-09T10:14:57+00:00"
},
{
"name": "symfony/translation",
- "version": "v8.0.4",
+ "version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "db70c8ce7db74fd2da7b1d268db46b2a8ce32c10"
+ "reference": "13ff19bcf2bea492d3c2fbeaa194dd6f4599ce1b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/db70c8ce7db74fd2da7b1d268db46b2a8ce32c10",
- "reference": "db70c8ce7db74fd2da7b1d268db46b2a8ce32c10",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/13ff19bcf2bea492d3c2fbeaa194dd6f4599ce1b",
+ "reference": "13ff19bcf2bea492d3c2fbeaa194dd6f4599ce1b",
"shasum": ""
},
"require": {
@@ -5631,7 +6307,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v8.0.4"
+ "source": "https://github.com/symfony/translation/tree/v8.0.6"
},
"funding": [
{
@@ -5651,7 +6327,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-13T13:06:50+00:00"
+ "time": "2026-02-17T13:07:04+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -5815,16 +6491,16 @@
},
{
"name": "symfony/var-dumper",
- "version": "v7.4.4",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "0e4769b46a0c3c62390d124635ce59f66874b282"
+ "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e4769b46a0c3c62390d124635ce59f66874b282",
- "reference": "0e4769b46a0c3c62390d124635ce59f66874b282",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291",
+ "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291",
"shasum": ""
},
"require": {
@@ -5878,7 +6554,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.4.4"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.4.6"
},
"funding": [
{
@@ -5898,7 +6574,150 @@
"type": "tidelift"
}
],
- "time": "2026-01-01T22:13:48+00:00"
+ "time": "2026-02-15T10:53:20+00:00"
+ },
+ {
+ "name": "thecodingmachine/safe",
+ "version": "v3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thecodingmachine/safe.git",
+ "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/705683a25bacf0d4860c7dea4d7947bfd09eea19",
+ "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpstan/phpstan": "^2",
+ "phpunit/phpunit": "^10",
+ "squizlabs/php_codesniffer": "^3.2"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/special_cases.php",
+ "generated/apache.php",
+ "generated/apcu.php",
+ "generated/array.php",
+ "generated/bzip2.php",
+ "generated/calendar.php",
+ "generated/classobj.php",
+ "generated/com.php",
+ "generated/cubrid.php",
+ "generated/curl.php",
+ "generated/datetime.php",
+ "generated/dir.php",
+ "generated/eio.php",
+ "generated/errorfunc.php",
+ "generated/exec.php",
+ "generated/fileinfo.php",
+ "generated/filesystem.php",
+ "generated/filter.php",
+ "generated/fpm.php",
+ "generated/ftp.php",
+ "generated/funchand.php",
+ "generated/gettext.php",
+ "generated/gmp.php",
+ "generated/gnupg.php",
+ "generated/hash.php",
+ "generated/ibase.php",
+ "generated/ibmDb2.php",
+ "generated/iconv.php",
+ "generated/image.php",
+ "generated/imap.php",
+ "generated/info.php",
+ "generated/inotify.php",
+ "generated/json.php",
+ "generated/ldap.php",
+ "generated/libxml.php",
+ "generated/lzf.php",
+ "generated/mailparse.php",
+ "generated/mbstring.php",
+ "generated/misc.php",
+ "generated/mysql.php",
+ "generated/mysqli.php",
+ "generated/network.php",
+ "generated/oci8.php",
+ "generated/opcache.php",
+ "generated/openssl.php",
+ "generated/outcontrol.php",
+ "generated/pcntl.php",
+ "generated/pcre.php",
+ "generated/pgsql.php",
+ "generated/posix.php",
+ "generated/ps.php",
+ "generated/pspell.php",
+ "generated/readline.php",
+ "generated/rnp.php",
+ "generated/rpminfo.php",
+ "generated/rrd.php",
+ "generated/sem.php",
+ "generated/session.php",
+ "generated/shmop.php",
+ "generated/sockets.php",
+ "generated/sodium.php",
+ "generated/solr.php",
+ "generated/spl.php",
+ "generated/sqlsrv.php",
+ "generated/ssdeep.php",
+ "generated/ssh2.php",
+ "generated/stream.php",
+ "generated/strings.php",
+ "generated/swoole.php",
+ "generated/uodbc.php",
+ "generated/uopz.php",
+ "generated/url.php",
+ "generated/var.php",
+ "generated/xdiff.php",
+ "generated/xml.php",
+ "generated/xmlrpc.php",
+ "generated/yaml.php",
+ "generated/yaz.php",
+ "generated/zip.php",
+ "generated/zlib.php"
+ ],
+ "classmap": [
+ "lib/DateTime.php",
+ "lib/DateTimeImmutable.php",
+ "lib/Exceptions/",
+ "generated/Exceptions/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
+ "support": {
+ "issues": "https://github.com/thecodingmachine/safe/issues",
+ "source": "https://github.com/thecodingmachine/safe/tree/v3.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/OskarStark",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/shish",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/silasjoisten",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/staabm",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-04T18:08:13+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -6115,161 +6934,6 @@
}
],
"packages-dev": [
- {
- "name": "dompdf/dompdf",
- "version": "v3.1.4",
- "source": {
- "type": "git",
- "url": "https://github.com/dompdf/dompdf.git",
- "reference": "db712c90c5b9868df3600e64e68da62e78a34623"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db712c90c5b9868df3600e64e68da62e78a34623",
- "reference": "db712c90c5b9868df3600e64e68da62e78a34623",
- "shasum": ""
- },
- "require": {
- "dompdf/php-font-lib": "^1.0.0",
- "dompdf/php-svg-lib": "^1.0.0",
- "ext-dom": "*",
- "ext-mbstring": "*",
- "masterminds/html5": "^2.0",
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "ext-gd": "*",
- "ext-json": "*",
- "ext-zip": "*",
- "mockery/mockery": "^1.3",
- "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11",
- "squizlabs/php_codesniffer": "^3.5",
- "symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0"
- },
- "suggest": {
- "ext-gd": "Needed to process images",
- "ext-gmagick": "Improves image processing performance",
- "ext-imagick": "Improves image processing performance",
- "ext-zlib": "Needed for pdf stream compression"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Dompdf\\": "src/"
- },
- "classmap": [
- "lib/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-2.1"
- ],
- "authors": [
- {
- "name": "The Dompdf Community",
- "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
- }
- ],
- "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
- "homepage": "https://github.com/dompdf/dompdf",
- "support": {
- "issues": "https://github.com/dompdf/dompdf/issues",
- "source": "https://github.com/dompdf/dompdf/tree/v3.1.4"
- },
- "time": "2025-10-29T12:43:30+00:00"
- },
- {
- "name": "dompdf/php-font-lib",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/dompdf/php-font-lib.git",
- "reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a6e9a688a2a80016ac080b97be73d3e10c444c9a",
- "reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11 || ^12"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "FontLib\\": "src/FontLib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-2.1-or-later"
- ],
- "authors": [
- {
- "name": "The FontLib Community",
- "homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md"
- }
- ],
- "description": "A library to read, parse, export and make subsets of different types of font files.",
- "homepage": "https://github.com/dompdf/php-font-lib",
- "support": {
- "issues": "https://github.com/dompdf/php-font-lib/issues",
- "source": "https://github.com/dompdf/php-font-lib/tree/1.0.2"
- },
- "time": "2026-01-20T14:10:26+00:00"
- },
- {
- "name": "dompdf/php-svg-lib",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/dompdf/php-svg-lib.git",
- "reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/8259ffb930817e72b1ff1caef5d226501f3dfeb1",
- "reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "php": "^7.1 || ^8.0",
- "sabberworm/php-css-parser": "^8.4 || ^9.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Svg\\": "src/Svg"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-3.0-or-later"
- ],
- "authors": [
- {
- "name": "The SvgLib Community",
- "homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md"
- }
- ],
- "description": "A library to read, parse and export to PDF SVG files.",
- "homepage": "https://github.com/dompdf/php-svg-lib",
- "support": {
- "issues": "https://github.com/dompdf/php-svg-lib/issues",
- "source": "https://github.com/dompdf/php-svg-lib/tree/1.0.2"
- },
- "time": "2026-01-02T16:01:13+00:00"
- },
{
"name": "fakerphp/faker",
"version": "v1.24.1",
@@ -6537,16 +7201,16 @@
},
{
"name": "laravel/pint",
- "version": "v1.27.1",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "54cca2de13790570c7b6f0f94f37896bee4abcb5"
+ "reference": "bdec963f53172c5e36330f3a400604c69bf02d39"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/54cca2de13790570c7b6f0f94f37896bee4abcb5",
- "reference": "54cca2de13790570c7b6f0f94f37896bee4abcb5",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/bdec963f53172c5e36330f3a400604c69bf02d39",
+ "reference": "bdec963f53172c5e36330f3a400604c69bf02d39",
"shasum": ""
},
"require": {
@@ -6557,13 +7221,14 @@
"php": "^8.2.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.93.1",
- "illuminate/view": "^12.51.0",
- "larastan/larastan": "^3.9.2",
+ "friendsofphp/php-cs-fixer": "^3.94.2",
+ "illuminate/view": "^12.54.1",
+ "larastan/larastan": "^3.9.3",
"laravel-zero/framework": "^12.0.5",
"mockery/mockery": "^1.6.12",
- "nunomaduro/termwind": "^2.3.3",
- "pestphp/pest": "^3.8.5"
+ "nunomaduro/termwind": "^2.4.0",
+ "pestphp/pest": "^3.8.6",
+ "shipfastlabs/agent-detector": "^1.1.0"
},
"bin": [
"builds/pint"
@@ -6600,20 +7265,20 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2026-02-10T20:00:20+00:00"
+ "time": "2026-03-12T15:51:39+00:00"
},
{
"name": "laravel/sail",
- "version": "v1.53.0",
+ "version": "v1.54.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb"
+ "reference": "bcc5e06f1a79d806d880a4b027964d2aa5872b07"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/e340eaa2bea9b99192570c48ed837155dbf24fbb",
- "reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/bcc5e06f1a79d806d880a4b027964d2aa5872b07",
+ "reference": "bcc5e06f1a79d806d880a4b027964d2aa5872b07",
"shasum": ""
},
"require": {
@@ -6663,152 +7328,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2026-02-06T12:16:02+00:00"
- },
- {
- "name": "maennchen/zipstream-php",
- "version": "3.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/maennchen/ZipStream-PHP.git",
- "reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/682f1098a8fddbaf43edac2306a691c7ad508ec5",
- "reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "ext-zlib": "*",
- "php-64bit": "^8.3"
- },
- "require-dev": {
- "brianium/paratest": "^7.7",
- "ext-zip": "*",
- "friendsofphp/php-cs-fixer": "^3.86",
- "guzzlehttp/guzzle": "^7.5",
- "mikey179/vfsstream": "^1.6",
- "php-coveralls/php-coveralls": "^2.5",
- "phpunit/phpunit": "^12.0",
- "vimeo/psalm": "^6.0"
- },
- "suggest": {
- "guzzlehttp/psr7": "^2.4",
- "psr/http-message": "^2.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "ZipStream\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Paul Duncan",
- "email": "pabs@pablotron.org"
- },
- {
- "name": "Jonatan Männchen",
- "email": "jonatan@maennchen.ch"
- },
- {
- "name": "Jesse Donat",
- "email": "donatj@gmail.com"
- },
- {
- "name": "András Kolesár",
- "email": "kolesar@kolesar.hu"
- }
- ],
- "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
- "keywords": [
- "stream",
- "zip"
- ],
- "support": {
- "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
- "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.2.1"
- },
- "funding": [
- {
- "url": "https://github.com/maennchen",
- "type": "github"
- }
- ],
- "time": "2025-12-10T09:58:31+00:00"
- },
- {
- "name": "masterminds/html5",
- "version": "2.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Masterminds/html5-php.git",
- "reference": "fcf91eb64359852f00d921887b219479b4f21251"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
- "reference": "fcf91eb64359852f00d921887b219479b4f21251",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.7-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Masterminds\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Matt Butcher",
- "email": "technosophos@gmail.com"
- },
- {
- "name": "Matt Farina",
- "email": "matt@mattfarina.com"
- },
- {
- "name": "Asmir Mustafic",
- "email": "goetas@gmail.com"
- }
- ],
- "description": "An HTML5 parser and serializer.",
- "homepage": "http://masterminds.github.io/html5-php",
- "keywords": [
- "HTML5",
- "dom",
- "html",
- "parser",
- "querypath",
- "serializer",
- "xml"
- ],
- "support": {
- "issues": "https://github.com/Masterminds/html5-php/issues",
- "source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
- },
- "time": "2025-07-25T09:04:22+00:00"
+ "time": "2026-03-11T14:10:52+00:00"
},
{
"name": "mockery/mockery",
@@ -6955,39 +7475,36 @@
},
{
"name": "nunomaduro/collision",
- "version": "v8.8.3",
+ "version": "v8.9.1",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4"
+ "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
- "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/a1ed3fa530fd60bc515f9303e8520fcb7d4bd935",
+ "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935",
"shasum": ""
},
"require": {
- "filp/whoops": "^2.18.1",
- "nunomaduro/termwind": "^2.3.1",
+ "filp/whoops": "^2.18.4",
+ "nunomaduro/termwind": "^2.4.0",
"php": "^8.2.0",
- "symfony/console": "^7.3.0"
+ "symfony/console": "^7.4.4 || ^8.0.4"
},
"conflict": {
- "laravel/framework": "<11.44.2 || >=13.0.0",
- "phpunit/phpunit": "<11.5.15 || >=13.0.0"
+ "laravel/framework": "<11.48.0 || >=14.0.0",
+ "phpunit/phpunit": "<11.5.50 || >=14.0.0"
},
"require-dev": {
- "brianium/paratest": "^7.8.3",
- "larastan/larastan": "^3.4.2",
- "laravel/framework": "^11.44.2 || ^12.18",
- "laravel/pint": "^1.22.1",
- "laravel/sail": "^1.43.1",
- "laravel/sanctum": "^4.1.1",
- "laravel/tinker": "^2.10.1",
- "orchestra/testbench-core": "^9.12.0 || ^10.4",
- "pestphp/pest": "^3.8.2 || ^4.0.0",
- "sebastian/environment": "^7.2.1 || ^8.0"
+ "brianium/paratest": "^7.8.5",
+ "larastan/larastan": "^3.9.2",
+ "laravel/framework": "^11.48.0 || ^12.52.0",
+ "laravel/pint": "^1.27.1",
+ "orchestra/testbench-core": "^9.12.0 || ^10.9.0",
+ "pestphp/pest": "^3.8.5 || ^4.4.1 || ^5.0.0",
+ "sebastian/environment": "^7.2.1 || ^8.0.3 || ^9.0.0"
},
"type": "library",
"extra": {
@@ -7050,7 +7567,7 @@
"type": "patreon"
}
],
- "time": "2025-11-20T02:55:25+00:00"
+ "time": "2026-02-17T17:33:08+00:00"
},
{
"name": "phar-io/manifest",
@@ -7519,16 +8036,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.53",
+ "version": "11.5.55",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "a997a653a82845f1240d73ee73a8a4e97e4b0607"
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a997a653a82845f1240d73ee73a8a4e97e4b0607",
- "reference": "a997a653a82845f1240d73ee73a8a4e97e4b0607",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00",
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00",
"shasum": ""
},
"require": {
@@ -7601,7 +8118,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.53"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55"
},
"funding": [
{
@@ -7625,81 +8142,7 @@
"type": "tidelift"
}
],
- "time": "2026-02-10T12:28:25+00:00"
- },
- {
- "name": "sabberworm/php-css-parser",
- "version": "v9.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
- "reference": "1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb",
- "reference": "1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb",
- "shasum": ""
- },
- "require": {
- "ext-iconv": "*",
- "php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
- "thecodingmachine/safe": "^1.3 || ^2.5 || ^3.3"
- },
- "require-dev": {
- "php-parallel-lint/php-parallel-lint": "1.4.0",
- "phpstan/extension-installer": "1.4.3",
- "phpstan/phpstan": "1.12.28 || 2.1.25",
- "phpstan/phpstan-phpunit": "1.4.2 || 2.0.7",
- "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.6",
- "phpunit/phpunit": "8.5.46",
- "rawr/phpunit-data-provider": "3.3.1",
- "rector/rector": "1.2.10 || 2.1.7",
- "rector/type-perfect": "1.0.0 || 2.1.0"
- },
- "suggest": {
- "ext-mbstring": "for parsing UTF-8 CSS"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "9.2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Sabberworm\\CSS\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Raphael Schweikert"
- },
- {
- "name": "Oliver Klee",
- "email": "github@oliverklee.de"
- },
- {
- "name": "Jake Hotson",
- "email": "jake.github@qzdesign.co.uk"
- }
- ],
- "description": "Parser for CSS Files written in PHP",
- "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
- "keywords": [
- "css",
- "parser",
- "stylesheet"
- ],
- "support": {
- "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
- "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.1.0"
- },
- "time": "2025-09-14T07:37:21+00:00"
+ "time": "2026-02-18T12:37:06+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -8687,120 +9130,6 @@
],
"time": "2024-10-09T05:16:32+00:00"
},
- {
- "name": "setasign/fpdf",
- "version": "1.8.2",
- "source": {
- "type": "git",
- "url": "https://github.com/Setasign/FPDF.git",
- "reference": "d77904018090c17dc9f3ab6e944679a7a47e710a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Setasign/FPDF/zipball/d77904018090c17dc9f3ab6e944679a7a47e710a",
- "reference": "d77904018090c17dc9f3ab6e944679a7a47e710a",
- "shasum": ""
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "fpdf.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Olivier Plathey",
- "email": "oliver@fpdf.org",
- "homepage": "http://fpdf.org/"
- }
- ],
- "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.",
- "homepage": "http://www.fpdf.org",
- "keywords": [
- "fpdf",
- "pdf"
- ],
- "support": {
- "source": "https://github.com/Setasign/FPDF/tree/1.8.2"
- },
- "time": "2019-12-08T10:32:10+00:00"
- },
- {
- "name": "setasign/fpdi",
- "version": "v2.6.4",
- "source": {
- "type": "git",
- "url": "https://github.com/Setasign/FPDI.git",
- "reference": "4b53852fde2734ec6a07e458a085db627c60eada"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada",
- "reference": "4b53852fde2734ec6a07e458a085db627c60eada",
- "shasum": ""
- },
- "require": {
- "ext-zlib": "*",
- "php": "^7.1 || ^8.0"
- },
- "conflict": {
- "setasign/tfpdf": "<1.31"
- },
- "require-dev": {
- "phpunit/phpunit": "^7",
- "setasign/fpdf": "~1.8.6",
- "setasign/tfpdf": "~1.33",
- "squizlabs/php_codesniffer": "^3.5",
- "tecnickcom/tcpdf": "^6.8"
- },
- "suggest": {
- "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "setasign\\Fpdi\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jan Slabon",
- "email": "jan.slabon@setasign.com",
- "homepage": "https://www.setasign.com"
- },
- {
- "name": "Maximilian Kresse",
- "email": "maximilian.kresse@setasign.com",
- "homepage": "https://www.setasign.com"
- }
- ],
- "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
- "homepage": "https://www.setasign.com/fpdi",
- "keywords": [
- "fpdf",
- "fpdi",
- "pdf"
- ],
- "support": {
- "issues": "https://github.com/Setasign/FPDI/issues",
- "source": "https://github.com/Setasign/FPDI/tree/v2.6.4"
- },
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi",
- "type": "tidelift"
- }
- ],
- "time": "2025-08-05T09:57:14+00:00"
- },
{
"name": "staabm/side-effects-detector",
"version": "1.0.5",
@@ -8855,16 +9184,16 @@
},
{
"name": "symfony/yaml",
- "version": "v8.0.1",
+ "version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "7a1a90ba1df6e821a6b53c4cabdc32a56cabfb14"
+ "reference": "5f006c50a981e1630bbb70ad409c5d85f9a716e0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/7a1a90ba1df6e821a6b53c4cabdc32a56cabfb14",
- "reference": "7a1a90ba1df6e821a6b53c4cabdc32a56cabfb14",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/5f006c50a981e1630bbb70ad409c5d85f9a716e0",
+ "reference": "5f006c50a981e1630bbb70ad409c5d85f9a716e0",
"shasum": ""
},
"require": {
@@ -8906,7 +9235,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v8.0.1"
+ "source": "https://github.com/symfony/yaml/tree/v8.0.6"
},
"funding": [
{
@@ -8926,146 +9255,7 @@
"type": "tidelift"
}
],
- "time": "2025-12-04T18:17:06+00:00"
- },
- {
- "name": "thecodingmachine/safe",
- "version": "v3.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/thecodingmachine/safe.git",
- "reference": "2cdd579eeaa2e78e51c7509b50cc9fb89a956236"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/2cdd579eeaa2e78e51c7509b50cc9fb89a956236",
- "reference": "2cdd579eeaa2e78e51c7509b50cc9fb89a956236",
- "shasum": ""
- },
- "require": {
- "php": "^8.1"
- },
- "require-dev": {
- "php-parallel-lint/php-parallel-lint": "^1.4",
- "phpstan/phpstan": "^2",
- "phpunit/phpunit": "^10",
- "squizlabs/php_codesniffer": "^3.2"
- },
- "type": "library",
- "autoload": {
- "files": [
- "lib/special_cases.php",
- "generated/apache.php",
- "generated/apcu.php",
- "generated/array.php",
- "generated/bzip2.php",
- "generated/calendar.php",
- "generated/classobj.php",
- "generated/com.php",
- "generated/cubrid.php",
- "generated/curl.php",
- "generated/datetime.php",
- "generated/dir.php",
- "generated/eio.php",
- "generated/errorfunc.php",
- "generated/exec.php",
- "generated/fileinfo.php",
- "generated/filesystem.php",
- "generated/filter.php",
- "generated/fpm.php",
- "generated/ftp.php",
- "generated/funchand.php",
- "generated/gettext.php",
- "generated/gmp.php",
- "generated/gnupg.php",
- "generated/hash.php",
- "generated/ibase.php",
- "generated/ibmDb2.php",
- "generated/iconv.php",
- "generated/image.php",
- "generated/imap.php",
- "generated/info.php",
- "generated/inotify.php",
- "generated/json.php",
- "generated/ldap.php",
- "generated/libxml.php",
- "generated/lzf.php",
- "generated/mailparse.php",
- "generated/mbstring.php",
- "generated/misc.php",
- "generated/mysql.php",
- "generated/mysqli.php",
- "generated/network.php",
- "generated/oci8.php",
- "generated/opcache.php",
- "generated/openssl.php",
- "generated/outcontrol.php",
- "generated/pcntl.php",
- "generated/pcre.php",
- "generated/pgsql.php",
- "generated/posix.php",
- "generated/ps.php",
- "generated/pspell.php",
- "generated/readline.php",
- "generated/rnp.php",
- "generated/rpminfo.php",
- "generated/rrd.php",
- "generated/sem.php",
- "generated/session.php",
- "generated/shmop.php",
- "generated/sockets.php",
- "generated/sodium.php",
- "generated/solr.php",
- "generated/spl.php",
- "generated/sqlsrv.php",
- "generated/ssdeep.php",
- "generated/ssh2.php",
- "generated/stream.php",
- "generated/strings.php",
- "generated/swoole.php",
- "generated/uodbc.php",
- "generated/uopz.php",
- "generated/url.php",
- "generated/var.php",
- "generated/xdiff.php",
- "generated/xml.php",
- "generated/xmlrpc.php",
- "generated/yaml.php",
- "generated/yaz.php",
- "generated/zip.php",
- "generated/zlib.php"
- ],
- "classmap": [
- "lib/DateTime.php",
- "lib/DateTimeImmutable.php",
- "lib/Exceptions/",
- "generated/Exceptions/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
- "support": {
- "issues": "https://github.com/thecodingmachine/safe/issues",
- "source": "https://github.com/thecodingmachine/safe/tree/v3.3.0"
- },
- "funding": [
- {
- "url": "https://github.com/OskarStark",
- "type": "github"
- },
- {
- "url": "https://github.com/shish",
- "type": "github"
- },
- {
- "url": "https://github.com/staabm",
- "type": "github"
- }
- ],
- "time": "2025-05-14T06:15:44+00:00"
+ "time": "2026-02-09T10:14:57+00:00"
},
{
"name": "theseer/tokenizer",
diff --git a/database/migrations/2026_01_30_140002_create_users_table.php b/database/migrations/2026_01_30_140002_create_users_table.php
index bd6afd9..5615e4e 100644
--- a/database/migrations/2026_01_30_140002_create_users_table.php
+++ b/database/migrations/2026_01_30_140002_create_users_table.php
@@ -58,6 +58,7 @@ return new class extends Migration
$table->string('medications')->nullable();
$table->string('allergies')->nullable();
$table->string('intolerances')->nullable();
+ $table->date('tetanus_vaccination')->nullable();
$table->string('eating_habits')->nullable();
$table->string('swimming_permission')->nullable();
$table->string('first_aid_permission')->nullable();
diff --git a/database/migrations/2026_02_14_140010_create_events.php b/database/migrations/2026_02_14_140010_create_events.php
index 7ae0fbe..679bb7a 100644
--- a/database/migrations/2026_02_14_140010_create_events.php
+++ b/database/migrations/2026_02_14_140010_create_events.php
@@ -26,8 +26,10 @@ return new class extends Migration {
$table->string('tenant');
$table->string('type');
$table->string('name');
- $table->string('description')->default('');
- $table->float('amount',2);
+ $table->string('description')->nullable()->default('');
+ $table->float('amount_standard',2);
+ $table->float('amount_reduced',2)->nullable();
+ $table->float('amount_solidarity', 2)->nullable();
$table->timestamps();
$table->foreign('type')->references('slug')->on('participation_types')->restrictOnDelete()->cascadeOnUpdate();
diff --git a/database/migrations/2026_02_15_140010_create_event_particpants.php b/database/migrations/2026_02_15_140010_create_event_particpants.php
index 0c3942a..a3e441e 100644
--- a/database/migrations/2026_02_15_140010_create_event_particpants.php
+++ b/database/migrations/2026_02_15_140010_create_event_particpants.php
@@ -22,8 +22,7 @@ return new class extends Migration {
$table->foreignId('event_id')->constrained('events', 'id')->cascadeOnDelete()->cascadeOnUpdate();
$table->foreignId('user_id')->nullable()->constrained('users', 'id')->cascadeOnDelete()->cascadeOnUpdate();
-
-
+ $table->string('identifier');
$table->string('firstname');
$table->string('lastname');
$table->string('nickname')->nullable();
@@ -41,7 +40,9 @@ return new class extends Migration {
$table->string('contact_person')->nullable();
$table->string('allergies')->nullable();
$table->string('intolerances')->nullable();
- $table->string('eating_habits')->nullable();
+ $table->string('medications')->nullable();
+ $table->date('tetanus_vaccination')->nullable();
+ $table->string('eating_habit')->nullable();
$table->string('swimming_permission')->nullable();
$table->string('first_aid_permission')->nullable();
$table->boolean('foto_socialmedia')->default(false);
@@ -56,6 +57,7 @@ return new class extends Migration {
$table->longText('notes')->nullable();
$table->float('amount', 2);
$table->float('amount_paid',0)->default(0);
+ $table->string('payment_purpose');
$table->string('efz_status');
$table->timestamps();
$table->dateTime('unregistered_at')->nullable();
diff --git a/docker/Dockerfile b/docker/Dockerfile
index a360a7e..8ce4ac6 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -19,12 +19,16 @@ RUN apt-get install -y nginx \
libzip-dev \
libpng-dev \
libonig-dev \
- libxml2-dev
+ libxml2-dev \
+ libmagickwand-dev \
+ imagemagick \
+ && pecl install imagick \
+ && docker-php-ext-enable imagick
#&& rm -rf /var/lib/apt/lists/* \
RUN mkdir -p /run/nginx
-RUN docker-php-ext-install mysqli pdo pdo_mysql mbstring zip exif pcntl
+RUN docker-php-ext-install mysqli pdo pdo_mysql mbstring zip exif pcntl gd
RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y nodejs
diff --git a/justfile b/justfile
new file mode 100644
index 0000000..0f4c0b1
--- /dev/null
+++ b/justfile
@@ -0,0 +1,5 @@
+artisan *args:
+ docker exec -it mareike-mareike-app-1 php artisan {{args}}
+
+composer *args:
+ docker exec -it mareike-mareike-app-1 composer {{args}}
diff --git a/legacy/after-submit/alreadyexist.jsx b/legacy/after-submit/alreadyexist.jsx
new file mode 100644
index 0000000..f7e90ed
--- /dev/null
+++ b/legacy/after-submit/alreadyexist.jsx
@@ -0,0 +1,14 @@
+import React from 'react';
+
+function AlreadyExistsContainer({ labels, participant_data }) {
+ return (
+ Zusammenfassung+ +Wird geladen…
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + {participant_data.nicename}+ {participant_data.text_1}+ {participant_data.text_2} + {participant_data.email_text} ( {participant_data.email_text} ) + + ); +} + +export default AlreadyExistsContainer; \ No newline at end of file diff --git a/legacy/after-submit/success.jsx b/legacy/after-submit/success.jsx new file mode 100644 index 0000000..478f0ed --- /dev/null +++ b/legacy/after-submit/success.jsx @@ -0,0 +1,87 @@ +import React from 'react'; +import {__} from '../../../../assets/javascripts/library.js'; + +function EfzStatusMessage({ efzStatus }) { + if (efzStatus === 'NOT_CHECKED') { + return + Dein erweitertes Führungszeugnis konnte nicht automatisch überprüft werden. Bitte kontaktiere die Aktionsleitung, da deine Teilnahme nur mit gültigem eFZ möglich ist. + ; + } + + if (efzStatus === 'CHECKED_INVALID') { + return+ Du hast noch kein erweitertes Führungszeugnis bereitgestellt, sodass deine Teilnahme nicht möglich ist. Bitte reiche dein erweitertes Führungszeugnis umgehend ein, + da deine Teilnahme andernfalls storniert werden kann. Bitte setze dich mit der Aktionsleitung in Verbindung. + ; + } + + return null; // default: nix anzeigen +} + +function SuccessContainer({ participant_data }) { + return ( ++ {__('Hello', 'solea')} {participant_data.nicename}+
+ {participant_data.introduction}
+
+ {__( 'If payment is not possible or only partially possible within this period, please contact the event management.', 'solea' )} + + + ) : ( +
+ {__('You do not have to pay the registration fee. This is the case if participation is supported, billing is done through your local group, or there are other decisions.', 'solea')}
+ {__('You will receive an email with further information within 2 hours. If you do not receive this mail or have any questions about your registration, please contact the event management.', 'solea')}
+ {event_data.registration_mode === 'solidarity' && (
+ + {labels.addons.addons.available_addons}+
+
+ );
+}
+
+
+export default AgeContainer;
\ No newline at end of file
diff --git a/legacy/partials/allergies.jsx b/legacy/partials/allergies.jsx
new file mode 100644
index 0000000..bed72ac
--- /dev/null
+++ b/legacy/partials/allergies.jsx
@@ -0,0 +1,60 @@
+import React from 'react';
+import { ContactDataValidator } from '../../../../assets/javascripts/registration-validator.js'
+
+
+function AllergiesContainer({ onStepClick, labels, event_data, participant_data }) {
+ const handle_next_step = () => {
+ onStepClick(9);
+ }
+
+ return (
+ onStepClick(2)} className="solea_age_selector">
+
+
+
+
+
+ {labels.age.headline_children}+ {labels.age.text_children} +
+ onStepClick(3)} className="solea_age_selector">
+
+
+
+
+ {labels.age.headline_adults}+ {labels.age.text_adults} +
+
+
+ );
+}
+
+export default PhotopermissionsContainer;
\ No newline at end of file
diff --git a/legacy/partials/registration-groupbased.jsx b/legacy/partials/registration-groupbased.jsx
new file mode 100644
index 0000000..5fb9bb4
--- /dev/null
+++ b/legacy/partials/registration-groupbased.jsx
@@ -0,0 +1,51 @@
+import React from 'react';
+import { ContactDataValidator } from '../../../../assets/javascripts/registration-validator.js'
+
+
+function GroupBasedRegistrationContainer({ onStepClick, labels, participant_data, local_groups, event_data }) {
+ const handle_next_step = () => {
+ onStepClick(5);
+ }
+
+ return (
+
+
+ {labels.photopermissions.headline}+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default ParticipantSignup;
\ No newline at end of file
diff --git a/public/css/app.css b/public/css/app.css
index b642dd1..fbc9c61 100644
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -3,8 +3,24 @@
@source '../**/*.blade.php';
@source '../**/*.js';
+@font-face {
+ font-family: Aleo;
+ src: url('../fonts/aleo-regular.ttf');
+}
+
+@font-face {
+ font-family: Immenhausen;
+ src: url('../fonts/immenhausen.ttf');
+}
+
html {
background-color: #FAFAFB !important;
+ font-family: Aleo;
+
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-family: Immenhausen;
}
.content {
diff --git a/public/fonts/aleo-regular.ttf b/public/fonts/aleo-regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..e3c12b9b22d158000678bee5068ad3237bf775fe
GIT binary patch
literal 74244
zcmb?@d0
+
+
+ !XRH7F}4gS83+Ek$*K&qsu1lkO4Tp}+Wz5Q z1C024EqIcc(qIKoCZOFXt(Xntho{fbI | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||