]> git.evergreen-ils.org Git - Evergreen.git/blob - docs/RELEASE_NOTES_3_7.adoc
docs: some edits to the 3.7 release notes
[Evergreen.git] / docs / RELEASE_NOTES_3_7.adoc
1 Evergreen 3.7-beta Release Notes
2 ================================
3 :toc:
4 :numbered:
5
6 Upgrade notes
7 -------------
8
9 New Features
10 ------------
11
12
13
14 Administration
15 ~~~~~~~~~~~~~~
16
17
18
19 Single Sign On (Shibboleth) OPAC integration
20 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21
22 The Evergreen OPAC can now be used as a Service Provider (SP) in a
23 Single Sign On infrastructure.  This allows system administrators to
24 connect the Evergreen OPAC to an identity provider (IdP).  Such a scenario
25 offers significant usability improvements to patrons:
26
27 * They can use the same, IdP-provided login screen and credentials that they
28 use for other applications (SPs).
29 * If they have already logged into another participating application, when
30 they arrive at the Evergreen OPAC, they can be logged in without needing to
31 enter any credentials at all.
32 * Evergreen can be configured to offer a Single Sign-out service, where
33 logging out of the Evergreen OPAC will also log the user out of all other SPs.
34
35 It can also offer security benefits, if it enables a Shibboleth-enabled
36 Evergreen installation to move away from insecure autogenerated user passwords
37 (e.g. year of birth or last four digits of a phone number).
38
39 Different Org Units can use different IdPs.  This development also supports a
40 mix of Shibboleth and non-Shibboleth libraries.
41
42 Note that only the OPAC can be integrated with Shibboleth at this time; no such
43 support exists for the staff client, self-check, etc.
44
45 Also note that this development does not include automatic provisioning of
46 accounts.  At this time, matching accounts must already exist in Evergreen
47 for a patron to successfully authenticate into the OPAC via Single Sign On.
48
49 Installation
50 ++++++++++++
51
52 Installing and configuring Shibboleth support is a complex project.  In
53 broad strokes, the process includes:
54
55 . Installing Shibboleth and the Shibboleth Apache module (`apt install libapache2-mod-shib2` on Debian and Ubuntu)
56 . Configuring Shibboleth, including:
57   * Setting up a certificate
58   * assigning an Entity ID
59   * getting metadata about the IdP from the IdP (perhaps "locally maintained
60   metadata", where an XML file from the IdP is copied into place on your
61   Evergreen server)
62   * Understanding what attributes the IdP will provide about your users,
63   describing those in the `attribute-map.xml` file.
64 . Providing your Entity ID, information about possible bindings, and any
65 other requested information to the IdP administrator.  Much of this information
66 will be available at http://YOUR_EVERGREEN_DOMAIN/Shibboleth.sso/Metadata
67 . Configuring Apache, including:
68   * Enabling Shibboleth authentication in the `eg_vhost.conf` file
69   * (Optional) Using the new _sso_loc_ Apache variable to identify
70   which org unit should be used as the context location when fetching
71   Shibboleth-related library settings.
72 . As a user with the new `SSO_ADMIN` permission, configure Evergreen using
73 the Library Settings Editor, including:
74   * Enable Shibboleth SSO for the OPAC
75   * (Optional) Configure whether you will use SSO exclusively, or offer
76   patrons a choice between SSO and standard Evergreen authentication
77   * (Optional) Configure whether or not you will use Single Log Out
78   * (Optional) In scenarios where a single Evergreen installation is
79   connected to multiple IdPs, assign org units to the relevant IdPs,
80   referenced by the IdP's Entity Id.
81   * Of the attributes defined in `attribute-map.xml`, configure which one
82   should be used to match users in the Evergreen database.  This defaults
83   to uid.
84   * For the attribute you chose in the previous step, configure which
85   Evergreen field it should match against.  Options are usrname (default),
86   barcode, and email.
87
88 This https://www.youtube.com/watch?v=SvppXbpv-5k[video on the SAML protocol] can
89 be very helpful for introducing the basic concepts used in the installation and
90 configuration processes.
91
92
93
94
95 Architecture
96 ~~~~~~~~~~~~
97
98
99
100 Block Login of Expired Staff Accounts
101 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
102 Evergreen now has the ability to prevent staff users whose
103 accounts have expired from logging in. This is controlled
104 by the new global flag "auth.block_expired_staff_login", which
105 is not enabled by default. If that flag is turned on, accounts
106 that have the `STAFF_LOGIN` permission and whose expiration date
107 is in the past are prevented from logging into any Evergreen
108 interface, including the staff client, the public catalog, and SIP2.
109
110 It should be noted that ordinary patrons are allowed to log into
111 the public catalog if their circulation privileges have expired. This
112 feature prevents expired staff users from logging into the public catalog
113 (and all other Evergreen interfaces and APIs) outright in order to
114 prevent them from getting into the staff interface anyway by
115 creative use of Evergreen's authentication APIs.
116
117 Evergreen admins are advised to check the expiration status of staff
118 accounts before turning on the global flag, as otherwise it is
119 possible to lock staff users out unexpectedly. The following SQL
120 query will identify expired but otherwise un-deleted users that
121 would be blocked by turning on the flag:
122
123 [source,sql]
124 ----
125 SELECT DISTINCT usrname, expire_date
126 FROM actor.usr au, permission.usr_has_perm_at_all(id, 'STAFF_LOGIN')
127 WHERE active
128 AND NOT deleted
129 AND NOT barred
130 AND expire_date < NOW()
131 ----
132
133 Note that this query can take a long time to run in large databases
134 given the general way that it checks for users that have the
135 `STAFF_LOGIN` permission. Replacing the use of
136 `permission.usr_has_perm_at_all()` with a query on expired users
137 with profiles known to have the `STAFF_LOGIN` permission will
138 be much faster.
139
140
141
142
143 Migration From GIST to GIN Indexes for Full Text Search
144 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
145
146 Evergreen now uses GIN indexes for full text search in PostgreSQL.
147 GIN indexes offer better performance than GIST.  For more information
148 on the differences in the two index types, please refer to the
149 https://www.postgresql.org/docs/current/textsearch-indexes.html[PostgreSQL
150 documentation].
151
152 An upgrade script is provided as part of this migration.  If you
153 upgrade normally from a previous release of Evergreen, this upgrade
154 script should run as part of the upgrade process.  The migration
155 script recommends that you run a `VACUUM ANALYZE` in PostgreSQL on the
156 tables that had the indexes changed.  The migration process does not
157 do this for you, so you should do it as soon as is convenient after
158 the upgrade.
159
160 Updating Your Own Indexes
161 +++++++++++++++++++++++++
162
163 If you have added your own full text indexes of type GIST, and you
164 wish to migrate them to GIN, you may do so.  The following query, when
165 run in your Evergreen databsase after the migration from GIST to GIN,
166 will identify the remaining GIST indexes in your database:
167
168 [source,sql]
169 ----------------------------------------
170 SELECT schemaname, indexname
171 FROM pg_indexes
172 WHERE indexdef ~* 'gist';
173 ----------------------------------------
174
175 If the above query produces output, you can run the next query to
176 output a SQL script to migrate the remaining indexes from GIST to GIN:
177
178 [source,sql]
179 ----------------------------------------
180 SELECT 'DROP INDEX ' || schemaname || '.' || indexname || E';\n' ||
181        REGEXP_REPLACE(indexdef, 'gist', 'gin', 'i') || E';\n' ||
182        'VACUUM ANAlYZE ' || schemaname || '.' || tablename || ';'
183 FROM pg_indexes
184 WHERE indexdef ~* 'gist';
185 ----------------------------------------
186
187
188
189
190 Removal of Custom Dojo Build
191 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
192
193 Evergreen had a
194 https://wiki.evergreen-ils.org/doku.php?id=scratchpad:random_magic_spells#custom_dojo_build[method
195 of making a custom build of the Dojo JavaScript library].  Followiing
196 this procedure could improve the load times for the OPAC and other
197 interfaces that use Dojo.  However, very few sites took advantage of
198 this process or even knew of its existence.
199
200 As a part of the process, an `openils_dojo.js` file was built and
201 installed along with the other Dojo files.  Evergreen had many
202 references to load this optional file.  For the majority of sites that
203 did not use this custom Dojo process, this file did not exist.
204 Browsers would spend time and resources requesting this nonexistent
205 file.  This situation also contributed noise to the Apache logs with
206 the 404 errors from these requests.
207
208 In keeping with the goal of eliminating Dojo from Evergreen, all
209 references to `openils_dojo.js` have been removed from the OPAC and
210 other files.  The profile script required to make the custom Dojo
211 build has also been removed.
212
213
214
215
216
217 Cataloging
218 ~~~~~~~~~~
219
220
221
222 Czech language records in sample data
223 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
224
225 This release adds 7 Czech-language MARC records to the
226 sample data set (also known as Concerto data set).
227
228
229
230
231
232 Publisher Catalog Display Includes 264 Tag
233 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
234
235 Publisher values are now extracted for display from tags 260 OR 264.
236
237 Upgrade Notes
238 +++++++++++++
239
240 A partial reingest is required to extract the new publisher data for display.
241 This query may be long-running.
242
243 [source,sql]
244 --------------------------------------------------------------------------
245 WITH affected_bibs AS (
246     SELECT DISTINCT(bre.id) AS id
247     FROM biblio.record_entry bre
248     JOIN metabib.real_full_rec mrfr
249     ON (mrfr.record = bre.id AND mrfr.tag = '264')
250     WHERE NOT bre.deleted
251 )
252 SELECT metabib.reingest_metabib_field_entries(id, TRUE, FALSE, TRUE, TRUE)
253 FROM affected_bibs;
254 --------------------------------------------------------------------------
255
256
257
258
259
260 Circulation
261 ~~~~~~~~~~~
262
263
264
265 Hold Groups
266 ^^^^^^^^^^^
267
268 This feature allows staff to add multiple users to a named hold group
269 bucket and place title-level holds for a record for that entire set of users.
270 Users can be added to such a hold group bucket from either the patron
271 search result interface, via the Add to Bucket dropdown, or through a dedicated
272 Hold Group interface available from the Circulation menu.  Adding new
273 patrons to a hold group bucket will require staff have the PLACE_HOLD
274 permission.
275
276 Holds can be placed for the users in a hold group bucket either directly from
277 the normal staff-place hold interface in the embedded OPAC, or by supplying the
278 record ID within the hold group bucket interface.  In the latter case, the
279 list of users for which a hold was attempted but failed to be placed can be
280 downloaded by staff in order to address any placement issues.  Placing a
281 hold group bucket hold will requires staff have the MANAGE_HOLD_GROUPS
282 permission, which is new with this development.
283
284 In the event of a mistaken hold group hold, staff with the MANAGE_HOLD_GROUPS
285 permission will have the ability to cancel all unfulfilled holds created as
286 part of a hold group event.
287
288 A link to the title's hold interface is available from the list of hold group
289 events in the dedicated hold group interface.
290
291
292
293
294
295 Scan Item as Missing Pieces Angular Port
296 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
297 The 'Scan Item As Missing Pieces' interface is now an Angular interface.
298 The functionality is the same, but the interface displays more details
299 on the item in question (title/author/callnum) before proceeding with the 
300 missing pieces process.
301
302
303
304
305 Opt-In Setting for Overdue and Predue Emails
306 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
307 The "Receive Overdue and Courtesy Emails" user setting permits users to
308 control whether they receive email notifications about overdue items.
309
310 To use the setting, modify any action trigger event definitions which
311 send emails about overdue items, setting the "Opt In Setting" to
312 "circ.default_overdue_notices_enabled" and the "User Field" to "usr".
313 You can accomplish this by running the following query in your database:
314
315 ----
316 UPDATE action_trigger.event_definition
317 SET opt_in_setting = 'circ.default_overdue_notices_enabled',
318     usr_field = 'usr'
319 WHERE opt_in_setting IS NULL
320     AND hook = 'checkout.due'
321     AND reactor = 'SendEmail';
322 ----
323
324 Once this is done, the patron registration screen in the staff client
325 will show a "Receive Overdue and Courtesy Emails" checkbox, which will
326 be checked by default.  To ensure that existing patrons continue to
327 recieve email notifications, you will need to add the user setting to
328 their accounts, which you can do by running the following query in your
329 database:
330
331 ----
332 INSERT INTO actor.usr_setting (usr, name, value)
333 SELECT
334     id,
335     'circ.default_overdue_notices_enabled',
336     'true'
337 FROM actor.usr;
338 ----
339
340
341
342
343
344
345 Allow Circulation Renewal for Expired Patrons
346 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
347 The "Allow renewal request if renewal recipient privileges have
348 expired" organizational unit setting can be set to true to permit
349 expired patrons to renew circulations.  Allowing renewals for expired
350 patrons reduces the number of auto-renewal failures and assumes that a
351 patron with items out eligible for renewals has not been expired for
352 very long and that such patrons are likely to renew their privileges
353 in a timely manner.
354
355 The setting is referenced based on the current circulation library for
356 the renewal.  It takes into account the global flags for "Circ: Use
357 original circulation library on desk renewal instead of the
358 workstation library" and "Circ: Use original circulation library on
359 opac renewal instead of user home library."
360
361
362
363
364 OPAC
365 ~~~~
366
367
368
369 Consistent Ordering for Carousels
370 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
371 Carousel ordering is now stable and predictable:
372
373  * Newly Cataloged Item and Newest Items by Shelving Location carousels are ordered from most recently cataloged to least recently cataloged.
374  * Recently Returned Item carousels is ordered is from most recently returned to least recently returned.
375  * Top Circulated Items carousels is ordered is from most circulated to least circulated.
376  * Manual carousels (as of now, without the ability to adjust the position of items) are in the order they are added to the backing bucket.
377   ** Emptying and refilling the bucket allows reordering.
378
379
380
381
382
383 Default Public Catalog to the Bootstrap Skin
384 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
385 The public catalog now defaults to the Bootstrap skin rather than the
386 legacy TPAC skin.
387
388 Bootstrap is now the default in order to encourage more testing, but
389 users should be aware of the following 
390 https://bugs.launchpad.net/evergreen/+bugs?field.tag=bootstrap-blocker[issues];
391 certain specific functionality is available only in the TPAC skin.
392
393 The TPAC skin remains available for use, but current Evergreen users
394 should start actively considering migrating to the Bootstrap skin.
395
396 In order to continue to use the TPAC skin, comment out the following
397 line in `eg_vhost.conf`
398
399 [source,conf]
400 -------------------
401 PerlAddVar OILSWebTemplatePath "@localstatedir@/templates-bootstrap" # Comment this line out to use the legacy TPAC
402 -------------------
403
404
405
406
407 Did You Mean? Single word search suggestions
408 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
409 This feature is the first in the series to add native search suggestions
410 to the Evergreen search logic.  A significant portion of the code is
411 dedicated to infrastructure that will be used in later enhancements to
412 the functionality.
413
414 Overview
415 ++++++++
416 When searching the public or staff catalog in a single search class (title,
417 author, subject, series, identifier, or keyword) with a single search term
418 users can be presented with alternate search terms.  Depending on how the
419 instance has been configured, suggestions may be provided for only
420 misspelled words (as defined by existence in the bibliographic corpus),
421 terms that are spelled properly but occur very few times, or on every
422 single-term search.
423
424 Settings
425 ++++++++
426
427 The following new library settings control the behavior of the suggestions:
428
429 * Maximum search result count at which spelling suggestions may be offered
430 * Minimum required uses of a spelling suggestions that may be offered
431 * Maximum number of spelling suggestions that may be offered
432 * Pg_trgm score weighting in OPAC spelling suggestions
433 * Soundex score weighting in OPAC spelling suggestions
434 * QWERTY Keyboard similarity score weighting in OPAC spelling suggestions 
435
436 There are also two new internal flags:
437
438 * symspell.prefix_length
439 * symspell.max_edit_distance
440
441 Upgrading
442 +++++++++
443 This feature requires the addition of new Perl module dependencies.  Please
444 run the app server and database server dependency Makefiles before applying
445 the database and code updates.
446
447 At the end of the database upgrade script, the administrator is presented
448 with a set of instructions necessary to precompute the suggestion
449 dictionary based on the current bibliographic database.  The first half
450 of this procedure can be started even before the upgrade begins, as soon
451 as the Evergreen database is no longer accessible to users that might
452 cause changes to bibliographic records.  For very large instances, this
453 dictionary generation can take several hours and needs to be run on a
454 server with significant RAM and CPU resources. Please look at the upgrade
455 script before beginning an upgrade and plan this dictionary creation as
456 part of the overall upgrade procedure.
457
458 Given a server, such as a database server with 64G of RAM, you should
459 be able to run all six of the shell commands in parallel in screen
460 sessions or with a tool such as GNU parallel.
461
462 These commands invoke a script that will generate a class-specific sub-
463 set of the dictionary, and can be used to recreate the dictionary if
464 necessary in the future.
465
466
467
468
469
470 Sort Holdings by Geographical Proximity
471 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
472
473 This functionality integrates 3rd party geographic lookup services to allow patrons
474 to enter an address on the record details page in the OPAC and sort the holdings
475 for that record based on proximity of their circulating libraries to the entered
476 address. To support this, latitude and longitude coordinates may be associated with
477 each org unit. Care is given to not log or leak patron provided addresses or the
478 context in which they are used.
479
480 Requires the following Perl modules: `Geo::Coder::Free`, `Geo::Coder::Google`, and `Geo::Coder::OSM`
481
482
483
484
485 Library Groups
486 ^^^^^^^^^^^^^^
487 The Library Groups search feature revives a longstanding internal
488 concept in Evergreen called “Lassos,” which allows an administrator
489 to define a group of organizational units for searching outside of
490 the standard organizational unit hierarchy.
491
492 Use case examples include creating a group of law or science
493 libraries within a university consortium, or grouping all school
494 libraries together within a mixed school/public library consortium.
495
496 Searches can be restricted to a particular Library Group from the
497 library selector in the public catalog basic search page and from
498 the new "Where" selector on the advanced search page.
499
500 Restricting catalog searches by Library Group is available only
501 in the public catalog and "traditional" staff catalog; it is not
502 available in the Angular staff catalog.
503
504 This feature adds a new permission, `ADMIN_LIBRARY_GROUPS`, that
505 allows updating Library Groups and Library Group Maps. This permission
506 is not associated with any profiles by default, and replaces
507 the `CREATE_LASSO`, `UPDATE_LASSO`, and `DELETE_LASSO` permissions. 
508
509 To define new library groups, use the Server Administration Library
510 Groups and Library Group Maps pages. An autogen and a reload of
511 Apache should be performed after making changes to Library Groups.
512
513
514 Easier Styling of Public Catalog Logo and Cart Images
515 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
516
517 Evergreen now has IDs associated with logos and cart images in the TPAC and Bootstrap OPACs to aid in customization.  Images are as follows:
518
519 * small Evergreen logo in navigation bar is 'topnav_logo_image'
520 * the large Evergreen logo in the center of the splash page of the TPAC is 'homesearch_main_logo_image' 
521 * the cart icon is 'cart_icon_image' 
522 * the small logo in the footer is 'footer_logo_image'
523
524 The Bootstrap OPAC does not have a homesearch logo icon as it is added in the background by CSS and can be directly styled through the CSS.
525
526
527
528
529
530 Easier TPAC Customization via colors.tt2
531 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
532 Twelve new colors for TPAC have been added to the colors.tt2 file as well as 
533 having coresponding changes to the style.css.tt2 file. These use 
534 descriptive rather than abstract names. These changes help avoid 
535 situations were unreadable values are placed on top of each other 
536 and where different values are wanted for elements that only refernece 
537 a single color previously. Guidelines are below for setting values that 
538 correspond to the previous values used in the colors.tt2 file.  
539 For more diverse customizations the OPAC should be reviewed before 
540 a production load.
541
542 * 'footer' is used for the background color of the footer. It replaces the 
543 'primary'.
544 * 'footer_text' sets the text color in the footer and replaces 'text_invert' 
545 * 'header' sets the background of the header and replaces 'primary_fade'
546 * 'header_text' sets the color of text in the header and replaces 'text_invert'
547 * 'header_links_bar' sets the background of the links bar that separates the 
548 header on the front page of the opac and replaces 'background_invert'
549 * 'header_links_text' sets the text on the links bar and replaces 'text_invert'
550 * 'header_links_text_hover' set the hover text color on the links bar and 
551 replaces 'primary'
552 * 'opac_button' sets the background color of the My Opac button and replaces 
553 'control'
554 * 'opac_button_text' explicitly sets the text color on the My Opac button  
555 * 'opac_button_hover' sets the background color of the My Opac button when the 
556 mouse is hovering over it and replaces 'primary'
557 * 'opac_button_hover_text' sets the text color of the My Opac button when the 
558 mouse is hovering over it and replaces 'text invert'
559
560 Note that is patch is primarily meant for users who wish to continue
561 using TPAC rather than the Bootstrap skin for a while; new Evergreen
562 users are advised to use the now-default Bootstrap skin.
563
564
565
566
567 Configurable Read More Accordion for OPAC Search and Record View (TPAC)
568 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
569
570 Read More Button
571 ++++++++++++++++
572 Public catalog record fields (in the TPAC skin only) now truncate
573 themselves based on a configurable amount of characters.  The full
574 field may be displayed upon hitting a (Read More) link, which will
575 then toggle into a (Read Less) link to re-truncate the field.
576
577 Configuration
578 +++++++++++++
579 `Open-ILS/src/templates/opac/parts/config.tt2` contains two new
580 configuration variables:
581
582
583 * `truncate_contents` (default: 1)
584 * `contents_truncate_length` (default: 50).
585
586 Setting `truncate_contents` to 0 will disable the read more
587 functionality.  The variable `contents_truncate_length` corresponds
588 to the amount of characters to display before truncating the text.
589 If `contents_truncate_length` is removed, it will default to 100.
590
591 Additional configuration for note fields can be made in
592 `Open-ILS/src/templates/opac/parts/record/contents.tt2`, allowing a
593 `trunc_length` variable for each individual type of note, which will
594 override `contents_truncate_length` for that specific
595 type of note.
596
597
598 Adding Read More Functionality to further fields
599 ++++++++++++++++++++++++++++++++++++++++++++++++
600 To add Read More functionality to any additional fields, you may use
601 the macro `accordion()`, defined in `misc_util.tt2`. It can take three
602 variables: `str`, `trunc_length`, and `element`. `str` corresponds to
603 the string you want to apply it to, `trunc_length` (optional) will
604 override `contents_truncate_length` if supplied, and `element`
605 (optional) provides an alternative HTML element to look at for the
606 truncation process (useful in situations such as the Authors and Cast
607 fields, where each field is processed individually, but needs to be
608 treated as a single field).
609
610
611
612
613 Reports
614 ~~~~~~~
615
616
617
618 Reports Scheduler Improvements
619 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
620 Previously, the reports scheduler allowed duplicated reports
621 under certain circumstances.  A uniqueness constraint now
622 disallows this without adversely affecting the reports process.
623
624
625
626 Miscellaneous
627 -------------
628
629
630 * The 'Create Reservation' form in the Booking module now includes
631   an option to search for the patron by attributes other than just
632   their barcode.
633 * The form to add a user to a Course now includes an option to search
634   for the patron by attributes other than just their barcode.
635 * For consistency with the menu action Cataloging => Retrieve Record by
636   TCN Value, the staff catalog Numeric Search => TCN search now includes
637   deleted bib records.
638 * Add a new command-line script, `overdrive-api-checker.pl`, for testing
639   the OverDrive API.
640 * The Shelving Location Groups editor is ported to Angular.
641 * The staff catalog now has the ability to add all search results (up to
642   1,000 titles) to the basket in one fell swoop.
643 * Add 'All Videos' as a search format.
644 * Server-side print templates can now have print contexts set.
645 * Add ability to set the print context for a print template to "No-Print"
646   to specify, well, that a given receipt should never be printed.
647 * Add Check Number as an available column to the Bill History grids.
648 * Adds a new control to the item table in the TPAC public catalog only to
649   specify that only items that are available should be displayed.
650
651 Acknowledgments
652 ---------------
653 The Evergreen project would like to acknowledge the following
654 organizations that commissioned developments in this release of
655 Evergreen:
656
657 * BC Libraries Cooperative
658 * Community Library (Sunbury)
659 * Consortium of Ohio Libraries (COOL)
660 * Evergreen Community Development Initiative
661 * Evergreen Indiana
662 * Georgia PINES
663 * Linn-Benton Community College
664 * Pennsylvania Integrated Library System (PaILS)
665
666
667 We would also like to thank the following individuals who contributed
668 code, translations, documentation, patches, and tests to this release of
669 Evergreen:
670
671 * Felicia Beaudry
672 * Galen Charlton
673 * Jason Etheridge
674 * Andrea Buntz Neiman
675 * Mike Rylander
676 * Carmen Oleskevich
677
678 We also thank the following organizations whose employees contributed
679 patches:
680
681 * Equinox Open Library Initiative
682
683 We regret any omissions.  If a contributor has been inadvertently
684 missed, please open a bug at http://bugs.launchpad.net/evergreen/
685 with a correction.
686