commit e9a07fe6ac61f247c42ba28397358330b0dff4f9 Author: Jonathan Druart Date: Fri Oct 10 16:56:37 2025 +0200 Bug 39877: Fix license Signed-off-by: Lucas Gass commit bf6e766f0c3812ee768ecb5246cf3dd96a44d4af Author: Tomás Cohen Arazi Date: Fri Oct 3 11:11:31 2025 -0300 Bug 39877: Tidy POD Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit b2970f874e6393dab18a0d8095da190c6e11bdd1 Author: Jonathan Druart Date: Thu Sep 11 11:41:29 2025 +0200 Bug 39877: Use OS codename to separate OSes Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit 873b6638f0a2113266afd6962f658b88c7da9875 Author: Jonathan Druart Date: Thu Sep 11 09:57:51 2025 +0200 Bug 39877: Do not clone if env var is not set If we don't want the incremental run we should return early in ->new to prevent the git clone. Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit 03e52ef3e7f00dc6b016cd3f722709bedff101f0 Author: Jonathan Druart Date: Tue Jul 29 10:03:13 2025 +0200 Bug 39877: Prevent files to be processed twice If the file had a failure and still has, we should not list it twice. Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Paul Derscheid Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit 7f93977cd7167b36da614baf1e752b96743cc382 Author: Jonathan Druart Date: Tue Jul 22 09:45:06 2025 +0200 Bug 39877: Fix confusion with URL prefix git clone needs https://, but we need to remove it to build the push url Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Paul Derscheid Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit cc58dabe3d3e9f25f08a256983cb99038aad58ae Author: Jonathan Druart Date: Mon May 12 16:10:10 2025 +0200 Bug 39877: Apply to other slow tests Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Paul Derscheid Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit 7869584c98d9fb8b9fae40393805b0fa13e12ac1 Author: Jonathan Druart Date: Mon May 12 16:06:23 2025 +0200 Bug 39877: Merge vue and js tidy tests Rebased-by: Victor Grousset/tuxayo Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Paul Derscheid Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit 4971ed8d68deef4b5e3d12bd980a7bab08dc52e0 Author: Jonathan Druart Date: Mon May 12 15:07:15 2025 +0200 Bug 39877: Remove files that have been deleted Ignore deleted or renamed files Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Paul Derscheid Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit 9f32eea89ff5b620b15edb0e31b45f5f70dd924c Author: Jonathan Druart Date: Wed May 7 17:10:23 2025 +0200 Bug 39877: Incremental test runs The idea of this patchset is to allow increment runs for some of our tests. The current (full) test suite runs in 2h20 (Koha_Main/3253 on Docker_15). One of the main reason is the recent introduction of new xt tests that are run on all files (valid, tidy, pod, codespell, etc). From a previous run (last week) I noted this top 5: xt/vue_tidy.t 105446 ms xt/perltidy.t 175970 ms xt/js_tidy.t 239615 ms xt/author/codespell.t 467041 ms xt/pl_valid.t 2502354 ms We are going to merge js_tidy.t and vue_tidy.t as it does no longer make sense to have a difference between them (we had at the beginning of the vue work, because of differences in the options, now everything is handled in the .prettierrc config file) Once this is pushed, we will be able to create a new project on gitlab and pass some env variables from Jenkins. Suggestion: project would be named https://gitlab.com/koha-community/koha-ci-results When everything will be setup, jenkins will run the tests one the whole test suite, then the next run will be "incremental": we are going to run the tests on the files that were failing and the files modified by the last push. Example: * "commit abc": all the files are tested, xt/perltidy.t is failing on Koha.pm * koha-ci-results/perltidy/abc is created and contains ['Koha.pm'] * "commit def" has a modification on about.pl * xt/perltidy.t is checking tidy on Koha.pm and about.pl, both are tidy * koha-ci-results/perltidy/def is created and contains [] Test plan: * Create an empty project on gitlab (keep the default readme) eg. https://gitlab.com/me/koha-ci-results * Generate an access token with the developer role (https://gitlab.com/me/koha-ci-results/-/settings/access_tokens) Copy the token (in the following noted as TOKEN_REPLACE_ME) * Unprotect the "main" branch * Run the following prove command: ``` KOHA_CI_INCREMENTAL_RUN_REPO_URL=https://gitlab.com/me/koha-ci-results.git \ KOHA_CI_INCREMENTAL_RUNS=1 \ KOHA_CI_INCREMENTAL_RUNS_REPORT=1 \ KOHA_CI_INCREMENTAL_RUNS_TOKEN=TOKEN_REPLACE_ME \ prove xt/perltidy.t ``` => a new commit is created on your repo * Add some mess in one of your perl file, commit using `--no-verify` to bypass the git hook * Run the prove command again => only the file you have modified is tested => a new commit is created and the file is reported as failing * Add another commit, fix the failure, add other mess => confirm that what you are seeing makes sense :) * Ideally redo with the different tests modified by this patchset * Note that you can use the incremental run without the report (the report will be only for Jenkins). It will help RM as xt tests will run (way) faster. Note that you can also export the following env vars to set git author detail: * GIT_COMMITTER_NAME * GIT_COMMITTER_EMAIL * GIT_AUTHOR_NAME * GIT_AUTHOR_EMAIL Question: What are we going to use on Jenkins? Discussion for QA: How should we handle concurrency? It's crucial to prevent multiple tests from pushing simultaneously. To minimize the risk of the repository becoming outdated, we might need to perform a pull right before each push. Is that enough? Keep in mind that only one job will be run at the same time (Koha_Main). Maybe later we will also use it for stable branches. Rebased-by: Victor Grousset/tuxayo Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Paul Derscheid Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit 2bd44c51f05355cee8c38dbe116e38eb59f6232c Author: Martin Renvoize Date: Fri Oct 10 11:16:05 2025 +0100 Bug 40866: (follow-up) Remove obsolete CanBookBeIssued.t test file This test file was specifically testing the message_log return value from CanBookBeIssued, which was removed as part of the bug 40866 patchset. The circulation message functionality has been reimplemented elsewhere with proper test coverage, making this test file redundant. Signed-off-by: Lucas Gass commit b00cda396d8c279808ba0164e814adae10b71011 Author: Lucas Gass Date: Thu Oct 9 22:46:37 2025 +0000 Bug 40527: Add SECURITY.md to ignored list in MakeFile.t Signed-off-by: Lucas Gass commit 53fca820022e722a470a23be0fccfa5e3d0c07c1 Author: Lucas Gass Date: Thu Oct 9 22:31:06 2025 +0000 Bug 29980: (follow-up) Fix GNU license link Signed-off-by: Lucas Gass commit 3ab4723fb4855a3f85e8c9c0731082e1cd78692b Author: David Cook Date: Mon Jul 28 04:45:36 2025 +0000 Bug 40527: Initial draft of SECURITY.md This patch includes an initial draft of a proposed SECURITY.md guideline for reporting security bugs to Koha. Signed-off-by: Ludovic Julien Signed-off-by: Lisette Scheer Signed-off-by: Lucas Gass commit 0562121424348df74b42790d30828496eeafc08f Author: Marcel de Rooy Date: Mon Oct 6 14:20:05 2025 +0200 Bug 28146: Respect ReplytoDefault in error pages Test plan: Fill ReplytoDefault. Check an error page on OPAC and intranet. Verify that the send mail link refers to that email address. Signed-off-by: Marcel de Rooy Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit c53fdd3623f91aed7db8be507d4affa35a0057d5 Author: David Cook Date: Fri Sep 26 07:10:41 2025 +0000 Bug 34164: Redirect to referring URL when doing OIDC/OAuth SSO This patch makes it so that a successful SSO will return you to the place where you initiated the SSO. This is especially useful when doing searches, placing holds, etc. Test plan: 0. Apply patch and koha-plack --restart kohadev 1. Set up OIDC SSO using https://wiki.koha-community.org/wiki/Testing_SSO 2. Go to http://localhost:8081/cgi-bin/koha/circ/circulation-home.pl 3. Do a staff login using SSO 4. Note that you're redirected to http://localhost:8081/cgi-bin/koha/circ/circulation-home.pl after the successful login 5. Go to http://localhost:8080/cgi-bin/koha/opac-search.pl?idx=&q=test&weight_search=1 6. Do a OPAC SSO login 7. Note that you're returned to http://localhost:8080/cgi-bin/koha/opac-search.pl?idx=&q=test&weight_search=1 after the successful login 8. Logout of the staff admin and OPAC 9. Note your URL ends in ?logout.x=1 10. Try logging back into them using SSO 11a. Note that you're logged in and not automatically logged out 11b. Note that if you're on the OPAC, you should be redirected to opac-user.pl instead of opac-main.pl or the root path 12. If you change the domain for the SSO users to something that your user does not match, try logging in again, and note that the error message should display on mainpage.pl or opac-main.pl/opac-user.pl for the OPAC. (This is because these are the pages that show SSO errors.) Signed-off-by: Lukas Koszyk Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit 53f18748921d19f5757943eb0259d2de2030d5b4 Author: Arthur Suzuki Date: Mon Sep 8 15:14:47 2025 +0000 Bug 29980: Add a cataloguing plugin to check ISBN Test plan: - without patch login to Koha - edit a biblio and put a wrong ISBN in 020a (010a for unimarc). - leave the input field (looses focus), no warning - apply patch and do "reset_all" to make a full re-install. - edit the biblio again and put an invalid ISBN in 020a (010a for unimarc). - when you leave the input field you should have a warning saying "invalid ISBN". - the input field should turn yellow - you can still save the biblio with a wrong isbn, it is just a warning. - if you apply the patch on an existing install, you must manually link the value builder to your existing frameworks to get it working. Signed-off-by: Johannes Reuter Signed-off-by: Thomas Klausner Signed-off-by: Lucas Gass commit 91a02cf4c4c41dbb9def8afc63dba8a33e7577d9 Author: Caroline Cyr La Rose Date: Fri Aug 8 09:58:26 2025 -0400 Bug 40615: Update mention of 'My virtual card' in OPACVirtualCard description This patch updates the OPACVirtualCard description to match the name of the tab in the OPAC, which has been changed from 'My virtual card' to 'Library card'. To test: 1. Apply patch 2. Go to Administration > System preferences 3. Search for OPACVirtualCard 4. Read the description of the system preference --> It should mention the 'Library card' tab and not the 'My virtual card' tab --> Make sure the sentence and the spelling are correct Signed-off-by: Roman Dolny Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit 93d680b645d49e109a19d238ca5075c2ee32905b Author: Jonathan Druart Date: Mon Oct 6 12:38:39 2025 +0200 Bug 40918: Fix invoice adjustement reason selection From commit 46f7158f44ced21571dc9deef9ca240fc34a8e6b Bug 38714: acqui/invoice.tt Debugging stuff left, sorry! Test plan: 1. Go to Acquisition. 2. Create a vendor. 3. Click "Receive Shipment" 4. Enter an invoice number and save. 5. Go to Administration->Authorized Values->Add A Category 6. Name it ADJ_REASON 7. Put in 2 options 8. Go to invoices in Aqusition 9. Add an adjustment (enter an amount and select a reason, then save) 10. The reason is set to "no reason" 11. Go to reports 12. new sql report select * from aqinvoice_adjustments 13. Run the report and see your reason is saved. 14. go back to the invoice and click save adjustments 15. Run the report and see your reason is saved. Signed-off-by: Eric Phetteplace Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 3aefbaeaf624b2c1ccd235fa20b271171fb4c31a Author: Fridolin Somers Date: Wed Sep 10 15:28:56 2025 +0200 Bug 40785: Cronjob cleanup_database.pl remove args in usage first line Cronjob cleanup_database.pl usage is wrong : Usage: $0 [-h|--help] [--confirm] (...) [--bg-days DAYS [--bg-type TYPE] ] Those args has been renamed jobs-days and jobs-type. Also some args are missing. There are too many args, I propose to remove them from there, one need to read the full help. Test plan: Run command line `misc/cronjobs/cleanup_database.pl -h` You see first line: Usage: misc/cronjobs/cleanup_database.pl -h --help prints this help message, and exits, ignoring all ... Signed-off-by: Anke Bruns Signed-off-by: Thomas Klausner Signed-off-by: Lucas Gass commit b895eb9b7df99aa4a691c6004b37960209e5f1cc Author: Lisette Scheer Date: Tue Sep 30 16:16:41 2025 +0000 Bug 35700: Holds reminder cronjob - Fix --triggered switch if the day to send notice hits concurrent holidays If the holds reminder cronjob would send a reminder on a holiday,when holidays are taken into account, it also will send it on the subsequent holidays and the first open day. This bugfix adds a check to the cron when --holidays is set to skip sending the notices for that library if today is a holiday. To Test: Before applying: 1. Create a hold for a patron (I used patron 23529000035676 and 39999000000252) 2. Ensure your patron has an email address set and the hold reminder email selected. 3. Set the hold to waiting by checking it and confirming the hold. 4. In Tools->Calendar add a holiday to yesterday and a seperate holiday to today. 5. On the command line (the date should be set to 5 days ago for my commands to work and any dates adjusted accordingly) koha-mysql kohadev update reserves set waitingdate="2025-09-25" exit perl misc/cronjobs/holds/holds_reminder.pl -days 3 -t -v -holidays --date 2025-09-29 6. Observe that 1 notice would have sent to your patron 7. On the command line perl misc/cronjobs/holds/holds_reminder.pl -days 3 -t -v -holidays 8. Observe that 1 notice would have sent to your patron 9. On the command line perl misc/cronjobs/holds/holds_reminder.pl -days 3 -t -v -holidays --date 2025-10-01 10. Observe that 1 notice would have sent to your patron 11. Apply patches 12. Repeat the last command from step 5 and step 7 13. Observe that no notice should be sent for your patron 14. Repeat step 7 15. Observe that a notice should be sent for your patron. 16. Run perl misc/cronjobs/holds/holds_reminder.pl -days 5 -t -v 17. Confirm the notice should be sent for your patron 18. Sign off Signed-off-by: Katie Bliss Bug 35700: (QA follow-up) fix POD and $today This patch replaces the inncorrectly removed POD note and replaces $today with the more correct $date_to_run for checking if we should be skipping sending the message on the day. Amended-by: Jonathan Druart Squashed and adjusted commit title Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit f0991861e24a99a218aaedfad8003401f5c3c9ce Author: Marcel de Rooy Date: Thu Oct 9 15:22:04 2025 +0200 Bug 40985: Clarify POD of Holds->filter_by_found Test plan: Read POD. Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit 47546f0849f7de27a2a25e18850f0b98c691100c Author: Martin Renvoize Date: Mon Aug 4 14:34:37 2025 +0100 Bug 40587: Auto-select EAN from QUOTE message when creating EDIFACT orders When a basket is generated via an EDI QUOTE message, the QUOTE message includes a library's EAN code (buyer_ean). This patch makes the 'Create EDIFACT order' button automatically use the EAN from the original QUOTE message instead of requiring manual EAN selection. This patch also fixes a bug in process_quote where all baskets in multi-message QUOTE transports incorrectly used the first message's buyer_ean, even when subsequent messages had different EANs. Changes made: 1. Fixed Koha/EDI.pm process_quote auto-order creation to use the correct buyer_ean for each message/basket pair in multi-message transports 2. Enhanced acqui/basket.pl to extract and provide the quote_ean from QUOTE messages, handling both single and multi-message scenarios 3. Updated basket.tt template to automatically select the EAN from the original QUOTE message when available and matching Test plan: 1. Create a vendor with EDI account and multiple EANs configured 2. Process a QUOTE message that creates a basket 3. Go to the basket page and click "Create EDIFACT order" 4. Verify it automatically uses the EAN from the QUOTE message (shows tooltip "Using EAN from original QUOTE message") 5. Test with multi-message QUOTE files to ensure each basket uses the correct EAN from its corresponding message 6. Verify fallback behavior when no QUOTE EAN matches available EANs Sponsored-by: OpenFifth Signed-off-by: Hannah Dunne-Howrie Signed-off-by: Kyle M Hall Signed-off-by: Lucas Gass commit bd01562f5c13060ef6944a8ab291085b91e98176 Author: Martin Renvoize Date: Mon Aug 4 14:33:37 2025 +0100 Bug 40587: Add tests for multiple message EAN handling in EDI quotes This patch adds unit tests to verify that when processing EDI QUOTE transports containing multiple messages with different buyer EANs, each basket gets the correct EAN for its corresponding message. Test plan: 1. Run: prove t/db_dependent/Koha/EDI.t 2. Verify the new 'multiple_message_ean_handling' subtest passes 3. Verify that all existing EDI tests continue to pass Sponsored-by: OpenFifth Signed-off-by: Hannah Dunne-Howrie Signed-off-by: Kyle M Hall Signed-off-by: Lucas Gass commit 213de9af0bed5a39b197ab546b01cef91d5b2753 Author: Martin Renvoize Date: Thu Oct 9 16:18:33 2025 +0100 Bug 40866: Remove OVERRIDE state from action-logs.inc This state is no longer ever set anywhere Signed-off-by: Andrew Fuerste Henry Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit 4c24c03769f7dc612312d0b3438b3f71e43b0ab9 Author: Martin Renvoize Date: Thu Oct 9 16:07:51 2025 +0100 Bug 40866: Add missing override states to action-logs.inc This follow-up adds missing override state translations that were discovered during testing. The patchset logs various override states but some were not covered in the log viewer display template. Missing states added: - USERBLOCKEDNOENDDATE: Patron had an indefinite restriction - CURRENTISSUE: Item is currently checked out to this patron - UNSEEN: Unseen renewal - SEEN: Seen renewal These states are now properly displayed in the action logs viewer when reviewing circulation override logging. Signed-off-by: Andrew Fuerste Henry Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit 19dc33c649415197a2867ce6f111b8057e4d0b68 Author: Martin Renvoize Date: Thu Oct 9 09:03:57 2025 +0100 Bug 40866: Add unit tests for hold override logging This patch adds unit tests to verify the hold override logging functionality implemented in the previous patches. The tests cover the logging of hold overrides in `C4/Reserves.pm` and the `Koha/REST/V1/Holds.pm` API endpoint. To test: 1. Run the following tests and confirm they pass: - prove -lrv t/db_dependent/Circulation.t - prove -lrv t/db_dependent/Reserves.t - prove -lrv t/db_dependent/api/v1/holds.t 2. All tests should pass. Changes: t/db_dependent/Circulation.t: - Added tests for hold override scenarios in circulation. t/db_dependent/Reserves.t: - Added tests to verify that hold overrides are correctly logged when a hold is placed. t/db_dependent/api/v1/holds.t: - Added tests to ensure that the holds API correctly logs overrides when a hold is created with the `x-koha-override` header. Signed-off-by: Andrew Fuerste Henry Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit 1884f68c5bd1ec56b5e5b34b475d9ac04e87c835 Author: Martin Renvoize Date: Thu Oct 9 07:53:19 2025 +0100 Bug 40866: Implement Alternative pattern for holds override logging (Part 4) This patch implements proper override logging for holds following the Alternative implementation pattern used for checkouts and renewals. Instead of just removing the orphaned logging code from the original Bug 9762 implementation, this patch properly implements override logging by updating AddReserve to accept and log override information, similar to how AddIssue handles confirmations and forced overrides. Changes: C4/Reserves.pm: - Added JSON qw(to_json) import - Updated AddReserve to accept confirmations and forced parameters - Enhanced the existing logaction call to include override information in JSON format when overrides are present - Log format matches the Alternative implementation pattern: * hold ID * branchcode * biblionumber * itemnumber * confirmations array * forced array Koha/REST/V1/Holds.pm: - Added confirmations array building in the add() method - Pass 'HOLD_POLICY_OVERRIDE' confirmation when override_all is true - Pass confirmations parameter to AddReserve call reserve/request.pl: - Removed orphaned original implementation logging code - Removed unused variables and imports (message, @message, user, etc.) - Removed C4::Log import koha-tmpl/intranet-tmpl/prog/en/includes/action-logs.inc: - Added 'HOLD_POLICY_OVERRIDE' case to translate_log_override block - Displays as "Hold policy override" in log viewer koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt: - Added JSON display handling for HOLDS module (similar to CIRCULATION) - Displays hold ID, biblionumber, and optional itemnumber with links - Shows forced and confirmation overrides using translate_log_override This ensures hold overrides are logged consistently with the Alternative implementation pattern, providing proper audit trails for policy overrides that are properly displayed in the log viewer. Signed-off-by: Andrew Fuerste Henry Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit 9ce4533b7571ed5c1e346ffa873f78359d430abc Author: Martin Renvoize Date: Thu Oct 9 07:31:43 2025 +0100 Bug 40866: Remove original Bug 9762 implementation remnants (Part 3 - Returns) This patch removes the duplicate logging code from circ/returns.pl that was part of the original Bug 9762 implementation. The original implementation added a separate logaction() call when ignoring holds on return. This code created a custom JSON log entry with the message "return an element that is reserved". However, this logging appears to have been orphaned - there is no corresponding Alternative implementation for return override logging in the current codebase. The code was creating log entries but they were not properly integrated with any override confirmation workflow. Changes: circ/returns.pl: - Removed entire else block that created custom override log entries - Removed unused variables: $message, @message, $user, $branchcode, $barcode - Removed C4::Log qw(logaction) import as it's no longer needed This eliminates the orphaned logging code and ensures returns.pl only uses standard Koha logging mechanisms. Signed-off-by: Andrew Fuerste Henry Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit ca47310a3b93a261d691b2b0abd1504d7cbaa31f Author: Martin Renvoize Date: Thu Oct 9 07:29:17 2025 +0100 Bug 40866: Remove original Bug 9762 implementation remnants (Part 2 - Renewals) This patch removes the duplicate logging code from renewal scripts (circ/renew.pl and svc/renew) that was part of the original Bug 9762 implementation. The original implementation created separate logaction() calls with custom JSON messages whenever renewal overrides occurred. This caused double logging alongside the Alternative implementation which properly logs overrides via the confirmations parameter in AddRenewal. Changes: circ/renew.pl: - Removed unused variables: $user, $branchcode, @message - Removed separate logaction() calls for override logging - Changed to use confirmations array with proper codes: * 'RENEWAL_LIMIT' for override_limit * 'ON_RESERVE' for override_holds - Removed C4::Log qw(logaction) import svc/renew: - Removed unused variables: $borrower, $user, $message, @message - Removed separate logaction() calls for override logging - Changed to use confirmations array with proper codes: * 'ON_RESERVE' for on_reserve override * 'RENEWAL_LIMIT' for too_many override - Removed C4::Log qw(logaction) import The Alternative implementation in AddRenewal will now handle all override logging consistently through the confirmations parameter. Signed-off-by: Andrew Fuerste Henry Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit 2fea44ff2582cfc19a92aa157cf21a6a323520c5 Author: Martin Renvoize Date: Wed Oct 8 21:51:11 2025 +0100 Bug 40866: Remove original Bug 9762 implementation remnants (Part 1) This patch removes the duplicate logging code from the original Bug 9762 implementation that was not properly removed when the Alternative implementation was merged. The original implementation added separate logaction() calls in CanBookBeIssued and circulation.pl that created additional log entries with a different JSON format. This caused double logging when the Alternative implementation (which logs via AddIssue) was merged on top. Changes in this patch: C4/Circulation.pm: - Removed @message_log array and all pushes to it - Removed the separate logaction() call at the end of CanBookBeIssued - Removed 5th return value (@message_log) from CanBookBeIssued - Removed all if ($issueconfirmed) blocks that were populating @message_log circ/circulation.pl: - Removed the problematic line that added OVERRIDDEN to every confirmed checkout: $needsconfirmation->{'OVERRIDDEN'} = $issueconfirmed This addresses the double logging issue where circulation overrides were being logged twice with different formats. Signed-off-by: Andrew Fuerste Henry Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit de962e15cf32148d8909c5aa3892e7e8d979a981 Author: Martin Renvoize Date: Wed Oct 8 17:49:23 2025 +0100 Bug 40866: Remove unused $message variable from circulation The $message variable was declared in circ/circulation.pl but never actually set, making the "No patron matched" template block unreachable. This is a remnant from old code that was incompletely cleaned when that functionality was changed/removed. This patch removes the unused variable, template parameter, and the unreachable template block. Signed-off-by: Martin Renvoize Signed-off-by: Andrew Fuerste Henry Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit 3c41dfbe3f2fc5accaa99c29e21aa7fa318a61f9 Author: Hammat Wele Date: Tue Sep 30 16:37:45 2025 +0000 Bug 40866: Fix incorrect display of override message on normal checkouts - The message 'No patron matched Restriction overridden temporarily' was appearing on every checkout, even when no restriction override occurred. - This was caused by the message being set unconditionally after AddIssue in circ/circulation.pl. - The message should not appear in circulation.pl, but in the Log Viewer. To test: 1. Check out an item to a patron normally. 2. 'Restriction overridden temporarily' message appears. 3. Apply patches 4. Repeat 1. ---> Verify that no 'Restriction overridden temporarily' message appears. 5. Check out an item that requires an override (e.g., not for loan item with AllowNotForLoanOverride enabled). ---> Verify that no 'Restriction overridden temporarily' message appears. 6. Go to Tool -> Log viewer. 7. Enter the borrowernumber in Object field and submit. ---> Verify that the 'Restriction overridden temporarily' message is logged correctly. Signed-off-by: Martin Renvoize Signed-off-by: Andrew Fuerste Henry Signed-off-by: Paul Derscheid Signed-off-by: Lucas Gass commit 220fdce180bc0203ce97bd0f3cfdcb2952cbe108 Author: Tomás Cohen Arazi Date: Tue Sep 30 16:33:19 2025 -0300 Bug 40915: Add enhanced debug logging for empty critical fields in SIP message parsing This patch adds debug logging to C4::SIP::Sip::MsgType::_initialize() to help identify when critical fields (patron_id, item_id) are parsed as empty values. Empty critical fields in SIP messages can later cause DBIx::Class constraint errors when passed to Koha::Objects->find() operations, generating confusing 'Odd number of elements in anonymous hash' errors in SIP server logs. The enhanced logging helps administrators identify the root cause by logging when empty patron_id or item_id fields are detected during message parsing. To test: 1. Apply regression tests patch first 2. Run: $ ktd --shell k$ prove t/db_dependent/SIP/MsgType.t => FAIL: Debug logging tests fail (no enhanced logging present) 3. Apply this patch 4. Run: $ ktd --shell k$ prove t/db_dependent/SIP/MsgType.t => SUCCESS: All tests pass, debug logging works correctly 5. Sign off :-D Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 499b23d63c5abf7306c132204520dff13e1bbcf3 Author: Tomás Cohen Arazi Date: Tue Sep 30 15:47:35 2025 -0300 Bug 40915: Add comprehensive regression tests for SIP MsgType message parsing and debug logging These tests verify that C4::SIP::Sip::MsgType correctly parses SIP messages without creating problematic arrayref field values, and validates enhanced debug logging for empty critical fields. Test Coverage: • Message parsing with correct protocol versions (PATRON_INFO/HOLD/RENEW use v2, CHECKOUT uses v1) • Empty patron_id and item_id field detection with debug logging • Malformed delimiter handling (double delimiters, trailing empty fields) • Multiple consecutive empty fields in single message • Confusing delimiter patterns that could break parsing • Verification that parsed fields are strings, not arrayrefs • Working siplog mock infrastructure in C4::SIP::Sip::MsgType Arrayref Prevention Tests: Tests verify message parsing DOESN'T create empty arrayrefs that would later cause "Odd number of elements in anonymous hash" errors when passed to Koha::Objects->find() operations. Enhanced Debug Logging Tests: Tests validate that empty critical fields (patron_id, item_id) are detected during parsing and generate appropriate debug messages to help troubleshoot downstream constraint errors. Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit a8cdee1ee74e1ca0e3b7cc269fe650b442894757 Author: Jonathan Druart Date: Thu Oct 9 16:35:09 2025 +0200 Bug 15516: Fix DB struct diff Signed-off-by: Lucas Gass commit d90780504fcd9110e832fdb570f8df6c938ea953 Author: Jonathan Druart Date: Thu Oct 9 16:25:46 2025 +0200 Bug 39190: Fix DB struct diff Signed-off-by: Lucas Gass commit 2957031428cc8ec3766ab465184b9851ba69f4f9 Author: Jonathan Druart Date: Thu Oct 9 16:37:48 2025 +0200 Bug 40665: Fix DB struct diff Signed-off-by: Lucas Gass commit 1a4f7ad3b195a571aef21bde8c497a8bf294bd9c Author: Jonathan Druart Date: Thu Oct 9 16:52:08 2025 +0200 Bug 36033: Fix DB struct diff Signed-off-by: Lucas Gass commit de85f171fd94c8eb8a31f04e4a2c1b3276d7c410 Author: Jonathan Druart Date: Thu Oct 9 11:31:26 2025 +0200 Bug 40981: Prevent KohaTable/Holdings_spec.ts to fail randomly There is a JS warning raised by DT which makes the tests fail: ``` The following error originated from your application code, not from Cypress. > DataTables warning detected in log: "DataTables warning: table id=holdings_table - Ajax error. For more information about this error, please see https://datatables.net/tn/7" ``` It is caused by a 404 returned by the API, because DT receives the response during the afterEach (after the objects have been deleted) We must wait for the responses when needed. Test plan: cypress run --spec t/cypress/integration/KohaTable/Holdings_spec.ts should still pass Signed-off-by: Lucas Gass commit 1cb4b9c4a6e6f1364d0fc9a17417322815158b41 Author: Lucas Gass Date: Wed Oct 8 15:23:25 2025 +0000 Bug 15516: (follow-up) DBRev nneds to include everything from the kohastructure Signed-off-by: Lucas Gass commit 8831827d03e544de683de1ecb7db82dd115e7b8f Author: Lucas Gass Date: Wed Oct 8 15:15:23 2025 +0000 Bug 37901: (follow-up) Adjust DBRev includes everything from the kohastructure Signed-off-by: Lucas Gass commit 91e99a74e2f3c778a2e0a410be7aae355d322eb0 Author: Lucas Gass Date: Wed Oct 8 15:29:50 2025 +0000 Bug 40665: (follow-up) Sync comment for booking_id column Signed-off-by: Lucas Gass commit 83126898deca233c6a8340358fc8b0c874298978 Author: Martin Renvoize Date: Tue Oct 7 17:51:53 2025 +0100 Bug 32950: (follow-up) Fix copy_field regression for cross-field operations The bug 32950 fix introduced a regression that broke copy_field operations when copying between different fields or when copying a subfield to itself within the same field. The original fix correctly handled moving subfields between different subfields within the same field (e.g., 020$z to 020$a) by using field_exists() to identify which fields have the source subfield. However, this logic was applied too broadly: 1. Cross-field operations (e.g., 650$a to 651$a): The fix passed source field_numbers to _update_subfield for the target field, causing it to look for non-existent target field positions. This resulted in insert_fields_ordered creating new fields out of order. 2. Same-field, same-subfield operations (e.g., 952$d to 952$d): The fix prevented copying to fields that didn't have the source subfield, but the original behavior was correct for duplicating a subfield to itself. This patch restricts the bug 32950 logic to only apply when: - Source and target fields are the same AND - Source and target subfields are different Additionally, it ensures field_numbers are not passed to _update_subfield when copying between different fields. Test plan: 1. Run prove t/SimpleMARC.t 2. All tests should pass, including: - Cross-field copy operations (650$a to 651$a) - Same-field, different-subfield operations (020$z to 020$a) - Same-field, same-subfield operations (952$d to 952$d) Signed-off-by: Martin Renvoize Signed-off-by: Lucas Gass commit 2a00442a28923252994c7a2f4999815b9bc5e252 Author: Lucas Gass Date: Mon Oct 6 17:07:50 2025 +0000 Bug 34596: (follow- up) Fix gnu link Signed-off-by: Lucas Gass commit 7939c4d7d3126e2d002c965aa5e647b858eccb2e Author: Tomás Cohen Arazi Date: Mon Oct 6 15:31:44 2025 -0300 Bug 40027: (follow-up) Add .github/ to Makefile.PL Signed-off-by: Tomás Cohen Arazi Signed-off-by: Lucas Gass commit 02aba8c0b2f28c50d4cc5fa933c7dcdd96f73c05 Author: David Cook Date: Thu Aug 21 01:34:49 2025 +0000 Bug 40622: Use OPAC MARCXML for ILS-DI GetRecords This change makes it so that the ILS-DI GetRecords output for "marcxml" will contain the OPAC version of the record. Test plan: 0. Apply the patches 1. prove t/db_dependent/ILSDI_Services.t 2. Go to http://localhost:8081/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=29 3. Click "Settings" to change the framework to Default, and click "Save" 4. Go to http://localhost:8081/cgi-bin/koha/admin/marc_subfields_structure.pl ?op=add_form&tagfield=245&tagsubfield=a&frameworkcode=#subafield 5. Untick the "OPAC" box and click "Save changes" 6. Go to system preferences 7. Change "ILS-DI" to "Enable" 8. Change "ILS-DI:AuthorizedIPs" to 0.0.0.0/0 9. Go to http://localhost:8080/cgi-bin/koha/ilsdi.pl?service=GetRecords&id=29 10. Note that you cannot see the title in the MARCXML. Signed-off-by: David Nind Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit e5a302d96820e32e94336abd4692b89b77ce46e4 Author: David Cook Date: Fri Aug 8 07:05:19 2025 +0000 Bug 40622: Add missing interface parameter This change adds the missing interface parameter which Bug 38233 initially added. Signed-off-by: David Nind Signed-off-by: Marcel de Rooy Signed-off-by: Lucas Gass commit d6b95024bcf6b12db9ba14dd8bebc649bb27fadd Author: Michał Kula <148193449+miku-orb@users.noreply.github.com> Date: Thu May 29 15:43:53 2025 +0200 Bug 40027: Use GitHub workflow to automatically close PRs opened on the Koha repo there Automatically redirect users who try to submit a PR at GitHub to instructions on how to submit patches and close the PR. Better experience for potential new developers (since they get immediate feedback, while still in the flow for submitting the patch). The sparse checkout of readme is probably required, so that the gh command knows on what repo to work with. Based on: https://github.com/mozilla-firefox/firefox/blob/main/.github/workflows/close-pr.yml Signed-off-by: Imani Thomas Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass commit 2bf041ca4c869c56a485ba91a995399cf3651358 Author: Lucas Gass Date: Tue Sep 30 20:43:04 2025 +0000 Bug 40917: Remove extraneous whitespace To test: 1. Add an required patron attribute 2. Go to the patron form ( memberentrygen.tt ) 3. Look at the textarea for the required attribute 4. There is unwanted whitespace characters in the textarea 5. APPLY PATCH 6. Try again, the whitespace should be gone. Signed-off-by: CJ Lynce Signed-off-by: Emmi Takkinen Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass