Commit Graph

58287 Commits

Author SHA1 Message Date
Jonathan Druart 12e4e92e53
Bug 40348: Remove warnings from api/v1/two_factor_auth.t
02:28:36 koha_1       | WARNING: The key derivation method "opensslv1" is deprecated. Using -pbkdf=>'pbkdf2' would be better.
02:28:36 koha_1       | Pass -nodeprecate=>1 to inhibit this message.
02:28:36 koha_1       |  at /kohadevbox/koha/Koha/Patron.pm line 3216.

We should deal with that on a separate bug report. For now we can remove
the warnings from the log/output.

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-15 16:32:55 -06:00
Jonathan Druart b6c8cee965
Bug 40347: Remove warnings from Koha/Hold.t
Those diag statements are not really needed

    # Filling a hold when pref enabled should trigger a test
    # Filling a hold when pref disabled should not trigger a test
    # Updating a hold location when pref disabled should not trigger a test
    # Updating a hold location when pref enabled should trigger a test
    # Update with no change to pickup location should not trigger a test

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-15 16:32:55 -06:00
Jonathan Druart 0aaf193a75
Bug 40169: mockData - Do not replace _id if passed
If we build an object and pass a primary key (ie. suffixed by _id) we
should not replace it.

Test plan:
The test highlights the problem, it won't affect existing tests.
0. Apply only the first patch (Cypress tests)
1. Run yarn cypress run t/cypress/integration/t/mockData.ts
=> It fails
2. Apply this patch
=> It passes

Signed-off-by: David Nind <david@davidnind.com>

Amended-by: Jonathan Druart
Remove .only

Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-15 16:32:54 -06:00
Jonathan Druart ea703016d4
Bug 40169: Add a test
Signed-off-by: David Nind <david@davidnind.com>

Amended by: Jonathan Druart
Remove .only

Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-15 16:32:54 -06:00
Janusz Kaczmarek 26f17cbf68
Bug 40128: Unit tests
Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-15 16:32:53 -06:00
Janusz Kaczmarek d0ce815600
Bug 40128: StripWhitespaceChars can create empty subfields
When StripWhitespaceChars is enabled and the user by chance enters
some white spaces in the input field, Koha generates empty subfield
(or even entirely empty field).

Test plan:
==========
1. Enable StripWhitespaceChars system preference.
2. Edit an existing record, putting just some spaces into an empty
   subfield. Save the record.
3. Go to bibliographic record Normal view and in modal "MARC preview"
   notice that the subfield you entered spaces in exists as an empty
   subfield. If it was the only subfield in a field, the field exists
   with no data at all. This is wrong.
4. Apply the patch ; restart_all.
5. Repeat 2. and 3. You should not see any empty subfield now. If the
   empty subbfield was the only subfield in a field, the field should
   have been removed from the record.

Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-15 16:32:53 -06:00
Matthias Le Gac 0a51460e2c
Bug 34157: Exporting labels as a barcode range can cause 500 error
This fixes the error 500 generated when using the label
generator if you use the "Bibliographic data precedes
barcode" layout type when printing a barcode range.

Test plan:
1. Set up information for testing:
   1.1 Create a new label layout:
       1.1.1 Cataloging > Tools > Label creator
       1.1.2 New > Label layout
       1.1.3 Add these details:
             - Layout name: BZ34157
             - Choose layout type: Bibliographic data precedes barcode
             - Select 'List fieds'
             - Data fields: add some text at the end
                title, author, isbn, issn, itemtype, barcode,
                itemcallnumber, 'Some text'
       1.1.3 Save
   1.2 Ranges of barcode numbers for testing:
       1.2.1 Where the numbers are not used in KTD, and are LOWER than
             the highest barcode number (39999000019193):
             500000 to 500100
       1.2.3 Where the numbers are not used in KTD, and are HIGHER than
             the highest barcode number (39999000019193):
             39999000020000 to 39999000020100
       1.2.2 Where the numbers are used in KTD:
             3999900000001 to 3999900001001
2. Print a barcode range using the ranges in 1.2:
   2.1 Cataloging > Tools > Label creator > Print barcode range
   2.2 Enter the barcode ranges
   2.3 Select a layout to be applied: BZ34157
   2.4 Export
   2.5 Click "Download as PDF"
   2.6 Results for all barcode ranges:
       ==> You get a page with "An error has occured! Error 500...".
3. Repeat step 2, but select the DEFAULT layout for 2.3:
   ==> Results for all barcode ranges: PDFs with barcode labels
       successfully generated
4. Apply the patches and restart everything (restart_all)
5. Repeat steps 2 and 3.
6. Results for all barcode ranges and the BZ34157 and DEFAULT layouts:
   ==> PDFs with barcode labels successfully generated

Signed-off-by: Tadeusz „tadzik” Sośnierz <tadeusz@sosnierz.com>
Signed-off-by: David Nind <david@davidnind.com>

Bug 34157: (Follow up) Removed the debugging data

Signed-off-by: David Nind <david@davidnind.com>

Bug 34157: (follow-up) Tidiness fix

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
[EDIT] Squashed
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-15 16:32:52 -06:00
Emily Lamancusa c702e2ea4e
Bug 40370: (QA follow-up) Change raw filter to html
The diff doesn't contain intentional HTML formatting, and pre tags do
not prevent un-escaped HTML from being interpreted, so we should not
use the raw filter here

Signed-off-by: Emily Lamancusa <emily.lamancusa@montgomerycountymd.gov>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-15 16:32:52 -06:00
David Cook 6699bdb142
Bug 40370: Remove incorrect DB audit instruction and fix HTML formatting
This change removes the incorrect instruction from about.pl:
"Run the following SQL to fix the database" and fixes the HTML
formatting so that the line "-- Convert schema '' to '':;" is
displayed correctly at the start of the line.

Test plan:
0. Apply the patch
1. Go to http://localhost:8081/cgi-bin/koha/about.pl?tab=database
2. Note that "Run the following SQL to fix the database" no
longer appears and "--Convert schema '' to '':;" starts
at the beginning of the line instead of with leading whitespaces.

Signed-off-by: Emily Lamancusa <emily.lamancusa@montgomerycountymd.gov>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-15 16:32:45 -06:00
Lucas Gass 113ed97442
Bug 36947: DBRev 25.06.00.004
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:40:14 -06:00
Martin Renvoize 21a217d5bf
Bug 36947: (QA follow-up) Add FacetSortingLocale to Search.t mock preferences
The test was failing because the new FacetSortingLocale system preference
added was not included in the mock preference handler in t/db_dependent/Search.t.
This caused warnings about the unknown preference when the _sort_facets_zebra
function was called.

This commit adds the FacetSortingLocale preference to the mock, returning
'default' as the value, which matches the expected fallback behavior of
the new unicode collation sorting feature.

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:58 -06:00
David Cook 8c66e830b3
Bug 36947: (QA follow-up) Add skippable unit test for fi_FI locale
This patch adds a skippable unit test for the fi_FI locale to prove
that the patches work well for other locales that don't use
the default Unicode collation. It will run on koha-testing-docker,
but will be skipped on systems lacking it.

This patch also fleshes out the existing unit tests a bit more
to prove that the patches also improves the sorting of names
with diacritics generally. That is, the default Unicode sort
is better than the existing stringwise/bytewise sort even for
English and French locales.

Test plan:
0. prove -v t/Koha/SearchEngine/Elasticsearch/Search.t \
    t/db_dependent/Search_FacetSorting.t

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:58 -06:00
David Cook 01543503ce
Bug 36947: (QA follow-up) Fix locale-list to show selected values
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:57 -06:00
David Cook c0546d4c22
Bug 36947: (QA follow-up) Fix hash key name for locale-list syspref type
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:57 -06:00
Martin Renvoize 5acbf16948
Bug 36947: (QA follow-up) Add missing POD documentation to Koha::I18N
The Koha::I18N module was missing POD documentation. This adds complete
documentation for all exported functions including usage examples and
descriptions.

Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:56 -06:00
Martin Renvoize 146aca25f5
Bug 36947: Add system preference for configurable locale-based facet sorting
This follow-up adds two major enhancements to the locale-based facet sorting
implementation:

1. **System Preference Integration**
   - Adds FacetSortingLocale system preference for configurable locale selection
   - Dynamically detects available system locales using Koha::I18N
   - Provides user-friendly dropdown with locale descriptions
   - Supports both Elasticsearch and Zebra search engines

2. **Zebra Search Engine Support**
   - Extends locale-based sorting to Zebra (in addition to existing Elasticsearch)
   - Implements _sort_facets_zebra() function in C4::Search
   - Maintains consistent Unicode-aware sorting behavior across search engines

Key Features:
- Dynamic locale detection via Koha::I18N::available_locales()
- Proper module architecture with comprehensive unit tests
- Clean fallback chain: preference → system LC_COLLATE → default
- Admin UI integration in System Preferences → I18N/L10N
- Universal facet sorting for international library systems

Test plan:
1. Apply patch and restart services
2. Install/run database update
3. Navigate to Administration → System Preferences → I18N/L10N
4. Verify "Sort facet names using" dropdown shows available system locales
5. Test facet sorting with different locales and both search engines
6. Run: prove t/Koha/I18N.t t/Koha/SearchEngine/Elasticsearch/Search.t t/db_dependent/Search_FacetSorting.t

Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:56 -06:00
David Cook b76df3a168
Bug 36947: Do a locale-based sort for ES facet names
This change uses a configurable locale-based collator to sort
the ES facet names.

Test plan:
0. Apply the patch
1. vi /etc/locale.gen
2. Uncomment the locale you want to generate (e.g. fi_FI.UTF-8 UTF-8)
3. locale-gen
4. vi "/etc/default/koha-common"
5. Add the following to the bottom of the file:
export LC_ALL=fi_FI.UTF-8
6. koha-plack --restart koha-common
7. Setup some test records with authors with accented and unaccented names,
    and different cases for the lead letter
e.g. Aa author, Åa author2, aa author, étienne
8. Switch to using Elasticsearch and reindex
koha-elasticsearch -b -v --rebuild kohadev
9. Do a test search
    e.g. http://localhost:8081/cgi-bin/koha/catalogue/search.pl?q=test
10. Confirm the facet names are sorted in ascending order following
Finnish collation rules
    e.g.
aa author
Aa author
étienne
Farley, David
Humble, Jez
Martin, Robert C.
Åa author

NOTE: Any collation and language can be used. Finnish is just
an example of a Latin-based script which has a different
alphabetical ordering than just A-Z

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:55 -06:00
Jonathan Druart 44ed8d5400
Bug 40172: Replace jQuery with vanilla JS in js/fetch/http-client.js
So that we can reuse it from somewhere else.
The current need is to be able to reuse it from Cypress tests.

Test plan:
Try to hit several places where APIClient is used:
 * Syspref edition
 * Translation of item type description (be aware of bug 40161)
 * Delete of cover images
 * checkin, renew from the checkout list
 * etc.

Note that this does not affect Vue components.

Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:55 -06:00
Lucas Gass 295fd3bf89
Bug 39881: Add patron card number to transfers to receive table
To test:
0. APPLY PATCH
1. Transfer an item from Library A to Library B
2. Place and item-level hold on the item
3. Set library to Library B
4. Go to Circulation >  Transfers to receive
5. In the 'On hold for' column you should now see the patron card number.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Aleisha Amohia <aleishaamohia@hotmail.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:54 -06:00
Martin Renvoize 5f025aee75
Bug 39545: (QA follow-up) Restore 240 field processing for subfield s
This patch restores the generation of subfield s from field 240 (Uniform Title)
in the MARC21 773 field generation, addressing cataloger feedback about the
critical importance of this field for:

- Bibles and books of the Bible
- Laws and statutes
- Translations
- Academic and specialized library materials
- Legal materials and treaties

The MARC21 standard defines subfield s as "Uniform title (NR)" and this data
is essential for proper bibliographic relationships.

This patch also fixes a warning when 245 indicator 2 contains non-numeric
values by adding proper validation.

Test plan:
1. Create a record with a 240 field containing uniform title data
2. Generate a child record from it
3. Verify the 773 field now contains subfield s with the uniform title
4. Run prove t/db_dependent/Koha/Biblio.t to ensure all tests pass

Sponsored-by: Open Fifth <https://openfifth.co.uk>
Signed-off-by: Heather Hernandez <flyingendpaper@gmail.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:54 -06:00
Martin Renvoize 610ad29bf8
Bug 39545: (follow-up) Apply same logic to Koha::Biblio
This patch updates the Koha::Biblio->generate_marc_host_field method to
more closely match the updated logic in C4::Biblio::prep_marc_host.

We change a number of things including:
 1) Constructinging the 773 subfield generation from a hash to an array
    to preserve field order.
 2) Updating main entry handling for 100/110/111 fields to clone the
    field and then remove relevant subfields as apposed to fetching only
    a limited set of subfields.
 3) Add handling to generate subfield 7 content depending on LDR and
    Main Entry information
 4) Improve handling for title subfield construction from 245 to respect
    non-filing characters and remove trailing punctuation
 5) Remove trailing punctuation from subfield b when generated from 250
 6) Remove generation of subfield s from the 240 field entirely
 7) Remove trailing punctuation from subfield d when generated from 260
 8) Add generation of subfield k from 800-830 fields

Rebased-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
We dropped the upstream aforementioned C4::Biblio method, but this patch
faithfully replicates it's functionality within
Koha::Biblio->generate_marc_host_field

Sponsored-by: Open Fifth <https://openfifth.co.uk>
Signed-off-by: Heather Hernandez <flyingendpaper@gmail.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:53 -06:00
Janusz Kaczmarek 0b4b8e7078
Bug 39545: Better generation of 773 field for a child record (MARC21)
When creating a child record (New > New child record from Normal view)
the information put in field 773 is very basic, sometimes not
complete (e.g. only one ISBN, only 245 $a in 773 $t, 773 $w
missing 003 of the host record etc.) and put in random order.

Test plan:
==========
1. Find any record to be a host record for an analytical record. You
   can enrich the record with multiple 020, 490+830 fields, make sure that
   there are 001 and 003 fields present.
2. From upper menu chose New > New child record.
3. See the generated field 773 - the subfields are incomplete and in
   random order.
4. Apply the patch ; restart_all.
5. Repeat p. 2.-3. See that the generated 773 field contains now much
   more information, including 773 $7 and also preset leader.

Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>
Rebased-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
The rebase removed the majority of this patch as the prepare_host_field
method was removed entirely upstream.  The follow-up patch re-implements
the same but in the newer Koha::Biblio->generate_marc_host_field method
instead.  We also dropped the Unit tests that were introduced in the
subsequent patch.

Sponsored-by: Open Fifth <https://openfifth.co.uk>
Signed-off-by: Heather Hernandez <flyingendpaper@gmail.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:53 -06:00
nina martinez 59a8b35f8c
Bug 40330: Conform and add labels to the OPAC
Test plan:

Enable the system preference: marcflavour: choose UNIMAR,
PrivacyPolicyConsent, ILLModule, TagsEnabled, OpacCloud.

1- Apply the patch
2- Go to the OPAC, log in to a patron account. Go to personal details,
   check the html code of the date of birth field, and notice that there
   is a aria-hidden="false".
3- Inspect the search bar, and notice in the library select, there is a
   label with a for attribute which match the id.
4- Search a record, click on "save to list" and check the Category
   select, inspect if the label has a for attribute and match the select
   id.
5- Go to interlibrary Loan Request in the user menu, Check if the "Note"
   field has a label for attribute which match the id.
6- Go to Consent, check if the checkbox has a label for "Yes" and "No".
7- Go to Suggestions and check that the checkbox has the same id as the
   label in the Summary column.
8- Go to "Tag Cloud", inspect the HTML code of the "Tags to show from
   other users" label, notice that there is a for attribute which match
   the id of the input tag. and check if in the html code there is an
   aria-label with the term of the tag.
9- Go to Subject Cloud, check the html code, and notice that there is a
   label that surounds the input tag.
10- Go to Advanced Search, click on "More options", and check that all
    the additional options have a label with a for attribute which match
    the id of the select.

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Emily Lamancusa <emily.lamancusa@montgomerycountymd.gov>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:52 -06:00
Andrew Fuerste Henry e98fab0502
Bug 40332: Show tools sidebar category for batch extend due dates permission
To test:
1 - have or create a user with the permissions batch_extend_due_dates edit_quotes but no other Tools
2 - log into koha as that user, go to Tools module, confirm both Batch Extend Due Dates and Quote Editor are available from the Tools module home page
3 - Click into either available tool, confirm the sidebar menu contains the category Additional Tools and a link to Quote Editor, but nothing else
4 - add the edit_notices permission to your user
5 - reload your page from step 3, confirm the sidebar menu now also contains the Patrons & Circulation category with both Notices & Slips and Batch Extend Due Dates.
6 - apply patch, restart services, reload page, confirm nothing has changed
7 - remove the edit_notices permission from your user
8 - reload your page from step 3, confirm the sidebar menu now contains the Patrons & Circulation category with only Batch Extend Due Dates.

Signed-off-by: David Flater <flaterdavid@gmail.com>
Signed-off-by: Emily Lamancusa <emily.lamancusa@montgomerycountymd.gov>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:52 -06:00
Emily Lamancusa 0c9e5029b3
Bug 39572: Improve EDIFACT order confirmation message
Add EAN account information to EDIFACT order confirmation message
when the BasketConfirmations system preference is enabled.

To test:
1. Set EDIFACT system preference to Enable
2. Set BasketConfirmations system preference to Enable
3. Create at least 2 EANs, one with a description and one without a
   description
   i. Go to Acquisitions > Library EANs
   ii. Click "New EAN" and fill in the fields
4. Create an EDI account
   i. Go to Acquisitions > EDI accounts
   ii. Click "New account"
   iii. Click Submit (for testing purposes you don't need to fill in
         the fields)
5. Find or create a basket for the same vendor that's on the EDI account
6. Add an order to the basket from any source
7. In the menu bar at the top of the basket screen, click "Create
   EDIFACT order" and select an EAN
--> Note that the confirmation page doesn't tell you which EAN was
    selected
8. Click "No, don't close"
9. Apply patch and restart_all
10. Repeat step 7
--> The confirmation page should now display both the basket and the
    selected EAN
11. Click "Cancel"
--> Confirm that the basket is still open
12. Repeat step 7
13. Click "Yes, generate order and close basket"
--> Confirm the basket is closed
14. Click "EDIFACT messages" in the sidebar menu
--> Confirm that you see a message with type ORDERS for that basket

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:51 -06:00
Fridolin Somers c3eccceae5
Bug 40088: Do not show edit button for default framework
In Administration > MARC bibliographic frameworks > "MARC structure":
Do not show "Edit framework" button in tools bar since one can not edit
the default framework description.
Currently it leads to new framework creation.

Test plan :
1) Go to Administration > MARC bibliographic frameworks
2) On default framework row, click Actions > MARC structure
3) Check you dont see in tool bar "Edit framework" button
4) Go to Administration > MARC bibliographic frameworks
5) On a framework row (not default one), click Actions > MARC structure
6) Check you see in tool bar "Edit framework" button

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

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:51 -06:00
Fridolin Somers 2f864811ef
Bug 40160: Use HTTPS for links to community websites
Some web-browsers now only allow HTTPS, we should change links in
templates with SSL :
https://schema.koha-community.org, https://wiki.koha-community.org ...

Test plan :
Just look patch to check http > https

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

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:50 -06:00
Lari Strand 4d069e5006
Bug 32934: Correctly honor the no block due date for SIP checkout messages
**Problem:**
When using SIP checkout messages with the "no block" flag, the specified due date
was being ignored. Instead of honoring the provided due date, the system would:
1. Use the due date as the transaction timestamp (incorrect behavior)
2. Calculate a new due date based on circulation rules
3. Return an empty due date field (AH) in the SIP response

This affected SIP2 integrations where external systems needed to specify exact
due dates for checkouts, particularly for offline circulation scenarios.

**Root Cause:**
The `ProcessOfflineIssue` function in C4::Circulation was only returning a
success/failure message, but the SIP checkout transaction needed access to the
resulting checkout object to properly set the due date. The SIP Transaction::Checkout
module was calling `ProcessOfflineIssue` but couldn't retrieve the checkout details
to populate the transaction's due date field.

**Solution:**
1. Modified `ProcessOfflineIssue` to return both the status message AND the checkout
   object: `return ( "Success.", $checkout );`
2. Updated `ProcessOfflineOperation` to handle the new return format by capturing
   only the message: `( $report ) = ProcessOfflineIssue( $operation );`
3. Modified SIP Transaction::Checkout to capture both return values and use the
   checkout object to set the proper due date via `duedatefromissue`
4. Fixed the timestamp parameter to use `dt_from_string` instead of the due date

**Test Plan:**
1. **Unit Tests:**
   - Run `prove t/db_dependent/Circulation/OfflineCirculation.t` to verify
     ProcessOfflineIssue returns checkout object and respects due_date parameter
   - Run `prove t/db_dependent/SIP/Transaction.t` to verify SIP checkout honors
     no_block_due_date parameter

2. **Manual SIP Testing:**
   - Connect to SIP server via telnet on port 6001
   - Send checkout message with no block flag and specific due date:
     `111YN20250115    18000120241201    180001AP|AO|AC|AD|AB<barcode>|AA<cardnumber>|`
   - Verify response contains correct due date in AH field
   - Verify checkout record in database has the specified due date

3. **Regression Testing:**
   - Verify normal SIP checkouts (without no block) still work correctly
   - Verify offline circulation operations continue to function
   - Verify ProcessOfflineOperation still processes queued operations correctly

Signed-off-by: Brendan Lawlor <blawlor@clamsnet.org>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:50 -06:00
Martin Renvoize 04ab86f1f7
Bug 32934: Unit tests
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:49 -06:00
Andrii Nugged 4c4023c41c
Bug 40092: Fill auto-populated control fields in MARC editors
Problem: Clicking Save doesn't fill control fields automatically in both the authority and bibliographic MARC editors.

Regression introduced when class `framework_plugin` was added: `AreMandatoriesNotOk()` rewrites the element `class` attribute with a hard‑coded string, dropping existing classes. Because the plugins that populate 000/003/005/008 rely on `framework_plugin`, the inputs are skipped and the fields remain empty.

This patch stops clobbering the attribute and instead appends the visual 'notFilled' class via `elt.classList.add()`. The one-line fix is applied in both `authorities.tt` and `addbiblio.tt`.

Test plan:

Authority editor

1. Authorities → New authority → choose framework (e.g. Topical term).
2. Leave all fields blank, click Save.
   Before patch: 000, 003, 008 remain blank; required tags turn yellow.
3. Apply patch, hard‑refresh, repeat steps 1–2.
   After patch: control fields auto‑populate as in 24.11.

Bibliographic editor

1. Cataloguing → New record (Not in Advanced MARC editor).
2. Click Save without entering data.
   Before patch: control fields stay blank; record cannot be saved.
3. Apply patch, hard‑refresh, repeat.
   After patch: record is blocked, but 000/005/008 auto‑populate.

Both editors behave like 24.11; mandatory highlighting still works.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Aleisha Amohia <aleishaamohia@hotmail.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:49 -06:00
Owen Leonard b94f53291c
Bug 40111: Fix title sorting on two reports
This patch modifies two reports in order to correct sorting on title
columns.

To test, apply the patch and got to reports -> Lost items.

- Run the report with parameters that will return multiple results.
  - Test sorting the title column. The articles 'a', 'an', and 'the'
    should be ignored.
- Perform the same test with the "Orders by fund" report.

Sponsored-by: Athens County Public Libraries
Signed-off-by: Anneli Österman <anneli.osterman@koha-suomi.fi>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:48 -06:00
Owen Leonard 78b8a2e6f1
Bug 40165: Incomplete logic for controlling display of OPAC language footer
This patch adds some additional logic to the template which controls the
appearance of the footer in the OPAC. Some additional checks are
required to make sure an empty footer doesn't display in some
circumstances.

To test, apply the patch and install at least one additional translation
besides English.

Check any OPAC page when various combinations of system preferences are
enabled:

- opaclanguagesdisplay
- OPACLanguages
- OpacLangSelectorMode
- OPACReportProblem
- CookieConsent
- OpacKohaUurl

In particular, confirm that there is not an empty footer when
opaclanguagesdisplay is enabled but there is only one translation
enabled.

Sponsored-by: Athens County Public Libraries
Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:48 -06:00
Owen Leonard 51cb82b02e
Bug 40319: Fix spacing in address display include
This patch makes some spacing changes to the address display include in
order to prevent address parts (e.g. city, state, zip, etc) from missing
spaces in between.

To test, apply the patch and locate or edit a patron record to include
data in all main address fields.

- Check out to the patron and check the display of the address in the
  sidebar. Confirm that the spacing is correct.
- Test with all variations of the AddressFormat system preference.
- Test with and without the use of road types (Administration ->
  Authorized values -> ROADTYPE) and street numbers.

Sponsored-by: Athens County Public Libraries
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-11 15:26:38 -06:00
Jonathan Druart 5b797b2560
Bug 40337: Do not set checkprevcheckout to an empty string when importing patrons
We must remove it so that it will be set as the default value defined
at the DBMS level

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-10 17:34:04 -06:00
Jonathan Druart b4a561c133
Bug 40337: Handle enum in Koha::Patron->anonymize
We need to reset to the default value. We might have a problem (later)
if it's NOT NULL and no default is set, which is not handled by this
patch. But the situation does not seem to exist yet anyway.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-10 17:33:56 -06:00
Lucas Gass 0b75333b5b
Bug 40337: DBRev 25.06.00.003
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-10 11:28:16 -06:00
Jonathan Druart 51473dfd36
Bug 40337: DBIC schema changes
Signed-off-by: Eric Garcia <cubingguy714@gmail.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-10 09:43:27 -06:00
Jonathan Druart 3c3cc6622c
Bug 40337: Define checkprevcheckout as ENUM
On bug 40178 and bug 40179 we defined checkprevcheckout attributes as
ENUM at the REST API level, so the specs prevent us from inserting
values that are no yes, no, inherit in DB.
However the DB schema didn't have that constraint.
This has been caught by some tests that were failing:
eg. t/db_dependent/selenium/patrons_search.t with "Not in enum list: yes, no, inherit."

Test plan:
Apply this patch, run `updatedatabase`, `dbic` and `restart_all`
`prove t/db_dependent/selenium/patrons_search.t` should now pass.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-10 09:43:27 -06:00
Lucas Gass 87cbdf8e37
Bug 40170: Update yarn.lock
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-10 09:43:26 -06:00
Lucas Gass a827e5dbe3
Revert "Bug 36586: Define self-checkin timer using Javascript class"
This reverts commit ff403dcfb3.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-10 09:43:18 -06:00
Jonathan Druart 958ff7427c
Bug 40179: Add maxLength to patron_category spec file
Test plan:
Apply the "tests" patch first
  prove xt/api.t
=> fail
Apply this patch
=> pass

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:08 -06:00
Jonathan Druart 6b50274e5a
Bug 40179: Adjust tests
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:08 -06:00
Jonathan Druart 8f6b15f4bb
Bug 40178: Add maxLength to patron spec file
Test plan:
Apply the "tests" patch first
  prove xt/api.t
=> fail
Apply this patch
=> pass

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:07 -06:00
Jonathan Druart 05fef548bc
Bug 40178: Adjust tests
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:07 -06:00
Jonathan Druart 25dfe5e5da
Bug 40177: Add maxLength to library spec file
Test plan:
Apply the "tests" patch first
  prove xt/api.t
=> fail
Apply this patch
=> pass

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:06 -06:00
Jonathan Druart c1f3592491
Bug 40177: Adjust tests
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:06 -06:00
Jonathan Druart f461b4d419
Bug 40176: Add maxLength to item spec file
Test plan:
Apply the "tests" patch first
  prove xt/api.t
=> fail
Apply this patch
=> pass

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:05 -06:00
Jonathan Druart 40ad33852d
Bug 40176: Add tests
This patch adds a new subtest to xt/api.t
It ensures that maxLength will appear in the rest api spec file when
there is a size constraint at the DB level

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:05 -06:00
Owen Leonard 22cd54f1a4
Bug 39448: Layout improvement for search filter administration
This patch makes a few minor changes to the search filter administration
template.

To test, apply the patch and rebuild the staff interface CSS.

- If the SavedSearchFilters system preference is not enabled, go to
  Administration -> System preferences and enable it.
- Perform a catalog search.
  - From the search results page, click "Save as search filter" at the
    top of the results.
  - Save your filter.
- Go to Administration -> Search filters.
  - The table of filters should be wrapped in a "page-section" div with
    the heading above it.
  - In the "Actions" column the buttons should be aligned in a row with
    space between each.
  - Click "Edit filter"
    - In the modal the form fields should be well laid out.

Sponsored-by: Athens County Public Libraries
Signed-off-by: Felicie <felicie.thiery@biblibre.com>
Signed-off-by: Lisette Scheer <lisette@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:04 -06:00
Jonathan Druart f8fd672602
Bug 40317: Remove warnings from Auth_with_shibboleth.t output
t/db_dependent/Auth_with_shibboleth.t .. 1/5 GetPreparedLetter called at t/db_dependent/Auth_with_shibboleth.t line 73.
EnqueueLetter called at t/db_dependent/Auth_with_shibboleth.t line 80.
SendQueuedMessages called with message_id: 42 at t/db_dependent/Auth_with_shibboleth.t line 90.

Not sure what exactly is going on here, but warnings_are is not supposed
to show the warnings in the output. I think it's because of the logger
mock. A workaround is to use a variable we increment then compare to see
if we reach the sub.

Test plan:
  % prove t/db_dependent/Auth_with_shibboleth.t
should return green without warnings

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-07-08 15:42:04 -06:00