From 5a8590898f6b2d71425e459b6c66894e1e39d04e Mon Sep 17 00:00:00 2001 From: erickson Date: Mon, 13 Oct 2008 16:42:24 +0000 Subject: [PATCH] Merged revisions 10380,10382,10384-10385,10389,10392,10395,10398,10401-10415,10418,10421-10432,10435,10438,10440-10448,10451-10459,10463-10469,10472-10476,10479-10503,10506-10554,10560-10566,10568-10579,10582-10596,10599-10603,10606-10609,10612-10613,10616,10619-10627,10632-10633,10636-10676,10679-10693,10696-10702,10704-10719,10721-10736,10739-10781,10784,10787-10797,10800-10805,10807-10824 via svnmerge from svn://svn.open-ils.org/ILS/trunk ........ r10380 | erickson | 2008-08-20 10:42:58 -0400 (Wed, 20 Aug 2008) | 1 line log the locale before the method name so it will still be possible to copy/paste method+params directly from log files ........ r10382 | erickson | 2008-08-20 13:08:09 -0400 (Wed, 20 Aug 2008) | 1 line use utf8 instead of us-ascii for outbound xml ........ r10384 | dbs | 2008-08-20 21:56:29 -0400 (Wed, 20 Aug 2008) | 2 lines Make RemoteRequest.js work inside the staff client as well as the OPAC ........ r10385 | dbs | 2008-08-21 00:12:00 -0400 (Thu, 21 Aug 2008) | 10 lines Enable translated database strings the right way: * Use the primary key of the given table, in combination with class hint and property, to identify the translated string * Stuff the primary key into the PO comment field so we can round-trip it * Adjust the oils_i18n_gettext() function to accept the additional parameters, including both INT and TEXT primary keys * Adjust the database seed values to use explicit primary keys throughout, and adjust the use of oils_i18n_gettext() to pass the additiona parameters ........ r10389 | erickson | 2008-08-21 09:39:44 -0400 (Thu, 21 Aug 2008) | 1 line forcing cache timeout on staged search cacheing (*sigh*). added some logging for timed out and 0-hit searches. removed warns and replaced with logger calls ........ r10392 | erickson | 2008-08-21 09:43:07 -0400 (Thu, 21 Aug 2008) | 1 line don't exit early on 0-hit search. cache them, since they are valid results ........ r10395 | erickson | 2008-08-21 10:31:01 -0400 (Thu, 21 Aug 2008) | 1 line when a no_session event is returned, remove the cookie and reload the page. started giving the default template a little more data ........ r10398 | erickson | 2008-08-21 11:13:13 -0400 (Thu, 21 Aug 2008) | 1 line added a method to return the org unit closed dates ........ r10401 | erickson | 2008-08-21 12:20:16 -0400 (Thu, 21 Aug 2008) | 1 line updated the default print template to show library hours and address ........ r10402 | sboyette | 2008-08-21 12:22:44 -0400 (Thu, 21 Aug 2008) | 2 lines new flag --tcnfile, allows specification of a dumpfile for all dontuse and found tcn values ........ r10403 | sboyette | 2008-08-21 12:25:03 -0400 (Thu, 21 Aug 2008) | 2 lines durrrr TCNFILE ........ r10404 | erickson | 2008-08-21 13:25:46 -0400 (Thu, 21 Aug 2008) | 1 line added a utility method to find a user's locale ........ r10405 | erickson | 2008-08-21 15:28:23 -0400 (Thu, 21 Aug 2008) | 1 line implemented the ability to go back in time (aka days_back). made option variable names more obvious. added flag which forces failed email notices to be appended to the global notice set ........ r10406 | erickson | 2008-08-21 15:59:31 -0400 (Thu, 21 Aug 2008) | 1 line added ability to specify which types of notices to generate ........ r10407 | erickson | 2008-08-21 15:59:54 -0400 (Thu, 21 Aug 2008) | 1 line cleaned up some formatting ........ r10408 | erickson | 2008-08-21 16:55:11 -0400 (Thu, 21 Aug 2008) | 1 line added support for using the org-unit setting for FROM address ........ r10409 | erickson | 2008-08-21 16:55:55 -0400 (Thu, 21 Aug 2008) | 1 line explicitly set all sender headers to the sender addr ........ r10410 | erickson | 2008-08-21 17:20:36 -0400 (Thu, 21 Aug 2008) | 1 line we need to report on circs that are /not/ lost/lonvoverdue/claimsreturned ........ r10411 | miker | 2008-08-21 21:33:48 -0400 (Thu, 21 Aug 2008) | 1 line add renewal-specific rule flag ........ r10412 | erickson | 2008-08-21 22:43:18 -0400 (Thu, 21 Aug 2008) | 1 line fixing overzealous search/replace and help text ........ r10413 | erickson | 2008-08-22 16:32:15 -0400 (Fri, 22 Aug 2008) | 5 lines These are deprecated. Removing. ........ r10414 | erickson | 2008-08-22 16:33:19 -0400 (Fri, 22 Aug 2008) | 4 lines Also deprecated ........ r10415 | erickson | 2008-08-22 16:36:43 -0400 (Fri, 22 Aug 2008) | 4 lines Also deprecated. This code now lives in Open-ILS/src/support-scripts/generate_circ_notices.pl ........ r10418 | erickson | 2008-08-22 18:07:36 -0400 (Fri, 22 Aug 2008) | 1 line added a handler for the case where the item is checked out by another user ........ r10421 | erickson | 2008-08-22 18:36:43 -0400 (Fri, 22 Aug 2008) | 1 line made the default print fonts smallerOpen-ILS/web/opac/extras/selfcheck/selfcheck.xml ........ r10422 | erickson | 2008-08-23 12:40:38 -0400 (Sat, 23 Aug 2008) | 5 lines Added a flag to force emails to be appended to a file instead of sent to the smtp server Added email recipient option to force all emails to go to the configured recipient ........ r10423 | erickson | 2008-08-23 12:56:40 -0400 (Sat, 23 Aug 2008) | 1 line --send-email and --use-email-outfile are no longer mutually exclusive ........ r10424 | erickson | 2008-08-24 11:51:06 -0400 (Sun, 24 Aug 2008) | 1 line added a cache for org-from-address ........ r10425 | erickson | 2008-08-24 12:06:41 -0400 (Sun, 24 Aug 2008) | 1 line specify utf8 output encoding on the email outfile ........ r10426 | erickson | 2008-08-24 12:22:55 -0400 (Sun, 24 Aug 2008) | 1 line do the same for stdout... ........ r10427 | erickson | 2008-08-24 12:34:17 -0400 (Sun, 24 Aug 2008) | 1 line typo F -> STDOUT ........ r10428 | erickson | 2008-08-24 17:18:07 -0400 (Sun, 24 Aug 2008) | 6 lines More cleanup of the Evergreen directory. This change replaces the Open-ILS version of the user editor (deprecated) with the Evergreen version, which is the maintaned version. Also removes the portion of the XUL makefile that copies files over from the Evergreen tree. ........ r10429 | erickson | 2008-08-24 17:54:16 -0400 (Sun, 24 Aug 2008) | 1 line moved to http://svn.open-ils.org/trac/ILS-Contrib/browser/PINES-Examples ........ r10430 | erickson | 2008-08-24 17:58:14 -0400 (Sun, 24 Aug 2008) | 1 line moved to http://svn.open-ils.org/trac/ILS-Contrib/browser/PINES-Examples ........ r10431 | erickson | 2008-08-24 17:59:50 -0400 (Sun, 24 Aug 2008) | 1 line moved to http://svn.open-ils.org/trac/ILS-Contrib/browser/PINES-Examples ........ r10432 | erickson | 2008-08-24 18:00:42 -0400 (Sun, 24 Aug 2008) | 1 line removing, deprecated ........ r10435 | erickson | 2008-08-25 09:20:23 -0400 (Mon, 25 Aug 2008) | 1 line add a page break after the print div ........ r10438 | phasefx | 2008-08-25 12:08:41 -0400 (Mon, 25 Aug 2008) | 1 line current copy location column for hold lists ........ r10440 | dbs | 2008-08-25 13:49:56 -0400 (Mon, 25 Aug 2008) | 3 lines Enable LIKE to use an index for authority.full_rec.value (on database clusters with a locale other than C or POSIX) ........ r10441 | erickson | 2008-08-25 17:56:16 -0400 (Mon, 25 Aug 2008) | 1 line make sure has is defined ........ r10442 | erickson | 2008-08-25 17:57:06 -0400 (Mon, 25 Aug 2008) | 1 line added new function which builds an org selector from a set of top-level orgs ........ r10443 | erickson | 2008-08-25 17:57:34 -0400 (Mon, 25 Aug 2008) | 1 line added method to grab work_ou related permissions ........ r10444 | erickson | 2008-08-25 17:58:07 -0400 (Mon, 25 Aug 2008) | 1 line typo yes -> no ........ r10445 | erickson | 2008-08-25 18:09:08 -0400 (Mon, 25 Aug 2008) | 1 line added work-org version of checkDisabled ........ r10446 | erickson | 2008-08-25 18:37:08 -0400 (Mon, 25 Aug 2008) | 1 line added companion to orgIsMine which will look at a list of parent orgs ........ r10447 | erickson | 2008-08-25 18:41:02 -0400 (Mon, 25 Aug 2008) | 1 line added library filter to copy location editor ........ r10448 | erickson | 2008-08-25 18:42:21 -0400 (Mon, 25 Aug 2008) | 1 line shelving location editor now has the ability to show locations relevent to all work orgs. org lists in the org display filter and in the create-new form are trimmed to the set of orgs (and children) the editing user has permission to access ........ r10451 | erickson | 2008-08-26 10:37:18 -0400 (Tue, 26 Aug 2008) | 1 line show newest checkouts first in the items out lists ........ r10452 | erickson | 2008-08-26 14:13:28 -0400 (Tue, 26 Aug 2008) | 1 line added batch versions of the work-perm-org fetchers ........ r10453 | erickson | 2008-08-26 15:41:38 -0400 (Tue, 26 Aug 2008) | 1 line using batch version of perm org fetcher. added onload callback option ........ r10454 | erickson | 2008-08-26 15:42:50 -0400 (Tue, 26 Aug 2008) | 1 line load org shortname into globalOrgTree orgs since it is now imported via autogen ........ r10455 | erickson | 2008-08-26 15:43:21 -0400 (Tue, 26 Aug 2008) | 1 line gave org selecter builder the option to display shortname instead of name, good for staff client ........ r10456 | erickson | 2008-08-26 16:03:52 -0400 (Tue, 26 Aug 2008) | 1 line added method to find "where" a given action can be performed based on perm orgs and a context org ........ r10457 | erickson | 2008-08-26 16:45:12 -0400 (Tue, 26 Aug 2008) | 1 line wording change. "filter" is misleading ........ r10458 | erickson | 2008-08-26 16:46:52 -0400 (Tue, 26 Aug 2008) | 1 line stat cat editor is now work-ou aware. default focus org is workstation. staff is given an option to change the focus org ........ r10459 | erickson | 2008-08-26 17:39:36 -0400 (Tue, 26 Aug 2008) | 1 line non-cat editor is now work-ou aware. default focus org is workstation. staff is given an option to change the focus org ........ r10463 | miker | 2008-08-27 12:52:45 -0400 (Wed, 27 Aug 2008) | 1 line fix find_relation to look in the builder _rels ........ r10464 | miker | 2008-08-27 13:01:50 -0400 (Wed, 27 Aug 2008) | 1 line arg. unneeded change ........ r10465 | dbs | 2008-08-27 13:14:35 -0400 (Wed, 27 Aug 2008) | 2 lines Specify the new column for the new explicit ID values that we added ........ r10466 | dbs | 2008-08-27 16:12:04 -0400 (Wed, 27 Aug 2008) | 2 lines Start using automake/autoconf for configuring, building, and installing Evergreen ........ r10467 | dbs | 2008-08-27 16:22:48 -0400 (Wed, 27 Aug 2008) | 2 lines Farewell to the long-deprecated Django administration interface ........ r10468 | dbs | 2008-08-27 16:37:05 -0400 (Wed, 27 Aug 2008) | 1 line We don't need to build anything in Evergreen directory, so no Makefile.am is needed ........ r10469 | miker | 2008-08-28 08:32:10 -0400 (Thu, 28 Aug 2008) | 1 line moving "builder" to the right place ... now all objects have proper access; removing overly restrictive left join avoidance code -- we may have to go further than this, too ........ r10472 | erickson | 2008-08-28 14:34:48 -0400 (Thu, 28 Aug 2008) | 1 line repaired record auto-delete code which could leave un-deleted volumes attached to a deleted copy if the volumes had no copies ........ r10473 | dbs | 2008-08-28 15:15:26 -0400 (Thu, 28 Aug 2008) | 2 lines Set svn:executable property on autogen.sh ........ r10474 | erickson | 2008-08-29 10:35:03 -0400 (Fri, 29 Aug 2008) | 1 line calling internal bib instead of auth rec creator on bib queue ........ r10475 | erickson | 2008-08-29 11:14:13 -0400 (Fri, 29 Aug 2008) | 1 line added use strict/warnings. fixed some missing variable declerations. cstoreeditor->create returns the new object, updated to accomodate those. exit spool method early on record create failure and return event ........ r10476 | miker | 2008-08-29 12:03:00 -0400 (Fri, 29 Aug 2008) | 1 line avoid using the too-magical selector value collector ........ r10479 | erickson | 2008-08-29 13:02:22 -0400 (Fri, 29 Aug 2008) | 1 line typo on new object ........ r10480 | erickson | 2008-08-29 15:39:54 -0400 (Fri, 29 Aug 2008) | 1 line MARC::File does not like IO::Scalar, using open() instead. defaulting to caller as the queue owner. ........ r10481 | erickson | 2008-08-29 16:14:31 -0400 (Fri, 29 Aug 2008) | 1 line calling entityize without obj ref. obj is an application.pm thing, doesn't know about entityize ........ r10482 | erickson | 2008-08-29 16:31:08 -0400 (Fri, 29 Aug 2008) | 1 line vandelay ui round 1. supports queue create, marc file upload, queue process ........ r10483 | erickson | 2008-08-29 18:19:40 -0400 (Fri, 29 Aug 2008) | 1 line added virtual attributes fields to queued bib and authority records ........ r10484 | erickson | 2008-08-29 18:20:12 -0400 (Fri, 29 Aug 2008) | 1 line passing around the queue object, not the id ........ r10485 | erickson | 2008-08-29 18:21:55 -0400 (Fri, 29 Aug 2008) | 1 line added method to retrieve fleshed bib/authority records by queue. abstracted out the queue perm checks ........ r10486 | dbs | 2008-08-30 10:30:02 -0400 (Sat, 30 Aug 2008) | 2 lines Add README for autogen.sh (missed in initial merge) - thanks, gfawcett! ........ r10487 | dbs | 2008-08-30 10:31:48 -0400 (Sat, 30 Aug 2008) | 2 lines Fix syntax errors in configoptions.sh (although this file might be rm'ed shortly) ........ r10488 | erickson | 2008-08-30 11:42:23 -0400 (Sat, 30 Aug 2008) | 1 line on perm failure, return failure event to caller instead of throwing exception ........ r10489 | erickson | 2008-08-30 12:02:29 -0400 (Sat, 30 Aug 2008) | 1 line make sure to grab the correct queue type for perm checking ........ r10490 | erickson | 2008-08-30 12:03:13 -0400 (Sat, 30 Aug 2008) | 1 line fetch bib/auth attr defs at startup time. leave some debugging for now ........ r10491 | erickson | 2008-08-30 12:04:39 -0400 (Sat, 30 Aug 2008) | 1 line make vandelay attr defs world readable ........ r10492 | erickson | 2008-08-30 12:48:14 -0400 (Sat, 30 Aug 2008) | 1 line after queueing, retrieve the recs and shove them into a grid. need to add attr display ........ r10493 | dbs | 2008-08-30 15:08:02 -0400 (Sat, 30 Aug 2008) | 2 lines Removing ephemeral file, per kbeswick's nod ........ r10494 | erickson | 2008-08-30 16:30:06 -0400 (Sat, 30 Aug 2008) | 1 line displaying bib attrs in grid. added option to pass in queue id to bypass upload form ........ r10495 | dbs | 2008-08-31 11:20:07 -0400 (Sun, 31 Aug 2008) | 2 lines autogen.sh expects INSTALL as well ........ r10496 | phasefx | 2008-09-01 03:43:36 -0400 (Mon, 01 Sep 2008) | 1 line missing ampersand for entity ........ r10497 | erickson | 2008-09-01 11:08:34 -0400 (Mon, 01 Sep 2008) | 1 line fixing not found not-found event ;) ........ r10498 | dbs | 2008-09-01 13:41:23 -0400 (Mon, 01 Sep 2008) | 2 lines Remove duplicate entity definitions (caught by build/i18n/tests/check_entities.py) ........ r10499 | dbs | 2008-09-01 14:08:44 -0400 (Mon, 01 Sep 2008) | 3 lines SRU: Map author and name names from the eg indexset to the "author" index instead of "title" SRU: Log info and debug messages to osrfsys.log instead of the Apache logs ........ r10500 | dbs | 2008-09-01 23:24:10 -0400 (Mon, 01 Sep 2008) | 2 lines setuptools is a CentOS prereq as well ........ r10501 | dbs | 2008-09-02 00:10:41 -0400 (Tue, 02 Sep 2008) | 2 lines Overcome a problem building DateTime::Format::ISO8601 on CentOS ........ r10502 | erickson | 2008-09-02 09:56:10 -0400 (Tue, 02 Sep 2008) | 1 line close the cstore connection before return ........ r10503 | erickson | 2008-09-02 09:58:45 -0400 (Tue, 02 Sep 2008) | 1 line using addOnLoad (thanks, dbs). using atomic version of queued record fetcher to bypass streaming response bug (still not sure what's up with that) ........ r10506 | erickson | 2008-09-02 11:06:59 -0400 (Tue, 02 Sep 2008) | 1 line added logic to detect Safari. if Safari, use the same select.option onclick trickery that IE requires ........ r10507 | erickson | 2008-09-02 12:10:14 -0400 (Tue, 02 Sep 2008) | 1 line no need to commit on read, rollback instead ........ r10508 | erickson | 2008-09-02 13:30:27 -0400 (Tue, 02 Sep 2008) | 1 line moved grid layout into the markup for easier i18nization. added buttons to select all/none. stub import button ........ r10509 | erickson | 2008-09-02 15:48:05 -0400 (Tue, 02 Sep 2008) | 1 line mike, check me on this one... fixing what looks like a copy/paste error. bib_record_attrs don't have lineitems ........ r10510 | erickson | 2008-09-02 15:49:48 -0400 (Tue, 02 Sep 2008) | 7 lines added initial bib import logic. this is bibs only, no holdings. also, at this point, a failure event will roll back the entire import, which is probably not what is wanted. no auth import yet ........ r10511 | erickson | 2008-09-02 15:50:30 -0400 (Tue, 02 Sep 2008) | 1 line rollback on failed auth as well.. ........ r10512 | miker | 2008-09-02 16:34:26 -0400 (Tue, 02 Sep 2008) | 1 line trigger for item import ........ r10513 | miker | 2008-09-02 16:51:17 -0400 (Tue, 02 Sep 2008) | 1 line minor typo fixes; table creation ordering ........ r10514 | erickson | 2008-09-02 17:42:02 -0400 (Tue, 02 Sep 2008) | 1 line more not-found evts ........ r10515 | erickson | 2008-09-02 17:44:07 -0400 (Tue, 02 Sep 2008) | 1 line plugged in bib import with progress bar. in a perfect world (with no collisions or holdings) you can import bibs ........ r10516 | erickson | 2008-09-02 22:22:39 -0400 (Tue, 02 Sep 2008) | 1 line sort the attr defs by label. better handle events on the startup calls ........ r10517 | erickson | 2008-09-03 09:45:12 -0400 (Wed, 03 Sep 2008) | 1 line updated match classes to match the schema. added virtual field for matches off queued records ........ r10518 | erickson | 2008-09-03 09:45:55 -0400 (Wed, 03 Sep 2008) | 1 line added fleshing of matches on queued rec retrieval. condensed some of the retrieval code ........ r10519 | erickson | 2008-09-03 09:46:31 -0400 (Wed, 03 Sep 2008) | 1 line added date/time parsing to import time on queued record display ........ r10520 | erickson | 2008-09-03 11:14:07 -0400 (Wed, 03 Sep 2008) | 1 line added logic to find matches. centering cell data ........ r10521 | erickson | 2008-09-03 12:23:07 -0400 (Wed, 03 Sep 2008) | 1 line added some css to indicate a match point ........ r10522 | erickson | 2008-09-03 12:23:48 -0400 (Wed, 03 Sep 2008) | 1 line for now, show the matched attr value and number of matches. will link to a page of matched bibs ........ r10523 | erickson | 2008-09-03 13:28:26 -0400 (Wed, 03 Sep 2008) | 1 line added vandelay to example config ........ r10524 | dbs | 2008-09-03 13:57:14 -0400 (Wed, 03 Sep 2008) | 2 lines Basic Vandelay configuration for Apache ........ r10525 | erickson | 2008-09-03 17:08:35 -0400 (Wed, 03 Sep 2008) | 1 line added an alternate marc2html stylesheet which only outputs a div instead of a full html document. falls back to the old style if slim is selected but no slim xsl is configured ........ r10526 | erickson | 2008-09-03 17:09:58 -0400 (Wed, 03 Sep 2008) | 1 line when we find matches, provide an option to view a list of matched records and see the MARC for those records ........ r10527 | erickson | 2008-09-03 17:24:48 -0400 (Wed, 03 Sep 2008) | 1 line removed old debug warnings ........ r10528 | erickson | 2008-09-03 17:37:08 -0400 (Wed, 03 Sep 2008) | 1 line some more minor cleanup ........ r10529 | erickson | 2008-09-03 22:43:30 -0400 (Wed, 03 Sep 2008) | 1 line added an overlay version of the queued bib import ........ r10530 | erickson | 2008-09-03 22:45:03 -0400 (Wed, 03 Sep 2008) | 1 line minor cleanup/comment ........ r10531 | dbs | 2008-09-04 00:36:49 -0400 (Thu, 04 Sep 2008) | 2 lines Get consistent with open-ils sock / log / pid names. ........ r10532 | erickson | 2008-09-04 09:01:50 -0400 (Thu, 04 Sep 2008) | 1 line sending headers via apache request content_type method, which seems to prevent the double headers issue. verifying upload file exists before a read is attempted ........ r10533 | erickson | 2008-09-04 09:04:00 -0400 (Thu, 04 Sep 2008) | 1 line no longer working around double-header issue. sorting attr defs on ID (experimenting) instead of name ........ r10534 | erickson | 2008-09-04 10:47:05 -0400 (Thu, 04 Sep 2008) | 1 line give a default form value to prevent warnings ........ r10535 | dbs | 2008-09-04 10:58:01 -0400 (Thu, 04 Sep 2008) | 3 lines Add a tests directory to hold sets of data and perhaps eventually tests for things like import and conversion tools. ........ r10536 | dbs | 2008-09-04 11:14:42 -0400 (Thu, 04 Sep 2008) | 2 lines Try an uncorrupted version of the file, eh? ........ r10537 | erickson | 2008-09-04 12:19:41 -0400 (Thu, 04 Sep 2008) | 1 line rolling back removal of matched attribute field, but changing name from "field" to "matched_attr" ........ r10538 | erickson | 2008-09-04 12:22:08 -0400 (Thu, 04 Sep 2008) | 1 line oops, forgot to repair array positions ........ r10539 | erickson | 2008-09-04 13:18:17 -0400 (Thu, 04 Sep 2008) | 1 line fixed bug in matching attrs to matches. now showing match field_type in list of matched records. started on ui for picking record to overlay ........ r10540 | miker | 2008-09-05 08:05:24 -0400 (Fri, 05 Sep 2008) | 1 line cleaning up the Evergreen repo area; adding Overlay as an option to Vandelay upload; fix thinko in in-db circ to load the circ test ........ r10541 | erickson | 2008-09-05 08:30:26 -0400 (Fri, 05 Sep 2008) | 1 line added not-found event ........ r10542 | erickson | 2008-09-05 10:03:42 -0400 (Fri, 05 Sep 2008) | 1 line for ease of UI dev, allow import and overlay records on same API call. overlay recs present in overlay map ........ r10543 | erickson | 2008-09-05 10:04:39 -0400 (Fri, 05 Sep 2008) | 1 line finished overlay select. overlay selected records on import ........ r10544 | erickson | 2008-09-05 10:45:34 -0400 (Fri, 05 Sep 2008) | 1 line make sure record is selected for import if overlay has been selected. pre-select overlay target if it's already been chosen ........ r10545 | miker | 2008-09-05 12:41:50 -0400 (Fri, 05 Sep 2008) | 1 line adding rule localization support to in-db circ ........ r10546 | erickson | 2008-09-05 12:58:19 -0400 (Fri, 05 Sep 2008) | 1 line added not-found event ........ r10547 | erickson | 2008-09-05 13:38:47 -0400 (Fri, 05 Sep 2008) | 1 line when all items in a queue are imported, mark the queue as complete. added api call for fetching all of a user's queues ........ r10548 | erickson | 2008-09-05 13:39:45 -0400 (Fri, 05 Sep 2008) | 1 line added a toolbar for choosing interfaces. added a queue picker interface to pick a queue to view ........ r10549 | erickson | 2008-09-05 13:40:15 -0400 (Fri, 05 Sep 2008) | 1 line removed non-existent column ........ r10550 | erickson | 2008-09-05 15:23:58 -0400 (Fri, 05 Sep 2008) | 1 line oops, extra commit. removing ........ r10551 | erickson | 2008-09-05 16:38:58 -0400 (Fri, 05 Sep 2008) | 1 line added upload-to-existing-queue. styling records to overlay slightly differently ........ r10552 | erickson | 2008-09-05 16:57:26 -0400 (Fri, 05 Sep 2008) | 1 line cleaned up some of the status display handling ........ r10553 | erickson | 2008-09-07 11:02:32 -0400 (Sun, 07 Sep 2008) | 1 line marc xpath parser and compiler. needs more testing ........ r10554 | dbs | 2008-09-08 12:42:26 -0400 (Mon, 08 Sep 2008) | 3 lines Check in new fr-CA translations courtesy of Natural Resources Canada Update English POT files ........ r10560 | erickson | 2008-09-08 14:32:50 -0400 (Mon, 08 Sep 2008) | 1 line using new status-filtered hold pull list method ........ r10561 | dbs | 2008-09-08 15:14:03 -0400 (Mon, 08 Sep 2008) | 2 lines Enable LIKE to use an index on mfr.value for database clusters with locales other than C or POSIX ........ r10562 | dbs | 2008-09-08 21:09:29 -0400 (Mon, 08 Sep 2008) | 1 line Teach the i18n Makefile that lang.dtd needs to be local, too ........ r10563 | dbs | 2008-09-09 00:29:26 -0400 (Tue, 09 Sep 2008) | 1 line Provide a mechanism for merging localized ils_events.xml into master ils_events.xml ........ r10564 | dbs | 2008-09-09 09:47:06 -0400 (Tue, 09 Sep 2008) | 2 lines This is the new automake world, so get rid of the old Makefile ........ r10565 | dbs | 2008-09-09 10:46:40 -0400 (Tue, 09 Sep 2008) | 3 lines Add merging of localized ils_events.xml descriptions to "install" target Prevent repeated merging of localized ils_events.xml descriptions from adding duplicate descriptions ........ r10566 | dbs | 2008-09-09 10:54:02 -0400 (Tue, 09 Sep 2008) | 2 lines On i18n install, copy localized data seed values to sql/Pg directory ........ r10568 | dbs | 2008-09-09 14:49:45 -0400 (Tue, 09 Sep 2008) | 2 lines Evergreen XUL no longer exists ........ r10569 | dbs | 2008-09-09 16:05:27 -0400 (Tue, 09 Sep 2008) | 2 lines Completed fr-CA translation from Natural Resources Canada - thank you! ........ r10570 | dbs | 2008-09-09 22:58:12 -0400 (Tue, 09 Sep 2008) | 3 lines Escape CDATA before adding it to our entityized XML file (fixes a bug with <> in oils_persist:source_definition for iatc) ........ r10571 | dbs | 2008-09-09 23:09:02 -0400 (Tue, 09 Sep 2008) | 15 lines build/i18n/Makefile.in: * Install the entityized version of fm_IDL.xml in /reports/ if any locale is installed * Install the DTD set of entities for fm_IDL.xml for each localization Open-ILS/src/Makefile.am: * Copy, don't link, fm_IDL.xml into /reports/ - this avoids the /conf/ version from getting replaced by the entityized version (which messes up cstore but good) Open-ILS/examples/apache/eg_vhost.conf: * Add rudimentary locale settings for the reports interface, based on the contents of the Accept-Language header (assuming that we will only support one language in the header at a time in the staff client; otherwise, the last match in eg_vhost.conf wins despite the order of entries in the header) ........ r10572 | erickson | 2008-09-10 21:48:50 -0400 (Wed, 10 Sep 2008) | 1 line added permacrud handlers for authority record notes ........ r10573 | erickson | 2008-09-10 21:50:14 -0400 (Wed, 10 Sep 2008) | 1 line added a common entityize function to prevent the contining spread ........ r10574 | erickson | 2008-09-10 21:51:24 -0400 (Wed, 10 Sep 2008) | 1 line removing old, unused code ........ r10575 | erickson | 2008-09-10 21:52:06 -0400 (Wed, 10 Sep 2008) | 1 line authority record import/overlay and notes handling code ........ r10576 | erickson | 2008-09-10 21:53:29 -0400 (Wed, 10 Sep 2008) | 1 line using new entityize, importing authority code, not importing old util code ........ r10577 | erickson | 2008-09-10 21:55:58 -0400 (Wed, 10 Sep 2008) | 1 line bib and authority marchtml generator now use same code ........ r10578 | erickson | 2008-09-10 21:57:18 -0400 (Wed, 10 Sep 2008) | 1 line added authority import/overlay and external entityize ........ r10579 | erickson | 2008-09-10 21:57:42 -0400 (Wed, 10 Sep 2008) | 1 line plugged in new authority calls ........ r10582 | erickson | 2008-09-11 09:51:23 -0400 (Thu, 11 Sep 2008) | 1 line stringify the copy location list before making it a param ........ r10583 | dbs | 2008-09-11 15:50:53 -0400 (Thu, 11 Sep 2008) | 3 lines Set up locales for current translations in staff client This assumes we'll use the Accept-Language header for content negotiation in the staff client ........ r10584 | dbs | 2008-09-11 17:28:43 -0400 (Thu, 11 Sep 2008) | 2 lines Reporter wants fm_IDL.xml served up as text/xml ........ r10585 | erickson | 2008-09-12 09:54:20 -0400 (Fri, 12 Sep 2008) | 1 line fixing typos and thinkos ........ r10586 | dbs | 2008-09-13 01:37:15 -0400 (Sat, 13 Sep 2008) | 2 lines Typo: MODS doesn't define "abreviated" ........ r10587 | dbs | 2008-09-13 02:43:51 -0400 (Sat, 13 Sep 2008) | 3 lines Enable display of public notes (subfield 'z') in online resources per http://www.loc.gov/marc/856guide.html This requires a version bump from MARC21slim2MODS.xsl to MARC21slim2MODS32.xsl ........ r10588 | dbs | 2008-09-13 03:27:57 -0400 (Sat, 13 Sep 2008) | 2 lines Prevent an 'undefined' $z note from being displayed when neither $y and $3 are defined ........ r10589 | dbs | 2008-09-13 16:01:32 -0400 (Sat, 13 Sep 2008) | 3 lines Union approach to URL attributes was bug-ridden if a given attribute was not defined; move to explicitly set attributes instead ........ r10590 | dbs | 2008-09-13 20:32:29 -0400 (Sat, 13 Sep 2008) | 3 lines Now that we're guaranteeing each URL attribute will be defined, we no longer need to check for 'undefined' ........ r10591 | erickson | 2008-09-15 12:39:31 -0400 (Mon, 15 Sep 2008) | 1 line general cleanup ........ r10592 | erickson | 2008-09-15 12:40:18 -0400 (Mon, 15 Sep 2008) | 1 line when retrieveing the user's locale, be sure to default to the parent org's settings where appropriate ........ r10593 | erickson | 2008-09-15 12:40:57 -0400 (Mon, 15 Sep 2008) | 1 line more cleanup ........ r10594 | erickson | 2008-09-15 12:41:47 -0400 (Mon, 15 Sep 2008) | 1 line copy checkout history now limited by org setting and better permission checking. more cleanup ........ r10595 | erickson | 2008-09-15 12:55:23 -0400 (Mon, 15 Sep 2008) | 1 line fixed perm check. also, if no count is provided, falls back to configured max ........ r10596 | miker | 2008-09-15 14:32:41 -0400 (Mon, 15 Sep 2008) | 1 line specify billing/out/etc range by depth, not specific OU (trac ticket #21) ........ r10599 | erickson | 2008-09-15 16:22:22 -0400 (Mon, 15 Sep 2008) | 1 line added a batch org setting fetcher. cleaned up one of the high-org perm checkers, though, this method will slowly deprecate as work_orgs take over ........ r10600 | erickson | 2008-09-15 17:22:33 -0400 (Mon, 15 Sep 2008) | 1 line sort circs to group the notices ........ r10601 | erickson | 2008-09-15 18:11:41 -0400 (Mon, 15 Sep 2008) | 1 line had order_by clause in the wrong part of the query ........ r10602 | miker | 2008-09-16 12:59:12 -0400 (Tue, 16 Sep 2008) | 1 line fixing saving problems with various conify interfaces ........ r10603 | miker | 2008-09-16 12:59:28 -0400 (Tue, 16 Sep 2008) | 1 line saving marc codes still hates me ........ r10606 | erickson | 2008-09-16 17:18:34 -0400 (Tue, 16 Sep 2008) | 1 line added batch org unit settings fetcher. added org setting to turn on popup alerts for selfcheck non-success events. made the dfeault print settimeout longer to accomodate larger documents, but it now displays a screen to indicate it is printing ........ r10607 | dbs | 2008-09-16 21:55:05 -0400 (Tue, 16 Sep 2008) | 2 lines This is a built file now - good bye ........ r10608 | dbs | 2008-09-16 22:07:40 -0400 (Tue, 16 Sep 2008) | 2 lines Set svn:ignore to hide noise from built files ........ r10609 | miker | 2008-09-16 22:11:40 -0400 (Tue, 16 Sep 2008) | 1 line typo ........ r10612 | erickson | 2008-09-17 09:19:31 -0400 (Wed, 17 Sep 2008) | 1 line dtd-ify a string ........ r10613 | dbs | 2008-09-17 10:10:23 -0400 (Wed, 17 Sep 2008) | 2 lines Ignore .libs as well ........ r10616 | miker | 2008-09-17 10:34:42 -0400 (Wed, 17 Sep 2008) | 1 line Text::CSV changes ... arg; adding line breaks for bre format ........ r10619 | erickson | 2008-09-17 12:02:38 -0400 (Wed, 17 Sep 2008) | 1 line only show the print page when actually printing ........ r10620 | erickson | 2008-09-17 13:00:55 -0400 (Wed, 17 Sep 2008) | 1 line typo crept in ........ r10621 | erickson | 2008-09-17 13:22:33 -0400 (Wed, 17 Sep 2008) | 1 line only display queued recs with possible matches by default (checkbox) ........ r10622 | erickson | 2008-09-17 13:49:32 -0400 (Wed, 17 Sep 2008) | 1 line added limit/offset support to queued record retrieval method ........ r10623 | dbs | 2008-09-17 14:17:19 -0400 (Wed, 17 Sep 2008) | 2 lines Complete the move to MODS32 ........ r10624 | dbs | 2008-09-17 14:38:44 -0400 (Wed, 17 Sep 2008) | 1 line i18nize vandelay insert statements and move them into 950.data.seed-values.sql ........ r10625 | dbs | 2008-09-17 14:59:05 -0400 (Wed, 17 Sep 2008) | 1 line Remember to setval sequences after explicit ID inserts; enable psql to ignore comments in 012.schema.vandelay.sql ........ r10626 | erickson | 2008-09-17 16:40:15 -0400 (Wed, 17 Sep 2008) | 1 line added paging to queued recs grid ........ r10627 | dbs | 2008-09-17 17:01:26 -0400 (Wed, 17 Sep 2008) | 1 line Remove noisy tests for libdbi/libdbdpgsql; check for shared library path ........ r10632 | erickson | 2008-09-18 08:51:05 -0400 (Thu, 18 Sep 2008) | 1 line replace - with spaces in ISSN search ........ r10633 | dbs | 2008-09-18 10:20:01 -0400 (Thu, 18 Sep 2008) | 1 line Move ISSN hyphen filtering from client side to search method ........ r10636 | dbs | 2008-09-18 13:35:06 -0400 (Thu, 18 Sep 2008) | 1 line Force the hostname to appear on a new line; it can be hard to see ........ r10637 | erickson | 2008-09-18 14:09:43 -0400 (Thu, 18 Sep 2008) | 1 line adding initial grid column picker logic and plugged into queued records grid. also moved some filter options on the queue grid around for ease of use ........ r10638 | erickson | 2008-09-18 17:28:02 -0400 (Thu, 18 Sep 2008) | 1 line added queue delete option and begining of support for auto-import on non-colidding records ........ r10639 | dbs | 2008-09-19 11:33:23 -0400 (Fri, 19 Sep 2008) | 2 lines Add some MARC records from Unicorn GL3.1 ........ r10640 | erickson | 2008-09-19 12:26:30 -0400 (Fri, 19 Sep 2008) | 1 line moved marc edit/import functionaly out to an external module so it can be imported by other modules (namely, vandelay). this will allow said modules to manipulate bib records inside of a single transaction. cleaned out some old, unused code ........ r10641 | erickson | 2008-09-19 12:27:30 -0400 (Fri, 19 Sep 2008) | 1 line added "import entire queue" and "import all non-colliding records from a queue" method ........ r10642 | erickson | 2008-09-19 13:07:36 -0400 (Fri, 19 Sep 2008) | 1 line now using the local, uni-transaction versions of bib create/update ........ r10643 | erickson | 2008-09-19 13:47:03 -0400 (Fri, 19 Sep 2008) | 1 line like bib, moved the authority create/overlay logic to an external module for use by non-open-ils.cat apps ........ r10644 | erickson | 2008-09-19 13:47:24 -0400 (Fri, 19 Sep 2008) | 1 line explicity use app::sesssion ........ r10645 | erickson | 2008-09-19 13:48:15 -0400 (Fri, 19 Sep 2008) | 1 line using local authority create/overlay methods. some cleanup of overaly target handling ........ r10646 | dbs | 2008-09-19 14:24:41 -0400 (Fri, 19 Sep 2008) | 2 lines Add sets of 100 and 500 MARC records (French, MARC8, Unicorn GL3.1 source) ........ r10647 | erickson | 2008-09-19 14:49:35 -0400 (Fri, 19 Sep 2008) | 1 line added auto-import of non-colliding recs support ........ r10648 | erickson | 2008-09-19 16:23:26 -0400 (Fri, 19 Sep 2008) | 1 line fixed import name ........ r10649 | erickson | 2008-09-19 16:25:52 -0400 (Fri, 19 Sep 2008) | 1 line updating display with number of processed records as they are processed. no longer showing the "no records" page since you need acess to the grid to control the filters if there were no hits ........ r10650 | erickson | 2008-09-19 16:51:39 -0400 (Fri, 19 Sep 2008) | 1 line return event if relevent queue name exists ........ r10651 | erickson | 2008-09-19 16:52:01 -0400 (Fri, 19 Sep 2008) | 1 line new event for queue name exists ........ r10652 | erickson | 2008-09-19 16:52:39 -0400 (Fri, 19 Sep 2008) | 1 line set processed count to 0 pre-upload. fixed bug in is-grid-already-built logic ........ r10653 | dbs | 2008-09-19 17:07:08 -0400 (Fri, 19 Sep 2008) | 1 line Add sample MARC data with 1000 (jazz) and 5000 (music) records ........ r10654 | phasefx | 2008-09-19 22:32:49 -0400 (Fri, 19 Sep 2008) | 1 line Let's go back to this way for the time being. I tried calling it as ->get_org_tree() but was still having trouble. Bill? ........ r10655 | phasefx | 2008-09-20 02:03:57 -0400 (Sat, 20 Sep 2008) | 1 line move these lingering methods from Cat.pm to Cat/BibCommon.pm and put a trailing 1; in BibCommon.pm ........ r10656 | phasefx | 2008-09-20 03:40:51 -0400 (Sat, 20 Sep 2008) | 1 line finish I18N'izing the copy editor. One minor bug remains: if the locale changes, then templates will still work, but you won't get the spiffy green background color showing which fields the template affected ........ r10657 | phasefx | 2008-09-20 20:27:11 -0400 (Sat, 20 Sep 2008) | 11 lines Added an event to prevent the following... srfsh# request open-ils.actor open-ils.actor.user.get_work_ous "065ee1b9c57f56e84f7d60de44774eaa", 2 Received Exception: Name: osrfMethodException Status: *** Call to [open-ils.actor.user.get_work_ous] failed for session [1221956703.677298.122195670312701], thread trace [1]: Exception: OpenSRF::EX 2008-09-20T20:25:05 OpenSRF::Application /usr/local/share/perl/5.8.8/OpenSRF/Application.pm:202 : No event defined with textcode: PERMISSION_USR_WORK_OU_MAP_NOT_FOUND ........ r10658 | phasefx | 2008-09-20 21:23:47 -0400 (Sat, 20 Sep 2008) | 1 line findNodesByName was not liking these 's outside of 's ........ r10659 | phasefx | 2008-09-20 21:38:55 -0400 (Sat, 20 Sep 2008) | 1 line Getting messagecatalog to work with html via a div ........ r10660 | phasefx | 2008-09-20 22:12:04 -0400 (Sat, 20 Sep 2008) | 1 line Make this method return 1 and 0 like the description says. Currently the staff client can't distinguish legitimate null returns from network errors ........ r10661 | phasefx | 2008-09-20 22:18:36 -0400 (Sat, 20 Sep 2008) | 1 line Oops, didn't realize the Makefile was no longer under version control. Copy the bindings.xml file from chrome to server/ for xhtml files using messagecatalog ........ r10662 | phasefx | 2008-09-21 01:52:34 -0400 (Sun, 21 Sep 2008) | 1 line the util.widgets.load/save_attributes is an attempt at rolling our own 'persist' for elements. For menulists, we shouldn't force a value that doesn't actually exist as a menuitem ........ r10663 | phasefx | 2008-09-21 14:16:32 -0400 (Sun, 21 Sep 2008) | 1 line back to a more traditional z-client look. The Local Catalog service won't work until we port some changes from acq-experimental/Z3950.pm. Might also be worth reporting the 'native-evergreen-catalog' service along with other services in open-ils.search.z3950.retrieve_services, so we can better control what search fields are advertised with it, etc ........ r10664 | phasefx | 2008-09-21 14:22:11 -0400 (Sun, 21 Sep 2008) | 1 line fix the marc view/result view button ........ r10665 | phasefx | 2008-09-21 15:31:18 -0400 (Sun, 21 Sep 2008) | 1 line By hiding the contents of an unseen tabpanel, we can avoid problems with colliding accesskeys ........ r10666 | phasefx | 2008-09-21 15:36:34 -0400 (Sun, 21 Sep 2008) | 1 line let's do the tabpanel hiding for the first view ........ r10667 | phasefx | 2008-09-21 21:51:07 -0400 (Sun, 21 Sep 2008) | 1 line have the accesskeys for these buttons fire the embedded menu ........ r10668 | phasefx | 2008-09-21 23:18:13 -0400 (Sun, 21 Sep 2008) | 1 line typoes ........ r10669 | phasefx | 2008-09-21 23:51:01 -0400 (Sun, 21 Sep 2008) | 1 line toward standardizing some list actions ........ r10670 | phasefx | 2008-09-21 23:57:45 -0400 (Sun, 21 Sep 2008) | 1 line toward standardizing some list actions ........ r10671 | phasefx | 2008-09-22 00:22:49 -0400 (Mon, 22 Sep 2008) | 1 line focus on textbox after list action ........ r10672 | phasefx | 2008-09-22 00:36:43 -0400 (Mon, 22 Sep 2008) | 1 line toward standardizing some list actions ........ r10673 | phasefx | 2008-09-22 00:41:19 -0400 (Mon, 22 Sep 2008) | 1 line bad search & replace. Need to ask Bill for an .authoritative version of open-ils.search.biblio.mods_from_copy ........ r10674 | phasefx | 2008-09-22 00:51:37 -0400 (Mon, 22 Sep 2008) | 1 line fix disable/enable of clipboard action. I'm not sure when @disabled is preferable over .disabled, but in some cases it makes a difference ........ r10675 | phasefx | 2008-09-22 01:04:45 -0400 (Mon, 22 Sep 2008) | 1 line toward standardizing some list actions ........ r10676 | phasefx | 2008-09-22 04:13:45 -0400 (Mon, 22 Sep 2008) | 1 line test SSL cert before login (this will catch the folks who Cancel such dialogs), and with xulrunner 1.9, offer the stricter SSL exception dialog that Firefox 3 introduced ........ r10679 | erickson | 2008-09-22 08:36:57 -0400 (Mon, 22 Sep 2008) | 1 line porting the ability to search the local catalog as a Z3050 source ........ r10680 | erickson | 2008-09-22 09:20:11 -0400 (Mon, 22 Sep 2008) | 1 line ignore the native catalog search when processing async z39 results ........ r10681 | phasefx | 2008-09-22 09:22:15 -0400 (Mon, 22 Sep 2008) | 1 line forgot this when porting. Test SSL right from the start ........ r10682 | erickson | 2008-09-22 12:09:05 -0400 (Mon, 22 Sep 2008) | 1 line go one deeper in the caller stack so we're not repeating ........ r10683 | erickson | 2008-09-22 12:09:57 -0400 (Mon, 22 Sep 2008) | 1 line treat a "failed" request as an exception ........ r10684 | erickson | 2008-09-22 12:38:03 -0400 (Mon, 22 Sep 2008) | 1 line added support for deposit/rental billing at checkout time based on item deposit / deposit_amount settings ........ r10685 | erickson | 2008-09-22 12:39:32 -0400 (Mon, 22 Sep 2008) | 1 line changed return object key names for consistency ........ r10686 | erickson | 2008-09-22 16:40:38 -0400 (Mon, 22 Sep 2008) | 1 line better protection for non-existent hold expire interval setting ........ r10687 | phasefx | 2008-09-22 16:52:22 -0400 (Mon, 22 Sep 2008) | 1 line staff function for editing expiration date for arbitrary holds in various hold interfaces ........ r10688 | erickson | 2008-09-23 08:36:54 -0400 (Tue, 23 Sep 2008) | 1 line typo ........ r10689 | erickson | 2008-09-23 11:32:28 -0400 (Tue, 23 Sep 2008) | 1 line moved to file-based marc storage, since memcache has a hard-coded 1MB limit on data sizes. added a (hard-coded for now) max file size setting. deleting file and cache data after records are spooled. added example config ........ r10690 | erickson | 2008-09-23 14:38:17 -0400 (Tue, 23 Sep 2008) | 1 line applying mike's grid scroll fixes, jason's typo fix. thanks guys ........ r10691 | erickson | 2008-09-23 17:47:36 -0400 (Tue, 23 Sep 2008) | 1 line can now pass raw marcxml to the marc2html method and it will generate the html ........ r10692 | erickson | 2008-09-23 17:48:20 -0400 (Tue, 23 Sep 2008) | 1 line added filter options for owner queue retrievel. added method to turn a record into html for display ........ r10693 | erickson | 2008-09-23 17:49:35 -0400 (Tue, 23 Sep 2008) | 1 line inspect queue now gives option to inspect completed queues as well. added marc2html option on main queue grid. more dojo layout normalization ........ r10696 | miker | 2008-09-24 16:13:32 -0400 (Wed, 24 Sep 2008) | 1 line adding prefix and suffix to name display in myopac ........ r10697 | miker | 2008-09-24 16:43:42 -0400 (Wed, 24 Sep 2008) | 1 line no comma ... ........ r10698 | dbs | 2008-09-24 22:52:39 -0400 (Wed, 24 Sep 2008) | 1 line Fix order of oils_i18n_gettext elements ........ r10699 | erickson | 2008-09-25 09:25:11 -0400 (Thu, 25 Sep 2008) | 1 line instead of displaying a link on match cells, have a dedicated match column, which links to a page with all matches. ........ r10700 | dbs | 2008-09-25 12:11:18 -0400 (Thu, 25 Sep 2008) | 1 line Bump YAZ to 3.0.34 - has been tested on 64-bit Debian and 32-bit Ubuntu servers and enables z39.50 server ........ r10701 | erickson | 2008-09-25 14:17:53 -0400 (Thu, 25 Sep 2008) | 1 line added a nice, friendly arrow to better indicate the "return to previous page" buttons ........ r10702 | erickson | 2008-09-25 15:11:23 -0400 (Thu, 25 Sep 2008) | 1 line Graham's initial bib attr definition create/update UI. w00t ........ r10704 | erickson | 2008-09-25 17:31:51 -0400 (Thu, 25 Sep 2008) | 1 line lots of small changes to support using mod_xmlent with vandelay. added new apache config section to that effect ........ r10705 | erickson | 2008-09-25 17:32:52 -0400 (Thu, 25 Sep 2008) | 1 line changed name to .xml since the file must be valid xml for mod_xmlent to eat it ........ r10706 | erickson | 2008-09-25 17:33:04 -0400 (Thu, 25 Sep 2008) | 1 line changed name to .xml since the file must be valid xml for mod_xmlent to eat it ........ r10707 | erickson | 2008-09-25 17:44:55 -0400 (Thu, 25 Sep 2008) | 1 line only compare the first 9 chars, in case the content type is "text/html; charset=blah", or similar. ........ r10708 | miker | 2008-09-26 12:50:12 -0400 (Fri, 26 Sep 2008) | 1 line fixing BETWEEN pub date filtering ........ r10709 | dbs | 2008-09-26 12:54:33 -0400 (Fri, 26 Sep 2008) | 2 lines Test records with Hebrew script and linking fields donated by Yitzchak Schaffer ........ r10710 | dbs | 2008-09-26 14:43:36 -0400 (Fri, 26 Sep 2008) | 1 line Use a locally hosted yaz package to avoid strange firewalls ........ r10711 | erickson | 2008-09-26 14:54:19 -0400 (Fri, 26 Sep 2008) | 1 line added params for filtering pubdate before/after/between/during. added functional support for before/after/between from advanced search interface. suggestions on labels appreciated ........ r10712 | erickson | 2008-09-26 15:39:57 -0400 (Fri, 26 Sep 2008) | 1 line plug in the proxy for logging into vandelay from outside the staff client ........ r10713 | erickson | 2008-09-26 16:19:19 -0400 (Fri, 26 Sep 2008) | 1 line added ability to only fetch/dislplay non-imported recs in queue retrieval. hiding page footer for now, since it seems to be causing probs with the bottom grid scroll ........ r10714 | erickson | 2008-09-26 17:13:19 -0400 (Fri, 26 Sep 2008) | 1 line finished up the payable-by-credit-balance api call ........ r10715 | dbs | 2008-09-27 21:44:41 -0400 (Sat, 27 Sep 2008) | 1 line Add unAPI to main record details instead of only in MARC view ........ r10716 | dbs | 2008-09-27 22:45:06 -0400 (Sat, 27 Sep 2008) | 5 lines Add permission descriptions from wiki. Edit descriptions for consistency. Break up some noun strings for easier reading and translation. Closes #23. ........ r10717 | miker | 2008-09-28 15:24:46 -0400 (Sun, 28 Sep 2008) | 1 line backend support for marking unrecovered debt ........ r10718 | miker | 2008-09-28 16:48:10 -0400 (Sun, 28 Sep 2008) | 1 line expose the new in-db z39.50 config ........ r10719 | miker | 2008-09-28 16:52:36 -0400 (Sun, 28 Sep 2008) | 1 line make in-db authoritative, but allow config file values as well ........ r10721 | dbs | 2008-09-28 19:15:31 -0400 (Sun, 28 Sep 2008) | 2 lines i18n-ize the default in-db Z39.50 servers (and fix a missing column value for OCLC along the way) ........ r10722 | dbs | 2008-09-28 22:02:42 -0400 (Sun, 28 Sep 2008) | 2 lines Hard-code path to ldconfig, which is evil but works for Debian/Ubuntu anyways ........ r10723 | erickson | 2008-09-29 00:51:39 -0400 (Mon, 29 Sep 2008) | 1 line org unit setting editor that is more context-specific, which honors parent settings. read-only for now. later this will replace the existing org settings editor ........ r10724 | erickson | 2008-09-29 09:24:03 -0400 (Mon, 29 Sep 2008) | 1 line changed file type to xhtml to match other admin files. added support for choosing the context org ........ r10725 | erickson | 2008-09-29 11:26:52 -0400 (Mon, 29 Sep 2008) | 1 line updating org settings now requires an explicit permission per setting ........ r10726 | erickson | 2008-09-29 11:27:57 -0400 (Mon, 29 Sep 2008) | 1 line some more xmlent settings for the xhtml files ........ r10727 | erickson | 2008-09-29 11:29:53 -0400 (Mon, 29 Sep 2008) | 1 line settings are now editable. added different widget types for the expected settings values. started plugging in entities ........ r10728 | erickson | 2008-09-29 11:30:35 -0400 (Mon, 29 Sep 2008) | 1 line removed duplicate require ........ r10729 | erickson | 2008-09-29 12:15:17 -0400 (Mon, 29 Sep 2008) | 1 line added a new pile of settings. added a flag to indicate when a value is not inherited from the parent org settings at runtime ........ r10730 | erickson | 2008-09-29 15:06:16 -0400 (Mon, 29 Sep 2008) | 1 line not necessary for expire/thaw dates to be in the future when editing other values on an existing hold ........ r10731 | erickson | 2008-09-29 16:43:23 -0400 (Mon, 29 Sep 2008) | 1 line fixed bug in org setting value parsing. now calling ancestor default method to search up org tree for settings. in particular, this will effect opac timeout settings ........ r10732 | erickson | 2008-09-29 16:43:43 -0400 (Mon, 29 Sep 2008) | 1 line log event loading at internal level, too wordy ........ r10733 | erickson | 2008-09-29 16:45:39 -0400 (Mon, 29 Sep 2008) | 1 line opac/staff login timeouts are now inherited (see last change to oils_utils.c) ........ r10734 | erickson | 2008-09-29 16:50:21 -0400 (Mon, 29 Sep 2008) | 1 line load the new org settings UI ........ r10735 | miker | 2008-09-30 13:38:12 -0400 (Tue, 30 Sep 2008) | 1 line adding hold verification support per copy_location ........ r10736 | miker | 2008-09-30 13:41:16 -0400 (Tue, 30 Sep 2008) | 1 line typo on array_position ........ r10739 | erickson | 2008-09-30 20:29:18 -0400 (Tue, 30 Sep 2008) | 1 line needed an extra bit of logic to tell checkout.full not to treat a precat as a stop-event if the caller knows it is a precat ........ r10740 | erickson | 2008-09-30 22:13:37 -0400 (Tue, 30 Sep 2008) | 1 line added additional error logging ........ r10741 | erickson | 2008-09-30 22:15:20 -0400 (Tue, 30 Sep 2008) | 1 line more logs ........ r10742 | miker | 2008-10-01 08:42:59 -0400 (Wed, 01 Oct 2008) | 36 lines A completely overhauled and generally much improved version of marc2bre from Dan Wells. Among other impovements, this contains: 1) In addition to or instead of specifying an "ID" field, one may now specify a TCN field. Our utter reliance on TCNs in my library may be out of the ordinary, but maybe not, so I am hoping this option will prove useful to others. 2) Some ambiguously named options have been deprecated and replaced with better ones. Either are still supported. I considered trying to standardize the use of underscores in option names, but didn't want to overstep on that. The new 'tcn*' options are patterned after the 'id*' options (no underscores), but a few other old and new options both did and still do have underscores where readability is otherwise (subjectively) difficult. 3) Because of this new emphasis on preserving TCNs, any code which assumed the ID and TCN to be related no longer does so. They can of course still be the same if desired. Many variables have been renamed to make this distinction much more explicit. 4) A recently added 'use901' flag has been expanded to now skip all ID/TCN processing entirely and simply use the values in the 901. I am unsure if that was the intention, but it sounded good to me, and I believe many other desired effects can be achieved by now using a combination of idfield and tcnfield values. 5) Rather than defaulting to 'System' for TCN source, 'System' is reserved for TCNs which are set to match the corresponding internal record IDs and 'Unknown' is used for all others. Also, 'Sirsi_Auto' was added for identifying imported Sirsi auto-generated TCNs (e.g. a1234567). 6) The code is now much more throughly commented, including basic explanations of all the options. ........ r10743 | erickson | 2008-10-01 12:40:26 -0400 (Wed, 01 Oct 2008) | 1 line do not limit queue display to matched records by default ........ r10744 | erickson | 2008-10-01 12:56:52 -0400 (Wed, 01 Oct 2008) | 1 line import each record inside its own transaction, so that a single failure won't kill the whole import. on failure, return the failure event in the response for that record. ........ r10745 | erickson | 2008-10-01 13:17:36 -0400 (Wed, 01 Oct 2008) | 1 line added url param that, if present, prevents search propogation to the advanced search interface ........ r10746 | miker | 2008-10-01 20:56:44 -0400 (Wed, 01 Oct 2008) | 1 line allowing per-org_unit reshelving complete setting ........ r10747 | miker | 2008-10-02 15:11:02 -0400 (Thu, 02 Oct 2008) | 1 line adding an new test report and some better formatting ........ r10748 | erickson | 2008-10-02 22:10:36 -0400 (Thu, 02 Oct 2008) | 1 line added conify link to admin page ........ r10749 | erickson | 2008-10-03 10:15:22 -0400 (Fri, 03 Oct 2008) | 1 line Graham's patch for finishing up the bib/auth attribute editor and DTD-ification for i18n. w00t*2 ........ r10750 | erickson | 2008-10-03 10:38:40 -0400 (Fri, 03 Oct 2008) | 1 line botton scrollbar still hidden with grid height 90%. changing height to 87 ........ r10751 | erickson | 2008-10-03 11:47:37 -0400 (Fri, 03 Oct 2008) | 1 line added locale picker to home page. setting locale value in the selector on page load ........ r10752 | dbs | 2008-10-03 13:27:05 -0400 (Fri, 03 Oct 2008) | 2 lines Fix a missing space that bugs mod_xmlent no end ........ r10753 | erickson | 2008-10-03 14:52:40 -0400 (Fri, 03 Oct 2008) | 1 line using dojo locale instead of apache locale. applying onchange handler after value is initually set ........ r10754 | erickson | 2008-10-03 14:56:48 -0400 (Fri, 03 Oct 2008) | 1 line sort the locale store by the display name ........ r10755 | dbs | 2008-10-05 09:33:23 -0400 (Sun, 05 Oct 2008) | 2 lines Style the nice language picker widget that berick added ........ r10756 | erickson | 2008-10-05 19:04:08 -0400 (Sun, 05 Oct 2008) | 1 line removed extra require ........ r10757 | erickson | 2008-10-05 19:04:33 -0400 (Sun, 05 Oct 2008) | 1 line go ahead and set html height/width in anticipation of bordercontainers ........ r10758 | erickson | 2008-10-05 19:06:05 -0400 (Sun, 05 Oct 2008) | 1 line 1 file is getting out of hand. broke out each top-level content pane into its own file. ........ r10759 | erickson | 2008-10-05 23:40:01 -0400 (Sun, 05 Oct 2008) | 1 line updated/cleaned up user settings code, like the newer org unit setter ........ r10760 | miker | 2008-10-06 07:27:52 -0400 (Mon, 06 Oct 2008) | 1 line safer MR mapping ........ r10761 | erickson | 2008-10-06 09:46:20 -0400 (Mon, 06 Oct 2008) | 1 line default to requesting user. if a single setting is requested, only grab that setting from the DB ........ r10762 | erickson | 2008-10-06 09:47:59 -0400 (Mon, 06 Oct 2008) | 1 line default to requesting user on retrieval as well ........ r10763 | erickson | 2008-10-06 11:11:38 -0400 (Mon, 06 Oct 2008) | 1 line implemented column persistence via user setting. only update grid layout when necessary to keep column widths accross pages ........ r10764 | erickson | 2008-10-06 13:27:57 -0400 (Mon, 06 Oct 2008) | 1 line make sure toolbar is visible if going directly to queue page via url param ........ r10765 | dbs | 2008-10-06 16:49:31 -0400 (Mon, 06 Oct 2008) | 2 lines Add a basic, ugly language picker to the SlimPAC (another part of #1) ........ r10766 | erickson | 2008-10-06 17:42:22 -0400 (Mon, 06 Oct 2008) | 1 line load the message catalog bindings from the server to support standalone marc editing ........ r10767 | erickson | 2008-10-06 17:44:57 -0400 (Mon, 06 Oct 2008) | 1 line added a marc-edit button to the marc-html view interface. launches marc editor tab for editing queued bib/auth records. closes tab on save. still some TODOs, but basically works ........ r10768 | dbs | 2008-10-06 17:52:00 -0400 (Mon, 06 Oct 2008) | 1 line And actually build the list of supported locales, mmkay? ........ r10769 | dbs | 2008-10-06 20:56:27 -0400 (Mon, 06 Oct 2008) | 1 line Language first, locale second for better sorting ........ r10770 | erickson | 2008-10-06 22:02:48 -0400 (Mon, 06 Oct 2008) | 1 line FF needs universalxpconnect to launch the marc editor ........ r10771 | dbs | 2008-10-06 22:20:50 -0400 (Mon, 06 Oct 2008) | 2 lines Integrate language picker into SlimPAC start/advanced search forms ........ r10772 | dbs | 2008-10-06 22:24:20 -0400 (Mon, 06 Oct 2008) | 1 line Print out a valid select form, eh ........ r10773 | dbs | 2008-10-06 22:40:09 -0400 (Mon, 06 Oct 2008) | 1 line Add a default locale for vandelay ........ r10774 | dbs | 2008-10-06 23:42:44 -0400 (Mon, 06 Oct 2008) | 1 line Enable Zotero to access MODS representation of detailed records ........ r10775 | miker | 2008-10-07 07:57:58 -0400 (Tue, 07 Oct 2008) | 1 line using proper location name since location is not modifying language, just describing ........ r10776 | erickson | 2008-10-07 08:48:39 -0400 (Tue, 07 Oct 2008) | 1 line only expose the marc editor for queued recs ........ r10777 | dbs | 2008-10-07 10:32:23 -0400 (Tue, 07 Oct 2008) | 1 line disable python by default as it is not necessary in 1.4 ........ r10778 | dbs | 2008-10-07 10:35:17 -0400 (Tue, 07 Oct 2008) | 1 line Don't complain if the target file is not there to be removed ........ r10779 | dbs | 2008-10-07 10:39:00 -0400 (Tue, 07 Oct 2008) | 1 line Make the option help tell the truth ........ r10780 | erickson | 2008-10-07 10:48:11 -0400 (Tue, 07 Oct 2008) | 1 line fixed bugs in displaying multiple matches on the same destionation record. fixed bugs in choosing overlay target and persisting chosen selection ........ r10781 | erickson | 2008-10-07 14:51:46 -0400 (Tue, 07 Oct 2008) | 1 line moved latest test labels into the DTD. reloading marc-html display after record edit ........ r10784 | erickson | 2008-10-07 16:01:48 -0400 (Tue, 07 Oct 2008) | 1 line run total owed and total checked out inside a transaction. in particular, give the penalty server latest information to work with ........ r10787 | erickson | 2008-10-07 16:56:36 -0400 (Tue, 07 Oct 2008) | 1 line only strip beginning and trailing spaces from tcn value in search ........ r10788 | dbs | 2008-10-08 01:19:39 -0400 (Wed, 08 Oct 2008) | 1 line Prepare Conify for XMLENT ........ r10789 | dbs | 2008-10-08 11:40:44 -0400 (Wed, 08 Oct 2008) | 3 lines Fix some broken XHTML in org_unit_type.html (does that tag needs args? hmm) Don't strip comments as we're hiding our JavaScript inside comments... ........ r10790 | dbs | 2008-10-08 11:51:36 -0400 (Wed, 08 Oct 2008) | 1 line XML parsers are a lot pickier about well-formedness than browsers ........ r10791 | dbs | 2008-10-08 12:24:25 -0400 (Wed, 08 Oct 2008) | 1 line XMLENT hatesess the double-quotes, precioussss ........ r10792 | miker | 2008-10-08 12:54:12 -0400 (Wed, 08 Oct 2008) | 1 line protecting MARC::Batch->next with a try block ........ r10793 | miker | 2008-10-08 14:53:38 -0400 (Wed, 08 Oct 2008) | 1 line allow the database to support a NULL item price ........ r10794 | erickson | 2008-10-08 15:24:57 -0400 (Wed, 08 Oct 2008) | 1 line extracted copy price calculation out to a shared function ........ r10795 | erickson | 2008-10-08 15:27:38 -0400 (Wed, 08 Oct 2008) | 1 line removing copy price routine which is actually called by no one ........ r10796 | erickson | 2008-10-08 16:29:06 -0400 (Wed, 08 Oct 2008) | 1 line added menu options for vandelay (marc import/export) and conify (server settings). removed previous conify entry in the generic admin index.xhtml ........ r10797 | erickson | 2008-10-08 18:22:47 -0400 (Wed, 08 Oct 2008) | 1 line added record export form into the vandelay interface ........ r10800 | erickson | 2008-10-08 22:41:14 -0400 (Wed, 08 Oct 2008) | 1 line fixed invalid xml closing tag ........ r10801 | erickson | 2008-10-09 09:20:48 -0400 (Thu, 09 Oct 2008) | 1 line added bucket id entry field for exporting buckets by id. put some borders in to make the form a little more clear ........ r10802 | erickson | 2008-10-09 09:26:49 -0400 (Thu, 09 Oct 2008) | 1 line register the export div ........ r10803 | erickson | 2008-10-09 09:38:32 -0400 (Thu, 09 Oct 2008) | 1 line fixe method name for new authority queues ........ r10804 | erickson | 2008-10-09 09:56:31 -0400 (Thu, 09 Oct 2008) | 1 line fixed authority queue-type setting to match expected values in DB ........ r10805 | dbs | 2008-10-09 11:34:00 -0400 (Thu, 09 Oct 2008) | 1 line Move search query input cleansing to the server side ........ r10807 | erickson | 2008-10-09 11:56:30 -0400 (Thu, 09 Oct 2008) | 1 line don't call ->value if no setting exists, return empty string ........ r10808 | erickson | 2008-10-09 11:57:11 -0400 (Thu, 09 Oct 2008) | 1 line handle the lack of non-existent settings. if settings already loaded, use those ........ r10809 | erickson | 2008-10-09 12:11:21 -0400 (Thu, 09 Oct 2008) | 1 line added method to return queue summary information ........ r10810 | erickson | 2008-10-09 14:59:18 -0400 (Thu, 09 Oct 2008) | 1 line added import-all option in queue display, repaired some bugs which prevented going back and forth between bib and auth record displays. showing queue name and imported vs. total in queue display. minor UI rearranging for less horizontal space ........ r10811 | erickson | 2008-10-09 18:17:00 -0400 (Thu, 09 Oct 2008) | 1 line make sure we rollback the aborted transactions so they are not sticking around. ........ r10812 | dbs | 2008-10-09 23:15:11 -0400 (Thu, 09 Oct 2008) | 2 lines A symbolic link in the repository just won't do. No no no. ........ r10813 | dbs | 2008-10-09 23:16:06 -0400 (Thu, 09 Oct 2008) | 2 lines Add the generic INSTALL instructions from autotools to start with. ........ r10814 | erickson | 2008-10-10 09:25:25 -0400 (Fri, 10 Oct 2008) | 1 line use org ancester setting for sender address ........ r10815 | erickson | 2008-10-10 12:36:44 -0400 (Fri, 10 Oct 2008) | 1 line added verify hold capture (and event) and no-op checkin flags ........ r10816 | dbs | 2008-10-10 12:40:14 -0400 (Fri, 10 Oct 2008) | 2 lines Add hash-bang. oops. ........ r10817 | erickson | 2008-10-10 13:06:54 -0400 (Fri, 10 Oct 2008) | 1 line added hold-verify flag to copy editor. while i was in there, added checkmark/x (true/false) colored glyphs instead of yes vs. no for easier eyeballing ........ r10818 | miker | 2008-10-10 13:44:05 -0400 (Fri, 10 Oct 2008) | 1 line filter out deleted items and volumes ........ r10819 | erickson | 2008-10-10 17:02:15 -0400 (Fri, 10 Oct 2008) | 1 line added support for deposit/rental exempt groups via org setting ........ r10820 | erickson | 2008-10-10 18:00:53 -0400 (Fri, 10 Oct 2008) | 1 line applying dan's dojo 1.2 compat patch ........ r10821 | dbs | 2008-10-10 22:43:13 -0400 (Fri, 10 Oct 2008) | 1 line Fix up dojo.requires for copy status ........ r10822 | dbs | 2008-10-10 22:47:18 -0400 (Fri, 10 Oct 2008) | 1 line Augment kbeswick's version of the script; a bit more tolerant of relative paths and such ........ r10823 | dbs | 2008-10-10 23:36:43 -0400 (Fri, 10 Oct 2008) | 3 lines Add the ability to generate live-db-setup.pl to eg_db_config.pl Database configuration can now be removed from configure and Makefiles ........ r10824 | dbs | 2008-10-10 23:53:12 -0400 (Fri, 10 Oct 2008) | 2 lines Missed one parameter for the settings. works now. ........ git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@10825 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- AUTHORS | 1 + ChangeLog | 1 + Evergreen/Makefile | 49 - Evergreen/circ_rules/calculate_duration.rules | 15 - Evergreen/circ_rules/calculate_max_fines.rules | 9 - .../circ_rules/calculate_recurring_fines.rules | 10 - Evergreen/circ_rules/circ_main.rules | 71 - Evergreen/circ_rules/dr_script.ttk | 45 - Evergreen/circ_rules/permit_circ.rules | 47 - Evergreen/circ_rules/permit_hold.rules | 44 - Evergreen/conf/lib_ips.txt | 440 -- Evergreen/conf/load_ips.pl | 30 - .../src/javascript/backend/circ/circ_duration.js | 83 - .../src/javascript/backend/circ/circ_groups.js | 114 - .../javascript/backend/circ/circ_item_config.js | 511 --- .../javascript/backend/circ/circ_permit_copy.js | 30 - .../javascript/backend/circ/circ_permit_hold.js | 131 - .../javascript/backend/circ/circ_permit_patron.js | 36 - .../javascript/backend/circ/circ_permit_renew.js | 15 - .../Application/Search/AddedContent/ContentCafe.pm | 209 - Evergreen/src/support-scripts/eg_gen_overdue.pl | 532 --- Evergreen/src/support-scripts/eg_gen_overdue.sh | 33 - Evergreen/web/opac/images/main_logo.jpg | Bin 18309 -> 0 bytes Evergreen/web/opac/images/small_logo.jpg | Bin 8350 -> 0 bytes Evergreen/xul/staff_client/server/patron/ue.js | 778 ---- Evergreen/xul/staff_client/server/patron/ue.xhtml | 986 ----- .../xul/staff_client/server/patron/ue_config.js | 1061 ----- Evergreen/xul/staff_client/server/patron/ue_ui.js | 466 --- INSTALL | 237 ++ Makefile | 45 - Makefile.am | 49 + NEWS | 1 + Open-ILS/admin/ils_admin/README | 15 - Open-ILS/admin/ils_admin/__init__.py | 0 Open-ILS/admin/ils_admin/manage.py | 11 - Open-ILS/admin/ils_admin/settings.py.example | 100 - Open-ILS/admin/ils_admin/setup/__init__.py | 0 .../admin/ils_admin/setup/ils_data/__init__.py | 0 Open-ILS/admin/ils_admin/setup/ils_data/models.py | 563 --- Open-ILS/admin/ils_admin/setup/views.py | 1 - Open-ILS/admin/ils_admin/urls.py | 5 - Open-ILS/examples/{Makefile => Makefile.in} | 0 Open-ILS/examples/apache/eg_vhost.conf | 74 +- Open-ILS/examples/apache/startup.pl | 2 +- Open-ILS/examples/fm_IDL.xml | 124 +- Open-ILS/examples/oils_sip.xml.example | 8 +- Open-ILS/examples/opensrf.xml.example | 107 +- Open-ILS/examples/opensrf_core.xml.example | 10 +- Open-ILS/examples/reporter-sql-builder-test.pl | 38 +- Open-ILS/examples/templates/overdue_7day.example | 8 +- Open-ILS/examples/templates/predue_1day.example | 8 +- Open-ILS/src/Makefile | 205 - Open-ILS/src/Makefile.am | 280 ++ Open-ILS/src/apachemods/Makefile | 18 - Open-ILS/src/apachemods/Makefile.am | 17 + Open-ILS/src/apachemods/mod_xmlent.c | 4 +- Open-ILS/src/c-apps/Makefile | 63 - Open-ILS/src/c-apps/Makefile.am | 34 + Open-ILS/src/c-apps/oils_event.c | 4 +- Open-ILS/src/c-apps/oils_utils.c | 10 +- Open-ILS/src/extras/Makefile | 12 - Open-ILS/src/extras/Makefile.am | 13 + Open-ILS/src/extras/Makefile.install | 11 +- Open-ILS/src/extras/autogen.sh | 17 +- Open-ILS/src/extras/eg_config.in | 142 + Open-ILS/src/extras/ils_events.xml | 42 +- Open-ILS/src/extras/import/marc2bre.pl | 368 +- .../src/extras/import/quick_metarecord_map.sql | 18 +- .../src/extras/import/user_import.pl | 0 Open-ILS/src/extras/locale_html_options.pl | 38 + {Evergreen => Open-ILS}/src/extras/report-fail | 0 {Evergreen => Open-ILS}/src/extras/report-success | 0 Open-ILS/src/java/{Makefile => Makefile.am} | 6 +- Open-ILS/src/offline/offline-config.pl | 6 - Open-ILS/src/offline/offline-config.pl.in | 5 + Open-ILS/src/perlmods/OpenILS/Application/Actor.pm | 339 +- .../src/perlmods/OpenILS/Application/AppUtils.pm | 88 +- Open-ILS/src/perlmods/OpenILS/Application/Auth.pm | 212 - Open-ILS/src/perlmods/OpenILS/Application/Cat.pm | 408 +- .../perlmods/OpenILS/Application/Cat/AuthCommon.pm | 67 + .../perlmods/OpenILS/Application/Cat/Authority.pm | 101 + .../perlmods/OpenILS/Application/Cat/BibCommon.pm | 293 ++ .../src/perlmods/OpenILS/Application/Cat/Merge.pm | 1 - .../src/perlmods/OpenILS/Application/Cat/Utils.pm | 97 - Open-ILS/src/perlmods/OpenILS/Application/Circ.pm | 127 +- .../perlmods/OpenILS/Application/Circ/Circulate.pm | 256 +- .../src/perlmods/OpenILS/Application/Circ/Holds.pm | 28 +- .../perlmods/OpenILS/Application/Circ/Transit.pm | 2 +- .../perlmods/OpenILS/Application/Collections.pm | 13 - .../src/perlmods/OpenILS/Application/CreditCard.pm | 42 +- .../src/perlmods/OpenILS/Application/Ingest.pm | 6 + .../src/perlmods/OpenILS/Application/PermaCrud.pm | 13 +- .../OpenILS/Application/Search/Authority.pm | 44 +- .../perlmods/OpenILS/Application/Search/Biblio.pm | 215 +- .../perlmods/OpenILS/Application/Search/Z3950.pm | 70 +- .../OpenILS/Application/Storage/CDBI/asset.pm | 2 +- .../OpenILS/Application/Storage/CDBI/money.pm | 2 +- .../Application/Storage/Publisher/action.pm | 2 +- .../OpenILS/Application/Storage/Publisher/money.pm | 14 + .../src/perlmods/OpenILS/Application/SuperCat.pm | 23 +- .../src/perlmods/OpenILS/Application/Vandelay.pm | 683 ++- Open-ILS/src/perlmods/OpenILS/Const.pm | 3 + Open-ILS/src/perlmods/OpenILS/Event.pm | 2 +- .../src/perlmods/OpenILS/Reporter/SQLBuilder.pm | 25 +- .../src/perlmods/OpenILS/Utils/CStoreEditor.pm | 9 +- Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm | 13 +- Open-ILS/src/perlmods/OpenILS/WWW/Exporter.pm | 3 +- Open-ILS/src/perlmods/OpenILS/WWW/Method.pm | 2 +- Open-ILS/src/perlmods/OpenILS/WWW/SuperCat.pm | 12 +- Open-ILS/src/perlmods/OpenILS/WWW/Vandelay.pm | 61 +- Open-ILS/src/perlmods/OpenILS/WWW/Web.pm | 2 +- Open-ILS/src/perlmods/OpenILS/WWW/XMLRPCGateway.pm | 2 + Open-ILS/src/python/Makefile | 22 - Open-ILS/src/python/Makefile.am | 14 + Open-ILS/src/reporter/clark-kent.pl | 2 +- Open-ILS/src/reporter/find_orphaned_reports.pl | 2 +- Open-ILS/src/sql/Pg/002.functions.config.sql | 11 +- Open-ILS/src/sql/Pg/002.schema.config.sql | 2 +- Open-ILS/src/sql/Pg/011.schema.authority.sql | 2 + Open-ILS/src/sql/Pg/012.schema.vandelay.sql | 257 +- Open-ILS/src/sql/Pg/030.schema.metabib.sql | 2 + Open-ILS/src/sql/Pg/040.schema.asset.sql | 3 +- Open-ILS/src/sql/Pg/080.schema.money.sql | 9 +- Open-ILS/src/sql/Pg/1.2.3-1.4-upgrade-db.sql | 22 + Open-ILS/src/sql/Pg/100.circ_matrix.sql | 52 +- Open-ILS/src/sql/Pg/950.data.seed-values.sql | 1763 ++++---- Open-ILS/src/support-scripts/eg_db_config.pl | 251 ++ .../src/support-scripts/generate_circ_notices.pl | 191 +- .../support-scripts/long-overdue-status-update.pl | 4 +- .../src/support-scripts}/object_dumper.pl | 0 .../src/support-scripts/offline-blocked-list.pl | 2 +- .../src/support-scripts/reshelving_complete.srfsh | 2 +- Open-ILS/src/support-scripts/settings-tester.pl | 22 +- .../thaw_expired_frozen_holds.srfsh | 2 +- Open-ILS/tests/datasets/FSL.marc | 1 + Open-ILS/tests/datasets/README | 10 + Open-ILS/tests/datasets/hebrew.marc | 1 + Open-ILS/tests/datasets/jazz_1k.mrc | 1 + Open-ILS/tests/datasets/lul_fre_100.mrc | 1 + Open-ILS/tests/datasets/lul_fre_500.mrc | 1 + Open-ILS/tests/datasets/music_5k.mrc | 1 + Open-ILS/tests/datasets/oss.marc | 1 + Open-ILS/web/conify/global/actor/org_unit.html | 45 +- .../web/conify/global/actor/org_unit_type.html | 30 +- Open-ILS/web/conify/global/admin.html | 18 +- Open-ILS/web/conify/global/config/copy_status.html | 25 +- Open-ILS/web/conify/global/config/copy_status.js | 4 +- .../web/conify/global/config/marc_code_maps.html | 34 +- .../web/conify/global/config/marc_code_maps.js | 5 +- .../web/conify/global/permission/grp_tree.html | 46 +- Open-ILS/web/conify/global/permission/grp_tree.js | 8 +- .../web/conify/global/permission/perm_list.html | 25 +- Open-ILS/web/conify/global/permission/perm_list.js | 4 +- Open-ILS/web/js/dojo/fieldmapper/Fieldmapper.js | 1 - Open-ILS/web/js/dojo/openils/GridColumnPicker.js | 227 + Open-ILS/web/js/dojo/openils/I18N.js | 7 + Open-ILS/web/js/dojo/openils/MarcXPathParser.js | 95 + Open-ILS/web/opac/common/js/RemoteRequest.js | 15 +- Open-ILS/web/opac/common/js/config.js | 9 + Open-ILS/web/opac/common/js/opac_utils.js | 43 +- Open-ILS/web/opac/common/js/org_utils.js | 21 +- Open-ILS/web/opac/common/js/utils.js | 5 +- Open-ILS/web/opac/extras/selfcheck/selfcheck.css | 9 +- Open-ILS/web/opac/extras/selfcheck/selfcheck.js | 77 +- Open-ILS/web/opac/extras/selfcheck/selfcheck.xml | 50 +- .../web/opac/extras/selfcheck/selfcheck_print.css | 9 +- Open-ILS/web/opac/extras/slimpac/advanced.html | 26 +- Open-ILS/web/opac/extras/slimpac/language.html | 140 + Open-ILS/web/opac/extras/slimpac/start.html | 17 +- Open-ILS/web/opac/locale/en-US/lang.dtd | 55 +- Open-ILS/web/opac/locale/en-US/opac.dtd | 22 +- Open-ILS/web/opac/locale/en-US/vandelay.dtd | 102 + Open-ILS/web/opac/skin/default/js/adv_global.js | 51 +- Open-ILS/web/opac/skin/default/js/holds.js | 24 +- Open-ILS/web/opac/skin/default/js/myopac.js | 2 + Open-ILS/web/opac/skin/default/js/rdetail.js | 38 +- Open-ILS/web/opac/skin/default/js/result_common.js | 3 + Open-ILS/web/opac/skin/default/js/search_bar.js | 5 - .../skin/default/xml/advanced/advanced_global.xml | 29 +- .../web/opac/skin/default/xml/common/fonts.xml | 18 +- Open-ILS/web/opac/skin/default/xml/header.xml | 2 +- .../web/opac/skin/default/xml/home/homesearch.xml | 18 + .../web/opac/skin/default/xml/home/index_body.xml | 2 +- .../skin/default/xml/myopac/myopac_summary.xml | 4 +- .../skin/default/xml/rdetail/rdetail_summary.xml | 1 + Open-ILS/web/reports/xul/template-config.js | 6 +- Open-ILS/web/vandelay/inc/attrs.xml | 102 + Open-ILS/web/vandelay/inc/export.xml | 64 + Open-ILS/web/vandelay/inc/marchtml.xml | 13 + Open-ILS/web/vandelay/inc/matches.xml | 39 + Open-ILS/web/vandelay/inc/progress.xml | 16 + Open-ILS/web/vandelay/inc/queue.xml | 120 + Open-ILS/web/vandelay/inc/queueselect.xml | 25 + Open-ILS/web/vandelay/inc/toolbar.xml | 11 + Open-ILS/web/vandelay/inc/upload.xml | 47 + Open-ILS/web/vandelay/vandelay.css | 34 + Open-ILS/web/vandelay/vandelay.js | 1088 +++++ Open-ILS/web/vandelay/vandelay.xml | 61 + Open-ILS/xsl/oilsMARC21slim2HTMLslim.xsl | 68 + .../xul/staff_client/{Makefile => Makefile.am} | 32 +- .../staff_client/chrome/content/auth/controller.js | 33 +- .../staff_client/chrome/content/main/constants.js | 5 +- .../xul/staff_client/chrome/content/main/main.xul | 6 +- .../xul/staff_client/chrome/content/main/menu.js | 28 + .../chrome/content/main/menu_frame_menus.xul | 4 + .../staff_client/chrome/content/util/widgets.js | 32 +- .../chrome/locale/en-US/offline.properties | 2 + Open-ILS/xul/staff_client/server/admin/admin.css | 11 +- Open-ILS/xul/staff_client/server/admin/adminlib.js | 57 + .../staff_client/server/admin/copy_locations.js | 104 +- .../staff_client/server/admin/copy_locations.xhtml | 50 +- Open-ILS/xul/staff_client/server/admin/index.xhtml | 2 +- .../xul/staff_client/server/admin/non_cat_types.js | 50 +- .../staff_client/server/admin/non_cat_types.xhtml | 6 +- .../staff_client/server/admin/org_unit_settings.js | 224 + .../server/admin/org_unit_settings.xhtml | 171 + .../staff_client/server/admin/stat_cat_editor.js | 207 +- .../server/admin/stat_cat_editor.xhtml | 19 +- .../xul/staff_client/server/cat/copy_editor.js | 113 +- Open-ILS/xul/staff_client/server/cat/marcedit.css | 1 + .../xul/staff_client/server/cat/record_buckets.js | 24 +- .../server/cat/record_buckets_overlay.xul | 11 +- Open-ILS/xul/staff_client/server/cat/z3950.js | 110 +- Open-ILS/xul/staff_client/server/cat/z3950.xul | 162 +- Open-ILS/xul/staff_client/server/circ/checkin.js | 36 +- Open-ILS/xul/staff_client/server/circ/checkin.xul | 6 +- .../staff_client/server/circ/checkin_overlay.xul | 17 +- .../xul/staff_client/server/circ/copy_status.js | 49 +- .../xul/staff_client/server/circ/copy_status.xul | 7 +- .../server/circ/copy_status_overlay.xul | 17 +- .../xul/staff_client/server/circ/in_house_use.js | 37 +- .../xul/staff_client/server/circ/in_house_use.xul | 27 +- Open-ILS/xul/staff_client/server/circ/util.js | 20 + .../server/locale/en-US/cat.properties | 52 +- .../server/locale/en-US/circ.properties | 5 + .../server/locale/en-US/common.properties | 2 + .../staff_client/server/patron/bill_details.xul | 2 +- .../staff_client/server/patron/bill_history.xul | 2 +- .../xul/staff_client/server/patron/bill_wizard.xul | 2 +- .../staff_client/server/patron/bills_overlay.xul | 2 +- Open-ILS/xul/staff_client/server/patron/holds.js | 65 +- Open-ILS/xul/staff_client/server/patron/holds.xul | 6 +- .../staff_client/server/patron/holds_overlay.xul | 25 +- Open-ILS/xul/staff_client/server/patron/ue.js | 238 +- Open-ILS/xul/staff_client/server/patron/ue.xhtml | 271 +- .../xul/staff_client/server/patron/ue_config.js | 165 +- Open-ILS/xul/staff_client/server/patron/ue_ui.js | 18 +- .../xul/staff_client/server/patron/user_edit.xhtml | 54 +- Open-ILS/xul/staff_client/server/skin/global.css | 8 - README | 1 + autogen.sh | 21 + build/i18n/{Makefile => Makefile.in} | 20 +- build/i18n/po/en-US/admin.properties.pot | 2 +- build/i18n/po/en-US/auth.properties.pot | 2 +- build/i18n/po/en-US/cat.properties.pot | 2 +- build/i18n/po/en-US/circ.properties.pot | 2 +- build/i18n/po/en-US/common.properties.pot | 6 +- build/i18n/po/en-US/db.seed.pot | 2375 +++++++---- build/i18n/po/en-US/fm_IDL.pot | 1651 ++++---- build/i18n/po/en-US/ils_events.xml.pot | 118 +- build/i18n/po/en-US/lang.dtd.pot | 6 +- .../i18n/po/en-US/multiclass_search_help.html.pot | 2 +- build/i18n/po/en-US/offline.properties.pot | 2 +- build/i18n/po/en-US/opac.dtd.pot | 46 +- build/i18n/po/en-US/patron.properties.pot | 2 +- build/i18n/po/fr-CA/admin.properties.po | 216 +- build/i18n/po/fr-CA/auth.properties.po | 40 +- build/i18n/po/fr-CA/cat.properties.po | 775 ++-- build/i18n/po/fr-CA/circ.properties.po | 642 +-- build/i18n/po/fr-CA/common.properties.po | 341 +- build/i18n/po/fr-CA/db.seed.po | 3778 +++++++++++------ build/i18n/po/fr-CA/fm_IDL.po | 2983 +++++++------- build/i18n/po/fr-CA/ils_events.xml.po | 548 ++- build/i18n/po/fr-CA/lang.dtd.po | 4347 ++++++++++---------- build/i18n/po/fr-CA/multiclass_search_help.html.po | 68 +- build/i18n/po/fr-CA/offline.properties.po | 352 +- build/i18n/po/fr-CA/patron.properties.po | 513 ++- build/i18n/po/hy-AM/db.seed.po | 2398 +++++++---- build/i18n/scripts/db-seed-i18n.py | 68 +- build/i18n/scripts/fieldmapper.py | 2 +- build/i18n/scripts/merge_ils_events.py | 89 + config.sh | 263 -- configure.ac | 347 ++ install.conf.default | 124 - install.sh | 280 -- 285 files changed, 22341 insertions(+), 20155 deletions(-) create mode 100644 AUTHORS create mode 100644 ChangeLog delete mode 100644 Evergreen/Makefile delete mode 100644 Evergreen/circ_rules/calculate_duration.rules delete mode 100644 Evergreen/circ_rules/calculate_max_fines.rules delete mode 100644 Evergreen/circ_rules/calculate_recurring_fines.rules delete mode 100644 Evergreen/circ_rules/circ_main.rules delete mode 100644 Evergreen/circ_rules/dr_script.ttk delete mode 100644 Evergreen/circ_rules/permit_circ.rules delete mode 100644 Evergreen/circ_rules/permit_hold.rules delete mode 100644 Evergreen/conf/lib_ips.txt delete mode 100755 Evergreen/conf/load_ips.pl delete mode 100644 Evergreen/src/javascript/backend/circ/circ_duration.js delete mode 100644 Evergreen/src/javascript/backend/circ/circ_groups.js delete mode 100644 Evergreen/src/javascript/backend/circ/circ_item_config.js delete mode 100644 Evergreen/src/javascript/backend/circ/circ_permit_copy.js delete mode 100644 Evergreen/src/javascript/backend/circ/circ_permit_hold.js delete mode 100644 Evergreen/src/javascript/backend/circ/circ_permit_patron.js delete mode 100644 Evergreen/src/javascript/backend/circ/circ_permit_renew.js delete mode 100644 Evergreen/src/perlmods/Evergreen/Application/Search/AddedContent/ContentCafe.pm delete mode 100755 Evergreen/src/support-scripts/eg_gen_overdue.pl delete mode 100755 Evergreen/src/support-scripts/eg_gen_overdue.sh delete mode 100644 Evergreen/web/opac/images/main_logo.jpg delete mode 100644 Evergreen/web/opac/images/small_logo.jpg delete mode 100644 Evergreen/xul/staff_client/server/patron/ue.js delete mode 100644 Evergreen/xul/staff_client/server/patron/ue.xhtml delete mode 100644 Evergreen/xul/staff_client/server/patron/ue_config.js delete mode 100644 Evergreen/xul/staff_client/server/patron/ue_ui.js create mode 100644 INSTALL delete mode 100644 Makefile create mode 100644 Makefile.am create mode 100644 NEWS delete mode 100644 Open-ILS/admin/ils_admin/README delete mode 100644 Open-ILS/admin/ils_admin/__init__.py delete mode 100755 Open-ILS/admin/ils_admin/manage.py delete mode 100644 Open-ILS/admin/ils_admin/settings.py.example delete mode 100644 Open-ILS/admin/ils_admin/setup/__init__.py delete mode 100644 Open-ILS/admin/ils_admin/setup/ils_data/__init__.py delete mode 100644 Open-ILS/admin/ils_admin/setup/ils_data/models.py delete mode 100644 Open-ILS/admin/ils_admin/setup/views.py delete mode 100644 Open-ILS/admin/ils_admin/urls.py rename Open-ILS/examples/{Makefile => Makefile.in} (100%) delete mode 100644 Open-ILS/src/Makefile create mode 100644 Open-ILS/src/Makefile.am delete mode 100644 Open-ILS/src/apachemods/Makefile create mode 100644 Open-ILS/src/apachemods/Makefile.am delete mode 100644 Open-ILS/src/c-apps/Makefile create mode 100644 Open-ILS/src/c-apps/Makefile.am delete mode 100644 Open-ILS/src/extras/Makefile create mode 100644 Open-ILS/src/extras/Makefile.am create mode 100644 Open-ILS/src/extras/eg_config.in rename {Evergreen => Open-ILS}/src/extras/import/quick_metarecord_map.sql (55%) rename {Evergreen => Open-ILS}/src/extras/import/user_import.pl (100%) create mode 100755 Open-ILS/src/extras/locale_html_options.pl rename {Evergreen => Open-ILS}/src/extras/report-fail (100%) rename {Evergreen => Open-ILS}/src/extras/report-success (100%) rename Open-ILS/src/java/{Makefile => Makefile.am} (82%) delete mode 100755 Open-ILS/src/offline/offline-config.pl create mode 100644 Open-ILS/src/offline/offline-config.pl.in delete mode 100644 Open-ILS/src/perlmods/OpenILS/Application/Auth.pm create mode 100644 Open-ILS/src/perlmods/OpenILS/Application/Cat/AuthCommon.pm create mode 100644 Open-ILS/src/perlmods/OpenILS/Application/Cat/Authority.pm create mode 100644 Open-ILS/src/perlmods/OpenILS/Application/Cat/BibCommon.pm delete mode 100644 Open-ILS/src/perlmods/OpenILS/Application/Cat/Utils.pm delete mode 100644 Open-ILS/src/python/Makefile create mode 100644 Open-ILS/src/python/Makefile.am create mode 100644 Open-ILS/src/sql/Pg/1.2.3-1.4-upgrade-db.sql create mode 100644 Open-ILS/src/support-scripts/eg_db_config.pl rename {Evergreen/src/extras/import => Open-ILS/src/support-scripts}/object_dumper.pl (100%) create mode 100755 Open-ILS/tests/datasets/FSL.marc create mode 100644 Open-ILS/tests/datasets/README create mode 100644 Open-ILS/tests/datasets/hebrew.marc create mode 100644 Open-ILS/tests/datasets/jazz_1k.mrc create mode 100644 Open-ILS/tests/datasets/lul_fre_100.mrc create mode 100644 Open-ILS/tests/datasets/lul_fre_500.mrc create mode 100644 Open-ILS/tests/datasets/music_5k.mrc create mode 100644 Open-ILS/tests/datasets/oss.marc create mode 100644 Open-ILS/web/js/dojo/openils/GridColumnPicker.js create mode 100644 Open-ILS/web/js/dojo/openils/MarcXPathParser.js create mode 100644 Open-ILS/web/opac/extras/slimpac/language.html create mode 100644 Open-ILS/web/opac/locale/en-US/vandelay.dtd create mode 100644 Open-ILS/web/vandelay/inc/attrs.xml create mode 100644 Open-ILS/web/vandelay/inc/export.xml create mode 100644 Open-ILS/web/vandelay/inc/marchtml.xml create mode 100644 Open-ILS/web/vandelay/inc/matches.xml create mode 100644 Open-ILS/web/vandelay/inc/progress.xml create mode 100644 Open-ILS/web/vandelay/inc/queue.xml create mode 100644 Open-ILS/web/vandelay/inc/queueselect.xml create mode 100644 Open-ILS/web/vandelay/inc/toolbar.xml create mode 100644 Open-ILS/web/vandelay/inc/upload.xml create mode 100644 Open-ILS/web/vandelay/vandelay.css create mode 100644 Open-ILS/web/vandelay/vandelay.js create mode 100644 Open-ILS/web/vandelay/vandelay.xml create mode 100644 Open-ILS/xsl/oilsMARC21slim2HTMLslim.xsl rename Open-ILS/xul/staff_client/{Makefile => Makefile.am} (71%) create mode 100644 Open-ILS/xul/staff_client/server/admin/org_unit_settings.js create mode 100644 Open-ILS/xul/staff_client/server/admin/org_unit_settings.xhtml create mode 100644 README create mode 100755 autogen.sh rename build/i18n/{Makefile => Makefile.in} (86%) create mode 100755 build/i18n/scripts/merge_ils_events.py delete mode 100755 config.sh create mode 100644 configure.ac delete mode 100644 install.conf.default delete mode 100755 install.sh diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000000..5650c91566 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +#AUTHORS diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000000..3323187d13 --- /dev/null +++ b/ChangeLog @@ -0,0 +1 @@ +#ChangeLog diff --git a/Evergreen/Makefile b/Evergreen/Makefile deleted file mode 100644 index b636fde374..0000000000 --- a/Evergreen/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -# ------------------------------------------------------------------------ -# Evergreen makefile -# ------------------------------------------------------------------------ - -NEW_OPAC_URL=myopac.domain -NEW_XUL_PACKAGE_NAME=openils -NEW_XUL_PACKAGE_LABEL=OpenILS - -# A kludge until we move the generic parts of the staff client to Open-ILS - -all: xul -install: circ-install iplist-install perl-install web-install - -xul: - @echo $@ - cp -R staff_client local_staff_client - find local_staff_client/ -type f -exec sed -i s/evergreen/${NEW_XUL_PACKAGE_NAME}/g {} \; - find local_staff_client/ -type f -exec sed -i s/Evergreen/${NEW_XUL_PACKAGE_LABEL}/g {} \; - (cd local_staff_client/chrome/skin/evergreen; mv evergreen.css ${NEW_XUL_PACKAGE_NAME}.css) - (cd local_staff_client/defaults/preferences; mv evergreen.js ${NEW_XUL_PACKAGE_NAME}.js) - (cd local_staff_client/chrome/content; mv evergreen ${NEW_XUL_PACKAGE_NAME}) - (cd local_staff_client/chrome/locale/en-US/; mv evergreen ${NEW_XUL_PACKAGE_NAME}) - (cd local_staff_client/chrome/skin; mv evergreen ${NEW_XUL_PACKAGE_NAME}) - make -C local_staff_client build - find local_staff_client/ -type f -exec sed -i s/gapines.org/${NEW_OPAC_URL}/g {} \; - make -C local_staff_client package - -perl-install: - @echo $@ - mkdir -p $(PERLDIR) - cp -r src/perlmods/* $(PERLDIR) - -circ-install: - @echo $@ - mkdir -p $(CIRCRULESDIR) - cp src/javascript/backend/circ/*.js $(CIRCRULESDIR) - -iplist-install: - @echo $@ - mkdir -p $(ETCDIR) - cp conf/lib_ips.txt $(ETCDIR) - -web-install: - @echo $@ - cp web/opac/images/* $(WEBDIR)/opac/images/ - -clean: - if [ -d local_staff_client ]; then make -C local_staff_client clean; fi; - diff --git a/Evergreen/circ_rules/calculate_duration.rules b/Evergreen/circ_rules/calculate_duration.rules deleted file mode 100644 index 9049765804..0000000000 --- a/Evergreen/circ_rules/calculate_duration.rules +++ /dev/null @@ -1,15 +0,0 @@ -[% - - rule = "2wk_default"; - loan_duration = copy.loan_duration; - - - - - - # ------------------------------------------------------------------ - # Default policy - # ------------------------------------------------------------------ - ret(rule, loan_duration); - -%] diff --git a/Evergreen/circ_rules/calculate_max_fines.rules b/Evergreen/circ_rules/calculate_max_fines.rules deleted file mode 100644 index 08d51db0cc..0000000000 --- a/Evergreen/circ_rules/calculate_max_fines.rules +++ /dev/null @@ -1,9 +0,0 @@ -[% - -# ------------------------------------------------------------------ -# Default policy -# ------------------------------------------------------------------ -ret('books', NORMAL); - - -%] diff --git a/Evergreen/circ_rules/calculate_recurring_fines.rules b/Evergreen/circ_rules/calculate_recurring_fines.rules deleted file mode 100644 index 14581a57a4..0000000000 --- a/Evergreen/circ_rules/calculate_recurring_fines.rules +++ /dev/null @@ -1,10 +0,0 @@ -[% - -# ------------------------------------------------------------------ -# Default policy -# ------------------------------------------------------------------ -ret('books', NORMAL); - - - -%] diff --git a/Evergreen/circ_rules/circ_main.rules b/Evergreen/circ_rules/circ_main.rules deleted file mode 100644 index b5403585eb..0000000000 --- a/Evergreen/circ_rules/circ_main.rules +++ /dev/null @@ -1,71 +0,0 @@ -[% - - - # ------------------------------------------------------------------ - # Macros for simpler syntax - # ------------------------------------------------------------------ - MACRO jump(n) PROCESS "$n"; - - MACRO ret(status,text) PROCESS ret_block s=status t=text; - - BLOCK ret_block; - result.0 = s; - result.1 = t; - "Template Result: "; result.0; " "; result.1; - STOP; - END; - - - # ------------------------------------------------------------------ - # These are passed in to every script - # ------------------------------------------------------------------ - # Objects : Methods - # ------------------- - # patron : - # copy : - # circlib : - # standings : - # title : - # ------------------------------------------------------------------ - - # ------------------------------------------------------------------ - # Constants - # ------------------------------------------------------------------ - OK = 0; - COPY_ISREF = 2; - COPY_NOCIRC = 3; - COPY_UNAVAIL = 4; - COPY_LOCATION = 5; - NOT_HOLD_USER = 6; - NO_COPY = 100; # used by container code - - - PATRON_STANDING = 10; - PATRON_FINE = 11; - PATRON_CHECKOUT_COUNT = 12; - - LOW = 1; - NORMAL = 2; - HIGH = 3; - - SHORT = 1; - NORMAL = 2; - EXTENDED = 3; - - - - # ------------------------------------------------------------------ - # Run the rules files - # ------------------------------------------------------------------ - PROCESS "$run_block" - patron = circ_objects.patron - copy = circ_objects.copy - circlib = circ_objects.copy.circ_lib() - title = circ_objects.title - standings = circ_objects.standings - patron_copies = circ_objects.patron_copies - patron_fines = circ_objects.patron_fines; - -%] - - diff --git a/Evergreen/circ_rules/dr_script.ttk b/Evergreen/circ_rules/dr_script.ttk deleted file mode 100644 index b388460afa..0000000000 --- a/Evergreen/circ_rules/dr_script.ttk +++ /dev/null @@ -1,45 +0,0 @@ -[% - -# ------------------------------------------------------------------ -# Circ Matrix -# -# Objects: -# patron -# copy -# loan_duration -# circlib -# shortname -# -# Constants: -# copy_types.* -# -# ------------------------------------------------------------------ - -# ------------------------------------------------------------------ -# Macros for simpler syntax - -MACRO jump(n) PROCESS $n; -MACRO policy(p) PROCESS policy_block val=p; -BLOCK policy_block; val; STOP; END; - -# ------------------------------------------------------------------ - - - -IF circlib.shortname == 'ARL-ATH'; jump('ARL_ATH'); END; -policy('pines_global_duration_policy_default'); - - -BLOCK ARL_ATH; - IF copy.type == copy_types.book AND copy.loan_duration == 1; policy('my_ath_policy'); END; - IF copy.type == copy_types.audio AND copy.loan_duration == 2; policy('my_other_ath_policy'); END; -END; - - -BLOCK BTRL; - IF copy.type == copy_types.dvd; policy('my_btrl_audio_policy'); END; -END; - - - -%] diff --git a/Evergreen/circ_rules/permit_circ.rules b/Evergreen/circ_rules/permit_circ.rules deleted file mode 100644 index c929bf30d5..0000000000 --- a/Evergreen/circ_rules/permit_circ.rules +++ /dev/null @@ -1,47 +0,0 @@ -[% - -# ------------------------------------------------------------------ -# Permissibility script. -# ------------------------------------------------------------------ - - - -# ------------------------------------------------------------------ -# Patron checks -# ------------------------------------------------------------------ - -IF patron.standing != "Good"; - ret(PATRON_STANDING, "Patron not in good standing: ${patron.standing}"); END; - -IF patron.profile == "Staff" && patron_copies > 50; - ret(PATRON_CHECKOUT_COUNT, "Patron checkout count exceeds limit"); END; - -IF patron.profile == "Patrons" && patron_copies > 10; - ret(PATRON_CHECKOUT_COUNT, "Patron checkout count exceeds limit"); END; - -IF patron.profile == "Users" && patron_copies > 5; - ret(PATRON_CHECKOUT_COUNT, "Patron checkout count exceeds limit"); END; - - -# ------------------------------------------------------------------ -# Copy checks -# ------------------------------------------------------------------ - -IF ! copy.circulate; - ret(COPY_NOCIRC, "Copy is not allowed to circulate"); END; - -IF copy.status != "Available" && copy.status != "On holds shelf"; - ret(COPY_UNAVAIL, "Copy is unavailable: ${copy.status}"); END; - -IF !copy.location.circulate; - ret(COPY_LOCATION, "Copy location not allowed to curculate"); END; - -IF copy.ref; - ret(COPY_ISREF, "Copy is reference material"); END; - - - - -ret(OK,"Allowed"); - -%] diff --git a/Evergreen/circ_rules/permit_hold.rules b/Evergreen/circ_rules/permit_hold.rules deleted file mode 100644 index ccb5e46f41..0000000000 --- a/Evergreen/circ_rules/permit_hold.rules +++ /dev/null @@ -1,44 +0,0 @@ -[% - -# ------------------------------------------------------------------ -# Permissibility script. -# ------------------------------------------------------------------ - - - -# ------------------------------------------------------------------ -# Patron checks -# ------------------------------------------------------------------ - -IF patron.standing != "Good"; - ret(PATRON_STANDING, "Patron not in good standing: ${patron.standing}"); END; - -IF patron.profile == "STAFF" && patron_copies > 50; - ret(PATRON_CHECKOUT_COUNT, "Patron checkout count exceeds limit"); END; - -IF patron.profile == "ADULT" && patron_copies > 10; - ret(PATRON_CHECKOUT_COUNT, "Patron checkout count exceeds limit"); END; - -IF patron.profile == "JUVENILE" && patron_copies > 5; - ret(PATRON_CHECKOUT_COUNT, "Patron checkout count exceeds limit"); END; - - -# ------------------------------------------------------------------ -# Copy checks -# ------------------------------------------------------------------ - -IF ! copy.circulate; - ret(COPY_NOCIRC, "Copy is not allowed to circulate"); END; - -IF !copy.location.circulate; - ret(COPY_LOCATION, "Copy location not allowed to curculate"); END; - -IF copy.ref; - ret(COPY_ISREF, "Copy is reference material"); END; - - - - -ret(OK,"Allowed"); - -%] diff --git a/Evergreen/conf/lib_ips.txt b/Evergreen/conf/lib_ips.txt deleted file mode 100644 index 7e8e48fcdd..0000000000 --- a/Evergreen/conf/lib_ips.txt +++ /dev/null @@ -1,440 +0,0 @@ -ARL-ATH 168.8.15.1 168.8.15.255 -ARL-ATH 168.12.0.1 168.12.0.255 -ARL-BOG 168.8.14.193 168.8.14.255 -ARL-DAN 168.8.20.2 168.8.20.127 -ARL-DAN 168.8.23.65 168.8.23.127 -ARL-LAV 168.8.22.129 168.8.22.191 -ARL-EAST 168.9.83.1 168.9.83.64 -ARL-LAY 168.9.83.65 168.9.83.128 -ARL-LEX 168.8.22.192 168.8.22.255 -ARL-ROY 168.8.23.1 168.8.23.63 -ARL-WAT 168.8.16.1 168.8.16.255 -ARL-WINT 168.8.23.65 168.8.23.127 -BROOK-HQ 168.10.0.0 168.10.0.128 -BTRL-MCD 168.11.134.1 168.11.134.63 -BTRL-MWL 168.8.197.129 168.8.197.255 -BTRL-TCL 168.8.202.129 168.8.202.191 -CHAT-SMRVL 168.8.0.0 168.8.0.128 -CHAT-TRION 168.8.2.0 168.8.2.64 -CHRL-CHICK 168.11.193.129 168.11.193.160 -CHRL-DADE 168.11.193.161 168.11.193.192 -CHRL-LW 168.11.193.0 168.11.193.128 -CHRL-ROSS 168.11.193.193 168.11.193.225 -CLAYTN-FOR 168.8.198.1 168.8.198.128 -CLAYTN-HQS 168.8.192.0 168.8.192.255 -CLAYTN-JON 168.8.198.129 168.8.198.254 -CLAYTN-MOR 168.8.199.1 168.8.199.128 -CLAYTN-RIV 168.8.199.129 168.8.199.254 -CPRL-A 168.10.17.1 168.10.17.72 -CPRL-B 168.10.16.1 168.10.16.63 -CPRL-C 168.10.16.129 168.10.16.191 -CPRL-L 168.10.16.193 168.10.16.255 -CPRL-R 168.10.16.69 168.10.16.127 -CPRL-T 168.10.15.1 168.10.15.128 -CRLS-DAWSN 168.8.0.129 168.8.0.255 -CRLS-LMPKN 168.8.1.0 168.8.1.128 -DCPL-CEN 168.13.15.0 168.13.15.255 -DCPL-NW 168.10.11.1 168.10.11.128 -DCPL-SS 168.10.11.129 168.10.11.254 -DCPL-TAL 168.10.12.1 168.10.12.128 -DCPL-WT 168.10.12.129 168.10.12.254 -DTRL-BLAK 168.10.0.193 168.10.0.255 -DTRL-CAMI 168.10.0.129 168.10.0.192 -DTRL-JAKN 168.10.21.193 168.10.21.255 -DTRL-PELH 168.10.1.65 168.10.1.128 -DTRL-SYLV 168.10.1.0 168.10.1.64 -ECGR-APPBY 168.11.129.193 168.11.129.255 -ECGR-AVTBC 168.11.131.1 168.11.131.63 -ECGR-BURKE 168.11.131.65 168.11.131.127 -ECGR-EUCHE 168.11.131.193 168.11.131.255 -ECGR-FRMAN 168.11.132.1 168.11.132.63 -ECGR-GIBBS 168.11.131.129 168.11.131.191 -ECGR-HARLM 168.11.132.65 168.11.132.127 -ECGR-LINCN 168.8.24.1 168.8.24.63 -ECGR-MAIN 168.11.130.1 168.11.130.255 -ECGR-MIDVL 168.11.132.193 168.11.132.255 -ECGR-MXWLL 168.11.132.129 168.11.132.191 -ECGR-SARDIS 168.11.133.1 168.11.133.63 -ECGR-WALLC 168.11.133.65 168.11.133.127 -ECGR-WARRN 168.11.133.129 168.11.133.191 -ECPL-ECPL 168.8.200.130 168.8.200.254 -ECPL-BWMN 168.9.33.1 168.9.33.62 -FBHCL-MAIN 168.10.1.129 168.10.1.255 -FRRLS-BA 168.8.2.65 168.8.2.128 -FRRLS-FA 168.8.3.0 168.8.3.255 -FRRLS-FY 168.10.128.0 168.10.128.128 -FRRLS-GR 168.8.4.0 168.8.4.255 -FRRLS-JA 168.8.2.193 168.8.2.255 -FRRLS-PT 168.12.211.1 168.12.211.254 -FRRLS-TY 168.8.5.0 168.8.5.64 -FRRLS-ZE 168.8.2.129 168.8.2.192 -HALL-BPL 168.8.202.193 168.8.202.255 -HALL-CL 168.8.203.1 168.8.203.63 -HALL-EH 168.8.203.65 168.8.203.127 -HALL-GVL 168.8.196.1 168.8.196.255 -HALL-MV 168.8.203.129 168.8.203.191 -HART-HQ 168.8.6.0 168.8.6.128 -HCLS-HA 168.8.5.129 168.8.5.192 -HCLS-LG 168.8.5.193 168.8.5.255 -HCLS-MD 168.8.6.129 168.8.6.255 -HCLS-ST 168.8.5.65 168.8.5.128 -HOU-CV 168.10.129.0 168.10.129.64 -HOU-PE 168.10.129.66 168.10.129.128 -HOU-WR 168.10.128.130 168.10.128.255 -JCL-LVILLE 168.11.128.0 168.11.128.128 -JCL-WADLEY 168.11.129.65 168.11.129.128 -JCL-WRENS 168.11.129.0 168.11.129.64 -KRLS-AR 168.10.3.0 168.10.3.64 -KRLS-CA 168.10.3.65 168.10.3.128 -KRLS-CL 168.10.3.129 168.10.3.192 -KRLS-RA 168.10.3.193 168.10.3.255 -KRLS-TE 168.10.2.0 168.10.2.255 -KRLS-WE 168.10.4.0 168.10.4.64 -LEE-LSB 168.10.5.0 168.10.5.255 -LEE-SMV 168.10.4.65 168.10.4.128 -MCCLS-HQ 168.10.6.0 168.10.6.255 -MGRL-EW 168.10.138.1 168.10.138.127 -MGRL-GH 168.13.143.180 168.13.143.200 -MGRL-GO 168.10.138.128 168.10.138.191 -MGRL-ID 168.10.138.192 168.10.138.255 -MGRL-JO 168.10.139.0 168.10.139.63 -MGRL-MA 168.10.139.64 168.10.139.127 -MGRL-MO 168.10.129.193 168.10.129.255 -MGRL-OG 168.10.139.128 168.10.139.191 -MGRL-LC 168.10.132.65 168.10.132.128 -MGRL-RV 168.10.132.0 168.10.132.64 -MGRL-SH 168.10.132.129 168.10.132.191 -MGRL-TW 168.10.139.192 168.10.139.255 -MGRL-WA 168.10.130.0 168.10.130.199 -MGRL-WA 168.10.130.221 168.10.130.254 -MGRL-WB 168.10.132.193 168.10.132.255 -MRGL-RO 168.10.138.0 168.10.138.63 -MRLS-FCPL 168.8.7.1 168.8.7.64 -MRLS-MRL 168.8.7.129 168.8.7.255 -MRLS-TCPL 168.8.7.65 168.8.7.128 -MRLS-UCPL 168.8.9.0 168.8.9.64 -NCLS-COVTN 168.8.193.1 168.8.193.255 -NEG-CLAYTN 168.8.9.129 168.8.9.192 -NEG-CLRKVL 168.8.8.0 168.8.8.255 -NEG-CLVLND 168.8.10.0 168.8.10.64 -NEG-CORNEL 168.8.9.65 168.8.9.128 -NEG-HELEN 168.8.10.65 168.8.10.128 -NEG-TOCCOA 168.8.9.193 168.8.9.255 -OCRL-DUBLN 168.10.136.1 168.10.136.255 -OCRL-SANDR 168.10.141.1 168.10.141.128 -OCRL-SOPER 168.11.10.193 168.11.10.255 -OCRL-WRIGH 168.10.140.1 168.10.140.63 -OHOOP-LADS 168.11.13.129 168.11.13.191 -OHOOP-LYON 168.11.0.65 168.11.0.128 -OHOOP-MONT 168.11.0.130 168.11.0.192 -OHOOP-TATG 168.11.0.1 168.11.0.64 -OHOOP-TATR 168.11.2.130 168.11.2.192 -OHOOP-VIDT 168.11.1.1 168.11.1.128 -OKRL-APPL 168.11.8.1 168.11.8.63 -OKRL-BACON 168.11.0.193 168.11.0.254 -OKRL-BLMEM 168.11.8.65 168.11.8.127 -OKRL-CLNCH 168.11.8.129 168.11.8.191 -OKRL-MA 168.11.8.193 168.11.8.255 -OKRL-WWC 168.11.7.1 168.11.7.255 -ORLS-HDQ 168.10.131.1 168.10.131.254 -ORLS-TEL 168.10.8.0 168.10.8.128 -ORLS-WIL 168.10.8.129 168.10.8.255 -PMRLS-BPL 168.10.135.65 168.10.135.128 -PMRLS-GPL 168.8.10.129 168.8.10.192 -PMRLS-HML 168.8.10.193 168.8.10.255 -PMRLS-MPL 168.8.11.0 168.8.11.255 -PMRLS-RCL 168.10.135.194 168.10.135.223 -PMRLS-TCL 168.8.12.0 168.8.12.64 -PMRLS-YPL 168.9.33.129 168.9.33.190 -PPL-BPL 168.10.135.0 168.10.135.64 -PPL-TPL 168.10.134.0 168.10.134.255 -ROCK-NG 168.8.200.1 168.8.200.128 -RML-MAIN 168.10.7.0 168.10.7.255 -SHRL-CD 168.8.201.193 168.8.201.255 -SHRL-CS 168.8.201.130 168.8.201.140 -SHRL-RK 168.8.205.1 168.8.205.63 -SHRL-RM 168.8.194.1 168.8.194.255 -SJRLS-JCML 168.11.128.129 168.11.128.192 -SJRLS-SCL 168.11.2.0 168.11.2.128 -SRL-AMBR 168.11.2.193 168.11.2.255 -SRL-AMBR 168.11.2.193 168.11.2.255 -SRL-BROX 168.11.3.0 168.11.3.64 -SRL-DOUG 168.11.1.129 168.11.1.255 -SRL-JDHAZ 168.11.3.65 168.11.3.128 -SRL-NICH 168.11.3.129 168.11.3.192 -SRL-PEAR 168.11.3.193 168.11.3.255 -SRL-WILLA 168.11.4.0 168.11.4.64 -STATELIB-L 168.28.68.1 168.28.68.254 -STRL-CLAX 168.11.11.1 168.11.11.63 -STRL-METT 168.11.11.64 168.11.11.129 -STRL-PEMB 168.11.11.130 168.11.11.191 -STRL-RHILL 168.11.11.193 168.11.11.255 -STRL-SBORO 168.11.9.1 168.11.9.255 -STRL-SWAIN 168.11.133.193 168.11.133.255 -SWGRL-DEC 168.10.9.0 168.10.9.255 -SWGRL-MIL 168.10.20.1 168.10.20.64 -SWGRL-SEM 168.10.20.64 168.10.20.127 -TLLS-LS 168.10.140.129 168.10.140.254 -TLLS-MV 168.10.129.130 168.10.129.190 -TRRL-BRANT 168.11.13.1 168.11.13.63 -TRRL-CAMDN 168.11.13.65 168.11.13.127 -TRRL-CHARL 168.11.4.65 168.11.4.127 -TRRL-GLYNN 168.11.58.0 168.11.58.254 -TRRL-LONG 168.11.4.193 168.11.4.255 -TRRL-MCINT 168.11.4.129 168.11.4.191 -TRRL-STMRY 168.11.10.1 168.11.10.63 -TRRL-WAYNE 168.11.10.65 168.11.10.127 -URRLS-GR 168.8.12.129 168.8.12.192 -URRLS-HA 168.11.129.129 168.11.129.192 -URRLS-JA 168.8.12.193 168.8.12.255 -URRLS-MA 168.8.13.0 168.8.13.255 -URRLS-MR 168.8.14.0 168.8.14.64 -URRLS-OK 168.8.14.65 168.8.14.128 -URRLS-PU 168.8.12.65 168.8.12.128 -URRLS-SC 168.8.14.129 168.8.14.192 -PIED-WIN 168.8.201.1 168.8.201.127 -PIED-COM 168.8.204.1 168.8.204.63 -PIED-HOM 168.8.203.193 168.8.203.254 -PIED-JEF 168.8.204.129 168.8.204.191 -PIED-NIC 168.8.204.65 168.8.204.127 -PIED-AUB 168.9.33.66 168.9.33.126 -PIED-STA 168.8.234.2 168.8.234.12 -PIED-BRL 168.9.58.1 168.9.58.64 -PIED-MAY 168.8.204.192 168.8.204.254 -PIED-JEF 24.196.224.38 24.196.224.38 -STATELIB-B 168.28.76.1 168.28.76.254 -ARL-ATH 168.12.1.1 168.12.1.254 -ARL-ATH 168.24.85.36 168.24.85.38 -ARL-ATH 192.168.100.1 192.168.100.254 -ARL-ATH 68.156.6.1 68.156.6.254 -ARL-BOG 168.12.3.1 168.12.3.254 -ARL-DAN 168.12.7.1 168.12.7.254 -ARL-EAST 168.12.4.1 168.12.4.254 -ARL-LAV 168.12.5.1 168.12.5.254 -ARL-LAY 168.12.6.1 168.12.6.254 -ARL-LEX 168.12.10.1 168.12.10.254 -ARL-ROY 168.12.11.1 168.12.11.254 -ARL-WAT 168.12.8.1 168.12.8.254 -ARL-WINT 168.12.12.1 168.12.12.254 -BROOK-HQ 168.13.1.1 168.13.1.254 -BTRL-MCD 168.12.51.1 168.12.51.254 -BTRL-MWL 168.12.49.1 168.12.49.254 -BTRL-TCL 168.12.50.1 168.12.50.254 -CHAT-SMRVL 168.12.63.1 168.12.63.254 -CHAT-TRION 168.12.64.1 168.12.64.254 -CHRL-CHICK 168.12.65.1 168.12.65.254 -CHRL-DADE 168.12.66.1 168.12.66.254 -CHRL-LW 168.12.67.1 168.12.67.254 -CHRL-ROSS 168.12.68.1 168.12.68.254 -CLAYTN-FOR 168.12.73.1 168.12.73.254 -CLAYTN-HQS 168.12.71.1 168.12.71.254 -CLAYTN-JON 168.12.74.1 168.12.74.254 -CLAYTN-MOR 168.12.75.1 168.12.75.254 -CLAYTN-RIV 168.12.76.1 168.12.76.254 -CPRL-A 168.13.7.1 168.13.7.254 -CPRL-B 168.13.2.1 168.13.2.254 -CPRL-C 168.13.4.1 168.13.4.254 -CPRL-L 168.13.5.1 168.13.5.254 -CPRL-R 168.13.3.1 168.13.3.254 -CPRL-T 168.13.6.1 168.13.6.254 -CRLS-DAWSN 168.12.69.1 168.12.69.254 -CRLS-LMPKN 168.12.70.1 168.12.70.254 -DCPL-CEN 168.13.14.1 168.13.14.254 -DCPL-NW 168.13.16.1 168.13.16.254 -DCPL-SS 168.13.17.1 168.13.17.254 -DCPL-TAL 168.13.18.1 168.13.18.254 -DCPL-WT 168.13.19.1 168.13.19.254 -DTRL-BAKR 168.13.8.1 168.13.8.254 -DTRL-BLAK 168.13.11.1 168.13.11.254 -DTRL-CAMI 168.13.9.1 168.13.9.254 -DTRL-JAKN 168.13.10.1 168.13.10.254 -DTRL-PELH 168.13.13.1 168.13.13.254 -DTRL-SYLV 168.13.12.1 168.13.12.254 -ECGR-APPBY 168.13.192.1 168.13.192.254 -ECGR-AVTBC 168.13.205.1 168.13.205.254 -ECGR-BURKE 168.13.193.1 168.13.193.254 -ECGR-EUCHE 168.13.195.1 168.13.195.254 -ECGR-FRMAN 168.13.196.1 168.13.196.254 -ECGR-GIBBS 168.13.194.1 168.13.194.254 -ECGR-GLSCK 168.13.197.1 168.13.197.254 -ECGR-HARLM 168.13.198.1 168.13.198.254 -ECGR-LINCN 168.13.201.1 168.13.201.254 -ECGR-MAIN 168.13.199.1 168.13.199.254 -ECGR-MIDVL 168.13.203.1 168.13.203.254 -ECGR-MXWLL 168.13.202.1 168.13.202.254 -ECGR-SRDIS 168.13.204.1 168.13.204.254 -ECGR-WALLC 168.13.206.1 168.13.206.254 -ECGR-WARRN 168.13.207.1 168.13.207.254 -ECGR-CCO 168.13.215.1 168.13.215.255 -ECGR-DIAML 168.13.214.1 168.13.214.255 -ECPL-BWMN 168.12.102.1 168.12.102.254 -ECPL-ECPL 168.12.103.1 168.12.103.254 -FBHCL-MAIN 168.13.20.1 168.13.20.254 -FRRLS-BA 168.12.104.1 168.12.104.254 -FRRLS-FA 168.12.105.1 168.12.105.254 -FRRLS-FY 168.12.111.1 168.12.111.254 -FRRLS-GR 168.12.107.1 168.12.107.254 -FRRLS-JA 168.12.110.1 168.12.110.254 -FRRLS-PT 168.12.112.1 168.12.112.254 -FRRLS-TY 168.12.113.1 168.12.113.254 -FRRLS-ZE 168.12.109.1 168.12.109.254 -HALL-BPL 168.12.118.1 168.12.118.254 -HALL-CL 168.12.119.1 168.12.119.254 -HALL-EH 168.12.120.1 168.12.120.254 -HALL-GVL 168.12.121.1 168.12.121.254 -HALL-MV 168.12.123.1 168.12.123.254 -HART-HQ 168.12.124.1 168.12.124.254 -HCLS-HA 168.12.126.1 168.12.126.254 -HCLS-LG 168.12.128.1 168.12.128.254 -HCLS-MD 168.12.127.1 168.12.127.254 -HCLS-ST 168.12.125.1 168.12.125.254 -HCLS-FV 168.12.117.1 168.12.117.254 -HOU-CV 168.13.128.1 168.13.128.254 -HOU-PE 168.13.130.1 168.13.130.254 -HOU-WR 168.13.129.1 168.13.129.254 -JCL-LVILLE 168.13.208.1 168.13.208.254 -JCL-WADLEY 168.13.210.1 168.13.210.254 -JCL-WRENS 168.13.209.1 168.13.209.254 -KRLS-CA 168.13.21.1 168.13.21.254 -KRLS-CL 168.13.22.1 168.13.22.254 -KRLS-RA 168.13.23.1 168.13.23.254 -KRLS-TE 168.13.24.1 168.13.24.254 -KRLS-WE 168.13.26.1 168.13.26.254 -LEE-LSB 168.13.34.1 168.13.34.254 -LEE-SMV 168.13.36.1 168.13.36.254 -MCCLS-DOE 168.13.37.1 168.13.37.254 -MCCLS-HQ 168.13.38.1 168.13.38.254 -MGRL-EW 168.13.132.1 168.13.132.254 -MGRL-GO 168.13.133.1 168.13.133.254 -MGRL-ID 168.13.134.1 168.13.134.254 -MGRL-JO 168.13.135.1 168.13.135.254 -MGRL-MA 168.13.136.1 168.13.136.254 -MGRL-MO 168.13.137.1 168.13.137.254 -MGRL-OG 168.13.138.1 168.13.138.254 -MGRL-LC 168.13.140.1 168.13.140.254 -MGRL-RO 168.13.131.1 168.13.131.254 -MGRL-RV 168.13.139.1 168.13.139.254 -MGRL-SH 168.13.141.1 168.13.141.254 -MGRL-TW 168.13.142.1 168.13.142.254 -MGRL-WA 168.13.143.1 168.13.143.254 -MGRL-WB 168.13.145.1 168.13.145.254 -MRLS-FCPL 168.12.129.1 168.12.129.254 -MRLS-MRL 168.12.130.1 168.12.130.254 -MRLS-TCPL 168.12.131.1 168.12.131.254 -MRLS-UCPL 168.12.132.1 168.12.132.254 -NCLS-COVTN 168.12.133.1 168.12.133.254 -NEG-CLRKVL 168.12.135.1 168.12.135.254 -NEG-CLVLND 168.12.141.1 168.12.141.254 -NEG-CORNEL 168.12.137.1 168.12.137.254 -NEG-HELEN 168.12.140.1 168.12.140.254 -NEG-RABUN 168.12.138.1 168.12.138.254 -NEG-TOCCOA 168.12.139.1 168.12.139.254 -OCRL-DUBLN 168.13.154.1 168.13.154.254 -OCRL-SANDR 168.13.156.1 168.13.156.254 -OCRL-SOPER 168.13.157.1 168.13.157.254 -OCRL-WRIGH 168.13.153.1 168.13.153.254 -OHOOP-LADS 168.13.86.1 168.13.86.254 -OHOOP-LYON 168.13.88.1 168.13.88.254 -OHOOP-MONT 168.13.87.1 168.13.87.254 -OHOOP-TATG 168.13.85.1 168.13.85.254 -OHOOP-TATR 168.13.89.1 168.13.89.254 -OHOOP-VIDT 168.13.90.1 168.13.90.254 -OKRL-APPL 168.13.92.1 168.13.92.254 -OKRL-BACON 168.13.91.1 168.13.91.254 -OKRL-BLMEM 168.13.93.1 168.13.93.254 -OKRL-CLNCH 168.13.94.1 168.13.94.254 -OKRL-MA 168.13.95.1 168.13.95.254 -OKRL-WWC 168.13.96.1 168.13.96.254 -PIED-AUB 168.12.148.1 168.12.148.254 -PIED-BRL 168.12.157.1 168.12.157.254 -PIED-COM 168.12.150.1 168.12.150.254 -PIED-HOM 168.12.149.1 168.12.149.254 -PIED-JEF 168.12.152.1 168.12.152.254 -PIED-MAY 168.12.153.1 168.12.153.254 -PIED-NIC 168.12.151.1 168.12.151.254 -PIED-STA 168.12.156.1 168.12.156.254 -PIED-WIN 168.12.154.1 168.12.154.254 -PMRLS-BPL 168.12.159.1 168.12.159.254 -PMRLS-GPL 168.12.160.1 168.12.160.254 -PMRLS-HML 168.12.161.1 168.12.161.254 -PMRLS-MPL 168.12.163.1 168.12.163.254 -PMRLS-RCL 168.12.164.1 168.12.164.254 -PMRLS-TCL 168.12.165.1 168.12.165.254 -PMRLS-YPL 168.12.158.1 168.12.158.254 -PPL-BPL 168.13.158.1 168.13.158.254 -PPL-TPL 168.13.159.1 168.13.159.254 -RML-MAIN 168.13.40.1 168.13.40.254 -ROCK-NG 168.12.77.1 168.12.77.254 -SHRL-CD 168.12.167.1 168.12.167.254 -SHRL-CS 168.12.166.1 168.12.166.254 -SHRL-RK 168.12.168.1 168.12.168.254 -SHRL-RM 168.12.170.1 168.12.170.254 -SJRLS-JCML 168.13.211.1 168.13.211.254 -SJRLS-SCL 168.13.212.1 168.13.212.254 -SRL-AMBR 168.13.98.1 168.13.98.254 -SRL-BROX 168.13.99.1 168.13.99.254 -SRL-DOUG 168.13.100.1 168.13.100.254 -SRL-JDHAZ 168.13.102.1 168.13.102.254 -SRL-NICH 168.13.103.1 168.13.103.254 -SRL-PEAR 168.13.104.1 168.13.104.254 -SRL-WILLA 168.13.105.1 168.13.105.254 -STRL-CLAX 168.13.106.1 168.13.106.254 -STRL-METT 168.13.108.1 168.13.108.254 -STRL-PEMB 168.13.109.1 168.13.109.254 -STRL-RHILL 168.13.110.1 168.13.110.254 -STRL-SBORO 168.13.111.1 168.13.111.254 -STRL-SWAIN 168.13.107.1 168.13.107.254 -SWGRL-DEC 168.13.49.1 168.13.49.254 -SWGRL-MIL 168.13.50.1 168.13.50.254 -SWGRL-SEM 168.13.51.1 168.13.51.254 -TCPLS-THOMAS 168.13.57.1 168.13.57.254 -TCPLS-MEIGS 168.13.55.1 168.13.55.254 -TCPLS-COOL 168.13.53.1 168.13.53.254 -TCPLS-BOS 168.13.52.1 168.13.52.254 -TCPLS-OCH 168.13.54.1 168.13.54.254 -TCPLS-PACO 168.13.56.1 168.13.56.254 -THRL-LAG 168.12.184.2 168.12.184.254 -THRL-HOG 168.12.182.2 168.12.182.254 -THRL-HC 168.12.181.2 168.12.181.254 -THRL-WMS 168.12.183.2 168.12.183.254 -TLLS-LS 168.13.161.1 168.13.161.254 -TLLS-MV 168.13.162.1 168.13.162.254 -TRRL-BRANT 168.13.113.1 168.13.113.254 -TRRL-CAMDN 168.13.116.1 168.13.116.254 -TRRL-CHARL 168.13.117.1 168.13.117.254 -TRRL-GLYNN 168.13.114.1 168.13.114.254 -TRRL-LONG 168.13.119.1 168.13.119.254 -TRRL-MCINT 168.13.118.1 168.13.118.254 -TRRL-STMRY 168.13.120.1 168.13.120.254 -TRRL-WAYNE 168.13.121.1 168.13.121.254 -URRLS-GR 168.12.188.1 168.12.188.254 -URRLS-HA 168.12.189.1 168.12.189.254 -URRLS-JA 168.12.190.1 168.12.190.254 -URRLS-MA 168.12.193.1 168.12.193.254 -URRLS-MR 168.12.191.1 168.12.191.254 -URRLS-OK 168.12.194.1 168.12.194.254 -URRLS-PU 168.12.187.1 168.12.187.254 -URRLS-SC 168.12.195.1 168.12.195.254 -WGRL-BO 168.12.207.1 168.12.207.254 -WGRL-BR 168.12.208.1 168.12.208.254 -WGRL-BU 168.12.196.1 168.12.196.254 -WGRL-DC 168.12.197.1 168.12.197.254 -WGRL-FR 168.12.198.1 168.12.198.254 -WGRL-HQ 168.12.202.1 168.12.202.254 -WGRL-LS 168.12.199.1 168.12.199.254 -WGRL-MR 168.12.200.1 168.12.200.254 -WGRL-NG 168.12.203.1 168.12.203.254 -WGRL-PC 168.12.204.1 168.12.204.254 -WGRL-TA 168.12.205.1 168.12.205.254 -WGRL-VR 168.12.206.1 168.12.206.254 -WGRL-MZ 168.12.220.1 168.12.220.254 -WGRL-WB 168.12.224.1 168.12.224.255 -LBRLS-LB 168.13.31.1 168.13.31.255 -LBRLS-CORD 168.13.28.1 168.13.28.255 -LBRLS-DOOLY 168.13.29.1 168.13.29.255 -LBRLS-UNAD 168.13.30.1 168.13.30.255 -LBRLS-SCH 168.13.33.1 168.13.33.255 -LBRLS-BYRM 168.13.27.1 168.13.27.255 -HALL-SSP 168.12.222.1 168.12.222.255 -KRLS-QU 168.13.60.1 168.13.60.255 -CCL-RING 168.12.143.1 168.12.143.255 diff --git a/Evergreen/conf/load_ips.pl b/Evergreen/conf/load_ips.pl deleted file mode 100755 index 4cc6001de0..0000000000 --- a/Evergreen/conf/load_ips.pl +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/perl -use strict; use warnings; - - -# This file should be loaded by apache on startup (add to a "startup.pl" file) - -open(F,"lib_ips.txt"); - -$OpenILS::WWW::Redirect::lib_ips_hash = {}; -my $hash = $OpenILS::WWW::Redirect::lib_ips_hash; - - -while( my $data = ) { - - chomp($data); - - my( $reglib, $ip1, $ip2 ) = split(/\t/, $data); - next unless ($reglib and $ip1 and $ip2); - - my( $reg, $lib ) = split(/-/,$reglib); - next unless ($reg and $lib); - -# print "$reg : $lib : $ip1 : $ip2\n"; - - $hash->{$reg} = {} unless exists $hash->{$reg}; - $hash->{$reg}->{$lib} = [] unless exists $hash->{$reg}->{$lib}; - - push( @{$hash->{$reg}->{$lib}}, [ $ip1, $ip2 ] ); -} - diff --git a/Evergreen/src/javascript/backend/circ/circ_duration.js b/Evergreen/src/javascript/backend/circ/circ_duration.js deleted file mode 100644 index 9c3892249a..0000000000 --- a/Evergreen/src/javascript/backend/circ/circ_duration.js +++ /dev/null @@ -1,83 +0,0 @@ -function go(){ - -load_lib('circ/circ_item_config.js'); -log_vars('circ_duration'); - - -/* treat pre-cat copies like vanilla books */ -if( isTrue(isPrecat) ) { - log_info("pre-cat copy getting duration defaults..."); - result.durationRule = '14_days_2_renew'; - result.recurringFinesRule = '10_cent_per_day'; - result.maxFine = 'overdue_mid'; - checkDurationExceptions(); - return; -} - - -/* grab the config from the config script */ -var config = getItemConfig(); -var itemForm = (marcXMLDoc) ? extractFixedField(marcXMLDoc,'Form') : ""; - - -/* ----------------------------------------------------------------------------- - Now set the rule values based on the config. If there is no configured info - on this copy, fall back on defaults. - ----------------------------------------------------------------------------- */ -if( config ) { - - log_debug("circ_duration found a config for the copy"); - result.durationRule = config.durationRule; - result.recurringFinesRule = config.recurringFinesRule; - result.maxFine = config.maxFine; - -} else { - - result.durationRule = '14_days_2_renew'; - result.recurringFinesRule = "10_cent_per_day"; - result.maxFine = "overdue_mid"; -} - - - -/* ----------------------------------------------------------------------------- - Add custom rules here. - ----------------------------------------------------------------------------- */ - -var circMod = (copy.circ_modifier) ? copy.circ_modifier.toLowerCase() : ''; - -if( isOrgDescendent('STATELIB', copy.circ_lib.id) ) { - if( circMod == 'book' ) - result.durationRule = '35_days_1_renew'; - if(isTrue(copy.ref)) - result.durationRule = '14_days_2_renew'; - -} else if( isOrgDescendent('NCLS', copy.circ_lib.id) && ( circMod == 'dvd' || circMod == 'video' ) ) - result.recurringFinesRule = '10_cent_per_day'; - - -checkDurationExceptions(); - -log_info('final duration results: ' + result.durationRule + ' : ' + result.recurringFinesRule + ' : ' + result.maxFine ); - -} go(); - - - -function checkDurationExceptions() { - log_debug("Checking duration rule exceptions for profile "+patronProfile); - - if( isGroupDescendant('Staff', patronProfile) || - isGroupDescendant('Trustee', patronProfile) || - isGroupDescendant('Outreach', patronProfile) ) { - - result.recurringFinesRule = "staff"; - result.maxFine = "staff"; - } - - if( isGroupDescendant('Outreach', patronProfile) ) { - log_info("Outreach user found, setting duration to 2 months"); - result.durationRule = '2_months_2_renew'; - } -} - diff --git a/Evergreen/src/javascript/backend/circ/circ_groups.js b/Evergreen/src/javascript/backend/circ/circ_groups.js deleted file mode 100644 index 6fc2bf1149..0000000000 --- a/Evergreen/src/javascript/backend/circ/circ_groups.js +++ /dev/null @@ -1,114 +0,0 @@ -/* --------------------------------------------------------------------- - Set up the limits for the various profiles (aka permission groups). - Values of -1 mean there is no limit - - maxItemsOut - the maximum number of items the user can have out - fineThreshold - the fine threshold. - overdueThreshold - the overdue items threshold. - maxHolds - The maximum number of holds the user can have - - A user exceeds the fineThreshold and/or overdueThreshold if they are - equal to or exceed the threshold - --------------------------------------------------------------------- */ - -var GROUP_CONFIG = { - - 'Patron' : { - maxItemsOut : 50, - fineThreshold : 10, - overdueThreshold : 10, - maxHolds : -1 - }, - - 'Class' : { - maxItemsOut : 50, - fineThreshold : 10, - overdueThreshold : 10, - maxHolds : 15 - }, - - 'Friend' : { - maxItemsOut : 50, - fineThreshold : 10, - overdueThreshold : 10, - maxHolds : -1 - }, - - 'NonResident' : { - maxItemsOut : 50, - fineThreshold : 10, - overdueThreshold : 10, - maxHolds : -1 - }, - - 'OutOfState' : { - maxItemsOut : 50, - fineThreshold : 10, - overdueThreshold : 10, - maxHolds : -1 - }, - - 'Outreach' : { - maxItemsOut : -1, - fineThreshold : -1, - overdueThreshold : -1, - maxHolds : 15 - }, - - - 'Restricted' : { - maxItemsOut : 2, - fineThreshold : 0.01, - overdueThreshold : 1, - maxHolds : 5 - }, - - 'Temp' : { - maxItemsOut : 5, - fineThreshold : .01, - overdueThreshold : 1, - maxHolds : 5 - }, - - 'TempRes6' : { - maxItemsOut : 50, - fineThreshold : 10, - overdueThreshold : 10, - maxHolds : -1 - }, - - 'tempRes12' : { - maxItemsOut : 50, - fineThreshold : 10, - overdueThreshold : 10, - maxHolds : -1 - }, - - 'Trustee' : { - maxItemsOut : 50, - fineThreshold : 10, - overdueThreshold : 10, - maxHolds : 10 - }, - - - 'Vendor' : { - maxItemsOut : 0, - fineThreshold : 0.01, - overdueThreshold : 1, - maxHolds : 0 - }, - - 'Staff' : { - maxItemsOut : 50, - fineThreshold : -1, - overdueThreshold : -1, - maxHolds : -1 - }, - -}; - - - - - diff --git a/Evergreen/src/javascript/backend/circ/circ_item_config.js b/Evergreen/src/javascript/backend/circ/circ_item_config.js deleted file mode 100644 index a7339ded95..0000000000 --- a/Evergreen/src/javascript/backend/circ/circ_item_config.js +++ /dev/null @@ -1,511 +0,0 @@ -load_lib('circ/circ_lib.js'); -log_debug('loading circ_item_config.js ...'); - - -/* SIP media types -000 Other -001 Book -002 Magazine -003 Bound journal -004 Audio tape -005 Video tape -006 CD/CDROM -007 Diskette -008 Book with diskette -009 Book with CD -010 Book with audio tape -*/ - -/* ----------------------------------------------------------------------------- - Configure the duration rules for the various item types and circ modifiers - - MARC Fixed Field info: - http://www.oclc.org/bibformats/en/fixedfield/ - - ----------------------------------------------------------------------------- */ - -var MARC_ITEM_TYPE_MAP = { - - a : { /* Language material [Books] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - t : { /* Manuscript language material [Books] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - g : { /* Projected medium [Videos, etc.] */ - SIPMediaType : '005', - magneticMedia : 'f', - durationRule : '7_days_0_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - k : { /* Two-dimensional nonprojectable graphic [Card, charts, etc.] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '3_month_0_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - r : { /* Three-dimensional artifact or naturally occurring object [Models, games, etc.] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - o : { /* Kit [Mixture of item types] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - p : { /* Mixed materials [Mixture of item types] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - e : { /* Cartographic material [Map] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '7_days_2_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - f : { /* Manuscript cartographic material [Map] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '3_days_1_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - c : { /* Notated music [Printed music] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - d : { /* Manuscript notated music [Printed music] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - i : { /* Nonmusical sound recording [Audiobooks, sound effects, etc.] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - j : { /* Musical sound recording [Music] */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - m : { /* Computer file */ - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - } -} - - -var CIRC_MOD_MAP = { - - 'art' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '3_month_1_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'atlas' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '7_days_2_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'audiobook' : { - SIPMediaType : '004', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'av' : { - SIPMediaType : '005', - magneticMedia : 'f', - durationRule : '7_days_2_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'new-av' : { - SIPMediaType : '005', - magneticMedia : 'f', - durationRule : '3_days_1_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'bestseller' : { - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '7_days_2_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'bestsellernh' : { - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '7_days_2_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'book' : { - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'cd' : { - SIPMediaType : '006', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'dvd' : { - SIPMediaType : '006', - magneticMedia : 'f', - durationRule : '7_days_0_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'dvd-long' : { - SIPMediaType : '006', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'dvd-mid' : { - SIPMediaType : '006', - magneticMedia : 'f', - durationRule : '7_days_2_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'e-book' : { - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '3_days_1_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'equipment' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '1_day_0_renew', /* make me 1 day, 0 renewal when possible */ - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'equip-long' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '3_days_1_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'filmstrip' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'kit' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'magazine' : { - SIPMediaType : '002', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'map' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '3_days_1_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'microform' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'music' : { - SIPMediaType : '004', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'record' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'software' : { - SIPMediaType : '006', - magneticMedia : 'f', - durationRule : '7_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'softwrlong' : { - SIPMediaType : '006', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'talking book' : { - SIPMediaType : '006', - magneticMedia : 'f', - durationRule : 'unlimited', - }, - - 'toy' : { - SIPMediaType : '000', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'video' : { - SIPMediaType : '005', - magneticMedia : 'f', - durationRule : '7_days_0_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'video-long' : { - SIPMediaType : '005', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'video-mid' : { - SIPMediaType : '005', - magneticMedia : 'f', - durationRule : '7_days_2_renew', - recurringFinesRule : '50_cent_per_day', - maxFine : 'overdue_mid' - }, - - - 'facbestslr' : { - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '7_days_2_renew', - recurringFinesRule : '10_cent_per_day', - maxFine : 'overdue_mid' - }, - - 'eventpass' : { - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '7_day_1_renew', - recurringFinesRule : '3_dollar_per_day', - maxFine : 'overdue_mid' - }, -} - - -/* Set up rules for legacy types */ -CIRC_MOD_MAP['DEPOSIT'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['E-AUDIO'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['FACNEWBK'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['MAG-CIRC'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['MAG-NOCIRC'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['NEW-BOOK'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['NEWSPAPER'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['OUTREACH'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['PAMPHLET'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['PAPERBACK'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['RESERVE'] = CIRC_MOD_MAP['book']; -CIRC_MOD_MAP['STATE-BOOK'] = { - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '35_days_1_renew', - recurringFinesRule : "10_cent_per_day", - maxFine : "overdue_mid" -}; -CIRC_MOD_MAP['STATE-MFRM'] = { - SIPMediaType : '001', - magneticMedia : 'f', - durationRule : '14_days_2_renew', - recurringFinesRule : "10_cent_per_day", - maxFine : "overdue_mid" -}; - - - - -/* this will set defaults even if no one asked for them */ -log_debug("Calling getItemConfig() to force defaults.."); -getItemConfig(); -log_debug("getItemConfig() set magneticMedia to "+result.magneticMedia); - - -function getItemConfig() { - - /* ----------------------------------------------------------------------------------- - If a circ_modifier is defined on the copy and we have config info for the - provided circ_modifier, use that config. Otherwise fall back on the MARC item type - ----------------------------------------------------------------------------------- */ - var marcType = getMARCItemType(); - var itemForm = (marcXMLDoc) ? extractFixedField(marcXMLDoc,'Form') : ""; - //var circMod = (copy.circ_modifier) ? copy.circ_modifier.toLowerCase() : ''; - var circMod = copy.circ_modifier; - - var config = null; - - if( circMod ) { - config = CIRC_MOD_MAP[circMod]; - if(!config) - config = CIRC_MOD_MAP[circMod.toLowerCase()] - if(config) - log_info("a circ_mod config exists for the copy with mod: " + circMod); - } - - if(!config) { - /* otherwise, fall back on the MARC item type */ - if( circMod ) - log_info("no circ_mod config found for " +circMod+", falling back to MARC"); - config = MARC_ITEM_TYPE_MAP[marcType]; - } - - /* if no config could be found, default to 'book' */ - if(!config) { - log_warn("item_config found no circ_mod OR MARC config, defaulting to 'book'"); - config = CIRC_MOD_MAP['book']; - } - - config.maxFine = setMaxFineByCircLocation(); - - /* go ahead and set some default result - data (which may be overidden) */ - for( var i in config ) { - log_debug("item_config setting result defaults: "+i+" = " +config[i]); - result[i] = config[i]; - } - - return config; -} - - -function setMaxFineByCircLocation() { - var max_libs = [ 'DTRL', 'SJRLS' ]; - var mid_libs = [ 'ARL', 'CHRL', 'ECGR', 'FRRLS', 'HCLS', 'OCRL', 'OHOOP', 'OKRL', 'PMRLS', 'PPL', 'STRL' ]; - - var cl = (volume && volume.id != -1) ? volume.owning_lib : currentLocation.id; - var max_fine = null; - - for( var i = 0; i < max_libs.length; i++ ) { - var org = max_libs[i]; - if( isOrgDescendent(org, cl) ) { - log_debug("found max-fine ancestor org "+org); - max_fine = 'overdue_max'; - break; - } - } - - if(!max_fine) { - for( var i = 0; i < mid_libs.length; i++ ) { - var org = mid_libs[i]; - if( isOrgDescendent(org, cl) ) { - log_debug("found mid-fine ancestor org "+org); - max_fine = 'overdue_mid'; - break; - } - } - } - - if(!max_fine) max_fine = 'overdue_min'; - - log_info("setMaxFineByCircLocation() set max_fine to "+ max_fine); - - return max_fine; -} - - diff --git a/Evergreen/src/javascript/backend/circ/circ_permit_copy.js b/Evergreen/src/javascript/backend/circ/circ_permit_copy.js deleted file mode 100644 index 5475198478..0000000000 --- a/Evergreen/src/javascript/backend/circ/circ_permit_copy.js +++ /dev/null @@ -1,30 +0,0 @@ -function go() { - -/* load the lib script */ -load_lib('circ/circ_lib.js'); -log_vars('circ_permit_copy'); - - -if( ! isTrue(copy.circulate) || !isTrue(copy.location.circulate) ) - result.events.push('COPY_CIRC_NOT_ALLOWED'); - - -if( ! isOrgDescendent( 'STATELIB', copy.circ_lib.id ) ) { - if( isTrue(copy.ref) ) - result.events.push('COPY_IS_REFERENCE'); -} - - - -if( ! isTrue(isRenewal) ) { - if(copyStatus != 'Available' && - copyStatus != 'On holds shelf' && copyStatus != 'Reshelving' ) { - result.events.push('COPY_NOT_AVAILABLE'); - } -} - - - -} go(); - - diff --git a/Evergreen/src/javascript/backend/circ/circ_permit_hold.js b/Evergreen/src/javascript/backend/circ/circ_permit_hold.js deleted file mode 100644 index dd845dc866..0000000000 --- a/Evergreen/src/javascript/backend/circ/circ_permit_hold.js +++ /dev/null @@ -1,131 +0,0 @@ -function go() { - -load_lib('circ/circ_lib.js'); -log_vars('circ_permit_hold'); - - -/* is a staff member placing this hold? */ -var isStaffHold = isGroupDescendantId('Staff', requestor.profile); - - -/* non-staff members are allowed 50 open holds at most */ -if( ! isStaffHold ) { - if(newHold) { - var count = userHoldCount(patron.id); - log_info("patron has " + count + " open holds"); - if( count >= 50 ) - result.events.push('MAX_HOLDS'); - } -} else { - log_info("This is a staff-placed hold"); -} - - - -if( isTrue(patron.barred) ) - result.events.push('PATRON_BARRED'); - -if( isTrue(copy.ref) ) - result.events.push('ITEM_NOT_HOLDABLE'); - -if( !isTrue(copy.circulate) ) - result.events.push('ITEM_NOT_HOLDABLE'); - -/* all STATELIB items are holdable regardless of type */ -if( isOrgDescendent('STATELIB', copy.circ_lib.id) ) return; - - -var mod = (copy.circ_modifier) ? copy.circ_modifier.toLowerCase() : ""; -var marcItemType = getMARCItemType(); - - -log_info("circ-modifier = "+mod); -log_info("marc-type = "+marcItemType); - - -if(mod == 'bestsellernh' || mod == 'eventpass') - result.events.push('ITEM_NOT_HOLDABLE'); - - -if( ( marcItemType == 'g' || - marcItemType == 'i' || - marcItemType == 'j' || - mod == 'softwrlong' || - mod == 'music' || - mod == 'audiobook' || - mod == 'av' || - mod == 'new-av' || - mod == 'cd' || - mod == 'kit' || - mod == 'dvd' || - mod == 'deposit' || - mod == 'atlas' || - mod == 'magazine' || - mod == 'equipment' || - mod == 'equip-long' || - mod == 'microform' || - mod == 'record' || - isTrue(copy.deposit) || - mod == 'video-long' || - mod == 'video' ) ) { - - - log_info("this is a range-protected item..."); - - /* ------------------------------------------------------------------------ */ - /** This patch allows DCPL and LEE patrons to place - holds on protected items accross their systems. In short, if the pickup lib, - owning lib, and patron home (or request lib) are all within either of the two - systems, allow the hold */ - if( - /* DCPL=33, LEE=115 */ - (hasCommonAncestor(holdPickupLib, 33, 1) || hasCommonAncestor(holdPickupLib, 115, 1)) && - (hasCommonAncestor(volume.owning_lib, 33, 1) || hasCommonAncestor(volume.owning_lib, 115, 1)) && - ( - hasCommonAncestor(patron.home_ou.id, 33, 1) || hasCommonAncestor(patron.home_ou.id, 115, 1) || - hasCommonAncestor(holdRequestLib.id, 33, 1) || hasCommonAncestor(holdRequestLib.id, 115, 1) - )) { - - log_info("DCPL and LEE are allowed to place holds on protected items accross the two systems"); - return; - } - /* ------------------------------------------------------------------------ */ - - - if( ! hasCommonAncestor( volume.owning_lib, holdPickupLib, 1 ) ) { - - /* we don't want these items to transit to the pickup lib */ - result.events.push('ITEM_NOT_HOLDABLE'); - log_info("pickup_lib is not in the owning_lib's region...NOT OK"); - - } else { /* pickup lib is in the owning region */ - - if( isStaffHold && hasCommonAncestor( volume.owning_lib, holdRequestLib.id, 1) ) { - - /* staff in the region can place holds for patrons outside the region with local pickup lib */ - log_info("local, staff-placed hold is allowed with local pickup_lib...OK"); - - } else { - - if( hasCommonAncestor( volume.owning_lib, patron.home_ou.id, 1 ) ) { - - /* patrons can hold the item if they are registered - in the region and pickup lib is local */ - log_info("patron's home_ou is in the owning region...OK"); - - } else { - - log_info("patron's home_ou lies outside the owning region...NOT OK"); - result.events.push('ITEM_NOT_HOLDABLE'); - } - } - } -} - - - - -} go(); - - - diff --git a/Evergreen/src/javascript/backend/circ/circ_permit_patron.js b/Evergreen/src/javascript/backend/circ/circ_permit_patron.js deleted file mode 100644 index 8b8cd43246..0000000000 --- a/Evergreen/src/javascript/backend/circ/circ_permit_patron.js +++ /dev/null @@ -1,36 +0,0 @@ -function go() { - -/* load the script library */ -load_lib('circ/circ_lib.js'); -log_vars('circ_permit_patron'); - - - -if( isTrue(patron.barred) ) - result.events.push('PATRON_BARRED'); - - -/* --------------------------------------------------------------------- - Check the items out count - --------------------------------------------------------------------- */ -var config = findGroupConfig(patronProfile); -if( config ) { - - var limit = config.maxItemsOut; - if( limit >= 0 ) { - /* Patrons are allowed to renew regardless - of how many items they have checked out */ - log_info('patron items out = ' + patronItemsOut +' limit = ' + limit); - if( !isTrue(isRenewal) && patronItemsOut >= limit ) { - result.events.push('PATRON_EXCEEDS_CHECKOUT_COUNT'); - } - } - -} else { - log_warn("** profile has no configured information: " + patronProfile); -} - - -} go(); - - diff --git a/Evergreen/src/javascript/backend/circ/circ_permit_renew.js b/Evergreen/src/javascript/backend/circ/circ_permit_renew.js deleted file mode 100644 index 7f61d923d3..0000000000 --- a/Evergreen/src/javascript/backend/circ/circ_permit_renew.js +++ /dev/null @@ -1,15 +0,0 @@ -function go() { - -/* load the lib script */ -load_lib('circ/circ_lib.js'); -log_vars('circ_permit_renew'); - -log_info("permit_renew searching for potential holds for copy " + copy.barcode) -var hold = copy.fetchBestHold(); -if( hold ) { - log_info("hold found for renewal item, checking hold->usr.."); - if( hold && hold.usr != patron.id ) - return result.events.push('COPY_NEEDED_FOR_HOLD'); -} - -} go(); diff --git a/Evergreen/src/perlmods/Evergreen/Application/Search/AddedContent/ContentCafe.pm b/Evergreen/src/perlmods/Evergreen/Application/Search/AddedContent/ContentCafe.pm deleted file mode 100644 index 545117bdae..0000000000 --- a/Evergreen/src/perlmods/Evergreen/Application/Search/AddedContent/ContentCafe.pm +++ /dev/null @@ -1,209 +0,0 @@ -package Evergreen::Application::Search::AddedContent::ContentCafe; -use base qw/OpenSRF::Application/; -use strict; use warnings; -use OpenILS::Application::AppUtils; -use OpenSRF::Utils::SettingsClient; -my $apputils = "OpenILS::Application::AppUtils"; -use XML::LibXML; -use LWP::UserAgent; -use OpenSRF::EX qw(:try); - -my $host; -my $username; -my $password; -my $enabled = 0; -my $urlbase = "ContentCafe"; -my $types = { - toc => "TOC.asmx", - review => "Review.asmx", - annotation => "Annotation.asmx", - member => "Member.asmx", - }; - -sub initialize { - my $conf = OpenSRF::Utils::SettingsClient->new; - $host = $conf->config_value( - "apps", "open-ils.search","app_settings", "added_content", "host"); - $username = $conf->config_value( - "apps", "open-ils.search","app_settings", "added_content", "username"); - $password = $conf->config_value( - "apps", "open-ils.search","app_settings", "added_content", "password"); - - $enabled = 1 if ($host and $username and $password); -} - - - -# Fetches the added content and returns the data as a string. -# If not data is retrieved (or timeout occurs), undef is returned -sub retrieve_added_content { - my( $type, $isbn, $summary ) = @_; - return undef unless ( $isbn && $isbn ne "" ); - - my $func = "fnDetailByItemKey"; - if($summary) { $func = "fnContentByItemKey"; } - - my $url = "$host/$urlbase/" . $types->{$type} . - "/$func?UserId=$username&Password=$password&ItemKey=$isbn"; - - - warn "Added Content URL: $url\n"; - - my $data = undef; - try { - alarm(15); - $data = LWP::UserAgent->new->get($url)->content; - alarm(0); - } catch Error with { - alarm(0); - }; - alarm(0); - -# warn "received content data:\n$data\n"; - return $data; -} - -__PACKAGE__->register_method( - method => "summary", - api_name => "open-ils.search.added_content.summary.retrieve", - notes => <<" NOTE"); - Returns an object like so: - { - Review : true/false, - Inventory : true/false, - Annotation : true/false, - Jacket : true/false - TOC : true/false - Product : true/false - } - This object indicates the existance of each type of added content for the given ISBN - PARAMS( ISBN ), - NOTE - -sub summary { - my( $self, $client, $isbn ) = @_; - - if(!$enabled) { - return { - Review => "false", - Inventory => "false", - Annotation => "false", - Jacket => "false", - TOC => "false", - Product => "false", - }; - } - - my $data = retrieve_added_content( "member", $isbn, 1 ); - return {} unless $data; - my $doc; - try { - $doc = XML::LibXML->new->parse_string($data); - } catch Error with { $doc = undef }; - - my $summary = {}; - return $summary unless $doc; - - for my $node ( $doc->getDocumentElement->childNodes ) { - if( $node->localName ) { - $summary->{$node->localName} = $node->textContent; - } - } - return $summary; -} - - - - - -__PACKAGE__->register_method( - method => "reviews", - api_name => "open-ils.search.added_content.review.retrieve.random", - notes => <<" NOTE"); - Returns a singe random review article object - PARAMS( ISBN ), - NOTE - -__PACKAGE__->register_method( - method => "reviews", - api_name => "open-ils.search.added_content.review.retrieve.all", - notes => <<" NOTE"); - Returns an array review article objects - PARAMS( ISBN ), - NOTE - -sub reviews { - my( $self, $client, $isbn ) = @_; - - my $ret = []; - return $ret unless $enabled; - my $data = retrieve_added_content( "review", $isbn ); - return $ret unless $data; - - my $doc; - try { - $doc = XML::LibXML->new->parse_string($data); - } catch Error with { $doc = undef }; - - - if(!$doc) { - if( $self->api_name =~ /random/ ) { return undef; } - return $ret; - } - - my $reviews = $doc->findnodes("//*[local-name()='Review']"); - - for my $rev ( $reviews->get_nodelist() ) { - my $revobj = {}; - for my $node ($rev->childNodes) { - - if( $node->localName ) { - if( $node->localName eq "ReviewText" ) { - $revobj ->{'text'} = $node->textContent; - } - if( $node->localName eq "ReviewLiteral" ) { - $revobj->{'info'} = $node->textContent; - } - - } - } - - if( $self->api_name =~ /random/ ) { return $revobj; } - push( @$ret, $revobj ); - } - - return $ret; -} - - -__PACKAGE__->register_method( - method => "toc", - api_name => "open-ils.search.added_content.toc.retrieve", - notes => <<" NOTE"); - Returns the table of contents for the given ISBN - PARAMS( ISBN ), - NOTE - -sub toc { - my( $self, $client, $isbn ) = @_; - - my $data = retrieve_added_content( "toc", $isbn ); - return undef unless $data; - - my $doc; - try { - $doc = XML::LibXML->new->parse_string($data); - } catch Error with { $doc = undef }; - - - my @nodes = $doc->findnodes("//*[local-name()='TOCText']")->get_nodelist(); - - if($nodes[0]) { - return $nodes[0]->textContent; - } - - return ""; -} - - -1; diff --git a/Evergreen/src/support-scripts/eg_gen_overdue.pl b/Evergreen/src/support-scripts/eg_gen_overdue.pl deleted file mode 100755 index 77bac16c2b..0000000000 --- a/Evergreen/src/support-scripts/eg_gen_overdue.pl +++ /dev/null @@ -1,532 +0,0 @@ -#!/usr/bin/perl -# --------------------------------------------------------------- -# Generates the overdue notices XML file -# ./eg_gen_overdue.pl 0 -# generates today's notices -# ./eg_gen_overdue.pl 1 0 -# generates notices for today - 1 and today -# ./eg_gen_overdue.pl 2 1 0 -# ./eg_gen_overdue.pl 3 2 1 0 etc... -# --------------------------------------------------------------- - - - -use strict; use warnings; -require '../../../Open-ILS/src/support-scripts/oils_header.pl'; -use vars qw/$logger $apputils/; -use Data::Dumper; -use OpenILS::Const qw/:const/; -use OpenILS::Application::AppUtils; -use DateTime; -use Email::Send; -use DateTime::Format::ISO8601; -use OpenSRF::Utils qw/:datetime/; -use OpenSRF::Utils::JSON; -use Unicode::Normalize; -use OpenILS::Const qw/:const/; -use OpenSRF::AppSession; - -my $U = 'OpenILS::Application::AppUtils'; - -my $SEND_EMAILS = 1; - -my $bsconfig = shift || die "usage: $0 \n"; -my @goback = @ARGV; -@goback = (0) unless @goback; -osrf_connect($bsconfig); -my $e = OpenILS::Utils::CStoreEditor->new; - -my $smtp = $ENV{EG_OVERDUE_SMTP_HOST}; -my $mail_sender = $ENV{EG_OVERDUE_EMAIL_SENDER}; - -# --------------------------------------------------------------- -# Set up the email template -my $etmpl = $ENV{EG_OVERDUE_EMAIL_TEMPLATE}; -my $email_template; -if( open(F,"$etmpl") ) { - my @etmpl = ; - $email_template = join('',@etmpl); - close(F); -} -# --------------------------------------------------------------- - - - -my @date = CORE::localtime; -my $sec = $date[0]; -my $min = $date[1]; -my $hour = $date[2]; -my $day = $date[3]; -my $mon = $date[4] + 1; -my $year = $date[5] + 1900; - -my %USER_CACHE; -my %ORG_CACHE; - - -print < - - -XML - -print_notices($_) for @goback; - -print < - -XML - - -# ----------------------------------------------------------------------- -# ----------------------------------------------------------------------- - - -sub print_notices { - my $goback = shift || 0; - - for my $day ( qw/ 7 14 30 / ) { - my ($start, $end) = make_date_range($day + $goback); - - $logger->info("OD_notice: process date range $start -> $end"); - - my $query = [ - { - checkin_time => undef, - due_date => { between => [ $start, $end ] }, - }, - { order_by => { circ => 'usr, circ_lib' } } - ]; - #my $circs = $e->search_action_circulation($query, {idlist=>1}); - - my $ses = OpenSRF::AppSession->create('open-ils.cstore'); - my $req = $ses->request('open-ils.cstore.direct.action.circulation.id_list', @$query); - my $circs = []; - my $resp; - push(@$circs, $resp->content) while ($resp = $req->recv(timeout=>600)); - - process_circs( $circs, "${day}day" ); - } -} - - -sub process_circs { - my $circs = shift; - my $range = shift; - - return unless @$circs; - - $logger->info("OD_notice: processing range $range and ".scalar(@$circs)." potential circs"); - - my $org; - my $patron; - my @current; - - my $x = 0; - for my $circ (@$circs) { - $circ = $e->retrieve_action_circulation($circ); - - if( !defined $org or - $circ->circ_lib != $org or $circ->usr ne $patron ) { - $org = $circ->circ_lib; - $patron = $circ->usr; - print_notice( $range, \@current ) if @current; - @current = (); - } - - push( @current, $circ ); - $x++; - } - - $logger->info("OD_notice: processed $x circs"); - print_notice( $range, \@current ); -} - -sub make_date_range { - my $daysback = shift; - - my $epoch = CORE::time - ($daysback * 24 * 60 * 60); - my $date = DateTime->from_epoch( epoch => $epoch, time_zone => 'local'); - - $date->set_hour(0); - $date->set_minute(0); - $date->set_second(0); - my $start = "$date"; - - $date->set_hour(23); - $date->set_minute(59); - $date->set_second(59); - - return ($start, "$date"); -} - - -sub print_notice { - my( $range, $circs ) = @_; - return unless @$circs; - - my $s1 = scalar(@$circs); - - # we don't charge for lost or claimsreturned - $circs = [ - grep { - !$_->stop_fines or ( - $_->stop_fines ne OILS_STOP_FINES_LOST and - $_->stop_fines ne OILS_STOP_FINES_CLAIMSRETURNED - ) - } @$circs - ]; - - return unless @$circs; - - my $s2 = $s1 - scalar(@$circs); - $logger->info("OD_notice: dropped $s2 lost/CR from processing...") if $s2; - - my $org = $circs->[0]->circ_lib; - my $usr = $circs->[0]->usr; - $logger->debug("OD_notice: printing $range user:$usr org:$org"); - - my @patron_data = fetch_patron_data($usr); - my @org_data = fetch_org_data($org); - - return unless (@patron_data and @org_data); - - my $email; - - if( $email = $patron_data[0]->email - and $email =~ /.+\@.+/ - and ($range eq '7day' or $range eq '14day') ) { - - send_email($range, \@patron_data, \@org_data, $circs); - - } else { - - if( $patron_data[9] ) { - - print "\t\t\n"; - print_patron_xml_chunk(@patron_data); - print_org_xml_chunk(@org_data); - print_circ_chunk($_) for @$circs; - print "\t\t\n"; - - } else { - # There is no zip, therefore no address. - $logger->warn("OD_notice: unable to send mail notification for $usr due to lack of valid address"); - } - } -} - - -sub fetch_patron_data { - my $user_id = shift; - - my $patron = $USER_CACHE{$user_id}; - - if( ! $patron ) { - $logger->debug("OD_notice: fetching patron $user_id"); - - $patron = $e->retrieve_actor_user( - [ - $user_id, - { - flesh => 1, - flesh_fields => { - 'au' => [qw/ card billing_address mailing_address /] - } - } - ] - ) or return handle_event($e->event); - - $USER_CACHE{$user_id} = $patron; - } - - my $bc = $patron->card->barcode; - my $fn = $patron->first_given_name; - my $mn = $patron->second_given_name; - my $ln = $patron->family_name; - - my ( $s1, $s2, $city, $state, $zip ); - - my $baddr = $patron->mailing_address; - unless( $baddr and $U->is_true($baddr->valid) ) { - $baddr = $patron->billing_address; - $baddr = undef unless( $baddr and $U->is_true($baddr->valid) ); - } - - if( $baddr ) { - $s1 = $baddr->street1; - $s2 = $baddr->street2; - $city = $baddr->city; - $state = $baddr->state; - $zip = $baddr->post_code; - } - - $bc = entityize($bc); - $fn = entityize($fn); - $mn = entityize($mn); - $ln = entityize($ln); - $s1 = entityize($s1); - $s2 = entityize($s2); - $city = entityize($city); - $state = entityize($state); - $zip = entityize($zip); - - return ( $patron, $bc, $fn, $mn, $ln, $s1, $s2, $city, $state, $zip ); -} - - -sub print_patron_xml_chunk { - my( $patron, $bc, $fn, $mn, $ln, $s1, $s2, $city, $state, $zip ) = @_; - my $pid = $patron->id; - print <<" XML"; - - $bc - $fn $mn $ln - $s1 $s2 - $city, $state $zip - $pid - - XML -} - - -sub fetch_org_data { - my $org_id = shift; - - my $org = $ORG_CACHE{$org_id}; - - if( ! $org ) { - $logger->debug("OD_notice: fetching org $org_id"); - - $org = $e->retrieve_actor_org_unit( - [ - $org_id, - { - flesh => 1, - flesh_fields => - { aou => [ qw/billing_address mailing_address/ ] } - } - ] - ) or return handle_event($e->event); - - $ORG_CACHE{$org_id} = $org; - } - - my $name = $org->name; - my $phone = $org->phone; - my $email = $org->email; - - - my( $s1, $s2, $city, $state, $zip ); - my $baddr = $org->billing_address || $org->mailing_address; - if( $baddr ) { - $s1 = $baddr->street1; - $s2 = $baddr->street2; - $city = $baddr->city; - $state = $baddr->state; - $zip = $baddr->post_code; - } - - $name = entityize($name); - $phone = entityize($phone); - $s1 = entityize($s1); - $s2 = entityize($s2); - $city = entityize($city); - $state = entityize($state); - $zip = entityize($zip); - $email = entityize($email); - - return ( $org, $name, $phone, $s1, $s2, $city, $state, $zip, $email ); -} - - -sub print_org_xml_chunk { - my( $org, $name, $phone, $s1, $s2, $city, $state, $zip, $email ) = @_; - print <<" XML"; - - $name - $phone - $s1 $s2 - $city, $state $zip - - XML -} - - -sub fetch_circ_data { - my $circ = shift; - - my $title; - my $author; - my $cn; - - my $d = $circ->due_date; - $d =~ s/[T ].*//og; # just for logging - $logger->debug("OD_notice: processing circ ".$circ->id." $d"); - - my $due = DateTime::Format::ISO8601->new->parse_datetime( - clense_ISO8601($circ->due_date)); - - my $day = $due->day; - my $mon = $due->month; - my $year = $due->year; - - my $copy = $e->retrieve_asset_copy($circ->target_copy) - or return handle_event($e->event); - - my $bc = $copy->barcode; - - if( $copy->call_number == OILS_PRECAT_CALL_NUMBER ) { - $title = $copy->dummy_title || ""; - $author = $copy->dummy_author || ""; - - } else { - - my $volume = $e->retrieve_asset_call_number( - [ - $copy->call_number, - { - flesh => 1, - flesh_fields => { - acn => [ qw/record/ ] - } - } - ] - ) or return handle_event($e->event); - - $cn = $volume->label; - my $mods = $apputils->record_to_mvr($volume->record); - if( $mods ) { - $title = $mods->title || ""; - $author = $mods->author || ""; - } - } - - $title = entityize($title); - $author = entityize($author); - $cn = entityize($cn); - $bc = entityize($bc); - - return( $title, $author, $cn, $bc, $day, $mon, $year ); -} - - -sub print_circ_chunk { - my $circ = shift; - my ( $title, $author, $cn, $bc, $day, $mon, $year ) = fetch_circ_data($circ); - my $cid = $circ->id; - print <<" XML"; - - $title - $author - $mon/$day/$year - $cn - $bc - $cid - - XML -} - - - -sub send_email { - my( $range, $patron_data, $org_data, $circs ) = @_; - my( $org, $org_name, $org_phone, $org_s1, $org_s2, $org_city, $org_state, $org_zip, $org_email ) = @$org_data; - my( $patron, $bc, $fn, $mn, $ln, $user_s1, $user_s2, $user_city, $user_state, $user_zip ) = @$patron_data; - - return unless $SEND_EMAILS; - - my $pemail = $patron_data->[0]->email; - - my $tmpl = $email_template; - my @time = localtime; - my $year = $time[5] + 1900; - my $mon = $time[4] + 1; - my $day = $time[3]; - - my $r = ($range eq '7day') ? 7 : 14; - - # - default to the global sender for the errors-to header - my $errors_to = $mail_sender; - - # if they have an org setting for errors-to, use that as the errors-to address - if( my $set = $e->search_actor_org_unit_setting( - { name => 'org.bounced_emails', org_unit => $org->id } )->[0] ) { - - my $bemail = OpenSRF::Utils::JSON->JSON2perl($set->value); - $errors_to = $bemail if $bemail; - } - - - $tmpl =~ s/\${EMAIL_RECIPIENT}/$pemail/; - $tmpl =~ s/\${EMAIL_SENDER}/$errors_to/o; - $tmpl =~ s/\${EMAIL_REPLY_TO}/$errors_to/; - $tmpl =~ s/\${EMAIL_ERRORS_TO}/$errors_to/; - $tmpl =~ s/\${EMAIL_HEADERS}//; # - we have no additional headers to add - - $tmpl =~ s/\${RANGE}/$r/; - $tmpl =~ s/\${DATE}/$mon\/$day\/$year/; - $tmpl =~ s/\${FIRST_NAME}/$fn/; - $tmpl =~ s/\${MIDDLE_NAME}/$mn/; - $tmpl =~ s/\${LAST_NAME}/$ln/; - - my ($itmpl) = $tmpl =~ /\${OVERDUE_ITEMS\[(.*)\]}/ms; - - my $items = ''; - for my $circ (@$circs) { - my $circtmpl = $itmpl; - my ( $title, $author, $cn, $bc, $due_day, $due_mon, $due_year ) = fetch_circ_data($circ); - $circtmpl =~ s/\${TITLE}/$title/o; - $circtmpl =~ s/\${AUTHOR}/$author/o; - $circtmpl =~ s/\${CALL_NUMBER}/$cn/o; - $circtmpl =~ s/\${DUE_DAY}/$due_day/o; - $circtmpl =~ s/\${DUE_MONTH}/$due_mon/o; - $circtmpl =~ s/\${DUE_YEAR}/$due_year/o; - $circtmpl =~ s/\${ITEM_BARCODE}/$bc/o; - $items .= "$circtmpl\n"; - } - - $tmpl =~ s/\${OVERDUE_ITEMS\[.*\]}/$items/ms; - - my $org_addr = "$org_s1 $org_s2 $org_city, $org_state $org_zip"; - $tmpl =~ s/\${ORG_NAME}/$org_name/o; - $tmpl =~ s/\${ORG_ADDRESS}/$org_addr/o; - $tmpl =~ s/\${ORG_PHONE}/$org_phone/o; - - $logger->debug("OD_notice: sending email to $pemail: $tmpl"); - - my $sender = Email::Send->new({mailer => 'SMTP'}); - $sender->mailer_args([Host => $smtp]); - - my $stat = $sender->send($tmpl); - - if( $stat and $stat->type eq 'success' ) { - $logger->info("OD_notice: successfully sent overdue email"); - } else { - $logger->warn("OD_notice: unable to send hold overdue email: ".Dumper($stat)); - } - - $logger->info("OD_notice: sending email to".$patron_data->[0]->email); -} - -sub handle_event { - my $evt = shift; - warn "OD_notice: ".Dumper($evt) . "\n"; - $logger->error("OD_notice: ".Dumper($evt)); - return undef; -} - - -sub entityize { - my $stuff = shift || return ""; - $stuff =~ s/\/>/og; - $stuff =~ s/\&/&/og; - $stuff = NFC($stuff); - $stuff =~ s/([\x{0080}-\x{fffd}])/sprintf('&#x%X;',ord($1))/sgoe; - return $stuff; -} - - - - diff --git a/Evergreen/src/support-scripts/eg_gen_overdue.sh b/Evergreen/src/support-scripts/eg_gen_overdue.sh deleted file mode 100755 index d0736e87a2..0000000000 --- a/Evergreen/src/support-scripts/eg_gen_overdue.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------- -# This file runs the overdue generation script. -# If today is Monday, it runs the script for Sat/Sun/Mon, -# otherwise it runs once per day. -# --------------------------------------------------------------- - - - - -SSH_CLIENT=$1 -RECIPIENT=$2; -DATE=$(date +%Y-%m-%d); -DAY=$(date +%u); -BSCONFIG="/openils/conf/opensrf_core.xml" -ODDIR="/openils/var/data/overdue"; - -export EG_OVERDUE_EMAIL_TEMPLATE="../extras/overdue_notice_email"; -export EG_OVERDUE_SMTP_HOST="apollo.georgialibraries.org"; -export EG_OVERDUE_EMAIL_SENDER="evergreen@georgialibraries.org"; - -[ $(whoami) != "opensrf" ] && echo "Must be run as opensrf" && exit 1; -source /etc/profile; -ARGS="0" - -[ $DAY == 6 -o $DAY == 7 ] && exit 0; # don't run on saturday or sunday -if [ $DAY == 1 ]; then ARGS="2 1 0"; fi; # If today is monday, run for sat/sun/mon - -echo "Generating overdues with config=$BSCONFIG, RECIPIENT=$RECIPIENT, SSH_CLIENT=$SSH_CLIENT.."; - -./eg_gen_overdue.pl $BSCONFIG $ARGS > "$ODDIR/overdue.$DATE.xml" -scp "$ODDIR/overdue.$DATE.xml" "${SSH_CLIENT}@${RECIPIENT}:~/" - diff --git a/Evergreen/web/opac/images/main_logo.jpg b/Evergreen/web/opac/images/main_logo.jpg deleted file mode 100644 index 7b77a0abb44b407d5aa7298b5e6fa8aadb6ab5ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18309 zcmce-WmKC%_b(cX)8f)X(E`P3OL2Dz9%yh{S||j!;Isvb6en154IU^E+@-h%5AN<( zpupih_q_67>-}=?I_o}}FS90@z4M#BXX|r6eZK@C0V=8}0x&Qz0RQ*^?q>mV030lA z9BeEc9Bdq1TpTeT+=oSe(uYL=78VvJ4i4u3!`45jlD@$vW0E1)HgkGW z-p1z_lQnvTL&3~1yZo`@_#O>-g8A?(QcO~S6rhR%&i?<;5P@^Z{N?~+|7);YbJi#Z zLML==(P)#=essd>X!ey+guI*J@tlsbEu0O%Rm=2U>cxi<;CH`)6+h_{#>v8afCfM0 znTwji!m-y2S}9IH#3w5%iO0FN`#qwcM>>;uLq@}R@}BL!+jmdbI0VOp$6JaEn=fer zT}u>WLeA&}?7}#mY9+^AS)D^e>&GHFdwZEXVcvfxP5pqN|LY?l85BngipvDWAEh2e z5njgkA~`I_-zvUzjnH=~;okx0@?P2jQSQ2wOpF1uv+t2RgOX)7zEv6bfP|>4q8Lsc zJM0$LaY2|zp(XXpdQ<(sQCn}~bnXGrdq7kExJ3CCZeHF|&fvgQ#OiE`Sy#G?sO(yV zsyTDu3fh+}<{ltWYATqKZzj6uL8b#uK)WY|*fUm7A3Cj*pe3w_{fbgp@r?qLc?nybt||oR>__hZoCJ?dkr79I2eq+ z*`aeNfr5U1>=$KCp#4puq^97Y9J>HoX`Qzv;&gXn^j@fZkt>l73F93u;al&o7vfvn zd3?#0n^-fsvBh%ClGb_LdY&#|xYWt*P=69ok&5YS?(>7LRab{Wt2eA5J%xvLejq-gYL>Vr~I)3D0C{piS$V7|0P9J{t0N>WKeXUb0n}GSFp& zRV*qWB5@HRIg@Nrw-rl8%LM{CZc3u*<(F%xJX!64v*fN>UhVU@UA97LH4DkC3J}Lb zu1c{EtZUE7G1E~_VPlPp{IDN^0{Q7J>SyPs-bC3|?~{xYk_J@fgq`s8(q|3~iBn^j zqy^$}1>^%Kt?lvO&4U{2@aN^bOhE7Pk3b$VTj#l8XUWWQD+sS_%U~Mq$zlSsjGh1& zcT&PN)cSqsWXxnshRQ|8lmaTV$ce$&q{A=YK~KNTjcNO_hA*x+!8y6kP`mvYubWuZ zJicb1Qz0f)Qy44@RCy6JC;YUi;+YgTF0HrRiaBY2r@<$9a~-k5mlaL4Ma?|4SBx(W=X^6!{N)@eWDClj)3y(`CZ7#> zq!PY&`8ZUC?gL1Jj4b_mtHr06{u*%W6uuNPw|Lp5w=QN0xl*)M&M{Msfmsu*DqM@E z(u{ta^v@8be#zj(Y84QZE$a3q`9XK|EC)Lj9>>AvD;~1K<@o6;ZZir)<}44Qy)g4? z-)O&jSERPV&g+nozfLV4_n8^JORsn}AS5Ds=WPMf<+0~ovn^{8MWXQ4 zuI!x@Vs5kL8#q$mN_o@+Au9U(I-Y)`W?cq zIQXOZd^;+gV^dVK+6@9aRZZjKWFfZ2VG42@aHQpO%G9GSwZ=l16c-7k=NV(00_`q- zqMm!P4%!M}#fvqbpb0SAzWeLcXUkf#)$4&Lx4z6%uhr8N@yFu=y6zNRqUfRMOi=c1 zWgYk2S*m{cd~VhipXhXTZx?eJRt20`oJTxl=baY!&zV=0W$TV_>hUj+G`gLWBZePKvGa&8ppmiroYk;Vfy+fO`LSoLj_Lm zy$MEv%l)}OVq#q6A}M{hJK8SD8*!6k>!s;J3q$>kKi3ugDXh^!T3#nT4e2$7pU4k6 zujJtIlf*x}RXl#)M-4deg9(r5i|PSB)@6cnBywAP$AmufUi&U`D2!)M*E*X@=1oEu?Zat!(*UZK*uhKnH+|6oQ3Ie5yZm*MW{zy)QD^+S7r14~LpOWoq@dr5O3H(sC027P|;&0&#- zvz*&)O6;D4JF3#f1jhq@wYf4JC687AF8TQtIM3tuazf$=`SykC*U=m<54wrEp5kDn zhVp*5=zx9j8+&6eHBVqu5kI?hA1t#5m#FUCfoo!Z>rpL^?w!%mO8VH}om+-b$*&5& z%+h#{QmmiVVtTDF3jU5?_(}@gq;M6^+vT2Dq+UcsE|SmT`s)AOo@hTEM8MgS7hI6u zN|Rr42d%B=P@g(Ja9rZg*}AY*0VU?wrh2qw^ zY9u;Hz@J7jx0W^B9-1V)p1znNAi1XrEQYvI69}jNwN^HcLcX#j_+E)64By%_4)X z;?o8&uEz*W2qisc?Q!w9u7R`U zGjny37jxq`YUa_su1)RGevsZw&6 zQT`sQpwdhUgd>Yu*1}}qbpjDh2%6>bpD*Z!y(~v^qM~6x^FZ$t;$gBdvd9mPD~=u) ztC2BY6UDkX`;)L$r&(#+#?r_7nDki&5km25ohxVUZ6(k}lWZwpnCxHJ8ft`MY+LpS zNC^uhCheJI-5Q=X)fueM4CrkBzV`J-OXSXDbWOc$m^N)kmJpdT3M364Y zzTs@}BQ=PBN&Zyt{F71Y*p}*3oD@x?eHA79dT>JX^W!euFBpG~riEgQ@t*|Oo>*p`FsjaOP-mAJmCvU zevZgu;-G7FrhI?Spt36fy9YQ|iRG8_))A=2#338MQD|kulzR2=0T%I5OB2HvJ((5I zz;X1)u|lKpuyGxxHwng8@QG@zY&;eU5>GNtoC^c}J3`}ofNiKZcga_r(y!GD*dfT- z97DujyMN$|x6Dv{(0B!|lx?=kdGh{*?Z3ajPRDJ_YWgLm9_upLNNQKctn{KsFU;kL z*C{!kaP6RWtZ)GsoLz3{tvG#lmS~R7qFSquMlV9w8<(Zm(#{K_GXPH7lnrpna9=aN z{hHdO%inpEF(qFKS2a+ z`-A||+|R|(R-CaPqxl~geIHLY94_em+Cb7Vq{OOLA6S@g$dgA zRb|STvKag5zYssz&n-jQu}L-$^K@EvA=SZBx*haw^G45?=c~}JUPg9HiB!+f16C#u zfHN&;^?xDWJ0%1D32e;U$&*PBQgf|W=`-S7;J_57X7uqdUaaWrKC<4tG1rZ);3=CC zj9(9Lv)FpO>e&~@BweWd*EMFq((hn-QKqQ_*&gheCi)hmP6tTI^dX~}A|J{UY0&*- z>dQlLQvdV@#(kk0*gHAC>bP3Rq^#1WB?}B;VAX5+59ET!>#ZjWKmGc>^Co(h2s&u? zAYF~5(ONQV%A2!VZ2#m%XU5{w9|4!!3U+RR^ckvQd+R4yJfz7(E8vw>W;V7VZI)w+ zyoM^He*!E7Y94WmAy?Sa_ewX$T`Ol*XW>J&g1kE8iP(alXxUwI8H>e)e6FB-^Ik2% zS$WP$1jAUY!lvO}{XQirK!7{p`g;J3fl-6OPozUcxvNp-fIMbSZLIet&phz zb-!iC15}n|HnlST3#Vb~@H|uyitKwh00%&MT{QErE&r_sj|l~*h-|msvQ#{MNfuYT z+e>Ev0_yrW2m*-I#&@#xVb%gtZJrx90b? zN{?qhuC)5bi3a;qC_mrQ0;#mE`eU>$x0j2FPT1PmG2`3=sNR+vBv63Haw*xM3gXIV z;9i-L6stf%ALlIC%aHRC<@kVq=nS)Jf?@@h8#8tPa4-#QGWy4zbaNIbhryxin^b8M`AZ5m zFuga{o=V;L9GIhBRTgK7Xo6Hu;#rc6PPI2tshgXbO_<-{pc^4zgaLKiC3ws#dCCDC zUs1Wcz`RlDt>79zIyJ!*)@QB{=L$0SJx;xg5pUuIXsOkx8ms2mzVK#RdwtC!h|dh| zq=g$3o0aa%djn@D6Gt`W&0r3o_nP|J*yDvfnUMsX>)pTHoz4z!L?^;+eE)$7*#jo= zP4)l6M9UTlXa7Ih1w0oM5$HrcuC}qc>d9kfo*qbucBC=P$S{S|(_;yioAE|?IlSPQ z@^UuJ$f^%cl?hEYjc0!?o(#l~A0SbpGa6q77d$Uv-eh9CKi`OF_}Z5t zU>ibn63v*k9v})$wgsc&UGuuXt3SJZa2@IVo1>b?Fz8%<*zy?tSP<@ODC#b$O)-2S z&duBGvU!&@D3E_38o9)Tp5f(oGMs25j6A0w&dWhG>~-yDIb<8h)L<(9~X-C zwC(i*EW5Hgt1EMgm+C~9mbzYf%SPK8LC6JNigW~i)gWL5Mk&u2Hc2yVr8vZu&m+;b zhA7q+yXQ0mVM?Bxy6O!!;N6mtaC{-BLyA%hiX@MdwaEA7#+wnJfjFA_L+)1@vBq9 z!=QtSpZY^9X2a`Rv!stHf7zbu?#yB@XRNsv`@wXHVXrB6=#F&cnB*qFJc9G2C_Zzp zSmG9o=JwWF1!WcJhWG1IdCYH5!@oHyaUSg6TG~vLEzh{-h04h1d38uk5rDRFu~|Jh z4TB%aFjGIHpqWx8#0onYT7GcAwJR1y^QNHRbL|}*NMPBqy)yDHD>AE{?>v4%QsBqD zVmQowAt-;7*jlf=-ZhF+gQHEIcdNOb#piWBPj8=FW?)+r=sbpc7q#{Dhzyf(YATL= zd@m|&`U?D5y@Ko4h`|>$d62%?k~!AuLIJz;>Q;V(>Z$Ya%iCxdm4IAs7LE@wof$qm zf2Hn@O2&mK&J^iPg%ZByM3HI*4sG&oGd2mVi#89OVAc}#CGY##jYe7OMrG=rJse~7 zN)ku^@)S9lXBlLdw+FGCW7A|>@pE(ysm!o}4gO&SZlm9+4*mY+?J&zVdI3>ZQS-Ql zms_*M=j=Mq#O%WlceHxMD_(gB&J>SYU+A*kWJ2(#r9dJdDi0EwVG^4+dG01XBi(ZayNy{ks@i+$17ZeD-zQ!k17>cjv%hR&GjPT{LZD@|rAbfgni1 zb+_r`T|>=Zvz8L}SIg61hQQ%;JS3KN-AW@xC}@qM1dnsb&RIi+?ddmGWFo~W%OyJ( zCw;VsJ55H+zJiO)22Ost=9u10LRbT9QaRYjNg^GKeng4HJK__@Zv)8`s+TJ}s@U7P z-%D+XUT%;Z#Sp8{tu2h3y;h&!CADNLw($j8%HdZtz64{@I-eMCL$p;GTUy?@x(&b?| z)>4I=S&8+jEfb}_Zd=@ll#eNrRs3;p^B9|@FHZb3*g6kkTy_nR6drV6m_pwak$O1> z6KSdy)d<<^RH6YQ{dI#-E%1K9nI%%q|L;5jyfyusE|c)G5$_+CVpg_ErJOWfkr>lJ zo-I_e5s2Eru50o&DAQ4f?tI5i>mdFj$jYD5Kmo|hzErxIzU{p!IWIdi+#kHo^ z96#cYZe{4|v$@3~%LTg|TnSh0n>94EP-MUQ+;f_Dxh}?UY1eb_Z`J_A*~=!} zvBUz=pnkGlh%X-#&{h~dh9)*UV2+{tuH|mtZLRCBAC0E77?0zr%I5$nw_(wL2n~h0 zE6w8<&^UHi`}V|TwQUiw1Mb4tpPdsVY|Cscj3fE?Gj_W7YOsT00B7;<;kYRx?d8)R zBuZvD72aes{jH{Mazj=a%a2amYyCAZ zpKst*kFm*=354KmRW(Zwe%GFRGJ&k)>(^qhxwwFMLME>EqnAH5UujmXC#?D#>1c4+ z7Mk?Q{%HM+;)D%`uZcu;`It=_>)6nB(lTT>sg=F1a$kP8yISU(UGPTWL;XuDghYw? zj{J^|kq}mw9Cq|doDf0iX*lT|XY)kPmdNc}y)ThMsCBHddw{&4%MqC2&)gm7mDI1a zRB;$(9&^4#f$v&I67(g=ztHY$j?U}-VH4L!i-u@ydm|I@6-Y@EVSIYUCbB0Hgg_9; zj>qT1RfHMCNo*!)@@{$EoF`xhL&ZoWDbdQZy%B_#iXR&pMN$>sE+4Q@>=s5 zB3=J)<; z2DF}o$^5@;t(Gea6a&X;Qc7+@W&@vet8nn?iolde{Q85*d@1d1uaz_na#+JmV6&8& zZ-R1|M9xypuXlB}w$>~K1@e5N^IerVOb=HBi@hZq$75vjtOtK?-Re+w*-t)WwWejT z$Q=Vq zwGtyTvZx_Pi-jC8E(I*Gi?bZ~|plX@*@PTab48(BM76K3@1r*_Fy zv2W1uFYo?&9{(B}r!p_spw?yY(cXrb3$CeMgUmE&9un6c zIsThu9xV=D;9TAZt&BBBVxm*sViw<7=5Af%7~Z|4bjVBY1ln&)RWhvGXE=bSnRxow zJgMzh7|Cko&iCV3&?M~^Fm{{BOGDi#Hp#s)FDG=ST2qiD zUZi1(2IcGrfA-;0Qej-Pl%yc{jm`Ot{0i#!bF=3cbFQed6x=ZZf{00?h2!a4rLT$< zXMJ0gZ9B|$_`A|}NTGF9Nsdn+<%&jURtawgr}(vEG<77EuaF!J8oVY4n-_n3h#SwfcISw59hMUk7F*h+&~;(weIlXp z<(1-<VFG*do{=cCV0Ew8#z0`%~M0(2oqCq=Vx9}FJrFjCue>& zuFSBlGg}Rx$J zGTJpXWQi{w2?Hf39daQ}DriBKQyI=UsMD!&vNfi_%?!-pB;DM(KIj^}*tC z(A}@n2=|irQ*QTwaG~=++=7sc?7C9YeFYzQ?`IZEa~0^5Unt<@$~akEt_w@Ltbc{; zif>EZwMzKySp$>DQ9HISI__Fw_X2v*pffoUZ}@?^H@i4d|84xMNly<9ZHq@u^waRV zesCYMQOQrW&>uY>JFP1eau4V$bZc{SV0*udgIQ8wz{JBl=n=)AOB>Yo*TVUTT40M= zS=9bn=)u?MBYI~&avI|md0o@@yfSND#VUf|~*xCOz|6maHX3&NgqpIEAW zyg}Z7+$KPt@QNL@CxKjuHV~HO4-@g{8kP9&G<_HM$DfmOTc?6Xk({U4&+K{->FJ*H@ADq)f11z6oSM#jYh+5LIj5oKW*iFV%rG{iFZlB!j+b z(pde+ZFiWoH3hWMM;RA$(oq6Bnpoxm|ww!d=k4p$ncXZ;@ttv$S$Cm=N{0D zV6UOAhWa_fqd^SwB6!N;?k=6N1Ae=NW7%D!P{r!;#OdpVox<=p)I|LLV^(X)W;6XeAP2=j|1s#6g_A!@`L}*MNpTyPF92`x}Gm^ z!%5@cw$$%PiQp12yyO}LUcWw#nO7|luAWor0|%1G9AasCWdKj_0ZRL;rVvEen46Gr z;a&SmdPDH$+N*m2XDU(?XhXXaBw$jifLLwqiS)YgWpUIx$JX-kGTGa(I~GL9H`H+A1d;u zhh-O>5atoO&TTAC%xryGb^0pVnRQzwC*rrrkaw0LrL;UkSfSyol z{aQ>el2HD7BIsFT9p5}7mv2WiS(!+_%<4UWalCveo6yCMYIoP~F$neN)w&!qHs)k< zxs&rf|On+i=mqAsuP!3(MXwpVi$)tV-e`?krO_n5rVXTPdxT9W{C?#L%-IW*R zxwesq$(&P}Q1L(46FL^Z+Wj-%Jh6WqU>R!6oBEyk8SeAGA*Cmu>nks+3OdbY#x!d3 z?0C35YZJmNyPNF2p~Z~_#|On#9y19)8@GOng{uO(3JzHNMh>XQ#sW>`hGmWlw_>og3+zH)rFM@7ISeZI5%Lx!djwZjWQV3pi$L3m2fjug{p=C z<+csi?~o!9F~oDk=6F3~LXWk$;aKfL0Ja(O~K zrq17W(Y!fnR+Ux1f$-HJu^mj5p&4i-ENzB0MZZ@zaU=Mbqtg00M>zYHaNmsn%=|Gz*(E`$sT}x;!R9v*L zk7j8lIcYtum+4tD$~Ea=f#f?Az8nN!`kAtFE9Eg#WZc@4?ypw+ox-a-u5D@yC$z!7 zvXp=;3h3bQDLE(eZ>ZkiiS&^rM`+ml_peHLA{(@bAxbS|M^ks|wNaOPqyIA5@M2?P zNSX+j$fH#UeW}zP^1Gdb%7c8a^S4s=>+gICVi6yWEI5FIoTX=LcV(mZ0C@bF064Vh zP($;fR(fslUQU-%w0R_#lcn065t{=J|3EJvko;%LtBb670IL9-RkIpTJY<1_JU2aF zw8@U58>ycJmMFKI`1H3g0@^iR^`%DU^NkzS3BM<_l~7<8=v#AHsdq)AsaQ2rl;(wWZIBpV3$9d>OiawZJAi zj<9({HJyaj8J@YibHuq4cU@Doj1jsKKni!AF9yyeRZW{!k&(;!lL!}F6e=aLH6E8V zaY+B)x92=WZB5;08J*fj{fMl|$=O2SNG2$^z?{U>pG$FCsP-=QPbim9W)2;Tpc;bM z^QQbWL`hS_aS0=X)$w>v3g&y*JJUs8rUj*g;bd3zSDCEl$#bx?I}y;Ot=2|&3$Iz#b^}bM=Hj7@OIRnT+8eP>ouOLJ7q(obtm>4{T3X^@8 zmzQ-P?$i}0tgeZ^s!c5BM4Z*hL?(_(UWe@Js;k&Sm&C_~Q6t12=I@31hHNA9&8I<14nkMSLN4-_5DR#4P2GS5@ILIVXOFQ-9=*DboDD}$V zx-$Lc8gC(U*ymiDklK>_qgVKaWfA?Z^`Y%8Xab!)ky}z~Qg+gqfN2e+I9N&af4IFE z(_Nq4=2(SkG>w&_9qh;gHY-kqh1+i^V(-$bRNRuv)!$_;dQQlj^r2wD&z&+__P9XvgSR!WqzvU#tB~P}Tbml?a_|lddde z3mwc|hZWN|-iu1uE0Q?Sn*TX{@T7Yaxraix=715Azi3x)zXRJbI9=XnwW6%6r#cYR zD%qeR^)+?e3}JsnYJze1Q0xH1IZoqRVR80nxZ7Zr@WuYg3zHOGck=Y-OO%Y)&Ukmn znN1J&{GWx3Pg?hYi+h0gpYe=487Ss^@m=xZQJPc%*KgfQyZPRUxGD4vu$D0aJkvij zd3S!68v?uxGl@c7`PY9W?*aPm*f!5)tMZ`n&LGKK@?m<8%Z@F{qM5dy!7nToKi(`@ zjK&H32W&A@@^|x#>{auxAMgI4%fAO``NGz2(~oi1Ne+5Kt{H4M>78})t~m$o^gh=h ziaJCu)fUMe17Gsdg;^Ua>qxU;3kJZ__LoYIXq`Ec?|Fs{OEo*)f7l-Bt+M@^9L^Oi zEO8A?azluD7%KxE8|ucZHz=fWu~md=aWUR8$RV=N!}K8fzCl|}29;v(#y~dsV>DH7 zNbP+)BU{)(<=q~+WO32BX2bL>02{f9G^TK%26t!Fq9G#O1-{5eGsO5?jP#UKBy@=8^dgI~1w6}}Wu{O?|A%FQU{uWoia$1&&R zronpY5=^%v&gA=$4U8Wgi8%w?O(Hx3v7X;V>*PFa!2#!(e3Hw{E8gi zK@7#wo9#47IH9Jt-Msq=KH6FwAlPE)LUEC#oiv^Ajmz5{0SaKE{kvsKk~lws%^smic!{5 zf;*E}*kl~}|1oGq(&45{*X?wv+^i%;W{P9zODSJj@uYpBx8p@t&tWL*b1+^6ysy`? zLStH>EoFw2-fAfNCayCIZab}WQv{>~PFA(@RS*@X+@g5`0ZPUbgwr95$-5BX55uM+ z@g+|psfDA$8k_5rm&0eS#l`E7e`Xp6wQcO?I-V0*w(6zTsGQg*Qoqd?&4;TvY1FSo z0^>APGSB*zdcK&(SN0}s8nABJ)~+1y$K^iK?ALAqt~u-(9=3Xx{wh1w0SSg{9K=+x zr8EAL>Q}ciVUKAkf3P`g=WKu1wDcrHMUO>485Ipm%=g=ELNj$8N&Z{}Pr)+ui#xgc z)_BxQII!T-Yb1^`#r>oGHnzJq%x+;F+lo0s(*y*HHm~Gudas$w)VU+;rkn z);-Ts@>v`bpAH5`N2IN*E06GHjIhUt#MVHi~?*Vw)lmWLT84sQE8Ma?! zbi5m*2&V^`8zX)u@`Ob6mzmj|E_J4)LYSTXshPO*ju}x&{ll zYX$|J>$=7^I3548#Zm8uj{Dq>1;oXD^7f-GDyl^%8%D1H!Lk0Z*9w}?*=DyZ445Il zmNwR#`Oz~`liv?TgN9iOIZwec{j@}HhAGK&p)`{T5{TbFtk7ZzG!#>=D7e7D7VFgs zgAzvgg+G98;dprQJ^IY8cYq7?+Mr3(-3a6Asfa^;zmi8PE0RgS3s?Ma(@(n0_ku2v zabJpdKJ-&FyF3hH^s%Bt5md12O6X`#y)>a$7ha|er13k|N3cTohrCTC(g z6YHc4Y6iT3d?P$M)8ox=5(UE_mJLD&_KJTFnOWqC8;pS^r*p0Qb7v0<>qOVvE>D{q zS;#w(5pzT`65qfZAr<}@AJ^`kv!QXVEU(i2wv~qJi3R)sI#x=jLT;Cb? zhS@6kUWj_ZO2v*7v@_^wiOU28m~(!vP?tTWvU@AuR4?C3>LPvTMV|8;&UpLjOix26 zcGSfm{@YB6hz0tP!p7KFJ}6!K=pr@HFV{1{jx(PiJ&~XSLpzKF?g^iQ`&V7Qn7aG>f@gNbX8w&Z&8@n#k|xnkqaDAL=!# zOX*g0dmMOz$;R067lEOgl-!Ozo1rB}_UK$h-onSmf{%ptWV$~G91e?zx=!LeoP=os z%TXpqvw0nYzOHqu8KSLpi5wH+Cw~!VhdlBy$ESXs7kWn1x0Mb70hcoj-7?ZPaj@8E zN9(&AhHASb$1gX`f429&%+$2C-RwoJX8z#E1PZLd@pfg_P~=($ejP((&YOHWC`E zU_@85U2CdD+O68>P-2v103eSi^Td$(^^jr)KQ^*Xaf=wMaBzoh1=8leDpI^|T*nG0 zR-sHQQ7jru7<^~(Wz08X9emlR8sSj*d^VT#Hw*m-w-MQ=L-90VaXraZbm^GIrvYN7 zC)JvvH9zhFT}6TgO?~5DLCYSs6j!=aai@Ober(Z4v`z24nxbX}{|HO@#{6~tH=83` zG&63VCH6E=brqTo<*a>6;C6NUCNdYjk{P)K4U*maDL%9e%{_Ob-v5GYi@zTinD&Y( z_whvbF7}G}N{`%rz;>VJAgC)3O&60+>% zh2{wb*;-;6f?LG(yVtcEfl zZu)RZIpjjs-mm9q1+RBS(yJ0poclXiYwp7=FWCD#{>i)?9#353wWVk(oXtY*ynD>@Vq#J~Uo(LM?N)QuiJ`3b01l zSc#%0GWVpQhwys<%Py#A=lPi-JI#y@W(hJa!@y9XQd{n%hpF{YZ<2@Jafk>c zv(HaLRlfbshUyZHa`PNg0|B-E&QFd6{FyBTg*MT0!h1ZO8Jsrbbaz9!Kv57jmWk_s zi_F;nP$tKj&rP*^r#jh(wsH<|WgaQIj_>s|j4|mQ(Rczb|NT^~My~a?e=7p>AiE9D z5+^h|_AFi$y0NEV$wO4%Lc%x?jj2xQC%<@B9={!B@E1dv?|&6t9Xj|v!8wv^r1m|n zENFV}<699zzVs!0aZQN0I^_K8|0F*3pqD2~$0N$3`dHh=K&6MilCR&uVJL&=Hx%PJ zb=AW?JDkAq4yT;zevWwv@;j?U>l1=4YcX0vC5w1SE{wk);t}UG&S3(d`f9@6RUorZN0qdQIC!WGV3(-Oh?}KP<1Q5 z*E9)Ph2IOnrCl@%V{~)ihT(oIy(kz(e|@L410~F+YhyIy^!x?R7}P(F-Fe|(zc&RZ zqY0nm@x-2}k0xX5P!?O@a$t@M{Q^vQHoGynU@r1E*Ny>JJB&>XUbjxX3riMs9$zoA zKuzZK;ya2@pR+rBT{p~){K3H~saZlne&zNzBdL!t$M7r_RlQ}OqgMIySm>E-m_>rj zA*;Uj8OAQ9w!oL%I_v(w#lQDY&Uy*@qF8d>Sebuev=US%-2HF_Wm@j^YUEdOcc@yf zbLx$Pc%!%O0hwpB1s=1BP*@~Wf9UlH@dkkOBtYh!phEfV#mHyD6GP+2&$MX) zMy4+}H|X-pOryu#_Brxb4E6?a%(@hJl&qtypT~d{Li8HbKpj@%qTgqW&oqcL{w0Z2V!+Y0Yib%z3FSy>PO z^V_4!lB!frBaa_eVDHS`{!*(m(Vq32qRltHR_QOJwEjz%W+9|^;dZOP%rs7 z-Zi0}ZeArJPhxuwy5tMqbGzqQVMSSTF3K;lOMRRxHjSSKw_yT`e>`j36W=M`MI>7{ z5ec1B7IwXeKX|EQO~jY&Nw{{xhU?dMRHkf$QOXamF@)5CRZ+&T*C^ttLVzexW+uqd z(OELN-EfkNMsb*LS0v}`cQ@E1(V?;;-<&nroP z8h6V1SS6O#h8mZd1B>Mv@3)Fz18eDc{yW?1_Mm*{WWHPpTEPz+b>pQ2 zb*vY*)pxwY;g4#XcF2^OnP(ZK4~s>cLZ>y{*^I}w4T*0!)uZTsZn2x?p=DT&3Y3+5 zS2PK(CqIro=lZn%+J&4v%*0i`XgZ=`(`{dzXeEx}tVAvCo2=qZLdsr&1HBkLIxp@k z2Q}teTVZ>AIz-8oE+Ky=8`)4f#l6e(AjPvuwB$}v3}rz|UgLN=?-wzo;%p8J1hovqmO8zhO?)}6ANRv1g3`Nu z!BE3FFDjW>N<>&XWuV6R!4JUcO

y{)wxT4!*mAC}5Z>8lXF3Wqx;y8y@%iH^{gcVP=PGLLQwNx}vwK70B4;uk} zHrL5u``f+oBNX|LYeX1BoS04f9Q z^P|r^w0u?vqh81-P(wN0_+W`3k<7S2fUi7*iSKFaYQ?YW8`)LkLsZ;~Zc11L0v|I} z$WYbC7c%(Kl`2XjUN*%}jY5RrEm2TRJ=Lk1nSJ^RV(nPmXMz7YYsDtjMiN0#6%V&~ z?XI>gOlZV06CcwXi!>%CTFJtl@3p$M;4SSqA(MMWs}2dJh;ssc=!k<0!mv*RhYu9b zDmA|xN!gWvIyB_I^e8%EUog(jRr>Cqze>)_KJ`!M8(8$e!gL>DbsnW;8a*>=uU0L zSj_9dSPU?SOWJE3i)(l+nInf%sT3Bq`d=Gb`@nl-e>ylRc{n`=IJFHCd0PpxS3HlU zu0gX@ugIcwVX*=IjK}l=?~NxDg;aXJ%FmR{+d_zpI_N$*lc|!`BbTy1rEiOS(leUV zyi%$?`2Hh*O>!*FXaLc!EI9!U0kf$mwdU z#VeqrAUah}MxSli&>tl14#T#dG~swb^t0KhCR_1cH-e{1WSn7xOQ*35_CPi&4kPMsx%!fQG88s0-zf=4bU9Er-mHf4jZ$5{qApJY80 zZ;Wy{*#JvVBH1uQ4$Fdmep|2TCL-?*r|K}PTrXB68` z<0Zs2Q;GcY1S!y@57((&UlFCGO$C~WmNvx zQrV|H`Z?e8K@rDU(}av{N%QML!1EB417~UZg|HCj;Omk4o#A6yPy@kP>X@V$X{^s;odU+KvBEPW=bLgD|yx~ zSbRcMrRUGr^_gd_jqWc3?pG?@^lE0XW}*I`4+q`e6+P6FYdlaEkZbtFT*=sf)7ocq zJfcKTEA%wSJ2|XXkI48be%3H^o7r!bgF)QAyX?OG@J^Mm5$#j2kdYCvHT}NtWqNwV znhmoJpVXd<5?S%NeA<}_(@q)eOL;J1frm|yML@3qsU)je-tWzBmL_gHbcOBL2EP~Y zE!f*zYaK<`WW6=%eqB~N<3miuG;oDXC@4Iy+-}nKHcp2(=KZzIPePY_ zZ~wZwbi450???0Attd;$n`dXEVZ3vhTVa%qtgM>Zme2=#MYdnx^|MmLF5p#I?}bz6 z_14-PUr->S^6y;tu??YrwG%vzC;j{P@U_)M=~cS<<)W20p1xji`}UOElVlUE?e*Dy4zA#5G^L5n2 zJsqwG_RQ2#X+3HGUH1Hb+dclvH#KWl?s44g?)+VoBXR5c)ozZeUI#50m^=@tw->H^ zCF6BTgnyQskm@-{DlJU}%ckfpuCADDJMs-HTJ8xH~Mm6n87GEyZ=QqQ#3-DDI^N-rkve zf5Ch5As^0@lbo58NhWz&e%S&LD9bC!1Assvz~Wy6ylewV<=#8m0RT!$>;MeF|M0Q~ zkoiy5{|o;S`F{!gXYflO0E7YH1$;pU(gTn{Kx7c`We7kG03abDA^)@SKVV{EV56Y} zfJmq)|9Axg000dMh=hWIjEs(s`>zOygp7)Yj)DQgBm`g)(Gio7Lg*Q!$;h=R_=H6L z-ghwZ3kX_zw2O$n(YEqWgJm_fb@u-gqWG_Y|4s9+$3Oz2Bmbi~Kma5lGBPp}D(Zh( zAQA|GOoxg_h=LBGm&PC>)(RuxvrM~qSq0!A1OKfa83cF@@TTfn6B|`y2Pf38tE;3F z4yDRlJ6R9G6`%i>*8VAC9Ftuo^|PcyaG)P#FWlZ`r=`o z_VZbt{Q={9DS7zu7smaEVYOP?!Xqt|oU`$X6*&pWB!PSY?tWK>W}))51Ik&# znY6Y$iT)wl)b}nEceV{6cDnX0jm_V$G4TAT$EgpcAP-))(gDPy%UtT3mH zEb1E2l1mXN9`;#g>ILjF4mZ(tDYscEt{PdwWMqH&3nVS#93{IrOvMN5j9C-s zY#H_g;!~H4Y=DC4(exfXj`8zf0f#(-qvsN^h!3UU+26^PU&c&p|CW3fPBiwn>y<8q z!55z!e!s6sVZ5?N(0edU7Vj&He+|WX)xMW@Lhr6b2u-}?#gPuhIfc9ULKJ~`@Vp%fn=4xVb2DqGAL74`!C!-s_Zk9Et-H+S1!)Z!XIwD!>yGcY2 zWyN5y5!7)7Zc>;SCn3;P6EAu=?a+U!Eif1qc~~%a-G?qwJcCNT69e_?qg+QmK|Z5? zhNdyX*c5XeE8YO5%IUD)WMD|C7HMYy09bHkxD-Hy7Kj`kiXN3#+CBG}-=cwc`Q$#g zSw@NWo63=YFD*CiyL=$is^px99$0})|L0S9yFNFbnTO_p2A3=%lp`wzUG&R5_i#CM zmWrDT+hM^qs=s(OWDgnH7ViB1AuTZ4C~4?xsmjC~>~ zW59Lm3lvs#|ApJcV3B8!%)j%LXY9cckZ^A-<>$5Cg!0QO;yNE|ci*%cpO5r%A?wdD z?`}Seq^3I3N^r*?e5wY~&dV%&96xXh%#Q7nt+Qq=tB@5_l@VF-_e6jhyLZ}Cx|=av z8BfeQF3D)|nCFs$LOR~WCNAA;`|q1_k+4Y688SMp77-wnO|5BJdKX6g{xD^LdZT~U zP2y`8zUA&2_2B95Oj-8M-_{oZNL42o>6t!nz&c}db03muO^&`i!W$bJ8~cE-SJ^60q;j2p9zB)63E7>3Jt7WYwd5wH#PKx?(4@4%H|HZO@WYlZKLmCYS zI?12v*>6FEY&LZ5=YXojpRV7Y)qWo3Xd`pA*q0&2DP~54nK=($BnT-!WAQ0+OQy9OYHsSVr8%F!XeEK~)W-7Ar*7+!V_$ z4bNm=0HYa`M&y8CZFl;-JY^ZOfee=*#x9}&$9s$n*^Q_@*-B9aJ=Bw4r^+k)0er|C zm?P_dR5|+2Qamtn-8VaVmu3OdxtqMLbBz+b6EeiGalXayv(V)6ZIwwF)R;l5<2!Ya zICy;W9o!Z*Iupwvmcc3+KehGbp>A4#FrQb?JF2NT|C8!16_{*rbX0^Rm8~4>bVl$w z%XzPh{RLntNL1C{J45O)5TcIj>%8vU0f(n8z@-*03@5`Uq?e7aubOm+RX9BmI#f8@ ziV2iBI(o_u-`J#NrOJT>NU@;+jEoXXHd!grtrBYt^ktM0f`co!PW@b+c7TJ|3K8O7_xD;C+Al6~w!)B1^%xkyW>uQPVq-p+g z+|-jSwje#MWP83bQ)&VTn>f?gX>Zc zb8>4Qb6(EL2t%u``iEbkmU#p4NQ4f~9Z@Rv+!fjx@DxvK<7<8&G(^1R!t4I@FZA+s zw>hI64@)}(WrR0O3V<@on|H7!g14JD0*N`Z#>nvpfiAEpq5T1-*px_YU68jkl^Yu- z(tAQ^J{;{ngLz8FAyf&%2R5JW=7`9*l(vL^^RGAZ8Ci*>!7(JJuBD;e?}3kX<0!wTzM;KFKsp`%3Rl-nhbN19~(WTzK+=X#&i@2WhWm(YaF zLZqLNfAqm-lloR-m(SG;^#c@4Z&47f6@n&neyZkmwT4HKSv{Gk`cbGnK8;mK3_|jg zvc`MqG6>}xR-{ZpGK&oLaHfkxoS(@`ZWe^{c9xzbQW$;VR!a1=;iY4#HecH+jW^6e z;vEJaPKQ7B7vG3_ZYSh}H(N2%F56IxC*2e$D0N(o*P@^cq5kPwk^k10M9n~xjJc=a-Oc)`pk9PYlcUUyuSMt3 zOd3(tkneWw!@!wKYlr;tV8z$UY7IRmi`fOe$7k;-#g?DlL;L&fmGQ1Z>(l!nO7^}b zjPB?j>nzmb1`qOl(aamL6BB-{(g_oNwJL9SLB6TxXS2^;pNd|^r8l)vzW@|M?D&5~ zw=fyR4x-gr zof`Ngu!n?Z;ZvuSDE{L5P-oVZL-We$rjvn(gA$ZJf^UczGMp$nY5epNzXc?1ensVQ z96W{CeORPqA9-i-Cy>(QcCd6o3lA8xy6xRGP-QI@}-5=0Z(*a7aC~x zy@KL7!g8l2OB0JLJY4&Ys5hk~_>sSTPpz`Uvhcw3$k7pI2ZoOPpw_tyE}nLu z+Te~+7kFe!R^lRj%Wz-ZaC+1ptd!x<@kYeKU61I&fgkCO!q(ekepU)JBf3!tP!OP$ z-jMm$(oe>fF;HufGPu#zWTj=^IuRi#_Z|2uz~9M=mJjk~m8MV?gg6tXw2&rcoJ$$B zRZtA4cu09rfF8~gWi4y#E8wG%tZ)#-D;6dsxg*pguz%DuDiJPPWS;%E zKfVAqwtM!0(H+1o5LTZ51R=slk`f6UUDjNiBAb;~(`cpY_+wP8vg^z=&n{*FwG)l? zYMbrAi5(B4o{o*1>^C;PLguc3z~or-_&mF|6&uJ#vZd%Hg&P#PTSwX-jm~CNHnP(> z-wJ*HrdB_^;HcAlsA%6-rebBS9IRef9z>WKenbgZ-#Btx9XTs?|i2Oy-c#1AnA{N~;v93V&;+9=Yn*I$-Fi}Pn zYg}THnIF_!XE~n`L9d9WuEycEYg1?9j?<=`u_T5Whd=^YWf1EUfj|)PnNJw_OEjh&ZgpbLrC(jV&k`FA zPvy9BkiiFBDMYqDEr-NMZmPMN@Fk03WN4caPI6ll1$hFQfTL})A$ay7otAL8)M03s zie>J;N^dSs)?DNMj+oLJlsI+=9hxHeQ#SW<`pt3&v-}emUe{5{{bXoM`j-$oG8! zQ)Ch6a`Zt~=_ksN(ixNweGoB4X;>+9+^K5Y7lo7a8H;G&-}15Z<~-CP-??1Kr_|gT z^#x$4Sa&j7vI0MKcL-YIcbs2<$2-kH19{~O82kF^EMuxEVH2Q_;M8Uoq5(6EEJ;bo z+Hqk0E6BoCOuaYkqO+vQu^vIc?|ifumaIIGl#tF@OCKFf$yb}iU94i+JW}MDojz@C zp-sk(&X7jI8Qa{S#20T6*HvKHQ)^sYaJ3C8i*a_&I+?Fo6JCOes4|L99TEpq@h@UC zCKV-YW2BLe$%}%rw$pT~V1!**vXEirMuU15jhuHn$pu1_>d=u1mM&Tk7UvX${iKH^ zZnrQAdnLMKz!O-u*fn9rv**<0YSAR&clwiFVDbU+VYvzpe4StTr$N#-P%_b?i~rS8 z@4OqKjV1Qr!R24xWW#JnViO=XXRms0Fxz9bE;@0rxSND-Y1Gm`5JkC+pEaFf-^qz5MfghyyL?J3? zG_n5pEo_tDb?`)$UmCEE+bp%%~@D%w#v9`!^f$INxyK z=HWvm;wLv|RVL>VnYt)9e^*&d<#y}8w|f4)EEi?X>qK`~d| zo>sOW{ul-)N{P!%SDEyt&@v*{)qPI2M86tsHFBjmk~pbDh~fu~vI8j!7d%99@=uEp zWNGj1lQniB%fNJ2;vtOhl{|-?8fjRpTp$(-?k-x37D6aaU${NM6U|+p4?~dNk*eoR za`7zNyys?0xFD(C>^s+nL1*oRwDbNLdT!`8ZhOZsoofIpl~EPD6u2$j_OtDA(00Oy znE&i>L1*@tZ(jUwfOafu)Nl7nhTu?Pm%6 zW>y)QBXaAfQi8Ze<6oLOZ@JJ@3(lCPTlwtr7J25Is8AkDyvvg}w3E=YWc@zspAHOK zwP$s_o;%6v?$Ktx4HxClJ3cw)5UM*tIUe__F#?I|YHQXVGnaPRM#oyc(afuh7OV+k z7JG7KIOyg*0nIK@1vvE;N^j&-6txO+K_hi)WQ{g|)ZEAV5cH!q4YVy2|4=b5Xf~BA zp_*MmY8PNa+0{ZR&yS!5719*m_r{Lbj2=t6qW4Zi;#-tzr2PlRd?f}p9W}mGEO-_O zDFc85pruHzypdlyHhAZ#l)JQNnJw8SP@=&&>Q{e|@-2pWz-Ewvy}3~pg(yV{lheXC zSdaArL3g!YXU9mIHE1?XUybWHm;qiAKokGGqL_D}sll>F@ zRAFtzN<)=AV5BXJa{`eodhMsqQ(bdWpHaOpH&>_DX{afpgP89obw4E9El z%Lk679MIgp0Lq{HwubmeDN0YdTsR-hQKrX!#4gOOt0tC18YvrzPl#Xb(xB@Gn#8jLENuQGI^sTC>Xjj*39Gs-ZB zg4L^14+tyA|BNA_3v#;Lf$@JE=5o1b@$D|Y01)66OPmwWNNc9>Xar2wF;pD$OMIU` z;orY2NNzu5QML+E_P9Z71% zY;dge>;(*0W4la71)?7KDCjG!Yi#Kt-Cw?v;b4*7qt#+yfnkgIl4HWKY!kqX&DKl} z^9AcZ2cQ84@HNNl=q>J%{c0)#QhJOtvk#(?%e-Uxgd_C`}N;t1}AW^=Vh^Z!+ zW&D1k4kx!jIj`q4$4J23ty$Vo{1_p#vsa*V0Ui*BENr`LBg9%k(dzj3pGUls8cOM! ze!fxFLjcS;O5>_&CLWHFX1@hfOhb;tPENxJlf@`vIcA0<%89Yjko82+L><_aF_hbqf+Lq-xW9$ zC8q7fHxl{gI5SmehrS822C8h&`^9!k7NLzi6)%=tfvQ)OO`wyZP&2nOWiG;xLt5A& zRgZ+lONbg0MXhhXt7p~qxzh1uICkS+rfp$WUd`alp<&Z`(f)qT@tKKn#ME0Jeg*~! zy=0d~gFS#?`=TRrjoV*H$=B6mZ5Cgd(kr{)36z|5=a|g1%&rP7B8^#pH12eE4**!Il(9tk~oTdn*jaU!?v$X{OZt@D{o zt|hM)HxjD3?5mqdF~6=pVumYoOznUF*=)gz7qJ9fev?|Fq}K`$#j4IcLuRog-mIRs zMAbiBGU5j59?F)h5?B4$A6gC|=`E!$ZvJet7!jBUs+dSo{a9e1rte2yx_uUi`NZrO z{r&ql(ugPM<7jHG0`Z?&1nPTMaKskP?;Nq^;|ldwB{7Sik@ZxP>JGc)$`2nGSR9P= zLkD)JC+EwYMHspr#)p3}YWvgjeiA~&@uZQ)rWL56&d|5`qtw27HNL&S^s{L!$NNc2o6U%0r`Fd;ei z%4;4AauivqZa|)#G``N|d+luT$!vd(o1W#XM>BzEkwcBD&fBuzL@oeLoebv5scM&6 zSyFaK?xIq5TmDubcO?>%n?hogcoqVD-0ET~ncKjsCo+<*w%jpSSjovuSTJpQr;O2U(A1X~UZ&RB0Pcgh&AkuLAizIk!zcB`hIY{vr2Ry<>SP3DaAhowY7& za&g_?OsIE!J$+j9){%LN)5TNHT21MoVnlUvscMayS}54r&dy7k5+*Jr6EJEdN3T9` zV|ob1|M5~D>6*EiFSFQMF~W`f#A+B#_***g3E4e(zQUCk@?cX&jnmNNO&}x}-||a9ZJ@k4z=g zSZ(!0VEBq~2kymlYuKj)L360SsmSt|d|QwEw&D|2WizL-*S j^7x_RA$J~%#@vD+$=2ip3}?)|v9W*teXD5qzO4KoBdal3 diff --git a/Evergreen/xul/staff_client/server/patron/ue.js b/Evergreen/xul/staff_client/server/patron/ue.js deleted file mode 100644 index 8ab42d2e8a..0000000000 --- a/Evergreen/xul/staff_client/server/patron/ue.js +++ /dev/null @@ -1,778 +0,0 @@ -var cgi = null; -var clone = false; -var patron = null; -var counter = 0; -var identTypesCache = {}; -var statCatsCache = {}; -var surveysCache = {}; -var surveyQuestionsCache = {}; -var surveyAnswersCache = {}; -var userCache = {}; -var groupsCache = {}; -var netLevelsCache = {}; -//var guardianNote = null; - -function $(id) { return document.getElementById(id); } - -/* fetch the necessary data to start off */ -function uEditInit() { - - _debug('uEditInit(): ' + location.search); - - cgi = new CGI(); - session = cgi.param('ses'); - if (xulG) if (xulG.ses) session = xulG.ses; - if (xulG) if (xulG.params) if (xulG.params.ses) session = xulG.params.ses; - clone = cgi.param('clone'); - if (xulG) if (xulG.clone) clone = xulG.clone; - if (xulG) if (xulG.params) if (xulG.params.clone) clone = xulG.params.clone; - if(!session) throw $("patronStrings").getString('web.staff.patron.ue.session_no_defined'); - - fetchUser(session); - $('uedit_user').appendChild(text(USER.usrname())); - - setTimeout( function() { - uEditBuild(); uEditShowPage('uedit_userid'); }, 20 ); -} - -function uEditSetUnload() { - _debug('setting window unload event'); - /* - window.onbeforeunload = function(evt) { - return $('ue_unsaved_changes').innerHTML; - }; - */ -} - -function uEditClearUnload() { - _debug('clearing window unload event'); - /* - window.onbeforeunload = null; - */ -} - -/* ------------------------------------------------------------------------------ */ -/* Fetch code -/* ------------------------------------------------------------------------------ */ -function uEditFetchIdentTypes() { - _debug("uEditFetchIdentTypes()"); - var s = fetchXULStash(); - if (typeof s.list != 'undefined') - if (typeof s.list.cit != 'undefined') return s.list.cit; - var req = new Request(FETCH_ID_TYPES); - req.send(true); - return req.result(); -} - -function uEditFetchStatCats() { - _debug("uEditFetchStatCats()"); - var s = fetchXULStash(); - if (typeof s.list != 'undefined') - if (typeof s.list.my_actsc != 'undefined') return s.list.my_actsc; - var req = new Request(SC_FETCH_ALL, SESSION); - req.send(true); - return req.result(); -} - -function uEditFetchSurveys() { - _debug("uEditFetchSurveys()"); - var s = fetchXULStash(); - if (typeof s.list != 'undefined') - if (typeof s.list.asv != 'undefined') return s.list.asv; - var req = new Request(SV_FETCH_ALL, SESSION); - req.send(true); - return req.result(); -} - -function uEditFetchGroups() { - _debug("uEditFetchGroups()"); - var s = fetchXULStash(); - if (typeof s.tree != 'undefined') - if (typeof s.tree.pgt != 'undefined') return s.tree.pgt; - var req = new Request(FETCH_GROUPS); - req.send(true); - return req.result(); -} - -function uEditFetchNetLevels() { - _debug("uEditFetchNetLevels()"); - var s = fetchXULStash(); - if (typeof s.list != 'undefined') - if (typeof s.list.cnal != 'undefined') return s.list.cnal; - var req = new Request(FETCH_NET_LEVELS, SESSION); - req.send(true); - return req.result(); -} - -/* ------------------------------------------------------------------------------ */ - - -/* - * adds all of the group.application_perm's to the list - * provided by descending through the group tree - */ -function buildAppPermList(list, group) { - if(!group) return; - if(group.application_perm() ) - list.push(group.application_perm()); - for(i in group.children()) { - buildAppPermList(list, group.children()[i]); - } -} - -/* fetches necessary objects and builds the UI */ -function uEditBuild() { - - myPerms = ['BAR_PATRON', 'UNBAR_PATRON']; - - /* grab the groups before we check perms so we know what - application_perms to check */ - var groups = uEditFetchGroups(); - buildAppPermList(myPerms, groups); - - fetchHighestPermOrgs( SESSION, USER.id(), myPerms ); - - uEditBuildLibSelector(); - var usr = cgi.param('usr'); - if (xulG) if (xulG.usr) usr = xulG.usr; - if (xulG) if (xulG.params) if (xulG.params.usr) usr = xulG.params.usr; - patron = fetchFleshedUser(usr); - if(!patron) patron = uEditNewPatron(); - - uEditDraw( - uEditFetchIdentTypes(), - groups, - uEditFetchStatCats(), - uEditFetchSurveys(), - uEditFetchNetLevels() - ); - - if(patron.isnew()) { - if(clone) uEditClone(clone); - else uEditCreateNewAddr(); - - } else { - - /* do we need to display the parent / gurdian field? */ - uEditCheckDOB(uEditFindFieldByKey('dob')); - - $('ue_barcode').disabled = true; - unHideMe($('ue_mark_card_lost')); - unHideMe($('ue_reset_pw')); - uEditCheckEditPerm(); - } - - uEditCheckBarredPerm(); -} - -function uEditCheckBarredPerm() { - if(PERMS['BAR_PATRON'] != -1) - return; - - if(isTrue(patron.barred()) && PERMS['UNBAR_PATRON'] != -1) - return; - - $('ue_barred').disabled = true; -} - - -/* if this user does not have permission to put users into - the edited users group, they do not have permission to - edit this user */ -function uEditCheckEditPerm() { - - var perm = uEditFindGroupPerm(groupsCache[patron.profile()]); - /* - _debug("editing user with group app perm "+patron.profile()+' : '+ - groupsCache[patron.profile()].name() +', and perm = ' + perm); - */ - - if(PERMS[perm] != -1) return; - - /* we can edit our own account, but not others in our group */ - if( patron.id() != USER.id() ){ - _debug("we are not allowed to edit this user"); - - $('ue_save').disabled = true; - $('ue_save_clone').disabled = true; - $('ue_mark_card_lost').disabled = true; - $('ue_reset_pw').disabled = true; - - uEditIterateFields( - function(f) { - if( f && f.widget && f.widget.node ) - f.widget.node.disabled = true; - } - ); - - } - - var node = $('ue_profile').parentNode; - node.removeChild($('ue_profile')); - node.appendChild(elem('span',null,groupsCache[patron.profile()].name())); - - var field = uEditFindFieldByKey('profile'); - field.required = false; - removeCSSClass(field.widget.node, CSS_INVALID_DATA); - uEditCheckErrors(); -} - - -/* creates a new patron object with card attached */ -var uEditCardVirtId = -1; -function uEditNewPatron() { - var patron = new au(); - patron.isnew(1); - patron.id(-1); - card = new ac(); - card.id(uEditCardVirtId--); - card.isnew(1); - patron.card(card); - patron.cards([card]); - patron.net_access_level(defaultNetLevel); - patron.stat_cat_entries([]); - patron.survey_responses([]); - patron.addresses([]); - patron.home_ou(USER.ws_ou()); - uEditMakeRandomPw(patron); - return patron; -} - -function uEditMakeRandomPw(patron) { - var rand = Math.random(); - rand = parseInt(rand * 10000) + ''; - while(rand.length < 4) rand += '0'; - appendClear($('ue_password_plain'),text(rand)); - unHideMe($('ue_password_gen')); - patron.passwd(rand); - return rand; -} - -function uEditResetPw() { - var pw = uEditMakeRandomPw(patron); - $('ue_password1').value = pw; - $('ue_password2').value = pw; - $('ue_password1').onchange(); -} - -function uEditClone(clone) { - - var cloneUser = fetchFleshedUser(clone); - patron.usrgroup(cloneUser.usrgroup()); - - if( cloneUser.day_phone() ) { - $('ue_day_phone').value = cloneUser.day_phone(); - $('ue_day_phone').onchange(); - } - - if( cloneUser.evening_phone() ) { - $('ue_night_phone').value = cloneUser.evening_phone(); - $('ue_night_phone').onchange(); - } - - if( cloneUser.other_phone() ) { - $('ue_other_phone').value = cloneUser.other_phone(); - $('ue_other_phone').onchange(); - } - - setSelector($('ue_org_selector'), cloneUser.home_ou()); - setSelector($('ue_profile'), cloneUser.profile()); - - /* force the expire date to be set */ - $('ue_profile').onchange(); - $('ue_org_selector').onchange(); - - for( var a in cloneUser.addresses() ) { - var addr = cloneUser.addresses()[a]; - if( cloneUser.mailing_address && - addr.id() == cloneUser.mailing_address().id() ) - patron.mailing_address(addr); - if( cloneUser.billing_address() && - addr.id() == cloneUser.billing_address().id() ) - patron.billing_address(addr); - patron.addresses().push(addr); - } - - uEditBuildAddrs(patron); -} - - -/* Creates a new blank address, - adds it to the user and the fields array */ -var uEditVirtualAddrId = -1; -function uEditCreateNewAddr() { - var addr = new aua(); - - addr.id(uEditVirtualAddrId--); - addr.isnew(1); - addr.usr(patron.id()); - addr.country(defaultCountry); - - if(!patron.addresses()) - patron.addresses([]); - - if(patron.addresses().length == 0) { - patron.mailing_address(addr); - patron.billing_address(addr); - } - - addr.valid(1); - addr.within_city_limits(1); - - uEditBuildAddrFields(patron, addr); - patron.addresses().push(addr); - uEditIterateFields(function(f) { uEditCheckValid(f); }); - uEditCheckErrors(); -} - - -/* kicks off the UI drawing */ -function uEditDraw(identTypes, groups, statCats, surveys, netLevels ) { - hideMe($('uedit_loading')); - unHideMe($('ue_maintd')); - - dataFields = []; - uEditDrawIDTypes(identTypes); - uEditDrawGroups(groups, null, null, true); - uEditDrawStatCats(statCats); - uEditDrawSurveys(surveys); - uEditDrawNetLevels(netLevels); - uEditDefineData(patron); - - uEditIterateFields(function(f) { uEditActivateField(f) }); - uEditIterateFields(function(f) { uEditCheckValid(f); }); - uEditCheckErrors(); -} - - -/** Applies the event handlers and sets the data for the field */ -function uEditActivateField(field) { - - if( field.widget.id ) { - field.widget.node = $(field.widget.id); - - } else { - field.widget.node = - $n(field.widget.base, field.widget.name); - } - - uEditSetOnchange(field); - - if(field.widget.onblur) { - field.widget.node.onblur = - function() { field.widget.onblur(field); }; - } - - field.widget.node.disabled = field.widget.disabled; - if(field.object == null) return; - var val = field.object[field.key](); - if(val == null) return; - - if( field.widget.type == 'input' ) - field.widget.node.value = val; - - if( field.widget.type == 'select' ) - setSelector(field.widget.node, val); - - if( field.widget.type == 'checkbox' ) - field.widget.node.checked = - (val && val != 'f') ? true : false; - - if( field.widget.onload ) - field.widget.onload(val); -} - - -/* set up the onchange event for the field */ -function uEditSetOnchange(field) { - var func = function() {uEditOnChange( field );} - field.widget.node.onchange = func; - - if(field.widget.type != 'select') - field.widget.node.onkeyup = func; -} - -/* find the current value of the field object's widget */ -function uEditNodeVal(field) { - if(field.widget.type == 'input') - return field.widget.node.value; - - if(field.widget.type == 'checkbox') - return field.widget.node.checked; - - if(field.widget.type == 'select') - return getSelectorVal(field.widget.node); -} - - -/* update a field value */ -function uEditOnChange(field) { - - var newval = uEditNodeVal(field); - field.object[field.key](newval); - field.object.ischanged(1); - - if(field.widget.onpostchange) - field.widget.onpostchange(field, newval); - - //_debug(field.key+' = '+newval); - - uEditIterateFields(function(f) { uEditCheckValid(f); }); - uEditCheckErrors(); - - uEditSetUnload(); -} - - -function uEditCheckValid(field) { - var newval = uEditNodeVal(field); - - if(newval) { - - if(field.widget.regex) { - if(newval.match(field.widget.regex)) - removeCSSClass(field.widget.node, CSS_INVALID_DATA); - else - addCSSClass(field.widget.node, CSS_INVALID_DATA); - - } else { - removeCSSClass(field.widget.node, CSS_INVALID_DATA); - } - - } else { - - if(field.required) { - addCSSClass(field.widget.node, CSS_INVALID_DATA); - - } else { - removeCSSClass(field.widget.node, CSS_INVALID_DATA); - } - } - -} - -/* find a field object by object key */ -function uEditFindFieldByKey(key) { - var fields = grep( dataFields, - function(item) { return (item.key == key); }); - return (fields) ? fields[0] : null; -} - -/* find a list of fields by object key */ -function uEditFindFieldsByKey(key) { - return grep( dataFields, - function(item) { return (item.key == key); }); -} - -/* find a field object by widget id */ -function uEditFindFieldByWId(id) { - var fields = grep( dataFields, - function(item) { return (item.widget.id == id); }); - return (fields) ? fields[0] : null; -} - - -function uEditIterateFields(callback) { - for( var f in dataFields ) - callback(dataFields[f]); -} - - -function uEditGetErrorStrings() { - var errors = []; - uEditIterateFields( - function(field) { - if(field.errkey) { - if( !field.object.isdeleted() ) { - if( field.widget.node.className.indexOf(CSS_INVALID_DATA) != -1) { - var str = $(field.errkey).innerHTML; - if(str) errors.push(str); - } - } - } - } - ); - - /* munge up something for all of the required surveys - (which are not registered with the fields) */ - if( patron.isnew() ) { - var sel = $('ue_survey_table'); - - if( sel ) { - var rows = sel.getElementsByTagName('tr'); - - for( var r in rows ) { - - var row = rows[r]; - var sel = $n(row, 'ue_survey_answer'); - if(!sel) continue; - var qstn = row.getAttribute('question'); - - if(qstn) { - qstn = surveyQuestionsCache[qstn]; - survey = surveysCache[qstn.survey()]; - var val = getSelectorVal(sel); - if(!val && isTrue(survey.required())) - errors.push($('ue_bad_survey').innerHTML + ' : ' + qstn.question()); - } - } - } - } - - /* ------------------------------------------------------------ */ - - if(errors[0]) return errors; - return null; -} - -function uEditAlertErrors() { - var errors = uEditGetErrorStrings(); - if(!errors) return false; - alert(errors.join("\n")); - return true; -} - - -/* send the user to the database */ -function uEditSaveUser(cloneme) { - - if(uEditGetErrorStrings()) { - uEditAlertErrors(); - return; - } - - /* null is unique in the db, but '' is not */ - if( ! patron.ident_value() ) patron.ident_value(null); - //if( ! patron.ident_type2() ) patron.ident_type2(null); - if( ! patron.ident_value2() ) patron.ident_value2(null); - patron.ident_type2(null); - - if(! patron.dob() ) patron.dob(null); - - _debug("Saving patron with card: " + js2JSON(patron.card())); - _debug("Saving full patron: " + js2JSON(patron)); - - //for( var c in patron - - var req = new Request(UPDATE_PATRON, SESSION, patron); - req.alertEvent = false; - req.send(true); - var newuser = req.result(); - - uEditClearUnload(); - - var evt; - if( (evt = checkILSEvent(newuser)) || ! newuser ) { - if(evt) { - evt = newuser; - if( evt.textcode == 'XACT_COLLISION' ) { - if( confirmId('ue_xact_collision') ) - location.href = location.href; - return; - } - var j = js2JSON(evt); - alert(j); - _debug("USER UPDATE FAILED:\n" + j); - } - return; - } - - alert($('ue_success').innerHTML); - - if(cloneme) { - /* if the user we just created was a clone, and we want to clone it, - we really want to clone the original */ - if( clone ) cloneme = clone; - else cloneme = newuser.id(); - } - - - if( cloneme ) { - - if(window.xulG && - typeof window.xulG.spawn_editor == 'function' && - - !patron.isnew() ) { - _debug("xulG clone spawning new interface..."); - var ses = cgi.param('ses'); - if (xulG) if (xulG.ses) ses = xulG.ses; - if (xulG) if (xulG.params) if (xulG.params.ses) ses = xulG.params.ses; - window.xulG.spawn_editor({ses:ses,clone:cloneme}); - uEditRefresh(); - - } else { - - var href = location.href; - href = href.replace(/\&?usr=\d+/, ''); - href = href.replace(/\&?clone=\d+/, ''); - href += '&clone=' + cloneme; - location.href = href; - } - - } else { - - uEditRefresh(); - } - - uEditRefreshXUL(newuser); -} - - -function uEditRefreshXUL(newuser) { - if (window.xulG && typeof window.xulG.on_save == 'function') - window.xulG.on_save(newuser); -} - -function uEditRefresh() { - var href = location.href; - href = href.replace(/\&?clone=\d+/, ''); - location.href = href; -} - - -function uEditCancel() { - var href = location.href; - href = href.replace(/\&?usr=\d+/, ''); - href = href.replace(/\&?clone=\d+/, ''); - var id = cgi.param('usr'); - if (xulG) if (xulG.usr) id = xulG.usr; - if (xulG) if (xulG.params) if (xulG.params.usr) id = xulG.params.usr; - /* reload the current user if available */ - if( id ) href += "&usr=" + id; - location.href = href; -} - - -var uEditDupHashes = {}; -var uEditDupTemplate; - -function uEditRunDupeSearch(type, search_hash) { - - if(!patron.isnew()) return; - - _debug('dup search: ' + js2JSON(search_hash)); - - var req = new Request(PATRON_SEARCH, SESSION, search_hash); - - var container = $('dup_div_container'); - if(!uEditDupTemplate) - uEditDupTemplate = container.removeChild($('dup_div')); - - /* clear any existing dups for this type */ - iterate( container.getElementsByTagName('div'), - function(d) { - if( d.getAttribute('type') == type ) { - container.removeChild(d) - return; - } - } - ); - - req.callback( - function(r) { - uEditHandleDupResults( r.getResultObject(), search_hash, type, container ); - } - ); - req.send(); -} - - -function uEditHandleDupResults(ids, search_hash, type, container) { - - _debug('dup search results: ' + js2JSON(ids)); - - if(!(ids && ids[0])) /* no results */ - return uEditDupHashes[type] = null; - - /* add a dup link to the UI and plug in the data */ - var node = uEditDupTemplate.cloneNode(true); - container.appendChild(node); - node.setAttribute('type', type); - - var link = $n(node, 'link'); - link.setAttribute('type', type); - unHideMe(link); - $n(node,'count').appendChild(text(ids.length)); - - for( var o in search_hash ) - $n(node, 'data').appendChild( - text(search_hash[o].value + ' ')); - - uEditDupHashes[type] = search_hash; - - switch(type) { - case 'ident' : - if(confirm($('ue_dup_ident1').innerHTML)) - uEditShowSearch(null, type); - break; - } -} - - -function uEditShowSearch(link,type) { - if(!type) type = link.getAttribute('type'); - if(window.xulG) - window.xulG.spawn_search(uEditDupHashes[type]); - else alert($("patronStrings").getString('web.staff.patron.ue.uedit_show_search.search_would_be', js2JSON(uEditDupHashes[type]))); -} - -function uEditMarkCardLost() { - - for( var c in patron.cards() ) { - - var card = patron.cards()[c]; - if( patron.card().id() == card.id() ) { - - /* de-activite the current card */ - card.ischanged(1); - card.active(0); - - if( !card.barcode() ) { - /* a card exists in the array with no barcode */ - ueRemoveCard(card.id()); - - } else if( card.isnew() && card.active() == 0 ) { - /* a new card was created, then never used, removing.. */ - _debug("removing new inactive card "+card.barcode()); - ueRemoveCard(card.id()); - } - - /* create a new card for the patron */ - var newcard = new ac(); - newcard.id(uEditCardVirtId--); - newcard.isnew(1); - patron.card(newcard); - patron.cards().push(newcard); - - - /* reset the widget */ - var field = uEditFindFieldByWId('ue_barcode'); - field.widget.node.disabled = false; - field.widget.node.value = ""; - field.widget.node.onchange(); - field.object = newcard; - _debug("uEditMarkCardLost(): created new card object for user"); - } - } -} - - -function ueRemoveCard(id) { - _debug("removing card from cards() array: " + id); - var cds = grep( patron.cards(), function(c){return (c.id() != id)}); - if(!cds) cds = []; - for( var j = 0; j < cds.length; j++ ) - _debug("patron card array now has : "+cds[j].id()); - patron.cards(cds); -} - - - -function compactArray(arr) { - var a = []; - for( var i = 0; arr && i < arr.length; i++ ) { - if( arr[i] != null ) - a.push(arr[i]); - } - return a; -} diff --git a/Evergreen/xul/staff_client/server/patron/ue.xhtml b/Evergreen/xul/staff_client/server/patron/ue.xhtml deleted file mode 100644 index 727d4ad4e7..0000000000 --- a/Evergreen/xul/staff_client/server/patron/ue.xhtml +++ /dev/null @@ -1,986 +0,0 @@ - - - - -]> - - - - - &ev.staff.patron.ue_xhtml.ev_user_editor.label; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- -

&ev.staff.patron.ue_xhtml.ev_user_editor.label;

- -
- &ev.staff.patron.ue_xhtml.welcome.label; -
- -

- -
- -
- - - - - - -
- - &staff.patron.ue.interface_note.label; - - - - &ev.staff.patron.ue_xhtml.view_errors.label; - -
- - - - - - - - - - + + + + + + @@ -196,7 +221,7 @@ - diff --git a/Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_summary.xml b/Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_summary.xml index 5b31d6e7d5..3852339716 100644 --- a/Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_summary.xml +++ b/Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_summary.xml @@ -1,4 +1,5 @@ +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- &ev.staff.patron.ue_xhtml.loading_data.label; -
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
&ev.staff.patron.ue_xhtml.barcode.label;
-
- - - -
-
&ev.staff.patron.ue_xhtml.username.label;
&ev.staff.patron.ue_xhtml.password.label;
-
- - - - &ev.staff.patron.ue_xhtml.re_password.label; - - -
-
&ev.staff.patron.ue_xhtml.verify_password.label;
&ev.staff.patron.ue_xhtml.first_name.label;
&ev.staff.patron.ue_xhtml.middle_name.label;
&ev.staff.patron.ue_xhtml.last_name.label;
&ev.staff.patron.ue_xhtml.suffix.label;
- - -
&ev.staff.patron.ue_xhtml.dob.label;
-
- - 1980-01-01 - - - - (YYYY-MM-DD) - - - -
-
&ev.staff.patron.ue_xhtml.primary_id_type.label;
- -
-
&ev.staff.patron.ue_xhtml.primary_id.label;
-
- - - (XXX-YY-ZZZZ) - - - (GA-123456789) - -
-
&ev.staff.patron.ue_xhtml.parent_guardian.label;
-
- -
-
-
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
&ev.staff.patron.ue_xhtml.email_address.label;
&ev.staff.patron.ue_xhtml.daytime_phone.label;
-
- - Example: 123-456-7890 or 123-456-7890 ex123 -
-
&ev.staff.patron.ue_xhtml.evening_phone.label;
-
- -
-
&ev.staff.patron.ue_xhtml.other_phone.label;
-
- -
-
&ev.staff.patron.ue_xhtml.home_library.label;
-
-
-
- - - - -
- - - - - - - - - - - - - - - - - - - -
&ev.staff.patron.ue_xhtml.address.label;&ev.staff.patron.ue_xhtml.in_city_limits.label;&ev.staff.patron.ue_xhtml.valid.label;&ev.staff.patron.ue_xhtml.mailing_address.label;&ev.staff.patron.ue_xhtml.physical_address.label;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- * - &ev.staff.patron.ue_xhtml.address_owned_by.label; - - - (Edit) - -
-
&ev.staff.patron.ue_xhtml.label.label;
-
- -
-
&ev.staff.patron.ue_xhtml.zip.label;
-
- -
-
&ev.staff.patron.ue_xhtml.street1.label;
-
- -
-
&ev.staff.patron.ue_xhtml.street2.label;
-
- -
-
&ev.staff.patron.ue_xhtml.city.label;
-
- -
-
&ev.staff.patron.ue_xhtml.conuty.label;
-
- -
-
&ev.staff.patron.ue_xhtml.state.label;
-
- -
-
&ev.staff.patron.ue_xhtml.country.label;
-
- -
-
-
- - - -
-
-
-
- -
-
-
- -
-
- -
- - -
-
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -326,9 +329,11 @@ required="true" > @@ -360,6 +365,7 @@ this.disabled = true; @@ -445,6 +451,7 @@ this.disabled = true; @@ -497,11 +504,11 @@
-
+
@@ -610,8 +617,9 @@ @@ -678,7 +686,7 @@ diff --git a/Open-ILS/web/conify/global/permission/grp_tree.js b/Open-ILS/web/conify/global/permission/grp_tree.js index aa604076df..0682cdb53d 100644 --- a/Open-ILS/web/conify/global/permission/grp_tree.js +++ b/Open-ILS/web/conify/global/permission/grp_tree.js @@ -37,8 +37,8 @@ dojo.require('dijit.layout.SplitContainer'); dojo.require('dojox.widget.Toaster'); dojo.require('dojox.fx'); dojo.require('dojox.grid.Grid'); -dojo.require('dojox.grid._data.model'); -dojo.require("dojox.grid.editors"); +dojo.require('dojox.grid.compat._data.model'); +dojo.require("dojox.grid.compat._data.editors"); // some handy globals var cgi = new CGI(); @@ -63,8 +63,8 @@ function save_group () { modified_pgt.ischanged( 1 ); new_kid_button.disabled = false; - save_out_button.disabled = false; - delete_out_button.disabled = false; + save_group_button.disabled = false; + delete_group_button.disabled = false; server.pCRUD.request({ method : 'open-ils.permacrud.update.pgt', diff --git a/Open-ILS/web/conify/global/permission/perm_list.html b/Open-ILS/web/conify/global/permission/perm_list.html index 518ffeb8d2..04659da086 100644 --- a/Open-ILS/web/conify/global/permission/perm_list.html +++ b/Open-ILS/web/conify/global/permission/perm_list.html @@ -14,13 +14,13 @@ --> - Confiy :: Global :: Permission :: Permission List + Conify :: Global :: Permission :: Permission List + + + +

&slimpac.language.select;

+
+ +
+ + + + + diff --git a/Open-ILS/web/opac/extras/slimpac/start.html b/Open-ILS/web/opac/extras/slimpac/start.html index 9cc06f500d..12cc610f85 100644 --- a/Open-ILS/web/opac/extras/slimpac/start.html +++ b/Open-ILS/web/opac/extras/slimpac/start.html @@ -21,11 +21,13 @@ .greenrow { border: 1px solid #D0D0D0; background: #A7EA9D; + height: 20px; } .bluerow { border: 1px solid #D0D0D0; background: #E0F6E0; + height: 20px; } .rowpad { @@ -81,7 +83,6 @@
-
&ev.staff.patron.ue_xhtml.profile_group.label;
-
- -
-
&ev.staff.patron.ue_xhtml.account_expiration_date.label;
-
- - - - - (YYYY-MM-DD) - -
-
&ev.staff.patron.ue_xhtml.net_access_level.label;
-
- -
-
&ev.staff.patron.ue_xhtml.active.label;
-
- -
-
&ev.staff.patron.ue_xhtml.barred.label;
-
- -
-
&ev.staff.patron.ue_xhtml.set_family_group_lead_account.label;
-
- -
-
&ev.staff.patron.ue_xhtml.claims_returned_count.label;
-
- - - -
-
&ev.staff.patron.ue_xhtml.alert_message.label;
-
- @@ -306,9 +307,11 @@ jsId="editor_pane_application_perm" >
@@ -93,6 +94,7 @@ + + + + + + + +
@@ -122,11 +124,22 @@
+
+ + +
+
-
- Bib Level + &advanced.biblevel;
+ &advanced.filter.pubyear; + + +
+ + + &common.and; + +
+
&opac.advanced.copy_loc_filter;
+ diff --git a/Open-ILS/web/opac/skin/default/xml/common/fonts.xml b/Open-ILS/web/opac/skin/default/xml/common/fonts.xml index 73cab30f07..8b3ce40a0e 100644 --- a/Open-ILS/web/opac/skin/default/xml/common/fonts.xml +++ b/Open-ILS/web/opac/skin/default/xml/common/fonts.xml @@ -7,12 +7,18 @@ &common.textsize.large;  | &common.language; - - + + diff --git a/Open-ILS/web/opac/skin/default/xml/header.xml b/Open-ILS/web/opac/skin/default/xml/header.xml index a0c10cf4a7..7990eb32f5 100644 --- a/Open-ILS/web/opac/skin/default/xml/header.xml +++ b/Open-ILS/web/opac/skin/default/xml/header.xml @@ -4,7 +4,7 @@ &<!--#echo var="OILS_TITLE"-->; - + diff --git a/Open-ILS/web/opac/skin/default/xml/home/homesearch.xml b/Open-ILS/web/opac/skin/default/xml/home/homesearch.xml index 95a99a281a..553f4882c7 100644 --- a/Open-ILS/web/opac/skin/default/xml/home/homesearch.xml +++ b/Open-ILS/web/opac/skin/default/xml/home/homesearch.xml @@ -105,6 +105,24 @@ + + +
+ &common.language; + + + +
diff --git a/Open-ILS/web/opac/skin/default/xml/home/index_body.xml b/Open-ILS/web/opac/skin/default/xml/home/index_body.xml index ebddddfb0a..16c3738482 100644 --- a/Open-ILS/web/opac/skin/default/xml/home/index_body.xml +++ b/Open-ILS/web/opac/skin/default/xml/home/index_body.xml @@ -1,4 +1,4 @@ - +
&common.name; + - + +
diff --git a/Open-ILS/web/reports/xul/template-config.js b/Open-ILS/web/reports/xul/template-config.js index 24681e8d49..647d717b4a 100644 --- a/Open-ILS/web/reports/xul/template-config.js +++ b/Open-ILS/web/reports/xul/template-config.js @@ -849,9 +849,9 @@ function fleshFromPath ( template, rel ) { current_link.getAttribute('reltype') != 'has_a' || prev_type == 'left' || rel.reltype != 'has_a' - ) && ( - getKeys(rel.fields.filter_tab).length == 0 && - getKeys(rel.fields.aggfitler_tab).length == 0 +// ) && ( +// getKeys(rel.fields.filter_tab).length == 0 && +// getKeys(rel.fields.aggfitler_tab).length == 0 ) ) current_obj.type = 'left'; diff --git a/Open-ILS/web/vandelay/inc/attrs.xml b/Open-ILS/web/vandelay/inc/attrs.xml new file mode 100644 index 0000000000..c65744b563 --- /dev/null +++ b/Open-ILS/web/vandelay/inc/attrs.xml @@ -0,0 +1,102 @@ +
+ + + + +
+
+ &vandelay.create.attr.def; +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + +
+ + + +
+ + + +
+
+
+ + diff --git a/Open-ILS/web/vandelay/inc/export.xml b/Open-ILS/web/vandelay/inc/export.xml new file mode 100644 index 0000000000..292f13b643 --- /dev/null +++ b/Open-ILS/web/vandelay/inc/export.xml @@ -0,0 +1,64 @@ +

&vandelay.export.records;


+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
&vandelay.export.use_field_no; + + &vandelay.export.field_no_hint; +
&vandelay.export.from_csv;
&vandelay.export.or;
&vandelay.export.record_id;
&vandelay.export.or;
&vandelay.export.bucket;
&vandelay.record.type; + +
&vandelay.export.format; + +
&vandelay.export.encoding; + +
&vandelay.export.holdings;
+ +
+
diff --git a/Open-ILS/web/vandelay/inc/marchtml.xml b/Open-ILS/web/vandelay/inc/marchtml.xml new file mode 100644 index 0000000000..7a08d75991 --- /dev/null +++ b/Open-ILS/web/vandelay/inc/marchtml.xml @@ -0,0 +1,13 @@ + +

&vandelay.marc.record;


+ + +
+ + +
+
+ +
+
+ diff --git a/Open-ILS/web/vandelay/inc/matches.xml b/Open-ILS/web/vandelay/inc/matches.xml new file mode 100644 index 0000000000..fb6fd720d2 --- /dev/null +++ b/Open-ILS/web/vandelay/inc/matches.xml @@ -0,0 +1,39 @@ + +

&vandelay.import.matches;


+
+ +
+
+
+
+ diff --git a/Open-ILS/web/vandelay/inc/progress.xml b/Open-ILS/web/vandelay/inc/progress.xml new file mode 100644 index 0000000000..e5e18334fe --- /dev/null +++ b/Open-ILS/web/vandelay/inc/progress.xml @@ -0,0 +1,16 @@ +
+
+
+ + + diff --git a/Open-ILS/web/vandelay/inc/queue.xml b/Open-ILS/web/vandelay/inc/queue.xml new file mode 100644 index 0000000000..00e5722492 --- /dev/null +++ b/Open-ILS/web/vandelay/inc/queue.xml @@ -0,0 +1,120 @@ +

&vandelay.record.queue;


+
+ + / +
+ +
+ + +
+ + + + + + + + + + + +
&vandelay.column;&vandelay.display;&vandelay.auto.width;
+ +
+
+ + +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
&vandelay.limit.to.collision.matches;
&vandelay.limit.to.non.imported;
+
+ + + + + + + +
+
+ + « &vandelay.prev.page; + + + &vandelay.next.page; » + + + &vandelay.select.cols; + +
+
+ + +
+
+
+
+ diff --git a/Open-ILS/web/vandelay/inc/queueselect.xml b/Open-ILS/web/vandelay/inc/queueselect.xml new file mode 100644 index 0000000000..2149dfa0fe --- /dev/null +++ b/Open-ILS/web/vandelay/inc/queueselect.xml @@ -0,0 +1,25 @@ + +

&vandelay.select.queue;


+ + + + + + + + + + + + +
&vandelay.queue.type; + +
&vandelay.queue; + +
+ +
diff --git a/Open-ILS/web/vandelay/inc/toolbar.xml b/Open-ILS/web/vandelay/inc/toolbar.xml new file mode 100644 index 0000000000..ad067d891c --- /dev/null +++ b/Open-ILS/web/vandelay/inc/toolbar.xml @@ -0,0 +1,11 @@ +
+
&vandelay.export.records;
+
&vandelay.import.records;
+
&vandelay.inspect.queue;
+
&vandelay.edit.attributes;
+
+ diff --git a/Open-ILS/web/vandelay/inc/upload.xml b/Open-ILS/web/vandelay/inc/upload.xml new file mode 100644 index 0000000000..2acfe54432 --- /dev/null +++ b/Open-ILS/web/vandelay/inc/upload.xml @@ -0,0 +1,47 @@ +

&vandelay.marc.file.upload;


+
+ + + + + + + + + + + + + + + + + + + + + + + +
&vandelay.record.type; + +
&vandelay.create.upload.queue; + + &vandelay.add.existing.queue; + +
&vandelay.auto.import.noncolliding; + +
+ &vandelay.file.to.upload; + + +
+ +
+
+ diff --git a/Open-ILS/web/vandelay/vandelay.css b/Open-ILS/web/vandelay/vandelay.css new file mode 100644 index 0000000000..f42d9f4fa7 --- /dev/null +++ b/Open-ILS/web/vandelay/vandelay.css @@ -0,0 +1,34 @@ +@import "/js/dojo/dojo/resources/dojo.css"; +@import "/js/dojo/dijit/themes/tundra/tundra.css"; +@import "/js/dojo/dojox/grid/_grid/Grid.css"; +.container:after {content: ""; display: block; height: 0; clear: both; } +html,body { width:100%; height:100%; border:0; margin:0; padding:0; } +table { border-collapse: collapse; } +table.dijitTooltipTable { border-collapse: separate; } +.form_table td { padding: 6px; } +.small_form_table td { padding: 1px; } +.match_div { + height: 95%; + width: 95%; +} +.match_div a { + color: red; + font-weight:bold; +} +.match_div a:visited { + color: red; + font-weight:bold; +} +.tall { height:100%; } +.wide { width:100%; } +.hidden { display: none; } +#toolbar { margin-top: 0px; } +.progress {margin: 20px;} +.overlay_selected { + padding: 2px; + background: #d9e8f9; + border: 1px solid red; +} + +.export_tr_border td { border-top: 1px solid #808080; } +.nav_row_div {padding:1px; text-align:center; } diff --git a/Open-ILS/web/vandelay/vandelay.js b/Open-ILS/web/vandelay/vandelay.js new file mode 100644 index 0000000000..b7a32f7536 --- /dev/null +++ b/Open-ILS/web/vandelay/vandelay.js @@ -0,0 +1,1088 @@ +/* --------------------------------------------------------------------------- +# Copyright (C) 2008 Georgia Public Library Service +# Bill Erickson +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# --------------------------------------------------------------------------- */ +dojo.require("dojo.parser"); +dojo.require("dojo.io.iframe"); +dojo.require("dijit.ProgressBar"); +dojo.require("dijit.form.Button"); +dojo.require("dijit.form.FilteringSelect"); +dojo.require("dijit.layout.ContentPane"); +dojo.require("dijit.layout.TabContainer"); +dojo.require("dijit.layout.LayoutContainer"); +dojo.require('dijit.form.Button'); +dojo.require('dijit.Toolbar'); +dojo.require('dijit.Tooltip'); +dojo.require('dijit.Menu'); +dojo.require("dijit.Dialog"); +dojo.require("dojo.cookie"); +dojo.require("dojox.grid.Grid"); +dojo.require("dojo.data.ItemFileReadStore"); +dojo.require('dojo.date.locale'); +dojo.require('dojo.date.stamp'); +dojo.require("fieldmapper.Fieldmapper"); +dojo.require("fieldmapper.dojoData"); +dojo.require('openils.CGI'); +dojo.require('openils.User'); +dojo.require('openils.Event'); +dojo.require('openils.MarcXPathParser'); +dojo.require('openils.GridColumnPicker'); + + +var globalDivs = [ + 'vl-generic-progress', + 'vl-generic-progress-with-total', + 'vl-marc-upload-div', + 'vl-queue-div', + 'vl-match-div', + 'vl-marc-html-div', + 'vl-queue-select-div', + 'vl-marc-upload-status-div', + 'vl-attr-editor-div', + 'vl-marc-export-div' +]; + +var authtoken; +var VANDELAY_URL = '/vandelay-upload'; +var bibAttrDefs = []; +var authAttrDefs = []; +var queuedRecords = []; +var queuedRecordsMap = {}; +var bibAttrsFetched = false; +var authAttrsFetched = false; +var attrDefMap = {}; // maps attr def code names to attr def ids +var currentType; +var currentQueueId = null; +var userCache = {}; +var currentMatchedRecords; // set of loaded matched bib records +var currentOverlayRecordsMap; // map of import record to overlay record +var currentOverlayRecordsMapGid; // map of import record to overlay record grid id +var currentImportRecId; // when analyzing matches, this is the current import record +var userBibQueues = []; // only non-complete queues +var userAuthQueues = []; // only non-complete queues +var allUserBibQueues; +var allUserAuthQueues; +var selectableGridRecords; +var cgi = new openils.CGI(); +var vlQueueGridColumePicker = {}; + +/** + * Grab initial data + */ +function vlInit() { + authtoken = dojo.cookie('ses') || cgi.param('ses'); + var initNeeded = 4; // how many async responses do we need before we're init'd + var initCount = 0; // how many async reponses we've received + + function checkInitDone() { + initCount++; + if(initCount == initNeeded) + runStartupCommands(); + } + + // Fetch the bib and authority attribute definitions + vlFetchBibAttrDefs(function () { checkInitDone(); }); + vlFetchAuthAttrDefs(function () { checkInitDone(); }); + + vlRetrieveQueueList('bib', null, + function(list) { + allUserBibQueues = list; + for(var i = 0; i < allUserBibQueues.length; i++) { + if(allUserBibQueues[i].complete() == 'f') + userBibQueues.push(allUserBibQueues[i]); + } + checkInitDone(); + } + ); + + vlRetrieveQueueList('auth', null, + function(list) { + allUserAuthQueues = list; + for(var i = 0; i < allUserAuthQueues.length; i++) { + if(allUserAuthQueues[i].complete() == 'f') + userAuthQueues.push(allUserAuthQueues[i]); + } + checkInitDone(); + } + ); + + vlAttrEditorInit(); +} + + +dojo.addOnLoad(vlInit); + + +// fetch the bib and authority attribute definitions + +function vlFetchBibAttrDefs(postcomplete) { + bibAttrDefs = []; + fieldmapper.standardRequest( + ['open-ils.permacrud', 'open-ils.permacrud.search.vqbrad'], + { async: true, + params: [authtoken, {id:{'!=':null}}], + onresponse: function(r) { + var def = r.recv().content(); + if(e = openils.Event.parse(def[0])) + return alert(e); + bibAttrDefs.push(def); + }, + oncomplete: function() { + bibAttrDefs = bibAttrDefs.sort( + function(a, b) { + if(a.id() > b.id()) return 1; + if(a.id() < b.id()) return -1; + return 0; + } + ); + postcomplete(); + } + } + ); +} + +function vlFetchAuthAttrDefs(postcomplete) { + authAttrDefs = []; + fieldmapper.standardRequest( + ['open-ils.permacrud', 'open-ils.permacrud.search.vqarad'], + { async: true, + params: [authtoken, {id:{'!=':null}}], + onresponse: function(r) { + var def = r.recv().content(); + if(e = openils.Event.parse(def[0])) + return alert(e); + authAttrDefs.push(def); + }, + oncomplete: function() { + authAttrDefs = authAttrDefs.sort( + function(a, b) { + if(a.id() > b.id()) return 1; + if(a.id() < b.id()) return -1; + return 0; + } + ); + postcomplete(); + } + } + ); +} + +function vlRetrieveQueueList(type, filter, onload) { + type = (type == 'bib') ? type : 'authority'; + fieldmapper.standardRequest( + ['open-ils.vandelay', 'open-ils.vandelay.'+type+'_queue.owner.retrieve.atomic'], + { async: true, + params: [authtoken, null, filter], + oncomplete: function(r) { + var list = r.recv().content(); + if(e = openils.Event.parse(list[0])) + return alert(e); + onload(list); + } + } + ); + +} + +function displayGlobalDiv(id) { + for(var i = 0; i < globalDivs.length; i++) { + try { + dojo.style(dojo.byId(globalDivs[i]), 'display', 'none'); + } catch(e) { + alert('please define div ' + globalDivs[i]); + } + } + dojo.style(dojo.byId(id),'display','block'); +} + +function runStartupCommands() { + currentQueueId = cgi.param('qid'); + currentType = cgi.param('qtype'); + dojo.style('vl-nav-bar', 'visibility', 'visible'); + if(currentQueueId) + return retrieveQueuedRecords(currentType, currentQueueId, handleRetrieveRecords); + vlShowUploadForm(); +} + +/** + * asynchronously upload a file of MARC records + */ +function uploadMARC(onload){ + dojo.byId('vl-upload-status-count').innerHTML = '0'; + dojo.byId('vl-ses-input').value = authtoken; + displayGlobalDiv('vl-marc-upload-status-div'); + dojo.io.iframe.send({ + url: VANDELAY_URL, + method: "post", + handleAs: "html", + form: dojo.byId('vl-marc-upload-form'), + handle: function(data,ioArgs){ + var content = data.documentElement.textContent; + onload(content); + } + }); +} + +/** + * Creates a new vandelay queue + */ +function createQueue(queueName, type, onload) { + var name = (type=='bib') ? 'bib' : 'authority'; + var method = 'open-ils.vandelay.'+ name +'_queue.create' + fieldmapper.standardRequest( + ['open-ils.vandelay', method], + { async: true, + params: [authtoken, queueName, null, name], + oncomplete : function(r) { + var queue = r.recv().content(); + if(e = openils.Event.parse(queue)) + return alert(e); + onload(queue); + } + } + ); +} + +/** + * Tells vandelay to pull a batch of records from the cache and explode them + * out into the vandelay tables + */ +function processSpool(key, queueId, type, onload) { + fieldmapper.standardRequest( + ['open-ils.vandelay', 'open-ils.vandelay.'+type+'.process_spool'], + { async: true, + params: [authtoken, key, queueId], + onresponse : function(r) { + var resp = r.recv().content(); + if(e = openils.Event.parse(resp)) + return alert(e); + dojo.byId('vl-upload-status-count').innerHTML = resp; + }, + oncomplete : function(r) {onload();} + } + ); +} + +function retrieveQueuedRecords(type, queueId, onload) { + displayGlobalDiv('vl-generic-progress'); + queuedRecords = []; + queuedRecordsMap = {}; + currentOverlayRecordsMap = {}; + currentOverlayRecordsMapGid = {}; + selectableGridRecords = {}; + resetVlQueueGridLayout(); + + var method = 'open-ils.vandelay.'+type+'_queue.records.retrieve.atomic'; + if(vlQueueGridShowMatches.checked) + method = method.replace('records', 'records.matches'); + + var limit = parseInt(vlQueueDisplayLimit.getValue()); + var offset = limit * parseInt(vlQueueDisplayPage.getValue()-1); + + var params = [authtoken, queueId, {clear_marc: 1, offset: offset, limit: limit}]; + if(vlQueueGridShowNonImport.checked) + params[2].non_imported = 1; + + fieldmapper.standardRequest( + ['open-ils.vandelay', method], + { async: true, + params: params, + /* + onresponse: function(r) { + console.log("ONREPONSE"); + var rec = r.recv().content(); + if(e = openils.Event.parse(rec)) + return alert(e); + console.log("got record " + rec.id()); + queuedRecords.push(rec); + queuedRecordsMap[rec.id()] = rec; + }, + */ + oncomplete: function(r){ + var recs = r.recv().content(); + if(e = openils.Event.parse(recs[0])) + return alert(e); + for(var i = 0; i < recs.length; i++) { + var rec = recs[i]; + queuedRecords.push(rec); + queuedRecordsMap[rec.id()] = rec; + } + onload(); + } + } + ); +} + +function vlLoadMatchUI(recId) { + displayGlobalDiv('vl-generic-progress'); + var matches = queuedRecordsMap[recId].matches(); + var records = []; + currentImportRecId = recId; + for(var i = 0; i < matches.length; i++) + records.push(matches[i].eg_record()); + + var retrieve = ['open-ils.search', 'open-ils.search.biblio.record_entry.slim.retrieve']; + var params = [records]; + if(currentType == 'auth') { + retrieve = ['open-ils.cat', 'open-ils.cat.authority.record.retrieve']; + parmas = [authtoken, records, {clear_marc:1}]; + } + + fieldmapper.standardRequest( + retrieve, + { async: true, + params:params, + oncomplete: function(r) { + var recs = r.recv().content(); + if(e = openils.Event.parse(recs)) + return alert(e); + + /* ui mangling */ + displayGlobalDiv('vl-match-div'); + resetVlMatchGridLayout(); + currentMatchedRecords = recs; + if(!vlMatchGrid.structure) + vlMatchGrid.setStructure(vlMatchGridLayout); + + // build the data store of records with match information + var dataStore = bre.toStoreData(recs, null, + {virtualFields:['dest_matchpoint', 'src_matchpoint', '_id']}); + dataStore.identifier = '_id'; + + var matchSeenMap = {}; + + for(var i = 0; i < dataStore.items.length; i++) { + var item = dataStore.items[i]; + item._id = i; // just need something unique + for(var j = 0; j < matches.length; j++) { + var match = matches[j]; + if(match.eg_record() == item.id && !matchSeenMap[match.id()]) { + item.dest_matchpoint = match.field_type(); + var attr = getRecAttrFromMatch(queuedRecordsMap[recId], match); + item.src_matchpoint = getRecAttrDefFromAttr(attr, currentType).code(); + matchSeenMap[match.id()] = 1; + break; + } + } + } + + // now populate the grid + vlPopulateMatchGrid(vlMatchGrid, dataStore); + } + } + ); +} + +function vlPopulateMatchGrid(grid, data) { + var store = new dojo.data.ItemFileReadStore({data:data}); + var model = new dojox.grid.data.DojoData( + null, store, {rowsPerPage: 100, clientSort: true, query:{id:'*'}}); + grid.setModel(model); + grid.update(); +} + +function showMe(id) { + dojo.style(dojo.byId(id), 'display', 'block'); +} +function hideMe(id) { + dojo.style(dojo.byId(id), 'display', 'none'); +} + + +function vlLoadMARCHtml(recId, inCat, oncomplete) { + dijit.byId('vl-marc-html-done-button').onClick = oncomplete; + displayGlobalDiv('vl-generic-progress'); + var api; + var params = [recId, 1]; + + if(inCat) { + hideMe('vl-marc-html-edit-button'); // don't show marc editor button + dijit.byId('vl-marc-html-edit-button').onClick = function(){} + api = ['open-ils.search', 'open-ils.search.biblio.record.html']; + if(currentType == 'auth') + api = ['open-ils.search', 'open-ils.search.authority.to_html']; + } else { + showMe('vl-marc-html-edit-button'); // plug in the marc editor button + dijit.byId('vl-marc-html-edit-button').onClick = + function() {vlLoadMarcEditor(currentType, recId, oncomplete);}; + params = [authtoken, recId]; + api = ['open-ils.vandelay', 'open-ils.vandelay.queued_bib_record.html']; + if(currentType == 'auth') + api = ['open-ils.vandelay', 'open-ils.vandelay.queued_authority_record.html']; + } + + fieldmapper.standardRequest( + api, + { async: true, + params: params, + oncomplete: function(r) { + displayGlobalDiv('vl-marc-html-div'); + var html = r.recv().content(); + dojo.byId('vl-marc-record-html').innerHTML = html; + } + } + ); +} + + +/* +function getRecMatchesFromAttrCode(rec, attrCode) { + var matches = []; + var attr = getRecAttrFromCode(rec, attrCode); + for(var j = 0; j < rec.matches().length; j++) { + var match = rec.matches()[j]; + if(match.matched_attr() == attr.id()) + matches.push(match); + } + return matches; +} +*/ + +function getRecAttrFromMatch(rec, match) { + for(var i = 0; i < rec.attributes().length; i++) { + var attr = rec.attributes()[i]; + if(attr.id() == match.matched_attr()) + return attr; + } +} + +function getRecAttrDefFromAttr(attr, type) { + var defs = (type == 'bib') ? bibAttrDefs : authAttrDefs; + for(var i = 0; i < defs.length; i++) { + var def = defs[i]; + if(def.id() == attr.field()) + return def; + } +} + +function getRecAttrFromCode(rec, attrCode) { + var defId = attrDefMap[currentType][attrCode]; + var attrs = rec.attributes(); + for(var i = 0; i < attrs.length; i++) { + var attr = attrs[i]; + if(attr.field() == defId) + return attr; + } + return null; +} + +function vlGetViewMatches(rowIdx) { + var data = this.grid.model.getRow(rowIdx); + if(!data) return ''; + var rec = queuedRecordsMap[data.id]; + if(rec.matches().length > 0) + return this.value.replace('RECID', data.id); + return ''; +} + +function getAttrValue(rowIdx) { + var data = this.grid.model.getRow(rowIdx); + if(!data) return ''; + var attrCode = this.field.split('.')[1]; + var rec = queuedRecordsMap[data.id]; + var attr = getRecAttrFromCode(rec, attrCode); + return (attr) ? attr.attr_value() : ''; +} + +function vlGetDateTimeField(rowIdx) { + data = this.grid.model.getRow(rowIdx); + if(!data) return ''; + if(!data[this.field]) return ''; + var date = dojo.date.stamp.fromISOString(data[this.field]); + return dojo.date.locale.format(date, {selector:'date'}); +} + +function vlGetCreator(rowIdx) { + data = this.grid.model.getRow(rowIdx); + if(!data) return ''; + var id = data.creator; + if(userCache[id]) + return userCache[id].usrname(); + var user = fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.user.retrieve'], [authtoken, id]); + if(e = openils.Event.parse(user)) + return alert(e); + userCache[id] = user; + return user.usrname(); +} + +function vlGetViewMARC(rowIdx) { + data = this.grid.model.getRow(rowIdx); + if(data) + return this.value.replace('RECID', data.id); +} + +function vlGetOverlayTargetSelector(rowIdx) { + data = this.grid.model.getRow(rowIdx); + if(data) { + var value = this.value.replace(/GRIDID/g, data._id); + value = value.replace(/RECID/g, currentImportRecId); + value = value.replace(/ID/g, data.id); + if(data._id == currentOverlayRecordsMapGid[currentImportRecId]) + return value.replace('/>', 'checked="checked"/>'); + return value; + } +} + +/** + * see if the user has enabled overlays for the current match set and, + * if so, map the current import record to the overlay target. + */ +function vlHandleOverlayTargetSelected(recId, gridId) { + var noneSelected = true; + var checkboxes = dojo.query('[name=vl-overlay-target-'+currentImportRecId+']'); + for(var i = 0; i < checkboxes.length; i++) { + var checkbox = checkboxes[i]; + var matchRecId = checkbox.getAttribute('match'); + var gid = checkbox.getAttribute('gridid'); + if(checkbox.checked) { + if(matchRecId == recId && gid == gridId) { + noneSelected = false; + currentOverlayRecordsMap[currentImportRecId] = matchRecId; + currentOverlayRecordsMapGid[currentImportRecId] = gid; + dojo.byId('vl-record-list-selected-' + currentImportRecId).checked = true; + dojo.byId('vl-record-list-selected-' + currentImportRecId).parentNode.className = 'overlay_selected'; + } else { + checkbox.checked = false; + } + } + } + + if(noneSelected) { + delete currentOverlayRecordsMap[currentImportRecId]; + delete currentOverlayRecordsMapGid[currentImportRecId]; + dojo.byId('vl-record-list-selected-' + currentImportRecId).checked = false; + dojo.byId('vl-record-list-selected-' + currentImportRecId).parentNode.className = ''; + } +} + +var valLastQueueType = null; +function buildRecordGrid(type) { + displayGlobalDiv('vl-queue-div'); + + if(valLastQueueType != type) { + valLastQueueType = type; + resetVlQueueGridLayout(); + var defs = (type == 'bib') ? bibAttrDefs : authAttrDefs; + attrDefMap[type] = {}; + for(var i = 0; i < defs.length; i++) { + var def = defs[i] + attrDefMap[type][def.code()] = def.id(); + var col = { + name:def.description(), + field:'attr.' + def.code(), + get: getAttrValue, + selectableColumn:true + }; + vlQueueGridLayout[0].cells[0].push(col); + } + } + + var storeData; + if(type == 'bib') + storeData = vqbr.toStoreData(queuedRecords); + else + storeData = vqar.toStoreData(queuedRecords); + + var store = new dojo.data.ItemFileReadStore({data:storeData}); + var model = new dojox.grid.data.DojoData( + null, store, {rowsPerPage: 100, clientSort: true, query:{id:'*'}}); + vlQueueGrid.setModel(model); + + + if(vlQueueGridColumePicker[type]) { + vlQueueGrid.update(); + } else { + vlQueueGridColumePicker[type] = + new openils.GridColumnPicker(vlQueueGridColumePickerDialog, + vlQueueGrid, vlQueueGridLayout, authtoken, 'vandelay.queue.'+type); + vlQueueGridColumePicker[type].load(); + } +} + +function vlQueueGridPrevPage() { + var page = parseInt(vlQueueDisplayPage.getValue()); + if(page < 2) return; + vlQueueDisplayPage.setValue(page - 1); + retrieveQueuedRecords(currentType, currentQueueId, handleRetrieveRecords); +} + +function vlQueueGridNextPage() { + vlQueueDisplayPage.setValue(parseInt(vlQueueDisplayPage.getValue())+1); + retrieveQueuedRecords(currentType, currentQueueId, handleRetrieveRecords); +} + +function vlDeleteQueue(type, queueId, onload) { + fieldmapper.standardRequest( + ['open-ils.vandelay', 'open-ils.vandelay.'+type+'_queue.delete'], + { async: true, + params: [authtoken, queueId], + oncomplete: function(r) { + var resp = r.recv().content(); + if(e = openils.Event.parse(resp)) + return alert(e); + onload(); + } + } + ); +} + + +function vlQueueGridDrawSelectBox(rowIdx) { + var data = this.grid.model.getRow(rowIdx); + if(!data) return ''; + var domId = 'vl-record-list-selected-' +data.id; + selectableGridRecords[domId] = data.id; + return "
"; +} + +function vlSelectAllQueueGridRecords() { + for(var id in selectableGridRecords) + dojo.byId(id).checked = true; +} +function vlSelectNoQueueGridRecords() { + for(var id in selectableGridRecords) + dojo.byId(id).checked = false; +} +function vlToggleQueueGridSelect() { + if(dojo.byId('vl-queue-grid-row-selector').checked) + vlSelectAllQueueGridRecords(); + else + vlSelectNoQueueGridRecords(); +} + +var handleRetrieveRecords = function() { + buildRecordGrid(currentType); + vlFetchQueueSummary(currentQueueId, currentType, + function(summary) { + dojo.byId('vl-queue-summary-name').innerHTML = summary.queue.name(); + dojo.byId('vl-queue-summary-total-count').innerHTML = summary.total +''; + dojo.byId('vl-queue-summary-import-count').innerHTML = summary.imported + ''; + } + ); +} + +function vlFetchQueueSummary(qId, type, onload) { + fieldmapper.standardRequest( + ['open-ils.vandelay', 'open-ils.vandelay.'+type+'_queue.summary.retrieve'], + { async: true, + params: [authtoken, qId], + oncomplete : function(r) { + var summary = r.recv().content(); + if(e = openils.Event.parse(summary)) + return alert(e); + return onload(summary); + } + } + ); +} + + +function vlImportSelectedRecords() { + displayGlobalDiv('vl-generic-progress-with-total'); + var records = []; + + for(var id in selectableGridRecords) { + if(dojo.byId(id).checked) { + var recId = selectableGridRecords[id]; + var rec = queuedRecordsMap[recId]; + if(!rec.import_time()) + records.push(recId); + } + } + + fieldmapper.standardRequest( + ['open-ils.vandelay', 'open-ils.vandelay.'+currentType+'_record.list.import'], + { async: true, + params: [authtoken, records, {overlay_map:currentOverlayRecordsMap}], + onresponse: function(r) { + var resp = r.recv().content(); + if(e = openils.Event.parse(resp)) + return alert(e); + if(resp.complete) { + return retrieveQueuedRecords(currentType, currentQueueId, handleRetrieveRecords); + } else { + vlControlledProgressBar.update({maximum:resp.total, progress:resp.progress}); + } + }, + } + ); +} + +function vlImportAllRecords() { + vlImportRecordQueue(currentType, currentQueueId, false, + function(){displayGlobalDiv('vl-queue-div');}); +} + +function vlImportRecordQueue(type, queueId, noMatchOnly, onload) { + displayGlobalDiv('vl-generic-progress-with-total'); + var method = 'open-ils.vandelay.bib_queue.import'; + if(noMatchOnly) + method = method.replace('import', 'nomatch.import'); + if(type == 'auth') + method = method.replace('bib', 'auth'); + + fieldmapper.standardRequest( + ['open-ils.vandelay', method], + { async: true, + params: [authtoken, queueId], + onresponse: function(r) { + var resp = r.recv().content(); + if(e = openils.Event.parse(resp)) + return alert(e); + vlControlledProgressBar.update({maximum:resp.total, progress:resp.progress}); + }, + oncomplete: function() {onload();} + } + ); +} + + +/** + * Create queue, upload MARC, process spool, load the newly created queue + */ +function batchUpload() { + var queueName = dijit.byId('vl-queue-name').getValue(); + currentType = dijit.byId('vl-record-type').getValue(); + + var handleProcessSpool = function() { + console.log('records uploaded and spooled'); + if(vlUploadQueueAutoImport.checked) { + vlImportRecordQueue(currentType, currentQueueId, true, + function() { + retrieveQueuedRecords(currentType, currentQueueId, handleRetrieveRecords); + } + ); + } else { + retrieveQueuedRecords(currentType, currentQueueId, handleRetrieveRecords); + } + } + + var handleUploadMARC = function(key) { + console.log('marc uploaded'); + dojo.style(dojo.byId('vl-upload-status-processing'), 'display', 'block'); + processSpool(key, currentQueueId, currentType, handleProcessSpool); + }; + + var handleCreateQueue = function(queue) { + console.log('queue created ' + queue.name()); + currentQueueId = queue.id(); + uploadMARC(handleUploadMARC); + }; + + if(vlUploadQueueSelector.getValue() && !queueName) { + currentQueueId = vlUploadQueueSelector.getValue(); + console.log('adding records to existing queue ' + currentQueueId); + uploadMARC(handleUploadMARC); + } else { + createQueue(queueName, currentType, handleCreateQueue); + } +} + + +function vlFleshQueueSelect(selector, type) { + var data = (type == 'bib') ? vbq.toStoreData(allUserBibQueues) : vaq.toStoreData(allUserAuthQueues); + selector.store = new dojo.data.ItemFileReadStore({data:data}); + selector.setValue(null); + selector.setDisplayedValue(''); + if(data[0]) + selector.setValue(data[0].id()); +} + +function vlShowUploadForm() { + displayGlobalDiv('vl-marc-upload-div'); + vlFleshQueueSelect(vlUploadQueueSelector, vlUploadRecordType.getValue()); +} + +function vlShowQueueSelect() { + displayGlobalDiv('vl-queue-select-div'); + vlFleshQueueSelect(vlQueueSelectQueueList, vlQueueSelectType.getValue()); +} + +function vlFetchQueueFromForm() { + currentType = vlQueueSelectType.getValue(); + currentQueueId = vlQueueSelectQueueList.getValue(); + retrieveQueuedRecords(currentType, currentQueueId, handleRetrieveRecords); +} + +function vlOpenMarcEditWindow(rec, postReloadHTMLHandler) { + /* + To run in Firefox directly, must set signed.applets.codebase_principal_support + to true in about:config + */ + netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); + win = window.open('/xul/server/cat/marcedit.xul'); // XXX version? + + function onsave(r) { + // after the record is saved, reload the HTML display + var stat = r.recv().content(); + if(e = openils.Event.parse(stat)) + return alert(e); + alert(dojo.byId('vl-marc-edit-complete-label').innerHTML); + win.close(); + vlLoadMARCHtml(rec.id(), false, postReloadHTMLHandler); + } + + win.xulG = { + record : {marc : rec.marc()}, + save : { + label: dojo.byId('vl-marc-edit-save-label').innerHTML, + func: function(xmlString) { + var method = 'open-ils.permacrud.update.' + rec.classname; + rec.marc(xmlString); + fieldmapper.standardRequest( + ['open-ils.permacrud', method], + { async: true, + params: [authtoken, rec], + oncomplete: onsave + } + ); + }, + } + }; +} + +function vlLoadMarcEditor(type, recId, postReloadHTMLHandler) { + var method = 'open-ils.permacrud.search.vqbr'; + if(currentType != 'bib') + method = method.replace(/vqbr/,'vqar'); + + fieldmapper.standardRequest( + ['open-ils.permacrud', method], + { async: true, + params: [authtoken, {id : recId}], + oncomplete: function(r) { + var rec = r.recv().content(); + if(e = openils.Event.parse(rec)) + return alert(e); + vlOpenMarcEditWindow(rec, postReloadHTMLHandler); + } + } + ); +} + + + +//------------------------------------------------------------ +// attribute editors + +// attribute-editor global variables + +var ATTR_EDITOR_IN_UPDATE_MODE = false; // true on 'edit', false on 'create' +var ATTR_EDIT_ID = null; // id of current 'edit' attribute +var ATTR_EDIT_GROUP = 'bib'; // bib-attrs or auth-attrs + +function vlAttrEditorInit() { + // set up tooltips on the edit form + connectTooltip('attr-editor-tags'); + connectTooltip('attr-editor-subfields'); +} + +function vlShowAttrEditor() { + displayGlobalDiv('vl-attr-editor-div'); + loadAttrEditorGrid(); + idHide('vl-generic-progress'); +} + +function setAttrEditorGroup(groupName) { + // put us into 'bib'-attr or 'auth'-attr mode. + if (ATTR_EDIT_GROUP != groupName) { + ATTR_EDIT_GROUP = groupName; + loadAttrEditorGrid(); + } +} + +function onAttrEditorOpen() { + // the "bars" have the create/update/cancel/etc. buttons. + var create_bar = document.getElementById('attr-editor-create-bar'); + var update_bar = document.getElementById('attr-editor-update-bar'); + if (ATTR_EDITOR_IN_UPDATE_MODE) { + update_bar.style.display='table-row'; + create_bar.style.display='none'; + // hide the dropdown-button + idStyle('vl-create-attr-editor-button', 'visibility', 'hidden'); + } else { + dijit.byId('attr-editor-dialog').reset(); + create_bar.style.display='table-row'; + update_bar.style.display='none'; + } +} + +function onAttrEditorClose() { + // reset the form to a "create" form. (We may have borrowed it for editing.) + ATTR_EDITOR_IN_UPDATE_MODE = false; + // show the dropdown-button + idStyle('vl-create-attr-editor-button', 'visibility', 'visible'); +} + +function loadAttrEditorGrid() { + var _data = (ATTR_EDIT_GROUP == 'auth') ? + vqarad.toStoreData(authAttrDefs) : vqbrad.toStoreData(bibAttrDefs) ; + + var store = new dojo.data.ItemFileReadStore({data:_data}); + var model = new dojox.grid.data.DojoData( + null, store, {rowsPerPage: 100, clientSort: true, query:{id:'*'}}); + attrEditorGrid.setModel(model); + attrEditorGrid.setStructure(vlAttrGridLayout); + attrEditorGrid.onRowClick = onAttrEditorClick; + attrEditorGrid.update(); +} + +function attrGridGetTag(n) { + // grid helper: return the tags from the row's xpath column. + var xp = this.grid.model.getRow(n); + return xp && xpathParser.parse(xp.xpath).tags; +} + +function attrGridGetSubfield(n) { + // grid helper: return the subfields from the row's xpath column. + var xp = this.grid.model.getRow(n); + return xp && xpathParser.parse(xp.xpath).subfields; +} + +function onAttrEditorClick(evt) { + var row = attrEditorGrid.model.getRow(evt.rowIndex); + ATTR_EDIT_ID = row.id; + ATTR_EDITOR_IN_UPDATE_MODE = true; + + // populate the popup editor. + dojo.byId('attr-editor-code').value = row.code; + dojo.byId('attr-editor-description').value = row.description; + var parsed_xpath = xpathParser.parse(row.xpath); + dojo.byId('attr-editor-tags').value = parsed_xpath.tags; + dojo.byId('attr-editor-subfields').value = parsed_xpath.subfields; + dojo.byId('attr-editor-identifier').value = (row.ident ? 'True':'False'); + dojo.byId('attr-editor-xpath').value = row.xpath; + dojo.byId('attr-editor-remove').value = row.remove; + + // set up UI for editing + dojo.byId('vl-create-attr-editor-button').click(); +} + +function vlSaveAttrDefinition(data) { + idHide('vl-attr-editor-div'); + idShow('vl-generic-progress'); + + data.id = ATTR_EDIT_ID; + + // this ought to honour custom xpaths, but overwrite xpaths + // derived from tags/subfields. + if (data.xpath == '' || looksLikeDerivedXpath(data.xpath)) { + var _xpath = tagAndSubFieldsToXpath(data.tag, data.subfield); + data.xpath = _xpath; + } + + // build up our permacrud params. Key variables here are + // "create or update" and "bib or auth". + + var isAuth = (ATTR_EDIT_GROUP == 'auth'); + var isCreate = (ATTR_EDIT_ID == null); + var rad = isAuth ? new vqarad() : new vqbrad() ; + var method = 'open-ils.permacrud' + (isCreate ? '.create.' : '.update.') + + (isAuth ? 'vqarad' : 'vqbrad'); + var _data = rad.fromStoreItem(data); + + _data.ischanged(1); + + fieldmapper.standardRequest( + ['open-ils.permacrud', method], + { async: true, + params: [authtoken, _data ], + onresponse: function(r) { }, + oncomplete: function(r) { + attrEditorFetchAttrDefs(vlShowAttrEditor); + ATTR_EDIT_ID = null; + }, + onerror: function(r) { + alert('vlSaveAttrDefinition comms error: ' + r); + } + } + ); +} + +function attrEditorFetchAttrDefs(callback) { + var fn = (ATTR_EDIT_GROUP == 'auth') ? vlFetchAuthAttrDefs : vlFetchBibAttrDefs; + return fn(callback); +} + +function vlAttrDelete() { + idHide('vl-attr-editor-div'); + idShow('vl-generic-progress'); + + var isAuth = (ATTR_EDIT_GROUP == 'auth'); + var method = 'open-ils.permacrud.delete.' + (isAuth ? 'vqarad' : 'vqbrad'); + var rad = isAuth ? new vqarad() : new vqbrad() ; + fieldmapper.standardRequest( + ['open-ils.permacrud', method], + { async: true, + params: [authtoken, rad.fromHash({ id : ATTR_EDIT_ID }), ], + oncomplete: function() { + dijit.byId('attr-editor-dialog').onCancel(); // close the dialog + attrEditorFetchAttrDefs(vlShowAttrEditor); + ATTR_EDIT_ID = null; + }, + onerror: function(r) { + alert('vlAttrDelete comms error: ' + r); + } + } + ); +} + +// ------------------------------------------------------------ +// utilities for attribute editors + +// dom utilities (maybe dojo does these, and these should be replaced) + +function idStyle(obId, k, v) { document.getElementById(obId).style[k] = v; } +function idShow(obId) { idStyle(obId, 'display', 'block'); } +function idHide(obId) { idStyle(obId, 'display' , 'none'); } + +function connectTooltip(fieldId) { + // Given an element id, look up a tooltip element in the doc (same + // id with a '-tip' suffix) and associate the two. Maybe dojo has + // a better way to do this? + var fld = dojo.byId(fieldId); + var tip = dojo.byId(fieldId + '-tip'); + dojo.connect(fld, 'onfocus', function(evt) { + dijit.showTooltip(tip.innerHTML, fld, ['below', 'after']); }); + dojo.connect(fld, 'onblur', function(evt) { dijit.hideTooltip(fld); }); +} + +// xpath utilities + +var xpathParser = new openils.MarcXPathParser(); + +function tagAndSubFieldsToXpath(tags, subfields) { + // given tags, and subfields, build up an XPath. + try { + var parts = { + 'tags':tags.match(/[\d]+/g), + 'subfields':subfields.match(/[a-zA-z]/g) }; + return xpathParser.compile(parts); + } catch (err) { + return {'parts':null, 'tags':null, 'error':err}; + } +} + +function looksLikeDerivedXpath(path) { + // Does this path look like it was derived from tags and subfields? + var parsed = xpathParser.parse(path); + if (parsed.tags == null) + return false; + var compiled = xpathParser.compile(parsed); + return (path == compiled); +} + +// amazing xpath-util unit-tests +if (!looksLikeDerivedXpath('//*[@tag="901"]/*[@code="c"]')) alert('vandelay xpath-utility error'); +if ( looksLikeDerivedXpath('ba-boo-ba-boo!')) alert('vandelay xpath-utility error'); diff --git a/Open-ILS/web/vandelay/vandelay.xml b/Open-ILS/web/vandelay/vandelay.xml new file mode 100644 index 0000000000..dbbfa63f2b --- /dev/null +++ b/Open-ILS/web/vandelay/vandelay.xml @@ -0,0 +1,61 @@ + + + +]> + + + + &vandelay.vandelay; + + + + + + +
+ +
+ +
+ + + + + + + +
+ + diff --git a/Open-ILS/xsl/oilsMARC21slim2HTMLslim.xsl b/Open-ILS/xsl/oilsMARC21slim2HTMLslim.xsl new file mode 100644 index 0000000000..7b694fdbac --- /dev/null +++ b/Open-ILS/xsl/oilsMARC21slim2HTMLslim.xsl @@ -0,0 +1,68 @@ + + + + + +
+ +
+
+ + + + + + + + +
+ LDR + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + ‡ + + + +
+ + diff --git a/Open-ILS/xul/staff_client/Makefile b/Open-ILS/xul/staff_client/Makefile.am similarity index 71% rename from Open-ILS/xul/staff_client/Makefile rename to Open-ILS/xul/staff_client/Makefile.am index 05edd2fb56..e2afd5c4d2 100644 --- a/Open-ILS/xul/staff_client/Makefile +++ b/Open-ILS/xul/staff_client/Makefile.am @@ -1,16 +1,14 @@ -# ILS/Open-ILS/xul/staff_client/Makefile +#--------------------------------------------------------- +# Makefile.am for xul/staff_client +## Process this file with automake to generate Makefile.in +#--------------------------------------------------------- export STAFF_CLIENT_BUILD_ID = $$(/bin/cat build/BUILD_ID) -ifeq ($(origin $(OPENSRF_LIBS)), undefined) - # Reasonable default when making the client outside of the root dir - OPENSRF_JSLIBS := "/openils/lib/javascript" -else - OPENSRF_JSLIBS := "$(OPENSRF_LIBS)/javascript" -endif +OPENSRF_JSLIBS = "$(OPENSRF_LIBS)/javascript" -all: build +install-exec-local: build -build: build_dir generated open-ils custom stamp +build: build_dir generated open-ils stamp @echo To test the staff client: @echo " cd build/" @echo " xulrunner application.ini" @@ -27,13 +25,12 @@ build_dir: cp -R build/chrome/content/auth/ build/server/ cp build/chrome/content/main/constants.js build/server/main/constants.js cp build/chrome/content/main/simple_auth.xul build/server/main/simple_auth.xul + cp build/chrome/content/main/bindings.xml build/server/main/bindings.xml cp build/chrome/content/OpenILS/data.js build/server/OpenILS/data.js cp build/chrome/content/OpenILS/global_util.js build/server/OpenILS/global_util.js - # Is the following portable? - for i in `cd ../../../Evergreen/xul/staff_client/server/ && find -type f |grep -v \.svn|cut -f2- -d/`; do cp ../../../Evergreen/xul/staff_client/server/$$i build/server/$$i; done external/prune_dirs.sh build/ -stamp: +stamp: @/bin/date +"%Y%m%d.%H%M%S" > build/BUILD_ID @if [ -n "${STAFF_CLIENT_BUILD_ID}" ]; then ( echo "Stamping with Build ID: ${STAFF_CLIENT_BUILD_ID}" ; echo ${STAFF_CLIENT_BUILD_ID} > build/BUILD_ID ) ; fi @if [ -z "${STAFF_CLIENT_BUILD_ID}" ]; then ( echo "No Build ID for versioning" ; echo "none" > build/BUILD_ID ) ; fi @@ -47,19 +44,12 @@ stamp: generated: @echo ' * Grabbing lang.dtd from the OPAC code ' - cp ../../../Open-ILS/web/opac/locale/en-US/lang.dtd build/chrome/locale/en-US/ + cp @top_srcdir@/Open-ILS/web/opac/locale/en-US/lang.dtd build/chrome/locale/en-US/ open-ils: @echo ' * Grabbing more OPAC code and legacy code and custom code' - #cp ../../../OpenSRF/src/javascript/*.js build/chrome/content/OpenSRF/ - cp ../../../Open-ILS/web/opac/common/js/*.js build/chrome/content/OpenILS/util/ + cp @top_srcdir@/Open-ILS/web/opac/common/js/*.js build/chrome/content/OpenILS/util/ cp $(OPENSRF_JSLIBS)/*.js build/chrome/content/OpenILS/util/ external/prune_dirs.sh build/ -custom: - @echo ' * Placeholder for debugging tweaks ' - #(cd chrome/content/OpenILS/util; cp RemoteRequest.js~ RemoteRequest.js) -clean: - @echo ' * Removing build/ ' - rm -rf build/ diff --git a/Open-ILS/xul/staff_client/chrome/content/auth/controller.js b/Open-ILS/xul/staff_client/chrome/content/auth/controller.js index f49f3c1e53..784c878b22 100644 --- a/Open-ILS/xul/staff_client/chrome/content/auth/controller.js +++ b/Open-ILS/xul/staff_client/chrome/content/auth/controller.js @@ -84,6 +84,37 @@ auth.controller.prototype = { obj.test_server( obj.controller.view.server_prompt.value ); } ], + 'ssl_exception' : [ + ['render'], + function(e) { + return function() { + try { + obj.controller.view.cmd_ssl_exception.setAttribute('hidden','true'); + var x = new XMLHttpRequest(); + x.open("GET",'chrome://pippki/content/exceptionDialog.xul',false); + x.send(null); + obj.controller.view.cmd_ssl_exception.setAttribute('hidden','false'); + } catch(E) { + obj.controller.view.cmd_ssl_exception.setAttribute('hidden','true'); + } + }; + } + ], + 'cmd_ssl_exception' : [ + ['command'], + function() { + window.openDialog( + 'chrome://pippki/content/exceptionDialog.xul', + '', + 'chrome,centerscreen,modal', + { + 'location' : 'https://' + obj.controller.view.server_prompt.value, + 'prefetchCert' : true + } + ); + obj.test_server( obj.controller.view.server_prompt.value ); + } + ], 'server_prompt' : [ ['keypress'], handle_keypress @@ -223,7 +254,7 @@ auth.controller.prototype = { return; } try { - if ( ! url.match(/^http:\/\//) ) url = 'http://' + url; + if ( ! url.match(/^https:\/\//) ) url = 'https://' + url; var x = new XMLHttpRequest(); dump('server url = ' + url + '\n'); x.open("GET",url,true); diff --git a/Open-ILS/xul/staff_client/chrome/content/main/constants.js b/Open-ILS/xul/staff_client/chrome/content/main/constants.js index 6e952ae756..4863fe3255 100644 --- a/Open-ILS/xul/staff_client/chrome/content/main/constants.js +++ b/Open-ILS/xul/staff_client/chrome/content/main/constants.js @@ -200,6 +200,7 @@ const api = { 'MODS_SLIM_RECORD_RETRIEVE' : { 'app' : 'open-ils.search', 'method' : 'open-ils.search.biblio.record.mods_slim.retrieve', 'secure' : false }, 'MODS_SLIM_RECORD_RETRIEVE.authoritative' : { 'app' : 'open-ils.search', 'method' : 'open-ils.search.biblio.record.mods_slim.retrieve.authoritative', 'secure' : false }, 'MODS_SLIM_RECORD_RETRIEVE_VIA_COPY' : { 'app' : 'open-ils.search', 'method' : 'open-ils.search.biblio.mods_from_copy', 'secure' : false }, + 'MODS_SLIM_RECORD_RETRIEVE_VIA_COPY.authoritative' : { 'app' : 'open-ils.search', 'method' : 'open-ils.search.biblio.mods_from_copy', 'secure' : false }, 'PERM_CHECK' : { 'app' : 'open-ils.actor', 'method' : 'open-ils.actor.user.perm.check' }, 'PERM_MULTI_ORG_CHECK' : { 'app' : 'open-ils.actor', 'method' : 'open-ils.actor.user.perm.check.multi_org' }, 'PERM_RETRIEVE_HIGHEST_ORG' : { 'app' : 'open-ils.actor', 'method' : 'open-ils.actor.user.perm.highest_org' }, @@ -311,5 +312,7 @@ const urls = { 'XUL_VOLUME_EDITOR' : '/xul/server/cat/volume_editor.xul', 'XUL_Z3950_IMPORT' : '/xul/server/cat/z3950.xul', 'TEST_HTML' : '/xul/server/main/test.html', - 'TEST_XUL' : '/xul/server/main/test.xul' + 'TEST_XUL' : '/xul/server/main/test.xul', + 'VANDELAY' : '/vandelay/vandelay.xml', /* XXX how can we get the locale? */ + 'CONIFY' : '/conify/en-US/global/admin.html' /* XXX how can we get the locale? */ } diff --git a/Open-ILS/xul/staff_client/chrome/content/main/main.xul b/Open-ILS/xul/staff_client/chrome/content/main/main.xul index de6297e9b8..4f20549fb1 100644 --- a/Open-ILS/xul/staff_client/chrome/content/main/main.xul +++ b/Open-ILS/xul/staff_client/chrome/content/main/main.xul @@ -69,6 +69,7 @@ +