SDSM:Pending Changes: Difference between revisions

From SMUSwiki
Jump to navigation Jump to search
(Reorder subsection on dates attribute, remove Excluded subsection, update some numbers)
(Purge almost all items as they graduated from Pending to Historical.)
 
(7 intermediate revisions by the same user not shown)
Line 12: Line 12:


It is similar to the [[SDSM:Historical_Changes|Historical Changes]] part
It is similar to the [[SDSM:Historical_Changes|Historical Changes]] part
but that it describes work which was prepared and published in a Git branch
but that it describes work which was prepared and published in Git feature
but it was deemed premature to merge it to the trunk, such as due to a
branches that are longer lived and not yet merged to the trunk; in
desire for more testing first, or because it was possibly unfinished; in
contrast, ''Historical'' is for work that ''was'' merged to trunk.
contrast, ''Historical'' is for work that ''was'' merged to trunk.


[[#top|RETURN]]
[[#top|RETURN]]


== SDS Laravel: Changes to Third-Party Dependencies ==
== SDS Laravel: Removed Application Functionality ==


=== 2024 Jun 17: Upgrade To Laravel 10 and Vue 3 ===
=== 2024 Jun 25: Remove Screens For Application For Student Enrollment By Parents ===


==== Summary of PHP Dependency Upgrades or Removals ====
This task removed the ''SDS Laravel'' screens that supported parents
applications for student enrollment of their children directly in '''SDS'''.
The functionality became obsolete and unused when Blackbaud started being
used for applications instead, and applications were imported to '''SDS'''
from Blackbaud by an automated process.


This task updated <code>composer.json</code> to require the latest
These 20 source files were simply removed:
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 specific, it made these dependency changes:
* app/Http/Controllers/Application/ApplicationController.php
* app/Http/Controllers/Application/FamilyInfoController.php
* app/Http/Controllers/Application/OtherController.php
* app/Http/Controllers/Application/ParentInfoController.php
* app/Http/Controllers/Application/ParentQuestionController.php
* app/Http/Controllers/Application/StudentInfoController.php
* app/Http/Controllers/Application/StudentQuestionController.php
* app/Http/Controllers/System/EditBoardingQuestionController.php
* resources/js/components/application/AddressInfo.vue
* resources/js/components/application/FamilyStatus.vue
* resources/js/components/application/GuardianHolder.vue
* resources/js/components/application/GuardianInfo.vue
* resources/views/application/home.blade.php
* resources/views/application/index.blade.php
* resources/views/application/parentinfo/index.blade.php
* resources/views/application/studentinfo/index.blade.php
* resources/views/includes/application_menu.blade.php
* resources/views/system/boarding_question/create.blade.php
* resources/views/system/boarding_question/edit.blade.php
* resources/views/system/boarding_question/index.blade.php


* barryvdh/laravel-debugbar (^3.7 to ^3.13.5)
These 3 source files were updated to remove references to the removed ones:
* directorytree/ldaprecord-laravel (^2.7.3 to ^3.3.3)
* etern8ty/beanstream (dev-master unchanged and is custom fork)
* fakerphp/faker (^1.23.1 unchanged)
* fideloper/proxy (^4.4.2 removed as laravel/framework has its upgrade built-in)
* goldspecdigital/laravel-eloquent-uuid (^8.0.1 removed as laravel/framework 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 unchanged)
* laravel/framework (^8.83.27 to ^10.48.12)
* laravel/helpers (^1.7 unchanged)
* 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 to ^10.5.21)
* 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 ====
* resources/js/app.js
* resources/views/includes/menu.blade.php
* routes/web.php


This task updated <code>package.json</code> to require the latest
Note that Laravel Eloquent Models related to this functionality were
versions of all JavaScript library dependencies,
explicitly left alone, so they can still thoroughly represent the actual
in particular taking Vue from <code>2.x</code> to <code>3.x</code>.
database structure, and they can still be used by other processes.
 
Likewise, references to student applications in other screens were left
To be specific, it made these dependency changes:
alone as they may still be relevant to the Blackbaud process or for history.
 
* @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 laravel/framework Upgrade's 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
<code>Call to a member function format() on int</code>.
 
To fix this, any instances of <code>protected $dates = ['x',...]</code>
in model classes were replaced with
<code>protected $casts = ['x'=>'datetime',...]</code>
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
<code>$casts</code> 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.
 
==== Changes For goldspecdigital/laravel-eloquent-uuid Removal ====
 
This task also updated these 5 PHP source files to be compatible with the
replacement of <code>goldspecdigital/laravel-eloquent-uuid</code> 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
<code>app/Models/Traits/Uuids.php</code> as it appeared to be unused.
 
==== Changes For fideloper/proxy Removal ====
 
This task also updated <code>app/Http/Middleware/TrustProxies.php</code> to
be compatible with the replacement of <code>fideloper/proxy</code> 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
<code>app/Http/Middleware/AuthTimeoutMiddleware.php </code> to be
compatible with the <code>juliomotol/laravel-auth-timeout</code> upgrade.
 
There was this 1 substitution:
 
    use JulioMotol\AuthTimeout\Middleware\AuthTimeoutMiddleware as BaseMiddleware;
 
    use JulioMotol\AuthTimeout\Middlewares\CheckAuthTimeout as BaseMiddleware;
 
Note that <code>juliomotol/laravel-auth-timeout</code> 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 directorytree/ldaprecord-laravel Upgrade ====
 
This task also made 3 distinct sets of changes to be compatible with the
<code>directorytree/ldaprecord-laravel</code> upgrade.
 
See also for context:
 
* https://ldaprecord.com/docs/laravel/v3/upgrading/
* https://ldaprecord.com/docs/laravel/v3/release-notes/
* https://github.com/DirectoryTree/LdapRecord-Laravel/releases
 
The first set of changes...
 
This task updated the 1 PHP config source file <code>config/ldap.php</code>
to account for <code>logging</code> now being an array. There was this 1
substitution:
 
    'logging' => env('LDAP_LOGGING', true),
 
    'logging' => [
        'enabled' => env('LDAP_LOGGING', true),
    ],
 
The second set of changes...
 
For context, <code>directorytree/ldaprecord-laravel</code> had a PHP trait
named <code>LdapRecord\Laravel\Auth\MultiDomainAuthentication</code> which
was deprecated before version <code>2.7.3</code> and removed in version
<code>3.0.0</code>. The 1 SDS PHP source file
<code>app/Http/Controllers/Auth/LoginController.php</code> used that trait.
 
This task updated <code>LoginController</code> to clone into itself the
used portions of <code>MultiDomainAuthentication</code>, thus removing the
external dependency of the former on the latter.
 
As the removed trait was itself a sub-trait of
<code>LdapRecord\Laravel\Auth\CreatesUserProvider</code>,
<code>LoginController</code> now composed that directly and not indirectly.
 
Also <code>LoginController</code> gained the new protected function
<code>getLdapGuard</code> cloned from the removed trait.
 
Note that the function <code>getLdapGuardFromRequest</code> was ''not''
cloned from the removed trait since <code>LoginController</code> already
had its own version that overrode it.
 
The third set of changes...
 
For context, each of these 5 SDS classes composed one of the 2 classes
<code>LdapRecord\Models\Model</code> or <code>LdapRecord\Models\Scope</code>:
 
* app/Ldap/ExternalUser.php
* app/Ldap/Scopes/OnlyStaffUsers.php
* app/Ldap/Scopes/OnlyStudents.php
* app/Ldap/SmusStudents.php
* app/Ldap/SmusUser.php
 
For each of those 5, it was updated such that for any property or method it
contained which overrode or implemented a same-named one from
<code>Model</code> or <code>Scope</code>, that property or method had
explicit type annotations added to match the originals. This was required
for the SDS code to satisfy a PHP or Laravel stricture so the code runs.


[[#top|RETURN]]
[[#top|RETURN]]

Latest revision as of 21:17, 5 August 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 Git feature branches that are longer lived and not yet merged to the trunk; in contrast, Historical is for work that was merged to trunk.

RETURN

SDS Laravel: Removed Application Functionality

2024 Jun 25: Remove Screens For Application For Student Enrollment By Parents

This task removed the SDS Laravel screens that supported parents applications for student enrollment of their children directly in SDS. The functionality became obsolete and unused when Blackbaud started being used for applications instead, and applications were imported to SDS from Blackbaud by an automated process.

These 20 source files were simply removed:

  • app/Http/Controllers/Application/ApplicationController.php
  • app/Http/Controllers/Application/FamilyInfoController.php
  • app/Http/Controllers/Application/OtherController.php
  • app/Http/Controllers/Application/ParentInfoController.php
  • app/Http/Controllers/Application/ParentQuestionController.php
  • app/Http/Controllers/Application/StudentInfoController.php
  • app/Http/Controllers/Application/StudentQuestionController.php
  • app/Http/Controllers/System/EditBoardingQuestionController.php
  • resources/js/components/application/AddressInfo.vue
  • resources/js/components/application/FamilyStatus.vue
  • resources/js/components/application/GuardianHolder.vue
  • resources/js/components/application/GuardianInfo.vue
  • resources/views/application/home.blade.php
  • resources/views/application/index.blade.php
  • resources/views/application/parentinfo/index.blade.php
  • resources/views/application/studentinfo/index.blade.php
  • resources/views/includes/application_menu.blade.php
  • resources/views/system/boarding_question/create.blade.php
  • resources/views/system/boarding_question/edit.blade.php
  • resources/views/system/boarding_question/index.blade.php

These 3 source files were updated to remove references to the removed ones:

  • resources/js/app.js
  • resources/views/includes/menu.blade.php
  • routes/web.php

Note that Laravel Eloquent Models related to this functionality were explicitly left alone, so they can still thoroughly represent the actual database structure, and they can still be used by other processes. Likewise, references to student applications in other screens were left alone as they may still be relevant to the Blackbaud process or for history.

RETURN