Commit Graph

61295 Commits

Author SHA1 Message Date
Kyle M Hall 4310aebeda
Bug 41311: Add ability for SIP to send patron home library ( branchcode ) in AO field
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>
2026-04-23 16:04:07 -06:00
Victor Grousset/tuxayo db1ab86bfe
Bug 39789: (QA follow-up) fix redundancy in koha-conf.xml
Some of the changes were already in the file.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:06 -06:00
Kyle M Hall 48783f4084
Bug 39789: Update koha-conf.xml
Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:06 -06:00
Kyle M Hall ad18006dfc
Bug 39789: Add unit tests
Test Plan:
1) Apply this patch set
2) prove t/Koha/Middleware/RealIP.t

Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:05 -06:00
Kyle M Hall 1c6f0b2eae
Bug 39789: Display the trusted proxy IP addresses and reverse proxy IP header on about page
Signed-off-by: Lin Wei Li <lin-wei.li@inLibro.com>
Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:05 -06:00
Kyle M Hall 13a4b44bc9
Bug 39789: Add ability to specify an alternative header to X-Forwarded-For for finding the real ip address
Some services ( such as CloudFlare ) use alternative heads to X-Forwarded-For. Koha should be able to use a custom header instead of X-Forwarded-For if needed.

This patch updates the feature to allow both the custom header and X-Forwarded-For to work harmoniously

For example, CloudFlare has it's own custom header.
This patch allows a site to be configured for Cloudflare's proxy before the proxy is enabled.

Test Plan:
1) prove t/Koha/Middleware/RealIP.t

Signed-off-by: Lin Wei Li <lin-wei.li@inLibro.com>
Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:04 -06:00
Jan Kissig 0a8182ba02
Bug 42289: (QA follow-up): Fix unreachable variable
This patch fixes the unreachable definition of 'let content'.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:03 -06:00
Jan Kissig b873dc56c0
Bug 42289: (QA follow-up): Split JS to seperate TT and tidy
This seperatetes the script into 2 parts in letter.tt. Auto tidy.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:03 -06:00
Jan Kissig e4b7b002ba
Bug 42289: (QA follow up) Remove perl comment and tidy
This changes a perl comment to a js comment. Auto tidy of JS

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:02 -06:00
Jonathan Druart a532a346bd
Bug 42289: Tidy all script tags - tools (auto tidy)
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
Signed-off-by: Jan Kissig <bibliothek@th-wildau.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:02 -06:00
Jonathan Druart 387a91eb58
Bug 42289: Tidy all script tags - tools
In order to tidy all the script tags of the .tt files we isolate the
interpolation of Template::Toolkit variables in a separate script tag.

This patch focuses on the tools module.

The 2 main changes are in the following files:
* additional-contents.tt
* stage-marc-import.tt

Trivial changes.

Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
Signed-off-by: Jan Kissig <bibliothek@th-wildau.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:01 -06:00
Lucas Gass 281551d741
Bug 40633: DBRev 25.12.00.048
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:01 -06:00
Martin Renvoize 995bfe2083
Bug 40633: Open fixed-length field helpers from the advanced editor
The advanced cataloging editor lets users hand-edit MARC records as
text but offers no equivalent of the basic editor's value_builder
popups for the fixed-length fields (Leader, 006, 007 and 008).
Catalogers have to type those byte strings by hand, which is error
prone.

This patch wires the 'open_helper_plugin' shortcut (added in the
preceding atomic update) to a new handler in the advanced editor
which:

 - inspects the line under the cursor;
 - if it is a Leader, 006, 007 or 008 control field, opens the
   corresponding marc21_*.pl plugin from cataloguing/value_builder/
   in a popup window, pre-populated with the current value;
 - splices the plugin's returned value back into the CodeMirror buffer
   when the popup closes.

The plugin templates are reused unchanged: a hidden
<input id="adv_editor_fixedfield_buffer"> on the editor page satisfies
the existing report() callback contract, and the editor polls
window.closed to detect submission. The 008 plugin is given the
current Leader value via &leader= so its material-type byte map
matches the record being edited.

The shortcut description is added to keyboard_shortcuts.inc so it
appears with a meaningful label in the in-editor "show shortcuts"
popover and in Administration > Keyboard shortcuts.

Test plan:
1. Apply this patch on top of the preceding atomic update.
2. Visit Administration > Keyboard shortcuts and confirm
   'open_helper_plugin' is listed with description "Open fixed-length
   field helper (Leader, 006, 007, 008)" and that the key combination
   can be edited.
3. Open the advanced cataloging editor on any record:
   a. Place the cursor on the 000 (Leader) line and press Shift-Ctrl-H.
      The marc21_leader popup should open with the current Leader
      value. Make a change, click OK, and confirm the Leader line
      updates in the editor and is marked modified in the gutter.
   b. Repeat for 006, 007 and 008. For 008, change the Leader's
      material-type byte first and confirm the 008 popup form adapts.
   c. Place the cursor on a 245 (or any non-fixed-length field) line
      and press Shift-Ctrl-H. Nothing should happen.
   d. Open a popup, then close it without saving. The editor line
      should remain unchanged.
4. Save the record and confirm the new fixed-field values round-trip
   correctly when the record is reloaded.
5. Confirm the basic editor's value_builder popups still work
   unchanged on Leader / 006 / 007 / 008.

Sponsored-by: Main Library Alliance <https://www.mainlib.org/>
Signed-off-by: Jeanne Mauriello <jeanne.mauriello@mainlib.org>
Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:04:00 -06:00
Martin Renvoize 37ad6039c6
Bug 40633: Add new keyboard shortcut for the fixed-length field helper
This adds a new 'open_helper_plugin' keyboard shortcut to the
keyboard_shortcuts table, used by the advanced cataloging editor to
open the value_builder popup for the Leader, 006, 007 and 008 fixed
length fields. The default key combination is Shift-Ctrl-H ("Helper")
and is rebindable from Administration > Keyboard shortcuts. The
behaviour bound to this shortcut is added in a follow-up patch.

Test plan:
1. Apply this patch and run installer/data/mysql/updatedatabase.pl in
   KTD.
2. Run:
     SELECT * FROM keyboard_shortcuts
      WHERE shortcut_name = 'open_helper_plugin';
   Confirm a row exists with shortcut_keys = 'Shift-Ctrl-H'.
3. Re-run updatedatabase.pl and confirm the atomic update is idempotent
   (no error, no duplicate row).
4. On a fresh install (or by re-loading mandatory/keyboard_shortcuts.sql
   on an empty table) confirm the same row is created.

Sponsored-by: Main Library Alliance <https://www.mainlib.org/>
Signed-off-by: Jeanne Mauriello <jeanne.mauriello@mainlib.org>
Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 16:03:53 -06:00
Kabooshki f019e490f9
Bug 42106: Spelling: Failed to load plugin url: {0}
This patch fixes the url casing on both translation messages from "url"
to "URL" for better grammatical accuracy of the acronym.

Error not mentioned in original Bug Message hence replication is
undefined.

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:09 -06:00
Tom Yates dc644f0095
Bug 41516: Terminology: Change cardnumber to card number for system preference descriptions
Following the terminology guidelines, the descriptions for AutoSwitchPatron,
CardnumberLog and SelfCheckoutByLogin have been updated to use 'card number'
with a space.

Test plan:
1. Review the descriptions for the system preferences and note that 'cardnumber'
   is used, instead of 'card number' for:
   - AutoSwitchPatron
   - CardnumberLog
   - SelfCheckoutByLogin
2. Apply the patch.
3. Repeat step 1, and note that the system preferences now use 'card number'.

Signed-off-by: Tom Yates <tom@hire-tom.co.uk>
Signed-off-by: Andrew Auld <andrew.auld@openfifth.co.uk>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:08 -06:00
Jonathan Druart be25cebf33
Bug 42423: Add a Cypress test
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:08 -06:00
David Cook 57060de3c8
Bug 42423: Fix patron header search
This patch fixes the patron header search, so that you can do
patron searches from the header, but empty patron searches
are prevented and show a tooltip.

Test plan:
0. DO NOT APPLY THE PATCH YET
1. Log into the staff interface and try to search for anything
in the "Search patrons" header search
2. Note that nothing happens at all no matter how much you click

3. Apply the patch
4. Refresh the browser page
5. Try to search for anything in the "Seearch patrons" header search
6. Note that it performs the search
7. Empty out the input box and hit Enter or the search button
8. Note that a tooltip appears saying "Please enter a card number or name"

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:07 -06:00
Lucas Gass a9d5f7d453
Bug 42156: DBRev 25.12.00.047
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:07 -06:00
Martin Renvoize 77237445b1
Bug 42156: (QA follow-up) Expand unit tests for recovery and skip paths
The original test only verified that a warning was emitted when a corrupt
authority record was encountered; it did not assert that get_matches
returned the recovered record, that an unrecoverable record was dropped,
or that a stale index pointing at a deleted authid was handled.

This patch turns the 'get_matches bad record test' subtest into a full
exercise of the three code paths introduced on this bug:

 1 - Recoverable: a record with stray non-XML characters is repaired by
     record_strip_nonxml and returned in the match list with the expected
     authid.
 2 - Unrecoverable: record_strip_nonxml is mocked to return undef; the
     parse warning still fires but the record is silently dropped from
     the result set (no die).
 3 - Stale search index: search_auth_compat returns an authid that does
     not exist in auth_header; get_matches no longer dies and returns an
     empty result.

The MarcMatcher fixture is given an explicit threshold of 1 so the 1000
score on the authority matchpoint always passes and matches are returned.

Test plan:
 1 - prove t/db_dependent/Matcher.t
 2 - All subtests pass including the expanded 'get_matches bad record test'.

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:06 -06:00
Martin Renvoize 3a3797f3f5
Bug 42156: (QA follow-up) Register the new 'authid' search field on upgrade
Adding an entry to admin/searchengine/elasticsearch/mappings.yaml is only
picked up by fresh installs or when an administrator explicitly resets the
search mappings (rebuild_elasticsearch.pl -r). Existing installations would
otherwise never see the new 'authid' index in the admin UI nor have it
available as a matching index until they ran the reset.

This atomicupdate inserts:
 - a search_field row for 'authid' (type 'stdno', staff_client + opac on)
 - search_marc_map rows for authorities/marc21/001 and authorities/unimarc/001
   (INSERT IGNORE - the rows are shared with 'local-number' and usually
   already exist)
 - search_marc_to_field rows linking those MARC maps to the new field with
   sort on, matching mappings.yaml

It is a no-op if 'authid' is already present.

Administrators still need to rebuild the Elasticsearch index for the new
field to become queryable - this is noted with say_info at the end.

Test plan:
 1 - On an existing instance without the patch: note there is no 'authid'
     field under Administration > Search engine configuration (Elasticsearch)
     for authorities.
 2 - Apply the whole patchset.
 3 - perl installer/data/mysql/updatedatabase.pl
 4 - Re-check the search engine configuration: 'authid' appears for the
     authorities index, mapped to 001 for both MARC flavours.
 5 - Run the update again - confirm the "already exists, skipping" warning.
 6 - misc/search_tools/rebuild_elasticsearch.pl -r -v -a
 7 - Confirm a matching rule using index 'authid' now works.

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:06 -06:00
Martin Renvoize 9f1ae44cc7
Bug 42156: (QA follow-up) Correct POD typos and demote private helpers
The previous POD follow-up added headings for the private helper subs but
introduced several typos and used =head2, which puts them at the same level
as the public API in the generated docs. This patch:

 - Fixes typos: matchpint, pionts, march matcher, mathcpoints, etc.
 - Clarifies a couple of descriptions.
 - Demotes each private helper from =head2 to =head3 so they render as
   implementation notes rather than peers of the public methods, matching
   the pattern used in Koha::Authority's "Internal methods" block.

Helper subs remain interleaved with the public API in source order to keep
the diff minimal; a wholesale move into a dedicated "Internal functions"
section would be a larger refactor outside the scope of this bug.

Test plan:
 1 - perldoc C4/Matcher.pm
 2 - Confirm no typos are rendered and the private helpers appear one level
     deeper than the public methods.

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:05 -06:00
Martin Renvoize 9d2b2c2493
Bug 42156: (QA follow-up) Guard against missing or unparseable authority records
The previous defensive block still dereferenced $target_auth unconditionally
when attempting to recover via record_strip_nonxml. If Koha::Authorities->find
returned undef (stale search index pointing at a deleted authid) the eval
around ->record would catch the first failure, but the recovery call on the
next line would die uncaught.

This patch:
 - Skips silently when the authid returned by the search engine no longer
   exists in the database, so get_matches cannot die on a stale index.
 - Wraps record_strip_nonxml in eval so an exception there is also handled
   and the record is simply skipped - matching the stated intent of the
   "skip when not possible" path.

Test plan:
 1 - Run t/db_dependent/Matcher.t - still passes.
 2 - Simulate a stale index: mock search_auth_compat to return an authid
     that is not present in auth_header. Confirm get_matches no longer dies
     and returns without error.

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:05 -06:00
Nick Clemens 94a9712745
Bug 42156: (QA follow-up) Missing POD
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>
2026-04-23 09:25:04 -06:00
Nick Clemens f141799531
Bug 42156: Unit tests
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>
2026-04-23 09:25:04 -06:00
Nick Clemens c5adbe0818
Bug 42156: Attempt to repair corrupted records and skip when not possible
When matching authorities we can die on a bad record, we should add protection against this
on top of bug 41843

To test:
 1 - Apply index patch and rebuild elastic
    perl misc/search_tools/rebuild_elasticsearch.pl -r -v
 2 - Make a new record matching rule
    threshold: 1000
    type: authority
    index: authid
    score: 1000
    tag: 001
 3 - Choose an authority record and corrupt it:
    sudo koha-mysql kohadev
    UPDATE auth_header SET marcxml = UpdateXML(marcxml, '//datafield[@tag="040"]/subfield[@code="c"]',CONCAT('<subfield code',CHAR(27),'="c">OSt</subfield>')) WHERE auth_header.authid=92;
 4 - View and save the record as marcxml
    http://localhost:8081/cgi-bin/koha/authorities/detail.pl?authid=92
 5 - Cataloging - stage marc records - authority/marcxml/no matching
 6 - Confirm it stages
 7 - Attempt to match using your new rule
 8 - Get an error parsing the marc
 9 - Apply patch, restart all
10 - Relaod the staged batch
11 - Attempt matching agaion
12 - Success!

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>
2026-04-23 09:25:03 -06:00
Nick Clemens 88cfb35e5e
Bug 42156: Add a stdno index for authid
In order to allow matching on authid we need a search index with a ci_raw
field

local-number is indexed as a number, and needed that way for sorting. This adds
a stdno version of 001 as authid

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>
2026-04-23 09:25:03 -06:00
David Nind ec88f94c42
Bug 39748: (follow-up) Update number of tests
Tests were failing as the number of tests was incorrect
as bug 42085 added additional tests.

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

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:02 -06:00
David Cook 076c5bce8d
Bug 39748: Fix Koha::Patron->is_expired to calculate using floating timezone
This patch updates Koha::Patron->is_expired so that it uses the floating
timezone for its datemath calculation.

Test plan:
0. Apply only the first patch including the unit test
1. prove -v t/db_dependent/Koha/ILL/Request.t \
        t/db_dependent/Koha/Patron/Restriction.t \
        t/db_dependent/Koha/Patrons.t \
        t/db_dependent/Koha/AdditionalContents.t \
        t/db_dependent/ILSDI_Services.t
2. Note that the unit tests fail
3. Apply the patch including the fix
4. prove -v t/db_dependent/Koha/ILL/Request.t \
        t/db_dependent/Koha/Patron/Restriction.t \
        t/db_dependent/Koha/Patrons.t \
        t/db_dependent/Koha/AdditionalContents.t \
        t/db_dependent/ILSDI_Services.t
5. Note that all unit tests pass now

6. Bonus points:
- Add the following to the top of /etc/koha/sites/kohadev/plack.psgi
before Modern::Perl:
use Test::MockTime;
BEGIN {
    Test::MockTime::set_absolute_time('1745580600');
}

- koha-plack --restart kohadev
- Look at the About page and do some circulation
- Without the patches, you'll get an internal server error
- With the patches, it'll just work

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

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:02 -06:00
David Cook e0859f245f
Bug 39748: Add unit test
Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:01 -06:00
Jonathan Druart 0fb44d7ab5
Bug 27826: Add a Cypress test
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:01 -06:00
Tadeusz „tadzik” Sośnierz ec938d2a1d
Bug 27826: Escape regexes when checking for new items in sco-main.tt
Test plan:

1. In KTD, go to cgi-bin/koha/catalogue/detail.pl?biblionumber=11
2. Edit the item, set its biblionumber to "+12345"
3. Go to self-checkout at /cgi-bin/koha/sco/sco-main.pl, log in (42:koha)
4. Enter "+12345" into the "Scan a new item" input field, submit
5. Observe a crash
6. Apply patch
7. Refresh the page, observe no patch
8. Renew item, refresh a few times, to observe the "NEW" badge working as expected

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

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:00 -06:00
Owen Leonard b56148425b
Bug 41964: Upgrade the Multiple Select plugin in the staff interface to 2.3.1
This patch upgrades the Multiple Select plugin in the staff interface.
It was last updated in 2023.

The patch also moves some CSS from preferences.css into
staff-global.scss because it is globally applicable.

To test, apply the patch and rebuild the staff interface CSS. Clear your
browser cache if necessary. Test various pages which use the plugin to
confirm that it still works correctly:

- Administration -> Patron categories -> New -> Block expired patron
  OPAC actions
- Administration -> System preferences: Many, including
  ApplyFrameworkDefaults, MarkLostItemsAsReturned,
  decreaseLoanHighHoldsIgnoreStatuses, CoceProviders,
  OPACShowSavings, etc.
- ILL requests -> Filter by status (in the sidebar)

- Confirm that the "About" page shows the correct updated version
  number.

Sponsored-by: Athens County Public Libraries
Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:25:00 -06:00
Casey Conlin d09c65d047
Bug 42359: Fix Guided.t update_sql test input
The test was feeding update_sql object field names instead of the parameter names it actually expects.
This let savedsql get cleared during the update.
The test was updated to pass the expected inputs so it still checks cache_expiry without creating the warning in the delete log path.

Test plan:
1. Confirm the issue by enabling the ReportsLog preference in Koha UI andin ktd shell running prove t/db_dependent/Reports/Guided.t
2. Apply the patch.
3. Run the tests again with prove t/db_dependent/Reports/Guided.t
4. The tests should pass.
5. Disable the preference and run again.
6. Tests should pass.
7. Sign off if steps above check out.

Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:59 -06:00
Andreas Roussos d88274881e
Bug 21453: Copy data to the correct subfields when linking authorities with authorities
When using the authority finder plugin from within Koha's
Authorities module, you can pick an entry from the 'Special
relationship:' dropdown menu in order to set the relationship
between authorities.

The problem is that in UNIMARC setups, when you click on
'Choose' to select an authority, it does not populate
subfields $3 (Authority Record Number) and $5 (Tracing
Control), which are required for authority linking and
authority hierarchies to work properly.

In MARC21, all authority data is correctly copied over.

This is due to hardcoded subfield values which are
MARC21-specific in blinddetail-biblio-search{.pl,.tt}.

This patch fixes that by checking the value of the
'marcflavour' syspref, and then setting the correct
subfields to copy the authority data to.

Test plan (involves testing in both a MARC21 and a UNIMARC instance):

0) [PREREQUISITES in order for the authority finder plugin to come up
    when testing in a UNIMARC instance]
   a) You must have at least one authority type besides the 'Default'.
   b) View the MARC structure of the 'Default' auth type, then click
      on 'Actions->Subfields' for tag 500; click on 'Edit subfields'.
      Select the subfield 'a' tab, then pick an auth type from the
      'Thesaurus:' dropdown menu; click 'Save changes' at the top.

1) In the Staff client, go to Authorities, then click 'New Authority'
   and pick the 'Default' authority type.

2) When the authority editor comes up, go to tag 500 and expand it.

3) Click on the Tag editor icon next to subfield $a.

4) When the authority finder comes up, search for an authority, pick
   a relator code from the 'Special relationship:' dropdown, and then
   click on the 'Choose' button for one of the authorities you found.

5) In MARC21: all subfields are populated correctly.
   In UNIMARC: notice how subfields $3 and $5 are *not* populated.

6) Apply the patch.

7) Repeat steps 3) and 4) above.
   In MARC21: all subfields are populated correctly, as before.
   In UNIMARC: both the relator code and the authority id are copied
               over along with any other subfields that may exist.

8) To ensure that authority linking in the Cataloging module works
   as before, launch the bibliographic record editor, find a MARC
   tag that allows you to search for an authority, and link it.
   In MARC21: all authority data is copied over (authid in $9).
   In UNIMARC: all authority data is copied over (authid in $9).

   NOTE: after linking, you may have to expand the MARC tag you
         chose so that subfield $9 becomes visible.

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

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:58 -06:00
Saiful Amin 1f325d5799
Bug 41353: koha-dump failing on mysqldump PROCESS privileges
Problem:
Starting from MySQL 5.7.31 and MySQL 8.0.20, mysqldump requires the
PROCESS privilege to access tablespace metadata by default. Without
this privilege, backup operations fail with permission errors.

Solution:
Add the --no-tablespaces flag to the dbflag variable. This prevents
mysqldump from attempting to access tablespace metadata, allowing
backups to complete successfully without requiring the PROCESS privilege.

Test Plan:
  1. Set up a MySQL instance (5.7.31+ or 8.0.20+) without PROCESS privilege for the Koha database user
  2. Run the koha-dump script for a Koha instance:
     sudo koha-dump kohadev
  3. Notice the backup fails with a PROCESS privilege error
  4. Apply the patch
  5. Copy debian/scripts/koha-dump to /usr/sbin/koha-dump
  6. Repeat step 2
  7. Notice the backup now completes successfully without permission errors
  8. Test restoring the dump to ensure it's valid:
     zcat /var/spool/koha/kohadev/kohadev-<date>.sql.gz | tail
  9. Sign-off

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

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:58 -06:00
Caroline Cyr La Rose b74f544231
Bug 42309: JS error when there are no cash registers
This patch corrects a JavaScript error that appears on the cash
registers page when there are no cash registers yet.

To test :
BEFORE applying the patch
0. Make sure there are no cash registers in the database (reset_all if using ktd, or delete them)

1. Enable UseCashRegisters
   1.1. Go to Administration > System preferences
   1.2. Search for UseCashRegisters
   1.3. Set UseCashRegisters to Use
   1.4. Click Save all Accounting preferences

2. Open the browser developer tools (F12) and select the Console tab

3. Go to Administration > Cash registers
   --> Uncaught TypeError: can't access property "DataTable", crtable is undefined

4. Apply the patch

5. Refresh the cash registers page
   --> The error is gone!

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Brendan Lawlor <blawlor@clamsnet.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:57 -06:00
Jonathan Druart da121583a4
Bug 42277: Remove JS error when viewing a subscription
If no orders exist yet, there is a JS error in the console:
Uncaught TypeError: can't access property "DataTable", table is
undefined

Test plan:
0. Do no apply this patch
1. Create a new subscription and go to the detail view
2. Open the console and notice the JS error
3. Apply this patch
4. Confirm that the JS error is gone
5. Create an order from this subscription
6. Confirm that the orders table is displayed

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Brendan Lawlor <blawlor@clamsnet.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:57 -06:00
Jonathan Druart be9efe452d
Bug 42341: Fix translatability of 'Print label' on staff detail page
To test:
- Activate SpineLabelShowPrintOnBibDetails
- Install any translation. For ktd:
  sudo koha-translate --install de-DE --dev kohadev
- Activate translation with StaffInterfaceLanguages
- Find a bibliographic record with items and callnumbers in staff
- Verify the "Print label" is translated when switching between languages

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Brendan Lawlor <blawlor@clamsnet.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:56 -06:00
David Cook 213693ed4f
Bug 42163: (follow-up) fix plugin wrapper menus, plugins-home.tt, and plugins-upload.tt
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:56 -06:00
Lisette Scheer 63695f05d5
Bug 42163: Allow plugin wrapper to load VueJS
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:55 -06:00
Jonathan Druart 48b0be1f52
Bug 42003: Remove !important from css files
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:55 -06:00
Jonathan Druart 5c38cc7d7c
Bug 42003: DT - Update css and js files to 2.3.7
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:54 -06:00
Jonathan Druart b240cff51d
Bug 40816: Ignore 'ResizeObserver loop limit exceeded'
I have NO idea how to fix this error. I don't see it on the Koha UI,
neither using Cypress UI.

It seems safe for now to ignore this error (The internet says so).

Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:54 -06:00
Jonathan Druart 237d3deecf
Bug 40816: Fix Auth/csrf.ts
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:53 -06:00
Jonathan Druart 004c2419a9
Bug 40816: Fix a failing Selenium test
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:53 -06:00
Owen Leonard 3510157168
Bug 40816: (follow-up) Standardize sort icon alignment
DataTables wants to change the alignment of the sorting icons when it
detects the column contents as numeric or date. This patch overrides
that.

Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:52 -06:00
Owen Leonard 6fa09e9e9c
Bug 40816: (follow-up) CSS updates for table sorting icons
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:52 -06:00
Jonathan Druart 69ce43ef06
Bug 40816: Adjust about page
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:51 -06:00
Jonathan Druart ef69e07236
Bug 40816: Remove !important from css files - OPAC
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-23 09:24:50 -06:00