Composite Record Attributes

With this feature we create an abstraction on top of the Record Attribute infrastructure to allow the aggregation of multiple, cross-Attribute values under a single search filter value, accessible through new, dynamic filters.

Each QueryParser filter will be created by the addition of a Composite Record Attribute Definition. For instance, one may wish to create a Composite Record Attribute Definition for an abstract "Item Type" interface component that uses information from the item_type, vr_format, bib_level and item_form Record Attribute Definitions, with each Composite Record Attribute Value having a different combination of Record Attribute Values from some or all of these Record Attribute Definitions. In this way, as single interface component might be presented as a dropdown with options such as "All Books", "All video recordings", "DVDs", "VHS Tapes", "E-Books", "Audio Books" and "Large Print Books". Of particular note are the "DVDs" and "VHS Tapes" entries, which include information from Record Attribute Definitions completely separate from the others. Additionally, the Composite Record Attribute Values defined by this Composite Record Attribute Definition can be used to drive behavioral logic, such as alternate icon display or link generation, in upgrade-friendly template adjustments.

Included in this development is a replacement for the single-attribute Format filter supplied for basic search. Instead, a Composite Attribute is used to combine the values from Item Type, Item Form and Videorecording Format in various ways that provide a more patron-friendly set of choices.

This new Format filter can be adjusted, or even replaced with a completely local one, through configuration and without template adjustment.

Located URI visibility options

Before this, Evergreen restricted the visibility of bibliographic records that make use of Located URIs in a way that attempts to model licensing restrictions.

There now exists a global flag to allow sites the option of changing the behaviour of Located URIs so that they act in a way analogous to copies for visibility testing. When the opac.located_uri.act_as_copy global flag is enabled, Located URIs will cause their containing bib records to become visible in searches where the URI is in scope to either ancestors of the search library, as before, or descendants of the search library, as copies do. As before, if a preferred library is supplied by the user, it is added to the list of visible org units to check.

Additionally, while the underlying UnAPI and supporting code was capable of providing a reasonable and logical sort order for the Located URIs when embedded as XML holdings elements, the client-facing UnAPI method was not making use of that. It now does, and uses the same sorting algorithm as is used for copies.

Multi-valued Record Attributes and Controlled Record Attributes

Having identified common use cases and reasonable restrictions that can be placed on the feature set, we have extended the Record Attribute infrastructure to support both the extraction and storage of all instances of a defined Attribute found within a bibliographic record, as well as provide new and more powerful indexing of existing data, in several ways.

Record Attributes can now be defined by configuration as either single-valued or multi-valued. For any Attribute configured as single-valued, only the first value extracted from a record will be stored. This configuration parameter and restriction is in place to support potential query optimizations based on foreknowledge of whether a given Attribute is multi- valued or not.

Record Attributes will be defined by configuration as either controlled or uncontrolled. A controlled Record Attribute is one that has entries in the Coded Value Map infrastructure specifying the valid values the record may carry for this attribute. If defined as a controlled Attribute, any unknown values extracted from a record will be ignored. Uncontrolled Attributes, however, may contain any value. This configuration parameter and restriction also supports potential query optimization.

We store uncontrolled attribute values in a new table with a monotonically decreasing ID sequence, separating it from controlled values, reducing storage requirements by retaining only unique values, and making lookup faster.


  • A Record Attribute’s values must match Coded Value Map entries if it is to be a Controlled Attribute. Coded Value Map control is indicated by a new "controlled" boolean on the config.record_attr_definition table.
  • Record Attributes must "opt in" to multi-valued-ness. Record Attributes will opt in via a new "multi" boolean on config.record_attr_definition; this restriction enforces site config requirements by being explicit about the definition of "multi" fields.
  • If controlled but not opt’d in to multi-mode, only the first value will be recorded but the new search mechanism will be used.
  • Only single-valued Record Attributes will be available for use by the system as Sort Axes.
  • Only controlled Record Attributes will be available for use by the TPAC as dynamically generated filter UI components, such as filter dropdowns or multi-selects.

New External Dependency

This new feature requires the addition of the intarray extension to Postgres. This is a stock extension available on most linux distributions via the same package as the already-required plperl extension.

Restore OpenSearch Support

Restore previously held functionality from JSPAC to support OpenSearch in TPAC. This allows users to easily add the Evergreen search engine to their browser’s built-in set of search engines.

Accepting payments with Stripe

Stripe is a payment processing service that lets sites take credit card payments without payment card information ever touching the sites' own servers.


Using Stripe as a payment processor means that clients must have Javascript enabled in order to submit fine payments through your OPAC.

Library Settings

The following settings need to be set at the appropriate org level for sites wanting to use Stripe.

  • "Allow Credit Card Payments" (should be true)

  • "Enable Stripe payments" (should be true)

  • "Stripe publishable key" (value provided by Stripe)

  • "Stripe secret key" (value provided by Stripe)

  • "Name default credit processor" (should be Stripe)


TPAC library pages

This feature adds one web page per library in the system to the TPAC at http://hostname/eg/opac/library/<SHORTNAME> and http://hostname/eg/opac/library/<ID>. The pages publish the following information from Evergreen (if available):

  • Name of the library
  • Link to the library web site (from Library Information URL library setting)
  • Opening hours
  • Email address
  • Phone number
  • Mailing address
  • Link to parent library (if applicable)

Library pages are linked from the copy table on the record details page.

Structured data

The library web pages publish schema.org structured data, which can enable search engines and other systems to better understand your libraries and their resources.

TPAC Metarecord Search and Holds

This feature adds support for searching and placing holds against metarecords.

Metarecord Searching

In the top search bar and in the advanced search page, there is a new search modifier labeled "Group Formats and Editions". When selected, searches are performed against metarecords and metarecords are shown in the results list.

For each metarecord, format icons for all constituent records are shown. When a use clicks on a metarecord, if the metarecord has multiple constituent records, the user is taken to the constituent records list. Similarly, when a metarecord only has one constituent record, the user is directed to the record detail page for the constituent record.

Metarecord Holds

Clicking the place hold link from the metarecord results page shows the available formats and languages for the metarecord, allowing the user to limit the scope of the hold. Non-metarecord holds now get a new "Advanced Holds Options" link which allows user to promote a title hold to a metarecord hold, thus providing access to the formats / editions selector, before the hold is placed.

In the My Account holds list, icons for all selected formats are displayed in the Format columns for the hold. When editing a metarecord hold, users may modify the desired formats and languages.


Admins may disable this feature by un-commenting the "metarecord.disabled" attribute in config.tt2

Web Content Accessibility Guidelines (WCAG) Compliance

To make the catalog more accessible to users with a range of disabilities, including blindness and low vision, the catalog has been revised to better comply with the Web Content Accessibility Guidelines (WCAG) 2.0. These revisions target level "AA" of compliance.

For more information on WCAG, see http://www.w3.org/WAI/intro/wcag