commit 8402d40bcdb4661b52aeb462eb6fe20fd3e36e80 Author: Jonathan Druart Date: Thu Sep 3 16:54:52 2026 +0200 Bug 43444: Remove logout.x from referer commit d9d4c6c4fd3c3ce3c5013bb3cde04f6e1ae9cbf6 Author: Lucas Gass Date: Fri Sep 11 21:04:04 2026 +0000 Bug 36868: (follow-up) Remove 2x call of holds.js, hold-group.js Signed-off-by: Pedro Amorim commit 11012af3696af9d8e4acf5049e2268178489e2d0 Author: Lucas Gass Date: Fri Sep 11 20:58:55 2026 +0000 Bug 36868: (follow-up) Remove double instanciated hold_table_settings Signed-off-by: Pedro Amorim commit 3405bb206fcaee5be7e76bd7792f8d33d2f66888 Author: Lucas Gass Date: Fri Sep 11 20:55:21 2026 +0000 Bug 36868: (follow-up) fix failing tt_kohaTable_tidy.t test Signed-off-by: Pedro Amorim commit d1b39adfc5825d2dff1a5ff66f9a87577405d048 Author: Nina Martinez Date: Fri May 9 15:27:40 2025 +0200 Bug 39890: Add search, menu and footer skip links to the OPAC. Before starting the test plan, you have to enable the following system preferences: CurbsidePickup, useDischarge, OPACHoldsHistory, ILLModule,EnhancedMessagingPreferencesOPAC, CookieConsent, OPACPrivacy, opacreadinghistory, UseRecalls, OPACHoldRequests, RoutingSerials, EnableOpacSearchHistory, virtualshelves,suggestion, OPACViewOthersSuggestions, TagsEnabled, OpacTopissue,OPACVirtualCard. Test plan: A) Add skip link to menu 1. Apply the patch, you don't have to be logged in for this part. 2. Go to these different pages: search result page, record details page (try the different views), and Most popular page. 3. Try navigating with the keyboard, fix the focus at the top of the page 4. You should see a skip link in red, 'skip to menu' appear. After pressing enter, the focus should be on the menu. 5. Now go to these different pages: Purchase suggestions page, search history page, Lists page. 6. Repeat the third step and check if the skip link "Skip to menu" does not appear on these pages. 7. Now you have to log in to a patron account. 8. Go to your Summary page. 9. Repeat the third step with the different pages of the menu (Summary, Charges, Personal details, Consents, Tags, Change password, Search history, Checkout history, Privacy, Holds history, Recalls history, Purchase suggestions, Messaging, Lists, Ask for discharge, Interlibrary loan request, Curbside pickups, My virtual card). 10. You should see the "Skip to menu" link, after pressing enter, the focus should be on the menu. B) Add a skip link to the search box 1. Try navigating with the keyboard, fix the focus on the top of the page. 2. Check if there is a skip link "Skip to the search" in red on each page of the OPAC, except on the advanced search page. C) Add a skip link to the footer 1. Try navigating with the keyboard, fix the focus at the top of the OPAC page. 2. Check if there is a skip link 'Skip to footer' after the skip link 'Skip to main content' on each page of the OPAC. 3. Now, disable the system preferences (OPACReportProblem and KohaAdminEmailAddress, CookieConsent, OpacKohaUrl, OpacLangSelectorMode = 'both', or OpacLangSelectorMode = 'footer') to remove the OPAC footer. 4. Repeat step 2. Now, you should not have the skip link to the footer. D) If all the tests succeed, sign off ! Signed-off-by: Owen Leonard Signed-off-by: Katrin Fischer Signed-off-by: Pedro Amorim commit c6bf858253beecf4bf8a4e4e8ccc9d51daff2b35 Author: Pedro Amorim Date: Mon Jul 13 10:51:33 2026 +0000 Bug 34632: (QA follow-up) Use Koha::Uploader for patron import files Large files were failing to enqueue/process because the whole CSV was embedded in the job's JSON args, hitting DB/broker size limits. This now uploads the file via Koha::Uploader first (same pattern as MARC staging) and only passes a small uploaded_file_id through the job, and fixes the enqueue-failure message to not claim nothing happened when a job was in fact created. Co-Authored-By: Claude Sonnet 5 Signed-off-by: Lisette Scheer Signed-off-by: Pedro Amorim commit 5ca53cf2bc9ed1ecf6c7fe4d1c48c0b91fac83a5 Author: Pedro Amorim Date: Wed Jun 17 10:22:42 2026 +0000 Bug 34632: Add patron_import background job display template patron_import.inc provides the report/detail/js blocks consumed by the background job viewer: a summary of counts when finished, a live progress bar while running, and the full feedback and error analysis in the detail section. background_jobs.tt gains a patron_import entry in the job type filter dropdown. Test plan: 1) Apply patches, restart plack. 2) Navigate to the patron import tool: /cgi-bin/koha/tools/import_borrowers.pl 3) Upload the provided sample CSV file and click 'Import patrons'. 4) Confirm the page shows "The patron import job has been enqueued!" with a link to view the job. 5) Follow the link to the background job. Confirm a progress bar is shown while the job is running. 6) Once finished, confirm the report shows the correct counts (imported, overwritten, already_in_db, invalid, total). 7) Confirm the imported patrons exist under 'Patrons'. 8) Re-import the same file with 'Overwrite cardnumber' unchecked. Confirm 'already_in_db' count is 5. 9) Re-import again with 'Overwrite cardnumber' checked. Confirm 'overwritten' count is 5. 10) Visit the background jobs admin and filter by type 'Import patrons': /cgi-bin/koha/admin/background_jobs.pl 11) Confirm the jobs appear in the list. 12) Run the tests: prove t/db_dependent/Koha/BackgroundJob/PatronImport.t Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Brendan Lawlor Signed-off-by: Lisette Scheer Signed-off-by: Pedro Amorim commit 88644d26af1b87b89f50cfec9c9823a8d2f26f40 Author: Pedro Amorim Date: Wed Jun 17 10:22:27 2026 +0000 Bug 34632: Use PatronImport background job in import_borrowers import_borrowers.pl now reads the uploaded file into memory and calls Koha::BackgroundJob::PatronImport->enqueue() instead of running the import synchronously. On success the template shows a confirmation with a link to the background job viewer; on failure it shows an error alert. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Brendan Lawlor Signed-off-by: Lisette Scheer Signed-off-by: Pedro Amorim commit c8c24445afb9c9de7416e93971fbd2abc010933b Author: Pedro Amorim Date: Tue Jun 16 16:33:59 2026 +0000 Bug 34632: Add tests for Koha::BackgroundJob::PatronImport Tests cover enqueue() (status, queue, job_size, job_type) and six process() scenarios: happy path, import errors (with validation that the 25-error cap has been removed), already_in_db and overwritten, patron list creation, and cancelled job handling. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Brendan Lawlor Signed-off-by: Lisette Scheer Signed-off-by: Pedro Amorim commit ae60b6ebaad4dbdbf1dc2d157df8cc8a0cdec97a Author: Pedro Amorim Date: Tue Jun 16 16:33:45 2026 +0000 Bug 34632: Add Koha::BackgroundJob::PatronImport Introduces a new background job class for patron imports. enqueue() reads the uploaded file content into the job_args and uses line count as job_size for progress tracking. process() reconstitutes the file handle from the stored content, delegates to Koha::Patrons::Import with step_callback wired to $self->step, handles patron list creation, stores the import results, and clears file_content from the stored data to free space. Also registers patron_import in Koha::BackgroundJob::core_types_to_classes so _derived_class can resolve the job correctly. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Brendan Lawlor Signed-off-by: Lisette Scheer Signed-off-by: Pedro Amorim commit 770e5ca6ec3653736de0eb2949a92e83e562a833 Author: Pedro Amorim Date: Tue Jun 16 16:32:22 2026 +0000 Bug 34632: Add step_callback support to Koha::Patrons::Import Adds an optional step_callback coderef parameter to import_patrons(). When provided it is called after every row — whether the row succeeds, is skipped as a duplicate, or is rejected as invalid — so callers can track progress. Also removes the 25-error cap that was there to protect browser response size; that constraint no longer applies when results are stored in a background job's data field. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Brendan Lawlor Signed-off-by: Lisette Scheer Signed-off-by: Pedro Amorim commit 115d26ecae060b631b1cfe454eb8c7112a9467c1 Author: Kyle M Hall Date: Mon Jul 27 13:52:52 2026 -0400 Bug 42679: (QA follow-up) Add tests for missing permissions and non-overdue checkouts The existing tests pass even if the endpoint counts all checkouts instead of overdues only. This patch adds a checkout due in the future and tests the count is unchanged. It also tests that a patron without the borrowers flag gets a 403. Signed-off-by: Kyle M Hall Signed-off-by: Pedro Amorim commit 14e4d6cb43c265fda6ca35683ba043ba5cc37d9d Author: Kyle M Hall Date: Mon Jul 27 13:52:04 2026 -0400 Bug 42679: (QA follow-up) Remove search tag that belongs to bug 42508 This tag describes the /search/patrons endpoints added by bug 42508. Nothing in this bug uses it, and if this bug is pushed alone main would carry a tag for endpoints that don't exist. Bug 42508 should add it. Signed-off-by: Kyle M Hall Signed-off-by: Pedro Amorim commit f7caec076f3eaef545b9cf47722793d8feec6036 Author: Tomás Cohen Arazi Date: Sat May 23 01:00:44 2026 -0300 Bug 42679: Add GET /patrons/{patron_id}/overdues_count endpoint Returns the count of overdue checkouts for a patron as a plain integer. Computed live from the database (date_due < NOW()) to ensure accuracy, as overdue status is time-based with no discrete event to trigger updates. This endpoint is intended for async loading in the patron search table, allowing the main search results to render immediately while overdues are fetched separately per visible page. Test plan: 1. Apply patch 2. Run: $ ktd --shell k$ prove t/db_dependent/api/v1/patrons_overdues_count.t => SUCCESS: Tests pass! 3. Sign off :-D Signed-off-by: David Nind Signed-off-by: Kyle M Hall Signed-off-by: Pedro Amorim commit 5d75b6fdad91102b096d2604b7131a015724c79c Author: Laura Escamilla Date: Fri Jul 24 15:29:09 2026 +0000 Bug 39420: (QA follow-up) Replace tabs with spaces Signed-off-by: Laura_Escamilla Signed-off-by: Pedro Amorim commit 97235dea0d9d83786cecdedc037e18e346222942 Author: Samuel Sowanick Date: Tue Jun 30 11:10:34 2026 -0700 Bug 39420: adjusted additem.tt breadcrumb to lead back to item Bug 39420: removed old breadcrumb - Update additem.tt Bug 39420: Removed old edit breadcrumb. Bug 39420: Fixing syntax error in END tag Signed-off-by: Pedro Amorim commit 693c447736b6240ad4749a30d297eeb750c692e0 Author: Jonathan Druart Date: Mon Sep 7 15:55:01 2026 +0200 Bug 41995: Show all entries Signed-off-by: Michaela Signed-off-by: Pedro Amorim commit fe8a9a5529fe75dfac62ad78db51c12aa7b082d3 Author: Jonathan Druart Date: Tue Sep 8 14:39:10 2026 +0200 Bug 43330: Simplify tests Signed-off-by: Pedro Amorim commit d5f522e5264b298219d25e4dfe2e7360699c381b Author: Laura Escamilla Date: Tue Aug 18 16:49:59 2026 +0000 Bug 43330: Add regression test for TagsExternalDictionary To test: 1. Set the TagsExternalDictionary system preference to a non-empty value, for example: /usr/bin/ispell 2. Restart Plack if necessary. 3. Visit a staff interface page which loads C4::Tags, such as the staff home page or a bibliographic detail page. 4. Observe: Undefined subroutine &C4::Tags::check_install called at C4/Tags.pm line 44. BEGIN failed--compilation aborted at C4/Tags.pm line 53. Compilation failed in require. BEGIN failed--compilation aborted. 5. Clear TagsExternalDictionary and clear/update the system preference cache. 6. Apply the patch. 7. Set TagsExternalDictionary to an empty value. 8. Verify that you can access the home page and other pages. 9. Set TagsExternalDictionary to a valid non-empty path such as /usr/bin/ispell 10. Verify the staff home page, catalog detail page, and Tools page load without HTTP 500 errors. 11. Prove t/db_dependent/TagsExternalDictionary.t 12. Sign off and have a great day! :D Signed-off-by: David Nind Signed-off-by: Paul Derscheid Signed-off-by: Pedro Amorim commit 29345111828d597bf5e874917f60176fdc31c361 Author: Laura Escamilla Date: Tue Aug 18 16:45:43 2026 +0000 Bug 43330: Fix C4::Tags compile failure with TagsExternalDictionary Signed-off-by: David Nind Signed-off-by: Paul Derscheid Signed-off-by: Pedro Amorim commit 7d52823ac5a596c351acedbc83ba91ca45fdc376 Author: David Nind Date: Mon Aug 31 21:54:08 2026 +0000 Bug 43432: Move ReportsExportLimit to reports category Move the ReportsExportLimit system preference from the staff interface category to the reports category, as it relates only to the reports module. 1. Go to Administration > System preferences. 2. Search for the ReportsExportLimit system preference. 3. Note that it is in the Staff interface > Options category. 4. Apply the patch. 5. Repeat step 2. 6. Note that it is now in the Reports > Options category. 7. Note that the "Reports access" section is now in sentence case. Signed-off-by: Bastien CHAUVET Signed-off-by: Pedro Amorim commit 87e8f605bbeb50a7606e649135bc3b63dc18253c Author: David Nind Date: Mon Aug 31 21:37:38 2026 +0000 Bug 43432: Update ReportsExportLimit system preference description The current description uses "records". It actually controls the number of rows (or results) exported, which may or may not be records. Additional updates were also made to improve the description notes. 1. Go to Administration > System preferences. 2. Search for the ReportsExportLimit system preference. 3. Note the use of "records" in the description - results returned may or may not necessarily be records. 4. Apply the patch. 5. Refresh the page. 6. Note the updated description: - "records" changed to "rows" - changes to the notes: . NOTE changed to bold, consistent with other descriptions . now uses an unordered list . active voice used . removed note about requiring a positive vale . added a note about the "Open in DataTables" option 7. Sign off 8-). Current description: Download a maximum of _____ records when downloading from the reports module. NOTE: Only a positive value will enforce a limit. A specific limit in the report overrides this setting. Updated description: Download a maximum of _____ rows when exporting report results. NOTE: - Using LIMIT in a report overrides this setting. - It does not limit results when using 'Open in DataTables' export options. Signed-off-by: David Nind Signed-off-by: Pedro Amorim commit efb310cda043a9fad49c672630ef7ac533c89210 Author: Andreas Jonsson Date: Thu Aug 20 12:08:20 2026 +0200 Bug 43346: MarkIssueReturned with no userenv Since it is not clear what checkin_library signifies when marking an issue on a lost item as returned we might as well fallback on setting it to the issuing library when there is no userenv. Test plan * Run the unit test t/db_dependent/Koha/Account/Line.t Signed-off-by: David Nind Signed-off-by: Jason Robb Signed-off-by: Pedro Amorim commit 7dbc37e187a2a9cb88b096c43b347e8b55331b92 Author: Andreas Jonsson Date: Thu Aug 20 12:07:31 2026 +0200 Bug 43346: Unit test for payment without userenv MarkIssueReturned needlessly fails when called from a session with no logged in user such as a script or anonymous callback. A specific application where this is a problem when completing a payment transaction in a plugin for opac online payment wich may be done via polling or callback. This unit test verifies that a payment can be completed when paying a fee for a lost item with MarkLostItemsAsReturned set to onpayment and no userenv set. Signed-off-by: David Nind Signed-off-by: Jason Robb Signed-off-by: Pedro Amorim commit f8ef545ca478c3bbee6bc337ca2f5b26b5af12f2 Author: Owen Leonard Date: Fri Sep 4 10:18:11 2026 -0400 Bug 38638: Offer non-priority option when placing multiple holds This patch adds a checkbox for setting holds as non-priority when placing multiple holds at once. To test, apply the patch and make sure the DisplayMultiPlaceHold system preference is enabed. - Perform a catalog search in the staff client which will return multiple results. - Check the checkboxes for 2 or more titles in the results and click "Place hold" in the toolbar. - When confirming the holds, check the "Non priority hold" checkbox. - Confirm that the holds are saved as non priority holds. - You can check by viewing the list of holds on a title. The "Details" column for that hold should say "Non priority hold." Sponsored-by: Athens County Public Libraries Signed-off-by: David Nind Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit b8d19935825244a4720b8622b5ca599d129cd0e2 Author: David Nind Date: Tue Aug 4 22:00:58 2026 +0000 Bug 43225: Fix punctuation for renewal confirmation message A renewal confirmation message (when the AllowFineOverrideRenewing system preference is set to "Allow") is missing a period and space between the amount due and the second sentence. It currently reads: "The patron has a debt of [amount]Are you sure you want to renew checkout(s)?" Test plan: 1. Set the AllowFineOverrideRenewing system preference to "Allow". 2. Check out an item to a patron (for example, 39999000011418 to Mary Burton). 3. Add a $110 manual charge to the patron's account: - [Patron account] > Accounting > Create manual invoice - Should now have a message on the patron's page: Charges: Patron has outstanding charges of 110.00. Make payment Pay all charges 4. Attempt to renew the checked out item from the checkouts section: - Check out > Checkouts > Show checkouts - Below the checkouts table, select "Override fine restrictions" - Click "Renew all" 5. There is a pop-up message with incorrect punctuation: The patron has a debt of 110.00Are you sure you want to renew checkout(s)? 6. Click the cancel option. 7. Repeat steps 4 to 6 from the details section (Details > Checkouts > Show checkouts) and note the same incorrect punctuation. 8. Apply the patch. 9. Repeat steps 4 to 7. 10. The pop-up message now reads: The patron has a debt of 110.00. Are you sure you want to renew checkout(s)? 11. Sign off. Signed-off-by: David Nind Signed-off-by: Laura_Escamilla Signed-off-by: Andrew Fuerste Henry Signed-off-by: Pedro Amorim commit 448419f9189ee52735cc383dc7933b6c78fa1ad0 Author: David Cook Date: Fri Sep 11 00:52:38 2026 +0000 Bug 43401: (QA follow-up) tweak rspack.config.js comment and fix Makefile.PL Signed-off-by: David Cook Signed-off-by: Pedro Amorim commit 83393079619ebb975da6a459ad839abc013b8a8e Author: Paul Derscheid Date: Fri Aug 28 09:06:58 2026 +0200 Bug 43401: (follow-up) Note the Makefile.PL coupling in rspack.config.js - Add a file-level comment reminding that every shipped output.path needs a matching 'NONE' target-map entry and cp step in Makefile.PL Signed-off-by: Paul Derscheid Signed-off-by: David Cook Signed-off-by: Pedro Amorim commit 55f621fd140ce11866ff317aa1b21ff2d3bb1f26 Author: Lucas Gass Date: Thu Aug 27 22:00:44 2026 +0000 Bug 43401: Send compiled js vue for the OPAC to the right dir The OPAC vue bundle (koha-tmpl/opac-tmpl/bootstrap/js/vue/dist) was not handled like its intranet counterpart in Makefile.PL: exclude it from the generic target map and copy it explicitly into blib in move_compiled_js. Test plan: 1. In a KTD shell, from the koha checkout: perl Makefile.PL (accept the defaults, 'standard' install mode is fine) 2. make -n move_compiled_js | grep 'js/vue/dist' => without this patch only the intranet cp line is printed; with it there is also a line copying koha-tmpl/opac-tmpl/bootstrap/js/vue/dist into blib/OPAC_TMPL_DIR/bootstrap/js/vue/ 3. make 4. ls blib/INTRANET_TMPL_DIR/prog/js/vue/dist blib/OPAC_TMPL_DIR/bootstrap/js/vue/dist => both directories exist and contain the compiled bundles (e.g. islands.esm.js); no vue/dist directory is left anywhere else under blib. 5. git clean -xdf blib pm_to_blib Makefile Makefile.old && git checkout -- . to clean up. Signed-off-by: Paul Derscheid Signed-off-by: David Cook Signed-off-by: Pedro Amorim commit 374295c25c41ea6022a88bb8199b3e3c868ba9d1 Author: Jan Kissig Date: Tue Jul 14 11:55:48 2026 +0000 Bug 42296: auto tidy for follow-ups Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 0602877c31f211f858dfc027f819a2d821194bad Author: Jan Kissig Date: Mon Jul 13 11:27:11 2026 +0000 Bug 42296: (follow-up) Remove unused base_url on barcode-print The JS variable base_url on barcode-print is never referenced. The remaining JS block did not contain TT interpolation, so data-tt-allowed can be removed. Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 667c8883e6086e71492d5c75e96be2542b021a23 Author: Jan Kissig Date: Mon Jul 13 10:33:29 2026 +0000 Bug 42296: (follow-up) Split JS block in auth.tt Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 4a4843e4813c48febf6abccfc872f3530eb8f937 Author: Jonathan Druart Date: Tue Mar 31 12:17:21 2026 +0200 Bug 42296: Tidy all script tags - trivial occurrences In order to tidy all the script tags of the .tt files we isolate the interpolation of Template::Toolkit variables in a separate script tag. This patch only adds 'data-tt-allowed="true"' when needed. The work to move the JS variable to a separate script tag has been done already on bug 41324. Signed-off-by: Jan Kissig Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 80abb65c62c5117e0ea60e66e8bebc24025943f6 Author: Pedro Amorim Date: Thu Sep 10 13:41:38 2026 +0000 Bug 41318: DBRev 26.06.00.024 Signed-off-by: Pedro Amorim commit 5ae82ddd1807b398d14779aef49859759486028a Author: Katrin Fischer Date: Sun Aug 9 14:39:16 2026 +0000 Bug 41318: (QA follow-up) Change Options to Examples in system preference description While 'Options' might give the impression that the selection is limited to the listed values, 'Examples' seems the better wording. Signed-off-by: Katrin Fischer Signed-off-by: Pedro Amorim commit 18134d8343004f8e3daf2b615232e53f5e42db26 Author: Jonathan Druart Date: Thu Nov 27 12:38:53 2025 +0100 Bug 41318: Rename AmazonLocale to AmazonLocaleTld To be more flexible we could allow the top-level domain instead of having a predefined list. However this patch still list the different available options (and adds Brazilian) for easy selection. Note that this system preference is not used to retrieve the image but only to link to from the image. Contrary to what the reporter of the bug report thought. And actually what I thought as well until I finished to write the patch and started testing it! Anyway now the patch is written, there should not be any changes in behaviour. Most of the time the links are actually broken when not using .com. So I think we either broke the whole feature at some point, or it never really worked. On a separate bug we could eventually have a look at fetching from the locale tld. Test plan: Turn on OPACAmazonCoverImages and AmazonCoverImages http://localhost:8081/cgi-bin/koha/catalogue/detail.pl?biblionumber=5 http://localhost:8080/cgi-bin/koha/opac-detail.pl?biblionumber=5 => You see the PBP cover click on it, it opens the lightbox, click "(see the original image)" at the bottom => This is where the syspref AmazonLocale/AmazonLocaleTld acts Modify the syspref's value and confirm that the link is modified and point to the correct domain (leading to 404 or broken pages most of the time, at least in my tests). Signed-off-by: David Nind Signed-off-by: Jonathan Druart Signed-off-by: Katrin Fischer Signed-off-by: Pedro Amorim commit 3b2a4f53ed469c6b48ed6b99abed5e3bd198f805 Author: Pedro Amorim Date: Thu Sep 10 13:37:24 2026 +0000 Bug 42344: DBRev 26.06.00.023 Signed-off-by: Pedro Amorim commit 9d0f7d2f3c04043faa0d04f96df84b25e4a61694 Author: Jonathan Druart Date: Mon Apr 13 12:27:07 2026 +0200 Bug 42344: Remove CircSidebar Test plan: Run the updatedatabase script and notice that the sidebar is visible in the circulation module but that you can hide/collapse it on demand. Signed-off-by: David Nind Signed-off-by: Emily Lamancusa Signed-off-by: Pedro Amorim commit 35004269a49e6983fedcac8ee1a44fe6d2a376fe Author: Pedro Amorim Date: Thu Sep 10 13:28:23 2026 +0000 Bug 10190: DBRev 26.06.00.022 Signed-off-by: Pedro Amorim commit 68d3ba779bb31b2ee096f36355f80b328b38d6a7 Author: Chloe Zermatten Date: Wed Sep 9 09:35:41 2026 +0000 Bug 10190: (QA follow-up): fix: only remove restrict if no restricting overdues found Where a patron had multiple overdues that ought to cause debarment, it was found that removing one removed the restriction. This is because has_restricting_overdues() was looking up the ItemType object tied to the overdue issue, then passing it down to Koha::CirculationRules->get_effective_rules(). get_effective_rules(), however, expects an itemtype code. This resulted in false negatives: the patron was treated as having no restricting overdues left where they in fact did. Amend this by calling effective_itemtype() instead. Note on side effects: I think this also will activate the previously potentially dead dedup logic in has_restricting_overdues (eq had been used to compare obj instance to obj instance which had no effect (itemtype() runs a find() on each iteration), and is now used to compare itemtype code to itemtype code). Test plan (based on Pedro's comment number 949): 0) Pick a test opac patron, if using Henry from above remove the permissions 1) http://localhost:8081/cgi-bin/koha/admin/categories.pl, edit the test patron's category, confirm 'Overdue notice required' is set to 'Yes'. 2) Set syspref AutoRemoveOverduesRestrictions to when_no_overdue_causing_debarment. 3) http://localhost:8081/cgi-bin/koha/admin/circulation_triggers.pl, 'Add new trigger'. Leave 'Library' as 'All libraries' and 'Patron category' as 'All categories', set 'Item type' to 'Books'. For 'Letter' pick ODUE, check 'Email' under 'Transport type(s)', set delay to 5 days, for 'Restricts checkouts' select 'Yes', 'Submit'. 4) Check out barcodes 39999000019186 and 39999000007558 to the test patron (confirm both are itemtype 'Books'). Backdate both due dates 6+ days overdue. 5) perl misc/cronjobs/overdue_notices.pl -n — restricts the patron. 6) Check the patron's 'Restrictions' tab: confirm restricted. 7) Return barcode 39999000019186 only, leave 39999000007558 8) Check the patron's 'Restrictions' tab again. Notice they are still restricted (39999000007558 is still overdue). 9) Return barcode 39999000007558 also. 10) Check the patron's 'Restrictions' tab again. Notice the restriction is now removed (a hard refresh may be needed) as no restricting overdues are left. Assisted-by: Claude Opus 5 (Anthropic) Sponsored-by: Glasgow Colleges Library Group Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 99442e36b36eaa2e3195b2cecaa09db715a8dafd Author: Chloe Zermatten Date: Thu Sep 3 11:24:20 2026 +0000 Bug 10190: (QA follow-up): fix: prevent delay-less rule sets Since the decision was made that the add / edit trigger form should never let a trigger be created or edited to not have a delay, it follows that this must apply to the rule set reset flow as well. Retain the warning message to the user, and also disable the 'Confirm reset' button if the reset would result in delay-less sets. The same applies to the trigger deletion functionality: if deleting a trigger that is a default for all libraries would then leave any libraries with one or more delay-less rule set, block the trigger deletion (deactivate 'Confirm deletion') and inform the user. Here as well we also still display the warning message. Test plan: A) Create one or more 'Default for all libraries' triggers. B) Create one or more library-specific triggers. C) For one or more of these, add itemtype and/or category specific overrides with not delay override. D) For one or more of these, add itemtype and/or category specific overrides with a delay override. E) Select 'Reset' on a rule set with overrides of type D) and notice that the 'Confirm reset' button is enabled. F) Select 'Reset' on a rule set with overrides of type C) and notice that the 'Confirm reset' button is disabled, and that the warning message explains why reset is unavailable G) Select 'Delete' on the highest 'Default for all libraries' trigger, and notice that, where one or more library-specific overrides are of type D), 'Confirm deletion' is disabled, whereas it is otherwise enabled. H) Delete a trigger for which no override exists and confirm success. I) Delete a trigger for which only type D) overrides exist and confirm success. J) Reset a rule set for which only type D) overrides exist and confirm success. K) Reset a rule set for which no override exists and confirm success. Assisted-by: Claude Opus 5 (Anthropic) Sponsored-by: Glasgow Colleges Library Group Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit b38d6d5201bbce8ddf357efa31f39b308bcebfb8 Author: Chloe Zermatten Date: Thu Sep 3 11:09:53 2026 +0000 Bug 10190: (QA follow-up): fix: keyboard delay delete behaviour If the 'Delay' input field value is deleted using backspace or other, block form submission. The same behaviour apply if the delete button is used, as both clear out the value. As triggers with no delay are not processed and would also cause higher triggers to then also not be processed, we do not allow the creation of triggers without a set delay. Triggers when edited individually do not check for impact on any overrides they might have. It is therefore safest not to allow submission of a trigger where the user explicitly unset the value. An explicit 'reset to fallback' feature is possible and would constitute a follow up enhancement. Test plan (based on comment 872): A) 'Administration' > 'Circulation triggers' > 'Add new trigger' for any library/category. Set a Delay, a Notice, and a transport type. B) Select the Delay field's value and clear it via the 'X' clear button. C) Notice 'Submit' is disabled. D) Select the Delay field's value and clear it via the keyboard (Backspace/Delete). Click 'Submit'. E) Notice 'Submit' is disabled. Assisted-by: Claude Opus 5 (Anthropic) Sponsored-by: Glasgow Colleges Library Group Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit e40291cb2c5f9399f6d49920d1218d36c07963c6 Author: Chloe Zermatten Date: Thu Sep 3 09:59:53 2026 +0000 Bug 10190: (QA follow-up): fix: missing rewrite rule in koha-httpd.conf Looking at Bug 41167, this ought to fix the 404 error noted in comment 192 for package installs. We do have a test asserting that RewriteRules must be carried over, so: Test plan: 1. Apply patch 2. prove xt/check_apache_conf.t 3. Confirm it passes That said, I don't think it is replicable in ktd - the copied file at /etc/koha/apache-shared-intranet.conf will remain stale unless cp_debian_files.pl runs. The migration issue itself might be ktd-specific. Sponsored-by: Glasgow Colleges Library Group Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit ec22f77b76a79d1200efeb772cf3b0c495001a0d Author: Chloe Zermatten Date: Thu Sep 3 09:02:02 2026 +0000 Bug 10190: (QA follow-up): fix: permissions Important note: the following assumes manage_circ_triggers is intended as a sibling to manage_circ_rules, and that of the two, only manage_circ_triggers ought to grant access to client-side circulation trigger configuration actions. When manage_circ_triggers was introduced, it was not applied client-side, resulting in the router and menu permission checks incorrectly expecting manage_circ_rules. Amend that. Additionally, while the API endpoint blocked a user with only manage_circ_triggers from editing non-triggers circulation rules, it did not block a user with only manage_circ_rules from editing trigger circulation rules. Add a guard clause. Test plan (based on comment 872): A) Go to a patron's 'More' > 'Set permissions' tab. Check 'catalogue' (needed for basic staff login), and under circulation-rules sub-permissions, check only 'Manage overdue notice triggers' - leave 'Manage circulation rules' unchecked. B) Log in as that patron, go to 'Administration' - 'Circulation triggers' link present (admin-home.tt now correctly checks CAN_user_parameters_manage_circ_triggers), 'Circulation and fine rules' is not present. C) Visit http://localhost:8081/cgi-bin/koha/admin/circulation_triggers directly - you are granted access. D) Confirm that you can create and edit circulation triggers. E) Go to a patron's 'More' > 'Set permissions' tab. Check 'catalogue' (needed for basic staff login), and under circulation-rules sub-permissions, check only 'Manage circulation rules' - leave 'Manage overdue notice triggers' unchecked. F) Log in as that patron, go to 'Administration' - no 'Circulation triggers' link present (as we require manage_circ_triggers), however 'Circulation and fine rules' is present. G) Visit http://localhost:8081/cgi-bin/koha/admin/circulation_triggers directly - you see "Error: You do not have permission to access this page" and are prompted to log in as a different user (as we require manage_circ_triggers). H) Go to http://localhost:8081/cgi-bin/koha/admin/smart-rules.pl, and confirm that you can edit circulation rules for your library (no regression). Assisted-by: Claude Opus 5 (Anthropic) Sponsored-by: Glasgow Colleges Library Group Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit a4be8b914ec7ce50393f571ce9e08260a97178f6 Author: Chloe Zermatten Date: Thu Sep 3 08:32:14 2026 +0000 Bug 10190: (QA follow-up): fix: itiva script The following issues were identified and resolved: - items.itemtype does not exist -> swap to items.itype - leftover WHERE clause still referred to overduerules -> removed - with the join on overduerules removed there is no need to GROUP BY anymore - Koha::CirculationRules->all -> use next() instead Test plan (as per comment 872): A) In KTD, set 'TalkingTechItivaPhoneNotification' to 'On'. B) Run perl misc/cronjobs/thirdparty/TalkingTech_itiva_outbound.pl --type=OVERDUE -o /tmp/out.txt -v C) No errors / the script does not die mid run. Quick disclaimer: I am not overly familiar with that script: while I did remove the causes behind the script dying mid run, I won't have spotted issues with expected output / outcome. Assisted-by: Claude Opus 5 (Anthropic) Sponsored-by: Glasgow Colleges Library Group Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 14e7814c15702ad28a668af53f1f8d7595f92a20 Author: Nick Clemens Date: Fri Aug 28 17:21:45 2026 +0000 Bug 10190: (QA follow-up) Fix spelling for QA tools Other complaints are invalid: ContextA spelling - this is a variable Use of _("") - this is in regex for 'overdue_(' when checking rules git manipulation - not ideal adding and removing in same set, but this is a long work, not asking for a squash here Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit a571b00a31d1cba48343130cd4ede3308d05337c Author: Nick Clemens Date: Fri Aug 28 17:16:50 2026 +0000 Bug 10190: (QA follow-up) Add new permission to tests Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 8150c532fa5da4cf03d15cb63a35277293a99580 Author: Nick Clemens Date: Fri Aug 28 17:10:55 2026 +0000 Bug 10190: (QA follow-up) Adjust error message to list both permissions Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 2e3f9bd1ce6f7fe8e714c67b7458699e63437178 Author: Chloe Zermatten Date: Tue Aug 25 10:21:23 2026 +0000 Bug 10190: (QA follow-up): fixes phase four - Display new manage_circ_triggers permission (add to template) - Ensure loading messages are informative to the user Sponsored-by: Glasgow Colleges Library Group Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim commit 763dc46e315e19454cccb3becedb3d5f922d59ca Author: Chloe Zermatten Date: Tue May 26 15:44:17 2026 +0000 Bug 10190: (follow-up): test: cypress tests update New tests: - regression: mtt cells render as .fallback (bold italics) - bg-success-subtle highlight on completed steps in the add flow - disabled-Delete states: - patron category filter set - item type filter set - default library, if any library has a trigger higher that default's highest - redirect to admin home if not permitted to access the page - in the edit/add stepper form - check row actions are enabled at the 'selectOrAdd' step - check row actions are disabled once add mode is entered - check the action column is always available on the main page Clean up / general updates: - replace the /api/v1/** catch-all intercept with per-endpoint intercepts so @get-rules waits resolve reliably - remove now-redundant cy.wait("@get-rules") calls - drop unused mount / dayjs / dates imports - ensure expected strings match UI where strings have changed Assisted-by: Claude Opus 4.7 (Anthropic) AI used to draft enhancements tests. Changes were reviewed, tweaked, and commited manually and gradually (with a pre-submission commit squash). Tests were run multiple times and adjusted iteratively to match code changes, cover regressions as those were found, and handle vue page load. Sponsored-by: Glasgow Colleges Library Group Signed-off-by: Nick Clemens Signed-off-by: Pedro Amorim