1. Upgrade notes

  • The fix for Bug 2040501 requires two new Perl modules for Evergreen: Net::SFTP::Foreign and IO::Pty.

  • The new staff client logos added in Bug 2049657 live in a different directory. OPAC customizations that includethe Evergreen logo should update to the new SVG files:

    • Open-ILS/web/images/evergreen-logo.svg

    • Open-ILS/web/images/evergreen-logo-white.svg

    • Open-ILS/web/images/evergreen-round-logo.svg

  • Bug 1949109 adds a new Global Flag called staff.search.shelving_location_groups_with_lassos ("Staff Catalog Search: Display shelving location groups with library groups"). If disabled, Shelving Location Groups will not be included in new filter dropdown.

2. New Features

2.1. Accessibility

2.1.1. SVG Logos in Staff Client

The Evergreen logo images have been updated to the SVG format for clarity and improved support for viewing on dark backgrounds (i.e. forced colors mode).

Developer Notes

Paths to the Evergreen logo files have changed. OPAC customizations that include the Evergreen logo should update to the new SVG files:

  • Open-ILS/web/images/evergreen-logo.svg

  • Open-ILS/web/images/evergreen-logo-white.svg

  • Open-ILS/web/images/evergreen-round-logo.svg

2.1.2. Accessibility Miscellaneous

Numerous accessibility bugfixes, including the following:

  • Adds drop shadows to open dropdown menus and active tabs (Bug 2057432)

  • Fixes the styling of the Angular grid’s Manage Columns modal (Bug 2056069)

  • Fixes the styling of the Angular grid’s Manage Actions Menu modal (Bug 2056069)

  • Restores bold styling of paid off amount in purchase order summary. (Bug 2051250)

  • Restores bold weight to eg-grid column headers (Bug 2051566)

  • Increases the visibility of focus outlines in the Angular staff client (Bug 1828463)

  • Removes placeholder attributes from inputs in the Angular record editor and display field help directly rather than in a tooltip. Also moves the translate button next to text inputs for translatable fields. (Bug 2021862)

  • Remove extra tab stops when navigating bib record actions in staff client using keyboard (Bug 2052960)

  • Ensures that both AngularJS and Angular grids use a gear icon for the grid settings menu. (Bug 1803788)

  • Patron bill grid row status color contrast adjustments (Bug 2045292)

  • Makes Angular nav bar responsive (Bug 1945498)

  • Adds skip link for Angular staff navbar (Bug 2017034)

  • Matches card tabs' active color to card background (Bug 2059046)

  • Fixes color contrast in printer settings warnings (Bug 2060316)

  • Refactors Shelving Location Groups Admin for accessibility (Bug 2042879)

  • Fixes an accessibility issue in staff client forms (Bug 2067115)

2.2. Acquisitions

This work represents the last major part of the multi-year Angular Acquisitions project. The Invoices and Claims interfaces have been reimplemented in Angular and have had several improvements, including scoping claim policy actions; adding a summary to invoices recording funds and charges; integration with Acquisitions Search; and other bugfixes.

The MARC Federated search and Z39.50 search interfaces have also been reimplemented in Angular, including several bugfixes associated with Z39.50 search in particular.

A new component is also added for the MARC Batch Import/Export (Vandelay) and Load MARC Order Records interfaces that allows for background processing of record imports. There is a checkbox in each of these interfaces labeled Request background import and a field to enter an email address. If a user selects background import, they can navigate away from the import screen while the import continues processing in the background. If they enter an email address, they will recieve a notification when the import is complete. Status and history of background imports for each user can be seen in the MARC Batch Import/Export interface under the new Background Imports tab.

2.2.2. Fixes for SFTP Transfer of EDI Order Data

With more vendors requiring Secure File Transfer Protocol (SFTP) for sending and receiving acquisitions data via EDI, it was discovered that the SFTP mechanism in the Evergreen acquisitions module did not work as well as it should.

This release repairs the SFTP transfer mechanism so that it should work with most vendors who require usernames and passwords for authentication.

To switch from FTP to SFTP, edit the EDI account’s host entry to begin with "sftp://" instead of "ftp://". Check with your EDI vendor before making this change. They may have additional requirements.

New Prerequisite Perl Modules

This fix introduces two new required Perl modules for Evergreen: Net::SFTP::Foreign and IO::Pty. These can be installed by running the prerequisite installation for your Linux distribution. Please see the Evergreen installation instructions.

2.2.3. Acquisitions Miscellaneous

  • Marks "Receive on Scan" for translation in Acquisitions (Bug 2043418)

  • Adds missing shipment notification permissions (Bug 2055089)

  • Get actual remote file name when sending EDI message via SFTP. (Bug 2060153)

  • Improves description of the "How to set default owning library for auto-created line item items" Library Setting (Bug 2028095)

  • Improves documentation of Fiscal Propagation and Rollover (Bug 2049774)

  • The fund dropdowns for line items and direct charges on purchase orders now display funds that user has permission to use. (Bug 2040637)

  • Fixes display of Expand All button’s icon on purchase order page (Bug 2049654)

2.3. Administration

2.3.1. Support Scripts: marc_export check for required IDs

The marc_export script will now exit if it expects to be passed IDs and they are not found. Previously it would continue on as if you wanted all records in the system in that situation. (Bug 1329872)

2.3.2. Angular Circ Polices Editor and associated fixes

Angularized the Local Administration → Circulation Policies interface, including several other bugfixes. (Bug 1855781)

  • Added an option to fmEditor for allowing one to unset a field (aka set to null)

  • Added some misc fmEditor tweaks/additions for developers

  • Replaced checkboxes for boolean fields in fmEditor with radio buttons

  • Changed instances of Copy Location to Shelving Location in the IDL, which wil be reflected in many interfaces

  • Changed every IDL instance of Copy, Copies, and copies in a label to Item, Items, and items, respectively; with the exception for Copy Location, which is normalized to Shelving Location. Any instance of "Lib" in a label gets expanded to "Library".

  • Org Unit becomes Checkout Library for the circ matrix. Checkout is more prevalent in the code than Check Out, but we should pick one.

2.3.3. Administration Miscellaneous

  • Fixes the fine level check on the asset.copy_template table, still used by serials. (Bug 1384796)

  • Fixes an Apache internal server error in SuperCat when retrieving copies or call numbers with statistical categories. (Bug 2047587)

  • Removes make_release -x option to build XUL client (Bug 2051370)

  • make_release now builds the browser client by default. (Bug 2051370)

  • Fixing hard-coded ID number for new AT Event Definition (Bug 2065540)

  • Maintains the staff client’s automated test suite (Bug 2065457)

  • Upgrades dependencies for staff client automated tests/ (Bug 2036312)

  • Adds PATRON_BARRED.override permission if missing. (Bug 2062023)

  • TypeScript compiler target updated to ES2021 (Bug 1615781)

  • Remove unused code in biblio.pm (Bug 2063980)

  • Adds field group styling option to fieldmapper editor (Bug 1915464)

  • Reorders fields in Local Administration ⇒ Hold Policies (Bug 1915464)

  • Reorders fields in Server Administration ⇒ Circulation Max Fine Rules (Bug 1839878)

  • Reorders fields in Server Admin ⇒ Circulation Duration Rules (Bug 1839875)

  • Reorders fields in Local Administration ⇒ Statistical Popularity Badges (Bug 2052641)

  • Remove unnecessary error message from ./configure installation step (Bug 2054454)

  • Makes it possible to display the org unit ID as a number on Angular record editor forms for editing org units (Bug 2051944)

  • Displays Organizational Unit ID in Organizational Unit Configuration interface (Bug 2051879)

  • Fixes test failure in Angular staff client (Bug 2053245)

  • Fix bug that could cause the Cash Reports page to display payments for the wrong day. (Bug 2051599)

  • Recommendation to disable just-in-time feature of Postgres 12 (Bug 2042158)

  • Fix for errant comma in opensrf.xml redis configuration (Bug 2065817)

  • Fixes for combobox issues introduced in 3.13-beta features (Bug 2066934)

  • Update to Queued Ingest processing (Bug 2066981)

  • Fix for combobox inputs in admin interfaces (Bug 2067115)

  • Fix for Did You Mean searches taking too long (Bug 2059974)

2.4. Architecture

2.4.1. IDL Improvements and Clean Up

The IDL (fm_IDL.xml) has undergone improvement and clean up.

More fields have been marked required. Required fields are those that come from a database table, have a "NOT NULL" constraint in the schema, and do not have a default value assigned in the database.

This change has the advantage of making it easier for the Angular staff client to identify required fields and prevent bad data from being entered in many interfaces.

Classes that are read-only and virtual were ignored, since they cannot be updated. Virtual fields were also skipped for similar reasons.

No attempt was made to validate whether or not existing required fields should be required. If a field was required before these changes, it should still be required now.

Line wrap and spacing have been updated to match the output of libxml2.

Spaces used for indentation have been replaced with tabs using the vim and Emacs setting of 4 spaces per tab.

Two schema validation errors have been corrected:

  1. A typo of "relteype" was corrected to "reltype."

  2. An extra "retrieve" permissions entry was removed from the asc class.

If you have custom IDL entries, you will want to make sure that you merge with this update and check for conflicts. It would be a good idea to validate your merged IDL with the schema file:

xmllint --schema Open-ILS/examples/fm_IDL.xsd Open-ILS/examples/fm_IDL.xml

For maintaining future compatibility and ease of merging, you may want to ensure that your custom IDL entries follow the above formatting guidelines.

2.5. Cataloging

2.5.1. New MARC Editor

Significant revision of the MARC rich editor. Instead of contextual menus, inputs for tags, indicators, and subfield codes use comboboxes. Subfield values use inputs or textareas, depending on the size of existing data or expected size based on the chosen subfield (e.g. 520 $a). Actions have individual buttons for better keyboard support.

Fields may be rearranged using drag and drop; the move button also supports up/down arrow key movement.

When navigating by keyboard, subfields are treated as a group. When a subfield group has focus, the right arrow key moves the cursor into the subfield code for editing and the tab key advances to the subfield value. An additional button to insert a new subfield appears; pressing Tab again moves focus to the next subfield group.

The rich editor now has a gray background based on user feedback regarding eyestrain with the white background in 3.6+.

The Help button toggles the display of inline MARC references for fields 1xx-8xx as well as the keyboard shortcuts at the top. Fixed fields and control fields do not currently display inline help, but fixed field labels have tooltips to help users decipher the abbreviations.

2.5.2. Holdings Editor Batch Action <None> Option Restored

The <None> option has been restored for prefix and suffix fields in the Holdings Editor’s Batch Actions. (Bug 1998413)

2.5.3. Patron View Discovery Layer URL

Example: https://example.com/Record/{eg_record_id}

2.5.4. Item Alerts Fixes

Fixes to editing item alerts, including the following (Bug 2012971):

  • Fixes invocation of (Manage) Item Alerts dialog in Holdings Editor.

  • Adds batch edit for Item Alerts in Holdings Editor. Alerts get grouped together for editing if they are mostly identical.

  • Adds Manage Alerts button to Item Alerts dialog during alert display in Angular ("eg2") interfaces.

  • Fixes TypeError: defaults is null exception for missing Default Item Alert Type preference.

  • Adds a Changes Pending indicator for Holdings Editor.

2.5.5. Cataloging Miscellaneous

  • Tightened permission checks for CREATE_COPY, UPDATE_COPY, CREATE_VOLUME, and UPDATE_VOLUME (Bug 1793811 and Bug 2018491)

  • Added read-only view for Holdings Editor if lacking an appropriately scoped UPDATE_COPY permission for all items being edited, including a mixed Permission dialog if the permission only covers some of the items being edited (Bug 1932062). Actions from the dialog:

    • Only show permissible items

    • Read-only view for all items

    • Change Operator and try again

  • Updates MARC tag tables to support new rich editor (Bug 2006969)

  • Improves performance of item refresh after batch editing (Bug 1821094)

  • Show the total number of record notes in the Record Note tab in the staff catalog. (Bug 1991103)

  • Fixes problem where "Form" value could not be saved in MARC editor for electronic resources. (Bug 2056204)

2.6. Circulation

2.6.1. Example and/or regex for default and SMS phone fields

Adds the following new Library Settings for example and/or regex validation for the default and SMS phone fields on the patron registration and edit interfaces:

  • Regex for default_phone field on patron registration

  • Example for default_phone field on patron registration

  • Regex for default_sms_notify field on patron registration

  • Example for default_sms_notify field on patron registration

2.6.2. Circulation Miscellaneous

  • Pull list now includes Publication year. Print template code: [% hold.pubdate %] (Bug 2049673)

  • Hold Status in holds grid is now sortable. Current Item, and Requested Item Columns are now non-sortable on Angular holds grids to avoid errors. (Bug 1889133)

  • Holds grid can now print / download the Hold Status column. (Bug 2051038)

  • Ensures alerts are displayed in the patron summary when selecting a record from patron search results. (Bug 1980273)

  • Log staff user for canceled holds (Bug 1963541)

  • Enables clearing the default pickup location in the patron editor. (Bug 1939154)

  • Ignore deleted monograph parts when checking title holds while "Require Monographic Part when Present" is on. (Bug 2051557)

  • Fix bug that allowed one checkout after a patron had reached a group penalty threshold, for example PATRON_EXCEEDS_OVERDUE_COUNT or PATRON_EXCEEDS_CHECKOUT_COUNT. (Bug 1890822)

  • Add privilege expiration date column to Group Member Details table (Bug 1779743)

  • Fixes overly large barcode field on Mark Item as Missing Pieces page. (Bug 2051156)

  • Fixes annotate payment when using keyboard navigation (Bug 2047158)

  • Adds help button for Convert change to patron credit on patron bills (Bug 1929596)

  • Prevents holds with an invalid pickup location selected from being placed in the angular catalog (Bug 2000270)

  • Moves submit button to end of Angular patron search form (Bug 1615805)

  • Moves submit button to end of AngularJS patron search form (Bug 1615805)

  • Fixes custom permission tree display sort in the patron registration/edit screen (Bug 1843940)

2.7. Client

2.7.1. Improve Button Colors in Staff Client

Yellow is no longer used as a button color in the staff client for normal actions such as closing dialogs that do not involve a condition that actually requires a warning.

Instead, light grey is used as a default color for buttons that do secondary actions, with a variant that includes red upon hover or activation for actions that remove data or clear form input.

Developer Notes

The btn-warning CSS class should be avoided in the staff interface unless needed for actions that truly require a warning. Instead, btn-normal should be used for secondary actions such as closing a dialog and btn-destroy for actions that would remove or clear data.

A new dropdown is available when in-scope, including globally available, Library Groups are present. In-scope Shelving Location Groups can also optionally be presented in this dropdown. Scoping of Library Groups and Shelving Location Groups, in this interface component, is based on and effectively replaces the selected organizational unit, such that the Library Group or Shelving Location Group takes the place of a branch of the organizational hierarchy for location filtering.

When a Library Group or Shelving Location Group is selected from this new component, specific Shelving Location selection is disabled because those filtering axes are mutually exclusive.

Enabling and disabling Shelving Location Group inclusion

This development adds a new Global Flag called staff.search.shelving_location_groups_with_lassos ("Staff Catalog Search: Display shelving location groups with library groups"). If disabled, Shelving Location Groups will not be included in new filter dropdown. This is provided as a way to entirely separate Shelving Location Groups from this interface change in future parallel development, if desired, on an instance-by-instance basis.

2.7.3. Client Miscellaneous

  • Fixes cropping of reports icon on staff interface splash page (Bug 2046970)

  • Fixes crash when displaying Staff View for a deleted record that has no metarecord mappings (Bug 2039229)

  • Improves speed of searching for and displaying (in Staff View) titles that are members of large metarecord sets. (Bug 2051708)

  • Improves the accessibility of the Angular staff login page (Bug 1839364)

  • Marks "Next" and "Back" for translation in Browse and Shelf Browse (Bug 1920247)

  • Use "search" input type for staff catalog query inputs (Bug 2065326)

  • Fixes problem where the staff catalog could attempt to jump to an empty metarecord (Bug 1949214)

  • Adds a "Clear Added Content Cache" item to the Other Actions menu in the staff catalog record page (Bug 1939162)

  • Show the More/Less toggle on facet display in the staff catalog only when a facet has more than five entries. (Bug 2046974)

  • Removes inaccurate shelving location count in staff catalog (Bug 2048798)

2.8. OPAC

2.8.1. Creating carousels from item bucket or item status

The item status interface has a new option: "Create Carousel from Selected Items". The item bucket interface has a new option: "Create Carousel from Bucket". Both of these options allow users to create carousels, which can later be edited as needed in the Carousels Admin interface.

One use case for the new item bucket interface is to allow libraries to showcase existing item buckets that they have created for a holiday, program, or display.

2.8.2. Allow Patrons to Edit Preferred Name

This change builds upon the existing staff client preferred name functionality to allow patrons to edit their preferred names directly through OPAC → My Account → Preferences → Personal Information.

2.8.3. OPAC Miscellaneous

  • Removes non-functional staff-only "Locate Z39.50 Matches" buttons from OPAC templates (Bug 2021903)

  • Restores ability to submit basic OPAC search by hitting enter in search input (Bug 2053035)

  • Closes autosuggest dropdown in the public catalog when it loses focus (Bug 2054128)

  • Ignores duplicate links from 856 fields with multiple $9’s (Bug 1582720)

  • Adds 245$n and 245$p to the title field in public catalog list CSV download, to better distinguish between multiple titles in the same series. (Bug 1909585)

  • Changes "Account Information and Preferences" in areas of the OPAC to "Personal Information and Preferences" (Bug 1980138)

  • Clarify button text in public catalog New List interface (Bug 2047589)

  • Changes button order in OPAC My Lists (Bug 2047592)

  • Adds idempotency to Stripe to prevent duplicate payments (Bug 2057948)

  • Adds an X icon to selected search facets in OPAC. (Bug 1086550)

  • Adds page navigation to bottom of OPAC Shelf Browser (Bug 1763173)

  • Presents an alert in the public catalog when no hold notifications are set (Bug 2002572)

  • Remove potentially harmful javascript from the opac.patron.custom_css library setting when it is saved and before it is shown to a user (Bug 1869971)

  • Fixes placement of Save Notes button in public catalog My Lists page (Bug 2047588)

2.9. Reports

2.9.1. Angular Reporter rewrite

All existing Reporter interfaces, except for the actual report output, have been reimplemented using Angular to match the rest of the staff client. In addition to the updated and improved interfaces, additional functionality is now available:

  • Field display order and output sort order are now separated, and can be controlled independently

  • Nullability has been simplified, presenting the template creator with a choice between INNER join (linked required on both tables) and LEFT join (only the "parent" table is required to have a contributing row)

  • Staff can see the list of Reports that make use of a Template, and the list of Outputs that are generated from a Report

  • Where supported by the backend services, all Browse and Search grids used in the report management interfaces are sortable in ways other than by relevant timestamp, and many are now filterable using standard egGrid filters

Significant portions of the UI are inherited from the Simple Reporter implementation. Additionally, many existing UI elements have been enhanced to add supporting functionality, and any new functionality is available for use in other interfaces.

Existing templates

Care has been taken to allow existing templates to function properly in the new interface implementation. However, because the internal structure of the templates have changed, it is possible that some existing templates may need to be recreated.

2.10. SIP

2.10.1. SIP2Mediator Support

Evergreen now supports back-end functionality to integrate with SIP2Mediator (Bug 1901930).

For more information, see the Evergreen Wiki.

This work includes a SIP Filters tool which allows an administrator to choose to redact and/or overwrite the values in any SIP field with a field identifier. This was originally on Bug 1981712.

New Admin Interfaces
  • Manage SIP accounts: Administration ⇒ Server Administration ⇒ SIP Accounts

  • Manage SIP Screen Messages: Administration ⇒ Server Administration ⇒ SIP Screen Messages

  • Manage SIP redactions and filters: Administration ⇒ Server Administration ⇒ SIP Filters

2.11. Miscellaneous

  • Serializes PCRUD requests on the MARC Batch Import/Export Recent Sessions page to avoid excessive PCRUD calls (Bug 1945003)

  • Reduces size of release tarball by not shipping the Angular build cache (Bug 2048907)

  • Adds missing bib bucket IDL permissions, fixes carousel admin interface (Bug 2051140)

  • Fixes issue where cover images were not displayed in the selfcheck holds list for titles that lack ISBNs (Bug 2037564)

  • New development tool to help prepare release notes using information from Git commits (Bug 2051874)

  • Silences some "Use of uninitialized value" log entries from catalog search (Bug 2043045)

  • Removes obsolete remoteauth.cgi example script (Bug 2019211)

  • Update the version of Antora used to build the documentation (Bug 2036328)

  • Allow Windows users to generate the Evergreen manual locally (Bug 1930099)

  • Adds documentation for the Angular staff catalog, based on documentation produced by Indiana Evergreen.

  • Fixes issue where Reports interface would not load if the BitWarden browser plugin is installed (Bug 2052567)

  • Fixes spelling error in new Reports interface (Bug 2066490)

3. Acknowledgments

The Evergreen project would like to acknowledge the following organizations that commissioned developments in this release of Evergreen:

  • Evergreen Community Development Initiative

  • Evergreen Indiana

  • King County Library System

  • OWWL Library System

  • PaILS

We would also like to thank the following individuals who contributed code, translations, documentation, patches, and tests to this release of Evergreen:

  • Andrea Buntz Neiman

  • Angela Kilsdonk

  • Bill Erickson

  • Blake Graham-Henderson

  • Brian Kennedy

  • Brett French

  • Carol Witt

  • Chris Sharp

  • Christine Morgan

  • Dan Briem

  • Debbie Luchenbill

  • Elizabeth Davis

  • Elizabeth Thomsen

  • Eva Cerniňáková

  • Galen Charlton

  • Garry Collum

  • Gina Monti

  • Jane Sandberg

  • Jason Boyer

  • Jason Etheridge

  • Jason Stephenson

  • Jeff Davis

  • Jennifer Pringle

  • Jennifer Weston

  • Jessica Woolford

  • Josh Stompro

  • Katie Greenleaf Martin

  • Ken Cox

  • Kyle Huckins

  • Lena Hernandez

  • Llewellyn Marshall

  • Michele Morgan

  • Mike Rylander

  • Robin Fitch

  • Rogan Hamby

  • Ruth Frasur Davis

  • Scott Angel

  • Shula Link

  • Spencer Pennington

  • Stephanie Leary

  • Steven Mayo

  • Susan Morrison

  • Terran McCanna

  • Tiffany Little

  • Zavier Banks

We also thank the following organizations whose employees contributed patches:

  • Bibliomation Inc.


  • Equinox Open Library Initiative

  • Georgia Public Library Service (PINES)

  • King County Library System


  • NC Cardinal


  • Princeton University

  • Sigio

We regret any omissions. If a contributor has been inadvertently missed, please open a bug at http://bugs.launchpad.net/evergreen/ with a correction.