From 5c5b1227f2ebe70716e4f0b1f1c9304b9601a9cb Mon Sep 17 00:00:00 2001 From: MJ Ray 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','
  • Other Libraries (WorldCat)
  • \n
  • Other Databases (Google Scholar)
  • \n
  • Online Stores (Bookfinder.com)
  • ','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() {
    +
    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 @@
    -

    ">Barcode

    +

    ">Barcode +
    " />

    Item Information &itemnumber=">[Edit Items]

    1. Home Library:  
    2. 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
      Enter item barcode:
      +
      Specify Due Date:
      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) { + " value="" /> " value="" /> 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 @@
      Inventory/stocktaking
      -
      Perform inventory (stocktaking) of your catalog
      +
      Perform inventory (stocktaking) of your catalogue
      + +
      RFID Bulk Tagger
      +
      Write barcodes to RFID tags quickly
      + 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