]> git.evergreen-ils.org Git - Evergreen.git/blob - docs/RELEASE_NOTES_2_10.adoc
first draft of release notes for 2.10
[Evergreen.git] / docs / RELEASE_NOTES_2_10.adoc
1 Evergreen 2.10 Release Notes
2 ============================
3 :toc:
4 :numbered:
5
6 Upgrade notes
7 -------------
8
9 * Support for PostgreSQL 9.1 is deprecated as of
10   the release of Evergreen 2.10. Users are recommended
11   to install Evergreen on PostgreSQL 9.2 or later.
12 * In the next major release following 2.10, Evergreen will no
13   longer officially support PostgreSQL 9.1.
14 * Please read the release notes thoroughly for information
15   about changes that Evergreen administrators may need
16   to make manually when upgrading to 2.10.  In particular,
17   the enhancement to user password storage introduces a
18   new service, `open-ils.auth_internal`, and requires
19   changes to `opensrf.xml` in order for users to be able
20   log in.
21
22 New Features
23 ------------
24
25
26
27 Acquisitions
28 ~~~~~~~~~~~~
29
30
31
32 PO Line item "paid" label
33 ^^^^^^^^^^^^^^^^^^^^^^^^^
34 A new "paid" label appears along the bottom of each line item in the PO 
35 display when every non-canceled copy on the line item has been invoiced.
36
37
38
39
40 Disencumber funds on invoice close
41 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
42
43 Fund debits linked to an invoice are now marked as paid (encumbrance=false)
44 when the invoice is marked as closed/complete instead of at invoice create
45 time.  This is particularly useful for EDI invoices which may be 
46 created well in advance of receipt and payment.
47
48
49
50
51
52 PO actions selector always visible
53 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
54
55 The actions selector is now always visible in the purchase order view,
56 even when no line items exist.  With this, users can print PO's that
57 only contain direct charges.
58
59 The custom "Add Brief Record" button is no longer present, since the
60 same action is accessible via the now-visible selector.
61
62
63
64
65 Administration
66 ~~~~~~~~~~~~~~
67
68
69
70 Set application name when connecting to database
71 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
72 The services that connect directly to the PostgreSQL database
73 (and Clark Kent) now look for an application_name parameter
74 as part of the database login credentials specified in
75 `opensrf.xml`.  If present, the value is used to set the
76 application name Pg connection value; this in turn shows up in
77 the Postgres `pg_stat_activity` table and Pg's logs.
78
79
80
81
82 Credit card receipts and privacy
83 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
84
85 To improve privacy and security, Evergreen now stores less data 
86 about credit card transactions.  The following fields are no 
87 longer stored:
88
89  * `cc_type`
90  * `cc_first_name`
91  * `cc_last_name`
92  * `expire_month`
93  * `expire_year`
94
95 NOTE: All existing data within these fields will be deleted during
96 the upgrade.  Reports using this data will no longer function.
97
98 Additionally, a tool has been added to Evergreen for clearing the 
99 last 4 digits of the credit payment from the database after payments
100 reach a certain age.
101
102 Print/email templates
103 +++++++++++++++++++++
104
105 The stock print and email payment templates have been modified to no 
106 longer use these fields, but only when the existing templates matched
107 the stock templates.  If local changes have been applied, it will
108 be necessary to modify local templates to avoid referencing these
109 fields which no longer exist.
110
111 Any templates whose hook is "money.format.payment_receipt.print" or 
112 "money.format.payment_receipt.email" may need modification.  In stock
113 Evergreen, these are templates:
114
115 1. "money.payment_receipt.email" (stock id 29)
116 2. "money.payment_receipt.print" (stock id 30)
117
118 Example diff:
119
120 [source,diff]
121 ---------------------------------------------
122 -  [% CASE "credit_card_payment" %]credit card (
123 -      [%- SET cc_chunks = mp.credit_card_payment.cc_number.replace(' ','').chunk(4); -%]
124 -      [%- cc_chunks.slice(0, -1+cc_chunks.max).join.replace('\S','X') -%] 
125 -      [% cc_chunks.last -%]
126 -      exp [% mp.credit_card_payment.expire_month %]/[% mp.credit_card_payment.expire_year -%]
127 -  )
128 +  [% CASE "credit_card_payment" %]credit card
129 +  [%- IF mp.credit_card_payment.cc_number %] ([% mp.credit_card_payment.cc_number %])[% END %]
130 ---------------------------------------------
131
132 Clearing the last 4 of the CC number
133 ++++++++++++++++++++++++++++++++++++
134
135 To active automatic CC number clearing, add the following to opensrf's
136 crontab.  Change timing to suit.
137
138 [source,sh]
139 ---------------------------------------------
140 5  4  * * *   . ~/.bashrc && $EG_BIN_DIR/clear_cc_number.srfsh
141 ---------------------------------------------
142
143 The default retention age is 1 year, but this can be changed by modifying
144 `clear_cc_number.srfsh` (typically found in `/openils/bin/`).  Replace "1 year"
145 with the age of your choice.
146
147
148
149
150
151
152 Configure multiple telephony servers via action/trigger
153 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
154 If you are using the AstCall action/trigger reactor
155 to generate callfiles to send to an Asterisk server, until
156 now the only place to specify the relevant configuration
157 was in `opensrf.xml`. However, this restricted an Evergreen
158 consortium to using only one Asterisk instance.
159
160 Now, the telephony parameters can also be specified as 
161 A/T event parameters, allowing per-library configuration.
162
163 .Telephony parameters
164 |===
165 | Name | Example value
166
167 | enabled
168 | 0
169
170 | driver
171 | "SIP"
172
173 | channels
174 | ["Zap/1", "Zap/2", "IAX/user:secret@widgets.biz"]
175
176 | host
177 | "localhost"
178
179 | port
180 | "10080"
181
182 | user
183 | "evergreen"
184
185 | pw
186 | "evergreen"
187
188 | callfile_lines
189 | ["MaxRetries: 3", "RetryTime: 60", "WaitTime: 30", "Archive: 1", "Extension: 10"]
190 |===
191
192
193
194
195 Juvenile-to-adult batch script honors library setting
196 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
197
198 The batch `juv_to_adult.srfsh` script that, when set up as a cronjob,
199 is responsible for toggling a patron from juvenile to adult now
200 honors the age value set in the library setting named "Juvenile Age
201 Threshold" (`global.juvenile_age_threshold`).  When no library setting value
202 is present at a given patron's home library, the value passed in to the
203 script will be used as a default.
204
205
206
207
208 New reporting source for hold/copy ratios
209 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
210 A new reporting source is added, "Hold/Copy Ratio per Bib
211 and Pickup Library (and Descendants)", that, for each bib
212 that has a hold request on it or any of its components,
213 calculates the following:
214
215  * active holds at each OU (including the OU's descendants)
216  * holdable copies at each OU (and its descendants)
217  * the ratio of the above two counts
218  * counts and ratio across the entire consortium
219
220 This source differs from the "Hold/Copy Ratio per Bib
221 and Pickup Library" source by including all descendants
222 of the organization unit one is filtering on.
223
224 One use case is allowing a multi-branch system within an
225 Evergreen consortium that doesn't do full resource sharing
226 to readily calculate whether additional copies should be
227 purchased for that system.
228
229
230
231
232 New patron action/trigger notice
233 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
234
235 A new action/trigger event definition ("New User Created Welcome Notice") 
236 has been added that will allow you to send a notice after a new patron has 
237 been created, based on the actor.usr create-date field.
238
239 This notice can be used for various tasks.
240
241   * Sending a welcome email to new patrons to market Library services.
242   * Confirm that a new patron email address is correct.
243   * Generate postal notices to send a welcome packet to new patrons.
244
245 Enable this event in the staff client at *Admin* -> *Local Administration* 
246 -> *Notifications / Action Triggers*.
247
248
249
250
251 Improved password management and authentication
252 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
253 Evergreen user passwords are now stored with additional layers of 
254 encryption and may only be accessed directly by the database, not
255 the application layer.
256
257 All API changes are backwards compatible with existing 3rd-party
258 clients.
259
260 Migrating passwords
261 +++++++++++++++++++
262
263 Passwords are migrated for each user automatically the first time a user
264 logs in under the new setup.  However, it is also possible to force
265 password migration for a given user via a database function:
266
267 [source,sql]
268 ------------------------------------------------------------
269 -- actor.migrate_passwd() will only migrate un-migrated 
270 -- accounts, but it's faster to avoid any re-migration attempts.
271 SELECT actor.migrate_passwd(au.id)
272 FROM actor.usr au
273     LEFT JOIN actor.passwd pw ON (pw.usr = au.id)
274 WHERE pw.usr IS NULL; 
275 ------------------------------------------------------------
276
277 Using this, admins could perform manual batch updates to force all
278 users to use the new, more secure passwords, regardless of when or
279 whether a patron logs back into the system.  
280
281 Beware that doing this for all users in the a large database will 
282 take some time and should probably be performed in batches.
283
284 open-ils.auth_internal
285 ++++++++++++++++++++++
286 To support the new storage mechanism, a new Evergreen service has
287 been added called `open-ils.auth_internal`.  This service runs on
288 the private OpenSRF/XMPP domain and is used to store authenticated 
289 user data in the authentication cache.  
290
291 This is a required service and changes to `opensrf.xml` (typically 
292 `/openils/conf/opensrf.xml`) are needed to run the new service.
293
294 .Modifying opensrf.xml
295 * A new `<open-ils.auth_internal>` app stanza is added to define the 
296   new service
297 * Cache timeout settings are moved from the app stanza for `open-ils.auth`
298   into `open-ils.auth_internal`
299 * `open-ils.auth_internal` is added to the set of running services for the 
300   domain.
301
302 Example diff:
303
304 [source,diff]
305 ---------------------------------------------------------------------
306 diff --git a/Open-ILS/examples/opensrf.xml.example b/Open-ILS/examples/opensrf.xml.example
307 index 3b47481..59f737a 100644
308 --- a/Open-ILS/examples/opensrf.xml.example
309 +++ b/Open-ILS/examples/opensrf.xml.example
310 @@ -424,6 +424,29 @@ vim:et:ts=4:sw=4:
311                  </unix_config>
312                  <app_settings>
313                      <!-- defined app-specific settings here -->
314 +                    <auth_limits>
315 +                        <seed>30</seed> <!-- amount of time a seed request is valid for -->
316 +                        <block_time>90</block_time> <!-- amount of time since last auth or seed request to save failure counts -->
317 +                        <block_count>10</block_count> <!-- number of failures before blocking access -->
318 +                    </auth_limits>
319 +                </app_settings>
320 +            </open-ils.auth>
321 +
322 +            <!-- Internal authentication server -->
323 +            <open-ils.auth_internal>
324 +                <keepalive>5</keepalive>
325 +                <stateless>1</stateless>
326 +                <language>c</language>
327 +                <implementation>oils_auth_internal.so</implementation>
328 +                <unix_config>
329 +                    <max_requests>1000</max_requests>
330 +                    <min_children>1</min_children>
331 +                    <max_children>15</max_children>
332 +                    <min_spare_children>1</min_spare_children>
333 +                    <max_spare_children>5</max_spare_children>
334 +                </unix_config>
335 +                <app_settings>
336 +                    <!-- defined app-specific settings here -->
337                      <default_timeout>
338                          <!-- default login timeouts based on login type -->
339                          <opac>420</opac>
340 @@ -431,13 +454,10 @@ vim:et:ts=4:sw=4:
341                          <temp>300</temp>
342                          <persist>2 weeks</persist>
343                      </default_timeout>
344 -                    <auth_limits>
345 -                        <seed>30</seed> <!-- amount of time a seed request is valid for -->
346 -                        <block_time>90</block_time> <!-- amount of time since last auth or seed request to save failure counts -->
347 -                        <block_count>10</block_count> <!-- number of failures before blocking access -->
348 -                    </auth_limits>
349                  </app_settings>
350 -            </open-ils.auth>
351 +            </open-ils.auth_internal>
352 +
353 +
354  
355              <!-- Authentication proxy server -->
356              <open-ils.auth_proxy>
357 @@ -1177,6 +1197,7 @@ vim:et:ts=4:sw=4:
358                  <appname>open-ils.circ</appname> 
359                  <appname>open-ils.actor</appname> 
360                  <appname>open-ils.auth</appname> 
361 +                <appname>open-ils.auth_internal</appname>
362                  <appname>open-ils.auth_proxy</appname> 
363                  <appname>open-ils.storage</appname>  
364                  <appname>open-ils.justintime</appname>  
365 ---------------------------------------------------------------------
366
367
368
369
370
371
372
373
374 Sortable HTML reports
375 ^^^^^^^^^^^^^^^^^^^^^
376 HTML reports can now be sorted by clicking on the header for a given column.
377 Clicking on the header toggles between sorting the column in ascending and
378 descending order. Note that sorting is available only when there are
379 at most 10,000 rows of output.
380
381
382
383
384 Cataloging
385 ~~~~~~~~~~
386
387
388
389 Additional fixed fields
390 ^^^^^^^^^^^^^^^^^^^^^^^
391 The AccM, Comp, CrTp, EntW, Cont, FMus, LTxt, Orig, Part, Proj, Relf, SpFm,
392 SrTp, Tech, and TrAr fixed fields have been defined and coded value maps added
393 so they can also be used for Advanced Searches or adding to Composite Value Maps.
394
395 Note that AccM, Cont, LTxt, Relf, and SpFm are  compositite values based on
396 the values of "helper" fields like AccM(1), AccM(2), and so on. These positional
397 fields can be ignored.
398
399 Coded value maps have also been added for Cont, Ctry, and DtSt, and the Time field
400 has been defined. All of these fields are now available in the Fixed Field Editor
401 when editing the appropriate records.
402
403
404
405
406 Quickly export non-imported records
407 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
408 When inspecting a queue in MARC Batch Import/Export, there is now
409 a link to download to MARC file any records in the queue that were
410 not imported into the catalog.  This allows catalogers to quickly
411 manipulate the records that failed to import using an external
412 tool, then attempt to import then again.
413
414
415
416
417 Link personal name/title series added entries
418 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
419 The authority linker script now supports linking the MARC21
420 field 800 (series added entry - personal name) to authority
421 records.
422
423
424
425
426 MARC stream importer authority records and repairs
427 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
428
429 The MARC stream importer script, commonly used with external 
430 services like OCLC Connexion, is now capable of importing authority
431 records in addition to bib records.  A single running instance of
432 the script can import either type of record, based on the record
433 leader.
434
435 New Options
436 +++++++++++
437
438  * --auth-merge-profile
439  * --auth-queue
440  * --bib-import-no-match
441  * --bib-auto-overlay-exact
442  * --bib-auto-overlay-1match
443  * --bib-auto-overlay-best-match
444  * --auth-import-no-match
445  * --auth-auto-overlay-exact
446  * --auth-auto-overlay-1match
447  * --auth-auto-overlay-best-match
448
449 Deprecated options
450 ++++++++++++++++++
451
452 The following options still work and map to the "bib" equivalent
453 of the option, however a deprecation warning message is generated 
454 when the script is started.
455
456  * --import-no-match
457  * --auto-overlay-exact
458  * --auto-overlay-1match
459  * --auto-overlay-best-match
460
461 No longer supported options
462 +++++++++++++++++++++++++++
463
464 --import-by-queue is no longer supported.  This option serves no
465 particular purpose and is a bad idea when re-using the same queue over
466 and over as most people do, because queue bloat will increase run times.
467
468 --noqueue (AKA "direct import") is no longer supported.  All imports go
469 through Vandelay now.
470
471
472
473
474
475 Circulation
476 ~~~~~~~~~~~
477
478
479
480 Alternate parts selection display when placing holds
481 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
482 Users often miss the list of parts on the Place Holds screen, leading to many
483 title-level holds on records where only one or two libraries may have
484 'unparted' copies.
485
486 A new option is available to change this display so that a part is selected
487 via radio buttons instead of the traditional dropdown menu. This display
488 increases the visibility of parts on the Place Holds screen and also
489 forces users to make an explicit choice.
490
491 To enable the alternate display, set the enable.radio.parts option to 'true'
492 in parts/config.tt2.
493
494
495
496
497 Web staff client patron editor
498 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
499 The web staff interface now includes a patron editor/registration form
500 that is written using AngularJS, leading to faster and more responsive
501 patron editing.  This feature is currently available in preview mode, but
502 supports the following actions:
503
504   * adding and editing base patron records and addresses
505   * setting statistical categories
506   * editing secondary groups
507   * cloning patron records
508   * duplicate detection
509   * surveys
510
511
512
513
514 ==== Non-active status copy transit message ====
515
516 After copy checkin, if the copy is in-transit, display a special
517 message in the transit alert dialog and in the printed transit receipt
518 (optionally, via macro) if the copy is in (or, rather, will be once it
519 arrives at its destination) a non-active copy status.
520
521 ===== Upgrade notes =====
522
523  * To add the new message to the transit slip, add the
524    'transit_copy_status_msg' MACRO.
525  * To remove the new message from the alert dialog, remove the 
526    'staff.circ.utils.transit.copy_status_message' string property
527    from 'Open-ILS/xul/staff_client/server/locale/LOCALE/circ.properties'
528  * For a list of non-active copy statuses, see in the staff client
529    under Admin -> Server Administration -> Copy Statuses.
530
531
532
533
534
535 Selectively disallow opt-in based on patron's home library
536 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
537 A new library setting has been added which enables a library to prevent their
538 patrons from being opted in at other libraries.
539
540 For example, consider the following org unit hierarchy:
541
542        Org Units          Depth
543
544           CONS              0
545            |
546       +-----+-----+
547       |           |
548      SYS1        SYS2       1
549       |           |
550    +--+--+     +--+--+
551    |     |     |     |
552   BR1   BR2   BR3   BR4     2
553
554 Suppose that SYS1 wishes to prevent its patrons from being opted in at SYS2.
555 To accomplish this, it sets the value of the "Restrict patron opt-in to home
556 library and related orgs at specified depth" setting to 1, meaning that patrons
557 at SYS1 libraries at or below that depth in the org tree cannot be opted in by
558 libraries outside that part of the org tree.  Thus, BR1 patrons can be opted in
559 at BR2, but not at BR3 or BR4.
560
561 (This setting is distinct from the "Patron Opt-In Boundary" setting, which
562 merely determines the depth at which Evergreen prompts for the patron to opt
563 in.)
564
565 New library setting
566 +++++++++++++++++++
567   * Restrict patron opt-in to home library and related orgs at specified depth (`org.restrict_opt_to_depth`)
568
569
570
571
572 Standing penalty ignore proximity
573 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
574
575 Standing penalties now have an `ignore_proximity` field that takes an
576 integer value.  When set, the value of this field represents the
577 proximity from the user's home organizational unit where this penalty
578 will be ignored for purposes of circulation and holds.  Typical values
579 for this field would be 0, 1, or 2 when using a standard hierarchy of
580 Consortium -> System -> Branch -> Sublibrary/Bookmoblie.  A value of 1
581 would cause the penalty to be ignored at the user's home organization
582 unit, it's parent and/or immediate child.  A value of 2 should cause
583 it to be ignored at the above as well as all sibling organizational
584 units to the user's home.  In all cases, a value of zero causes the
585 penalty to be ignored at the user's home and to apply at all other
586 organizational units.  If the value of this field is left unset (or
587 set to a negative value), the penalty will still take effect
588 everywhere using the normal organizational unit and depth values.  If
589 you use a custom hierarchy, you will need to figure out any values
590 greater than 0 on your own.
591
592 The `ignore_proximity` does not affect where penalties are applied. It
593 is used when determining whether or not a penalty blocks an activity
594 at the current organizational unit or the organizational unit that
595 owns the copy involved in the current transaction.  For instance, if
596 you set the `ignore_proximity` to 0 on patron exceeds overdue fines,
597 then the patron will still be able to place holds on and checkout
598 copies owned by their home organizational unit at their home
599 organizational unit.  They will not, however, be able to receive
600 copies from other organizational units, nor use other organizational
601 units as a patron.
602
603
604
605
606 Patron checkout history stored in a dedicated table
607 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
608
609 Patron checkout history is now stored in separate, dedicated database 
610 table instead of being derived from the main circulation data.  This
611 allows us to age/anonymize circulations more aggressively, since they 
612 no longer need to stick around in cases where they represent a patron's
613 opt-in checkout history.
614
615 This has a number of patron privacy implications.
616
617  * Minimal metadata is stored in the new patron checkout history table, 
618    so once the corresponding circulation is aged, the full set of 
619    circulation metadata is no longer linked to a patron's reading history.
620    ** It is limited to checkout date, due date, checkin date, and copy data.
621  * Staff can no longer report on a patron's reading history.  
622    ** While it is possible to build aggregate reports on reading history 
623       data, it is not possible to report on which user an entry in the
624       history table belongs to.  (The 'usr' column is hidden from the 
625       reporter).
626  * Staff can no longer retrieve a patron's reading history via API.  Only
627    the user that owns the history data can access it.
628  * Though not implemented as part of this change, it will now be possible
629    with future development to truly remove specific items from a patron's
630    checkout history.
631
632
633
634
635
636 Client
637 ~~~~~~
638
639
640
641 Holds count column picker option
642 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
643 A new column picker option showing the number of holds for a given item will
644 now be available in various interfaces displaying item information, including
645 the patron's Items Out tab and the Item Status, Check Out, Check In, Renew
646 Item and Record In-House Use screens.
647
648 Note: Because the holds count is generated from the hold_copy_map, newly-added
649 items and items in a non-holdable status will not display accurate hold counts
650 until 24 hours after they have been added to the system or moved to a holdable
651 copy status.
652
653
654
655
656 Development
657 ~~~~~~~~~~~
658
659
660
661 Removal of unused methods
662 ^^^^^^^^^^^^^^^^^^^^^^^^^
663 The following public methods, which were both broken and not in use,
664 are removed:
665
666  * `open-ils.actor.org_unit.closed_date.create`
667  * `open-ils.actor.org_unit.closed_date.delete`
668
669
670
671
672
673 Public catalog
674 ~~~~~~~~~~~~~~
675
676
677 Patron history disable warning
678 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
679
680 When disabling checkout and/or holds history in the public catalog's
681 Search and History Preferences tab, patrons will be warned that the
682 operation is irreversible when history data exists that will be
683 deleted as part of the update.
684
685 Upgrade notes
686 +++++++++++++
687
688 Administrators should verify the CSV export of checkout history works after
689 deploying this change.  If local changes were made to the CSV template,
690 the template will not be updated as part of this deployment.  The stock 
691 template was modified to handle gracefully NULL values for checkin_time.
692
693 For example:
694
695 [source,diff]
696 ------------------------------------------------------------------------
697 -    Returned: [% date.format(helpers.format_date(circ.checkin_time), '%Y-%m-%d') %]
698 +    Returned: [%
699 +        date.format(
700 +            helpers.format_date(circ.checkin_time), '%Y-%m-%d') 
701 +            IF circ.checkin_time; 
702 +    %]
703 ------------------------------------------------------------------------
704
705
706 Include parts label when sorting copies in the public catalog
707 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
708 The list of copies on the record details page now includes
709 the part label in the default sort order.
710
711 Specifically, copies are now sorted by (in order), org unit, then
712 call number, then part label sortkey, then copy number, and
713 finally barcode.
714
715 Previously, the hierarchy was org unit, then call number,
716 then copy number, and finally barcode
717
718
719
720
721 Search scope depth selection
722 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
723 A common usage of the catalog is to do a search in a restricted scope,
724 like a local library. When the results are lacking, the search is repeated in a
725 consortium-wide scope.  This feature provides an optional button and checkbox
726 to alter the depth of the search to a defined level.
727
728 This feature can be turned off from config.tt2.
729
730
731
732
733
734 Limiter to exclude electronic resources
735 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
736 A limiter to exclude electronic resources from search results is now available
737 on the advanced search screen and from the search results page. This limiter
738 will exclude any search results with an item form of o or s. This limiter
739 will be applied on top of any other format limiters used in the search.
740
741 The checkboxes are disabled by default; to display them in both places, please
742 toggle the 'ctx.exclude_electronic_checkbox' setting in config.tt2.
743
744
745
746
747 Expand unAPI API
748 ^^^^^^^^^^^^^^^^
749 Evergreen's unAPI support now includes access to many more
750 record types. For example, the following URL would fetch
751 bib 267 in MODS32 along with holdings, volume, copy,
752 and record attribute information:
753
754 https://example.org/opac/extras/unapi?id=tag::U2@bre/267{holdings_xml,acn,acp,mra}&format=mods32
755
756 To access the new unAPI features, the unAPI ID should have the
757 following form:
758
759   * +tag::U2@+
760   * followed by class name, which may be
761     * +bre+ (bibs)
762     * +biblio_record_entry_feed+ (multiple bibs)
763     * +acl+ (copy locations)
764     * +acn+ (volumes)
765     * +acnp+ (call number prefixes)
766     * +acns+ (call number suffixes)
767     * +acp+ (copies)
768     * +acpn+ (copy notes)
769     * +aou+ (org units)
770     * +ascecm+ (copy stat cat entries)
771     * +auri+ (located URIs)
772     * +bmp+ (monographic parts)
773     * +cbs+ (bib sources)
774     * +ccs+ (copy statuses)
775     * +circ+ (loan checkout and due dates)
776     * +holdings_xml+ (holdings)
777     * +mmr+ (metarecords)
778     * +mmr_holdings_xml+ (metarecords with holdings)
779     * +mmr_mra+ (metarecords with record attributes)
780     * +mra+ (record attributes)
781     * +sbsum+ (serial basic summaries)
782     * +sdist+ (serial distributions)
783     * +siss+ (serial issues)
784     * +sisum+ (serial index summaries)
785     * +sitem+ (serial items)
786     * +sssum+ (serial supplement summaries)
787     * +sstr+ (serial streams)
788     * +ssub+ (serial subscriptions)
789     * +sunit+ (serial units)
790   * followed by +/+
791   * followed by a record identifier (or in the case of
792     the +biblio_record_entry_feed+ class, multiple IDs separated
793     by commas)
794   * followed, optionally, by limit and offset in square brackets
795   * followed, optionally, by a comma-separated list of "includes"
796     enclosed in curly brackets.  The list list of includes is
797     the same as the list of classes with the following addition:
798     * +bre.extern+ (information from the non-MARC parts of a bib
799       record)
800    * followed, optionally, by +/+ and org unit; "-" signifies
801      the top of the org unit tree
802    * followed, optionally, by +/+ and org unit depth
803    * followed, optionally, by +/+ and a path. If the path
804      is +barcode+ and the class is +acp+, the record ID is taken
805      to be a copy barcode rather than a copy ID; for example, in
806      +tag::U2@acp/ACQ140{acn,bre,mra}/-/0/barcode+, +ACQ140+ is
807      meant to be a copy barcode.
808    * followed, optionally, by +&format=+ and the format in which the record
809      should be retrieved. If this part is omitted, the list of available 
810      formats will be retrieved. 
811
812
813
814
815 New form/genre search and facet index
816 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
817 The stock indexing definitions now include a search and facet index on the
818 form/genre field (tag 655). This allows genre links in the public catalog
819 record display to retrieve works in the same genre. The public catalog genre
820 links will no longer display content from the 659 MARC fields. 
821
822 The genre facet will also display by default in the public catalog.  A partial
823 reingest during upgrade is required to use this index.
824
825
826
827
828 Limit number of facets retrieved during search
829 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
830 Catalog search now sets a limit on the number of facets retrieved
831 per defined facet field. Setting a limit is useful so that
832 `open-ils.cstore backends don't end up needlessly consuming
833 memory when fetching facets for a large result set; if a broad
834 search retrieves over 10,000 author facets (say), even the most
835 persistant user is not going to actually look at all of them. Fetching
836 fewer facets can also slightly speed up generation of search results.
837
838 The limit is controlled by a new global flag, `search.max_facets_per_field`,
839 whose label is "Search: maximum number of facet values to retrieve for
840 each facet field".  The default limit value is 1,000, but lower values
841 (e.g., 100) are perhaps even better for most catalogs.
842
843 Miscellaneous
844 ~~~~~~~~~~~~~
845
846 * Copy records in the "Concerto" test data set now have prices.
847 * The web-based self-check interface now displays the patron
848   information area only when a patron is logged in.
849 * The progress page displayed by MARC Batch Edit is improved.
850 * The public catalog now better handles the situation where
851   a patron who does not have an email address registered in
852   Evergreen tries to email a record.
853
854
855 Acknowledgments
856 ---------------
857 The Evergreen project would like to thank the following 
858 individuals who contributed code, documentations patches and
859 tests to this release of Evergreen:
860
861  * Thomas Berezansky
862  * Adam Bowling
863  * Jason Boyer
864  * Kate Butler
865  * Steven Callender
866  * Steven Chan
867  * Galen Charlton
868  * Mark Cooper
869  * Jeff Davis
870  * Martha Driscoll
871  * Bill Erickson
872  * Jason Etheridge
873  * Blake Henderson
874  * Pasi Kallinen
875  * Jake Litrell
876  * Kathy Lussier
877  * Terran McCanna
878  * Dan Pearl
879  * Michael Peters
880  * Jennifer Pringle
881  * Mike Rylander
882  * Dan Scott
883  * Chris Sharp
884  * Ben Shum
885  * Remington Steed
886  * Jason Stephenson
887  * Josh Stompro
888  * Yamil Suarez
889  * Dan Wells
890  * Bob Wicksall
891
892 We would also like to thank the following individuals who
893 tested and signed off on patches:
894
895  * Andrea Neiman
896  * Christine Burns
897
898 We would also like to thank the following organizations who
899 commissioned developments in this release of Evergreen:
900
901  * **TO DO**
902
903 We also thank the following organizations whose employees contributed
904 to this release:
905
906  * BC Libraries Coooperative
907  * Berklee College of Music
908  * Bibliomation
909  * Calvin College
910  * CW/MARS
911  * Emerald Data
912  * Equinox Software
913  * Georgia Public Library Service
914  * Indiana State Library
915  * Kent County Public Library
916  * King County Library System
917  * Lake Agassiz Regional Library
918  * Laurentian University
919  * MassLNC
920  * MOBIUS
921  * MVLC
922  * NOBLE
923  * Rodgers Memorial Library
924
925 We regret any omissions.  If a contributor has been inadvertantly
926 missed, please open a bug at http://bugs.launchpad.net/evergreen/
927 with a correction.
928