Reworking of the "Messages" interface in the patron display for manipulating standing penalties. Not yet complete, but functional.
TODO:
Need to add a field for staff initials if a specific OU setting is present, and need to add a section and some methods for "archived" messages. Also need to change how penalties are expressed in the summary sidebar. Also need thought on
how/whether/when this will replace the existing Notes infrastructure, since it can do the same thing but better.
NOTES:
Experimenting with xul toolbar/toolbox; there's a beep when you use the hot key for the Actions menu that this might be the cause of. Also, we're actually using the Dojo openils.PermaCrud code for
modifying existing penalties. Exciting :)
small net::server process to read MARC data from a raw socket and import the data into Evergreen. It was originally designed for OCLC Connexion imports, but could be used to import MARC from any source
open-ils.cat.biblio.records.merge uses in_db merge now to take advantage of URI handling (and speed, etc.). added a perm test to in_db_merge. removed old bib merge code
Thanks to miker_ and dojo 1.3.2, the <script> tag for loading dojo works now (if you configure djConfig in inline javascript rather than as an attribute on the script tag itself, and dojo.require() works if djConfig is given the baseUrl for dojo.js
added api call for calling the new actor.usr_delete stored procedure, which purges user data/xacts, anonymizes top-level user data, and transfers data to another user where necessary
Patch from Warren Layton for support of RIS format in SuperCat - thanks Warren!
===
I've put together another SuperCat feed, this type for the RIS format.
This can be used with most bibliographic citation software, such as
Reference Manager and Endnote. Combined with the previous "MARC text"
feed for RefWorks, most software should be covered.
I have only included the changes to add the feed and the XSLT file.
The patch (against trunk) doesn't include any changes to the OPAC, but
I'm willing to put something together if needed.
The MARC21slim2RIS.xsl transform makes a few assumptions:
* Any authors listed in 100, 110, or 111 fields are considered
"primary authors" (A1)
* Any individuals listed in 700 fields are considered primary authors
(A1) if their last name is found in the statement of responsibility
(245c). Otherwise, they are considered secondary authors (A2). It's
not 100% accurate, but it's certainly a step up from just turning all
700-level authors into A2s.
* Corporate authors listed in 710 fields are always considered
secondary authors (A2).
* Meetings in 711 fields are always converted into "Title Series" (T3)
(i.e., a talk at a conference would have the conference name listed as
the "Title Series", with the title of the talk listed as "T1", primary
title).
* Apart from field 520 (used for Abstracts, "N2"), no 5xx fields are used
* Subfields in the 650 and 651 fields are used as keywords ("KW")
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
This update to oils_cstore.c moves in the direction of supporting
table aliases in JSON queries (but we're not there yet).
We now maintain a stack to represent the top level query and any
subqueries nested within it. In each stack frame we store information
about the core class and any joined classes, including whatever aliases
are used for them. This stack enables us to look up the table
corresponding to a given alias.
Such searches now replace the old is_joined function for determining
whether a given class is in scope for a column in the SELECT or
ORDER BY clause.
In passing:
1. Rewrote the first few lines of searchJOIN() so that it wouldn't
be so convoluted.
2. We now detect attempts to do autojoins, or to join to the same
table multiple ways. These are the sorts of queries that need
table aliases to disambiguate the table references, The old code
would create invalid SQL and then let PostgreSQL complain about it,
Now we complain about it up front.
3. Corrected spelling errors in a couple of messages.
use the editor's allowed() method for checking perms. added context org to perm check. removed info/activity logs since editor logs queries at info and updates at activity already. changed 'record' param to 'record_id' for clarity. returning the new id on create instead of the editor object.
Add a few more tests, including one of a combined publication
date in the $yp pattern rather than in the $yc pattern (example
taken from LoC documentation).
specific cookie path not playing nicely when communicating with staff client cookies, in particular, change operator functionality. go back to global cookies
In oils_auth.c: changed the treatment of inactive accounts.
Previously, if someone tried to log on to an inactive account,
the error message reported to the client would identify the
account as inactive, without regard to the password.
Now the message identifies the account as inactive only if the
password matches. Otherwise it reports it simply as a failure.
Also: changed the barcode to a pointer to const, pointing to
an existing string, rather than allocating a separate copy
that we have to free later.
Also: tinkered with a couple of info messages to avoid
invoking undefined behavior when barcode is NULL.
If you try to log in with a non-existent username, the old
code would report that the username was inactive. Now it
reports a login failure. Inactive usernames are still
reported as inactive.
added option to import holdings from main record import screen. Give the user the option to choose which item import profile, when bibs are done importing, attempt to import holdings for successfully imported records. Still needs a UI for configuring new import profiles and ways to import holdings from the queue interface
Create a bunch of new indexes so that the new actor.usr_delete
and actor.usr_purge_data procedures won't have to do full
table scans.
The CREATE INDEX statements are sprinkled across seven different
installation scripts. Here there are all in one place, for
updating an existing database:
-- 200.schema.acq.sql
CREATE INDEX fund_alloc_allocator_idx ON acq.fund_allocation ( allocator );
CREATE INDEX li_creator_idx ON acq.lineitem ( creator );
CREATE INDEX li_editor_idx ON acq.lineitem ( editor );
CREATE INDEX li_selector_idx ON acq.lineitem ( selector );
CREATE INDEX li_note_creator_idx ON acq.lineitem_note ( creator );
CREATE INDEX li_note_editor_idx ON acq.lineitem_note ( editor );
CREATE INDEX li_usr_attr_def_usr_idx ON acq.lineitem_usr_attr_definition ( usr );
CREATE INDEX acq_picklist_owner_idx ON acq.picklist ( owner );
CREATE INDEX acq_picklist_creator_idx ON acq.picklist ( creator );
CREATE INDEX acq_picklist_editor_idx ON acq.picklist ( editor );
CREATE INDEX acq_po_note_creator_idx ON acq.po_note ( creator );
CREATE INDEX acq_po_note_editor_idx ON acq.po_note ( editor );
CREATE INDEX po_creator_idx ON acq.purchase_order ( creator );
CREATE INDEX po_editor_idx ON acq.purchase_order ( editor );
-- 090.schema.action.sql
CREATE INDEX circ_all_usr_idx ON action.circulation ( usr );
CREATE INDEX circ_circ_staff_idx ON action.circulation ( circ_staff );
CREATE INDEX circ_checkin_staff_idx ON action.circulation ( checkin_staff );
CREATE INDEX ahn_notify_staff_idx ON action.hold_notification ( notify_staff );
CREATE INDEX hold_request_fulfillment_staff_idx ON action.hold_request ( fulfillment_staff );
CREATE INDEX hold_request_requestor_idx ON action.hold_request ( requestor );
CREATE INDEX action_in_house_use_staff_idx ON action.in_house_use ( staff );
CREATE INDEX non_cat_in_house_use_staff_idx ON action.non_cat_in_house_use ( staff );
CREATE INDEX action_non_cat_circ_patron_idx ON action.non_cataloged_circulation ( patron );
CREATE INDEX action_non_cat_circ_staff_idx ON action.non_cataloged_circulation ( staff );
CREATE INDEX action_survey_response_usr_idx ON action.survey_response ( usr );
-- 005.schema.actors.sql
CREATE INDEX actor_usr_note_creator_idx ON actor.usr_note ( creator );
CREATE INDEX usr_org_unit_opt_in_staff_idx ON actor.usr_org_unit_opt_in ( staff );
CREATE INDEX actor_usr_standing_penalty_staff_idx ON actor.usr_standing_penalty ( staff );
-- 040.schema.asset.sql
CREATE INDEX asset_call_number_note_creator_idx ON asset.call_number_note ( creator );
CREATE INDEX cp_creator_idx ON asset.copy ( creator );
CREATE INDEX cp_editor_idx ON asset.copy ( editor );
CREATE INDEX asset_copy_note_creator_idx ON asset.copy_note ( creator );
-- 901.audit-tables.sql
CREATE INDEX aud_actor_usr_address_hist_id_idx ON auditor.actor_usr_address_history ( id );
CREATE INDEX aud_actor_usr_hist_id_idx ON auditor.actor_usr_history ( id );
CREATE INDEX aud_asset_cn_hist_creator_idx ON auditor.asset_call_number_history ( creator );
CREATE INDEX aud_asset_cn_hist_editor_idx ON auditor.asset_call_number_history ( editor );
CREATE INDEX aud_asset_cp_hist_creator_idx ON auditor.asset_copy_history ( creator );
CREATE INDEX aud_asset_cp_hist_editor_idx ON auditor.asset_copy_history ( editor );
CREATE INDEX aud_bib_rec_entry_hist_creator_idx ON auditor.biblio_record_entry_history ( creator );
CREATE INDEX aud_bib_rec_entry_hist_editor_idx ON auditor.biblio_record_entry_history ( editor );
-- 070.schema.container.sql
CREATE INDEX user_bucket_item_target_user_idx ON container.user_bucket_item ( target_user );
-- 080.schema.money.sql
CREATE INDEX m_c_t_collector_idx ON money.collections_tracker ( collector );
Not tested, but let the keys 'search_limit' and 'search_sort' be useable in the JSON-encoded 'query' object that pre-populates the search fields in search_form.xul when spawned by say, the patron editor
In verifyObjectPCRUD: pull the lookup of the root org_unit id into
a separate function. Cache the results for up to an hour, in order
to reduce the repetition of identical queries getting identical results.
when patron checks out an item and they have no holds that directly target the item,
allow for a setting that tells the system to look for an alternate hold to fulfil the item.
also cleaned up some unnecessarily complicated checkout hold fulfil code
Patch from James Fournie -- fixing org tree fleshing depth.
====
I was having a horrible time getting the hasCommonAncestor() function
to work in the circ Javascripts. I eventually discovered that
ScriptBuilder.pm was making a cstore actor.org_unit search with flesh
= 2, which limited the search to org units above depth 2. My org
units were depth 3. I changed the cstore flesh to -1 and this seems
to retreive all org units. I also found an similar problem in
AppUtils.pm
2. In verifyObjectPCRUD: renamed meta to method_metadata, for clarity.
In many places we use "meta" for class metadata.
3. In verifyObjectPCRUD: when looking for the root of the org tree,
build the where clause object directly instead of incurring the overhead
of jsonParseString().
4. A few lines further down: free the where clause object in only
a single place.
5. In single_hash(): represent a NULL value as a JSON_NULL.
Enhance RefWorks support on a per-skin basis:
* Add the ability to disable it entirely (rdetailEnableRefWorks variable)
* Add the ability to specify a different host for the RefWorks application (rdetailRefWorksHost)
Also, collect the growing list of configuration variables in rdetail.js at the head of the file.
Basic fix for reporter as of rel_1_6 and the super-smart cstore
As virtual fields are no longer defined in fm_IDL.xml, the old code that returned
a list of fields filtering on the virtual attribute started returning an empty list.
As a quick fix, we'll just return an array of all field elements.