SDSM:Pending Changes: Difference between revisions
(Add sub-headings to Laravel 10 upgrade task) |
(Add summary of JS dependency upgrades subsection, initially just listing old versions without upgrades) |
||
Line 21: | Line 21: | ||
== SDS Laravel: Changes to Third-Party Dependencies == | == SDS Laravel: Changes to Third-Party Dependencies == | ||
=== 2024 | === 2024 Jun 12: Upgrade To Laravel 10 and Vue 3 === | ||
==== Summary of Dependency Upgrades or Removals ==== | ==== Summary of PHP Dependency Upgrades or Removals ==== | ||
This task updated <code>composer.json</code> to require the latest | This task updated <code>composer.json</code> to require the latest | ||
PHP-8.1-compatible | PHP-8.1-compatible versions of all PHP library dependencies, | ||
in particular taking Laravel from <code>8.x</code> to <code>10.x</code>. | |||
To be | To be specific, it made these dependency changes: | ||
* barryvdh/laravel-debugbar (^3.7 to ^3.13.5) | * barryvdh/laravel-debugbar (^3.7 to ^3.13.5) | ||
Line 41: | Line 41: | ||
* juliomotol/laravel-auth-timeout (^3.1.1 to ^4.1) | * juliomotol/laravel-auth-timeout (^3.1.1 to ^4.1) | ||
* lab404/laravel-impersonate (^1.7.5) | * lab404/laravel-impersonate (^1.7.5) | ||
* laravel/framework (^8.83.27 to ^10.48. | * laravel/framework (^8.83.27 to ^10.48.12) | ||
* laravel/helpers (^1.7 unchanged but possibly no longer needed) | * laravel/helpers (^1.7 unchanged but possibly no longer needed) | ||
* laravel/tinker (^2.9 unchanged) | * laravel/tinker (^2.9 unchanged) | ||
Line 48: | Line 48: | ||
* nunomaduro/collision (^5.11 to ^7.10) | * nunomaduro/collision (^5.11 to ^7.10) | ||
* phpunit/phpunit (^10.5.20 unchanged) | * phpunit/phpunit (^10.5.20 unchanged) | ||
* spatie/laravel-ignition (^1.6.4 to ^2. | * spatie/laravel-ignition (^1.6.4 to ^2.8) | ||
* staudenmeir/eloquent-has-many-deep (^1.14.4 to ^1.19.3) | * staudenmeir/eloquent-has-many-deep (^1.14.4 to ^1.19.4) | ||
==== Summary of JavaScript Dependency Upgrades or Removals ==== | |||
This task updated <code>composer.json</code> to require the latest | |||
versions of all JavaScript library dependencies, | |||
in particular taking Vue from <code>2.x</code> to <code>3.x</code>. | |||
To be specific, it made these dependency changes: | |||
* @fortawesome/fontawesome-free (^5.15.4 unchanged) | |||
* axios (^0.27.2 unchanged) | |||
* bootstrap (^4.6.2 unchanged) | |||
* bootstrap-select (^1.13.18 unchanged) | |||
* cross-env (^7.0.3 unchanged) | |||
* font-awesome (^4.7.0 unchanged) | |||
* jquery (^3.7.1 unchanged) | |||
* jquery-ui (^1.13.3 unchanged) | |||
* laravel-mix (^5.0.9 unchanged) | |||
* lodash (^4.17.21 unchanged) | |||
* moment (^2.30.1 unchanged) | |||
* popper.js (^1.16.1 unchanged) | |||
* resolve-url-loader (^3.1.5 unchanged) | |||
* sass (^1.77.4 unchanged) | |||
* sass-loader (^8.0.2 unchanged) | |||
* tempusdominus-bootstrap-4 (^5.39.2 unchanged) | |||
* tempusdominus-core (^5.19.3 unchanged) | |||
* vue (^2.7.16 unchanged) | |||
* vue-bootstrap-datetimepicker (^5.0.1 unchanged) | |||
* vue-template-compiler (^2.7.16 unchanged) | |||
==== Changes For goldspecdigital/laravel-eloquent-uuid Removal ==== | ==== Changes For goldspecdigital/laravel-eloquent-uuid Removal ==== |
Revision as of 10:08, 12 June 2024
This document consists of multiple parts; for a directory to all of the
parts, see SDSM:Index.
Description
This part of the SDS Modernization (SDSM) document enumerates a not necessarily exhaustive list of pending changes or improvements that were made to SDS, made by Darren Duncan if by whom is not otherwise specified.
It is similar to the Historical Changes part but that it describes work which was prepared and published in a Git branch but it was deemed premature to merge it to the trunk, such as due to a desire for more testing first, or because it was possibly unfinished; in contrast, Historical is for work that was merged to trunk.
SDS Laravel: Changes to Third-Party Dependencies
2024 Jun 12: Upgrade To Laravel 10 and Vue 3
Summary of PHP Dependency Upgrades or Removals
This task updated composer.json
to require the latest
PHP-8.1-compatible versions of all PHP library dependencies,
in particular taking Laravel from 8.x
to 10.x
.
To be specific, it made these dependency changes:
- barryvdh/laravel-debugbar (^3.7 to ^3.13.5)
- directorytree/ldaprecord-laravel (^2.7.3 unchanged but upgrade exists)
- etern8ty/beanstream (dev-master unchanged but upgrade exists)
- fakerphp/faker (^1.23.1 unchanged)
- fideloper/proxy (^4.4.2 removed as Laravel has its upgrade built-in)
- goldspecdigital/laravel-eloquent-uuid (^8.0.1 removed as Laravel has its upgrade built-in)
- guzzlehttp/guzzle (^7.8.1 unchanged)
- intervention/image (^2.7.2 unchanged but upgrade exists)
- juliomotol/laravel-auth-timeout (^3.1.1 to ^4.1)
- lab404/laravel-impersonate (^1.7.5)
- laravel/framework (^8.83.27 to ^10.48.12)
- laravel/helpers (^1.7 unchanged but possibly no longer needed)
- laravel/tinker (^2.9 unchanged)
- laravel/ui (^3.4.6 to 4.5.2)
- mockery/mockery (^1.6.12 unchanged)
- nunomaduro/collision (^5.11 to ^7.10)
- phpunit/phpunit (^10.5.20 unchanged)
- spatie/laravel-ignition (^1.6.4 to ^2.8)
- staudenmeir/eloquent-has-many-deep (^1.14.4 to ^1.19.4)
Summary of JavaScript Dependency Upgrades or Removals
This task updated composer.json
to require the latest
versions of all JavaScript library dependencies,
in particular taking Vue from 2.x
to 3.x
.
To be specific, it made these dependency changes:
- @fortawesome/fontawesome-free (^5.15.4 unchanged)
- axios (^0.27.2 unchanged)
- bootstrap (^4.6.2 unchanged)
- bootstrap-select (^1.13.18 unchanged)
- cross-env (^7.0.3 unchanged)
- font-awesome (^4.7.0 unchanged)
- jquery (^3.7.1 unchanged)
- jquery-ui (^1.13.3 unchanged)
- laravel-mix (^5.0.9 unchanged)
- lodash (^4.17.21 unchanged)
- moment (^2.30.1 unchanged)
- popper.js (^1.16.1 unchanged)
- resolve-url-loader (^3.1.5 unchanged)
- sass (^1.77.4 unchanged)
- sass-loader (^8.0.2 unchanged)
- tempusdominus-bootstrap-4 (^5.39.2 unchanged)
- tempusdominus-core (^5.19.3 unchanged)
- vue (^2.7.16 unchanged)
- vue-bootstrap-datetimepicker (^5.0.1 unchanged)
- vue-template-compiler (^2.7.16 unchanged)
Changes For goldspecdigital/laravel-eloquent-uuid Removal
This task also updated these 5 PHP source files to be compatible with the
replacement of goldspecdigital/laravel-eloquent-uuid
with a
Laravel built-in:
- app/Models/Application/Application.php
- app/Models/User.php
- app/Models/User/Student.php
- app/Models/User/Teacher.php
- app/Models/User/UserContract.php
These further 3 files also referenced the trait but commented out, so not current users but possible past or future users:
- app/Models/Application/AppUser.php
- app/Models/User/Address.php
- app/Models/User/Guardian.php
For each of the above 8 files, there were these 2 line subsitutions:
use GoldSpecDigital\LaravelEloquentUUID\Database\Eloquent\Uuid; use Uuid;
use Illuminate\Database\Eloquent\Concerns\HasUuids; use HasUuids;
Here is a description of the above built-in feature in Laravel 9.3+:
https://laravel.com/docs/11.x/eloquent#uuid-and-ulid-keys
The purpose of that reimplemented functionality was to empower use of generated UUIDs for primary key fields of some database tables instead of the serially generated integers that SDS Laravel more typically uses; Laravel Eloquent only gained built-in support for UUIDs with version 9.3.
This task also deleted the single PHP file
app/Models/Traits/Uuids.php
as it appeared to be unused.
Changes For fideloper/proxy Removal
This task also updated app/Http/Middleware/TrustProxies.php
to
be compatible with the replacement of fideloper/proxy
with a
Laravel built-in. The changes were in 2 spots.
First was this substitution:
use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
Second was this substitution:
protected $headers = Request::HEADER_X_FORWARDED_ALL;
protected $headers = Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_AWS_ELB;
Changes For juliomotol/laravel-auth-timeout Upgrade
This task also updated
app/Http/Middleware/AuthTimeoutMiddleware.php
to be
compatible with the juliomotol/laravel-auth-timeout
upgrade.
There was this 1 substitution:
use JulioMotol\AuthTimeout\Middleware\AuthTimeoutMiddleware as BaseMiddleware;
use JulioMotol\AuthTimeout\Middlewares\CheckAuthTimeout as BaseMiddleware;
Note that juliomotol/laravel-auth-timeout
must be upgraded
simultaneously with Laravel since the former's versions 3.1.1 and 4.1
respectively require Laravel 8 and 10 respectively.
See https://github.com/juliomotol/laravel-auth-timeout/blob/master/CHANGELOG.md for more change details and upgrade notes on that.
Changes For Laravel 10 Removal of "dates" Model Attribute
This task also updated 51 PHP source files to be compatible with a breaking change made by Laravel itself with version 10.
Laravel supported a "dates" model attribute through version 9, and then Laravel 10 removed it. The function of this was to enumerate database/model fields that were supposed to be automatically converted to Carbon DateTime objects; so under Laravel 8, any "dates" declarations would be respected, while under Laravel 10 they would be ignored.
Compare:
- https://laravel.com/api/9.x/Illuminate/Database/Eloquent/Concerns/HasAttributes.html
- https://laravel.com/api/10.x/Illuminate/Database/Eloquent/Concerns/HasAttributes.html
As a result, simply upgrading SDS Laravel from Laravel 8 to 10 resulted
in many parts of the app breaking in various ways including when simply
visiting the post-login home screen, as PHP died with errors like
Call to a member function format() on int
.
To fix this, any instances of protected $dates = ['x',...]
in model classes were replaced with
protected $casts = ['x'=>'datetime',...]
which was the more modern way to get the same functionality, which exists
in both Laravel 8 and 10. For the few model classes that already had other
$casts
declarations, the replacements were merged with those.
While the "dates" change could have been its own task that was merged to trunk prior to and separately from the current Laravel 10 upgrade task, it was combined with the latter to streamline testing, as both had potential impacts over a large fraction of the app.
Excluded Upgrades
This task excluded upgrades to 3 PHP library dependencies for whom major upgrades existed, and upgrading those is left to separate tasks following the Laravel 8 to 10 upgrade.