Koha 3.14 Release Manager’s Update #1

This is the first of a set of periodic updates on the progress of the next major release of Koha, 3.14.

Recent activity

As of the drafting of this post, I have pushed a total of 185 patches to the master branch since the beginning of my tenure as release manager. The most visible enhancement is the introduction of a module for course reserves. The course reserve module allows academic libraries to designate items that are held on reserve for students of specified courses. When an item is placed on course reserve, it is associated with one or more courses and can have various attributes, including location and item type, temporarily changed. This allows that item to have a different (and usually shorter) loan period than it normally would. When the item is taken off reserve at the end of the academic term, its normal attributes are restored. Courses and course reserve items can be searched and displayed in the OPAC.

The course reserves work was performed by Kyle Hall with a number of QA follow-ups and tweaks by various other developers. For more information, check out Bug 8215.

Other enhancements include:

  • Bug 6281: The sorting of LC call numbers is now correct in various places, including the inventory report and the shelf browser. The patch adds a new dependency on the Perl module Library::CallNumber::LC, which is also used by Evergreen.
  • Bug 6413: When recording payment of a fine, you can now add a note.
  • Bug 7883: The bib record editor now has an option to save a record and continue editing it without losing your place.
  • Bug 8584: The command-line utility cleanup_database.pl now has a parameter for specifying how far back in time to purge patron messages.
  • Bug 8600: It is now possible to both add and remove search input fields in the OPAC advanced search form.
  • Bug 8845: It is now possible to search patron records by date of birth.
  • Bug 9161: There is now a parameter to tmpl_process3.pl to have it apply a translation to just a specified file. This should make it easier and faster to maintain translations, particularly custom ones.
  • Bug 9286: There is now a new command-line script, mod_zebraqueue.pl, that can be used to inject a single bib or authority record in the indexing queue. This should prove handy for situations where one updates a MARC record directly in the database, then need to reindex it.
  • Bug 9370: The splitting of LC call numbers on labels is improved. This also uses the Library::CallNumber::LC Perl module.
  • Bug 9722: Patrons can now add a note when placing a hold from the OPAC.
  • Bug 9307: Library staff can now define custom purchase suggestion statuses.
  • Bug 9757: The staff interface’s display of the contents of record lists is revamped to make its display consistent with catalog search results and to link to more functions on bib records.
  • Bug 9826: The framework for MARC21 authority records is updated.
  • Bug 9998: There is now a new command-line tool, cmp_sysprefs.pl, to import and export system preferences to file and compare a system preference dump with a Koha database. This should be useful for both developers and folks who manage a large number of Koha databases
  • Bug 10036: The global search box is now displayed on the item editor.
  • Bug 10141: The MARC21 editor for the 008 field now has a drop-down for each position of the 008/18-21 and the 008/24-27.
  • Bug 10221: The hold expiration date is now displayed on patron hold lists in the staff interface.

Significant bugfixes include:

  • Bug 10120: This adds a system preference, CalculateFinesOnReturn, to determine whether fines are recalculated when a loan is returned. The unconditional recalculation of fines, which was added as part of hourly loans support, was a blocker for some libraries.
  • Bug 10262: Fine calculation at checkin now respects the CircControl system preference.
  • Bug 10313: The order history page now links to the correct invoices.
  • Bug 10443: This fixes a problem where the borrower_files table wasn’t being created during new installations.

Architectural and coding changes

I pushed several patches that affect how future code and templates should be written. For example, the patch for bug 10206 adds a Template Toolkit plugin for fetching a system preference value. This plugin would be used in a template like this:

[% IF Koha.Preference( 'MyPreference ) == 'SettingA' %]

I encourage use of this plugin in templates, particularly for system preferences whose primary purpose is to affect display. Doing so will improve the our ability to make the Perl code focus on its core concern (business logic) and make the templates focus on their core concern (display).

The patch for bug 9424 removes several onclick attributes from the staff interface’s header.inc.

The patch for bug 9773 continues the project spearheaded by Owen Leonard of removing the YUI JavaScript framework from Koha.

I also pushed a number of patches that improve the test suite, particularly the database-dependent tests, and would particularly like to thank Jonathan Druart for his efforts in this area. During recent weeks, there has been quite a bit of discussion on ways to better write DB-dependent tests. Some best practices that have emerged are:

  • Test scripts should be as self-contained as possible. By this I mean that they should make as few assumptions as possible about what data and settings may or may not exist in the test database, and consequently should create (or load) whatever test data they need to exercise the functionality being tested, rather than assume that it is already in the test database.
  • Test scripts should turn off auto-commit at the beginning. That way, when the test script finishes (or gets interrupted), any changes it made to the database will get automatically rolled-back, restoring the database to its original state without having to write special cleanup code.

Another patch of architectural note is the one by Marcel de Rooy for bug 10256, which removes a number of unused routines from C4::Overdues. I like patches that remove dead code almost as much as I like cookies.

Upcoming work

Over the next few weeks one of my focuses will be helping to finalize the patches for bug 8798, which introduces support for DBIx::Class and DBIx::Class::Schema::Loader. This will offer several significant improvements to Koha’s database-access layer, including:

  1. A set of ready-made data access classes that will remove the need for a lot of repetitive code to fetch and store data from the database.
  2. A framework that will make it much easier to contemplate adding support for other RDBMS’ such as PostgreSQL.

I will also be working on several other projects, including:

  • Tackling the UTF-8 encoding issues that are the topic of bug 6554 while avoiding regressions.
  • Writing a counter-patch for proposed enhancements to Koha’s internal logging; the counter-patch will focus on adding support for syslog.
  • Merging Koha’s SIPServer fork back into the origin project.

Acknowledgments

I would like to thank everybody who has taken the time to submit a

  • bug report
  • a patch
  • a patch review
  • a critique
  • a kind thought

… towards the improvement of Koha.

Pedo mellon a minno