commit 64ddc9bfde24f7e5d9f50c3818c101265df37056 Author: Matt Blenkinsop Date: Fri Jul 31 09:49:32 2026 +0100 Bug 8214: Convert the bound_with column to a simple display modal commit 814c3ce14a809cfddc593d2c978639c81fe6fdcb Author: Matt Blenkinsop Date: Thu Jul 30 16:11:20 2026 +0100 Bug 8214: Allow FormRelationshipSelect to query server side for the biblio search commit 79cd72ef633cc545b0783d50abb808891a12f293 Author: Matt Blenkinsop Date: Thu Jul 30 12:32:08 2026 +0100 Bug 8214: Add unit tests commit d67d266fe33d2b0c8291336aef694524d9c7d943 Author: Matt Blenkinsop Date: Thu Jul 30 12:29:51 2026 +0100 Bug 8214: Look for stranded biblio level holds when removing links commit 0aa79b528751908fbb16ca42abb963a48b51d65e Author: Matt Blenkinsop Date: Thu Jul 30 10:19:13 2026 +0100 Bug 8214: XSL changes to handle 501 bound with field commit b8210a095d3810d9c1f450b4cb2e92424ac731c4 Author: Matt Blenkinsop Date: Thu Jul 30 10:13:19 2026 +0100 Bug 8214: Adjust holds logic to look for records that are bound to items commit 44d2feb8f4058da46230c855cd325701ee1162dd Author: Matt Blenkinsop Date: Wed Jul 29 11:39:16 2026 +0100 Bug 8214: Update additional areas that filter items commit c144d26511ff46f4906c0b70e4bad528cd1e8d5d Author: Matt Blenkinsop Date: Mon Jul 27 16:33:06 2026 +0100 Bug 8214: Update the OPAC templates commit cba23334253f03795c64e1cf37e2bc8e2de7c544 Author: Matt Blenkinsop Date: Mon Jul 27 16:15:09 2026 +0100 Bug 8214: Add a modal to bind records to an item commit f3fa43e90fdbee4eaf2070e5d82b5114e187e66f Author: Matt Blenkinsop Date: Mon Jul 27 16:14:26 2026 +0100 Bug 8214: Update the cataloging views to handle bound with records commit 81184c8a54dd2e0baeabc2c2eb9ee1cf78e1a4dc Author: Matt Blenkinsop Date: Mon Jul 27 14:56:11 2026 +0100 Bug 8214: Implement API endpoints for biblio to item binding commit cbaffe6b665278455922833ee3cc9f87fbaa0699 Author: Matt Blenkinsop Date: Mon Jul 27 14:20:29 2026 +0100 Bug 8214: Apply binding logic to Item and Biblio class methods commit 84e49bacc86f42c15337955dbc31c6bb641b0cc6 Author: Matt Blenkinsop Date: Mon Jul 27 14:19:48 2026 +0100 Bug 8214: Add BiblioLink object classes commit c8d4c7ad8e159d03e723161feb3f708ee251b024 Author: Matt Blenkinsop Date: Mon Jul 27 11:10:33 2026 +0100 Bug 8214: DBIC commit 304d8192d75e761f08daa72837b7c2e4f58cf18e Author: Matt Blenkinsop Date: Mon Jul 27 11:10:18 2026 +0100 Bug 8214: Add a syspref and permissions commit 357c05f88eebf1a8bf35ad1e1063c7b5a3d11e7a Author: Matt Blenkinsop Date: Mon Jul 27 11:08:58 2026 +0100 Bug 8214: Add an ITEM_BIBLIO_LINK_TYPE authorised value commit 35b469182c21ec099fb48dbfe65707afc39396ea Author: Matt Blenkinsop Date: Mon Jul 27 11:08:03 2026 +0100 Bug 8214: Add an item_biblio_links_table commit b33959a46b6e1187fa29d4cf9933a334a7d22cf2 Author: Matt Blenkinsop Date: Mon Feb 16 14:53:07 2026 +0000 Bug 38291: (QA follow-up) Add library_groups tag to swagger.yaml commit d8a535dcfca3db8b62ab81351a06124fc39a5a7a Author: Matt Blenkinsop Date: Tue Oct 29 17:05:35 2024 +0000 Bug 38291: Add a unit test (cherry picked from commit 9f9c2a0678c42ec5ac4016dd2ef603232150e770) Signed-off-by: Brendan Gallagher commit f1dc8b82a1f272b5e5b07f94de213e60c6938c7a Author: Matt Blenkinsop Date: Tue Oct 29 16:59:51 2024 +0000 Bug 38291: Add an endpoint to list library groups (cherry picked from commit cd2440165f62e96410df9d11bb3aab578d028016) Signed-off-by: Brendan Gallagher commit 4189d42ee63c212deff8702962154625e48a5a98 Author: Tomás Cohen Arazi Date: Tue Jul 21 11:02:29 2026 -0300 Bug 42391: (follow-up) Restore DB exception warnings in Object::store Bug 42391 removed the warn from Koha::Object::store when it moved exception translation to the exception_action hook. This lost useful debugging information from the Plack error logs. This patch restores the warning by adding a try/catch in store() that stringifies and warns the exception before rethrowing. The warning now contains the translated Koha exception message (e.g. 'Broken FK constraint') rather than the raw DBI error, since translation happens before the exception reaches store(). Note: delete() does not warn. Ideally the logging would live in the ExceptionMapper itself (via an injected logger), covering all code paths uniformly. That is a larger refactor tracked separately. Tests that assert on these warnings are updated to match the new message format. Test plan: 1. Apply patch 2. Run: $ ktd --shell k$ prove t/db_dependent/Koha/Object.t \ t/db_dependent/Koha/Objects.t \ t/db_dependent/Koha/Schema/ExceptionMapper.t \ t/db_dependent/Koha/Item.t \ t/db_dependent/Koha/Suggestions.t \ t/db_dependent/Koha/Account.t \ t/db_dependent/Koha/ApiKey.t \ t/db_dependent/Koha/Checkouts/ReturnClaim.t \ t/db_dependent/Circulation/MarkIssueReturned.t \ t/db_dependent/Suggestions.t \ t/db_dependent/Biblio.t => SUCCESS: Tests pass! 3. Sign off :-D Signed-off-by: Pedro Amorim commit 880f33a4bbfb6c05ed7f8a4314eacc01f3be3823 Author: Pedro Amorim Date: Tue Jul 21 14:40:16 2026 +0000 Bug 41604: (follow-up) Wait for the page to be ready before searching in patrons_search.t Bug 41604 made every page do a bit more work when it loads. This Selenium test didn't wait for that work to finish before typing into the search box, so sometimes it searched too early and got the wrong results. This adds a short wait after each page load so the test only searches once the page is actually ready. Introduced by: Bug 41604: Save user decision per column when visibility changes Test plan: prove t/db_dependent/selenium/patrons_search.t Co-Authored-By: Claude Sonnet 5 Signed-off-by: Pedro Amorim commit 037d38b00cd2e4485c0d1334cedd664f9870fd11 Author: Pedro Amorim Date: Mon Jul 20 12:36:17 2026 +0000 Bug 42772: Adjust yarn.lock Signed-off-by: Pedro Amorim commit f89e68c220481511f8ea7f08925e36d16258d828 Author: Jonathan Druart Date: Mon Jun 8 14:51:01 2026 +0200 Bug 42772: Cypress.env => cy.env Warning: The allowCypressEnv configuration option is enabled. This allows any browser code to read values from Cypress.env(). This is insecure and will be removed in a future major version. 1. Replace Cypress.env() calls with cy.env() (for sensitive values) or Cypress.expose() (for public configuration) 2. Set allowCypressEnv: false in your Cypress configuration to disable Cypress.env() Learn more: https://on.cypress.io/cypress-env-migration Signed-off-by: Paul Derscheid Signed-off-by: David Nind Signed-off-by: Martin Renvoize Signed-off-by: Pedro Amorim commit 7b307694fa3836326ca8400cd2054561f94d789f Author: Jonathan Druart Date: Thu Jun 4 14:26:12 2026 +0200 Bug 42772: Remove experimentalStudio from config The experimentalStudio option was removed in Cypress version 15.4.0. Cypress Studio is now available for all users. You can safely remove this option from your config. Signed-off-by: Paul Derscheid Signed-off-by: David Nind Signed-off-by: Martin Renvoize Signed-off-by: Pedro Amorim commit f357dd41030de4e520be6ddc2acc7e5d94a7249f Author: Jonathan Druart Date: Thu Jun 4 14:25:35 2026 +0200 Bug 42772: Upgrade Cypress to 15.16.0 Signed-off-by: Paul Derscheid Signed-off-by: David Nind Signed-off-by: Martin Renvoize Signed-off-by: Pedro Amorim commit 54fc07f4081edb94bf2d939bb57afe106ac259c9 Author: Kyle M Hall Date: Tue May 5 12:39:16 2026 +0000 Bug 42391: (QA follow-up): Fix unit tests Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 22d988e8b4102df16425b15c1811b4f8a0306f80 Author: Kyle M Hall Date: Tue May 5 12:08:56 2026 +0000 Bug 42391: (QA follow-up): Clarify exception_action ref-passthrough comment Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 9c04c7bbb48398ee8829a498701eb71728449611 Author: Kyle M Hall Date: Tue May 5 07:27:03 2026 -0400 Bug 42391: (QA follow-up): Remove unused Try::Tiny from Koha::Item Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 62e003b88f1ed4e46f6c78c7e2b81d90785bacf0 Author: Tomás Cohen Arazi Date: Thu Apr 16 12:19:01 2026 -0300 Bug 42391: (follow-up) Rename ExceptionTranslator to ExceptionMapper The Koha::Schema::Util:: namespace adds unnecessary nesting for a single-purpose class. This follow-up moves it to Koha::Schema::ExceptionMapper, which sits alongside Koha::Schema itself — a better fit given it's tightly coupled to the Schema's exception_action hook. Changes: - Koha::Schema::Util::ExceptionTranslator → Koha::Schema::ExceptionMapper - Update Koha::Schema to use the new module - Move test file accordingly - Remove now-empty Koha/Schema/Util/ directory Signed-off-by: David Nind Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 033cfd772c77e1256868d069bf57f7d69a768908 Author: Tomás Cohen Arazi Date: Wed Apr 15 16:56:05 2026 -0300 Bug 42391: (follow-up) Add NotNull, NotInStorage and UnhandledDBError translations Extend the ExceptionTranslator to handle two additional MySQL error patterns: - NOT NULL violations ('Column X cannot be null' and 'X doesn't have a default value') → Koha::Exceptions::Object::NotNull - Not in database errors → Koha::Exceptions::Object::NotInStorage Add Koha::Exceptions::Object::NotNull exception class with a property field identifying the offending column. Add Koha::Exceptions::Object::UnhandledDBError as a catch-all for DBI errors that don't match any known pattern. This closes the gap where unmatched MySQL errors could leak as DBIx::Class::Exception to callers (e.g. templates that no longer catch that type). The exception_action handler now distinguishes three cases: - Koha exception objects (from txn_do re-throws): passed through via 'die $msg' to preserve the original exception type. Without this, txn_do's rollback-and-rethrow would stringify the Koha exception and wrap it in UnhandledDBError, losing the specific type. - DBI errors (prefixed 'DBI Exception:'): translated if possible, otherwise wrapped in UnhandledDBError. - DBIC internal errors (e.g. 'Not in database'): translated if possible, otherwise thrown as DBIx::Class::Exception. Note: NotInStorage translation works for update operations but not for delete-on-detached-Row where DBIC bypasses the Schema's exception_action. Those cases remain DBIx::Class::Exception. Update tests: - OAIServers.t, Z3950Servers.t: assert NotNull with property check - Hold.t: assert NotNull, remove warn suppression hack - Objects.t: update-not-in-storage cases assert NotInStorage - Upload.t: delete-not-in-storage stays DBIx::Class::Exception Signed-off-by: David Nind Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit face3c96d03c950ad9806636fb263b4077668e50 Author: Tomás Cohen Arazi Date: Wed Apr 15 16:46:58 2026 -0300 Bug 42391: (follow-up) Fix Objects.t case 3 to test FK deletion properly The 'Delete a patron that cannot be deleted' test (case 3) was using a stale $r_us object from case 2 (not in storage), so it was not actually testing FK constraint deletion. The assertion on DBIx::Class::Exception passed by accident. This follow-up: - Fetches a fresh Koha::Patron object for case 3 - Clears $e_us/$e_them before the new test - Asserts Koha::Exceptions::Object::FKConstraintDeletion, which is what exception_action now produces for FK deletion errors Signed-off-by: David Nind Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 66b738f1ebab9a57a0b45ff7b1d8aca6ad617ddb Author: Tomás Cohen Arazi Date: Wed Apr 15 16:43:06 2026 -0300 Bug 42391: Use exception_action to translate DBIC exceptions at the source DBIx::Class provides an exception_action hook that intercepts every throw_exception call before it becomes a DBIx::Class::Exception. By installing this hook on Koha::Schema via a connection() override, all database exceptions are automatically translated into Koha exceptions at the source. This eliminates the need for translate_exception catch blocks in every caller: - Remove try/catch from Koha::Object::store - Remove try/catch from Koha::Object::delete - Remove try/catch from Koha::Item::add_to_bundle - Remove translate_exception convenience method from Koha::Schema - Remove safe_do (already removed in previous follow-up) ExceptionTranslator is refactored to work on plain error message strings instead of DBIx::Class::Exception objects, since exception_action receives the message before wrapping. Unmatched errors fall through to DBIx::Class::Exception->throw() as the default, preserving backward compatibility. The warn $_->{msg} that was in Object::store is no longer needed since exceptions are translated before they propagate. Tests that asserted on that warning (via warning_like) are updated to use throws_ok directly. Test plan: 1. Apply patch 2. Run: $ ktd --shell k$ prove t/db_dependent/Koha/Schema/Util/ExceptionTranslator.t => SUCCESS: Tests pass! k$ prove t/db_dependent/Koha/Object.t => SUCCESS: Tests pass! k$ prove t/db_dependent/Koha/Item.t => SUCCESS: Tests pass! k$ prove t/db_dependent/Koha/Patron/Modifications.t => SUCCESS: Tests pass! 3. Sign off :-D Signed-off-by: David Nind Signed-off-by: Kyle M Hall Signed-off-by: Tomás Cohen Arazi Signed-off-by: Pedro Amorim commit 8bc90cbb5e3c3c89fe1c3600e2a810c48b8098af Author: Owen Leonard Date: Wed Apr 22 09:32:41 2026 -0400 Bug 42440: Remove event attributes from labeled MARC detail template This patch removes a redundant "onchange" event attribute from the framework selection dropdown. This event is already registered in the JS block. The patch also does a little bit of cleanup to the JS: Combining two