Commit Graph

59979 Commits

Author SHA1 Message Date
Laura_Escamilla dcf2e8803d
Bug 40794: Add id='account-tabs' wrapper to payment and account tab templates
This patch adds a new id="account-tabs" to that div.

To test:

Apply the patch and restart_all. Clear browser cache if necessary.

1. Go to a patron’s accounting tab → Transactions / Make payment / Manual invoice / Manual credit.
2. Inspect the HTML for the tabs menu. The surrounding div should have both class="toptabs" and id="account-tabs".
3. Verify styling and tab functionality remain unchanged.
4. Sign off and have a great day! :D

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit b28daeb973)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 15:14:02 +00:00
Jonathan Druart 1a9d73b75b
Bug 41047: Sort libraries by description instead of code
On the holdings tables the libraries are sorted by code, we should sort
them by description.

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 9f947a2517)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 15:13:32 +00:00
Pedro Amorim 2b98e4de33
Bug 41054: Sort metadata keys alphabetically case insensitive
This coincidentally+nicely puts eISSN before ISSN on the 'manage request page' while keeping the rest of the order as before

Test plan:
1) Enable ILLModule
2) Create a new ILL request, visit:
<staff_url>/cgi-bin/koha/ill/ill-requests.pl?method=create&backend=Standard
3) Pick type one of 'journal article', 'conference', 'journal', 'generic resource'
4) Enter cardnumber, library, eISSN and other data if you want
5) Notice 'eISSN' shows on the 'Manage request' page.
6) Test again by creating an OPAC request, visit:
<opac_url>/cgi-bin/koha/opac-illrequests.pl?op=add_form&backend=Standard

Signed-off-by: Richard Bridgen <Richard.Bridgen@nhs.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 32ea6abb1e)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 15:13:08 +00:00
Pedro Amorim 8ebe0458b9
Bug 41054: Add eISSN to Standard forms
Signed-off-by: Richard Bridgen <Richard.Bridgen@nhs.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit d8989fe57f)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 15:13:07 +00:00
Pedro Amorim 621aafafdd
Bug 41054: Add test
prove t/db_dependent/Koha/ILL/Backend/Standard.t

Signed-off-by: Richard Bridgen <Richard.Bridgen@nhs.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit e6788ab699)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 15:13:05 +00:00
David Cook 8bc3a8a471
Bug 41646: Fix HTML display for self-checkin
This change moves the wrapper so that the web page display correctly

Test plan:
0. Apply the patch
1. Enable the SelfCheckInModule system preference
2. Go to http://localhost:8080/cgi-bin/koha/sci/sci-main.pl
3. Note that there isn't a lot of whitespace between
the word "koha" and "Self check-in"
4. Celebrate

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 58f0439bcf)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 15:12:00 +00:00
Tomás Cohen Arazi 4396fd3304
Bug 41603: Move after_hold_action plugin hook outside transaction
The after_hold_action plugin hook is currently called from within the
hold cancellation transaction in Koha::Hold->cancel(). This creates
a fragile architecture where any plugin performing database queries
can cause lock timeouts and transaction failures.

The issue manifests when plugins query tables with foreign key
relationships to biblio records. Even lightweight queries on seemingly
unrelated tables (like illrequests) can trigger lock conflicts due to
foreign key constraints that require shared locks on referenced rows.

Since the plugin hook executes while the transaction holds locks on
reserves/biblio tables, any plugin database access creates potential
for circular lock dependencies and timeouts.

This patch moves the plugin hook call outside the transaction boundary,
ensuring that:
- Core hold operations complete without plugin interference
- Plugins receive the same data but execute after transaction commit
- Database lock conflicts are eliminated
- Plugin failures cannot corrupt core hold cancellation logic

The hook receives identical data through a stored reference to the
cancelled hold, maintaining full backward compatibility while
eliminating the transaction fragility.

Test plan:
1. Install any plugin that implements after_hold_action hook with
   database queries (e.g., ILL plugins checking hold relationships)
2. Create a hold and attempt to cancel it
3. Without patch: Operation may timeout with "Lock wait timeout exceeded"
4. With patch: Operation completes immediately
5. Verify plugin hook still receives correct hold data

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 8f7a1b861f)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 15:11:30 +00:00
Tomás Cohen Arazi 3e1591183b
Bug 29668: Adapt to current guidelines
The added patches make some changes:

* $c->req->json is used to access the request body, as explained by the
  Mojolicious OpenAPI plugin author it should be done.
* Instead of calling `$basket->to_api` we use the `$c->objects->to_api`
  helper which deals with calling context (embeds, etc). Otherwise it
  would require doing it manually if embeds are added.
* Tests are grouped together the same way the rest of them are.

To test:
1. Apply this patches
2. Run:
   $ ktd --shell
  k$ prove t/db_dependent/api/v1/acquisitions_baskets.t
=> SUCCESS: Tests pass!

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit ac9944f7b0)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:45:31 +00:00
Tomás Cohen Arazi d043f1f903
Bug 29668: Move tests
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit ca8134f85d)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:45:30 +00:00
Julian Maurice d9351258b5
Bug 29668: Add API route to add a basket
Example usage:

POST /api/v1/acquisitions/baskets

{
    "vendor_id": 1,
    "name": "Basket #1",
}

Test plan:
1. Try requesting this endpoint with your favorite API tool
   (I recommend https://github.com/frigus02/RESTer)
2. Run `prove t/db_dependent/api/v1/acquisitions_baskets/post.t`

Edit (tcohen): Re-did the commit with some fixes in the spec

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 5e0a72f8a8)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:45:29 +00:00
Pedro Amorim b08f84f1e0
Bug 41237: (QA follow-up): Utilize available logged in user object
Instead of re-fetching the patron object.

This also adjusts tests:
prove t/db_dependent/Koha/ILL/Requests.t

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 63d1023317)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:44:16 +00:00
Pedro Amorim 3013a5be44
Bug 41237: Add tests
Test plan, k-t-d:
1) Apply tests patch, run:
prove t/db_dependent/Koha/ILL/Requests.t
2) Notice it fails. Apply the second patch. Repeat. Notice it passes.

Test failure explanation (before fix patch):
    #   Failed test 'Cardnumber not supplied and couldnt find additional_contents for all libraries. Dont show copyrightclearance'
    #   at t/db_dependent/Koha/ILL/Requests.t line 1067.
    #          got: 'copyrightclearance'
    #     expected: 'commit'

Its searching the copyrightclearance additional_contents for the provided branchcode param (illrq->patron->branchcode) (and finding one) when it shouldn't. That parameter is only to be utilized for the newly created ILL request's library. The branchcode filter of the additional_contents must the be logged in user's cardnumber, not params->{branchcode}. If no logged in user exists and this stage is reached (ILLOpacUnauthenticatedRequest), then only 'All libraries' ILLModuleCopyrightClearance are to be fetched, as expected.

Human test plan, before applying patches:
1) Enable ILLModule
2) Logged in as koha:koha, create an OPAC request, visit:
<opac_url>/cgi-bin/koha/opac-illrequests.pl?op=add_form&backend=Standard
3) Pick any library not Centerville (the default library of the 'koha' user)
4) Notice the created request's library is CPL (Centerville). It ignored the library selection from the form.
5) Apply patches. Repeat. Notice the request's library is now the one that was selected on the form.

Signed-off-by: Stephen Graham <s.graham4@herts.ac.uk>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit de5dfef766)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:44:14 +00:00
Pedro Amorim 800c87a0f8
Bug 41237: Update fetch of patron's branchcode to search additional_contents by
Signed-off-by: Stephen Graham <s.graham4@herts.ac.uk>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit ee348649a2)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:44:13 +00:00
Nick Clemens ab4e004e25
Bug 40846: Improve handling of ignored records
Currently, a job is marked failed if there are no records added or updated.
We should take ignored records into account.

Additionally, I mark the job failed when the number of records processed
doesn't equal the number of records in the batch.

To test:
1) Export some records from your Koha, include some with items
2) Stage and import those records into Koha, matching on biblionumber,
   ignoring matcheds, updating items
3) View the import job, it is marked failed
4) View the batch, all records imported
5) Apply patch, restart all
6) Stage/import as before
7) Job is now marked finished
8) Records imported as before

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit aef17e613d)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:43:00 +00:00
Lucas Gass 2415a038b6
Bug 40777: (follow-up) Use var instead of let when declaring specific_dt_errors
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 614020effa)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:42 +00:00
Victor Grousset/tuxayo b3e4c3f694
Bug 40777: (QA follow-up): remove trailing space from translatable string
Otherwise it ends up as "Audit " in the .po

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit f39a2118cd)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:35 +00:00
Jonathan Druart 08e2a3efb8
Bug 40777: Add POD
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit e549d21441)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:34 +00:00
Jonathan Druart 7d4b9adef2
Bug 40777: Add tests for for_biblio
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 3957a43e71)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:33 +00:00
Jonathan Druart 6ba49b8359
Bug 40777: Flatten arrays
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit a49af4a528)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:32 +00:00
Jonathan Druart 48f053b8ab
Bug 40777: Add tests for empty_title
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit bc4db881f4)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:31 +00:00
Jonathan Druart 523d67d0a5
Bug 40777: Add tests for nonexistent_AV
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 5da10c0ecf)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:30 +00:00
Jonathan Druart c8a9770a08
Bug 40777: Add tests for errors_in_marc
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 85b8096284)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:29 +00:00
Jonathan Druart 05baa89801
Bug 40777: Add tests for invalid_item_type
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 4551a2d1ba)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:28 +00:00
Jonathan Druart dc087e5134
Bug 40777: Add tests for invalid_item_library and no_item_type
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 368e8124c5)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:27 +00:00
Jonathan Druart cced48e6b6
Bug 40777: Move all biblio tests to the new package
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit a4c0746370)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:26 +00:00
Jonathan Druart 89ee54e33d
Bug 40777: Add info in the alert
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit fba31a1035)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:25 +00:00
Jonathan Druart 97b502ffbd
Bug 40777: Add 'Audit' button in the toolbar
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 305da27e65)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:23 +00:00
Jonathan Druart 9d10d0490c
Bug 40777: Introduce Koha::Database::DataInconsistency
test plan:
1. Export a record with an item from the staff interface as MARCXML (Save > MARCXML).
2. Edit the file and remove the 952$a (home library) and 952$b (current library).
3. Delete the item and record in the staff interface.
4. Import the exported record and item from the MARCXML file:
   - Cataloging > Import > Stage for import
     . Settings > Format: MARCXML
   - Stage for import
   - View batch link on the job details page (assuming successfully staged)
     . New record framework: change to Books, Booklets, Workbooks
5. Turn on the browser developer tools and view the console.
6. Access the details page for the new record.
7. Note that you get:
   - A "Processing" dialog box on screen
   - A browser pop-up window/dialog box with:
       Something went wrong when loading the table.
       500: Internal server error
   - Click OK
   - The console shows:
      . Failed to load resource: the server responded with a status of 500 (Internal Server Error)
      . Got 500 (Internal Server Error)
      . DataTables warning: table id=holdings_table - Ajax error. For more information about this error, please see https://datatables.net/tn/7
8. Run misc/maintenance/search_for_data_inconsistencies.pl, you get these result (the itemnumber may be different):
    == Not defined items.homebranch and/or items.holdingbranch ==
    	* Item with itemnumber=973 does not have home and holding library defined
    => Edit these items and set valid homebranch and/or holdingbranch
    (↑↑ don't do it, it's part of the message content)
9. Apply the patch.
10. Restart everything.
11. Refresh the details screen for the imported record.
12. You now get the same as step 7, but with added "Have a look at the "Audit" button in the toolbar" text in the browser pop-up dialog box:
    - A "Processing" dialog box on screen
    - A browser pop-up window/dialog box with:
        Something went wrong when loading the table.
        500: Internal server error
        Have a look at the "Audit" button in the toolbar
    - Click OK
    - The console shows:
      . GET http[URL for the record....] 500 (Internal Server Error)
      . Got 500 (Internal Server Error)
      . DataTables warning: table id=holdings_table - Ajax error. For more information about this error, please see https://datatables.net/tn/7
13. Click on the Audit button.
14. You get a yellow box at the top of the record with:
      Errors found
      Item with itemnumber=973 does not have home and holding library defined
    (Note that there is still the "Processing" dialog box, you can edit the item by select the "Items" option in the sidebar menu and then edit the item details - the home and current library files will be auto-populated with the current library, Centerville with KTD)
15. Repeat step 8, you get the same results.
16. The tests pass: prove t/db_dependent/Koha/Database/DataInconsistency.t
17. Check the details page for another record that doesn't have any data issues - note the 'Audit' toolbar item, and if clicked should show a blue box at the top of the record with "No data inconsistency found."

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit b88dd24139)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:34:22 +00:00
Owen Leonard 866b95179b
Bug 41327: Silence Sass deprecation warnings
Some warning are about issue we can address (legacy-js-api for
instance), and others we have to wait to be fixed in Bootstrap
(color-functions, global-builtin).

For now I think we should silence these warnings.

To test, apply the patch and run 'yarn build.' There should be no
warnings.

Sponsored-by: Athens County Public Libraries
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 48960e09b0)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:19:57 +00:00
Nick Clemens c95397e223
Bug 41416: Add skip_fix_priority option to ModReserve
This patch adds a new parameter to ModReserve: skip_fix_priority

The page for altering priority ensures each hold has a unique rank, so doesn't allow for setting two
holds to the same rank, so we don't need to reorder everything until the end (in case of some cancellations etc)

This patch also makes FixPriority exported and updates the name as it is already called in a few places outside of
C4:Reserve

To test:
 1 - Place many holds on a record, 50 - 150
     https://github.com/kidclamp/handy-koha-script/blob/main/randhold.pl
 2 - View the record in the staff interface:
     http://localhost:8081/cgi-bin/koha/catalogue/detail.pl?biblionumber=312
 3 - Click on the 'Holds' tab
 4 - Adjust the priority of several holds using the dropdowns
 5 - Open the network tab in the browser console (F12) to view the timing
 6 - Click 'Update hold(s)' and note the time
 7 - Apply patch, restart all
 8 - Repeat
 9 - Confirm timing is better and numbering updates correctly
10 - Sign off!

Note: The script adds holds that may be marked as 'lowestPriority' these will always all group at the bottom of the record
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Jan Kissig <bibliothek@th-wildau.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit f21255ca54)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:18:54 +00:00
Andreas Roussos 6159b645dd
Bug 41481: Change Koha Community website URL scheme to https
Since version 25.11.00 (also valid in current main), while
adding or editing a record, launching the plug-in to help
complete the MARC21 006/008 fields results in a browser
pop-up with the message "Can't validate the xml data from
(...)/marc21_field_00{6,8}.xml".

The actual problem lies with how the value builder plugins
(marc21_field_00{6,8}.pl) try to validate the relevant XML
files against the Schema Definition (marc21_field_CF.xsd),
the latter containing two references to the K-C.org website
that still use the 'http' URL scheme.

This patch fixes that.

Test plan:
1) In a MARC21 instance, create a new record by going to:
   Cataloging > New record > Books, Booklets, Workbooks,
   then click inside the 008 field so it becomes populated.
2) Click the Tag editor icon next to field 008. Notice how
   you get a pop-up window in your browser with the error:
   "Can't validate the xml data from (...)/marc21_field_008.xml".
3) Apply this patch.
4) Repeat step 2) -- this time the tag editor should launch
   correctly.
5) For extra credit, repeat the Test plan this time testing
   field 006 -- its tag editor should work without problems
   after applying the patch.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 881d0c143c)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:17:58 +00:00
Emmi Takkinen 2fc73e0a8a
Bug 41334: Move modified_holds tables column settings under Tools section
Bug 36135 added new tool to batch modify holds and two new datatables.
Table holds_to_modify was added to "Table settings" page under section
Tools>Page: batch_hold_modification but table modified_holds is under
Circulation>Page: holds section. It should be also moved to Tools section.

To test:
1. Navigate to page "Table settings" and open section Circulation.
2. Jump to Page: holds.
=> Note that modified_holds tables settings are displayed under this page.
3. Apply this patch.
4. Open Tools section and jump to page batch_hold_modification.
=> Note that modified_holds tables settings are now displayed under this
page and they are no longer present under Circulation>Page: holds.

Sponsored-by: Koha-Suomi Oy
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 05204294bb)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:17:29 +00:00
Martin Renvoize aa764acf81
Bug 41438: (follow-up) Fix JavaScript validation issues
This follow-up patch corrects two JavaScript issues in the batch
modify holds form:

1. Fixes typo: 'suspened' -> 'suspended' on line 637
   This typo prevented the suspended status check from working
   correctly when determining if any selected holds are suspended.

2. Fixes ineffective validation logic on line 643
   When a suspend date is provided without explicitly setting the
   suspend status, the code now properly updates the form field
   value instead of just setting a local variable. Changes:
   - Old: new_suspend_status = 1;
   - New: $("#new_suspend_status").val("1");

   This ensures that setting a suspend date automatically sets
   the suspend status to "Suspend" as intended, allowing the
   behavior to match the server-side logic.

Test plan:
1. Navigate to Tools->Batch modify holds
2. Search for and select some holds
3. Set only a "Suspend until" date without changing "Suspend holds"
4. Click "Modify holds"
5. Verify the holds are suspended with the specified date
6. Confirm the form properly auto-selects "Suspend" when a date
   is provided

Signed-off-by: Emmi Takkinen <emmi.takkinen@koha-suomi.fi>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 3853b679c3)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:16:12 +00:00
Emmi Takkinen 3bdd90c89d
Bug 41438: Do not always unsuspend holds when using batch modify holds tool
If one modifies suspended holds e.g. changes their pickup library, holds
are unsuspended. This happens due error in logic of checking if "Suspend
holds" selection is empty. This patch fixes this by moving the if statement
for checking new suspended status before doing anything else for the value.

To reproduce:
1. Navigate to Tools->Batch modify holds.
2. Search suspended holds.
3. Select a hold to modify and change it's pickup library, but leave
"Suspend holds" selection empty.
4. Press "Modify holds".
=> Note that hold is now unsuspended.
5. Apply this patch, start services again if needed.
6. Repeat steps from 2. to 4.
=> Note that hold is not suspended.
=> Confirm that suspending and unsuspending with and without suspend date
still works as expected.

Sponsored-by: Koha-Suomi Oy
Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 8798d60bec)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:16:10 +00:00
Jonathan Druart 3dfbe9b4c5
Bug 41545: Remove JS warning "redeclaration of let filters_options"
On the suggestions page more than one patron search is injected into the
page that leads to JS warnings when the JS variable is defined with
"let". We should use "var" in this case.

Test plan:
/cgi-bin/koha/suggestion/suggestion.pl?op=add_form&branchcode=CPL
And notice that the warning does no longer appear when this patch is
applied.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Brendan Lawlor <blawlor@clamsnet.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 9e7401ea1b)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:15:21 +00:00
Lari Taskula 716b418e7e
Bug 27115: Use start-stop-daemon to stop in koha-sip
There has been an issue where a restart of koha-sip would sometimes not bring
the SIP server back alive. This is because we have not been waiting for
koha-sip --stop to actually stop the SIP server(s). It is then possible for a
restart to attempt the --start command while a previous instance of SIP server
is still running. As the --start command in this case is not allowed, we would
then end up not starting the SIP server(s) at all.

This patch replaces daemon --stop with start-stop-daemon --stop to ensure
koha-sip daemon actually stops.

start-stop-daemon provides us the --retry option, which we are able to utilize
in waiting for the stop process to finish.

To test:
1. Before applying this patch
2. Run this command

export SIPINSTANCE="your_koha_instance_name"

You can your_koha_instance_name using the koha-list command

3. Configure a SIP server (add some min_servers, e.g. 6, to SIPConfig.xml)
4. koha-sip --enable $SIPINSTANCE
5. koha-sip --verbose --start $SIPINSTANCE
6. Observe "Starting SIP server for ..."
7. koha-sip --verbose --stop $SIPINSTANCE; ps aux | grep $SIPINSTANCE-koha-sip
8. Observe "Stopping SIP server for instancename"
9. In the output, observe the number of SIP servers you defined in step 3, plus
   one.
10. koha-sip --verbose --start $SIPINSTANCE
11. Apply this patch, or edit the koha-sip directly to get changes in place
in your environment, e.g. using command

nano $(which koha-sip)

12. koha-sip --verbose --stop $SIPINSTANCE; ps aux | grep $SIPINSTANCE-koha-sip
13. Observe "Stopping SIP server for instancename"
14. In the output, observe no more SIP servers alive

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 8673c798d5)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:14:14 +00:00
Laura_Escamilla 681d753f4a
Bug 40726: Prevent closing the user menu when clicking off of the dropdown
To test:

1. In the staff interface click on the user menu (top right corner where it has the user and library branch).
2. Click the gear icon.
3. Try to click a dropdown but miss it and click outside of it (still in the grey box area).
4. View the menu collapsing.
5. Apply the patch & restart all. Refresh your page.
6. Retry steps 1-3. Notice now that when you click within the grey box area around the drop down the user menu no longer closes. However, if you click outside of the dropdown menu (anywhere else on the interface screen) the user menu closes.
7. Sign off — have an amazing day! :D

Signed-off-by: noah <noah@inlibro.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 56d69d9f4d)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:13:35 +00:00
Owen Leonard 8d7d2989e4
Bug 41623: (follow-up) Correct JS variable name
This patch fixes the variable name meant to display the circulation desk
name when the waiting hold was checked in at a specific circ desk.

A revised test plan to test this specific case:

- Install a new langage
  gulp po:update --lang fr-CA
  ./misc/translator/translate install fr-CA
- Log in to the staff client and set your circulation desk
  - Requires that the UseCirculationDesks preference is enabled and at
    least one desk is defined in Administration -> Desks.
- Place a hold to be picked up at your logged-in library
- Check in the item on hold and confirm the hold
- Go to the record details page. In the holdings table you should see
  this under "Status" for that item:
    --> "Waiting at [library], undefined since [date]."
- Check the translation files
  cd misc/translator/po/
  git grep "Waiting at" fr-CA*
    --> There is no "Waiting at %s, %s since %s."

- Apply patch
- Update strings again
- Check translation files again
    --> The string should be there
- Translate the string (making sure to remove the fuzzy line if any)
- Install the translation again (only the translate install part)
- Check the record details page again. You should now see:
    --> "Waiting at [library], [desk] since [date]."

Signed-off-by: Caroline Cyr La Rose <caroline.cyr-la-rose@inlibro.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 7f2aedfd3e)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:12:37 +00:00
Caroline Cyr La Rose 765adb46e9
Bug 41623: Fix translation pickup in catalogue_details.inc
This patch redoes the fix that was made in bug 38450 to make sure
the "Waiting at ... since ..." string is picked up by the translation
tool. It's a parenthesis move.

See bug 38450 for explanation.

_("This %s is picked").format(foo)
_("This %s is NOT picked".format(bar))

To test:
1. Install a new langage
gulp po:update --lang fr-CA
./misc/translator/translate install fr-CA

2. Place a hold

3. Check in the item on hold and confirm the hold

4. Go to the record details page
   --> Waiting at ... since ... is in English

5. Check the translation files
cd misc/translator/po/
git grep "Waiting at" fr-CA*

--> There is no "Waiting at %s, %s since %s."

6. Apply patch

7. Update strings again

8. Check translation files again
--> The string should be there

9. Translate the string (making sure to remove the fuzzy line if any)

10. Install the translation again (only the translate install part)

11. Check the record details page
    --> It should be translated!

Signed-off-by: Owen Leonard <oleonard@myacpl.org>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 204b278caa)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 14:12:34 +00:00
Lucas Gass 28f5f5b418
Bug 28701: Add mexlength to the API spec
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 71f1fb48d1)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 13:52:56 +00:00
Marcel de Rooy 609f3eda08
Bug 28701: (QA follow-up) Make primary_contact_method visible
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 2c5efb40b1)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 13:52:55 +00:00
Alexis Ripetti 225d08c482
Bug 28701: Adding primary_contact_method to the REST API
This patch adds the primary_contact_method field to the api response for patrons

To test:
1 - GET http://localhost:8081/api/v1/patrons/51
2 - Look for primary_contact_method, it's not there
3 - Apply patch
4 - GET http://localhost:8081/api/v1/patrons/51
5 - Look for primary_contact_method, it's not there

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 4b34532dec)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 13:52:53 +00:00
Nick Clemens 3796ed4f74
Bug 28495: Add hint to branchcode input
This patch adds a hint to the library creation form warning the user
about what characters are valid in the "Library code" field.

To test, apply the patch and go to Administration -> Libraries -> New
library. Under the "Library code" input you should see a hint, "Note:
Whitespace is not permitted. The use of hyphens, dashes, or other
punctuation may cause searching issues."

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 7837bfa00e)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 13:50:40 +00:00
Owen Leonard e3e1239fd9
Bug 41142: Update jQuery-validate plugin to 1.21.0
This patch updates the jQuery validation plugin in both the staff
interface and the OPAC to the latest version, 1.21.0.

To test, apply the patch and clear your browser cache if necessary.

Test various pages in the staff client to confirm that form validation
works as expected:

 - Patron password change form:
   - Password must conform to minPasswordLength
   - Password must not contain leading/trailing spaces
   - Passwords must match

 - Administration -> Add or edit budget:
   - Description, start date, and end date are required
   - Start date must be before end date

 - Administration -> Add or edit Z39.50/SRU server:
   - Server name, hostname, port, and database are required
   - Port, rank, and timeout must be a number

Perform the same check of the "Change password" form in the OPAC.

Sponsored-by: Athens County Public Libraries
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 1b1b9307b4)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 13:37:36 +00:00
Marcel de Rooy 4580302ec0
Bug 41081: Remove spaces around 856$u in results and detail xslt
This patch does prevent creating useless links built on spaces like
http://%20%20%20%20 on the bug report.
A next step would be to stop preventing to create them when validating
during cataloguing.

Test plan:
Check without patch.
Create biblio with 856u having just a few spaces.
Verify that you see a useless Online resources link on OPAC or intranet
(detail and results).
Apply patch.
Restart all. Verify that you do not see the link anymore.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 73c0763f5b)
Signed-off-by: Jacob O'Mara <jacob.omara@openfifth.co.uk>
2026-02-16 13:35:26 +00:00
Chloe Zermatten a2d968e1aa
Bug 38876: (Rmaint follow-up) remove redundant atomic update file
Signed-off-by: Chloe Zermatten <chloe.zermatten@openfifth.co.uk>
2026-02-04 10:15:22 +00:00
Chloe Zermatten 9bdddf2273
Bug 41332: (Rmaint follow-up) remove redundant atomic update file
Signed-off-by: Chloe Zermatten <chloe.zermatten@openfifth.co.uk>
2026-02-04 10:14:30 +00:00
Chloe Zermatten 6217447544
Bug 41409: (Rmaint follow-up) remove redundant atomic update file
Signed-off-by: Chloe Zermatten <chloe.zermatten@openfifth.co.uk>
2026-02-04 10:13:25 +00:00
Chloe Zermatten 788089d9f1
Bug 38876: DBRev 25.11.01.003
Signed-off-by: Chloe Zermatten <chloe.zermatten@openfifth.co.uk>
2026-02-03 13:42:37 +00:00
Jessica Zairo 287abb41df
Bug 38876: (follow-up) fix db rev
syntax was wrong for dbrev
To test apply patches
dbic
updatedatatbase
koha-mysql kohadev
select * from systempreferences where variable='UpdateNotForLoanStatusOnCheckout';
confirm the updated description

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit e8dca2a842)
Signed-off-by: Chloé Zermatten <chloe.zermatten@openfifth.co.uk>
2026-02-03 13:42:05 +00:00