# # OILSRedirectDepth defaults to the depth of the branch that the OPAC was directed to
# #PerlSetVar OILSRedirectDepth "0"
# #PerlSetVar OILSRedirectLocale "en-US"
+# # Use the template-toolkit opac
+# #PerlSetVar OILSRedirectTpac "true"
# allow from all
#</LocationMatch>
# Specify the initial script URL for Novelist (containing account credentials, etc.)
#SetEnv OILS_NOVELIST_URL
-
+ #
# Uncomment to force SSL any time a patron is logged in. This protects
# authentication tokens. Left commented out for backwards compat for now.
#SetEnv OILS_OPAC_FORCE_LOGIN_SSL 1
-
# If set, the skin uses the combined JS file at $SKINDIR/js/combined.js
#SetEnv OILS_OPAC_COMBINED_JS 1
# Expire the HTML quickly since we're loading dynamic data for each page
ExpiresActive On
ExpiresByType text/html "access plus 5 seconds"
+
+ # For use with embedded Content Cafe content
+ #SetEnv OILS_CONTENT_CAFE_USER 123
+ #SetEnv OILS_CONTENT_CAFE_PASS 456
+ # Consider copying/moving other added content configs
+ # (e.g. NOVELIST) into here or to an outer container shared by
+ # both /opac and /eg/opac since some are used in both places
</Location>
<field reporter:label="Replace Specification" name="replace_spec" reporter:datatype="text"/>
<field reporter:label="Remove Specification" name="strip_spec" reporter:datatype="text"/>
<field reporter:label="Preserve Specification" name="preserve_spec" reporter:datatype="text"/>
+ <field reporter:label="Min. Quality Ratio" name="lwm_ratio" reporter:datatype="float"/>
</fields>
<links>
<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
<field reporter:label="Import Item ID" name="id" reporter:datatype="id"/>
<field reporter:label="Import Record" name="record" reporter:datatype="link"/>
<field reporter:label="Attribute Definition" name="definition" reporter:datatype="link"/>
+ <field reporter:label="Import Error" name="import_error" reporter:datatype="link"/>
+ <field reporter:label="Import Error Detail" name="error_detail" reporter:datatype="text"/>
+ <field reporter:label="Final Target Copy" name="imported_as" reporter:datatype="link"/>
+ <field reporter:label="Import Time" name="import_time" reporter:datatype="timestamp"/>
<field reporter:label="Owning Library" name="owning_lib" reporter:datatype="int"/>
<field reporter:label="Circulating Library" name="circ_lib" reporter:datatype="int"/>
<field reporter:label="Call Number" name="call_number" reporter:datatype="text"/>
<field reporter:label="OPAC Visible" name="opac_visible" reporter:datatype="bool"/>
</fields>
<links>
+ <link field="import_error" reltype="has_a" key="code" map="" class="vie"/>
<link field="record" reltype="has_a" key="id" map="" class="vqbr"/>
<link field="definition" reltype="has_a" key="id" map="" class="viiad"/>
+ <link field="imported_as" reltype="has_a" key="id" map="" class="acp"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<actions>
<field reporter:label="Name" name="name" reporter:datatype="text" oils_persist:i18n="true"/>
<field reporter:label="Complete" name="complete" reporter:datatype="bool"/>
<field reporter:label="Type" name="queue_type" reporter:datatype="text"/>
+ <field reporter:label="Match Set" name="match_set" reporter:datatype="link"/>
<field reporter:label="Item Import Attribute Definition" name="item_attr_def" reporter:datatype="link"/>
</fields>
<links>
<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
<link field="item_attr_def" reltype="has_a" key="id" map="" class="viiad"/>
+ <link field="match_set" reltype="has_a" key="id" map="" class="vms"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<actions>
</permacrud>
</class>
+ <class id="vie" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="vandelay::import_error" oils_persist:tablename="vandelay.import_error" reporter:label="Import/Overlay Error Definitions">
+ <fields oils_persist:primary="code">
+ <field reporter:label="Error Code" name="code" reporter:selector="description" reporter:datatype="id"/>
+ <field reporter:label="Description" name="description" reporter:datatype="text" oils_persist:i18n="true"/>
+ </fields>
+ <links>
+ <link field="owner" reltype="has_a" key="id" map="" class="aou"/>
+ <link field="item_attr_def" reltype="has_a" key="id" map="" class="viiad"/>
+ <link field="match_set" reltype="has_a" key="id" map="" class="vms"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <retrieve/>
+ </actions>
+ </permacrud>
+ </class>
+
<class id="vqbr" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="vandelay::queued_bib_record" oils_persist:tablename="vandelay.queued_bib_record" reporter:label="Queued Bib Record">
<fields oils_persist:primary="id" oils_persist:sequence="vandelay.queued_record_id_seq">
<field reporter:label="Record ID" name="id" reporter:datatype="id"/>
<field reporter:label="Queue" name="queue" reporter:datatype="link"/>
<field reporter:label="Bib Source" name="bib_source" reporter:datatype="link"/>
<field reporter:label="Final Target Record" name="imported_as" reporter:datatype="link"/>
+ <field reporter:label="Import Error" name="import_error" reporter:datatype="link"/>
+ <field reporter:label="Import Error Detail" name="error_detail" reporter:datatype="text"/>
<field reporter:label="Purpose" name="purpose" reporter:datatype="text"/>
<field reporter:label="Attributes" name="attributes" oils_persist:virtual="true" reporter:datatype="link"/>
<field reporter:label="Matches" name="matches" oils_persist:virtual="true" reporter:datatype="link"/>
+ <field reporter:label="Import Items" name="import_items" oils_persist:virtual="true" reporter:datatype="link"/>
+ <field reporter:label="Quality" name="quality" reporter:datatype="int"/>
</fields>
<links>
+ <link field="import_error" reltype="has_a" key="code" map="" class="vie"/>
<link field="queue" reltype="has_a" key="id" map="" class="vbq"/>
<link field="bib_source" reltype="has_a" key="id" map="" class="cbs"/>
<link field="imported_as" reltype="has_a" key="id" map="" class="bre"/>
<link field="attributes" reltype="has_many" key="record" map="" class="vqbra"/>
<link field="matches" reltype="has_many" key="queued_record" map="" class="vbm"/>
+ <link field="import_items" reltype="has_many" key="record" map="" class="vii"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<actions>
<field reporter:label="Description" name="description" reporter:datatype="text" oils_persist:i18n="true"/>
<field reporter:label="XPath" name="xpath" reporter:datatype="text"/>
<field reporter:label="Remove RegExp" name="remove" reporter:datatype="text"/>
- <field reporter:label="Is Identifier?" name="ident" reporter:datatype="bool"/>
</fields>
<links/>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<fields oils_persist:primary="id" oils_persist:sequence="vandelay.bib_match_id_seq">
<field reporter:label="Match ID" name="id" reporter:datatype="id"/>
<field reporter:label="Queued Record" name="queued_record" reporter:datatype="link"/>
- <field reporter:label="Matched Attribute" name="matched_attr" reporter:datatype="link"/>
<field reporter:label="Evergreen Record" name="eg_record" reporter:datatype="link"/>
- <field reporter:label="Field Type" name="field_type" reporter:datatype="text"/>
+ <field reporter:label="Quality" name="quality" reporter:datatype="text"/>
+ <field reporter:label="Match Score" name="match_score" reporter:datatype="text"/>
</fields>
<links>
<link field="queued_record" reltype="has_a" key="id" map="" class="vqbr"/>
<link field="eg_record" reltype="has_a" key="id" map="" class="bre"/>
- <link field="matched_attr" reltype="has_a" key="id" map="" class="vqbra"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<actions>
<field reporter:label="Name" name="name" reporter:datatype="text" oils_persist:i18n="true"/>
<field reporter:label="Complete" name="complete" reporter:datatype="bool"/>
<field reporter:label="Type" name="queue_type" reporter:datatype="text"/>
+ <field reporter:label="Match Set" name="match_set" reporter:datatype="link"/>
</fields>
<links>
<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
+ <link field="match_set" reltype="has_a" key="id" map="" class="vms"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<actions>
<field reporter:label="MARC" name="marc" reporter:datatype="text"/>
<field reporter:label="Queue" name="queue" reporter:datatype="link"/>
<field reporter:label="Final Target Record" name="imported_as" reporter:datatype="link"/>
+ <field reporter:label="Import Error" name="import_error" reporter:datatype="link"/>
+ <field reporter:label="Import Error Detail" name="error_detail" reporter:datatype="text"/>
<field reporter:label="Purpose" name="purpose" reporter:datatype="text"/>
<field reporter:label="Attributes" name="attributes" oils_persist:virtual="true" reporter:datatype="link"/>
<field reporter:label="Matches" name="matches" oils_persist:virtual="true" reporter:datatype="link"/>
+ <field reporter:label="Quality" name="quality" reporter:datatype="int"/>
</fields>
<links>
+ <link field="import_error" reltype="has_a" key="code" map="" class="vie"/>
<link field="queue" reltype="has_a" key="id" map="" class="vaq"/>
<link field="imported_as" reltype="has_a" key="id" map="" class="are"/>
<link field="attributes" reltype="has_many" key="record" map="" class="vqara"/>
<field reporter:label="Description" name="description" reporter:datatype="text" oils_persist:i18n="true"/>
<field reporter:label="XPath" name="xpath" reporter:datatype="text"/>
<field reporter:label="Remove RegExp" name="remove" reporter:datatype="text"/>
- <field reporter:label="Is Identifier?" name="ident" reporter:datatype="bool"/>
</fields>
<links/>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<fields oils_persist:primary="id" oils_persist:sequence="vandelay.authority_match_id_seq">
<field reporter:label="Match ID" name="id" reporter:datatype="id"/>
<field reporter:label="Queued Record" name="queued_record" reporter:datatype="link"/>
- <field reporter:label="Matched Attribute" name="matched_attr" reporter:datatype="link"/>
<field reporter:label="Evergreen Record" name="eg_record" reporter:datatype="link"/>
+ <field reporter:label="Quality" name="quality" reporter:datatype="int"/>
</fields>
<links>
<link field="queued_record" reltype="has_a" key="id" map="" class="vqbr"/>
<link field="eg_record" reltype="has_a" key="id" map="" class="bre"/>
- <link field="matched_attr" reltype="has_a" key="id" map="" class="vqbra"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<actions>
</permacrud>
</class>
+ <class id="vms" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="vandelay::match_set" oils_persist:tablename="vandelay.match_set" reporter:label="Record Matching Definition Set">
+ <fields oils_persist:primary="id" oils_persist:sequence="vandelay.match_set_id_seq">
+ <field reporter:label="Match Set ID" name="id" reporter:datatype="id"/>
+ <field reporter:label="Name" name="name" reporter:datatype="text"/>
+ <field reporter:label="Owning Library" name="owner" reporter:datatype="link"/>
+ <field reporter:label="Match Set Type" name="mtype" reporter:datatype="text"/>
+ </fields>
+ <links>
+ <link field="owner" reltype="has_a" key="id" map="" class="aou"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="ADMIN_IMPORT_MATCH_SET" context_field="owner"/>
+ <retrieve permission="ADMIN_IMPORT_MATCH_SET" context_field="owner"/>
+ <update permission="ADMIN_IMPORT_MATCH_SET" context_field="owner"/>
+ <delete permission="ADMIN_IMPORT_MATCH_SET" context_field="owner"/>
+ </actions>
+ </permacrud>
+ </class>
+
+ <class id="vmsp" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="vandelay::match_set_point" oils_persist:tablename="vandelay.match_set_point" reporter:label="Record Matching Definition">
+ <fields oils_persist:primary="id" oils_persist:sequence="vandelay.match_set_point_id_seq">
+ <field reporter:label="Match Definition ID" name="id" reporter:datatype="id"/>
+ <field reporter:label="Expression Tree Parent" name="parent" reporter:datatype="link"/>
+ <field reporter:label="Match Set" name="match_set" reporter:datatype="link"/>
+ <field reporter:label="Boolean Operator" name="bool_op" reporter:datatype="text"/>
+ <field reporter:label="Coded Field" name="svf" reporter:datatype="link"/>
+ <field reporter:label="Tag" name="tag" reporter:datatype="text"/>
+ <field reporter:label="Subfield" name="subfield" reporter:datatype="text"/>
+ <field reporter:label="Negate" name="negate" reporter:datatype="bool"/>
+ <field reporter:label="Importance" name="quality" reporter:datatype="int"/>
+ <field reporter:label="Expression Tree Children" name="children" oils_persist:virtual="true" reporter:datatype="link"/>
+ </fields>
+ <links>
+ <link field="parent" reltype="has_a" key="id" map="" class="vmsp"/>
+ <link field="match_set" reltype="has_a" key="id" map="" class="vms"/>
+ <link field="svf" reltype="has_a" key="id" map="" class="crad"/>
+ <link field="children" reltype="has_many" key="parent" map="" class="vmsp"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="ADMIN_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </create>
+ <retrieve permission="ADMIN_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </retrieve>
+ <update permission="ADMIN_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </update>
+ <delete permission="ADMIN_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </delete>
+ </actions>
+ </permacrud>
+ </class>
+
+ <class id="vmsq" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="vandelay::match_set_quality" oils_persist:tablename="vandelay.match_set_quality" reporter:label="Record Quality Metric">
+ <fields oils_persist:primary="id" oils_persist:sequence="vandelay.match_set_quality_id_seq">
+ <field reporter:label="Quality Metric ID" name="id" reporter:datatype="id"/>
+ <field reporter:label="Match Set" name="match_set" reporter:datatype="link"/>
+ <field reporter:label="Record Attribute" name="svf" reporter:datatype="text"/>
+ <field reporter:label="Tag" name="tag" reporter:datatype="text"/>
+ <field reporter:label="Subfield" name="subfield" reporter:datatype="text"/>
+ <field reporter:label="Value" name="value" reporter:datatype="text"/>
+ <field reporter:label="Quality" name="quality" reporter:datatype="int"/>
+ </fields>
+ <links>
+ <link field="match_set" reltype="has_a" key="id" map="" class="vms"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="ADMIN_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </create>
+ <retrieve permission="ADMIN_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </retrieve>
+ <update permission="ADMIN_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </update>
+ <delete permission="ADMIN_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </delete>
+ </actions>
+ </permacrud>
+ </class>
<class id="auoi" controller="open-ils.cstore" oils_obj:fieldmapper="actor::usr_org_unit_opt_in" oils_persist:tablename="actor.usr_org_unit_opt_in" reporter:label="User Sharing Opt-in">
<fields oils_persist:primary="id" oils_persist:sequence="actor.usr_org_unit_opt_in_id_seq">
<link field="item" reltype="has_a" key="id" map="" class="ccbi"/>
</links>
</class>
+
+ <class id="acs" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="authority::control_set" oils_persist:tablename="authority.control_set" reporter:label="Authority Control Set" oils_persist:field_safe="true">
+ <fields oils_persist:primary="id" oils_persist:sequence="authority.control_set_id_seq">
+ <field reporter:label="Control Set ID" name="id" reporter:datatype="id" reporter:selector="name"/>
+ <field reporter:label="Name" name="name" reporter:datatype="text" oils_persist:i18n="true" oils_obj:required="true" />
+ <field reporter:label="Description" name="description" reporter:datatype="text" oils_persist:i18n="true" />
+ <field reporter:label="Controlling Authority Fields" name="authority_fields" reporter:datatype="link" oils_persist:virtual="true"/>
+ <field reporter:label="Thesauri" name="thesauri" reporter:datatype="link" oils_persist:virtual="true"/>
+ </fields>
+ <links>
+ <link field="authority_fields" reltype="has_many" key="control_set" map="" class="acsaf"/>
+ <link field="thesauri" reltype="has_many" key="control_set" map="" class="at"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="CREATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <retrieve/>
+ <update permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <delete permission="DELETE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ </actions>
+ </permacrud>
+ </class>
+
+ <class id="acsaf" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="authority::control_set_authority_field" oils_persist:tablename="authority.control_set_authority_field" reporter:label="Authority Control Set Authority Field" oils_persist:field_safe="true">
+ <fields oils_persist:primary="id" oils_persist:sequence="authority.control_set_authority_field_id_seq">
+ <field reporter:label="Control Set Authority Field ID" name="id" reporter:datatype="id" reporter:selector="name"/>
+ <field reporter:label="Main Entry" name="main_entry" reporter:datatype="link"/>
+ <field reporter:label="Control Set" name="control_set" reporter:datatype="link"/>
+ <field reporter:label="Tag" name="tag" reporter:datatype="text" oils_obj:required="true" oils_obj:validate="^.{3}$"/>
+ <field reporter:label="Subfield List" name="sf_list" reporter:datatype="text" />
+ <field reporter:label="Name" name="name" reporter:datatype="text" oils_persist:i18n="true" oils_obj:required="true" />
+ <field reporter:label="Description" name="description" reporter:datatype="text" oils_persist:i18n="true" />
+ <field reporter:label="Subordinate Entries" name="sub_entries" reporter:datatype="link" oils_persist:virtual="true"/>
+ <field reporter:label="Controlled Bib Fields" name="bib_fields" reporter:datatype="link" oils_persist:virtual="true"/>
+ <field reporter:label="Thesauri" name="thesauri" reporter:datatype="link" oils_persist:virtual="true"/>
+ <field reporter:label="Browse Axis Maps" name="axis_maps" reporter:datatype="link" oils_persist:virtual="true"/>
+ </fields>
+ <links>
+ <link field="axis_maps" reltype="has_many" key="field" map="" class="abaafm"/>
+ <link field="control_set" reltype="has_a" key="id" map="" class="acs"/>
+ <link field="bib_fields" reltype="has_many" key="authority_field" map="" class="acsbf"/>
+ <link field="thesauri" reltype="has_many" key="control_set" map="" class="at"/>
+ <link field="main_entry" reltype="has_a" key="id" map="" class="acsaf"/>
+ <link field="sub_entries" reltype="has_many" key="main_entry" map="" class="acsaf"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="CREATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <retrieve/>
+ <update permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <delete permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ </actions>
+ </permacrud>
+ </class>
+
+ <class id="acsbf" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="authority::control_set_bib_field" oils_persist:tablename="authority.control_set_bib_field" reporter:label="Authority Control Set Bib Field" oils_persist:field_safe="true">
+ <fields oils_persist:primary="id" oils_persist:sequence="authority.control_set_bib_field_id_seq">
+ <field reporter:label="Controlled Bib Field ID" name="id" reporter:datatype="id" reporter:selector="name"/>
+ <field reporter:label="Controlling Authority Field" name="authority_field" reporter:datatype="link"/>
+ <field reporter:label="Tag" name="tag" reporter:datatype="text" oils_obj:required="true" oils_obj:validate="^.{3}$"/>
+ </fields>
+ <links>
+ <link field="authority_field" reltype="has_a" key="id" map="" class="acsaf"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="CREATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <retrieve/>
+ <update permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <delete permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ </actions>
+ </permacrud>
+ </class>
+
+ <class id="at" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="authority::thesaurus" oils_persist:tablename="authority.thesaurus" reporter:label="Authority Thesaurus" oils_persist:field_safe="true">
+ <fields oils_persist:primary="code">
+ <field reporter:label="Thesaurus Code" name="code" reporter:datatype="id" reporter:selector="name"/>
+ <field reporter:label="Control Set" name="control_set" reporter:datatype="link"/>
+ <field reporter:label="Name" name="name" reporter:datatype="text" oils_persist:i18n="true" oils_obj:required="true" />
+ <field reporter:label="Description" name="description" reporter:datatype="text" oils_persist:i18n="true" />
+ </fields>
+ <links>
+ <link field="control_set" reltype="has_a" key="id" map="" class="acs"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="CREATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <retrieve/>
+ <update permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <delete permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ </actions>
+ </permacrud>
+ </class>
+
+ <class id="aba" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="authority::browse_axis" oils_persist:tablename="authority.browse_axis" reporter:label="Authority Browse Axis" oils_persist:field_safe="true">
+ <fields oils_persist:primary="code">
+ <field reporter:label="Code" name="code" reporter:datatype="id" reporter:selector="name" oils_obj:validate="^\S+$"/>
+ <field reporter:label="Name" name="name" reporter:datatype="text" oils_persist:i18n="true" oils_obj:required="true"/>
+ <field reporter:label="Sorter Attribute" name="sorter" reporter:datatype="link"/>
+ <field reporter:label="Description" name="description" reporter:datatype="text"/>
+ <field reporter:label="Authority Fields" name="fields" reporter:datatype="link" oils_persist:virtual="true"/>
+ <field reporter:label="Authority Field Maps" name="maps" reporter:datatype="link" oils_persist:virtual="true"/>
+ </fields>
+ <links>
+ <link field="sorter" reltype="has_a" key="name" map="" class="crad"/>
+ <link field="fields" reltype="has_many" key="axis" map="field" class="abaafm"/>
+ <link field="maps" reltype="has_many" key="axis" map="" class="abaafm"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="CREATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <retrieve/>
+ <update permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <delete permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ </actions>
+ </permacrud>
+ </class>
+
+ <class id="abaafm" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="authority::browse_axis_authority_field_map" oils_persist:tablename="authority.browse_axis_authority_field_map" reporter:label="Authority Browse Axis Field Map" oils_persist:field_safe="true">
+ <fields oils_persist:primary="id" oils_persist:sequence="authority.browse_axis_authority_field_map_id_seq">
+ <field reporter:label="Axis Authority Field Map ID" name="id" reporter:datatype="id"/>
+ <field reporter:label="Authority Field" name="field" oils_obj:required="true" reporter:datatype="link"/>
+ <field reporter:label="Axis" name="axis" reporter:datatype="link" oils_obj:required="true"/>
+ </fields>
+ <links>
+ <link field="field" reltype="has_a" key="id" map="" class="acsaf"/>
+ <link field="axis" reltype="has_a" key="code" map="" class="aba"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="CREATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <retrieve/>
+ <update permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ <delete permission="UPDATE_AUTHORITY_CONTROL_SET" global_required="true"/>
+ </actions>
+ </permacrud>
+ </class>
+
<class id="are" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="authority::record_entry" oils_persist:tablename="authority.record_entry" reporter:label="Authority Record Entry">
<fields oils_persist:primary="id" oils_persist:sequence="authority.record_entry_id_seq">
<field name="active" reporter:datatype="bool"/>
<field name="last_xact_id" />
<field name="marc" />
<field name="source" />
+ <field reporter:label="Control Set" name="control_set" reporter:datatype="link"/>
<field reporter:label="Owner" name="owner" reporter:datatype="org_unit"/>
<field name="fixed_fields" oils_persist:virtual="true" reporter:datatype="link"/>
<field name="notes" oils_persist:virtual="true" reporter:datatype="link"/>
<field name="bib_links" oils_persist:virtual="true" reporter:datatype="link"/>
</fields>
<links>
+ <link field="control_set" reltype="has_a" key="id" map="" class="acs"/>
<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
<link field="editor" reltype="has_a" key="id" map="" class="au"/>
<link field="creator" reltype="has_a" key="id" map="" class="au"/>
<field name="id" />
<field name="record" />
<field name="record_status" />
+ <field name="thesaurus" />
</fields>
<links>
<link field="record" reltype="has_a" key="id" map="" class="are"/>
+ <link field="thesaurus" reltype="might_have" key="code" map="" class="at"/>
</links>
</class>
<class id="abl" controller="open-ils.cstore" oils_obj:fieldmapper="authority::bib_linking" oils_persist:tablename="authority.bib_linking" reporter:label="Authority-Bibliographic Record Link">
<event>COPY_ALERT_MESSAGE</event>
</checkout_override>
+ <!-- If uncommented, SIP2 checkins will capture local holds as transits, instead of marking as ready for pickup. -->
+ <!--
+ <checkin_hold_as_transit>1</checkin_hold_as_transit>
+ -->
+
<!-- If uncommented, overrides the legacy_script_support value in opensrf.xml for SIP. -->
<!--
<legacy_script_support>false</legacy_script_support>
It's possible to override individual or sets of templates by putting them into
a path in front of the default template path -->
<template_paths>
- <!-- XXX we should really move these out of the default web root -->
- <path>/openils/var/web/templates</path>
+ <path>/openils/var/templates</path>
</template_paths>
<handlers>
ilscore-install:
@echo $@
$(MKDIR_P) $(DESTDIR)$(TEMPLATEDIR)
+ cp -r @srcdir@/templates/base.tt2 $(DESTDIR)$(TEMPLATEDIR)
+ cp -r @srcdir@/templates/login.tt2 $(DESTDIR)$(TEMPLATEDIR)
+ cp -r @srcdir@/templates/default $(DESTDIR)$(TEMPLATEDIR)
cp -r @srcdir@/templates/marc $(DESTDIR)$(TEMPLATEDIR)
cp -r @srcdir@/templates/password-reset $(DESTDIR)$(TEMPLATEDIR)
@echo "Installing string templates to $(DESTDIR)$(TEMPLATEDIR)"
right_parens = ")";
}
+ const char* right_percent = "";
+ const char* real_op = op;
+
+ if( !strcasecmp( op, "startwith") ) {
+ real_op = "like";
+ right_percent = "|| '%'";
+ }
+
growing_buffer* sql_buf = buffer_init( 32 );
buffer_fadd(
sql_buf,
- "%s%s %s %s %s %s%s",
+ "%s%s %s %s %s%s %s%s",
left_parens,
field_transform,
- op,
+ real_op,
left_parens,
value,
+ right_percent,
right_parens,
right_parens
);
CPAN_MODULES_MARC = \
Business::ISBN \
Business::ISBN::Data \
- MARC::Charset \
- MARC::File::XML \
- Net::Z3950::ZOOM
+ MARC::Charset \
+ MARC::File::XML \
+ Net::Z3950::ZOOM
+
+CPAN_MODULES_MARC_RECORD = \
+ MARC::Record
CPAN_MODULES_FORCE = \
Class::DBI::Frozen::301
generic_debian: install_debs test_for_libdbi_pkg install debian_sys_config install_cpan_force
ubuntu-lucid: lucid generic_ubuntu
-lucid: install_pgsql_client_debs_90 install_extra_debs
+lucid: install_pgsql_client_debs_90 install_extra_debs install_cpan_marc_record
generic_ubuntu: install_debs test_for_libdbi_pkg install debian_sys_config install_cpan_more install_cpan_safe install_cpan_force
# - COMMON TARGETS ---------------------------------------------------------
for m in $(CPAN_MODULES_MORE); do perl -MCPAN -e "install \"$$m\";"; done
# Install the CPAN modules for MARC functionality
-install_cpan_marc:
+install_cpan_marc: install_cpan_marc_record
for m in $(CPAN_MODULES_MARC); do perl -MCPAN -e "install \"$$m\";"; done
+install_cpan_marc_record:
+ for m in $(CPAN_MODULES_MARC_RECORD); do perl -MCPAN -e "install \"$$m\";"; done
+
install_cpan_force:
for m in $(CPAN_MODULES_FORCE); do \
echo "force install $$m" | perl -MCPAN -e shell ;\
<event code='1234' textcode='ITEM_DEPOSIT_PAID'>
<desc xml:lang="en-US"></desc>
</event>
+ <event code='1235' textcode='INVALID_USER_XACT_ID'>
+ <desc xml:lang="en-US">While you were trying to make payments, this account's transaction history changed. Please go back and try again.</desc>
+ </event>
var rec_type = {
- BKS : { Type : /[at]{1}/, BLvl : /[acdm]{1}/ },
- SER : { Type : /[a]{1}/, BLvl : /[bsi]{1}/ },
- VIS : { Type : /[gkro]{1}/, BLvl : /[abcdmsi]{1}/ },
- MIX : { Type : /[p]{1}/, BLvl : /[cdi]{1}/ },
- MAP : { Type : /[ef]{1}/, BLvl : /[abcdmsi]{1}/ },
- SCO : { Type : /[cd]{1}/, BLvl : /[abcdmsi]{1}/ },
- REC : { Type : /[ij]{1}/, BLvl : /[abcdmsi]{1}/ },
- COM : { Type : /[m]{1}/, BLvl : /[abcdmsi]{1}/ }
+ BKS : { Type : /[at]{1}/, BLvl : /[acdm]{1}/ },
+ SER : { Type : /[a]{1}/, BLvl : /[bsi]{1}/ },
+ VIS : { Type : /[gkro]{1}/, BLvl : /[abcdmsi]{1}/ },
+ MIX : { Type : /[p]{1}/, BLvl : /[cdi]{1}/ },
+ MAP : { Type : /[ef]{1}/, BLvl : /[abcdmsi]{1}/ },
+ SCO : { Type : /[cd]{1}/, BLvl : /[abcdmsi]{1}/ },
+ REC : { Type : /[ij]{1}/, BLvl : /[abcdmsi]{1}/ },
+ COM : { Type : /[m]{1}/, BLvl : /[abcdmsi]{1}/ },
+ AUT : { Type : /[z]{1}/, BLvl : /.{1}/ },
+ MFHD : { Type : /[uvxy]{1}/, BLvl : /.{1}/ }
};
var ff_pos = {
- Ctry : {
- _8 : {
- BKS : {start : 15, len : 3, def : ' ' },
- SER : {start : 15, len : 3, def : ' ' },
- VIS : {start : 15, len : 3, def : ' ' },
- MIX : {start : 15, len : 3, def : ' ' },
- MAP : {start : 15, len : 3, def : ' ' },
- SCO : {start : 15, len : 3, def : ' ' },
- REC : {start : 15, len : 3, def : ' ' },
- COM : {start : 15, len : 3, def : ' ' },
- }
- },
- Lang : {
- _8 : {
- BKS : {start : 35, len : 3, def : ' ' },
- SER : {start : 35, len : 3, def : ' ' },
- VIS : {start : 35, len : 3, def : ' ' },
- MIX : {start : 35, len : 3, def : ' ' },
- MAP : {start : 35, len : 3, def : ' ' },
- SCO : {start : 35, len : 3, def : ' ' },
- REC : {start : 35, len : 3, def : ' ' },
- COM : {start : 35, len : 3, def : ' ' },
- }
- },
- MRec : {
- _8 : {
- BKS : {start : 38, len : 1, def : ' ' },
- SER : {start : 38, len : 1, def : ' ' },
- VIS : {start : 38, len : 1, def : ' ' },
- MIX : {start : 38, len : 1, def : ' ' },
- MAP : {start : 38, len : 1, def : ' ' },
- SCO : {start : 38, len : 1, def : ' ' },
- REC : {start : 38, len : 1, def : ' ' },
- COM : {start : 38, len : 1, def : ' ' },
- }
- },
- DtSt : {
- _8 : {
- BKS : {start : 6, len : 1, def : ' ' },
- SER : {start : 6, len : 1, def : 'c' },
- VIS : {start : 6, len : 1, def : ' ' },
- MIX : {start : 6, len : 1, def : ' ' },
- MAP : {start : 6, len : 1, def : ' ' },
- SCO : {start : 6, len : 1, def : ' ' },
- REC : {start : 6, len : 1, def : ' ' },
- COM : {start : 6, len : 1, def : ' ' },
- }
- },
- Type : {
- ldr : {
- BKS : {start : 6, len : 1, def : 'a' },
- SER : {start : 6, len : 1, def : 'a' },
- VIS : {start : 6, len : 1, def : 'g' },
- MIX : {start : 6, len : 1, def : 'p' },
- MAP : {start : 6, len : 1, def : 'e' },
- SCO : {start : 6, len : 1, def : 'c' },
- REC : {start : 6, len : 1, def : 'i' },
- COM : {start : 6, len : 1, def : 'm' },
- }
- },
- Ctrl : {
- ldr : {
- BKS : {start : 8, len : 1, def : ' ' },
- SER : {start : 8, len : 1, def : ' ' },
- VIS : {start : 8, len : 1, def : ' ' },
- MIX : {start : 8, len : 1, def : ' ' },
- MAP : {start : 8, len : 1, def : ' ' },
- SCO : {start : 8, len : 1, def : ' ' },
- REC : {start : 8, len : 1, def : ' ' },
- COM : {start : 8, len : 1, def : ' ' },
- }
- },
- BLvl : {
- ldr : {
- BKS : {start : 7, len : 1, def : 'm' },
- SER : {start : 7, len : 1, def : 's' },
- VIS : {start : 7, len : 1, def : 'm' },
- MIX : {start : 7, len : 1, def : 'c' },
- MAP : {start : 7, len : 1, def : 'm' },
- SCO : {start : 7, len : 1, def : 'm' },
- REC : {start : 7, len : 1, def : 'm' },
- COM : {start : 7, len : 1, def : 'm' },
- }
- },
- Desc : {
- ldr : {
- BKS : {start : 18, len : 1, def : ' ' },
- SER : {start : 18, len : 1, def : ' ' },
- VIS : {start : 18, len : 1, def : ' ' },
- MIX : {start : 18, len : 1, def : ' ' },
- MAP : {start : 18, len : 1, def : ' ' },
- SCO : {start : 18, len : 1, def : ' ' },
- REC : {start : 18, len : 1, def : ' ' },
- COM : {start : 18, len : 1, def : ' ' },
- }
- },
- ELvl : {
- ldr : {
- BKS : {start : 17, len : 1, def : ' ' },
- SER : {start : 17, len : 1, def : ' ' },
- VIS : {start : 17, len : 1, def : ' ' },
- MIX : {start : 17, len : 1, def : ' ' },
- MAP : {start : 17, len : 1, def : ' ' },
- SCO : {start : 17, len : 1, def : ' ' },
- REC : {start : 17, len : 1, def : ' ' },
- COM : {start : 17, len : 1, def : ' ' },
- }
- },
- TMat : {
- _8 : {
- VIS : {start : 33, len : 1, def : ' ' },
- },
- _6 : {
- VIS : {start : 16, len : 1, def : ' ' },
- }
- },
- Indx : {
- _8 : {
- BKS : {start : 31, len : 1, def : '0' },
- MAP : {start : 31, len : 1, def : '0' },
- },
- _6 : {
- BKS : {start : 14, len : 1, def : '0' },
- MAP : {start : 14, len : 1, def : '0' },
- }
- },
- Date1 : {
- _8 : {
- BKS : {start : 7, len : 4, def : ' ' },
- SER : {start : 7, len : 4, def : ' ' },
- VIS : {start : 7, len : 4, def : ' ' },
- MIX : {start : 7, len : 4, def : ' ' },
- MAP : {start : 7, len : 4, def : ' ' },
- SCO : {start : 7, len : 4, def : ' ' },
- REC : {start : 7, len : 4, def : ' ' },
- COM : {start : 7, len : 4, def : ' ' },
- },
- },
- Date2 : {
- _8 : {
- BKS : {start : 11, len : 4, def : ' ' },
- SER : {start : 11, len : 4, def : '9' },
- VIS : {start : 11, len : 4, def : ' ' },
- MIX : {start : 11, len : 4, def : ' ' },
- MAP : {start : 11, len : 4, def : ' ' },
- SCO : {start : 11, len : 4, def : ' ' },
- REC : {start : 11, len : 4, def : ' ' },
- COM : {start : 11, len : 4, def : ' ' },
- },
- },
- LitF : {
- _8 : {
- BKS : {start : 33, len : 1, def : '0' },
- },
- _6 : {
- BKS : {start : 16, len : 1, def : '0' },
- }
- },
- Biog : {
- _8 : {
- BKS : {start : 34, len : 1, def : ' ' },
- },
- _6 : {
- BKS : {start : 17, len : 1, def : ' ' },
- }
- },
- Ills : {
- _8 : {
- BKS : {start : 18, len : 4, def : ' ' },
- },
- _6 : {
- BKS : {start : 1, len : 4, def : ' ' },
- }
- },
- Fest : {
- _8 : {
- BKS : {start : 30, len : 1, def : '0' },
- },
- _6 : {
- BKS : {start : 13, len : 1, def : '0' },
- }
- },
- Conf : {
- _8 : {
- BKS : {start : 24, len : 4, def : ' ' },
- SER : {start : 25, len : 3, def : ' ' },
- },
- _6 : {
- BKS : {start : 7, len : 4, def : ' ' },
- SER : {start : 8, len : 3, def : ' ' },
- }
- },
- GPub : {
- _8 : {
- BKS : {start : 28, len : 1, def : ' ' },
- SER : {start : 28, len : 1, def : ' ' },
- VIS : {start : 28, len : 1, def : ' ' },
- MAP : {start : 28, len : 1, def : ' ' },
- COM : {start : 28, len : 1, def : ' ' },
- },
- _6 : {
- BKS : {start : 11, len : 1, def : ' ' },
- SER : {start : 11, len : 1, def : ' ' },
- VIS : {start : 11, len : 1, def : ' ' },
- MAP : {start : 11, len : 1, def : ' ' },
- COM : {start : 11, len : 1, def : ' ' },
- }
- },
- Audn : {
- _8 : {
- BKS : {start : 22, len : 1, def : ' ' },
- SER : {start : 22, len : 1, def : ' ' },
- VIS : {start : 22, len : 1, def : ' ' },
- SCO : {start : 22, len : 1, def : ' ' },
- REC : {start : 22, len : 1, def : ' ' },
- COM : {start : 22, len : 1, def : ' ' },
- },
- _6 : {
- BKS : {start : 5, len : 1, def : ' ' },
- SER : {start : 5, len : 1, def : ' ' },
- VIS : {start : 5, len : 1, def : ' ' },
- SCO : {start : 5, len : 1, def : ' ' },
- REC : {start : 5, len : 1, def : ' ' },
- COM : {start : 5, len : 1, def : ' ' },
- }
- },
- Form : {
- _8 : {
- BKS : {start : 23, len : 1, def : ' ' },
- SER : {start : 23, len : 1, def : ' ' },
- VIS : {start : 29, len : 1, def : ' ' },
- MIX : {start : 23, len : 1, def : ' ' },
- MAP : {start : 29, len : 1, def : ' ' },
- SCO : {start : 23, len : 1, def : ' ' },
- REC : {start : 23, len : 1, def : ' ' },
- },
- _6 : {
- BKS : {start : 6, len : 1, def : ' ' },
- SER : {start : 6, len : 1, def : ' ' },
- VIS : {start : 12, len : 1, def : ' ' },
- MIX : {start : 6, len : 1, def : ' ' },
- MAP : {start : 12, len : 1, def : ' ' },
- SCO : {start : 6, len : 1, def : ' ' },
- REC : {start : 6, len : 1, def : ' ' },
- }
- },
- 'S/L' : {
- _8 : {
- SER : {start : 34, len : 1, def : '0' },
- },
- _6 : {
- SER : {start : 17, len : 1, def : '0' },
- }
- },
- 'Alph' : {
- _8 : {
- SER : {start : 33, len : 1, def : ' ' },
- },
- _6 : {
- SER : {start : 16, len : 1, def : ' ' },
- }
- },
+ Ctry : {
+ _8 : {
+ BKS : {start : 15, len : 3, def : ' ' },
+ SER : {start : 15, len : 3, def : ' ' },
+ VIS : {start : 15, len : 3, def : ' ' },
+ MIX : {start : 15, len : 3, def : ' ' },
+ MAP : {start : 15, len : 3, def : ' ' },
+ SCO : {start : 15, len : 3, def : ' ' },
+ REC : {start : 15, len : 3, def : ' ' },
+ COM : {start : 15, len : 3, def : ' ' },
+ }
+ },
+ Lang : {
+ _8 : {
+ BKS : {start : 35, len : 3, def : ' ' },
+ SER : {start : 35, len : 3, def : ' ' },
+ VIS : {start : 35, len : 3, def : ' ' },
+ MIX : {start : 35, len : 3, def : ' ' },
+ MAP : {start : 35, len : 3, def : ' ' },
+ SCO : {start : 35, len : 3, def : ' ' },
+ REC : {start : 35, len : 3, def : ' ' },
+ COM : {start : 35, len : 3, def : ' ' },
+ }
+ },
+ MRec : {
+ _8 : {
+ BKS : {start : 38, len : 1, def : ' ' },
+ SER : {start : 38, len : 1, def : ' ' },
+ VIS : {start : 38, len : 1, def : ' ' },
+ MIX : {start : 38, len : 1, def : ' ' },
+ MAP : {start : 38, len : 1, def : ' ' },
+ SCO : {start : 38, len : 1, def : ' ' },
+ REC : {start : 38, len : 1, def : ' ' },
+ COM : {start : 38, len : 1, def : ' ' },
+ }
+ },
+ DtSt : {
+ _8 : {
+ BKS : {start : 6, len : 1, def : ' ' },
+ SER : {start : 6, len : 1, def : 'c' },
+ VIS : {start : 6, len : 1, def : ' ' },
+ MIX : {start : 6, len : 1, def : ' ' },
+ MAP : {start : 6, len : 1, def : ' ' },
+ SCO : {start : 6, len : 1, def : ' ' },
+ REC : {start : 6, len : 1, def : ' ' },
+ COM : {start : 6, len : 1, def : ' ' },
+ }
+ },
+ Type : {
+ ldr : {
+ BKS : {start : 6, len : 1, def : 'a' },
+ SER : {start : 6, len : 1, def : 'a' },
+ VIS : {start : 6, len : 1, def : 'g' },
+ MIX : {start : 6, len : 1, def : 'p' },
+ MAP : {start : 6, len : 1, def : 'e' },
+ SCO : {start : 6, len : 1, def : 'c' },
+ REC : {start : 6, len : 1, def : 'i' },
+ COM : {start : 6, len : 1, def : 'm' },
+ AUT : {start : 6, len : 1, def : 'z' },
+ MFHD : {start : 6, len : 1, def : 'y' }
+
+ }
+ },
+ Ctrl : {
+ ldr : {
+ BKS : {start : 8, len : 1, def : ' ' },
+ SER : {start : 8, len : 1, def : ' ' },
+ VIS : {start : 8, len : 1, def : ' ' },
+ MIX : {start : 8, len : 1, def : ' ' },
+ MAP : {start : 8, len : 1, def : ' ' },
+ SCO : {start : 8, len : 1, def : ' ' },
+ REC : {start : 8, len : 1, def : ' ' },
+ COM : {start : 8, len : 1, def : ' ' },
+ }
+ },
+ BLvl : {
+ ldr : {
+ BKS : {start : 7, len : 1, def : 'm' },
+ SER : {start : 7, len : 1, def : 's' },
+ VIS : {start : 7, len : 1, def : 'm' },
+ MIX : {start : 7, len : 1, def : 'c' },
+ MAP : {start : 7, len : 1, def : 'm' },
+ SCO : {start : 7, len : 1, def : 'm' },
+ REC : {start : 7, len : 1, def : 'm' },
+ COM : {start : 7, len : 1, def : 'm' },
+ }
+ },
+ Desc : {
+ ldr : {
+ BKS : {start : 18, len : 1, def : ' ' },
+ SER : {start : 18, len : 1, def : ' ' },
+ VIS : {start : 18, len : 1, def : ' ' },
+ MIX : {start : 18, len : 1, def : ' ' },
+ MAP : {start : 18, len : 1, def : ' ' },
+ SCO : {start : 18, len : 1, def : ' ' },
+ REC : {start : 18, len : 1, def : ' ' },
+ COM : {start : 18, len : 1, def : ' ' },
+ }
+ },
+ Item : {
+ ldr : {
+ MFHD : {start : 18, len : 1, def : 'i' }
+ }
+ },
+ ELvl : {
+ ldr : {
+ BKS : {start : 17, len : 1, def : ' ' },
+ SER : {start : 17, len : 1, def : ' ' },
+ VIS : {start : 17, len : 1, def : ' ' },
+ MIX : {start : 17, len : 1, def : ' ' },
+ MAP : {start : 17, len : 1, def : ' ' },
+ SCO : {start : 17, len : 1, def : ' ' },
+ REC : {start : 17, len : 1, def : ' ' },
+ COM : {start : 17, len : 1, def : ' ' },
+ AUT : {start : 17, len : 1, def : 'n' },
+ MFHD : {start : 17, len : 1, def : 'u' }
+ }
+ },
+ TMat : {
+ _8 : {
+ VIS : {start : 33, len : 1, def : ' ' },
+ },
+ _6 : {
+ VIS : {start : 16, len : 1, def : ' ' },
+ }
+ },
+ Indx : {
+ _8 : {
+ BKS : {start : 31, len : 1, def : '0' },
+ MAP : {start : 31, len : 1, def : '0' },
+ },
+ _6 : {
+ BKS : {start : 14, len : 1, def : '0' },
+ MAP : {start : 14, len : 1, def : '0' },
+ }
+ },
+ Date1 : {
+ _8 : {
+ BKS : {start : 7, len : 4, def : ' ' },
+ SER : {start : 7, len : 4, def : ' ' },
+ VIS : {start : 7, len : 4, def : ' ' },
+ MIX : {start : 7, len : 4, def : ' ' },
+ MAP : {start : 7, len : 4, def : ' ' },
+ SCO : {start : 7, len : 4, def : ' ' },
+ REC : {start : 7, len : 4, def : ' ' },
+ COM : {start : 7, len : 4, def : ' ' },
+ },
+ },
+ Date2 : {
+ _8 : {
+ BKS : {start : 11, len : 4, def : ' ' },
+ SER : {start : 11, len : 4, def : '9' },
+ VIS : {start : 11, len : 4, def : ' ' },
+ MIX : {start : 11, len : 4, def : ' ' },
+ MAP : {start : 11, len : 4, def : ' ' },
+ SCO : {start : 11, len : 4, def : ' ' },
+ REC : {start : 11, len : 4, def : ' ' },
+ COM : {start : 11, len : 4, def : ' ' },
+ },
+ },
+ LitF : {
+ _8 : {
+ BKS : {start : 33, len : 1, def : '0' },
+ },
+ _6 : {
+ BKS : {start : 16, len : 1, def : '0' },
+ }
+ },
+ Biog : {
+ _8 : {
+ BKS : {start : 34, len : 1, def : ' ' },
+ },
+ _6 : {
+ BKS : {start : 17, len : 1, def : ' ' },
+ }
+ },
+ Ills : {
+ _8 : {
+ BKS : {start : 18, len : 4, def : ' ' },
+ },
+ _6 : {
+ BKS : {start : 1, len : 4, def : ' ' },
+ }
+ },
+ Fest : {
+ _8 : {
+ BKS : {start : 30, len : 1, def : '0' },
+ },
+ _6 : {
+ BKS : {start : 13, len : 1, def : '0' },
+ }
+ },
+ Conf : {
+ _8 : {
+ BKS : {start : 24, len : 4, def : ' ' },
+ SER : {start : 25, len : 3, def : ' ' },
+ },
+ _6 : {
+ BKS : {start : 7, len : 4, def : ' ' },
+ SER : {start : 8, len : 3, def : ' ' },
+ }
+ },
+ GPub : {
+ _8 : {
+ BKS : {start : 28, len : 1, def : ' ' },
+ SER : {start : 28, len : 1, def : ' ' },
+ VIS : {start : 28, len : 1, def : ' ' },
+ MAP : {start : 28, len : 1, def : ' ' },
+ COM : {start : 28, len : 1, def : ' ' },
+ },
+ _6 : {
+ BKS : {start : 11, len : 1, def : ' ' },
+ SER : {start : 11, len : 1, def : ' ' },
+ VIS : {start : 11, len : 1, def : ' ' },
+ MAP : {start : 11, len : 1, def : ' ' },
+ COM : {start : 11, len : 1, def : ' ' },
+ }
+ },
+ Audn : {
+ _8 : {
+ BKS : {start : 22, len : 1, def : ' ' },
+ SER : {start : 22, len : 1, def : ' ' },
+ VIS : {start : 22, len : 1, def : ' ' },
+ SCO : {start : 22, len : 1, def : ' ' },
+ REC : {start : 22, len : 1, def : ' ' },
+ COM : {start : 22, len : 1, def : ' ' },
+ },
+ _6 : {
+ BKS : {start : 5, len : 1, def : ' ' },
+ SER : {start : 5, len : 1, def : ' ' },
+ VIS : {start : 5, len : 1, def : ' ' },
+ SCO : {start : 5, len : 1, def : ' ' },
+ REC : {start : 5, len : 1, def : ' ' },
+ COM : {start : 5, len : 1, def : ' ' },
+ }
+ },
+ Form : {
+ _8 : {
+ BKS : {start : 23, len : 1, def : ' ' },
+ SER : {start : 23, len : 1, def : ' ' },
+ VIS : {start : 29, len : 1, def : ' ' },
+ MIX : {start : 23, len : 1, def : ' ' },
+ MAP : {start : 29, len : 1, def : ' ' },
+ SCO : {start : 23, len : 1, def : ' ' },
+ REC : {start : 23, len : 1, def : ' ' },
+ },
+ _6 : {
+ BKS : {start : 6, len : 1, def : ' ' },
+ SER : {start : 6, len : 1, def : ' ' },
+ VIS : {start : 12, len : 1, def : ' ' },
+ MIX : {start : 6, len : 1, def : ' ' },
+ MAP : {start : 12, len : 1, def : ' ' },
+ SCO : {start : 6, len : 1, def : ' ' },
+ REC : {start : 6, len : 1, def : ' ' },
+ }
+ },
+ 'S/L' : {
+ _8 : {
+ SER : {start : 34, len : 1, def : '0' },
+ },
+ _6 : {
+ SER : {start : 17, len : 1, def : '0' },
+ }
+ },
+ 'Alph' : {
+ _8 : {
+ SER : {start : 33, len : 1, def : ' ' },
+ },
+ _6 : {
+ SER : {start : 16, len : 1, def : ' ' },
+ }
+ },
+ "GeoDiv" : {
+ "_8" : {
+ "AUT" : {"start" : 6, "len" : 1, "def" : ' ' }
+ }
+ },
+ "Roman" : {
+ "_8" : {
+ "AUT" : {"start" : 7, "len" : 1, "def" : ' ' }
+ }
+ },
+ "CatLang" : {
+ "_8" : {
+ "AUT" : {"start" : 8, "len" : 1, "def" : ' ' }
+ }
+ },
+ "Kind" : {
+ "_8" : {
+ "AUT" : {"start" : 9, "len" : 1, "def" : ' ' }
+ }
+ },
+ "Rules" : {
+ "_8" : {
+ "AUT" : {"start" : 10, "len" : 1, "def" : ' ' }
+ }
+ },
+ "SHSys" : {
+ "_8" : {
+ "AUT" : {"start" : 11, "len" : 1, "def" : ' ' }
+ }
+ },
+ "SerType" : {
+ "_8" : {
+ "AUT" : {"start" : 12, "len" : 1, "def" : ' ' }
+ }
+ },
+ "SerNum" : {
+ "_8" : {
+ "AUT" : {"start" : 13, "len" : 1, "def" : ' ' }
+ }
+ },
+ "HeadMain" : {
+ "_8" : {
+ "AUT" : {"start" : 14, "len" : 1, "def" : ' ' }
+ }
+ },
+ "HeadSubj" : {
+ "_8" : {
+ "AUT" : {"start" : 15, "len" : 1, "def" : ' ' }
+ }
+ },
+ "HeadSer" : {
+ "_8" : {
+ "AUT" : {"start" : 16, "len" : 1, "def" : ' ' }
+ }
+ },
+ "TypeSubd" : {
+ "_8" : {
+ "AUT" : {"start" : 17, "len" : 1, "def" : ' ' }
+ }
+ },
+ "TypeGov" : {
+ "_8" : {
+ "AUT" : {"start" : 28, "len" : 1, "def" : ' ' }
+ }
+ },
+ "RefEval" : {
+ "_8" : {
+ "AUT" : {"start" : 29, "len" : 1, "def" : ' ' }
+ }
+ },
+ "RecUpd" : {
+ "_8" : {
+ "AUT" : {"start" : 31, "len" : 1, "def" : ' ' }
+ }
+ },
+ "NameDiff" : {
+ "_8" : {
+ "AUT" : {"start" : 32, "len" : 1, "def" : ' ' }
+ }
+ },
+ "Level" : {
+ "_8" : {
+ "AUT" : {"start" : 33, "len" : 1, "def" : ' ' }
+ }
+ },
+ "ModRec" : {
+ "_8" : {
+ "AUT" : {"start" : 38, "len" : 1, "def" : ' ' }
+ }
+ },
+ "CatSrc" : {
+ "_8" : {
+ "AUT" : {"start" : 39, "len" : 1, "def" : ' ' }
+ }
+ }
};
lib/OpenILS/SIP/Transaction/Checkin.pm
lib/OpenILS/SIP/Transaction/Checkout.pm
lib/OpenILS/SIP/Transaction/Renew.pm
+lib/Template/Plugin/ResolverResolver.pm
lib/OpenILS/Template/Plugin/Unicode.pm
lib/OpenILS/Template/Plugin/WebSession.pm
lib/OpenILS/Template/Plugin/WebUtils.pm
my $e = new_editor(authtoken => $auth, xact => 1);
return $e->die_event unless $e->checkauth;
my $user = $e->retrieve_actor_user($user_id) or return $e->die_event;
+ # No deleting yourself - UI is supposed to stop you first, though.
+ return $e->die_event unless $e->requestor->id != $user->id;
return $e->die_event unless $e->allowed('DELETE_USER', $user->home_ou);
+ # Check if you are allowed to mess with this patron permission group at all
+ my $session = OpenSRF::AppSession->create( "open-ils.storage" );
+ my $evt = group_perm_failed($session, $e->requestor, $user);
+ return $e->die_event($evt) if $evt;
my $stat = $e->json_query(
{from => ['actor.usr_delete', $user_id, $dest_user_id]})->[0]
or return $e->die_event;
my $editor = new_editor();
- my $link_count;
+ my $link_count = [];
my @clean_records;
for my $auth ( @$records ) {
# Protection against SQL injection? Might be overkill.
return $link_count;
}
+__PACKAGE__->register_method(
+ "method" => "retrieve_acs",
+ "api_name" => "open-ils.cat.authority.control_set.retrieve",
+ "api_level" => 1,
+ "stream" => 1,
+ "argc" => 2,
+ "signature" => {
+ "desc" => q/Retrieve authority.control_set objects with fleshed
+ thesauri and authority fields/,
+ "params" => [
+ {"name" => "limit", "desc" => "limit (optional; default 15)", "type" => "number"},
+ {"name" => "offset", "desc" => "offset doptional; default 0)", "type" => "number"},
+ {"name" => "focus", "desc" => "optionally make sure the acs object with ID matching this value comes at the top of the result set (only works with offset 0)", "type" => "number"}
+ ]
+ }
+);
+
+# XXX I don't think this really needs to be protected by perms, or does it?
+sub retrieve_acs {
+ my $self = shift;
+ my $client = shift;
+
+ my ($limit, $offset, $focus) = map int, @_;
+
+ $limit ||= 15;
+ $offset ||= 0;
+ $focus ||= undef;
+
+ my $e = new_editor;
+ my $order_by = [
+ {"class" => "acs", "field" => "name"}
+ ];
+
+ # Here is the magic that let's us say that a given acsaf
+ # will be our first result.
+ unshift @$order_by, {
+ "class" => "acs", "field" => "id",
+ "transform" => "numeric_eq", "params" => [$focus],
+ "direction" => "desc"
+ } if $focus;
+
+ my $sets = $e->search_authority_control_set([
+ {"id" => {"!=" => undef}}, {
+ "flesh" => 1,
+ "flesh_fields" => {"acs" => [qw/thesauri authority_fields/]},
+ "order_by" => $order_by,
+ "limit" => $limit,
+ "offset" => $offset
+ }
+ ]) or return $e->die_event;
+
+ $e->disconnect;
+
+ $client->respond($_) foreach @$sets;
+ return undef;
+}
+
+__PACKAGE__->register_method(
+ "method" => "retrieve_acsaf",
+ "api_name" => "open-ils.cat.authority.control_set_authority_field.retrieve",
+ "api_level" => 1,
+ "stream" => 1,
+ "argc" => 2,
+ "signature" => {
+ "desc" => q/Retrieve authority.control_set_authority_field objects with
+ fleshed bib_fields and axes/,
+ "params" => [
+ {"name" => "limit", "desc" => "limit (optional; default 15)", "type" => "number"},
+ {"name" => "offset", "desc" => "offset (optional; default 0)", "type" => "number"},
+ {"name" => "control_set", "desc" => "optionally constrain by value of acsaf.control_set field", "type" => "number"},
+ {"name" => "focus", "desc" => "optionally make sure the acsaf object with ID matching this value comes at the top of the result set (only works with offset 0)"}
+ ]
+ }
+);
+
+sub retrieve_acsaf {
+ my $self = shift;
+ my $client = shift;
+
+ my ($limit, $offset, $control_set, $focus) = map int, @_;
+
+ $limit ||= 15;
+ $offset ||= 0;
+ $control_set ||= undef;
+ $focus ||= undef;
+
+ my $e = new_editor;
+ my $where = {
+ "control_set" => ($control_set ? $control_set : {"!=" => undef})
+ };
+ my $order_by = [
+ {"class" => "acsaf", "field" => "main_entry", "direction" => "desc"},
+ {"class" => "acsaf", "field" => "id"}
+ ];
+
+ unshift @$order_by, {
+ "class" => "acsaf", "field" => "id",
+ "transform" => "numeric_eq", "params" => [$focus],
+ "direction" => "desc"
+ } if $focus;
+
+ my $fields = $e->search_authority_control_set_authority_field([
+ $where, {
+ "flesh" => 2,
+ "flesh_fields" => {
+ "acsaf" => ["bib_fields", "axis_maps"],
+ "abaafm" => ["axis"]
+ },
+ "order_by" => $order_by,
+ "limit" => $limit,
+ "offset" => $offset
+ }
+ ]) or return $e->die_event;
+
+ $e->disconnect;
+
+ $client->respond($_) foreach @$fields;
+ return undef;
+}
+
1;
my $ses = OpenSRF::AppSession->create('open-ils.trigger');
$ses->request('open-ils.trigger.event.autocreate', 'checkout.damaged', $circ, $circ->circ_lib);
+ my $evt2 = OpenILS::Utils::Penalty->calculate_penalties($e, $circ->usr->id, $e->requestor->ws_ou);
+ return $evt2 if $evt2;
+
return undef;
} else {
my $script_libs;
my $legacy_script_support = 0;
my $booking_status;
+my $opac_renewal_use_circ_lib;
sub determine_booking_status {
unless (defined $booking_status) {
skip_rental_fee
use_booking
generate_lost_overdue
+ clear_expired
+ retarget_mode
+ hold_as_transit
/;
my $card = $e->search_actor_card({barcode => $self->patron_barcode})->[0]
or return $self->bail_on_events(OpenILS::Event->new('ACTOR_USER_NOT_FOUND'));
- $patron = $e->search_actor_user([{card => $card->id}, $flesh])->[0]
+ $patron = $e->retrieve_actor_user($card->usr)
or return $self->bail_on_events(OpenILS::Event->new('ACTOR_USER_NOT_FOUND'));
+ # Use the card we looked up, not the patron's primary, for card active checks
+ $patron->card($card);
+
} else {
if( my $copy = $self->copy ) {
$logger->info("circulator: circ policy test found matchpoint built via rows " . $results->[0]->{buildrows});
$self->circ_matrix_matchpoint($self->editor->retrieve_config_circ_matrix_matchpoint($mp));
$self->circ_matrix_matchpoint->duration_rule($self->editor->retrieve_config_rules_circ_duration($results->[0]->{duration_rule}));
- if($results->[0]->{renewals}) {
+ if(defined($results->[0]->{renewals})) {
$self->circ_matrix_matchpoint->duration_rule->max_renewals($results->[0]->{renewals});
}
$self->circ_matrix_matchpoint->recurring_fine_rule($self->editor->retrieve_config_rules_recurring_fine($results->[0]->{recurring_fine_rule}));
- if($results->[0]->{grace_period}) {
+ if(defined($results->[0]->{grace_period})) {
$self->circ_matrix_matchpoint->recurring_fine_rule->grace_period($results->[0]->{grace_period});
}
$self->circ_matrix_matchpoint->max_fine_rule($self->editor->retrieve_config_rules_max_fine($results->[0]->{max_fine_rule}));
# ------------------------------------------------------------------------------
# If the circ.checkout_fill_related_hold setting is turned on and no hold for
# the patron directly targets the checked out item, see if there is another hold
-# (with hold_type T or V) for the patron that could be fulfilled by the checked
-# out item. Fulfill the oldest hold and only fulfill 1 of them.
+# for the patron that could be fulfilled by the checked out item. Fulfill the
+# oldest hold and only fulfill 1 of them.
+#
+# For "another hold":
+#
+# First, check for one that the copy matches via hold_copy_map, ensuring that
+# *any* hold type that this copy could fill may end up filled.
+#
+# Then, if circ.checkout_fill_related_hold_exact_match_only is not enabled, look
+# for a Title (T) or Volume (V) hold that matches the item. This allows items
+# that are non-requestable to count as capturing those hold types.
# ------------------------------------------------------------------------------
sub find_related_user_hold {
my($self, $copy, $patron) = @_;
select => {ahr => ['id']},
from => {
ahr => {
+ ahcm => {
+ field => 'hold',
+ fkey => 'id'
+ }
+ }
+ },
+ where => {
+ '+ahr' => {
+ usr => $patron->id,
+ fulfillment_time => undef,
+ cancel_time => undef,
+ '-or' => [
+ {expire_time => undef},
+ {expire_time => {'>' => 'now'}}
+ ]
+ },
+ '+ahcm' => {
+ target_copy => $self->copy->id
+ },
+ },
+ order_by => {ahr => {request_time => {direction => 'asc'}}},
+ limit => 1
+ };
+
+ my $hold_info = $e->json_query($args)->[0];
+ return $e->retrieve_action_hold_request($hold_info->{id}) if $hold_info;
+ return undef if $U->ou_ancestor_setting_value(
+ $self->circ_lib, 'circ.checkout_fills_related_hold_exact_match_only', $e);
+
+ # find the oldest unfulfilled hold that has not yet hit the holds shelf.
+ $args = {
+ select => {ahr => ['id']},
+ from => {
+ ahr => {
acp => {
field => 'id',
fkey => 'current_copy',
limit => 1
};
- my $hold_info = $e->json_query($args)->[0];
+ $hold_info = $e->json_query($args)->[0];
return $e->retrieve_action_hold_request($hold_info->{id}) if $hold_info;
return undef;
}
)->[0]
);
+ # transit from X to X for whatever reason has no min interval
+ return if $self->transit->source == $self->transit->dest;
+
my $seconds = OpenSRF::Utils->interval_to_seconds($interval);
my $t_start = DateTime::Format::ISO8601->new->parse_datetime(cleanse_ISO8601($self->transit->source_send_time));
my $horizon = $t_start->add(seconds => $seconds);
if $horizon > DateTime->now;
}
+# Retarget local holds at checkin
+sub checkin_retarget {
+ my $self = shift;
+ return unless $self->retarget_mode =~ m/retarget/; # Retargeting?
+ return unless $self->is_checkin; # Renewals need not be checked
+ return if $self->capture eq 'nocapture'; # Not capturing holds anyway? Move on.
+ return if $self->is_precat; # No holds for precats
+ return unless $self->circ_lib == $self->copy->circ_lib; # Item isn't "home"? Don't check.
+ return unless $self->copy->holdable; # Not holdable, shouldn't capture holds.
+ # Specifically target items that are likely new (by status ID)
+ unless ($self->retarget_mode =~ m/\.all/) {
+ my $status = $U->copy_status($self->copy->status)->id;
+ return unless $status == OILS_COPY_STATUS_IN_PROCESS;
+ }
+
+ # Fetch holds for the bib
+ my ($result) = $holdcode->method_lookup('open-ils.circ.holds.retrieve_all_from_title')->run(
+ $self->editor->authtoken,
+ $self->title->id,
+ {
+ capture_time => undef, # No touching captured holds
+ frozen => 'f', # Don't bother with frozen holds
+ pickup_lib => $self->circ_lib # Only holds actually here
+ });
+
+ # Error? Skip the step.
+ return if exists $result->{"ilsevent"};
+
+ # Assemble holds
+ my $holds = [];
+ foreach my $holdlist (keys %{$result}) {
+ push @$holds, @{$result->{$holdlist}};
+ }
+
+ return if scalar(@$holds) == 0; # No holds, no retargeting
+
+ # Loop over holds in request-ish order
+ # Stage 1: Get them into request-ish order
+ # Also grab type and target for skipping low hanging ones
+ $result = $self->editor->json_query({
+ "select" => { "ahr" => ["id", "hold_type", "target"] },
+ "from" => { "ahr" => { "au" => { "fkey" => "usr", "join" => "pgt"} } },
+ "where" => { "id" => $holds },
+ "order_by" => [
+ { "class" => "pgt", "field" => "hold_priority"},
+ { "class" => "ahr", "field" => "cut_in_line", "direction" => "desc", "transform" => "coalesce", "params" => ['f']},
+ { "class" => "ahr", "field" => "selection_depth", "direction" => "desc"},
+ { "class" => "ahr", "field" => "request_time"}
+ ]
+ });
+
+ # Stage 2: Loop!
+ if (ref $result eq "ARRAY" and scalar @$result) {
+ foreach (@{$result}) {
+ # Copy level, but not this copy?
+ next if ($_->{hold_type} eq 'C' or $_->{hold_type} eq 'R' or $_->{hold_type} eq 'F'
+ and $_->{target} != $self->copy->id);
+ # Volume level, but not this volume?
+ next if ($_->{hold_type} eq 'V' and $_->{target} != $self->volume->id);
+ # So much for easy stuff, attempt a retarget!
+ my $tresult = $U->storagereq('open-ils.storage.action.hold_request.copy_targeter', undef, $_->{id}, $self->copy->id);
+ if(ref $tresult eq "ARRAY" and scalar @$tresult) {
+ last if(exists $tresult->[0]->{found_copy} and $tresult->[0]->{found_copy});
+ }
+ }
+ }
+}
sub do_checkin {
my $self = shift;
unless $self->copy;
$self->check_transit_checkin_interval;
+ $self->checkin_retarget;
# the renew code and mk_env should have already found our circulation object
unless( $self->circ ) {
$logger->debug("circulator: circlib=$circ_lib, workstation=".$self->circ_lib);
- if( $circ_lib == $self->circ_lib) {
+ if( $circ_lib == $self->circ_lib and not ($self->hold_as_transit and $self->remote_hold) ) {
# copy is where it needs to be, either for hold or reshelving
$self->checkin_handle_precat();
$U->copy_status($self->copy->status)->id ==
OILS_COPY_STATUS_ON_HOLDS_SHELF;
+ # Attempt to clear shelf expired holds for this copy
+ $holdcode->method_lookup('open-ils.circ.hold.clear_shelf.process')->run($self->editor->authtoken, $self->circ_lib, $self->copy->id)
+ if($self->clear_expired);
+
# find the hold that put us on the holds shelf
my $holds = $self->editor->search_action_hold_request(
{
$logger->info("circulator: we found a captured, un-fulfilled hold [".
$hold->id. "] for copy ".$self->copy->barcode);
- if( $hold->pickup_lib == $self->circ_lib ) {
+ if( $hold->pickup_lib == $self->circ_lib and not $self->hold_as_transit ) {
$logger->info("circulator: hold is for here .. we're done: ".$self->copy->barcode);
return 1;
}
return 0 if $self->bail_out;
- if( $hold->pickup_lib == $self->circ_lib ) {
+ if( $hold->pickup_lib == $self->circ_lib && not $self->hold_as_transit ) {
# This hold was captured in the correct location
$copy->status(OILS_COPY_STATUS_ON_HOLDS_SHELF);
my $transit = $self->transit;
- if( $transit->dest != $self->circ_lib ) {
+ if( $transit->dest != $self->circ_lib or ($self->hold_as_transit && $transit->copy_status == OILS_COPY_STATUS_ON_HOLDS_SHELF) ) {
# - this item is in-transit to a different location
+ # - Or we are capturing holds as transits, so why create a new transit?
my $tid = $transit->id;
my $loc = $self->circ_lib;
$self->renewal_remaining( $circ->renewal_remaining - 1 );
$self->circ($circ);
+ # Opac renewal - re-use circ library from original circ (unless told not to)
+ if($self->opac_renewal) {
+ unless(defined($opac_renewal_use_circ_lib)) {
+ my $use_circ_lib = $self->editor->retrieve_config_global_flag('circ.opac_renewal.use_original_circ_lib');
+ if($use_circ_lib and $U->is_true($use_circ_lib->enabled)) {
+ $opac_renewal_use_circ_lib = 1;
+ }
+ else {
+ $opac_renewal_use_circ_lib = 0;
+ }
+ }
+ $self->circ_lib($circ->circ_lib) if($opac_renewal_use_circ_lib);
+ }
+
# Run the fine generator against the old circ
$self->generate_fines_start;
}
my $second_cstore_arg = {"no_i18n" => scalar($no_i18n)};
+ $second_cstore_arg->{"order_by"} = {"acpl" => "name"};
if ($flesh_owning_lib) {
$second_cstore_arg->{"flesh"} = 1;
$second_cstore_arg->{"flesh_fields"} = {"acpl" => ["owning_lib"]};
my $apputils = "OpenILS::Application::AppUtils";
my $U = $apputils;
+__PACKAGE__->register_method(
+ method => "test_and_create_hold_batch",
+ api_name => "open-ils.circ.holds.test_and_create.batch",
+ stream => 1,
+ signature => {
+ desc => q/This is for batch creating a set of holds where every field is identical except for the targets./,
+ params => [
+ { desc => 'Authentication token', type => 'string' },
+ { desc => 'Hash of named parameters. Same as for open-ils.circ.title_hold.is_possible, though the pertinent target field is automatically populated based on the hold_type and the specified list of targets.', type => 'object'},
+ { desc => 'Array of target ids', type => 'array' }
+ ],
+ return => {
+ desc => 'Array of hold ID on success, -1 on missing arg, event (or ref to array of events) on error(s)',
+ },
+ }
+);
+
+__PACKAGE__->register_method(
+ method => "test_and_create_hold_batch",
+ api_name => "open-ils.circ.holds.test_and_create.batch.override",
+ stream => 1,
+ signature => {
+ desc => '@see open-ils.circ.holds.test_and_create.batch',
+ }
+);
+
+
+sub test_and_create_hold_batch {
+ my( $self, $conn, $auth, $params, $target_list ) = @_;
+
+ my $override = 1 if $self->api_name =~ /override/;
+
+ my $e = new_editor(authtoken=>$auth);
+ return $e->die_event unless $e->checkauth;
+ $$params{'requestor'} = $e->requestor->id;
+
+ my $target_field;
+ if ($$params{'hold_type'} eq 'T') { $target_field = 'titleid'; }
+ elsif ($$params{'hold_type'} eq 'C') { $target_field = 'copy_id'; }
+ elsif ($$params{'hold_type'} eq 'R') { $target_field = 'copy_id'; }
+ elsif ($$params{'hold_type'} eq 'F') { $target_field = 'copy_id'; }
+ elsif ($$params{'hold_type'} eq 'I') { $target_field = 'issuanceid'; }
+ elsif ($$params{'hold_type'} eq 'V') { $target_field = 'volume_id'; }
+ elsif ($$params{'hold_type'} eq 'M') { $target_field = 'mrid'; }
+ elsif ($$params{'hold_type'} eq 'P') { $target_field = 'partid'; }
+ else { return undef; }
+
+ foreach (@$target_list) {
+ $$params{$target_field} = $_;
+ my $res;
+ if (! $override) {
+ ($res) = $self->method_lookup(
+ 'open-ils.circ.title_hold.is_possible')->run($auth, $params);
+ }
+ if ($override || $res->{'success'} == 1) {
+ my $ahr = construct_hold_request_object($params);
+ my ($res2) = $self->method_lookup(
+ $override
+ ? 'open-ils.circ.holds.create.override'
+ : 'open-ils.circ.holds.create'
+ )->run($auth, $ahr);
+ $res2 = {
+ 'target' => $$params{$target_field},
+ 'result' => $res2
+ };
+ $conn->respond($res2);
+ } else {
+ $res = {
+ 'target' => $$params{$target_field},
+ 'result' => $res
+ };
+ $conn->respond($res);
+ }
+ }
+ return undef;
+}
+
+sub construct_hold_request_object {
+ my ($params) = @_;
+
+ my $ahr = Fieldmapper::action::hold_request->new;
+ $ahr->isnew('1');
+
+ foreach my $field (keys %{ $params }) {
+ if ($field eq 'depth') { $ahr->selection_depth($$params{$field}); }
+ elsif ($field eq 'patronid') {
+ $ahr->usr($$params{$field}); }
+ elsif ($field eq 'titleid') { $ahr->target($$params{$field}); }
+ elsif ($field eq 'copy_id') { $ahr->target($$params{$field}); }
+ elsif ($field eq 'issuanceid') { $ahr->target($$params{$field}); }
+ elsif ($field eq 'volume_id') { $ahr->target($$params{$field}); }
+ elsif ($field eq 'mrid') { $ahr->target($$params{$field}); }
+ elsif ($field eq 'partid') { $ahr->target($$params{$field}); }
+ else {
+ $ahr->$field($$params{$field});
+ }
+ }
+ return $ahr;
+}
__PACKAGE__->register_method(
method => "create_hold_batch",
"flesh_fields" => {
"ahr" => ["usr", "current_copy"],
"au" => ["card"],
- "acp" => ["location", "call_number"],
+ "acp" => ["location", "call_number", "parts"],
"acn" => ["record","prefix","suffix"]
}
}
my $pickup_lib = $params{pickup_lib};
my $hold_type = $params{hold_type} || 'T';
my $selection_ou = $params{selection_ou} || $pickup_lib;
+ my $holdable_formats = $params{holdable_formats};
my $copy;
my @status = ();
for my $rec (@recs) {
@status = _check_title_hold_is_possible(
- $rec, $depth, $request_lib, $patron, $e->requestor, $pickup_lib, $selection_ou
+ $rec, $depth, $request_lib, $patron, $e->requestor, $pickup_lib, $selection_ou, $holdable_formats
);
- last if $status[1];
+ last if $status[0];
}
return @status;
}
sub _check_title_hold_is_possible {
- my( $titleid, $depth, $request_lib, $patron, $requestor, $pickup_lib, $selection_ou ) = @_;
+ my( $titleid, $depth, $request_lib, $patron, $requestor, $pickup_lib, $selection_ou, $holdable_formats ) = @_;
+ my ($types, $formats, $lang);
+ if (defined($holdable_formats)) {
+ ($types, $formats, $lang) = split '-', $holdable_formats;
+ }
+
my $e = new_editor();
my %org_filter = create_ranged_org_filter($e, $selection_ou, $depth);
field => 'id',
filter => { id => $titleid },
fkey => 'record'
+ },
+ mrd => {
+ field => 'record',
+ fkey => 'record',
+ filter => {
+ record => $titleid,
+ ( $types ? (item_type => [split '', $types]) : () ),
+ ( $formats ? (item_form => [split '', $formats]) : () ),
+ ( $lang ? (item_lang => $lang) : () )
+ }
}
}
},
acpl => { field => 'id', filter => { holdable => 't'}, fkey => 'location' },
- ccs => { field => 'id', filter => { holdable => 't'}, fkey => 'status' }
+ ccs => { field => 'id', filter => { holdable => 't'}, fkey => 'status' },
+ acpm => { field => 'target_copy', type => 'left' } # ignore part-linked copies
}
},
where => {
- '+acp' => { circulate => 't', deleted => 'f', holdable => 't', %org_filter }
+ '+acp' => { circulate => 't', deleted => 'f', holdable => 't', %org_filter },
+ '+acpm' => { target_copy => undef } # ignore part-linked copies
}
}
);
my $copies = new_editor->search_asset_copy({call_number => $vol->id, %org_filter});
$logger->info("checking possibility of volume hold for volume ".$vol->id);
+ my $filter_copies = [];
+ for my $copy (@$copies) {
+ # ignore part-mapped copies for regular volume level holds
+ push(@$filter_copies, $copy) unless
+ new_editor->search_asset_copy_part_map({target_copy => $copy->id})->[0];
+ }
+ $copies = $filter_copies;
+
return (
0, 0, [
new OpenILS::Event(
return (
(not scalar @$permitted), # true if permitted is an empty arrayref
- (
+ ( # XXX This test is of very dubious value; someone should figure
+ # out what if anything is checking this value
($copy->circ_lib == $pickup_lib) and
($copy->status == OILS_COPY_STATUS_AVAILABLE)
),
$args->{fulfillment_time} = undef; # we don't want to see old fulfilled holds
$args->{cancel_time} = undef;
- my $resp = { volume_holds => [], copy_holds => [], metarecord_holds => [], part_holds => [], issuance_holds => [] };
+ my $resp = { volume_holds => [], copy_holds => [], recall_holds => [], force_holds => [], metarecord_holds => [], part_holds => [], issuance_holds => [] };
my $mr_map = $e->search_metabib_metarecord_source_map({source => $title_id})->[0];
if($mr_map) {
%$args },
{idlist=>1} );
+ $resp->{recall_holds} = $e->search_action_hold_request(
+ {
+ hold_type => OILS_HOLD_TYPE_RECALL,
+ target => $copies,
+ %$args },
+ {idlist=>1} );
+
+ $resp->{force_holds} = $e->search_action_hold_request(
+ {
+ hold_type => OILS_HOLD_TYPE_FORCE,
+ target => $copies,
+ %$args },
+ {idlist=>1} );
+
return $resp;
}
$tid = $part->record;
- } elsif( $hold->hold_type eq OILS_HOLD_TYPE_COPY ) {
+ } elsif( $hold->hold_type eq OILS_HOLD_TYPE_COPY || $hold->hold_type eq OILS_HOLD_TYPE_RECALL || $hold->hold_type eq OILS_HOLD_TYPE_FORCE ) {
$copy = $e->retrieve_asset_copy([
$hold->target,
{flesh => 1, flesh_fields => {acp => ['call_number']}}
);
sub clear_shelf_process {
- my($self, $client, $auth, $org_id) = @_;
+ my($self, $client, $auth, $org_id, $match_copy) = @_;
+
+ my $current_copy = { '!=' => undef };
+ $current_copy = { '=' => $match_copy } if $match_copy;
my $e = new_editor(authtoken=>$auth, xact => 1);
$e->checkauth or return $e->die_event;
fulfillment_time => undef,
shelf_time => {'!=' => undef},
capture_time => {'!=' => undef},
- current_copy => {'!=' => undef},
+ current_copy => $current_copy,
},
{ idlist => 1 }
);
my $copy = $hold->current_copy;
my ($alt_hold) = __PACKAGE__->find_nearest_permitted_hold($e, $copy, $e->requestor, 1);
- if($alt_hold) {
+ if($alt_hold and !$match_copy) {
push(@{$cache_data{hold}}, $hold->id); # copy is needed for a hold
'available at the library where the user is placing the hold (or, alternatively, '.
'at the pickup library) to encourage bypassing the hold placement and just ' .
'checking out the item.' ,
- params => {
+ params => [
{ desc => 'Authentication Token', type => 'string' },
{ desc => 'Method Arguments. Options include: hold_type, hold_target, org_unit. '
. 'hold_type is the hold type code (T, V, C, M, ...). '
. 'hold_target is the identifier of the hold target object. '
. 'org_unit is org unit ID.',
type => 'object'
- },
- },
+ }
+ ],
return => {
desc => q/Result hash like { "copy" : copy_id, "location" : location_name }, empty hash on misses, event on error./,
type => 'object'
}
);
+__PACKAGE__->register_method(
+ method => 'change_hold_title_for_specific_holds',
+ api_name => 'open-ils.circ.hold.change_title.specific_holds',
+ signature => {
+ desc => q/
+ Updates specified holds to target new bib./,
+ params => [
+ { desc => 'Authentication Token', type => 'string' },
+ { desc => 'New Target Bib Id', type => 'number' },
+ { desc => 'Holds Ids for holds to update', type => 'array' },
+ ],
+ return => { desc => '1 on success' }
+ }
+);
+
+
sub change_hold_title {
my( $self, $client, $auth, $new_bib_id, $bib_ids ) = @_;
return 1;
}
+sub change_hold_title_for_specific_holds {
+ my( $self, $client, $auth, $new_bib_id, $hold_ids ) = @_;
+
+ my $e = new_editor(authtoken=>$auth, xact=>1);
+ return $e->die_event unless $e->checkauth;
+
+ my $holds = $e->search_action_hold_request(
+ [
+ {
+ cancel_time => undef,
+ fulfillment_time => undef,
+ hold_type => 'T',
+ id => $hold_ids
+ },
+ {
+ flesh => 1,
+ flesh_fields => { ahr => ['usr'] }
+ }
+ ],
+ { substream => 1 }
+ );
+
+ for my $hold (@$holds) {
+ $e->allowed('UPDATE_HOLD', $hold->usr->home_ou) or return $e->die_event;
+ $logger->info("Changing hold " . $hold->id . " target from " . $hold->target . " to $new_bib_id in title hold target change");
+ $hold->target( $new_bib_id );
+ $e->update_action_hold_request($hold) or return $e->die_event;
+ }
+
+ $e->commit;
+
+ _reset_hold($self, $e->requestor, $_) for @$holds;
+
+ return 1;
+}
__PACKAGE__->register_method(
method => 'rec_hold_count',
$logger->debug("spelling dictionary set to $dict");
}
+ $speller->set_option('ignore-case', 'true');
+
my @resp;
for my $word (split(/\s+/,$phrase) ) {
use OpenILS::Application::AppUtils;
use XML::LibXML;
use XML::LibXSLT;
-use OpenILS::Utils::Editor q/:funcs/;
+use OpenILS::Utils::CStoreEditor q/:funcs/;
use OpenSRF::Utils::Logger qw/$logger/;
use OpenSRF::Utils::JSON;
note => "Searches authority data for existing controlled terms and crossrefs",
);
+sub search_authority_by_simple_normalize_heading {
+ my $self = shift;
+ my $client = shift;
+ my $marcxml = shift;
+ my $controlset = shift;
+
+ my $query = {
+ select => { are => ['id'] },
+ from => 'are',
+ where => {
+ deleted => 'f',
+ marc => { 'startwith' => {
+ transform => 'authority.simple_normalize_heading',
+ value => [ 'authority.simple_normalize_heading' => $marcxml ]
+ }},
+ defined($controlset) ? ( control_set => $controlset ) : ()
+ }
+ };
+
+ $client->respond($_->{id}) for @{ new_editor()->json_query( $query ) };
+ $client->respond_complete;
+}
+__PACKAGE__->register_method(
+ method => "search_authority_by_simple_normalize_heading",
+ api_name => "open-ils.search.authority.simple_heading.from_xml",
+ argc => 1,
+ stream => 1,
+ note => "Searches authority data by main entry using marcxml, returning 'are' ids; params are marcxml and optional control-set-id",
+);
+
+sub search_authority_batch_by_simple_normalize_heading {
+ my $self = shift;
+ my $client = shift;
+ my $search_set = [@_];
+
+ my $m = $self->method_lookup('open-ils.search.authority.simple_heading.from_xml.atomic');
+
+ for my $s ( @$search_set ) {
+ for my $k ( keys %$s ) {
+ $client->respond( { $k => $m->run( $s->{$k}, $k ) } );
+ }
+ }
+
+ $client->respond_complete;
+}
+__PACKAGE__->register_method(
+ method => "search_authority_batch_by_simple_normalize_heading",
+ api_name => "open-ils.search.authority.simple_heading.from_xml.batch",
+ argc => 1,
+ stream => 1,
+ note => "Searches authority data by main entry using marcxml, in control-set batches, returning 'are' ids; params are hashes of { control-set-id => marcxml }",
+);
+
sub crossref_authority {
my $self = shift;
{ desc => 'Biblio record entry Id', type => 'number' }
],
return => {
- desc => 'True if specified id can be found in biblio.peer_record_copy_map.peer_record.',
+ desc => 'True if specified id can be found in biblio.peer_bib_copy_map.peer_record.',
type => 'bool'
}
}
action::survey_answer->has_a( question => 'action::survey_question' );
+ biblio::peer_bib_copy_map->has_a( target_copy => 'asset::copy' );
+ biblio::peer_bib_copy_map->has_a( peer_record => 'biblio::record_entry' );
+ biblio::peer_bib_copy_map->has_a( peer_type => 'biblio::peer_type' );
+
+ asset::copy_part_map->has_a( target_copy => 'asset::copy' );
+ asset::copy_part_map->has_a( part => 'biblio::monograph_part' );
+
+ biblio::peer_type->has_many( records => 'biblio::record_entry' );
+
asset::copy_note->has_a( owning_copy => 'asset::copy' );
asset::copy_note->has_a( creator => 'actor::user' );
asset::copy->has_many( stat_cat_entries => [ 'asset::stat_cat_entry_copy_map' => 'stat_cat_entry' ] );
asset::copy->has_many( stat_cat_entry_copy_maps => 'asset::stat_cat_entry_copy_map' );
+ asset::copy->has_many( peer_bib_copy_maps => 'biblio::peer_bib_copy_map' );
+
+ asset::copy->has_many( part_maps => 'asset::copy_part_map' );
asset::copy->has_a( call_number => 'asset::call_number' );
asset::copy->has_a( creator => 'actor::user' );
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
-package biblio::peer_record_copy_map;
+package biblio::peer_bib_copy_map;
use base qw/biblio/;
-biblio::peer_record_copy_map->table( 'biblio_peer_record_copy_map' );
-biblio::peer_record_copy_map->columns( Essential => qw/id peer_type peer_record target_copy/ );
+biblio::peer_bib_copy_map->table( 'biblio_peer_bib_copy_map' );
+biblio::peer_bib_copy_map->columns( Essential => qw/id peer_type peer_record target_copy/ );
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
package asset::copy_part_map;
asset::copy_part_map->table( 'asset.copy_part_map' );
+ asset::copy_part_map->sequence( 'asset.copy_part_map_id_seq' );
#-------------------------------------------------------------------------------
package biblio::monograph_part;
biblio::monograph_part->sequence( 'biblio.monograph_part_id_seq' );
#-------------------------------------------------------------------------------
- package biblio::peer_record_copy_map;
+ package biblio::peer_bib_copy_map;
- biblio::peer_record_copy_map->table( 'biblio.peer_record_copy_map' );
- biblio::peer_record_copy_map->sequence( 'biblio.peer_record_copy_map_id_seq' );
+ biblio::peer_bib_copy_map->table( 'biblio.peer_bib_copy_map' );
+ biblio::peer_bib_copy_map->sequence( 'biblio.peer_bib_copy_map_id_seq' );
#-------------------------------------------------------------------------------
package biblio::peer_type;
my $client = shift;
my $check_expire = shift;
my $one_hold = shift;
+ my $find_copy = shift;
local $OpenILS::Application::Storage::WRITE = 1;
isTrue($_->location->holdable) &&
isTrue($_->holdable) &&
!isTrue($_->deleted) &&
- (isTrue($hold->mint_condition) ? isTrue($_->mint_condition) : 1)
+ (isTrue($hold->mint_condition) ? isTrue($_->mint_condition) : 1) &&
+ ($hold->hold_type ne 'P' ? $_->part_maps->count == 0 : 1)
} @$all_copies;
# let 'em know we're still working
}
my $copy_count = @$all_copies;
+ my $found_copy = undef;
+ $found_copy = 1 if($find_copy and grep $_ == $find_copy, @$all_copies);
# map the potentials, so that we can pick up checkins
# XXX Loop-based targeting may require that /only/ copies from this loop should be added to
{ hold => $hold->id,
old_target => ($old_best ? $old_best->id : undef),
eligible_copies => $copy_count,
- target => ($best ? $best->id : undef) };
+ target => ($best ? $best->id : undef),
+ found_copy => $found_copy };
} otherwise {
my $e = shift;
# ... and this is our OpenILS object (en|de)coder and psuedo-ORM package.
use OpenILS::Utils::Fieldmapper;
+use OpenILS::Utils::CStoreEditor q/:funcs/;
+
+
our (
$_parser,
$_xslt,
%record_xslt,
%metarecord_xslt,
%holdings_data_cache,
+ %authority_browse_axis_cache,
);
sub child_init {
}
);
+sub grab_authority_browse_axes {
+ my ($self, $client, $full) = @_;
+
+ unless(scalar(keys(%authority_browse_axis_cache))) {
+ my $axes = new_editor->search_authority_browse_axis([
+ { code => { '<>' => undef } },
+ { flesh => 2, flesh_fields => { aba => ['fields'], acsaf => ['bib_fields','sub_entries'] } }
+ ]);
+ $authority_browse_axis_cache{$_->code} = $_ for (@$axes);
+ }
+
+ if ($full) {
+ return [
+ map { $authority_browse_axis_cache{$_} } sort keys %authority_browse_axis_cache
+ ];
+ } else {
+ return [keys %authority_browse_axis_cache];
+ }
+}
+__PACKAGE__->register_method(
+ method => 'grab_authority_browse_axes',
+ api_name => 'open-ils.supercat.authority.browse_axis_list',
+ api_level => 1,
+ argc => 1,
+ signature =>
+ { desc => "Returns a list of valid authority browse/startswith axes",
+ params => [
+ { name => 'full', desc => 'Optional. If true, return array containing the full object for each axis, sorted by code. Otherwise just return an array of the codes.', type => 'number' }
+ ],
+ 'return' => { desc => 'Axis codes or whole axes, see "full" param', type => 'array' }
+ }
+);
+
+sub axis_authority_browse {
+ my $self = shift;
+ my $client = shift;
+ my $axis = shift;
+
+ $axis =~ s/^authority\.//;
+ $axis =~ s/(\.refs)$//;
+ my $refs = $1;
+
+ return undef unless ( grep { /$axis/ } @{ grab_authority_browse_axes() } );
+
+ my @tags;
+ for my $f (@{$authority_browse_axis_cache{$axis}->fields}) {
+ push @tags, $f->tag;
+ if ($refs) {
+ push @tags, $_->tag for @{$f->sub_entries};
+ }
+ }
+
+ return authority_tag_sf_browse($self, $client, \@tags, 'a', @_); # XXX TODO figure out something more correct for the subfield param
+}
+__PACKAGE__->register_method(
+ method => 'axis_authority_browse',
+ api_name => 'open-ils.supercat.authority.browse.by_axis',
+ api_level => 1,
+ argc => 2,
+ signature =>
+ { desc => "Returns a list of the requested authority record IDs held",
+ params =>
+ [ { name => 'axis', desc => 'The target axis', type => 'string' },
+ { name => 'value', desc => 'The target value', type => 'string' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 9', type => 'number' },
+ { name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
+ 'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
+ }
+);
+
+=pod
+
sub general_authority_browse {
my $self = shift;
my $client = shift;
}
);
+=cut
+
sub authority_tag_sf_browse {
my $self = shift;
my $client = shift;
my $before = $_storage->request(
"open-ils.cstore.json_query.atomic",
{ select => { afr => [qw/record value/] },
- from => { 'are', 'afr' },
- where => {
- '+afr' => { tag => \@ref_tags, subfield => $subfield, value => { '<' => $value } },
- '+are' => { 'deleted' => 'f' }
- },
+ from => 'afr',
+ where => { tag => \@ref_tags, subfield => $subfield, value => { '<' => $value } },
order_by => { afr => { value => 'desc' } },
limit => $before_limit,
offset => abs($page) * $page_size - $before_offset,
my $after = $_storage->request(
"open-ils.cstore.json_query.atomic",
{ select => { afr => [qw/record value/] },
- from => { 'are', 'afr' },
- where => {
- '+afr' => { tag => \@ref_tags, subfield => $subfield, value => { '>=' => $value } },
- '+are' => { 'deleted' => 'f' }
- },
+ from => 'afr',
+ where => { tag => \@ref_tags, subfield => $subfield, value => { '>=' => $value } },
order_by => { afr => { value => 'asc' } },
limit => $after_limit,
offset => abs($page) * $page_size - $after_offset,
}
);
+sub axis_authority_startwith {
+ my $self = shift;
+ my $client = shift;
+ my $axis = shift;
+
+ $axis =~ s/^authority\.//;
+ $axis =~ s/(\.refs)$//;
+ my $refs = $1;
+
+ return undef unless ( grep { /$axis/ } @{ grab_authority_browse_axes() } );
+
+ my @tags;
+ for my $f (@{$authority_browse_axis_cache{$axis}->fields}) {
+ push @tags, $f->tag;
+ if ($refs) {
+ push @tags, $_->tag for @{$f->sub_entries};
+ }
+ }
+
+ return authority_tag_sf_startwith($self, $client, \@tags, 'a', @_); # XXX TODO figure out something more correct for the subfield param
+}
+__PACKAGE__->register_method(
+ method => 'axis_authority_startwith',
+ api_name => 'open-ils.supercat.authority.startwith.by_axis',
+ api_level => 1,
+ argc => 2,
+ signature =>
+ { desc => "Returns a list of the requested authority record IDs held",
+ params =>
+ [ { name => 'axis', desc => 'The target axis', type => 'string' },
+ { name => 'value', desc => 'The target value', type => 'string' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 10', type => 'number' },
+ { name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
+ 'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
+ }
+);
+
+=pod
+
sub general_authority_startwith {
my $self = shift;
my $client = shift;
{ desc => "Returns a list of the requested authority record IDs held",
params =>
[ { name => 'value', desc => 'The target title', type => 'string' },
- { name => 'page_size', desc => 'Count of records to retrieve, default is 9', type => 'number' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 10', type => 'number' },
{ name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
}
{ desc => "Returns a list of the requested authority record IDs held",
params =>
[ { name => 'value', desc => 'The target author', type => 'string' },
- { name => 'page_size', desc => 'Count of records to retrieve, default is 9', type => 'number' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 10', type => 'number' },
{ name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
}
{ desc => "Returns a list of the requested authority record IDs held",
params =>
[ { name => 'value', desc => 'The target subject', type => 'string' },
- { name => 'page_size', desc => 'Count of records to retrieve, default is 9', type => 'number' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 10', type => 'number' },
{ name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
}
{ desc => "Returns a list of the requested authority record IDs held",
params =>
[ { name => 'value', desc => 'The target topical subject', type => 'string' },
- { name => 'page_size', desc => 'Count of records to retrieve, default is 9', type => 'number' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 10', type => 'number' },
{ name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
}
{ desc => "Returns a list of the requested authority record IDs held, including see (4xx) and see also (5xx) references",
params =>
[ { name => 'value', desc => 'The target title', type => 'string' },
- { name => 'page_size', desc => 'Count of records to retrieve, default is 9', type => 'number' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 10', type => 'number' },
{ name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
}
{ desc => "Returns a list of the requested authority record IDs held, including see (4xx) and see also (5xx) references",
params =>
[ { name => 'value', desc => 'The target author', type => 'string' },
- { name => 'page_size', desc => 'Count of records to retrieve, default is 9', type => 'number' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 10', type => 'number' },
{ name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
}
{ desc => "Returns a list of the requested authority record IDs held, including see (4xx) and see also (5xx) references",
params =>
[ { name => 'value', desc => 'The target subject', type => 'string' },
- { name => 'page_size', desc => 'Count of records to retrieve, default is 9', type => 'number' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 10', type => 'number' },
{ name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
}
{ desc => "Returns a list of the requested authority record IDs held, including see (4xx) and see also (5xx) references",
params =>
[ { name => 'value', desc => 'The target topical subject', type => 'string' },
- { name => 'page_size', desc => 'Count of records to retrieve, default is 9', type => 'number' },
+ { name => 'page_size', desc => 'Count of records to retrieve, default is 10', type => 'number' },
{ name => 'page', desc => 'The page of records retrieved, calculated based on page_size. Can be positive, negative or 0.', type => 'number' }, ],
'return' => { desc => 'Authority Record IDs that are near the target string', type => 'array' }
}
);
+=cut
+
sub authority_tag_sf_startwith {
my $self = shift;
my $client = shift;