Commit Graph

59411 Commits

Author SHA1 Message Date
Jan Kissig bfdb2cb4b0
Bug 40141: Add "Run" and "Test" buttons to data provider toolbar
This patch adds the SUSHI test and run options to the toolbar of the data providers detail page.
If a provider is not active the buttons are disabled.

Testplan:
- go to /cgi-bin/koha/erm/eusage/usage_data_providers
- add a dummy provider
- notice the toolbar on the data provider detail page: Only Edit and Delete are available
- apply the patch
- run 'yarn js:build'
- I needed to call 'restart_all'
- refresh the providers detail page and notice the two new buttons: Test and run now
- click on 'test' and wait for the result
- click on 'Run now' and enter some appropriate dates.
- Click 'yes run' to see the jobs queued
- (Please do not dismiss the 'run now' dialog by clicking outside, as this triggers bug 41001)

Signed-off-by: Clemens Tubach <clemens.tubach@kit.edu>
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-16 15:20:19 -06:00
Lucas Gass bc0b0d2907
Bug 40936: DBRev 25.06.00.025
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-16 15:20:18 -06:00
Kyle M Hall 63c44cbd0e
Bug 40936: Add index for default patron sort order
The default sort order for Koha's patron search includes many columns, some of which are not indexed:

[% CASE 'name-address' %] {
"data":"me.surname:me.preferred_name:me.firstname:me.middle_name:me.othernames:me.street_number:me.address:me.address2:me.city:me.state:me.postal_code:me.country",

Depending on the number of patrons in the database, and the specific configuration of the server, this can end up generating a query that creates a temp table in the hundreds of gigabytes of data or more. Not only does this risk crashing a database server with insufficient disk space, it's also incredibly slow.

We've found a compound index prevents the issue and also makes the search much faster. InndoDB indexes have a fixed maximum length which is too small ( 3072 bytes ) to encompass the full data for all the fields we need to sort by.

The following works well as a comprise to keep the index length within the maximum:
CREATE INDEX idx_borrowers_sort_order ON borrowers (
    surname(100),        -- 400
    preferred_name(80),  -- 320
    firstname(80),       -- 320
    middle_name(50),     -- 200
    othernames(50),      -- 200
    streetnumber(20),    -- 80
    address(100),        -- 400
    address2(75),        -- 300
    city(75),            -- 300
    state(40),           -- 160
    zipcode(20),         -- 80
    country(40)          -- 160
);

Test Plan:
1) Apply this patch
2) Run updatedatabase.pl
3) Perform a patron search
4) No change in behvior should be noted!

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-16 15:20:18 -06:00
Jonathan Druart 096fd56b6c
Bug 30724: Fix selenium tests - info => success class
I don't think this is correct. We only want success after we enabled 2FA

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-16 15:20:17 -06:00
Jonathan Druart e77d2ad22b
Bug 30724: Fix selenium tests - wording
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-16 15:20:17 -06:00
Jonathan Druart b4bc754439
Bug 30724: Fix selenium tests - fix logic if no borrowernumber passed
Then consider we want to edit the logged in user settings

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-16 15:20:16 -06:00
Pedro Amorim 1a6e53b7c1
Bug 31149: Add dayjs plugins
It seems dayjs is now being imported twice? With the second time overriding the first, but without the plugins.
This patch "fixes" the issue by proving this, but there is likely a better solution than this copy-paste from js-date-format.inc

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-16 15:20:16 -06:00
Jonathan Druart b6aab57065
Bug 41012: (bug 40622 follow-up) Clear the MSS cache
For some reasons t/db_dependent/ILSDI_Services.t fails if run after
t/db_dependent/api/v1/biblios.t

When we modify the MARC subfield structure from the tests we must flush
the cache.

Actually I don't understand why the tests are even passing.

I have not tracked down why it only fails when run after t/db_dependent/api/v1/biblios.t

Test plan:
0. Do not apply this patch
1. prove t/db_dependent/api/v1/biblios.t t/db_dependent/ILSDI_Services.t
It fails
    #   Failed test 'Title hidden in output as expected'
    #   at t/db_dependent/ILSDI_Services.t line 874.
    #          got: '1'
    #     expected: '0'
2. Apply this patch, repeat 1.
=> it's green!

Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-16 15:20:08 -06:00
Owen Leonard c543c54971
Bug 38863: Show bookings options on itemtypes.pl
This patch adds a column to the table of item types in item types
administration to show if the item type is bookable by default. The
column is hidden by default.

To test, apply the patch and restart services.

- Go to Administration -> Item types
- If necessary, edit an item type and check the "Bookable" checkbox.
- In the table of item types, the "Bookbable" column should be hidden by
  default.
- Click the "Columns" button and check the "Bookable" menu item to show
  it. It should now appear.
- Click the "Configure" button and try making changes to the default
  configuration. Your changes should be reflected on the item types
  pages.

Sponsored-by: Athens County Public Libraries
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:09 -06:00
Lucas Gass d212eea842
Bug 38942: Fix display issues with item-template-toolbar
This patch does the following:
-Adds a 'btn' and 'btn-default' class to the buttons in the item-template-toolbar
-Removes the btn-group parent containers
-Changes the wording of the remember session checkbox to 'Remember for session', just like it is on the check out screen for due dates.
-Adds a visual divider after the 'Remember for session' checkbox
-Add CSS to addbiblio.css to make the checkbox/label appear a little nicer

To test:
-Add an item and 'Save as template'
-Notice the toolbar buttons look different from other toolbars in Koha.
-Apply patch
-Look again, the buttons should look better, hopefully!

Signed-off-by: Barbara Johnson <barbara.johnson@bedfordtx.gov>
Signed-off-by: Baptiste Wojtkowski <baptiste.wojtkowski@biblibre.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:08 -06:00
Laura_Escamilla 8a13329a41
Bug 7132: Acq: Check for duplicates when ordering from empty record
To test using a new empty record:

1. Ensure you have a vendor and a new basket available for ordering.
   Click on “+Add to basket” and select “From a new (empty) record”
2. Choose an existing record to test with for example “CSS : the
   definitive guide”
   (http://localhost:8081/cgi-bin/koha/catalogue/detail.pl?biblionumber=12&searchid=scs_1759160315801)
3. Copy over the main details from the existing record in order to fill
   out the required details of the new order. I.e Title, and Koha item
   type. Click add item and then select a fund. It’s not necessary to
   fill anything else out.
4. Click save and notice that the duplicate record is not found.
5. Apply the patch and restart_all. Clear cache in your browser if
   necessary.
6. Repeat steps 2 - 4. This time a duplicate warning will appear. Ensure
   that all options of the duplicate warning work as expected.
7. Sign off and have a great day!

Signed-off-by: Kim Gnerre <kgnerre@hotchkiss.org>
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:08 -06:00
Nick Clemens 290b6af654
Bug 38438: Forget item selections on a new search
This patch adds a new checkbox to the item search
"Forget item selections from previous search"

This way, selections are remembered when paginating, and can optionally
be kept between searches, but defaults to clearing the storage on a enw search.

To test:
1 - Do an item search for books, select two items
2 - Batch modify those items
3 - Do a new item search for music
4 - Select two items
5 - Batch delete them
6 - Note 4 items are going to be deleted
7 - Apply patch
8 - Start a new item search for books from centerville
9 - Note the form option to forget previous selections, leave it checked
10 - Do the search, select two items, batch modify, only 2!
11 - Start a new item search, uncheck the box, search
12 - Select two and batch modify, 4 items are sent!
13 - Popcorn!

Signed-off-by: Ludovic Julien <ludovic.julien@inLibro.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:07 -06:00
Nick Clemens deb11ee1c8
Bug 40722: Add a log when resetting mappings during elastic rebuild
The command currently logs when deleting indexes and indexing records, it would be helpful
to have a log when resetting the mappings, and to log which mapping file has been used.

To test:
1 - perl misc/search_tools/rebuild_elasticsearch.pl -r
2 - No log of reset
3 - Apply patch
4 - perl misc/search_tools/rebuild_elasticsearch.pl -r
5 - Note reset is logged

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>
2025-10-15 16:12:07 -06:00
Brendan Lawlor 4cadd40278
Bug 40757: (follow-up) Make highlight color more subtle
Signed-off-by: Brendan Lawlor <blawlor@clamsnet.org>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:06 -06:00
Nick Clemens 3c4755c3ce
Bug 40757: Highlight circulation rules on click
To test:
1 - Apply patch, yarn build, restart all
2 - Browse to Admin->Circulation rules
3 - Click on some rows
4 - They highlight!
5 - Click to edit a row, highlight removed
6 - Cancel editing, editing color is removed
7 - Sign off!

Signed-off-by: Brendan Lawlor <blawlor@clamsnet.org>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:06 -06:00
Lucas Gass c629e76e90
Bug 40070: DRRev 25.06.00.024
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:05 -06:00
Marcel de Rooy f8afb7f78b
Bug 40070: Control display of serial pubdate on detail pages
Test plan:
Add a serial that creates items.
Receive an issue.
Toggle pref DisplayPublishedDate and verify that publisheddate
is shown or hidden.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:05 -06:00
Marcel de Rooy 52fc6ac32f
Bug 40070: Add new preference DisplayPublishedDate
Test plan:
Run install or update
Check new preference under Administration

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:04 -06:00
Martin Renvoize e558c90e3f
Bug 30724: (follow-up) Corrections for self-enabling 2FA
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:04 -06:00
Tomas Cohen Arazi 3a359ba3f7
Bug 30724: (follow-up) Improve user interface text and messaging
This enhances the user experience with clearer, more contextual messaging
throughout the two-factor authentication management interface.

Template improvements:
* Add contextual page titles showing patron name when managing others
* Replace generic status messages with personalized, descriptive text
* Provide clear explanation of why 2FA setup is restricted for admins
* Add actionable guidance for superlibrarians on available options
* Use appropriate alert styling (success/info/warning) for different states
* Include patron names in messages for better context

The new messaging explains the security rationale behind restrictions and
provides clear guidance on what actions are available to different user types.

To test:
1. As superlibrarian, manage 2FA for another patron
=> SUCCESS: Page title shows "Two-factor authentication for [Name]"
=> SUCCESS: Status messages are personalized with patron name
=> SUCCESS: Clear explanation of setup restrictions with actionable guidance
2. Manage your own 2FA
=> SUCCESS: Messages use "Your account" language appropriately
3. Sign off :-D

Sponsored-by: ByWater Solutions
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:03 -06:00
Tomas Cohen Arazi 150c8c2487
Bug 30724: Allow superlibrarians to manage 2FA for other patrons
This enhances the two-factor authentication management interface to allow
superlibrarians to disable 2FA for other patrons when they lose access to
their authenticator device.

Controller changes (members/two_factor_auth.pl):
* Accept borrowernumber parameter to select target patron
* Implement authorization checks (self-service or superlibrarian)
* Use proper HTTP status codes (403/404) for error conditions
* Update all patron operations to use selected patron
* Integrate with new reset_2fa() method for consistency
* Pass another_user flag to template for conditional display

Template changes (two_factor_auth.tt):
* Use has_2fa_enabled() method instead of auth_method string comparison
* Prevent superlibrarians from enabling 2FA for other users
* Show explanatory message when 2FA setup is restricted
* Maintain proper conditional display logic

UI Integration changes:
* Update members toolbar to show 2FA option for superlibrarians
* Pass borrowernumber parameter in all 2FA-related URLs
* Maintain context when canceling 2FA registration
* Use consistent parameter naming (borrowernumber vs patron_id)

To test:
1. Enable TwoFactorAuthentication system preference
2. Set up 2FA for a test patron
3. As superlibrarian, visit patron details page
4. Click 'Manage two-factor authentication' in toolbar
=> SUCCESS: 2FA management page loads for the selected patron
5. Disable 2FA for the patron
=> SUCCESS: 2FA is disabled for the target patron, not the superlibrarian
6. Verify 'Enable 2FA' button is hidden with explanatory text
=> SUCCESS: Shows message that users must enable 2FA themselves
7. Test authorization: try accessing as non-superlibrarian for different patron
=> FAIL: Returns 403 Forbidden error
8. Sign off :-D

Sponsored-by: ByWater Solutions
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:03 -06:00
Lucas Gass 83ac70172b
Bug 40545: (follow-up) Correct GNU link
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 16:12:02 -06:00
Tomas Cohen Arazi f2620707ff
Bug 40545: Add to action logs
Sponsored-by: ByWater Solutions
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>
2025-10-15 16:12:02 -06:00
Tomas Cohen Arazi 78b659c1a9
Bug 40545: Add utility script for resetting 2FA settings
This adds a command-line utility script that allows administrators to reset
a patron's two-factor authentication settings when they lose access to their
authenticator device.

The script uses the new Koha::Patron methods and provides:
* Parameter validation (mutually exclusive userid/cardnumber/patron_id)
* User-friendly error messages and feedback
* Verification that patron has 2FA enabled before attempting reset

To test:
1. Enable TwoFactorAuthentication system preference
2. Set up 2FA for a test patron
3. Run:
   $ ktd --shell
  k$ perl misc/admin/reset_2fa.pl --userid <userid>
=> SUCCESS: Script resets 2FA and shows confirmation message
4. Verify patron can log in with password only
5. Test error cases:
   - No parameters: shows usage message
   - Multiple parameters: shows mutual exclusivity error
   - Non-existent user: shows user not found error
   - User without 2FA: shows informational message
=> SUCCESS: All scenarios work as expected
6. Sign off :-D

Sponsored-by: ByWater Solutions
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>
2025-10-15 16:12:01 -06:00
Tomas Cohen Arazi e32d5ce4a5
Bug 40545: Add has_2fa_enabled and reset_2fa methods to Koha::Patron
This adds two new methods to Koha::Patron for managing two-factor authentication:

* has_2fa_enabled() - Returns 1 if patron has 2FA enabled, 0 otherwise
* reset_2fa() - Clears secret and sets auth_method to 'password'

The reset_2fa method includes audit logging when BorrowersLog is enabled
and returns the patron object for method chaining.

To test:
1. Apply patch
2. Run:
   $ ktd --shell
  k$ prove t/db_dependent/Koha/Patron.t
=> SUCCESS: Tests pass!
3. Sign off :-D

Sponsored-by: ByWater Solutions
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>
2025-10-15 16:11:52 -06:00
Lucas Gass df85eab6a6
Revert "Bug 40272: Add an alert for bad fixed-length control fields"
This reverts commit 64e1083e04.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 11:33:19 -06:00
Lucas Gass 8a8a04a60e
Bug 38489: Fix structural diff
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 11:04:13 -06:00
Martin Renvoize b9bee6a07c
Bug 38489: (follow-up) Improve idempotency of update
We needed better idempotency around checking for fields before
attempting to use them during migration and then dropping them.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 11:04:12 -06:00
Martin Renvoize eb5c38a5ab
Bug 38489: (follow-up) Make old db_rev more idempotent 2
In the unit test system we reset the database version to 21.11 after
having upgraded a long way past that. The 231200022 update appears not
to be fully idempotent, so we fail running through the upgrade.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 11:04:12 -06:00
Martin Renvoize bf3b1e07a6
Bug 38489: (follow-up) Make old db_rev more idempotent
In the unit test system we reset the database version to 21.11 after
having upgraded a long way past that. The 221200041 update appears not
to be fully idempotent, so we fail running through the upgrade.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-15 11:04:04 -06:00
Lucas Gass 458b476d79
Bug 40983: DBRev 25.06.00.023
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 16:09:48 -06:00
Jonathan Druart ccb4bcf055
Bug 31149: Use dayjs to parse dates
We can use the isValid's dayjs function instead of our own parsing
functions.

Test plan:
Confirm that you cannot enter an invalid date when using a date picker widget.

Works as expected.

Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:52:02 -06:00
nina martinez 9f2216cf20
Bug 39706: Add alternative text to the stars rating
I just added an exception in the script. Sorry for the inconvenience.

Test Plan:

1- Enable the following system preference: OpacStarRatings (results,
   details, and patron).
2- Apply the patch.
3- Go to the Opac.
4- Search a record.
5- Inspect the HTML code before the stars and notice that there is "Star
   rating" in a span tag with the class "sr-only". Inspect the stars,
   there should be a span tag for each star. After the stars, notice
   that there is the average rating in a span with the "sr-only" class.
6- Click on a record and do the same as the 5: go to the star rating,
   inspect the HTML code, and notice that there is a span tag for each
   star.
7- Now, log into an account.
8- Search a record.
9- It should be the same information as in the step 5.
10- Click on a record to view the details. Now, you can change the
    rating. Inspect the stars, each should have the number of stars in
    the span tag with a "sr-only" class, which are in the link tags.
11- For this part, you need to have a record checked out (if you don't
    have a record checked out, go to the staff interface and do it.
    Choose your patron and enter the barcode of the record).
12- Go to your account. In the "Checked Out" section, you should see the
    same as in the 10 step: the number of stars and be able to change
    your rating or make a new one.

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:52:01 -06:00
nina martinez 7052511553
Bug 39677: Add the role presentation to the divider vertical tags
Test plan:

Enable the following system preferences: CookieConsent, EnableOpacSearchHistory, and OpacLangSelectorMode (both top and footer).

-Apply the patch.
-Go to the Koha OPAC.
-Check the vertical dividers in the navigation.
-If they are present with a coherent design, the test is successful.

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:52:01 -06:00
Nick Clemens 4593392539
Bug 39636: Update curl link
With the move to the latest ES versions we got rid of 'data' type - we need to use '_doc'

To test:
1 - Delete a record from the DB directly
    DELETE FROM biblio WHERE biblionumber=45;
2 - perl misc/maintenance/compare_es_to_db.pl
3 - Try the curl command - it doesn't work
4 - Apply this patch
5 - perl misc/maintenance/compare_es_to_db.pl
6 - Try the curl command - it now fetches the record

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:52:00 -06:00
Nick Clemens ad9648528c
Bug 39636: Add option to specify which indexes to check
This patch adds --biblios and --authorities options to the script to allow
checking only a single index

To test:
0 - Apply patch
1 - perl misc/maintenance/compare_es_to_db.pl
2 - biblios and authorities are checked
3 - perl misc/maintenance/compare_es_to_db.pl -b
4 - Only biblios are checked
5 - perl misc/maintenance/compare_es_to_db.pl -a
6 - Only authorities are checked
7 - perl misc/maintenance/compare_es_to_db.pl -a -b
8 - Both indexes are checked

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:52:00 -06:00
Owen Leonard 6589fff9ea
Bug 16721: Add table configuration to serial claims table
This patch adds table configuration options to the serial claims table,
including the option to set a default sort column.

The patch also moves the table column filter row to the top, which I
think is more standard in the staff interface.

To test, apply the patch and restart services.

- You'll need to have subscription issues which are missing, claimed, or
  late.
- Go to Serials -> Claims, and select a vendor.
- In the table of missing issues, confirm that all DataTable controls
  work correctly: Column visibility, export, and configuration options.
- Confirm that you can use Administration -> Table settings -> Serials
  -> Claims to hide columns by default or set the default order.
- Confirm that the column header filter forms work correctly.

Sponsored-by: Athens County Public Libraries
Signed-off-by: Michaela Sieber <michaela.sieber@kit.edu>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:59 -06:00
Tomas Cohen Arazi 83a823aec5
Bug 38931: Add endpoints for individual credits and debits
As the title says, we are missing such endpoints and this patch adds
them.

To test:
1. Apply this patches
2. Run:
   $ ktd --shell
  k$ yarn api:bundle
  k$ prove t/db_dependent/api/v1/patrons_accounts.t
=> SUCCESS: The spec builds!
=> SUCCESS: The tests pass!
3. Verify all the codepaths are covered by tests
4. Sign off :-D

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
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>
2025-10-14 14:51:59 -06:00
Tomas Cohen Arazi 17ad33e2b4
Bug 38931: Unit tests
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
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>
2025-10-14 14:51:58 -06:00
Lucas Gass a35688c073
Bug 39880: Add shelving location to cn_browser results
To test:
0. APPLY PATCH and resart_all
1. Make sure you have items with itemcallnumber's in your DB
2. Visit http://localhost:8081/cgi-bin/koha/cataloguing/plugin_launcher.pl?q=1&plugin_name=cn_browser.pl and make a search
3. You should see a column for Shelving location now

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:58 -06:00
Owen Leonard 977d644ffb
Bug 40335: (follow-up) Fix style of Select2 in sidebar
This patch adjusts the style of the Select2 field in the sidebar. It
should have 100% width and the selections should word-wrap.

Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:57 -06:00
Lucas Gass 269a256a2f
Bug 40335: Fix mistake in template params
Signed-off-by: David Flater <flaterdavid@gmail.com>
Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:57 -06:00
Lucas Gass 1226bb645f
Bug 40335: Add ability to multi select collections and locations for holds queue
To test:
0. APPLY PATCH and restart_all
1. Place some holds with different shelving locations and collection
   codes.
2. Build the holds queue
3. Go to Circulation > Holds queue
4. Notice that shelfing location and collection code are now multi
   select2 dropdowns
5. Try searching for various combos of shelfing locations and collection
   codes.
6. Make sure the results are correct.
7. After making selections and running the search make sure your
   selections are retained in the search form in the left nav bar

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:56 -06:00
Marcel de Rooy 64e1083e04
Bug 40272: Add an alert for bad fixed-length control fields
Development wise it is much simpler to do this check in perl when
opening the editor than getting this logic into the template with
javascript. Furthermore, older data may be corrupted, but we trust
the current plugins to not insert such fields anymore.

Test plan:
Run t/db_dependent/Koha/Biblio/Metadata/Extractor/MARC/MARC21.t
Open an existing record in the basic editor. Shorten 008 without plugin.
Save and open the record again. Do you get the alert?

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:56 -06:00
Martin Renvoize ef5ba9a42d
Bug 39408: (QA follow-up) Add unit tests
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:55 -06:00
Nick Clemens c1fa513be9
Bug 39408: Don't attempt to send a message if one is not generated
The routine to create the message can return nothing if there is no content,
we should handle this case and not attempt to send.

To test:
1 - Test plan from last patch
2 - Apply this patch
3 - POST to patron API again
4 - Success!

Signed-off-by: Claire Hernandez <claire.hernandez@biblibre.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:55 -06:00
Nick Clemens ae14a11937
Bug 39408: Handle BadParameter exception better
Currently we assume BadParameter has been thrown with a parameter that is a valid patron field.
It may only include a message, or it may have come from outside the patron object, we should
handle all cases.

To test:
1 - Wrap "WELCOME" notice content in conditional:
    [% IF borrower.categorycode != 'SELFREG' %]
    ...
    [% END %]
2 - Enable preference AutoEmailNewUser
3 - Attempt to self register a patron via API with body:
    {"surname":"PATRON","firstname":"PROBLEM","library_id":"CPL","category_id":"SELFREG","email":"eample@example.org"}
4 - Response error: "Given  does not exist"
5 - Apply this patch, restart all
6 - Repeat 3
7 - Response error: "Exception 'Koha::Exceptions::BadParameter' thrown 'Parameter message_id cannot be empty if passed.'\n"
8 - It's uglier, but actually helpful

Signed-off-by: Claire Hernandez <claire.hernandez@biblibre.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:54 -06:00
Marcel de Rooy 5bad556207
Bug 40983: (QA follow-up) Add a (final) upgrade warn
Just a last wake up call.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:54 -06:00
Martin Renvoize 1571fd489c
Bug 40983: Complete deprecation of old after_biblio_action hook signature
This patch completes the deprecation cycle started in bug 36343 by
removing the backward compatibility code and deprecation warnings for
the old after_biblio_action hook signature.

Changes made:
1. Removed the duplicate biblio and biblio_id parameters from
   _after_biblio_action_hooks in C4::Biblio that were marked for
   deprecation in 24.11.00
2. Updated the test plugin to use only the new payload-based signature,
   ensuring all parameters are accessed via $params->{payload}

The after_biblio_action hook now consistently uses the modern signature
with a payload parameter, matching the pattern used by other plugin hooks
like before_biblio_action, after_item_action, and after_hold_action.

Test plan:
1. Run: prove t/db_dependent/Koha/Plugins/Biblio_and_Items_plugin_hooks.t
2. Run: prove t/db_dependent/Koha/Plugins/
3. Run: prove t/db_dependent/Biblio.t
4. All tests should pass

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:53 -06:00
Lucas Gass 79830d1696
Bug 38489: DBIC
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-10-14 14:51:53 -06:00