-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 c48fd50647b9ce44757e23c47bc6fca6c5cc7bce
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Tue Nov 20 15:29:13 2018 -0500
+
+ Update upgrade docs for 3.2.2 release
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+16 16 docs/installation/server_upgrade.adoc
+
+commit 99bad0f721f2d09fad4ff22960a5987ec360d20c
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Mon Feb 24 12:09:57 2014 -0500
+
+ Bump OpenILS.pm version
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS.pm
+
+commit f364ec12cc94cd04f86de4df0dfef5ddb19c3c3b
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Tue Nov 20 15:23:07 2018 -0500
+
+ Translation updates - po files
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+4 4 build/i18n/po/circ/cs-CZ.po
+4 4 build/i18n/po/selfcheck.js/cs-CZ.po
+
+commit 27f2cb2e06d0b6d14d47727c8bac3c418b7fec7d
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Tue Nov 20 15:17:31 2018 -0500
+
+ Translation updates - newpot
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+14 14 build/i18n/po/tpac/tpac.pot
+82 82 build/i18n/po/webstaff/webstaff.pot
+
+commit 017679d0279fd113120c47d2a083b7554f878bed
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Tue Nov 20 13:50:27 2018 -0500
+
+ Release notes entry for LP#1804038
+
+ Also, add a missing contributor.
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+2 0 docs/RELEASE_NOTES_3_2.adoc
+
+commit 73667df4a369e91b523a0bce9064b6664a740e47
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Tue Nov 20 12:33:49 2018 -0500
+
+ LP#1804038 Fix-ups for older 'clense' functions
+
+ Way back when, we switched from a misspelled 'clense_ISO8601' to a
+ corrected 'cleanse_ISO8601' in OpenSRF. This function has again moved,
+ and is now part of OpenILS::Utils::DateTime, and is named
+ 'clean_ISO8601'. This was done as part of LP bug #1552778.
+
+ However, a few stragglers of the misspelling remained, so these were
+ missed when the big changeover occurred. This hopefully catches them
+ all!
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+ Signed-off-by: Jason Boyer <jboyer@library.in.gov>
+
+2 2 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Booking.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm
+
+commit 25debc65eb9b52129c72abecf1ea5da23421ebb3
+Author: kilsdonka <43423795+kilsdonka@users.noreply.github.com>
+Date: Tue Nov 20 09:50:54 2018 -0800
+
+ Docs: Multilingual search documentation
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+70 0 docs/admin/multilingual_search.adoc
+- - docs/media/multilingual_search1.png
+- - docs/media/multilingual_search2.PNG
+- - docs/media/multilingual_search3.PNG
+2 0 docs/root.adoc
+6 0 docs/root_staff_client_admin.adoc
+ create mode 100644 docs/admin/multilingual_search.adoc
+ create mode 100644 docs/media/multilingual_search1.png
+ create mode 100644 docs/media/multilingual_search2.PNG
+ create mode 100644 docs/media/multilingual_search3.PNG
+
+commit e82b6edf0d640e36804d5b25f090dff3f1050bd5
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Tue Nov 20 12:57:47 2018 -0500
+
+ Release notes entry for LP#1793154
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+2 0 docs/RELEASE_NOTES_3_2.adoc
+
+commit 8be497fa12f4c9da489b83039d522e540f66af4c
+Author: Jason Boyer <jboyer@library.in.gov>
+Date: Tue Nov 20 11:54:50 2018 -0500
+
+ LP1793154: Cancel Holds from OPAC Record
+
+ The name of the grid handler was misspelled
+ in the holds grid for records in the opac.
+ Swapping the location of the 'wide' part of
+ the function name will allow it to match up
+ with the functions available in the holds
+ grid module.
+
+ Signed-off-by: Jason Boyer <jboyer@library.in.gov>
+ Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+1 1 Open-ILS/src/templates/staff/cat/catalog/t_holds.tt2
+
+commit 964295edc98019e688ef8033f4ed85a75b848cb1
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Tue Nov 20 08:50:35 2018 -0800
+
+ Docs: documenting multiple emails in patron editor (LP1755625)
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+24 0 docs/admin/patron_registration.adoc
+12 0 docs/circulation/circulation_patron_records_web_client.adoc
+2 0 docs/root_staff_client_admin.adoc
+ create mode 100644 docs/admin/patron_registration.adoc
+
+commit 71a23d65f1f8ef6ee92c9f168751fbbcf6edc402
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Tue Nov 20 08:27:35 2018 -0800
+
+ Docs: release notes for 3.2.2
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+78 0 docs/RELEASE_NOTES_3_2.adoc
+
+commit 8ab48e237db39e5b30f8714155c289baf040b08b
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Tue Nov 20 08:18:34 2018 -0800
+
+ Docs: adding release notes for 3.1.8
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+74 0 docs/RELEASE_NOTES_3_1.adoc
+
+commit 095b59e2f3f9c5596c3156130267ac42794805ba
+Author: Ben Shum <ben@evergreener.net>
+Date: Tue Nov 20 09:18:05 2018 -0500
+
+ LP#1643709: Stamping upgrade scripts
+
+ Include placeholder 1137 for 3.1 version of the SQL function changed
+ vs. 1138 which contains the one for 3.2 and master and beyond.
+
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+9 0 Open-ILS/src/sql/Pg/upgrade/1137.function.global.purge-usr-on-merge-3.1.sql
+361 0 Open-ILS/src/sql/Pg/upgrade/1138.function.global.purge-usr-on-merge.sql
+0 361 Open-ILS/src/sql/Pg/upgrade/xxxx.function.global.purge-usr-on-merge.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1137.function.global.purge-usr-on-merge-3.1.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1138.function.global.purge-usr-on-merge.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/xxxx.function.global.purge-usr-on-merge.sql
+
+commit f4183e66b38ec08e325d59e0b9162dfd6cbb87d1
+Author: Rogan Hamby <rogan.hamby@gmail.com>
+Date: Fri Sep 14 09:25:57 2018 -0400
+
+ LP#1643709 User merge + purge pgtap test
+
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+25 0 Open-ILS/src/sql/Pg/t/lp1643709_purge_usrs_on_merge.pg
+ create mode 100644 Open-ILS/src/sql/Pg/t/lp1643709_purge_usrs_on_merge.pg
+
+commit 3edfc1d7b441145e020538b0e513da903111ce53
+Author: Rogan Hamby <rogan.hamby@gmail.com>
+Date: Fri Sep 14 08:05:12 2018 -0400
+
+ LP#1643709 purge users on merge instead of flag deleted
+
+ Purge merged user accounts.
+
+ Update the upgraded version of the usr_merge() db function to match
+ recnet changes in master.
+
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+1 1 Open-ILS/src/sql/Pg/999.functions.global.sql
+361 0 Open-ILS/src/sql/Pg/upgrade/xxxx.function.global.purge-usr-on-merge.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/xxxx.function.global.purge-usr-on-merge.sql
+
+commit ebe7726d9033e0c462baa443ab5977c48024a719
+Author: Jason Boyer <JBoyer@library.in.gov>
+Date: Fri Nov 2 12:33:10 2018 -0400
+
+ LP1801156: Add missing assets to 3.2 Offline mode
+
+ t_org_select was missing from the UpUp asset list,
+ causing offline mode to be non-functional when unable
+ to connect to the server.
+
+ Signed-off-by: Jason Boyer <JBoyer@library.in.gov>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+2 0 Open-ILS/src/templates/staff/base_js.tt2
+
+commit 7a0e6b686091e86413e69a6ebfff2f61b68e7f2f
+Author: Garry Collum <gcollum@gmail.com>
+Date: Sat Jun 16 14:13:22 2018 -0400
+
+ LP#1761242 Z39.50 Marc View Usability with Mobile Repsonsiveness
+
+ This patch changes the size of the image in the Z39.50 Marc View from large to
+ medium. It also incorporates bootstrap's media classes to present the Marc
+ record and the cover image side by side. If there is no image the marc record
+ display floats to the left of the modal. From a suggestion by Jane Sandbert, it
+ also hides the book cover image on small devices.
+
+ To test.
+ 1. Perform a search in z39.50. An LOC title search for "Cat in the Hat"
+ returms results of titles with and without images.
+ 2. View some of the titles in Marc View, noting the large image.
+ 3. Apply the patch.
+ 4. Perform the same search and view the results in Marc View.
+
+ Signed-off-by: Garry Collum <gcollum@gmail.com>
+ Signed-off-by: Janet Schrader <jschrader@cwmars.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+8 2 Open-ILS/src/templates/staff/cat/z3950/t_marc_html.tt2
+
+commit 1dbf4109ffffe66aba07648fabf103432b932b40
+Author: Jason Stephenson <jason@sigio.com>
+Date: Mon Sep 17 10:08:34 2018 -0400
+
+ Lp 1753813: Wrap all oils_persist:source_definitions in CDATA blocks.
+
+ For safety's sake, we add CDATA sections in all fm_ILD.xml
+ oils_persist:source_definition elements as show in the example at the
+ top of the IDL.
+
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+39 39 Open-ILS/examples/fm_IDL.xml
+
+commit 46bd9e31258ea34a3c3e843ff9febf47a000fea5
+Author: Ben Shum <ben@evergreener.net>
+Date: Sun Nov 18 22:06:21 2018 -0500
+
+ LP#1764542: Fixing upgrade script numbering
+
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+1 1 Open-ILS/src/sql/Pg/upgrade/1136.schema.lp1764542-mods33-update.sql
+
+commit e0c41ce17e4f51a2139ea4aad3e626f8b0b15a98
+Author: Ben Shum <ben@evergreener.net>
+Date: Sun Nov 18 21:58:38 2018 -0500
+
+ LP#1764542: Stamping upgrade script
+
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+13 0 Open-ILS/src/sql/Pg/upgrade/1136.schema.lp1764542-mods33-update.sql
+0 13 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.lp1764542-mods33-update.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1136.schema.lp1764542-mods33-update.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.lp1764542-mods33-update.sql
+
+commit 14b9dad9ce6f81b5d4088a315c64c67c809435f7
+Author: Chris Sharp <csharp@georgialibraries.org>
+Date: Mon Jun 4 13:10:31 2018 -0400
+
+ LP#1764542 - Update older sites to MODS 3.3
+
+ MODS 3.3 support was introduced in March 2009, but this
+ change was never included in an upgrade script. Older
+ sites on 3.1+ will need to apply this update to avoid scary
+ segmentation faults, and it should be harmless for newer
+ sites and desirable for those on 3.0 or older.
+
+ Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+13 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.lp1764542-mods33-update.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.lp1764542-mods33-update.sql
+
+commit 996c5e85555e2eb00ea80b44e741a5c4c484b877
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Thu Sep 20 11:00:22 2018 -0400
+
+ LP#1792621: Fix think-o in Hold Shelf Delay YAOUS test
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+
+commit 6056f30ed1b7db00f7559bcc6ab3c83c2312fcdf
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Mon Sep 17 10:19:34 2018 -0400
+
+ LP#1792621: Ignore deleted items on hold shelf
+
+ The hold shelf rewrite brought back an old behavioral bug where items deleted
+ while on the hold shelf continued to show on the hold shelf list. The most
+ recent behavior was to ignore those items, which this commit does. It also
+ addresses an adjacent issue where holds may show with "Hold Shelf Delay"
+ instead of "Ready For Pickup" in some cases.
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+2 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+1 0 Open-ILS/web/js/ui/default/staff/circ/holds/app.js
+
+commit fc0264346bacae7ccafee34c0155c13e53d55229
+Author: Jason Boyer <jboyer@library.in.gov>
+Date: Thu Nov 15 11:43:30 2018 -0500
+
+ LP1755625: Multiple emails in patron editor
+
+ Even though the HTML5 "email" input type allows multiple
+ addresses to be separated by commas there is nothing that
+ can be done to signal to Angular.js that this is ok; it
+ will only ever accept a single address. This patch forces
+ the type of the input tag to plain text so Angular will
+ rely on any supplied regex to verify the entry.
+
+ The ui.patron.edit.au.email.regex (Regex for email field on patron
+ registration) library setting can be used to control whether
+ one or multiple email addresses will be permitted on the
+ patron registration form.
+
+ To allow multiple addresses, that setting can be:
+
+ ^(?:(?:\b[^@,\s]+@[^@,\s]+\.[^@.,\s]+\b)(?:,\s?(?!$)|$))*$
+
+ To allow only a single address, use:
+
+ ^(?:\b[^@,\s]+@[^@,\s]+\.[^@.,\s]+\b)$
+
+ To test
+ -------
+ [1] In the web staff client, try to register a new patron, entering
+ multiple email addresseses in the email field separated by
+ commas.
+ [2] Note that the email field displays as invalid and the
+ record cannot be saved.
+ [3] Apply the patch and repeat step #1, This time, the email
+ field should accept multiple addresses.
+ [4] Set the Regex for email field on patron registration library
+ setting to the multiple-email form listed above. Reload
+ the patron registration form and verify that it will
+ continue to accept multiple email addresses but will not
+ accept entry that doesn't look like an email address.
+ [5] Set the library setting to the single-address value. Reload
+ the patron registration form; this time it should accept
+ a valid email address but not multiple ones.
+
+ Signed-off-by: Jason Boyer <jboyer@library.in.gov>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Cesar Velez <cesar.velez@equinoxinitiative.org>
+
+3 1 Open-ILS/src/templates/staff/circ/patron/t_edit.tt2
+
+commit 72ff895e86ddc16dcd5df42578d477517169fa59
+Author: Jeanette Lundgren <jlundgren@cwmars.org>
+Date: Wed Sep 12 15:52:21 2018 -0400
+
+ Docs: LP#1578719 Update DIG Attributions page
+
+ Signed-off-by: Jeanette Lundgren <jlundgren@cwmars.org>
+ Signed-off-by: Ben Shum <ben@evergreener.net>
+
+17 14 docs/shared/attributions.adoc
+
+commit 43c75ec072ece2d150ffb3a8a211bfc946785ad3
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Tue Nov 6 09:42:17 2018 -0500
+
+ LP#1797007 Grid cell tooltips apply to all cells (Ang)
+
+ Avoid excessive browser page re-flows, caused by checking cell
+ widths for rendering tooltips, by rendering tooltips for all cells
+ regardless of the size of the content.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jason Boyer <jboyer@library.in.gov>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+2 2 Open-ILS/src/eg2/src/app/share/grid/grid-body-cell.component.html
+2 34 Open-ILS/src/eg2/src/app/share/grid/grid-body-cell.component.ts
+
+commit c31bf958cd6db4c96811be8db6bb32b75e63c300
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Mon Nov 5 10:52:17 2018 -0500
+
+ LP#1797007 Grid cell tooltips apply to all cells
+
+ Avoid excessive browser page re-flows, caused by checking cell widths
+ for rendering tooltips, by rendering tooltips for all cells regardless
+ of the size of the content.
+
+ This reverts commit 1e9c0ab388a0697a1f099970240f2da21bfb5e1f.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jason Boyer <JBoyer@library.in.gov>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 4 Open-ILS/src/templates/staff/share/t_autogrid.tt2
+1 30 Open-ILS/web/js/ui/default/staff/services/grid.js
+
+commit 34613bd46cae4b228beaafcbd44846971c9179a9
+Author: Cesar Velez <cesar.velez@equinoxinitiative.org>
+Date: Wed Nov 7 11:09:10 2018 -0500
+
+ LP#1684202 - fix holdings grid refresh... bre_id array always be integers
+
+ For some strange reason the volcopy bchannel event data.records
+ would be an array of string integers or a array of ints depending
+ on whether you're adding or editing holdings. This addresses that
+ weirdness.
+
+ Signed-off by: Cesar Velez <cesar.velez@equinoxinitiative.org>
+
+ Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 262a1d35df4293be14f7ea876ab04e491c338a14
+Author: Cesar Velez <cesar.velez@equinoxinitiative.org>
+Date: Wed Oct 17 18:06:01 2018 -0400
+
+ LP#1684202 - fix bug the prevented automatic refresh
+
+ Turns out that Array.includes() does not do implicit type convertions
+ Typical javascript...
+
+ Signed-off by: Cesar Velez <cesar.velez@equinoxinitiative.org>
+
+ Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+
+commit c6e420d2078ebe8b168dea4695892aefafd11976
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Fri Sep 14 11:03:30 2018 -0400
+
+ LP#1684202: Protect against missing features; Make feature more general
+
+ I've wrapped the BroadcastChannel code in a test derived from the auth version
+ of the same concept. Also broadcasting the full set of record IDs and the
+ pre-update call number IDs for other interfaces that might be interested. The
+ channel name is also made more generic and made to follow the precedent from
+ the auth channel name.
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+ Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+
+28 0 Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+14 1 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit ac51b481206bbd273ead680b52837273ac1e9389
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Mon Nov 12 12:26:40 2018 -0500
+
+ Stamping upgrade script
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+220 0 Open-ILS/src/sql/Pg/upgrade/1134.function.located_uri_browse_visibility.sql
+0 220 Open-ILS/src/sql/Pg/upgrade/XXXX.function.located_uri_browse_visibility.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1134.function.located_uri_browse_visibility.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.function.located_uri_browse_visibility.sql
+
+commit 1a5a9c9041d5bbd0ee7fda646d26fb22173c2929
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Fri Nov 9 12:28:08 2018 -0500
+
+ LP#1773479 Show Located URIs in browse
+
+ Located URIs depend upon bib-level visibility, as there are no copies
+ to work with. The browse code, however, was joining in the copy
+ visibility table as if it would always have at least one row per bib,
+ but in the case of located URIs, it does not.
+
+ Let's change it to a LEFT JOIN to allow the bib row to show up, at
+ which point the existing bib visibility check can do its job.
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+2 2 Open-ILS/src/sql/Pg/300.schema.staged_search.sql
+220 0 Open-ILS/src/sql/Pg/upgrade/XXXX.function.located_uri_browse_visibility.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.function.located_uri_browse_visibility.sql
+
+commit 6c9b4832b156970a861603a64fa0ae22abaeb4be
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Wed Oct 24 14:38:01 2018 -0400
+
+ LP#1724348 Honor default tab from catalog search
+
+ The default tab selection was not being honored from catalog searches,
+ as the search had already set $scope.record_tab, and we were honoring
+ that value in all cases.
+
+ Instead, let's honor that value in cases where the OPAC load doesn't
+ change our current record, which should only happen if we load the
+ record directly to a non-opac tab, then go to the OPAC view.
+
+ To test:
+ 1) Set any tab other than "OPAC View" as your default view in record
+ details.
+ 2) Do a catalog search.
+ 3) Select a record, and notice your default view is not set.
+ 4) Apply patch, do the same steps, and notice the default view is now
+ selected.
+
+ To test regression of bug #1708951:
+ 1) In Firefox, load a record directly (e.g.
+ /eg/opac/staff/cat/catalog/record/123).
+ 2) Note the default view loaded.
+ 3) Click "OPAC View".
+ 4) Note the view does not return to your default view, but stays on
+ the OPAC.
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+ Signed-off-by: Jason Boyer <JBoyer@library.in.gov>
+
+5 2 Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+
+commit 4eac9154f3fe122e15c4fddef729efd3924672d6
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Wed Nov 7 09:27:30 2018 -0500
+
+ LP#1635737 Due date DST noncat thinko fix
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+2 2 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/NonCat.pm
+
+commit d96d5b6bcb279f60b4add125eb33eefa3417fffb
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Tue Nov 6 16:22:43 2018 -0500
+
+ LP#1635737 Due date DST-aware thinko fix
+
+ Minor code refactor to fix thinko and syntax issues.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+3 3 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+
+commit b5357b0283c37ce12d161186f1092d138752e4f4
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Mon Jul 31 15:55:34 2017 -0400
+
+ LP#1635737 Apply DST-aware timezone to context dates
+
+ Do our best to enforce the rule required by OpenSRF's interval_to_seconds
+ that when a context date is in use, and you care about DST awareness, you
+ must set the timezone to a DST-aware value, e.g., 'America/New_York'. In
+ most situations, 'local' will suffice for this, as the server is typically
+ configured with a DST-aware timezone in its environment. However, we will
+ look for an org unit setting called 'lib.timezone' and use that where we
+ can. See LP#1705524 for info on that setting.
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+ Conflicts:
+ Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+ Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/NonCat.pm
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+19 4 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+10 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/NonCat.pm
+
+commit 8520c3257a71444a9068e1c9de344c2010b2af02
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Fri Jul 21 14:28:16 2017 -0400
+
+ LP#1635737 Use new OpenSRF interval_to_seconds() context
+
+ Use the optional context for interval_to_seconds() to account for the
+ variable length of duration components. For example, "1 day" may be
+ shorter or longer than 24 hours during a time change event, "1 month"
+ may be shorter or longer depending on which month it is currently, etc.
+
+ Also, remove some timestamp munging, as that happens within
+ interval_to_seconds() already.
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+ Conflicts:
+ Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+1 5 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/NonCat.pm
+
+commit 36581e75999f7fda8705e203a4e299988662fa54
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Tue Nov 6 15:27:23 2018 -0500
+
+ LP#1635737: Unit tests for DST and date math
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+18 1 Open-ILS/src/perlmods/t/14-OpenILS-Utils.t
+
+commit 479361d70a31562cb045d14742c85b5440491067
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Tue Nov 6 15:13:47 2018 -0500
+
+ LP#1635737 Add optional context to interval_to_seconds
+
+ Any given interval (e.g. "1 month") can be a different amount of
+ seconds depending on the context (i.e. "1 month" after February 1 is
+ March 1, but "1 month" after March 1 is April 1, yet March is longer
+ than February). This affects months all the time, but also can
+ affect days, hours, and even seconds once you consider DST and "leap"
+ times.
+
+ By giving an optional context to interval_to_seconds, you can find
+ the true number of seconds in, for example, "1 month", when starting
+ from "February 1" (the context).
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+48 17 Open-ILS/src/perlmods/lib/OpenILS/Utils/DateTime.pm
+
+commit f8473b18091b355cc9452ae7adeb5214fa997f7a
+Author: Kathy Lussier <klussier@masslnc.org>
+Date: Wed Jul 25 11:51:06 2018 -0400
+
+ LP#1783602: Remove copy counts from mr search results page
+
+ The copy counts on the mr search results page can be wrong if a limiter was
+ applied to the metarecord search. Rather than supply inaccurate information to
+ the user, let's remove the counts from that page until a long-term solution can
+ be developed.
+
+ Signed-off-by: Kathy Lussier <klussier@masslnc.org>
+ Signed-off-by: Remington Steed <rjs7@calvin.edu>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+3 1 Open-ILS/src/templates/opac/parts/result/table.tt2
+
+commit 9080603f72e10ef1d18f895fb31cfca77d0bbc89
+Author: Kathy Lussier <klussier@masslnc.org>
+Date: Mon Nov 5 15:50:24 2018 -0500
+
+ LP#1755543: Change placement of help popovers
+
+ Set the placement of help tip popovers so that they automatically position
+ to a visible place on the screen.
+
+ Signed-off-by: Kathy Lussier <klussier@masslnc.org>
+ Signed-off-by: Remington Steed <rjs7@calvin.edu>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+2 0 Open-ILS/src/templates/staff/share/t_help_popover.tt2
+
+commit c70a7a11f878983d02192239c74129ad25e44feb
+Author: Kathy Lussier <klussier@masslnc.org>
+Date: Tue Mar 13 12:54:42 2018 -0400
+
+ LP#1755543: Add help tips to Print Item Labels Settings tab
+
+ Instead of providing lengthy settings descriptions, which result in a lot of
+ scrolling on the Print Item Template page, let's use help tips that can
+ provide guidance to new users without adding clutter to the interface.
+
+ This commit also turns the field labels into HTML labels for improved
+ accessibility and removes borders on the page. The borders were helpful
+ when we displayed the help text on the page, but are no longer needed.
+
+ Signed-off-by: Kathy Lussier <klussier@masslnc.org>
+ Signed-off-by: Remington Steed <rjs7@calvin.edu>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+2 6 Open-ILS/src/templates/staff/cat/printlabels/t_view.tt2
+
+commit cfb872e8432d4967ec3b03c7d31c32c98ed89522
+Author: Garry Collum <gcollum@gmail.com>
+Date: Thu Jun 7 14:54:45 2018 -0400
+
+ LP#1755896: Web Client mobile menu font color contrast.
+
+ When viewing the main menu in the web client in a small device or in a
+ browser with a width that is resized to less than 800px the menu
+ collapses and the submenu choices are difficult to read because of lack
+ of contrast. This patch adds some contrast.
+
+ To test:
+ 1. View the web client in a browser and lessen the width until the menu
+ collapses, or view it in a small device.
+ 2. Open some of the menu options to observe the submenus.
+ 3. Apply the patch.
+ 4. Refresh the browser and repeat steps 1-2 to view the more readable
+ submenus.
+
+ Signed-off-by: Garry Collum <gcollum@gmail.com>
+ Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+6 0 Open-ILS/src/templates/staff/css/style.css.tt2
+
+commit 14a6b09d55c975b3854cfd0720898e0308f39813
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Mon Nov 5 16:40:34 2018 -0500
+
+ LP#1789747: tweak disabling the offline circulation link
+
+ This patch ensures that the menu link can be fully disabled by
+ giving the "disabled" CSS class to the anchor as well as the
+ li that contains it. It also adds a CSS rule to the disabled
+ class to force the cursor to not-allowed; due to a quirk, an
+ anchor with "pointer-events: none" will not respect "cursor: not-allowed",
+ but the containing element can have that cursor rule.
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+3 0 Open-ILS/src/templates/staff/css/style.css.tt2
+1 1 Open-ILS/src/templates/staff/navbar.tt2
+
+commit aa99255b39d8122054bc0646951c3212e44be506
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Tue Sep 4 15:09:31 2018 -0400
+
+ LP#1789747 More SharedWorker sanity checks for egLovefield
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Rogan Hamby <rhamby@equinoxinitiative.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+5 3 Open-ILS/web/js/ui/default/staff/services/lovefield.js
+
+commit 8f23343b76ebf8f556a5426b478c331698a3a2a6
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Thu Aug 30 13:19:03 2018 -0400
+
+ LP#1789747 SharedWorker sanity checks
+
+ Avoid page load failures when SharedWorkers (for offline mode) are
+ not supported. Additionally, disable the Offline Circulation menu
+ option when SharedWorkers are not supported.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/src/templates/staff/navbar.tt2
+4 3 Open-ILS/web/js/ui/default/staff/app.js
+11 4 Open-ILS/web/js/ui/default/staff/services/env.js
+3 3 Open-ILS/web/js/ui/default/staff/services/lovefield.js
+6 2 Open-ILS/web/js/ui/default/staff/services/navbar.js
+15 8 Open-ILS/web/js/ui/default/staff/services/org.js
+2 2 Open-ILS/web/js/ui/default/staff/services/ui.js
+
+commit b3fc4d63034434e31726ded935b80009d8c3e432
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Tue Oct 16 14:15:53 2018 -0400
+
+ LP#1798170 Load grid data after settings are applied
+
+ Ensure the initial grid data fetching code does not fire until after the
+ grid configuration has been retrieved and applied. This fixes an issue
+ where custom columns would contain no values on initial grid load.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jason Boyer <jboyer@library.in.gov>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+17 14 Open-ILS/web/js/ui/default/staff/services/grid.js
+
+commit 48266b6728fea1478dc710b6e8b9eb7922cf31cc
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Mon Nov 5 12:49:35 2018 -0500
+
+ LP#1801759: add mod_remoteip configuration to example Apache config
+
+ Text taken from an OpenSRF patch added by Bill Erickson per bug 1684970.
+
+ This patch adds an Apache configuration stanza that uses mod_remoteip
+ to pass the user agent's IP address to the HTTP translator. It is meant
+ for when Apache is being run behind a proxy such as NGINX.
+
+ To test
+ -------
+ [1] Set up Evergreen with Apache and the WebSockets server running
+ behind a proxy such as NGINX.
+ [2] Enable mod_remoteip (e.g., sudo a2enmod remoteip).
+ [3] Apply the Apache configuration change in this patch, uncommenting
+ out the directives and (if necessary) updating the internal IP
+ address of the proxy.
+ [4] Reload Apache.
+ [5] Perform an action that uses the HTTP translator, e.g., adding a
+ vendor record using the Dojo interface.
+ [6] Verify that the client IP logged is that of the user agent, not
+ the proxy.
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+10 0 Open-ILS/examples/apache_24/eg_vhost.conf.in
+
+commit 5fdaf3125f54b8855fbcace13b4e855bc5e10078
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Mon Nov 5 12:54:24 2018 -0500
+
+ LP#1801759: enable mod_remoteip by default
+
+ Use of mod_remoteip is technically optional, since it's not
+ required that Evergreen run with a proxy such as NGINX. However, since
+ use of proxies is common, enablig mod_remoteip just in case could
+ be useful with minimal cost.
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+2 1 Open-ILS/src/extras/install/Makefile.debian-jessie
+2 1 Open-ILS/src/extras/install/Makefile.debian-stretch
+2 1 Open-ILS/src/extras/install/Makefile.ubuntu-trusty
+2 1 Open-ILS/src/extras/install/Makefile.ubuntu-xenial
+
+commit 0fd636e97babdce8b4526fa1d1d412a84a92e627
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Sun Nov 4 15:25:44 2018 -0800
+
+ Docs: updating holding, item, call number terminology
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+9 5 docs/admin/Org_Unit_Proximity_Adjustments.adoc
+5 5 docs/admin/circulation_limit_groups.adoc
+1 1 docs/admin/cn_prefixes_and_suffixes.adoc
+52 52 docs/admin/copy_locations.adoc
+1 1 docs/admin/popularity_badges_web_client.adoc
+23 23 docs/admin_initial_setup/borrowing_items.adoc
+12 12 docs/admin_initial_setup/migrating_your_data.adoc
+60 60 docs/cataloging/copy-buckets_web_client.adoc
+10 10 docs/cataloging/holdings_templates.adoc
+14 14 docs/cataloging/monograph_parts.adoc
+6 9 docs/cataloging/tpac_copy_edit_links.adoc
+14 11 docs/cataloging/volcopy_editor.adoc
+9 10 docs/development/data_unapi.adoc
+
+commit 17eabd929d0967de016b03e48f5826cfdd8ddbce
+Author: Remington Steed <rjs7@calvin.edu>
+Date: Fri Nov 2 15:00:55 2018 -0400
+
+ Docs: Update old command osrf_ctl.sh to osrf_control
+
+ Thanks to Rosie Le Faive for catching this problem, and providing the
+ solution!
+
+ Signed-off-by: Remington Steed <rjs7@calvin.edu>
+
+2 1 docs/admin/marc_templates.adoc
+
+commit 71cf9a7def46ce3fa72e749d31fc62f5758d8df0
+Author: Jason Boyer <jboyer@library.in.gov>
+Date: Fri Oct 26 09:16:14 2018 -0400
+
+ LP1796988: Fix Saving Last Copy Template
+
+ A line that belongs within a forEach loop escaped
+ its bounds and caused a reference error that prevented
+ the applyTemplate function from saving the last used
+ template. This branch ushers this line back to its
+ pen where it can trouble us no more.
+
+ Signed-off-by: Jason Boyer <jboyer@library.in.gov>
+ Signed-off-by: Janet Schrader <jschrader@cwmars.org>
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+1 1 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 899733acd11c22e96dcb821bd9d0f3ee8a02b691
+Author: abneiman <abneiman@equinoxinitiative.org>
+Date: Thu Nov 1 13:59:02 2018 -0700
+
+ Docs: Emergency Closing Handler
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+88 0 docs/admin/emergency_closing_handler.adoc
+- - docs/media/ECHClosedDatesEditorAddClosing.png
+- - docs/media/ECHClosingSnowDay.png
+- - docs/media/ECHEditClosing.png
+- - docs/media/ECHEditClosingModal.png
+- - docs/media/ECHLibraryClosingConstruction.png
+- - docs/media/ECHLibraryClosingDetailed.png
+- - docs/media/ECHLibraryClosingDone.png
+- - docs/media/ECHLibraryClosingMultipleDays.png
+2 0 docs/root.adoc
+2 0 docs/root_staff_client_admin.adoc
+ create mode 100644 docs/admin/emergency_closing_handler.adoc
+ create mode 100644 docs/media/ECHClosedDatesEditorAddClosing.png
+ create mode 100644 docs/media/ECHClosingSnowDay.png
+ create mode 100644 docs/media/ECHEditClosing.png
+ create mode 100644 docs/media/ECHEditClosingModal.png
+ create mode 100644 docs/media/ECHLibraryClosingConstruction.png
+ create mode 100644 docs/media/ECHLibraryClosingDetailed.png
+ create mode 100644 docs/media/ECHLibraryClosingDone.png
+ create mode 100644 docs/media/ECHLibraryClosingMultipleDays.png
+
+commit f6af63d62f7a183e36fc93083bfb64a5b4c8eac1
+Author: Remington Steed <rjs7@calvin.edu>
+Date: Wed Oct 31 16:53:17 2018 -0400
+
+ Docs: Fix minor release notes formatting bug
+
+ Signed-off-by: Remington Steed <rjs7@calvin.edu>
+
+1 1 docs/RELEASE_NOTES_3_2.adoc
+
+commit ae2b807bc0f9e53aeb1a22fdf4bb5cf6ef57315e
+Author: Jason Stephenson <jason@sigio.com>
+Date: Thu Oct 25 09:35:37 2018 -0400
+
+ Forward Port Release Notes for 3.0.13.
+
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+21 0 docs/RELEASE_NOTES_3_0.adoc
+
+commit 604fe387d0fd176ebd94b3bc67185730b4486746
+Author: Dan Wells <dbw2@calvin.edu>
+Date: Wed Oct 24 18:14:28 2018 -0400
+
+ Forward-port 3.2.1 upgrade script
+
+ Signed-off-by: Dan Wells <dbw2@calvin.edu>
+
+5 0 Open-ILS/src/sql/Pg/version-upgrade/3.2.0-3.2.1-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.2.0-3.2.1-upgrade-db.sql
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-2-2";
}
__PACKAGE__->register_method(
FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates');
INSERT INTO config.upgrade_log (version, applied_to) VALUES ('1138', :eg_version); -- rhamby/berick/bshum
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('3.2.2', :eg_version);
CREATE TABLE config.bib_source (
id SERIAL PRIMARY KEY,
--- /dev/null
+--Upgrade Script for 3.2.1 to 3.2.2
+\set eg_version '''3.2.2'''
+BEGIN;
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('3.2.2', :eg_version);
+
+SELECT evergreen.upgrade_deps_block_check('1134', :eg_version);
+
+CREATE OR REPLACE FUNCTION metabib.staged_browse(query text, fields integer[], context_org integer, context_locations integer[], staff boolean, browse_superpage_size integer, count_up_from_zero boolean, result_limit integer, next_pivot_pos integer)
+ RETURNS SETOF metabib.flat_browse_entry_appearance
+AS $f$
+DECLARE
+ curs REFCURSOR;
+ rec RECORD;
+ qpfts_query TEXT;
+ aqpfts_query TEXT;
+ afields INT[];
+ bfields INT[];
+ result_row metabib.flat_browse_entry_appearance%ROWTYPE;
+ results_skipped INT := 0;
+ row_counter INT := 0;
+ row_number INT;
+ slice_start INT;
+ slice_end INT;
+ full_end INT;
+ all_records BIGINT[];
+ all_brecords BIGINT[];
+ all_arecords BIGINT[];
+ superpage_of_records BIGINT[];
+ superpage_size INT;
+ c_tests TEXT := '';
+ b_tests TEXT := '';
+ c_orgs INT[];
+ unauthorized_entry RECORD;
+BEGIN
+ IF count_up_from_zero THEN
+ row_number := 0;
+ ELSE
+ row_number := -1;
+ END IF;
+
+ IF NOT staff THEN
+ SELECT x.c_attrs, x.b_attrs INTO c_tests, b_tests FROM asset.patron_default_visibility_mask() x;
+ END IF;
+
+ -- b_tests supplies its own query_int operator, c_tests does not
+ IF c_tests <> '' THEN c_tests := c_tests || '&'; END IF;
+
+ SELECT ARRAY_AGG(id) INTO c_orgs FROM actor.org_unit_descendants(context_org);
+
+ c_tests := c_tests || search.calculate_visibility_attribute_test('circ_lib',c_orgs)
+ || '&' || search.calculate_visibility_attribute_test('owning_lib',c_orgs);
+
+ PERFORM 1 FROM config.internal_flag WHERE enabled AND name = 'opac.located_uri.act_as_copy';
+ IF FOUND THEN
+ b_tests := b_tests || search.calculate_visibility_attribute_test(
+ 'luri_org',
+ (SELECT ARRAY_AGG(id) FROM actor.org_unit_full_path(context_org) x)
+ );
+ ELSE
+ b_tests := b_tests || search.calculate_visibility_attribute_test(
+ 'luri_org',
+ (SELECT ARRAY_AGG(id) FROM actor.org_unit_ancestors(context_org) x)
+ );
+ END IF;
+
+ IF context_locations THEN
+ IF c_tests <> '' THEN c_tests := c_tests || '&'; END IF;
+ c_tests := c_tests || search.calculate_visibility_attribute_test('location',context_locations);
+ END IF;
+
+ OPEN curs NO SCROLL FOR EXECUTE query;
+
+ LOOP
+ FETCH curs INTO rec;
+ IF NOT FOUND THEN
+ IF result_row.pivot_point IS NOT NULL THEN
+ RETURN NEXT result_row;
+ END IF;
+ RETURN;
+ END IF;
+
+ --Is unauthorized?
+ SELECT INTO unauthorized_entry *
+ FROM metabib.browse_entry_simple_heading_map mbeshm
+ INNER JOIN authority.simple_heading ash ON ( mbeshm.simple_heading = ash.id )
+ INNER JOIN authority.control_set_authority_field acsaf ON ( acsaf.id = ash.atag )
+ JOIN authority.heading_field ahf ON (ahf.id = acsaf.heading_field)
+ WHERE mbeshm.entry = rec.id
+ AND ahf.heading_purpose = 'variant';
+
+ -- Gather aggregate data based on the MBE row we're looking at now, authority axis
+ IF (unauthorized_entry.record IS NOT NULL) THEN
+ --unauthorized term belongs to an auth linked to a bib?
+ SELECT INTO all_arecords, result_row.sees, afields
+ ARRAY_AGG(DISTINCT abl.bib),
+ STRING_AGG(DISTINCT abl.authority::TEXT, $$,$$),
+ ARRAY_AGG(DISTINCT map.metabib_field)
+ FROM authority.bib_linking abl
+ INNER JOIN authority.control_set_auth_field_metabib_field_map_refs map ON (
+ map.authority_field = unauthorized_entry.atag
+ AND map.metabib_field = ANY(fields)
+ )
+ WHERE abl.authority = unauthorized_entry.record;
+ ELSE
+ --do usual procedure
+ SELECT INTO all_arecords, result_row.sees, afields
+ ARRAY_AGG(DISTINCT abl.bib), -- bibs to check for visibility
+ STRING_AGG(DISTINCT aal.source::TEXT, $$,$$), -- authority record ids
+ ARRAY_AGG(DISTINCT map.metabib_field) -- authority-tag-linked CMF rows
+
+ FROM metabib.browse_entry_simple_heading_map mbeshm
+ JOIN authority.simple_heading ash ON ( mbeshm.simple_heading = ash.id )
+ JOIN authority.authority_linking aal ON ( ash.record = aal.source )
+ JOIN authority.bib_linking abl ON ( aal.target = abl.authority )
+ JOIN authority.control_set_auth_field_metabib_field_map_refs map ON (
+ ash.atag = map.authority_field
+ AND map.metabib_field = ANY(fields)
+ )
+ JOIN authority.control_set_authority_field acsaf ON (
+ map.authority_field = acsaf.id
+ )
+ JOIN authority.heading_field ahf ON (ahf.id = acsaf.heading_field)
+ WHERE mbeshm.entry = rec.id
+ AND ahf.heading_purpose = 'variant';
+
+ END IF;
+
+ -- Gather aggregate data based on the MBE row we're looking at now, bib axis
+ SELECT INTO all_brecords, result_row.authorities, bfields
+ ARRAY_AGG(DISTINCT source),
+ STRING_AGG(DISTINCT authority::TEXT, $$,$$),
+ ARRAY_AGG(DISTINCT def)
+ FROM metabib.browse_entry_def_map
+ WHERE entry = rec.id
+ AND def = ANY(fields);
+
+ SELECT INTO result_row.fields STRING_AGG(DISTINCT x::TEXT, $$,$$) FROM UNNEST(afields || bfields) x;
+
+ result_row.sources := 0;
+ result_row.asources := 0;
+
+ -- Bib-linked vis checking
+ IF ARRAY_UPPER(all_brecords,1) IS NOT NULL THEN
+
+ SELECT INTO result_row.sources COUNT(DISTINCT b.id)
+ FROM biblio.record_entry b
+ LEFT JOIN asset.copy_vis_attr_cache acvac ON (acvac.record = b.id)
+ WHERE b.id = ANY(all_brecords[1:browse_superpage_size])
+ AND (
+ acvac.vis_attr_vector @@ c_tests::query_int
+ OR b.vis_attr_vector @@ b_tests::query_int
+ );
+
+ result_row.accurate := TRUE;
+
+ END IF;
+
+ -- Authority-linked vis checking
+ IF ARRAY_UPPER(all_arecords,1) IS NOT NULL THEN
+
+ SELECT INTO result_row.asources COUNT(DISTINCT b.id)
+ FROM biblio.record_entry b
+ LEFT JOIN asset.copy_vis_attr_cache acvac ON (acvac.record = b.id)
+ WHERE b.id = ANY(all_arecords[1:browse_superpage_size])
+ AND (
+ acvac.vis_attr_vector @@ c_tests::query_int
+ OR b.vis_attr_vector @@ b_tests::query_int
+ );
+
+ result_row.aaccurate := TRUE;
+
+ END IF;
+
+ IF result_row.sources > 0 OR result_row.asources > 0 THEN
+
+ -- The function that calls this function needs row_number in order
+ -- to correctly order results from two different runs of this
+ -- functions.
+ result_row.row_number := row_number;
+
+ -- Now, if row_counter is still less than limit, return a row. If
+ -- not, but it is less than next_pivot_pos, continue on without
+ -- returning actual result rows until we find
+ -- that next pivot, and return it.
+
+ IF row_counter < result_limit THEN
+ result_row.browse_entry := rec.id;
+ result_row.value := rec.value;
+
+ RETURN NEXT result_row;
+ ELSE
+ result_row.browse_entry := NULL;
+ result_row.authorities := NULL;
+ result_row.fields := NULL;
+ result_row.value := NULL;
+ result_row.sources := NULL;
+ result_row.sees := NULL;
+ result_row.accurate := NULL;
+ result_row.aaccurate := NULL;
+ result_row.pivot_point := rec.id;
+
+ IF row_counter >= next_pivot_pos THEN
+ RETURN NEXT result_row;
+ RETURN;
+ END IF;
+ END IF;
+
+ IF count_up_from_zero THEN
+ row_number := row_number + 1;
+ ELSE
+ row_number := row_number - 1;
+ END IF;
+
+ -- row_counter is different from row_number.
+ -- It simply counts up from zero so that we know when
+ -- we've reached our limit.
+ row_counter := row_counter + 1;
+ END IF;
+ END LOOP;
+END;
+$f$ LANGUAGE plpgsql ROWS 10;
+
+
+SELECT evergreen.upgrade_deps_block_check('1136', :eg_version);
+
+-- update mods33 data entered by 1100 with a format of 'mods32'
+-- harmless if you have not run 1100 yet
+UPDATE config.metabib_field SET format = 'mods33' WHERE format = 'mods32' and id in (38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50);
+
+-- change the default format to 'mods33'
+ALTER TABLE config.metabib_field ALTER COLUMN format SET DEFAULT 'mods33'::text;
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1137', :eg_version);
+
+-- This is a placeholder for 1137 which will be a backported version of the
+-- actor.usr_merge function for rel_3_1. This script does nothing for
+-- rel_3_2 and later.
+
+
+SELECT evergreen.upgrade_deps_block_check('1138', :eg_version);
+
+CREATE OR REPLACE FUNCTION actor.usr_merge( src_usr INT, dest_usr INT, del_addrs BOOLEAN, del_cards BOOLEAN, deactivate_cards BOOLEAN ) RETURNS VOID AS $$
+DECLARE
+ suffix TEXT;
+ bucket_row RECORD;
+ picklist_row RECORD;
+ queue_row RECORD;
+ folder_row RECORD;
+BEGIN
+
+ -- Bail if src_usr equals dest_usr because the result of merging a
+ -- user with itself is not what you want.
+ IF src_usr = dest_usr THEN
+ RETURN;
+ END IF;
+
+ -- do some initial cleanup
+ UPDATE actor.usr SET card = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET mailing_address = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET billing_address = NULL WHERE id = src_usr;
+
+ -- actor.*
+ IF del_cards THEN
+ DELETE FROM actor.card where usr = src_usr;
+ ELSE
+ IF deactivate_cards THEN
+ UPDATE actor.card SET active = 'f' WHERE usr = src_usr;
+ END IF;
+ UPDATE actor.card SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+
+ IF del_addrs THEN
+ DELETE FROM actor.usr_address WHERE usr = src_usr;
+ ELSE
+ UPDATE actor.usr_address SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+ UPDATE actor.usr_note SET usr = dest_usr WHERE usr = src_usr;
+ -- dupes are technically OK in actor.usr_standing_penalty, should manually delete them...
+ UPDATE actor.usr_standing_penalty SET usr = dest_usr WHERE usr = src_usr;
+ PERFORM actor.usr_merge_rows('actor.usr_org_unit_opt_in', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('actor.usr_setting', 'usr', src_usr, dest_usr);
+
+ -- permission.*
+ PERFORM actor.usr_merge_rows('permission.usr_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_object_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_grp_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_work_ou_map', 'usr', src_usr, dest_usr);
+
+
+ -- container.*
+
+ -- For each *_bucket table: transfer every bucket belonging to src_usr
+ -- into the custody of dest_usr.
+ --
+ -- In order to avoid colliding with an existing bucket owned by
+ -- the destination user, append the source user's id (in parenthesese)
+ -- to the name. If you still get a collision, add successive
+ -- spaces to the name and keep trying until you succeed.
+ --
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.biblio_record_entry_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.biblio_record_entry_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.call_number_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.call_number_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.copy_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.copy_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.user_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.user_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE container.user_bucket_item SET target_user = dest_usr WHERE target_user = src_usr;
+
+ -- vandelay.*
+ -- transfer queues the same way we transfer buckets (see above)
+ FOR queue_row in
+ SELECT id, name
+ FROM vandelay.queue
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE vandelay.queue
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = queue_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE vandelay.session_tracker SET usr = dest_usr WHERE usr = src_usr;
+
+ -- money.*
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'collector', src_usr, dest_usr);
+ UPDATE money.billable_xact SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE money.billing SET voider = dest_usr WHERE voider = src_usr;
+ UPDATE money.bnm_payment SET accepting_usr = dest_usr WHERE accepting_usr = src_usr;
+
+ -- action.*
+ UPDATE action.circulation SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.circulation SET circ_staff = dest_usr WHERE circ_staff = src_usr;
+ UPDATE action.circulation SET checkin_staff = dest_usr WHERE checkin_staff = src_usr;
+ UPDATE action.usr_circ_history SET usr = dest_usr WHERE usr = src_usr;
+
+ UPDATE action.hold_request SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.hold_request SET fulfillment_staff = dest_usr WHERE fulfillment_staff = src_usr;
+ UPDATE action.hold_request SET requestor = dest_usr WHERE requestor = src_usr;
+ UPDATE action.hold_notification SET notify_staff = dest_usr WHERE notify_staff = src_usr;
+
+ UPDATE action.in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET patron = dest_usr WHERE patron = src_usr;
+ UPDATE action.non_cat_in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.survey_response SET usr = dest_usr WHERE usr = src_usr;
+
+ -- acq.*
+ UPDATE acq.fund_allocation SET allocator = dest_usr WHERE allocator = src_usr;
+ UPDATE acq.fund_transfer SET transfer_user = dest_usr WHERE transfer_user = src_usr;
+ UPDATE acq.invoice SET closed_by = dest_usr WHERE closed_by = src_usr;
+
+ -- transfer picklists the same way we transfer buckets (see above)
+ FOR picklist_row in
+ SELECT id, name
+ FROM acq.picklist
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE acq.picklist
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = picklist_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE acq.purchase_order SET owner = dest_usr WHERE owner = src_usr;
+ UPDATE acq.po_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.po_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.provider_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.provider_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_usr_attr_definition SET usr = dest_usr WHERE usr = src_usr;
+
+ -- asset.*
+ UPDATE asset.copy SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.copy_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.call_number_note SET creator = dest_usr WHERE creator = src_usr;
+
+ -- serial.*
+ UPDATE serial.record_entry SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE serial.record_entry SET editor = dest_usr WHERE editor = src_usr;
+
+ -- reporter.*
+ -- It's not uncommon to define the reporter schema in a replica
+ -- DB only, so don't assume these tables exist in the write DB.
+ BEGIN
+ UPDATE reporter.template SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.report SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.schedule SET runner = dest_usr WHERE runner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.template_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.template_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.report_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.report_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.output_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.output_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- propagate preferred name values from the source user to the
+ -- destination user, but only when values are not being replaced.
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr)
+ UPDATE actor.usr SET
+ pref_prefix =
+ COALESCE(pref_prefix, (SELECT pref_prefix FROM susr)),
+ pref_first_given_name =
+ COALESCE(pref_first_given_name, (SELECT pref_first_given_name FROM susr)),
+ pref_second_given_name =
+ COALESCE(pref_second_given_name, (SELECT pref_second_given_name FROM susr)),
+ pref_family_name =
+ COALESCE(pref_family_name, (SELECT pref_family_name FROM susr)),
+ pref_suffix =
+ COALESCE(pref_suffix, (SELECT pref_suffix FROM susr))
+ WHERE id = dest_usr;
+
+ -- Copy and deduplicate name keywords
+ -- String -> array -> rows -> DISTINCT -> array -> string
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr),
+ dusr AS (SELECT * FROM actor.usr WHERE id = dest_usr)
+ UPDATE actor.usr SET name_keywords = (
+ WITH keywords AS (
+ SELECT DISTINCT UNNEST(
+ REGEXP_SPLIT_TO_ARRAY(
+ COALESCE((SELECT name_keywords FROM susr), '') || ' ' ||
+ COALESCE((SELECT name_keywords FROM dusr), ''), E'\\s+'
+ )
+ ) AS parts
+ ) SELECT ARRAY_TO_STRING(ARRAY_AGG(kw.parts), ' ') FROM keywords kw
+ ) WHERE id = dest_usr;
+
+ -- Finally, delete the source user
+ PERFORM actor.usr_delete(src_usr,dest_usr);
+
+END;
+$$ LANGUAGE plpgsql;
+
+COMMIT;
<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_2_2</p>
<h2>What is Evergreen?</h2>
<blockquote>
<p>
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_2_2");
pref("open-ils.repository.author","$Author$");
pref("open-ils.repository.revision","$Revision$");
pref("open-ils.repository.date","$Date$");
; 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.2"
!define PRODUCT_INSTALL_TAG "${PRODUCT_TAG}"
!define UI_IMAGESET "beta"
;!define UI_IMAGESET "release"
+++ /dev/null
-docs/installation/server_installation.adoc
\ No newline at end of file
--- /dev/null
+Installing the Evergreen server
+===============================
+:toc:
+:numbered:
+
+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.4.
+ * **Linux**: Evergreen has been tested on Debian Stretch (9),
+ Debian Jessie (8), Ubuntu Xenial Xerus (16.04), and Ubuntu
+ Trusty Tahr (14.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.0.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.0.0 or later).
+ You can download OpenSRF releases from http://evergreen-ils.org/opensrf-downloads/
+2. On some distributions, it is necessary to install PostgreSQL 9.4+ from external
+ repositories.
++
+ * Ubuntu (Trusty) comes with an older version of PostgreSQL, so
+ steps are taken to automatically utilize the PostgreSQL
+ community's apt sources.
+ (For complete details, see: https://wiki.postgresql.org/wiki/Apt)
+ * Debian (Jessie/Stretch) and Ubuntu (Xenial) comes with PostgreSQL 9.4+,
+ so no additional steps are required.
++
+3. Issue the following commands as the *root* Linux account to install
+ prerequisites using the `Makefile.install` prerequisite installer,
+ substituting `debian-stretch`, `debian-jessie`,`ubuntu-xenial`,
+ or `ubuntu-trusty` for <osname> below:
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>
+------------------------------------------------------------------------------
++
+4. OPTIONAL: Developer additions
++
+To perform certain developer tasks from a Git source code checkout,
+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
+
+Install dependencies for web staff client
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+[NOTE]
+You may skip this section if you have installed the
+<<optional_developer_additions,optional developer additions>>. You will still need to do the following
+steps in <<install_files_for_web_staff_client,Install files for web staff client>>.
+
+1. Install the long-term stability (LTS) release of
+https://nodejs.org[Node.js]. Add the Node.js `/bin` directory to your
+environment variable `PATH`.
+
+[[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, run tests, concat+minify
+npm run build-prod
+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
+npm run test
+------------------------------------------------------------------------------
+
+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 Debian Stretch, 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 catalogue 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:
+
+ * <<_apache_rewrite_tricks,Apache Rewrite Tricks>>
+ * <<_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 <<_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
+<<_processing_action_triggers,Notifications / Action Triggers>>.
+
+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.
+
+[source, bash]
+------------------------------------------------------------------------------
+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-trusty
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-xenial
+------------------------------------------------------------------------------
+
+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.4 and later
+^^^^^^^^^^^^^^^^^^^^^^^^
+To create the database instance on a remote database server running PostgreSQL
+9.4 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 catalogue 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.
export PATH=${PATH}:/usr/sbin
AC_PREREQ(2.61)
-AC_INIT(Open-ILS, trunk, open-ils-dev@list.georgialibraries.org)
-AM_INIT_AUTOMAKE([OpenILS], [trunk])
+AC_INIT(Open-ILS, 3.2.2, open-ils-dev@list.georgialibraries.org)
+AM_INIT_AUTOMAKE([OpenILS], [3.2.2])
AC_REVISION($Revision: 0.1 $)
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_SUBDIRS([Open-ILS/xul/staff_client/external/libmar])