Bumping version numbers, adding Upgrade Script and Changelog
authorJason Stephenson <jason@sigio.com>
Fri, 29 Oct 2021 14:46:43 +0000 (10:46 -0400)
committerJason Stephenson <jason@sigio.com>
Fri, 29 Oct 2021 14:46:43 +0000 (10:46 -0400)
Signed-off-by: Jason Stephenson <jason@sigio.com>
ChangeLog
Open-ILS/src/perlmods/lib/OpenILS/Application.pm
Open-ILS/src/sql/Pg/002.schema.config.sql
Open-ILS/src/sql/Pg/version-upgrade/3.7.1-3.7.2-upgrade-db.sql [new file with mode: 0644]
Open-ILS/xul/staff_client/chrome/content/main/about.html
Open-ILS/xul/staff_client/defaults/preferences/prefs.js
Open-ILS/xul/staff_client/windowssetup.nsi
README [changed from symlink to file mode: 0644]
configure.ac

index 1f72b2c..692562b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-Evergreen doesn't keep a GNU-style ChangeLog except in release tarballs.
-Those seeking a change log are encouraged to run 'git log -v', or read
-it online at: http://git.evergreen-ils.org/?p=Evergreen.git;a=log
+commit 6562900932cd2413f17351b3535fd581f76ee0ff
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Fri Oct 29 09:30:15 2021 -0400
+
+    Bumping Perl version string for 3.7.2
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+1      1       Open-ILS/src/perlmods/lib/OpenILS.pm
+
+commit e6d9f24ceba2a44034b263fa8353c9e8a4e73395
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Fri Oct 29 09:13:48 2021 -0400
+
+    Translation updates - newpot
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+198    126     build/i18n/po/bootstrap-opac/bootstrap-opac.pot
+3083   3024    build/i18n/po/db.seed/db.seed.pot
+92     92      build/i18n/po/fm_IDL.dtd/fm_IDL.dtd.pot
+17     17      build/i18n/po/kpac/kpac.pot
+30     26      build/i18n/po/tpac/tpac.pot
+191    169     build/i18n/po/webstaff/webstaff.pot
+
+commit 5a3c8a5beea3e0a716688ecee3e847004be9355a
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Fri Oct 29 09:09:47 2021 -0400
+
+    Remove extraneous release notes documents
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+0      17      docs/RELEASE_NOTES_NEXT/Cataloging/authority-full-rec-value-index.adoc
+0      6       docs/RELEASE_NOTES_NEXT/Cataloging/bre_negative_one.adoc
+0      14      docs/RELEASE_NOTES_NEXT/Client/splash_search_fix.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/authority-full-rec-value-index.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/bre_negative_one.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Client/splash_search_fix.adoc
+
+commit 645dbc689c40f14eb5a8e682660dec8cb25ccb29
+Author: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+Date:   Mon Oct 25 15:50:07 2021 -0400
+
+    Docs: corrections to Hold Groups Admin doc
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+1      1       docs/modules/admin/pages/hold_groups_admin.adoc
+
+commit 0fd0a8014f2035dff15a848a2521fe9932f615c5
+Author: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+Date:   Mon Oct 25 15:41:11 2021 -0400
+
+    Docs: corrections to Library Groups Admin doc
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+1      1       docs/modules/admin/pages/library_groups_admin.adoc
+
+commit f5f989e4d26ec6f920753cddb8df81028c34dd8e
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Mon Oct 25 13:16:18 2021 -0400
+
+    Docs: More 3.6.5 and 3.7.2 release notes cleanup
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+6      5       docs/RELEASE_NOTES_3_6.adoc
+6      4       docs/RELEASE_NOTES_3_7.adoc
+
+commit d085e78a07b4fb4afb03570de6493f0274f0837f
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Mon Oct 25 13:04:29 2021 -0400
+
+    Docs: Fix previous release notes addition
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+1      1       docs/RELEASE_NOTES_3_6.adoc
+1      1       docs/RELEASE_NOTES_3_7.adoc
+
+commit ef5dd79e8e7da917ea1d0dadb7f1c941b5568f7e
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Mon Oct 25 12:52:54 2021 -0400
+
+    Docs: Add an upgrade note to the 3.7.2 and 3.6.5 release notes
+    
+    Add a note mentioning that upgrading sites should make sure to run
+    autogen.sh to update the fm_IDL.xml files.
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+2      0       docs/RELEASE_NOTES_3_6.adoc
+2      0       docs/RELEASE_NOTES_3_7.adoc
+
+commit 676aaafb817cc58e17aacaf29665d1feeceabe21
+Author: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+Date:   Mon Oct 25 09:26:46 2021 -0400
+
+    Docs: updates to 3.7.2 and 3.6.5 release notes
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+6      0       docs/RELEASE_NOTES_3_6.adoc
+9      0       docs/RELEASE_NOTES_3_7.adoc
+
+commit 60c4efb9151f5a454e012bab98de4260bf9d4485
+Author: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+Date:   Fri Oct 22 15:51:17 2021 -0400
+
+    docs: edit to 3.7.2 release notes
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+0      5       docs/RELEASE_NOTES_3_7.adoc
+
+commit 0f45e6f2a8366619cf1936386ea45c32c71279df
+Author: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+Date:   Fri Oct 22 15:45:50 2021 -0400
+
+    docs: release notes 3.6.5
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+
+157    0       docs/RELEASE_NOTES_3_6.adoc
+
+commit 42d0ee413445007ded6d27d33b103bffa0729885
+Author: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+Date:   Fri Oct 22 15:43:11 2021 -0400
+
+    docs: release notes 3.7.2
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+172    0       docs/RELEASE_NOTES_3_7.adoc
+
+commit efe8d20613f65c8a568f66f3cd2e334fe12e4341
+Author: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+Date:   Thu Oct 21 09:42:17 2021 -0400
+
+    docs: fixes to 3.7 report sources doc
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+0      11      docs/modules/reports/pages/report_sources.adoc
+
+commit 88439b6aca0068cbe266c14650dc7583687ae9c0
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Tue Jul 27 15:09:45 2021 -0400
+
+    LP1903358 Staff catalog holds barcode realtime lookup
+    
+    Avoid requiring staff to send an Enter event (keyword / scanner) when
+    entering a patron barcode into the place holds form.  Instead, look the
+    barcode up after a sufficient amount of time has passed.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Ruth Frasur <rfrasur@library.in.gov>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+3      2       Open-ILS/src/eg2/src/app/staff/catalog/hold/hold.component.html
+17     0       Open-ILS/src/eg2/src/app/staff/catalog/hold/hold.component.ts
+
+commit 759fd36124cd7eac9fdd4f81795b4a058480a5fc
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Mon Oct 4 12:28:14 2021 -0400
+
+    LP#1826759: end DB update scripts with "COMMIT", not "END"
+    
+    The former is what tools like make_release are looking
+    for.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/upgrade/1302.data.lp1826759_items_out_typo.sql
+
+commit c5d818c035e42a57caedfe9c443af1ff3ce71a80
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Mon Oct 4 10:52:35 2021 -0400
+
+    LP#1922567: stamp schema update
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.schema.authority-full-rec-value-index.sql => 1303.schema.authority-full-rec-value-index.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.schema.authority-full-rec-value-index.sql => 1303.schema.authority-full-rec-value-index.sql} (83%)
+
+commit 38374b5a2add8172f1cebebf312ceaf0e5bf2a0d
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Tue Apr 6 07:43:52 2021 -0400
+
+    Lp 1922567: Limit authority.full_rec.value indexes
+    
+    Limit the authority_full_rec_value_index and
+    authority_full_rec_value_tpo_index indexes to the first 1024
+    characters of a field or subfield in order to avoid database errors
+    when inserting or updating authorities with long fields.
+    
+    Include release note and regression test.
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+    Signed-off-by: Jennifer Weston <jennifer.weston@equinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+2      2       Open-ILS/src/sql/Pg/011.schema.authority.sql
+21     0       Open-ILS/src/sql/Pg/t/regress/lp1922567-test-asset-full-rec-indexes.pg
+12     0       Open-ILS/src/sql/Pg/upgrade/XXXX.schema.authority-full-rec-value-index.sql
+17     0       docs/RELEASE_NOTES_NEXT/Cataloging/authority-full-rec-value-index.adoc
+ create mode 100644 Open-ILS/src/sql/Pg/t/regress/lp1922567-test-asset-full-rec-indexes.pg
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.authority-full-rec-value-index.sql
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/authority-full-rec-value-index.adoc
+
+commit 2605a9e6f3bba5edf6616ca565170ab49b0811fe
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Mon Sep 27 13:39:41 2021 -0400
+
+    Lp 1826759: Stamping Upgrade Script
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.data.lp1826759.items_out_typo.sql => 1302.data.lp1826759_items_out_typo.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.data.lp1826759.items_out_typo.sql => 1302.data.lp1826759_items_out_typo.sql} (96%)
+
+commit 01b97d1a9fd9dd5c2918c92632b93a2f79a03329
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Mon Sep 27 13:32:41 2021 -0400
+
+    Lp 1826759: Fix Database Upgrade Script
+    
+    Remove 2 extraneous updates, add a blank line between the remaining
+    updates, and add a placeholder the upgrade_deps_block_check().
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+4      10      Open-ILS/src/sql/Pg/upgrade/XXXX.data.lp1826759.items_out_typo.sql
+
+commit 422d61cdd34ca665456d664b8d4059d8e439efbd
+Author: Shula Link <slink@gchrl.org>
+Date:   Thu Mar 18 10:27:02 2021 -0400
+
+    Lp 1826759: Spelling correction: oustanding to outstanding
+    
+    Correct the spelling of "oustanding" to "outstanding" in the
+    descriptions of 3 config.org_unit_setting_type entries:
+    
+      * ui.circ.items_out.longoverdue
+      * ui.circ.items_out.lost
+      * ui.circ.items_out.claimsreturned
+    
+    Signed-off-by: Shula Link <slink@gchrl.org>
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+3      3       Open-ILS/src/sql/Pg/950.data.seed-values.sql
+56     0       Open-ILS/src/sql/Pg/upgrade/XXXX.data.lp1826759.items_out_typo.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.lp1826759.items_out_typo.sql
+
+commit b4b719009e03c8eb2a3a330f436a285b10934481
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Tue Sep 7 14:37:54 2021 -0400
+
+    Lp 1942920: Show Legacy/Not Dated for Legacy Circs
+    
+    When legacy circ counts are displayed in the AngularJS client, the
+    year shows up as -1.  This patch attempts to replace -1 with a
+    translatable string: "Legacy/Not Dated" as was used in the XUL staff
+    client.
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+
+1      1       Open-ILS/src/templates/staff/cat/item/t_summary_pane.tt2
+
+commit 8761bd6d859cf041d62619669f41df1462364eae
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Thu Sep 23 16:11:42 2021 -0400
+
+    LP#1944765: enable the Apache module mod_headers
+    
+    This patch enables mod_headers for Debian Stretch and Buster
+    and Ubuntu Bionic and Focal during installation. Without
+    mod_headers, the Angular staff client application can have
+    its index page cached for 24 hours on a stock system, meaning
+    that browsers will not consistently fetch the updated app
+    after an upgrade.
+    
+    This patch does not change the Fedora Makefile as mod_headers
+    is enabled by default on RHEL-like distributions.
+    
+    UPGRADE NOTES
+    -------------
+    Existing Evergreen systems on Debian and Ubuntu should
+    do the following to ensure that mod_headers is active:
+    
+    sudo a2enmod headers
+    sudo systemctl restart apache2
+    
+    To test
+    -------
+    [1] Perform a fresh installation of Evergreen on Stretch, Buster,
+        Bionic, or Focal.
+    [2] Verify that mod_headers is enabled.
+    [3] (Optional) Fetch the Angular staff client index page, e.g.,
+        /eg2/staff, and verify that the response headers call for
+        not caching it.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+    Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+
+1      0       Open-ILS/src/extras/install/Makefile.debian-buster
+1      0       Open-ILS/src/extras/install/Makefile.debian-stretch
+1      0       Open-ILS/src/extras/install/Makefile.ubuntu-bionic
+1      0       Open-ILS/src/extras/install/Makefile.ubuntu-focal
+
+commit caf359fb310899448dbc78551ee0ddfa1c3afca5
+Author: Shula Link <slink@gchrl.org>
+Date:   Tue Jul 13 10:16:39 2021 -0400
+
+    LP1834258 Replace Javascript with Placeholder Attribute
+    
+    onfocus/onblur javascript replaced with placeholder="[% seed %]" in
+    Open-ILS/src/templates/kpac/getit.tt2 and
+    Open-ILS/src/templates/kpac/parts/searchbox.tt2
+    
+    Signed-off-by: Shula Link <slink@gchrl.org>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+
+1      3       Open-ILS/src/templates/kpac/getit.tt2
+1      3       Open-ILS/src/templates/kpac/parts/searchbox.tt2
+
+commit d7c3704bd948d6cd820bf37c01828de829051553
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Mon Aug 2 16:30:21 2021 -0400
+
+    LP1938729 Cache "cascade" setting values
+    
+    Cache values retrieved from 'open-ils.actor.settings.retrieve' lookups
+    in IndexedDB, similar to to org unit setting lookups, to reduce the need
+    for so many API calls for settings retrieval.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+87     24      Open-ILS/src/eg2/src/app/core/server-store.service.ts
+2      1       Open-ILS/src/eg2/src/app/staff/login.component.ts
+
+commit a042c318639fe35bd302ec7a6b87b783eb2741f1
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date:   Mon Sep 20 18:12:47 2021 -0400
+
+    LP1909144 BooPAC Login Form Tabbing
+    
+    This change places the cursor in the user name field and adjusts the order
+    of the elements so that tabbing out of the user name field comes to the
+    password field next.
+    
+    Note that this modifies both the login modal and the embedded login form.
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Elaine Hardy <ehardy@georgialibraries.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+7      0       Open-ILS/src/templates-bootstrap/opac/parts/base.tt2
+43     38      Open-ILS/src/templates-bootstrap/opac/parts/login/form.tt2
+36     27      Open-ILS/src/templates-bootstrap/opac/parts/login/login_modal.tt2
+
+commit e12c899b188d34b29441d4ecca2660d2b4b6fa00
+Author: Josh Stompro <stompro@stompro.org>
+Date:   Thu Apr 15 08:37:05 2021 -0500
+
+    LP#1924562 - pingest.pl help typo for --max-duration
+    
+    In the help command example the argument --duration is used but
+    --max-duration is the correct command.
+    
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+1      1       Open-ILS/src/support-scripts/pingest.pl
+
+commit 8dd47f54b1eb5e6f5fa101d84fc59ca8965e09ef
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Mon Jan 11 10:59:54 2021 -0500
+
+    LP1911023 Batch hold cancel refreshes before completion
+    
+    Ensure all hold cancelation promises complete before reporting the
+    results back to the caller.  Issue was result of thinko in the code
+    that failed to relay one of the promises in the chain, so it reported
+    promise completion prematurely.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+1      1       Open-ILS/src/eg2/src/app/staff/share/holds/cancel-dialog.component.ts
+
+commit 54af703c62c05c6f49b612565d1b57e806733bb7
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Thu Oct 15 09:24:28 2020 -0400
+
+    Lp 1899974: Export PERL5LIB in oils_ctl.sh
+    
+    A change in Perl release 5.26.0 necessitates that the SIP_DIR variable
+    (default value "/opt/SIPServer") be exported to the environment in
+    oils_ctl.sh when attempting to start SIPServer.  This change affects
+    Ubuntu 18.04 (Bionic Beaver) and Debian 10 (Buster) and any future
+    releases.
+    
+    To verify the bug:
+    
+    1. Install OpenSRF, Evergreen, and SIPServer on an affected O/S.
+    2. Start OpenSRF service.
+    3. Start SIPServer via oils_ctl.sh:
+       oils_ctl.sh -a start_sip
+    4. Notice the "Starting OILS SIP Server" message is printed with no
+       indication of failure.
+    5. Verify that the PID file exists: /openils/var/run/oils_sip.pid
+    6. Verify that no SIPServer processes are actually running:
+       pgrep -af SIPServer
+       The above should produce no output.
+    
+    To test this patch:
+    
+    1. Apply this patch and install oils_ctl.sh to /openils/bin/.
+    2. Assuming you have run the previous steps, delete the PID file:
+       rm /openils/var/run/oils_sip.pid
+    3. Start SIPServer via oils_ctl.sh:
+       oils_ctl.sh -a start_sip
+    4. Notice the "Starting OILS SIP Server" message is printed.
+    5. Verify that the PID file exists: /openils/var/run/oils_sip.pid
+    6. `pgrep -af SIPServer` should produce output.
+    
+    It is safe to apply this patch on an unaffected O/S.  Explicitly
+    adding SIP_DIR to PERL5LIB will have no detrimental effect on any O/S
+    currently supported by Evergreen.
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+7      0       Open-ILS/examples/oils_ctl.sh
+
+commit 8319de17e75775f7840df5212514e6159af9929e
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Wed Aug 25 18:21:03 2021 -0400
+
+    LP#1928275: fix the Angular "Copy Queue To Bucket"
+    
+    Similar to bug 1934184, a blank routerLink on an anchor no longer
+    causes an ngbModal to open via a click handler.
+    
+    To test
+    -------
+    [1] Create a MARC import bib queue that has at least one imported
+        record it.
+    [2] Click the "Copy Queue To Bucket" link from the queue inspection page
+        and observe that nothing happens.
+    [3] Apply the patch and repeat step 2. This time, the add-to-bucket dialog
+        should appear.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+    Signed-off-by: Mary Llewellyn <mllewell@biblio.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+1      1       Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.html
+
+commit 5130ea2ca5071b809fbf88c5864999d72f68cf4f
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Mon Sep 20 11:55:00 2021 -0400
+
+    LP1924621 Place Hold For shows pref name
+    
+    In the staff catalog banner which displays when a hold is being placed
+    for a pre-selected patron.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+2      1       Open-ILS/src/eg2/src/app/staff/catalog/catalog.component.html
+
+commit fd30681fe50ba67a24276ceeda6467187e1bc5eb
+Author: Garry Collum <gcollum@gmail.com>
+Date:   Thu Apr 15 19:39:56 2021 -0400
+
+    LP1924621 Staff catalog place hold screen preferred name
+    
+    Displays the preferred first or last name on the place holds screen,
+    if a patron barcode is entered.
+    
+    To test.
+    1. Set up a borrower with a preferred first name, and one with a
+    preferred last name, and one with both.
+    2. Use the catalog place hold screen to search for these borrowers
+    and notice that the preferred names, if available, are displayed.
+    
+    * note newline added by Bill to break up wide column.
+    
+    Signed-off-by: Garry Collum <gcollum@gmail.com>
+    Signed-off-by: Mary Llewellyn <mllewell@biblio.org>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Gina Monti <gmonti@biblio.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+2      1       Open-ILS/src/eg2/src/app/staff/catalog/hold/hold.component.html
+
+commit 6ebeb28db990b5c4fa72850e060cf4ba9ad3fa79
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Wed May 12 11:46:01 2021 -0400
+
+    LP1941764 Import from queue propagate form inputs
+    
+    When importing records from an existing Vandelay queue, ensure the
+    selected queue, its match set, its match bucket, and its holdings import
+    profile are propagated into the import form.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Christine Morgan <cmorgan@noblenet.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+2      0       Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.html
+48     8       Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.ts
+
+commit d32db484734072ae731a77099fc6b71d1c868b78
+Author: Jason Boyer <JBoyer@equinoxOLI.org>
+Date:   Wed Sep 22 13:21:13 2021 -0400
+
+    LP1920253: Stamp Upgrade Script
+    
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.data.carousel_ws_settings.sql => 1294.data.carousel_ws_settings.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.data.carousel_ws_settings.sql => 1294.data.carousel_ws_settings.sql} (89%)
+
+commit 9a0c78ff32147177c1644aa64da4e231683e3db8
+Author: Michele <mmorgan@noblenet.org>
+Date:   Fri Mar 19 18:21:26 2021 -0400
+
+    LP1920253 Add missing carousel workstation setting types
+    
+    Adds ws setting types for the following pages:
+    
+    Carousels Visible at Library Configuration (eg.grid.admin.local.container.carousel_org_unit)
+    Carousels Configuration (eg.grid.admin.container.carousel)
+    Carousel Types Configuration (eg.grid.admin.server.config.carousel_type)
+    
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Tiffany Little <tlittle@georgialibraries.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+25     0       Open-ILS/src/sql/Pg/950.data.seed-values.sql
+29     0       Open-ILS/src/sql/Pg/upgrade/XXXX.data.carousel_ws_settings.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.carousel_ws_settings.sql
+
+commit 62864589a06636f0cb77876fd06dd7cd73a80d80
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Thu Aug 5 17:55:18 2021 -0400
+
+    LP#1844121: prevent staff login by expired barcode
+    
+    open-ils.auth.authenticate.init accepts an identifier as its
+    sole parameter, then determines whether it looks like a
+    username or barcode and retrieves the patron's password
+    salt as the seed accordingly.
+    
+    open-ils.auth.authenticate.complete can accept the identifier
+    via the 'identifier', 'username', or 'barcode' keys, but the
+    key used does not need to match how .init found the patron.
+    
+    As a consequence, the .init/.complete dance can retrieve the
+    patron by barcode but handle the barcode value as if it were
+    a username, thereby bypassing the check of whether the barcode
+    was inactive. In particular, the AngularJS staff client login
+    process does this, meaning that staff members can log in to the
+    staff client via the AngularJS form using an expired barcode.
+    
+    This is not good. The OPAC explicitly blocks logging in using an
+    inactive barcode because it checks the identifier type and sets
+    the key passed to .complete accordingly. The Angular staff login
+    page also prevents logging in using an inactive barcode because
+    (a) it uses open-ils.auth.login, which doesn't have the same
+    problem and (b) it forces the identifier to be marked as a user
+    name regardless.
+    
+    NOTE: this means that the Angular staff login form prevents staff
+    from logging in via barcode, which potentially is a regression as
+    compared to the AngularJS side (or, alternatively, is providing
+    additional necessary strictness).
+    
+    This patch avoids the problem by having .complete inspect the
+    cached seed created by .init to determine how the user was ultimately
+    found.
+    
+    Some alternative approaches that were rejected include:
+    
+    [1] Having AngularJS just mirror Angular. Problem: if some staff
+        users are used to using their barcode to log in, doing
+        this would cause an immediate problem. I note that because
+        the staff interface URL is commonly expressed as
+        https://library.example/eg/staff, is currently far more common
+        for the staff interface to be logged into via the AngularJS
+        form rather than the Angular one.
+    [2] Having AngularJS use open-ils.auth.login, but make it and
+        Angular use 'identifier' as the key rather than 'username'.
+        Problem: while this would have the desired effect if you
+        only use native authentication, if you're using open-ils.auth_proxy,
+        it won't work - open-ils.auth_proxy.login doesn't recognize an
+        'identifier' parameter. While that could be changed, it
+        is more invasive.
+    
+    To test
+    -------
+    [1] Set up a staff user that has a username, an active barcode,
+        and an inactive barcode.
+    [2] Log in to the AngularJS staff interface (/eg/staff) using
+        the username, the active barcode, and the inactive one.
+    [3] Note that you are permitted to log in with all three identifiers.
+    [4] Apply the patch and repeat step 2.
+    [5] This time, logging in using the inactive barcode should
+        fail.
+    [6] Verify that other login types continue to work as expected:
+        - Angular staff login form
+        - OPAC
+        - SIP2 terminal login
+        - SIP2 user authentication
+        - operator change (Angular and AngularJS)
+        - Web-based self-check
+    [7] Extra credit: test logging in via open-ils.auth_proxy with
+        it falling back to native authentication.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+    Signed-off-by: Shula Link <slink@gchrl.org>
+    Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+20     1       Open-ILS/src/c-apps/oils_auth.c
+
+commit 464dc0f80b7df8e700913b350583ffbd2a8f0f66
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date:   Fri Jun 18 18:12:08 2021 -0400
+
+    LP1904754 Former precat still displays precat info
+    
+    This fixes a display issue where the precat title and author
+    were still displaying once the record was no longer a precat,
+    which effectively duplicated the title and author.
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+3      8       Open-ILS/src/templates/staff/cat/item/t_list.tt2
+1      1       Open-ILS/src/templates/staff/cat/item/t_summary_pane.tt2
+
+commit 85577071bf637766c595f074529b5bf6bef3b691
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Fri Dec 4 11:17:51 2020 -0500
+
+    LP#1916949: combobox: asyncSupportsEmptyTermClick fix
+    
+    This is a backport of a patch that was included as part
+    of LP#1904244.
+    
+    Fixes situation where combobox would fetch the needed entries
+    in async mode, but fail to open the drop-down.
+    
+    This includes code originally written by Bill Erickson with
+    additions by Galen Charlton to insure that static data sources
+    would continue to work.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+    Signed-off-by: Ruth Frasur <rfrasur@library.in.gov>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+8      4       Open-ILS/src/eg2/src/app/share/combobox/combobox.component.ts
+
+commit f45a3273336f9db591f3726582d28860252e6cf1
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Tue Jul 27 14:04:03 2021 -0400
+
+    LP1903357 Angstcat Hold Activate Date Validation
+    
+    Prevent setting activation dates in the past when placing holds in the
+    Angular Staff Catalog.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+
+14     4       Open-ILS/src/eg2/src/app/staff/catalog/hold/hold.component.html
+17     2       Open-ILS/src/eg2/src/app/staff/catalog/hold/hold.component.ts
+
+commit b67c3541661f911b68dd4feb278bb41bbd845488
+Author: Adam Bowling <abowling@emeralddata.net>
+Date:   Fri Jul 23 16:00:35 2021 -0400
+
+    LP1937875: Remove GitHub reference from package.js
+    
+    Removes the call to GitHub (required under legacy circumstances),
+    since it can cause some machines lacking SSH keys for GitHub to
+    fail when "npm install" is run for the AngularJS web client.
+    
+    Signed-off-by: Adam Bowling <abowling@emeralddata.net>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+1      1       Open-ILS/web/js/ui/default/staff/package.json
+
+commit 1f6132630c98c4a90a371de474f268b4239c553d
+Author: Dan Briem <dbriem@wlsmail.org>
+Date:   Wed Mar 3 16:06:50 2021 -0500
+
+    LP#1917338 Angular: Holdings view column picker missing OPAC visible?
+    
+    Adds OPAC visible column to holdings grid in the Angular catalog.
+    
+    Signed-off-by: Dan Briem <dbriem@wlsmail.org>
+    Signed-off-by: Jennifer Pringle <jennifer.pringle@bc.libraries.coop>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+3      0       Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.html
+
+commit ea96118b262f71e68bb4b48d3eeb86d6bcfe2196
+Author: Jason Boyer <JBoyer@equinoxOLI.org>
+Date:   Fri Aug 20 14:00:25 2021 -0400
+
+    LP1908614: Show the Age Hold Protection name in the staff catalog
+    
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+6      1       Open-ILS/src/eg2/src/app/staff/catalog/record/copies.component.html
+7      1       Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm
+
+commit 025733c6be1bb4f667d9f43c83b0509c76850346
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date:   Wed Jul 21 15:43:05 2021 -0400
+
+    LP1786971 z39.50 incorporate Bill's changes
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Mary Llewellyn <mllewell@biblio.org>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+1      11      Open-ILS/web/js/ui/default/staff/cat/z3950/app.js
+
+commit 2646e53dafd55d0570253b2356761fb668d8f676
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Tue Jul 20 10:59:42 2021 -0400
+
+    LP1786971 TCN fetching and maintenance tweaks
+    
+    Avoid storing the TCN value in local storage since it's not needed
+    outside the Z app.
+    
+    Wait for async TCN lookups to complete before using the value.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Mary Llewellyn <mllewell@biblio.org>
+
+44     11      Open-ILS/web/js/ui/default/staff/cat/z3950/app.js
+
+commit d1dc6e9576ed70a95f20f4718da022bf84229e27
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date:   Thu Jul 15 16:27:21 2021 -0400
+
+    LP1786971 z39.50 add TCN to overlay popups as well
+    
+    Displays TCN on the Overlay modal and on the confirmation popup
+    that displays if the live overlay target has changed.
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Mary Llewellyn <mllewell@biblio.org>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+1      1       Open-ILS/src/templates/staff/cat/share/z3950_strings.tt2
+4      1       Open-ILS/src/templates/staff/cat/z3950/t_overlay.tt2
+9      1       Open-ILS/web/js/ui/default/staff/cat/z3950/app.js
+
+commit 95eaf0c2f667e9e5ee7c5fe977a86eb9dcf7e8c2
+Author: Jessica Woolford <jwoolford@biblio.org>
+Date:   Wed Mar 17 16:31:30 2021 -0400
+
+    LP1786971 z39.50 using TCN instead of ID
+    
+    This patch switches the target to overlays to the bib ID instead of the
+    TCN. This allows overlays to work for sites where TCN and bib ID are not
+    the same.
+    
+    Signed-off-by: Jessica Woolford <jwoolford@biblio.org>
+    
+    LP1786971 Z39.50 TCN-Bib ID display and wording
+    
+    This adds the TCN to the Z39.50 interface when a record is
+    marked for overlay and the TCN does not match the Bib ID.
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Mary Llewellyn <mllewell@biblio.org>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+5      2       Open-ILS/src/templates/staff/cat/z3950/t_list.tt2
+1      1       Open-ILS/src/templates/staff/cat/z3950/t_overlay.tt2
+22     4       Open-ILS/web/js/ui/default/staff/cat/z3950/app.js
+
+commit 72523b648d075ec9e1976c9ac783d6463e2e4602
+Author: Tiffany Little <tlittle@georgialibraries.org>
+Date:   Fri Jun 18 16:00:32 2021 -0400
+
+    LP1906826: Changes column header for purchase order in line item search
+    
+    Signed-off-by: Tiffany Little <tlittle@georgialibraries.org>
+    Signed-off-by: Ruth Frasur <rfrasur@library.in.gov>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+1      1       Open-ILS/src/eg2/src/app/staff/acq/search/lineitem-results.component.html
+
+commit 1d57e88980914deaf4a45f404d70648e238efd3e
+Author: Josh Stompro <stompro@stompro.org>
+Date:   Tue Mar 10 11:38:48 2020 -0500
+
+    LP1866667 - Clear current_copy when pickup_lib is changed and waiting for capture
+    
+    When a user changes the pickup lib and a retarget is triggered
+    the currently targeted copy gets excluded if there are other
+    available copies.
+    
+    This can cause delays and confusion since the new copy may
+    not be the best choice.
+    
+    This change clears the current_copy before the retarget in that
+    situation.
+    
+    Testing setup.
+    
+    Find/create a title with items that looks like:
+    
+    System X ->
+       Branch A -> Holdable item
+       Branch B ->
+    System Y
+       Branch C -> Holdable item
+       Branch D -> Holdable item
+    
+    Place a hold with a pickup location of Branch B, which should target
+    the closest item at Branch A
+    
+    Then change the pickup location of your hold to Branch A.
+    
+    The retarget that happens, should switch the targeted copy to Branch C or D.
+    
+    After Change Applied:
+    
+    The hold should remain targeted to Branch A after pickup lib is changed
+    to Branch A.
+    
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+    Signed-off-by: Dawn Dale <ddale@georgialibraries.org>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+6      0       Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
+
+commit 6b5686937ca7fd1c2f15a8248dcfca1ef065f148
+Author: Josh Stompro <stompro@stompro.org>
+Date:   Wed Jun 23 14:21:46 2021 -0500
+
+    LP#1821804 - Cloned patron address set to pending
+    
+    When cloning a patron record, the address gets set to pending and cannot
+    be fixed until the new patron record is saved.
+    
+    The address creation steps for cloned records are a little different if
+    the library setting "Patron Registration: Cloned patrons get address copy" is
+    set, so test with that enabled and disabled.  In our system we have that setting
+    enabled.
+    
+    The issue is that the values come in as a string like 't' or 'f' and need to be converted
+    to a boolean value.  That is done in the normal address loading code, but wasn't in
+    the cloning code.
+    
+    I also added in a fix for the city limits flag not getting cloned which seems
+    like an related issue.  This seems like it was just cosmetic, the city limits
+    does get set when the record is saved, based on the parent records address.
+    
+    Testing Plan:
+    
+    Before change:
+    
+    1. Enable "Cloned patrons get address copy" setting.
+    2. Open up a patron record that has a valid non pending address with city limits checked.
+    3. Save and Clone
+    4. Notice that the address in the new cloned record says pending.
+    5. Notice that the city limits checkbox isn't checked.
+    
+    After change applied:
+    
+    1. Enable "Cloned patrons get address copy" setting.
+    2. Open up a patron record that has a valid non pending address with city limits checked.
+    3. Save and Clone
+    4. Notice that the address in the new cloned record doesn't say pending.
+    5. Notice that the city limits checkbox is checked.
+    
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+    Signed-off-by: Ruth Frasur <rfrasur@library.in.gov>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+2      0       Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+
+commit b9b04bc458c0974ae453c31ca9314359a56c8863
+Author: Jason Etheridge <jason@EquinoxInitiative.org>
+Date:   Mon Jan 13 12:38:53 2020 -0500
+
+    lp1859502 fix A/T ApplyPatronPenalty reactor
+    
+    To test this, you could create the following A/T definition:
+    
+        Owning Library: CONS
+        Name: test lp1859502
+        Hook: penalty.PATRON_EXCEEDS_FINES
+        Enabled: True
+        Processing Delay: 00:00:00
+        Processing Group Context Field: usr
+        Reactor: ApplyPatronPenalty
+        Validator: NOOP_TRUE
+        Max Event Validity Delay: 1 day
+        Template: test message
+    
+    with environment:
+    
+        Field Path: usr
+        Label: user
+    
+        Field Path: usr.home_ou
+        Label: context_org
+    
+    with event params:
+    
+        Parameter Name: standing_penalty
+        Parameter Value: ALERT_NOTE
+    
+    Then bill a test patron for $100 and run something like:
+    
+    /openils/bin/action_trigger_runner.pl --osrf-config /openils/conf/opensrf_core.xml --run-pending
+    
+    Without the patch, you'll get something like this in osrfsys.log:
+    
+    ApplyPatronPenalty: missing parameters
+    
+    And no ALERT_NOTE penalty.  With the patch you should see a "test message" alert note
+    when reloading the patron.
+    
+    Signed-off-by: Jason Etheridge <jason@EquinoxInitiative.org>
+    Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+
+3      3       Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/ApplyPatronPenalty.pm
+
+commit 0a2651a60598153fab6461fcf8dba1feaaf0d1c3
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date:   Thu Aug 20 18:37:28 2020 -0400
+
+    LP1752356 Offline Block List Download Date
+    
+    Amended previous commits by adding the download block list date to
+    the other reasons why an account could show up on the block list.
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Mike Risher <mrisher@catalyte.io>
+    Signed-off-by: Jason Boyer <jboyer@equinoxOLI.org>
+
+4      4       Open-ILS/src/templates/staff/offline-interface.tt2
+
+commit d4924cb6c5bbe83e50c97e4b5429738bb70339b7
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Wed Jul 3 14:34:39 2019 -0400
+
+    LP1752356 Offline expired patrons download date additions
+    
+    Modify wording to clarify the date displayed is that of the block list
+    download and not necessarily the date the patron was flagged expired.
+    
+    Avoid console errors when the file download date is not known -- edge
+    case where the code is updated but the block list was not updated in the
+    meantime.
+    
+    Clean up some debug logging.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Jason Boyer <jboyer@equinoxOLI.org>
+
+1      1       Open-ILS/src/templates/staff/offline-interface.tt2
+8      5       Open-ILS/web/js/ui/default/staff/offline.js
+
+commit 1ca63d75928c98e30f8b516d4ee21191ea57796b
+Author: Mike Risher <mrisher@catalyte.io>
+Date:   Mon Jul 1 15:56:17 2019 +0000
+
+    LP1752356 Offline block list date addition
+    
+    In offline mode when checking out for an expired patron, we changed
+    the error message so that the last date the blocklist was downloaded
+    is displayed along with the patron barcode
+    
+    Signed-off-by: Mike Risher <mrisher@catalyte.io>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Jason Boyer <jboyer@equinoxOLI.org>
+
+2      2       Open-ILS/src/templates/staff/offline-interface.tt2
+37     18      Open-ILS/web/js/ui/default/staff/offline.js
+21     0       Open-ILS/web/js/ui/default/staff/services/lovefield.js
+
+commit 3b3548a74ba3092119c10b16b469bf3e0a01e6d1
+Author: Mike Rylander <mrylander@gmail.com>
+Date:   Tue Apr 9 11:30:15 2019 -0400
+
+    LP#1823983: repeat_delay check removes event definition id filter
+    
+    This bug has existed since the repeat_delay feature was added, but likely only
+    rarely was triggered because most events don't have a repeat_delay, and those
+    that do don't interact with the same target.  However, as more repeatable event
+    definitions are created, inappropriate interaction becomes more likely.
+    
+    In this commit we avoid overwriting the whole join condition clause, which
+    already contains an event definition id filter and needs to retain it.
+    
+    Included is an unrelated change that uses the new-ish form of
+    interval_to_seconds that avoids DST boundary shifting issues by passing a
+    context DateTime object as the second parameter.
+    
+    Signed-off-by: Mike Rylander <mrylander@gmail.com>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+3      3       Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger.pm
+
+commit 98157770f0694d18aed9342367f4375dde599d3b
+Author: Garry Collum <gcollum@gmail.com>
+Date:   Wed Apr 28 15:26:39 2021 -0400
+
+    LP1809157 SMS Carriers display not in alphabetical order
+    
+    This alphabetizes the carrier display when editing the sms carrier in an existing hold.
+    
+    It also adds the region to the name to make the interface consistent with other interfaces.
+    
+    To Test:
+    
+    1. Enable SMS options in the Library Settings.
+    2. Place a hold for a patron.
+    3. Use the Edit Notifications Settings.  Enter an SMS number, if needed.
+    4. Drop-down the Carrier list - the list is not in alphabetical order.
+    5. Apply the patch and repeat 3-4.
+    
+    Signed-off-by: Garry Collum <gcollum@gmail.com>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/templates/staff/circ/share/t_hold_notification_prefs.tt2
+
+commit 60fb3a9396528abde3d35628a5ae92040d461394
+Author: Jeff Davis <jdavis@sitka.bclibraries.ca>
+Date:   Mon Aug 23 11:24:05 2021 -0700
+
+    LP#1932051: serialize adding items to bucket from Item Status
+    
+    Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
+    Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+
+7      8       Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit 34798009019a6f2fdca836ef31e32012fc889bad
+Author: Chris Sharp <csharp@georgialibraries.org>
+Date:   Tue Jun 15 11:59:48 2021 -0400
+
+    LP#1932051: Batch calls for add items to bucket
+    
+    Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+    Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
+
+8      7       Open-ILS/web/js/ui/default/staff/cat/bucket/copy/app.js
+
+commit 3ac758e75af074f965a15fe8a0cfcc1270fc05d5
+Author: Mike Rylander <mrylander@gmail.com>
+Date:   Fri Sep 3 10:35:00 2021 -0400
+
+    Revert "lp1908439 Auto-override enhancment"
+    
+    This reverts commit 96e5f9d3c2a739e22485e07d9738ad52f24e60c9.
+    
+    This is a feature rather than a bug fix, and should not have gone into
+    3.7.
+
+0      1       Open-ILS/src/templates/staff/base_js.tt2
+12     22      Open-ILS/src/templates/staff/circ/share/t_event_override_dialog.tt2
+2      6       Open-ILS/web/js/ui/default/staff/circ/patron/app.js
+2      26      Open-ILS/web/js/ui/default/staff/circ/patron/items_out.js
+91     123     Open-ILS/web/js/ui/default/staff/circ/services/circ.js
+2      18      Open-ILS/web/js/ui/default/staff/services/op_change.js
+0      3       docs/RELEASE_NOTES_NEXT/Circulation/override-dialogs.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/override-dialogs.adoc
+
+commit 00fe0003f6877f0038bd515795800efd61637b71
+Author: Dan Briem <dbriem@wlsmail.org>
+Date:   Thu Aug 26 14:52:51 2021 -0400
+
+    LP#1743611 Circ History by Year Info
+    
+    Adds an info button next to Total Circs in the AngularJS staff
+    client Item Status screen. Clicking the button displays a
+    popover list of total circs by year.
+    
+    Signed-off-by: Dan Briem <dbriem@wlsmail.org>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: John Amundson <jamundson@cwmars.org>
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+17     1       Open-ILS/src/templates/staff/cat/item/t_summary_pane.tt2
+4      1       Open-ILS/src/templates/staff/css/style.css.tt2
+25     27      Open-ILS/web/js/ui/default/staff/cat/item/app.js
+
+commit bb41835d6b558d60f41f0a208b86e9e529456107
+Author: Jason Boyer <JBoyer@equinoxOLI.org>
+Date:   Fri Aug 27 15:56:10 2021 -0400
+
+    LP827356: Stamp Ugrade Script
+    
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{xxxx.schema.protect_special_ids.sql => 1283.schema.protect_special_ids.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{xxxx.schema.protect_special_ids.sql => 1283.schema.protect_special_ids.sql} (99%)
+
+commit cb6dbed95bdfb653432de04071cd30a44629cb51
+Author: Rogan Hamby <rogan.hamby@gmail.com>
+Date:   Thu Mar 18 13:11:00 2021 +0000
+
+    lp827356 new rules protect bre -1, acn -1 and acl 1 as well as marc editing buttons disabled
+    
+    Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+    Signed-off-by: Elaine Hardy <ehardy@georgialibraries.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+3      3       Open-ILS/src/eg2/src/app/staff/share/marc-edit/editor.component.html
+2      0       Open-ILS/src/sql/Pg/040.schema.asset.sql
+4      0       Open-ILS/src/sql/Pg/800.fkeys.sql
+5      0       Open-ILS/src/sql/Pg/999.functions.global.sql
+291    0       Open-ILS/src/sql/Pg/upgrade/xxxx.schema.protect_special_ids.sql
+6      0       docs/RELEASE_NOTES_NEXT/Cataloging/bre_negative_one.adoc
+1      0       docs/RELEASE_NOTES_NEXT/miscellaneous.adoc
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.protect_special_ids.sql
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/bre_negative_one.adoc
+
+commit 4bc0f3f0e37ecfffdddb3461071b136f79744a41
+Author: Jason Boyer <JBoyer@equinoxOLI.org>
+Date:   Fri Aug 27 14:45:54 2021 -0400
+
+    LP1931162: Stamp Upgrade Script
+    
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.function.did_you_mean_optimization.sql => 1282.function.did_you_mean_optimization.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.function.did_you_mean_optimization.sql => 1282.function.did_you_mean_optimization.sql} (99%)
+
+commit f76edc5628ffbe1884e9249376f4d5905b2b1322
+Author: Mike Rylander <mrylander@gmail.com>
+Date:   Mon Jun 7 15:57:32 2021 -0400
+
+    LP#1931162: DYM needs some situational optimization
+    
+    For some data sets and some queries the Did You Mean search suggestion
+    logic can be much too slow. This is mainly in cases where a "misspelled"
+    word of sufficient length greater than the symspell prefix length is
+    checked against many short prefixes that have many long suggestions
+    attached to them.
+    
+    This commit optimizes for that case in particular by testing the length
+    of suggestions and prefix keys against the user input to avoid
+    unnecessary tests.  Futher, it captures the edit distance of suggestions
+    that pass that test in-line, avoiding expensive retesting, and caches
+    the short-cutoff edit distance when in low-verbosity mode to avoid
+    future different-but-not-too-different suggestions coming from the same
+    prefix key.
+    
+    It additionally provides a general optimization by batching the capture
+    of suggest counts to avoid per-suggestion secondary lookups, and a
+    micro-optimization of ordering suggestions by length at distance cache
+    time.
+    
+    Signed-off-by: Mike Rylander <mrylander@gmail.com>
+    Signed-off-by: Shula Link <slink@gchrl.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+
+107    98      Open-ILS/src/sql/Pg/300.schema.staged_search.sql
+268    0       Open-ILS/src/sql/Pg/upgrade/XXXX.function.did_you_mean_optimization.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.function.did_you_mean_optimization.sql
+
+commit 96e5f9d3c2a739e22485e07d9738ad52f24e60c9
+Author: Jason Etheridge <jason@EquinoxInitiative.org>
+Date:   Tue Feb 9 09:42:06 2021 -0500
+
+    lp1908439 Auto-override enhancment
+    
+    This reworks the override action dialogs in the patron display for Check
+    Out and Items Out, and in the Circulation -> Renew Items interface.  It
+    exposes the auto-override behavior as checkboxes giving staff more fine
+    grained control over which events are auto-forced or skipped upon
+    subsequent encounters.  It also changes the Cancel action for batch
+    renewals to abort the remaining renewals in the batch, and makes it so
+    that new authorization credentials provided during such a batch will be
+    treated as an operator change for the entire batch.  We also fix an
+    existing bug where events marked as already encountered for
+    auto-override could leak into other patron contexts via Patron Search.
+    
+    Signed-off-by: Jason Etheridge <jason@EquinoxInitiative.org>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+1      0       Open-ILS/src/templates/staff/base_js.tt2
+22     12      Open-ILS/src/templates/staff/circ/share/t_event_override_dialog.tt2
+6      2       Open-ILS/web/js/ui/default/staff/circ/patron/app.js
+26     2       Open-ILS/web/js/ui/default/staff/circ/patron/items_out.js
+123    91      Open-ILS/web/js/ui/default/staff/circ/services/circ.js
+18     2       Open-ILS/web/js/ui/default/staff/services/op_change.js
+3      0       docs/RELEASE_NOTES_NEXT/Circulation/override-dialogs.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/override-dialogs.adoc
+
+commit ed7bdb048484567d85dc63754fc7ae2ed9929cfe
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Fri Jul 23 10:15:13 2021 -0700
+
+    LP1906058: Course-term map interface only allow reasonable mappings
+    
+    Different libraries will use different sets of course terms.  In an
+    academic library context, for example, a consortium may include
+    libraries with very different start and end dates to their terms/semesters,
+    different numbers of terms/year, etc.
+    
+    This commit changes the interface to only allow users to associate
+    a course with a term from the same library or one of its ancestors.
+    
+    To test:
+    1. Create many courses and course terms and many different OUs.
+    2. On the course list, click "Terms taught".  Associate some courses
+    and course terms.  Make sure that you aren't able to associate your
+    course with any course terms that would not be reasonable for the
+    course's library.
+    3. Edit a course, and choose the Course terms tab.  Continue to associate
+    courses and terms, and make sure the mappings are reasonable.
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Beth Willis <willis@noblenet.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      4       Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-page.component.html
+1      26      Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-page.component.ts
+3      1       Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-reserves.module.ts
+24     0       Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-term-map-grid.component.html
+98     0       Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-term-map-grid.component.ts
+9      2       Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-term-map.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-term-map-grid.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-term-map-grid.component.ts
+
+commit eacd9cf7d455ab74453f1d7176e9a8280aae3b1f
+Author: Michele Morgan <mmorgan@noblenet.org>
+Date:   Tue Mar 30 20:16:59 2021 +0000
+
+    LP#1917809 Create Course: Owning Library Default
+    
+    Changes the default for the owning library in the Create Course modal to the logged
+    in user's workstation org unit instead of the consortium.
+    
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Christine Burns <christine.burns@bc.libraries.coop>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+3      1       Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-list.component.ts
+
+commit 8451b54011876c024a9acc5e1bdd4031a11b2463
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Sun Aug 15 11:27:41 2021 -0400
+
+    LP#1905068: (follow-up) never initialize an OU ID to 1
+    
+    This change has no effect on behavior, as defaultOuId's
+    initialization value always gets replaced with the user's
+    WS OU or the org root when the contructor is run, but
+    avoids any implication during code-reading that the top
+    of the OU tree can be assumed to have ID 1.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-list.component.ts
+
+commit 25c6dc159740adc574dfa33892852b58e73871b9
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Wed Jun 23 16:59:51 2021 -0700
+
+    LP1905068: Add org-family-select to course list
+    
+    To test:
+    
+    1) Apply this patch
+    2) Admin > Local admin > Course reserves list
+    3) Check that the list defaults to courses available
+    at your workstation org unit
+    4) Check that, when you select ancestors, descendants,
+    or a different org unit, the course list updates
+    accordingly
+    5) Check that the list only displays org units for
+    which you have the MANAGE_RESERVES permission
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+12     0       Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-list.component.html
+14     2       Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-list.component.ts
+
+commit 5286e36bd881e6977564d02d858f42d5a2becea4
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Fri Apr 9 16:31:57 2021 -0400
+
+    LP1923076: Add Perl live test
+    
+    Add lp1923076-test-perl-scalar-return.t to the Perl live tests to test
+    a couple of back end calls affected by the changes in this branch.
+    These backend calls are those that are easily testable with Concerto
+    data.
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+103    0       Open-ILS/src/perlmods/live_t/lp1923076-test-perl-scalar-return.t
+ create mode 100755 Open-ILS/src/perlmods/live_t/lp1923076-test-perl-scalar-return.t
+
+commit fbda59d29fcd0db124357cbd1e4a72ea1f4d33ab
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Fri Apr 9 13:42:42 2021 -0400
+
+    LP1923976: Remove some dead code
+    
+    Remove a block of commented code that was turned up while working on
+    this issue.  This is in its own commit to make it easier to revert, if
+    necessary.
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+0      7       Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/CDBI.pm
+
+commit 4c19caf6974d8ad176e0f3b9a189700bd78366a9
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Fri Apr 9 13:41:40 2021 -0400
+
+    LP1923076: Add cast to int in more places
+    
+    Add cast to int of scalar used on arrays in more places where it seems
+    necessary.
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+1      1       Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/Container.pm
+1      1       Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
+2      2       Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm
+1      1       Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Z3950.pm
+2      2       Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/storage.pm
+1      1       Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+1      1       Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/container.pm
+
+commit ee9adb9a1ffda58e3f3b7481b835729010a818c8
+Author: Jeff Davis <jdavis@sitka.bclibraries.ca>
+Date:   Wed Apr 7 19:41:49 2021 -0700
+
+    LP#1923076: ensure length of empty array is treated as a number when retrieving hold counts
+    
+    Thanks to Jason Stephenson for suggesting this solution.
+    
+    Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+3      3       Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm
+
+commit a96319c5275b33dee4693513ab9cda0d51edf923
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Fri Aug 13 08:34:03 2021 -0700
+
+    LP1935693: Improve spacing on the OPAC course materials table
+    
+    Signed-off-by; Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Beth Willis <willis@noblenet.org>
+    Signed-off-by: Christine Burns <christine.burns@bc.libraries.coop>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+8      0       Open-ILS/src/templates-bootstrap/opac/css/style.css.tt2
+1      1       Open-ILS/src/templates/opac/parts/course/body.tt2
+
+commit 79fd66630eae4a17688c0241fc5695a9ecc422aa
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Mon Jul 12 20:56:01 2021 -0700
+
+    LP1935693: Add circulation modifier to course page
+    
+    Also makes some strings extractable for translation that
+    were previously missed.
+    
+    To test:
+    1) Enable the course materials module
+    2) Add some courses
+    3) Add some materials to those courses, using a mix of
+    circulation modifiers
+    4) In the OPAC, use the Course Search to search for
+    your courses
+    5) Click on the course you created
+    6) Note that physical items associated with the course
+    display their circulation modifiers in the circulation
+    modifier column.
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Beth Willis <willis@noblenet.org>
+    Signed-off-by: Christine Burns <christine.burns@bc.libraries.coop>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/perlmods/lib/OpenILS/Application/Courses.pm
+13     7       Open-ILS/src/templates/opac/parts/course/body.tt2
+
+commit dc3666e7b25f6d6cbb97a6d59f2bae505c4d5144
+Author: Josh Stompro <stompro@stompro.org>
+Date:   Mon Aug 2 08:30:06 2021 -0500
+
+    LP#1938450 - missing pieces slip printer context set to receipt
+    
+    Set the missing pieces slip to receipt context so it gets printed
+    to the receipt printer.
+    
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit fef16a545e6455c1877e04defa729f9bf1a2dc2b
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Thu Jul 29 16:02:44 2021 -0400
+
+    LP1910452 Remove staff catalog read-only OPAC Patron View
+    
+    This is superseded by a new Patron View button.
+    
+    Also removes the underlying component, since it's not longer used
+    anywhere.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Jason Etheridge <jason@EquinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+0      2       Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts
+0      10      Open-ILS/src/eg2/src/app/staff/catalog/record/opac.component.html
+0      47      Open-ILS/src/eg2/src/app/staff/catalog/record/opac.component.ts
+0      6       Open-ILS/src/eg2/src/app/staff/catalog/record/record.component.html
+ delete mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/opac.component.html
+ delete mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/opac.component.ts
+
+commit 074a98c8e889d86d1bb209f3a56cbf72fdc36703
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Wed Jul 28 10:17:48 2021 -0400
+
+    LP1910452 Staff catalog Patron View button
+    
+    Adds a Patron View button to the Angular staff catalog record detail
+    page which opens the catalog in a new browser tab.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Jason Etheridge <jason@EquinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+4      0       Open-ILS/src/eg2/src/app/staff/catalog/record/actions.component.html
+
+commit 13cb905cc15dbf8413ad142b72c069462e6f47f6
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Tue Jul 13 10:11:29 2021 -0400
+
+    LP#1912852: add jump-on-one-hit support to Angular staff catalog
+    
+    This patch add support for the opac.staff.jump_to_details_on_single_hit
+    library setting to the Angular staff catalog.
+    
+    To test
+    -------
+    [1] Apply the patch.
+    [2] Ensure that the opac.staff.jump_to_details_on_single_hit setting
+        is off for your workstation.
+    [3] Perform searches using the Angular staff catalog. Verifying that
+        searches that return any number of results display them on the
+        results page.
+    [4] Set the library setting to true and reload the staff catalog.
+    [5] Perform keyword, numeric, and MARC searches using terms that
+        result in a single-record result set. Verify that the interface
+        redirects to the single-record page for that hit.
+    [6] Perform searches that would return zero results. Verify that
+        the results page indicates zero hits fuond.
+    [7] Perform searches that would return more than one result. Verify
+        that the results are displayed on the results page.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+    Signed-off-by: Jason Etheridge <jason@EquinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+4      0       Open-ILS/src/eg2/src/app/staff/catalog/catalog.service.ts
+4      1       Open-ILS/src/eg2/src/app/staff/catalog/resolver.service.ts
+18     3       Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.ts
+
+commit 5e9974b4d594852878f920141356da254846f3b1
+Author: Josh Stompro <stompro@stompro.org>
+Date:   Thu Mar 4 19:09:44 2021 -0600
+
+    LP#1917396 - Staff Curbside Scheduling UTC Issues
+    
+    When a staff person tries to schedule curbside appointments
+    after their UTC equivalent time moves to the next day, the
+    timeslots for the next day are shown, and appointments get
+    made for the next day.
+    
+    For example, when CST is the local timezone (UTC-6), after 6pm
+    appointments for the current day are scheduled for the next day.
+    Appointments for the next day get scheduled for the day after.
+    
+    This happens because toISOString is used to grab the current date,
+    but toISOString always returns UTC time.  The date widget will show
+    the correct date, but the time slots will actually be for the next
+    day.  This is more noticeable if days have different schedules.
+    
+    Another clue is that the time slot selector will show all timeslots for
+    the day, not just the ones that are upcoming.
+    
+    Testing Plan:
+    
+    1. Enable curbside for test location, and set org unit hours to
+       be at least through 8pm for open hours.
+    
+    2. Wait until after 4PM (Pacific), 6pm CST, 7PM EST, or
+       change your computer clock.
+    
+    3. Try to schedule an appointment for the current day.
+    
+    4. The appointment should get scheduled for the next day.
+    
+    5. Apply the fix.
+    
+    6. Try to schedule another appointment and see that the correct
+       date gets selected.
+    
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+6      3       Open-ILS/web/js/ui/default/staff/circ/curbside/directives/schedule_pickup.js
+
+commit c2f3a0ab095adf6c820ba0a7f79fcb68b62e0ad0
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Thu Aug 12 18:01:07 2021 -0400
+
+    LP#1802682: stamp DB update
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.data.cnal_ous_type.sql => 1279.data.cnal_ous_type.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.data.cnal_ous_type.sql => 1279.data.cnal_ous_type.sql} (68%)
+
+commit d8855812d8b89257990a232b35c43d575966fa22
+Author: Jason Boyer <JBoyer@library.in.gov>
+Date:   Sat Nov 10 17:53:16 2018 -0500
+
+    LP1802682: Use Default Net Access Level OUS
+    
+    This branch does two things: makes use of the OUS
+    that determines the default Net Access Level, and
+    also changes the type of the coust entry to make
+    using it more user friendly.
+    
+    Signed-off-by: Jason Boyer <JBoyer@library.in.gov>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/950.data.seed-values.sql
+8      0       Open-ILS/src/sql/Pg/upgrade/XXXX.data.cnal_ous_type.sql
+1      0       Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.cnal_ous_type.sql
+
+commit fe0b7772e4658a548ce35feccca63d2e9b6ddb36
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Tue Mar 16 17:27:05 2021 -0400
+
+    LP1916754 Angular Grid row index shows > 99
+    
+    The row number column along the left of each grid now fully shows
+    3-digit numbers (100 -> 999) without truncating the value.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html
+7      2       Open-ILS/src/eg2/src/app/share/grid/grid.component.css
+
+commit 473c278514efc710779c327fbc27b0967f79cde3
+Author: Dan Briem <dbriem@wlsmail.org>
+Date:   Fri Jul 30 22:34:26 2021 -0400
+
+    LP#1933381 Notify by SMS requires SMS fields when placing holds
+    
+    When placing a hold, if the notification method is set to SMS
+    and no carrier is selected, the hold fails with a generic error.
+    
+    This disables the Place Hold(s) button if notify by SMS is
+    selected and the SMS phone number or carrier fields are not set.
+    
+    Signed-off-by: Dan Briem <dbriem@wlsmail.org>
+    Signed-off-by: Erica Rohlfs <erica.rohlfs@equinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+4      3       Open-ILS/src/eg2/src/app/staff/catalog/hold/hold.component.html
+12     0       Open-ILS/src/eg2/src/app/staff/catalog/hold/hold.component.ts
+
+commit 87b63a169938982ea1b2df845c1c27bd80be073a
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date:   Thu Jun 24 10:28:41 2021 -0400
+
+    LP1909584 Title for Shared Lists in Bootstrap OPAC
+    
+    This displays the title and description for shared lists
+    when viewed in the Bootstrap OPAC.
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Ruth Frasur <rfrasur@library.in.gov>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+10     0       Open-ILS/src/templates-bootstrap/opac/parts/result/table.tt2
+
+commit d64655b02d042816f773f6b71d3452cfbc1cc5ae
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date:   Wed Jun 30 15:13:36 2021 -0400
+
+    LP1901028 Update seed data for checkout print template
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+2      1       Open-ILS/web/js/ui/default/staff/admin/workstation/app.js
+
+commit 7fe9e51b8c1e3d49f56f77653ec207c72e10f3b1
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date:   Thu Oct 22 18:05:37 2020 -0400
+
+    LP1901028 Print Template for Checkout Missing Fields
+    
+    The fields are actually available, but the hints in the template
+    were incorrect. This fixes the hints for call number, owning library
+    name, owning library short name, and circulation modifier.
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+4      4       Open-ILS/src/templates/staff/share/print_templates/t_checkout.tt2
+
+commit 6fd9a03dda558c5dddf646215f2aff6e50bb651a
+Author: Garry Collum <gcollum@gmail.com>
+Date:   Mon Mar 22 15:09:16 2021 -0400
+
+    LP1920273: improve Bootstrap self registration display
+    
+    This patch makes the form in the self-registration screen in the Bootstrap
+    opac a little responsive on smaller devices.
+    
+    To test.
+    
+    1. Turn on self-registration in the library settings.
+    2. Go to the self-registration screen and make the screen as small as possible.
+    3. Apply the patch.
+    4. Notice that the form labels and input boxes are now more aesthetic.
+    5. Create some self-registration requests to make sure the form captures the data.
+    
+    Signed-off-by: Garry Collum <gcollum@gmail.com>
+    Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+56     52      Open-ILS/src/templates-bootstrap/opac/register.tt2
+
+commit 069f687f43b6ec32b766356f2e81c0898abaf282
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Thu Aug 12 17:20:43 2021 -0400
+
+    LP#1926971: (follow-up) update base holds for patron template
+    
+    ... to add more information about what is available to the
+    template.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+5      1       Open-ILS/src/templates/staff/share/print_templates/t_holds_for_patron.tt2
+
+commit 0eab2ecd69ea75653f0040869b1cc9c1ce2629d9
+Author: Jason Etheridge <jason@EquinoxInitiative.org>
+Date:   Mon May 3 11:13:08 2021 -0400
+
+    lp1926971 augment holds for patrons print template
+    
+    with patron data, to support what the template editor preview is allowing
+    
+    Signed-off-by: Jason Etheridge <jason@EquinoxInitiative.org>
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/web/js/ui/default/staff/circ/patron/holds.js
+
+commit d218d4b6229919d2134a958ecee92f679d044f71
+Author: Jeff Davis <jdavis@sitka.bclibraries.ca>
+Date:   Mon May 31 12:39:01 2021 -0700
+
+    LP#1930308: avoid duplicate circ modifier column
+    
+    Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+0      1       Open-ILS/src/templates/opac/parts/record/copy_table.tt2
+
+commit 7c54b131037d8159ce1eaea50882d293988af6dd
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date:   Mon Jun 21 12:11:48 2021 -0400
+
+    LP1933125 Bootstrap OPAC Hold Count Alignment
+    
+    This groups and styles the hold count with the available
+    copy count.
+    
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Ruth Frasur <rfrasur@library.in.gov>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+18     0       Open-ILS/src/templates-bootstrap/opac/parts/record/copy_counts.tt2
+0      22      Open-ILS/src/templates-bootstrap/opac/parts/record/summary.tt2
+
+commit 095997028bcbc39b2159894997ede497309416fd
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Tue Aug 3 17:11:42 2021 -0400
+
+    LP1932358 Serialize patron bucket entry batch deletion
+    
+    Avoid large sets of parallel patron bucket item delete calls by
+    serialzing the calls so they go one at a time.
+    
+    Adds a progress meter to the display during delete.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+14     0       Open-ILS/src/templates/staff/circ/patron/bucket/t_view.tt2
+17     4       Open-ILS/web/js/ui/default/staff/circ/patron/bucket/app.js
+
+commit 70ee487432624f7e5f22c0fbb3b8d8eb8183e0a7
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Tue May 25 20:24:12 2021 -0700
+
+    LP1919497: Make the login box translateable
+    
+    Thanks to Eva Cerninakova for reporting and identifying the solution!
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+2      2       Open-ILS/src/templates-bootstrap/opac/parts/login/login_modal.tt2
+
+commit e6dac70d8f404611e82727482f362dff350ac06c
+Author: Garry Collum <gcollum@gmail.com>
+Date:   Thu May 27 13:49:00 2021 -0400
+
+    LP1929839 Load Shared Bucket text error
+    
+    Changes the title of the Load Shared Bucket pop-up box from "Load Shared
+    Bucket Bucket by ID" to "Load Shared Bucket by ID".  I decided not to
+    change it to "Load Shared Bucket by Bucket ID" since "Bucket ID" is
+    displayed next to the input field.
+    
+    This affects all 3 types of buckets: item, record and user.
+    
+    Signed-off-by: Garry Collum <gcollum@gmail.com>
+    Signed-off-by: Tiffany Little <tlittle@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/templates/staff/cat/bucket/record/t_load_shared.tt2
+1      1       Open-ILS/src/templates/staff/cat/bucket/share/t_load_shared.tt2
+1      1       Open-ILS/src/templates/staff/circ/patron/bucket/t_load_shared.tt2
+
+commit 3d63c59a97f6908b78a3412615ffac1a99579a14
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Tue Aug 3 16:58:29 2021 -0400
+
+    LP1934184 Vandelay Delete Queue action repair
+    
+    Fixes the Queue Details page Delete Queue link.  Before it did nothing,
+    now it prompts the user to confirm deletion followed by deleting the
+    queue (when confirmed).
+    
+    To test, go to Cataloging => MARC Batch Import/Export => Inspect Queue
+    => Double-click a queue => Click Delete Queue (under Queue Actions) and
+    confirm that the confirmation dialog appears and deletion works.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Christine Morgan <cmorgan@noblenet.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.html
+
+commit c754f26b737c99f4698a81099a29232eacb0fc81
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Sun Jul 11 15:49:19 2021 -0700
+
+    LP1919483: Fix the queries for secondary admin pages
+    
+    To test, go to the following screens, and make sure that their
+    secondary admin pages don't show errors and filter properly.
+    
+    * Authority Control Set
+    * Authority Thesaurus
+    * Course list
+    * Hard due dates
+    * MARC import remove fields
+    * MARC Search/Facet fields
+    * Z39.50 servers
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Christine Burns <christine.burns@bc.libraries.coop>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+6      4       Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts
+
+commit 386e6f8725a2c2e17325cdd5e2a7519790c0435b
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Fri Aug 6 11:35:49 2021 -0400
+
+    LP#1450519: remove unauthorized access to library setting history
+    
+    This patch changes the current Library Settings editor so that
+    it doesn't display the setting history for a setting that the user
+    doesn't have the underlying view permission for. It also removes
+    the coustl IDL class [config.org_unit_setting_type_log] from PCRUD.
+    
+    Access to the setting history is now done through a new method,
+    open-ils.actor.org_unit.settings.history.visible.retrieve, which
+    accepts an authtoken and a setting name. If the user has the
+    relevant view permission, setting history entries at all of the
+    OUs that they have the permission at are returned. If the user
+    lacks the permission, an empty array is returned. If the setting
+    has no permission associated with it, all history entries for
+    the setting are returned. The user must have at least STAFF_LOGIN
+    to retrieve any entries at all.
+    
+    To test
+    -------
+    [1] As an administrator, make some changes to the values of
+        a privileged library setting (such as one of the credit card
+        ones) and an unprivileged one (e.g., lib.info_url).
+    [2] Log in as a staff user without administration privileges
+        and go to the library settings editor. Note that while the
+        current value of privileged settings are not displayed, clicking
+        on the history link displays the full history of the setting.
+    [3] Apply the patch and repeat step 2.
+    [4] This time, history for the privileged setting is not displayed,
+        while history for an unprivileged setting continues to be
+        available.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+    Signed-off-by: Shula Link <slink@gchrl.org>
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+1      9       Open-ILS/examples/fm_IDL.xml
+44     0       Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm
+28     17      Open-ILS/xul/staff_client/server/admin/org_unit_settings.js
+
+commit df5306c718f002df0320466c58a761e4882af900
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Thu Aug 12 11:17:56 2021 -0400
+
+    LP#1931167: stamp DB update
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.data.DYM_max_suggestions.sql => 1273.data.DYM_max_suggestions.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.data.DYM_max_suggestions.sql => 1273.data.DYM_max_suggestions.sql} (89%)
+
+commit 06bf11a3c2b38ccd9dfd971152abf7ab8e5facd5
+Author: Mike Rylander <mrylander@gmail.com>
+Date:   Mon Jun 7 16:39:34 2021 -0400
+
+    LP#1931167: Missing YAOUS for DYM
+    
+    The baseline schema did not get updated to include the
+    opac.did_you_mean.max_suggestions YAOUS, so fresh, rather than upgraded,
+    Evergreen installs will be missing it.
+    
+    This commit adds it to the baseline and provides an upgrade script to
+    give the setting to impacted instances.
+    
+    Signed-off-by: Mike Rylander <mrylander@gmail.com>
+    Signed-off-by: Erica Rohlfs <erica.rohlfs@equinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+14     0       Open-ILS/src/sql/Pg/950.data.seed-values.sql
+15     0       Open-ILS/src/sql/Pg/upgrade/XXXX.data.DYM_max_suggestions.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.DYM_max_suggestions.sql
+
+commit ca77de4a8079172f7f8653280ba725275a29f847
+Author: Jason Stephenson <jason@sigio.com>
+Date:   Fri Jul 16 15:50:59 2021 -0400
+
+    Lp 1936662: Add CPAN Module Prerequisites for Debian and Ubuntu
+    
+    This commit adds the missing CPAN module prerequisites for the "did
+    you mean" feature to the PostgreSQL server Makefile targets for Debian
+    Jessie, Stretch, Buster and Ubuntu Bionic.
+    
+    They were added to the Makefile target for Ubuntu Focal but were
+    apparently overlooked in the other distros.
+    
+    Signed-off-by: Jason Stephenson <jason@sigio.com>
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+6      0       Open-ILS/src/extras/install/Makefile.debian-buster
+6      0       Open-ILS/src/extras/install/Makefile.debian-jessie
+6      0       Open-ILS/src/extras/install/Makefile.debian-stretch
+3      1       Open-ILS/src/extras/install/Makefile.ubuntu-bionic
+
+commit 411e16a82c5ed810c7d1a56610373f9c4830cc60
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Thu Aug 12 10:00:30 2021 -0400
+
+    LP#1937299: stamp DB update
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.data.patron_collections_exempt.sql => 1272.data.patron_collections_exempt.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.data.patron_collections_exempt.sql => 1272.data.patron_collections_exempt.sql} (91%)
+
+commit 514e9b905a9af2b72dbeae8f3a630ac6482f2ae9
+Author: Jason Boyer <JBoyer@equinoxOLI.org>
+Date:   Thu Jul 22 13:50:53 2021 -0400
+
+    LP1937299: Collections Exempt User Setting Repair
+    
+    The collections exempt user setting was never added to the seed data
+    meaning that depending on the age of your database it may or may not
+    be there. Additionally, correct the label for this setting in the
+    user editor.
+    
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+26     0       Open-ILS/src/sql/Pg/950.data.seed-values.sql
+43     0       Open-ILS/src/sql/Pg/upgrade/XXXX.data.patron_collections_exempt.sql
+1      2       Open-ILS/src/templates/staff/circ/patron/t_edit.tt2
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.patron_collections_exempt.sql
+
+commit 7172b97ab8b5428255c21096b9bc735b2e8efb74
+Author: Josh Stompro <stompro@stompro.org>
+Date:   Tue May 25 09:42:22 2021 -0500
+
+    LP#1815968 - Self Check Audio Alerts
+    
+    The method of playing audio alerts seems to not be working in modern browsers.
+    
+    It seemed to work in firefox V40, but no longer in V68.
+    
+    Adding the autoplay element and then immediately removing it prevents the audio
+    from playing.  I've also noticed in the past that the audio had been cut off
+    before the file was fully played.
+    
+    Using the .play() method does seem to work in newer versions of Firefox
+    and Chrome.  Tested with Chrome V90 and Firefox V78.10.1esr.
+    
+    Testing Plan:
+    
+    1. Enable Self Check Audio Alerts Library Setting.
+    2. See the docs for setting up the default audio alerts.
+    https://docs.evergreen-ils.org/reorg/3.1/command_line_admin/_self_check_interface.html
+    3. Launch self check interface, create a workstation and try to trigger an alert.
+    https://eg-server.you.com/eg/circ/selfcheck/main
+    4. entering a fake barcode will trigger an alert which should not be audible.
+    
+    Apply the fix:
+    
+    1. Launch self check interface, and reload/clear cache.
+    2. Enter a fake barcode to trigger an audio alert.
+    3. The audio alert should now be audible.
+    
+    Signed-off-by: Josh Stompro <stompro@stompro.org>
+    Signed-off-by: Erica Rohlfs <erica.rohlfs@equinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+2      5       Open-ILS/web/js/dojo/openils/Util.js
+
+commit c750a4e5f9d128e81c9e637014416fce3718fffa
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Mon Aug 2 09:07:20 2021 -0700
+
+    Docs: small follow-up to remove an extra plus sign
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+1      1       docs/modules/admin/pages/copy_locations.adoc
+
+commit 2132a6d4eb0533cfdf103f206a17ccc4784475fe
+Author: Lynn Floyd <lfloyd1@library.in.gov>
+Date:   Mon Aug 2 09:03:15 2021 -0700
+
+    DOCS:Shelving Locations, Added images and updated directions
+    
+    Added images and updated information on Shelving locations. Included information on Hold_Verify
+    Adding additional information in to the shelving locations.
+    Added Index terms.
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+-      -       docs/modules/admin/assets/images/shelving_location/shelving_location_alert.png
+-      -       docs/modules/admin/assets/images/shelving_location/shelving_location_config.png
+-      -       docs/modules/admin/assets/images/shelving_location/shelving_location_edit.png
+-      -       docs/modules/admin/assets/images/shelving_location/shelving_location_holdverify.png
+-      -       docs/modules/admin/assets/images/shelving_location/shelving_location_new.png
+-      -       docs/modules/admin/assets/images/shelving_location/shelving_location_order.png
+-      -       docs/modules/admin/assets/images/shelving_location/sl_groups.png
+-      -       docs/modules/admin/assets/images/shelving_location/sl_groups_example.png
+-      -       docs/modules/admin/assets/images/shelving_location/sl_groups_new.png
+89     71      docs/modules/admin/pages/copy_locations.adoc
+ create mode 100644 docs/modules/admin/assets/images/shelving_location/shelving_location_alert.png
+ create mode 100644 docs/modules/admin/assets/images/shelving_location/shelving_location_config.png
+ create mode 100644 docs/modules/admin/assets/images/shelving_location/shelving_location_edit.png
+ create mode 100644 docs/modules/admin/assets/images/shelving_location/shelving_location_holdverify.png
+ create mode 100644 docs/modules/admin/assets/images/shelving_location/shelving_location_new.png
+ create mode 100644 docs/modules/admin/assets/images/shelving_location/shelving_location_order.png
+ create mode 100644 docs/modules/admin/assets/images/shelving_location/sl_groups.png
+ create mode 100644 docs/modules/admin/assets/images/shelving_location/sl_groups_example.png
+ create mode 100644 docs/modules/admin/assets/images/shelving_location/sl_groups_new.png
+
+commit 8d6ec314674281b257564ac7c4703b9ae9ecfaac
+Author: Gina Monti <gmonti@biblio.org>
+Date:   Fri Jul 23 09:08:52 2021 -0400
+
+    Docs: LP1776977: Update lsa-address_alert.adoc and add images
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+-      -       docs/modules/admin/assets/images/media/address_alert.jpg
+-      -       docs/modules/admin/assets/images/media/delete_address_alert.jpg
+-      -       docs/modules/admin/assets/images/media/edit_address_alert.jpg
+9      9       docs/modules/admin/pages/lsa-address_alert.adoc
+ create mode 100644 docs/modules/admin/assets/images/media/address_alert.jpg
+ create mode 100644 docs/modules/admin/assets/images/media/delete_address_alert.jpg
+ create mode 100644 docs/modules/admin/assets/images/media/edit_address_alert.jpg
+
+commit 78de35c33be0eca92ec986f11b487169d4ae31bf
+Author: gmontimantis <86423994+gmontimantis@users.noreply.github.com>
+Date:   Mon Jun 28 12:53:25 2021 -0400
+
+    Update lsa-address_alert.adoc
+    
+    https://bugs.launchpad.net/evergreen/+bug/1776977
+    
+    The new address alert table is rearranged to match the web client.
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+14     10      docs/modules/admin/pages/lsa-address_alert.adoc
+
+commit 20f5b48508b4b1054cab6456ff789ec40d640967
+Author: Garry Collum <gcollum@gmail.com>
+Date:   Mon May 10 15:55:59 2021 -0400
+
+    LP1908612 Bootstrap Opac - Limit to Available
+    
+    Adds the 'Show All Copies' and 'Show Only Available Copies' to the Bootstrap
+    Opac's copy screen.
+    
+    Signed-off-by: Garry Collum <gcollum@gmail.com>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+14     0       Open-ILS/src/templates-bootstrap/opac/parts/record/copy_table.tt2
+
+commit 5cd59cd1d996b0519fef8d7159f997f80104625c
+Author: Gina Monti <gmonti@biblio.org>
+Date:   Thu Jul 8 15:02:22 2021 -0400
+
+    Docs: Update apache_rewrite_tricks.adoc to further address LP1837753
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+2      2       docs/modules/admin/pages/apache_rewrite_tricks.adoc
+
+commit 3b841bede12b5c19e699527802823dec347a9132
+Author: Gina Monti <gmonti@biblio.org>
+Date:   Thu Jul 8 15:05:10 2021 -0400
+
+    Docs: update glossary.adoc to add TLD definition per LP1837753
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+2      0       docs/modules/appendix/pages/glossary.adoc
+
+commit bec93186cd9aa34cebe524989400491053483dee
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Wed Jul 14 09:20:03 2021 -0700
+
+    LP1718782: follow up to fix failing test
+    
+    LP1718782 added a missing fixed field, but failed to also add it to
+    the expected data in this pgtap test.  This commit updates the
+    expected data to also include a SRCE fixed field.
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+1      0       Open-ILS/src/sql/Pg/t/lp1588543_marc_record_attributes.pg
+
+commit 7e3d0dfdc031a1a42c91327d793d14b5efd4515d
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Tue Jul 13 12:09:57 2021 -0400
+
+    LP#1718782: stamp DB update
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.data.srce_fixed_field.sql => 1270.data.srce_fixed_field.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.data.srce_fixed_field.sql => 1270.data.srce_fixed_field.sql} (96%)
+
+commit 26bcda1ef6e897499df0f14593a83d970ac62e73
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Thu Sep 10 11:35:22 2020 -0700
+
+    LP1718782: Add the Srce fixed field to the Angular MARC editor
+    
+    To test:
+    
+    1) Without using private browsing, open up a bibliographic record in
+    the Angular catalog MARC editor.
+    2) Notice that there is a gap between the ELvl and Audn fixed fields.
+    3) Apply this patch.
+    4) Open up the same bibliographic record, this time using private
+       browsing (since the Angular MARC editor caches fixed field values).
+    5) Notice that the Srce fixed field is available between the ELvl and
+       Audn fixed fields.
+    6) Notice that you can right click inside the fixed field to get a list
+       of three possible values.
+    7) Repeat the test with different record types (e.g. BKS, SCO, VIS)
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Mary Llewellyn <mllewell@biblio.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/eg2/src/app/staff/share/marc-edit/fixed-fields-editor.component.html
+14     0       Open-ILS/src/sql/Pg/950.data.seed-values.sql
+22     0       Open-ILS/src/sql/Pg/upgrade/XXXX.data.srce_fixed_field.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.srce_fixed_field.sql
+
+commit 0048871f960bd467c7672049bbfc9d419f42adb7
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Tue Jul 6 11:08:37 2021 -0400
+
+    LP1913807 Staff catalog shows preferred lib holdings counts
+    
+    Always show holdings counts for the preferred library (when set) even
+    when the library is not directly in the search scope.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+13     1       Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts
+1      1       Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html
+23     1       Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.ts
+15     0       Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm
+
+commit 4fa63bea6e58ee3b748f9d5b909c028729dded62
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Mon Jul 5 16:04:56 2021 -0400
+
+    LP1910808 Staff catalog show call number
+    
+    In the search results page, show the first call number for each record
+    (sorting by label sortkey) that is owned either by the user's preferred
+    library or the search library.
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+3      0       Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts
+2      1       Open-ILS/src/eg2/src/app/share/catalog/catalog.service.ts
+7      0       Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html
+17     0       Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm
+
+commit a4d516ccb0d441c96424053adac5089cceb62ca8
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Thu Dec 19 15:54:18 2019 -0800
+
+    LP1857060: Tests for ISBNs with 979 prefix
+    
+    Also includes a slight tweak to the Amazon AddedContent code to avoid
+    attempting to convert 979 ISBNs to ISBN-10s (which is not possible).
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+12     6       Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent/Amazon.pm
+7      1       Open-ILS/src/perlmods/t/16-OpenILS-WWW-AddedContent.t
+30     0       Open-ILS/src/sql/Pg/t/lp1857060_handle_all_types_of_isbn.pg
+ create mode 100644 Open-ILS/src/sql/Pg/t/lp1857060_handle_all_types_of_isbn.pg
+
+commit 3e62dbc71482867704340f3ce8d158281d72417e
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Tue Jul 13 10:28:12 2021 -0400
+
+    LP#1910891: stamp DB update
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.new_booking_perms_in_map.sql => 1269.data.new_booking_perms_in_map.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.new_booking_perms_in_map.sql => 1269.data.new_booking_perms_in_map.sql} (92%)
+
+commit af9df234dcaeed43ad37056a416ca95f051c4c7a
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Sat Jan 9 22:20:29 2021 -0800
+
+    LP1910891: Add new booking perms to appropriate groups
+    
+    Steps to test:
+    
+    1) Without this patch, create a reservation for a BR1 resource at BR1.
+    2) Log in as a circulator at BR1.
+    3) Go to Booking > Manage Reservations.  Note that you can't see your reservation.
+    4) Run this upgrade script.
+    5) Repeat steps 2-3.  Notice that you can now see the reservation.
+    6) Wipe your database and re-install it with the additions to the seed data
+    in this commit.  Repeat steps 1-3 and notice that you can see the reservation
+    as expected.
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+4      0       Open-ILS/src/sql/Pg/950.data.seed-values.sql
+29     0       Open-ILS/src/sql/Pg/upgrade/XXXX.new_booking_perms_in_map.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.new_booking_perms_in_map.sql
+
+commit d4c6e9cdf69292830d167afeec8cc192b19293e4
+Author: Jason Boyer <JBoyer@EquinoxInitiative.org>
+Date:   Wed Mar 10 18:48:12 2021 -0500
+
+    LP1895737: Add Curbside Appointments to Bootstrap OPAC
+    
+    Add support for requesting / editing / canceling curbside
+    appointments to the bootstrap opac.
+    
+    Signed-off-by: Jason Boyer <JBoyer@EquinoxInitiative.org>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+6      0       Open-ILS/src/templates-bootstrap/opac/css/style.css.tt2
+191    0       Open-ILS/src/templates-bootstrap/opac/myopac/holds_curbside.tt2
+8      2       Open-ILS/src/templates-bootstrap/opac/parts/myopac/base.tt2
+ create mode 100755 Open-ILS/src/templates-bootstrap/opac/myopac/holds_curbside.tt2
+
+commit b109a1cb9e2ebe6e9caa0dfc2a3f0015e70a7b63
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Mon Jul 12 17:01:51 2021 -0400
+
+    LP#1908722: stamp schema update
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.data.angstcat-show-more-details.sql => 1268.data.angstcat-show-more-details.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.data.angstcat-show-more-details.sql => 1268.data.angstcat-show-more-details.sql} (82%)
+
+commit c86a0d9a13ad6d8d05f9059fe211a076b1241bd1
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Fri Jul 9 17:10:31 2021 -0400
+
+    LP#1908722: add electronic resource links
+    
+    This patch adds electronic resource links to the Show More Details
+    view in the Angular staff catalog, above the table of items.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+21     2       Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html
+2      0       Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.ts
+
+commit 84a834e440834e325c7ed2fc9c3ddfb9cf5b23bb
+Author: Bill Erickson <berickxx@gmail.com>
+Date:   Fri Jul 2 16:57:40 2021 -0400
+
+    LP1908722 Staff catalog Show More Details
+    
+    Adds a "Show More Details" (and "Show Fewer Details") buttons to the
+    Angualr staff catalog.  Similar to the TPAC, activating the button means
+    more holdings details are displayed in the search results page.
+    
+    Adds a new workstation setting type called
+    'eg.staff.catalog.results.show_more'
+    
+    Signed-off-by: Bill Erickson <berickxx@gmail.com>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+10     5       Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts
+12     5       Open-ILS/src/eg2/src/app/share/catalog/catalog.service.ts
+4      0       Open-ILS/src/eg2/src/app/share/catalog/search-context.ts
+0      1       Open-ILS/src/eg2/src/app/staff/catalog/catalog.service.ts
+1      0       Open-ILS/src/eg2/src/app/staff/catalog/resolver.service.ts
+27     0       Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html
+6      2       Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.html
+35     4       Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.ts
+85     2       Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm
+11     0       Open-ILS/src/sql/Pg/950.data.seed-values.sql
+15     0       Open-ILS/src/sql/Pg/upgrade/XXXX.data.angstcat-show-more-details.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.angstcat-show-more-details.sql
+
+commit f28907e004bb997a02bb05e72a7135a7b05b0db4
+Author: Mike Risher <mrisher@catalyte.io>
+Date:   Wed May 6 17:08:33 2020 +0000
+
+    LP#1362743 One modal at a time during batch checkin
+    
+    Modify batch checkins so that only one modal pops up at a time.
+    When each one is dismissed the next one will appear.
+    
+    Signed-off-by: Mike Risher <mrisher@catalyte.io>
+    Signed-off-by: Dawn Dale <ddale@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+13     5       Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit ecbd8dc464c20364d5b547d99406e902bd25029b
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Mon Feb 1 18:04:02 2021 -0800
+
+    LP1913221: Don't display blank course section number in OPAC
+    
+    To test:
+    
+    1) Use the Library Settings Editor to turn on the Course Materials
+       Module.
+    2) In Local administration, go to the course reserves list.
+    3) Add several courses, some with section numbers, others without.
+    4) In the OPAC, use the Course Search function to search for the courses
+       you just added.
+    5) Notice that the search results page has a place for section numbers,
+       whether or not the course has one.
+    6) Click into some of the courses.  Notice that the course page also
+       includes a place for section numbers, whether or not the course has
+       one.
+    7) Apply this patch.
+    8) Repeat steps 4-6.  Notice that the blank "section number" areas no
+       longer appear.
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+    Signed-off-by: Beth Willis <willis@noblenet.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+5      3       Open-ILS/src/templates/opac/course/results.tt2
+6      4       Open-ILS/src/templates/opac/parts/course/body.tt2
+
+commit 9d54b7627bb7f0e687332fec069896c735ac791b
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Wed Jul 7 10:42:54 2021 -0400
+
+    LP#1907296: stamp DB update
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/src/sql/Pg/002.schema.config.sql
+1      1       Open-ILS/src/sql/Pg/upgrade/{XXXX.data.ws_setting_eg_grid_catalog_record_copies => 1266.ws_setting_eg_grid_catalog_record_copies.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.data.ws_setting_eg_grid_catalog_record_copies => 1266.ws_setting_eg_grid_catalog_record_copies.sql} (81%)
+
+commit a80093246f9b6b8c40963926bd3dbe80046808a2
+Author: Michele Morgan <mmorgan@noblenet.org>
+Date:   Fri Apr 9 12:38:55 2021 -0400
+
+    LP#1907296 Missing Workstation setting for staff cat item table
+    
+    Adds the ws setting type eg.grid.catalog.record.copies to allow users to
+    save grid preferences for the angular catalog item table.
+    
+    Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+    Signed-off-by: Jennifer Pringle <jennifer.pringle@bc.libraries.coop>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+10     0       Open-ILS/src/sql/Pg/950.data.seed-values.sql
+14     0       Open-ILS/src/sql/Pg/upgrade/XXXX.data.ws_setting_eg_grid_catalog_record_copies
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.ws_setting_eg_grid_catalog_record_copies
+
+commit 07b24d4acdb2b36d96e34a18a1c38342831674e3
+Author: Garry Collum <gcollum@gmail.com>
+Date:   Tue May 11 15:43:34 2021 -0400
+
+    LP1928005 Bootstrap Opac: Current charges not aligned on mobile.
+    
+    This patch removes the classes from the charges table that presents the table in a vertical format.
+    It wraps the table in a <div> that uses the table-responsive class.
+    
+    To test add some charges to a patron record.
+    Bring that patron's account up in the opac and view the charges table in the smallest browser size
+    possible.
+    Notice that the table switches to a vertical format and the column names are mis-aligned.
+    
+    Apply the patch.
+    
+    View the table again.  The table should now be horizontal with all of the columns correct.
+    
+    Signed-off-by: Garry Collum <gcollum@gmail.com>
+    Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+4      2       Open-ILS/src/templates-bootstrap/opac/myopac/charges.tt2
+
+commit d5387fc5b0b901b369293122f03537f08b908ecb
+Author: Galen Charlton <gmc@equinoxOLI.org>
+Date:   Fri Jun 4 16:17:33 2021 -0400
+
+    LP#1929136: (follow-up) reduce bounce time to 500ms
+    
+    During testing, 500ms was enough to avoid excessive
+    PCRUD calls while still keeping the interface's display
+    of duplicate or missing barcode warnings responsive.
+    
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 83c4e9327e6bd1b62a7d0bbe8b35448dbcf18f16
+Author: Jeff Davis <jdavis@sitka.bclibraries.ca>
+Date:   Thu May 20 14:51:17 2021 -0700
+
+    LP#1929136: delay barcode lookup on change in holdings editor
+    
+    In the Holdings Editor, any change to the barcode field results in an
+    immediate API call.  Thus, if you type the barcode "123456789", you
+    would get 9 separate calls: 1, 12, 123, 1234, 12345 ...
+    
+    This commit adds a 1000ms delay to avoid excessive pcrud calls when
+    typing a barcode.
+    
+    Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
+    Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
+
+1      1       Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit c6e50ae7aca514a3b3db441df29162680279e0fb
+Author: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+Date:   Thu Jul 1 16:58:23 2021 -0400
+
+    Docs: updates to library settings; filename fixes
+    
+    Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
+
+48     0       docs/modules/admin/pages/librarysettings.adoc
+2      3       docs/modules/admin_initial_setup/pages/dym_admin.adoc
+-      -       docs/modules/opac/assets/images/media/{geosort_entry_box.PNG => geosort_entry_box.png}
+-      -       docs/modules/opac/assets/images/media/{geosort_results_km.PNG => geosort_results_km.png}
+-      -       docs/modules/opac/assets/images/media/{geosort_retrieval_error.PNG => geosort_retrieval_error.png}
+ rename docs/modules/opac/assets/images/media/{geosort_entry_box.PNG => geosort_entry_box.png} (100%)
+ rename docs/modules/opac/assets/images/media/{geosort_results_km.PNG => geosort_results_km.png} (100%)
+ rename docs/modules/opac/assets/images/media/{geosort_retrieval_error.PNG => geosort_retrieval_error.png} (100%)
+
+commit 38a3e540483cbdf7a43b8e8000e2f895d7d94125
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date:   Wed Jun 23 12:38:00 2021 -0400
+
+    Forward-port 3.7.1 version upgrade script
+    
+    Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+1514   0       Open-ILS/src/sql/Pg/version-upgrade/3.7.0-3.7.1-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.7.0-3.7.1-upgrade-db.sql
index d750216..05df308 100644 (file)
@@ -7,7 +7,7 @@ use OpenILS::Utils::Fieldmapper;
 sub ils_version {
     # version format is "x-y-z", for example "2-0-0" for Evergreen 2.0.0
     # For branches, format is "x-y"
-    return "HEAD";
+    return "3-7-2";
 }
 
 __PACKAGE__->register_method(
index 77f0e75..25d864d 100644 (file)
@@ -93,6 +93,7 @@ CREATE TRIGGER no_overlapping_deps
     FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates');
 
 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('1303', :eg_version); -- Dyrcona / jweston / gmcharlt
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('3.7.2', :eg_version);
 
 CREATE TABLE config.bib_source (
        id              SERIAL  PRIMARY KEY,
diff --git a/Open-ILS/src/sql/Pg/version-upgrade/3.7.1-3.7.2-upgrade-db.sql b/Open-ILS/src/sql/Pg/version-upgrade/3.7.1-3.7.2-upgrade-db.sql
new file mode 100644 (file)
index 0000000..b040ac0
--- /dev/null
@@ -0,0 +1,781 @@
+--Upgrade Script for 3.7.1 to 3.7.2
+\set eg_version '''3.7.2'''
+BEGIN;
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('3.7.2', :eg_version);
+
+SELECT evergreen.upgrade_deps_block_check('1266', :eg_version);
+
+INSERT INTO config.workstation_setting_type (name, grp, datatype, label)
+VALUES (
+    'eg.grid.catalog.record.copies', 'gui', 'object',
+    oils_i18n_gettext(
+        'eg.grid.catalog.record.copies',
+        'Grid Config: eg.grid.catalog.record.copies',
+        'cwst', 'label')
+    );
+
+
+SELECT evergreen.upgrade_deps_block_check('1268', :eg_version);
+
+INSERT INTO config.workstation_setting_type (name, grp, datatype, label)
+VALUES (
+    'eg.staff.catalog.results.show_more', 'gui', 'bool',
+    oils_i18n_gettext(
+        'eg.staff.catalog.results.show_more',
+        'Show more details in Angular staff catalog',
+        'cwst', 'label'
+    )
+);
+
+
+SELECT evergreen.upgrade_deps_block_check('1269', :eg_version);
+
+WITH perms_to_add AS
+    (SELECT id FROM
+    permission.perm_list
+    WHERE code IN ('VIEW_BOOKING_RESERVATION', 'VIEW_BOOKING_RESERVATION_ATTR_MAP'))
+
+INSERT INTO permission.grp_perm_map (grp, perm, depth, grantable)
+    SELECT grp, perms_to_add.id as perm, depth, grantable
+        FROM perms_to_add,
+        permission.grp_perm_map
+        
+        --- Don't add the permissions if they have already been assigned
+        WHERE grp NOT IN
+            (SELECT DISTINCT grp FROM permission.grp_perm_map
+            INNER JOIN perms_to_add ON perm=perms_to_add.id)
+            
+        --- Anybody who can view resources should also see reservations
+        --- at the same level
+        AND perm = (
+            SELECT id
+                FROM permission.perm_list
+                WHERE code = 'VIEW_BOOKING_RESOURCE'
+        );
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1270', :eg_version);
+
+INSERT INTO config.marc21_ff_pos_map (fixed_field, tag, rec_type,start_pos, length, default_val) VALUES ('Srce', '008', 'BKS', 39, 1, ' ');
+INSERT INTO config.marc21_ff_pos_map (fixed_field, tag, rec_type,start_pos, length, default_val) VALUES ('Srce', '008', 'COM', 39, 1, ' ');
+INSERT INTO config.marc21_ff_pos_map (fixed_field, tag, rec_type,start_pos, length, default_val) VALUES ('Srce', '008', 'MAP', 39, 1, ' ');
+INSERT INTO config.marc21_ff_pos_map (fixed_field, tag, rec_type,start_pos, length, default_val) VALUES ('Srce', '008', 'MIX', 39, 1, ' ');
+INSERT INTO config.marc21_ff_pos_map (fixed_field, tag, rec_type,start_pos, length, default_val) VALUES ('Srce', '008', 'REC', 39, 1, ' ');
+INSERT INTO config.marc21_ff_pos_map (fixed_field, tag, rec_type,start_pos, length, default_val) VALUES ('Srce', '008', 'SCO', 39, 1, ' ');
+INSERT INTO config.marc21_ff_pos_map (fixed_field, tag, rec_type,start_pos, length, default_val) VALUES ('Srce', '008', 'SER', 39, 1, ' ');
+INSERT INTO config.marc21_ff_pos_map (fixed_field, tag, rec_type,start_pos, length, default_val) VALUES ('Srce', '008', 'VIS', 39, 1, ' ');
+
+
+INSERT INTO config.record_attr_definition (name,label,fixed_field) values ('srce','Srce','Srce');
+
+INSERT INTO config.coded_value_map (id, ctype, code, value) VALUES
+(1750, 'srce', ' ', oils_i18n_gettext('1750', 'National bibliographic agency', 'ccvm', 'value')),
+(1751, 'srce', 'c', oils_i18n_gettext('1751', 'Cooperative cataloging program', 'ccvm', 'value')),
+(1752, 'srce', 'd', oils_i18n_gettext('1752', 'Other', 'ccvm', 'value'));
+
+
+SELECT evergreen.upgrade_deps_block_check('1272', :eg_version);
+
+DO $$
+BEGIN
+
+  PERFORM FROM config.usr_setting_type WHERE name = 'circ.collections.exempt';
+
+  IF NOT FOUND THEN
+
+    INSERT INTO config.usr_setting_type (
+      name,
+      opac_visible,
+      label,
+      description,
+      datatype,
+      reg_default
+    ) VALUES (
+      'circ.collections.exempt',
+      FALSE,
+      oils_i18n_gettext(
+        'circ.collections.exempt',
+        'Collections: Exempt',
+        'cust',
+        'label'
+      ),
+      oils_i18n_gettext(
+        'circ.collections.exempt',
+        'User is exempt from collections tracking/processing',
+        'cust',
+        'description'
+      ),
+      'bool',
+      'false'
+    );
+
+  END IF;
+
+END
+$$;
+
+
+SELECT evergreen.upgrade_deps_block_check('1273', :eg_version);
+
+INSERT into config.org_unit_setting_type
+( name, grp, label, description, datatype )
+SELECT  'opac.did_you_mean.max_suggestions',
+        'opac',
+        'Maximum number of spelling suggestions that may be offered',
+        'If set to -1, provide "best" suggestion if mispelled; if set higher than 0, the maximum suggestions that can be provided; if set to 0, disable suggestions.',
+        'integer'
+  WHERE NOT EXISTS (SELECT 1 FROM config.org_unit_setting_type WHERE name = 'opac.did_you_mean.max_suggestions');
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1279', :eg_version);
+
+UPDATE config.org_unit_setting_type SET fm_class='cnal', datatype='link' WHERE name='ui.patron.default_inet_access_level';
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1282', :eg_version);
+
+CREATE OR REPLACE FUNCTION search.symspell_lookup(
+        raw_input text,
+        search_class text,
+        verbosity integer DEFAULT 2,
+        xfer_case boolean DEFAULT false,
+        count_threshold integer DEFAULT 1,
+        soundex_weight integer DEFAULT 0,
+        pg_trgm_weight integer DEFAULT 0,
+        kbdist_weight integer DEFAULT 0
+) RETURNS SETOF search.symspell_lookup_output
+ LANGUAGE plpgsql
+AS $function$
+DECLARE
+    prefix_length INT;
+    maxED         INT;
+    good_suggs  HSTORE;
+    word_list   TEXT[];
+    edit_list   TEXT[] := '{}';
+    seen_list   TEXT[] := '{}';
+    output      search.symspell_lookup_output;
+    output_list search.symspell_lookup_output[];
+    entry       RECORD;
+    entry_key   TEXT;
+    prefix_key  TEXT;
+    sugg        TEXT;
+    input       TEXT;
+    word        TEXT;
+    w_pos       INT := -1;
+    smallest_ed INT := -1;
+    global_ed   INT;
+    i_len       INT;
+    l_maxED     INT;
+BEGIN
+    SELECT value::INT INTO prefix_length FROM config.internal_flag WHERE name = 'symspell.prefix_length' AND enabled;
+    prefix_length := COALESCE(prefix_length, 6);
+
+    SELECT value::INT INTO maxED FROM config.internal_flag WHERE name = 'symspell.max_edit_distance' AND enabled;
+    maxED := COALESCE(maxED, 3);
+
+    word_list := ARRAY_AGG(x) FROM search.symspell_parse_words(raw_input) x;
+
+    -- Common case exact match test for preformance
+    IF verbosity = 0 AND CARDINALITY(word_list) = 1 AND CHARACTER_LENGTH(word_list[1]) <= prefix_length THEN
+        EXECUTE
+          'SELECT  '||search_class||'_suggestions AS suggestions,
+                   '||search_class||'_count AS count,
+                   prefix_key
+             FROM  search.symspell_dictionary
+             WHERE prefix_key = $1
+                   AND '||search_class||'_count >= $2
+                   AND '||search_class||'_suggestions @> ARRAY[$1]'
+          INTO entry USING evergreen.lowercase(word_list[1]), COALESCE(count_threshold,1);
+        IF entry.prefix_key IS NOT NULL THEN
+            output.lev_distance := 0; -- definitionally
+            output.prefix_key := entry.prefix_key;
+            output.prefix_key_count := entry.count;
+            output.suggestion_count := entry.count;
+            output.input := word_list[1];
+            IF xfer_case THEN
+                output.suggestion := search.symspell_transfer_casing(output.input, entry.prefix_key);
+            ELSE
+                output.suggestion := entry.prefix_key;
+            END IF;
+            output.norm_input := entry.prefix_key;
+            output.qwerty_kb_match := 1;
+            output.pg_trgm_sim := 1;
+            output.soundex_sim := 1;
+            RETURN NEXT output;
+            RETURN;
+        END IF;
+    END IF;
+
+    <<word_loop>>
+    FOREACH word IN ARRAY word_list LOOP
+        w_pos := w_pos + 1;
+        input := evergreen.lowercase(word);
+        i_len := CHARACTER_LENGTH(input);
+        l_maxED := maxED;
+
+        IF CHARACTER_LENGTH(input) > prefix_length THEN
+            prefix_key := SUBSTRING(input FROM 1 FOR prefix_length);
+            edit_list := ARRAY[input,prefix_key] || search.symspell_generate_edits(prefix_key, 1, l_maxED);
+        ELSE
+            edit_list := input || search.symspell_generate_edits(input, 1, l_maxED);
+        END IF;
+
+        SELECT ARRAY_AGG(x ORDER BY CHARACTER_LENGTH(x) DESC) INTO edit_list FROM UNNEST(edit_list) x;
+
+        output_list := '{}';
+        seen_list := '{}';
+        global_ed := NULL;
+
+        <<entry_key_loop>>
+        FOREACH entry_key IN ARRAY edit_list LOOP
+            smallest_ed := -1;
+            IF global_ed IS NOT NULL THEN
+                smallest_ed := global_ed;
+            END IF;
+
+            FOR entry IN EXECUTE
+                'SELECT  '||search_class||'_suggestions AS suggestions,
+                         '||search_class||'_count AS count,
+                         prefix_key
+                   FROM  search.symspell_dictionary
+                   WHERE prefix_key = $1
+                         AND '||search_class||'_suggestions IS NOT NULL'
+                USING entry_key
+            LOOP
+
+                SELECT  HSTORE(
+                            ARRAY_AGG(
+                                ARRAY[s, evergreen.levenshtein_damerau_edistance(input,s,l_maxED)::TEXT]
+                                    ORDER BY evergreen.levenshtein_damerau_edistance(input,s,l_maxED) DESC
+                            )
+                        )
+                  INTO  good_suggs
+                  FROM  UNNEST(entry.suggestions) s
+                  WHERE (ABS(CHARACTER_LENGTH(s) - i_len) <= maxEd AND evergreen.levenshtein_damerau_edistance(input,s,l_maxED) BETWEEN 0 AND l_maxED)
+                        AND NOT seen_list @> ARRAY[s];
+
+                CONTINUE WHEN good_suggs IS NULL;
+
+                FOR sugg, output.suggestion_count IN EXECUTE
+                    'SELECT  prefix_key, '||search_class||'_count
+                       FROM  search.symspell_dictionary
+                       WHERE prefix_key = ANY ($1)
+                             AND '||search_class||'_count >= $2'
+                    USING AKEYS(good_suggs), COALESCE(count_threshold,1)
+                LOOP
+
+                    output.lev_distance := good_suggs->sugg;
+                    seen_list := seen_list || sugg;
+
+                    -- Track the smallest edit distance among suggestions from this prefix key.
+                    IF smallest_ed = -1 OR output.lev_distance < smallest_ed THEN
+                        smallest_ed := output.lev_distance;
+                    END IF;
+
+                    -- Track the smallest edit distance for all prefix keys for this word.
+                    IF global_ed IS NULL OR smallest_ed < global_ed THEN
+                        global_ed = smallest_ed;
+                        -- And if low verbosity, ignore suggs with a larger distance from here on.
+                        IF verbosity <= 1 THEN
+                            l_maxED := global_ed;
+                        END IF;
+                    END IF;
+
+                    -- Lev distance is our main similarity measure. While
+                    -- trgm or soundex similarity could be the main filter,
+                    -- Lev is both language agnostic and faster.
+                    --
+                    -- Here we will skip suggestions that have a longer edit distance
+                    -- than the shortest we've already found. This is simply an
+                    -- optimization that allows us to avoid further processing
+                    -- of this entry. It would be filtered out later.
+                    CONTINUE WHEN output.lev_distance > global_ed AND verbosity <= 1;
+
+                    -- If we have an exact match on the suggestion key we can also avoid
+                    -- some function calls.
+                    IF output.lev_distance = 0 THEN
+                        output.qwerty_kb_match := 1;
+                        output.pg_trgm_sim := 1;
+                        output.soundex_sim := 1;
+                    ELSE
+                        IF kbdist_weight THEN
+                            output.qwerty_kb_match := evergreen.qwerty_keyboard_distance_match(input, sugg);
+                        ELSE
+                            output.qwerty_kb_match := 0;
+                        END IF;
+                        IF pg_trgm_weight THEN
+                            output.pg_trgm_sim := similarity(input, sugg);
+                        ELSE
+                            output.pg_trgm_sim := 0;
+                        END IF;
+                        IF soundex_weight THEN
+                            output.soundex_sim := difference(input, sugg) / 4.0;
+                        ELSE
+                            output.soundex_sim := 0;
+                        END IF;
+                    END IF;
+
+                    -- Fill in some fields
+                    IF xfer_case AND input <> word THEN
+                        output.suggestion := search.symspell_transfer_casing(word, sugg);
+                    ELSE
+                        output.suggestion := sugg;
+                    END IF;
+                    output.prefix_key := entry.prefix_key;
+                    output.prefix_key_count := entry.count;
+                    output.input := word;
+                    output.norm_input := input;
+                    output.word_pos := w_pos;
+
+                    -- We can't "cache" a set of generated records directly, so
+                    -- here we build up an array of search.symspell_lookup_output
+                    -- records that we can revivicate later as a table using UNNEST().
+                    output_list := output_list || output;
+
+                    EXIT entry_key_loop WHEN smallest_ed = 0 AND verbosity = 0; -- exact match early exit
+                    CONTINUE entry_key_loop WHEN smallest_ed = 0 AND verbosity = 1; -- exact match early jump to the next key
+
+                END LOOP; -- loop over suggestions
+            END LOOP; -- loop over entries
+        END LOOP; -- loop over entry_keys
+
+        -- Now we're done examining this word
+        IF verbosity = 0 THEN
+            -- Return the "best" suggestion from the smallest edit
+            -- distance group.  We define best based on the weighting
+            -- of the non-lev similarity measures and use the suggestion
+            -- use count to break ties.
+            RETURN QUERY
+                SELECT * FROM UNNEST(output_list)
+                    ORDER BY lev_distance,
+                        (soundex_sim * COALESCE(soundex_weight,0))
+                            + (pg_trgm_sim * COALESCE(pg_trgm_weight,0))
+                            + (qwerty_kb_match * COALESCE(kbdist_weight,0)) DESC,
+                        suggestion_count DESC
+                        LIMIT 1;
+        ELSIF verbosity = 1 THEN
+            -- Return all suggestions from the smallest
+            -- edit distance group.
+            RETURN QUERY
+                SELECT * FROM UNNEST(output_list) WHERE lev_distance = smallest_ed
+                    ORDER BY (soundex_sim * COALESCE(soundex_weight,0))
+                            + (pg_trgm_sim * COALESCE(pg_trgm_weight,0))
+                            + (qwerty_kb_match * COALESCE(kbdist_weight,0)) DESC,
+                        suggestion_count DESC;
+        ELSIF verbosity = 2 THEN
+            -- Return everything we find, along with relevant stats
+            RETURN QUERY
+                SELECT * FROM UNNEST(output_list)
+                    ORDER BY lev_distance,
+                        (soundex_sim * COALESCE(soundex_weight,0))
+                            + (pg_trgm_sim * COALESCE(pg_trgm_weight,0))
+                            + (qwerty_kb_match * COALESCE(kbdist_weight,0)) DESC,
+                        suggestion_count DESC;
+        ELSIF verbosity = 3 THEN
+            -- Return everything we find from the two smallest edit distance groups
+            RETURN QUERY
+                SELECT * FROM UNNEST(output_list)
+                    WHERE lev_distance IN (SELECT DISTINCT lev_distance FROM UNNEST(output_list) ORDER BY 1 LIMIT 2)
+                    ORDER BY lev_distance,
+                        (soundex_sim * COALESCE(soundex_weight,0))
+                            + (pg_trgm_sim * COALESCE(pg_trgm_weight,0))
+                            + (qwerty_kb_match * COALESCE(kbdist_weight,0)) DESC,
+                        suggestion_count DESC;
+        ELSIF verbosity = 4 THEN
+            -- Return everything we find from the two smallest edit distance groups that are NOT 0 distance
+            RETURN QUERY
+                SELECT * FROM UNNEST(output_list)
+                    WHERE lev_distance IN (SELECT DISTINCT lev_distance FROM UNNEST(output_list) WHERE lev_distance > 0 ORDER BY 1 LIMIT 2)
+                    ORDER BY lev_distance,
+                        (soundex_sim * COALESCE(soundex_weight,0))
+                            + (pg_trgm_sim * COALESCE(pg_trgm_weight,0))
+                            + (qwerty_kb_match * COALESCE(kbdist_weight,0)) DESC,
+                        suggestion_count DESC;
+        END IF;
+    END LOOP; -- loop over words
+END;
+$function$;
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1283', :eg_version); -- rhamby/ehardy/jboyer
+
+UPDATE asset.call_number SET record = -1 WHERE id = -1 AND record != -1;
+
+CREATE RULE protect_bre_id_neg1 AS ON UPDATE TO biblio.record_entry WHERE OLD.id = -1 DO INSTEAD NOTHING;
+CREATE RULE protect_acl_id_1 AS ON UPDATE TO asset.copy_location WHERE OLD.id = 1 DO INSTEAD NOTHING;
+CREATE RULE protect_acn_id_neg1 AS ON UPDATE TO asset.call_number WHERE OLD.id = -1 DO INSTEAD NOTHING;
+
+CREATE OR REPLACE FUNCTION asset.merge_record_assets( target_record BIGINT, source_record BIGINT ) RETURNS INT AS $func$
+DECLARE
+    moved_objects INT := 0;
+    source_cn     asset.call_number%ROWTYPE;
+    target_cn     asset.call_number%ROWTYPE;
+    metarec       metabib.metarecord%ROWTYPE;
+    hold          action.hold_request%ROWTYPE;
+    ser_rec       serial.record_entry%ROWTYPE;
+    ser_sub       serial.subscription%ROWTYPE;
+    acq_lineitem  acq.lineitem%ROWTYPE;
+    acq_request   acq.user_request%ROWTYPE;
+    booking       booking.resource_type%ROWTYPE;
+    source_part   biblio.monograph_part%ROWTYPE;
+    target_part   biblio.monograph_part%ROWTYPE;
+    multi_home    biblio.peer_bib_copy_map%ROWTYPE;
+    uri_count     INT := 0;
+    counter       INT := 0;
+    uri_datafield TEXT;
+    uri_text      TEXT := '';
+BEGIN
+
+    -- we don't merge bib -1 
+    IF target_record = -1 OR source_record = -1 THEN 
+       RETURN 0;
+    END IF;
+
+    -- move any 856 entries on records that have at least one MARC-mapped URI entry
+    SELECT  INTO uri_count COUNT(*)
+      FROM  asset.uri_call_number_map m
+            JOIN asset.call_number cn ON (m.call_number = cn.id)
+      WHERE cn.record = source_record;
+
+    IF uri_count > 0 THEN
+        
+        -- This returns more nodes than you might expect:
+        -- 7 instead of 1 for an 856 with $u $y $9
+        SELECT  COUNT(*) INTO counter
+          FROM  oils_xpath_table(
+                    'id',
+                    'marc',
+                    'biblio.record_entry',
+                    '//*[@tag="856"]',
+                    'id=' || source_record
+                ) as t(i int,c text);
+    
+        FOR i IN 1 .. counter LOOP
+            SELECT  '<datafield xmlns="http://www.loc.gov/MARC21/slim"' || 
+            ' tag="856"' ||
+            ' ind1="' || FIRST(ind1) || '"'  ||
+            ' ind2="' || FIRST(ind2) || '">' ||
+                        STRING_AGG(
+                            '<subfield code="' || subfield || '">' ||
+                            regexp_replace(
+                                regexp_replace(
+                                    regexp_replace(data,'&','&amp;','g'),
+                                    '>', '&gt;', 'g'
+                                ),
+                                '<', '&lt;', 'g'
+                            ) || '</subfield>', ''
+                        ) || '</datafield>' INTO uri_datafield
+              FROM  oils_xpath_table(
+                        'id',
+                        'marc',
+                        'biblio.record_entry',
+                        '//*[@tag="856"][position()=' || i || ']/@ind1|' ||
+                        '//*[@tag="856"][position()=' || i || ']/@ind2|' ||
+                        '//*[@tag="856"][position()=' || i || ']/*/@code|' ||
+                        '//*[@tag="856"][position()=' || i || ']/*[@code]',
+                        'id=' || source_record
+                    ) as t(id int,ind1 text, ind2 text,subfield text,data text);
+
+            -- As most of the results will be NULL, protect against NULLifying
+            -- the valid content that we do generate
+            uri_text := uri_text || COALESCE(uri_datafield, '');
+        END LOOP;
+
+        IF uri_text <> '' THEN
+            UPDATE  biblio.record_entry
+              SET   marc = regexp_replace(marc,'(</[^>]*record>)', uri_text || E'\\1')
+              WHERE id = target_record;
+        END IF;
+
+    END IF;
+
+    -- Find and move metarecords to the target record
+    SELECT    INTO metarec *
+      FROM    metabib.metarecord
+      WHERE    master_record = source_record;
+
+    IF FOUND THEN
+        UPDATE    metabib.metarecord
+          SET    master_record = target_record,
+            mods = NULL
+          WHERE    id = metarec.id;
+
+        moved_objects := moved_objects + 1;
+    END IF;
+
+    -- Find call numbers attached to the source ...
+    FOR source_cn IN SELECT * FROM asset.call_number WHERE record = source_record LOOP
+
+        SELECT    INTO target_cn *
+          FROM    asset.call_number
+          WHERE    label = source_cn.label
+            AND prefix = source_cn.prefix
+            AND suffix = source_cn.suffix
+            AND owning_lib = source_cn.owning_lib
+            AND record = target_record
+            AND NOT deleted;
+
+        -- ... and if there's a conflicting one on the target ...
+        IF FOUND THEN
+
+            -- ... move the copies to that, and ...
+            UPDATE    asset.copy
+              SET    call_number = target_cn.id
+              WHERE    call_number = source_cn.id;
+
+            -- ... move V holds to the move-target call number
+            FOR hold IN SELECT * FROM action.hold_request WHERE target = source_cn.id AND hold_type = 'V' LOOP
+        
+                UPDATE    action.hold_request
+                  SET    target = target_cn.id
+                  WHERE    id = hold.id;
+        
+                moved_objects := moved_objects + 1;
+            END LOOP;
+        
+            UPDATE asset.call_number SET deleted = TRUE WHERE id = source_cn.id;
+
+        -- ... if not ...
+        ELSE
+            -- ... just move the call number to the target record
+            UPDATE    asset.call_number
+              SET    record = target_record
+              WHERE    id = source_cn.id;
+        END IF;
+
+        moved_objects := moved_objects + 1;
+    END LOOP;
+
+    -- Find T holds targeting the source record ...
+    FOR hold IN SELECT * FROM action.hold_request WHERE target = source_record AND hold_type = 'T' LOOP
+
+        -- ... and move them to the target record
+        UPDATE    action.hold_request
+          SET    target = target_record
+          WHERE    id = hold.id;
+
+        moved_objects := moved_objects + 1;
+    END LOOP;
+
+    -- Find serial records targeting the source record ...
+    FOR ser_rec IN SELECT * FROM serial.record_entry WHERE record = source_record LOOP
+        -- ... and move them to the target record
+        UPDATE    serial.record_entry
+          SET    record = target_record
+          WHERE    id = ser_rec.id;
+
+        moved_objects := moved_objects + 1;
+    END LOOP;
+
+    -- Find serial subscriptions targeting the source record ...
+    FOR ser_sub IN SELECT * FROM serial.subscription WHERE record_entry = source_record LOOP
+        -- ... and move them to the target record
+        UPDATE    serial.subscription
+          SET    record_entry = target_record
+          WHERE    id = ser_sub.id;
+
+        moved_objects := moved_objects + 1;
+    END LOOP;
+
+    -- Find booking resource types targeting the source record ...
+    FOR booking IN SELECT * FROM booking.resource_type WHERE record = source_record LOOP
+        -- ... and move them to the target record
+        UPDATE    booking.resource_type
+          SET    record = target_record
+          WHERE    id = booking.id;
+
+        moved_objects := moved_objects + 1;
+    END LOOP;
+
+    -- Find acq lineitems targeting the source record ...
+    FOR acq_lineitem IN SELECT * FROM acq.lineitem WHERE eg_bib_id = source_record LOOP
+        -- ... and move them to the target record
+        UPDATE    acq.lineitem
+          SET    eg_bib_id = target_record
+          WHERE    id = acq_lineitem.id;
+
+        moved_objects := moved_objects + 1;
+    END LOOP;
+
+    -- Find acq user purchase requests targeting the source record ...
+    FOR acq_request IN SELECT * FROM acq.user_request WHERE eg_bib = source_record LOOP
+        -- ... and move them to the target record
+        UPDATE    acq.user_request
+          SET    eg_bib = target_record
+          WHERE    id = acq_request.id;
+
+        moved_objects := moved_objects + 1;
+    END LOOP;
+
+    -- Find parts attached to the source ...
+    FOR source_part IN SELECT * FROM biblio.monograph_part WHERE record = source_record LOOP
+
+        SELECT    INTO target_part *
+          FROM    biblio.monograph_part
+          WHERE    label = source_part.label
+            AND record = target_record;
+
+        -- ... and if there's a conflicting one on the target ...
+        IF FOUND THEN
+
+            -- ... move the copy-part maps to that, and ...
+            UPDATE    asset.copy_part_map
+              SET    part = target_part.id
+              WHERE    part = source_part.id;
+
+            -- ... move P holds to the move-target part
+            FOR hold IN SELECT * FROM action.hold_request WHERE target = source_part.id AND hold_type = 'P' LOOP
+        
+                UPDATE    action.hold_request
+                  SET    target = target_part.id
+                  WHERE    id = hold.id;
+        
+                moved_objects := moved_objects + 1;
+            END LOOP;
+
+        -- ... if not ...
+        ELSE
+            -- ... just move the part to the target record
+            UPDATE    biblio.monograph_part
+              SET    record = target_record
+              WHERE    id = source_part.id;
+        END IF;
+
+        moved_objects := moved_objects + 1;
+    END LOOP;
+
+    -- Find multi_home items attached to the source ...
+    FOR multi_home IN SELECT * FROM biblio.peer_bib_copy_map WHERE peer_record = source_record LOOP
+        -- ... and move them to the target record
+        UPDATE    biblio.peer_bib_copy_map
+          SET    peer_record = target_record
+          WHERE    id = multi_home.id;
+
+        moved_objects := moved_objects + 1;
+    END LOOP;
+
+    -- And delete mappings where the item's home bib was merged with the peer bib
+    DELETE FROM biblio.peer_bib_copy_map WHERE peer_record = (
+        SELECT (SELECT record FROM asset.call_number WHERE id = call_number)
+        FROM asset.copy WHERE id = target_copy
+    );
+
+    -- Apply merge tracking
+    UPDATE biblio.record_entry 
+        SET merge_date = NOW() WHERE id = target_record;
+
+    UPDATE biblio.record_entry
+        SET merge_date = NOW(), merged_to = target_record
+        WHERE id = source_record;
+
+    -- replace book bag entries of source_record with target_record
+    UPDATE container.biblio_record_entry_bucket_item
+        SET target_biblio_record_entry = target_record
+        WHERE bucket IN (SELECT id FROM container.biblio_record_entry_bucket WHERE btype = 'bookbag')
+        AND target_biblio_record_entry = source_record;
+
+    -- Finally, "delete" the source record
+    UPDATE biblio.record_entry SET active = FALSE WHERE id = source_record;
+    DELETE FROM biblio.record_entry WHERE id = source_record;
+
+    -- That's all, folks!
+    RETURN moved_objects;
+END;
+$func$ LANGUAGE plpgsql;
+
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1294', :eg_version); -- mmorgan / tlittle / JBoyer
+
+INSERT INTO config.workstation_setting_type (name, grp, datatype, label)
+VALUES (
+    'eg.grid.admin.local.container.carousel_org_unit', 'gui', 'object',
+    oils_i18n_gettext(
+        'eg.grid.admin.local.container.carousel_org_unit',
+        'Grid Config: eg.grid.admin.local.container.carousel_org_unit',
+        'cwst', 'label'
+    )
+), (
+    'eg.grid.admin.container.carousel', 'gui', 'object',
+    oils_i18n_gettext(
+        'eg.grid.admin.container.carousel',
+        'Grid Config: eg.grid.admin.container.carousel',
+        'cwst', 'label'
+    )
+), (
+    'eg.grid.admin.server.config.carousel_type', 'gui', 'object',
+    oils_i18n_gettext(
+        'eg.grid.admin.server.config.carousel_type',
+        'Grid Config: eg.grid.admin.server.config.carousel_type',
+        'cwst', 'label'
+    )
+);
+
+
+SELECT evergreen.upgrade_deps_block_check('1302', :eg_version);
+
+UPDATE config.org_unit_setting_type
+    SET description = oils_i18n_gettext(
+        'ui.circ.items_out.longoverdue',
+        'Value is a numeric code, describing: A. In which tab ("Items Checked Out", '||
+        'or "Other/Special Circulations") the circulation '||
+        'should appear while checked out, and B. Whether the circulation should '||
+        'continue to appear in the "Other" tab when checked in with '||
+        'outstanding fines.  '||
+        '1 = (A) "Items", (B) "Other".  2 = (A) "Other", (B) "Other".  ' ||
+        '5 = (A) "Items", (B) do not display.  6 = (A) "Other", (B) do not display.',
+        'coust',
+        'description'
+    )
+    WHERE name = 'ui.circ.items_out.longoverdue';
+
+UPDATE config.org_unit_setting_type
+    set description = oils_i18n_gettext(
+        'ui.circ.items_out.lost',
+        'Value is a numeric code, describing: A. In which tab ("Items Checked Out", '||
+        'or "Other/Special Circulations") the circulation '||
+        'should appear while checked out, and B. Whether the circulation should '||
+        'continue to appear in the "Other" tab when checked in with '||
+        'outstanding fines.  '||
+        '1 = (A) "Items", (B) "Other".  2 = (A) "Other", (B) "Other".  ' ||
+        '5 = (A) "Items", (B) do not display.  6 = (A) "Other", (B) do not display.',
+        'coust',
+        'description'
+    )
+    WHERE name = 'ui.circ.items_out.lost';
+
+UPDATE config.org_unit_setting_type
+    set description = oils_i18n_gettext(
+        'ui.circ.items_out.claimsreturned',
+        'Value is a numeric code, describing: A. In which tab ("Items Checked Out", '||
+        'or "Other/Special Circulations") the circulation '||
+        'should appear while checked out, and B. Whether the circulation should '||
+        'continue to appear in the "Other" tab when checked in with '||
+        'outstanding fines.  '||
+        '1 = (A) "Items", (B) "Other".  2 = (A) "Other", (B) "Other".  ' ||
+        '5 = (A) "Items", (B) do not display.  6 = (A) "Other", (B) do not display.',
+        'coust',
+        'description'
+    )
+    WHERE name = 'ui.circ.items_out.claimsreturned';
+
+
+SELECT evergreen.upgrade_deps_block_check('1303', :eg_version);
+
+DROP INDEX authority.authority_full_rec_value_index;
+CREATE INDEX authority_full_rec_value_index ON authority.full_rec (SUBSTRING(value FOR 1024));
+
+DROP INDEX authority.authority_full_rec_value_tpo_index;
+CREATE INDEX authority_full_rec_value_tpo_index ON authority.full_rec (SUBSTRING(value FOR 1024) text_pattern_ops);
+
+
+COMMIT;
+
+-- Update auditor tables to catch changes to source tables.
+--   Can be removed/skipped if there were no schema changes.
+SELECT auditor.update_auditors();
index b2b87b6..b17a31c 100644 (file)
@@ -1,7 +1,7 @@
 <html><head><script></script></head><body onload="var x = document.getElementById('version'); var version ='/xul/server/'.split(/\//)[2]; if (version == 'server') { version = 'versionless debug build'; } x.appendChild(document.createTextNode(version));">
 <h1 style="text-decoration: underline">Evergreen</h1>
 <p>Target Server ID: <span id="version"></span></p>
-<p>$HeadURL$</p>
+<p>http://git.evergreen-ils.org/?p=Evergreen.git;a=shortlog;h=refs/heads/tags/rel_3_7_2</p>
 <h2>What is Evergreen?</h2>
 <blockquote>
 <p>
index 0613a13..ef15f06 100644 (file)
@@ -11,7 +11,7 @@ pref("toolkit.singletonWindowType", "eg_main");
 pref("open-ils.enable_join_tabs", true);
 
 // We'll use this one to help brand some build information into the client, and rely on subversion keywords
-pref("open-ils.repository.headURL","$HeadURL$");
+pref("open-ils.repository.headURL","http://git.evergreen-ils.org/?p=Evergreen.git;a=shortlog;h=refs/heads/tags/rel_3_7_2");
 pref("open-ils.repository.author","$Author$");
 pref("open-ils.repository.revision","$Revision$");
 pref("open-ils.repository.date","$Date$");
index a954357..fe5c988 100644 (file)
@@ -3,7 +3,7 @@
 ; HM NIS Edit Wizard helper defines
 ; Old versions of makensis don't like this, moved to Makefile
 ;!define /file PRODUCT_VERSION "client/VERSION"
-!define PRODUCT_TAG "Master"
+!define PRODUCT_TAG "3.7"
 !define PRODUCT_INSTALL_TAG "${PRODUCT_TAG}"
 !define UI_IMAGESET "beta"
 ;!define UI_IMAGESET "release"
diff --git a/README b/README
deleted file mode 120000 (symlink)
index 1486a8d6764f2981a61f67869b6c4a2bee76df52..0000000000000000000000000000000000000000
--- a/README
+++ /dev/null
@@ -1 +0,0 @@
-docs/modules/installation/pages/server_installation.adoc
\ No newline at end of file
diff --git a/README b/README
new file mode 100644 (file)
index 0000000000000000000000000000000000000000..694dc0663d92880967de108b5d3862403d1184de
--- /dev/null
+++ b/README
@@ -0,0 +1,662 @@
+= Installing the Evergreen server =
+:toc:
+
+== Preamble: referenced user accounts ==
+
+In subsequent sections, we will refer to a number of different accounts, as
+follows:
+
+  * Linux user accounts:
+    ** The *user* Linux account is the account that you use to log onto the
+       Linux system as a regular user.
+    ** The *root* Linux account is an account that has system administrator
+       privileges. On Debian you can switch to this account from
+       your *user* account by issuing the `su -` command and entering the
+       password for the *root* account when prompted. On Ubuntu you can switch
+       to this account from your *user* account using the `sudo su -` command
+       and entering the password for your *user* account when prompted.
+    ** The *opensrf* Linux account is an account that you create when installing
+       OpenSRF. You can switch to this account from the *root* account by
+       issuing the `su - opensrf` command.
+    ** The *postgres* Linux account is created automatically when you install
+       the PostgreSQL database server. You can switch to this account from the
+       *root* account by issuing the `su - postgres` command.
+  * PostgreSQL user accounts:
+    ** The *evergreen* PostgreSQL account is a superuser account that you will
+       create to connect to the PostgreSQL database server.
+  * Evergreen administrator account:
+    ** The *egadmin* Evergreen account is an administrator account for
+       Evergreen that you will use to test connectivity and configure your
+       Evergreen instance.
+
+== Preamble: developer instructions ==
+
+[NOTE]
+Skip this section if you are using an official release tarball downloaded
+from http://evergreen-ils.org/egdownloads
+
+Developers working directly with the source code from the Git repository,
+rather than an official release tarball, must perform one step before they 
+can proceed with the `./configure` step.
+
+As the *user* Linux account, issue the following command in the Evergreen
+source directory to generate the configure script and Makefiles:
+
+[source, bash]
+------------------------------------------------------------------------------
+autoreconf -i
+------------------------------------------------------------------------------
+
+== Installing prerequisites ==
+
+  * **PostgreSQL**: The minimum supported version is 9.6.
+  * **Linux**: Evergreen has been tested on 
+    Debian Buster (10), 
+    Debian Stretch (9), 
+    Debian Jessie (8),
+    Ubuntu Focal Fossa (20.04),
+    and Ubuntu Bionic Beaver (18.04).
+    If you are running an older version of these distributions, you may want 
+    to upgrade before upgrading Evergreen. For instructions on upgrading these
+    distributions, visit the Debian or Ubuntu websites.
+  * **OpenSRF**: The minimum supported version of OpenSRF is 3.2.0.
+
+
+Evergreen has a number of prerequisite packages that must be installed
+before you can successfully configure, compile, and install Evergreen.
+
+1. Begin by installing the most recent version of OpenSRF (3.2.0 or later).
+   You can download OpenSRF releases from http://evergreen-ils.org/opensrf-downloads/
++
+2. Issue the following commands as the *root* Linux account to install
+   prerequisites using the `Makefile.install` prerequisite installer,
+   substituting `debian-buster`,`debian-stretch`,`debian-jessie`,`ubuntu-focal`,
+   or `ubuntu-bionic` for <osname> below:
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>
+------------------------------------------------------------------------------
++
+[[optional_developer_additions]]
+3. OPTIONAL: Developer additions
++
+To perform certain developer tasks from a Git source code checkout, 
+including the testing of the Angular web client components,
+additional packages may be required.  As the *root* Linux account:
++
+ * To install packages needed for retrieving and managing web dependencies,
+   use the <osname>-developer Makefile.install target.  Currently, 
+   this is only needed for building and installing the web
+   staff client.
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>-developer
+------------------------------------------------------------------------------
++
+ * To install packages required for building Evergreen translations, use
+   the <osname>-translator Makefile.install target.
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>-translator
+------------------------------------------------------------------------------
++
+ * To install packages required for building Evergreen release bundles, use
+   the <osname>-packager Makefile.install target.
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>-packager
+------------------------------------------------------------------------------
+
+== Extra steps for web staff client ==
+
+[NOTE]
+Skip this entire section if you are using an official release tarball downloaded
+from http://evergreen-ils.org/downloads. Otherwise, ensure you have installed the
+xref:#optional_developer_additions[optional developer additions] before proceeding.
+
+[[install_files_for_web_staff_client]]
+=== Install AngularJS files for web staff client ===
+
+1. Building, Testing, Minification: The remaining steps all take place within
+   the staff JS web root:
++
+[source,sh]
+------------------------------------------------------------------------------
+cd $EVERGREEN_ROOT/Open-ILS/web/js/ui/default/staff/
+------------------------------------------------------------------------------
++
+2. Install Project-local Dependencies. npm inspects the 'package.json' file
+   for dependencies and fetches them from the Node package network.
++
+[source,sh]
+------------------------------------------------------------------------------
+npm install   # fetch JS dependencies
+------------------------------------------------------------------------------
++
+3. Run the build script.
++
+[source,sh]
+------------------------------------------------------------------------------
+# build, concat+minify
+npm run build-prod
+------------------------------------------------------------------------------
++
+4. OPTIONAL: Test web client code if the <osname>-developer packages were installed.
+   CHROME_BIN should be set to the path to chrome or chromimum, e.g.,
+   `/usr/bin/chromium`:
++
+[source,sh]
+------------------------------------------------------------------------------
+CHROME_BIN=/path/to/chrome npm run test
+------------------------------------------------------------------------------
+
+[[install_files_for_angular_web_staff_client]]
+=== Install Angular files for web staff client ===
+
+1. Building, Testing, Minification: The remaining steps all take place within
+   the Angular staff root:
++
+[source,sh]
+------------------------------------------------------------------------------
+cd $EVERGREEN_ROOT/Open-ILS/src/eg2/
+------------------------------------------------------------------------------
++
+2. Install Project-local Dependencies. npm inspects the 'package.json' file
+   for dependencies and fetches them from the Node package network.
++
+[source,sh]
+------------------------------------------------------------------------------
+npm install   # fetch JS dependencies
+------------------------------------------------------------------------------
++
+3. Run the build script.
++
+[source,sh]
+------------------------------------------------------------------------------
+# build and run tests
+ng build --prod
+------------------------------------------------------------------------------
++
+4. OPTIONAL: Test eg2 web client code if the <osname>-developer packages were installed:
+   CHROME_BIN should be set to the path to chrome or chromimum, e.g.,
+   `/usr/bin/chromium`:
++
+[source,sh]
+------------------------------------------------------------------------------
+CHROME_BIN=/path/to/chrome npm run test
+------------------------------------------------------------------------------
+
+[[install_opac_deps]]
+=== Install OPAC skin dependencies ===
+
+1. The following steps take place within the OPAC dependencies root:
++
+[source,sh]
+------------------------------------------------------------------------------
+cd $EVERGREEN_ROOT/Open-ILS/web/opac/deps
+------------------------------------------------------------------------------
++
+2. Install Project-local Dependencies. npm inspects the 'package.json' file
+   for dependencies and fetches them from the Node package network.
++
+[source,sh]
+------------------------------------------------------------------------------
+npm install   # fetch JS and CSS dependencies
+------------------------------------------------------------------------------
++
+Note that there is no build step.
+
+== Configuration and compilation instructions ==
+
+For the time being, we are still installing everything in the `/openils/`
+directory. From the Evergreen source directory, issue the following commands as
+the *user* Linux account to configure and build Evergreen:
+
+[source, bash]
+------------------------------------------------------------------------------
+PATH=/openils/bin:$PATH ./configure --prefix=/openils --sysconfdir=/openils/conf
+make
+------------------------------------------------------------------------------
+
+These instructions assume that you have also installed OpenSRF under `/openils/`.
+If not, please adjust PATH as needed so that the Evergreen `configure` script
+can find `osrf_config`.
+
+== Installation instructions ==
+
+1. Once you have configured and compiled Evergreen, issue the following
+   command as the *root* Linux account to install Evergreen and copy
+   example configuration files to `/openils/conf`.
++
+[source, bash]
+------------------------------------------------------------------------------
+make install
+------------------------------------------------------------------------------
+
+== Change ownership of the Evergreen files ==
+
+All files in the `/openils/` directory and subdirectories must be owned by the
+`opensrf` user. Issue the following command as the *root* Linux account to
+change the ownership on the files:
+
+[source, bash]
+------------------------------------------------------------------------------
+chown -R opensrf:opensrf /openils
+------------------------------------------------------------------------------
+
+== Run ldconfig ==
+
+On Ubuntu 18.04 / 20.04 or Debian Stretch / Buster, run the following command as the root user:
+
+[source, bash]
+------------------------------------------------------------------------------
+ldconfig
+------------------------------------------------------------------------------
+
+== Additional Instructions for Developers ==
+
+[NOTE]
+Skip this section if you are using an official release tarball downloaded
+from http://evergreen-ils.org/egdownloads
+
+Developers working directly with the source code from the Git repository,
+rather than an official release tarball, need to install the Dojo Toolkit
+set of JavaScript libraries. The appropriate version of Dojo is included in
+Evergreen release tarballs. Developers should install the Dojo 1.3.3 version
+of Dojo by issuing the following commands as the *opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+wget http://download.dojotoolkit.org/release-1.3.3/dojo-release-1.3.3.tar.gz
+tar -C /openils/var/web/js -xzf dojo-release-1.3.3.tar.gz
+cp -r /openils/var/web/js/dojo-release-1.3.3/* /openils/var/web/js/dojo/.
+------------------------------------------------------------------------------
+
+
+== Configure the Apache Web server ==
+
+. Use the example configuration files to configure your Web server for 
+the Evergreen catalog, web staff client, Web services, and administration
+interfaces. Issue the following commands as the *root* Linux account:
++
+[source,bash]
+------------------------------------------------------------------------------------
+cp Open-ILS/examples/apache_24/eg_24.conf       /etc/apache2/sites-available/eg.conf
+cp Open-ILS/examples/apache_24/eg_vhost_24.conf /etc/apache2/eg_vhost.conf
+cp Open-ILS/examples/apache_24/eg_startup      /etc/apache2/
+# Now set up SSL
+mkdir /etc/apache2/ssl
+cd /etc/apache2/ssl
+------------------------------------------------------------------------------------
++
+. The `openssl` command cuts a new SSL key for your Apache server. For a
+production server, you should purchase a signed SSL certificate, but you can
+just use a self-signed certificate and accept the warnings in the
+and browser during testing and development. Create an SSL key for the Apache
+server by issuing the following command as the *root* Linux account:
++
+[source,bash]
+------------------------------------------------------------------------------
+openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
+------------------------------------------------------------------------------
++
+. As the *root* Linux account, edit the `eg.conf` file that you copied into
+place.
+  a. To enable access to the offline upload / execute interface from any
+     workstation on any network, make the following change (and note that
+     you *must* secure this for a production instance):
+     * Replace `Require host 10.0.0.0/8` with `Require all granted`
+. Change the user for the Apache server.
+  * As the *root* Linux account, edit
+    `/etc/apache2/envvars`.  Change `export APACHE_RUN_USER=www-data` to 
+    `export APACHE_RUN_USER=opensrf`.
+. As the *root* Linux account, configure Apache with KeepAlive settings
+  appropriate for Evergreen. Higher values can improve the performance of a
+  single client by allowing multiple requests to be sent over the same TCP
+  connection, but increase the risk of using up all available Apache child
+  processes and memory.
+  * Edit `/etc/apache2/apache2.conf`.
+    a. Change `KeepAliveTimeout` to `1`.
+    b. Change `MaxKeepAliveRequests` to `100`.
+. As the *root* Linux account, configure the prefork module to start and keep
+  enough Apache servers available to provide quick responses to clients without
+  running out of memory. The following settings are a good starting point for a
+  site that exposes the default Evergreen catalog to the web:
++
+.`/etc/apache2/mods-available/mpm_prefork.conf`
+[source,bash]
+------------------------------------------------------------------------------
+<IfModule mpm_prefork_module>
+   StartServers            15
+   MinSpareServers          5
+   MaxSpareServers         15
+   MaxRequestWorkers       75
+   MaxConnectionsPerChild 500
+</IfModule>
+------------------------------------------------------------------------------
++
+. As the *root* user, enable the mpm_prefork module:
++
+[source,bash]
+------------------------------------------------------------------------------
+a2dismod mpm_event
+a2enmod mpm_prefork
+------------------------------------------------------------------------------
++
+. As the *root* Linux account, enable the Evergreen site:
++
+[source,bash]
+------------------------------------------------------------------------------
+a2dissite 000-default  # OPTIONAL: disable the default site (the "It Works" page)
+a2ensite eg.conf
+------------------------------------------------------------------------------
++
+. As the *root* Linux account, enable Apache to write
+   to the lock directory; this is currently necessary because Apache
+   is running as the `opensrf` user:
++
+[source,bash]
+------------------------------------------------------------------------------
+chown opensrf /var/lock/apache2
+------------------------------------------------------------------------------
+
+Learn more about additional Apache options in the following sections:
+
+  * xref:admin:apache_rewrite_tricks.adoc#apache_rewrite_tricks[Apache Rewrite Tricks]
+  * xref:admin:apache_access_handler.adoc#apache_access_handler_perl_module[Apache Access Handler Perl Module]
+
+== Configure OpenSRF for the Evergreen application ==
+
+There are a number of example OpenSRF configuration files in `/openils/conf/`
+that you can use as a template for your Evergreen installation. Issue the
+following commands as the *opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+cp -b /openils/conf/opensrf_core.xml.example /openils/conf/opensrf_core.xml
+cp -b /openils/conf/opensrf.xml.example /openils/conf/opensrf.xml
+------------------------------------------------------------------------------
+
+When you installed OpenSRF, you created four Jabber users on two
+separate domains and edited the `opensrf_core.xml` file accordingly. Please
+refer back to the OpenSRF README and, as the *opensrf* Linux account, edit the
+Evergreen version of the `opensrf_core.xml` file using the same Jabber users
+and domains as you used while installing and testing OpenSRF.
+
+[NOTE]
+The `-b` flag tells the `cp` command to create a backup version of the
+destination file. The backup version of the destination file has a tilde (`~`)
+appended to the file name, so if you have forgotten the Jabber users and
+domains, you can retrieve the settings from the backup version of the files.
+
+`eg_db_config`, described in xref:#creating_the_evergreen_database[Creating the Evergreen database], sets the database connection information in `opensrf.xml` for you.
+
+=== Configure action triggers for the Evergreen application ===
+_Action Triggers_ provide hooks for the system to perform actions when a given
+event occurs; for example, to generate reminder or overdue notices, the
+`checkout.due` hook is processed and events are triggered for potential actions
+if there is no checkin time.
+
+To enable the default set of hooks, issue the following command as the
+*opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+cp -b /openils/conf/action_trigger_filters.json.example /openils/conf/action_trigger_filters.json
+------------------------------------------------------------------------------
+
+For more information about configuring and running action triggers, see
+xref:admin:actiontriggers_process.adoc#processing_action_triggers[Notifications / Action Triggers].
+
+[[creating_the_evergreen_database]]
+== Creating the Evergreen database ==
+
+=== Setting up the PostgreSQL server ===
+
+For production use, most libraries install the PostgreSQL database server on a
+dedicated machine. Therefore, by default, the `Makefile.install` prerequisite
+installer does *not* install the PostgreSQL 9 database server that is required
+by every Evergreen system. You can install the packages required by Debian or
+Ubuntu on the machine of your choice using the following commands as the
+*root* Linux account:
+
+. Installing PostgreSQL server packages
+
+Each OS build target provides the postgres server installation packages
+required for each operating system.  To install Postgres server packages, 
+use the make target 'postgres-server-<OSTYPE>'.  Choose the most appropriate 
+command below based on your operating system. This will install PostgreSQL 9.6,
+the minimum supported version.
+
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-buster
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-stretch
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-jessie
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-bionic
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-focal
+------------------------------------------------------------------------------
+
+To install PostgreSQL version 10, use the following command for your operating
+system:
+
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-buster-10
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-stretch-10
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-jessie-10
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-bionic-10
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-focal-10
+------------------------------------------------------------------------------
+
+For a standalone PostgreSQL server, install the following Perl modules for your
+distribution as the *root* Linux account:
+
+.(Debian and Ubuntu) 
+No extra modules required for these distributions.
+
+You need to create a PostgreSQL superuser to create and access the database.
+Issue the following command as the *postgres* Linux account to create a new
+PostgreSQL superuser named `evergreen`. When prompted, enter the new user's
+password:
+
+[source, bash]
+------------------------------------------------------------------------------
+createuser -s -P evergreen
+------------------------------------------------------------------------------
+
+.Enabling connections to the PostgreSQL database
+
+Your PostgreSQL database may be configured by default to prevent connections,
+for example, it might reject attempts to connect via TCP/IP or from other
+servers. To enable TCP/IP connections from localhost, check your `pg_hba.conf`
+file, found in the `/etc/postgresql/` directory on Debian and Ubuntu.
+A simple way to enable TCP/IP
+connections from localhost to all databases with password authentication, which
+would be suitable for a test install of Evergreen on a single server, is to
+ensure the file contains the following entries _before_ any "host ... ident"
+entries:
+
+------------------------------------------------------------------------------
+host    all             all             ::1/128                 md5
+host    all             all             127.0.0.1/32            md5
+------------------------------------------------------------------------------
+
+When you change the `pg_hba.conf` file, you will need to reload PostgreSQL to
+make the changes take effect.  For more information on configuring connectivity
+to PostgreSQL, see
+http://www.postgresql.org/docs/devel/static/auth-pg-hba-conf.html
+
+=== Creating the Evergreen database and schema ===
+
+Once you have created the *evergreen* PostgreSQL account, you also need to
+create the database and schema, and configure your configuration files to point
+at the database server. Issue the following command as the *root* Linux account
+from inside the Evergreen source directory, replacing <user>, <password>,
+<hostname>, <port>, and <dbname> with the appropriate values for your
+PostgreSQL database (where <user> and <password> are for the *evergreen*
+PostgreSQL account you just created), and replace <admin-user> and <admin-pass>
+with the values you want for the *egadmin* Evergreen administrator account:
+
+[source, bash]
+------------------------------------------------------------------------------
+perl Open-ILS/src/support-scripts/eg_db_config --update-config \
+       --service all --create-database --create-schema --create-offline \
+       --user <user> --password <password> --hostname <hostname> --port <port> \
+       --database <dbname> --admin-user <admin-user> --admin-pass <admin-pass>
+------------------------------------------------------------------------------
+
+This creates the database and schema and configures all of the services in
+your `/openils/conf/opensrf.xml` configuration file to point to that database.
+It also creates the configuration files required by the Evergreen `cgi-bin`
+administration scripts, and sets the user name and password for the *egadmin*
+Evergreen administrator account to your requested values.
+
+You can get a complete set of options for `eg_db_config` by passing the
+`--help` parameter.
+
+=== Loading sample data ===
+
+If you add the `--load-all-sample` parameter to the `eg_db_config` command,
+a set of authority and bibliographic records, call numbers, copies, staff
+and regular users, and transactions will be loaded into your target
+database. This sample dataset is commonly referred to as the _concerto_
+sample data, and can be useful for testing out Evergreen functionality and
+for creating problem reports that developers can easily recreate with their
+own copy of the _concerto_ sample data.
+
+=== Creating the database on a remote server ===
+
+In a production instance of Evergreen, your PostgreSQL server should be
+installed on a dedicated server.
+
+==== PostgreSQL 9.6 and later ====
+
+To create the database instance on a remote database server running PostgreSQL
+9.6 or later, simply use the `--create-database` flag on `eg_db_config`.
+
+== Starting Evergreen ==
+
+1. As the *root* Linux account, start the `memcached` and `ejabberd` services
+(if they aren't already running):
++
+[source, bash]
+------------------------------------------------------------------------------
+/etc/init.d/ejabberd start
+/etc/init.d/memcached start
+------------------------------------------------------------------------------
++
+2. As the *opensrf* Linux account, start Evergreen. The `-l` flag in the
+following command is only necessary if you want to force Evergreen to treat the
+hostname as `localhost`; if you configured `opensrf.xml` using the real
+hostname of your machine as returned by `perl -ENet::Domain 'print
+Net::Domain::hostfqdn() . "\n";'`, you should not use the `-l` flag.
++
+[source, bash]
+------------------------------------------------------------------------------
+osrf_control -l --start-all
+------------------------------------------------------------------------------
++
+  ** If you receive the error message `bash: osrf_control: command not found`,
+     then your environment variable `PATH` does not include the `/openils/bin`
+     directory; this should have been set in the *opensrf* Linux account's
+     `.bashrc` configuration file. To manually set the `PATH` variable, edit the
+     configuration file `~/.bashrc` as the *opensrf* Linux account and add the
+     following line:
++
+[source, bash]
+------------------------------------------------------------------------------
+export PATH=$PATH:/openils/bin
+------------------------------------------------------------------------------
++
+3. As the *opensrf* Linux account, generate the Web files needed by the web staff
+   client and catalog and update the organization unit proximity (you need to do
+   this the first time you start Evergreen, and after that each time you change the library org unit configuration.
+):
++
+[source, bash]
+------------------------------------------------------------------------------
+autogen.sh
+------------------------------------------------------------------------------
++
+4. As the *root* Linux account, restart the Apache Web server:
++
+[source, bash]
+------------------------------------------------------------------------------
+/etc/init.d/apache2 restart
+------------------------------------------------------------------------------
++
+If the Apache Web server was running when you started the OpenSRF services, you
+might not be able to successfully log in to the OPAC or web staff client until the
+Apache Web server is restarted.
+
+== Testing connections to Evergreen ==
+
+Once you have installed and started Evergreen, test your connection to
+Evergreen via `srfsh`. As the *opensrf* Linux account, issue the following
+commands to start `srfsh` and try to log onto the Evergreen server using the
+*egadmin* Evergreen administrator user name and password that you set using the
+`eg_db_config` command:
+
+[source, bash]
+------------------------------------------------------------------------------
+/openils/bin/srfsh
+srfsh% login <admin-user> <admin-pass>
+------------------------------------------------------------------------------
+
+You should see a result like:
+
+    Received Data: "250bf1518c7527a03249858687714376"
+    ------------------------------------
+    Request Completed Successfully
+    Request Time in seconds: 0.045286
+    ------------------------------------
+
+    Received Data: {
+       "ilsevent":0,
+       "textcode":"SUCCESS",
+       "desc":" ",
+       "pid":21616,
+       "stacktrace":"oils_auth.c:304",
+       "payload":{
+          "authtoken":"e5f9827cc0f93b503a1cc66bee6bdd1a",
+          "authtime":420
+       }
+
+    }
+
+    ------------------------------------
+    Request Completed Successfully
+    Request Time in seconds: 1.336568
+    ------------------------------------
+[[install-troubleshooting-1]]
+If this does not work, it's time to do some troubleshooting.
+
+  * As the *opensrf* Linux account, run the `settings-tester.pl` script to see
+    if it finds any system configuration problems. The script is found at
+    `Open-ILS/src/support-scripts/settings-tester.pl` in the Evergreen source
+    tree.
+  * Follow the steps in the http://evergreen-ils.org/dokuwiki/doku.php?id=troubleshooting:checking_for_errors[troubleshooting guide].
+  * If you have faithfully followed the entire set of installation steps
+    listed here, you are probably extremely close to a working system.
+    Gather your configuration files and log files and contact the
+    http://evergreen-ils.org/communicate/mailing-lists/[Evergreen development 
+mailing list] for assistance before making any drastic changes to your system
+    configuration.
+
+== Getting help ==
+
+Need help installing or using Evergreen? Join the mailing lists at
+http://evergreen-ils.org/communicate/mailing-lists/ or contact us on the Freenode
+IRC network on the #evergreen channel.
+
+== License ==
+
+This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
+Unported License. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative
+Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
index f7da014..ac055c8 100644 (file)
@@ -20,7 +20,7 @@
 
 export PATH=${PATH}:/usr/sbin
 AC_PREREQ(2.61)
-AC_INIT(Open-ILS, trunk, open-ils-dev@list.georgialibraries.org)
+AC_INIT(Open-ILS, 3.7.2, open-ils-dev@list.georgialibraries.org)
 AC_CONFIG_SRCDIR([configure.ac])
 AC_CONFIG_MACRO_DIR([m4])
 AM_INIT_AUTOMAKE