Evergreen.git
2 years agoDocs typo: s/minimum/maximum/
Dan Scott [Tue, 9 May 2017 02:51:42 +0000 (22:51 -0400)]
Docs typo: s/minimum/maximum/

A small thing, but it means exactly the opposite. Thanks to _adb in IRC for
pointing this out!

Signed-off-by: Dan Scott <dscott@laurentian.ca>
2 years agoLP#1687649 Z39.50 CQL query parser honors bools
Bill Erickson [Tue, 2 May 2017 15:51:12 +0000 (11:51 -0400)]
LP#1687649 Z39.50 CQL query parser honors bools

To test with yaz-client, Z server on localhost, database=evergreen:

Z> open localhost:2210/evergreen
Z> find @or @attr 1=4 @attr 4=6 "potter" @attr 1=4 @attr 4=6 "piano"

"Number of hits:" value should be greater than zero (~38) using the
concerto data set.

Similarly, opensrf logs should contain the line:

SRU search string [(title = potter or title = piano)] converted to
[title:potter || title:piano]

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1646638 - Fix SIP timeouts due to invalid sessions
Dan Scott [Thu, 1 Dec 2016 22:24:01 +0000 (17:24 -0500)]
LP#1646638 - Fix SIP timeouts due to invalid sessions

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1667221: (follow-up) remove comment that is now a lie
Galen Charlton [Mon, 1 May 2017 18:47:58 +0000 (14:47 -0400)]
LP#1667221: (follow-up) remove comment that is now a lie

Also, here's a test plan:

[1] Edit /openils/conf/oils_sip.xml and set the currency
    defined in the implementation section to be something
    other than USD.
[2] Start the SIP server and perform a patron information
    request; note that the BH field in the response contains
    'USD'.
[3] Apply the patch and restart the SIP server.
[4] Repeat step 2; this time, the currency should be whatever
    is specified in oils_sip.xml.
[5] Comment out the currency section in oils_sip.xml and restart
    the SIP server.
[6] Repeat step 2; this time, the currency should be back to 'USD'.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1667221: use library currency as SIP patron currency instead of always using USD
Jeff Davis [Tue, 21 Feb 2017 01:20:26 +0000 (17:20 -0800)]
LP#1667221: use library currency as SIP patron currency instead of always using USD

Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1378829 Stamp Upgrade Script & Add Release Note
Jason Stephenson [Sat, 6 May 2017 18:16:57 +0000 (14:16 -0400)]
LP#1378829 Stamp Upgrade Script & Add Release Note

Signed-off-by: Jason Stephenson <jason@sigio.com>
2 years agoLP#1378829 Fix long overdue override permission
Jeff Godin [Fri, 14 Apr 2017 14:21:40 +0000 (10:21 -0400)]
LP#1378829 Fix long overdue override permission

Fix override permission used when checking in a copy that is "long
overdue".

The existing permission was incorrectly created with a code of
COPY_STATUS_LONGOVERDUE.override, while the event thrown requires a
permission with a code of COPY_STATUS_LONG_OVERDUE.override

This commit updates the seed data and a few references to the
old/incorrect permission in documentation, and also includes an
upgrade script designed to accommodate the various likely ways in
which sites may have already locally addressed this issue.

A simple pgtap test is also included.

Signed-off-by: Jeff Godin <jgodin@tadl.org>
Signed-off-by: Jason Stephenson <jason@sigio.com>
2 years agoDocs: Remove stray bullet entry
Kathy Lussier [Fri, 5 May 2017 16:29:38 +0000 (12:29 -0400)]
Docs: Remove stray bullet entry

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoDocs: Add files to the list of tpac files that should be customized
Kathy Lussier [Fri, 5 May 2017 16:14:19 +0000 (12:14 -0400)]
Docs: Add files to the list of tpac files that should be customized

We have a list of tpac files that should be customized on an Evergreen system.
There are a couple of files related to password formats that should be included
here.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1685840 Release notes for Google Books Preview rewrite
Dan Scott [Wed, 3 May 2017 03:02:17 +0000 (23:02 -0400)]
LP#1685840 Release notes for Google Books Preview rewrite

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1685840 Activate Google Preview "extras" bar on load
Dan Scott [Tue, 2 May 2017 04:37:17 +0000 (00:37 -0400)]
LP#1685840 Activate Google Preview "extras" bar on load

Thanks to Ben Shum for pointing out that users might expect the Google Preview
extras bar near the bottom of the screen to trigger loading the preview as
well. Another event listener handles this accordingly.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1685840: Dojoless Google Books Preview as external script
Dan Scott [Mon, 24 Apr 2017 16:18:12 +0000 (12:18 -0400)]
LP#1685840: Dojoless Google Books Preview as external script

Rather than including the JavaScript inline in each page, load the
JavaScript as a regular external JavaScript file so that browsers
can take advantage of caching, reduce network bandwidth, and reduce the
amount of TT2 processing required. Every little bit helps.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1685840: Dojoless Google Books Preview: remove TT2 dependency
Dan Scott [Mon, 24 Apr 2017 15:53:24 +0000 (11:53 -0400)]
LP#1685840: Dojoless Google Books Preview: remove TT2 dependency

Rather than process the template with TT2 to specify the language in
which the Google Books Preview should be displayed, use the @lang
attribute on the <html> element--and fall back to 'en' if for some
reason that attribute has been removed from the template.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1685840: Google Books Preview: responsive sizing
Dan Scott [Mon, 24 Apr 2017 15:29:37 +0000 (11:29 -0400)]
LP#1685840: Google Books Preview: responsive sizing

Use the viewport's actual height and width to display the book preview,
rather than hard-coding 600px x 800px. On a very wide screen, the book
will be centred; on a small screen such as a mobile device, the book
will not scroll indiscriminately off to the side, but instead stays
within the bounds of the viewport.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1685840: Dojoless Google Books Preview does not need want_dojo
Dan Scott [Mon, 17 Apr 2017 22:42:11 +0000 (18:42 -0400)]
LP#1685840: Dojoless Google Books Preview does not need want_dojo

Now that Dojo is no longer needed for Google Books Preview, we can load
the associated JavaScript without having to enable want_dojo.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1685840: Dojoless Google Books Preview
Dan Scott [Mon, 17 Apr 2017 02:27:52 +0000 (22:27 -0400)]
LP#1685840: Dojoless Google Books Preview

Avoid polluting the global namespace by wrapping the code in (function() {})().

Add event listeners to the DOM elements rather than the crufty
href=javascript:function approach.

Optimization: do not load the Google Books JSAPI unless there is a matching
embedded ISBN.

Use display style directly, rather than munging class names with hide_me

Supports IE 10/11, which does not handle responseType = 'json', through
the fallback to XHR responseText.

IE9 for now; it seems the new Google Books Loader wipes out the DOM in
IE9 instead of loading nicely in the <head>. Could go back to the old
Google JS loader, which still works, but is deprecated, so could
disappear at any point.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1427392: Stamping upgrade script for hard due date value fix
Ben Shum [Wed, 3 May 2017 01:51:13 +0000 (21:51 -0400)]
LP#1427392: Stamping upgrade script for hard due date value fix

Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1427392: Add release note for hard due date values fix
Michele Morgan [Tue, 2 May 2017 13:17:55 +0000 (09:17 -0400)]
LP#1427392: Add release note for hard due date values fix

Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1427392 - Allow deletion of Hard Due Date Values.
Michele Morgan [Wed, 15 Mar 2017 20:31:06 +0000 (16:31 -0400)]
LP#1427392 - Allow deletion of Hard Due Date Values.

Also, don't update hard due dates to ceiling dates that have passed.

Fixes two related issues with hard due dates.

- Exposes the selector in the Hard Due Date Values interface so past
  entries that are no longer valid can be deleted via the client.
- Prevents the current ceiling date from being updated to a past date
  based on an old hard due date value.

Testing plan:

To reproduce the issue:

- Create a Hard Due Date with a Current Ceiling Date in the future
- Create an associated Hard Due Date Value with an active date earlier
  than the current date and a ceiling date earlier than the current date.
- Run the hard due date updater

Note that:

- The Current Ceiling Date is updated to an earlier date based on
  the Hard Due Date Value entry.
- It is not possible to select and delete the Hard Due Date Value
  entry.

Apply the patch and retest

Note that:

- The Current Ceiling Date has not been updated to the past date.
- Past Hard Due Date Values can now be selected and deleted.

Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoDocs: Reducing line length to 80 characters in using OPAC docs
Kathy Lussier [Wed, 3 May 2017 01:07:48 +0000 (21:07 -0400)]
Docs: Reducing line length to 80 characters in using OPAC docs

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoDocs: Sibling links documentation
Kathy Lussier [Tue, 2 May 2017 23:20:20 +0000 (19:20 -0400)]
Docs: Sibling links documentation

Adds documentation and a screenshot for the new sibling links that display
on the record details page. Also removes a bit of duplicated documentation.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoDocs: Reducing line size to 80 characters
Kathy Lussier [Tue, 2 May 2017 17:46:31 +0000 (13:46 -0400)]
Docs: Reducing line size to 80 characters

Reducing the line size in a couple of docs to 80 character. Makes for easier
editing for those who are working from a command line editor.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoDocs: Documentation for default metarecord search
Kathy Lussier [Tue, 2 May 2017 17:33:54 +0000 (13:33 -0400)]
Docs: Documentation for default metarecord search

Adding documentation on how to configure a default metarecord search in the
admin section. The catalog section also containts a tip about this option with
a link to the admin section for further details on how to configure it.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1257915: add live_t tests
Galen Charlton [Mon, 1 May 2017 20:45:29 +0000 (16:45 -0400)]
LP#1257915: add live_t tests

And here's a test plan for humans:

[1] Create a purchase order with, say, 3 lineitems and 2
    copies on each of these.
[2] Receive the first two lineitems outright.
[3] Receive one of the copies on the last lineitem and cancel
    the other with a cancellation reason that's permanent (e.g.,
    bad ISBN) rather than temporary (e.g., backordered).
[4] Note that the purchase order's state remains 'on-order'
[5] Apply the patch.
[6] Repeat steps #1-4. This time, the PO's state should be
    'received'.
[7] Repeat steps #1-4, but this time, choose backordered as
    the cancellation reason. This time, the PO's state should
    remain 'on-order'.

It should be noted that the patches for this bug do *not*
retrospectively mark purchase orders as being received.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1257915 Repair receive-when-cancel query
Bill Erickson [Wed, 12 Apr 2017 20:54:25 +0000 (16:54 -0400)]
LP#1257915 Repair receive-when-cancel query

Repaire the json_query used to determine if a PO is ready to be marked
received.

A PO is non-receiveable if it has any lineitems that are not in the
received/cancelled [sic] state OR any that are canceled with a
keep_debits=true cancel reason.

Prior to this change, simply having a state of "cancelled" was enough to
prevent receiving.

* Replace tabs w/ spaces
* Remove unnecessary "or return 0" clause which was causing Perl
  precedence warnings.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1257915 - Also check whether to mark the PO received when canceling.
Chris Sharp [Fri, 7 Apr 2017 12:45:06 +0000 (08:45 -0400)]
LP#1257915 - Also check whether to mark the PO received when canceling.

Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1257915 - Mark POs received when all lineitems are received or canceled.
Chris Sharp [Wed, 5 Apr 2017 13:52:50 +0000 (09:52 -0400)]
LP#1257915 - Mark POs received when all lineitems are received or canceled.

Previously, Evergreen only considered lineitems not in a "received" status
when deciding whether to consider a purchase order to be "received".  Now
items with cancel reasons that do not keep debits (e.g. not backordered)
are considered "done".

Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1230301: add release notes
Galen Charlton [Mon, 1 May 2017 19:16:32 +0000 (15:16 -0400)]
LP#1230301: add release notes

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1230301 - Add User/Working Location Map Link to the ILS User reports source.
Chris Sharp [Wed, 10 Feb 2016 00:12:11 +0000 (19:12 -0500)]
LP#1230301 - Add User/Working Location Map Link to the ILS User reports source.

For certain reports it is desirable to display or filter on staff Working Location.
This adds a link to the permission.usr_work_ou_map table/source in fm_IDL.xml.

Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1684984: stamp DB update
Galen Charlton [Mon, 1 May 2017 19:04:56 +0000 (15:04 -0400)]
LP#1684984: stamp DB update

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1684984: Remove obsolete ingest.disable_metabib_field_entry flag.
Jason Stephenson [Sat, 22 Apr 2017 12:28:34 +0000 (08:28 -0400)]
LP#1684984: Remove obsolete ingest.disable_metabib_field_entry flag.

Add release note.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1684984: Remove obsolete ingest.disable_metabib_field_entry flag.
Jason Stephenson [Sat, 22 Apr 2017 00:42:49 +0000 (20:42 -0400)]
LP#1684984: Remove obsolete ingest.disable_metabib_field_entry flag.

Per discussion in IRC, the ingest.disable_metabib_field_entry internal
flag was obsoleted by the addition of the ingest.skip_browse_indexing,
ingest.skip_search_indexing, and ingest.skip_facet_indexing
flags. Since ingest.disable_metabib_field_entry is not used anywhere
in the database, this branch removes it.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1616220 Fixes for css errors that show up in the xul staff client console.
Josh Stompro [Mon, 29 Aug 2016 02:23:01 +0000 (21:23 -0500)]
LP#1616220 Fixes for css errors that show up in the xul staff client console.

To test
-------
[1] In the XUL client, try various interfaces including acquisitions,
    the patron editor, the reporter, the library settings editor,
    serials management and patron surveys. Using the error console,
    verify that applying this patch slightly reduces the number of
    CSS warnings reported.
[2] Repeat step 1 using the web staff client, in particular while
    looking at the embedded acquisitions interfaces.

Signed-off-by: Josh Stompro <stomproj@larl.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoDocs: adding release notes regarding blanket orders
Jillianne Presley [Mon, 1 May 2017 01:45:01 +0000 (18:45 -0700)]
Docs: adding release notes regarding blanket orders

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
2 years agoDocs: New docs for in-house use settings
Debbie Luchenbill [Mon, 1 May 2017 01:24:13 +0000 (18:24 -0700)]
Docs: New docs for in-house use settings

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
2 years agoDocs: fixing broken link
Jane Sandberg [Mon, 1 May 2017 01:20:56 +0000 (18:20 -0700)]
Docs: fixing broken link

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
2 years agoLP#1628655: Do not show Patron Reviews if Chilifresh is not in use
Linda Jansova [Tue, 29 Nov 2016 13:49:52 +0000 (08:49 -0500)]
LP#1628655: Do not show Patron Reviews if Chilifresh is not in use

The Patron reviews header used for Chilifresh content displays in the catalog
even for Evergreen sites that do not use Chilifresh. This patch hides it if
a site is not using Chilifresh.

Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1680142: Fix responsive design issue with ebook display
Kathy Lussier [Wed, 5 Apr 2017 21:25:49 +0000 (17:25 -0400)]
LP#1680142: Fix responsive design issue with ebook display

Fixes the following responsive design issues:
* Removes the e-book dashboard display when the screen size is reduced.
* Changes the table display for e-items currently checked out, e-items on hold,
and e-iterms ready for checkout interfaces to mimic the responsive behavior of
other My Account screens.
* Fixes a couple of Holds History CSS problems discovered while I was here.

Test Plan:
Enable ebook services. Log into your account and resize the screen to the size
of a mobile device. The ebook dashboard will display while the main account
dashboard disappears. Go into My Account, click Items checked out and then
click E-Items Currently Checked Out. The table has not reformatted itself for
responsive design view.

Post-patch: When you log in and resize the screen, the e-items dashboard
display will disappear along with the main account dashboard. When you access
the E-Items Currently Checked Out interface, the table will reformat itself
with column headers along the left side.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Conflicts:
Open-ILS/src/templates/opac/css/style.css.tt2

Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1691009: add release notes
Galen Charlton [Fri, 28 Apr 2017 14:39:55 +0000 (10:39 -0400)]
LP#1691009: add release notes

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1691009 Cache the RTL and LTR stylesheets
Dan Scott [Thu, 27 Apr 2017 19:31:39 +0000 (15:31 -0400)]
LP#1691009 Cache the RTL and LTR stylesheets

To allow browsers to cache the correct version of the stylesheet, append a GET
param indicating the direction.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1681009 Merge the RTL style with the LTR style (part2)
Ben Shum [Thu, 27 Apr 2017 15:43:55 +0000 (11:43 -0400)]
LP#1681009 Merge the RTL style with the LTR style (part2)

Finishing up the rest of the file and removing the RTL specific one

Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1681009 Merge the RTL style with the LTR style
Dan Scott [Thu, 27 Apr 2017 15:41:00 +0000 (11:41 -0400)]
LP#1681009 Merge the RTL style with the LTR style

Rather than adding the right-to-left stylesheet
Open-ILS/src/templates/opac/css/style-rtl.css.tt2 as something that
gets included in addition to the LTR style.css.tt2 when a RTL language is in
play, merge the logic directly into the stylesheet so that we save bytes over
the network, browser rendering time, and reduce the possibility that RTL will
be forgotten about when new features are added or styles are optimized.

Signed-off-by: Dan Scott <dan@coffeecode.net>
Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1681466: move text to body of confirm dialog and add title
Galen Charlton [Mon, 24 Apr 2017 17:16:21 +0000 (13:16 -0400)]
LP#1681466: move text to body of confirm dialog and add title

This patch tweaks the opt-in confirm dialog to add a
title and move the text to the body of the dialog, making it
consistent with other dialogs that ask long questions.

Test case for the entire bug fix
--------------------------------
[1] Ensure that <opt_in> is set to true in opensrf.xml.
[2] In the web staff client, open the checkout page
    and do a barcode search for a patron is *not* the
    same system as the workstation that the staff user
    is registered to.
[3] Verify that a dialog box is presented asking the
    staff user to confirm that personal information can be
    shared with the workstation's library.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
2 years agoLP#1681466: Text for web client opt-in dialog
Jeff Davis [Wed, 19 Apr 2017 16:42:38 +0000 (09:42 -0700)]
LP#1681466: Text for web client opt-in dialog

Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
2 years agoLP#1621178: fix fleshing of copy status for available items
Galen Charlton [Wed, 26 Apr 2017 13:59:07 +0000 (09:59 -0400)]
LP#1621178: fix fleshing of copy status for available items

Since copy status 0 means 'Available', test for null
explicitly.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1621178: Tweaks to item status column picker option
Kathy Lussier [Fri, 3 Mar 2017 12:33:37 +0000 (07:33 -0500)]
LP#1621178: Tweaks to item status column picker option

This commit:
* Removes the copy status column from the Checkout page. The expectation is
that items will not appear in this grid unless they have a Checked out status.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1621178 Copy Status Picker
Kyle Huckins [Tue, 25 Oct 2016 17:12:56 +0000 (10:12 -0700)]
LP#1621178 Copy Status Picker

Add copy status field to patron items out, patron
checkout, patron hold, item holds pane, holds shelf, and item status grids.

Signed-off-by: Kyle Huckins <khuckins@catalystdevworks.com>
Signed-off-by: Dawn Dale <ddale@georgialibraries.org>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Conflicts:
Open-ILS/src/templates/staff/cat/item/t_list.tt2

2 years agoDocs: Fix docs build warnings
Remington Steed [Wed, 19 Apr 2017 14:15:21 +0000 (10:15 -0400)]
Docs: Fix docs build warnings

This commit fixes the following kinds of warnings given by asciidoc when
building the docs HTML:

  - Incorrect header level
  - Incorrect list numbering
  - List numbering interrupted by an image (needs '+' on blank lines)
  - In one case, a list used '1)' style numbering, which AsciiDoc
    doesn't recognize. This commit corrects that, even though it caused
    no errors.

These are minor issues, but fixing them is easy and prevents future
confusion and errors.

Signed-off-by: Remington Steed <rjs7@calvin.edu>
2 years agoLP#1545115: Stamping upgrade script for description field in matrix tables
Jason Stephenson [Tue, 25 Apr 2017 17:33:08 +0000 (13:33 -0400)]
LP#1545115: Stamping upgrade script for description field in matrix tables

Signed-off-by: Jason Stephenson <jason@sigio.com>
2 years agoLP#1545115: add release notes entry
Galen Charlton [Tue, 25 Apr 2017 16:36:27 +0000 (12:36 -0400)]
LP#1545115: add release notes entry

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jason Stephenson <jason@sigio.com>
2 years agoLP#1545115: consolidate schema update scripts into one
Galen Charlton [Tue, 25 Apr 2017 13:55:00 +0000 (09:55 -0400)]
LP#1545115: consolidate schema update scripts into one

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jason Stephenson <jason@sigio.com>
2 years agoLP#1545115: add description field for policy matrix tables
Rogan Hamby [Mon, 25 Apr 2016 16:59:12 +0000 (12:59 -0400)]
LP#1545115: add description field for policy matrix tables

This patch adds description column for the
config.hold_matrix_matchpoint and circ_matrix_matchpoint tables
and pgTAP tests for them.

Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jason Stephenson <jason@sigio.com>
2 years agoLP#1682447 Fix README symlink for server_installation.adoc
Bill Erickson [Tue, 25 Apr 2017 14:29:35 +0000 (10:29 -0400)]
LP#1682447 Fix README symlink for server_installation.adoc

Otherwise autoreconf fails on missing README file.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jeff Godin <jgodin@tadl.org>
2 years agoChange all docs filenames to .adoc
Remington Steed [Fri, 7 Apr 2017 18:15:54 +0000 (14:15 -0400)]
Change all docs filenames to .adoc

This commit renames all AsciiDoc files to have the ".adoc" extension.
Also, this commit updates all "include::" references in the root.adoc
file.

RATIONALE: Some editing tools, including GitHub, will auto-generate an
HTML preview for AsciiDoc files if they have the filename extension
".adoc" or ".asciidoc". The community agreed to this change in 2015 (see
http://markmail.org/thread/z2s7xnxavpjzirwx).

NOTE: The docs build script will need to change the reference from
"root.txt" to "root.adoc".

Signed-off-by: Remington Steed <rjs7@calvin.edu>
2 years agoLP#1684011: My Account summary ebook link correction
Kathy Lussier [Wed, 19 Apr 2017 06:02:33 +0000 (02:02 -0400)]
LP#1684011: My Account summary ebook link correction

The links on the My Account Summary page to the user's ebook checkouts and holds
go to the incorrect URL. The links are updated in this commit to the correct
URL.

Test Plan:
* If your test system is not configured for ebook access, enabled it in the
config.tt2 file by setting ebook_api_enabled to true and
ebook_api.ebook_test.enabled to true.
* Log into a patron account
* The Account Summary page will show links to E-Items Currently Checked out,
E-Items Currently on Hold, and E-Items ready for pickup. Pre-patch, clicking one
of those links will bring you to a 404 page. Post-patch, clicking those links
should bring you to the appropriate My Account tab.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1683562: Typo fix in bill payment receipt template
Kathy Lussier [Tue, 18 Apr 2017 02:57:11 +0000 (22:57 -0400)]
LP#1683562: Typo fix in bill payment receipt template

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1685232: fix egCore.pcrud.apply()
Galen Charlton [Fri, 21 Apr 2017 14:06:17 +0000 (10:06 -0400)]
LP#1685232: fix egCore.pcrud.apply()

This patch fixes egCore.pcrud.apply() method so that it
behaves as intended (i.e., process an array of fieldmapper
objects and either creates, updates, or deletes them based
on the value of the isnew(), ischanged(), and isdeleted()
flags).

To test
-------
Currently no code uses this method (but some will soon), but
it can be tested by writing some code like this:

   var notes = [];
   var n1 = new egCore.idl.aun();
   n1.usr(userid); // etc.
   n1.isnew(true);
   notes.push(n1);
   var n2 = new egCore.idl.aun();
   n2.usr(userid); // etc.
   n2.isnew(true);
   notes.push(n1);

   egCore.pcrud.apply(notes).then(...

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
2 years agoforward-port 2.12.0-2.12.1 database update
Galen Charlton [Fri, 21 Apr 2017 13:12:54 +0000 (09:12 -0400)]
forward-port 2.12.0-2.12.1 database update

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoForward-port 2.11.4 upgrade script
Dan Wells [Wed, 19 Apr 2017 21:37:56 +0000 (17:37 -0400)]
Forward-port 2.11.4 upgrade script

Signed-off-by: Dan Wells <dbw2@calvin.edu>
2 years ago2.10.10-2.10.11 schema update
Galen Charlton [Wed, 19 Apr 2017 18:23:24 +0000 (14:23 -0400)]
2.10.10-2.10.11 schema update

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoschema update script for 2.10.10
Galen Charlton [Thu, 16 Feb 2017 20:43:21 +0000 (15:43 -0500)]
schema update script for 2.10.10

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoDocs: Final addition to 2.12 release notes
Kathy Lussier [Wed, 19 Apr 2017 17:14:18 +0000 (13:14 -0400)]
Docs: Final addition to 2.12 release notes

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoDocs: Release notes for 2.11.4 maintenance release
Kathy Lussier [Wed, 19 Apr 2017 16:28:19 +0000 (12:28 -0400)]
Docs: Release notes for 2.11.4 maintenance release

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Conflicts:
docs/RELEASE_NOTES_2_11.adoc

2 years agoDocs: Release notes for the 2.10.11 maintenance release
Kathy Lussier [Wed, 19 Apr 2017 16:09:14 +0000 (12:09 -0400)]
Docs: Release notes for the 2.10.11 maintenance release

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Conflicts:
docs/RELEASE_NOTES_2_10.adoc

Conflicts:
docs/RELEASE_NOTES_2_10.adoc

2 years agoLP#1680554: Stamping upgrade script for fix browse definition ids
Kathy Lussier [Wed, 19 Apr 2017 17:00:10 +0000 (13:00 -0400)]
LP#1680554: Stamping upgrade script for fix browse definition ids

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1680554: fix upgrade of subject|temporal_browse and subject|geographic_browse...
Galen Charlton [Wed, 19 Apr 2017 16:17:44 +0000 (12:17 -0400)]
LP#1680554: fix upgrade of subject|temporal_browse and subject|geographic_browse indexes

This patch fixes an issue where an Evergreen database that was
upgraded to 2.12.0 from an earlier version may not have had
the browsability of the subject|temporal and subject|geographic
indexes turned off in favor of the new *_browse versions. It also
fixes mapping of the new *_browse indexes to authority control
set bib fields.

Note that if the database started at 2.12.0, the browse
reingest can be cancelled.

To test
-------
[1] On a database that was upgraded to 2.12.0 from an earlier
    version, verify that after applying the database update and
    performing the browse reingest, that there are no
    metabib.browse_entry_def_map rows where def is 11 or 13. Also
    Also verify that the query that runs as part of the update
[2] On a database that was installed starting at 2.12.0, verify
    that the database update is a no-op.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoDocs: Point release notes for 2.12.1 release
Kathy Lussier [Wed, 19 Apr 2017 15:11:53 +0000 (11:11 -0400)]
Docs: Point release notes for 2.12.1 release

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1679279 Hold targeter parallel grouping repair
Bill Erickson [Mon, 3 Apr 2017 19:13:08 +0000 (15:13 -0400)]
LP#1679279 Hold targeter parallel grouping repair

Group parallel hold targeting batches on the metarecord ID, instead of
the ID of the metarecord map, which has no meaning to the application.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1682292: Mark record attr label and description as translation-aware
Mike Rylander [Mon, 17 Apr 2017 14:48:33 +0000 (10:48 -0400)]
LP#1682292: Mark record attr label and description as translation-aware

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1641708: follow-up - only record hold_id when logging hold placement
Galen Charlton [Wed, 5 Apr 2017 22:39:14 +0000 (18:39 -0400)]
LP#1641708: follow-up - only record hold_id when logging hold placement

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1641708 Work log avoid storing unneeded data
Bill Erickson [Mon, 14 Nov 2016 19:36:59 +0000 (14:36 -0500)]
LP#1641708 Work log avoid storing unneeded data

Avoid storing full transaction data with each work log entry.  Only
store data need for work log display and actions.

Includes the addition of a new field (entry.hold_id) for hold requests
so that the value does not have live in the large data blob.

To test:

1. Peform checkouts, holds placements,  and other log-tracked actions
   in the client.
2. Open Administration -> Workstation -> Stored Preferences and see
   values for key "eg.patron_log".  Values added after the patch will only
   contain ~8 keys with string values, no large nested objects.
3. Open Administration -> Local Administration -> Work Log and confirm
   recent log-tracked actions are all represented in the grid.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1670407 Add tests for xact_finish close/re-open
Dan Wells [Tue, 18 Apr 2017 15:06:03 +0000 (11:06 -0400)]
LP#1670407 Add tests for xact_finish close/re-open

Since this bug came about due to negative balance changes (and it was
easier), this commit extends the existing negative balances test suite
to include basic tests for checking both xact_finish conditions.

One of these tests fails without the fix from the previous commit.

Signed-off-by: Dan Wells <dbw2@calvin.edu>
2 years agoLP#1670407 Lost checkin re-opens transaction
Bill Erickson [Tue, 28 Mar 2017 18:15:44 +0000 (14:15 -0400)]
LP#1670407 Lost checkin re-opens transaction

Avoid re-closing a circulation that was re-opened during checkin because
it acquired a non-zero balance.  This is typically caused by, for
example, voiding a lost item fee during checkin and/or generating
overdues for lost-then-found items.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Dan Wells <dbw2@calvin.edu>
2 years agowebstaff: sound effects for patron search
Jason Etheridge [Mon, 17 Apr 2017 19:43:43 +0000 (15:43 -0400)]
webstaff: sound effects for patron search

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: install and include Lovefield in prep for offline mode
Mike Rylander [Thu, 30 Mar 2017 18:15:34 +0000 (14:15 -0400)]
webstaff: install and include Lovefield in prep for offline mode

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Conflicts:
Open-ILS/web/js/ui/default/staff/Gruntfile.js
Open-ILS/web/js/ui/default/staff/bower.json

Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: Allow adding new volumes to libaries that were not selected in the holdings...
Mike Rylander [Fri, 24 Mar 2017 15:35:53 +0000 (11:35 -0400)]
webstaff: Allow adding new volumes to libaries that were not selected in the holdings UI (and fix a couple minor bugs)

Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agoLP#1528924: Use localizable date filter format
Mike Rylander [Thu, 23 Mar 2017 14:51:59 +0000 (10:51 -0400)]
LP#1528924: Use localizable date filter format

Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agoLP#1528924 Item Status List Columns
Kyle Huckins [Tue, 24 Jan 2017 23:41:45 +0000 (15:41 -0800)]
LP#1528924 Item Status List Columns

Add several new columns to Item Status List.

Refactor of ItemSvc to properly grab circ-related information.

Signed-off-by: Kyle Huckins <khuckins@catalystdevworks.com>
 Changes to be committed:
modified:   Open-ILS/src/templates/staff/cat/item/t_list.tt2
modified:   Open-ILS/web/js/ui/default/staff/cat/item/app.js

Signed-off-by: Kyle Huckins <khuckins@catalystdevworks.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: Reprint Last Receipt functionality
Mike Rylander [Tue, 21 Mar 2017 17:03:44 +0000 (13:03 -0400)]
webstaff: Reprint Last Receipt functionality

Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: Apply XUL-era hotkeys to some actions
Mike Rylander [Tue, 21 Mar 2017 14:23:26 +0000 (10:23 -0400)]
webstaff: Apply XUL-era hotkeys to some actions

Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: Allow multiple hotkeys for a single action
Mike Rylander [Tue, 21 Mar 2017 14:22:59 +0000 (10:22 -0400)]
webstaff: Allow multiple hotkeys for a single action

Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: add more comments to print templates
Galen Charlton [Tue, 14 Mar 2017 22:05:45 +0000 (18:05 -0400)]
webstaff: add more comments to print templates

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: console logging for debugging audio
Jason Etheridge [Mon, 27 Mar 2017 20:00:11 +0000 (16:00 -0400)]
webstaff: console logging for debugging audio

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: warning sound for Refund Confirmation dialog
Jason Etheridge [Mon, 27 Mar 2017 19:52:06 +0000 (15:52 -0400)]
webstaff: warning sound for Refund Confirmation dialog

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: warning sound for Event Override dialog
Jason Etheridge [Mon, 27 Mar 2017 19:31:34 +0000 (15:31 -0400)]
webstaff: warning sound for Event Override dialog

Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: warning sound for Bad Barcode dialog
Jason Etheridge [Mon, 27 Mar 2017 19:10:45 +0000 (15:10 -0400)]
webstaff: warning sound for Bad Barcode dialog

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: warning sound for Item Not Found in Item Status
Jason Etheridge [Mon, 27 Mar 2017 19:01:48 +0000 (15:01 -0400)]
webstaff: warning sound for Item Not Found in Item Status

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agowebstaff: tweak successful renewal sound
Jason Etheridge [Thu, 23 Mar 2017 19:08:17 +0000 (15:08 -0400)]
webstaff: tweak successful renewal sound

aesthetic: default to info.wav instead of success.wav

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
2 years agoLP#1683388: Docs: README change for nodejs installation
Ben Shum [Fri, 14 Apr 2017 22:51:01 +0000 (18:51 -0400)]
LP#1683388: Docs: README change for nodejs installation

Now that we have Makefile developer support for Wheezy too, we can
skip the extra steps if we use the developer make target for any
supported distribution.

Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1683388:Install newer NodeJS binary for Ubuntu Trusty and Debian Wheezy
Ben Shum [Fri, 14 Apr 2017 22:33:31 +0000 (18:33 -0400)]
LP#1683388:Install newer NodeJS binary for Ubuntu Trusty and Debian Wheezy

We need newer stuff!

Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
2 years agoLP#1675899 Targeter --retarget-interval override fix
Bill Erickson [Fri, 24 Mar 2017 19:05:46 +0000 (15:05 -0400)]
LP#1675899 Targeter --retarget-interval override fix

Treat the hold targeter --retarget-interval command line option as an
option containing a string value (the interval) instead of a boolean.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
2 years agoLP#1667115 - Silence config.hard_due_date warning
Josh Stompro [Thu, 23 Feb 2017 19:38:12 +0000 (13:38 -0600)]
LP#1667115 - Silence config.hard_due_date warning

For every checkout where a hard due date isn't used there is a log
warning of "retrieve config.hard_due_date called with no ID...".

This fix silences that warning.

Signed-off-by: Josh Stompro <stomproj@larl.org>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1670425: RTL improvements to new advanced search limiter block
Kathy Lussier [Wed, 12 Apr 2017 02:37:20 +0000 (22:37 -0400)]
LP#1670425: RTL improvements to new advanced search limiter block

Add some extra divs to the block with associated styling so that the advanced
search limiter block displays correctly for right-to-left languages. Also, add
some CSS to the rtl stylesheet so that padding and margins are added to the
correct side of blocks.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1670425: Adjust the release notes entry to reflect changes
Kathy Lussier [Fri, 10 Mar 2017 17:50:20 +0000 (12:50 -0500)]
LP#1670425: Adjust the release notes entry to reflect changes

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1670425: New responsive design for advanced search limiters block
Kathy Lussier [Fri, 10 Mar 2017 13:57:26 +0000 (08:57 -0500)]
LP#1670425: New responsive design for advanced search limiters block

When the screen is 600px or smaller, we continue to only display the 'x filters
applied' link as we did with the sidebar display because displaying limiters
pushes the results too far down the screen. Clicking the link toggles the
display of the limiters.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1670425: Moving display of advanced search limiters on search results page
Kathy Lussier [Thu, 2 Mar 2017 04:06:49 +0000 (23:06 -0500)]
LP#1670425: Moving display of advanced search limiters on search results page

Moves the new 2.12 advanced search filters block out of the sidebar and
along the top of the screen so that the user can see limiters along with their
other search terms.

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1665933: describe the new -x option when running -h
Galen Charlton [Wed, 12 Apr 2017 20:06:09 +0000 (16:06 -0400)]
LP#1665933: describe the new -x option when running -h

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP 1665933: Skip XUL staff client build in make_release.
Jason Stephenson [Tue, 11 Apr 2017 14:52:09 +0000 (10:52 -0400)]
LP 1665933: Skip XUL staff client build in make_release.

Add a -x option to skip building the XulRunner staff clients.  This is
useful for making custom tarballs for local installation where you
will build the staff client on the server.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1680624 Remove bower packaging bits
Dan Scott [Wed, 12 Apr 2017 00:21:56 +0000 (20:21 -0400)]
LP#1680624 Remove bower packaging bits

We no longer need to install bower as part of the Makefile.install
targets or worry about the bower_components cache directory when
generating a release. Rip out those references.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Signed-off-by: Ben Shum <ben@evergreener.net>
2 years agoLP#1680624 angular-ui-bootstrap stopped shipping minified files
Dan Scott [Thu, 6 Apr 2017 20:28:31 +0000 (16:28 -0400)]
LP#1680624 angular-ui-bootstrap stopped shipping minified files

Per https://github.com/angular-ui/bootstrap/issues/5522 upstream
feels users should minimize the files themselves.

Signed-off-by: Dan Scott <dan@coffeecode.net>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Ben Shum <ben@evergreener.net>