Bugzilla – Attachment 584 Details for
Bug 2244
RFID Cataloguing - Programming RFID tags from Koha
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
0001-RFID-direct-tagging-v1.1.patch
0001-RFID-direct-tagging-v1.1.patch (text/plain), 27.43 KB, created by
Chris Cormack
on 2009-09-06 21:35:00 UTC
(
hide
)
Description:
0001-RFID-direct-tagging-v1.1.patch
Filename:
MIME Type:
Creator:
Chris Cormack
Created:
2009-09-06 21:35:00 UTC
Size:
27.43 KB
patch
obsolete
>From 5c5b1227f2ebe70716e4f0b1f1c9304b9601a9cb Mon Sep 17 00:00:00 2001 >From: MJ Ray <mjr@phonecoop.coop> >Date: Sun, 6 Sep 2009 22:31:17 +0100 >Subject: [PATCH] RFID direct tagging v1.1 > > Add RFIDEnabled syspref. > Only exposes RFID links if RFIDEnabled preference is set. > Add bulk tag-writer to Tools. > Add RFID tag action links to circulation and cataloguing screens. > > Currently supports TRF7960 RFID Reader devices which listen for > SSL connections on port 9443 of staff terminals. > Module and listener will be available for download from www.software.coop > until we get them into CPAN or similar good homes. >--- > C4/RFID.pm | 172 ++++++++++++++++++++ > admin/systempreferences.pl | 1 + > catalogue/moredetail.pl | 2 + > catalogue/writetag.pl | 31 ++++ > circ/circulation.pl | 82 +++++++--- > circ/returns.pl | 17 ++- > installer/data/mysql/en/mandatory/sysprefs.sql | 3 +- > .../1-Obligatoire/unimarc_standard_systemprefs.sql | 1 + > installer/data/mysql/updatedatabase.pl | 8 + > .../intranet-tmpl/prog/en/includes/cat-search.inc | 1 + > .../prog/en/modules/catalogue/moredetail.tmpl | 3 +- > .../prog/en/modules/circ/circulation.tmpl | 1 + > .../prog/en/modules/circ/returns.tmpl | 1 + > .../prog/en/modules/tools/tools-home.tmpl | 6 +- > opac/opac-detail.pl | 2 + > tools/tools-home.pl | 3 + > 16 files changed, 305 insertions(+), 29 deletions(-) > create mode 100644 C4/RFID.pm > create mode 100755 catalogue/writetag.pl > >diff --git a/C4/RFID.pm b/C4/RFID.pm >new file mode 100644 >index 0000000..327eb84 >--- /dev/null >+++ b/C4/RFID.pm >@@ -0,0 +1,172 @@ >+package C4::RFID; >+ >+# Copyright 2008-2009 TTLLP software.coop >+# >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it under the >+# terms of the GNU General Public License as published by the Free Software >+# Foundation; either version 2 of the License, or (at your option) any later >+# version. >+# >+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY >+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR >+# A PARTICULAR PURPOSE. See the GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License along with >+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, >+# Suite 330, Boston, MA 02111-1307 USA >+# >+# These are helper functions for reading and writing RFID tags like >+# http://64.233.183.104/search?q=cache:0CdhriqgCJIJ:www.bs.dk/standards/RFID%2520Data%2520Model%2520for%2520Libraries.pdf >+ >+use vars qw($VERSION); >+$VERSION='0.02'; >+ >+use Digest::CRC qw(crcccitt_hex); >+use C4::Context; >+require Exporter; >+@ISA = qw(Exporter); >+@EXPORT_OK = qw(ReadBarcode WriteBarcode CheckinBarcode CheckoutBarcode MakeTag ParseTag); >+ >+BEGIN { >+ if (C4::Context->preference('RFIDEnabled') eq 'TRF7960-SSL') { >+ require RFID::TRF7960::Reader::SSL; >+ } >+# This may go OO later to support multiple reader types >+} >+ >+# This has various assumptions hardcoded in from our >+# first application. Sorry. >+ >+sub ReadBarcode { >+ my ($checkedin) = @_; >+ my $reader = RFID::TRF7960::Reader::SSL->new( >+ PeerAddr=> $ENV{'REMOTE_ADDR'}.':9443', >+ Timeout=>5 >+ ); >+ my @tags = $reader->readtags(); >+ if ($checkedin == 1) { >+ while ((@tags) && (scalar($tags[0]->get('afi')) ne '9E')) { >+ shift(@tags); >+ } >+ } >+ if (@tags) { >+ $tags[0]->get('length'); >+ my $tagdata = ParseTag(scalar($tags[0]->get('data'))); >+ return $tagdata->{barcode}; >+ } else { >+ return 0; >+ } >+} >+ >+sub WriteBarcode { >+ my ($barcode) = @_; >+ my $reader = RFID::TRF7960::Reader::SSL->new( >+ PeerAddr=> $ENV{'REMOTE_ADDR'}.':9443', >+ Timeout=>5 >+ ); >+ my @tags = $reader->readtags(); >+ # overwrite the first and only tag we see... >+ if (scalar(@tags) == 1) { >+ $tags[0]->get('length'); >+ $reader->writetag($tags[0],'9E','00',MakeTag(barcode=>$barcode)); >+ return 1; >+ } else { >+ return 0; >+ } >+} >+ >+sub ischeckedin { >+ my ($barcode) = @_; >+ my $tagdata; >+ my $reader = RFID::TRF7960::Reader::SSL->new( >+ PeerAddr=> $ENV{'REMOTE_ADDR'}.':9443', >+ Timeout=>5 >+ ); >+ my @tags = $reader->readtags(); >+ foreach my $tag (@tags) { >+ $tag->get('length'); >+ $tagdata = ParseTag(scalar($tag->get('data'))); >+ if ($tagdata->{barcode} eq $barcode) { >+ return (scalar($tag->get('afi')) eq '9E'); >+ } >+ } >+ return -1; >+} >+ >+sub CheckinBarcode { >+ my ($barcode) = @_; >+ my $tagdata; >+ my $reader = RFID::TRF7960::Reader::SSL->new( >+ PeerAddr=> $ENV{'REMOTE_ADDR'}.':9443', >+ Timeout=>5 >+ ); >+ my @tags = $reader->readtags(); >+ foreach my $tag (@tags) { >+ if ($barcode) { >+ $tag->get('length'); >+ $tagdata = ParseTag(scalar($tag->get('data'))); >+ if ($tagdata->{barcode} eq $barcode) { >+ $reader->writeafi($tag,'9E'); >+ } >+ } else { >+ $reader->writeafi($tag,'9E'); >+ } >+ } >+ return 1; >+} >+ >+sub CheckoutBarcode { >+ my ($barcode) = @_; >+ my $tagdata; >+ my $reader = RFID::TRF7960::Reader::SSL->new( >+ PeerAddr=> $ENV{'REMOTE_ADDR'}.':9443', >+ Timeout=>5 >+ ); >+ my @tags = $reader->readtags(); >+ foreach my $tag (@tags) { >+ if ($barcode) { >+ $tag->get('length'); >+ $tagdata = ParseTag(scalar($tag->get('data'))); >+ if ($tagdata->{barcode} eq $barcode) { >+ $reader->writeafi($tag,'9D'); >+ } >+ } else { >+ $reader->writeafi($tag,'9D'); >+ } >+ } >+ return 1; >+} >+ >+sub MakeTag { >+ my %p = @_; >+ my $start = >+ chr((($p{version}||1)<<4)+($p{status}||1)) >+ .chr($p{parts}||1) >+ .chr($p{ordinal}||1) >+ .$p{barcode}.("\0"x(16-length($p{barcode}))); >+ my $end = >+ ($p{country}||'GB') >+ .($p{library}||"\cb12345678"); >+ return($start >+ .pack('H*',crcccitt_hex($start.$end."\0\0")) >+ .$end); >+} >+ >+sub ParseTag { >+ my $data = shift; >+ my $barcode = substr($data,3,16); >+ $barcode =~ s/\0+$//; >+ return { >+ 'version'=>(ord(substr($data,0,1))>>4), >+ 'status'=>(ord(substr($data,0,1))&15), >+ 'parts'=>ord(substr($data,1,1)), >+ 'ordinal'=>ord(substr($data,2,1)), >+ 'barcode'=>$barcode, >+ 'country'=>substr($data,21,2), >+ 'library'=>substr($data,23,9), >+ }; >+} >+ >+1; >diff --git a/admin/systempreferences.pl b/admin/systempreferences.pl >index 95c4b8a..e3b6fea 100755 >--- a/admin/systempreferences.pl >+++ b/admin/systempreferences.pl >@@ -183,6 +183,7 @@ $tabsysprefs{IntranetmainUserblock} = "StaffClient"; > $tabsysprefs{viewMARC} = "StaffClient"; > $tabsysprefs{viewLabeledMARC} = "StaffClient"; > $tabsysprefs{viewISBD} = "StaffClient"; >+$tabsysprefs{RFIDEnabled} = "StaffClient"; > > # Patrons > $tabsysprefs{autoMemberNum} = "Patrons"; >diff --git a/catalogue/moredetail.pl b/catalogue/moredetail.pl >index 0b339dc..64573a9 100755 >--- a/catalogue/moredetail.pl >+++ b/catalogue/moredetail.pl >@@ -1,6 +1,7 @@ > #!/usr/bin/perl > > # Copyright 2000-2003 Katipo Communications >+# 2008-2009 TTLLP software.coop > # > # This file is part of Koha. > # >@@ -131,6 +132,7 @@ $template->param(biblioitemnumber => $bi); > $template->param(itemnumber => $itemnumber); > $template->param(ONLY_ONE => 1) if ( $itemnumber && $count != @items ); > $template->param(z3950_search_params => C4::Search::z3950_search_args(GetBiblioData($biblionumber))); >+$template->param(RFID => 1) if (C4::Context->preference('RFIDEnabled')); > > output_html_with_http_headers $query, $cookie, $template->output; > >diff --git a/catalogue/writetag.pl b/catalogue/writetag.pl >new file mode 100755 >index 0000000..68ad997 >--- /dev/null >+++ b/catalogue/writetag.pl >@@ -0,0 +1,31 @@ >+#!/usr/bin/perl >+ >+# Copyright 2008-2009 TTLLP software.coop >+# >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it under the >+# terms of the GNU General Public License as published by the Free Software >+# Foundation; either version 2 of the License, or (at your option) any later >+# version. >+# >+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY >+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR >+# A PARTICULAR PURPOSE. See the GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License along with >+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, >+# Suite 330, Boston, MA 02111-1307 USA >+ >+ >+use strict; >+use CGI; >+use C4::Context; >+use C4::RFID qw(WriteBarcode); >+ >+my $query=new CGI; >+ >+# Both of these calls are a bit unsafe and could be improved >+WriteBarcode($query->param('code')); >+print $query->redirect($query->referer()); >+ >diff --git a/circ/circulation.pl b/circ/circulation.pl >index 6d79124..b26e5a2 100755 >--- a/circ/circulation.pl >+++ b/circ/circulation.pl >@@ -4,6 +4,7 @@ > # script to execute issuing of books > > # Copyright 2000-2002 Katipo Communications >+# 2008-2009 TTLLP software.coop > # > # This file is part of Koha. > # >@@ -43,6 +44,12 @@ use Date::Calc qw( > Date_to_Days > ); > >+BEGIN { >+ if (C4::Context->preference('RFIDEnabled')) { >+ require C4::RFID; >+ import C4::RFID qw/ReadBarcode CheckoutBarcode/; >+ } >+} > > # > # PARAMETERS READING >@@ -113,6 +120,12 @@ if (C4::Context->preference("DisplayClearScreenButton")) { > my $barcode = $query->param('barcode') || ''; > $barcode =~ s/^\s*|\s*$//g; # remove leading/trailing whitespace > >+my $rfid = 0; >+if (C4::Context->preference('RFIDEnabled') && $query->param('rfid')) { >+ $barcode = ReadBarcode(1); >+ $rfid = 1; >+} >+ > $barcode = barcodedecode($barcode) if( $barcode && C4::Context->preference('itemBarcodeInputFilter')); > my $stickyduedate = $query->param('stickyduedate') || $session->param('stickyduedate'); > my $duedatespec = $query->param('duedatespec') || $session->param('stickyduedate'); >@@ -293,31 +306,48 @@ if ($barcode) { > ); > $blocker = 1; > } >- if( !$blocker ){ >- my $confirm_required = 0; >- unless($issueconfirmed){ >- # Get the item title for more information >- my $getmessageiteminfo = GetBiblioFromItemNumber(undef,$barcode); >- $template->param( itemhomebranch => $getmessageiteminfo->{'homebranch'} ); >- >- # pass needsconfirmation to template if issuing is possible and user hasn't yet confirmed. >- foreach my $needsconfirmation ( keys %$question ) { >- $template->param( >- $needsconfirmation => $$question{$needsconfirmation}, >- getTitleMessageIteminfo => $getmessageiteminfo->{'title'}, >- NEEDSCONFIRMATION => 1 >- ); >- $confirm_required = 1; >- } >- } >- unless($confirm_required) { >- AddIssue( $borrower, $barcode, $datedue, $cancelreserve ); >- $inprocess = 1; >- if($globalduedate && ! $stickyduedate && $duedatespec_allow ){ >- $duedatespec = $globalduedate->output(); >- $stickyduedate = 1; >- } >- } >+ >+ if ($issueconfirmed && $noerror) { >+ # we have no blockers for issuing and any issues needing confirmation have been resolved >+ AddIssue( $borrower, $barcode, $datedue, $cancelreserve ); >+ $inprocess = 1; >+ if ($rfid) { >+ CheckoutBarcode(); >+ } >+ } >+ elsif ($issueconfirmed){ # FIXME: Do something? Or is this to *intentionally* do nothing? >+ } >+ else { >+ my $noquestion = 1; >+# Get the item title for more information >+ my $getmessageiteminfo = GetBiblioFromItemNumber(undef,$barcode); >+ if ($noerror) { >+ # only pass needsconfirmation to template if issuing is possible >+ foreach my $needsconfirmation ( keys %$question ) { >+ $template->param( >+ $needsconfirmation => $$question{$needsconfirmation}, >+ getTitleMessageIteminfo => $getmessageiteminfo->{'title'}, >+ NEEDSCONFIRMATION => 1 >+ ); >+ $noquestion = 0; >+ } >+ # Because of the weird conditional structure (empty elsif block), >+ # if we reached here, $issueconfirmed must be false. >+ # Also, since we moved inside the if ($noerror) conditional, >+ # this old chunky conditional can be simplified: >+ # if ( $noerror && ( $noquestion || $issueconfirmed ) ) { >+ if ($noquestion) { >+ AddIssue( $borrower, $barcode, $datedue ); >+ $inprocess = 1; >+ if ($rfid) { >+ CheckoutBarcode(); >+ } >+ } >+ } >+ $template->param( >+ itemhomebranch => $getmessageiteminfo->{'homebranch'} , >+ duedatespec => $duedatespec, >+ ); > } > > # FIXME If the issue is confirmed, we launch another time GetMemberIssuesAndFines, now display the issue count after issue >@@ -706,4 +736,6 @@ $template->param( > dateformat => C4::Context->preference("dateformat"), > DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), > ); >+$template->param(RFID => 1) if (C4::Context->preference('RFIDEnabled')); >+ > output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/circ/returns.pl b/circ/returns.pl >index 40eeed1..fb497b8 100755 >--- a/circ/returns.pl >+++ b/circ/returns.pl >@@ -3,6 +3,7 @@ > # Copyright 2000-2002 Katipo Communications > # 2006 SAN-OP > # 2007 BibLibre, Paul POULAIN >+# 2008-2009 TTLLP software.coop > # > # This file is part of Koha. > # >@@ -43,6 +44,12 @@ use C4::Items; > use C4::Members; > use C4::Branch; # GetBranches GetBranchName > use C4::Koha; # FIXME : is it still useful ? >+BEGIN { >+ if (C4::Context->preference('RFIDEnabled')) { >+ require C4::RFID; >+ import C4::RFID qw/ReadBarcode CheckinBarcode/; >+ } >+} > > my $query = new CGI; > >@@ -163,7 +170,11 @@ my $exemptfine = $query->param('exemptfine'); > my $dropboxmode = $query->param('dropboxmode'); > my $dotransfer = $query->param('dotransfer'); > my $calendar = C4::Calendar->new( branchcode => $userenv_branch ); >- #dropbox: get last open day (today - 1) >+ >+if (C4::Context->preference('RFIDEnabled') && $query->param('rfid')) { >+ $barcode = ReadBarcode(); >+} >+ > my $today = C4::Dates->new(); > my $today_iso = $today->output('iso'); > my $dropboxdate = $calendar->addDate($today, -1); >@@ -198,6 +209,9 @@ if ($barcode) { > # > ( $returned, $messages, $issueinformation, $borrower ) = > AddReturn( $barcode, $userenv_branch, $exemptfine, $dropboxmode); # do the return >+ if (C4::Context->preference('RFIDEnabled') && ($query->param('rfid')||ReadBarcode())) { >+ CheckinBarcode(); >+ } > > # get biblio description > my $biblio = GetBiblioFromItemNumber($itemnumber); >@@ -542,6 +556,7 @@ $template->param( > dropboxdate => $dropboxdate->output(), > overduecharges => $overduecharges, > ); >+$template->param(RFID => 1) if (C4::Context->preference('RFIDEnabled')); > > # actually print the page! > output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/installer/data/mysql/en/mandatory/sysprefs.sql b/installer/data/mysql/en/mandatory/sysprefs.sql >index ab88869..e848eec 100644 >--- a/installer/data/mysql/en/mandatory/sysprefs.sql >+++ b/installer/data/mysql/en/mandatory/sysprefs.sql >@@ -84,6 +84,7 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacuserlogin',1,'Enable or disable display of user login features',NULL,'YesNo'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('patronimages',0,'Enable patron images for the Staff Client',NULL,'YesNo'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('printcirculationslips',1,'If ON, enable printing circulation receipts','','YesNo'); >+INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('RFIDEnabled','','If set, use that type of RFID::Reader on all circulation or cataloguing staff clients','|TRF7960-SSL','Choice'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('RequestOnOpac',1,'If ON, globally enables patron holds on OPAC',NULL,'YesNo'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReservesMaxPickUpDelay',7,'Define the Maximum delay to pick up an item on hold','','Integer'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReturnBeforeExpiry',0,'If ON, checkout will be prevented if returndate is after patron card expiry',NULL,'YesNo'); >@@ -258,4 +259,4 @@ INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanatio > INSERT INTO systempreferences (variable,value,options,explanation,type)VALUES('HidePatronName', '0', '', 'If this is switched on, patron''s cardnumber will be shown instead of their name on the holds and catalog screens', 'YesNo'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACSearchForTitleIn','<li><a href="http://worldcat.org/search?q={TITLE}" target="_blank">Other Libraries (WorldCat)</a></li>\n<li><a href="http://www.scholar.google.com/scholar?q={TITLE}" target="_blank">Other Databases (Google Scholar)</a></li>\n<li><a href="http://www.bookfinder.com/search/?author={AUTHOR}&title={TITLE}&st=xl&ac=qr" target="_blank">Online Stores (Bookfinder.com)</a></li>','Enter the HTML that will appear in the \'Search for this title in\' box on the detail page in the OPAC. Enter {TITLE}, {AUTHOR}, or {ISBN} in place of their respective variables in the URL. Leave blank to disable \'More Searches\' menu.','70|10','Textarea'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACPatronDetails','1','If OFF the patron details tab in the OPAC is disabled.','','YesNo'); >-INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACFinesTab','1','If OFF the patron fines tab in the OPAC is disabled.','','YesNo'); >\ No newline at end of file >+INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACFinesTab','1','If OFF the patron fines tab in the OPAC is disabled.','','YesNo'); >diff --git a/installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql b/installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql >index 9c6886a..bafe412 100644 >--- a/installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql >+++ b/installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql >@@ -102,6 +102,7 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacuserlogin', '1', 'si ce paramètre est activé, les adhérents peuvent s''identifier à l''OPAC. Sinon seule la consultation anonyme est possible', '', 'YesNo'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('patronimages', 'jpg', 'Ce paramètre permet d''activer la gestion des photos des adhérents. Mettre une extension d''image (jpg) pour activer la chose', '', 'free'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('printcirculationslips', '1', 'Active ou non l''impression de tickets de circulation', '', 'free'); >+INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('RFIDEnabled','','Si défini, utiliser ce type de lecteur RFID sur toutes les interfaces professionnelles de circulation et de catalogage','|TRF7960-SSL','Choice'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReadingHistory', '0', 'Active ou non l''affichage de l''historique de lecture ', NULL, 'YesNo'); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReceiveBackIssues', '5', 'Ce paramètre définit le nombre d''anciens bulletins à afficher lorsque l''on bulletine', '', ''); > INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('RequestOnOpac', '1', 'Active ou non les réservations à l''OPAC', '', 'YesNo'); >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index 6d648dd..60eddf3 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -5,6 +5,7 @@ > # This script checks for required updates to the database. > > # Part of the Koha Library Software www.koha.org >+# Copyright 2008-2009 TTLLP software.coop > # Licensed under the GPL. > > # Bugs/ToDo: >@@ -2644,6 +2645,13 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { > print "Upgrade to $DBversion done (Added primary keys to language tables)\n"; > } > >+$DBversion = 'XXX'; >+if (C4::Context->preference("Version") < TransformToNum($DBversion)) { >+ $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('RFIDEnabled','','If set, use that type of RFID::Reader on all circulation or cataloguing staff clients','|TRF7960-SSL','Choice');"); >+ SetVersion ($DBversion); >+ print "Upgrade to $DBversion done (Add RFIDEnabled syspref)\n"; >+} >+ > =item DropAllForeignKeys($table) > > Drop all foreign keys of the table $table >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-search.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-search.inc >index 536d7ad..813c7c7 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-search.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-search.inc >@@ -75,6 +75,7 @@ YAHOO.util.Event.onContentReady("header_search", function() { > <form method="post" action="/cgi-bin/koha/circ/returns.pl"> > <input name="barcode" id="ret_barcode" size="40" /> > <input value="Submit" class="submit" type="submit" /> >+ <!-- TMPL_IF NAME="RFID" --><input value="Scan RFID Tag" name="rfid" class="submit" type="submit" /><!-- /TMPL_IF --> > </form> > </div> > <!-- /TMPL_IF --> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl >index 9e8165f..1d709b4 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl >@@ -41,7 +41,8 @@ > <!-- /TMPL_IF --> > <!-- TMPL_LOOP NAME="ITEM_DATA" --> > <div class="yui-g"> >- <h3 id="item<!-- TMPL_VAR NAME="itemnumber" -->">Barcode <!-- TMPL_VAR NAME="barcode" --> <!-- TMPL_IF name="notforloantext" --><!-- TMPL_VAR name="notforloantext" --> <!-- /TMPL_IF --></h3> >+ <h3 id="item<!-- TMPL_VAR NAME="itemnumber" -->">Barcode <!-- TMPL_VAR NAME="barcode" --> <!-- TMPL_IF name="notforloantext" --><!-- TMPL_VAR name="notforloantext" --> <!-- /TMPL_IF --> >+ <form action="writetag.pl" method="get"><input type="hidden" name="code" value="<!-- TMPL_VAR NAME="barcode" -->" /><!-- TMPL_IF name="RFID" --><input type="submit" class="submit" value="Set RFID Tag" /><!-- /TMPL_IF --></form></h3> > <div class="listgroup"><h4>Item Information <!-- TMPL_IF NAME="CAN_user_editcatalogue" --><!-- TMPL_UNLESS name="nomod" --><a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=<!-- TMPL_VAR NAME="biblionumber"-->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->">[Edit Items]</a><!-- /TMPL_IF --><!-- /TMPL_UNLESS --></h4> > <ol class="bibliodetails"> > <li><span class="label">Home Library:</span> <!-- TMPL_VAR NAME="homebranchname" --> </li> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl >index 013a303..01b2f03 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl >@@ -269,6 +269,7 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> > <div class="hint">Enter item barcode:</div> > > <input type="text" name="barcode" id="barcode" class="barcode focus" size="14" /> <input type="submit" value="Check Out" /> >+ <!-- TMPL_IF NAME="RFID" --><input type="submit" name="rfid" value="Check Out RFID Tag" /><!-- /TMPL_IF --> > > <!-- TMPL_IF NAME="SpecifyDueDate" --><div class="date-select"> > <div class="hint">Specify Due Date:</div> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl >index 12b372c..70d905e 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl >@@ -301,6 +301,7 @@ function Dopop(link) { > <input name="barcode" id="barcode" size="14" class="focus"/> > <!-- /TMPL_IF --> > <input type="submit" class="submit" value="Submit" /> >+ <!-- TMPL_IF NAME="RFID" --><input type="submit" class="submit" name="rfid" value="Scan RFID Tag" /><!-- /TMPL_IF --> > <!-- TMPL_LOOP Name="inputloop" --> > <input type="hidden" name="ri-<!-- TMPL_VAR Name="counter" -->" value="<!-- TMPL_VAR Name="barcode" -->" /> > <input type="hidden" name="dd-<!-- TMPL_VAR Name="counter" -->" value="<!-- TMPL_VAR Name="duedate" -->" /> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tmpl >index e4229f3..b00f489 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tmpl >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tmpl >@@ -65,7 +65,11 @@ > > <!-- TMPL_IF NAME="CAN_user_tools_inventory" --> > <dt><a href="/cgi-bin/koha/tools/inventory.pl">Inventory/stocktaking</a></dt> >- <dd>Perform inventory (stocktaking) of your catalog</dd> >+ <dd>Perform inventory (stocktaking) of your catalogue</dd> >+ <!-- TMPL_IF name="RFID" --> >+ <dt><a href="/cgi-bin/koha/tools/rfidtags.pl">RFID Bulk Tagger</a></dt> >+ <dd>Write barcodes to RFID tags quickly</dd> >+ <!-- /TMPL_IF --> > <!-- /TMPL_IF --> > > </dl> >diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl >index c3b104b..8ee1a8e 100755 >--- a/opac/opac-detail.pl >+++ b/opac/opac-detail.pl >@@ -1,6 +1,7 @@ > #!/usr/bin/perl > > # Copyright 2000-2002 Katipo Communications >+# 2008-2009 TTLLP software.coop > # > # This file is part of Koha. > # >@@ -549,6 +550,7 @@ if (C4::Context->preference('TagsEnabled') and $tag_quantity = C4::Context->pref > $template->param(TagLoop => get_tags({biblionumber=>$biblionumber, approved=>1, > 'sort'=>'-weight', limit=>$tag_quantity})); > } >+$template->param(RFID => 1) if (C4::Context->preference('RFIDEnabled')); > > #Search for title in links > if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ >diff --git a/tools/tools-home.pl b/tools/tools-home.pl >index c49d2e7..51a189e 100755 >--- a/tools/tools-home.pl >+++ b/tools/tools-home.pl >@@ -1,5 +1,7 @@ > #!/usr/bin/perl > >+# Copyright 2008-2009 TTLLP software.coop >+ > # This file is part of Koha. > # > # Koha is free software; you can redistribute it and/or modify it under the >@@ -31,5 +33,6 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > debug => 1, > } > ); >+$template->param(RFID => 1) if (C4::Context->preference('RFIDEnabled')); > > output_html_with_http_headers $query, $cookie, $template->output; >-- >1.5.3.7 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 2244
: 584