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.
In oils_cstore.c: converted several iterator loops to indexed loops.
doFieldMapperSearch always returns a JSON_ARRAY (or NULL). It is
more efficient to traverse such an array with a subscript than with
a jsonIterator, because a subscript doesn't require a malloc and free.
1. In osrfAppInitialize(): reuse the growing_buffer method_name
instead of repeatedly destroying and recreating it. That should
save hundreds of mallocs and frees in the initialization.
2. Also in osrfAppInitialize(): correct an inaccurate debug
message, and rearrange a few lines for clarity.
3. Throughout: replace the dbi_get_* functions, which do lookups
by name, with the corresponding dbi_get_*_idx functions, which
do lookups by index. Lookups by index are faster than lookups
by name, because they don't have to do a search.
1. Added a utility function single_hash() to create simple WHERE
clauses instead of calling jsonParseStringFmt(). This change
avoids the overhead of creating and then parsing a JSON string.
2. In SELECT(), processing an ORDER BY clause: traverse a
JSON_ARRAY with an index instead of an iterator. This change
avoids some mallocs and frees -- and also plugs a memory leak,
since we weren't freeing the iterator.
3. Also in SELECT(), processing an ORDER BY clause: free the
iterator that we use for traversing the hash of classes.
Fix SQL translation script and associated unit tests
It looks like polib became stricter about forcing the line number portion of
filename:line occurrences in the PO to actually be an integer, with the result
of simply concatenating the text "line numbers" that we had been using to
store ID values to the table names.
Now we're using specially formatted translator comments to hold the ID values,
and using the filename:line occurence entries to actually hold the source filename
and line number for occurrences. Fancy that!
Change the interface to doFieldMapperSearch(), and reap some performance
gains that this change makes possible.
Instead of passing the query as two jsonObjects wrapped in a JSON_ARRAY,
pass them as separate parameters. This change makes it possible to
avoid the overhead of constructing a single package to bundle them both.
The resulting code is also, to my eyes, easier to read.