Changes in 12.6
---------------
- HTML responsive stackable tables in Export.php
- Export list: add Total row in ListOutput.fnc.php
- Add rounded flag icons in locale/[locale_code]/flag.png
- Fix #362 Order by Points as Letter Grade is alphabetically sorted (may be inaccurate) in Grades.php
- Add Activity field is required + "Remove" activity (instead of "Delete") in Eligibility/Student.php
- Fix responsive image height, rename $width param to $height in FS_Icons.inc.php & MenuItems.php
- HTML add fieldset & padding to PopTable in MassRequests.php
- CSS add .class-picture class in PrintClassPictures.php
- CSS fix #365 pictures width, height & name overflow in PrintClassPictures.php
- Remove `_saveRosarioModules()` local function, use Config() in Modules.inc.php
- Remove `_saveRosarioPlugins()` local function, use Config() in Plugins.inc.php
- CSS Fix first column (list, table) in DailySummary.php, Grades.php, Search.inc.php, rtl.css, stylesheet.css & zresponsive.css
- CSS FlatSIS theme reduce bottom buttons height in stylesheet.css & zresponsive.css
- Display short month and year labels instead of short month only in CategoryBreakdownTime.php
- SQL order Transcript Grades by Course Title in Transcripts.fnc.php
- Add Administrator option to Visible To User Profiles in Resources.fnc.php, rosariosis.sql & rosariosis_mysql.sql
- Create Student Account: Force Default School in index.php, Configuration.php, Student.php, General_Info.inc.php, rosariosis.sql & rosariosis_mysql.sql
- SQL add csp_reports table in rosariosis.sql & rosariosis_mysql.sql
- Add Content Security Policy plugin in plugins/Content_Security_Policy/, rosariosis.sql & rosariosis_mysql.sql
- Update to version 12.6 in Update.fnc.php
- Add Content-Security-Policy-Report-Only HTTP header in Warehouse.php
- Fix SQL error foreign keys: force roll Schools in Rollover.php
- Update French & Spanish translations in rosariosis.po
- Add Russian & Ukrainian translations in InstallDatabase.php, locale/ru_RU.utf8/ & locale/uk_UA.utf8/

Changes in 12.5
---------------
- Add '&modfunc=save' to form URL in Expenses.php, Incomes.php, Salaries.php, StaffPayments.php, DisciplineForm.php, Referrals.php, EnterEligibility.php, InputFinalGrades.php, StudentFees.php, StudentPayments.php & Preferences.php
- SQL case-insensitive username uniqueness check in ImportUsers.fnc.php
- Fix HTML error label's for attribute doesn't match any element id in General_Info.php
- Fix add .tinymce CSS class when class already set in $extra param in Inputs.php
- JS add CSP root, functions & programFunctions (global, always loaded) in Gruntfile.js, assets/js/csp/
- JS add setInnerHTML() function in warehouse.js
- JS add submenuOnTouch() function in warehouse.js
- JS Prevent submitting form if no checkboxes are checked in warehouse.js & Inputs.php
- JS add bottomButtonClick() Bottom.php buttons click related events in warehouse.js & Bottom.php
- JS deprecate switchMenu() function: use `<details><summary>` instead in warehouse.js, General_Info.inc.php, Search.fnc.php & Widgets.php
- JS ajaxPrepare(): handle #ajax_update_body, #menu_user_session & #warehouse_user_session in warehouse.js, Side.php & Warehouse.php
- JS use #x_redirect_url value instead of XRedirectUrl global var in warehouse.js & PreparePHP_SELF.fnc.php
- JS Trigger custom ajaxPrepare event in warehouse.js
- Deprecate `_printPageHead()` function & rework display logic in PasswordHelp.php
- JS add backPrompt() function in BackPrompt.js & Prompts.php
- JS remove inline code from CaptchaInput() in Inputs.php & CaptchaInput.js
- JS remove inline code from FileInput() in Inputs.php & FileInput.js
- JS remove inline code from MLTextInput() in Inputs.php & MLTextInput.js
- JS remove inline code from MarkDownInputPreview() in Inputs.php & MarkDownInputPreview.js
- JS required group of checkboxes in Inputs.php & MultipleCheckboxInput.js
- JS remove inline code from PasswordInput() in Inputs.php & PasswordInput.js
- JS remove inline code from DeletePrompt() & Prompt() + add .button-prompt-cancel CSS class in Prompts.php & Prompt.js
- JS remove inline code from Search() in Search.fnc.php & Search.js
- JS remove inline code from Select2Input() in Inputs.php & Select2Input.js
- JS remove inline code from TinyMCEInput() in Inputs.php & TinyMCEInput.js
- JS remove inline code from Widget_course in Widget.php & Course.js
- JS remove inline AJAX call in ClassRank.inc.php, FinalGrades.inc.php, Addon.fnc.php, Modules.inc.php, Plugins.inc.php & AjaxUrl.js
- JS remove inline code from MoodleImportFormSubmitJS() in Moodles/config.inc.php, ImportUsers.fnc.php & ImportFormSubmit.js
- JS remove inline reload menu code in MarkingPeriods.php, Rollover.php, Modules.inc.php, Profiles.php & ReloadMenu.js
- JS remove inline code from `_makePaymentsCommentsInput()` in Accounting/functions.inc.php & MakePaymentsCommentsInput.js
- JS remove inline code from program in Administration.php & Administration.js
- JS remove inline code from program in FixDailyAttendance.php & FixDailyAttendance.js
- JS remove inline code from RegistrationAdminContactEnable() in RegistrationAdmin.fnc.php & RegistrationAdminContactEnable.js
- JS remove inline code from RegistrationSiblingUseContactsAddress() in Registration.fnc.php & RegistrationSiblingUseContactsAddress.js
- JS remove inline code from program in MassCreateAssignments.php & MassCreateAssignments.js
- JS remove inline code from StudentAssignmentSubmissionOutput() in StudentAssignments.fnc.php & StudentAssignmentSubmissionOutput.js
- JS remove inline code from program in ChooseCourse.php & ChooseCourse.js
- JS remove inline code from program in ChooseRequest.php & ChooseRequest.js
- JS remove inline code from program in Export.php & Export.js
- JS remove inline code from program in Courses.php & Courses.js
- JS remove inline code from program in MassDrops.php & MassDrops.js
- JS remove inline code from program in MassRequests.php & MassRequests.js
- JS remove inline code from program in MassSchedule.php & MassSchedule.js
- JS remove inline code from program in Requests.php & Requests.js
- JS remove inline code from program in Schedule.php & Schedule.js
- JS remove inline code from program in Scheduler.php & Scheduler.js
- JS remove inline code from program in AccessLog.php & AccessLog.js
- JS remove inline code from program in Configuration.php & Configuration.js
- JS remove inline code from program in MarkingPeriods.php & MarkingPeriods.js
- JS remove inline code from program in PortalPolls.php & PortalPolls.js
- JS remove inline code from program in Rollover.php & Rollover.js
- JS remove inline code from `_makePaymentsCommentsInput()` in Student_Billing/functions.inc.php & MakePaymentsCommentsInput.js
- JS remove inline code from Addresses & Contacts tab in Address.inc.php & Address.js
- JS remove inline code from General Info tab in General_Info.inc.php & CreateStudentAccount.js
- JS remove inline code from program in StudentLabels.fnc.php & StudentLabels.js
- JS remove inline code from BottomButtonBackUpdate() in Bottom.fnc.php & BottomButtonBackUpdate.js
- JS remove inline code from ChartjsChart() in Charts.fnc.php & ChartjsChart.js
- JS remove inline code from GetFieldsForm() in Fields.fnc.php & FieldsGetForm.js
- JS remove inline code from SubstitutionsInput() in Substitutions.fnc.php & SubstitutionsInput.js
- JS fix CSP error: use setInnerHTML() instead of jQuery .append() function in jquery.colorbox.js & jquery.colorbox-min.js
- JS not available, reload page (eg. when reopening closed tab) in Warehouse.php, noJsReload.js & warehouse.js
- Module is addon, set custom module icon & remove $icon param in DashboardModule.fnc.php
- CSP Redirection is done in HTML in HackingLog.fnc.php, Theme.fnc.php, Student.php & User.php
- Fix reload theme when "Force" checked in Theme.fnc.php
- CSP add .onmouseover-tipmsg CSS class, use `data-title` & `data-msg` attributes in TipMessage.fnc.php
- Redirection is done in HTML in case current request is AJAX in Warehouse.php
- Add `_gradeScaleInputHtml()` & `_search()` private methods to Widget_letter_grade object in Widget.php
- Use Select2 input + AJAX search when scale has more than 1003 grades in Widget.php
- Change User-Agent to "RosarioSIS/1.0; +https://www.rosariosis.org/" in curl.php
- Cache config values, avoid calling Config() function X times in Currency.fnc.php & User.fnc.php
- Submit selected date: use `onchange-date-submit` CSS class & `data-name` attribute in Date.php
- Add CSS classes to .list element in ListOutput.fnc.php
- CSP use the 'vertical-tab-navigation' class option for ListOutput() in Grades.php & InputFinalGrades.php
- CSP remove unsafe-inline Javascript: use `data-url` attribute in ListOutput.fnc.php
- Use MultipleCheckboxInput() function in AddAbsences.php
- CSP add .onclick-checkall CSS class & use `data-name-like` attribute in AddAbsences.php, DuplicateAttendance.php, Exceptions.php & Profiles.php
- CSP add .onclick-toggle CSS class & use `data-id` attribute in CreateParents.php, ReportCards.fnc.php & Transcripts.fnc.php
- FinalGradeSave() can save COMMENT column in FinalGrades.inc.php
- Include Students active as of Timeframe end date in DailyTransactions.php
- CSP add .onchange-maybe-edit-select CSS class in StudentsUsersInfo.fnc.php & Address.inc.php
- Prevent using username, or email in the password in General_Info.inc.php
- CSP add .onclick-ajax-link & .onchange-ajax-link CSS classes, use `data-link` attribute, program wide
- CSP add .onchange-ajax-post-form CSS class, program wide
- CSP use curl POST instead of AJAX to send data to external domain in FirstLogin.fnc.php
- HTML space gain: remove minus between letter & percent grades in Grades.php
- SQL remove unused columns in GradebookBreakdown.php
- CSP use `<template>` for InputDivOnclick() in Inputs.php
- CSS IE fix hide `<template>` in stylesheet.css
- JS Fix for Internet Explorer in warehouse.js & csp/functions.js
- Simplify isAJAX() function code in Warehouse.php
- CSS add .tinymce-document class: double default height in HonorRoll.php, Letters.php & stylesheets.css
- CSP: use `<details><summary>` CSS deprecate .switchMenu in stylesheet.css
- CSS add `<pre>` styling in colors.css & stylesheet.css
- CSS FlatSIS theme Prevent body from scrolling when submenu open + scroll submenu in stylesheet.css
- CSP use PHP instead of JS for salute header in Portal.php
- Fix database partly installed due to user abort in InstallDatabase.php
- Fix SQL error null value in column "student_id" in Schedule.php
- Fix PHP warning when (Current) User not found / was just deleted in Current.php
- Include Reporter & Incident Date widgets on the Find a Student form in ReferralLog.php
- Fix PHP notice undefined index: elements in ReferralLog.php
- HTML responsive adjust Contact form name inputs on small desktop screen in Registration.fnc.php
- Update French & Spanish translations in rosariosis.po
- Fail if no curl installed in FirstLogin.fnc.php & Addon.fnc.php
- Fix regression since 12.1 wkhtmltopdf error segmentation fault when CSS quotes property defined in wkhtmltopdf.css
- Fix PHP fatal error unsupported operand types: string - int in database.inc.php
- Fix HACKING ATTEMPT in SetUserStudentID() when "Search All Schools" checked in Search.fnc.php, Statements.php, PrintStudentInfo.php & Students/Search.inc.php

Changes in 12.4.3
-----------------
- SQL fix #359 duplicate entries when school is renamed after Rollover in AddDrop.php, thanks to @HubertQuiquet
- Fix regression since 12.4.1 search discipline numeric field in Widget.php
- Fix PHP fatal error division by zero: Percent Total is 0%, N/A final grade in FinalGrades.inc.php
- Fix check requested enrollment date for conflict (instead of today) in Schedule.php
- Fix exact search for MySQL: double quotes are escaped in Search.fnc.php

Changes in 12.4.2
-----------------
- Fix PHP fatal error failed opening required add-on file in Student.php & User.php
- Fix remove '&bottomfunc=print' from redirect_to URL param in index.php
- Fix include students active as of requested MP's end date in Grades.fnc.php
- CSS fix image height inside responsive table to colorBox in zresponsive.css

Changes in 12.4.1
-----------------
- Fix PHP warning: fatal error when end date < start date in AddDropBreakdownTime.php & CategoryBreakdownTime.php
- Fix search discipline numeric field for "0" value in Widget.php
- SQL case-insensitive username uniqueness check in Student.php, User.php & ImportUsers.fnc.php
- Deprecate `$extra['second_col']` & `$extra['extra_search']`, use `$extra['search']` instead in ReferralLog.php, ClassSearchWidget.fnc.php, Search.inc.php & Export.php
- Fix MySQL error fsti.TRANSACTION_ID isn't in GROUP BY in MenuReports.php
- Fix & simplify form & tabs URL, use GET method & `PreparePHP_SELF()` in MenuReports.php
- Fix SQL syntax error in Food_Service/Users/ActivityReport.php
- Remove useless Find a Student/User search in ActivityReport.php
- Allow list export in ActivityReport.php
- SQL INSERT STUDENT_ID INTO food_service_transactions in Food_Service/Students/Transactions.php
- Fix display value text when associative $options array in Inputs.php
- CSS add .valign-middle class to ≥ & ≤ signs for date fields in Widget.php & Search.fnc.php
- Security #358 Add full timestamp to file name in StudentAssignments.fnc.php

Changes in 12.4
---------------
- HTML use header4 instead of nested fieldset in Registration.fnc.php
- New "Add / Drop Breakdown over Time" program in AddDropBreakdownTime.php
- Hide "Include Parents of Inactive Students" checkbox if profile is not parent in Users/Search.inc.php
- Add AllowEditTemporary() & AllowEditTeacher() functions in AllowEdit.fnc.php
- Use AllowEditTemporary() & AllowEditTeacher() functions, program wide
- Security: Security: allow everyone to use Portal, allow admin only to use popups in AllowEdit.fnc.php
- Remove unused `$extra['staff_fields']['view']` & `$extra['student_fields']['view']` vars in GetStaffList.fnc.php, GetStuList.fnc.php & Search.inc.php
- Use vertically align list data option 'valign-middle' in StudentSummary.php
- Fix PHP warning Undefined array key 1 in CategoryBreakdown.php, CategoryBreakdownTime.php, StudentFieldBreakdown.php & StudentBreakdown.php
- Select Incomplete code when N/A grade in EnterEligibility.php
- Security fix: default to none when selected profile does not exist in User.php
- Fix PHP warning undefined variable $date_select when no calendars in Eligibility/TeacherCompletion.php
- Update French & Spanish translations in rosariosis.po
- Security: add `.htaccess` file to block direct access to potentially sensitive files in .htaccess
- CSS WPadmin theme fix password strength bars in stylesheet.css
- Move the "Use Grade Scale Comments" checkbox down to the next header in InputFinalGrades.php
- Hide totals if user has no access to the Daily Transactions program in Accounting/includes/Dashboard.fnc.php & Student_Billing/includes/Dashboard.fnc.php

Changes in 12.3.2
-----------------
- Multilingual course title: use ParseMLField() in TeacherCompletion.php, Grades/Configuration.php, FinalGrades.php, MassCreateAssignments.php, ReportCardComments.php, StudentAssignments.fnc.php, StudentGrades.php, Portal.php, Scheduling/functions.inc.php & Calendar.php

Changes in 12.3.1
-----------------
- CSS fix themes for RTL (Arabic): submenu on mouseover, arrows, password input, calendar days in rtl.css
- CSS themes remove deprecated .toggle class & small adjustments in stylesheet.css & zresponsive.css
- Default School Year: 2025 (2025-2026) in config.inc.sample.php, rosariosis.sql & rosariosis_mysql.sql

Changes in 12.3
---------------
- Multilingual course title: use ParseMLField(), program wide
- Multilingual course title: SQL change title column type from varchar(100) to text in Update.fnc.php, rosariosis.sql & rosariosis_mysql.sql
- Multilingual course title: use MLTextInput() in Courses.php
- MLTextInput() fix use of 'required' in $extra in Fields.fnc.php, Inputs.php & Courses.php
- Fix PHP8.4 Constant CURLOPT_BINARYTRANSFER is deprecated in curl.php
- Fix PHP8.4 deprecated passing E_USER_ERROR to trigger_error() in curl.php & Markdownify/Converter.php
- Fix PHP8.4 Implicitly marking parameter as nullable is deprecated in Parsedown.php
- Security: Cache killer: use file last modified time hash instead of RosarioSIS version in Warehouse.php
- Include PHP ctype extension emulation by Symfony in Ctype.php, PHPCompatibility.php & ctype.php
- Themes: Remove unused font files, 427KB gain in FlatSIS/fonts/Lato/ & WPadmin/fonts/opensans/
- WPadmin theme: convert ttf to woff2 font files, 105KB gain in WPadmin/fonts/opensans/
- CSS WPadmin: Fix Dashboard tip message row too tall in stylesheet.css
- Move SQL translation file to locale/[locale_code]/ folder
- Fix Rollover order: move Grading Scales before Courses in Rollover.php
- Allow object methods (callable) in $functions param in DBGet.fnc.php
- Use DBInsert() & DBUpdate() functions, program wide
- Fix potential SQL error SELECT DISTINCT, ORDER BY expressions must appear in select list in ReportCards.fnc.php
- CSS use .legend-gray.size-1 for details label in StudentAssignments.fnc.php
- Fix regression since 12.2.3 Save null percent: N/A final grade in FinalGrades.inc.php
- Save null percent: N/A for all children Marking Periods case in FinalGrades.inc.php

Changes in 12.2.3

Fix return empty array when no "Course-specific Comments" in ReportCards.fnc.php
Fix PHP fatal error Unknown format specifier "," in Greek translation in locale/el_GR.utf8/rosariosis.po
Fix SQL error when percent grade > 999.9 in FinalGrades.inc.php
Revert CSS FlatSIS theme adjust tooltip position in stylesheet.css

Changes in 12.2.2

Fix PHP warning undefined offset: 7 when day is Sunday in EnterEligibility.php
CSS WPadmin theme fix .underline-dots wrapping in stylesheet.css
Fix regression since 12.2 PostgreSQL error function sum(text) does not exist in StudentGrades.php
Fix anonymous statistics bar graph for individual assignments: average & Excused * in StudentGrades.php