SDSM:Index: Difference between revisions

From SMUSwiki
Jump to navigation Jump to search
(Add initial table of contents that is outline by Chetan Sondagar.)
(Add PHP library dependencies declared required in Composer config and those resolved by Composer)
 
(7 intermediate revisions by the same user not shown)
Line 6: Line 6:
== Name ==
== Name ==


SDS Modernization (SDSM) - Modernization of SMUS School Data System
'''SDS Modernization (SDSM)''' - Modernization of SMUS School Data System
 
[[#top|RETURN]]


== Description ==
== Description ==
Line 14: Line 16:
of '''St. Michaels University School (SMUS)'''.
of '''St. Michaels University School (SMUS)'''.


== Introduction ==
[[#top|RETURN]]
 
''TODO.''
 
=== System Overview ===
 
Brief description of the system, its main components, and its purpose.
 
''TODO.''
 
=== Purpose and Scope ===
 
Clarify the intended use of the documentation and its intended audience.
 
''TODO.''
 
=== Audience of the Documentation ===
 
Specify who the documentation is written for (e.g., developers, system administrators, end-users).
 
''TODO.''
 
== System Architecture ==
 
''TODO.''
 
=== High-Level Architecture ===
 
Overview of the system's architecture, including major components and how they interact.
 
''TODO.''
 
=== System Components and Interactions ===
 
Detailed description of each system component and its role.
 
''TODO.''
 
=== Network Diagrams ===
 
Visual representations of network and system architecture, if applicable.
 
''TODO.''
 
== Environment Setup ==
 
''TODO.''
 
=== Hardware Requirements ===
 
Specifications for necessary hardware.
 
''TODO.''
 
=== Software Requirements ===
 
Required software and versions.
 
''TODO.''
 
=== Environment Configuration ===
 
Instructions for setting up development, testing, and production environments.
 
''TODO.''
 
=== Client Requirements ===
 
Required software and versions.
 
''TODO.''
 
== Database Documentation ==
 
''TODO.''
 
=== Database Schema ===
 
Detailed diagrams and descriptions of database tables, fields, data types, and relations.
 
''TODO.''
 
=== Data Dictionary ===
 
Detailed definitions of all database elements.
 
''TODO.''
 
=== Entity-Relationship Diagrams ===
 
Visual representation of data entities and relationships.
 
''TODO.''
 
=== Database Performance Metrics ===
 
Information on database performance and optimization.
 
''TODO.''
 
== Codebase Overview ==
 
''TODO.''
 
=== Languages and Frameworks ===
 
Information about programming languages and frameworks used.
 
''TODO.''
 
=== Repository Structure ===
 
Description of the code repository structure.
 
''TODO.''
 
=== Coding Standards and Conventions ===
 
Guidelines followed in the codebase.
 
''TODO.''
 
=== Repository Access ===
 
Instructions to access code repository.
 
''TODO.''
 
== API Documentation ==
 
''TODO.''
 
=== List of Endpoints ===
 
Detailed list of API endpoints and their functions.
 
''TODO.''
 
=== Request/Response Formats ===
 
Specifications of request and response formats.
 
''TODO.''
 
=== Authentication and Authorization ===
 
Methods used for API security.
 
''TODO.''
 
== User Interface Documentation ==
 
''TODO.''
 
=== Screenshots and Descriptions ===
 
Visuals and descriptions of key interfaces.
 
''TODO.''
 
=== User Flow Diagrams ===


Diagrams showing user navigation through the system.
== Audience ==


''TODO.''
The intended audience of this document is individuals who are savvy with
electronic computer hardware and software, its use, installation, and
maintenance.  In particular, it is for individuals that are capable of
writing, maintaining, integrating, testing software code, or installing
and maintaining deployments of software on internet servers.  Or it is
for those individuals who directly communicate with or manage such
people and technical projects, and have some understanding of technology.


== Security Protocols ==
This document is mainly for individuals who would be involved with the
'''SDS Modernization (SDSM)''' effort, or who would be maintaining
'''SDS''' afterwards, or who would be managing the people who do these
things, or who want to be more informed about how '''SDS''' works.


''TODO.''
This document is not specifically for those who are just end users of
'''SDS''', or for those who make higher level management decisions and are
less technically savvy, but they might glean useful information from it.
For these kinds of users, other derived or supplementary documentation may
be better suited to their needs, or this document can be re-interpreted for
them in other forms that better suit them.


=== Data Security Measures ===
[[#top|RETURN]]


Techniques used for securing data.
== Overview ==


''TODO.''
'''School Data System (SDS)''' is an electronic records management system
that empowers a school's fundamental operations by managing the school's
records of its students and related data and business processes.
This includes tracking students' identities, enrolment, classes, and marks.
'''SDS''' is used directly by students, their parents, their teachers, and
other staff of a school having various roles.


=== Network Security Configurations ===
'''SDS''' is meant in principle to be usable by any school, but first
and foremost to meet the specific needs of
'''St. Michaels University School (SMUS)'''.
'''SMUS''' is the only school actually using it as of
2024, but '''SDS''' may be made available to other schools later.
Historically, '''SDS''' was also used by '''Brentwood College School'''.


Network security tools and configurations.
'''SDS''' has a client-server architecture, hosted on a network as a web
server, and used by way of a web client.  '''SDS''' should be compatible
with all modern web clients, including Mozilla FireFox, Google Chrome,
Microsoft Edge, and Apple Safari; it should be usable with all modern
client devices and operating systems.


''TODO.''
'''SMUS''' hosts all of its '''SDS''' instances, production and testing,
on premises on network servers located at its Richmond Road campus.
They are not hosted by a third party, whether "cloud" or otherwise.


== Installation and Deployment ==
See https://sds.smus.ca for the production instance.


''TODO.''
'''SDS''' has 2 alternative versions in April of 2024, older and newer.


=== Installation Guide ===
The older '''SDS''' version (''SDS Gavintech''), is actively in use in
production, and its development is mostly frozen, with minimal updates only.


Step-by-step installation instructions.
The newer '''SDS''' version (''SDS Laravel'' or ''SDS API''), is not currently
used in production, and is incomplete; nearly all current development work
is on this version, and it is intended to replace the older version in
production once it is sufficiently complete.


''TODO.''
The newer '''SDS''' version is meant to have essentially the same
outward-facing or user-visible feature set, behavior, and appearance as
the older version. The newer version also uses essentially the same SQL
database schema as the older version, and they actively share a database,
which makes for a more seamless migration as the database doesn't have to
be "converted".  Within these constraints of looking the same to users and
having the same database, the new version is almost completely different
internally, with a new internal code structure that is a lot more modern.


=== Deployment Procedures ===
Each '''SDS''' version is written in the '''PHP''' programming language
and uses a '''MySQL''' database.  The newer version uses the
'''Laravel''' PHP application framework, while the older version uses
the '''Gavintech''' PHP framework.  Both versions' production instances
are on servers running the '''Ubuntu''' operating system and are behind
an '''Apache''' web server.  While '''Gavintech''' is essentially
abandoned, very non-modern, and bespoke, all of the other named
dependencies are actively maintained, modern, and very popular.


Process for deploying updates or new releases.
[[#top|RETURN]]


''TODO.''
== Structure and Dependencies ==


=== CI/CD Practices ===
'''SDS''' itself is a web application written mainly in the PHP
programming language (https://www.php.net).  Some portions are also
written in the JavaScript programming language, though it is intended
that these will be replaced with PHP code, mostly if not entirely.
Some portions are also written in the MySQL DBMS (https://www.mysql.com)
dialect of the SQL programming language, but these are being replaced with
PHP code that uses a DBMS abstraction instead of literal SQL.


Continuous integration and deployment methodologies used.
'''SDS''' specifically uses PHP major version 8.1, which was first
released for general production use on 2020 Nov 26
(https://www.php.net/ChangeLog-8.php); PHP 8.1 stopped receiving active
support by its principal maintainers on 2023 Nov 25, and then for
critical security issues it will only be supported by them until 2025
Dec 31 (https://www.php.net/supported-versions.php).


''TODO.''
'''SDS''' specifically uses MySQL major version 8.0, which was first
released for general production use on 2018 Apr 19
(https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html);
MySQL 8.0 will stop receiving LTS support by its principal maintainers
in 2026 April.


== Testing and Quality Assurance ==
'''SDS''' can run on a variety of server environments and operating
systems, same as PHP and MySQL do.  However, its canonical (and ''also''
its '''Canonical''') runtime environment is the Ubuntu operating system
(https://ubuntu.com), which '''SMUS''' runs its production and shared
testing deployments in.


''TODO.''
Those production '''SDS''' deployments specifically use Ubuntu major
version 22.04 LTS, which was first released for general production use
on 2022 Apr 21; it will stop receiving standard support in 2027 and end
of life support in 2032 (https://wiki.ubuntu.com/Releases).


=== Testing Procedures ===
'''SMUS''' uses the specific versions of PHP and MySQL that are provided
with the Ubuntu version it uses, so the former are only updated when the
latter is updated.  Most notable is that '''SDS''' is constrained to using
PHP 8.1 for as long as it is run on Ubuntu 22.04.  While their principal
maintainers may stop supporting those versions sooner, Ubuntu themselves
would continue to provide critical security and bug fixes to MySQL and PHP
bundled with their LTS releases, but not new major versions.


Overview of testing strategies and methodologies.
=== SDS Laravel PHP Library Dependencies ===


''TODO.''
==== Directly Used By Name In PHP Source Files ====


=== Test Case Descriptions ===
The PHP source code files of ''SDS Laravel'' contain direct references
to a variety of third-party PHP classes, most instances of which are
parts of the Laravel framework, and some that aren't.  Often their
fully-qualified names only appear on the form of <code>use</code>
statements but other times those names ''don't'' appear in
<code>use</code> statements and in the main body of PHP code instead.


Examples of key test cases.
This '''SDSM''' document sub-section enumerates the third-party PHP
classes that are directly referenced by name in the ''SDS Laravel'' PHP
source code, which is the strongest indicator that those classes are
actually-used dependencies of it, rather than declared dependencies that
are not actually used.


''TODO.''
Directly used by name in about 800 app PHP files:


=== Automated Testing Frameworks ===
* Illuminate\*
* Auth aka Illuminate\Support\Facades\Auth
* DB aka Illuminate\Support\Facades\DB
* Mail aka Illuminate\Support\Facades\Mail
* Redirect aka Illuminate\Support\Facades\Redirect
* URL aka Illuminate\Support\Facades\URL


Description of automated testing setup.
Directly used by name in app/Models/File.php and app/Http/Controllers/Admin/Migration/ImportPhotosController.php only:


''TODO.''
* Image aka Intervention\Image\ImageServiceProvider


== Performance and Optimization ==
Directly used by name in about 70 app PHP classes:


''TODO.''
* Carbon\Carbon
* Carbon\Exceptions\InvalidFormatException


=== System Performance Benchmarks ===
Directly used by name in 10 app PHP classes:


Key performance indicators and benchmarks.
* LdapRecord\*


''TODO.''
Directly used by name in 9 app PHP model classes:


=== Optimization Strategies ===
* GoldSpecDigital\LaravelEloquentUUID\Database\Eloquent\Uuid


Techniques and practices for optimizing system performance.
Directly used by name in 5 app PHP classes related to Blackbaud or Bambora:


''TODO.''
* GuzzleHttp\Client
* GuzzleHttp\Exception\ClientException
* GuzzleHttp\Exception\GuzzleException


== Backup and Recovery ==
Directly used by name in app/Models/Finance/Bambora.php or app/Http/Controllers/Api/UserProfileController.php only:


''TODO.''
* Beanstream\ApiException
* Beanstream\Exception
* Beanstream\Gateway


=== Backup Procedures and Schedules ===
Directly used by name in 11 php files mostly database/factories/*.php:


How and when backups are conducted.
* Faker\Generator


''TODO.''
Directly used by name in app/Models/User.php only:


=== Disaster Recovery Plan ===
* Lab404\Impersonate\*


Steps and procedures for system recovery in case of a disaster.
Directly used by name in app/Providers/AppServiceProvider.php only:


''TODO.''
* Dotenv\Dotenv


== Access Control ==
Directly used by name in app/Models/Pivot/FormCampaignPerson.php only:


''TODO.''
* Staudenmeir\EloquentHasManyDeep\HasRelationships


=== User Roles and Permissions ===
Directly used by name in app/Http/Middleware/TrustProxies.php only:


Description of different user roles and their access levels.
* Fideloper\Proxy\TrustProxies


''TODO.''
Directly used by name in app/Http/Middleware/AuthTimeoutMiddleware.php and app/Http/Kernel.php only:


=== Access Management Procedures ===
* JulioMotol\AuthTimeout\Middleware\AuthTimeoutMiddleware


How user access is managed and controlled.
Directly used by name in app/Exceptions/Handler.php only:


''TODO.''
* Symfony\Component\HttpFoundation\Response


== System Integration ==
Directly used by name in config/logging.php only:


''TODO.''
* Monolog\Handler\*


=== External System Integration ===
Directly used by name in tests/Unit/ExampleTest.php only:


Details of integration with external systems or services.
* PHPUnit\Framework\TestCase


''TODO.''
Directly referenced by name COMMENTED-OUT in app/Http/Kernel.php only:


=== Data Exchange Protocols ===
* Fruitcake\Cors\HandleCors


Protocols used for data exchange with external systems.
==== Required In Composer Config File ====


''TODO.''
The Composer config file <code>composer.json</code> of ''SDS Laravel''
explicitly declares that it requires these 19 PHP library dependencies:


== Localization and Internationalization (if applicable) ==
* barryvdh/laravel-debugbar (3.6.6)
* directorytree/ldaprecord-laravel (^2.3.0)
* etern8ty/beanstream (dev-master)
* fideloper/proxy (^4.2)
* fzaninotto/faker (^1.9.1)
* goldspecdigital/laravel-eloquent-uuid (^8.0.1)
* guzzlehttp/guzzle (^7.0.1)
* intervention/image (^2.7)
* juliomotol/laravel-auth-timeout (3.1.1)
* lab404/laravel-impersonate (^1.7)
* laravel/framework (^8.83)
* laravel/helpers (^1.2)
* laravel/tinker (^2.0)
* laravel/ui (^3.0)
* mockery/mockery (^1.3.1)
* nunomaduro/collision (^5.0)
* phpunit/phpunit (^9.0)
* spatie/laravel-ignition (^1.6)
* staudenmeir/eloquent-has-many-deep (^1.14)


''TODO.''
It also declares these additional 3, which don't seem to be actually used:


=== Supported Languages ===
* doctrine/dbal (^3.5)
* fico7489/laravel-revisionable-upgrade (*)
* fruitcake/laravel-cors (^2.0)


List of languages the system supports.
==== Resolved From Composer Config File ====


''TODO.''
When Composer evaluates its config file <code>composer.json</code> of
''SDS Laravel'', its declared required PHP library dependencies are
resolved to these 120, which are actually installed:


=== Cultural Adaptations ===
* barryvdh/laravel-debugbar (v3.6.6)
* brick/math (0.12.1)
* carbonphp/carbon-doctrine-types (2.1.0)
* dflydev/dot-access-data (v3.0.2)
* directorytree/ldaprecord (v2.20.5)
* directorytree/ldaprecord-laravel (v2.7.3)
* doctrine/inflector (2.0.10)
* doctrine/instantiator (2.0.0)
* doctrine/lexer (1.2.3)
* dragonmantank/cron-expression (v3.3.3)
* egulias/email-validator (2.1.25)
* etern8ty/beanstream (dev-master 297b986)
* facade/ignition-contracts (1.0.2)
* fideloper/proxy (4.4.2)
* filp/whoops (2.15.4)
* fzaninotto/faker (dev-master 5ffe7db)
* goldspecdigital/laravel-eloquent-uuid (v8.0.1)
* graham-campbell/result-type (v1.1.2)
* guzzlehttp/guzzle (7.8.1)
* guzzlehttp/promises (2.0.2)
* guzzlehttp/psr7 (2.6.2)
* hamcrest/hamcrest-php (v2.0.1)
* intervention/image (2.7.2)
* juliomotol/laravel-auth-timeout (v3.1.1)
* lab404/laravel-impersonate (1.7.5)
* laravel/framework (v8.83.27)
* laravel/helpers (v1.7.0)
* laravel/serializable-closure (v1.3.3)
* laravel/tinker (v2.9.0)
* laravel/ui (v3.4.6)
* league/commonmark (2.4.2)
* league/config (v1.2.0)
* league/flysystem (1.1.10)
* league/mime-type-detection (1.15.0)
* maximebf/debugbar (v1.22.3)
* mockery/mockery (1.6.11)
* monolog/monolog (2.9.3)
* myclabs/deep-copy (1.11.1)
* nesbot/carbon (2.72.3)
* nette/schema (v1.3.0)
* nette/utils (v4.0.4)
* nikic/php-parser (v5.0.2)
* nunomaduro/collision (v5.11.0)
* opis/closure (3.6.3)
* phar-io/manifest (2.0.4)
* phar-io/version (3.2.1)
* phpoption/phpoption (1.9.2)
* phpunit/php-code-coverage (9.2.31)
* phpunit/php-file-iterator (3.0.6)
* phpunit/php-invoker (3.1.1)
* phpunit/php-text-template (2.0.4)
* phpunit/php-timer (5.0.3)
* phpunit/phpunit (9.6.19)
* psr/clock (1.0.0)
* psr/container (1.1.2)
* psr/event-dispatcher (1.0.0)
* psr/http-client (1.0.3)
* psr/http-factory (1.0.2)
* psr/http-message (2.0)
* psr/log (2.0.0)
* psr/simple-cache (1.0.1)
* psy/psysh (v0.12.3)
* ralouphie/getallheaders (3.0.3)
* ramsey/collection (2.0.0)
* ramsey/uuid (4.7.6)
* sebastian/cli-parser (1.0.2)
* sebastian/code-unit (1.0.8)
* sebastian/code-unit-reverse-lookup (2.0.3)
* sebastian/comparator (4.0.8)
* sebastian/complexity (2.0.3)
* sebastian/diff (4.0.6)
* sebastian/environment (5.1.5)
* sebastian/exporter (4.0.6)
* sebastian/global-state (5.0.7)
* sebastian/lines-of-code (1.0.4)
* sebastian/object-enumerator (4.0.4)
* sebastian/object-reflector (2.0.4)
* sebastian/recursion-context (4.0.5)
* sebastian/resource-operations (3.0.4)
* sebastian/type (3.2.1)
* sebastian/version (3.0.2)
* spatie/backtrace (1.6.1)
* spatie/flare-client-php (1.5.1)
* spatie/ignition (1.14.1)
* spatie/laravel-ignition (1.6.4)
* staudenmeir/eloquent-has-many-deep (v1.14.4)
* swiftmailer/swiftmailer (v6.3.0)
* symfony/console (v5.4.39)
* symfony/css-selector (v6.4.7)
* symfony/debug (v4.4.44)
* symfony/deprecation-contracts (v3.5.0)
* symfony/error-handler (v5.4.39)
* symfony/event-dispatcher (v6.4.7)
* symfony/event-dispatcher-contracts (v3.5.0)
* symfony/finder (v5.4.39)
* symfony/http-foundation (v5.4.39)
* symfony/http-kernel (v5.4.39)
* symfony/mime (v5.4.39)
* symfony/polyfill-ctype (v1.29.0)
* symfony/polyfill-iconv (v1.29.0)
* symfony/polyfill-intl-grapheme (v1.29.0)
* symfony/polyfill-intl-idn (v1.29.0)
* symfony/polyfill-intl-normalizer (v1.29.0)
* symfony/polyfill-mbstring (v1.29.0)
* symfony/polyfill-php72 (v1.29.0)
* symfony/polyfill-php73 (v1.29.0)
* symfony/polyfill-php80 (v1.29.0)
* symfony/process (v5.4.39)
* symfony/routing (v5.4.39)
* symfony/service-contracts (v3.5.0)
* symfony/string (v6.4.7)
* symfony/translation (v6.4.7)
* symfony/translation-contracts (v3.5.0)
* symfony/var-dumper (v5.4.39)
* theseer/tokenizer (1.2.3)
* tightenco/collect (v9.52.7)
* tijsverkoyen/css-to-inline-styles (v2.2.7)
* vlucas/phpdotenv (v5.6.0)
* voku/portable-ascii (1.6.1)
* webmozart/assert (1.11.0)


Adjustments made for different cultural or regional needs.
It also resolves these additional 9, which don't seem to be actually used:


''TODO.''
* asm89/stack-cors (v2.2.0)
 
* doctrine/cache (2.2.0)
== Scalability and Future Development ==
* doctrine/dbal (3.8.4)
 
* doctrine/deprecations (1.1.3)
''TODO.''
* doctrine/event-manager (2.0.0)
 
* fico7489/laravel-revisionable-upgrade (3.0.4)
=== Scalability Strategies ===
* fruitcake/laravel-cors (v2.2.0)
 
* psr/cache (3.0.0)
Plans and techniques for scaling the system.
* venturecraft/revisionable (1.41.0)
 
''TODO.''
 
=== Expansion Plans and Roadmap ===
 
Future development plans and system evolution roadmap.
 
''TODO.''
 
== Customization and Extensibility ==
 
''TODO.''
 
=== Customization Options ===
 
Options available for system customization.
 
''TODO.''
 
=== API Documentation for Extensibility ===
 
Documentation for APIs available for extending the system.
 
''TODO.''
 
== Operational Best Practices ==
 
''TODO.''
 
=== System Maintenance Guidelines ===
 
Best practices for maintaining the system.
 
''TODO.''
 
=== Security Best Practices ===
 
Guidelines for maintaining security.
 
''TODO.''
 
=== Audit Trails and Logging ===
 
Information on system logging and audit trails.
 
''TODO.''
 
== Feedback and Continuous Improvement ==
 
''TODO.''
 
=== Feedback Mechanisms ===
 
How users can provide feedback.
 
''TODO.''
 
=== Improvement Processes ===
 
How feedback is incorporated into system improvements.
 
''TODO.''


== Appendices ==
== Appendices ==


''TODO.''
=== Proposed Layout of SDSM by Chetan Sondagar ===


=== Glossary of Terms ===
Chetan Sondagar proposed, on 2024 April 10, the following layout for this
'''SDS Modernization (SDSM)''' document.  The actual document layout ended
up being different, and the proposal is shown here for posterity.
But while the actual document was in development and had substantial
missing content, the proposal also served to illustrate what was missing.


Definitions of technical terms used.
# '''Introduction'''
#* '''System Overview:''' Brief description of the system, its main components, and its purpose.
#* '''Purpose and Scope:''' Clarify the intended use of the documentation and its intended audience.
#* '''Audience of the Documentation:''' Specify who the documentation is written for (e.g., developers, system administrators, end-users).
# '''System Architecture'''
#* '''High-Level Architecture:''' Overview of the system's architecture, including major components and how they interact.
#* '''System Components and Interactions:''' Detailed description of each system component and its role.
#* '''Network Diagrams:''' Visual representations of network and system architecture, if applicable.
# '''Environment Setup'''
#* '''Hardware Requirements:''' Specifications for necessary hardware.
#* '''Software Requirements:''' Required software and versions.
#* '''Environment Configuration:''' Instructions for setting up development, testing, and production environments.
#* '''Client Requirements:''' Required software and versions.
# '''Database Documentation'''
#* '''Database Schema:''' Detailed diagrams and descriptions of database tables, fields, data types, and relations.
#* '''Data Dictionary:''' Detailed definitions of all database elements.
#* '''Entity-Relationship Diagrams:''' Visual representation of data entities and relationships.
#* '''Database Performance Metrics:''' Information on database performance and optimization.
# '''Codebase Overview'''
#* '''Languages and Frameworks:''' Information about programming languages and frameworks used.
#* '''Repository Structure:''' Description of the code repository structure.
#* '''Coding Standards and Conventions:''' Guidelines followed in the codebase.
#* '''Repository Access:''' Instructions to access code repository.
# '''API Documentation'''
#* '''List of Endpoints:''' Detailed list of API endpoints and their functions.
#* '''Request/Response Formats:''' Specifications of request and response formats.
#* '''Authentication and Authorization:''' Methods used for API security.
# '''User Interface Documentation'''
#* '''Screenshots and Descriptions:''' Visuals and descriptions of key interfaces.
#* '''User Flow Diagrams:''' Diagrams showing user navigation through the system.
# '''Security Protocols'''
#* '''Data Security Measures:''' Techniques used for securing data.
#* '''Network Security Configurations:''' Network security tools and configurations.
# '''Installation and Deployment'''
#* '''Installation Guide:''' Step-by-step installation instructions.
#* '''Deployment Procedures:''' Process for deploying updates or new releases.
#* '''CI/CD Practices:''' Continuous integration and deployment methodologies used.
# '''Testing and Quality Assurance'''
#* '''Testing Procedures:''' Overview of testing strategies and methodologies.
#* '''Test Case Descriptions:''' Examples of key test cases.
#* '''Automated Testing Frameworks:''' Description of automated testing setup.
# '''Performance and Optimization'''
#* '''System Performance Benchmarks:''' Key performance indicators and benchmarks.
#* '''Optimization Strategies:''' Techniques and practices for optimizing system performance.
# '''Backup and Recovery'''
#* '''Backup Procedures and Schedules:''' How and when backups are conducted.
#* '''Disaster Recovery Plan:''' Steps and procedures for system recovery in case of a disaster.
# '''Access Control'''
#* '''User Roles and Permissions:''' Description of different user roles and their access levels.
#* '''Access Management Procedures:''' How user access is managed and controlled.
# '''System Integration'''
#* '''External System Integration:''' Details of integration with external systems or services.
#* '''Data Exchange Protocols:''' Protocols used for data exchange with external systems.
# '''Localization and Internationalization (if applicable)'''
#* '''Supported Languages:''' List of languages the system supports.
#* '''Cultural Adaptations:''' Adjustments made for different cultural or regional needs.
# '''Scalability and Future Development'''
#* '''Scalability Strategies:''' Plans and techniques for scaling the system.
#* '''Expansion Plans and Roadmap:''' Future development plans and system evolution roadmap.
# '''Customization and Extensibility'''
#* '''Customization Options:''' Options available for system customization.
#* '''API Documentation for Extensibility:''' Documentation for APIs available for extending the system.
# '''Operational Best Practices'''
#* '''System Maintenance Guidelines:''' Best practices for maintaining the system.
#* '''Security Best Practices:''' Guidelines for maintaining security.
#* '''Audit Trails and Logging:''' Information on system logging and audit trails.
# '''Feedback and Continuous Improvement'''
#* '''Feedback Mechanisms:''' How users can provide feedback.
#* '''Improvement Processes:''' How feedback is incorporated into system improvements.
# '''Appendices'''
#* '''Glossary of Terms:''' Definitions of technical terms used.


''TODO.''
[[#top|RETURN]]


== Authors ==
== Authors ==
Line 407: Line 498:


* Chetan Sondagar
* Chetan Sondagar
[[#top|RETURN]]


== License and Copyright ==
== License and Copyright ==


Copyright © 2024, St. Michaels University School.
Copyright © 2024, St. Michaels University School.
[[#top|RETURN]]

Latest revision as of 14:19, 3 May 2024


This document consists of multiple parts; for a directory to all of the parts, see SDSM:Index.

Name

SDS Modernization (SDSM) - Modernization of SMUS School Data System

RETURN

Description

This document describes an active effort running through 2024 to modernize the School Data System (SDS) of St. Michaels University School (SMUS).

RETURN

Audience

The intended audience of this document is individuals who are savvy with electronic computer hardware and software, its use, installation, and maintenance. In particular, it is for individuals that are capable of writing, maintaining, integrating, testing software code, or installing and maintaining deployments of software on internet servers. Or it is for those individuals who directly communicate with or manage such people and technical projects, and have some understanding of technology.

This document is mainly for individuals who would be involved with the SDS Modernization (SDSM) effort, or who would be maintaining SDS afterwards, or who would be managing the people who do these things, or who want to be more informed about how SDS works.

This document is not specifically for those who are just end users of SDS, or for those who make higher level management decisions and are less technically savvy, but they might glean useful information from it. For these kinds of users, other derived or supplementary documentation may be better suited to their needs, or this document can be re-interpreted for them in other forms that better suit them.

RETURN

Overview

School Data System (SDS) is an electronic records management system that empowers a school's fundamental operations by managing the school's records of its students and related data and business processes. This includes tracking students' identities, enrolment, classes, and marks. SDS is used directly by students, their parents, their teachers, and other staff of a school having various roles.

SDS is meant in principle to be usable by any school, but first and foremost to meet the specific needs of St. Michaels University School (SMUS). SMUS is the only school actually using it as of 2024, but SDS may be made available to other schools later. Historically, SDS was also used by Brentwood College School.

SDS has a client-server architecture, hosted on a network as a web server, and used by way of a web client. SDS should be compatible with all modern web clients, including Mozilla FireFox, Google Chrome, Microsoft Edge, and Apple Safari; it should be usable with all modern client devices and operating systems.

SMUS hosts all of its SDS instances, production and testing, on premises on network servers located at its Richmond Road campus. They are not hosted by a third party, whether "cloud" or otherwise.

See https://sds.smus.ca for the production instance.

SDS has 2 alternative versions in April of 2024, older and newer.

The older SDS version (SDS Gavintech), is actively in use in production, and its development is mostly frozen, with minimal updates only.

The newer SDS version (SDS Laravel or SDS API), is not currently used in production, and is incomplete; nearly all current development work is on this version, and it is intended to replace the older version in production once it is sufficiently complete.

The newer SDS version is meant to have essentially the same outward-facing or user-visible feature set, behavior, and appearance as the older version. The newer version also uses essentially the same SQL database schema as the older version, and they actively share a database, which makes for a more seamless migration as the database doesn't have to be "converted". Within these constraints of looking the same to users and having the same database, the new version is almost completely different internally, with a new internal code structure that is a lot more modern.

Each SDS version is written in the PHP programming language and uses a MySQL database. The newer version uses the Laravel PHP application framework, while the older version uses the Gavintech PHP framework. Both versions' production instances are on servers running the Ubuntu operating system and are behind an Apache web server. While Gavintech is essentially abandoned, very non-modern, and bespoke, all of the other named dependencies are actively maintained, modern, and very popular.

RETURN

Structure and Dependencies

SDS itself is a web application written mainly in the PHP programming language (https://www.php.net). Some portions are also written in the JavaScript programming language, though it is intended that these will be replaced with PHP code, mostly if not entirely. Some portions are also written in the MySQL DBMS (https://www.mysql.com) dialect of the SQL programming language, but these are being replaced with PHP code that uses a DBMS abstraction instead of literal SQL.

SDS specifically uses PHP major version 8.1, which was first released for general production use on 2020 Nov 26 (https://www.php.net/ChangeLog-8.php); PHP 8.1 stopped receiving active support by its principal maintainers on 2023 Nov 25, and then for critical security issues it will only be supported by them until 2025 Dec 31 (https://www.php.net/supported-versions.php).

SDS specifically uses MySQL major version 8.0, which was first released for general production use on 2018 Apr 19 (https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html); MySQL 8.0 will stop receiving LTS support by its principal maintainers in 2026 April.

SDS can run on a variety of server environments and operating systems, same as PHP and MySQL do. However, its canonical (and also its Canonical) runtime environment is the Ubuntu operating system (https://ubuntu.com), which SMUS runs its production and shared testing deployments in.

Those production SDS deployments specifically use Ubuntu major version 22.04 LTS, which was first released for general production use on 2022 Apr 21; it will stop receiving standard support in 2027 and end of life support in 2032 (https://wiki.ubuntu.com/Releases).

SMUS uses the specific versions of PHP and MySQL that are provided with the Ubuntu version it uses, so the former are only updated when the latter is updated. Most notable is that SDS is constrained to using PHP 8.1 for as long as it is run on Ubuntu 22.04. While their principal maintainers may stop supporting those versions sooner, Ubuntu themselves would continue to provide critical security and bug fixes to MySQL and PHP bundled with their LTS releases, but not new major versions.

SDS Laravel PHP Library Dependencies

Directly Used By Name In PHP Source Files

The PHP source code files of SDS Laravel contain direct references to a variety of third-party PHP classes, most instances of which are parts of the Laravel framework, and some that aren't. Often their fully-qualified names only appear on the form of use statements but other times those names don't appear in use statements and in the main body of PHP code instead.

This SDSM document sub-section enumerates the third-party PHP classes that are directly referenced by name in the SDS Laravel PHP source code, which is the strongest indicator that those classes are actually-used dependencies of it, rather than declared dependencies that are not actually used.

Directly used by name in about 800 app PHP files:

  • Illuminate\*
  • Auth aka Illuminate\Support\Facades\Auth
  • DB aka Illuminate\Support\Facades\DB
  • Mail aka Illuminate\Support\Facades\Mail
  • Redirect aka Illuminate\Support\Facades\Redirect
  • URL aka Illuminate\Support\Facades\URL

Directly used by name in app/Models/File.php and app/Http/Controllers/Admin/Migration/ImportPhotosController.php only:

  • Image aka Intervention\Image\ImageServiceProvider

Directly used by name in about 70 app PHP classes:

  • Carbon\Carbon
  • Carbon\Exceptions\InvalidFormatException

Directly used by name in 10 app PHP classes:

  • LdapRecord\*

Directly used by name in 9 app PHP model classes:

  • GoldSpecDigital\LaravelEloquentUUID\Database\Eloquent\Uuid

Directly used by name in 5 app PHP classes related to Blackbaud or Bambora:

  • GuzzleHttp\Client
  • GuzzleHttp\Exception\ClientException
  • GuzzleHttp\Exception\GuzzleException

Directly used by name in app/Models/Finance/Bambora.php or app/Http/Controllers/Api/UserProfileController.php only:

  • Beanstream\ApiException
  • Beanstream\Exception
  • Beanstream\Gateway

Directly used by name in 11 php files mostly database/factories/*.php:

  • Faker\Generator

Directly used by name in app/Models/User.php only:

  • Lab404\Impersonate\*

Directly used by name in app/Providers/AppServiceProvider.php only:

  • Dotenv\Dotenv

Directly used by name in app/Models/Pivot/FormCampaignPerson.php only:

  • Staudenmeir\EloquentHasManyDeep\HasRelationships

Directly used by name in app/Http/Middleware/TrustProxies.php only:

  • Fideloper\Proxy\TrustProxies

Directly used by name in app/Http/Middleware/AuthTimeoutMiddleware.php and app/Http/Kernel.php only:

  • JulioMotol\AuthTimeout\Middleware\AuthTimeoutMiddleware

Directly used by name in app/Exceptions/Handler.php only:

  • Symfony\Component\HttpFoundation\Response

Directly used by name in config/logging.php only:

  • Monolog\Handler\*

Directly used by name in tests/Unit/ExampleTest.php only:

  • PHPUnit\Framework\TestCase

Directly referenced by name COMMENTED-OUT in app/Http/Kernel.php only:

  • Fruitcake\Cors\HandleCors

Required In Composer Config File

The Composer config file composer.json of SDS Laravel explicitly declares that it requires these 19 PHP library dependencies:

  • barryvdh/laravel-debugbar (3.6.6)
  • directorytree/ldaprecord-laravel (^2.3.0)
  • etern8ty/beanstream (dev-master)
  • fideloper/proxy (^4.2)
  • fzaninotto/faker (^1.9.1)
  • goldspecdigital/laravel-eloquent-uuid (^8.0.1)
  • guzzlehttp/guzzle (^7.0.1)
  • intervention/image (^2.7)
  • juliomotol/laravel-auth-timeout (3.1.1)
  • lab404/laravel-impersonate (^1.7)
  • laravel/framework (^8.83)
  • laravel/helpers (^1.2)
  • laravel/tinker (^2.0)
  • laravel/ui (^3.0)
  • mockery/mockery (^1.3.1)
  • nunomaduro/collision (^5.0)
  • phpunit/phpunit (^9.0)
  • spatie/laravel-ignition (^1.6)
  • staudenmeir/eloquent-has-many-deep (^1.14)

It also declares these additional 3, which don't seem to be actually used:

  • doctrine/dbal (^3.5)
  • fico7489/laravel-revisionable-upgrade (*)
  • fruitcake/laravel-cors (^2.0)

Resolved From Composer Config File

When Composer evaluates its config file composer.json of SDS Laravel, its declared required PHP library dependencies are resolved to these 120, which are actually installed:

  • barryvdh/laravel-debugbar (v3.6.6)
  • brick/math (0.12.1)
  • carbonphp/carbon-doctrine-types (2.1.0)
  • dflydev/dot-access-data (v3.0.2)
  • directorytree/ldaprecord (v2.20.5)
  • directorytree/ldaprecord-laravel (v2.7.3)
  • doctrine/inflector (2.0.10)
  • doctrine/instantiator (2.0.0)
  • doctrine/lexer (1.2.3)
  • dragonmantank/cron-expression (v3.3.3)
  • egulias/email-validator (2.1.25)
  • etern8ty/beanstream (dev-master 297b986)
  • facade/ignition-contracts (1.0.2)
  • fideloper/proxy (4.4.2)
  • filp/whoops (2.15.4)
  • fzaninotto/faker (dev-master 5ffe7db)
  • goldspecdigital/laravel-eloquent-uuid (v8.0.1)
  • graham-campbell/result-type (v1.1.2)
  • guzzlehttp/guzzle (7.8.1)
  • guzzlehttp/promises (2.0.2)
  • guzzlehttp/psr7 (2.6.2)
  • hamcrest/hamcrest-php (v2.0.1)
  • intervention/image (2.7.2)
  • juliomotol/laravel-auth-timeout (v3.1.1)
  • lab404/laravel-impersonate (1.7.5)
  • laravel/framework (v8.83.27)
  • laravel/helpers (v1.7.0)
  • laravel/serializable-closure (v1.3.3)
  • laravel/tinker (v2.9.0)
  • laravel/ui (v3.4.6)
  • league/commonmark (2.4.2)
  • league/config (v1.2.0)
  • league/flysystem (1.1.10)
  • league/mime-type-detection (1.15.0)
  • maximebf/debugbar (v1.22.3)
  • mockery/mockery (1.6.11)
  • monolog/monolog (2.9.3)
  • myclabs/deep-copy (1.11.1)
  • nesbot/carbon (2.72.3)
  • nette/schema (v1.3.0)
  • nette/utils (v4.0.4)
  • nikic/php-parser (v5.0.2)
  • nunomaduro/collision (v5.11.0)
  • opis/closure (3.6.3)
  • phar-io/manifest (2.0.4)
  • phar-io/version (3.2.1)
  • phpoption/phpoption (1.9.2)
  • phpunit/php-code-coverage (9.2.31)
  • phpunit/php-file-iterator (3.0.6)
  • phpunit/php-invoker (3.1.1)
  • phpunit/php-text-template (2.0.4)
  • phpunit/php-timer (5.0.3)
  • phpunit/phpunit (9.6.19)
  • psr/clock (1.0.0)
  • psr/container (1.1.2)
  • psr/event-dispatcher (1.0.0)
  • psr/http-client (1.0.3)
  • psr/http-factory (1.0.2)
  • psr/http-message (2.0)
  • psr/log (2.0.0)
  • psr/simple-cache (1.0.1)
  • psy/psysh (v0.12.3)
  • ralouphie/getallheaders (3.0.3)
  • ramsey/collection (2.0.0)
  • ramsey/uuid (4.7.6)
  • sebastian/cli-parser (1.0.2)
  • sebastian/code-unit (1.0.8)
  • sebastian/code-unit-reverse-lookup (2.0.3)
  • sebastian/comparator (4.0.8)
  • sebastian/complexity (2.0.3)
  • sebastian/diff (4.0.6)
  • sebastian/environment (5.1.5)
  • sebastian/exporter (4.0.6)
  • sebastian/global-state (5.0.7)
  • sebastian/lines-of-code (1.0.4)
  • sebastian/object-enumerator (4.0.4)
  • sebastian/object-reflector (2.0.4)
  • sebastian/recursion-context (4.0.5)
  • sebastian/resource-operations (3.0.4)
  • sebastian/type (3.2.1)
  • sebastian/version (3.0.2)
  • spatie/backtrace (1.6.1)
  • spatie/flare-client-php (1.5.1)
  • spatie/ignition (1.14.1)
  • spatie/laravel-ignition (1.6.4)
  • staudenmeir/eloquent-has-many-deep (v1.14.4)
  • swiftmailer/swiftmailer (v6.3.0)
  • symfony/console (v5.4.39)
  • symfony/css-selector (v6.4.7)
  • symfony/debug (v4.4.44)
  • symfony/deprecation-contracts (v3.5.0)
  • symfony/error-handler (v5.4.39)
  • symfony/event-dispatcher (v6.4.7)
  • symfony/event-dispatcher-contracts (v3.5.0)
  • symfony/finder (v5.4.39)
  • symfony/http-foundation (v5.4.39)
  • symfony/http-kernel (v5.4.39)
  • symfony/mime (v5.4.39)
  • symfony/polyfill-ctype (v1.29.0)
  • symfony/polyfill-iconv (v1.29.0)
  • symfony/polyfill-intl-grapheme (v1.29.0)
  • symfony/polyfill-intl-idn (v1.29.0)
  • symfony/polyfill-intl-normalizer (v1.29.0)
  • symfony/polyfill-mbstring (v1.29.0)
  • symfony/polyfill-php72 (v1.29.0)
  • symfony/polyfill-php73 (v1.29.0)
  • symfony/polyfill-php80 (v1.29.0)
  • symfony/process (v5.4.39)
  • symfony/routing (v5.4.39)
  • symfony/service-contracts (v3.5.0)
  • symfony/string (v6.4.7)
  • symfony/translation (v6.4.7)
  • symfony/translation-contracts (v3.5.0)
  • symfony/var-dumper (v5.4.39)
  • theseer/tokenizer (1.2.3)
  • tightenco/collect (v9.52.7)
  • tijsverkoyen/css-to-inline-styles (v2.2.7)
  • vlucas/phpdotenv (v5.6.0)
  • voku/portable-ascii (1.6.1)
  • webmozart/assert (1.11.0)

It also resolves these additional 9, which don't seem to be actually used:

  • asm89/stack-cors (v2.2.0)
  • doctrine/cache (2.2.0)
  • doctrine/dbal (3.8.4)
  • doctrine/deprecations (1.1.3)
  • doctrine/event-manager (2.0.0)
  • fico7489/laravel-revisionable-upgrade (3.0.4)
  • fruitcake/laravel-cors (v2.2.0)
  • psr/cache (3.0.0)
  • venturecraft/revisionable (1.41.0)

Appendices

Proposed Layout of SDSM by Chetan Sondagar

Chetan Sondagar proposed, on 2024 April 10, the following layout for this SDS Modernization (SDSM) document. The actual document layout ended up being different, and the proposal is shown here for posterity. But while the actual document was in development and had substantial missing content, the proposal also served to illustrate what was missing.

  1. Introduction
    • System Overview: Brief description of the system, its main components, and its purpose.
    • Purpose and Scope: Clarify the intended use of the documentation and its intended audience.
    • Audience of the Documentation: Specify who the documentation is written for (e.g., developers, system administrators, end-users).
  2. System Architecture
    • High-Level Architecture: Overview of the system's architecture, including major components and how they interact.
    • System Components and Interactions: Detailed description of each system component and its role.
    • Network Diagrams: Visual representations of network and system architecture, if applicable.
  3. Environment Setup
    • Hardware Requirements: Specifications for necessary hardware.
    • Software Requirements: Required software and versions.
    • Environment Configuration: Instructions for setting up development, testing, and production environments.
    • Client Requirements: Required software and versions.
  4. Database Documentation
    • Database Schema: Detailed diagrams and descriptions of database tables, fields, data types, and relations.
    • Data Dictionary: Detailed definitions of all database elements.
    • Entity-Relationship Diagrams: Visual representation of data entities and relationships.
    • Database Performance Metrics: Information on database performance and optimization.
  5. Codebase Overview
    • Languages and Frameworks: Information about programming languages and frameworks used.
    • Repository Structure: Description of the code repository structure.
    • Coding Standards and Conventions: Guidelines followed in the codebase.
    • Repository Access: Instructions to access code repository.
  6. API Documentation
    • List of Endpoints: Detailed list of API endpoints and their functions.
    • Request/Response Formats: Specifications of request and response formats.
    • Authentication and Authorization: Methods used for API security.
  7. User Interface Documentation
    • Screenshots and Descriptions: Visuals and descriptions of key interfaces.
    • User Flow Diagrams: Diagrams showing user navigation through the system.
  8. Security Protocols
    • Data Security Measures: Techniques used for securing data.
    • Network Security Configurations: Network security tools and configurations.
  9. Installation and Deployment
    • Installation Guide: Step-by-step installation instructions.
    • Deployment Procedures: Process for deploying updates or new releases.
    • CI/CD Practices: Continuous integration and deployment methodologies used.
  10. Testing and Quality Assurance
    • Testing Procedures: Overview of testing strategies and methodologies.
    • Test Case Descriptions: Examples of key test cases.
    • Automated Testing Frameworks: Description of automated testing setup.
  11. Performance and Optimization
    • System Performance Benchmarks: Key performance indicators and benchmarks.
    • Optimization Strategies: Techniques and practices for optimizing system performance.
  12. Backup and Recovery
    • Backup Procedures and Schedules: How and when backups are conducted.
    • Disaster Recovery Plan: Steps and procedures for system recovery in case of a disaster.
  13. Access Control
    • User Roles and Permissions: Description of different user roles and their access levels.
    • Access Management Procedures: How user access is managed and controlled.
  14. System Integration
    • External System Integration: Details of integration with external systems or services.
    • Data Exchange Protocols: Protocols used for data exchange with external systems.
  15. Localization and Internationalization (if applicable)
    • Supported Languages: List of languages the system supports.
    • Cultural Adaptations: Adjustments made for different cultural or regional needs.
  16. Scalability and Future Development
    • Scalability Strategies: Plans and techniques for scaling the system.
    • Expansion Plans and Roadmap: Future development plans and system evolution roadmap.
  17. Customization and Extensibility
    • Customization Options: Options available for system customization.
    • API Documentation for Extensibility: Documentation for APIs available for extending the system.
  18. Operational Best Practices
    • System Maintenance Guidelines: Best practices for maintaining the system.
    • Security Best Practices: Guidelines for maintaining security.
    • Audit Trails and Logging: Information on system logging and audit trails.
  19. Feedback and Continuous Improvement
    • Feedback Mechanisms: How users can provide feedback.
    • Improvement Processes: How feedback is incorporated into system improvements.
  20. Appendices
    • Glossary of Terms: Definitions of technical terms used.

RETURN

Authors

Primarily written by Darren Duncan.

Includes portions written by or derived from sources written by:

  • Chetan Sondagar

RETURN

License and Copyright

Copyright © 2024, St. Michaels University School.

RETURN