25 nov. 2021
Koha is the first free and open source software library automation package (ILS). Development is sponsored by libraries of varying types and sizes, volunteers, and support companies from around the world. The website for the Koha project is:
Koha 21.11.00 can be downloaded from:
Installation instructions can be found at:
Koha 21.11.00 is a major release, that comes with many new features.
It includes 4 new features, 196 enhancements, 388 bugfixes.
You can learn about the system components (like OS and database) needed for running Koha here: https://wiki.koha-community.org/wiki/System_requirements_and_recommendations
[11175] Show the parent record's component parts in the detailed views
This enhancement adds the 'ShowComponentParts' system preference.
When enabled, a record with analytical records has a new tab below the record detail containing links to the component parts records.
The feature requires
MaxComponentRecords
is set to limit the maximum number of attached records to display; if more records are found then a link to the 'Show analytics' search will appear at the bottom of the listed analytics.
[14957] Write protecting MARC fields based on source of import
Sponsored by Catalyst, Gothenburg University Library and Halland County Library
This enhancement enables the use of rules for merging MARC records. For example, it can be used to prevent field data from being overwritten.
It is enabled using the new system preference "MARCOverlayRules". Rules are added, edited and deleted in the staff interface from Home > Koha administration > Catalog > MARC overlay rules.
NOTE: A follow-up bug is being worked upon to add compatibility with bulkmarcimport.
[14237] Allow bibs to be added to course without items
Sponsored by Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)
This patch adds a biblionumber column to course_items, adds a relationship between course_items.biblionumber and biblio.biblionumber, and changes course_items.itemnumber to allow null values. This feature allows a patron to add bibliographic records to course reserves. They can be added individually or in a batch. The courses that have reserved this record will also show on the record's detail page.
[28180] Use a lightbox gallery to display the images on the detail pages in OPAC
Sponsored by Gerhard Sondermann Dialog e.K. (presseplus.de, presseshop.at, presseshop.ch)
This enhancement to the OPAC enables the display of multiple cover images on the detail page for a record or items in a gallery.
[24190] Add additional Acquisition logging
This enhancement adds additional logging of acquisition-related changes including:
- Order line creation and cancellation
- Invoice adjustment additions, amendments and deletions
- Order line receipts against an invoice
- Budget adjustments
- Fund adjustments
- Order release date (EDIFACT)
The name of the system preference that enables logging of acquisition-related changes was changed from AcqLog to AcquisitionLog.
Note: Acquisition logging was added in Koha 21.05.
[27287] Make note fields from orders searchable
Sponsored by Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)
Adds search options for the internal and vendor note fields from the basket to the advanced search form in acquisitions.
[28640] Add EDI order status to basket details display
Clarify the exact status of EDI orders on the basket details display, highlighting that a basket can be closed but pending or closed and sent for example.
[17600] Standardize the EXPORT
We favored the use of EXPORT_OK over EXPORT, to prevent name clashes and make the import explicit.
[27032] CanBookBeRenewed is not understandable and needs refactoring
Improvements to readability of CanBookBeRenewed function
[28306] Allow to query database with minimal memory footprint
This provides a new method Koha::Database::dbh which returns a database handler without loading unnecessary stuff. This will be useful to reduce memory usage of daemons that need to check the database periodically.
[28374] Convert pos/printreceipt.pl to use GetPreparedLetter
This patch converts the point of sale receipt printer controller to using GetPreparedLetter instead of calling getletter directly.
[28445] Use the task queue for the batch delete and update items tool
This enhancement changes the batch item modification and deletion tools so that they now use the task queue feature (added in Koha 21.05) instead of using background jobs. For the library staff member this provides more information on the progress of the task.
[28514] Replace C4::Letters::getletter with Koha::Notice::Templates->find_effective_template
This patch simplifies and clarifies the process of getting a notice template for a notice.
[28565] Adding a new syspref for sharing through HEA should be simpler
This enhancement simplifies the way new system preferences are added to Hea for statistical reporting. Before this enhancement the tests (t/db_dependent/UsageStats.t) required adjusting every time a new system preference was added. Now when a new system preference is added to Hea they are automatically picked up for the tests.
[28572] Replace C4::Debug with Koha::Logger->debug
This patch simplifies and clarifies how developers should add debug statements to the Koha codebase.
[28769] tabloop not used in cataloguing plugins
This technical change removes the "tabloop" variable that is passed from the add item form logic to the cataloguing plugins, as it is never used.
[28785] Code in C4::Auth::checkauth is copy pasted
Sponsored by Orex Digital
[29082] Add filtering methods to Koha::ArticleRequests
Add re-usable pre-filtered searches to the Article Requests system.
[29083] Update article requests-related Koha::Patron methods to use relationships
Provides a small performance enhancement and allows prefetching and embedding to work in the API
[29084] Update article requests-related Koha::Biblio methods to use relationships
Provides a small performance enhancement and allows prefetching and embedding to work in the API
[27520] Adding new itemtype images boardgame, zoom-in, and zoom-out to carredart
This enhancement adds boardgame, zoom-in and zoom-out images to the carredart icon set for item types.
[27522] Add a new itemtype info image to carredart
This enhancement adds a info image to the carredart icon set for item types.
[27523] Adding new itemtype lock image to carredart
This enhancement adds a lock image to the carredart icon set for item types.
[27985] Add option for using a MARC modification template on a single record from the details page
This development allows for sending a single record to 'batch' modification in order to process a MARC modification template against the record.
[28543] Clicking on 'New record' will use default framework
This enhancement changes the 'New record' button when cataloguing. Before this change you needed to choose the framework - now it will use the default framework unless you select a different framework from the drop-down list. This makes it consistent with creating a new record using the 'New from Z39.50/SRU' button.
NOTE: This is a change in default behavour that cataloguers may be used to.
[28694] Check alert in cataloguing should be a static message
This patch changes the way error form validation error messages are displayed when using the basic MARC editor in cataloging. Instead of a JavaScript alert, errors are now shown on the page itself, with links in the message to take you to the corresponding field. A new "Errors" button in the toolbar allows the user to jump back to the list of errors for easy reference.
[10902] Highlight patrons from logged-in library in patron searches
This enhancement highlights the branch when searching for patrons from the currently-logged-in library.
This includes:
- The "Check out" tab in the staff interface header: . autocomplete results now show the library name. It's highlighted in green for patrons from the currently logged-in library . after submitting a partial name, the library name for patrons from the currently logged-in library is also highlighted in green
- Browsing for patrons: the library name for patrons from the currently logged-in library is highlighted in green.
[20472] Add digital scan as optional format to Article Requests
This patch set adds an additional (optional) format to Article Requests. Allowing a user to request a digital copy. In staff the request can be processed by entering a download URL. This serves as a base for further automation.
[25883] Highlight transfers on checkin screen table
This patch replaces the
Holding library
field in the check-in table with a newTransfer to
field.The
Holding library
would always match the current branch, as holding branch is updated by the check-in process. We now highlight transfers by populating the newTransfer to
field with the destination library.
[27944] Add new stages to the article request process
Sponsored by Rijksmuseum
When article requests come in they may require additional processing, for example: determining the type of request or other workflows.
This enhancement adds a requested stage before the pending and processing stages for the article request process.
[27945] Limit the number of active article requests per patron category
Sponsored by Rijksmuseum
This enhancement lets you limit the number of active article requests a patron can make each day. Edit the patron category and enter the 'Maximum active article requests'.
[27947] Add default cancellation reasons to article requests
Sponsored by Rijksmuseum
This feature adds a way to define a list of possible cancellation reasons for article requests. That way, they can be chosen upon cancellation.
[27948] Add disclaimer text to article requests feature
Sponsored by Rijksmuseum
This enhancement lets you include text that patrons need to accept before they can place an article request (similar to the ILLModuleCopyrightClearance system preference).
Add the text required to the new ArticleRequestsDisclaimerText entry in the additional contents tool.
[27949] Batch printing of article request slips
Sponsored by Rijksmuseum
This developments adds a way to select several article requests and print slips for them in batch.
[28810] Housebound details should be textarea not text inputs
This patch changes the housebound detail form inputs from text inputs to textarea's in order to accommodate more information in each field.
[29093] Article requests: Checkbox for table of contents
This patch set adds a new article request column for a request to copy or scan table of contents.
[18631] cleanup_database.pl
should take an option for modules in action_logs
This patch adds two new optional parameters to the
cleanup_database.pl
script.
--log-modules
- A repeatable option to specify which action log module lines to truncate.
--preserve-log
- A repeatable option to specify which action log module lines to keep.
[25429] cleanup_database.pl
should remove resolved claims returned after X days
This enhancement adds the new
CleanUpDatabaseReturnClaims
system preference allowing administrators to specify how many days after resolution a claimed return record should be deleted from the database.For this functionality to be enabled, the
cleanup_database.pl
must be scheduled to run regularly with the new--return-claims
parameter passed.
[28456] Add option to use a WHERE statement in membership_expiry.pl cronjob
Add an optional
--where
parameter to themembership_expiry.pl
task. This allows for arbitrarily complex SQL where statements to be passed to the script to filter affected patrons.
[27375] Set YAML file settings in .editorconfig
Sponsored by Koha-Suomi Oy
[22435] Clarify account_offset types by converting them to clear codes
This enhancement serves to clarify how the account offsets table functions. We record all account actions in this table, including accountline creations, modifications and offsets.
Prior to this patch we had a large number of different offset types, one for each accountline type. But we didn't clearly define what the offset was actually "doing". This patch replaces the existing offset types with a refined list;
CREATE
,APPLY
,OVERDUE_INCREASE
,OVERDUE_DECREASE
andVOID
.The accountline details page, accessible from the borrower account transactions table is updated to display the whole history of the selected accountline, including creation (CREATE), increments (OVERDUE_INCREASE/DECREASE) and offsets (Application of payments, cancellations, voids, writeoffs and refunds).
[27583] Clarify how cash management fits together
This enhancement serves to clarify the parts of the cash management module by updating the names or pages and embellishing the breadcrumb navigation for these pages.
[23678] Cancel holds in bulk
This developments adds a way to choose multiple holds using checkboxes, to cancel them in bulk.
It uses the new background jobs infrastructure recently introduced.
[25078] Update DB process - wrap each DBRev inside a transaction and better error handling
This enhancement improves the reliability and error reporting of our database update procedures.
We now stop the upgrade if we come across an error and roll back anything inside that upgrade step. We also now report the errors to the end-user, both on the command line or in the browser.
Finally, our monolithic updatedateabase script had been growing unmanageably large for some time. This patchset allows us to split each upgrade step into a single atomic file and thus simplifies writing updates and applying retrospective fixes.
[27101] Remove fr-CA installer data
This enhancement removes fr-CA installer data. Installer data is now in YAML format and there is no need for localized installer files (these are now translated using Koha's translation system using .po files maintained on https://translate.koha-community.org).
[27622] Remove nb-NO installer data
This enhancement removes Norwegian installer data. Installer data is now in YAML format and there is no need for localized installer files (these are now translated using Koha's translation system using .po files maintained on https://translate.koha-community.org).
[18984] Remove support for NORMARC
The National library of Norway has replaced NORMARC with MARC21. Koha instances that use NORMARC have either been converted to MARC21, or will need to convert as part of any upgrade (from Koha 21.11 onwards).
[27850] Search link for 260 a and c in MARC21 XSLT display
This enhancement adds search links to the MARC21 XSLT display for 260$a and $c fields for the OPAC and staff interface.
[28153] Add 'Hold reminder' messaging preference
This enhancement allows staff/patrons to control individual preferences for holds reminder noticess in the patron's messaging preferences area.
[15067] Add additional languages to advanced search language search
This enhancement adds Estonian, Inuktitut, Inupiaq, Latvian, and Lithuanian (along with their translations) to the list of languages in the advanced search for the OPAC and staff interface (Advanced search > More options > Language drop down list).
The list of languages is also now sorted in alphabetical order.
[20310] Article requests: Use details from the host record when submitting an article request on an analytic record without attached items
This new feature add the
ArticleRequestsHostRedirection
system preference.When enabled, if a user attempts to place an article request from an analytic record the system will automatically populate some details in the request from using data from the host record.
[26302] OPAC XSLT Results: List variable number of itemcallnumbers
This enhancement allows customizing the number of call numbers displayed for OPAC search results for items available and not available by changing two new system preferences:
- OPACResultsMaxItems: maximum number of available items displayed in search results (default = 1)
- OPACResultsMaxItemsUnavailable - maximum number of unavailable items displayed in search results (such as when checked out and damaged) (default = 0)
This is useful when records have a large number of items, for example larger libraries with many branches, union catalogues, and university libraries with course text books.
[27360] Libraries should be able to pick which branches display on the public 'Libraries' page
This patch adds a new field,
Public
to the definable library information. When enabled, the library details will be displayed in the libraries page on the OPAC.
[28101] Accessibility: OPAC - Breadcrumbs should be more accessible
Sponsored by Catalyst
[28720] Update the process of adding a checkout note in the OPAC
This enhancement moves the entry of checkout notes for the OPAC into a modal window, with the goal of making note entry easier.
The "add note" button in the report a problem on the OPAC summary page will trigger a modal where a patron can submit or edit their message:
- The modal window contains text explaining that the note will be shown to staff when the item is checked in.
- The message about a successfully submitted message has text formatting added to improve clarity, and includes an edit link for changing a message.
[28838] SCO impossible errors are hard to target with CSS/JS
This patch adds unique IDs to the SCO main page so the impossible errors can easily be targeted via JS and CSS.
[29006] Make GoogleOpenIDConnect options consistent in the OPAC
This enhancement improves the consistency of the OPAC login forms when using Google OpenID Connect. A "Log in with Google" button now appears above the Koha login form when logging in from the home page, "Log in to your account" in the navigation menu, and when accessed directly (/cgi-bin/koha/opac-user.pl).
[29162] Change template structure on OPAC library page so that a single library can easily be hidden
This patch adds markup to the OPAC library page so that CSS or JS can more easily target elements of the page:
- Each library section is wrapped in a div with a unique id
- Classes are added to the paragraphs containing phone, fax, URL, and library description.
- An ID has been added to the menu of libraries in the sidebar so that they can be targetted individually.
[11879] Add a new field to patron record: main contact method
Sponsored by Centre collégial des services regroupés
This enhancement adds a "Main contact method" dropdown list field to the patron modification form in the staff interface and OPAC.
This field is useful for reporting purposes, or to know which contact method to use first when trying to contact a patron.
[15788] Split borrowers permission into create/edit and delete
This enhancement allows administrators to control, at a more fine-grained level, which users may delete patron records.
This patch introduces a new
delete_borrowers
user permission.
[24406] Add a span to patron category category type codes in patron search result lists
The patron category type code (A, C, O, ...) is currently displayed in the patron module search, patron card creator, and acquisition patron searches.
This information is not useful for most users, as these are internal codes that cannot be easily "decoded". And while you might be able to guess A as Adult in English, it doesn't translate to other languages.
This patch wraps a span around the patron category type code shown in () after the patron category.
[27725] Use JavaScript to set history state during patron search
This patch modifies the process of searching patrons by the first letter of their surname so that the search is added to the browser's history. This allows the user to use the back button to return to the search after clicking one of the results.
[27873] Make display of patron restrictions, charges, notes, etc. consistent for check out and patron details screens
This enhancement updates the checkout and patron detail pages in the staff interface - circulation and patron-related messages are now displayed in the same way. Before this, messages on the two pages displayed in a different order and were inconsistent with each other.
[28450] Make Account summary print tables configurable
This patch adds table settings for the three tables (checkouts, fines and holds) which appear on the patron's "Print summary" view. This will allow the administrator to set a default configuration for columns on the print summary page.
[26351] Add plugin hooks to transform item barcodes
This enhancement adds a plugin hook to transform item barcodes scanned in to Koha. For example, if you need to alter your scanned item barcodes, but your scanners cannot be programmed to do so, a plugin could be written to handle that change in Koha instead. One example would be to drop the first and last characters of the scanned barcode, which may be check digits rather than part of the barcode itself.
[26352] Add plugin hooks to transform patron barcodes
This enhancement adds a plugin hook to transform patron cardnumbers scanned in to Koha. For example, if you need to alter your scanned cardnumbers, but your scanners cannot be programmed to do so, a plugin could be written to handle that change in Koha instead. One example would be to drop the first and last characters of the scanned barcode, which may be check digits rather than part of the barcode itself.
[27173] Add plugin hooks for authority record changes
This enhancement allows plugin authors to implement an
after_authority_action
method in order to act upon authority create, modify and delete.
[28211] Replace use of call_recursive() with call()
This enhancement changes the way plugin hooks are called to transform data. We now pass object to be modified as a reference, thus allowing several plugins to operate cumulatively on the same object.
[28474] Pass process_message_queue.pl params to before_send_messages plugin hooks
This enhancement passes the parameters received by process_message_queue.pl through to the before_send_messages plugin calls. This allows plugins to respect calls that should only affect certain letter codes etc.
[27931] Add GET /items/:item_id/pickup_locations
This development adds routes for fetching an item's valid pickup location list.
[29183] Add query options documentation
This patch adds documentation of the different filtering methods the REST API provides.
[27747] Add CodeMirror custom syntax highlighting for column placeholders
This patch modifies the configuration of the reports module's SQL editor so that column placeholders have their own syntax highlighting, setting them apart by color from other parts of the SQL code.
[25464] Add ability to specify client IP and SIP account used in SIP2 logging
This enhancement adds the ability to specify the incoming IP address used for a given log statement via SIP, as well as the SIP2 account that was in use at the time. This data is very helpful for debugging purposes.
[27848] Elasticsearch - include 245b subtitle and 245p part subfields in the default title index mappings
This enhancement adds the 245$b (subtitle) and 245$p (part name) subfields to the default title index mappings for Elasticsearch.
[28339] Elasticsearch - Add 8XX to default title-series index mappings (MARC21)
This enhancement adds the 8XX (800$t, 810$t, 811$t, and 830$a) subfields to the default title-series index mappings for Elasticsearch. Currently for MARC21 only 440$a and 490$a are included.
[28378] Elasticsearch - Add 264c to default copydate mappings (MARC21)
This enhancement adds 264$c to the default mapping for the copydate index when using Elasticsearch.
[28379] Elasticsearch - Add 710 to author-name-corporate index (MARC21)
This enhancement adds the 710 to the author-name-corporate index mappings for MARC21 in Elasticsearch.
[28381] Elasticsearch - Add 710 and 711 to default mappings for author index (MARC21)
This enhancement adds fields 710$a and 711$a to the default author index mapping when using Elasticsearch.
[28393] Elasticsearch - Add 050a to lc-call-number index mapping (MARC21)
This enhancement adds 050$a (Library of Congress classification number) to the lc-call-number index mapping when using Elasticsearch.
These means that when searching using lc-call-number both 050$a and 050$b (Library of Congress item number) are now searchable.
[20463] Create an index for LDR, pos 19 - Multipart resource record level
Sponsored by Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)
This adds a new Zebra index Multipart-resource-level or mrl for LDR, pos. 19 - multipart resource record level. It allows to search for sets and parts with independent and dependent title.
[27505] Add new itemtype controller image for carredart
This enhancement adds a video game controller image to the carredart icon set for item types.
[27521] Adding new itemtype headset image for carredart
This enhancement adds a headset image to the carredart icon set for item types.
[28563] Add AllowHoldItemTypeSelection to Hea
This enhancement adds the AllowHoldItemTypeSelection system preference to the list of system preferences usage data that will be shared with Hea.
[12561] Remove non-XSLT views
This removes the non-XSLT views feature that was deprecated from July 2014.
As part of this change:
- system preferences HighlightOwnItemsOnOPAC and HighlightOwnItemsOnOPACWhich are removed
- a warning is added to the about page if a default XSLT file was removed, or if a file referenced in one of the system preferences does not exist.
[28376] Flatpickr introduction for datetime picker
This patch begins the process of replacing an obsolete jQuery plugin with a new library for selecting dates and times. Koha uses the jQueryUI "datepicker" widget for selecting dates, and uses an additional plugin, "jQuery Timepicker Addon," when adding time selection to the widget. This additional plugin has not been updated for many years. The new library, Flatpickr, will eventually replace both the jQuery Timepicker Addon and the jQueryUI datepicker widget. This replacement process begins here with the new Flatpickr calendar widget being added to Circulation -> Renew, Reports -> Patron statistics wizard, and Administration -> Patron categories.
[24019] Patron batch modification based on borrowernumber
With this change the batch patron modification tool can now accept a file or list of borrowernumbers in addition to accepting cardnumbers or a patron list.
[24387] Rename News tool
This enhancement is renaming the "News" tool to the more generic "Additional contents". It creates two different "categories" of content: "news" and "HTML customizations".
[27883] Add ability to preserve patron field from being overwritten by import
This enhancement to the patron import tool lets you keep current values for selected fields for existing patrons - when the data is imported the selected fields are not overwritten.
When importing:
- match to existing patrons using either their card number or user name
- select the fields that will not be overwritten under 'Preserve existing values'.
[28175] Usability improvements to uploads page
Some general improvements have been made to the "Upload" page in the Tools section: An "Upload" toolbar button is now present on upload results and search results pages; Search forms now appear in the sidebar if you're not on the main page; Upload categories are shown in search results as full descriptions linked to a search for that category.
[26195] Add a way to specify authorised values should be expanded [OAI]
This enhancement adds a new option to the OAI configuration file, to tell it to expand authorised values.
(This list includes all bugfixes since the previous major version. Most of them have already been fixed in maintainance releases)
[24850] Koha::DateUtils ignores offsets in RFC3339 datetimes
Prior to this patch our date handling library ignored offset data passed with rfc3339 dates. This could lead to problems if an API client converted to UTC or was in a different timezone to the Koha instance time setting.
This patch adds proper handling to dt_from_string such that if an REF3339 date is input, we parse out the offset and then adjust the time to match the instance timezone for storage.
[29135] OAI should not include biblionumbers from deleteditems when determining deletedbiblios
Sponsored by National Library of Finland
[28750] Undefined subroutines in svc/cataloguing/framework (caused by bug 17600)
This fixes an issue in master caused by bug 17600. This resulted in the advanced cataloguing editor failing to load.
[28534] pending_offline_circulations table uses MyISAM engine
This updates the database structure for the pending_offline_operations table so that it uses the InnoDB engine instead of the MyISAM engine.
[28496] Club holds form broken
This fixes the libraries shown in the 'Pickup at' dropdown list when placing a club hold so that it shows all libraries, instead of just the currently logged in library.
[28487] Overdue_notices does not fall back to default language
Previously overdue notices exclusively used the default language, but bug 26420 changed this to the opposite - to exclusively use the language chosen by the patron.
However, if there is no translation for the overdue notice for the language chosen by the patron then no message is sent.
This fixes this so that if there is no translation of the overdue notice for the language chosen by the patron, then the default language notice is used.
[29381] Auto-renewal digest messages are sent on every cron run
This fixes an issue with automatic renewal digest messages - these were being sent on every cron run, even if there was nothing to renew or no renewal errors.
(This error was caused by a regression in 21.05 from Bug 18532: Add individual issues to digest notice and hide auto_renewals messaging preference when not needed.)
[28299] OpacHiddenItems not working in OPAC lists
This fixes an issue where items that should be hidden from display in the OPAC (using the rules in OpacHiddenItems, for example: damaged) were displayed under availability in OPAC lists.
[28679] Unable to click "Log in to your account" when GoogleOpenIDConnect is enabled
This fixes the login link in the OPAC when GoogleOpenIDConnect is enabled. It removes modal-related markup which was causing the link to fail.
[29416] Regression: information from existing bib no longer populating on suggest for purchase
This restores the behaviour for purchase suggestions for an existing title, so that the suggestion form is pre-filled with the details from the existing record.
[28585] Cannot search on date fields
This patch fixes the date handling for query parsing from the API. We use dt_from_string to convert out RFC3339 formatted date strings to DateTime objects with an associated timezone and then user the native datetime formatted provided by the SQL connection library to convert to an appropriately formated date time string.
[28586] Cannot resolve a claim
This fixes an issue with the 'Returned claims' feature (enabled by setting a value for ClaimReturnedLostValue)- resolving returned claims now works as expected.
Before this fix, an attempt to resolve a claim resulted in the page hanging and the claim not being able to be resolved.
[26871] L1 cache still too long in SIP Server
This fixes SIP connections so that when system preference and configuration changes are made (for example: enabling or disabling logging of issues and returns) they are picked up automatically with the next message, rather than requiring the SIP connection to be closed and reopened.
SIP connections typically tend to be long lived - weeks if not months. Basically the connection per SIP machine is initiated once when the SIP machine boots and then never closed until maintenance is required. Therefore we need to reset Koha's caches on every SIP request to get the latest system preference and configuration changes from the memcached cache that is shared between all the Koha programs (staff interface, OPAC, SIP, cronjobs, etc).
[29264] SIP config allows use of non-branchcode institution ids causes workers to die without responding
This adds a warning to the logs where a SIP login uses an institution id that is not a valid library code.
If a SIP login uses an institution with an id that doesn't match a valid branchcode, everything will appear to work, but the SIP worker will die anywhere that Koha gets the branch from the userenv and assumes it is valid.
The repercussions of this are that actions such as the checkout message simply die and do not return a response message to the requestor.
[28236] Selecting database columns for system preferences in standard and dev installs is broken
Sponsored by Koha-Suomi Oy
This fixes Apache access to json files in koha-tmpl for non-package installs. This causes issues for system preferences where there is a pick list for database columns.
Bug 22844 introduced a pick list of database columns for system preferences where such a list was required. This list is in a plain json file under the templates directory. This works fine for packages, but because of bug 9812 (which limited browser access to selected files) those directories are not accessible to the outside world for both standard and dev type installs using the make process.
[29477] flatpickr default time should be 23:59 (11:59 pm as well, probably), not 12:00
This fixes the flatpickr default time defaulting to 12:00 instead of 23:59, which was an unexpected change in behaviour caused by the flatpickr switch.
[29478] flatpickr misses quick shortcut to "Today" date
This adds shortcuts to yesterday, today and tomorrow for the flatpickr date selector.
[28717] NewsLog doesn't work
This patch fixes a regression in the NewsLog caused by Bug 28718.
(This list includes all bugfixes since the previous major version. Most of them have already been fixed in maintainance releases)
[28956] Acquisitions: select correct default tax rate when receiving orders
Sponsored by Catalyst
[28373] Items fields not used in default XSLT
When processing records for display we loop through each field in the record and translate authorized values into descriptions. Item fields in the record contain many authorised values, and the lookups can cause a delay in displaying the record. If using the default XSLT these fields are not displayed as they exist in the record, so parsing them is not necessary and can save time. This bug adds a system preference that disables sending these fields for processing and thus saving time. Enabling the system preference will allow users to pass the items to custom style sheets if needed.
[28734] Koha::Biblio->get_marc_notes should parse authorised values
Sponsored by Catalyst
[29408] The datatables api wrapper is ambiguously named
This patch 1) renames the Koha REST JS dataTables wrapper from the ambiguous 'api' to the clearer 'kohaTable' 2) goes through the codebase and updates existing relevant calls to .api referencing the Koha REST dataTables wrapper to use the name 'kohaTable', and 3) adds JSDoc formatted parameter documentation for the kohaTable function.
[29427] Debug mode not honoured in SMTP transport
The debug flag on the SMTP servers configuration was not being used correctly. This patch implements the expected behavior.
Note: Enabling this will lead to lots of logging for each SMTP connection Koha does.
[28383] Log in via the itemsearch URL leads to Internal Server Error
When trying to access the item search form in the staff interface (/cgi-bin/koha/catalogue/itemsearch.pl) when not logged in, an internal server error (error code 500) is received after entering your login details. This fixes the problem so that the item search form is displayed as expected.
[28542] Move new authority from Z39.50/SRU to a button
This makes the layout for creating new authorities consistent with creating new records - there is now a separate button 'New from Z39.50/SRU' (rather than being part of the drop-down list).
[29146] Default values from the framework should only be applied at biblio/item creation
This patch makes Koha no longer apply default values to empty fields in an existing biblio record in the regular cataloguing editor. Same for item editor.
[29319] Errors when doing a cataloging search which starts with a number + letter
This fixes an error that occurs in cataloging search when entering a search term with ten characters (like "7th Heaven" or "2nd editio") - Koha thinks you are entering an ISBN10 number, gets confused and delivers an error page. Searching now works as expected for ISBN13/ISBN10 (without the '-'s), title and author searches.
[15812] Checkout search with too many results (single character search) causes poor performance or timeout
This patch replaces the special case patron results page from circulation searches and instead redirects to the standard patron search results page.
To enable quick onward navigation to checkout, we add a link to the cardnumber field and a button to the actions column.
[28455] If TrackLastPatronActivity is enabled we should update 'lastseen' field on checkouts
This updates the 'lastseen' date for a patron when items are checked out (when TrackLastPatronActivity is enabled). (The last seen date is displayed on the patron details page.)
[28653] Sorting loans by due date doesn't work after renewing
Sponsored by Koha-Suomi Oy
[28774] Warnings from GetIssuingCharge when rental discount is not set
This fixes the cause of warning messages in the log files when the rental discount in the circulation rules has a blank value.
Before this fix, multiple warning messages "[2021/07/28 12:11:25] [WARN] Argument "" isn't numeric in subtraction (-) at /kohadevbox/koha/C4/Circulation.pm line 3385." appeared in the log files. These warnings occurred for items checked out where they had rental charges and the rental discount value in the circulation rules was blank.
[28850] Clarify wording on AllFinesNeedOverride system preference
This clarifies the wording for the AllFinesNeedOverride system preference. If set to 'require', checkouts are blocked when using the web-based selfcheck and SIP.
[28898] Context for translation: term (word) vs. term (semester)
This disambiguates and provides a hint for translating the term "term" used in course reserves, where the meaning is "semester" rather than something like search term. This allows it to be translated, rather than having to use JQuery to change the text displayed for languages other then English.
[29334] Do not apply framework defaultvalue to existing authority records
This fixes an issue where the default value for a field in a framework was being applied when records were edited, rather than only when first created.
[26852] Add missing X11$e and remove relator term subfields from MARC21 headings
This patch adds $e to 111 and 611, but removes it from 100 and 110 as it's used for the relator term there and should not be copied. Same for 111$j.
[28263] AUTO_RENEWALS message for 'too_many' is wrong
This corrects the text in the AUTO_RENEWALS and AUTO_RENEWALS_DGST notices. These are sent when an item is setup for automatic renewal and can no longer be automatically renewed as the maximum number of renewals reached:
- Current wording: "You have reached the maximum number of checkouts possible."
- Updated wording: "You have reached the maximum number of renewals possible."
For new installations the sample notices are updated. For existing installations the notices will be updated if they exist and haven't been changed.
[28242] Accessibility: OPAC - add captions and legends to tables and forms
Sponsored by Catalyst
As part of improving OPAC accessibility this change ensures that all tables have relevant captions and all forms have relevant legends - this makes navigation easier for people using a screen reader.
Note: Many of the captions and legends have class="sr-only" so they are not visible, but are available for people who use a screen reader.
[28422] OPAC MARC detail view doesn't correctly evaluate holdability
In the normal and ISBD detail views for a record in the OPAC the 'Place hold' link only appears if a hold can actually be placed. This change fixes the MARC detail view so that it is consistent with the normal and ISBD detail views. (Before this, a 'Place hold' link would appear for the MARC detail, even if a hold couldn't be placed, for example if an item was recorded as not for loan.)
[28545] Noisy uninitialized warn at opac-MARCdetail.pl line 313
This removes "..Use of uninitialized value in concatenation (.) or string at.." warning messages from the plack-opac-error.log when accessing the MARC view page for a record in the OPAC.
[28868] Masthead.inc is missing class name
This patch adds back the class 'mastheadsearch' which was lost during the upgrade to Bootstrap 4 in Bug 20168.
[28350] Sort by "circ note" is broken on the patron search result view
This fixes the patron search result page so that the results can be sorted using the 'Circ note' column. Before this fix you could not sort the results by this column.
[29405] The patron spec for date_renewed is missing it's format definition
This fix adds the date format string to the date_renewed field. This is to ensure that the date_renewed field can be correctly validated.
[29351] Add missing cn_source parameter to reports parameter menu
This patch adds a link for the previously-hidden option of using a runtime parameter for selecting "Source of classification or shelving scheme." Now when composing an SQL report you can click the "Insert runtime parameter" button to see a menu that includes this option.
[28554] In itemsearch sort filters by description
For item search in the staff interface the shelving location and item type values are now sorted by the description, rather than the authorized value code.
[22690] Merging records with many items too slow (Elasticsearch)
This enhancement significantly improves the performance when merging records with many items (for an installation using Elasticsearch).
Before this enhancement the web server would time out as the search engine was reindexing the origin record and the destination record for each item moving.
[22801] Advance search yr uses copydate instead of date-of-publication
This fixes the advanced search form in the OPAC and staff interface so that the publication date (and range) uses the value(s) in 008 instead of 260$c when using Elasticsearch.
[25030] IncludeSeeFromInSearches not honoured in Elasticsearch
Feature enabled by system preference IncludeSeeFromInSearches was implemented in Zebra search engine but not in Elasticsearch. This feature allows in bibliographic searches to match also on authorities see from (non-preferred form) headings.
[28380] Elasticsearch - Correct 024aa in mappings (MARC21)
This corrects the MARC21 mapping for 024$a when using Elasticsearch: identifier-other now maps to 024a rather than 024aa (which is a typo).
[29010] Weight input pattern wrong
Sponsored by Steiermärkische Landesbibliothek
[21286] Advanced search for Corporate-name creates Zebra errors
This fixes the advanced search in the staff interface so that searching using the 'Corporate name' index now works correctly when the QueryAutoTruncate system preference is not enabled. Before this a search (using Zebra) for a name such as 'House plants' would not return any results and generate error messages in the log files.
[28467] Add wording to TrackLastPatronActivity description to tell users that it records SIP authentication
This improves the wording for the TrackLastPatronActivity system preference to reflect that the 'last seen' date updates when a patron logs into the OPAC or connects using SIP.
[28601] Wrong breadcrumb for 'Home' on circulation-home
This fixes the breadcrumb link to the the staff interface home page from the circulation area - it now links correctly to the staff interface home page, rather than the circulation page.
[28747] Clarify wording on RestrictionBlockRenewing syspref
This clarifies the wording for the RestrictionBlockRenewing system preference to make it clear that when set to Allow, it only allows renewal using the staff interface.
[28567] Pick-up location is not saved correctly when creating a new library
This fixes an issue when adding a new library - the pick-up location was always saving as "Yes", even when no was selected.
[28704] Library MARCOrgCode field needs maxlength attribute
This fixes an error that occurs when you enter a "MARC organization code" in the form for adding and editing libraries. With this change the input field is limited to 16 characters.
[29004] Update GoogleOpenIDConnect preference to make it clear that it is OPAC-only
This improves the description of the GoogleOpenIDConnect and related preferences to make it clear that GoogleOpenIDConnect affects OPAC logins and that the preferences are related.
[29180] System preference RequestOnOpac should be renamed
System preference RequestOnOpac renamed to OPACHoldRequests. It could be confused with the 'Article Request' feature and does not follow Koha terminology - OPAC related system preferences normally start with OPAC.
[27498] Add a link for the hold ratios to acquisitions home page
This enhancement adds a link to the hold ratios report in the Acquisitions sidebar menu under the reports heading.
[28280] Item types configuration page doesn't use Price filter for default replacement cost and processing fee
This fixes the display of 'Default replacement cost' and a 'Processing fee (when lost)' when adding item types so that amounts use two decimals instead of six.
[28423] JavaScript error on MARC modifications page
This patch makes a minor change to the MARC modifications template (Staff interface > Administration > MARC modification templates) so that the "mmtas" variable isn't defined if there is no JSON to be assigned as its value.
[28689] Extra %s in alert message when saving an item
This removes an unnecessary %s in the alert message when there are errors in the cataloging add item form (for example when mandatory fields are not entered).
[28902] Grey color should be on label for record metadata
In record search or details, label is now with grey color (for example "Author:") and metadata with black color (for example "J.R.R Tolkien"). For both OPAC and staff interface.
[28927] Id opacmainuserblock used twice in OPAC
This patch removes redundant div with id 'opacmainuserblock' and 'opacheader' since there is already this id generated by HTML customization.
[29278] write_age function broken by Flatpickr conversion
This fixes the display of a patron's age in the staff interface after the date of birth field (for example: Age: 63 years 4 months). This was not displaying after the switch to Flatpickr for date entry on this page in the 21.11 release development cycle.
[28873] Incorrect age displayed in db_dependent/Koha/Patrons.t
This fixes age tests in t/db_dependent/Koha/Patrons.t so that the correct ages are calculated and displayed. It also adds the category code 'AGE_5_10' in messages to display age limits.
[28353] Regression: Batch item deletion no longer shows which items were not removed
This restores and improves the messages displayed when batch deleting items (Tools > Catalog > Batch item deletion).
The messages displayed are:
- "Warning, the following barcodes were not found:", followed by a list of barcodes
- "Warning, the following items cannot be deleted:", followed by a list of barcodes
[21105] oai.pl returns invalid earliestDatestamp
Sponsored by Reformational Study Centre
This fixes the date format in OAI-PMH for Identify.earliestDatestamp so that it uses "YYYY-MM-DDThh:mm:ssZ" and is in UTC, instead of the SQL formsat "YYYY-MM-DD hh:mm:ss" currently used. For OAI-PMH all date and time values must be in the format "YYYY-MM-DDThh:mm:ssZ" and in UTC.
Some significant technical changes were made behind the scenes in this release and it was felt that they should be additionally highlighted in the notes as they could be easily missed above.
A new lib directory has been added for Perl modules.
This might requires some changes in your webserver configuration if you don't install Koha via the Debian packages. More details about these changes can be found on bug 28519.
A fresh new task was added: batch cancel holds [23678]
The ongoing process of migrating forking scripts into proper jobs in the task queue has continued during this cycle.
Three tools have been moved to use the task queue this time:
There has been an important change to the way we build the item form in the cataloguing module. The idea is to make the form and item list reusable from different other modules (acquisition, serials, etc.) [27526] [28445]
To prevent the background job worker to have the whole Koha modules in RAM we replaced the 'use' statements with 'require' [28413].
The update database process has been refactored so each DBRev is run inside a database transaction. This makes the process more robust.
Also, a different format for atomic update has been adopted. It brings more flexibility for the output and make the code more centralized, robust and reusable [25078].
Two new languages have been removed from the installer files: fr-CA [27101] and nb-NO [27622]. Only fr-FR is remaining, the hardest given that it has the UNIMARC frameworks defined.
We added two selenium scripts to test the installer and onboarding steps [19185 and 19821]. The way Jenkins runs the whole test suite can be found at here.
The job 'Koha_Master' is the only one running the whole test suite (ie. with the 'selenium' and 'www' tests). First it recreates the database, runs 00-onboarding.t, recreates the database, runs 01-installer.pl, the other selenium scripts and finally the other test files in random order. You will see your tests failing on this job if you are relying on data injected by the misc4dev scripts used to build koha-testing-docker database.
3 new plugin hooks have been added:
New routes:
A powerful addition to our API framework has been added this cycle. Koha::Object->to_api
now handles a new parameter is_public
that is used to determine the right output depending on the requested object profile. It relies internally on an allow-list to choose what attributes to return. It allows us to reuse existing controllers for public usage, and also provides a simple way to declare what attributes should be returned. Base classes need to implement a method called public_read_list
that returns a list of allowed attributes.
The first two routes to use this new mechanism are:
On the previous cycle the base file for the spec was migrated to YAML to ease the inclusion of Markdown documentation/examples so our API docs render nicely on our API site. New routes have been added as YAML during this cycle. Time constraints prevented us from moving the entire spec into YAML but it is scheduled to be done early next cycle.
Prior to now our date handling library ignored offset data passed with rfc3339 dates. This could lead to problems if an API client converted to UTC or was in a different timezone to the Koha instance time setting. With this release we add proper handling to dt_from_string
such that if an rfc3339 date is input, we parse out the offset and then adjust the time to match the instance timezone for storage.
Some better handling of exception cases is still in the works. Specially for cases our validation library version is not catching correctly [29322].
jQueryUI's timepicker has been replaced with Flatpickr [29239] in the staff interface.
There were some historical ways of playing with a debug mode in Koha. They have been replaced in favor of Koha::Logger->debug
We favored the use of EXPORT_OK over EXPORT, to prevent name clashes and make the import explicit [17600]. It basically means that the following is now incorrect:
use C4::Circulation;
AddIssue(@params);
You will now need to import explicitely the subroutine:
use C4::Circulation qw( AddIssue );
AddIssue(@params);
Note that you can still use the full namespace:
use C4::Circulation;
C4::Circulation::AddIssue(@params);
The Koha manual is maintained in Sphinx. The home page for Koha documentation is
As of the date of these release notes, the Koha manual is available in the following languages:
The Git repository for the Koha manual can be found at
Complete or near-complete translations of the OPAC and staff interface are available in this release for the following languages:
Partial translations are available for various other languages.
The Koha team welcomes additional translations; please see
For information about translating Koha, and join the koha-translate list to volunteer:
The most up-to-date translations can be found at:
The release team for Koha 21.11.00 is
Release Manager: Jonathan Druart
Release Manager assistants:
QA Manager: Katrin Fischer
QA Team:
Topic Experts:
Bug Wranglers:
Packaging Manager:
Documentation Manager: David Nind
Documentation Team:
Translation Managers:
Wiki curators:
Release Maintainers:
Release Maintainer assistants:
Release Maintainer mentors:
We thank the following libraries, companies, and other institutions who are known to have sponsored new features in Koha 21.11.00
We thank the following individuals who contributed patches to Koha 21.11.00
We thank the following libraries, companies, and other institutions who contributed patches to Koha 21.11.00
We also especially thank the following individuals who tested patches for Koha
We thank the following individuals who mentored new contributors to the Koha project
And people who contributed to the Koha manual during the release cycle of Koha 21.11.00
We regret any omissions. If a contributor has been inadvertently missed, please send a patch against these release notes to koha-devel@lists.koha-community.org.
It was a pleasure to serve one more time as release manager, this version of Koha is the best one so far, enjoy it!
The Koha project uses Git for version control. The current development version of Koha can be retrieved by checking out the master branch of:
The branch for this version of Koha and future bugfixes in this release line is 21.11.x.
Bug reports and feature requests can be filed at the Koha bug tracker at:
He rau ringa e oti ai. (Many hands finish the work)
Autogenerated release notes updated last on 25 nov. 2021 15:10:01.