Koha-clms/api/v1/swagger/paths
Jan Kissig 555640b585
Bug 35380: Make updateBiblio-API respect Record overlay rules
This patch moves hardcoded source filter from 'MARC overlay rules' (batchmod, intranet, z3950, staged import, bulk import, import_lexile) to 'Record Sources' and makes them untouchable. They cannot be renamed or modified.
New record sources can be added and modified though.
All default and newly created record sources are available as filter for the module "Source" in 'MARC overlay rules'.
The API route for PUT /biblios/:biblio_id now checks for a given header x-record-source-id.
If an id is given the name of the rule is retrieved and forwarded as an overlay_context to ModBiblio.
If no id is given the fallback '*' is added as overlay_context.
Also the record source id is getting saved.

Test plan:
pre) run perl installer/data/mysql/updatedatabase.pl to add new is_system column
pre) run dbic to build Koha::Schema::Result::RecordSource as it gets a new columns is_system
pre) run 'redocly bundle --ext json api/v1/swagger/swagger.yaml --output api/v1/swagger/swagger_bundle.json' or 'yarn build'

a) enable system preference MARCOverlayRules and RESTBasicAuth
b) create new record source in /cgi-bin/koha/admin/record_sources and recognize its <NAME> and <ID>
c) create overlay rules in /cgi-bin/koha/admin/marc-overlay-rules.pl
f.e.
+----+-----+--------+----------+-----------+
| id | tag | module | filter   | preset    |
+----+-----+--------+----------+-----------+
|  1 | 245 | source | *        | protect   |
+----+-----+--------+----------+-----------+

This will make the 245 field protected from change, unless the record source matches
d) go to /cgi-bin/koha/catalogue/detail.pl?biblionumber=262 and change 245 (title)  via edit -> edit record
e) save and take a look the title is still the same
f) run the updateBiblio-Request from below with a API-testing client like REST Client
g) check that title gets overwritten even though it is protected. This is due the fact the updateBiblio is not setting an overlay context.

h) apply patch
redo d) and e)
i) add another overlay rule allowing your record source to change 245:
+----+-----+--------+----------+-----------+
| id | tag | module | filter   | preset    |
+----+-----+--------+----------+-----------+
|  1 | 245 | source | *        | protect   |
|  2 | 245 | source | <NAME>   | overwrite |
+----+-----+--------+----------+-----------+

j) run the updateBiblio-Request from below, be sure to fill out x-record-source-id:with your ID from step b)
k) check that title gets overwritten
l) run the updateBiblio-Request from below, but omit x-record-source-id or set it to another value than <ID>
m) check that title is not overwritten

PUT http://main-intra.localhost/api/v1/biblios/262
Authorization: Basic koha:koha
Authorization: Basic koha:koha
Content-Type: application/marcxml+xml
x-record-source-id: <ID>

<?xml version="1.0" encoding="UTF-8"?>
<record
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
    xmlns="http://www.loc.gov/MARC21/slim">

  <leader>01075cam a2200313 a 4500</leader>
  <controlfield tag="001">foo</controlfield>
  <controlfield tag="005">20200421093825.0</controlfield>
  <controlfield tag="008">120417s2012    ch a     b    001 0 eng  </controlfield>
  <datafield tag="040" ind1=" " ind2=" ">
    <subfield code="c">482</subfield>
  </datafield>
  <datafield tag="100" ind1="1" ind2=" ">
    <subfield code="a">Christiansen, Tom.</subfield>
    <subfield code="9">482</subfield>
  </datafield>
  <datafield tag="245" ind1="1" ind2="0">
    <subfield code="a">New Title</subfield>
    <subfield code="c">Tom Christiansen, Brian D. Foy &amp; Larry Wall.</subfield>
  </datafield>
  <datafield tag="260" ind1=" " ind2=" ">
    <subfield code="a">City</subfield>
  </datafield>
  <datafield tag="300" ind1=" " ind2=" ">
    <subfield code="a">Pages and more</subfield>
  </datafield>
  <datafield tag="942" ind1=" " ind2=" ">
    <subfield code="c">BKS</subfield>
  </datafield>
</record>

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
(cherry picked from commit ce42c3b5ec)
Signed-off-by: Jacob O'Mara <Jacob.omara@openfifth.co.uk>
2026-05-24 13:42:13 +01:00
..
acquisitions_baskets.yaml Bug 29668: Add API route to add a basket 2026-02-16 14:45:29 +00:00
acquisitions_edifiles.yaml Bug 40541: Add missing new line at the end of files when missing 2025-07-31 12:42:09 -06:00
acquisitions_funds.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
acquisitions_orders.yaml Bug 39816: (QA follow-up) Rename 'late_since_days' to 'days_late' 2025-10-22 07:42:55 -06:00
acquisitions_vendor_issues.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
acquisitions_vendors.yaml Bug 41594: Add Cypress tests 2026-04-02 18:31:10 +01:00
acquisitions_vendors_config.yaml Bug 40684: Adjust permissions for vendors 2025-09-24 09:25:04 -06:00
additional_contents.yaml Bug 39900: (follow-up) Add a newline to end of additional_contents.yaml 2025-08-15 09:52:29 -06:00
advancededitormacros.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
article_requests.yaml Bug 40541: Add missing new line at the end of files when missing 2025-07-31 12:42:09 -06:00
auth.yaml Bug 36561: Make /auth/password/validation use new permission 2025-07-24 17:04:05 -06:00
authorised_value_categories.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
authorised_values.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
authorities.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
biblios.yaml Bug 35380: Make updateBiblio-API respect Record overlay rules 2026-05-24 13:42:13 +01:00
biblios_item_groups.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
biblios_merge.yaml Bug 37791: Fix 'Biblio not found' messages on the API 2024-10-11 12:21:29 +02:00
bookings.yaml Bug 33736: (follow-up) Remove top-level embed in bookings.yaml 2024-10-25 11:09:57 +02:00
cash_registers.yaml Bug 39091: Add cash registers list REST API endpoint 2025-07-23 16:36:40 -06:00
checkouts.yaml Bug 40665: API spec changes 2025-09-05 15:10:36 -06:00
circulation_rules.yaml Bug 40541: Add missing new line at the end of files when missing 2025-07-31 12:42:09 -06:00
cities.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
clubs.yaml Bug 25787: Update club holds to only require place_holds permission 2025-05-06 18:48:23 +02:00
config_file_transports.yaml Bug 39190: Rename API from sftp_servers to file_transports 2025-09-19 13:23:25 -06:00
config_smtp_servers.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
deleted_biblios.yaml Bug 37791: Fix 'Biblio not found' messages on the API 2024-10-11 12:21:29 +02:00
erm_agreements.yaml Bug 37576: Add additional fields for ERM agreements 2024-11-08 16:09:17 +01:00
erm_config.yaml Bug 34387: Improve API docs naming consistency 2023-08-15 11:25:35 +03:00
erm_counter_files.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_counter_logs.yaml Bug 36627: Rename embed method to patron 2024-12-23 13:36:14 +01:00
erm_counter_registries.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_custom_reports.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_default_usage_reports.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_documents.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_eholdings_packages.yaml Bug 37577: Add additional fields for ERM packages 2024-11-08 16:09:19 +01:00
erm_eholdings_packages_resources.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_eholdings_resources.yaml Bug 38201: Add missing newlines at end of file 2025-10-02 09:40:32 -06:00
erm_eholdings_titles.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_eholdings_titles_resources.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_extended_attribute_types.yaml Bug 38446: Add a dedicated route to retrieve ERM-related additional fields 2025-11-17 15:15:38 -07:00
erm_licenses.yaml Bug 35287: REST API - Add additional fields support to ERM Licenses 2024-10-24 13:38:19 +02:00
erm_sushi_services.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_usage_data_providers.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_usage_databases.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_usage_items.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_usage_platforms.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_usage_titles.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
erm_users.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
extended_attribute_types.yaml Bug 37577: Add additional fields for ERM packages 2024-11-08 16:09:19 +01:00
holds.yaml Bug 23269: (follow-up) Rename to item_level_holds_count and add tests 2026-05-24 13:42:11 +01:00
ill_backends.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
ill_batches.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
ill_batchstatuses.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
ill_requests.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
import_batch_profiles.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
import_batches.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
item_types.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
items.yaml Bug 40154: prevent deletion of items with holds 2026-03-23 12:32:24 +00:00
jobs.yaml Revert "Bug 36217: Fix background jobs page's include_last_hour filter" 2024-10-18 14:26:01 +02:00
libraries.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
lists.yaml Bug 28965: Add /public/lists 2024-11-08 16:09:21 +01:00
oauth.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
patron_categories.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
patrons.yaml Bug 28701: Adding primary_contact_method to the REST API 2026-02-16 13:52:53 +00:00
patrons_account.yaml Bug 38931: Add endpoints for individual credits and debits 2025-10-14 14:51:59 -06:00
patrons_checkouts.yaml Bug 40665: API spec changes 2025-09-05 15:10:36 -06:00
patrons_extended_attributes.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
patrons_hold_groups.yaml Bug 40613: (QA follow-up): Add hold_group_id param 2025-11-07 10:54:16 -07:00
patrons_holds.yaml Bug 40543: Remove pickup_library.branchname embed 2025-08-14 16:06:00 -06:00
patrons_password.yaml Bug 29926: (QA follow-up) Date format missing in spec 2022-05-06 10:33:10 -10:00
patrons_recalls.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
preservation_config.yaml Bug 36565: Preservation module API docs fixes (bug 30708 follow-up) 2024-04-29 09:35:36 +02:00
preservation_processings.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
preservation_trains.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
preservation_waiting_list.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
public_oauth.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
public_patrons.yaml Bug 39600: Fix spec to include invalid query handling 2025-04-29 17:19:34 +02:00
quotes.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
record_sources.yaml Bug 35380: Change record sources to by systemdefined 2026-05-24 13:42:13 +01:00
return_claims.yaml Bug 33292: Add logic to handle refunding a lost fee 2024-10-24 13:38:15 +02:00
rotas.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
search_filters.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
sip2_accounts.yaml Bug 37893: Add sip2 module permission 2025-11-18 11:21:05 -07:00
sip2_institutions.yaml Bug 37893: Add sip2 module permission 2025-11-18 11:21:05 -07:00
sip2_system_preference_overrides.yaml Bug 37893: Add sip2 module permission 2025-11-18 11:21:05 -07:00
suggestions.yaml Bug 33430: Update API specs to include required embeds 2025-05-19 18:54:20 +02:00
tickets.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00
transfer_limits.yaml Bug 37018: Add 400 response definition to all routes 2024-08-01 17:26:44 +02:00