Commit Graph

59291 Commits

Author SHA1 Message Date
Jonathan Druart 67e04b039a
Bug 40320: (bug 40319 follow-up) Add Cypress tests
Test plan:
Make sure the display of city, state and zipcode is the same as before
the patch
Confirm that the new Cypress tests pass

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

Amended-by: Jonathan Druart
Added $raw filter to [% ", " %]

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:29 -06:00
Rachel A-M 15c51ce4b2
Bug 36518: Add IDs to sections (fieldsets) on the item search form
This patch adds IDs to the fieldsets on the staff interface search form
(Search > Item search), to make CSS customization easier.

Test plan:
1. Go to Search > Item search in the staff interface.
2. Right click: Inspect(Q)
3. Use ithe Search HTML bar to search for fieldset IDs:
   - "librarylocation"
   - "access_and_condition"
   - "barcodesearch"
   - "callnumber_checkouts"

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-09-29 14:02:28 -06:00
Matt Blenkinsop 23fe21df61
Bug 40868: Restore full list of permissions to the vendors app
This patch adjusts the logic to consider all permissions and not just the top level flags

Test plan:
1) Create or edit a user to have all acquisitions permissions except one (not relevant which one, any will do)
2) Log into the staff interface and go to acquisitions > vendors and click the vendor in the table
3) The left menu will be missing everything except invoices
4) Apply patch and restart_all
5) Refresh the page, the menu should now be populated

Signed-off-by: Michaela Sieber <michaela.sieber@kit.edu>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:28 -06:00
Pedro Amorim 1eddff89a0
Bug 40005: Add accessurl to manage ILL request page
Test plan:
1) Enable ILLModule
2) Create a new ILL request, visit:
   <staff_url>/cgi-bin/koha/ill/ill-requests.pl?method=create&backend=Standard
3) Add 'type', cardnumber '42' and any library. Click 'Create'.
4) You are now on the ILL manage request page.
5) Some backends may use the accessurl to store the URL of a document, run the following SQL:
   UPDATE illrequests SET accessurl = 'https://koha-community.org/';
6) Refresh the page from 4) or visit the ILL manage request page for that request.
7) Verify the accessurl is now shown.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lisette Scheer <lisette@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:27 -06:00
Pedro Amorim f6da181636
Bug 39918: Add unauthenticated details to edit request screen
Test plan, before applying patch:
1) Enable ILLModule and ILLOpacUnauthenticatedRequest
2) Log out, create a new unauthenticated request from the OPAC, visit:
   <opac_url>/cgi-bin/koha/opac-illrequests.pl?backend=Standard&op=add_form
3) Login to Staff again, edit the request. (If ID is 1) visit:
   <staff_url>/cgi-bin/koha/ill/ill-requests.pl?op=illview&illrequest_id=1
4) Click 'Edit request'. Notice the unauthenticated data does not show.
5) Apply patch. Refresh the page. Notice the unauthenticated data now
   shows.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Lisette Scheer <lisette@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:27 -06:00
Lucas Gass 38ab32230b
Bug 39145: DBRev 25.06.00.021
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:26 -06:00
Marcel de Rooy ce787a272d
Bug 39145: (follow-up) Tidy files
No test plan (just result of perltidy).

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
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-09-29 14:02:26 -06:00
Marcel de Rooy d8ca65d37b
Bug 39145: Add unit tests
Test plan:
Run t/db_dependent/Koha/Virtualshelves.t

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
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-09-29 14:02:25 -06:00
Marcel de Rooy 039c4b7e11
Bug 39145: Apply new pref values to ->disown_or_delete
Test plan:
Set ListOwnershipUponPatronDeletion to 'change owner of
these lists'.
Create a public list1 and a private list2 for patron A.
Enable sharing lists and share list2 with another patron.
Remove patron A.
Check that list1 and list2 are transferred.
Set  ListOwnershipUponPatronDeletion to 'change owner of
public lists, delete shared lists'.
Create a public list3 and a private list4 for patron B.
Share list4 with another patron.
Remove patron B.
Check that list3 is transferred and list4 is deleted.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
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-09-29 14:02:25 -06:00
Marcel de Rooy afd6e28c3c
Bug 39145: Add option to transfer only public lists to preference
Test plan:
Run updatedatabase.pl
Check ListOwnershipUponPatronDeletion on Patron preferences tab.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
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-09-29 14:02:24 -06:00
Nick Clemens 6f135d4392
Bug 28702: Reduce DB lookups in buildKohaItemsNamespace
This patch moves the prefetch to current_branchtransfers and uses the prefetched reserves
and transfers to reduce the number of lookups from the DB

We also don't fetch the specific current transfer, knowing we have current transfers is enough

To test:
1 - Perform a search on the OPAC
2 - Add the results to a list
3 - Load the list several times and use developer tools (F12) to view the time to load in the network tab
4 - Repeat a search several times and use developer tools (F12) to view the time to load in the network tab
5 - Record the times noted above
6 - Find or create a record with many items, biblionumber 3 in my example
7 - on the command line:
    export DBIC_TRACE=1
    perl -e 'use C4::XSLT; my $i = C4::XSLT::buildKohaItemsNamespace( 3 );'
    note the lookups in reserves and transfers
8 - Apply patch
9 - Repeat 7 and note less lookups
10 - Repeat the search and list view and compare times to before the patch
11 - prove -v t/db_dependent/XSLT.t

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:24 -06:00
Jonathan Druart c9af16546b
Bug 38936: Remove local WARN
We now have Test::NoWarnings

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:23 -06:00
Tomas Cohen Arazi 844c2c6209
Bug 38936: Use redirect_if_opac_suppressed() in opac-*detail.pl pages
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-09-29 14:02:23 -06:00
Tomas Cohen Arazi 7dc6af40f6
Bug 38936: Introduce C4::Output::redirect_if_opac_suppressed
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-09-29 14:02:22 -06:00
Tomas Cohen Arazi 248604d588
Bug 38936: 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-09-29 14:02:22 -06:00
Tomas Cohen Arazi 1b3e7cb296
Bug 39830: Add order claim object definition
This patch adds the required mapping in
`Koha::Acquisition::Order::Claim` and adds it's definition to the API
spec.

To test:
1. Apply the patches
2. Verify the mapping makes sense and conforms to the current style and
   API coding guidelines.
3. Run:
   $ ktd --shell
  k$ prove xt/api.t
=> SUCCESS: Tests pass
4. Sign off :-D

Signed-off-by: Emmi Takkinen <emmi.takkinen@koha-suomi.fi>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:21 -06:00
Pedro Amorim 03020b5794
Bug 40012: Add publisher input to Standard form
Test plan:
1) Enable ILLModule and apply patch
2) Visit OPAC and Staff UI create forms:
  <opac_url>/cgi-bin/koha/opac-illrequests.pl?method=create&backend=Standard
  <staff_ui>/cgi-bin/koha/ill/ill-requests.pl?method=create&backend=Standard
3) Notice the 'publisher' input is now presented
4) Add a new request with some value in 'publisher'
5) Confirm 'publisher' is saved correctly

Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:21 -06:00
Tomás Cohen Arazi aa20cb9346
Bug 40856: Optimize Standard backend metadata method with database-level filtering
This patch optimizes the metadata() method in the Standard ILL backend
to use database-level filtering instead of inefficient linear searches.

Performance improvement:
- Before: Load all attributes, then filter each with linear search
- After: Load only relevant attributes using database index

Test plan:
1. Apply patch
2. Run:
   $ ktd --shell
  k$ prove t/db_dependent/Koha/ILL/Backend/Standard.t
=> SUCCESS: Tests pass! Optimization maintains compatibility
3. Test ILL request metadata display:
   - View ILL request details
   - Verify metadata shows correctly
   - Check ignored fields are excluded
=> SUCCESS: Same functionality, better performance
4. Sign off :-D

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:20 -06:00
Tomás Cohen Arazi 633f84b57b
Bug 40856: Add unit tests for Standard backend metadata method
This patch adds comprehensive unit tests for the metadata() method in the
Standard ILL backend to establish baseline behavior before optimization.

The tests cover:
- Metadata structure (returns hashref)
- Included attributes (title, author, isbn, year, custom fields)
- Excluded attributes (ignored fields like requested_partners, type, etc.)
- Display name transformation (attribute types become display names)

Current behavior tested:
- metadata() filters out predefined ignore list attributes
- Uses linear search with grep for each attribute
- Transforms attribute types to display names (title -> Title)
- Custom fields get ucfirst transformation (custom_field -> Custom_field)
- Returns hashref with display names as keys

These tests document the current inefficient implementation and will
ensure the upcoming optimization maintains compatibility.

Test plan:
1. Apply patch
2. Run:
   $ ktd --shell
  k$ prove t/db_dependent/Koha/ILL/Backend/Standard.t
=> SUCCESS: Tests pass! Current metadata behavior documented
3. Tests establish baseline for upcoming optimization
4. Sign off :-D

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:20 -06:00
Janusz Kaczmarek ebc3df7692
Bug 39507: Make the MARC21 008 plugin more precise for MU
According to https://loc.gov/marc/bibliographic/bd008m.html, the content
of 008/24-29 and 008/30-31 fr Music (leader/6 = c, d, i, or j) is made
of one character codes (as it is the case for 008/24-27 for Books).
Now, in Koha 008/24-29 and 008/30-31 are input fields with no
possibility to chose the code from a list. This could (and should)
be improved.

Test plan:
==========
1. Open a standard biblio editor, chose the plugin for 008 field,
   change Type of Material to MU - Music. See that 24-29 and 30-31
   (Accompanying matter and Literary text for sound recordings )are
   multi character input fields.
2. Apply the patch ; restart_all.
3. Repeat p. 1. See that now 24-29 and 30-31 are split in a series
   of one-character drop-down menus.

BTW a link to a list of codes for 'Form of composition' (008/18-19)
has been also added.

Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:19 -06:00
Lucas Gass 09c3ae4c86
Bug 38330: DBRev 25.06.00.020
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:19 -06:00
David Cook 78109295f1
Bug 38330: (QA follow-up) Fix WHERE clause in SQL update and re-word warning
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:18 -06:00
David Cook e4822d590c
Bug 38330: (QA follow-up) Fix SQL syntax error
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:18 -06:00
Martin Renvoize fdfaeda9fc
Bug 38330: (QA follow-up) Add index to opac_suppressed
As suggested by David, this one adds an index on the new column

Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:17 -06:00
Martin Renvoize 393c9fc2c8
Bug 38330: (QA follow-up) Improve resilience of DB update
David considered using boolean, but this would catch 'no' and 0 as
truthy.  I instead look for common values here more explicitly.

Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:17 -06:00
Martin Renvoize 354dbc9649
Bug 38330: (QA follow-up) Correction to field extaction
As pointed out by David.. it's the 942 not the 952 we have this data in.

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:16 -06:00
Martin Renvoize 9173aa53b9
Bug 38330: (QA follow-up) Add population of opac_suppressed from biblio_metadata
This patch updates the database update to populate the new
opac_suppressed field in the bilios table using the data in the
biblio_metadata table.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:16 -06:00
Martin Renvoize de3f1abae8
Bug 38330: (QA follow-up) Remove use of metadata_extractor
We had a local method for getting opac_suppressed in Koha::Biblio which
relied on extracting from the MARC record.  Now that we have an
opac_suppressed field in the Biblio table, we no longer need this
wrapper method.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:15 -06:00
Tomas Cohen Arazi 2fdf0d12d0
Bug 38330: Make sure biblio.opac_suppressed is populated/updated on save
This patchset adds a new column to biblio/deletedbiblio for storing the
information about OPAC suppression for the record.

It works as any other framework-mapped attribute. It defaults to 0 (not
suppressed) and some sanitization is done on storing, because the DB
should only contain 0 or 1.

To test:
0. Have a couple records with 942$n set to suppress them.
1. Apply this patches
2. Run:
   $ ktd --shell
  k$ updatedatabase
=> SUCCESS: All good
3. Check the `opac_suppressed` column was added to both tables
4. Notice it tells you need to run `touch_all_biblios.pl`
5. Run:
  k$ koha-mysql kohadev
   > SELECT opac_suppressed,COUNT(opac_suppressed) FROM biblio GROUP BY opac_suppressed;
=> FAIL: There are no records with the opac_suppressed flag set to 1
6. Run:
  k$ perl misc/maintenance/touch_all_biblios.pl -v
=> SUCCESS: No failures
7. Repeat 5
=> SUCCESS: Your couple records have the flag set. This means ModBiblio
is doing the right thing
8. Play with adding new records (suppressed and not)
=> SUCCESS: Suppression status is set correctly
9. Change the status to select records
=> SUCCESS: The DB column and the MARC are in sync!
10. Sign off :-D

Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:15 -06:00
Tomas Cohen Arazi c798f642bf
Bug 38330: Map to biblio.opac_suppressed on saving record
Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:14 -06:00
Tomas Cohen Arazi 07119ca256
Bug 38330: DBIC updates
Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:14 -06:00
Tomas Cohen Arazi b4c7f300f6
Bug 38330: DB changes
Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:13 -06:00
Pedro Amorim 51ca5e9ead
Bug 40024: Update requested_partners check
Test plan, k-t-d, don't apply patch:
1) Enable ILLModule
2) Install a backend that does not provide the 'get_requested_partners' capability, e.g. the libkey lending tool (IncDocs) backend plugin:
   https://github.com/openfifth/koha-ill-libkey-lending-tool/releases/tag/v2.0.3
3) Restart plack
   $ koha-plack --restart kohadev
4) Create a new IncDocs ILL request:
   <staff_url>/cgi-bin/koha/ill/ill-requests.pl?method=create&backend=IncDocs
5) Add a DOI '123', a cardnumber '42' and any library. Click 'Make request'.
6) You should now be on the 'Manage request' page. Notice there's a '(0)' after the status 'New request'. This happens because '_backend_capability' method returns '0' if the backend does not implement the capability. The template checks for 'length', and length of '0' is '1'.
7) Apply patch. Refresh the 'Manage request' page. Notice the '(0)' is no longer shown.

Additional testing, ensure no regression is added:
1) Edit the only ILL partner present in k-t-d:
   <staff_url>/cgi-bin/koha/members/memberentry.pl?op=edit_form&destination=circ&borrowernumber=16
2) Add a 'primary email'. Click 'Save'.
3) Do the same but for a Standard request:
   <staff_url>/cgi-bin/koha/ill/ill-requests.pl?method=create&backend=Standard
4) Add a type, a cardnumber '42' and any library. Click 'Make request'.
5) You should now be on the 'Manage request' page. Click 'Place request with partners'. Select the only one available 'FRL - Walker' and click 'Send email'.
6) Notice the status shows 'Requested from partners (<the_email_you_entered_in_step_2)'. This is the expected behavior and working as before.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:12 -06:00
Lucas Gass 280b23e0f9
Bug 40284: DRRev 25.06.00.019
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-29 14:02:12 -06:00
Marcel de Rooy 94edeab0f1
Bug 40284: Fix typo in data/marc21_field_006.xml
It reads position 12-18 and "six positions". Since the length is
18, the final position is 17.

Test plan:
Test 006 plugin in basic editor.
Switch type of material to CF (computer files).
Check length of 006 in editor when saving the 006 form.

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-09-29 14:02:11 -06:00
Marcel de Rooy 7c3d9c6f33
Bug 40284: Adjust maxlength for 005-007.
Test plan:
Run dbrev or new install.
Verify the maxlength for 005-007 in marc_subfield_structure.
Restart all. Check maxlength on input tags in the basic editor
for fields 005-007.

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-09-29 14:02:04 -06:00
Jonathan Druart f8138a73e8
Bug 40809: Also logs args in the console
For an unknown reason there are useful data that are displayed when
using console.log that we don't see when throwing the Error
This was the purpose of the previous patch (to have everything in
Error) but it didn't work. However we can keep it.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:37:07 -06:00
Jonathan Druart c481c6d081
Bug 40809: Display the whole error
Not only the first line

Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:37:06 -06:00
Jonathan Druart 187a9b3572
Bug 40809: Fail on DataTables 'warnings'
They are not in the warn buffer but log
DataTables warning: table id=DataTables_Table_0 - Requested unknown parameter 'status' for row 0, column 4. For more information about this error, please see https://datatables.net/tn/4

Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:37:05 -06:00
Jonathan Druart 4043e03cd6
Bug 40809: Fail Cypress tests on JS warnings
Currently JS warnings during Cypress tests are ignored.
This change intercepts console warnings in the browser and if any occurs
the test failed

This helps catch potential issues and ensures that warnings are not
silently ignored during test runs.

Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:37:05 -06:00
Jonathan Druart d996664353
Bug 40467: Remove t/00-deprecated.t
it only tests for the presence of "switch"

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:37:04 -06:00
Jonathan Druart 5cf9f58426
Bug 40434: Add tests
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:37:03 -06:00
Jonathan Druart a98fc14148
Bug 40434: Add maxLength to vendor spec file
Test plan:
Apply the "tests" patch first
  prove xt/api.t
=> fail
Apply this patch
=> pass

Signed-off-by: Matt Blenkinsop <matt.blenkinsop@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:37:02 -06:00
Marcel de Rooy f3d1f4a585
Bug 30915: Remove Context.Scalar calls from templates
Test plan:
git grep on "Context.Scalar"
Go to book with holdable items in staff catalogue detail. Check if
Place hold is seen in the horizontal toolbar above the title.
Place an article request with a patron. Check the article requests
tab on patron detail.
Same for the article requests tab on moremember (Patron details).

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:37:01 -06:00
Marcel de Rooy 2a7d8cddc2
Bug 40605: Copy sentence from opac-memberentry in opac-patron-consent
Test plan:
Enable PrivacyPolicyConsent; you can set it to Permissive.
Check if the OPAC user page (tab Consents) shows it correctly now.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:37:01 -06:00
Martin Renvoize 26f1f91a13
Bug 40625: Fix duplicate cashup records via POST/REDIRECT/GET pattern
The cashup functionality on both /pos/register.pl and /pos/registers.pl
pages was using GET requests via anchor tags, which could cause
duplicate cashup records when users refreshed the page after performing
a cashup.

This patch implements proper POST/REDIRECT/GET pattern with CSRF
protection:

1. Convert anchor tag buttons to proper HTML forms with submit buttons
2. Add CSRF token protection to all cashup operations
3. Change operation from 'cashup' to 'cud-cashup' for CSRF compliance
4. Implement redirects after successful cashup operations to prevent
   resubmission
5. Update JavaScript to populate form fields instead of href attributes

This ensures cashup operations follow HTTP semantics properly (POST for
state changes) and prevents duplicate submissions while maintaining the
existing user experience.

Test plan:
1. Apply patch and restart services
2. Go to Point of Sale > Cash registers
3. Click "Record cashup" on any register - should open modal
4. Click "Confirm" - should perform cashup and reload page
5. Refresh the page - should NOT create duplicate cashup record
6. Go to Point of Sale > Register for individual register
7. Click "Record cashup" - should open modal
8. Click "Confirm" - should perform cashup and reload page
9. Refresh the page - should NOT create duplicate cashup record
10. On registers page, try "Cashup all" button - should work correctly
11. Verify all existing functionality (modals, summaries) still works
12. Check browser developer tools - all requests should be POST for
    cashup operations

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-09-26 10:37:00 -06:00
Matt Blenkinsop a1fc548519
Bug 40593: Restore searchable columns to the suggestions table
This patch adds search functionality to the following columns: Suggester category, Patron reason, Library, Fund, Status.

Test plan:
1) Add some suggestions and navigate to the suggestions page
2) Use the search bar to search for data in any of the columns mentioned above.
3) It will not filter the results based on those columns
4) Apply patch and hard refresh
5) Use the search bar again, this time it should return results

Signed-off-by: Ludovic <ludovic.julien@inlibro.com>
Signed-off-by: Laura_Escamilla <laura.escamilla@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:36:59 -06:00
Tomás Cohen Arazi 9ca0e183b5
Bug 40820: (follow-up) es_indexer_daemon.pl missed on 34070
The es_indexer_daemon.pl was missing handling for the case where
Koha::BackgroundJob->connect() returns undef without throwing
an exception (which happens when connection fails silently).

This adds the missing warning for that case, matching the behavior
in background_jobs_worker.pl.

Test plan:
1. Set JobsNotificationMethod to 'STOMP'
2. Configure invalid STOMP settings that cause connect() to return undef
3. Run es_indexer_daemon.pl - should show connection warning
4. Verify jobs are still processed via database polling

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:36:58 -06:00
Tomás Cohen Arazi 4ff1f4ca9c
Bug 40820: Fix STOMP connection warnings when JobsNotificationMethod is 'polling'
The background job workers are showing STOMP/RabbitMQ connection error
warnings even when the JobsNotificationMethod system preference was set
to 'polling', which doesn't require a message broker connection.

This patch adds checks for the JobsNotificationMethod preference before
displaying connection warnings, so warnings only appear when STOMP is
actually expected to be available.

Changes:
- misc/workers/background_jobs_worker.pl: Check syspref before warning
- misc/workers/es_indexer_daemon.pl: Check syspref before warning

Test plan:
1. Set JobsNotificationMethod to 'polling'
2. Run background_jobs_worker.pl - should not show STOMP warnings
3. Run es_indexer_daemon.pl - should not show STOMP warnings
4. Set JobsNotificationMethod to 'STOMP' without RabbitMQ running
5. Run workers - should show appropriate STOMP connection warnings
6. Sign off :-D

Signed-off-by: Tomás Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:36:57 -06:00
Nick Clemens e9c6c0ee43
Bug 40880: Correct columns headers for CSV export from item search
To test:
1 - Do an item search, select some rows
2 - Export selected rows as 'CSV'
3 - IMport into a spreadsheet or view and note missing/doubled delimiters after damaged status
4 - Apply patch
5 - Repeat export
6 - It works!

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2025-09-26 10:36:57 -06:00