|
|
(13 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: Fixes to Broken Behavior == | | == SDS Laravel: Removed Application Functionality == |
|
| |
|
| === 2024 May 20: Timeout Feature Broken In Sub-Directory Hosted Apps === | | === 2024 Jun 25: Remove Screens For Application For Student Enrollment By Parents === |
|
| |
|
| ''SDS Laravel'' has a security feature such that if a user is inactive for | | This task removed the ''SDS Laravel'' screens that supported parents |
| a period of time, 15 minutes typically, they will be automatically logged
| | applications for student enrollment of their children directly in '''SDS'''. |
| out of the app. The app displays a countdown timer on the top right hand
| | The functionality became obsolete and unused when Blackbaud started being |
| corner of the screen that ticks for every second of activity. Javascript
| | used for applications instead, and applications were imported to '''SDS''' |
| code running in the client web browser will normally reset the countdown to
| | from Blackbaud by an automated process. |
| the full amount whenever a user interface (UI) event occurs that it
| |
| considers continued user activity, such as mouse movement over the screen.
| |
|
| |
|
| This feature is implemented partly by the web client invoking the
| | These 20 source files were simply removed: |
| <code>/session</code> endpoint on the server.
| |
|
| |
|
| That invocation fails on any ''SDS Laravel'' app instance that is hosted at
| | * app/Http/Controllers/Application/ApplicationController.php |
| a web address which is a sub-directory of the base url (meaning it is based
| | * app/Http/Controllers/Application/FamilyInfoController.php |
| at an address like <code>https://foo.com/bar</code> rather than at an
| | * app/Http/Controllers/Application/OtherController.php |
| address like just <code>https://foo.com</code>). This is because the web
| | * app/Http/Controllers/Application/ParentInfoController.php |
| client is trying to unconditionally treat every app instance as if it is
| | * app/Http/Controllers/Application/ParentQuestionController.php |
| hosted directly at the base url with respect to its attempts to invoke the
| | * app/Http/Controllers/Application/StudentInfoController.php |
| <code>/session</code> endpoint, and so it is invoking the wrong web address
| | * app/Http/Controllers/Application/StudentQuestionController.php |
| for instances that are at sub-directory urls.
| | * 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 |
|
| |
|
| As a result, for broken app instances, while the first UI activity
| | These 3 source files were updated to remove references to the removed ones: |
| indicating continued user activity will reset the countdown timer displayed
| |
| on screen to the user, all subsequent UI activity will have no effect on
| |
| the timer, and it will not reset, and the server will not be aware of this
| |
| activity. Only a full page load like clicking a link to a new page will
| |
| register as activity and reset the timer.
| |
|
| |
|
| This breakage affects all ''SDS Laravel'' instances at
| | * resources/js/app.js |
| https://sdsdev.smus.ca which are in sub-directories.
| | * resources/views/includes/menu.blade.php |
| | * routes/web.php |
|
| |
|
| The primary change of this task fixes the problem by making the web client
| | Note that Laravel Eloquent Models related to this functionality were |
| respect the actual location of the app when invoking <code>/session</code>.
| | explicitly left alone, so they can still thoroughly represent the actual |
| Mainly it is a 1-line change in the Laravel Blade template file
| | database structure, and they can still be used by other processes. |
| <code>resources/views/layouts/main.blade.php</code> to use
| | Likewise, references to student applications in other screens were left |
| <code><nowiki>url: '{{route('session')}}'</nowiki></code> rather than
| | alone as they may still be relevant to the Blackbaud process or for history. |
| <code>url: '/session'</code>.
| |
| | |
| An additional change of this task is to fix a problem where the
| |
| app's background image doesn't display for the same underlying reason. The
| |
| problem is that the web client is trying to load the image
| |
| <code>public/images/body.png</code> from the wrong location. The fix
| |
| updates 1 line in the CSS file <code>public/css/smus_custom.css</code> to
| |
| <code>background: url('../images/body.png')</code> from
| |
| <code>background: url('/images/body.png')</code>; the newly-relative url is
| |
| relative to the location of the CSS file itself.
| |
| | |
| There is still additional broken behavior related to static asset loading
| |
| like the background image example, affecting custom fonts for example, but
| |
| these references are in the generated file <code>public/css/app.css</code>
| |
| as parts of third-party dependencies, and so these were left alone.
| |
| | |
| == SDS Laravel: Changes to Third-Party Dependencies ==
| |
| | |
| === 2024 May 21: Upgrade Laravel from 8.x to 10.x ===
| |
| | |
| This task updated <code>composer.json</code> to require the latest
| |
| PHP-8.1-compatible major version of the PHP library dependency Laravel,
| |
| thus taking it from <code>8.x</code> to <code>10.x</code>.
| |
| | |
| 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 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.11)
| |
| * 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.7)
| |
| * staudenmeir/eloquent-has-many-deep (^1.14.4 to ^1.19.3)
| |
| | |
| 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.
| |
| | |
| 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;
| |
| | |
| 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.
| |
| | |
| 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.
| |
| | |
| 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.
| |
|
| |
|
| [[#top|RETURN]] | | [[#top|RETURN]] |