add some attributions to the release notes
[evergreen-equinox.git] / docs / RELEASE_NOTES_3_11.adoc
1 = Evergreen 3_11 Release Notes =
2 :toc:
3 :numbered:
4 :toclevels: 3
5
6 == Upgrade notes ==
7
8 == New Features ==
9
10 :leveloffset: +2
11
12
13 = Acquisitions =
14
15
16 == Lineitem Detail Audit Table ==
17
18 The default schema has added an audit table for the
19 `acq.lineitem_detail` table.  The audit table is NOT created during
20 database upgrade.  If you wish to add the audit table to your
21 Evergreen installation, you can run the following SQL in your
22 database:
23
24 [source, sql]
25 ----
26 SELECT acq.create_acq_auditor ( 'acq', 'lineitem_detail' );
27 CREATE INDEX acq_lineitem_detail_hist_id_idx ON acq.acq_lineitem_detail_history( id );
28 CREATE INDEX acq_lineitem_detail_hist_lineitem_idx ON acq.acq_lineitem_detail_history( lineitem );
29 CREATE INDEX acq_lineitem_detail_hist_fund_debit_idx ON acq.acq_lineitem_detail_history( fund_debit );
30 ----
31
32
33
34 = Administration =
35
36
37 == Enhanced Concerto dataset ==
38
39 An alternative sample dataset called "Enhanced Concerto" is now
40 available. This dataset includes a more realistic organizational
41 unit structure and additional data with which to test Evergreen
42 functionality.
43
44 The "Enhanced Concerto" dataset supports human-driven testing
45 and community demonstrations. However, at present, automated
46 tests, particularly the ones found in `Open-ILS/src/sql/Pg/live_t`
47 and `Open-ILS/src/perlmods/live_t`, are not guaranteed to pass
48 with the "Enhanced Concerto" dataset; instead, they remain targeted
49 to working with the original "Concerto" dataset.
50
51 === Installing the dataset ===
52
53 The dataset can be loaded when installing Evergreen by using the
54 `--load-concerto-enhanced` option of `eg_db_config`. For example:
55
56 [source,bash]
57 ----
58 perl Open-ILS/src/support-scripts/eg_db_config --update-config \
59        --service all --create-database --create-schema --create-offline \
60        --user <user> --password <password> --hostname <hostname> --port <port> \
61        --database <dbname> --admin-user <admin-user> --admin-pass <admin-pass> \
62        --load-concerto-enhanced
63 ----
64
65 The `--load-concerto-enhanced` switch is mutually exclusive with the
66 `--load-all-sample` switch to load the full original "Concerto" dataset
67 and the `--load-concerto` switch to load just the bibs, items, and
68 authorities from the original "Concerto" dataset.
69
70 === Updating the dataset ===
71
72 An experimental script called `make_concerto_from_evergreen_db.pl` is
73 included to support
74
75 * updating the dataset as Evergreen's schema evolves
76 * incorporating changes to the dataset from a running Evergreen system
77
78 The script compares data between different versions of an
79 Evergreen database depending on how it is invoked. This script has known
80 bugs and its output *must* be manually reviewed before being committed.
81
82
83 == --pipe option for marc_export ==
84
85 Add a --pipe option to marc_export to force reading of record ids from
86 standard input when one or more of the --library, or
87 --descendants options are used.  This permits more flexibility when
88 exporting records with holdings for given libraries or subsets of a
89 collection.
90
91 It is an error to specify the --all or --since  and --pipe options in the same
92 command line.
93
94
95 [source]
96 --------
97         --pipe
98
99 Some examples:
100
101         --pipe --library BR1   [Filter the list of bib ids by those 
102                                 with BR1 as the Owning Library]
103
104         --pipe --descendants BR1 [Filters the list of bib ids by those 
105                                   with BR1 or descendants as the Owning Library]
106
107 --------
108
109
110 == --strip option for marc_export ==
111
112 The --strip option is used to suppress generation of specified elements
113 from the marc_export output. The option, which can be specified more than
114 once, is in one if these forms:
115
116 [source]
117 --------
118         --strip <field RE>/<subfield RE>
119         --strip /<subfield RE>
120         --strip <field RE>
121
122 Some examples:
123
124         --strip 856/0   [Delete subfield 0's in fields with tag 856.]
125
126 Regular expressions are accepted:
127
128         --strip 8../0   [Delete subfield 0's in fields with tag 800-899.]
129
130 If the field is omitted, it is as if you specified "..." for the field RE.
131
132     --strip /0      [Delete subfield 0's in all fields.]
133     --strip /[abc]  [Delete subfield a, b or c in all fields.]
134
135 If the slash and subfield are omitted, it means to delete the given fields.
136
137     -strip 856     [Delete fields with tag 856]
138
139 If the slash is present, but the subfield is omitted, it means "all subfields"
140
141     --strip 856/    [Delete all subfields with tag 856]
142 --------
143
144
145 == Applying Missing Database Upgrades ==
146
147 This patch fixes a situation where an Evergreen database that had
148 been been upgraded to 3.6.0 at some point in its past using the
149 3.5.1-3.6.0 DB update script may be missing some DB revisions.
150
151 The following bugfixes are affected:
152
153     - https://bugs.launchpad.net/evergreen/+bug/1788260
154     - https://bugs.launchpad.net/evergreen/+bug/1908727
155     - https://bugs.launchpad.net/evergreen/+bug/1835127
156     - https://bugs.launchpad.net/evergreen/+bug/1910891
157     - https://bugs.launchpad.net/evergreen/+bug/1882825
158     - https://bugs.launchpad.net/evergreen/+bug/1096209
159
160
161 == Improvements to Mapping Permissions to Groups ==
162
163 The dialog to add permission mappings to a group in the Permission
164 Groups administrative interface now allows multiple permissions
165 to be added in one invocation. This reduces the number of clicks
166 and keyboard interactions required when adding a large number of
167 permission mappings.
168
169
170
171 = Architecture =
172
173
174 == Malicious Search Protection ==
175
176 Evergreen sometimes sees some "novel" query strings in the wild that
177 cause the search backend to time out or worse.  These are sometimes
178 malicious and sometimes accidental, but the effect on users is the
179 same.
180
181 The changes here improve query compilation in several respects in order
182 to reduce the chances of an overly complex query causing problems for
183 the search subsystem.
184
185 More work is done up front to simplify and combine parts of the
186 resulting SQL, allowing more work to be done closer to the data.
187 This change allows Evergreen to handle many more tested or chained
188 boolean expressions, and negated terms are now handled directly in
189 line with other adjacent terms. Phrases (exact matches) are now
190 searched for using Postgres' adjacency tsearch operator.
191
192 All of these changes work together to improve performance by getting
193 more search work done in fewer database operations while protecting
194 against certain query constructs that have caused problems in the
195 past.
196
197
198
199 == Angular and Bootstrap Updates for Staff Interface ==
200
201 The Angular staff interface now uses Angular 15 and Bootstrap 5. This
202 introduces various changes to how the staff interface styling is
203 done; developers should take note.
204
205
206 == Fix SQL Injection Vulnernability ==
207
208 An SQL injection vulnernability related to the implementation of
209 search term highlights is now closed.
210
211
212 == Queued Ingest ==
213
214 This feature allows for the separation of bib and authority record
215 updates and the search (and other) indexing that occurs when a record is
216 modified in some way. Prior to this feature, bib and authority records
217 would be indexed immediately upon an update.
218
219 While individual record ingest has not become a problem with regard to
220 system performance or interface usability, there exist several batch
221 operations which aggregate many inserts or updates and whose aggregate
222 ingest time cost can be significant.  These include, but are not
223 limited to, reingest caused by authority control propagation, reingest
224 required by the addition or modification of indexing configuration,
225 cataloging and acquisitions record import and overlay from the staff
226 interface, and upgrade-time reingest required by structural changes
227 to the underlying indexing and search system.
228
229 === New Utility ===
230
231 When Queued Ingest is enabled, a new control script, `ingest_ctl`, is
232 available to perform several functions:
233
234 * Run in the background to process the queues of indexing requests
235 * Display statistics of queued ingest activity
236 * Specify that a set of records should be reindexed.
237
238 Here are some examples of how it is used:
239
240 [source,bash]
241 ------------------------------------------------------------------------------------
242 # Enqueue records 1-500000 for reingest later, just one worker for the queue
243 /openils/bin/ingest_ctl --queue-threads 1
244     --queue-type biblio
245     --queue-run-at tomorrow
246     --queue-owner admin
247     --queue-name "slowly updating records due to new RDA attributes"
248     --start-id 1 --end-id 500000
249
250 # Start the background worker
251 /openils/bin/ingest_ctl --coordinator --max-child 20
252
253 # Stop the background worker
254 /openils/bin/ingest_ctl --coordinator --stop
255
256 # Process whatever you can Right Now
257 /openils/bin/ingest_ctl --max-child 20
258
259 # Process a single queue Right Now
260 /openils/bin/ingest_ctl --queue 1234 --max-child 20
261
262 # Stats on Queued Ingest processing so far today
263 /openils/bin/ingest_ctl --stats --since today --totals-only
264 ------------------------------------------------------------------------------------
265
266 This script also requires the following switches (or environment
267 variables) in order to connect to the database:
268
269 * `--db_user` (or environment variable `PGUSER`)
270 * `--db` (or environment variable `PGDATABASE`)
271 * `--dbpw` (or environment variable `PGPASSWORD`)
272 * `--db_port` (or environment variable `PGPORT`)
273
274 === New Settings ===
275
276 This feature adds several new global flags:
277
278
279 |===
280 | Global Flag | Enabled
281
282 | Queued Ingest: Abort transaction on ingest error rather than simply logging an error | no
283 | Queued Ingest: Queue all bib record updates on authority change propagation, even if bib queuing is not generally enabled | no
284 | Queued Ingest: Use Queued Ingest for bib record ingest on insert and undelete | no
285 | Queued Ingest: Use Queued Ingest for authority record ingest on insert and undelete | no
286 | Queued Ingest: Use Queued Ingest for bib record ingest on update | no
287 | Queued Ingest: Use Queued Ingest for authority record ingest on update | no
288 | Queued Ingest: Use Queued Ingest for bib record ingest on delete | no
289 | Queued Ingest: Use Queued Ingest for authority record ingest on delete | no
290 | Queued Ingest: Maximum number of database workers allowed for queued ingest processes | yes; default value 20
291 | Queued Ingest: Use Queued Ingest for all bib record ingest | no
292 | Queued Ingest: Use Queued Ingest for all bib and authority record ingest | no
293 | Queued Ingest: Do NOT use Queued Ingest when creating a new bib, or undeleting a bib, via the MARC editor | yes
294 | Queued Ingest: Use Queued Ingest for all authority record ingest | no
295 | Queued Ingest: Do NOT Use Queued Ingest when editing bib records via the MARC Editor | yes
296 |===
297
298 This feature does not add any new library settings or permissions.
299
300 === Upgrade Notes ===
301
302 Queued Ingest is not automatically turned on upon upgrade. to enable it,
303 at minimum the following actions should be taken:
304
305 * Enable at least the "Use Queued Ingest for all bib and authority record
306   ingest" global flag
307 * Ensure that `ingest_ctl` is running with the `--coordinator` flag.
308
309
310
311 = Cataloging =
312
313
314 == Catalog Staff View ==
315
316 Adds a Staff View tab to the record details page in the staff catalog.
317 In addition to showing various fields from the bib record, it also shows
318 a count of hold requests and a break-down of available items versus
319 total items, and it shows a breakdown of similar records by formats and
320 language editions, based on the associated metarecord.
321
322
323
324
325 = Circulation =
326
327
328 == Adjust Hold Cancel Reasons ==
329
330 The dialog to confirm canceling a hold in the staff interface
331 now lists only hold cancel reasons that can be manually applied,
332 excluding the ones that can only be automatically applied.
333
334 In addition, two more hold cancel reasons are added:
335
336  * Patron via email
337  * Patron via SMS
338
339
340 == New Permission for Viewing Holds Pull List ==
341
342 Access to the holds pull list is now restricted to users with the
343 VIEW_HOLD_PULL_LIST permission.  By default, this new permission is granted to
344 all users with the VIEW_HOLDS permission.
345
346
347
348
349 = Client =
350
351
352 == Angular navbar keyboard navigation ==
353
354 Adds basic keyboard navigation support to the Angular web client navbar as follows:
355
356 * Use the Tab key to move between the top-level menu items.
357 * Press Enter, Space, or the down arrow on a top-level item to open its submenu. Pressing Esc will close it.
358 * Shift-tab from the first submenu item back to the top level, and use Enter or Space to toggle the button again and close the submenu.
359 * Within the submenu, use either Tab and shift-Tab to move up and down, or the up/down arrow keys.
360
361
362
363 = OPAC =
364
365
366 == Multi-term Did You Mean search suggestions ==
367
368 Expanding on the previous single-class, single-term search suggestion
369 development, this feature provides suggestions for single-class searches
370 with multiple terms.
371
372  * The Library Settings that were previously used to control the global
373 behavior of search suggestions have been moved to search class
374 configuration fields.  This was done because the data in each search
375 class benefits from different setting values. If the Library Settings
376 had been set, they will be used to update the corresponding search
377 class configuration fields. Regardless, Evergreen administrators are
378 recommended to review the settings.
379
380  * If a patron's search matches a variant or non-preferred heading from
381 an authority record, if the main heading of that authority is linked
382 to at least bibliographic record, the system will provide that main
383 heading as a suggestion as well, along with spelling-corrected suggestions.
384
385  * Quoted phrases in user input require strict term order and adjacency
386 for the phrase portion of the suggestion generated for the phrase(s),
387 whereas unquoted input (or the portion that is not quoted) does not.
388
389 === MARC Search/Facet Class field additions ===
390
391  * variant_authority_suggestion   Whether this class should attempt variant authority suggestions based on search-class/browse-axis mapping
392  * symspell_transfer_case         Whether suggestions should retain user-supplied letter case
393  * symspell_skip_correct          Only supply suggestions to misspelled words
394  * symspell_suggestion_verbosity  Setting that controls the amount of effort, and therefore time, spent on suggestion generation
395  * max_phrase_edit_distance       Maximum average per-word edit distance when evaluating suggestions
396  * suggestion_word_option_count   Maximum alternate suggestions per word
397  * max_suggestions                Maximum suggstions to present
398  * low_result_threshold           Maximum hit count beyond which suggestions are not provided
399  * min_suggestion_use_threshold   Minimum number of times a suggestion must exist in the corpus
400  * pg_trgm_weight                 Weight of the trigram similarity metric; 0 avoids calculation costs
401  * soundex_weight                 Weight of the soundex similarity metric; 0 avoids calculation costs
402  * keyboard_distance_weight       Weight of the keyboard distance similarity metric; 0 avoids calculation costs
403
404 === Upgrade ===
405
406 If the databse has authority records that are linked to bilbiographic
407 records, a reingest of the search suggestion dictionary is recommended.
408
409 Instructions for performing that reingest are included in the database
410 update scripts and will be output to the log when those scripts are
411 run.
412
413
414 == Restrict login redirect ==
415
416 As a security best-practice, Evergreen should not allow arbitrary
417 redirection on successful login, but instead limit redirection to
418 local links or configured domains and schemes.
419
420 This feature is controlled by a new global flag called *opac.login_redirect_domains*
421 which must contain a comma-separated list of domains.  All hostnames
422 under each domain is allowed for redirect, and the scheme of the
423 redirect URL must be one of http, https, ftp, or ftps.
424
425
426
427 Accepting payments with SmartPAY
428 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
429 SmartPAY is a payment processing service that lets
430 sites take credit card payments without payment card information ever
431 touching the sites' own servers.
432
433 Library Settings
434 ++++++++++++++++
435 The following settings need to be set at the appropriate org level for
436 sites wanting to use SmartPAY.
437
438  * "Allow Credit Card Payments" (should be 'true')
439
440    credit.payments.allow
441
442  * "Enable SmartPAY payments" (should be 'true')
443
444    credit.processor.smartpay.enabled
445
446  * "SmartPAY location ID" (value provided by Comprise)
447
448    credit.processor.smartpay.location_id
449
450  * "SmartPAY customer ID" (value provided by Comprise)
451
452    credit.processor.smartpay.customer_id
453
454  * "SmartPAY login name" (value provided by Comprise)
455
456    credit.processor.smartpay.login
457
458  * "SmartPAY password" (value provided by Comprise)
459
460    credit.processor.smartpay.password
461
462  * "SmartPAY API key" (value provided by Comprise)
463
464    credit.processor.smartpay.api_key
465
466  * "SmartPAY server name" (value provided by Comprise)
467
468    credit.processor.smartpay.server
469
470  * "SmartPAY server port" (value provided by Comprise)
471
472    credit.processor.smartpay.port
473
474  * "Name default credit processor" (should be 'SmartPAY')
475
476    credit.processor.default
477
478
479
480 = Miscellaneous =
481
482 * Add patron home library code as a column to the View Holds grid in the staff catalog record details page (LP#1991726)
483 * Include template ID in the template table in the Reporter (LP#1998386)
484 * Remove the `pub` flag from the `biblio.record_note` table (LP#1978978)
485 * Add the publication date to the Staff Catalog's Shelf Browse (LP#1999432)
486 * Resolve search performance degradation with PostgreSQL version 12 and up (LP#1999274)
487 * Improved styling of paid line items in acquisitions screens (LP#1999270)
488 * Improved styling of the keyboard shortcut info modal (LP#1999955)
489 * (Developer) Add Emacs mode to `fm_IDL.xml` (LP#1914625)
490 * `autogen.sh` can now accept a `-c` switch to specify the location of `opensrf_core.xml`. This is useful for certain multi-tenant setups of Evergreen. (LP#2003707)
491 * Better organization of acquisitions line item alert fields (LP#2002977)
492 * Prevent templates from applying or changing magical status in angular holdings editor (LP#1999401)
493 * Prevent directly editing the shelving location deleted field in the Shelving Locations Editor (LP#2002435)
494 * The "Strict Barcode" checkbox is now closer to the barcode input on the Check Out, Check In, and Renew Items pages (LP#1990968)
495 * LP1929593 UPDATE_COPY_BARCODE permission
496
497     This adds the permission UPDATE_COPY_BARCODE and a new API call,
498
499       open-ils.cat.update_copy_barcode
500
501     which explicitly tests for both UPDATE_COPY_BARCODE and UPDATE_COPY,
502     with either being sufficient for allowing a barcode change.  Existing
503     Replace Barcode UI's in both Angular and AngularJS have been modified
504     to use this API call instead of the pcrud service.  One side-effect of
505     this has been better surfacing of errors, as errors in pcrud were
506     uncaught and bypassing the normal error handling.  This addresses
507     LP1951469.
508
509     The upgrade script gives any permission groups that already have the
510     UPDATE_COPY permission the new UPDATE_COPY_BARCODE permission at the
511     same depth, though it's technically not needed.
512 * Patron and staff login forms now include a button to reveal the password input. (LP#1977554)
513 * Adds new Local Administration entries for Item Statistical Categories Editor and Patron Statistical Categories Editor, which are angularized interfaces.
514 * Tweaks eg-grids to underline hyperlinks within cells.  This potentially affects multiple interfaces.
515 * eg-org-family-select now supports persistKey
516 * LP1965446 Option to Disable Title-Level Holds on Bib Records with Parts
517
518     This feature adds one global flag and one library setting, respectively:
519
520         * circ.holds.api_require_monographic_part_when_present
521           Holds: Require Monographic Part When Present for hold check.
522         * circ.holds.ui_require_monographic_part_when_present
523           Require Monographic Part when Present
524
525     Normally the selection of a monographic part during hold placement is optional if there is at least one copy
526     on the bib without a monographic part.  A true value for this setting for any involved owning library for the
527     bib or for the global flag will require part selection even under this condition.  This essentially removes
528     the All/Any Parts option from the part selection drop-down, for both versions of the public catalog (TPAC and
529     BOOPAC), and for the Angular staff catalog interface. It should be noted that if the library setting is set
530     below the consortium level, Title level holds may be allowed for some libraries and not others.
531
532     At the API level, we consider just the global flag and will throw a TITLE_HOLD_WHEN_MONOGRAPHIC_PART_REQUIRED
533     event for a title hold request when there are items with monographic parts on the bib.  It is possible for
534     the library settings and the global flag to differ, but the global flag will catch every instance of hold
535     placement including those by third party callers, SIP, etc.
536 * Links the lineitem id link in Acquisitions search results to the lineitem detail page rather than the purchase order. (LP#2003946)
537 == Angular navbar keyboard navigation ==
538
539 Adds basic keyboard navigation support to the Angular web client navbar as follows:
540
541 * Use the Tab key to move between the top-level menu items.
542 * Press Enter, Space, or the down arrow on a top-level item to open its submenu. Pressing Esc will close it.
543 * Shift-tab from the first submenu item back to the top level, and use Enter or Space to toggle the button again and close the submenu.
544 * Within the submenu, use either Tab and shift-Tab to move up and down, or the up/down arrow keys.
545
546 :leveloffset: 0
547
548
549 == Acknowledgments ==
550 The Evergreen project would like to acknowledge the following
551 organizations that commissioned developments in this release of
552 Evergreen:
553
554 TODO
555
556 We would also like to thank the following individuals who contributed
557 code, translations, documentations patches and tests to this release of
558 Evergreen:
559
560 * John Amundson
561 * Scott Angel
562 * Jason Boyer
563 * Dan Briem
564 * Andrea Buntz Neiman
565 * Eva Cerninakova
566 * Galen Charlton
567 * Garry Collum
568 * Elizabeth Davis
569 * Jeff Davis
570 * Britta Dorsey
571 * Bill Erickson
572 * Jason Etheridge
573 * Ruth Frasur
574 * Jeff Godin
575 * Blake Graham-Henderson
576 * Rogan Hamby
577 * Elaine Hardy
578 * Stephanie Leary
579 * Clayton Liddell
580 * Shula Link
581 * Tiffany Little
582 * Mary Llewellyn
583 * Debbie Luchenbill
584 * Llewellyn Marshall
585 * Terran McCanna
586 * Chrystal Messam
587 * Gina Monti
588 * Christine Morgan
589 * Michele Morgan
590 * Susan Morrison
591 * Susasn Morrison
592 * Dan Pearl
593 * Jennifer Pringle
594 * Mike Risher
595 * Mike Rylander
596 * Jane Sandberg
597 * Chris Sharp
598 * Ben Shum
599 * Jason Stephenson
600 * Josh Stompro
601 * Elizabeth Thomsen
602 * Jennifer Weston
603 * Beth Willis
604 * Carol Witt
605 * Adam Woolford
606 * Jessica Woolford
607
608 We also thank the following organizations whose employees contributed
609 patches:
610
611 * BC Libraries Coop
612 * Bibliomation
613 * Catalyte
614 * CW MARS
615 * Equinox Open Library Initiative
616 * Evergreen Indiana
617 * Georgia Public Library Service
618 * Kenton County Library
619 * King County Library System
620 * Lake Agassiz Regional Library
621 * LibraryMarket
622 * Linn Benton Community College
623 * MOBIUS
624 * NC Cardinal
625 * NOBLE
626 * Princeton University
627 * Sigio
628 * Westchester Library System
629
630 We regret any omissions.  If a contributor has been inadvertently
631 missed, please open a bug at http://bugs.launchpad.net/evergreen/
632 with a correction.
633