SDSM:Pending Changes

From SMUSwiki
Revision as of 10:40, 15 May 2024 by Darren.duncan (talk | contribs) (Add comment that juliomotol can't be upgraded prior to Laravel 10 upgrade.)
Jump to navigation Jump to search


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.

RETURN

SDS Laravel: Internal Design Changes

2024 May 7: Replace model attrs "dates" with "casts"

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:

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.

The changes of this task were not merged to trunk yet because it was deemed important to give each instance of the changed 51 model classes more thorough testing before merging than they had received as of 2024 May 7. One key reason for this is the idea that the fields in question might not all be date+time, and rather may be date-only or time-only. All SDS Laravel screens accessible from a main menu item were found to load and at a glance seemed to display correctly, with these changes included, but that is as far as any testing went as of 2024 May 7. (There are 2 such screens that didn't load, but they didn't load prior to these changes either, and that is a separate concern.)

As of 2024 May 7, the changes of this task have been bundled with the changes of the task upgrading SDS Laravel from Laravel 8 to 10, so the sum changes would receive the necessary thorough testing together before being merged to trunk. However, since the changes of this task do not depend on the upgrade, it is possible that a subset of them may be fully tested and merged sooner when other changes using the same models occur.

RETURN

SDS Laravel: Changes to Third-Party Dependencies

2024 May 3: Upgrade Laravel from 8.x to 10.x

This task updated composer.json to require the latest PHP-8.1-compatible major version of the PHP library dependency Laravel from 8.x to 10.x.

To be more 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 to ^10.0)
  • 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.10)
  • laravel/helpers (^1.7 unchanged but possibly no longer needed)
  • laravel/pint (^1.15.3 added but not yet used)
  • laravel/sail (^1.29.1 added but not yet used)
  • laravel/sanctum (^3.3.3 added but not yet used)
  • laravel/tinker (^2.9 unchanged)
  • laravel/ui (^3.4.6 to 4.5.1)
  • mockery/mockery (^1.6.11 unchanged)
  • nunomaduro/collision (^5.11 to ^7.10)
  • phpunit/phpunit (^10.5.20 unchanged)
  • spatie/laravel-ignition (^1.6.4 to ^2.7)
  • staudenmeir/eloquent-has-many-deep (^1.14.4 to ^1.19.3)

Note that juliomotol/laravel-auth-timeout version 4.1 requires Laravel version 9 or greater so it can not be upgraded from 3.1.1 prior to the Laravel 10 upgrade.

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;

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;

This task also explored upgrades to some other PHP library dependencies but they were excluded due to requiring more substantial code changes for compatibility, and will be returned to later.

RETURN