From bdab88e2fc373c53433b81527a4ef6f6c8747678 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 6 Dec 2013 13:35:49 -0500 Subject: [PATCH] Bug 11351 - Add support for SIP2 media types Koha's SIP2 server implementation does not currently support the SIP2 protocol field "media type" ( CK ). This patch implements the SIP2 media type by allowing an arbitrary mapping of itemtypes to SIP2 media types. Test Plan: 1) Apply this patch 2) Run updatedatabase 3) Edit an itemtype, select a SIP media type, and save the changes 4) Make a SIP2 Item Information Request 5) Verify that the CK field of the Item Information Response contains the correct media type code. --- C4/SIP/ILS/Item.pm | 6 ++++- Koha/Template/Plugin/AuthorisedValues.pm | 5 ++++ admin/itemtypes.pl | 8 +++++- installer/data/mysql/de-DE/optional/auth_val.sql | 13 +++++++++++ installer/data/mysql/en/optional/auth_val.sql | 13 +++++++++++ installer/data/mysql/es-ES/optional/auth_val.sql | 13 +++++++++++ installer/data/mysql/kohastructure.sql | 1 + .../data/mysql/nb-NO/2-Valgfritt/auth_val.sql | 13 +++++++++++ installer/data/mysql/pl-PL/optional/auth_val.sql | 13 +++++++++++ installer/data/mysql/updatedatabase.pl | 22 ++++++++++++++++++++ .../prog/en/modules/admin/itemtypes.tt | 15 +++++++++++++ 11 files changed, 119 insertions(+), 3 deletions(-) diff --git a/C4/SIP/ILS/Item.pm b/C4/SIP/ILS/Item.pm index ba85cd7..a9a5c64 100644 --- a/C4/SIP/ILS/Item.pm +++ b/C4/SIP/ILS/Item.pm @@ -21,6 +21,7 @@ use C4::Items; use C4::Circulation; use C4::Members; use C4::Reserves; +use Koha::Database; our $VERSION = 3.07.00.049; @@ -86,7 +87,10 @@ sub new { $item->{permanent_location}= $item->{homebranch}; $item->{'collection_code'} = $item->{ccode}; $item->{ 'call_number' } = $item->{itemcallnumber}; - # $item->{'destination_loc'} = ? + + my $it = C4::Context->preference('item-level_itypes') ? $item->{itype} : $item->{itemtype}; + my $itemtype = Koha::Database->new()->schema()->resultset('Itemtype')->find( $it ); + $item->{sip_media_type} = $item->sip_media_type() if $itemtype; # check if its on issue and if so get the borrower my $issue = GetItemIssue($item->{'itemnumber'}); diff --git a/Koha/Template/Plugin/AuthorisedValues.pm b/Koha/Template/Plugin/AuthorisedValues.pm index 683a0ff..548ea95 100644 --- a/Koha/Template/Plugin/AuthorisedValues.pm +++ b/Koha/Template/Plugin/AuthorisedValues.pm @@ -31,4 +31,9 @@ sub GetByCode { return encode( 'UTF-8', GetAuthorisedValueByCode( $category, $code, $opac ) ); } +sub Get { + my ( $self, $category, $selected, $opac ) = @_; + return GetAuthorisedValues( $category, $selected, $opac ); +} + 1; diff --git a/admin/itemtypes.pl b/admin/itemtypes.pl index 3c33073..df91e7b 100755 --- a/admin/itemtypes.pl +++ b/admin/itemtypes.pl @@ -121,6 +121,7 @@ if ( $op eq 'add_form' ) { checkinmsgtype => $data->{'checkinmsgtype'}, imagesets => $imagesets, remote_image => $remote_image, + sip_media_type => $data->{sip_media_type}, ); # END $OP eq ADD_FORM @@ -145,6 +146,7 @@ elsif ( $op eq 'add_validate' ) { , summary = ? , checkinmsg = ? , checkinmsgtype = ? + , sip_media_type = ? WHERE itemtype = ? '; $sth = $dbh->prepare($query2); @@ -162,15 +164,16 @@ elsif ( $op eq 'add_validate' ) { $input->param('summary'), $input->param('checkinmsg'), $input->param('checkinmsgtype'), + $input->param('sip_media_type'), $input->param('itemtype') ); } else { # add a new itemtype & not modif an old my $query = " INSERT INTO itemtypes - (itemtype,description,rentalcharge, notforloan, imageurl, summary, checkinmsg, checkinmsgtype) + (itemtype,description,rentalcharge, notforloan, imageurl, summary, checkinmsg, checkinmsgtype, sip_media_type) VALUES - (?,?,?,?,?,?,?,?); + (?,?,?,?,?,?,?,?,?); "; my $sth = $dbh->prepare($query); my $image = $input->param('image'); @@ -185,6 +188,7 @@ elsif ( $op eq 'add_validate' ) { $input->param('summary'), $input->param('checkinmsg'), $input->param('checkinmsgtype'), + $input->param('sip_media_type'), ); } diff --git a/installer/data/mysql/de-DE/optional/auth_val.sql b/installer/data/mysql/de-DE/optional/auth_val.sql index 214121d..2ee7fde 100644 --- a/installer/data/mysql/de-DE/optional/auth_val.sql +++ b/installer/data/mysql/de-DE/optional/auth_val.sql @@ -57,3 +57,16 @@ INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_ INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'PAT', 'Benutzer'); INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACQ', 'Erwerbung'); INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACC', 'Gebühren'); + +-- SIP2 media types +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '000', 'Other'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '001', 'Book'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '002', 'Magazine'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '003', 'Bound journal'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '004', 'Audio tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '005', 'Video tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '006', 'CD/CDROM'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '007', 'Diskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '008', 'Book with deskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '009', 'Book with cd'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '010', 'Book with audio tape'); diff --git a/installer/data/mysql/en/optional/auth_val.sql b/installer/data/mysql/en/optional/auth_val.sql index 5318cee..8a4b32a 100644 --- a/installer/data/mysql/en/optional/auth_val.sql +++ b/installer/data/mysql/en/optional/auth_val.sql @@ -57,3 +57,16 @@ INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_ INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'PAT', 'Patrons'); INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACQ', 'Acquisitions'); INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACC', 'Accounts'); + +-- SIP2 media types +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '000', 'Other'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '001', 'Book'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '002', 'Magazine'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '003', 'Bound journal'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '004', 'Audio tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '005', 'Video tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '006', 'CD/CDROM'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '007', 'Diskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '008', 'Book with deskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '009', 'Book with cd'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '010', 'Book with audio tape'); diff --git a/installer/data/mysql/es-ES/optional/auth_val.sql b/installer/data/mysql/es-ES/optional/auth_val.sql index ec433ad..ec44e45 100644 --- a/installer/data/mysql/es-ES/optional/auth_val.sql +++ b/installer/data/mysql/es-ES/optional/auth_val.sql @@ -50,3 +50,16 @@ INSERT INTO `authorised_values` (category, authorised_value, lib) VALUES ('BOR_N -- OPAC Suggestions reasons INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('OPAC_SUG','damaged','The copy on the shelf is damaged','The copy on the shelf is damaged'); INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('OPAC_SUG','bestseller','Upcoming title by popular author','Upcoming title by popular author'); + +-- SIP2 media types +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '000', 'Other'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '001', 'Book'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '002', 'Magazine'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '003', 'Bound journal'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '004', 'Audio tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '005', 'Video tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '006', 'CD/CDROM'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '007', 'Diskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '008', 'Book with deskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '009', 'Book with cd'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '010', 'Book with audio tape'); diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 07160c8..9fc8d7e 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -1235,6 +1235,7 @@ CREATE TABLE `itemtypes` ( -- defines the item types summary text, -- information from the summary field, may include HTML checkinmsg VARCHAR(255), -- message that is displayed when an item with the given item type is checked in checkinmsgtype CHAR(16) DEFAULT 'message' NOT NULL, -- type (CSS class) for the checkinmsg, can be "alert" or "message" + sip_media_type VARCHAR(3) DEFAULT NULL, -- SIP2 protocol media type for this itemtype PRIMARY KEY (`itemtype`), UNIQUE KEY `itemtype` (`itemtype`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/installer/data/mysql/nb-NO/2-Valgfritt/auth_val.sql b/installer/data/mysql/nb-NO/2-Valgfritt/auth_val.sql index 567d30d..11e5866 100644 --- a/installer/data/mysql/nb-NO/2-Valgfritt/auth_val.sql +++ b/installer/data/mysql/nb-NO/2-Valgfritt/auth_val.sql @@ -78,3 +78,16 @@ INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_ INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'PAT', 'Lånere'); INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACQ', 'Innkjøp'); INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACC', 'Gebyrer'); + +-- SIP2 media types +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '000', 'Other'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '001', 'Book'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '002', 'Magazine'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '003', 'Bound journal'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '004', 'Audio tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '005', 'Video tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '006', 'CD/CDROM'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '007', 'Diskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '008', 'Book with deskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '009', 'Book with cd'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '010', 'Book with audio tape'); diff --git a/installer/data/mysql/pl-PL/optional/auth_val.sql b/installer/data/mysql/pl-PL/optional/auth_val.sql index 8a7d630..dc3e3df 100644 --- a/installer/data/mysql/pl-PL/optional/auth_val.sql +++ b/installer/data/mysql/pl-PL/optional/auth_val.sql @@ -38,3 +38,16 @@ INSERT INTO `authorised_values` (category, authorised_value, lib) VALUES ('NOT_L -- restricted status of an item, linked to items.restricted INSERT INTO `authorised_values` (category, authorised_value, lib) VALUES ('RESTRICTED','1','Restricted Access'); + +-- SIP2 media types +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '000', 'Other'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '001', 'Book'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '002', 'Magazine'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '003', 'Bound journal'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '004', 'Audio tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '005', 'Video tape'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '006', 'CD/CDROM'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '007', 'Diskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '008', 'Book with deskette'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '009', 'Book with cd'); +INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('SIP_MEDIA_TYPE', '010', 'Book with audio tape'); diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 19893b4..16873f2 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -7824,6 +7824,28 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "3.15.00.XXX"; +if(CheckVersion($DBversion)) { + $dbh->do(q{ + ALTER TABLE itemtypes ADD sip_media_type VARCHAR( 3 ) DEFAULT NULL + }); + $dbh->do(q{ + INSERT INTO authorised_values (category, authorised_value, lib) VALUES + ('SIP_MEDIA_TYPE', '000', 'Other'), + ('SIP_MEDIA_TYPE', '001', 'Book'), + ('SIP_MEDIA_TYPE', '002', 'Magazine'), + ('SIP_MEDIA_TYPE', '003', 'Bound journal'), + ('SIP_MEDIA_TYPE', '004', 'Audio tape'), + ('SIP_MEDIA_TYPE', '005', 'Video tape'), + ('SIP_MEDIA_TYPE', '006', 'CD/CDROM'), + ('SIP_MEDIA_TYPE', '007', 'Diskette'), + ('SIP_MEDIA_TYPE', '008', 'Book with deskette'), + ('SIP_MEDIA_TYPE', '009', 'Book with cd'), + ('SIP_MEDIA_TYPE', '010', 'Book with audio tape') + }); + print "Upgrade to $DBversion done (Bug 11351 - Add support for SIP2 media type)\n"; + SetVersion($DBversion); +} =head1 FUNCTIONS diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt index 57847eb..9a93c00 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt @@ -1,3 +1,5 @@ +[% USE EncodeUTF8 %] +[% USE AuthorisedValues %] [% INCLUDE 'doc-head-open.inc' %] Koha › Administration › Item types [% IF ( add_form ) %]› [% IF ( itemtype ) %] @@ -246,6 +248,19 @@ Item types administration <select> </li> <li> + <label for="sip_media_type">SIP media type: </label> + <select id="sip_media_type" name="sip_media_type"> + <option value=""></option> + [% FOREACH a IN AuthorisedValues.Get('SIP_MEDIA_TYPE', sip_media_type ) %] + [% IF a.selected %] + <option value="[% a.authorised_value %]" selected="selected">[% a.lib | $EncodeUTF8 %]</option> + [% ELSE %] + <option value="[% a.authorised_value %]">[% a.lib | $EncodeUTF8 %]</option> + [% END %] + [% END %] + </select> + </li> + <li> <label for="summary">Summary: </label> <textarea id="summary" name="summary" cols="55" rows="5">[% summary %]</textarea> <p>Enter a summary that will overwrite the default one in search results lists. Example, for a website itemtype : </p> -- 1.7.2.5