From f884452e68a3a30a0be9de64c5a560c0ea05a28e Mon Sep 17 00:00:00 2001 From: Ben Jones Date: Mon, 6 Oct 2025 23:27:47 +0100 Subject: [PATCH 1/9] build: increase memory limit to 1GB --- chart/prod-values.yaml | 3 --- chart/staging-values.yaml | 3 --- chart/templates/deployment.yaml | 4 ++-- chart/values.yaml | 3 --- 4 files changed, 2 insertions(+), 11 deletions(-) diff --git a/chart/prod-values.yaml b/chart/prod-values.yaml index b84dec58..231994a9 100644 --- a/chart/prod-values.yaml +++ b/chart/prod-values.yaml @@ -13,6 +13,3 @@ logging: driver: stack google-analytics-code: UA-150311689-2 - -resources: - memory: '256Mi' diff --git a/chart/staging-values.yaml b/chart/staging-values.yaml index 0c18bd8c..3e43838b 100644 --- a/chart/staging-values.yaml +++ b/chart/staging-values.yaml @@ -9,6 +9,3 @@ smtp: auth: false google-analytics-code: UA-150311689-1 - -resources: - memory: '256Mi' diff --git a/chart/templates/deployment.yaml b/chart/templates/deployment.yaml index 6864ef68..35b19f27 100644 --- a/chart/templates/deployment.yaml +++ b/chart/templates/deployment.yaml @@ -36,9 +36,9 @@ spec: mountPath: /var/www/resources/breakages resources: requests: - memory: '{{ .Values.resources.memory }}' + memory: '256Mi' limits: - memory: '{{ .Values.resources.memory }}' + memory: '1Gi' # volumes need to be declared using a PVC and PV in the storage.yaml file volumes: - name: backups diff --git a/chart/values.yaml b/chart/values.yaml index 0e0bd772..b932638e 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -14,6 +14,3 @@ logging: driver: monolog google-analytics-code: '' - -resources: - memory: '' From dabb2a02bdbf812ce5861bac4e806ef1530a5de4 Mon Sep 17 00:00:00 2001 From: Ben Jones Date: Tue, 7 Oct 2025 23:18:41 +0100 Subject: [PATCH 2/9] fix: store sessions in the database (#79) --- .env.example | 2 +- chart/templates/configmap.yaml | 2 +- config/session.php | 4 +-- ...025_10_07_214638_create_sessions_table.php | 30 ++++++++++++++++ .../Notifications/NotificationHandler.php | 35 +++++-------------- 5 files changed, 42 insertions(+), 31 deletions(-) create mode 100644 database/migrations/2025_10_07_214638_create_sessions_table.php diff --git a/.env.example b/.env.example index 633847b5..6a11ba92 100755 --- a/.env.example +++ b/.env.example @@ -14,7 +14,7 @@ DB_PASSWORD=developer BROADCAST_DRIVER=log CACHE_DRIVER=file -SESSION_DRIVER=file +SESSION_DRIVER=database QUEUE_DRIVER=sync MAIL_DRIVER=smtp diff --git a/chart/templates/configmap.yaml b/chart/templates/configmap.yaml index c6c3c974..4a5dcc2a 100644 --- a/chart/templates/configmap.yaml +++ b/chart/templates/configmap.yaml @@ -15,7 +15,7 @@ data: DB_DATABASE: 'website_v4_{{ .Values.environment }}' BROADCAST_DRIVER: 'log' CACHE_DRIVER: 'file' - SESSION_DRIVER: 'file' + SESSION_DRIVER: 'database' QUEUE_DRIVER: 'database' MAIL_DRIVER: 'smtp' MAIL_HOST: '{{ .Values.smtp.host }}' diff --git a/config/session.php b/config/session.php index 03aff200..6de4a838 100755 --- a/config/session.php +++ b/config/session.php @@ -15,7 +15,7 @@ | */ - 'driver' => env('SESSION_DRIVER', 'file'), + 'driver' => env('SESSION_DRIVER', 'database'), /* |-------------------------------------------------------------------------- @@ -69,7 +69,7 @@ | */ - 'connection' => null, + 'connection' => env('DB_CONNECTION', 'mysql'), /* |-------------------------------------------------------------------------- diff --git a/database/migrations/2025_10_07_214638_create_sessions_table.php b/database/migrations/2025_10_07_214638_create_sessions_table.php new file mode 100644 index 00000000..f2251eef --- /dev/null +++ b/database/migrations/2025_10_07_214638_create_sessions_table.php @@ -0,0 +1,30 @@ +string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sessions'); + } +}; diff --git a/packages/Notifications/NotificationHandler.php b/packages/Notifications/NotificationHandler.php index e831df3f..924eef6e 100644 --- a/packages/Notifications/NotificationHandler.php +++ b/packages/Notifications/NotificationHandler.php @@ -2,17 +2,8 @@ namespace Package\Notifications; -use Illuminate\Session\Store; - class NotificationHandler { - /** - * Store the session object. - * - * @var Store - */ - private $session; - /** * Store the array of notifications. * @@ -20,16 +11,6 @@ class NotificationHandler */ private $notifications = []; - /** - * Notifications constructor. - * - * @param Store $session - */ - public function __construct(Store $session) - { - $this->session = $session; - } - /** * Output the configuration for the JS to be able to use. * @@ -143,7 +124,7 @@ public function error($message, $title = null, $bag = null) */ public function sync() { - $session = $this->session->pull('notifications') ?: []; + $session = session()->pull('notifications') ?: []; $synced = []; // Update the notifications that already exist in the session @@ -161,7 +142,7 @@ public function sync() $session[] = $this->notifications[$index]; } - $this->session->flash('notifications', $session); + session()->flash('notifications', $session); } /** @@ -173,8 +154,8 @@ public function sync() */ public function get($bag = 'default') { - if ($this->session->has('notifications')) { - $session = $this->session->get('notifications'); + if (session()->has('notifications')) { + $session = session()->get('notifications'); $notifications = []; foreach ($session as $index => $notification) { if ($notification->bag() == $bag) { @@ -183,7 +164,7 @@ public function get($bag = 'default') } } - $this->session->put('notifications', $session); + session()->put('notifications', $session); return array_map(function ($notification) { return $notification->toArray(); @@ -221,7 +202,7 @@ public function all() */ public function has($bag = null) { - return $bag === null ? $this->session->has('notifications') : in_array($bag, $this->bags()); + return $bag === null ? session()->has('notifications') : in_array($bag, $this->bags()); } /** @@ -234,10 +215,10 @@ public function bags() $bags = array_unique( array_map(function ($notification) { return $notification->bag(); - }, $this->session->get('notifications')), + }, session()->get('notifications')), ); - return $this->session->has('notifications') ? $bags : []; + return session()->has('notifications') ? $bags : []; } /** From cd5c630e5b18c9fa981626e5b285ba61988d010c Mon Sep 17 00:00:00 2001 From: Ben Jones Date: Sat, 18 Oct 2025 19:02:58 +0100 Subject: [PATCH 3/9] build(chart): fix smtp port for maildev container --- chart/staging-values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/staging-values.yaml b/chart/staging-values.yaml index 3e43838b..c823fc2f 100644 --- a/chart/staging-values.yaml +++ b/chart/staging-values.yaml @@ -4,7 +4,7 @@ domains: smtp: host: maildev - port: 25 + port: 1025 encryption: none auth: false From ee6d1d16a68b07a4776d52934084a106eb84c9b8 Mon Sep 17 00:00:00 2001 From: Ben754444 Date: Sun, 2 Nov 2025 22:05:29 +0000 Subject: [PATCH 4/9] feat: change recipients Signed-off-by: Ben754444 --- config/bts.php | 3 +-- resources/views/contact/accident.blade.php | 2 +- resources/views/contact/near-miss.blade.php | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/config/bts.php b/config/bts.php index 2dc4adb8..66f46d8b 100755 --- a/config/bts.php +++ b/config/bts.php @@ -54,13 +54,12 @@ 'safety' => [ 'accident_reports' => [ - 'committee@bts-crew.com', 'safety@bts-crew.com', 'P.Hawker@bath.ac.uk', 'su-healthandsafety@bath.ac.uk', ], 'accident_receipt' => ['safety@bts-crew.com'], - 'near_miss_reports' => ['committee@bts-crew.com', 'safety@bts-crew.com', 'su-healthandsafety@bath.ac.uk'], + 'near_miss_reports' => ['safety@bts-crew.com', 'su-healthandsafety@bath.ac.uk'], ], 'training' => [ diff --git a/resources/views/contact/accident.blade.php b/resources/views/contact/accident.blade.php index 075653f2..d0df2d6c 100755 --- a/resources/views/contact/accident.blade.php +++ b/resources/views/contact/accident.blade.php @@ -7,7 +7,7 @@ @section('content')

Use this form to report an accident that occurred during a Backstage-supported event or activity. Please note that this form is automatically sent to the - Students' Union as well as Backstage.

+ Chair, Training & Safety and the Students' Union. It may be shared with other committee members as necessary.

{!! Form::open() !!}
diff --git a/resources/views/contact/near-miss.blade.php b/resources/views/contact/near-miss.blade.php index d77e606a..ad469919 100644 --- a/resources/views/contact/near-miss.blade.php +++ b/resources/views/contact/near-miss.blade.php @@ -8,8 +8,8 @@ @section('content')

Use this form to report an incident that occurred during a Backstage-supported event or activity which could have led to an injury. If an injury did occur, please use the {!! link_to_route('contact.accident', 'accident reporting form') !!} instead.

-

This email is sent to the Committee and SU H&S inbox, and is only used to help improve the safety of the society and its - members.

+

This email is sent to the Chair, Training & Safety and the Students' Union. It will only be used to help improve the safety of the society and its + members. Your report may be shared with other committee members as necessary.

{!! Form::open() !!}
Incident Details From 4e03c6e4c34e3fe5a01401f4db7b310fcf1774ab Mon Sep 17 00:00:00 2001 From: Ben754444 Date: Sun, 9 Nov 2025 17:29:56 +0000 Subject: [PATCH 5/9] fix: add chair Signed-off-by: Ben754444 --- config/bts.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/bts.php b/config/bts.php index 66f46d8b..1691dd00 100755 --- a/config/bts.php +++ b/config/bts.php @@ -54,12 +54,13 @@ 'safety' => [ 'accident_reports' => [ + 'chair@bts-crew.com', 'safety@bts-crew.com', 'P.Hawker@bath.ac.uk', 'su-healthandsafety@bath.ac.uk', ], 'accident_receipt' => ['safety@bts-crew.com'], - 'near_miss_reports' => ['safety@bts-crew.com', 'su-healthandsafety@bath.ac.uk'], + 'near_miss_reports' => ['chair@bts-crew.com', 'safety@bts-crew.com', 'su-healthandsafety@bath.ac.uk'], ], 'training' => [ From 6714563372608215465043b7ad5a9636795c3360 Mon Sep 17 00:00:00 2001 From: Ben Jones Date: Wed, 12 Nov 2025 22:56:57 +0000 Subject: [PATCH 6/9] feat: move static pages to laravel module (#80) --- app/Http/Controllers/PageController.php | 142 -------- app/Http/Requests/PageRequest.php | 81 ----- app/Models/Page.php | 73 ----- app/Observers/PageObserver.php | 24 -- app/Policies/PagePolicy.php | 80 ----- app/Providers/AuthServiceProvider.php | 3 - app/Providers/ObserverServiceProvider.php | 3 - app/View/Composers/MainMenuComposer.php | 7 +- composer.json | 11 +- composer.lock | 147 ++++++++- config/modules.php | 309 ++++++++++++++++++ ...2025_11_12_224500_move_pages_to_module.php | 35 ++ .../Http/Controllers/StaticPageController.php | 35 ++ .../app/Providers/EventServiceProvider.php | 27 ++ .../app/Providers/RouteServiceProvider.php | 53 +++ .../Providers/StaticPageServiceProvider.php | 157 +++++++++ modules/StaticPage/composer.json | 22 ++ modules/StaticPage/config/config.php | 5 + modules/StaticPage/module.json | 9 + modules/StaticPage/package.json | 15 + .../resources/views/about.blade.php | 47 +++ .../StaticPage/resources/views/faq.blade.php | 61 ++++ .../resources/views/landing.blade.php | 26 ++ .../resources/views/links.blade.php | 69 ++++ .../resources/views/privacy-policy.blade.php | 120 +++++++ modules/StaticPage/routes/api.php | 1 + modules/StaticPage/routes/web.php | 10 + .../tests/Feature/StaticPageTest.php | 45 +++ modules/StaticPage/tests/Unit/.gitkeep | 0 modules/StaticPage/vite.config.js | 21 ++ modules_statuses.json | 3 + phpunit.xml | 10 + resources/assets/sass/partials/_pages.scss | 30 -- resources/assets/sass/partials/partials.scss | 4 - resources/views/app/includes/footer.blade.php | 6 +- resources/views/home.blade.php | 15 - resources/views/pages/create.blade.php | 23 -- resources/views/pages/edit.blade.php | 23 -- resources/views/pages/form.blade.php | 37 --- resources/views/pages/index.blade.php | 72 ---- resources/views/pages/view.blade.php | 10 - routes/web.php | 8 - routes/web/page.php | 46 --- tests/Feature/.gitkeep | 0 tests/Feature/PagesTest.php | 29 -- 45 files changed, 1242 insertions(+), 712 deletions(-) delete mode 100755 app/Http/Controllers/PageController.php delete mode 100755 app/Http/Requests/PageRequest.php delete mode 100755 app/Models/Page.php delete mode 100755 app/Observers/PageObserver.php delete mode 100755 app/Policies/PagePolicy.php create mode 100644 config/modules.php create mode 100644 database/migrations/2025_11_12_224500_move_pages_to_module.php create mode 100644 modules/StaticPage/app/Http/Controllers/StaticPageController.php create mode 100644 modules/StaticPage/app/Providers/EventServiceProvider.php create mode 100644 modules/StaticPage/app/Providers/RouteServiceProvider.php create mode 100644 modules/StaticPage/app/Providers/StaticPageServiceProvider.php create mode 100644 modules/StaticPage/composer.json create mode 100644 modules/StaticPage/config/config.php create mode 100644 modules/StaticPage/module.json create mode 100644 modules/StaticPage/package.json create mode 100644 modules/StaticPage/resources/views/about.blade.php create mode 100644 modules/StaticPage/resources/views/faq.blade.php create mode 100644 modules/StaticPage/resources/views/landing.blade.php create mode 100644 modules/StaticPage/resources/views/links.blade.php create mode 100644 modules/StaticPage/resources/views/privacy-policy.blade.php create mode 100644 modules/StaticPage/routes/api.php create mode 100644 modules/StaticPage/routes/web.php create mode 100644 modules/StaticPage/tests/Feature/StaticPageTest.php create mode 100644 modules/StaticPage/tests/Unit/.gitkeep create mode 100644 modules/StaticPage/vite.config.js create mode 100644 modules_statuses.json delete mode 100755 resources/assets/sass/partials/_pages.scss delete mode 100755 resources/views/home.blade.php delete mode 100755 resources/views/pages/create.blade.php delete mode 100755 resources/views/pages/edit.blade.php delete mode 100755 resources/views/pages/form.blade.php delete mode 100755 resources/views/pages/index.blade.php delete mode 100755 resources/views/pages/view.blade.php delete mode 100755 routes/web/page.php create mode 100644 tests/Feature/.gitkeep delete mode 100644 tests/Feature/PagesTest.php diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php deleted file mode 100755 index 015b10fd..00000000 --- a/app/Http/Controllers/PageController.php +++ /dev/null @@ -1,142 +0,0 @@ -middleware('auth')->except('show'); - } - - /** - * Display a listing of the resource. - * - * @return \Illuminate\Http\Response - */ - public function index() - { - $this->authorize('index', Page::class); - - $pages = Page::orderBy('title')->paginate(15); - $this->checkPage($pages); - - return view('pages.index')->with('pages', $pages); - } - - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() - { - $this->authorize('create', Page::class); - - $page = new Page([ - 'user_id' => Auth::user()->id, - 'published' => 1, - ]); - - return view('pages.create')->with('page', $page); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\PageRequest $request - * - * @return \Illuminate\Http\Response - */ - public function store(PageRequest $request) - { - $page = Page::create(clean($request->only('title', 'slug', 'content', 'published', 'user_id'))); - Notify::success('Page created'); - - return redirect()->route('page.show', ['slug' => $page->slug]); - } - - /** - * Display the specified resource. - * - * @param $slug - * - * @return \Illuminate\Http\Response - */ - public function show($slug) - { - $page = Page::findBySlugOrFail($slug); - - // Check if the page is published. This is a bit of a - // hack as authorisation doesn't support guest users. - if (!$page->published) { - if (Auth::check() && Auth::user()->isAdmin()) { - Notify::warning( - 'This page will not be viewable by non-admins until it is published.', - 'Page not published', - ); - } elseif (!Auth::check()) { - return redirect()->guest('login'); - } else { - app()->abort(404); - } - } - - return view('pages.view')->with('page', $page); - } - - /** - * Show the form for editing the specified resource. - * - * @param $slug - * - * @return \Illuminate\Http\Response - */ - public function edit($slug) - { - $page = Page::findBySlugOrFail($slug); - $this->authorize('update', $page); - - return view('pages.edit')->with('page', $page); - } - - /* - * Update the specified resource in storage. - * @param \Illuminate\Http\Request $request - * @param $slug - * @return \Illuminate\Http\Response - */ - public function update(PageRequest $request, $slug) - { - $page = Page::findBySlugOrFail($slug); - - $page->update(clean($request->only('title', 'slug', 'content', 'published', 'user_id'))); - Notify::success('Page updated'); - return redirect()->route('page.index'); - } - - /** - * Remove the specified resource from storage. - * - * @param $slug - * - * @return \Illuminate\Http\Response - */ - public function destroy($slug) - { - $page = Page::findBySlugOrFail($slug); - $this->authorize('delete', $page); - - $page->delete(); - Notify::success('Page deleted'); - return redirect()->route('page.index'); - } -} diff --git a/app/Http/Requests/PageRequest.php b/app/Http/Requests/PageRequest.php deleted file mode 100755 index 21698b17..00000000 --- a/app/Http/Requests/PageRequest.php +++ /dev/null @@ -1,81 +0,0 @@ -route == 'page.store') { - return $this->user()->can('create', Page::class); - } elseif ($this->route == 'page.update') { - $page = Page::findBySlug($this->route('slug')); - - return $this->user()->can('update', $page); - } else { - return false; - } - } - - /** - * Override the default validationData method to automatically create the slug if needed. - * - * @return array - */ - public function validationData() - { - $slug = $this->has('slug') ? $this->get('slug') : Str::slug($this->get('title')); - $this->merge([ - 'slug' => $slug, - ]); - - return $this->all(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - $route = $this->route()->getName(); - $slug_rule = $route == 'page.update' ? 'unique:pages,slug,' . $this->get('slug') . ',slug' : 'unique:pages'; - - return [ - 'title' => 'required', - 'slug' => 'required|' . $slug_rule . '|alpha_dash', - 'content' => 'required', - 'published' => 'required|boolean', - 'user_id' => 'required|exists:users,id', - ]; - } - - /** - * Define the custom error messages. - * - * @return array - */ - public function messages() - { - return [ - 'title.required' => 'Please enter the page\'s title', - 'slug.required' => 'Please enter the page\'s slug', - 'slug.unique' => 'That slug is already used by another page', - 'slug.alpha_dash' => 'Please use letters, numbers and dashes only for the slug', - 'content.required' => 'Please enter the page\'s content', - 'published.required' => 'Please select the page\'s published state', - 'published.boolean' => 'Please select \'Yes\' or \'No\'', - 'user_id.required' => 'Please select the page\'s author', - 'user_id.exists' => 'Please select the page\'s author', - ]; - } -} diff --git a/app/Models/Page.php b/app/Models/Page.php deleted file mode 100755 index b50c0f79..00000000 --- a/app/Models/Page.php +++ /dev/null @@ -1,73 +0,0 @@ - $slug]) - ->get() - ->first(); - } - - /** - * Method automatically throw a 404 if the page isn't found, or isn't published. - * - * @param $slug - * - * @return \App\Page - */ - public static function findBySlugOrFail($slug) - { - if (!($page = static::findBySlug($slug))) { - throw new NotFoundHttpException(); - } - - return $page; - } - - /** - * Create the foreign key link. - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function author() - { - return $this->belongsTo('App\Models\Users\User', 'user_id'); - } - - /** - * The scope that allows filtering pages by whether they're published or not. - * - * @param $query - */ - public function scopePublished($query) - { - $query->where('published', 1); - } -} diff --git a/app/Observers/PageObserver.php b/app/Observers/PageObserver.php deleted file mode 100755 index 3c885797..00000000 --- a/app/Observers/PageObserver.php +++ /dev/null @@ -1,24 +0,0 @@ -getCreatedAttributes($page)); - } - - public function updated(Page $page) - { - Logger::log('page.edit', true, $this->getUpdatedAttributes($page)); - } - - public function deleted(Page $page) - { - Logger::log('page.delete', true, $this->getDeletedAttributes($page)); - } -} diff --git a/app/Policies/PagePolicy.php b/app/Policies/PagePolicy.php deleted file mode 100755 index e57c74c3..00000000 --- a/app/Policies/PagePolicy.php +++ /dev/null @@ -1,80 +0,0 @@ -isAdmin(); - } - - /** - * Determine whether the user can view the page. - * - * @param \App\Models\Users\User $user - * @param \App\Models\Page $page - * - * @return mixed - */ - public function view(User $user, Page $page) - { - if ($page->published == 1) { - return true; - } elseif ($user->isAdmin()) { - Notify::warning( - 'This page will not be viewable by non-admins until it is published.', - 'Page not published', - ); - return true; - } - - return false; - } - - /** - * Determine whether the user can create pages. - * @param \App\Models\Users\User $user - * @return mixed - */ - public function create(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine whether the user can update the page. - * @param \App\Models\Users\User $user - * @param \App\Models\Page $page - * @return mixed - */ - public function update(User $user, Page $page) - { - return $user->isAdmin(); - } - - /** - * Determine whether the user can delete the page. - * @param \App\Models\Users\User $user - * @param \App\Models\Page $page - * @return mixed - */ - public function delete(User $user, Page $page) - { - return $user->isAdmin(); - } -} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index d78001f7..48c0fc51 100755 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -13,7 +13,6 @@ use App\Models\Events\Crew as EventCrew; use App\Models\Events\Event; use App\Models\Events\Time as EventTime; -use App\Models\Page; use App\Models\Quote; use App\Models\Resources\Category as ResourceCategory; use App\Models\Resources\Resource; @@ -33,7 +32,6 @@ use App\Policies\Events\EventPolicy; use App\Policies\Events\EventTimePolicy; use App\Policies\Members\UserPolicy; -use App\Policies\PagePolicy; use App\Policies\QuotePolicy; use App\Policies\Resources\CategoryPolicy as ResourceCategoryPolicy; use App\Policies\Resources\ResourcePolicy; @@ -63,7 +61,6 @@ class AuthServiceProvider extends ServiceProvider Event::class => EventPolicy::class, EventCrew::class => EventCrewPolicy::class, EventTime::class => EventTimePolicy::class, - Page::class => PagePolicy::class, Application::class => ApplicationPolicy::class, Quote::class => QuotePolicy::class, Resource::class => ResourcePolicy::class, diff --git a/app/Providers/ObserverServiceProvider.php b/app/Providers/ObserverServiceProvider.php index 3fd262d0..4b43143c 100755 --- a/app/Providers/ObserverServiceProvider.php +++ b/app/Providers/ObserverServiceProvider.php @@ -14,7 +14,6 @@ use App\Models\Events\Email; use App\Models\Events\Event; use App\Models\Events\Time; -use App\Models\Page; use App\Models\Quote; use App\Models\Resources\Category; use App\Models\Resources\Issue; @@ -38,7 +37,6 @@ use App\Observers\Events\EmailObserver; use App\Observers\Events\EventObserver; use App\Observers\Events\TimeObserver; -use App\Observers\PageObserver; use App\Observers\QuoteObserver; use App\Observers\Resources\CategoryObserver; use App\Observers\Resources\IssueObserver; @@ -70,7 +68,6 @@ public function boot() $this->observeTraining(); $this->observeUsers(); - Page::observe(PageObserver::class); Quote::observe(QuoteObserver::class); } diff --git a/app/View/Composers/MainMenuComposer.php b/app/View/Composers/MainMenuComposer.php index f382d51b..a3fe847a 100644 --- a/app/View/Composers/MainMenuComposer.php +++ b/app/View/Composers/MainMenuComposer.php @@ -47,7 +47,7 @@ public function compose(View $view) { $mainMenu = $this->menu->make('mainMenu', function (Builder $menu) { $menu->add('Home', route('home')); - $menu->add('About Us', route('page.show', ['slug' => 'about'])); + $menu->add('About Us', route('page.about')); $this->addMediaMenu($menu); $menu->add('The Committee', route('committee.view')); $this->addEventsMenu($menu); @@ -151,7 +151,6 @@ private function addMembersMenu(Builder $menu) } if ($this->isAdmin) { $miscMenu->add('Backups', route('backup.index')); - $miscMenu->add('Webpages', route('page.index')); } // H&S reporting @@ -180,7 +179,7 @@ private function addResourcesMenu(Builder $menu) $resourcesMenu->add('Meeting Agendas', route('resource.search', ['category' => 'meeting-agendas'])); } - $resourcesMenu->add('Links', route('page.show', ['slug' => 'links'])); - $resourcesMenu->add('FAQ', route('page.show', ['slug' => 'faq'])); + $resourcesMenu->add('Links', route('page.links')); + $resourcesMenu->add('FAQ', route('page.faq')); } } diff --git a/composer.json b/composer.json index dc316b1a..65072c5a 100755 --- a/composer.json +++ b/composer.json @@ -26,6 +26,7 @@ "mews/purifier": "^3.0", "moment/moment": "^2.17", "nunomaduro/collision": "^8.1", + "nwidart/laravel-modules": "^12.0", "select2/select2": "^4.0", "spatie/laravel-backup": "^9.1", "spatie/laravel-db-snapshots": "^2.6", @@ -56,6 +57,13 @@ "Tests\\": "tests/" } }, + "extra": { + "merge-plugin": { + "include": [ + "modules/*/composer.json" + ] + } + }, "scripts": { "post-root-package-install": [ "php -r \"file_exists('.env') || copy('.env.example', '.env');\"" @@ -86,7 +94,8 @@ "composer/installers": true, "oomphinc/composer-installers-extender": true, "pestphp/pest-plugin": true, - "robloach/component-installer": true + "robloach/component-installer": true, + "wikimedia/composer-merge-plugin": true } }, "repositories": [] diff --git a/composer.lock b/composer.lock index e371b8d7..af0c854d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bc7f43c3a9e2d49d6b1622ec91709103", + "content-hash": "9cbc76c0df809a797a628c042445c2a9", "packages": [ { "name": "alaouy/youtube", @@ -4326,6 +4326,95 @@ ], "time": "2025-05-08T08:14:37+00:00" }, + { + "name": "nwidart/laravel-modules", + "version": "v12.0.4", + "source": { + "type": "git", + "url": "https://github.com/nWidart/laravel-modules.git", + "reference": "6e1f50de63366206b06ec53bbc823282977ddd06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nWidart/laravel-modules/zipball/6e1f50de63366206b06ec53bbc823282977ddd06", + "reference": "6e1f50de63366206b06ec53bbc823282977ddd06", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-simplexml": "*", + "php": ">=8.2", + "wikimedia/composer-merge-plugin": "^2.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v3.52", + "laravel/framework": "^v12.0", + "laravel/pint": "^1.16", + "mockery/mockery": "^1.6", + "orchestra/testbench": "^v10.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^11.5.3|^12.0.", + "spatie/phpunit-snapshot-assertions": "^5.0" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Module": "Nwidart\\Modules\\Facades\\Module" + }, + "providers": [ + "Nwidart\\Modules\\LaravelModulesServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "12.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Nwidart\\Modules\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Widart", + "email": "n.widart@gmail.com", + "homepage": "https://nicolaswidart.com", + "role": "Developer" + } + ], + "description": "Laravel Module management", + "keywords": [ + "laravel", + "module", + "modules", + "nwidart", + "rad" + ], + "support": { + "issues": "https://github.com/nWidart/laravel-modules/issues", + "source": "https://github.com/nWidart/laravel-modules/tree/v12.0.4" + }, + "funding": [ + { + "url": "https://github.com/dcblogdev", + "type": "github" + }, + { + "url": "https://github.com/nwidart", + "type": "github" + } + ], + "time": "2025-06-29T09:23:53+00:00" + }, { "name": "oomphinc/composer-installers-extender", "version": "2.0.1", @@ -8744,6 +8833,62 @@ "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "wikimedia/composer-merge-plugin", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/composer-merge-plugin.git", + "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/a03d426c8e9fb2c9c569d9deeb31a083292788bc", + "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1||^2.0", + "php": ">=7.2.0" + }, + "require-dev": { + "composer/composer": "^1.1||^2.0", + "ext-json": "*", + "mediawiki/mediawiki-phan-config": "0.11.1", + "php-parallel-lint/php-parallel-lint": "~1.3.1", + "phpspec/prophecy": "~1.15.0", + "phpunit/phpunit": "^8.5||^9.0", + "squizlabs/php_codesniffer": "~3.7.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin", + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Wikimedia\\Composer\\Merge\\V2\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bryan Davis", + "email": "bd808@wikimedia.org" + } + ], + "description": "Composer plugin to merge multiple composer.json files", + "support": { + "issues": "https://github.com/wikimedia/composer-merge-plugin/issues", + "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.1.0" + }, + "time": "2023-04-15T19:07:00+00:00" } ], "packages-dev": [ diff --git a/config/modules.php b/config/modules.php new file mode 100644 index 00000000..9dead139 --- /dev/null +++ b/config/modules.php @@ -0,0 +1,309 @@ + 'Modules', + + /* + |-------------------------------------------------------------------------- + | Module Stubs + |-------------------------------------------------------------------------- + | + | Default module stubs. + | + */ + 'stubs' => [ + 'enabled' => false, + 'path' => base_path('vendor/nwidart/laravel-modules/src/Commands/stubs'), + 'files' => [ + 'routes/web' => 'routes/web.php', + 'routes/api' => 'routes/api.php', + 'views/index' => 'resources/views/index.blade.php', + 'views/master' => 'resources/views/components/layouts/master.blade.php', + 'scaffold/config' => 'config/config.php', + 'composer' => 'composer.json', + 'assets/js/app' => 'resources/assets/js/app.js', + 'assets/sass/app' => 'resources/assets/sass/app.scss', + 'vite' => 'vite.config.js', + 'package' => 'package.json', + ], + 'replacements' => [ + /** + * Define custom replacements for each section. + * You can specify a closure for dynamic values. + * + * Example: + * + * 'composer' => [ + * 'CUSTOM_KEY' => fn (\Nwidart\Modules\Generators\ModuleGenerator $generator) => $generator->getModule()->getLowerName() . '-module', + * 'CUSTOM_KEY2' => fn () => 'custom text', + * 'LOWER_NAME', + * 'STUDLY_NAME', + * // ... + * ], + * + * Note: Keys should be in UPPERCASE. + */ + 'routes/web' => [ + 'LOWER_NAME', + 'STUDLY_NAME', + 'PLURAL_LOWER_NAME', + 'KEBAB_NAME', + 'MODULE_NAMESPACE', + 'CONTROLLER_NAMESPACE', + ], + 'routes/api' => [ + 'LOWER_NAME', + 'STUDLY_NAME', + 'PLURAL_LOWER_NAME', + 'KEBAB_NAME', + 'MODULE_NAMESPACE', + 'CONTROLLER_NAMESPACE', + ], + 'vite' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME'], + 'json' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME', 'MODULE_NAMESPACE', 'PROVIDER_NAMESPACE'], + 'views/index' => ['LOWER_NAME'], + 'views/master' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME'], + 'scaffold/config' => ['STUDLY_NAME'], + 'composer' => [ + 'LOWER_NAME', + 'STUDLY_NAME', + 'VENDOR', + 'AUTHOR_NAME', + 'AUTHOR_EMAIL', + 'MODULE_NAMESPACE', + 'PROVIDER_NAMESPACE', + 'APP_FOLDER_NAME', + ], + ], + 'gitkeep' => true, + ], + 'paths' => [ + /* + |-------------------------------------------------------------------------- + | Modules path + |-------------------------------------------------------------------------- + | + | This path is used to save the generated module. + | This path will also be added automatically to the list of scanned folders. + | + */ + 'modules' => base_path('modules'), + + /* + |-------------------------------------------------------------------------- + | Modules assets path + |-------------------------------------------------------------------------- + | + | Here you may update the modules' assets path. + | + */ + 'assets' => public_path('modules'), + + /* + |-------------------------------------------------------------------------- + | The migrations' path + |-------------------------------------------------------------------------- + | + | Where you run the 'module:publish-migration' command, where do you publish the + | the migration files? + | + */ + 'migration' => base_path('database/migrations'), + + /* + |-------------------------------------------------------------------------- + | The app path + |-------------------------------------------------------------------------- + | + | app folder name + | for example can change it to 'src' or 'App' + */ + 'app_folder' => 'app/', + + /* + |-------------------------------------------------------------------------- + | Generator path + |-------------------------------------------------------------------------- + | Customise the paths where the folders will be generated. + | Setting the generate key to false will not generate that folder + */ + 'generator' => [ + // app/ + 'actions' => ['path' => 'app/Actions', 'generate' => false], + 'casts' => ['path' => 'app/Casts', 'generate' => false], + 'channels' => ['path' => 'app/Broadcasting', 'generate' => false], + 'class' => ['path' => 'app/Classes', 'generate' => false], + 'command' => ['path' => 'app/Console', 'generate' => false], + 'component-class' => ['path' => 'app/View/Components', 'generate' => false], + 'emails' => ['path' => 'app/Emails', 'generate' => false], + 'event' => ['path' => 'app/Events', 'generate' => false], + 'enums' => ['path' => 'app/Enums', 'generate' => false], + 'exceptions' => ['path' => 'app/Exceptions', 'generate' => false], + 'jobs' => ['path' => 'app/Jobs', 'generate' => false], + 'helpers' => ['path' => 'app/Helpers', 'generate' => false], + 'interfaces' => ['path' => 'app/Interfaces', 'generate' => false], + 'listener' => ['path' => 'app/Listeners', 'generate' => false], + 'model' => ['path' => 'app/Models', 'generate' => false], + 'notifications' => ['path' => 'app/Notifications', 'generate' => false], + 'observer' => ['path' => 'app/Observers', 'generate' => false], + 'policies' => ['path' => 'app/Policies', 'generate' => false], + 'provider' => ['path' => 'app/Providers', 'generate' => true], + 'repository' => ['path' => 'app/Repositories', 'generate' => false], + 'resource' => ['path' => 'app/Transformers', 'generate' => false], + 'route-provider' => ['path' => 'app/Providers', 'generate' => true], + 'rules' => ['path' => 'app/Rules', 'generate' => false], + 'services' => ['path' => 'app/Services', 'generate' => false], + 'scopes' => ['path' => 'app/Models/Scopes', 'generate' => false], + 'traits' => ['path' => 'app/Traits', 'generate' => false], + + // app/Http/ + 'controller' => ['path' => 'app/Http/Controllers', 'generate' => true], + 'filter' => ['path' => 'app/Http/Middleware', 'generate' => false], + 'request' => ['path' => 'app/Http/Requests', 'generate' => false], + + // config/ + 'config' => ['path' => 'config', 'generate' => true], + + // database/ + 'factory' => ['path' => 'database/factories', 'generate' => true], + 'migration' => ['path' => 'database/migrations', 'generate' => true], + 'seeder' => ['path' => 'database/seeders', 'generate' => true], + + // lang/ + 'lang' => ['path' => 'lang', 'generate' => false], + + // resource/ + 'assets' => ['path' => 'resources/assets', 'generate' => true], + 'component-view' => ['path' => 'resources/views/components', 'generate' => false], + 'views' => ['path' => 'resources/views', 'generate' => true], + + // routes/ + 'routes' => ['path' => 'routes', 'generate' => true], + + // tests/ + 'test-feature' => ['path' => 'tests/Feature', 'generate' => true], + 'test-unit' => ['path' => 'tests/Unit', 'generate' => true], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Auto Discover of Modules + |-------------------------------------------------------------------------- + | + | Here you configure auto discover of module + | This is useful for simplify module providers. + | + */ + 'auto-discover' => [ + /* + |-------------------------------------------------------------------------- + | Migrations + |-------------------------------------------------------------------------- + | + | This option for register migration automatically. + | + */ + 'migrations' => true, + + /* + |-------------------------------------------------------------------------- + | Translations + |-------------------------------------------------------------------------- + | + | This option for register lang file automatically. + | + */ + 'translations' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Package commands + |-------------------------------------------------------------------------- + | + | Here you can define which commands will be visible and used in your + | application. You can add your own commands to merge section. + | + */ + 'commands' => ConsoleServiceProvider::defaultCommands() + ->merge([ + // New commands go here + ]) + ->toArray(), + + /* + |-------------------------------------------------------------------------- + | Scan Path + |-------------------------------------------------------------------------- + | + | Here you define which folder will be scanned. By default will scan vendor + | directory. This is useful if you host the package in packagist website. + | + */ + 'scan' => [ + 'enabled' => false, + 'paths' => [base_path('vendor/*/*')], + ], + + /* + |-------------------------------------------------------------------------- + | Composer File Template + |-------------------------------------------------------------------------- + | + | Here is the config for the composer.json file, generated by this package + | + */ + 'composer' => [ + 'vendor' => env('MODULE_VENDOR', 'nwidart'), + 'author' => [ + 'name' => env('MODULE_AUTHOR_NAME', 'Nicolas Widart'), + 'email' => env('MODULE_AUTHOR_EMAIL', 'n.widart@gmail.com'), + ], + 'composer-output' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Choose what laravel-modules will register as custom namespaces. + | Setting one to false will require you to register that part + | in your own Service Provider class. + |-------------------------------------------------------------------------- + */ + 'register' => [ + 'translations' => true, + /** + * load files on boot or register method + */ + 'files' => 'register', + ], + + /* + |-------------------------------------------------------------------------- + | Activators + |-------------------------------------------------------------------------- + | + | You can define new types of activators here, file, database, etc. The only + | required parameter is 'class'. + | The file activator will store the activation status in storage/installed_modules + */ + 'activators' => [ + 'file' => [ + 'class' => FileActivator::class, + 'statuses-file' => base_path('modules_statuses.json'), + ], + ], + + 'activator' => 'file', +]; diff --git a/database/migrations/2025_11_12_224500_move_pages_to_module.php b/database/migrations/2025_11_12_224500_move_pages_to_module.php new file mode 100644 index 00000000..e6d34d0d --- /dev/null +++ b/database/migrations/2025_11_12_224500_move_pages_to_module.php @@ -0,0 +1,35 @@ +increments('id'); + $table->string('title'); + $table->string('slug')->unique(); + $table->text('content'); + $table->boolean('published'); + $table->unsignedInteger('user_id'); + $table->timestamps(); + + $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade'); + }); + } +}; diff --git a/modules/StaticPage/app/Http/Controllers/StaticPageController.php b/modules/StaticPage/app/Http/Controllers/StaticPageController.php new file mode 100644 index 00000000..6e55e11d --- /dev/null +++ b/modules/StaticPage/app/Http/Controllers/StaticPageController.php @@ -0,0 +1,35 @@ +> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + */ + protected function configureEmailVerification(): void {} +} diff --git a/modules/StaticPage/app/Providers/RouteServiceProvider.php b/modules/StaticPage/app/Providers/RouteServiceProvider.php new file mode 100644 index 00000000..7d7b186a --- /dev/null +++ b/modules/StaticPage/app/Providers/RouteServiceProvider.php @@ -0,0 +1,53 @@ +mapApiRoutes(); + $this->mapWebRoutes(); + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes(): void + { + Route::middleware('web')->group(module_path($this->name, '/routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes(): void + { + Route::middleware('api') + ->prefix('api') + ->name('api.') + ->group(module_path($this->name, '/routes/api.php')); + } +} diff --git a/modules/StaticPage/app/Providers/StaticPageServiceProvider.php b/modules/StaticPage/app/Providers/StaticPageServiceProvider.php new file mode 100644 index 00000000..f0e70513 --- /dev/null +++ b/modules/StaticPage/app/Providers/StaticPageServiceProvider.php @@ -0,0 +1,157 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->name, 'database/migrations')); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/' . $this->nameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->nameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->name, 'lang'), $this->nameLower); + $this->loadJsonTranslationsFrom(module_path($this->name, 'lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $configPath = module_path($this->name, config('modules.paths.generator.config.path')); + + if (is_dir($configPath)) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($configPath)); + + foreach ($iterator as $file) { + if ($file->isFile() && $file->getExtension() === 'php') { + $config = str_replace($configPath . DIRECTORY_SEPARATOR, '', $file->getPathname()); + $config_key = str_replace([DIRECTORY_SEPARATOR, '.php'], ['.', ''], $config); + $segments = explode('.', $this->nameLower . '.' . $config_key); + + // Remove duplicated adjacent segments + $normalized = []; + foreach ($segments as $segment) { + if (end($normalized) !== $segment) { + $normalized[] = $segment; + } + } + + $key = $config === 'config.php' ? $this->nameLower : implode('.', $normalized); + + $this->publishes([$file->getPathname() => config_path($config)], 'config'); + $this->merge_config_from($file->getPathname(), $key); + } + } + } + } + + /** + * Merge config from the given path recursively. + */ + protected function merge_config_from(string $path, string $key): void + { + $existing = config($key, []); + $module_config = require $path; + + config([$key => array_replace_recursive($existing, $module_config)]); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/' . $this->nameLower); + $sourcePath = module_path($this->name, 'resources/views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower . '-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower); + + Blade::componentNamespace( + config('modules.namespace') . '\\' . $this->name . '\\View\\Components', + $this->nameLower, + ); + } + + /** + * Get the services provided by the provider. + */ + public function provides(): array + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path . '/modules/' . $this->nameLower)) { + $paths[] = $path . '/modules/' . $this->nameLower; + } + } + + return $paths; + } +} diff --git a/modules/StaticPage/composer.json b/modules/StaticPage/composer.json new file mode 100644 index 00000000..cd993f7e --- /dev/null +++ b/modules/StaticPage/composer.json @@ -0,0 +1,22 @@ +{ + "name": "backstagetechnicalservices/staticpage", + "description": "", + "extra": { + "laravel": { + "providers": [], + "aliases": {} + } + }, + "autoload": { + "psr-4": { + "Modules\\StaticPage\\": "app/", + "Modules\\StaticPage\\Database\\Factories\\": "database/factories/", + "Modules\\StaticPage\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Modules\\StaticPage\\Tests\\": "tests/" + } + } +} diff --git a/modules/StaticPage/config/config.php b/modules/StaticPage/config/config.php new file mode 100644 index 00000000..59af3557 --- /dev/null +++ b/modules/StaticPage/config/config.php @@ -0,0 +1,5 @@ + 'StaticPage', +]; diff --git a/modules/StaticPage/module.json b/modules/StaticPage/module.json new file mode 100644 index 00000000..6397e926 --- /dev/null +++ b/modules/StaticPage/module.json @@ -0,0 +1,9 @@ +{ + "name": "StaticPage", + "alias": "staticpage", + "description": "", + "keywords": [], + "priority": 0, + "providers": ["Modules\\StaticPage\\Providers\\StaticPageServiceProvider"], + "files": [] +} diff --git a/modules/StaticPage/package.json b/modules/StaticPage/package.json new file mode 100644 index 00000000..946ad993 --- /dev/null +++ b/modules/StaticPage/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.5", + "sass": "^1.69.5", + "postcss": "^8.3.7", + "vite": "^4.0.0" + } +} diff --git a/modules/StaticPage/resources/views/about.blade.php b/modules/StaticPage/resources/views/about.blade.php new file mode 100644 index 00000000..84a00109 --- /dev/null +++ b/modules/StaticPage/resources/views/about.blade.php @@ -0,0 +1,47 @@ +@extends('app.main') + +@section('title', 'About Us') +@section('header-main', 'About Us') + +@section('content') +

What is Backstage?

+

+ Backstage Technical Services is a group of student volunteers who provide technical expertise to other Students' + Union Societies and University departments. We provide support in areas such as event management, sound, lighting, + video and stage management to over 60 events per year. +

+ +

What types of event do we provide services for?

+

+ All of the big events (and most of the smaller events) are crewed by members of Backstage - all of the bands that + appear in the Tub, the experience that is Freshers' Week, The Summer Ball, plays by Bath University Student Theatre + (BUST), musicals by Bath University Student Musical Society (BUSMS) and many, many more. +

+

+ We also provide support for high profile events, such as the SU Blues awards, One Young World Bath and other + corporate conferences. +

+

+ Backstage works both on- and off-campus providing lighting, sound, set design, pyrotechnic, stage management and + event management expertise. +

+ +

Training

+

+ Backstage run a training course which provides continuous training from basic to advanced level on a wide range of + subjects. Our training is open (and completely free) to all members. We also offer teaching on-event through our + mentorship programme, where an experienced member will teach you how to perform a crew role. +

+ +

Industry

+

+ Backstage works closely with a variety of companies in the events and enterainment industry. Members have gone on to + work for companies such as Enlightened, + TAIT, IPS, + Assembly Festival, theSpaceUK + and PMY Group. +

+ +

Booking

+

You can submit a booking for Backstage using the online booking form.

+@endsection diff --git a/modules/StaticPage/resources/views/faq.blade.php b/modules/StaticPage/resources/views/faq.blade.php new file mode 100644 index 00000000..910bfa01 --- /dev/null +++ b/modules/StaticPage/resources/views/faq.blade.php @@ -0,0 +1,61 @@ +@extends('app.main') + +@section('title', 'Frequently Asked Questions') +@section('header-main', 'Frequently Asked Questions') + +@section('content') +

How can I book Backstage?

+

+ Only via the website. It doesn't matter if you've spoken to every person in the society; we only accept bookings via + our web booking system. Booking Backstage as early as possible gives us more opportunity to ensure that the correct + equipment, volunteers and planning is available. This generally means that we are booked around a month in advance + (less than two weeks notice may result in a financial surcharge). Please note that we will not crew your event until + the production manager has explicitly informed you that your booking request has been accepted. +

+ +

Do members get paid?

+

+ No. All our members are volunteers, doing full-time degrees here at the university. They sometimes work over 15 + hours/day for an event, unpaid. To give an indication of cost, an experienced technician from an external company + would cost over ÂŁ100/day. +

+ +

Why can't you do this/that event for free?

+

+ Because we need to pay for insurance, repairs, replacements, transport, photocopying costs, telephones, tape, bulbs, + batteries, smoke fluid etc etc. Every year these costs add upto about ÂŁ10,000 (not including hires) and we therefore + need to issue a charge to break even at the end of each year. +

+

+ Whilst BTS do receive a budget from the SU, it can't cover all our costs, especially for the upkeep of equipment + that may be used over one hundred times a year. +

+ +

Backstage is very expensive! I can get it cheaper elsewhere

+

To hire the equipment externally it would usually cost well over ÂŁ250 per event plus labour costs.

+

+ You will only be charged fees that relate to hire of equipment, insurance and upkeep. All of the supervision is + given free through volunteers' time. +

+

+ You are quite welcome to use an external company; we would recommend + Enlightened Lighting in Bath, and + Audio Forum in Bristol. +

+ +

Can I borrow Backstage equipment?

+

+ The majority of our equipment requires experience (and usually training) before it can be used and therefore it is + rare for Backstage to run dry hires (providing equipment without personnel). For insurance and safety reasons, BTS + doesn't lend out equipment to private individuals. Societies have borrowed some of our equipment in the past but + each request is considered on an individual basis. Please contact us for + more information. +

+ +

I want to join Backstage!

+

+ Great idea - we're open to all members of Bath University Students' Union. Our weekly meetings happen on Wednesdays + at 13:15. For further details, please contact our Secretary at + sec@bts-crew.com. +

+@endsection diff --git a/modules/StaticPage/resources/views/landing.blade.php b/modules/StaticPage/resources/views/landing.blade.php new file mode 100644 index 00000000..3203c6f5 --- /dev/null +++ b/modules/StaticPage/resources/views/landing.blade.php @@ -0,0 +1,26 @@ +@extends('app.main') + +@section('title', 'Home') + +@section('content') +

+ +

+

+ Backstage Technical Services is a society formed of students at the University of Bath, who provide technical + expertise to other Students' Union Clubs and Societies and event organisers in Sound, Lighting and Stage Management. +

+

+ We offer support at a wide range of events including the Students' Union's Summer Ball and Freshers' Week, theatre + performances from student and external performers, band and club nights in The Tub and many more. +

+

+ We work both on- and off-campus providing lighting, sound, set design, pyrotechnic, stage management and event + management expertise. +

+

+ Whether you're interested in booking us to support your event, or are a student at the University of Bath interested + in joining us, please explore the site and do not hesitate to + contact us if you have any questions. +

+@endsection diff --git a/modules/StaticPage/resources/views/links.blade.php b/modules/StaticPage/resources/views/links.blade.php new file mode 100644 index 00000000..f8fa3858 --- /dev/null +++ b/modules/StaticPage/resources/views/links.blade.php @@ -0,0 +1,69 @@ +@extends('app.main') + +@section('title', 'Links') +@section('header-main', 'Links') + +@section('content') +

+ This page contains links to many other web resources, divided by category. Please note that these sites are not + associated with BTS unless otherwise stated. If you would like a link to be added then please + contact us. +

+ +

Lighting Manufacturers

+ + +

Sound Manufacturers

+ + +

Discussion Boards and Forums

+ + +

Professional Bodies

+
    +
  • ABTT - The Association of British Theatre Technicians
  • +
  • PLASA - The Professional Lighting and Sound Association
  • +
  • ALD - The Association of Lighting Designers (a UK body)
  • +
  • PSA - The Production Services Association
  • +
+ +

Lighting Suppliers

+ + +

Sound Equipment Suppliers

+ + + +
    +
  • NSDF - The National Student Drama Festival
  • +
  • Northern Lights - Norther Lights Fireworks Company
  • +
  • Modelbox - CAD libraries and models of performance spaces
  • +
+@endsection diff --git a/modules/StaticPage/resources/views/privacy-policy.blade.php b/modules/StaticPage/resources/views/privacy-policy.blade.php new file mode 100644 index 00000000..d417485b --- /dev/null +++ b/modules/StaticPage/resources/views/privacy-policy.blade.php @@ -0,0 +1,120 @@ +@extends('app.main') + +@section('title', 'Privacy Policy') +@section('header-main', 'Privacy Policy') + +@section('content') +

What is this Privacy Policy for?

+

+ This privacy policy is for this website www.bts-crew.com and served by + Backstage Technical Services and governs the privacy of its users who choose to use it. +

+

+ The policy sets out the different areas where user privacy is concerned and outlines the obligations + & requirements of the users, the website and website owners. Furthermore the way this website processes, stores + and protects user data and information will also be detailed within this policy. +

+ +

The Website

+

+ This website and it's owners take a proactive approach to user privacy and ensure the necessary steps are taken + to protect the privacy of its users throughout their visiting experience. Please note at any time you may contact + sec@bts-crew.com to have any data remove for inquire about data held. +

+ +

Use of Cookies

+

+ This website uses cookies to better the users experience while visiting the website. Where applicable this website + uses a cookie control system allowing the user on their first visit to the website to allow or disallow the use of + cookies on their computer/device. This complies with recent legislation requirements for websites to obtain explicit + consent from users before leaving behind or reading files such as cookies on a user's computer/device. +

+

+ Cookies are small files saved to the user's hard drive that track, save and store information about the + user's interactions and usage of the website. This allows the website to provide the user with a tailored + experience within this website. +

+

+ Users are advised that if they wish to deny the use and saving of cookies from this website on their computers hard + drive they should take necessary steps within their web browsers security settings to block all cookies from this + website and it’s external serving vendors. Website functionality may affected by disabling cookies. +

+ +

Use of Account Data

+

+ Members and other stakeholders who own an account with bts-crew.com permit the use of their account data as is + required for basic website functionality. +

+
    +
  • + Email addresses are used for communication purposes as part of the website functionality, for example to allow + event managers to send event crew members emails. They may also be visible to other registered members however + this can be hidden on your profile page. +
  • +
  • + Your name will be publicly available on event crew lists and may be used to identify your event history. +
  • +
  • + Other account data is provided by the user at their discretion (e.g. tool colours or contact numbers) and may be + altered or removed by the user. +
  • +
+

+ User account data is not linked to other third party systems including the University of Bath or University of Bath + Student's Union (The SU) with the following exception; as part of an agreement with "The SU", accidents (both to + person or equipment) must be reported to the University of Bath using a dedicated form on this website. This may + require the limited use of data from your user account or otherwise to assist in factually reporting the accident + and notifying a next-of-kin or similar. +

+

+ By providing your information to BTS for the purposes of initial account creation, you agree to this privacy policy + and the action constitutes a consensual collection and maintaining of your data. This does not affect your right to + have your account or data permanently deleted, however this request must be made in writing to + sec@bts-crew.com. +

+

+ The website archives user accounts by default to enable the continued functionality of some services. This does not + affect your right to have your account permanently deleted, however this request must be made in + writing to sec@bts-crew.com. +

+ +

Contact & Communication

+

+ Users contacting this website and/or its owners do so at their own discretion and provide any such personal details + requested at their own risk. Your personal information is kept private and stored securely until a time it is no + longer required or has no use, as detailed in the Data Protection Act 1998. +

+

+ This website and its owners use any information submitted to provide you with further information about the + products/services they offer or to assist you in answering any questions or queries you may have submitted. +

+

+ Some elements of this website invoke the use of third party contact services including Google Forms. In + these cases, use of those services are covered by the separate, third party privacy policy. +

+ +

External Links

+

+ Although this website only looks to include quality, safe and relevant external links, users are advised adopt a + policy of caution before clicking any external web links mentioned throughout this website. +

+

+ The owners of this website cannot guarantee or verify the contents of any externally linked website despite their + best efforts. Users should therefore note they click on external links at their own risk and this website and + it's owners cannot be held liable for any damages or implications caused by visiting any external links mentioned. +

+ +

Social Media Platforms

+

+ Communication, engagement and actions taken through external social media platforms that this website and it's + owners participate on are custom to the terms and conditions as well as the privacy policies held with each social + media platform respectively. +

+

+ Users are advised to use social media platforms wisely and communicate/engage upon them with due care and caution + in regard to their own privacy and personal details. This website nor it's owners will never forcibly require + personal or sensitive information through social media platforms and encourage users wishing to discuss sensitive + details to contact them through primary communication channels such as by telephone or email if they prefer to do + so. +

+@endsection diff --git a/modules/StaticPage/routes/api.php b/modules/StaticPage/routes/api.php new file mode 100644 index 00000000..b3d9bbc7 --- /dev/null +++ b/modules/StaticPage/routes/api.php @@ -0,0 +1 @@ +name('home'); +Route::get('/page/about', [StaticPageController::class, 'about'])->name('page.about'); +Route::get('/page/faq', [StaticPageController::class, 'faq'])->name('page.faq'); +Route::get('/page/links', [StaticPageController::class, 'links'])->name('page.links'); +Route::get('/page/privacy-policy', [StaticPageController::class, 'privacyPolicy'])->name('page.privacy-policy'); diff --git a/modules/StaticPage/tests/Feature/StaticPageTest.php b/modules/StaticPage/tests/Feature/StaticPageTest.php new file mode 100644 index 00000000..135a3938 --- /dev/null +++ b/modules/StaticPage/tests/Feature/StaticPageTest.php @@ -0,0 +1,45 @@ +assertSuccessful() + ->assertSeeText('Backstage Technical Services is a society formed of students at the University of Bath'); +}); + +it('should show the about page', function () { + get('/page/about') + ->assertSuccessful() + ->assertSeeHtml('

About Us

') + ->assertSeeText('What is Backstage?'); +}); + +it('should show the faq page', function () { + get('/page/faq') + ->assertSuccessful() + ->assertSeeHtml('

Frequently Asked Questions

') + ->assertSeeText('How can I book Backstage?'); +}); + +it('should show the links page', function () { + get('/page/links') + ->assertSuccessful() + ->assertSeeHtml('

Links

') + ->assertSeeText('Other Useful Links'); +}); + +it('should show the privacy policy page', function () { + get('/page/privacy-policy') + ->assertSuccessful() + ->assertSeeHtml('

Privacy Policy

') + ->assertSeeText('What is this Privacy Policy for?'); +}); + +it('should show the terms and conditions page', function () { + get('/contact/book/terms') + ->assertSuccessful() + ->assertSeeHtml('') + ->assertSeeText('Please read these terms and conditions carefully.'); +}); diff --git a/modules/StaticPage/tests/Unit/.gitkeep b/modules/StaticPage/tests/Unit/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/modules/StaticPage/vite.config.js b/modules/StaticPage/vite.config.js new file mode 100644 index 00000000..d233f329 --- /dev/null +++ b/modules/StaticPage/vite.config.js @@ -0,0 +1,21 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; +import { readdirSync, statSync } from 'fs'; +import { join, relative, dirname } from 'path'; +import { fileURLToPath } from 'url'; + +export default defineConfig({ + build: { + outDir: '../../public/build-staticpage', + emptyOutDir: true, + manifest: true, + }, + plugins: [ + laravel({ + publicDirectory: '../../public', + buildDirectory: 'build-staticpage', + input: [__dirname + '/resources/assets/sass/app.scss', __dirname + '/resources/assets/js/app.js'], + refresh: true, + }), + ], +}); diff --git a/modules_statuses.json b/modules_statuses.json new file mode 100644 index 00000000..f5698aa5 --- /dev/null +++ b/modules_statuses.json @@ -0,0 +1,3 @@ +{ + "StaticPage": true +} diff --git a/phpunit.xml b/phpunit.xml index 110ccc00..3758c65b 100755 --- a/phpunit.xml +++ b/phpunit.xml @@ -11,15 +11,25 @@ tests/Unit + ./modules/*/tests/Unit tests/Feature + ./modules/*/tests/Feature app + ./modules + + ./modules/*/config + ./modules/*/database + ./modules/*/resources + ./modules/*/routes + ./modules/*/tests + diff --git a/resources/assets/sass/partials/_pages.scss b/resources/assets/sass/partials/_pages.scss deleted file mode 100755 index 5ec2cd51..00000000 --- a/resources/assets/sass/partials/_pages.scss +++ /dev/null @@ -1,30 +0,0 @@ -&[page-id="index"] { - table.table { - td { - vertical-align: middle; - } - .page-title { - font-size: 1.133em; - } - .page-author { - width: 20%; - } - .page-published { - font-size: 20px; - width: 2em; - - .fa-check { - color: green; - } - } - .page-actions { - width: 6em; - } - } -} -&[page-id="create"], -&[page-id="edit"] { - div#content { - max-width: 700px; - } -} diff --git a/resources/assets/sass/partials/partials.scss b/resources/assets/sass/partials/partials.scss index e6ca64e6..d39b04bc 100755 --- a/resources/assets/sass/partials/partials.scss +++ b/resources/assets/sass/partials/partials.scss @@ -45,10 +45,6 @@ body[page-section*="members"] { @import "members"; } -body[page-section*="pages"] { - @import "pages"; -} - body[page-section*="quotes"] { @import "quotes"; } diff --git a/resources/views/app/includes/footer.blade.php b/resources/views/app/includes/footer.blade.php index 17c0eea2..62a8a4a7 100755 --- a/resources/views/app/includes/footer.blade.php +++ b/resources/views/app/includes/footer.blade.php @@ -39,10 +39,10 @@ diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php deleted file mode 100755 index 8a4caa26..00000000 --- a/resources/views/home.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -@extends('app.main') - -@section('title', 'Home') -@section('page-section', 'page') -@section('page-id', 'home') - -@section('content') -

- -

-

Backstage Technical Services is a society formed of students at the University of Bath, who provide technical expertise to other Students' Union Clubs and Societies and event organisers in Sound, Lighting and Stage Management.

-

We offer support at a wide range of events including the Students' Union's Summer Ball and Freshers' Week, theatre performances from student and external performers, band and club nights in The Tub and many more.

-

We work both on- and off-campus providing lighting, sound, set design, pyrotechnic, stage management and event management expertise.

-

Whether you're interested in booking us to support your event, or are a student at the University of Bath interested in joining us, please explore the site and do not hesitate to contact us if you have any questions.

-@endsection diff --git a/resources/views/pages/create.blade.php b/resources/views/pages/create.blade.php deleted file mode 100755 index 8a8e0cb4..00000000 --- a/resources/views/pages/create.blade.php +++ /dev/null @@ -1,23 +0,0 @@ -@extends('app.main') - -@section('title', 'Create a Page') -@section('page-section', 'pages') -@section('page-id', 'create') -@section('header-main', 'Page Editor') -@section('header-sub', 'Create a New Page') - -@section('content') - {!! Form::model($page, ['route' => ['page.store']]) !!} - @include('pages.form') - -
- - - or {!! link_to_route('page.index', 'Cancel') !!} - -
- {!! Form::close() !!} -@endsection \ No newline at end of file diff --git a/resources/views/pages/edit.blade.php b/resources/views/pages/edit.blade.php deleted file mode 100755 index ed33677a..00000000 --- a/resources/views/pages/edit.blade.php +++ /dev/null @@ -1,23 +0,0 @@ -@extends('app.main') - -@section('title', 'Edit a Page') -@section('page-section', 'pages') -@section('page-id', 'create') -@section('header-main', 'Page Editor') -@section('header-sub', 'Edit a Page') - -@section('content') - {!! Form::model($page, ['route' => ['page.update', $page->slug]]) !!} - @include('pages.form') - -
- - - or {!! link_to_route('page.index', 'Cancel') !!} - -
- {!! Form::close() !!} -@endsection \ No newline at end of file diff --git a/resources/views/pages/form.blade.php b/resources/views/pages/form.blade.php deleted file mode 100755 index af34ecb0..00000000 --- a/resources/views/pages/form.blade.php +++ /dev/null @@ -1,37 +0,0 @@ - -
- {!! Form::label('title', 'Page Title:', ['class' => 'control-label']) !!} - {!! Form::text('title', null, ['class' => 'form-control']) !!} - @InputError('title') -
- - -
- {!! Form::label('slug', 'Page Slug:', ['class' => 'control-label']) !!} - {!! Form::text('slug', null, ['class' => 'form-control']) !!} - @InputError('slug') -
- - -
- {!! Form::label('content', 'Content:', ['class' => 'control-label']) !!} -
- {!! Form::textarea('content', null, ['class' => 'form-control', 'data-type' => 'simplemde']) !!} -
- @InputError('content') -

Use {!! link_to('https://simplemde.com/markdown-guide', 'markdown', ['target' => '_blank']) !!} to style the text.

-
- - -
- {!! Form::label('published', 'Published:', ['class' => 'control-label']) !!} - {!! Form::select('published', [0 => 'No', 1 => 'Yes'], null, ['class' => 'form-control', 'id' => 'published']) !!} - @InputError('published') -
- - -
- {!! Form::label('user_id', 'Author:', ['class' => 'control-label']) !!} - {!! Form::memberList('user_id', null, ['class' => 'form-control', 'include_blank' => true]) !!} - @InputError('user_id') -
\ No newline at end of file diff --git a/resources/views/pages/index.blade.php b/resources/views/pages/index.blade.php deleted file mode 100755 index 72f326ff..00000000 --- a/resources/views/pages/index.blade.php +++ /dev/null @@ -1,72 +0,0 @@ -@extends('app.main') - -@section('title', 'Page Editor') -@section('page-section', 'pages') -@section('page-id', 'index') -@section('header-main', 'Page Editor') - -@section('content') - - - - - - - - - - - - @if(count($pages)) - @foreach($pages as $page) - - - - - - - - @endforeach - @else - - - - @endif - -
IDPage
-
{{ $page->title }}
-
{{ route('page.show', ['slug' => $page->slug], false) }}
-
- @if($page->published) - - @else - - @endif - - -
No webpages
-

- - - New Page - -

- - {{ $pages }} -@endsection \ No newline at end of file diff --git a/resources/views/pages/view.blade.php b/resources/views/pages/view.blade.php deleted file mode 100755 index 3f7b4ff7..00000000 --- a/resources/views/pages/view.blade.php +++ /dev/null @@ -1,10 +0,0 @@ -@extends('app.main') - -@section('title', $page->title) -@section('page-section', 'pages') -@section('page-id', 'view') -@section('header-main', $page->title) - -@section('content') - {!! Markdown::convertToHtml($page->content) !!} -@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 7d480430..8b958a88 100755 --- a/routes/web.php +++ b/routes/web.php @@ -11,13 +11,6 @@ | */ -Route::get('/', [ - 'as' => 'home', - 'uses' => function () { - return view('home'); - }, -]); - include base_path('routes/web/auth.php'); include base_path('routes/web/awards.php'); include base_path('routes/web/backups.php'); @@ -29,7 +22,6 @@ include base_path('routes/web/logs.php'); include base_path('routes/web/media.php'); include base_path('routes/web/members.php'); -include base_path('routes/web/page.php'); include base_path('routes/web/quotes.php'); include base_path('routes/web/resources.php'); include base_path('routes/web/training.php'); diff --git a/routes/web/page.php b/routes/web/page.php deleted file mode 100755 index 7dd416b6..00000000 --- a/routes/web/page.php +++ /dev/null @@ -1,46 +0,0 @@ - 'page', - ], - function () { - Route::get('', [ - 'as' => 'page.index', - 'uses' => 'PageController@index', - ]); - Route::get('create', [ - 'as' => 'page.create', - 'uses' => 'PageController@create', - ]); - Route::post('', [ - 'as' => 'page.store', - 'uses' => 'PageController@store', - ]); - Route::group( - [ - 'prefix' => '{slug}', - 'where' => [ - 'slug' => '[\w-]+', - ], - ], - function () { - Route::get('', [ - 'as' => 'page.show', - 'uses' => 'PageController@show', - ]); - Route::get('edit', [ - 'as' => 'page.edit', - 'uses' => 'PageController@edit', - ]); - Route::post('edit', [ - 'as' => 'page.update', - 'uses' => 'PageController@update', - ]); - Route::get('delete', [ - 'as' => 'page.destroy', - 'uses' => 'PageController@destroy', - ]); - }, - ); - }, -); diff --git a/tests/Feature/.gitkeep b/tests/Feature/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/tests/Feature/PagesTest.php b/tests/Feature/PagesTest.php deleted file mode 100644 index 110e8fb8..00000000 --- a/tests/Feature/PagesTest.php +++ /dev/null @@ -1,29 +0,0 @@ -assertSuccessful() - ->assertSeeText('Backstage Technical Services is a society formed of students at the University of Bath'); -}); - -it('should show the about page', function () { - get('/page/about')->assertSuccessful()->assertSeeText('About Us'); -})->skip('Needs to be made a static page'); - -it('should show the faq page', function () { - get('/page/faq')->assertSuccessful()->assertSeeText('Frequently Asked Questions'); -})->skip('Needs to be made a static page'); - -it('should show the links page', function () { - get('/page/links')->assertSuccessful()->assertSeeText('Links'); -})->skip('Needs to be made a static page'); - -it('should show the privacy policy page', function () { - get('/page/privacy-policy')->assertSuccessful()->assertSeeText('Privacy Policy'); -})->skip('Needs to be made a static page'); - -it('should show the terms and conditions page', function () { - get('/contact/book/terms')->assertSuccessful()->assertSeeText('Terms and Conditions'); -}); From ab19a16c49bb85197804b2ea152f95e66b20a6d0 Mon Sep 17 00:00:00 2001 From: Ben Jones Date: Wed, 12 Nov 2025 23:55:42 +0000 Subject: [PATCH 7/9] build: add phpstan (#73) --- .github/workflows/checks.yml | 24 +- composer.json | 3 + composer.lock | 1018 ++- .../Presenters/Bootstrap4NavbarPresenter.php | 156 - .../Bootstrap4NavbarRightPresenter.php | 16 - phpstan-baseline.neon | 7651 +++++++++++++++++ phpstan.neon | 17 + scripts/set_env.sh | 20 + tests/Pest.php | 9 - 9 files changed, 8360 insertions(+), 554 deletions(-) delete mode 100755 packages/WebDevTools/Laravel/Presenters/Bootstrap4NavbarPresenter.php delete mode 100755 packages/WebDevTools/Laravel/Presenters/Bootstrap4NavbarRightPresenter.php create mode 100644 phpstan-baseline.neon create mode 100644 phpstan.neon create mode 100755 scripts/set_env.sh diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index e9824d44..5642d2fd 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -19,6 +19,28 @@ jobs: - run: yarn install --frozen-lockfile - run: yarn check:format + phpstan: + name: PHPStan + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: 'false' + - uses: shivammathur/setup-php@v2 + with: + php-version: 8.4 + tools: composer + - run: composer install --no-interaction --prefer-dist + - name: Configure app + run: | + cp .env.example .env + php artisan key:generate + scripts/set_env.sh YOUTUBE_API_KEY dummy + php artisan ide-helper:generate + - run: | + ./vendor/bin/phpstan analyse \ + --memory-limit 1G \ + --error-format github test: name: Tests runs-on: ubuntu-latest @@ -29,7 +51,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: 1 + persist-credentials: 'false' - uses: shivammathur/setup-php@v2 with: php-version: 8.4 diff --git a/composer.json b/composer.json index 65072c5a..2b778ffa 100755 --- a/composer.json +++ b/composer.json @@ -39,9 +39,12 @@ "barryvdh/laravel-ide-helper": "^3.6", "fakerphp/faker": "^1.9.1", "filp/whoops": "^2.0", + "larastan/larastan": "^3.0", "mockery/mockery": "^1.4.2", "pestphp/pest": "^4.0", "pestphp/pest-plugin-laravel": "^4.0", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", "phpunit/php-code-coverage": "^12" }, "autoload": { diff --git a/composer.lock b/composer.lock index af0c854d..fb2dc310 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9cbc76c0df809a797a628c042445c2a9", + "content-hash": "9a01c46af8dac073106784fd2b01f5c9", "packages": [ { "name": "alaouy/youtube", @@ -133,25 +133,25 @@ }, { "name": "brick/math", - "version": "0.12.3", + "version": "0.14.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" + "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", + "url": "https://api.github.com/repos/brick/math/zipball/113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", + "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" }, "type": "library", "autoload": { @@ -181,7 +181,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.3" + "source": "https://github.com/brick/math/tree/0.14.0" }, "funding": [ { @@ -189,7 +189,7 @@ "type": "github" } ], - "time": "2025-02-28T13:11:00+00:00" + "time": "2025-08-29T12:40:03+00:00" }, { "name": "bugsnag/bugsnag", @@ -494,16 +494,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.8", + "version": "1.5.9", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "719026bb30813accb68271fee7e39552a58e9f65" + "reference": "1905981ee626e6f852448b7aaa978f8666c5bc54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/719026bb30813accb68271fee7e39552a58e9f65", - "reference": "719026bb30813accb68271fee7e39552a58e9f65", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/1905981ee626e6f852448b7aaa978f8666c5bc54", + "reference": "1905981ee626e6f852448b7aaa978f8666c5bc54", "shasum": "" }, "require": { @@ -550,7 +550,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.8" + "source": "https://github.com/composer/ca-bundle/tree/1.5.9" }, "funding": [ { @@ -562,7 +562,7 @@ "type": "github" } ], - "time": "2025-08-20T18:49:47+00:00" + "time": "2025-11-06T11:46:17+00:00" }, { "name": "composer/installers", @@ -787,16 +787,16 @@ }, { "name": "doctrine/dbal", - "version": "3.10.1", + "version": "3.10.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "3626601014388095d3af9de7e9e958623b7ef005" + "reference": "65edaca19a752730f290ec2fb89d593cb40afb43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/3626601014388095d3af9de7e9e958623b7ef005", - "reference": "3626601014388095d3af9de7e9e958623b7ef005", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/65edaca19a752730f290ec2fb89d593cb40afb43", + "reference": "65edaca19a752730f290ec2fb89d593cb40afb43", "shasum": "" }, "require": { @@ -812,14 +812,14 @@ }, "require-dev": { "doctrine/cache": "^1.11|^2.0", - "doctrine/coding-standard": "13.0.0", + "doctrine/coding-standard": "14.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "2.1.17", + "phpstan/phpstan": "2.1.30", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.23", - "slevomat/coding-standard": "8.16.2", - "squizlabs/php_codesniffer": "3.13.1", + "phpunit/phpunit": "9.6.29", + "slevomat/coding-standard": "8.24.0", + "squizlabs/php_codesniffer": "4.0.0", "symfony/cache": "^5.4|^6.0|^7.0", "symfony/console": "^4.4|^5.4|^6.0|^7.0" }, @@ -881,7 +881,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.10.1" + "source": "https://github.com/doctrine/dbal/tree/3.10.3" }, "funding": [ { @@ -897,7 +897,7 @@ "type": "tidelift" } ], - "time": "2025-08-05T12:18:06+00:00" + "time": "2025-10-09T09:05:12+00:00" }, { "name": "doctrine/deprecations", @@ -1207,29 +1207,28 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v3.4.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "8c784d071debd117328803d86b2097615b457500" + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", - "reference": "8c784d071debd117328803d86b2097615b457500", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" + "php": "^8.2|^8.3|^8.4|^8.5" }, "replace": { "mtdowling/cron-expression": "^1.0" }, "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" }, "type": "library", "extra": { @@ -1260,7 +1259,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" }, "funding": [ { @@ -1268,7 +1267,7 @@ "type": "github" } ], - "time": "2024-10-09T13:47:03+00:00" + "time": "2025-10-31T18:51:33+00:00" }, { "name": "egulias/email-validator", @@ -1441,20 +1440,20 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.18.0", + "version": "v4.19.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/b287d2a16aceffbf6e0295559b39662612b77fcf", + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1496,9 +1495,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.19.0" }, - "time": "2024-11-01T03:51:45+00:00" + "time": "2025-10-17T16:34:55+00:00" }, { "name": "filp/whoops", @@ -2333,16 +2332,16 @@ }, { "name": "konekt/html", - "version": "6.6.0", + "version": "6.7.0", "source": { "type": "git", "url": "https://github.com/artkonekt/html.git", - "reference": "bde98454f6ad17e0047d914d824f32fc1bb797ec" + "reference": "b69b78dcd047e99ef506ad8c98e6cff42fae9bae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/artkonekt/html/zipball/bde98454f6ad17e0047d914d824f32fc1bb797ec", - "reference": "bde98454f6ad17e0047d914d824f32fc1bb797ec", + "url": "https://api.github.com/repos/artkonekt/html/zipball/b69b78dcd047e99ef506ad8c98e6cff42fae9bae", + "reference": "b69b78dcd047e99ef506ad8c98e6cff42fae9bae", "shasum": "" }, "require": { @@ -2408,7 +2407,7 @@ "issues": "https://github.com/artkonekt/html/issues", "source": "https://github.com/artkonekt/html" }, - "time": "2025-02-26T11:43:04+00:00" + "time": "2025-11-10T20:02:03+00:00" }, { "name": "kriswallsmith/assetic", @@ -2459,30 +2458,30 @@ }, { "name": "laminas/laminas-stdlib", - "version": "3.20.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4" + "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/8974a1213be42c3e2f70b2c27b17f910291ab2f4", - "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/b1c81514cfe158aadf724c42b34d3d0a8164c096", + "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "conflict": { "zendframework/zend-stdlib": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "^3.0", - "phpbench/phpbench": "^1.3.1", - "phpunit/phpunit": "^10.5.38", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.26.1" + "laminas/laminas-coding-standard": "^3.1.0", + "phpbench/phpbench": "^1.4.1", + "phpunit/phpunit": "^11.5.42", + "psalm/plugin-phpunit": "^0.19.5", + "vimeo/psalm": "^6.13.1" }, "type": "library", "autoload": { @@ -2514,24 +2513,24 @@ "type": "community_bridge" } ], - "time": "2024-10-29T13:46:07+00:00" + "time": "2025-10-11T18:13:12+00:00" }, { "name": "laravel/framework", - "version": "v11.45.2", + "version": "v11.46.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "d134bf11e2208c0c5bd488cf19e612ca176b820a" + "reference": "5fd457f807570a962a53b403b1346efe4cc80bb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/d134bf11e2208c0c5bd488cf19e612ca176b820a", - "reference": "d134bf11e2208c0c5bd488cf19e612ca176b820a", + "url": "https://api.github.com/repos/laravel/framework/zipball/5fd457f807570a962a53b403b1346efe4cc80bb8", + "reference": "5fd457f807570a962a53b403b1346efe4cc80bb8", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12|^0.13|^0.14", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.4", @@ -2635,7 +2634,7 @@ "league/flysystem-read-only": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^9.16.0", + "orchestra/testbench-core": "^9.16.1", "pda/pheanstalk": "^5.0.6", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", @@ -2729,20 +2728,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-08-13T20:28:00+00:00" + "time": "2025-09-30T14:51:32+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.6", + "version": "v0.3.7", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077" + "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/86a8b692e8661d0fb308cec64f3d176821323077", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077", + "url": "https://api.github.com/repos/laravel/prompts/zipball/a1891d362714bc40c8d23b0b1d7090f022ea27cc", + "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc", "shasum": "" }, "require": { @@ -2759,8 +2758,8 @@ "illuminate/collections": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3|^3.4", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" }, "suggest": { "ext-pcntl": "Required for the spinner to be animated." @@ -2786,22 +2785,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.6" + "source": "https://github.com/laravel/prompts/tree/v0.3.7" }, - "time": "2025-07-07T14:17:42+00:00" + "time": "2025-09-19T13:47:56+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.4", + "version": "v2.0.6", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" + "reference": "038ce42edee619599a1debb7e81d7b3759492819" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/038ce42edee619599a1debb7e81d7b3759492819", + "reference": "038ce42edee619599a1debb7e81d7b3759492819", "shasum": "" }, "require": { @@ -2849,7 +2848,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2025-03-19T13:51:03+00:00" + "time": "2025-10-09T13:42:30+00:00" }, { "name": "laravel/tinker", @@ -3227,16 +3226,16 @@ }, { "name": "league/flysystem", - "version": "3.30.0", + "version": "3.30.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "2203e3151755d874bb2943649dae1eb8533ac93e" + "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2203e3151755d874bb2943649dae1eb8533ac93e", - "reference": "2203e3151755d874bb2943649dae1eb8533ac93e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", + "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", "shasum": "" }, "require": { @@ -3304,22 +3303,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.30.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.30.2" }, - "time": "2025-06-25T13:29:59+00:00" + "time": "2025-11-10T17:13:11+00:00" }, { "name": "league/flysystem-local", - "version": "3.30.0", + "version": "3.30.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10" + "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ab4f9d0d672f601b102936aa728801dd1a11968d", + "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d", "shasum": "" }, "require": { @@ -3353,9 +3352,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.2" }, - "time": "2025-05-21T10:34:19+00:00" + "time": "2025-11-10T11:23:37+00:00" }, { "name": "league/mime-type-detection", @@ -3828,16 +3827,16 @@ }, { "name": "nesbot/carbon", - "version": "3.10.2", + "version": "3.10.3", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24" + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24", - "reference": "76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", "shasum": "" }, "require": { @@ -3855,13 +3854,13 @@ "require-dev": { "doctrine/dbal": "^3.6.3 || ^4.0", "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.75.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", "kylekatarnls/multi-tester": "^2.5.3", "phpmd/phpmd": "^2.15.0", "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.1.17", - "phpunit/phpunit": "^10.5.46", - "squizlabs/php_codesniffer": "^3.13.0" + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4" }, "bin": [ "bin/carbon" @@ -3929,29 +3928,29 @@ "type": "tidelift" } ], - "time": "2025-08-02T09:36:06+00:00" + "time": "2025-09-06T13:39:36+00:00" }, { "name": "nette/schema", - "version": "v1.3.2", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004", + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.4" + "php": "8.1 - 8.5" }, "require-dev": { "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -3961,6 +3960,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -3989,9 +3991,9 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.2" + "source": "https://github.com/nette/schema/tree/v1.3.3" }, - "time": "2024-10-06T23:10:23+00:00" + "time": "2025-10-30T22:57:59+00:00" }, { "name": "nette/utils", @@ -4084,16 +4086,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.6.1", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" + "reference": "3a454ca033b9e06b63282ce19562e892747449bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", - "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb", "shasum": "" }, "require": { @@ -4136,9 +4138,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" }, - "time": "2025-08-13T20:13:15+00:00" + "time": "2025-10-21T19:32:17+00:00" }, { "name": "nunomaduro/collision", @@ -4241,31 +4243,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v2.3.1", + "version": "v2.3.2", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123" + "reference": "eb61920a53057a7debd718a5b89c2178032b52c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dfa08f390e509967a15c22493dc0bac5733d9123", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/eb61920a53057a7debd718a5b89c2178032b52c0", + "reference": "eb61920a53057a7debd718a5b89c2178032b52c0", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.2.6" + "symfony/console": "^7.3.4" }, "require-dev": { - "illuminate/console": "^11.44.7", - "laravel/pint": "^1.22.0", + "illuminate/console": "^11.46.1", + "laravel/pint": "^1.25.1", "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0 || ^3.8.2", - "phpstan/phpstan": "^1.12.25", + "pestphp/pest": "^2.36.0 || ^3.8.4", + "phpstan/phpstan": "^1.12.32", "phpstan/phpstan-strict-rules": "^1.6.2", - "symfony/var-dumper": "^7.2.6", + "symfony/var-dumper": "^7.3.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -4308,7 +4310,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.3.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.2" }, "funding": [ { @@ -4324,7 +4326,7 @@ "type": "github" } ], - "time": "2025-05-08T08:14:37+00:00" + "time": "2025-10-18T11:10:27+00:00" }, { "name": "nwidart/laravel-modules", @@ -5010,16 +5012,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.10", + "version": "v0.12.14", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22" + "reference": "95c29b3756a23855a30566b745d218bee690bef2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6e80abe6f2257121f1eb9a4c55bf29d921025b22", - "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/95c29b3756a23855a30566b745d218bee690bef2", + "reference": "95c29b3756a23855a30566b745d218bee690bef2", "shasum": "" }, "require": { @@ -5034,11 +5036,12 @@ "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" }, "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ @@ -5082,9 +5085,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.10" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.14" }, - "time": "2025-08-04T12:39:37+00:00" + "time": "2025-10-27T17:15:31+00:00" }, { "name": "ralouphie/getallheaders", @@ -5208,20 +5211,20 @@ }, { "name": "ramsey/uuid", - "version": "4.9.0", + "version": "4.9.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0" + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440", + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -5280,9 +5283,9 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.0" + "source": "https://github.com/ramsey/uuid/tree/4.9.1" }, - "time": "2025-06-25T14:20:11+00:00" + "time": "2025-09-04T20:59:21+00:00" }, { "name": "robloach/component-installer", @@ -5730,16 +5733,16 @@ }, { "name": "spatie/laravel-backup", - "version": "9.3.4", + "version": "9.3.6", "source": { "type": "git", "url": "https://github.com/spatie/laravel-backup.git", - "reference": "707e27eb1746296ac7e111179ec5da842f64e235" + "reference": "d378a07b580aa8bf440b50decdbab7b5d6f63c46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/707e27eb1746296ac7e111179ec5da842f64e235", - "reference": "707e27eb1746296ac7e111179ec5da842f64e235", + "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/d378a07b580aa8bf440b50decdbab7b5d6f63c46", + "reference": "d378a07b580aa8bf440b50decdbab7b5d6f63c46", "shasum": "" }, "require": { @@ -5767,7 +5770,7 @@ "league/flysystem-aws-s3-v3": "^2.0|^3.0", "mockery/mockery": "^1.4", "orchestra/testbench": "^8.0|^9.0|^10.0", - "pestphp/pest": "^1.20|^2.0|^3.0", + "pestphp/pest": "^1.20|^2.0|^3.0|^4.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.1", @@ -5814,7 +5817,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-backup/issues", - "source": "https://github.com/spatie/laravel-backup/tree/9.3.4" + "source": "https://github.com/spatie/laravel-backup/tree/9.3.6" }, "funding": [ { @@ -5826,7 +5829,7 @@ "type": "other" } ], - "time": "2025-07-25T07:51:20+00:00" + "time": "2025-11-05T11:25:01+00:00" }, { "name": "spatie/laravel-db-snapshots", @@ -6266,16 +6269,16 @@ }, { "name": "symfony/console", - "version": "v7.3.3", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7" + "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", - "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", + "url": "https://api.github.com/repos/symfony/console/zipball/c28ad91448f86c5f6d9d2c70f0cf68bf135f252a", + "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a", "shasum": "" }, "require": { @@ -6340,7 +6343,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.3" + "source": "https://github.com/symfony/console/tree/v7.3.6" }, "funding": [ { @@ -6360,20 +6363,20 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-11-04T01:21:42+00:00" }, { "name": "symfony/css-selector", - "version": "v7.3.0", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + "reference": "84321188c4754e64273b46b406081ad9b18e8614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/84321188c4754e64273b46b406081ad9b18e8614", + "reference": "84321188c4754e64273b46b406081ad9b18e8614", "shasum": "" }, "require": { @@ -6409,7 +6412,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + "source": "https://github.com/symfony/css-selector/tree/v7.3.6" }, "funding": [ { @@ -6420,12 +6423,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2025-10-29T17:24:25+00:00" }, { "name": "symfony/deprecation-contracts", @@ -6496,16 +6503,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.3.2", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3" + "reference": "bbe40bfab84323d99dab491b716ff142410a92a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0b31a944fcd8759ae294da4d2808cbc53aebd0c3", - "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/bbe40bfab84323d99dab491b716ff142410a92a8", + "reference": "bbe40bfab84323d99dab491b716ff142410a92a8", "shasum": "" }, "require": { @@ -6553,7 +6560,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.3.2" + "source": "https://github.com/symfony/error-handler/tree/v7.3.6" }, "funding": [ { @@ -6573,7 +6580,7 @@ "type": "tidelift" } ], - "time": "2025-07-07T08:17:57+00:00" + "time": "2025-10-31T19:12:50+00:00" }, { "name": "symfony/event-dispatcher", @@ -6737,16 +6744,16 @@ }, { "name": "symfony/finder", - "version": "v7.3.2", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" + "reference": "9f696d2f1e340484b4683f7853b273abff94421f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", + "url": "https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f", + "reference": "9f696d2f1e340484b4683f7853b273abff94421f", "shasum": "" }, "require": { @@ -6781,7 +6788,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.3.2" + "source": "https://github.com/symfony/finder/tree/v7.3.5" }, "funding": [ { @@ -6801,20 +6808,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T13:41:35+00:00" + "time": "2025-10-15T18:45:57+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.3.3", + "version": "v7.3.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00" + "reference": "db488a62f98f7a81d5746f05eea63a74e55bb7c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7475561ec27020196c49bb7c4f178d33d7d3dc00", - "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/db488a62f98f7a81d5746f05eea63a74e55bb7c4", + "reference": "db488a62f98f7a81d5746f05eea63a74e55bb7c4", "shasum": "" }, "require": { @@ -6864,7 +6871,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.3.3" + "source": "https://github.com/symfony/http-foundation/tree/v7.3.7" }, "funding": [ { @@ -6884,20 +6891,20 @@ "type": "tidelift" } ], - "time": "2025-08-20T08:04:18+00:00" + "time": "2025-11-08T16:41:12+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.3.3", + "version": "v7.3.7", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b" + "reference": "10b8e9b748ea95fa4539c208e2487c435d3c87ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/72c304de37e1a1cec6d5d12b81187ebd4850a17b", - "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/10b8e9b748ea95fa4539c208e2487c435d3c87ce", + "reference": "10b8e9b748ea95fa4539c208e2487c435d3c87ce", "shasum": "" }, "require": { @@ -6982,7 +6989,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.3.3" + "source": "https://github.com/symfony/http-kernel/tree/v7.3.7" }, "funding": [ { @@ -7002,20 +7009,20 @@ "type": "tidelift" } ], - "time": "2025-08-29T08:23:45+00:00" + "time": "2025-11-12T11:38:40+00:00" }, { "name": "symfony/mailer", - "version": "v7.3.2", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b" + "reference": "fd497c45ba9c10c37864e19466b090dcb60a50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/d43e84d9522345f96ad6283d5dfccc8c1cfc299b", - "reference": "d43e84d9522345f96ad6283d5dfccc8c1cfc299b", + "url": "https://api.github.com/repos/symfony/mailer/zipball/fd497c45ba9c10c37864e19466b090dcb60a50ba", + "reference": "fd497c45ba9c10c37864e19466b090dcb60a50ba", "shasum": "" }, "require": { @@ -7066,7 +7073,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.2" + "source": "https://github.com/symfony/mailer/tree/v7.3.5" }, "funding": [ { @@ -7086,20 +7093,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T11:36:08+00:00" + "time": "2025-10-24T14:27:20+00:00" }, { "name": "symfony/mime", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1" + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1", + "url": "https://api.github.com/repos/symfony/mime/zipball/b1b828f69cbaf887fa835a091869e55df91d0e35", + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35", "shasum": "" }, "require": { @@ -7154,7 +7161,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.3.2" + "source": "https://github.com/symfony/mime/tree/v7.3.4" }, "funding": [ { @@ -7174,7 +7181,7 @@ "type": "tidelift" } ], - "time": "2025-07-15T13:41:35+00:00" + "time": "2025-09-16T08:38:17+00:00" }, { "name": "symfony/polyfill-ctype", @@ -7847,16 +7854,16 @@ }, { "name": "symfony/process", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "32241012d521e2e8a9d713adb0812bb773b907f1" + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1", - "reference": "32241012d521e2e8a9d713adb0812bb773b907f1", + "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b", + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b", "shasum": "" }, "require": { @@ -7888,7 +7895,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.3" + "source": "https://github.com/symfony/process/tree/v7.3.4" }, "funding": [ { @@ -7908,20 +7915,20 @@ "type": "tidelift" } ], - "time": "2025-08-18T09:42:54+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/routing", - "version": "v7.3.2", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4" + "reference": "c97abe725f2a1a858deca629a6488c8fc20c3091" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/7614b8ca5fa89b9cd233e21b627bfc5774f586e4", - "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4", + "url": "https://api.github.com/repos/symfony/routing/zipball/c97abe725f2a1a858deca629a6488c8fc20c3091", + "reference": "c97abe725f2a1a858deca629a6488c8fc20c3091", "shasum": "" }, "require": { @@ -7973,7 +7980,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.3.2" + "source": "https://github.com/symfony/routing/tree/v7.3.6" }, "funding": [ { @@ -7993,20 +8000,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T11:36:08+00:00" + "time": "2025-11-05T07:57:47+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -8060,7 +8067,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -8071,25 +8078,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-25T09:37:31+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c" + "reference": "f96476035142921000338bad71e5247fbc138872" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", + "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872", + "reference": "f96476035142921000338bad71e5247fbc138872", "shasum": "" }, "require": { @@ -8104,7 +8115,6 @@ }, "require-dev": { "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", @@ -8147,7 +8157,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.3" + "source": "https://github.com/symfony/string/tree/v7.3.4" }, "funding": [ { @@ -8167,20 +8177,20 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-09-11T14:36:48+00:00" }, { "name": "symfony/translation", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d" + "reference": "ec25870502d0c7072d086e8ffba1420c85965174" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d", + "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174", + "reference": "ec25870502d0c7072d086e8ffba1420c85965174", "shasum": "" }, "require": { @@ -8247,7 +8257,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.3" + "source": "https://github.com/symfony/translation/tree/v7.3.4" }, "funding": [ { @@ -8267,20 +8277,20 @@ "type": "tidelift" } ], - "time": "2025-08-01T21:02:37+00:00" + "time": "2025-09-07T11:39:36+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { @@ -8329,7 +8339,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { @@ -8340,12 +8350,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-27T08:32:26+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/uid", @@ -8423,16 +8437,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.3.3", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f" + "reference": "476c4ae17f43a9a36650c69879dcf5b1e6ae724d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", - "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/476c4ae17f43a9a36650c69879dcf5b1e6ae724d", + "reference": "476c4ae17f43a9a36650c69879dcf5b1e6ae724d", "shasum": "" }, "require": { @@ -8486,7 +8500,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.3" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.5" }, "funding": [ { @@ -8506,7 +8520,7 @@ "type": "tidelift" } ], - "time": "2025-08-13T11:49:31+00:00" + "time": "2025-09-27T09:00:46+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -8776,64 +8790,6 @@ ], "time": "2024-11-21T01:49:47+00:00" }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" - }, { "name": "wikimedia/composer-merge-plugin", "version": "v2.1.0", @@ -9125,16 +9081,16 @@ }, { "name": "brianium/paratest", - "version": "v7.12.0", + "version": "v7.14.2", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "6a34ddb12a3bd5bd07d831ce95f111087f3bcbd8" + "reference": "de06de1ae1203b11976c6ca01d6a9081c8b33d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/6a34ddb12a3bd5bd07d831ce95f111087f3bcbd8", - "reference": "6a34ddb12a3bd5bd07d831ce95f111087f3bcbd8", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/de06de1ae1203b11976c6ca01d6a9081c8b33d45", + "reference": "de06de1ae1203b11976c6ca01d6a9081c8b33d45", "shasum": "" }, "require": { @@ -9145,24 +9101,23 @@ "fidry/cpu-core-counter": "^1.3.0", "jean85/pretty-package-versions": "^2.1.1", "php": "~8.3.0 || ~8.4.0 || ~8.5.0", - "phpunit/php-code-coverage": "^12.3.2", + "phpunit/php-code-coverage": "^12.4.0", "phpunit/php-file-iterator": "^6", "phpunit/php-timer": "^8", - "phpunit/phpunit": "^12.3.6", + "phpunit/phpunit": "^12.4.1", "sebastian/environment": "^8.0.3", - "symfony/console": "^6.4.20 || ^7.3.2", - "symfony/process": "^6.4.20 || ^7.3.0" + "symfony/console": "^6.4.20 || ^7.3.4", + "symfony/process": "^6.4.20 || ^7.3.4" }, "require-dev": { - "doctrine/coding-standard": "^13.0.1", + "doctrine/coding-standard": "^14.0.0", "ext-pcntl": "*", "ext-pcov": "*", "ext-posix": "*", - "phpstan/phpstan": "^2.1.22", + "phpstan/phpstan": "^2.1.31", "phpstan/phpstan-deprecation-rules": "^2.0.3", "phpstan/phpstan-phpunit": "^2.0.7", - "phpstan/phpstan-strict-rules": "^2.0.6", - "squizlabs/php_codesniffer": "^3.13.2", + "phpstan/phpstan-strict-rules": "^2.0.7", "symfony/filesystem": "^6.4.13 || ^7.3.2" }, "bin": [ @@ -9203,7 +9158,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.12.0" + "source": "https://github.com/paratestphp/paratest/tree/v7.14.2" }, "funding": [ { @@ -9215,7 +9170,7 @@ "type": "paypal" } ], - "time": "2025-08-29T05:28:31+00:00" + "time": "2025-10-24T07:20:53+00:00" }, { "name": "composer/class-map-generator", @@ -9540,6 +9495,47 @@ }, "time": "2025-04-30T06:54:44+00:00" }, + { + "name": "iamcal/sql-parser", + "version": "v0.6", + "source": { + "type": "git", + "url": "https://github.com/iamcal/SQLParser.git", + "reference": "947083e2dca211a6f12fb1beb67a01e387de9b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/iamcal/SQLParser/zipball/947083e2dca211a6f12fb1beb67a01e387de9b62", + "reference": "947083e2dca211a6f12fb1beb67a01e387de9b62", + "shasum": "" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^1.0", + "phpunit/phpunit": "^5|^6|^7|^8|^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "iamcal\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cal Henderson", + "email": "cal@iamcal.com" + } + ], + "description": "MySQL schema parser", + "support": { + "issues": "https://github.com/iamcal/SQLParser/issues", + "source": "https://github.com/iamcal/SQLParser/tree/v0.6" + }, + "time": "2025-03-17T16:59:46+00:00" + }, { "name": "jean85/pretty-package-versions", "version": "2.1.1", @@ -9600,6 +9596,96 @@ }, "time": "2025-03-19T14:43:43+00:00" }, + { + "name": "larastan/larastan", + "version": "v3.8.0", + "source": { + "type": "git", + "url": "https://github.com/larastan/larastan.git", + "reference": "d13ef96d652d1b2a8f34f1760ba6bf5b9c98112e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larastan/larastan/zipball/d13ef96d652d1b2a8f34f1760ba6bf5b9c98112e", + "reference": "d13ef96d652d1b2a8f34f1760ba6bf5b9c98112e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "iamcal/sql-parser": "^0.6.0", + "illuminate/console": "^11.44.2 || ^12.4.1", + "illuminate/container": "^11.44.2 || ^12.4.1", + "illuminate/contracts": "^11.44.2 || ^12.4.1", + "illuminate/database": "^11.44.2 || ^12.4.1", + "illuminate/http": "^11.44.2 || ^12.4.1", + "illuminate/pipeline": "^11.44.2 || ^12.4.1", + "illuminate/support": "^11.44.2 || ^12.4.1", + "php": "^8.2", + "phpstan/phpstan": "^2.1.29" + }, + "require-dev": { + "doctrine/coding-standard": "^13", + "laravel/framework": "^11.44.2 || ^12.7.2", + "mockery/mockery": "^1.6.12", + "nikic/php-parser": "^5.4", + "orchestra/canvas": "^v9.2.2 || ^10.0.1", + "orchestra/testbench-core": "^9.12.0 || ^10.1", + "phpstan/phpstan-deprecation-rules": "^2.0.1", + "phpunit/phpunit": "^10.5.35 || ^11.5.15" + }, + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench", + "phpmyadmin/sql-parser": "Install to enable Larastan's optional phpMyAdmin-based SQL parser automatically" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Larastan\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Can Vural", + "email": "can9119@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "support": { + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v3.8.0" + }, + "funding": [ + { + "url": "https://github.com/canvural", + "type": "github" + } + ], + "time": "2025-10-27T23:09:14+00:00" + }, { "name": "mockery/mockery", "version": "1.6.12", @@ -9745,41 +9831,41 @@ }, { "name": "pestphp/pest", - "version": "v4.0.4", + "version": "v4.1.3", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "47fb1d77631d608022cc7af96cac90ac741c8394" + "reference": "477d20a54fd9329ddfb0f8d4eb90dca7bc81b027" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/47fb1d77631d608022cc7af96cac90ac741c8394", - "reference": "47fb1d77631d608022cc7af96cac90ac741c8394", + "url": "https://api.github.com/repos/pestphp/pest/zipball/477d20a54fd9329ddfb0f8d4eb90dca7bc81b027", + "reference": "477d20a54fd9329ddfb0f8d4eb90dca7bc81b027", "shasum": "" }, "require": { - "brianium/paratest": "^7.11.2", + "brianium/paratest": "^7.14.0", "nunomaduro/collision": "^8.8.2", "nunomaduro/termwind": "^2.3.1", "pestphp/pest-plugin": "^4.0.0", "pestphp/pest-plugin-arch": "^4.0.0", "pestphp/pest-plugin-mutate": "^4.0.1", - "pestphp/pest-plugin-profanity": "^4.0.1", + "pestphp/pest-plugin-profanity": "^4.1.0", "php": "^8.3.0", - "phpunit/phpunit": "^12.3.7", - "symfony/process": "^7.3.0" + "phpunit/phpunit": "^12.4.1", + "symfony/process": "^7.3.4" }, "conflict": { "filp/whoops": "<2.18.3", - "phpunit/phpunit": ">12.3.7", + "phpunit/phpunit": ">12.4.1", "sebastian/exporter": "<7.0.0", "webmozart/assert": "<1.11.0" }, "require-dev": { "pestphp/pest-dev-tools": "^4.0.0", - "pestphp/pest-plugin-browser": "^4.0.2", + "pestphp/pest-plugin-browser": "^4.1.1", "pestphp/pest-plugin-type-coverage": "^4.0.2", - "psy/psysh": "^0.12.10" + "psy/psysh": "^0.12.12" }, "bin": [ "bin/pest" @@ -9845,7 +9931,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v4.0.4" + "source": "https://github.com/pestphp/pest/tree/v4.1.3" }, "funding": [ { @@ -9857,7 +9943,7 @@ "type": "github" } ], - "time": "2025-08-28T18:19:42+00:00" + "time": "2025-10-29T22:45:27+00:00" }, { "name": "pestphp/pest-plugin", @@ -10151,16 +10237,16 @@ }, { "name": "pestphp/pest-plugin-profanity", - "version": "v4.0.1", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest-plugin-profanity.git", - "reference": "823d5d8ae07a265c70f5e1a9ce50639543b0bf11" + "reference": "c37e5e2c7136ee4eae12082e7952332bc1c6600a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-profanity/zipball/823d5d8ae07a265c70f5e1a9ce50639543b0bf11", - "reference": "823d5d8ae07a265c70f5e1a9ce50639543b0bf11", + "url": "https://api.github.com/repos/pestphp/pest-plugin-profanity/zipball/c37e5e2c7136ee4eae12082e7952332bc1c6600a", + "reference": "c37e5e2c7136ee4eae12082e7952332bc1c6600a", "shasum": "" }, "require": { @@ -10201,9 +10287,9 @@ "unit" ], "support": { - "source": "https://github.com/pestphp/pest-plugin-profanity/tree/v4.0.1" + "source": "https://github.com/pestphp/pest-plugin-profanity/tree/v4.2.0" }, - "time": "2025-08-20T12:58:03+00:00" + "time": "2025-10-28T23:14:11+00:00" }, { "name": "phar-io/manifest", @@ -10573,16 +10659,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8" + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b9e61a61e39e02dd90944e9115241c7f7e76bfd8", - "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { @@ -10614,40 +10700,146 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.2.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" + }, + "time": "2025-08-30T15:50:23+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "2.1.32", + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", + "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2025-11-11T15:18:17+00:00" + }, + { + "name": "phpstan/phpstan-phpunit", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-phpunit.git", + "reference": "2fe9fbeceaf76dd1ebaa7bbbb25e2fb5e59db2fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/2fe9fbeceaf76dd1ebaa7bbbb25e2fb5e59db2fe", + "reference": "2fe9fbeceaf76dd1ebaa7bbbb25e2fb5e59db2fe", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.1.32" + }, + "conflict": { + "phpunit/phpunit": "<7.0" + }, + "require-dev": { + "nikic/php-parser": "^5", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPUnit extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-phpunit/issues", + "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.8" }, - "time": "2025-07-13T07:04:09+00:00" + "time": "2025-11-11T07:55:22+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "12.3.4", + "version": "12.4.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7ad0e9bdc72b147600badccd694a2e57ffc9297a" + "reference": "67e8aed88f93d0e6e1cb7effe1a2dfc2fee6022c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7ad0e9bdc72b147600badccd694a2e57ffc9297a", - "reference": "7ad0e9bdc72b147600badccd694a2e57ffc9297a", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/67e8aed88f93d0e6e1cb7effe1a2dfc2fee6022c", + "reference": "67e8aed88f93d0e6e1cb7effe1a2dfc2fee6022c", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.4.0", + "nikic/php-parser": "^5.6.1", "php": ">=8.3", "phpunit/php-file-iterator": "^6.0", "phpunit/php-text-template": "^5.0", "sebastian/complexity": "^5.0", - "sebastian/environment": "^8.0", + "sebastian/environment": "^8.0.3", "sebastian/lines-of-code": "^4.0", "sebastian/version": "^6.0", "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^12.1" + "phpunit/phpunit": "^12.3.7" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10656,7 +10848,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "12.3.x-dev" + "dev-main": "12.4.x-dev" } }, "autoload": { @@ -10685,7 +10877,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.4" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.4.0" }, "funding": [ { @@ -10705,7 +10897,7 @@ "type": "tidelift" } ], - "time": "2025-08-29T11:32:44+00:00" + "time": "2025-09-24T13:44:41+00:00" }, { "name": "phpunit/php-file-iterator", @@ -10954,16 +11146,16 @@ }, { "name": "phpunit/phpunit", - "version": "12.3.7", + "version": "12.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b8fa997c49682979ad6bfaa0d7fb25f54954965e" + "reference": "fc5413a2e6d240d2f6d9317bdf7f0a24e73de194" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b8fa997c49682979ad6bfaa0d7fb25f54954965e", - "reference": "b8fa997c49682979ad6bfaa0d7fb25f54954965e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc5413a2e6d240d2f6d9317bdf7f0a24e73de194", + "reference": "fc5413a2e6d240d2f6d9317bdf7f0a24e73de194", "shasum": "" }, "require": { @@ -10977,17 +11169,17 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.3", - "phpunit/php-code-coverage": "^12.3.3", + "phpunit/php-code-coverage": "^12.4.0", "phpunit/php-file-iterator": "^6.0.0", "phpunit/php-invoker": "^6.0.0", "phpunit/php-text-template": "^5.0.0", "phpunit/php-timer": "^8.0.0", - "sebastian/cli-parser": "^4.0.0", + "sebastian/cli-parser": "^4.2.0", "sebastian/comparator": "^7.1.3", "sebastian/diff": "^7.0.0", "sebastian/environment": "^8.0.3", - "sebastian/exporter": "^7.0.0", - "sebastian/global-state": "^8.0.0", + "sebastian/exporter": "^7.0.2", + "sebastian/global-state": "^8.0.2", "sebastian/object-enumerator": "^7.0.0", "sebastian/type": "^6.0.3", "sebastian/version": "^6.0.0", @@ -10999,7 +11191,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "12.3-dev" + "dev-main": "12.4-dev" } }, "autoload": { @@ -11031,7 +11223,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.3.7" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.4.1" }, "funding": [ { @@ -11055,20 +11247,20 @@ "type": "tidelift" } ], - "time": "2025-08-28T05:15:46+00:00" + "time": "2025-10-09T14:08:29+00:00" }, { "name": "sebastian/cli-parser", - "version": "4.0.0", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "6d584c727d9114bcdc14c86711cd1cad51778e7c" + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/6d584c727d9114bcdc14c86711cd1cad51778e7c", - "reference": "6d584c727d9114bcdc14c86711cd1cad51778e7c", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04", + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04", "shasum": "" }, "require": { @@ -11080,7 +11272,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "4.2-dev" } }, "autoload": { @@ -11104,15 +11296,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" } ], - "time": "2025-02-07T04:53:50+00:00" + "time": "2025-09-14T09:36:45+00:00" }, { "name": "sebastian/comparator", @@ -11409,16 +11613,16 @@ }, { "name": "sebastian/exporter", - "version": "7.0.0", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "76432aafc58d50691a00d86d0632f1217a47b688" + "reference": "016951ae10980765e4e7aee491eb288c64e505b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/76432aafc58d50691a00d86d0632f1217a47b688", - "reference": "76432aafc58d50691a00d86d0632f1217a47b688", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7", + "reference": "016951ae10980765e4e7aee491eb288c64e505b7", "shasum": "" }, "require": { @@ -11475,15 +11679,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2025-02-07T04:56:42+00:00" + "time": "2025-09-24T06:16:11+00:00" }, { "name": "sebastian/global-state", @@ -12090,6 +12306,64 @@ } ], "time": "2024-03-03T12:36:25+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.12.1", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", + "php": "^7.2 || ^8.0" + }, + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.12.1" + }, + "time": "2025-10-29T15:56:20+00:00" } ], "aliases": [], diff --git a/packages/WebDevTools/Laravel/Presenters/Bootstrap4NavbarPresenter.php b/packages/WebDevTools/Laravel/Presenters/Bootstrap4NavbarPresenter.php deleted file mode 100755 index 67546676..00000000 --- a/packages/WebDevTools/Laravel/Presenters/Bootstrap4NavbarPresenter.php +++ /dev/null @@ -1,156 +0,0 @@ -' . PHP_EOL; - } - - /** - * Get close tag wrapper. - * - * @return string - */ - public function getCloseTagWrapper() - { - return PHP_EOL . '' . PHP_EOL; - } - - /** - * Get menu tag without dropdown wrapper. - * - * @param \Nwidart\Menus\MenuItem $item - * @param string $itemClass - * - * @return string - */ - public function getMenuWithoutDropdownWrapper($item, $itemClass = 'nav-item nav-link') - { - $class = $itemClass . ' ' . $this->getItemClasses($item) . $this->getActiveClass($item); - return 'getAttributes() . - '>' . - trim($item->getIcon() . ' ' . $item->title) . - ''; - } - - /** - * Get divider tag wrapper. - * - * @return string - */ - public function getDividerWrapper() - { - return ''; - } - - /** - * Get divider tag wrapper. - * - * @param \Nwidart\Menus\MenuItem $item - * - * @return mixed - */ - public function getHeaderWrapper($item) - { - return ''; - } - - /** - * Get menu tag with dropdown wrapper. - * - * @param \Nwidart\Menus\MenuItem $item - * - * @return string - */ - public function getMenuWithDropDownWrapper($item) - { - $class = 'nav-link dropdown-toggle ' . $this->getItemClasses($item); - return ''; - } - - /** - * Get child menu items. - * - * @param \Nwidart\Menus\MenuItem $item - * - * @return string - */ - public function getChildMenuItems(MenuItem $item) - { - $results = ''; - foreach ($item->getChilds() as $child) { - if ($child->hidden()) { - continue; - } - - if ($child->isHeader()) { - $results .= $this->getHeaderWrapper($child); - } elseif ($child->isDivider()) { - $results .= $this->getDividerWrapper(); - } else { - $results .= $this->getMenuWithoutDropdownWrapper($child, 'dropdown-item'); - } - } - - return $results; - } - - /** - * Determine whether the include the active class for the nav item. - * - * @param \Nwidart\Menus\MenuItem $item - * - * @return string - */ - protected function getActiveClass(MenuItem $item) - { - return $item->isActive() || $item->hasActiveOnChild() ? ' active' : ''; - } - - /** - * Get the item classes (and remove them from the item's attributes). - * - * @param \Nwidart\Menus\MenuItem $item - * - * @return string - */ - protected function getItemClasses(MenuItem $item) - { - if (isset($item->attributes['class'])) { - $class = $item->attributes['class']; - unset($item->attributes['class']); - } else { - $class = ''; - } - - return $class; - } -} diff --git a/packages/WebDevTools/Laravel/Presenters/Bootstrap4NavbarRightPresenter.php b/packages/WebDevTools/Laravel/Presenters/Bootstrap4NavbarRightPresenter.php deleted file mode 100755 index d2b284bc..00000000 --- a/packages/WebDevTools/Laravel/Presenters/Bootstrap4NavbarRightPresenter.php +++ /dev/null @@ -1,16 +0,0 @@ -' . PHP_EOL; - } -} diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon new file mode 100644 index 00000000..462364cc --- /dev/null +++ b/phpstan-baseline.neon @@ -0,0 +1,7651 @@ +parameters: + ignoreErrors: + - + message: '#^Method App\\Auth\\UserProvider\:\:checkUserStatus\(\) has parameter \$user with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Auth/UserProvider.php + + - + message: '#^Method App\\Auth\\UserProvider\:\:retrieveByCredentials\(\) has parameter \$credentials with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Auth/UserProvider.php + + - + message: '#^Parameter \#2 \$title of static method Package\\Notifications\\NotificationHandler\:\:error\(\) expects null, string given\.$#' + identifier: argument.type + count: 1 + path: app/Auth/UserProvider.php + + - + message: '#^Property App\\Console\\Kernel\:\:\$commands type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Console/Kernel.php + + - + message: '#^Method App\\Exceptions\\Handler\:\:render\(\) should return Illuminate\\Http\\Response but returns Symfony\\Component\\HttpFoundation\\Response\.$#' + identifier: return.type + count: 1 + path: app/Exceptions/Handler.php + + - + message: '#^PHPDoc type array of property App\\Exceptions\\Handler\:\:\$dontReport is not covariant with PHPDoc type array\\> of overridden property Illuminate\\Foundation\\Exceptions\\Handler\:\:\$dontReport\.$#' + identifier: property.phpDocType + count: 1 + path: app/Exceptions/Handler.php + + - + message: '#^Property App\\Exceptions\\Handler\:\:\$dontReport type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Exceptions/Handler.php + + - + message: '#^Invalid array key type float\.$#' + identifier: offsetAccess.invalidOffset + count: 2 + path: app/Helpers/File.php + + - + message: '#^Method App\\Helpers\\MonologLogFmtFormatter\:\:convertToString\(\) has parameter \$data with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Helpers/MonologLogFmtFormatter.php + + - + message: '#^Method App\\Helpers\\MonologLogFmtFormatter\:\:isValidIdent\(\) has parameter \$val with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Helpers/MonologLogFmtFormatter.php + + - + message: '#^Method App\\Helpers\\MonologLogFmtFormatter\:\:stringifyVal\(\) has parameter \$val with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Helpers/MonologLogFmtFormatter.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Auth/LoginController.php + + - + message: '#^Method App\\Http\\Controllers\\Auth\\LoginController\:\:logout\(\) should return Illuminate\\Http\\Response but returns Illuminate\\Http\\JsonResponse\|Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Auth/LoginController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Auth/ResetPasswordController.php + + - + message: '#^Method App\\Http\\Controllers\\Auth\\ResetPasswordController\:\:sendResetResponse\(\) should return Illuminate\\Http\\RedirectResponse but returns Illuminate\\Http\\JsonResponse\|Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Auth/ResetPasswordController.php + + - + message: '#^Call to an undefined method App\\Models\\Awards\\Award\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Awards/AwardController.php + + - + message: '#^Call to an undefined method App\\Models\\Awards\\Award\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Awards/AwardController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 6 + path: app/Http/Controllers/Awards/AwardController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\AwardController\:\:approve\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/AwardController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\AwardController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/AwardController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\AwardController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/AwardController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$award_id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Call to an undefined method App\\Models\\Awards\\Season\|Illuminate\\Database\\Eloquent\\Collection\\:\:nominations\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 4 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:approve\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:approve\(\) has parameter \$seasonId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:approve\(\) should return Illuminate\\Http\\RedirectResponse but returns Illuminate\\Http\\JsonResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:destroy\(\) has parameter \$seasonId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:destroy\(\) should return Illuminate\\Http\\RedirectResponse but returns Illuminate\\Http\\JsonResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:getNomination\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:getNomination\(\) has parameter \$seasonId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:index\(\) has parameter \$seasonId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\NominationController\:\:store\(\) has parameter \$seasonId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/NominationController.php + + - + message: '#^Access to an undefined property App\\Models\\Awards\\Season\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$status\.$#' + identifier: property.notFound + count: 3 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Call to an undefined method App\\Models\\Awards\\Award\|Illuminate\\Database\\Eloquent\\Collection\\:\:userHasVoted\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Call to an undefined method App\\Models\\Awards\\Season\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Call to an undefined method App\\Models\\Awards\\Season\|Illuminate\\Database\\Eloquent\\Collection\\:\:nominations\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Call to an undefined method App\\Models\\Awards\\Season\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Collection\\|Illuminate\\Database\\Eloquent\\Model\:\:votes\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 11 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Cannot call method isAdmin\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\SeasonController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\SeasonController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\SeasonController\:\:updateStatus\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\SeasonController\:\:updateStatus\(\) with return type void returns Illuminate\\Http\\JsonResponse but should not return anything\.$#' + identifier: return.void + count: 2 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\SeasonController\:\:view\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\SeasonController\:\:view\(\) should return \$this\(App\\Http\\Controllers\\Awards\\SeasonController\) but returns Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\SeasonController\:\:view\(\) should return \$this\(App\\Http\\Controllers\\Awards\\SeasonController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Method App\\Http\\Controllers\\Awards\\SeasonController\:\:vote\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Awards/SeasonController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 3 + path: app/Http/Controllers/BackupController.php + + - + message: '#^Method App\\Http\\Controllers\\BackupController\:\:ajaxError\(\) has parameter \$errorCode with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/BackupController.php + + - + message: '#^Method App\\Http\\Controllers\\BackupController\:\:ajaxError\(\) has parameter \$errorText with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/BackupController.php + + - + message: '#^Method App\\Http\\Controllers\\BackupController\:\:ajaxResponse\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/BackupController.php + + - + message: '#^Method App\\Http\\Controllers\\BackupController\:\:ajaxResponse\(\) has parameter \$headers with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/BackupController.php + + - + message: '#^Method App\\Http\\Controllers\\BackupController\:\:ajaxResponse\(\) has parameter \$text with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/BackupController.php + + - + message: '#^Method App\\Http\\Controllers\\BackupController\:\:download\(\) has parameter \$filename with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/BackupController.php + + - + message: '#^Access to an undefined property App\\Models\\Committee\\Role\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$id\.$#' + identifier: property.notFound + count: 2 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Access to an undefined property App\\Models\\Committee\\Role\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$name\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Call to an undefined method App\\Models\\Committee\\Role\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Call to an undefined method App\\Models\\Committee\\Role\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 3 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Method App\\Http\\Controllers\\CommitteeController\:\:destroy\(\) should return Illuminate\\Http\\Response but returns Illuminate\\Http\\JsonResponse\.$#' + identifier: return.type + count: 2 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Method App\\Http\\Controllers\\CommitteeController\:\:store\(\) should return Illuminate\\Http\\Response but returns Illuminate\\Http\\JsonResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Method App\\Http\\Controllers\\CommitteeController\:\:update\(\) should return Illuminate\\Http\\Response but returns Illuminate\\Http\\JsonResponse\.$#' + identifier: return.type + count: 2 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Method App\\Http\\Controllers\\CommitteeController\:\:view\(\) has invalid return type App\\Http\\Controllers\\Response\.$#' + identifier: class.notFound + count: 1 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Method App\\Http\\Controllers\\CommitteeController\:\:view\(\) should return App\\Http\\Controllers\\Response but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/CommitteeController.php + + - + message: '#^Cannot access property \$email on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Contact/NearMissController.php + + - + message: '#^Cannot access property \$name on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Contact/NearMissController.php + + - + message: '#^Cannot call method getName\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Http/Controllers/Controller.php + + - + message: '#^Cannot call method parameters\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Controller.php + + - + message: '#^Method App\\Http\\Controllers\\Controller\:\:ajaxError\(\) has parameter \$errorCode with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Controller.php + + - + message: '#^Method App\\Http\\Controllers\\Controller\:\:ajaxError\(\) has parameter \$errorText with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Controller.php + + - + message: '#^Method App\\Http\\Controllers\\Controller\:\:ajaxResponse\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Controller.php + + - + message: '#^Method App\\Http\\Controllers\\Controller\:\:ajaxResponse\(\) has parameter \$headers with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Controller.php + + - + message: '#^Method App\\Http\\Controllers\\Controller\:\:ajaxResponse\(\) has parameter \$text with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Controller.php + + - + message: '#^Method App\\Http\\Controllers\\Controller\:\:authorizeGate\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Controller.php + + - + message: '#^Method App\\Http\\Controllers\\Controller\:\:authorizeGate\(\) has parameter \$action with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Controller.php + + - + message: '#^Method App\\Http\\Controllers\\Controller\:\:checkPage\(\) has parameter \$paginator with generic class Illuminate\\Pagination\\LengthAwarePaginator but does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: app/Http/Controllers/Controller.php + + - + message: '#^Access to an undefined property App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Access to an undefined property App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$nominations\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Access to an undefined property App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$positions\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#' + identifier: property.notFound + count: 2 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Call to an undefined method App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:canModifyResults\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Call to an undefined method App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Call to an undefined method App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:getManifestoPath\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Call to an undefined method App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 4 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:create\(\) should return \$this\(App\\Http\\Controllers\\Elections\\ElectionController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:determineElectionPositions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:edit\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:edit\(\) should return Illuminate\\Http\\Response but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:elect\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:index\(\) should return \$this\(App\\Http\\Controllers\\Elections\\ElectionController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:view\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\ElectionController\:\:view\(\) should return \$this\(App\\Http\\Controllers\\Elections\\ElectionController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Elections/ElectionController.php + + - + message: '#^Access to an undefined property App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Access to an undefined property App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$positions\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Call to an undefined method App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:canModifyNominations\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Call to an undefined method App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:getManifestoPath\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Call to an undefined method App\\Models\\Elections\\Election\|Illuminate\\Database\\Eloquent\\Collection\\:\:nominations\(\)\.$#' + identifier: method.notFound + count: 3 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Model\:\:getManifestoName\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Model\:\:getManifestoPath\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 4 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Cannot call method getManifestoPath\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\NominationController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\NominationController\:\:destroy\(\) has parameter \$nominationId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\NominationController\:\:manifesto\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\NominationController\:\:manifesto\(\) has parameter \$nominationId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Method App\\Http\\Controllers\\Elections\\NominationController\:\:store\(\) has parameter \$electionId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Parameter \#1 \$content of function response expects array\|Illuminate\\Contracts\\View\\View\|string\|null, string\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Elections/NominationController.php + + - + message: '#^Access to an undefined property App\\Models\\Equipment\\Breakage\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$extension\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$mime\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Call to an undefined method App\\Models\\Equipment\\Breakage\|Illuminate\\Database\\Eloquent\\Collection\\:\:images\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Call to an undefined method App\\Models\\Equipment\\Breakage\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Model\:\:getImagePath\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Cannot access property \$email on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 5 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Cannot access property \$username on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Method App\\Http\\Controllers\\Equipment\\RepairsController\:\:index\(\) should return \$this\(App\\Http\\Controllers\\Equipment\\RepairsController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Method App\\Http\\Controllers\\Equipment\\RepairsController\:\:streamImage\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Method App\\Http\\Controllers\\Equipment\\RepairsController\:\:streamImage\(\) has parameter \$imageId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Method App\\Http\\Controllers\\Equipment\\RepairsController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Method App\\Http\\Controllers\\Equipment\\RepairsController\:\:updateBreakageStatus\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Method App\\Http\\Controllers\\Equipment\\RepairsController\:\:view\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Parameter \#1 \$breakage of method App\\Http\\Controllers\\Equipment\\RepairsController\:\:updateBreakageStatus\(\) expects App\\Models\\Equipment\\Breakage, App\\Models\\Equipment\\Breakage\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Parameter \#1 \$content of function response expects array\|Illuminate\\Contracts\\View\\View\|string\|null, string\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Equipment/RepairsController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#' + identifier: property.notFound + count: 2 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Call to an undefined method App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\\:\:crew\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Model\:\:isGuest\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Cannot access property \$forename on App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 13 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Cannot access property \$id on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Cannot call method isCrew\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Cannot call method isTracked\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Cannot call method notify\(\) on App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Cannot call method notify\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Cannot call method notify\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\CrewController\:\:destroy\(\) has parameter \$crewId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\CrewController\:\:destroy\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\CrewController\:\:store\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\CrewController\:\:toggleVolunteer\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\CrewController\:\:update\(\) has parameter \$crewId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\CrewController\:\:update\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\CrewController\:\:update\(\) should return Illuminate\\Http\\JsonResponse but return statement is missing\.$#' + identifier: return.missing + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Parameter \#1 \$crew of class App\\Notifications\\Events\\UserHasVolunteered constructor expects App\\Models\\Events\\Crew, Illuminate\\Database\\Eloquent\\Model given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Parameter \#1 \$event of method App\\Http\\Controllers\\Events\\CrewController\:\:isGuestAction\(\) expects App\\Models\\Events\\Event, App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 2 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Parameter \#1 \$event of method App\\Http\\Controllers\\Events\\CrewController\:\:storeGuest\(\) expects App\\Models\\Events\\Event, App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Parameter \#1 \$event of method App\\Http\\Controllers\\Events\\CrewController\:\:storeMember\(\) expects App\\Models\\Events\\Event, App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Parameter \#1 \$event of method App\\Http\\Controllers\\Events\\CrewController\:\:unvolunteer\(\) expects App\\Models\\Events\\Event, App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Parameter \#1 \$event of method App\\Http\\Controllers\\Events\\CrewController\:\:volunteer\(\) expects App\\Models\\Events\\Event, App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Parameter \#2 \$crew of method App\\Http\\Controllers\\Events\\CrewController\:\:updateField\(\) expects App\\Models\\Events\\Crew, Illuminate\\Database\\Eloquent\\Model given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Parameter \#2 \$crew of method App\\Http\\Controllers\\Events\\CrewController\:\:updateGuest\(\) expects App\\Models\\Events\\Crew, Illuminate\\Database\\Eloquent\\Model given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Parameter \#2 \$crew of method App\\Http\\Controllers\\Events\\CrewController\:\:updateMember\(\) expects App\\Models\\Events\\Crew, Illuminate\\Database\\Eloquent\\Model given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/CrewController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$end\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$name\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$start\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Cannot access property \$dayOfWeek on Carbon\\Carbon\|null\.$#' + identifier: property.nonObject + count: 2 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Cannot access property \$month on Carbon\\Carbon\|null\.$#' + identifier: property.nonObject + count: 2 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Cannot access property \$year on Carbon\\Carbon\|null\.$#' + identifier: property.nonObject + count: 2 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Left side of && is always false\.$#' + identifier: booleanAnd.leftAlwaysFalse + count: 1 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\DiaryController\:\:view\(\) should return \$this\(App\\Http\\Controllers\\Events\\DiaryController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Parameter \#2 \$data of function hash expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Right side of && is always false\.$#' + identifier: booleanAnd.rightAlwaysFalse + count: 1 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Variable \$user might not be defined\.$#' + identifier: variable.undefined + count: 1 + path: app/Http/Controllers/Events/DiaryController.php + + - + message: '#^Call to an undefined method App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\\:\:emails\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Events/EmailController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Events/EmailController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EmailController\:\:store\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/EmailController.php + + - + message: '#^Access to an undefined property App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$em\.$#' + identifier: property.notFound + count: 2 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Access to an undefined property App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$type\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Call to an undefined method App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Call to an undefined method App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\\:\:hasEM\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Collection\\:\:isEvent\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:core\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:general\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:guest\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Call to function is_null\(\) with null will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Cannot access property \$email on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 8 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Cannot call method can\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Cannot call method isAdmin\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Cannot call method isMember\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Cannot call method setTime\(\) on Carbon\\Carbon\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:destroy\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:index\(\) should return \$this\(App\\Http\\Controllers\\Events\\EventController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:sendFinanceEmail\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:update\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:update\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:updateClearCrew\(\) has parameter \$mode with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:updateDetails\(\) never returns \$this\(App\\Http\\Controllers\\Events\\EventController\) so it can be removed from the return type\.$#' + identifier: return.unusedType + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:updatePaperwork\(\) has parameter \$paperwork with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:updatePaperwork\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:view\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\EventController\:\:view\(\) should return \$this\(App\\Http\\Controllers\\Events\\EventController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^PHPDoc tag @return has invalid value \(\)\: Unexpected token "\\n \* ", expected type at offset 136 on line 7$#' + identifier: phpDoc.parseError + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Parameter \#1 \$event of method App\\Http\\Controllers\\Events\\EventController\:\:updateClearCrew\(\) expects App\\Models\\Events\\Event, App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Parameter \#1 \$event of method App\\Http\\Controllers\\Events\\EventController\:\:updateDetails\(\) expects App\\Models\\Events\\Event, App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Parameter \#1 \$event of method App\\Http\\Controllers\\Events\\EventController\:\:updatePaperwork\(\) expects App\\Models\\Events\\Event, App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Parameter \#1 \$hour of method Carbon\\Traits\\Date\:\:setTime\(\) expects int, string given\.$#' + identifier: argument.type + count: 2 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Parameter \#1 \$paginator of method App\\Http\\Controllers\\Controller\:\:checkPage\(\) expects Illuminate\\Pagination\\LengthAwarePaginator, Illuminate\\Database\\Eloquent\\Builder\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Parameter \#2 \$event of class App\\Mail\\Events\\FinanceEmail constructor expects App\\Models\\Events\\Event, App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Parameter \#2 \$minute of method Carbon\\Traits\\Date\:\:setTime\(\) expects int, string given\.$#' + identifier: argument.type + count: 2 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Undefined variable\: \$event$#' + identifier: variable.undefined + count: 1 + path: app/Http/Controllers/Events/EventController.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Events/TimeController.php + + - + message: '#^Call to an undefined method App\\Models\\Events\\Event\|Illuminate\\Database\\Eloquent\\Collection\\|Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:create\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Events/TimeController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 4 + path: app/Http/Controllers/Events/TimeController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\TimeController\:\:destroy\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/TimeController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\TimeController\:\:destroy\(\) has parameter \$timeId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/TimeController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\TimeController\:\:store\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/TimeController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\TimeController\:\:update\(\) has parameter \$eventId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/TimeController.php + + - + message: '#^Method App\\Http\\Controllers\\Events\\TimeController\:\:update\(\) has parameter \$timeId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Events/TimeController.php + + - + message: '#^Method App\\Http\\Controllers\\Media\\ImageController\:\:album\(\) should return Illuminate\\Http\\Response but returns Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Media/ImageController.php + + - + message: '#^Method App\\Http\\Controllers\\Media\\ImageController\:\:index\(\) should return Illuminate\\Http\\Response but returns Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Media/ImageController.php + + - + message: '#^Method App\\Http\\Controllers\\Media\\ImageController\:\:view\(\) should return Illuminate\\Http\\Response but returns Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Media/ImageController.php + + - + message: '#^Method App\\Http\\Controllers\\Media\\VideoController\:\:index\(\) should return \$this\(App\\Http\\Controllers\\Media\\VideoController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Media/VideoController.php + + - + message: '#^Method App\\Http\\Controllers\\Media\\VideoController\:\:show\(\) has parameter \$videoId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Media/VideoController.php + + - + message: '#^Method App\\Http\\Controllers\\Media\\VideoController\:\:show\(\) should return \$this\(App\\Http\\Controllers\\Media\\VideoController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Media/VideoController.php + + - + message: '#^Negated boolean expression is always false\.$#' + identifier: booleanNot.alwaysFalse + count: 1 + path: app/Http/Controllers/Media/VideoController.php + + - + message: '#^Cannot access property \$diary_preferences on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 2 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Cannot access property \$email on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Cannot access property \$export_token on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 2 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Cannot call method hasExportToken\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Cannot call method isMember\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Cannot call method save\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Cannot call method setAvatar\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Cannot call method update\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 3 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\MemberController\:\:dash\(\) should return Illuminate\\Http\\RedirectResponse but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\MemberController\:\:membership\(\) should return \$this\(App\\Http\\Controllers\\Members\\MemberController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\MemberController\:\:profile\(\) should return \$this\(App\\Http\\Controllers\\Members\\MemberController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\MemberController\:\:removeAvatar\(\) should return Illuminate\\Http\\JsonResponse but return statement is missing\.$#' + identifier: return.missing + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\MemberController\:\:updateMemberFields\(\) has parameter \$fields with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\MemberController\:\:view\(\) has parameter \$username with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\MemberController\:\:view\(\) should return \$this\(App\\Http\\Controllers\\Members\\MemberController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Parameter \#1 \$user of method App\\Http\\Controllers\\Members\\MemberController\:\:removeAvatar\(\) expects App\\Models\\Users\\User, App\\Models\\Users\\User\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Members/MemberController.php + + - + message: '#^Call to an undefined method App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\:\:archive\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Call to an undefined method App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\:\:makeAssociate\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Call to an undefined method App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\:\:makeCommittee\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Cannot access property \$username on array\|float\|int\|string\|false\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Loose comparison using \=\= between int\<1, max\> and 0 will always evaluate to false\.$#' + identifier: equal.alwaysFalse + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:archiveUser\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:archiveUser\(\) has parameter \$userId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:createSummary\(\) should return \$this\(App\\Http\\Controllers\\Members\\UsersController\)\|Illuminate\\Http\\RedirectResponse but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:edit\(\) has parameter \$username with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:edit\(\) should return \$this\(App\\Http\\Controllers\\Members\\UsersController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:index\(\) should return \$this\(App\\Http\\Controllers\\Members\\UsersController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:store\(\) should return Illuminate\\Http\\RedirectResponse but returns \$this\(App\\Http\\Controllers\\Members\\UsersController\)\|Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 2 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:storeBulk\(\) never returns \$this\(App\\Http\\Controllers\\Members\\UsersController\) so it can be removed from the return type\.$#' + identifier: return.unusedType + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:storeSingle\(\) never returns \$this\(App\\Http\\Controllers\\Members\\UsersController\) so it can be removed from the return type\.$#' + identifier: return.unusedType + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:storeValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:update\(\) has parameter \$username with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:update\(\) should return Illuminate\\Http\\RedirectResponse but returns \$this\(App\\Http\\Controllers\\Members\\UsersController\)\|Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:updateAvatar\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:updateBulk\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:updateDetails\(\) never returns \$this\(App\\Http\\Controllers\\Members\\UsersController\) so it can be removed from the return type\.$#' + identifier: return.unusedType + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:updateRemoveAvatar\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:updateResetPassword\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:updateStatus\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Method App\\Http\\Controllers\\Members\\UsersController\:\:view\(\) has parameter \$username with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Property App\\Http\\Controllers\\Members\\UsersController\:\:\$BulkActionMap type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Property App\\Http\\Controllers\\Members\\UsersController\:\:\$BulkActions type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Members/UsersController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Category\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/CategoryController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Category\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/CategoryController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 3 + path: app/Http/Controllers/Resources/CategoryController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\CategoryController\:\:createSlug\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Resources/CategoryController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\CategoryController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/CategoryController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\CategoryController\:\:index\(\) should return \$this\(App\\Http\\Controllers\\Resources\\CategoryController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Resources/CategoryController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\CategoryController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/CategoryController.php + + - + message: '#^Access to an undefined property App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\:\:canAccess\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\:\:getFullPath\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\:\:isFile\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\:\:isIssuable\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\:\:reissue\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\:\:tags\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 4 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Cannot call method getName\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Cannot call method parameters\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#1 \$customQuery \(array\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:download\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:edit\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:edit\(\) should return \$this\(App\\Http\\Controllers\\Resources\\ResourceController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:getResourceWithAccessCheck\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:getResourceWithAccessCheck\(\) should return App\\Models\\Resources\\Resource but returns App\\Models\\Resources\\Resource\|Illuminate\\Database\\Eloquent\\Collection\\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:history\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:history\(\) should return Illuminate\\View\\View but returns Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:index\(\) should return \$this\(App\\Http\\Controllers\\Resources\\ResourceController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:issue\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:issueForm\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:issueForm\(\) should return Illuminate\\View\\View but returns Illuminate\\Http\\RedirectResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:paginatorPath\(\) has parameter \$customQuery with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:stream\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\ResourceController\:\:view\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/ResourceController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\SearchController\:\:parseSearchRequest\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Resources/SearchController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\SearchController\:\:viewResults\(\) has parameter \$category with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/SearchController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\SearchController\:\:viewResults\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/SearchController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\SearchController\:\:viewResults\(\) has parameter \$tags with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Resources/SearchController.php + + - + message: '#^Offset 1 might not exist on array\{0\: string, 1\?\: non\-empty\-string\}\.$#' + identifier: offsetAccess.notFound + count: 2 + path: app/Http/Controllers/Resources/SearchController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Tag\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/TagController.php + + - + message: '#^Call to an undefined method App\\Models\\Resources\\Tag\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Resources/TagController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 3 + path: app/Http/Controllers/Resources/TagController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\TagController\:\:createSlug\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Http/Controllers/Resources/TagController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\TagController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/TagController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\TagController\:\:index\(\) should return \$this\(App\\Http\\Controllers\\Resources\\TagController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Resources/TagController.php + + - + message: '#^Method App\\Http\\Controllers\\Resources\\TagController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Resources/TagController.php + + - + message: '#^Call to an undefined method App\\Models\\Training\\Category\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Training/CategoryController.php + + - + message: '#^Call to an undefined method App\\Models\\Training\\Category\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Training/CategoryController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\CategoryController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Training/CategoryController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\CategoryController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Training/CategoryController.php + + - + message: '#^Access to an undefined property App\\Models\\Training\\Skills\\Application\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Access to an undefined property App\\Models\\Training\\Skills\\Application\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$skill\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Access to an undefined property App\\Models\\Training\\Skills\\Application\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$skill_id\.$#' + identifier: property.notFound + count: 2 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Access to an undefined property App\\Models\\Training\\Skills\\Application\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$user\.$#' + identifier: property.notFound + count: 3 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Access to an undefined property App\\Models\\Training\\Skills\\Application\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$user_id\.$#' + identifier: property.notFound + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Call to an undefined method App\\Models\\Training\\Skills\\Application\|Illuminate\\Database\\Eloquent\\Collection\\:\:isAwarded\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Call to an undefined method App\\Models\\Training\\Skills\\Application\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot access property \$email on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Training\\Skills\\Skill\|Illuminate\\Database\\Eloquent\\Collection\\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 3 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot call method getName\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot call method getSkillLevel\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot call method hasApplicationPending\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot call method isLevelAvailable\(\) on App\\Models\\Training\\Skills\\Skill\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot call method isLevelAvailable\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot call method parameters\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Cannot call method setSkillLevel\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Comparison operation "\<\=" between 1 and null is always false\.$#' + identifier: smallerOrEqual.alwaysFalse + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#1 \$skill \(App\\Models\\Training\\Skills\\Skill\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\ApplicationController\:\:checkPage\(\) has parameter \$paginator with generic class Illuminate\\Pagination\\LengthAwarePaginator but does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\ApplicationController\:\:determineSelectableApplicationSkillLevels\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\ApplicationController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\ApplicationController\:\:view\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Parameter \#1 \$application of class App\\Mail\\Training\\Skills\\ApplicationProcessed constructor expects App\\Models\\Training\\Skills\\Application, App\\Models\\Training\\Skills\\Application\|Illuminate\\Database\\Eloquent\\Collection\ given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Parameter \#1 \$skill of class App\\Mail\\Training\\Skills\\ApplicationSubmitted constructor expects App\\Models\\Training\\Skills\\Skill, App\\Models\\Training\\Skills\\Skill\|Illuminate\\Database\\Eloquent\\Collection\\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Parameter \#2 \$user of method App\\Http\\Controllers\\Training\\Skills\\ApplicationController\:\:determineSelectableApplicationSkillLevels\(\) expects App\\Models\\Users\\User, App\\Models\\Users\\User\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Parameter \#3 \$user of class App\\Mail\\Training\\Skills\\ApplicationSubmitted constructor expects App\\Models\\Users\\User, App\\Models\\Users\\User\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Result of && is always false\.$#' + identifier: booleanAnd.alwaysFalse + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Result of method App\\Models\\Users\\User\:\:hasSkill\(\) \(void\) is used\.$#' + identifier: method.void + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Right side of && is always false\.$#' + identifier: booleanAnd.rightAlwaysFalse + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Strict comparison using \=\=\= between null and 3 will always evaluate to false\.$#' + identifier: identical.alwaysFalse + count: 1 + path: app/Http/Controllers/Training/Skills/ApplicationController.php + + - + message: '#^Access to an undefined property App\\Models\\Training\\Skills\\Skill\|Illuminate\\Database\\Eloquent\\Collection\\:\:\$id\.$#' + identifier: property.notFound + count: 5 + path: app/Http/Controllers/Training/Skills/AwardedController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/AwardedController.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 4 + path: app/Http/Controllers/Training/Skills/AwardedController.php + + - + message: '#^Cannot call method getSkillLevel\(\) on App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/AwardedController.php + + - + message: '#^Cannot call method setSkillLevel\(\) on App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Controllers/Training/Skills/AwardedController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\AwardedController\:\:awardForm\(\) should return \$this\(App\\Http\\Controllers\\Training\\Skills\\AwardedController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Training/Skills/AwardedController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\AwardedController\:\:revokeForm\(\) should return \$this\(App\\Http\\Controllers\\Training\\Skills\\AwardedController\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Training/Skills/AwardedController.php + + - + message: '#^Call to an undefined method App\\Models\\Training\\Skills\\Skill\|Illuminate\\Database\\Eloquent\\Collection\\:\:delete\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Training/Skills/SkillController.php + + - + message: '#^Call to an undefined method App\\Models\\Training\\Skills\\Skill\|Illuminate\\Database\\Eloquent\\Collection\\:\:update\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Http/Controllers/Training/Skills/SkillController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\SkillController\:\:destroy\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Training/Skills/SkillController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\SkillController\:\:destroy\(\) should return Illuminate\\Http\\RedirectResponse but returns Illuminate\\Http\\JsonResponse\.$#' + identifier: return.type + count: 1 + path: app/Http/Controllers/Training/Skills/SkillController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\SkillController\:\:edit\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Training/Skills/SkillController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\SkillController\:\:update\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Training/Skills/SkillController.php + + - + message: '#^Method App\\Http\\Controllers\\Training\\Skills\\SkillController\:\:view\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Http/Controllers/Training/Skills/SkillController.php + + - + message: '#^PHPDoc type array of property App\\Http\\Kernel\:\:\$middleware is not covariant with PHPDoc type array\ of overridden property Illuminate\\Foundation\\Http\\Kernel\:\:\$middleware\.$#' + identifier: property.phpDocType + count: 1 + path: app/Http/Kernel.php + + - + message: '#^PHPDoc type array of property App\\Http\\Kernel\:\:\$middlewareGroups is not covariant with PHPDoc type array\\> of overridden property Illuminate\\Foundation\\Http\\Kernel\:\:\$middlewareGroups\.$#' + identifier: property.phpDocType + count: 1 + path: app/Http/Kernel.php + + - + message: '#^PHPDoc type array of property App\\Http\\Kernel\:\:\$routeMiddleware is not covariant with PHPDoc type array\ of overridden property Illuminate\\Foundation\\Http\\Kernel\:\:\$routeMiddleware\.$#' + identifier: property.phpDocType + count: 1 + path: app/Http/Kernel.php + + - + message: '#^Property App\\Http\\Kernel\:\:\$middleware type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Kernel.php + + - + message: '#^Property App\\Http\\Kernel\:\:\$middlewareGroups type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Kernel.php + + - + message: '#^Property App\\Http\\Kernel\:\:\$routeMiddleware type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Kernel.php + + - + message: '#^PHPDoc type array of property App\\Http\\Middleware\\EncryptCookies\:\:\$except is not covariant with PHPDoc type array\ of overridden property Illuminate\\Cookie\\Middleware\\EncryptCookies\:\:\$except\.$#' + identifier: property.phpDocType + count: 1 + path: app/Http/Middleware/EncryptCookies.php + + - + message: '#^Property App\\Http\\Middleware\\EncryptCookies\:\:\$except type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Middleware/EncryptCookies.php + + - + message: '#^PHPDoc type array of property App\\Http\\Middleware\\TrimStrings\:\:\$except is not covariant with PHPDoc type array\ of overridden property Illuminate\\Foundation\\Http\\Middleware\\TrimStrings\:\:\$except\.$#' + identifier: property.phpDocType + count: 1 + path: app/Http/Middleware/TrimStrings.php + + - + message: '#^Property App\\Http\\Middleware\\TrimStrings\:\:\$except type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Middleware/TrimStrings.php + + - + message: '#^PHPDoc type array\|string of property App\\Http\\Middleware\\TrustedProxies\:\:\$proxies is not covariant with PHPDoc type array\\|string\|null of overridden property Illuminate\\Http\\Middleware\\TrustProxies\:\:\$proxies\.$#' + identifier: property.phpDocType + count: 1 + path: app/Http/Middleware/TrustedProxies.php + + - + message: '#^Property App\\Http\\Middleware\\TrustedProxies\:\:\$proxies type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Middleware/TrustedProxies.php + + - + message: '#^PHPDoc type array of property App\\Http\\Middleware\\VerifyCsrfToken\:\:\$except is not covariant with PHPDoc type array\ of overridden property Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken\:\:\$except\.$#' + identifier: property.phpDocType + count: 1 + path: app/Http/Middleware/VerifyCsrfToken.php + + - + message: '#^Property App\\Http\\Middleware\\VerifyCsrfToken\:\:\$except type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Middleware/VerifyCsrfToken.php + + - + message: '#^Cannot call method can\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Awards/Nominate.php + + - + message: '#^Cannot call method parameter\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Awards/Nominate.php + + - + message: '#^Method App\\Http\\Requests\\Awards\\Nominate\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Awards/Nominate.php + + - + message: '#^Method App\\Http\\Requests\\Awards\\Nominate\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Awards/Nominate.php + + - + message: '#^Cannot call method isAdmin\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/CommitteeRequest.php + + - + message: '#^Method App\\Http\\Requests\\CommitteeRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/CommitteeRequest.php + + - + message: '#^Method App\\Http\\Requests\\CommitteeRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/CommitteeRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\AccidentRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/AccidentRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\AccidentRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/AccidentRequest.php + + - + message: '#^Property App\\Http\\Requests\\Contact\\AccidentRequest\:\:\$PersonTypes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/AccidentRequest.php + + - + message: '#^Property App\\Http\\Requests\\Contact\\AccidentRequest\:\:\$Severities type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/AccidentRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\BookRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/BookRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\BookRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/BookRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\EnquiryRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/EnquiryRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\EnquiryRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/EnquiryRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\FeedbackRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/FeedbackRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\FeedbackRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/FeedbackRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\NearMissRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/NearMissRequest.php + + - + message: '#^Method App\\Http\\Requests\\Contact\\NearMissRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Contact/NearMissRequest.php + + - + message: '#^Cannot call method can\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Http/Requests/ElectionRequest.php + + - + message: '#^Method App\\Http\\Requests\\ElectionRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/ElectionRequest.php + + - + message: '#^Method App\\Http\\Requests\\ElectionRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/ElectionRequest.php + + - + message: '#^Cannot call method isMember\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Equipment/RepairRequest.php + + - + message: '#^Method App\\Http\\Requests\\Equipment\\RepairRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Equipment/RepairRequest.php + + - + message: '#^Method App\\Http\\Requests\\Equipment\\RepairRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Equipment/RepairRequest.php + + - + message: '#^Method App\\Http\\Requests\\Events\\EmailRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Events/EmailRequest.php + + - + message: '#^Method App\\Http\\Requests\\Events\\EmailRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Events/EmailRequest.php + + - + message: '#^Cannot call method isAdmin\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Events/EventRequest.php + + - + message: '#^Method App\\Http\\Requests\\Events\\EventRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Events/EventRequest.php + + - + message: '#^Method App\\Http\\Requests\\Events\\EventRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Events/EventRequest.php + + - + message: '#^Property App\\Http\\Requests\\Events\\EventRequest\:\:\$fields type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Events/EventRequest.php + + - + message: '#^Cannot call method can\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/QuoteRequest.php + + - + message: '#^Method App\\Http\\Requests\\QuoteRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/QuoteRequest.php + + - + message: '#^Method App\\Http\\Requests\\QuoteRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/QuoteRequest.php + + - + message: '#^Parameter \#1 \$value of method Carbon\\Carbon\:\:subMinutes\(\) expects float\|int, string\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Http/Requests/QuoteRequest.php + + - + message: '#^Cannot call method getName\(\) on object\|string\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Request.php + + - + message: '#^Cannot call method can\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Http/Requests/Resources/ResourceRequest.php + + - + message: '#^Cannot call method getName\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Http/Requests/Resources/ResourceRequest.php + + - + message: '#^Cannot call method parameter\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Resources/ResourceRequest.php + + - + message: '#^Constant App\\Http\\Requests\\Resources\\ResourceRequest\:\:FILE_MESSAGES type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Resources/ResourceRequest.php + + - + message: '#^Method App\\Http\\Requests\\Resources\\ResourceRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Resources/ResourceRequest.php + + - + message: '#^Method App\\Http\\Requests\\Resources\\ResourceRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Resources/ResourceRequest.php + + - + message: '#^Cannot call method canAwardSkill\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Training/Skills/AwardSkill.php + + - + message: '#^Cannot call method isLevelAvailable\(\) on App\\Models\\Training\\Skills\\Skill\|Illuminate\\Database\\Eloquent\\Collection\\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Training/Skills/AwardSkill.php + + - + message: '#^Method App\\Http\\Requests\\Training\\Skills\\AwardSkill\:\:getValidatorInstance\(\) should return Illuminate\\Validation\\Validator but returns Illuminate\\Contracts\\Validation\\Validator\.$#' + identifier: return.type + count: 1 + path: app/Http/Requests/Training/Skills/AwardSkill.php + + - + message: '#^Method App\\Http\\Requests\\Training\\Skills\\AwardSkill\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Training/Skills/AwardSkill.php + + - + message: '#^Method App\\Http\\Requests\\Training\\Skills\\AwardSkill\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Training/Skills/AwardSkill.php + + - + message: '#^Cannot call method can\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Http/Requests/Training/Skills/SkillRequest.php + + - + message: '#^Cannot call method getName\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Training/Skills/SkillRequest.php + + - + message: '#^Cannot call method parameter\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Training/Skills/SkillRequest.php + + - + message: '#^Method App\\Http\\Requests\\Training\\Skills\\SkillRequest\:\:getValidatorInstance\(\) should return \$this\(App\\Http\\Requests\\Training\\Skills\\SkillRequest\) but returns Illuminate\\Contracts\\Validation\\Validator\.$#' + identifier: return.type + count: 1 + path: app/Http/Requests/Training/Skills/SkillRequest.php + + - + message: '#^Method App\\Http\\Requests\\Training\\Skills\\SkillRequest\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Training/Skills/SkillRequest.php + + - + message: '#^Method App\\Http\\Requests\\Training\\Skills\\SkillRequest\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Training/Skills/SkillRequest.php + + - + message: '#^Cannot access property \$id on App\\Models\\Training\\Skills\\Skill\|Illuminate\\Database\\Eloquent\\Collection\\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Requests/Training/Skills/SubmitApplication.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Http/Requests/Training/Skills/SubmitApplication.php + + - + message: '#^Cannot call method can\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Training/Skills/SubmitApplication.php + + - + message: '#^Cannot call method getSkillLevel\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Training/Skills/SubmitApplication.php + + - + message: '#^Cannot call method isLevelAvailable\(\) on App\\Models\\Training\\Skills\\Skill\|Illuminate\\Database\\Eloquent\\Collection\\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Http/Requests/Training/Skills/SubmitApplication.php + + - + message: '#^Method App\\Http\\Requests\\Training\\Skills\\SubmitApplication\:\:getValidatorInstance\(\) should return Illuminate\\Validation\\Validator but returns Illuminate\\Contracts\\Validation\\Validator\.$#' + identifier: return.type + count: 1 + path: app/Http/Requests/Training/Skills/SubmitApplication.php + + - + message: '#^Method App\\Http\\Requests\\Training\\Skills\\SubmitApplication\:\:messages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Training/Skills/SubmitApplication.php + + - + message: '#^Method App\\Http\\Requests\\Training\\Skills\\SubmitApplication\:\:rules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Http/Requests/Training/Skills/SubmitApplication.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Logger.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#4 \$user \(App\\Models\\Users\\User\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 1 + path: app/Logger.php + + - + message: '#^Method App\\Mail\\Contact\\AccidentReport\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/AccidentReport.php + + - + message: '#^Property App\\Mail\\Contact\\AccidentReport\:\:\$report type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/AccidentReport.php + + - + message: '#^Method App\\Mail\\Contact\\AccidentReportReceipt\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/AccidentReportReceipt.php + + - + message: '#^Property App\\Mail\\Contact\\AccidentReportReceipt\:\:\$report type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/AccidentReportReceipt.php + + - + message: '#^Method App\\Mail\\Contact\\Booking\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/Booking.php + + - + message: '#^Property App\\Mail\\Contact\\Booking\:\:\$booking type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/Booking.php + + - + message: '#^Method App\\Mail\\Contact\\BookingReceipt\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/BookingReceipt.php + + - + message: '#^Property App\\Mail\\Contact\\BookingReceipt\:\:\$booking type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/BookingReceipt.php + + - + message: '#^Method App\\Mail\\Contact\\Enquiry\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/Enquiry.php + + - + message: '#^Property App\\Mail\\Contact\\Enquiry\:\:\$enquiry type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/Enquiry.php + + - + message: '#^Method App\\Mail\\Contact\\EnquiryReceipt\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/EnquiryReceipt.php + + - + message: '#^Property App\\Mail\\Contact\\EnquiryReceipt\:\:\$enquiry type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/EnquiryReceipt.php + + - + message: '#^Method App\\Mail\\Contact\\Feedback\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/Feedback.php + + - + message: '#^Property App\\Mail\\Contact\\Feedback\:\:\$feedback type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/Feedback.php + + - + message: '#^Method App\\Mail\\Contact\\NearMissReport\:\:build\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Mail/Contact/NearMissReport.php + + - + message: '#^Property App\\Mail\\Contact\\NearMissReport\:\:\$report type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Contact/NearMissReport.php + + - + message: '#^Method App\\Mail\\Equipment\\Breakage\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Equipment/Breakage.php + + - + message: '#^Property App\\Mail\\Equipment\\Breakage\:\:\$breakage type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Equipment/Breakage.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Mail/Events/AcceptedExternal.php + + - + message: '#^Property App\\Mail\\Events\\AcceptedExternal\:\:\$data type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Events/AcceptedExternal.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Mail/Events/CrewEmail.php + + - + message: '#^Property App\\Mail\\Events\\CrewEmail\:\:\$data type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Events/CrewEmail.php + + - + message: '#^Cannot access property \$forename on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Mail/Events/FinanceEmail.php + + - + message: '#^Parameter \#1 \$view of method Illuminate\\Mail\\Mailable\:\:markdown\(\) expects view\-string, string given\.$#' + identifier: argument.type + count: 1 + path: app/Mail/Events/FinanceEmail.php + + - + message: '#^Property App\\Mail\\Events\\FinanceEmail\:\:\$data type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Events/FinanceEmail.php + + - + message: '#^Cannot access property \$email on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Mail/Training/Skills/ApplicationProcessed.php + + - + message: '#^Cannot access property \$forename on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Mail/Training/Skills/ApplicationProcessed.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 3 + path: app/Mail/Training/Skills/ApplicationProcessed.php + + - + message: '#^Property App\\Mail\\Training\\Skills\\ApplicationProcessed\:\:\$application type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Training/Skills/ApplicationProcessed.php + + - + message: '#^Property App\\Mail\\Training\\Skills\\ApplicationSubmitted\:\:\$application type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Training/Skills/ApplicationSubmitted.php + + - + message: '#^Method App\\Mail\\Users\\AccountCreated\:\:__construct\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Users/AccountCreated.php + + - + message: '#^Parameter \#1 \$view of method Illuminate\\Mail\\Mailable\:\:markdown\(\) expects view\-string, string given\.$#' + identifier: argument.type + count: 1 + path: app/Mail/Users/AccountCreated.php + + - + message: '#^Property App\\Mail\\Users\\AccountCreated\:\:\$user type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Mail/Users/AccountCreated.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:approved\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:approvedSeasonNominations\(\) has parameter \$seasonId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:getApprovedNominations\(\) has parameter \$seasonId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:hasApprovedNominations\(\) has parameter \$seasonId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:nominations\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:scopeApproved\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:scopeApproved\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:scopeSuggested\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:scopeSuggested\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:suggestor\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Method App\\Models\\Awards\\Award\:\:votes\(\) should return \$this\(App\\Models\\Awards\\Award\) but returns Illuminate\\Database\\Eloquent\\Builder\\.$#' + identifier: return.type + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^PHPDoc type array of property App\\Models\\Awards\\Award\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Property App\\Models\\Awards\\Award\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Property App\\Models\\Awards\\Award\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Property App\\Models\\Awards\\Award\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Static property App\\Models\\Awards\\Award\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Static property App\\Models\\Awards\\Award\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Awards/Award.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:byUser\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Awards/Nomination.php + + - + message: '#^Method App\\Models\\Awards\\Nomination\:\:award\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Nomination.php + + - + message: '#^Method App\\Models\\Awards\\Nomination\:\:scopeApproved\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Nomination.php + + - + message: '#^Method App\\Models\\Awards\\Nomination\:\:scopeOrdered\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Nomination.php + + - + message: '#^Method App\\Models\\Awards\\Nomination\:\:season\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Nomination.php + + - + message: '#^Method App\\Models\\Awards\\Nomination\:\:suggestor\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Nomination.php + + - + message: '#^Method App\\Models\\Awards\\Nomination\:\:votes\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Nomination.php + + - + message: '#^PHPDoc type array of property App\\Models\\Awards\\Nomination\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Awards/Nomination.php + + - + message: '#^Property App\\Models\\Awards\\Nomination\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Nomination.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$award_id\.$#' + identifier: property.notFound + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#' + identifier: property.notFound + count: 4 + path: app/Models/Awards/Season.php + + - + message: '#^Argument of an invalid type Illuminate\\Database\\Eloquent\\Collection\\|null supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:attributesToCorrect\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:awards\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany does not specify its types\: TRelatedModel, TDeclaringModel, TPivotModel, TAccessor \(2\-4 required\)$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:convertAttributeFromDatabase\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:getAwardsAttribute\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:newFromBuilder\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:nominations\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:shouldCorrectTimezone\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:traitValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Season\:\:uncorrected\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^PHPDoc type array of property App\\Models\\Awards\\Season\:\:\$appends is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$appends\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^PHPDoc type array of property App\\Models\\Awards\\Season\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Parameter \#1 \$callback of function call_user_func_array expects callable\(\)\: mixed, ''self\:…'' given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Parameter \#1 \.\.\.\$arg1 of function max expects non\-empty\-array, array\ given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Property ''awards'' does not exist in model\.$#' + identifier: rules.modelAppends + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Property App\\Models\\Awards\\Season\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Property App\\Models\\Awards\\Season\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Property App\\Models\\Awards\\Season\:\:\$appends type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Property App\\Models\\Awards\\Season\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Static property App\\Models\\Awards\\Season\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Static property App\\Models\\Awards\\Season\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Strict comparison using \!\=\= between null and null will always evaluate to false\.$#' + identifier: notIdentical.alwaysFalse + count: 2 + path: app/Models/Awards/Season.php + + - + message: '#^Unable to resolve the template type TGroupKey in call to method Illuminate\\Support\\Collection\\:\:groupBy\(\)$#' + identifier: argument.templateType + count: 1 + path: app/Models/Awards/Season.php + + - + message: '#^Method App\\Models\\Awards\\Vote\:\:nomination\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Vote.php + + - + message: '#^Method App\\Models\\Awards\\Vote\:\:scopeByUser\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Vote.php + + - + message: '#^Method App\\Models\\Awards\\Vote\:\:scopeForSeason\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Vote.php + + - + message: '#^Method App\\Models\\Awards\\Vote\:\:season\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Vote.php + + - + message: '#^Method App\\Models\\Awards\\Vote\:\:user\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Awards/Vote.php + + - + message: '#^PHPDoc type array of property App\\Models\\Awards\\Vote\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Awards/Vote.php + + - + message: '#^Property App\\Models\\Awards\\Vote\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Awards/Vote.php + + - + message: '#^Call to an undefined method App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\:\:isCommittee\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Committee/Role.php + + - + message: '#^Call to an undefined method App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\:\:makeCommittee\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Call to an undefined method App\\Models\\Users\\User\|Illuminate\\Database\\Eloquent\\Collection\\:\:makeMember\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Method App\\Models\\Committee\\Role\:\:setOrderAttribute\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Method App\\Models\\Committee\\Role\:\:setOrderAttribute\(\) has parameter \$newOrder with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Method App\\Models\\Committee\\Role\:\:setUserIdAttribute\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Method App\\Models\\Committee\\Role\:\:setUserIdAttribute\(\) has parameter \$newUserId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Method App\\Models\\Committee\\Role\:\:user\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^PHPDoc type array of property App\\Models\\Committee\\Role\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Property App\\Models\\Committee\\Role\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Property App\\Models\\Committee\\Role\:\:\$order \(int\<0, max\>\) does not accept int\<\-1, max\>\.$#' + identifier: assign.propertyType + count: 1 + path: app/Models/Committee/Role.php + + - + message: '#^Access to an undefined property object\:\:\$original\.$#' + identifier: property.notFound + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Call to an undefined method object\:\:asDateTime\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Call to an undefined method object\:\:getDateFormat\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Elections/Election.php + + - + message: '#^Cannot call method can\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Models/Elections/Election.php + + - + message: '#^Cannot call method format\(\) on Carbon\\Carbon\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:attributesToCorrect\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:convertAttributeFromDatabase\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:getNominations\(\) has invalid return type App\\Collection\.$#' + identifier: class.notFound + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:getNominations\(\) has parameter \$positionIndex with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:getNominations\(\) should return App\\Collection but returns Illuminate\\Database\\Eloquent\\Collection\\.$#' + identifier: return.type + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:getPosition\(\) has parameter \$index with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:getPositionSlug\(\) has parameter \$index with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:getPositionSlug\(\) should return string but returns string\|null\.$#' + identifier: return.type + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:getPositionsAttribute\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:newFromBuilder\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:nominations\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:setPositionsAttribute\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:setPositionsAttribute\(\) has parameter \$positions with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:shouldCorrectTimezone\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Method App\\Models\\Elections\\Election\:\:uncorrected\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^PHPDoc type array of property App\\Models\\Elections\\Election\:\:\$casts is not covariant with PHPDoc type array\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$casts\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^PHPDoc type array of property App\\Models\\Elections\\Election\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Property App\\Models\\Elections\\Election\:\:\$Types type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Property App\\Models\\Elections\\Election\:\:\$casts type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Property App\\Models\\Elections\\Election\:\:\$correct_tz \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Property App\\Models\\Elections\\Election\:\:\$correct_tz type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Property App\\Models\\Elections\\Election\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Right side of && is always true\.$#' + identifier: booleanAnd.rightAlwaysTrue + count: 1 + path: app/Models/Elections/Election.php + + - + message: '#^Strict comparison using \!\=\= between null and null will always evaluate to false\.$#' + identifier: notIdentical.alwaysFalse + count: 2 + path: app/Models/Elections/Election.php + + - + message: '#^Cannot call method getManifestoPath\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Models/Elections/Nomination.php + + - + message: '#^Method App\\Models\\Elections\\Nomination\:\:election\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Elections/Nomination.php + + - + message: '#^Method App\\Models\\Elections\\Nomination\:\:getManifestoName\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Elections/Nomination.php + + - + message: '#^Method App\\Models\\Elections\\Nomination\:\:user\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Elections/Nomination.php + + - + message: '#^PHPDoc type array of property App\\Models\\Elections\\Nomination\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Elections/Nomination.php + + - + message: '#^Property App\\Models\\Elections\\Nomination\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Elections/Nomination.php + + - + message: '#^Method App\\Models\\Equipment\\Breakage\:\:images\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Equipment/Breakage.php + + - + message: '#^Method App\\Models\\Equipment\\Breakage\:\:saveImage\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Equipment/Breakage.php + + - + message: '#^Method App\\Models\\Equipment\\Breakage\:\:saveImage\(\) has parameter \$image with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Equipment/Breakage.php + + - + message: '#^Method App\\Models\\Equipment\\Breakage\:\:saveImage\(\) has parameter \$imageRow with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Equipment/Breakage.php + + - + message: '#^Method App\\Models\\Equipment\\Breakage\:\:user\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Equipment/Breakage.php + + - + message: '#^Property App\\Models\\Equipment\\Breakage\:\:\$Status type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Equipment/Breakage.php + + - + message: '#^Method App\\Models\\Equipment\\BreakageImage\:\:report\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Equipment/BreakageImage.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:member\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Events/Crew.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Events/Crew.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:alreadyJoined\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:event\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:getCoreAttribute\(\) should return bool but returns int\.$#' + identifier: return.type + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeCore\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeCore\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeEm\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeEm\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeForUser\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeForUser\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeGeneral\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeGeneral\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeGuest\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeGuest\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeMember\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeMember\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeOrder\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:scopeOrder\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Method App\\Models\\Events\\Crew\:\:user\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Crew\:\:\$appends is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$appends\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Crew\:\:\$casts is not covariant with PHPDoc type array\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$casts\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Crew\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Crew\:\:\$visible is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$visible\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Property App\\Models\\Events\\Crew\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Property App\\Models\\Events\\Crew\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Property App\\Models\\Events\\Crew\:\:\$appends type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Property App\\Models\\Events\\Crew\:\:\$casts type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Property App\\Models\\Events\\Crew\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Property App\\Models\\Events\\Crew\:\:\$visible type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Static property App\\Models\\Events\\Crew\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Static property App\\Models\\Events\\Crew\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Crew.php + + - + message: '#^Access to an undefined property object\:\:\$original\.$#' + identifier: property.notFound + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Call to an undefined method object\:\:asDateTime\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Call to an undefined method object\:\:getDateFormat\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Events/Email.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Events/Email.php + + - + message: '#^Cannot access property \$id on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Cannot call method crew\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Cannot call method format\(\) on Carbon\\Carbon\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Method App\\Models\\Events\\Email\:\:attributesToCorrect\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Method App\\Models\\Events\\Email\:\:convertAttributeFromDatabase\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Method App\\Models\\Events\\Email\:\:event\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Method App\\Models\\Events\\Email\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Method App\\Models\\Events\\Email\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Method App\\Models\\Events\\Email\:\:newFromBuilder\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Method App\\Models\\Events\\Email\:\:sender\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Method App\\Models\\Events\\Email\:\:shouldCorrectTimezone\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Method App\\Models\\Events\\Email\:\:uncorrected\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Email\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Property App\\Models\\Events\\Email\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Property App\\Models\\Events\\Email\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Property App\\Models\\Events\\Email\:\:\$correct_tz \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Property App\\Models\\Events\\Email\:\:\$correct_tz type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Property App\\Models\\Events\\Email\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Right side of && is always true\.$#' + identifier: booleanAnd.rightAlwaysTrue + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Static property App\\Models\\Events\\Email\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Static property App\\Models\\Events\\Email\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Email.php + + - + message: '#^Strict comparison using \!\=\= between null and null will always evaluate to false\.$#' + identifier: notIdentical.alwaysFalse + count: 2 + path: app/Models/Events/Email.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$user\.$#' + identifier: property.notFound + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Model\:\:isGuest\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:core\(\)\.$#' + identifier: method.notFound + count: 3 + path: app/Models/Events/Event.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:em\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:general\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Events/Event.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:guest\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Events/Event.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:member\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Events/Event.php + + - + message: '#^Call to function is_null\(\) with null will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Cannot access property \$email on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Cannot access property \$end on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Cannot access property \$start on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Cannot call method format\(\) on Carbon\\Carbon\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Models/Events/Event.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#1 \$user \(App\\Models\\Users\\User\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 3 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:addToFinanceDb\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:alreadyJoined\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:crew\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:em\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getCoreCrewAttribute\(\) return type with generic class Illuminate\\Database\\Eloquent\\Collection does not specify its types\: TKey, TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getCrewAttribute\(\) return type with generic class Illuminate\\Database\\Eloquent\\Collection does not specify its types\: TKey, TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getCrewMailingListAttribute\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getGeneralCrewAttribute\(\) return type with generic class Illuminate\\Database\\Eloquent\\Collection does not specify its types\: TKey, TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getGuestsAttribute\(\) return type with generic class Illuminate\\Database\\Eloquent\\Collection does not specify its types\: TKey, TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getGuestsAttribute\(\) should return Illuminate\\Database\\Eloquent\\Collection but returns array\.$#' + identifier: return.type + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getPrettyProductionChargeAttribute\(\) should return string but returns null\.$#' + identifier: return.type + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getProductionChargeAttribute\(\) has parameter \$charge with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getReportPrefillAttribute\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:joinEventCrew\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:joinEventCrew\(\) return type with generic class Illuminate\\Database\\Eloquent\\Builder does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:joinEventTimes\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:joinEventTimes\(\) return type with generic class Illuminate\\Database\\Eloquent\\Builder does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeDistinctPaginate\(\) has parameter \$columns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeDistinctPaginate\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeDistinctPaginate\(\) return type with generic class Illuminate\\Pagination\\LengthAwarePaginator does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeFuture\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeNewestFirst\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeNewestFirst\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeOldestFirst\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeOldestFirst\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeOnDate\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeOnDate\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopePast\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopePast\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeType\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeType\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeType\(\) has parameter \$type with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeUserOnCrew\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:scopeUserOnCrew\(\) has parameter \$query with generic class Illuminate\\Database\\Eloquent\\Builder but does not specify its types\: TModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:setEmIdAttribute\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:setEmIdAttribute\(\) has parameter \$id with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:setPaperwork\(\) has parameter \$key with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:setPaperwork\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:setProductionChargeAttribute\(\) has parameter \$charge with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:setProductionChargeAttribute\(\) should return null but return statement is missing\.$#' + identifier: return.missing + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:times\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Method App\\Models\\Events\\Event\:\:traitValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Event\:\:\$casts is not covariant with PHPDoc type array\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$casts\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Event\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Parameter \#1 \$callback of function call_user_func_array expects callable\(\)\: mixed, ''self\:…'' given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Parameter \#1 \$key of method App\\Models\\Events\\Event\:\:countCrew\(\) expects null, string given\.$#' + identifier: argument.type + count: 2 + path: app/Models/Events/Event.php + + - + message: '#^Parameter \#2 \$value of method Illuminate\\Support\\Collection\<\(int\|string\),Illuminate\\Database\\Eloquent\\Model\>\:\:put\(\) expects Illuminate\\Database\\Eloquent\\Model, Illuminate\\Database\\Eloquent\\Collection given\.$#' + identifier: argument.type + count: 2 + path: app/Models/Events/Event.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Parameter \#3 \$value of function curl_setopt expects bool, int given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$Clients type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$CrewListStatus type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$Paperwork type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$TypeClasses type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$Types type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$TypesShort type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$VenueTypes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$casts type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$crewListCount type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Property App\\Models\\Events\\Event\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Result of \|\| is always true\.$#' + identifier: booleanOr.alwaysTrue + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Static property App\\Models\\Events\\Event\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Static property App\\Models\\Events\\Event\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Strict comparison using \=\=\= between null and null will always evaluate to true\.$#' + identifier: identical.alwaysTrue + count: 2 + path: app/Models/Events/Event.php + + - + message: '#^Unreachable statement \- code above always terminates\.$#' + identifier: deadCode.unreachable + count: 1 + path: app/Models/Events/Event.php + + - + message: '#^Access to an undefined property object\:\:\$original\.$#' + identifier: property.notFound + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Call to an undefined method object\:\:asDateTime\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Call to an undefined method object\:\:getDateFormat\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Events/Time.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Events/Time.php + + - + message: '#^Cannot call method format\(\) on Carbon\\Carbon\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Method App\\Models\\Events\\Time\:\:attributesToCorrect\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Method App\\Models\\Events\\Time\:\:convertAttributeFromDatabase\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Method App\\Models\\Events\\Time\:\:event\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Method App\\Models\\Events\\Time\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Method App\\Models\\Events\\Time\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Method App\\Models\\Events\\Time\:\:newFromBuilder\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Method App\\Models\\Events\\Time\:\:shouldCorrectTimezone\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Method App\\Models\\Events\\Time\:\:uncorrected\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Time\:\:\$casts is not covariant with PHPDoc type array\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$casts\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Time\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^PHPDoc type array of property App\\Models\\Events\\Time\:\:\$visible is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$visible\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Property App\\Models\\Events\\Time\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Property App\\Models\\Events\\Time\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Property App\\Models\\Events\\Time\:\:\$casts type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Property App\\Models\\Events\\Time\:\:\$correct_tz \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Property App\\Models\\Events\\Time\:\:\$correct_tz type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Property App\\Models\\Events\\Time\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Property App\\Models\\Events\\Time\:\:\$visible type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Right side of && is always true\.$#' + identifier: booleanAnd.rightAlwaysTrue + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Static property App\\Models\\Events\\Time\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Static property App\\Models\\Events\\Time\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Events/Time.php + + - + message: '#^Strict comparison using \!\=\= between null and null will always evaluate to false\.$#' + identifier: notIdentical.alwaysFalse + count: 2 + path: app/Models/Events/Time.php + + - + message: '#^Access to an undefined property object\:\:\$original\.$#' + identifier: property.notFound + count: 1 + path: app/Models/Log.php + + - + message: '#^Call to an undefined method object\:\:asDateTime\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Log.php + + - + message: '#^Call to an undefined method object\:\:getDateFormat\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Log.php + + - + message: '#^Cannot call method format\(\) on Carbon\\Carbon\|null\.$#' + identifier: method.nonObject + count: 3 + path: app/Models/Log.php + + - + message: '#^Method App\\Models\\Log\:\:attributesToCorrect\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Log.php + + - + message: '#^Method App\\Models\\Log\:\:convertAttributeFromDatabase\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Log.php + + - + message: '#^Method App\\Models\\Log\:\:newFromBuilder\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Log.php + + - + message: '#^Method App\\Models\\Log\:\:shouldCorrectTimezone\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Log.php + + - + message: '#^Method App\\Models\\Log\:\:uncorrected\(\) has parameter \$attributeName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Log.php + + - + message: '#^Method App\\Models\\Log\:\:user\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Log.php + + - + message: '#^Property App\\Models\\Log\:\:\$correct_tz has no type specified\.$#' + identifier: missingType.property + count: 1 + path: app/Models/Log.php + + - + message: '#^Strict comparison using \!\=\= between null and null will always evaluate to false\.$#' + identifier: notIdentical.alwaysFalse + count: 2 + path: app/Models/Log.php + + - + message: '#^Method App\\Models\\Media\\Video\:\:__get\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Media/Video.php + + - + message: '#^Method App\\Models\\Media\\Video\:\:find\(\) has parameter \$videoId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Media/Video.php + + - + message: '#^Property App\\Models\\Media\\Video\:\:\$SupportedKind type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Media/Video.php + + - + message: '#^Property App\\Models\\Media\\Video\:\:\$tags type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Media/Video.php + + - + message: '#^Strict comparison using \=\=\= between stdClass and false will always evaluate to false\.$#' + identifier: identical.alwaysFalse + count: 1 + path: app/Models/Media/Video.php + + - + message: '#^Unsafe usage of new static\(\)\.$#' + identifier: new.static + count: 1 + path: app/Models/Media/Video.php + + - + message: '#^Method App\\Models\\Quote\:\:__construct\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Quote.php + + - + message: '#^Method App\\Models\\Quote\:\:creator\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Quote.php + + - + message: '#^PHPDoc type array of property App\\Models\\Quote\:\:\$casts is not covariant with PHPDoc type array\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$casts\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Quote.php + + - + message: '#^PHPDoc type array of property App\\Models\\Quote\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Quote.php + + - + message: '#^Property App\\Models\\Quote\:\:\$casts type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Quote.php + + - + message: '#^Property App\\Models\\Quote\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Quote.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Resources/Category.php + + - + message: '#^Constant App\\Models\\Resources\\Category\:\:FLAGS type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Method App\\Models\\Resources\\Category\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Method App\\Models\\Resources\\Category\:\:getValidationRules\(\) has parameter \$args with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Method App\\Models\\Resources\\Category\:\:resources\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Method App\\Models\\Resources\\Category\:\:setFlagAttribute\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Method App\\Models\\Resources\\Category\:\:setFlagAttribute\(\) has parameter \$flag with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Method App\\Models\\Resources\\Category\:\:traitValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^PHPDoc type array of property App\\Models\\Resources\\Category\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Property App\\Models\\Resources\\Category\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Property App\\Models\\Resources\\Category\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Property App\\Models\\Resources\\Category\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Static property App\\Models\\Resources\\Category\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Static property App\\Models\\Resources\\Category\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Resources/Category.php + + - + message: '#^Cannot call method getPath\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Models/Resources/Issue.php + + - + message: '#^Cannot call method isFile\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Models/Resources/Issue.php + + - + message: '#^Method App\\Models\\Resources\\Issue\:\:author\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Resources/Issue.php + + - + message: '#^Method App\\Models\\Resources\\Issue\:\:resource\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Resources/Issue.php + + - + message: '#^PHPDoc type array of property App\\Models\\Resources\\Issue\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Resources/Issue.php + + - + message: '#^Property App\\Models\\Resources\\Issue\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Issue.php + + - + message: '#^Access to an undefined property App\\Models\\Resources\\Resource\:\:\$issue\.$#' + identifier: property.notFound + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Access to an undefined property App\\Models\\Resources\\Resource\:\:\$type\.$#' + identifier: property.notFound + count: 2 + path: app/Models/Resources/Resource.php + + - + message: '#^Access to an undefined property object\:\:\$slug\.$#' + identifier: property.notFound + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Cannot access property \$flag on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 4 + path: app/Models/Resources/Resource.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Constant App\\Models\\Resources\\Resource\:\:ACCESS type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Constant App\\Models\\Resources\\Resource\:\:TYPES type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#1 \$user \(App\\Models\\Users\\User\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#2 \$user \(App\\Models\\Users\\User\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:category\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:download\(\) should return Illuminate\\Http\\Response but return statement is missing\.$#' + identifier: return.missing + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:download\(\) should return Illuminate\\Http\\Response but returns Symfony\\Component\\HttpFoundation\\BinaryFileResponse\.$#' + identifier: return.type + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:download\(\) should return Illuminate\\Http\\Response but returns string\.$#' + identifier: return.type + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:event\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:getAuthorAttribute\(\) should return App\\Models\\Users\\User but returns Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: return.type + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:getHeaders\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:issue\(\) should return App\\Models\\Resources\\Issue but returns App\\Models\\Resources\\Issue\|null\.$#' + identifier: return.type + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:sanitised\(\) should return string but returns string\|null\.$#' + identifier: return.type + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:scopeAccessible\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:scopeInCategory\(\) has parameter \$category with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:scopeInCategory\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:scopeSearch\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:scopeSearch\(\) has parameter \$searchTerm with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:scopeWithTags\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:scopeWithTags\(\) has parameter \$tags with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:stream\(\) should return Illuminate\\Http\\Response but returns string\.$#' + identifier: return.type + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Method App\\Models\\Resources\\Resource\:\:tags\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany does not specify its types\: TRelatedModel, TDeclaringModel, TPivotModel, TAccessor \(2\-4 required\)$#' + identifier: missingType.generics + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^PHPDoc type array of property App\\Models\\Resources\\Resource\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Parameter \#1 \$content of function response expects array\|Illuminate\\Contracts\\View\\View\|string\|null, string\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Parameter \#3 \$subject of function preg_replace expects array\\|string, array\\|string\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Property App\\Models\\Resources\\Resource\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Strict comparison using \=\=\= between null and null will always evaluate to true\.$#' + identifier: identical.alwaysTrue + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Ternary operator condition is always true\.$#' + identifier: ternary.alwaysTrue + count: 1 + path: app/Models/Resources/Resource.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Resources/Tag.php + + - + message: '#^Method App\\Models\\Resources\\Tag\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^Method App\\Models\\Resources\\Tag\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^Method App\\Models\\Resources\\Tag\:\:resources\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany does not specify its types\: TRelatedModel, TDeclaringModel, TPivotModel, TAccessor \(2\-4 required\)$#' + identifier: missingType.generics + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^PHPDoc type array of property App\\Models\\Resources\\Tag\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^Property App\\Models\\Resources\\Tag\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^Property App\\Models\\Resources\\Tag\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^Property App\\Models\\Resources\\Tag\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^Static property App\\Models\\Resources\\Tag\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^Static property App\\Models\\Resources\\Tag\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Resources/Tag.php + + - + message: '#^Method App\\Models\\Training\\Category\:\:skills\(\) should return \$this\(App\\Models\\Training\\Category\) but returns Illuminate\\Database\\Eloquent\\Relations\\HasMany\\.$#' + identifier: return.type + count: 1 + path: app/Models/Training/Category.php + + - + message: '#^PHPDoc type array of property App\\Models\\Training\\Category\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Training/Category.php + + - + message: '#^Property App\\Models\\Training\\Category\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Category.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Application\:\:awarder\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Application\:\:scopeAwarded\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Application\:\:scopeAwarded\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Application\:\:scopeNotAwarded\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Application\:\:scopeNotAwarded\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Application\:\:skill\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Application\:\:user\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^PHPDoc type array of property App\\Models\\Training\\Skills\\Application\:\:\$casts is not covariant with PHPDoc type array\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$casts\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^PHPDoc type array of property App\\Models\\Training\\Skills\\Application\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^Property App\\Models\\Training\\Skills\\Application\:\:\$casts type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^Property App\\Models\\Training\\Skills\\Application\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/Application.php + + - + message: '#^Cannot access property \$category on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Training/Skills/AwardedSkill.php + + - + message: '#^Method App\\Models\\Training\\Skills\\AwardedSkill\:\:awarder\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Training/Skills/AwardedSkill.php + + - + message: '#^Method App\\Models\\Training\\Skills\\AwardedSkill\:\:skill\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Training/Skills/AwardedSkill.php + + - + message: '#^Method App\\Models\\Training\\Skills\\AwardedSkill\:\:user\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Training/Skills/AwardedSkill.php + + - + message: '#^PHPDoc type array of property App\\Models\\Training\\Skills\\AwardedSkill\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Training/Skills/AwardedSkill.php + + - + message: '#^Property App\\Models\\Training\\Skills\\AwardedSkill\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/AwardedSkill.php + + - + message: '#^Access to an undefined property App\\Models\\Users\\User\:\:\$level\.$#' + identifier: property.notFound + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Constant App\\Models\\Training\\Skills\\Skill\:\:LEVEL_NAMES type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Skill\:\:category\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Skill\:\:getAvailableAttribute\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Skill\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Skill\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Method App\\Models\\Training\\Skills\\Skill\:\:isLevelAvailable\(\) has parameter \$level with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^PHPDoc type array of property App\\Models\\Training\\Skills\\Skill\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Property App\\Models\\Training\\Skills\\Skill\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Property App\\Models\\Training\\Skills\\Skill\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Property App\\Models\\Training\\Skills\\Skill\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Static property App\\Models\\Training\\Skills\\Skill\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Static property App\\Models\\Training\\Skills\\Skill\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Training/Skills/Skill.php + + - + message: '#^Method App\\Models\\Users\\Group\:\:users\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Users/Group.php + + - + message: '#^PHPDoc type array of property App\\Models\\Users\\Group\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Users/Group.php + + - + message: '#^Property App\\Models\\Users\\Group\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/Group.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\\:\:lists\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Users/User.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:core\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:forUser\(\)\.$#' + identifier: method.notFound + count: 2 + path: app/Models/Users/User.php + + - + message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany\:\:general\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Call to function is_array\(\) with array\{mixed\} will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: app/Models/Users/User.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\Group\|null\.$#' + identifier: property.nonObject + count: 2 + path: app/Models/Users/User.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 3 + path: app/Models/Users/User.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 9 + path: app/Models/Users/User.php + + - + message: '#^Cannot call method update\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#1 \$category \(App\\Models\\Training\\Category\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#1 \$skill \(App\\Models\\Training\\Skills\\Skill\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 2 + path: app/Models/Users/User.php + + - + message: '#^Loose comparison using \=\= between null and 3 will always evaluate to false\.$#' + identifier: equal.alwaysFalse + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:create\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:events\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:getDiaryPreference\(\) has parameter \$preference with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:getToolColoursParsedAttribute\(\) should return string but returns string\|null\.$#' + identifier: return.type + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:getTypeAttribute\(\) should return int but returns int\<0, max\>\|null\.$#' + identifier: return.type + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:group\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\BelongsTo does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:hasSkill\(\) with return type void returns bool but should not return anything\.$#' + identifier: return.void + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:isDiaryPreference\(\) has parameter \$preference with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:isDiaryPreference\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:pages\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeActive\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeActive\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeArchived\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeArchived\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeCrewingEvent\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeCrewingEvent\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeDistinctPaginate\(\) has parameter \$columns with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeDistinctPaginate\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeDistinctPaginate\(\) return type with generic class Illuminate\\Pagination\\LengthAwarePaginator does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeGetSelect\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeGetSelect\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeInGroup\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeInGroup\(\) has parameter \$groupName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeInGroup\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeMember\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeMember\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeNameOrder\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeNameOrder\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeNotCrewingEvent\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeNotCrewingEvent\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeSearch\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeSearch\(\) has parameter \$query with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:scopeSearch\(\) has parameter \$term with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:setNameAttribute\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:setSkillLevel\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:setSkillLevel\(\) has parameter \$level with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:setSkillLevel\(\) has parameter \$skillId with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:setTypeAttribute\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Models\\Users\\User\:\:skills\(\) return type with generic class Illuminate\\Database\\Eloquent\\Relations\\HasMany does not specify its types\: TRelatedModel, TDeclaringModel$#' + identifier: missingType.generics + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Negated boolean expression is always true\.$#' + identifier: booleanNot.alwaysTrue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Offset 0\|1\|2\|3\|4\|5 might not exist on array\{''red'', ''orange'', ''yellow'', ''green'', ''blue'', ''purple''\}\|array\{0\: ''black''\|''blue''\|''brown''\|''earth''\|''green''\|''grey''\|''orange''\|''pink''\|''purple''\|''rainbow''\|''red''\|''turquoise''\|''white''\|''yellow'', 1\?\: ''green''\}\.$#' + identifier: offsetAccess.notFound + count: 1 + path: app/Models/Users/User.php + + - + message: '#^PHPDoc type array of property App\\Models\\Users\\User\:\:\$casts is not covariant with PHPDoc type array\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$casts\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Users/User.php + + - + message: '#^PHPDoc type array of property App\\Models\\Users\\User\:\:\$fillable is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$fillable\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Users/User.php + + - + message: '#^PHPDoc type array of property App\\Models\\Users\\User\:\:\$hidden is not covariant with PHPDoc type list\ of overridden property Illuminate\\Database\\Eloquent\\Model\:\:\$hidden\.$#' + identifier: property.phpDocType + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Parameter \#1 \$related of method Illuminate\\Database\\Eloquent\\Model\:\:hasMany\(\) expects class\-string\, string given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Parameter \#1 \$string of function strtolower expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Parameter \#1 \$string of function trim expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Parameter \#2 \$data of function hash expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Parameter \#2 \$subject of function preg_match_all expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' + identifier: argument.type + count: 2 + path: app/Models/Users/User.php + + - + message: '#^Property App\\Models\\Users\\User\:\:\$AccountTypes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Property App\\Models\\Users\\User\:\:\$ValidationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Property App\\Models\\Users\\User\:\:\$ValidationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Property App\\Models\\Users\\User\:\:\$casts type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Property App\\Models\\Users\\User\:\:\$fillable type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Property App\\Models\\Users\\User\:\:\$hidden type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Result of && is always false\.$#' + identifier: booleanAnd.alwaysFalse + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Result of method App\\Models\\Users\\User\:\:hasSkill\(\) \(void\) is used\.$#' + identifier: method.void + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Static property App\\Models\\Users\\User\:\:\$ValidationMessages \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Static property App\\Models\\Users\\User\:\:\$ValidationRules \(array\) in isset\(\) is not nullable\.$#' + identifier: isset.property + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Unable to resolve the template type TRelatedModel in call to method Illuminate\\Database\\Eloquent\\Model\:\:hasMany\(\)$#' + identifier: argument.templateType + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Unreachable statement \- code above always terminates\.$#' + identifier: deadCode.unreachable + count: 1 + path: app/Models/Users/User.php + + - + message: '#^Method App\\Notifications\\Auth\\ResetPassword\:\:__construct\(\) has parameter \$token with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Notifications/Auth/ResetPassword.php + + - + message: '#^Method App\\Notifications\\Auth\\ResetPassword\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Auth/ResetPassword.php + + - + message: '#^Method App\\Notifications\\Auth\\ResetPassword\:\:via\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Auth/ResetPassword.php + + - + message: '#^Cannot access property \$email on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Notifications/Events/HasBeenVolunteered.php + + - + message: '#^Cannot access property \$forename on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Notifications/Events/HasBeenVolunteered.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Notifications/Events/HasBeenVolunteered.php + + - + message: '#^Method App\\Notifications\\Events\\HasBeenVolunteered\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Events/HasBeenVolunteered.php + + - + message: '#^Method App\\Notifications\\Events\\HasBeenVolunteered\:\:via\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Events/HasBeenVolunteered.php + + - + message: '#^Property App\\Notifications\\Events\\HasBeenVolunteered\:\:\$event type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Events/HasBeenVolunteered.php + + - + message: '#^Cannot access property \$email on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Notifications/Events/UserHasVolunteered.php + + - + message: '#^Cannot access property \$forename on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Notifications/Events/UserHasVolunteered.php + + - + message: '#^Cannot access property \$id on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Notifications/Events/UserHasVolunteered.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 2 + path: app/Notifications/Events/UserHasVolunteered.php + + - + message: '#^Method App\\Notifications\\Events\\UserHasVolunteered\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Events/UserHasVolunteered.php + + - + message: '#^Method App\\Notifications\\Events\\UserHasVolunteered\:\:via\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Events/UserHasVolunteered.php + + - + message: '#^Property App\\Notifications\\Events\\UserHasVolunteered\:\:\$event type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Events/UserHasVolunteered.php + + - + message: '#^Cannot access property \$email on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Notifications/Events/VolunteeredToCrew.php + + - + message: '#^Cannot access property \$forename on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Notifications/Events/VolunteeredToCrew.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Notifications/Events/VolunteeredToCrew.php + + - + message: '#^Method App\\Notifications\\Events\\VolunteeredToCrew\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Events/VolunteeredToCrew.php + + - + message: '#^Method App\\Notifications\\Events\\VolunteeredToCrew\:\:via\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Events/VolunteeredToCrew.php + + - + message: '#^Property App\\Notifications\\Events\\VolunteeredToCrew\:\:\$event type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Events/VolunteeredToCrew.php + + - + message: '#^Method App\\Notifications\\Users\\ResetPasswordAdmin\:\:__construct\(\) has parameter \$password with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Notifications/Users/ResetPasswordAdmin.php + + - + message: '#^Method App\\Notifications\\Users\\ResetPasswordAdmin\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Users/ResetPasswordAdmin.php + + - + message: '#^Method App\\Notifications\\Users\\ResetPasswordAdmin\:\:via\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Users/ResetPasswordAdmin.php + + - + message: '#^Method App\\Notifications\\Users\\UserAccountCreated\:\:__construct\(\) has parameter \$password with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Notifications/Users/UserAccountCreated.php + + - + message: '#^Method App\\Notifications\\Users\\UserAccountCreated\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Users/UserAccountCreated.php + + - + message: '#^Method App\\Notifications\\Users\\UserAccountCreated\:\:via\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Notifications/Users/UserAccountCreated.php + + - + message: '#^Method App\\Observers\\Awards\\AwardObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/AwardObserver.php + + - + message: '#^Method App\\Observers\\Awards\\AwardObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/AwardObserver.php + + - + message: '#^Method App\\Observers\\Awards\\AwardObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/AwardObserver.php + + - + message: '#^Right side of && is always false\.$#' + identifier: booleanAnd.rightAlwaysFalse + count: 1 + path: app/Observers/Awards/AwardObserver.php + + - + message: '#^Method App\\Observers\\Awards\\NominationObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/NominationObserver.php + + - + message: '#^Method App\\Observers\\Awards\\NominationObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/NominationObserver.php + + - + message: '#^Method App\\Observers\\Awards\\NominationObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/NominationObserver.php + + - + message: '#^Method App\\Observers\\Awards\\SeasonObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/SeasonObserver.php + + - + message: '#^Method App\\Observers\\Awards\\SeasonObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/SeasonObserver.php + + - + message: '#^Method App\\Observers\\Awards\\SeasonObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/SeasonObserver.php + + - + message: '#^Method App\\Observers\\Awards\\VoteObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Awards/VoteObserver.php + + - + message: '#^Method App\\Observers\\Committee\\RoleObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Committee/RoleObserver.php + + - + message: '#^Method App\\Observers\\Committee\\RoleObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Committee/RoleObserver.php + + - + message: '#^Method App\\Observers\\Committee\\RoleObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Committee/RoleObserver.php + + - + message: '#^Method App\\Observers\\Elections\\ElectionObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Elections/ElectionObserver.php + + - + message: '#^Method App\\Observers\\Elections\\ElectionObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Elections/ElectionObserver.php + + - + message: '#^Method App\\Observers\\Elections\\ElectionObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Elections/ElectionObserver.php + + - + message: '#^Method App\\Observers\\Elections\\NominationObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Elections/NominationObserver.php + + - + message: '#^Method App\\Observers\\Elections\\NominationObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Elections/NominationObserver.php + + - + message: '#^Method App\\Observers\\Elections\\NominationObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Elections/NominationObserver.php + + - + message: '#^Method App\\Observers\\Equipment\\BreakageObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Equipment/BreakageObserver.php + + - + message: '#^Method App\\Observers\\Equipment\\BreakageObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Equipment/BreakageObserver.php + + - + message: '#^Method App\\Observers\\Equipment\\BreakageObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Equipment/BreakageObserver.php + + - + message: '#^Method App\\Observers\\Events\\CrewObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Events/CrewObserver.php + + - + message: '#^Method App\\Observers\\Events\\EmailObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Events/EmailObserver.php + + - + message: '#^Method App\\Observers\\Events\\EventObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Events/EventObserver.php + + - + message: '#^Method App\\Observers\\Events\\EventObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Events/EventObserver.php + + - + message: '#^Method App\\Observers\\Events\\EventObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Events/EventObserver.php + + - + message: '#^Method App\\Observers\\Events\\TimeObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Events/TimeObserver.php + + - + message: '#^Method App\\Observers\\Events\\TimeObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Events/TimeObserver.php + + - + message: '#^Method App\\Observers\\Events\\TimeObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Events/TimeObserver.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#' + identifier: property.notFound + count: 1 + path: app/Observers/ModelObserver.php + + - + message: '#^Method App\\Observers\\ModelObserver\:\:cleanForSaving\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/ModelObserver.php + + - + message: '#^Method App\\Observers\\ModelObserver\:\:cleanForSaving\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Observers/ModelObserver.php + + - + message: '#^Method App\\Observers\\ModelObserver\:\:getCreatedAttributes\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/ModelObserver.php + + - + message: '#^Method App\\Observers\\ModelObserver\:\:getDeletedAttributes\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/ModelObserver.php + + - + message: '#^Method App\\Observers\\ModelObserver\:\:getUpdatedAttributes\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/ModelObserver.php + + - + message: '#^Method App\\Observers\\QuoteObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/QuoteObserver.php + + - + message: '#^Method App\\Observers\\QuoteObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/QuoteObserver.php + + - + message: '#^Method App\\Observers\\QuoteObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/QuoteObserver.php + + - + message: '#^Method App\\Observers\\Resources\\CategoryObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Resources/CategoryObserver.php + + - + message: '#^Method App\\Observers\\Resources\\CategoryObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Resources/CategoryObserver.php + + - + message: '#^Method App\\Observers\\Resources\\CategoryObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Resources/CategoryObserver.php + + - + message: '#^Method App\\Observers\\Resources\\IssueObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Resources/IssueObserver.php + + - + message: '#^Method App\\Observers\\Resources\\ResourceObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Resources/ResourceObserver.php + + - + message: '#^Method App\\Observers\\Resources\\ResourceObserver\:\:deleted\(\) should return bool but return statement is missing\.$#' + identifier: return.missing + count: 2 + path: app/Observers/Resources/ResourceObserver.php + + - + message: '#^Method App\\Observers\\Resources\\ResourceObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Resources/ResourceObserver.php + + - + message: '#^Method App\\Observers\\Resources\\TagObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Resources/TagObserver.php + + - + message: '#^Method App\\Observers\\Resources\\TagObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Resources/TagObserver.php + + - + message: '#^Method App\\Observers\\Resources\\TagObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Resources/TagObserver.php + + - + message: '#^Method App\\Observers\\Training\\CategoryObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Training/CategoryObserver.php + + - + message: '#^Method App\\Observers\\Training\\CategoryObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Training/CategoryObserver.php + + - + message: '#^Method App\\Observers\\Training\\CategoryObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Training/CategoryObserver.php + + - + message: '#^Method App\\Observers\\Training\\Skills\\ApplicationObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Training/Skills/ApplicationObserver.php + + - + message: '#^Method App\\Observers\\Training\\Skills\\SkillObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Training/Skills/SkillObserver.php + + - + message: '#^Method App\\Observers\\Training\\Skills\\SkillObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Training/Skills/SkillObserver.php + + - + message: '#^Method App\\Observers\\Training\\Skills\\SkillObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Training/Skills/SkillObserver.php + + - + message: '#^Method App\\Observers\\Users\\GroupObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Users/GroupObserver.php + + - + message: '#^Method App\\Observers\\Users\\GroupObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Users/GroupObserver.php + + - + message: '#^Method App\\Observers\\Users\\GroupObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Users/GroupObserver.php + + - + message: '#^Method App\\Observers\\Users\\UserObserver\:\:created\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Users/UserObserver.php + + - + message: '#^Method App\\Observers\\Users\\UserObserver\:\:deleted\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Users/UserObserver.php + + - + message: '#^Method App\\Observers\\Users\\UserObserver\:\:updated\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Observers/Users/UserObserver.php + + - + message: '#^Cannot call method areNominationsOpen\(\) on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Policies/Awards/NominationPolicy.php + + - + message: '#^Method App\\Policies\\Awards\\SeasonPolicy\:\:create\(\) has invalid return type App\\Policies\\Awards\\boolø\.$#' + identifier: class.notFound + count: 1 + path: app/Policies/Awards/SeasonPolicy.php + + - + message: '#^Method App\\Policies\\Awards\\SeasonPolicy\:\:create\(\) should return App\\Policies\\Awards\\boolø but returns bool\.$#' + identifier: return.type + count: 1 + path: app/Policies/Awards/SeasonPolicy.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#2 \$skill \(App\\Models\\Training\\Skills\\Skill\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 2 + path: app/Policies/Training/Skills/SkillPolicy.php + + - + message: '#^Method App\\Providers\\AuthServiceProvider\:\:registerAuthGates\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/AuthServiceProvider.php + + - + message: '#^PHPDoc type array of property App\\Providers\\AuthServiceProvider\:\:\$policies is not covariant with PHPDoc type array\ of overridden property Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider\:\:\$policies\.$#' + identifier: property.phpDocType + count: 1 + path: app/Providers/AuthServiceProvider.php + + - + message: '#^Property App\\Providers\\AuthServiceProvider\:\:\$policies type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Providers/AuthServiceProvider.php + + - + message: '#^PHPDoc type array of property App\\Providers\\EventServiceProvider\:\:\$listen is not covariant with PHPDoc type array\\> of overridden property Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider\:\:\$listen\.$#' + identifier: property.phpDocType + count: 1 + path: app/Providers/EventServiceProvider.php + + - + message: '#^Property App\\Providers\\EventServiceProvider\:\:\$listen type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Providers/EventServiceProvider.php + + - + message: '#^Cannot access offset ''session\.store'' on Illuminate\\Contracts\\Foundation\\Application\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: app/Providers/NotificationServiceProvider.php + + - + message: '#^Class Package\\Notifications\\NotificationHandler does not have a constructor and must be instantiated without any parameters\.$#' + identifier: new.noConstructor + count: 1 + path: app/Providers/NotificationServiceProvider.php + + - + message: '#^Method App\\Providers\\ObserverServiceProvider\:\:observeAwards\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ObserverServiceProvider.php + + - + message: '#^Method App\\Providers\\ObserverServiceProvider\:\:observeCommittee\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ObserverServiceProvider.php + + - + message: '#^Method App\\Providers\\ObserverServiceProvider\:\:observeElections\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ObserverServiceProvider.php + + - + message: '#^Method App\\Providers\\ObserverServiceProvider\:\:observeEquipment\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ObserverServiceProvider.php + + - + message: '#^Method App\\Providers\\ObserverServiceProvider\:\:observeEvents\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ObserverServiceProvider.php + + - + message: '#^Method App\\Providers\\ObserverServiceProvider\:\:observeResources\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ObserverServiceProvider.php + + - + message: '#^Method App\\Providers\\ObserverServiceProvider\:\:observeTraining\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ObserverServiceProvider.php + + - + message: '#^Method App\\Providers\\ObserverServiceProvider\:\:observeUsers\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ObserverServiceProvider.php + + - + message: '#^Cannot access offset ''request'' on Illuminate\\Contracts\\Foundation\\Application\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: app/Providers/SearchToolsServiceProvider.php + + - + message: '#^Cannot access offset ''router'' on Illuminate\\Contracts\\Foundation\\Application\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: app/Providers/SearchToolsServiceProvider.php + + - + message: '#^Class App\\Providers\\SearchTools not found\.$#' + identifier: class.notFound + count: 1 + path: app/Providers/SearchToolsServiceProvider.php + + - + message: '#^Instantiated class App\\Providers\\SearchTools not found\.$#' + identifier: class.notFound + count: 1 + path: app/Providers/SearchToolsServiceProvider.php + + - + message: '#^Cannot access property \$name on Illuminate\\Database\\Eloquent\\Model\|null\.$#' + identifier: property.nonObject + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Cannot call method getName\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 2 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Cannot call method parameters\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Deprecated in PHP 8\.4\: Parameter \#1 \$customQuery \(array\) is implicitly nullable via default value null\.$#' + identifier: parameter.implicitlyNullable + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Method App\\Providers\\ViewServiceProvider\:\:attachMemberEvents\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Method App\\Providers\\ViewServiceProvider\:\:attachMemberSkills\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Method App\\Providers\\ViewServiceProvider\:\:attachResourceSearchVariables\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Method App\\Providers\\ViewServiceProvider\:\:attachResourceVariables\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Method App\\Providers\\ViewServiceProvider\:\:paginatorPath\(\) has parameter \$customQuery with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Parameter \#1 \$item of method Illuminate\\Support\\Collection\\:\:add\(\) expects App\\Models\\Training\\Category, object\{id\: null, name\: string, skills\: Illuminate\\Database\\Eloquent\\Collection\\}&stdClass given\.$#' + identifier: argument.type + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Unable to resolve the template type TGroupKey in call to method Illuminate\\Support\\Collection\\:\:groupBy\(\)$#' + identifier: argument.templateType + count: 1 + path: app/Providers/ViewServiceProvider.php + + - + message: '#^Binary operation "\+" between array\{''''\: mixed\} and Illuminate\\Database\\Eloquent\\Builder\ results in an error\.$#' + identifier: binaryOp.invalid + count: 2 + path: app/Services/Html/FormBuilder.php + + - + message: '#^Call to function is_array\(\) with string will always evaluate to false\.$#' + identifier: function.impossibleType + count: 1 + path: app/Services/Html/FormBuilder.php + + - + message: '#^Class App\\Services\\Html\\Collection not found\.$#' + identifier: class.notFound + count: 1 + path: app/Services/Html/FormBuilder.php + + - + message: '#^Instanceof between string and App\\Services\\Html\\Collection will always evaluate to false\.$#' + identifier: instanceof.alwaysFalse + count: 1 + path: app/Services/Html/FormBuilder.php + + - + message: '#^Method App\\Services\\Html\\FormBuilder\:\:memberList\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Services/Html/FormBuilder.php + + - + message: '#^Method App\\Services\\Html\\FormBuilder\:\:memberList\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Services/Html/FormBuilder.php + + - + message: '#^Method App\\Services\\Html\\FormBuilder\:\:userList\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Services/Html/FormBuilder.php + + - + message: '#^Method App\\Services\\Html\\FormBuilder\:\:userList\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Services/Html/FormBuilder.php + + - + message: '#^Cannot access property \$id on App\\Models\\Users\\User\|null\.$#' + identifier: property.nonObject + count: 3 + path: app/Services/QuoteService.php + + - + message: '#^Cannot call method addMinutes\(\) on Carbon\\Carbon\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/Services/QuoteService.php + + - + message: '#^Method App\\Services\\QuoteService\:\:getPaginatedQuotes\(\) return type with generic class Illuminate\\Pagination\\LengthAwarePaginator does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: app/Services/QuoteService.php + + - + message: '#^PHPDoc tag @var for variable \$quotes contains generic class Illuminate\\Pagination\\LengthAwarePaginator but does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: app/Services/QuoteService.php + + - + message: '#^Binary operation "\." between ''/\^'' and array\\|string results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Call to an undefined method Illuminate\\Contracts\\Translation\\Translator\:\:trans\(\)\.$#' + identifier: method.notFound + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateDatetime\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateDatetime\(\) has parameter \$parameters with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateDatetime\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateEach\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateEach\(\) has parameter \$parameters with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateEach\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateName\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateName\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validatePhone\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validatePhone\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateTime\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\Validation\\Validator\:\:validateTime\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: app/Validation/Validator.php + + - + message: '#^Method App\\View\\Composers\\ContactMenuComposer\:\:compose\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/View/Composers/ContactMenuComposer.php + + - + message: '#^Cannot call method active\(\) on array\|Lavary\\Menu\\Item\|string\.$#' + identifier: method.nonObject + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Cannot call method add\(\) on array\|Lavary\\Menu\\Item\|string\.$#' + identifier: method.nonObject + count: 31 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Cannot call method divide\(\) on array\|Lavary\\Menu\\Item\|string\.$#' + identifier: method.nonObject + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Cannot call method isAdmin\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Cannot call method isMember\(\) on App\\Models\\Users\\User\|null\.$#' + identifier: method.nonObject + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^If condition is always true\.$#' + identifier: if.alwaysTrue + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Method App\\View\\Composers\\MainMenuComposer\:\:addEventsMenu\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Method App\\View\\Composers\\MainMenuComposer\:\:addMediaMenu\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Method App\\View\\Composers\\MainMenuComposer\:\:addMembersMenu\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Method App\\View\\Composers\\MainMenuComposer\:\:addResourcesMenu\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Method App\\View\\Composers\\MainMenuComposer\:\:compose\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Property App\\View\\Composers\\MainMenuComposer\:\:\$user \(App\\Models\\Users\\User\) does not accept App\\Models\\Users\\User\|null\.$#' + identifier: assign.propertyType + count: 1 + path: app/View/Composers/MainMenuComposer.php + + - + message: '#^Method App\\View\\Composers\\MemberMenuComposer\:\:compose\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/View/Composers/MemberMenuComposer.php + + - + message: '#^Method App\\View\\Composers\\ViewComposer\:\:compose\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: app/View/Composers/ViewComposer.php + + - + message: '#^Parameter \#1 \$title of static method Illuminate\\Support\\Str\:\:slug\(\) expects string, bool\|string given\.$#' + identifier: argument.type + count: 1 + path: config/cache.php + + - + message: '#^Access to an undefined property Illuminate\\Database\\Schema\\ColumnDefinition\:\:\$comment\.$#' + identifier: property.notFound + count: 1 + path: database/migrations/2017_12_01_000006_create_resources_tables.php + + - + message: '#^Binary operation "\." between non\-falsy\-string and array\\|string results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: modules/StaticPage/app/Providers/StaticPageServiceProvider.php + + - + message: '#^Method Modules\\StaticPage\\Providers\\StaticPageServiceProvider\:\:getPublishableViewPaths\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: modules/StaticPage/app/Providers/StaticPageServiceProvider.php + + - + message: '#^Method Modules\\StaticPage\\Providers\\StaticPageServiceProvider\:\:provides\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: modules/StaticPage/app/Providers/StaticPageServiceProvider.php + + - + message: '#^Cannot call method close\(\) on Package\\Notifications\\Notification\|string\.$#' + identifier: method.nonObject + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Method Package\\Notifications\\Notification\:\:bag\(\) has parameter \$bag with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Method Package\\Notifications\\Notification\:\:close\(\) has parameter \$close with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Method Package\\Notifications\\Notification\:\:enclose\(\) has parameter \$tag with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Method Package\\Notifications\\Notification\:\:level\(\) has parameter \$level with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Method Package\\Notifications\\Notification\:\:message\(\) has parameter \$message with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Method Package\\Notifications\\Notification\:\:title\(\) has parameter \$title with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Method Package\\Notifications\\Notification\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Property Package\\Notifications\\Notification\:\:\$attributes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Property Package\\Notifications\\Notification\:\:\$level \(int\) does not accept default value of type string\.$#' + identifier: property.defaultValue + count: 1 + path: packages/Notifications/Notification.php + + - + message: '#^Strict comparison using \!\=\= between mixed and null will always evaluate to true\.$#' + identifier: notIdentical.alwaysTrue + count: 2 + path: packages/Notifications/Notification.php + + - + message: '#^Strict comparison using \!\=\= between non\-falsy\-string and null will always evaluate to true\.$#' + identifier: notIdentical.alwaysTrue + count: 3 + path: packages/Notifications/Notification.php + + - + message: '#^Method Package\\Notifications\\NotificationHandler\:\:all\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/Notifications/NotificationHandler.php + + - + message: '#^Method Package\\Notifications\\NotificationHandler\:\:bags\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/Notifications/NotificationHandler.php + + - + message: '#^Method Package\\Notifications\\NotificationHandler\:\:get\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/Notifications/NotificationHandler.php + + - + message: '#^Method Package\\Notifications\\NotificationHandler\:\:notification\(\) has parameter \$level with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/Notifications/NotificationHandler.php + + - + message: '#^Method Package\\Notifications\\NotificationHandler\:\:notification\(\) has parameter \$message with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/Notifications/NotificationHandler.php + + - + message: '#^Parameter \#4 \$bag of method Package\\Notifications\\NotificationHandler\:\:notification\(\) expects string, null given\.$#' + identifier: argument.type + count: 4 + path: packages/Notifications/NotificationHandler.php + + - + message: '#^Property Package\\Notifications\\NotificationHandler\:\:\$notifications type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/Notifications/NotificationHandler.php + + - + message: '#^Cannot call method parameter\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 2 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Cannot call method parameters\(\) on Illuminate\\Routing\\Route\|null\.$#' + identifier: method.nonObject + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Method Package\\SearchTools\\SearchTools\:\:addFilterOption\(\) has parameter \$filter with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Method Package\\SearchTools\\SearchTools\:\:addFilterOption\(\) has parameter \$text with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Method Package\\SearchTools\\SearchTools\:\:createUrl\(\) has parameter \$query with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Method Package\\SearchTools\\SearchTools\:\:getQueryValue\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Method Package\\SearchTools\\SearchTools\:\:hide\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Method Package\\SearchTools\\SearchTools\:\:render\(\) should return \$this\(Package\\SearchTools\\SearchTools\) but returns Illuminate\\View\\View\.$#' + identifier: return.type + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Method Package\\SearchTools\\SearchTools\:\:setFilterOptions\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Method Package\\SearchTools\\SearchTools\:\:setNoFilterText\(\) has parameter \$text with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Method Package\\SearchTools\\SearchTools\:\:show\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Property Package\\SearchTools\\SearchTools\:\:\$filterOptions type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Property Package\\SearchTools\\SearchTools\:\:\$show type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Property Package\\SearchTools\\SearchTools\:\:\$values type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/SearchTools/SearchTools.php + + - + message: '#^Call to function is_array\(\) with array will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Call to function is_bool\(\) with array will always evaluate to false\.$#' + identifier: function.impossibleType + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:authorise\(\) has parameter \$method with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:delete\(\) has parameter \$key with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:delete\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:destroy\(\) has parameter \$key with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:destroy\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:edit\(\) has parameter \$key with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:getAttributes\(\) has parameter \$model with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:getModelFromDatabase\(\) has parameter \$key with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:getValidationMessages\(\) has parameter \$model with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:getValidationMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:getValidationRules\(\) has parameter \$model with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:getValidationRules\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:requiresAjax\(\) has parameter \$method with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:restore\(\) has parameter \$key with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:restore\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:restore\(\) should return array but empty return statement found\.$#' + identifier: return.empty + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:shouldAuthorise\(\) has parameter \$method with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:store\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:update\(\) has parameter \$key with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:update\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:verifyAjax\(\) has parameter \$method with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:view\(\) has parameter \$key with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Parameter \#1 \$callback of function call_user_func expects callable\(\)\: mixed, array\{string, ''create''\} given\.$#' + identifier: argument.type + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Parameter \#1 \$callback of function call_user_func_array expects callable\(\)\: mixed, array\{string, ''where''\} given\.$#' + identifier: argument.type + count: 2 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Parameter \#1 \$view of function view expects view\-string\|null, string given\.$#' + identifier: argument.type + count: 4 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Property Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:\$attributes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Property Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:\$requireAjax type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Property Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:\$validationMessages type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Property Package\\WebDevTools\\Laravel\\Controllers\\SimpleCrudController\:\:\$validationRules type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Controllers/SimpleCrudController.php + + - + message: '#^Call to method getMessage\(\) on an unknown class Prophecy\\Exception\\Doubler\\MethodNotFoundException\.$#' + identifier: class.notFound + count: 1 + path: packages/WebDevTools/Laravel/Errors/Handler.php + + - + message: '#^Class Prophecy\\Exception\\Doubler\\MethodNotFoundException not found\.$#' + identifier: class.notFound + count: 1 + path: packages/WebDevTools/Laravel/Errors/Handler.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Errors\\Handler\:\:prepareException\(\) should return Exception but returns Throwable\.$#' + identifier: return.type + count: 1 + path: packages/WebDevTools/Laravel/Errors/Handler.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Errors\\Handler\:\:shouldReturnAjaxError\(\) has parameter \$request with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Errors/Handler.php + + - + message: '#^Call to function is_array\(\) with string will always evaluate to false\.$#' + identifier: function.impossibleType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Class Package\\WebDevTools\\Laravel\\Html\\Collection not found\.$#' + identifier: class.notFound + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Instanceof between string and Package\\WebDevTools\\Laravel\\Html\\Collection will always evaluate to false\.$#' + identifier: instanceof.alwaysFalse + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:date\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:datetime\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:input\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:label\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:select\(\) has parameter \$list with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:select\(\) has parameter \$optgroupsAttributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:select\(\) has parameter \$optionsAttributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:select\(\) has parameter \$selectAttributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:select2\(\) has parameter \$list with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:select2\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:select2\(\) has parameter \$optionsAttributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:select2\(\) has parameter \$selectAttributes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:selectDate\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:selectDate\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:selectDateTime\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:selectDateTime\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:selectTime\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:selectTime\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:setBoostrapClasses\(\) has parameter \$name with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:setBoostrapClasses\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:setBoostrapClasses\(\) has parameter \$type with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:setBoostrapClasses\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:textarea\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:time\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Parameter \#2 \$value \(null\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:date\(\) should be compatible with parameter \$value \(string\) of method Collective\\Html\\FormBuilder\:\:date\(\)$#' + identifier: method.childParameterType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Parameter \#2 \$value \(null\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:datetime\(\) should be compatible with parameter \$value \(string\) of method Collective\\Html\\FormBuilder\:\:datetime\(\)$#' + identifier: method.childParameterType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Parameter \#2 \$value \(null\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:label\(\) should be compatible with parameter \$value \(string\) of method Collective\\Html\\FormBuilder\:\:label\(\)$#' + identifier: method.childParameterType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Parameter \#2 \$value \(null\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:textarea\(\) should be compatible with parameter \$value \(string\) of method Collective\\Html\\FormBuilder\:\:textarea\(\)$#' + identifier: method.childParameterType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Parameter \#2 \$value \(null\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:time\(\) should be compatible with parameter \$value \(string\) of method Collective\\Html\\FormBuilder\:\:time\(\)$#' + identifier: method.childParameterType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Parameter \#2 \$value of method Collective\\Html\\FormBuilder\:\:getValueAttribute\(\) expects string\|null, int given\.$#' + identifier: argument.type + count: 5 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Parameter \#3 \$selected \(null\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:select\(\) should be compatible with parameter \$selected \(bool\|string\) of method Collective\\Html\\FormBuilder\:\:select\(\)$#' + identifier: method.childParameterType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Parameter \#3 \$value \(null\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:input\(\) should be compatible with parameter \$value \(string\) of method Collective\\Html\\FormBuilder\:\:input\(\)$#' + identifier: method.childParameterType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Return type \(string\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:date\(\) should be compatible with return type \(Illuminate\\Support\\HtmlString\) of method Collective\\Html\\FormBuilder\:\:date\(\)$#' + identifier: method.childReturnType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Return type \(string\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:datetime\(\) should be compatible with return type \(Illuminate\\Support\\HtmlString\) of method Collective\\Html\\FormBuilder\:\:datetime\(\)$#' + identifier: method.childReturnType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Return type \(string\) of method Package\\WebDevTools\\Laravel\\Html\\FormBuilder\:\:time\(\) should be compatible with return type \(Illuminate\\Support\\HtmlString\) of method Collective\\Html\\FormBuilder\:\:time\(\)$#' + identifier: method.childReturnType + count: 1 + path: packages/WebDevTools/Laravel/Html/FormBuilder.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Policies\\SimpleCrudPolicy\:\:create\(\) has parameter \$user with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Policies/SimpleCrudPolicy.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Policies\\SimpleCrudPolicy\:\:delete\(\) has parameter \$model with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Policies/SimpleCrudPolicy.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Policies\\SimpleCrudPolicy\:\:delete\(\) has parameter \$user with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Policies/SimpleCrudPolicy.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Policies\\SimpleCrudPolicy\:\:edit\(\) has parameter \$model with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Policies/SimpleCrudPolicy.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Policies\\SimpleCrudPolicy\:\:edit\(\) has parameter \$user with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Policies/SimpleCrudPolicy.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Policies\\SimpleCrudPolicy\:\:index\(\) has parameter \$user with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Policies/SimpleCrudPolicy.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Policies\\SimpleCrudPolicy\:\:view\(\) has parameter \$user with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Policies/SimpleCrudPolicy.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Providers\\BladeServiceProvider\:\:getDirectiveArguments\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Providers/BladeServiceProvider.php + + - + message: '#^Access to an undefined property Illuminate\\Contracts\\Foundation\\Application\:\:\$validator\.$#' + identifier: property.notFound + count: 1 + path: packages/WebDevTools/Laravel/Providers/ValidationServiceProvider.php + + - + message: '#^Trait Package\\WebDevTools\\Laravel\\Traits\\AllowsAdminOverride is used zero times and is not analysed\.$#' + identifier: trait.unused + count: 1 + path: packages/WebDevTools/Laravel/Traits/AllowsAdminOverride.php + + - + message: '#^Trait Package\\WebDevTools\\Laravel\\Traits\\IsOrdered is used zero times and is not analysed\.$#' + identifier: trait.unused + count: 1 + path: packages/WebDevTools/Laravel/Traits/IsOrdered.php + + - + message: '#^Trait Package\\WebDevTools\\Laravel\\Traits\\UsesSoftDeletes is used zero times and is not analysed\.$#' + identifier: trait.unused + count: 1 + path: packages/WebDevTools/Laravel/Traits/UsesSoftDeletes.php + + - + message: '#^Binary operation "\." between ''/\^'' and array\\|string results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Validation\\Validator\:\:validateDatetime\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Validation\\Validator\:\:validateDatetime\(\) has parameter \$parameters with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Validation\\Validator\:\:validateDatetime\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Validation\\Validator\:\:validateName\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Validation\\Validator\:\:validateName\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Validation\\Validator\:\:validatePhone\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Validation\\Validator\:\:validatePhone\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Validation\\Validator\:\:validateTime\(\) has parameter \$attribute with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php + + - + message: '#^Method Package\\WebDevTools\\Laravel\\Validation\\Validator\:\:validateTime\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: packages/WebDevTools/Laravel/Validation/Validator.php diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 00000000..dc82c404 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,17 @@ +includes: + - vendor/larastan/larastan/extension.neon + - vendor/phpstan/phpstan-phpunit/extension.neon + - vendor/phpstan/phpstan-phpunit/rules.neon + - vendor/pestphp/pest/extension.neon + - phpstan-baseline.neon + +parameters: + level: 8 + paths: + - app/ + - config/ + - database/ + - modules/ + - packages/ + - routes/ + - tests/ diff --git a/scripts/set_env.sh b/scripts/set_env.sh new file mode 100755 index 00000000..bc8fd8a8 --- /dev/null +++ b/scripts/set_env.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ ! -f .env ]]; then + echo "ERROR: .env file missing" >&2 + exit 1 +fi + +if [[ "${1:-}" = "" ]]; then + echo "ERROR: missing name of env variable to set (1st argument)" + exit 1 +fi + +if [[ "${2:-}" = "" ]]; then + echo "ERROR: missing new value of env variable (2nd argument)" + exit 1 +fi + +echo "$1=$2" >> .env +echo "Written $1 to .env" diff --git a/tests/Pest.php b/tests/Pest.php index 2c1ff619..5f8c3f36 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -24,10 +24,6 @@ | */ -expect()->extend('toBeOne', function () { - return $this->toBe(1); -}); - /* |-------------------------------------------------------------------------- | Functions @@ -38,8 +34,3 @@ | global functions to help you to reduce the number of lines of code in your test files. | */ - -function something() -{ - // .. -} From d0a3490b5fae6747cbe05f549a4295e08ee13155 Mon Sep 17 00:00:00 2001 From: "Ben." Date: Wed, 10 Dec 2025 22:58:25 +0000 Subject: [PATCH 8/9] feat: add hires email to booking request form (#81) --- resources/views/contact/book.blade.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/views/contact/book.blade.php b/resources/views/contact/book.blade.php index 71a659c6..b2447aeb 100755 --- a/resources/views/contact/book.blade.php +++ b/resources/views/contact/book.blade.php @@ -16,6 +16,8 @@ please note that this is not a confirmation that Backstage will crew your event. The Production Manager will get back to you with a definite answer as soon as possible.

+

Suppliers should contact hires@bts-crew.com for dry hires.

+ {!! Form::open() !!}
Event Details From b4fe715434f44ad64f72642558f798d4671987ad Mon Sep 17 00:00:00 2001 From: Ben754444 <50147798+Ben754444@users.noreply.github.com> Date: Fri, 2 Jan 2026 16:13:18 +0000 Subject: [PATCH 9/9] feat: additonal person's contact details Signed-off-by: Ben754444 <50147798+Ben754444@users.noreply.github.com> --- .../Contact/AccidentController.php | 10 ++++++- app/Http/Requests/Contact/AccidentRequest.php | 5 ++++ app/Mail/Contact/AccidentReportReceipt.php | 2 +- resources/views/contact/accident.blade.php | 28 +++++++++++++++++++ .../views/emails/contact/_accident.blade.php | 6 ++++ 5 files changed, 49 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Contact/AccidentController.php b/app/Http/Controllers/Contact/AccidentController.php index 95a08a52..548ad8b2 100755 --- a/app/Http/Controllers/Contact/AccidentController.php +++ b/app/Http/Controllers/Contact/AccidentController.php @@ -59,7 +59,15 @@ public function process(AccidentRequest $request) 'severity_email' => AccidentRequest::$Severities[$request->get('severity')], ]); - Mail::to(config('bts.emails.safety.accident_reports'))->queue(new AccidentReport($request->all())); + Mail::to(config('bts.emails.safety.accident_reports'))->queue( + new AccidentReport($request->all()) + ); + if ($request->get('monitor_email')) + { + Mail::to($request->get('monitor_email'), $request->get('monitor_name'))->queue( + new AccidentReport($request->all()) + ); + } Mail::to($request->get('contact_email'), $request->get('contact_name'))->queue( new AccidentReportReceipt($request->all()), ); diff --git a/app/Http/Requests/Contact/AccidentRequest.php b/app/Http/Requests/Contact/AccidentRequest.php index 1e6b4dff..2eba308e 100755 --- a/app/Http/Requests/Contact/AccidentRequest.php +++ b/app/Http/Requests/Contact/AccidentRequest.php @@ -66,6 +66,8 @@ public function rules() 'absence_details' => 'required_if:severity,1,2,3', 'details' => 'required', 'injured_name' => 'required', + 'monitor_name' => 'required_if:severity,1', + 'monitor_email' => 'nullable|required_if:severity,1|email', 'contact_name' => 'required', 'contact_email' => 'required|email', 'contact_phone' => 'required|phone', @@ -92,6 +94,9 @@ public function messages() 'absence_details.required_if' => 'Please enter any details of their absence from employment or studies', 'details.required' => 'Please provide the accident details', 'injured_name.required' => 'Please provide the name of the injured party', + 'monitor_name.required_if' => 'Please provide the name of someone monitoring the injured party', + 'monitor_email.required_if' => 'Please provide an email address for the monitor', + 'monitor_email.email' => 'Please provide a valid email address for the monitor', 'contact_name.required' => 'Please provide the name of the contact person', 'contact_email.required' => 'Please provide an email address for the contact', 'contact_email.email' => 'Please provide a valid email address', diff --git a/app/Mail/Contact/AccidentReportReceipt.php b/app/Mail/Contact/AccidentReportReceipt.php index a12895f0..e8c8c444 100755 --- a/app/Mail/Contact/AccidentReportReceipt.php +++ b/app/Mail/Contact/AccidentReportReceipt.php @@ -29,7 +29,7 @@ public function __construct(array $data) * Build the message. * @return $this */ - public function build() + public function build() { [$forename] = explode(' ', $this->report['contact_name']); diff --git a/resources/views/contact/accident.blade.php b/resources/views/contact/accident.blade.php index d0df2d6c..9c4b7eb6 100755 --- a/resources/views/contact/accident.blade.php +++ b/resources/views/contact/accident.blade.php @@ -84,6 +84,34 @@ @InputError('person_type_other')
+
+ Monitor Contact Details + +

The details of someone who agrees to monitor the injuried party's condition following the injury. They will be sent a copy of this report.

+ +
+ {!! Form::label('monitor_name', 'Name:') !!} +
+ + + + {!! Form::text('monitor_name', null, ['placeholder' => 'The name of the contact']) !!} +
+ @InputError('monitor_name') +
+ + +
+ {!! Form::label('monitor_email', 'Email:') !!} +
+ + + + {!! Form::text('monitor_email', null, ['placeholder' => 'Their email address']) !!} +
+ @InputError('monitor_email') +
+
Contact Details diff --git a/resources/views/emails/contact/_accident.blade.php b/resources/views/emails/contact/_accident.blade.php index c824fdef..4e84666f 100755 --- a/resources/views/emails/contact/_accident.blade.php +++ b/resources/views/emails/contact/_accident.blade.php @@ -12,6 +12,12 @@ **Name:** {{ $report['injured_name'] }}
**Category:** {{ $report['person_type_email'] }}
+@if(@$report['monitor_name']) +## Monitoring contact details +**Name:** {{ $report['monitor_name'] }}
+**Email:** {{ $report['monitor_email'] }}
+@endif + ## Contact details **Name:** {{ $report['contact_name'] }}
**Email:** [{{ $report['contact_email'] }}](mailto:{{ $report['contact_email'] }})