From 7e52a5665c02d76c9f99e64d841be795ca6f0546 Mon Sep 17 00:00:00 2001 From: tgarip1957 Date: Wed, 6 Sep 2006 16:21:03 +0000 Subject: [PATCH] Clean up before final commits --- C4/Accounts2.pm | 2 +- C4/Acquisition.pm | 27 +- C4/AuthoritiesMarc.pm | 627 ++-- C4/Biblio.pm | 425 +-- C4/BookShelves.pm | 6 +- C4/Circulation/Circ2.pm | 16 +- C4/Context.pm | 5 +- C4/Koha.pm | 1 + C4/Members.pm | 24 + C4/Reserves2.pm | 6 +- C4/Search.pm | 49 +- C4/Z3950.pm | 163 +- MANIFEST | 3150 ----------------- Makefile | 105 - Makefile.PL | 7 +- admin/auth_subfields_structure.pl | 16 +- admin/branches.pl | 45 +- authorities/auth_finder.pl | 29 +- authorities/auth_linker.pl | 24 +- authorities/authorities-home.pl | 235 +- authorities/authorities.pl | 376 +- authorities/blinddetail-biblio-search.pl | 79 +- authorities/blinddetail-linker.pl | 62 +- authorities/detail-biblio-search.pl | 193 +- authorities/detail.pl | 171 +- catalogue/MARCdetail.pl | 2 +- catalogue/detail.pl | 14 +- catalogue/detailprint.pl | 4 +- catalogue/moredetail.pl | 24 +- cataloguing/addbiblio.pl | 260 +- cataloguing/additem.pl | 21 +- circ/branchtransfers.pl | 90 +- circ/circulation.pl | 861 ++--- circ/renewscript.pl | 70 + circ/rescirculation.pl | 467 +++ circ/resreturns.pl | 478 +++ circ/returns.pl | 145 +- import/breeding.pl | 231 +- .../intranet-tmpl/prog/en/acqui/basket.tmpl | 2 +- .../prog/en/acqui/histsearch.tmpl | 2 +- loadmodules.pl | 88 - maint/catmaintain.pl | 109 - maint/shiftbib.pl | 65 - misc/export_xml_koharecords.pl | 78 + misc/merge_authority.pl | 113 +- reservereport.xls | 27 - search.marc/dictionary.pl | 267 -- search.marc/search.pl | 386 -- search.marc/suggest.pl | 66 - serials/acqui-search-result.pl | 4 +- serials/acqui-search.pl | 18 +- serials/claims.pl | 5 +- serials/distributedto.pl | 4 +- serials/lateissues-excel.pl | 3 +- serials/lateissues.pl | 2 - serials/member-search.pl | 2 - serials/printlist.pl | 3 +- serials/reorder_members.pl | 11 +- serials/routing-preview.pl | 1 - serials/routing.pl | 2 - serials/serial-issues.pl | 6 +- serials/serials-home.pl | 2 - ...{serials-recieve.pl => serials-receive.pl} | 117 +- serials/subscription-add.pl | 151 +- serials/subscription-bib-search.pl | 282 +- serials/subscription-detail.pl | 252 +- serials/subscription-renew.pl | 1 - serials/viewalerts.pl | 6 +- thesaurus_popup.pl | 126 - value_builder/marc21_008_holdings.pl | 139 + value_builder/marc21_field_003.pl | 97 + value_builder/marc21_field_005.pl | 100 + value_builder/marc21_field_006.pl | 126 + value_builder/marc21_field_007.pl | 95 + value_builder/marc21_field_008.pl | 154 + value_builder/marc21_leader.pl | 10 +- value_builder/marc21_leader_authorities.pl | 111 + value_builder/marc21_leader_holdings.pl | 111 + z3950/zebraqueue_start.pl | 57 + z3950/zebraqueue_windows_start.pl | 16 + 80 files changed, 4527 insertions(+), 7200 deletions(-) delete mode 100644 MANIFEST delete mode 100644 Makefile create mode 100644 circ/renewscript.pl create mode 100644 circ/rescirculation.pl create mode 100644 circ/resreturns.pl delete mode 100755 loadmodules.pl delete mode 100755 maint/catmaintain.pl delete mode 100755 maint/shiftbib.pl create mode 100644 misc/export_xml_koharecords.pl delete mode 100755 reservereport.xls delete mode 100755 search.marc/dictionary.pl delete mode 100755 search.marc/search.pl delete mode 100755 search.marc/suggest.pl rename serials/{serials-recieve.pl => serials-receive.pl} (63%) delete mode 100755 thesaurus_popup.pl create mode 100644 value_builder/marc21_008_holdings.pl create mode 100755 value_builder/marc21_field_003.pl create mode 100755 value_builder/marc21_field_005.pl create mode 100644 value_builder/marc21_field_006.pl create mode 100644 value_builder/marc21_field_007.pl create mode 100644 value_builder/marc21_field_008.pl create mode 100644 value_builder/marc21_leader_authorities.pl create mode 100644 value_builder/marc21_leader_holdings.pl create mode 100644 z3950/zebraqueue_start.pl create mode 100644 z3950/zebraqueue_windows_start.pl diff --git a/C4/Accounts2.pm b/C4/Accounts2.pm index 39a7861eda..424ae16271 100755 --- a/C4/Accounts2.pm +++ b/C4/Accounts2.pm @@ -312,7 +312,7 @@ EOT sub returnlost{ my ($borrnum,$itemnum)=@_; my $dbh = C4::Context->dbh; - my $borrower=borrdata('',$borrnum); #from C4::Search; + my $borrower=C4::Members::borrdata('',$borrnum); #from C4::Members; my $sth=$dbh->prepare("Update issues set returndate=now() where borrowernumber=? and itemnumber=? and returndate is null"); $sth->execute($borrnum,$itemnum); diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index bef5234233..2483ed170e 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -23,8 +23,8 @@ use strict; require Exporter; use C4::Context; use C4::Date; -use MARC::Record; use C4::Suggestions; +use C4::Biblio; use Time::localtime; use vars qw($VERSION @ISA @EXPORT); @@ -62,7 +62,7 @@ orders, basket and parcels. &GetOrderNumber &GetLateOrders &NewOrder &DelOrder &SearchOrder &GetHistory &ModOrder &ModReceiveOrder &ModOrderBiblioNumber - &GetParcels &GetParcel + &GetParcels &GetParcel &GetSingleOrder ); @@ -96,7 +96,7 @@ sub GetBasket { my $dbh = C4::Context->dbh; my $query = " SELECT aqbasket.*, - borrowers.firstname+' '+borrowers.surname AS authorisedbyname, + concat(borrowers.firstname,' ',borrowers.surname) AS authorisedbyname, borrowers.branchcode AS branch FROM aqbasket LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber @@ -293,6 +293,19 @@ sub GetOrders { return @results; } +sub GetSingleOrder { + my ($ordnum)=@_; + my $dbh = C4::Context->dbh; + my $sth=$dbh->prepare("Select * from biblio,aqorders left join aqorderbreakdown + on aqorders.ordernumber=aqorderbreakdown.ordernumber + where aqorders.ordernumber=? + and biblio.biblionumber=aqorders.biblionumber"); + $sth->execute($ordnum); + my $data=$sth->fetchrow_hashref; + $sth->finish; + return($data); +} + #------------------------------------------------------------# =head3 GetOrderNumber @@ -702,11 +715,11 @@ sub SearchOrder { while ( my $data = $sth->fetchrow_hashref ) { ## Retrieving a whole marc record just to extract seriestitle is very poor performance ## Rewrite these searches -my $record=MARCgetbiblio($dbh,$data->{'biblionumber'}); -my $data2=MARCmarc2koha($dbh,$record,"biblios"); +my $record=XMLgetbibliohash($dbh,$data->{'biblionumber'}); +my $seriestitle=XML_readline_onerecord($record,"seriestitle","biblios"); - $data->{'author'} = $data2->{'author'}; - $data->{'seriestitle'} = $data2->{'seriestitle'}; +# $data->{'author'} = $data->{'author'}; + $data->{'seriestitle'} = $seriestitle; $sth3->execute( $data->{'ordernumber'} ); my $data3 = $sth3->fetchrow_hashref; $data->{'branchcode'} = $data3->{'branchcode'}; diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index dca24510fb..644fb3acb7 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -20,7 +20,7 @@ use strict; require Exporter; use C4::Context; use C4::Koha; -use MARC::Record; +use Encode; use C4::Biblio; use vars qw($VERSION @ISA @EXPORT); @@ -37,16 +37,18 @@ $VERSION = 0.01; &AUTHmodauthority &AUTHdelauthority &AUTHaddsubfield - &AUTHgetauthority + &AUTHfind_marc_from_kohafield &AUTHgetauth_type &AUTHcount_usage &getsummary &authoritysearch &XMLgetauthority - &AUTHhtml2marc + &XMLgetauthorityhash + &XML_readline_withtags &merge - &FindDuplicate + &FindDuplicateauth + &ZEBRAdelauthority ); sub AUTHfind_marc_from_kohafield { @@ -90,15 +92,10 @@ sub authoritysearch { if (@$value[$i]){ ##If mainentry search $a tag if (@$tags[$i] eq "mainentry") { - ($attr)=MARCfind_attr_from_kohafield("auth_mainentry")." "; - + ($attr)=MARCfind_attr_from_kohafield("auth_mainentry")." "; }else{ ($attr) =MARCfind_attr_from_kohafield("auth_allentry")." "; } - - - - if (@$operator[$i] eq 'phrase') { $attr.=" \@attr 4=1 \@attr 5=100 \@attr 6=3 ";##Phrase, No truncation,all of subfield field must match @@ -114,7 +111,7 @@ sub authoritysearch { $dosearch=1; }#if value - } + }## value loop ##Add how many queries generated $query= $and.$query.$q2; #warn $query; @@ -124,7 +121,7 @@ my $counter = $offset; $length=10 unless $length; my @oAuth; my $i; - $oAuth[0]=C4::Context->Zconnauth("authorityserver","USMARC"); + $oAuth[0]=C4::Context->Zconnauth("authorityserver"); my ($mainentry)=MARCfind_attr_from_kohafield("auth_mainentry"); my ($allentry)=MARCfind_attr_from_kohafield("auth_allentry"); @@ -155,42 +152,30 @@ if ($nbresults>0){ ##Find authid and linkid fields -my ($authidfield,$authidsubfield)=MARCfind_marc_from_kohafield("auth_authid","authorities"); -my ($linkidfield,$linkidsubfield)=MARCfind_marc_from_kohafield("auth_linkid","authorities"); + while (($counter < $nbresults) && ($counter < ($offset + $length))) { ##Here we have to extract MARC record and $authid from ZEBRA AUTHORITIES my $rec=$oAResult->record($counter); my $marcdata=$rec->raw(); -my $authrecord; -my $linkid; +my $authrecord=Encode::decode("utf8",$marcdata); +$authrecord=XML_xml2hash_onerecord($authrecord); my @linkids; my $separator=C4::Context->preference('authoritysep'); my $linksummary=" ".$separator; -my $authid; - $authrecord = MARC::File::USMARC::decode($marcdata); - if ($authidfield >9){ - my $authid=$authrecord->field($authidfield)->subfield($authidsubfield); - }else{ - $authid=$authrecord->field($authidfield)->data(); - } - if ($authrecord->field($linkidfield)){ - -my @fields=$authrecord->field($linkidfield); - - foreach my $field (@fields){ - $linkid=$field->subfield($linkidsubfield) ; - if ($linkid){ ##There is a linked record add fields to produce summary -my $linktype=AUTHfind_authtypecode($dbh,$linkid); - my $linkrecord=AUTHgetauthority($dbh,$linkid); - $linksummary.="
    ".getsummary($dbh,$linkrecord,$linkid,$linktype).".".$separator; - } +my $authid=XML_readline_onerecord($authrecord,"auth_authid","authorities"); +my @linkid=XML_readline_asarray($authrecord,"auth_linkid","authorities");##May have many linked records + + foreach my $linkid (@linkid){ + my $linktype=AUTHfind_authtypecode($dbh,$linkid); +# my $linkrecord=XMLgetauthorityhash($dbh,$linkid); +# $linksummary.="
    ".getsummary($dbh,$linkrecord,$linkid,$linktype).".".$separator; + } - }# my $summary; unless ($dictionary){ $summary=getsummary($dbh,$authrecord,$authid,$authtypecode); $summary="".$summary."."; - if ($linkid && $linksummary ne " ".$separator){ + if ( $linksummary ne " ".$separator){ $summary="".$summary."".$linksummary; } }else{ @@ -206,9 +191,7 @@ my %newline; $newline{'toggle'}=$toggle; $newline{summary} = $summary; $newline{authid} = $authid; - $newline{linkid} = $linkid; -# $newline{used} =0; -# $newline{biblio_fields} = $tags_using_authtype; + $newline{linkid} = $linkid[0]; $newline{even} = $counter % 2; $counter++; push @finalresult, \%newline; @@ -325,64 +308,45 @@ $sth->execute($authtypecode); } sub AUTHaddauthority { -# pass the MARC::Record to this function, and it will create the records in the authority table +# pass the XML hash to this function, and it will create the records in the authority table my ($dbh,$record,$authid,$authtypecode) = @_; - - - $record->encoding("UTF-8"); -my ($linkidfield,$linkidsubfield)=MARCfind_marc_from_kohafield("auth_linkid","authorities"); - # if authid empty => true add, find a new authid number if (!$authid) { my $sth=$dbh->prepare("select max(authid) from auth_header"); $sth->execute; ($authid)=$sth->fetchrow; $authid=$authid+1; - -##Insert the recordID and authtype in MARC record -## -MARCkoha2marcOnefield($record,"auth_authid",$authid,"authorities"); -MARCkoha2marcOnefield($record,"auth_authtypecode",$authtypecode,"authorities"); - $dbh->do("lock tables auth_header WRITE"); - $sth=$dbh->prepare("insert into auth_header (authid,datecreated,authtypecode,marc) values (?,now(),?,?)"); - $sth->execute($authid,$authtypecode,$record->as_usmarc); - $sth->finish; - - }else{ -##Modified record reinsertid update authid-- bulk import comes here -MARCkoha2marcOnefield($record,"auth_authid",$authid,"authorities"); -MARCkoha2marcOnefield($record,"auth_authtypecode",$authtypecode,"authorities"); - - my $sth=$dbh->prepare("replace auth_header set marc=? authid=?,authtypecode=?,datecreated=now()"); - $sth->execute($record->as_usmarc,$authid,$authtypecode); + } + +##Modified record may also come here use REPLACE -- bulk import comes here +XML_writeline($record,"auth_authid",$authid,"authorities"); +XML_writeline($record,"auth_authtypecode",$authtypecode,"authorities"); +my $xml=XML_hash2xml($record); + my $sth=$dbh->prepare("REPLACE auth_header set marcxml=? authid=?,authtypecode=?,datecreated=now()"); + $sth->execute($xml,$authid,$authtypecode); $sth->finish; - } + ZEBRAop($dbh,$authid,'specialUpdate',"authorityserver"); ## If the record is linked to another update the linked authorities with new authid -if ($record->field($linkidfield)){ -my @fields=$record->field($linkidfield); - - foreach my $field (@fields){ -my $linkid=$field->subfield($linkidsubfield) ; - if ($linkid){ +my @linkids=XML_readline_asarray($record,"auth_linkid","authorities"); + foreach my $linkid (@linkids){ ##Modify the record of linked AUTHaddlink($dbh,$linkid,$authid); } - } -} - return ($authid); +return ($authid); } sub AUTHaddlink{ my ($dbh,$linkid,$authid)=@_; -my $record=AUTHgetauthority($dbh,$linkid); +my $record=XMLgetauthorityhash($dbh,$linkid); my $authtypecode=AUTHfind_authtypecode($dbh,$linkid); #warn "adding l:$linkid,a:$authid,auth:$authtypecode"; -$record=MARCkoha2marcOnefield($record,"auth_linkid",$authid,"authorities"); +XML_writeline($record,"auth_linkid",$authid,"authorities"); +my $xml=XML_hash2xml($record); $dbh->do("lock tables auth_header WRITE"); - my $sth=$dbh->prepare("update auth_header set marc=? where authid=?"); - $sth->execute($record->as_usmarc,$linkid); + my $sth=$dbh->prepare("update auth_header set marcxml=? where authid=?"); + $sth->execute($xml,$linkid); $sth->finish; $dbh->do("unlock tables"); ZEBRAop($dbh,$linkid,'specialUpdate',"authorityserver"); @@ -391,37 +355,25 @@ $dbh->do("lock tables auth_header WRITE"); sub XMLgetauthority { - # Returns MARC::XML of the authority passed in parameter. my ( $dbh, $authid ) = @_; - - - my $sth = - $dbh->prepare("select marc from auth_header where authid=? " ); - + my $sth = $dbh->prepare("select marcxml from auth_header where authid=? " ); $sth->execute($authid); - my ($marc)=$sth->fetchrow; -$marc=MARC::File::USMARC::decode($marc); - my $marcxml=$marc->as_xml_record(); -#warn $marcxml; - return $marcxml; - - + my ($marcxml)=$sth->fetchrow; + $marcxml=Encode::decode('utf8',$marcxml); + return ($marcxml); } +sub XMLgetauthorityhash { +## Utility to return hashed MARCXML +my ($dbh,$authid)=@_; +my $xml=XMLgetauthority($dbh,$authid); +my $xmlhash=XML_xml2hash_onerecord($xml); +return $xmlhash; +} -sub AUTHgetauthority { -# Returns MARC::Record of the biblio passed in parameter. - my ($dbh,$authid)=@_; -my $sth=$dbh->prepare("select marc from auth_header where authid=?"); - $sth->execute($authid); - my ($marc) = $sth->fetchrow; -my $record=MARC::File::USMARC::decode($marc); - - return ($record); -} sub AUTHgetauth_type { my ($authtypecode) = @_; @@ -431,36 +383,40 @@ sub AUTHgetauth_type { return $sth->fetchrow_hashref; } + sub AUTHmodauthority { +## $record is expected to be an xmlhash my ($dbh,$authid,$record,$authtypecode)=@_; - my ($oldrecord)=&AUTHgetauthority($dbh,$authid); + my ($oldrecord)=&AUTHgetauthorityhash($dbh,$authid); +### This equality is very dodgy ,It porobaby wont work if ($oldrecord eq $record) { return; } -my $sth=$dbh->prepare("update auth_header set marc=? where authid=?"); -# find if linked records exist and delete them -my($linkidfield,$linkidsubfield)=MARCfind_marc_from_kohafield("auth_linkid","authorities"); - -if ($oldrecord->field($linkidfield)){ -my @fields=$oldrecord->field($linkidfield); - foreach my $field (@fields){ -my $linkid=$field->subfield($linkidsubfield) ; - if ($linkid){ +## +my $sth=$dbh->prepare("update auth_header set marcxml=? where authid=?"); +# find if linked records exist and delete the link in them +my @linkids=XML_readline_asarray($oldrecord,"auth_linkid","authorities"); + + foreach my $linkid (@linkids){ ##Modify the record of linked - my $linkrecord=AUTHgetauthority($dbh,$linkid); + my $linkrecord=AUTHgetauthorityhash($dbh,$linkid); my $linktypecode=AUTHfind_authtypecode($dbh,$linkid); -# my ( $linkidfield2,$linkidsubfield2)=MARCfind_marc_from_kohafield("auth_linkid","authorities"); - my @linkfields=$linkrecord->field($linkidfield); - foreach my $linkfield (@linkfields){ - if ($linkfield->subfield($linkidsubfield) eq $authid){ - $linkrecord->delete_field($linkfield); - $sth->execute($linkrecord->as_usmarc,$linkid); - ZEBRAop($dbh,$linkid,'specialUpdate',"authorityserver"); + my @linkfields=XML_readline_asarray($linkrecord,"auth_linkid","authorities"); + my $updated; + foreach my $linkfield (@linkfields){ + if ($linkfield eq $authid){ + XML_writeline_id($linkrecord,"auth_linkid",$linkfield,"","authorities"); + $updated=1; } - }#foreach linkfield - } + }#foreach linkfield + my $linkedxml=XML_hash2xml($linkrecord); + if ($updated==1){ + $sth->execute($linkedxml,$linkid); + ZEBRAop($dbh,$linkid,'specialUpdate',"authorityserver"); + } + }#foreach linkid -} + #Now rewrite the $record to table with an add $authid=AUTHaddauthority($dbh,$record,$authid,$authtypecode); @@ -487,15 +443,16 @@ return $authid; sub AUTHdelauthority { my ($dbh,$authid,$keep_biblio) = @_; -# if the keep_biblio is set to 1, then authority entries in biblio are preserved. +# if the keep_biblio is set to 1, then authority entries in biblio are preserved. +# FIXME : delete or not in biblio tables (depending on $keep_biblio flag) is not implemented ZEBRAop($dbh,$authid,"recordDelete","authorityserver"); - $dbh->do("delete from auth_header where authid=$authid") ; - -# FIXME : delete or not in biblio tables (depending on $keep_biblio flag) } - +sub ZEBRAdelauthority { +my ($dbh,$authid)=@_; + $dbh->do("delete from auth_header where authid=$authid") ; +} sub AUTHfind_authtypecode { my ($dbh,$authid) = @_; @@ -506,75 +463,22 @@ sub AUTHfind_authtypecode { } - -sub AUTHhtml2marc { - my ($dbh,$rtags,$rsubfields,$rvalues,%indicators) = @_; - my $prevtag = -1; - my $record = MARC::Record->new(); -#---- TODO : the leader is missing - -# my %subfieldlist=(); - my $prevvalue; # if tag <10 - my $field; # if tag >=10 - for (my $i=0; $i< @$rtags; $i++) { - # rebuild MARC::Record - if (@$rtags[$i] ne $prevtag) { - if ($prevtag < 10) { - if ($prevvalue) { - $record->add_fields((sprintf "%03s",$prevtag),$prevvalue); - } - } else { - if ($field) { - $record->add_fields($field); - } - } - $indicators{@$rtags[$i]}.=' '; - if (@$rtags[$i] <10) { - $prevvalue= @$rvalues[$i]; - undef $field; - } else { - undef $prevvalue; - $field = MARC::Field->new( (sprintf "%03s",@$rtags[$i]), substr($indicators{@$rtags[$i]},0,1),substr($indicators{@$rtags[$i]},1,1), @$rsubfields[$i] => @$rvalues[$i]); - } - $prevtag = @$rtags[$i]; - } else { - if (@$rtags[$i] <10) { - $prevvalue=@$rvalues[$i]; - } else { - if (length(@$rvalues[$i])>0) { - $field->add_subfields(@$rsubfields[$i] => @$rvalues[$i]); - } - } - $prevtag= @$rtags[$i]; - } - } - # the last has not been included inside the loop... do it now ! - $record->add_fields($field) if $field; - return $record; -} - - - - -sub FindDuplicate { - +sub FindDuplicateauth { +### Should receive an xmlhash my ($record,$authtypecode)=@_; -# warn "IN for ".$record->as_formatted; my $dbh = C4::Context->dbh; -# warn "".$record->as_formatted; my $sth = $dbh->prepare("select auth_tag_to_report from auth_types where authtypecode=?"); $sth->execute($authtypecode); my ($auth_tag_to_report) = $sth->fetchrow; $sth->finish; # build a request for authoritysearch my (@tags, @and_or, @excluding, @operator, @value, $offset, $length); - if ($record->field($auth_tag_to_report)) { + +# if ($record->field($auth_tag_to_report)) { push @tags, $auth_tag_to_report; - push @and_or, ""; - push @excluding, ""; push @operator, "all"; - push @value, $record->field($auth_tag_to_report)->as_string(); - } + @value, XML_readline_asarray($record,"","",$auth_tag_to_report); +# } my ($finalresult,$nbresult) = authoritysearch($dbh,\@tags,\@and_or,\@excluding,\@operator,\@value,0,10,$authtypecode); # there is at least 1 result => return the 1st one @@ -586,110 +490,120 @@ sub FindDuplicate { } sub getsummary{ -## give this a Marc record to return summary +## give this an XMLhash record to return summary my ($dbh,$record,$authid,$authtypecode)=@_; - -# my $authtypecode = AUTHfind_authtypecode($dbh,$authid); my $authref = getauthtype($authtypecode); my $summary = $authref->{summary}; - my @fields = $record->fields(); -# chop $tags_using_authtype; # if the library has a summary defined, use it. Otherwise, build a standard one - if ($summary) { - my @fields = $record->fields(); - foreach my $field (@fields) { - my $tag = $field->tag(); - my $tagvalue = $field->as_string(); - $summary =~ s/\[(.?.?.?.?)$tag\*(.*?)]/$1$tagvalue$2\[$1$tag$2]/g; + if ($summary) { + my $fields = $record->{'datafield'}; + foreach my $field (@$fields) { + my $tag = $field->{'tag'}; if ($tag<10) { + my $tagvalue = XML_readline_onerecord($record,"","",$field->{tag}); + $summary =~ s/\[(.?.?.?.?)$tag\*(.*?)]/$1$tagvalue$2\[$1$tag$2]/g; } else { - my @subf = $field->subfields; + my @subf = XML_readline_withtags($record,"","",$tag); for my $i (0..$#subf) { my $subfieldcode = $subf[$i][0]; my $subfieldvalue = $subf[$i][1]; my $tagsubf = $tag.$subfieldcode; $summary =~ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g; - } - } - } + }## each subf + }#tag >10 + }##each field $summary =~ s/\[(.*?)]//g; $summary =~ s/\n/
/g; - } else { + } else { +## $summary did not exist create a standard summary my $heading; # = $authref->{summary}; my $altheading; my $seeheading; my $see; - my @fields = $record->fields(); + my $fields = $record->{datafield}; if (C4::Context->preference('marcflavour') eq 'UNIMARC') { # construct UNIMARC summary, that is quite different from MARC21 one + foreach my $field (@$fields) { # accepted form - foreach my $field ($record->field('2..')) { - $heading.= $field->as_string(); - } + if ($field->{tag} = ~/'2..'/) { + foreach my $subfield ("a".."z"){ + ## Fixme-- if UNICODE uses numeric subfields as well add them + $heading.=XML_readline_onerecord($record,"","",$field->{tag},$subfield); + } + }##tag 2.. # rejected form(s) - foreach my $field ($record->field('4..')) { - $summary.= "   ".$field->as_string()."
"; + if ($field->{tag} = ~/'4..'/) { + my $value; + foreach my $subfield ("a".."z"){ + ## Fixme-- if UNICODE uses numeric subfields as well add them + $value.=XML_readline_onerecord($record,"","",$field->{tag},$subfield); + } + $summary.= "   ".$value."
"; $summary.= "      see: ".$heading."
"; - } + }##tag 4.. # see : - foreach my $field ($record->field('5..')) { - $summary.= "   ".$field->as_string()."
"; + if ($field->{tag} = ~/'5..'/) { + my $value; + foreach my $subfield ("a".."z"){ + ## Fixme-- if UNICODE uses numeric subfields as well add them + $value.=XML_readline_onerecord($record,"","",$field->{tag},$subfield); + } + $summary.= "   ".$value."
"; $summary.= "      see: ".$heading."
"; - } + }# tag 5.. # // form - foreach my $field ($record->field('7..')) { - $seeheading.= "      see also: ".$field->as_string()."
"; - $altheading.= "   ".$field->as_string()."
"; + if ($field->{tag} = ~/'7..'/) { + my $value; + foreach my $subfield ("a".."z"){ + ## Fixme-- if UNICODE uses numeric subfields as well add them + $value.=XML_readline_onerecord($record,"","",$field->{tag},$subfield); + } + $seeheading.= "      see also: ".$value."
"; + $altheading.= "   ".$value."
"; $altheading.= "      see also: ".$heading."
"; - } + }# tag 7.. + }## Foreach fields $summary = "".$heading."
".$seeheading.$altheading.$summary; - } else { + } else { # construct MARC21 summary - foreach my $field ($record->field('1..')) { - if ($record->field('100')) { - $heading.= $field->as_string('abcdefghjklmnopqrstvxyz68'); - } elsif ($record->field('110')) { - $heading.= $field->as_string('abcdefghklmnoprstvxyz68'); - } elsif ($record->field('111')) { - $heading.= $field->as_string('acdefghklnpqstvxyz68'); - } elsif ($record->field('130')) { - $heading.= $field->as_string('adfghklmnoprstvxyz68'); - } elsif ($record->field('148')) { - $heading.= $field->as_string('abvxyz68'); - } elsif ($record->field('150')) { - # $heading.= $field->as_string('abvxyz68'); - $heading.= $field->as_formatted(); - my $tag=$field->tag(); - $heading=~s /^$tag//g; - $heading =~s /\_/\$/g; - } elsif ($record->field('151')) { - $heading.= $field->as_string('avxyz68'); - } elsif ($record->field('155')) { - $heading.= $field->as_string('abvxyz68'); - } elsif ($record->field('180')) { - $heading.= $field->as_string('vxyz68'); - } elsif ($record->field('181')) { - $heading.= $field->as_string('vxyz68'); - } elsif ($record->field('182')) { - $heading.= $field->as_string('vxyz68'); - } elsif ($record->field('185')) { - $heading.= $field->as_string('vxyz68'); - } else { - $heading.= $field->as_string(); - } - } #See From - foreach my $field ($record->field('4..')) { - $seeheading.= "   ".$field->as_string()."
"; + foreach my $field (@$fields) { + my $tag="1.."; + if($field->{tag} =~ /^$tag/) { + if ($field->{tag} eq '150') { + my $value; + foreach my $subfield ("a".."z"){ + $value=XML_readline_onerecord($record,"","","150",$subfield); + $heading.="\$".$subfield.$value if $value; + } + }else{ + foreach my $subfield ("a".."z"){ + $heading.=XML_readline_onerecord($record,"","",$field->{tag},$subfield); + } + }### tag 150 or else + }##tag 1.. + my $tag="4.."; + if($field->{tag} =~ /^$tag/) { + foreach my $subfield ("a".."z"){ + $seeheading.=XML_readline_onerecord($record,"","",$field->{tag},$subfield); + } + $seeheading.= "   ".$seeheading."
"; $seeheading.= "      see: ".$seeheading."
"; - } #See Also - foreach my $field ($record->field('5..')) { - $altheading.= "      see also: ".$field->as_string()."
"; - $altheading.= "   ".$field->as_string()."
"; + } #tag 4.. + my $tag="5.."; + if($field->{tag} =~ /^$tag/) { + my $value; + foreach my $subfield ("a".."z"){ + $value.=XML_readline_onerecord($record,"","",$field->{tag},$subfield); + } + $seeheading.= "      see also: ".$value."
"; + $altheading.= "   ".$value."
"; $altheading.= "      see also: ".$altheading."
"; - } - $summary.=$heading.$seeheading.$altheading; - } - } + }#tag 5.. + + }##for each field + $summary.=$heading.$seeheading.$altheading; + }##USMARC vs UNIMARC + }###Summary exists or not return $summary; } sub getdictsummary{ @@ -714,9 +628,9 @@ my ($dbh,$record,$authid,$authtypecode)=@_; my $subfieldvalue = $subf[$i][1]; my $tagsubf = $tag.$subfieldcode; $summary =~ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g; - } - } - } + }#for $i + }#tag >10 + }## each field $summary =~ s/\[(.*?)]//g; $summary =~ s/\n/
/g; } else { @@ -724,7 +638,7 @@ my ($dbh,$record,$authid,$authtypecode)=@_; my $altheading; my $seeheading; my $see; - my @fields = $record->fields(); + my @fields = $record->{datafields}; if (C4::Context->preference('marcflavour') eq 'UNIMARC') { # construct UNIMARC summary, that is quite different from MARC21 one # accepted form @@ -750,39 +664,36 @@ my ($dbh,$record,$authid,$authtypecode)=@_; $summary = "".$heading."
".$seeheading.$altheading.$summary; } else { # construct MARC21 summary - foreach my $field ($record->field('1..')) { - $heading.= $field->as_string('a'); - - } #See From + foreach my $field (@fields) { + if ($field->{tag}=~/'1..'/){ + $heading.= XML_readline_onerecord($record,"","",$field->{tag},"a"); + } + } #each fieldd $summary=$heading; - } - } + }# USMARC vs UNIMARC + }### Summary exists return $summary; } + + sub merge { +##mergefrom is authid MARCfrom is marcxml hash of authority +### mergeto ditto my ($dbh,$mergefrom,$MARCfrom,$mergeto,$MARCto) = @_; + return unless (defined $MARCfrom); + return unless (defined $MARCto); my $authtypecodefrom = AUTHfind_authtypecode($dbh,$mergefrom); my $authtypecodeto = AUTHfind_authtypecode($dbh,$mergeto); # return if authority does not exist - my @X = $MARCfrom->fields(); - return if $#X == -1; - my @X = $MARCto->fields(); - return if $#X == -1; - # search the tag to report my $sth = $dbh->prepare("select auth_tag_to_report from auth_types where authtypecode=?"); $sth->execute($authtypecodefrom); my ($auth_tag_to_report) = $sth->fetchrow; - my @record_to; - @record_to = $MARCto->field($auth_tag_to_report)->subfields() if $MARCto->field($auth_tag_to_report); - my @record_from; - @record_from = $MARCfrom->field($auth_tag_to_report)->subfields() if $MARCfrom->field($auth_tag_to_report); - # search all biblio tags using this authority. - $sth = $dbh->prepare("select distinct tagfield from marc_subfield_structure where authtypecode=? "); + $sth = $dbh->prepare("select distinct tagfield from biblios_subfield_structure where authtypecode=? "); $sth->execute($authtypecodefrom); my @tags_using_authtype; while (my ($tagfield) = $sth->fetchrow) { @@ -790,12 +701,12 @@ my @tags_using_authtype; } ## The subfield for linking authorities is stored in koha_attr named auth_biblio_link_subf ## This way we may use whichever subfield we want without harcoding 9 in -my $tagsubfield=MARCfind_marc_from_kohafield("auth_biblio_link_subf","biblios"); +my ($dummyfield,$tagsubfield)=MARCfind_marc_from_kohafield("auth_biblio_link_subf","biblios"); # now, find every biblio using this authority ### try ZOOM search here my @oConnection; $oConnection[0]=C4::Context->Zconn("biblioserver"); -$oConnection[0]->option(elementSetName=>"biblios"); ## we only need the bibliographic record +##$oConnection[0]->option(elementSetName=>"biblios"); ## Needs a fix my $query; my ($attr2)=MARCfind_attr_from_kohafield("auth_authid"); my $attrfield.=$attr2; @@ -805,50 +716,140 @@ my $oResult = $oConnection[0]->search_pqf($query); while (($i = ZOOM::event(\@oConnection)) != 0) { $event = $oConnection[$i-1]->last_event(); last if $event == ZOOM::Event::ZEND; - }# while + }# while event my $count=$oResult->size(); my @reccache; my $z=0; while ( $z<$count ) { my $rec; - $rec=$oResult->record($z); + $rec=$oResult->record($z); my $marcdata = $rec->raw(); -push @reccache, $marcdata; +my $koharecord=Encode::decode("utf8",$marcdata); +$koharecord=XML_xml2hash($koharecord); + my ( $xmlrecord, @itemsrecord) = XML_separate($koharecord); + +push @reccache, $xmlrecord; $z++; } $oResult->destroy(); $oConnection[0]->destroy(); -foreach my $marc(@reccache){ -my $update; - my $marcrecord=MARC::Record->new_from_xml($marc,'UTF-8'); -# $marcrecord = MARC::File::USMARC::decode($marc); - foreach my $tagfield (@tags_using_authtype){ - - - my @tags = $marcrecord->field($tagfield); - foreach my $tag (@tags){ - my $tagsubs=$tag->subfield($tagsubfield); -#warn "$tagfield:$tagsubs:$mergefrom"; - if ($tagsubs eq $mergefrom) { - - $tag->update($tagsubfield =>$mergeto); - foreach my $subfield (@record_to) { -# warn "$subfield,$subfield->[0],$subfield->[1]"; - $tag->update($subfield->[0] =>$subfield->[1]); - }#for $subfield - } - $marcrecord->delete_field($tag); - $marcrecord->add_fields($tag); + foreach my $xmlhash (@reccache){ + my $update; + foreach my $tagfield (@tags_using_authtype){ + + ###Change the authid in biblio + $xmlhash=XML_writeline_id($xmlhash,$mergefrom,$mergeto,$tagfield,$tagsubfield); + ### delete all subfields of bibliorecord + $xmlhash=XML_delete_withid($xmlhash,$mergeto,$tagfield,$tagsubfield); + ####Read all the data in from authrecord + my @record_to=XML_readline_withtags($MARCto,"","",$auth_tag_to_report); + ##Write the data to biblio + foreach my $subfield (@record_to) { + ## Replace the data in MARCXML with the new matching authid + XML_writeline_withid($xmlhash,$tagsubfield,$mergeto,$subfield->[1],$tagfield,$subfield->[0]); $update=1; - }#for each tag - }#foreach tagfield -my $oldbiblio = MARCmarc2koha($dbh,$marcrecord,"biblios") ; + }#foreach $subfield + }#foreach tagfield if ($update==1){ - &NEWmodbiblio($dbh,$oldbiblio->{'biblionumber'},$marcrecord,"") ; + my $biblionumber=XML_readline_onerecord($xmlhash,"biblionumber","biblios"); + my $frameworkcode=MARCfind_frameworkcode($dbh,$biblionumber); + NEWmodbiblio($dbh,$biblionumber,$xmlhash,$frameworkcode) ; } -}#foreach $marc + }#foreach $xmlhash }#sub + +sub XML_writeline_withid{ +## Only used in authorities to update biblios with matching authids +my ($xml,$idsubf,$id,$newvalue,$tag,$subf)=@_; +my $biblio=$xml->{'datafield'}; +my $updated=0; + if ($tag>9){ + foreach my $data (@$biblio){ + if ($data->{'tag'} eq $tag){ + my @subfields=$data->{'subfield'}; + foreach my $subfield ( @subfields){ + foreach my $code ( @$subfield){ + if ($code->{'code'} eq $idsubf && $code->{'content'} eq $id){ + ###This is the correct tag -- Now reiterate and update + my @newsubs; + foreach my $code ( @$subfield){ + if ($code->{'code'} eq $subf ){ + $code->{'content'}=$newvalue; + $updated=1; + } + push @newsubs, $code; + }## each code updated + if (!$updated){ + ##Create the subfield if it did not exist + push @newsubs,{code=>$subf,content=>$newvalue}; + $data->{subfield}= \@newsubs; + $updated=1; + }### created + }### correct tag with id + }#each code + }##each subfield + }# tag match + }## each datafield + }### tag >9 +return $xml; +} +sub XML_delete_withid{ +## Currently only usedin authorities +### deletes all the subfields of a matching authid +my ($xml,$id,$tag,$idsubf)=@_; +my $biblio=$xml->{'datafield'}; + if ($tag>9){ + foreach my $data (@$biblio){ + if ($data->{'tag'} eq $tag){ + my @subfields=$data->{'subfield'}; + foreach my $subfield ( @subfields){ + foreach my $code ( @$subfield){ + if ($code->{'code'} eq $idsubf && $code->{'content'} eq $id){ + ###This is the correct tag -- Now reiterate and delete all but id subfield + foreach my $code ( @$subfield){ + if ($code->{'code'} ne $idsubf ){ + $code->{'content'}=""; + } + }## each code deleted + }### correct tag with id + }#each code + }## each subfield + }## tag matches + }## each datafield + }# tag >9 +return $xml; +} + +sub XML_readline_withtags { +my ($xml,$kohafield,$recordtype,$tag,$subf)=@_; +#$xml represents one record of MARCXML as perlhashed +## returns an array of read fields--useful for reading repeated fields +### $recordtype is needed for mapping the correct field if supplied +### If only $tag is give reads the whole tag +###Returns subfieldcodes as well +my @value; + ($tag,$subf)=MARCfind_marc_from_kohafield($kohafield,$recordtype) if $kohafield; +if ($tag){ +### Only datafields are read +my $biblio=$xml->{'datafield'}; + if ($tag>9){ + foreach my $data (@$biblio){ + if ($data->{'tag'} eq $tag){ + foreach my $subfield ( $data->{'subfield'}){ + foreach my $code ( @$subfield){ + if ($code->{'code'} eq $subf || !$subf){ + push @value,[$code->{'code'},$code->{'content'}]; + } + }# each code + }# each subfield + }### tag found + }## each tag + }##tag >9 +}## if tag +return @value; +} + END { } # module clean-up code here (global destructor) =back @@ -863,10 +864,8 @@ Paul POULAIN paul.poulain@free.fr # $Id$ # $Log$ -# Revision 1.29 2006/09/01 22:16:00 tgarip1957 -# New XML API -# Event & Net::Z3950 dependency removed -# HTML::Template::Pro dependency added +# Revision 1.30 2006/09/06 16:21:03 tgarip1957 +# Clean up before final commits # # Revision 1.9.2.6 2005/06/07 10:02:00 tipaul # porting dictionnary search from head to 2.2. there is now a ... facing titles, author & subject, to search in biblio & authorities existing values. diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 015e3090d4..f8a8599ddf 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -1,5 +1,5 @@ package C4::Biblio; -# New subs added by tgarip@neu.edu.tr 05/11/05 +# New XML API added by tgarip@neu.edu.tr 25/08/06 # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. @@ -19,13 +19,10 @@ use strict; require Exporter; use C4::Context; -use MARC::Record; -use MARC::File::USMARC; -use MARC::File::XML; use XML::Simple; use Encode; use utf8; -use Data::Dumper; + use vars qw($VERSION @ISA @EXPORT); # set the version for version checking @@ -49,20 +46,16 @@ $VERSION = 2.01; &NEWdelitem &NEWmodbiblioframework -&MARCgetallitems + &MARCfind_marc_from_kohafield &MARCfind_frameworkcode &MARCfind_itemtype &MARCgettagslib &MARCitemsgettagslib -&MARCkoha2marc -&MARCmarc2koha -&MARCkoha2marcOnefield + &MARCfind_attr_from_kohafield &MARChtml2xml -&MARCgetbiblio -&MARCgetitem &XMLgetbiblio &XMLgetbibliohash @@ -76,11 +69,15 @@ $VERSION = 2.01; &XMLmarc2koha_onerecord &XML_readline &XML_readline_onerecord +&XML_readline_asarray &XML_writeline +&XML_writeline_id &XMLmoditemonefield +&XMLkoha2marc +&XML_separate +&ZEBRAdelbiblio &ZEBRAgetrecord - &ZEBRAop &ZEBRAopserver &ZEBRA_readyXML @@ -123,7 +120,6 @@ my $leader=$xml->{'leader'}; foreach my $control (@$controlfields){ if ($control->{'tag'} eq $tag){ return $control->{'content'} if $control->{'content'}; - } } } @@ -131,6 +127,45 @@ my $leader=$xml->{'leader'}; }## if tag is mapped return ""; } +sub XML_readline_asarray{ +my ($xml,$kohafield,$recordtype,$tag,$subf)=@_; +#$xml represents one record of MARCXML as perlhashed +## returns an array of read fields--useful for readind repeated fields +### $recordtype is needed for mapping the correct field if supplied +### If only $tag is give reads the whole tag +my @value; + ($tag,$subf)=MARCfind_marc_from_kohafield($kohafield,$recordtype) if $kohafield; +if ($tag){ +my $biblio=$xml->{'datafield'}; +my $controlfields=$xml->{'controlfield'}; +my $leader=$xml->{'leader'}; + if ($tag>9){ + foreach my $data (@$biblio){ + if ($data->{'tag'} eq $tag){ + foreach my $subfield ( $data->{'subfield'}){ + foreach my $code ( @$subfield){ + if ($code->{'code'} eq $subf || !$subf){ + push @value, $code->{'content'}; + } + } + } + } + } + }else{ + if ($tag eq "000" || $tag eq "LDR"){ + push @value, $leader->[0] if $leader->[0]; + }else{ + foreach my $control (@$controlfields){ + if ($control->{'tag'} eq $tag){ + push @value, $control->{'content'} if $control->{'content'}; + + } + } + } + }##tag +}## if tag is mapped +return @value; +} sub XML_readline{ my ($xml,$kohafield,$recordtype,$tag,$subf)=@_; @@ -223,7 +258,7 @@ my $updated=0; } } ## Tag did not exist - if (!$updated){ + if (!$updated){ if ($subf){ push @$biblio, { @@ -245,7 +280,7 @@ my $updated=0; 'tag' =>$tag } ; } - }## created now + }## created now }else{ foreach my $control(@$controlfield){ if ($control->{'tag'} eq $tag){ @@ -260,6 +295,37 @@ my $updated=0; return $xml; } +sub XML_writeline_id { +### This routine is similar to XML_writeline but replaces a given value and do not create a new field +## Useful for repeating fields +## Currently usedin authorities +my ($xml,$oldvalue,$newvalue,$tag,$subf)=@_; +$newvalue= Encode::decode('utf8',$newvalue) if $newvalue; +my $biblio=$xml->{'datafield'}; +my $controlfield=$xml->{'controlfield'}; + if ($tag>9){ + foreach my $data (@$biblio){ + if ($data->{'tag'} eq $tag){ + my @subfields=$data->{'subfield'}; + foreach my $subfield ( @subfields){ + foreach my $code ( @$subfield){ + if ($code->{'code'} eq $subf && $code->{'content'} eq $oldvalue){ + $code->{'content'}=$newvalue; + } + } + } + } + } + }else{ + foreach my $control(@$controlfield){ + if ($control->{'tag'} eq $tag && $control->{'content'} eq $oldvalue ){ + $control->{'content'}=$newvalue; + } + } + } +return $xml; +} + sub XML_xml2hash{ ##make a perl hash from xml file my ($xml)=@_; @@ -331,7 +397,7 @@ $marcxml=Encode::decode('utf8',$marcxml); sub XMLgetitemhash{ ## Utility to return s hashed MARCXML my ( $dbh, $itemnumber,$barcode ) = @_; -my $xml=XMLgeitem( $dbh, $itemnumber,$barcode); +my $xml=XMLgetitem( $dbh, $itemnumber,$barcode); my $xmlhash=XML_xml2hash_onerecord($xml); return $xmlhash; } @@ -482,14 +548,43 @@ my ($record) = XMLgetitem($dbh,$itemnumber); $sth->finish; }else{ NEWmoditem($dbh,$recordhash,$biblionumber,$itemnumber); + } + } +sub XMLkoha2marc { +# warn "MARCkoha2marc"; +## This routine is still used for acqui management +##Returns a XML recordhash from a kohahash + my ($dbh,$result,$recordtype) = @_; +###create a basic MARCXML +# find today's date +my ($sec,$min,$hour,$mday,$mon,$year) = localtime(); + $year += 1900; + $mon += 1; + my $timestamp = sprintf("%4d%02d%02d%02d%02d%02d.0", + $year,$mon,$mday,$hour,$min,$sec); +$year=substr($year,2,2); + my $accdate=sprintf("%2d%02d%02d",$year,$mon,$mday); +my ($titletag,$titlesubf)=MARCfind_marc_from_kohafield("title","biblios"); +my $xml=" naa a22 7ar4500$timestamp$accdate"; +## Now build XML + my $record = XML_xml2hash($xml); + my $sth2=$dbh->prepare("SELECT marctokoha from koha_attr where tagfield is not null and recordtype=?"); + $sth2->execute($recordtype); + my $field; + while (($field)=$sth2->fetchrow) { +warn $field; + $record=XML_writeline($record,$field,$result->{$field},$recordtype) if $result->{$field}; + } +return $record; } + # # # MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC # -## Script to deal with MARC read write operations +## Script to deal with MARCXML related tables ##Sub to match kohafield to Z3950 -attributes @@ -526,7 +621,7 @@ sub MARCgettagslib { $sth->execute($frameworkcode); my ( $liblibrarian, $libopac, $tag, $res, $tab, $mandatory, $repeatable ); - while ( ( $tag, $liblibrarian, $libopac, $mandatory, $repeatable ) = $sth->fetchrow ) { + while ( my ( $tag, $liblibrarian, $libopac, $mandatory, $repeatable ) = $sth->fetchrow ) { $res->{$tag}->{lib} = ($forlibrarian or !$libopac)?$liblibrarian:$libopac; $res->{$tab}->{tab} = ""; # XXX $res->{$tag}->{mandatory} = $mandatory; @@ -648,66 +743,6 @@ $recordtype="biblios" unless $recordtype; -sub MARCgetbiblio { - # Returns MARC::Record of the biblio passed in parameter. - ### Takes a new parameter of $title_author =1 which parses the record obly on those fields and nothing else - ### Its useful when Koha requires only title&author for performance issues - my ( $dbh, $biblionumber, $title_author ) = @_; - my $sth = - $dbh->prepare("select marc from biblio where biblionumber=? " ); - $sth->execute( $biblionumber); - my ($marc)=$sth->fetchrow; -my $record; - if ($title_author){ - $record = MARC::File::USMARC::decode($marc,\&func_title_author); - }else{ - $record = MARC::File::USMARC::decode($marc); - } -$sth->finish; - return $record; -} - - - - - -sub MARCgetitem { -# warn "MARCgetitem"; - # Returns MARC::Record of the item passed in parameter uses either itemnumber or barcode - my ( $dbh, $itemnumber,$barcode ) = @_; -my $sth; -if ($itemnumber){ - $sth = $dbh->prepare("select i.marc from items i where i.itemnumber=?" ); - $sth->execute($itemnumber); -}else{ - $sth = $dbh->prepare("select i.marc from items i where i.barcode=?" ); - $sth->execute($barcode); -} - my ($marc)=$sth->fetchrow; - my $record = MARC::File::USMARC::decode($marc); - - return ($record); -} - -sub MARCgetallitems { -# warn "MARCgetallitems"; - # Returns an array of MARC::Record of the items passed in parameter as biblionumber - my ( $dbh, $biblionumber ) = @_; -my @results; -my $sth = $dbh->prepare("select marc from items where biblionumber =?" ); - $sth->execute($biblionumber); - - while(my ($marc)=$sth->fetchrow_array){ - my $record = MARC::File::USMARC::decode($marc); - push @results,$record; -} -return @results; -} - - - - - sub MARCfind_frameworkcode { # warn "MARCfind_frameworkcode"; @@ -748,48 +783,48 @@ sub MARChtml2xml { @$values[$i] =~ s/'/'/g; if ((@$tags[$i] ne $prevtag)){ - $j++ unless (@$tags[$i] eq ""); + my $tag=substr(@$tags[$i],0,3); + $j++ unless ($tag eq ""); ## warn "IND:".substr(@$indicator[$j],0,1).substr(@$indicator[$j],1,1)." ".@$tags[$i]; if (!$first){ $xml.="\n"; - if ((@$tags[$i] > 10) && (@$values[$i] ne "")){ + if (($tag> 10) && (@$values[$i] ne "")){ my $ind1 = substr(@$indicator[$j],0,1); my $ind2 = substr(@$indicator[$j],1,1); - $xml.="\n"; + $xml.="\n"; $xml.="@$values[$i]\n"; $first=0; } else { $first=1; } - } else { + } else { if (@$values[$i] ne "") { # leader - if (@$tags[$i] eq "000") { + if ($tag eq "000") { ##Force the leader to UTF8 substr(@$values[$i],9,1)="a"; $xml.="@$values[$i]\n"; $first=1; # rest of the fixed fields - } elsif (@$tags[$i] < 10) { - $xml.="@$values[$i]\n"; + } elsif ($tag < 10) { + $xml.="@$values[$i]\n"; $first=1; } else { my $ind1 = substr(@$indicator[$j],0,1); my $ind2 = substr(@$indicator[$j],1,1); - $xml.="\n"; + $xml.="\n"; $xml.="@$values[$i]\n"; $first=0; } } } } else { # @$tags[$i] eq $prevtag - if (@$values[$i] eq "") { - } - else { + unless (@$values[$i] eq "") { + my $tag=substr(@$tags[$i],0,3); if ($first){ my $ind1 = substr(@$indicator[$j],0,1); my $ind2 = substr(@$indicator[$j],1,1); - $xml.="\n"; + $xml.="\n"; $first=0; } $xml.="@$values[$i]\n"; @@ -828,128 +863,8 @@ KOHA_XML_HEADER -sub MARCkoha2marc { -# warn "MARCkoha2marc"; -## This routine most probably will be depreaceated -- it is still used for acqui management -##Returns a MARC record from a hash - my ($dbh,$result,$recordtype) = @_; - my $record = MARC::Record->new(); - my $sth2=$dbh->prepare("SELECT marctokoha from koha_attr where tagfield is not null and recordtype=?"); - $sth2->execute($recordtype); - my $field; - while (($field)=$sth2->fetchrow) { - $record=&MARCkoha2marcOnefield($record,$field,$result->{$field},$recordtype) if $result->{$field}; - } -return $record; -} -sub MARCmarc2koha { -# warn "MARCmarc2koha"; -##Returns a hash from MARC record - my ($dbh,$record,$related_record) = @_; - my $result; -if (!$related_record){$related_record="biblios";} - my $sth2=$dbh->prepare("SELECT marctokoha from koha_attr where recordtype like ? and tagfield is not null" ); - $sth2->execute($related_record); - my $field; - while ($field=$sth2->fetchrow) { - $result=&MARCmarc2kohaOneField($field,$record,$result,$related_record); - } -## we only need the following for biblio data -if ($related_record eq "biblios"){ -# modify copyrightdate to keep only the 1st year found - my $temp = $result->{'copyrightdate'}; - $temp =~ m/c(\d\d\d\d)/; # search cYYYY first - if ($1>0) { - $result->{'copyrightdate'} = $1; - } else { # if no cYYYY, get the 1st date. - $temp =~ m/(\d\d\d\d)/; - $result->{'copyrightdate'} = $1; - } -# modify publicationyear to keep only the 1st year found - $temp = $result->{'publicationyear'}; - $temp =~ m/c(\d\d\d\d)/; # search cYYYY first - if ($1>0) { - $result->{'publicationyear'} = $1; - } else { # if no cYYYY, get the 1st date. - $temp =~ m/(\d\d\d\d)/; - $result->{'publicationyear'} = $1; - } -} - return $result; -} - -sub MARCkoha2marcOnefield { -##Updates or creates one field in MARC record - my ( $record, $kohafieldname, $value,$recordtype ) = @_; -my ( $tagfield, $tagsubfield ) = MARCfind_marc_from_kohafield($kohafieldname,$recordtype); -if ($tagfield){ -my $tag = $record->field($tagfield); - if ( $tagfield>9) { - if ($tag) { - if ($value){## We may be trying to delete a subfield value - $tag->update( $tagsubfield=> $value ); - }else{ - $tag->delete_subfield(code=>$tagsubfield); - } - $record->delete_field($tag); - $record->insert_fields_ordered($tag); - }else { - my $newtag=MARC::Field->new( $tagfield, " ", " ", $tagsubfield => $value); - $record->insert_fields_ordered($newtag); - } - }else { - if ($tag) { - if ($value){ - $tag->update( $value ); - $record->delete_field($tag); - $record->insert_fields_ordered($tag); - }else{ - $record->delete_field($tag); - } - }else { - my $newtag=MARC::Field->new( $tagfield => $value); - $record->insert_fields_ordered($newtag); - } - } -}## $tagfield defined - return $record; -} - -sub MARCmarc2kohaOneField { - my ( $kohafield, $record, $result,$recordtype ) = @_; - # # warn "kohatable / $kohafield / $result / "; - my $res = ""; - - my ( $tagfield, $subfield ) = MARCfind_marc_from_kohafield($kohafield,$recordtype); -if ($tagfield){ - foreach my $field ( $record->field($tagfield) ) { - if ($field->tag()<10) { - if ($result->{$kohafield}) { - $result->{$kohafield} .= " | ".$field->data(); - } else { - $result->{$kohafield} = $field->data(); - } - } else { - if ( $field->subfields ) { - my @subfields = $field->subfields(); - foreach my $subfieldcount ( 0 .. $#subfields ) { - if ($subfields[$subfieldcount][0] eq $subfield) { - if ( $result->{$kohafield} ) { - $result->{$kohafield} .= " | " . $subfields[$subfieldcount][1]; - } - else { - $result->{$kohafield} = $subfields[$subfieldcount][1]; - } - } - } - } - } - } -} - return $result; -} @@ -981,20 +896,11 @@ sub NEWmodbiblioframework { sub NEWdelbiblio { - my ( $dbh, $biblionumber ) = @_; -my $sth=$dbh->prepare("SELECT itemnumber FROM items where biblionumber=?"); - -$sth->execute($biblionumber); - while (my $itemnumber =$sth->fetchrow){ - OLDdelitem($dbh,$itemnumber) ; - } - - ZEBRAop($dbh,$biblionumber,"recordDelete","biblioserver"); -OLDdelbiblio($dbh,$biblionumber) ; - +ZEBRAop($dbh,$biblionumber,"recordDelete","biblioserver"); } + sub NEWnewitem { my ( $dbh, $xmlhash, $biblionumber ) = @_; my $itemtype= MARCfind_itemtype($dbh,$biblionumber); @@ -1062,6 +968,7 @@ my $barcode=XML_readline_onerecord($xmlhash,"barcode","holdings"); my $itemcallnumber=XML_readline_onerecord($xmlhash,"itemcallnumber","holdings"); if ($itemcallnumber){ my ($cutterextra)=itemcalculator($dbh,$biblionumber,$itemcallnumber); +warn $cutterextra; $xmlhash=XML_writeline($xmlhash,"cutterextra",$cutterextra,"holdings"); } @@ -1144,7 +1051,7 @@ $xmlhash=XML_writeline($xmlhash,"indexedby",$cataloger,"biblios") if $cataloger; ## We must add the indexing fields for LC in MARC record--TG -## XMLmodLCindex($dbh,$xmlhash); + XMLmodLCindex($dbh,$xmlhash); OLDmodbiblio ($dbh,$xmlhash,$biblionumber,$frameworkcode); my $ok=ZEBRAop($dbh,$biblionumber,"specialUpdate","biblioserver"); return ($biblionumber); @@ -1269,37 +1176,36 @@ sub OLDdelbiblio { # # -sub ZEBRAgetrecord { -my $biblionumber=shift; -my @oConnection; - $oConnection[0]=C4::Context->Zconn("biblioserver"); -my $field=MARCfind_attr_from_kohafield("biblionumber"); -my $query=$field." ".$biblionumber; -my $oResult= $oConnection[0]->search_pqf($query); -my $event; -my $i; - while (($i = ZOOM::event(\@oConnection)) != 0) { - $event = $oConnection[$i-1]->last_event(); - last if $event == ZOOM::Event::ZEND; - }# while -if ($oResult->size()){ -my $xmlrecord=$oResult->record(0)->raw() ; -$oConnection[0]->destroy; -$xmlrecord=Encode::decode('utf8',$xmlrecord); -my $hashed=XML_xml2hash($xmlrecord); -my ( $xmlrecord, @itemsrecord) = XML_separate($hashed); -return ($xmlrecord, @itemsrecord); -}else{ -return (undef,undef); -} +sub ZEBRAdelbiblio { +## Zebra calls this routine to delete after it deletes biblio from ZEBRAddb + my ( $dbh, $biblionumber ) = @_; +my $sth=$dbh->prepare("SELECT itemnumber FROM items where biblionumber=?"); + +$sth->execute($biblionumber); + while (my $itemnumber =$sth->fetchrow){ + OLDdelitem($dbh,$itemnumber) ; + } +OLDdelbiblio($dbh,$biblionumber) ; } +sub ZEBRAgetrecord{ +my $biblionumber=shift; +my @kohafield="biblionumber"; +my @value=$biblionumber; +my ($count,@result)=C4::Search::ZEBRAsearch_kohafields(\@kohafield,\@value); + + if ($count>0){ + my ( $xmlrecord, @itemsrecord) = XML_separate($result[0]); + return ($xmlrecord, @itemsrecord); + }else{ + return (undef,undef); + } +} sub ZEBRAop { ### Puts the zebra update in queue writes in zebraserver table my ($dbh,$biblionumber,$op,$server)=@_; my ($record); - my $sth=$dbh->prepare("insert into zebraqueue (biblio_auth_number ,server,operation) values(?,?,?)"); $sth->execute($biblionumber,$server,$op); } @@ -1315,7 +1221,7 @@ my $Zpackage; my $tried=0; my $recon=0; my $reconnect=0; -$record=Encode::encode("UTF-8",$record); +$record=Encode::encode("utf8",$record); my $shadow=$server."shadow"; reconnect: @@ -1384,15 +1290,16 @@ my ($dbh,$biblionumber)=@_; my $biblioxml=XMLgetbiblio($dbh,$biblionumber); my @itemxml=XMLgetallitems($dbh,$biblionumber); my $zebraxml=collection_header(); -$zebraxml.=""; +$zebraxml.="\n"; $zebraxml.=$biblioxml; -$zebraxml.=""; +$zebraxml.="\n"; foreach my $item(@itemxml){ - $zebraxml.=$item if $item; + $zebraxml.=$item; } -$zebraxml.=""; -$zebraxml.=""; -$zebraxml.=""; +$zebraxml.="\n"; +$zebraxml.="\n"; +$zebraxml.="\n"; + return $zebraxml; } @@ -1418,19 +1325,18 @@ return $zebraxml; # sub newbiblio { -## Used in acqui management -- creates the biblio from hash rather than marc-record +## Used in acqui management -- creates the biblio from koha hash my ($biblio) = @_; my $dbh = C4::Context->dbh; -my $record=MARCkoha2marc($dbh,$biblio,"biblios"); -$record->encoding('UTF-8'); +my $record=XMLkoha2marc($dbh,$biblio,"biblios"); my $biblionumber=NEWnewbiblio($dbh,$record); return ($biblionumber); } sub modbiblio { -## Used in acqui management -- modifies the biblio from hash rather than marc-record +## Used in acqui management -- modifies the biblio from koha hash rather than xml-hash my ($biblio) = @_; my $dbh = C4::Context->dbh; -my $record=MARCkoha2marc($dbh,$biblio,"biblios"); +my $record=XMLkoha2marc($dbh,$biblio,"biblios"); my $biblionumber=NEWmodbiblio($dbh,$record,$biblio->{biblionumber}); return ($biblionumber); } @@ -1586,8 +1492,7 @@ return($lc1.$lc2); sub itemcalculator{ ## Sublimentary function to obtain sorted LC for items. Not exported my ($dbh,$biblionumber,$callnumber)=@_; -my $xml=XMLgetbiblio($dbh,$biblionumber); -my $xmlhash=XML_xml2hash_onerecord($xml); +my $xmlhash=XMLgetbibliohash($dbh,$biblionumber); my $lc=XML_readline_onerecord($xmlhash,"classification","biblios"); my $cutter=XML_readline_onerecord($xmlhash,"subclass","biblios"); my $all=$lc." ".$cutter; diff --git a/C4/BookShelves.pm b/C4/BookShelves.pm index d07ef657d5..ea2a02a464 100755 --- a/C4/BookShelves.pm +++ b/C4/BookShelves.pm @@ -605,10 +605,8 @@ END { } # module clean-up code here (global destructor) # # $Log$ -# Revision 1.17 2006/09/01 22:16:00 tgarip1957 -# New XML API -# Event & Net::Z3950 dependency removed -# HTML::Template::Pro dependency added +# Revision 1.18 2006/09/06 16:21:03 tgarip1957 +# Clean up before final commits # # Revision 1.13 2004/03/11 16:06:20 tipaul # *** empty log message *** diff --git a/C4/Circulation/Circ2.pm b/C4/Circulation/Circ2.pm index 92f22e7f44..2606322dae 100755 --- a/C4/Circulation/Circ2.pm +++ b/C4/Circulation/Circ2.pm @@ -139,15 +139,12 @@ The borrower number of the last three patrons who borrowed this item. =cut #' sub itemissues { - my ($dbh,$data, $biblio)=@_; + my ($dbh,$data, $itemnumber)=@_; - my $sth = $dbh->prepare("Select * from items where items.biblionumber = ?"); - + my $i = 0; my @results; - $sth->execute($biblio); - # Find out who currently has this item. # FIXME - Wouldn't it be better to do this as a left join of @@ -161,10 +158,10 @@ where itemnumber = ? and returndate is NULL and issues.borrowernumber = borrowers.borrowernumber"); - $sth2->execute($data->{'itemnumber'}); + $sth2->execute($itemnumber); if (my $data2 = $sth2->fetchrow_hashref) { - $data->{'date_due'} = $data2->{'date_due'}; + $data->{'date_due'}=$data2->{'date_due'}; $data->{'datelastborrowed'} = $data2->{'issue_date'}; $data->{'card'} = $data2->{'cardnumber'}; $data->{'borrower'} = $data2->{'borrowernumber'}; @@ -178,7 +175,7 @@ and issues.borrowernumber = borrowers.borrowernumber"); and issues.borrowernumber = borrowers.borrowernumber and returndate is not NULL order by returndate desc,timestamp desc limit 2") ; - $sth2->execute($data->{'itemnumber'}) ; + $sth2->execute($itemnumber) ; # for (my $i2 = 0; $i2 < 2; $i2++) { # FIXME : error if there is less than 3 pple borrowing this item my $i2=0; while (my $data2 = $sth2->fetchrow_hashref) { @@ -191,9 +188,6 @@ $data->{'datelastborrowed'} = $data2->{'issue_date'} unless $data->{'datelastbor # } # for $sth2->finish; - - - $sth->finish; return($data); } diff --git a/C4/Context.pm b/C4/Context.pm index 0c79264d23..a7ddc14ddf 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -832,9 +832,8 @@ Andrew Arensburger =cut # $Log$ -# Revision 1.45 2006/09/01 15:33:47 tgarip1957 -# No more MARC Records - everything is MARC XML -# we read - write only XML +# Revision 1.46 2006/09/06 16:21:03 tgarip1957 +# Clean up before final commits # # Revision 1.43 2006/08/10 12:49:37 toins # sync with dev_week. diff --git a/C4/Koha.pm b/C4/Koha.pm index e2bd059c95..9d0f1ae410 100644 --- a/C4/Koha.pm +++ b/C4/Koha.pm @@ -154,6 +154,7 @@ sub GetBranches { # that aren't fields in the "branches" table. $branch->{$cat} = 1; } + $branches{$branch->{'branchcode'}}=$branch; } return (\%branches); } diff --git a/C4/Members.pm b/C4/Members.pm index 00032de051..e7128d8207 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -33,6 +33,7 @@ use C4::Reserves2; use C4::Koha; use C4::Accounts2; use C4::Circulation::Circ2; +use Date::Manip; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); $VERSION = do { my @v = '$Revision$' =~ /\d+/g; shift(@v) . "." . join( "_", map { sprintf "%03d", $_ } @v ); }; @@ -60,6 +61,7 @@ This module contains routines for adding, modifying and deleting members/patrons @ISA = qw(Exporter); @EXPORT = qw( + &allissues &add_member_orgs &borrdata @@ -100,9 +102,11 @@ This module contains routines for adding, modifying and deleting members/patrons &NewBorrowerNumber &modmember &newmember +&expand_sex_into_predicate ); + =head2 borrowercategories ($codes_arrayref, $labels_hashref) = &borrowercategories(); @@ -377,7 +381,9 @@ C<$issues>. =cut #' sub borrissues { + my ($bornum)=@_; +warn $bornum; my $dbh = C4::Context->dbh; my $sth=$dbh->prepare("Select * from issues,biblio,items where borrowernumber=? and items.itemnumber=issues.itemnumber @@ -1383,4 +1389,22 @@ sub GetBorrowersFromSurname { return ($count,\@results); } +=head2 expand_sex_into_predicate + + $data{&expand_sex_into_predicate($data{sex})} = 1; + +Converts a single 'M' or 'F' into 'sex_M_p' or 'sex_F_p' +respectively. + +In some languages, 'M' and 'F' are not appropriate. However, +with HTML::Template, there is no way to localize 'M' or 'F' +unless these are converted into variables that TMPL_IF can +understand. This function provides this conversion. + +=cut + +sub expand_sex_into_predicate ($) { + my($sex) = @_; + return "sex_${sex}_p"; +} # expand_sex_into_predicate 1; diff --git a/C4/Reserves2.pm b/C4/Reserves2.pm index ffae990398..d94dac59b1 100755 --- a/C4/Reserves2.pm +++ b/C4/Reserves2.pm @@ -152,9 +152,9 @@ sub FindReserves { my $i = 0; my @results; while (my $data = $sth->fetchrow_hashref){ - my ($bibdatarecord) =XMLgetbiblio($dbh,$data->{'biblionumber'}); - - my $bibdata=XML_xml2hash_onerecord($bibdatarecord); + my ($bibdata) =XMLgetbibliohash($dbh,$data->{'biblionumber'}); + my ($itemhash)=XMLgetitemhash($dbh,$data->{'itemnumber'}); + $data->{'holdingbranch'}=XML_readline_onerecord($itemhash,"holdingbranch","holdings"); $data->{'author'} =XML_readline_onerecord($bibdata,"author","biblios"); $data->{'publishercode'} = XML_readline_onerecord($bibdata,"publishercode","biblios"); $data->{'publicationyear'} = XML_readline_onerecord($bibdata,"publicationyear","biblios"); diff --git a/C4/Search.pm b/C4/Search.pm index 910f105107..1bfa3c9dff 100755 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -132,7 +132,7 @@ my ($sortattr)=MARCfind_attr_from_kohafield($sortpart[0]); $query="\@attr 2=102 ".$query; } } -##warn $query; +#warn $query; my $oResult; my $tried=0; @@ -172,10 +172,7 @@ my $dbh=C4::Context->dbh; for ( $ri; $ri<$numresults ; $ri++){ my $xmlrecord=$oResult->record($ri)->raw(); $xmlrecord=Encode::decode("utf8",$xmlrecord); - #if (!$fordisplay){ - ### Turn into hash of xml $xmlrecord=XML_xml2hash($xmlrecord); - ##} $z++; push @results,$xmlrecord; last if ($number_of_results && $z>=$number_of_results); @@ -502,45 +499,7 @@ push @fields,"barcode","itemlost","itemnumber","date_due","wthdrawn","notforloa return(@items); } -sub XML_repeated_read{ -my ($xml,$kohafield,$recordtype,$tag,$subf)=@_; -#$xml represents one record of MARCXML as perlhashed -## returns an array of read fields--useful for readind repeated fields -### $recordtype is needed for mapping the correct field if supplied -my @value; - ($tag,$subf)=MARCfind_marc_from_kohafield($kohafield,$recordtype) if $kohafield; -if ($tag){ -my $biblio=$xml->{'datafield'}; -my $controlfields=$xml->{'controlfield'}; -my $leader=$xml->{'leader'}; - if ($tag>9){ - foreach my $data (@$biblio){ - if ($data->{'tag'} eq $tag){ - foreach my $subfield ( $data->{'subfield'}){ - foreach my $code ( @$subfield){ - if ($code->{'code'} eq $subf || !$subf){ - push @value, $code->{'content'}; - } - } - } - } - } - }else{ - if ($tag eq "000" || $tag eq "LDR"){ - push @value, $leader->[0] if $leader->[0]; - }else{ - foreach my $control (@$controlfields){ - if ($control->{'tag'} eq $tag){ - push @value, $control->{'content'} if $control->{'content'}; - } - } - } - }##tag -return @value; -}## if tag is mapped -return ""; -} @@ -558,7 +517,7 @@ sub getMARCnotes { } my @marcnotes; foreach my $field ($mintag..$maxtag) { - my @value=XML_repeated_read($record,"","",$field,""); + my @value=XML_readline_asarray($record,"","",$field,""); push @marcnotes, \@value; } @@ -586,7 +545,7 @@ sub getMARCsubjects { my $marcsubjct; foreach my $field ($mintag..$maxtag) { - my @value =XML_repeated_read($record,"","",$field,"a"); + my @value =XML_readline_asarray($record,"","",$field,"a"); foreach my $subject (@value){ $marcsubjct = {MARCSUBJCT => $subject,}; push @marcsubjcts, $marcsubjct; @@ -616,7 +575,7 @@ sub getMARCurls { my $marcurl; my $value; foreach my $field ($mintag..$maxtag) { - my @value =XML_repeated_read($record,"","",$field,"a"); + my @value =XML_readline_asarray($record,"","",$field,"a"); foreach my $url (@value){ if ( $value ne $url) { $marcurl = {MARCURL => $url,}; diff --git a/C4/Z3950.pm b/C4/Z3950.pm index 5a426a449f..3bab37daf9 100755 --- a/C4/Z3950.pm +++ b/C4/Z3950.pm @@ -67,6 +67,8 @@ entering Z39.50 lookup requests. @EXPORT = qw( &getz3950servers &z3950servername + &addz3950queue + &checkz3950searchdone ); #------------------------------------------------ @@ -134,7 +136,161 @@ sub z3950servername { #--------------------------------------- +=item addz3950queue + $errmsg = &addz3950queue($query, $type, $request_id, @servers); + +Adds a Z39.50 search query for the Z39.50 server to look up. + +C<$query> is the term to search for. + +C<$type> is the query type, e.g. C, C, etc. + +C<$request_id> is a unique string that will identify this query. + +C<@servers> is a list of servers to query (obviously, this can be +given either as an array, or as a list of scalars). Each element may +be either a Z39.50 server ID from the z3950server table of the Koha +database, the string C or C, or a complete server +specification containing a colon. + +C and C are synonymous, and refer to those servers +in the z3950servers table whose 'checked' field is set and non-NULL. + +Once the query has been submitted to the Z39.50 daemon, +C<&addz3950queue> sends a SIGHUP to the daemon to tell it to process +this new request. + +C<&addz3950queue> returns an error message. If it was successful, the +error message is the empty string. + +=cut +#' +sub addz3950queue { + use strict; + # input + my ( + $query, # value to look up + $type, # type of value ("isbn", "lccn", "title", "author", "keyword") + $requestid, # Unique value to prevent duplicate searches from multiple HTML form submits + @z3950list, # list of z3950 servers to query + )=@_; + # Returns: + my $error; + + my ( + $sth, + @serverlist, + $server, + $failed, + $servername, + ); + + # FIXME - Should be configurable, probably in /etc/koha.conf. + my $pidfile='/var/log/koha/processz3950queue.pid'; + + $error=""; + + my $dbh = C4::Context->dbh; + # list of servers: entry can be a fully qualified URL-type entry + # or simply just a server ID number. + foreach $server (@z3950list) { + if ($server =~ /:/ ) { + push @serverlist, $server; + } elsif ($server eq 'DEFAULT' || $server eq 'CHECKED' ) { + $sth=$dbh->prepare("select host,port,db,userid,password ,name,syntax from z3950servers where checked <> 0 "); + $sth->execute; + while ( my ($host, $port, $db, $userid, $password,$servername,$syntax) = $sth->fetchrow ) { + push @serverlist, "$servername/$host\:$port/$db/$userid/$password/$syntax"; + } # while + } else { + $sth=$dbh->prepare("select host,port,db,userid,password,syntax from z3950servers where id=? "); + $sth->execute($server); + my ($host, $port, $db, $userid, $password,$syntax) = $sth->fetchrow; + push @serverlist, "$server/$host\:$port/$db/$userid/$password/$syntax"; + } + } + + my $serverlist=''; + + $serverlist = join("|", @serverlist); +# chop $serverlist; + + # FIXME - Is this test supposed to test whether @serverlist is + # empty? If so, then a) there are better ways to do that in + # Perl (e.g., "if (@serverlist eq ())"), and b) it doesn't + # work anyway, since it checks whether $serverlist is composed + # of one or more spaces, which is never the case, not even + # when there are 0 or 1 elements in @serverlist. + if ( $serverlist !~ /^ +$/ ) { + # Don't allow reinsertion of the same request identifier. + $sth=$dbh->prepare("select identifier from z3950queue + where identifier=?"); + $sth->execute($requestid); + if ( ! $sth->rows) { + $sth=$dbh->prepare("insert into z3950queue (term,type,servers, identifier) values (?, ?, ?, ?)"); + $sth->execute($query, $type, $serverlist, $requestid); + if ( -r $pidfile ) { + # FIXME - Perl is good at opening files. No need to + # spawn a separate 'cat' process. + my $pid=`cat $pidfile`; + chomp $pid; + warn "PID : $pid"; + # Kill -HUP the Z39.50 daemon to tell it to process + # this query. + my $processcount=kill 1, $pid; + if ($processcount==0) { + $error.="Z39.50 search daemon error: no process signalled. "; + } + } else { + # FIXME - Error-checking like this should go close + # to the test. + $error.="No Z39.50 search daemon running: no file $pidfile. "; + } # if $pidfile + } else { + # FIXME - Error-checking like this should go close + # to the test. + $error.="Duplicate request ID $requestid. "; + } # if rows + } else { + # FIXME - Error-checking like this should go close to the + # test. I.e., + # return "No Z39.50 search servers specified. " + # if @serverlist eq (); + + # server list is empty + $error.="No Z39.50 search servers specified. "; + } # if serverlist empty + + return $error; + +} # sub addz3950queue + +=item &checkz3950searchdone + + $numberpending= & &checkz3950searchdone($random); + +Returns the number of pending z3950 requests + +C<$random> is the random z3950 query number. + +=cut +sub checkz3950searchdone { + my ($z3950random) = @_; + my $dbh = C4::Context->dbh; + # first, check that the deamon already created the requests... + my $sth = $dbh->prepare("select count(*) from z3950queue,z3950results where z3950queue.id = z3950results.queryid and z3950queue.identifier=?"); + $sth->execute($z3950random); + my ($result) = $sth->fetchrow; + if ($result eq 0) { # search not yet begun => should be searches to do ! + return "??"; + } + # second, count pending requests + $sth = $dbh->prepare("select count(*) from z3950queue,z3950results where z3950queue.id = z3950results.queryid and z3950results.enddate is null and z3950queue.identifier=?"); + $sth->execute($z3950random); + ($result) = $sth->fetchrow; + return $result; +} 1; __END__ @@ -148,12 +304,9 @@ Koha Developement team =cut #-------------------------------------- -##No more deamon to start. Z3950 now handled by ZOOM asynch mode-TG # $Log$ -# Revision 1.12 2006/09/01 22:16:00 tgarip1957 -# New XML API -# Event & Net::Z3950 dependency removed -# HTML::Template::Pro dependency added +# Revision 1.13 2006/09/06 16:21:03 tgarip1957 +# Clean up before final commits # # Revision 1.10 2003/10/01 15:08:14 tipaul # fix fog bug #622 : processz3950queue fails diff --git a/MANIFEST b/MANIFEST deleted file mode 100644 index 0d90e239eb..0000000000 --- a/MANIFEST +++ /dev/null @@ -1,3150 +0,0 @@ -.htaccess -about.pl -acqui.simple/addbiblio-nomarc.pl -acqui.simple/addbiblio.pl -acqui.simple/addbooks.pl -acqui.simple/additem-nomarc.pl -acqui.simple/additem.pl -acqui.simple/isbnsearch.pl -acqui.simple/keywordsearch.pl -acqui.simple/savebiblio.pl -acqui.simple/saveitem.pl -acqui.simple/websitesearch.pl -acqui/acqui-home.pl -acqui/acquire.pl -acqui/addorder.pl -acqui/basket.pl -acqui/finishreceive.pl -acqui/histsearch.pl -acqui/newbasket2.pl -acqui/newbiblio.pl -acqui/order.pl -acqui/receive.pl -acqui/recieveorder.pl -acqui/select-late.pl -acqui/suggestion-select.pl -acqui/supplier.pl -acqui/updatesupplier.pl -addwebsite.pl -admin-home.pl -admin/aqbookfund.pl -admin/aqbudget.pl -admin/auth_subfields_structure.pl -admin/auth_tag_structure.pl -admin/authorised_values.pl -admin/authtypes.pl -admin/biblio_framework.pl -admin/branches.pl -admin/categorie.pl -admin/categoryitem.pl -admin/checkmarc.pl -admin/currency.pl -admin/issuingrules.pl -admin/itemtypecategory.pl -admin/itemtypes.pl -admin/itemtypesubcategory.pl -admin/koha2marclinks.pl -admin/marc_subfields_structure.pl -admin/marctagstructure.pl -admin/mediatype.pl -admin/printers.pl -admin/stopwords.pl -admin/systempreferences.pl -admin/thesaurus.pl -admin/z3950servers.pl -authorities/auth_finder.pl -authorities/authorities-home.pl -authorities/authorities.pl -authorities/blinddetail-biblio-search.pl -authorities/detail-biblio-search.pl -authorities/detail.pl -barcodes/barcodes.pl -barcodes/barcodesGenerator.pl -barcodes/pdfViewer.pl -barcodes/printerConfig.pl -bookcount.pl -bookshelves/addbookbybiblionumber.pl -bookshelves/shelves.pl -boraccount.pl -bull-home.pl -bull/acqui-search.pl -bull/lateissues.pl -bull/order.pl -bull/receipt.pl -bull/serial-issues.pl -bull/statecollection.pl -bull/subscription-add.pl -bull/subscription-bib-search.pl -bull/subscription-detail.pl -bull/subscription-detail.pl.new -bull/subscription-renew.pl -C4/Accounts.pm -C4/Accounts2.pm -C4/Acquisition.pm -C4/Amazon.pm -C4/Auth.pm -C4/Auth_with_ldap.pm -C4/Authorities.pm -C4/AuthoritiesMarc.pm -C4/Barcodes/PrinterConfig.pm -C4/Biblio.pm -C4/Biblio.pm.orig -C4/Biblio.pm.patch -C4/BookShelves.pm -C4/Boolean.pm -C4/Breeding.pm -C4/Breeding.pm.patch -C4/Bull.pm -C4/Circulation/Circ2.pm -C4/Circulation/Fines.pm -C4/Circulation/Returns.pm -C4/Context.pm -C4/Database.pm -C4/Date.pm -C4/Format.pm -C4/Groups.pm -C4/Input.pm -C4/Interface/CGI/Output.pm -C4/Interface/CGI/Template.pm -C4/Koha.pm -C4/Maintainance.pm -C4/Members.pm -C4/Output.pm -C4/Print.pm -C4/Query.pm -C4/Reserves2.pm -C4/Scan.pm -C4/Search.pm -C4/SearchBiblio.pm -C4/SearchMarc.pm -C4/SearchMarcTest.pm -C4/Security.pm -C4/Shelf.pm -C4/SimpleMarc.pm -C4/Stats.pm -C4/Stock.pm -C4/Suggestions.pm -C4/test.pl -C4/Z3950.pm -catalogue-home.pl -changelanguage.pl -circ/branchtransfers.pl -circ/circulation.pl -circ/returns.pl -circ/selectbranchprinter.pl -currency.pl -DBI.Errors -delbiblio.pl -deletebiblioitem.pl -deletewebsite.pl -delitem.pl -detail.pl -detailprint.pl -error.pl -export/marc.pl -fixBranches.pl -groups.pl -help.pl -import/breeding.pl -ISBDdetail.pl -koha-curses/circ.pl -koha-plucene/indexer.pl -koha-plucene/search.cgi -koha-tmpl/errors/400.pl -koha-tmpl/errors/401.pl -koha-tmpl/errors/402.pl -koha-tmpl/errors/403.pl -koha-tmpl/errors/404.pl -koha-tmpl/errors/500.pl -koha-tmpl/favicon.ico -koha-tmpl/index.html -koha-tmpl/intranet-tmpl/default/de/about.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui.simple/addbiblio-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui.simple/addbiblio.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui.simple/addbooks.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui.simple/additem-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui.simple/additem.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui.simple/isbnsearch.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui.simple/marcimport.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/acqui-home.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/acquire.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/basket.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/histsearch.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/newbasket2.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/newbiblio.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/order.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/recieve.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/recieveorder.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/suggestion-select.tmpl -koha-tmpl/intranet-tmpl/default/de/acqui/supplier.tmpl -koha-tmpl/intranet-tmpl/default/de/auth.tmpl -koha-tmpl/intranet-tmpl/default/de/authorities/auth_finder.tmpl -koha-tmpl/intranet-tmpl/default/de/authorities/authorities-home.tmpl -koha-tmpl/intranet-tmpl/default/de/authorities/authorities.tmpl -koha-tmpl/intranet-tmpl/default/de/authorities/blinddetail-biblio-search.tmpl -koha-tmpl/intranet-tmpl/default/de/authorities/detail-biblio-search.tmpl -koha-tmpl/intranet-tmpl/default/de/authorities/detail.tmpl -koha-tmpl/intranet-tmpl/default/de/authorities/searchresultlist-auth.tmpl -koha-tmpl/intranet-tmpl/default/de/authorities/searchresultlist.tmpl -koha-tmpl/intranet-tmpl/default/de/barcodes/barcodes-bottom.inc -koha-tmpl/intranet-tmpl/default/de/barcodes/barcodes-top.inc -koha-tmpl/intranet-tmpl/default/de/barcodes/barcodes.tmpl -koha-tmpl/intranet-tmpl/default/de/barcodes/printerConfig.tmpl -koha-tmpl/intranet-tmpl/default/de/bookcount.tmpl -koha-tmpl/intranet-tmpl/default/de/bookshelves/addbookbybiblionumber.tmpl -koha-tmpl/intranet-tmpl/default/de/bookshelves/shelves.tmpl -koha-tmpl/intranet-tmpl/default/de/boraccount.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/bull-home.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/lateissues.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/order.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/receipt-search-result.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/result.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/search-supply.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/search.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/searchresultlist.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/serial-issues.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/statecollection.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/subscription-add.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/subscription-bib-search.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/subscription-detail.tmpl -koha-tmpl/intranet-tmpl/default/de/bull/subscription-renew.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/catalogue-home.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/cmsdsearchresults.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/detail-opac.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/detail.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/detailprint.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/ISBDdetail.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/MARCdetail.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/moredetail.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/searchresults.tmpl -koha-tmpl/intranet-tmpl/default/de/catalogue/subject.tmpl -koha-tmpl/intranet-tmpl/default/de/charges.tmpl -koha-tmpl/intranet-tmpl/default/de/circ/branchtransfers.tmpl -koha-tmpl/intranet-tmpl/default/de/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/default/de/circ/returns.tmpl -koha-tmpl/intranet-tmpl/default/de/circ/selectbranchprinter.tmpl -koha-tmpl/intranet-tmpl/default/de/default.tmpl -koha-tmpl/intranet-tmpl/default/de/errors/400.tmpl -koha-tmpl/intranet-tmpl/default/de/errors/401.tmpl -koha-tmpl/intranet-tmpl/default/de/errors/402.tmpl -koha-tmpl/intranet-tmpl/default/de/errors/403.tmpl -koha-tmpl/intranet-tmpl/default/de/errors/404.tmpl -koha-tmpl/intranet-tmpl/default/de/errors/405.tmpl -koha-tmpl/intranet-tmpl/default/de/errors/500.tmpl -koha-tmpl/intranet-tmpl/default/de/export/marc.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/authorised_values.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/authtypes.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/biblio_framework.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/branches.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/categorie.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/checkmarc.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/currency.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/issuingrules.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/printers.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/stopwords.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/systempreferences.tmpl -koha-tmpl/intranet-tmpl/default/de/help/admin/z3950servers.tmpl -koha-tmpl/intranet-tmpl/default/de/help/authorities/authorities.tmpl -koha-tmpl/intranet-tmpl/default/de/help/bull-home.tmpl -koha-tmpl/intranet-tmpl/default/de/help/bull/bull-home.tmpl -koha-tmpl/intranet-tmpl/default/de/help/bull/statecollection.tmpl -koha-tmpl/intranet-tmpl/default/de/help/bull/subscription-add.tmpl -koha-tmpl/intranet-tmpl/default/de/help/bull/subscription-detail.tmpl -koha-tmpl/intranet-tmpl/default/de/help/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/default/de/help/circ/returns.tmpl -koha-tmpl/intranet-tmpl/default/de/help/export/marc.tmpl -koha-tmpl/intranet-tmpl/default/de/help/import/breeding.tmpl -koha-tmpl/intranet-tmpl/default/de/help/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/default/de/help/members/members-home.tmpl -koha-tmpl/intranet-tmpl/default/de/help/members/moremember.tmpl -koha-tmpl/intranet-tmpl/default/de/help/nohelp.tmpl -koha-tmpl/intranet-tmpl/default/de/help/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/default/de/images/background-mem.gif -koha-tmpl/intranet-tmpl/default/de/images/exception.jpg -koha-tmpl/intranet-tmpl/default/de/images/holder.gif -koha-tmpl/intranet-tmpl/default/de/images/koha-front-koha.gif -koha-tmpl/intranet-tmpl/default/de/images/labelSample.gif -koha-tmpl/intranet-tmpl/default/de/images/leftarrow.png -koha-tmpl/intranet-tmpl/default/de/images/more.gif -koha-tmpl/intranet-tmpl/default/de/images/next.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/1-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/1.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/10-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/10.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/11-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/11.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/12-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/12.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/13-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/13.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/14-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/14.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/15-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/15.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/16-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/16.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/17-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/17.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/18-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/18.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/19-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/19.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/2-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/2.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/20-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/20.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/21-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/21.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/22-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/22.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/23-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/23.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/24-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/24.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/25-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/25.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/26-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/26.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/27-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/27.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/28-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/28.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/29-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/29.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/3-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/3.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/30-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/30.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/31-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/31.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/4-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/4.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/5-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/5.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/6-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/6.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/7-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/7.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/8-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/8.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/9-highlight.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/9.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/next.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/placeholder.gif -koha-tmpl/intranet-tmpl/default/de/images/numbers/prev.gif -koha-tmpl/intranet-tmpl/default/de/images/prev.gif -koha-tmpl/intranet-tmpl/default/de/images/print.gif -koha-tmpl/intranet-tmpl/default/de/images/print.png -koha-tmpl/intranet-tmpl/default/de/images/rightarrow.png -koha-tmpl/intranet-tmpl/default/de/images/trash.gif -koha-tmpl/intranet-tmpl/default/de/images/trash.png -koha-tmpl/intranet-tmpl/default/de/import/breeding.tmpl -koha-tmpl/intranet-tmpl/default/de/includes/about-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/about-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/acquisitions-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/acquisitions-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/auth-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/auth-search-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/auth-search-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/auth-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/bull-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/bull-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/calendar/cal.gif -koha-tmpl/intranet-tmpl/default/de/includes/calendar/calendar-en.js -koha-tmpl/intranet-tmpl/default/de/includes/calendar/calendar-setup.js -koha-tmpl/intranet-tmpl/default/de/includes/calendar/calendar-system.css -koha-tmpl/intranet-tmpl/default/de/includes/calendar/calendar.js -koha-tmpl/intranet-tmpl/default/de/includes/cat-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/cat-class-list.inc -koha-tmpl/intranet-tmpl/default/de/includes/cat-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/circulation-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/circulation-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/common-print.css -koha-tmpl/intranet-tmpl/default/de/includes/common-style.css -koha-tmpl/intranet-tmpl/default/de/includes/countryCodes/countryCodes.dat -koha-tmpl/intranet-tmpl/default/de/includes/error-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/error-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/help-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/help-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/intranet-main.css -koha-tmpl/intranet-tmpl/default/de/includes/issues-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/labelConfig/itemsLabelConfig.conf -koha-tmpl/intranet-tmpl/default/de/includes/marc-editor.css -koha-tmpl/intranet-tmpl/default/de/includes/marc-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/members-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/members-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/neutral-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/onlinehelp.css -koha-tmpl/intranet-tmpl/default/de/includes/opac-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/opac-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/parameters-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/parameters-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/popup-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/popup-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/quicksearch-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/reports-bottom.inc -koha-tmpl/intranet-tmpl/default/de/includes/reports-top.inc -koha-tmpl/intranet-tmpl/default/de/includes/reportswcal-top.inc -koha-tmpl/intranet-tmpl/default/de/intranet-main.tmpl -koha-tmpl/intranet-tmpl/default/de/maint/catmaintain.tmpl -koha-tmpl/intranet-tmpl/default/de/mancredit.tmpl -koha-tmpl/intranet-tmpl/default/de/maninvoice.tmpl -koha-tmpl/intranet-tmpl/default/de/marcimport/AcceptBiblioitem.tmpl -koha-tmpl/intranet-tmpl/default/de/marcimport/AcceptItemCopy.tmpl -koha-tmpl/intranet-tmpl/default/de/marcimport/AcceptMarcUpload.tmpl -koha-tmpl/intranet-tmpl/default/de/marcimport/ListFileRecords.tmpl -koha-tmpl/intranet-tmpl/default/de/marcimport/mainmenu.tmpl -koha-tmpl/intranet-tmpl/default/de/marcimport/marcimportdetail.tmpl -koha-tmpl/intranet-tmpl/default/de/marcimport/uploadmarc.tmpl -koha-tmpl/intranet-tmpl/default/de/members/deletemem.tmpl -koha-tmpl/intranet-tmpl/default/de/members/imemberentry.tmpl -koha-tmpl/intranet-tmpl/default/de/members/jmemberentry.tmpl -koha-tmpl/intranet-tmpl/default/de/members/member-flags.tmpl -koha-tmpl/intranet-tmpl/default/de/members/member-password.tmpl -koha-tmpl/intranet-tmpl/default/de/members/member-quicksearch-results.tmpl -koha-tmpl/intranet-tmpl/default/de/members/member-quicksearch.tmpl -koha-tmpl/intranet-tmpl/default/de/members/member.tmpl -koha-tmpl/intranet-tmpl/default/de/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/default/de/members/members-home.tmpl -koha-tmpl/intranet-tmpl/default/de/members/moremember-print.tmpl -koha-tmpl/intranet-tmpl/default/de/members/moremember-receipt.tmpl -koha-tmpl/intranet-tmpl/default/de/members/moremember.tmpl -koha-tmpl/intranet-tmpl/default/de/members/newimember.tmpl -koha-tmpl/intranet-tmpl/default/de/members/newjmember.tmpl -koha-tmpl/intranet-tmpl/default/de/members/newmember.tmpl -koha-tmpl/intranet-tmpl/default/de/members/pay.tmpl -koha-tmpl/intranet-tmpl/default/de/members/readingrec.tmpl -koha-tmpl/intranet-tmpl/default/de/modbib.tmpl -koha-tmpl/intranet-tmpl/default/de/modbibitem.tmpl -koha-tmpl/intranet-tmpl/default/de/moditem.tmpl -koha-tmpl/intranet-tmpl/default/de/modwebsites.tmpl -koha-tmpl/intranet-tmpl/default/de/opac-main.tmpl -koha-tmpl/intranet-tmpl/default/de/overdue.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/admin-home.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/aqbudget.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/auth_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/auth_tag_structure.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/authorised_values.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/authtypes.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/biblio_framework.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/branches.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/categorie.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/categoryitem.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/checkmarc.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/currency.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/issuingrules.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/printers.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/stopwords.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/systempreferences.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/thesaurus.tmpl -koha-tmpl/intranet-tmpl/default/de/parameters/z3950servers.tmpl -koha-tmpl/intranet-tmpl/default/de/reports.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/acquisitions_stats.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/bor_issues_top.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/borrowers_out.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/borrowers_stats.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/cat_issues_top.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/catalogue_out.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/catalogue_stats.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/inventory.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/issues_avg_stats.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/issues_by_borrower_category.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/issues_stats.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/de/reports/reports-home.tmpl -koha-tmpl/intranet-tmpl/default/de/request.tmpl -koha-tmpl/intranet-tmpl/default/de/reservereport.tmpl -koha-tmpl/intranet-tmpl/default/de/search.marc/result.tmpl -koha-tmpl/intranet-tmpl/default/de/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/default/de/search.marc/suggest.tmpl -koha-tmpl/intranet-tmpl/default/de/searchheader.tmpl -koha-tmpl/intranet-tmpl/default/de/shelves.tmpl -koha-tmpl/intranet-tmpl/default/de/stats.tmpl -koha-tmpl/intranet-tmpl/default/de/suggestion/acceptorreject.tmpl -koha-tmpl/intranet-tmpl/default/de/suggestion/mail_suggestion_ACCEPTED.tmpl -koha-tmpl/intranet-tmpl/default/de/suggestion/mail_suggestion_AVAILABLE.tmpl -koha-tmpl/intranet-tmpl/default/de/suggestion/mail_suggestion_ORDERED.tmpl -koha-tmpl/intranet-tmpl/default/de/suggestion/mail_suggestion_REJECTED.tmpl -koha-tmpl/intranet-tmpl/default/de/thesaurus_popup.tmpl -koha-tmpl/intranet-tmpl/default/de/updatebiblio.tmpl -koha-tmpl/intranet-tmpl/default/de/user/userpage.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_100.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_105.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_106.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_110.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_115a.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_115b.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_116.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_117.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_120.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_121a.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_121b.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_122.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_123a.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_123d.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_123e.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_123f.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_123g.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_124a.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_124b.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_124c.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_124d.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_124e.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_124f.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_124g.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_125a.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_125b.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_126a.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_126b.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_127.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_128a.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_128b.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_128c.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_130.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_135a.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_140.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_141.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_210c.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_225a.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_4XX.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_60X.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_700-4.tmpl -koha-tmpl/intranet-tmpl/default/de/value_builder/unimarc_field_700_701_702.tmpl -koha-tmpl/intranet-tmpl/default/de/z3950/searchresult.tmpl -koha-tmpl/intranet-tmpl/default/en/about.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui.simple/addbiblio-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui.simple/addbiblio.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui.simple/addbooks.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui.simple/additem-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui.simple/additem.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui.simple/isbnsearch.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui.simple/marcimport.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/acqui-home.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/acquire.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/basket.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/histsearch.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/newbasket2.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/newbiblio.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/order.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/recieve.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/recieveorder.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/suggestion-select.tmpl -koha-tmpl/intranet-tmpl/default/en/acqui/supplier.tmpl -koha-tmpl/intranet-tmpl/default/en/auth.tmpl -koha-tmpl/intranet-tmpl/default/en/authorities/auth_finder.tmpl -koha-tmpl/intranet-tmpl/default/en/authorities/authorities-home.tmpl -koha-tmpl/intranet-tmpl/default/en/authorities/authorities.tmpl -koha-tmpl/intranet-tmpl/default/en/authorities/blinddetail-biblio-search.tmpl -koha-tmpl/intranet-tmpl/default/en/authorities/detail-biblio-search.tmpl -koha-tmpl/intranet-tmpl/default/en/authorities/detail.tmpl -koha-tmpl/intranet-tmpl/default/en/authorities/searchresultlist-auth.tmpl -koha-tmpl/intranet-tmpl/default/en/authorities/searchresultlist.tmpl -koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-bottom.inc -koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-top.inc -koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes.tmpl -koha-tmpl/intranet-tmpl/default/en/barcodes/printerConfig.tmpl -koha-tmpl/intranet-tmpl/default/en/bookcount.tmpl -koha-tmpl/intranet-tmpl/default/en/bookshelves/addbookbybiblionumber.tmpl -koha-tmpl/intranet-tmpl/default/en/bookshelves/shelves.tmpl -koha-tmpl/intranet-tmpl/default/en/boraccount.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/bull-home.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/lateissues.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/order.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/receipt-search-result.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/result.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/search-supply.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/search.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/searchresultlist.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/serial-issues.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/statecollection.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/subscription-add.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/subscription-bib-search.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/subscription-detail.tmpl -koha-tmpl/intranet-tmpl/default/en/bull/subscription-renew.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/catalogue-home.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/cmsdsearchresults.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/detail-opac.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/detail.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/detailprint.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/ISBDdetail.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/MARCdetail.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/moredetail.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/searchresults.tmpl -koha-tmpl/intranet-tmpl/default/en/catalogue/subject.tmpl -koha-tmpl/intranet-tmpl/default/en/charges.tmpl -koha-tmpl/intranet-tmpl/default/en/circ/branchtransfers.tmpl -koha-tmpl/intranet-tmpl/default/en/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/default/en/circ/returns.tmpl -koha-tmpl/intranet-tmpl/default/en/circ/selectbranchprinter.tmpl -koha-tmpl/intranet-tmpl/default/en/default.tmpl -koha-tmpl/intranet-tmpl/default/en/error.tmpl -koha-tmpl/intranet-tmpl/default/en/errors/400.tmpl -koha-tmpl/intranet-tmpl/default/en/errors/401.tmpl -koha-tmpl/intranet-tmpl/default/en/errors/402.tmpl -koha-tmpl/intranet-tmpl/default/en/errors/403.tmpl -koha-tmpl/intranet-tmpl/default/en/errors/404.tmpl -koha-tmpl/intranet-tmpl/default/en/errors/405.tmpl -koha-tmpl/intranet-tmpl/default/en/errors/500.tmpl -koha-tmpl/intranet-tmpl/default/en/export/marc.tmpl -koha-tmpl/intranet-tmpl/default/en/help/acqui/newbiblio.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/authorised_values.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/authtypes.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/biblio_framework.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/branches.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/categorie.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/checkmarc.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/currency.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/issuingrules.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/printers.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/stopwords.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/systempreferences.tmpl -koha-tmpl/intranet-tmpl/default/en/help/admin/z3950servers.tmpl -koha-tmpl/intranet-tmpl/default/en/help/authorities/authorities.tmpl -koha-tmpl/intranet-tmpl/default/en/help/bull-home.tmpl -koha-tmpl/intranet-tmpl/default/en/help/bull/bull-home.tmpl -koha-tmpl/intranet-tmpl/default/en/help/bull/statecollection.tmpl -koha-tmpl/intranet-tmpl/default/en/help/bull/subscription-add.tmpl -koha-tmpl/intranet-tmpl/default/en/help/bull/subscription-detail.tmpl -koha-tmpl/intranet-tmpl/default/en/help/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/default/en/help/circ/returns.tmpl -koha-tmpl/intranet-tmpl/default/en/help/export/marc.tmpl -koha-tmpl/intranet-tmpl/default/en/help/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/default/en/help/members/members-home.tmpl -koha-tmpl/intranet-tmpl/default/en/help/members/moremember.tmpl -koha-tmpl/intranet-tmpl/default/en/help/nohelp.tmpl -koha-tmpl/intranet-tmpl/default/en/help/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/default/en/images/background-mem.gif -koha-tmpl/intranet-tmpl/default/en/images/exception.jpg -koha-tmpl/intranet-tmpl/default/en/images/holder.gif -koha-tmpl/intranet-tmpl/default/en/images/koha-front-koha.gif -koha-tmpl/intranet-tmpl/default/en/images/labelSample.gif -koha-tmpl/intranet-tmpl/default/en/images/leftarrow.png -koha-tmpl/intranet-tmpl/default/en/images/more.gif -koha-tmpl/intranet-tmpl/default/en/images/next.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/1-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/1.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/10-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/10.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/11-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/11.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/12-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/12.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/13-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/13.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/14-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/14.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/15-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/15.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/16-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/16.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/17-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/17.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/18-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/18.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/19-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/19.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/2-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/2.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/20-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/20.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/21-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/21.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/22-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/22.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/23-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/23.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/24-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/24.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/25-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/25.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/26-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/26.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/27-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/27.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/28-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/28.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/29-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/29.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/3-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/3.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/30-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/30.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/31-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/31.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/4-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/4.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/5-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/5.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/6-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/6.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/7-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/7.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/8-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/8.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/9-highlight.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/9.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/next.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/placeholder.gif -koha-tmpl/intranet-tmpl/default/en/images/numbers/prev.gif -koha-tmpl/intranet-tmpl/default/en/images/prev.gif -koha-tmpl/intranet-tmpl/default/en/images/print.gif -koha-tmpl/intranet-tmpl/default/en/images/print.png -koha-tmpl/intranet-tmpl/default/en/images/rightarrow.png -koha-tmpl/intranet-tmpl/default/en/images/trash.gif -koha-tmpl/intranet-tmpl/default/en/images/trash.png -koha-tmpl/intranet-tmpl/default/en/import/breeding.tmpl -koha-tmpl/intranet-tmpl/default/en/includes/about-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/about-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/acquisitions-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/acquisitions-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/addressbook_section.png -koha-tmpl/intranet-tmpl/default/en/includes/auth-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/auth-search-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/auth-search-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/auth-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/bull-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/bull-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/calendar/cal.gif -koha-tmpl/intranet-tmpl/default/en/includes/calendar/calendar-en.js -koha-tmpl/intranet-tmpl/default/en/includes/calendar/calendar-setup.js -koha-tmpl/intranet-tmpl/default/en/includes/calendar/calendar-system.css -koha-tmpl/intranet-tmpl/default/en/includes/calendar/calendar.js -koha-tmpl/intranet-tmpl/default/en/includes/cat-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/cat-class-list.inc -koha-tmpl/intranet-tmpl/default/en/includes/cat-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/circulation-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/circulation-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/common-print.css -koha-tmpl/intranet-tmpl/default/en/includes/common-style.css -koha-tmpl/intranet-tmpl/default/en/includes/countryCodes/countryCodes.dat -koha-tmpl/intranet-tmpl/default/en/includes/error-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/error-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/help-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/help-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/intranet-main.css -koha-tmpl/intranet-tmpl/default/en/includes/issues-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/labelConfig/itemsLabelConfig.conf -koha-tmpl/intranet-tmpl/default/en/includes/marc-editor.css -koha-tmpl/intranet-tmpl/default/en/includes/marc-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/members-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/members-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/neutral-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/onlinehelp.css -koha-tmpl/intranet-tmpl/default/en/includes/opac-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/opac-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/parameters-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/parameters-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/popup-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/popup-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/quicksearch-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/reports-bottom.inc -koha-tmpl/intranet-tmpl/default/en/includes/reports-top.inc -koha-tmpl/intranet-tmpl/default/en/includes/reportswcal-top.inc -koha-tmpl/intranet-tmpl/default/en/intranet-main.tmpl -koha-tmpl/intranet-tmpl/default/en/maint/catmaintain.tmpl -koha-tmpl/intranet-tmpl/default/en/mancredit.tmpl -koha-tmpl/intranet-tmpl/default/en/maninvoice.tmpl -koha-tmpl/intranet-tmpl/default/en/marcimport/AcceptBiblioitem.tmpl -koha-tmpl/intranet-tmpl/default/en/marcimport/AcceptItemCopy.tmpl -koha-tmpl/intranet-tmpl/default/en/marcimport/AcceptMarcUpload.tmpl -koha-tmpl/intranet-tmpl/default/en/marcimport/ListFileRecords.tmpl -koha-tmpl/intranet-tmpl/default/en/marcimport/mainmenu.tmpl -koha-tmpl/intranet-tmpl/default/en/marcimport/marcimportdetail.tmpl -koha-tmpl/intranet-tmpl/default/en/marcimport/uploadmarc.tmpl -koha-tmpl/intranet-tmpl/default/en/members/deletemem.tmpl -koha-tmpl/intranet-tmpl/default/en/members/imemberentry.tmpl -koha-tmpl/intranet-tmpl/default/en/members/jmemberentry.tmpl -koha-tmpl/intranet-tmpl/default/en/members/member-flags.tmpl -koha-tmpl/intranet-tmpl/default/en/members/member-password.tmpl -koha-tmpl/intranet-tmpl/default/en/members/member-quicksearch-results.tmpl -koha-tmpl/intranet-tmpl/default/en/members/member-quicksearch.tmpl -koha-tmpl/intranet-tmpl/default/en/members/member.tmpl -koha-tmpl/intranet-tmpl/default/en/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/default/en/members/members-home.tmpl -koha-tmpl/intranet-tmpl/default/en/members/moremember-print.tmpl -koha-tmpl/intranet-tmpl/default/en/members/moremember-receipt.tmpl -koha-tmpl/intranet-tmpl/default/en/members/moremember.tmpl -koha-tmpl/intranet-tmpl/default/en/members/newimember.tmpl -koha-tmpl/intranet-tmpl/default/en/members/newjmember.tmpl -koha-tmpl/intranet-tmpl/default/en/members/newmember.tmpl -koha-tmpl/intranet-tmpl/default/en/members/pay.tmpl -koha-tmpl/intranet-tmpl/default/en/members/readingrec.tmpl -koha-tmpl/intranet-tmpl/default/en/modbib.tmpl -koha-tmpl/intranet-tmpl/default/en/modbibitem.tmpl -koha-tmpl/intranet-tmpl/default/en/moditem.tmpl -koha-tmpl/intranet-tmpl/default/en/modwebsites.tmpl -koha-tmpl/intranet-tmpl/default/en/opac-main.tmpl -koha-tmpl/intranet-tmpl/default/en/overdue.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/admin-home.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/aqbudget.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/auth_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/auth_tag_structure.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/authorised_values.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/authtypes.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/biblio_framework.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/branches.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/categorie.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/categoryitem.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/checkmarc.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/currency.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/issuingrules.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/itemtypecategory.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/itemtypesubcategory.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/mediatype.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/printers.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/stopwords.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/systempreferences.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/thesaurus.tmpl -koha-tmpl/intranet-tmpl/default/en/parameters/z3950servers.tmpl -koha-tmpl/intranet-tmpl/default/en/reports.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/acquisitions_stats.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/bor_issues_top.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/borrowers_out.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/borrowers_stats.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/cat_issues_top.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/catalogue_out.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/catalogue_stats.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/inventory.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/issues_avg_stats.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/issues_by_borrower_category.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/issues_stats.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/reports-home.tmpl -koha-tmpl/intranet-tmpl/default/en/reports/reserves.tmpl -koha-tmpl/intranet-tmpl/default/en/request.tmpl -koha-tmpl/intranet-tmpl/default/en/reservereport.tmpl -koha-tmpl/intranet-tmpl/default/en/search.marc/dictionary.tmpl -koha-tmpl/intranet-tmpl/default/en/search.marc/result.tmpl -koha-tmpl/intranet-tmpl/default/en/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/default/en/search.marc/suggest.tmpl -koha-tmpl/intranet-tmpl/default/en/searchheader.tmpl -koha-tmpl/intranet-tmpl/default/en/shelves.tmpl -koha-tmpl/intranet-tmpl/default/en/stats.tmpl -koha-tmpl/intranet-tmpl/default/en/suggestion/acceptorreject.tmpl -koha-tmpl/intranet-tmpl/default/en/suggestion/mail_suggestion_ACCEPTED.tmpl -koha-tmpl/intranet-tmpl/default/en/suggestion/mail_suggestion_AVAILABLE.tmpl -koha-tmpl/intranet-tmpl/default/en/suggestion/mail_suggestion_ORDERED.tmpl -koha-tmpl/intranet-tmpl/default/en/suggestion/mail_suggestion_REJECTED.tmpl -koha-tmpl/intranet-tmpl/default/en/thesaurus_popup.tmpl -koha-tmpl/intranet-tmpl/default/en/updatebiblio.tmpl -koha-tmpl/intranet-tmpl/default/en/user/userpage.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_100.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_105.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_106.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_110.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_115a.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_115b.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_116.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_117.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_120.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_121a.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_121b.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_122.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_123a.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_123d.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_123e.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_123f.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_123g.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_124a.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_124b.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_124c.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_124d.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_124e.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_124f.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_124g.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_125a.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_125b.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_126a.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_126b.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_127.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_128a.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_128b.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_128c.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_130.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_135a.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_140.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_141.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_210c.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_225a.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_4XX.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_60X.tmpl -koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_700-4.tmpl -koha-tmpl/intranet-tmpl/default/en/z3950/searchresult.tmpl -koha-tmpl/intranet-tmpl/default/es/about.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui.simple/addbiblio.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui.simple/addbiblio2.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui.simple/addbooks.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui.simple/additem.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui.simple/isbnsearch.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui.simple/marcimport.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/acqui-home.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/acquire.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/basket.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/newbasket.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/newbasket2.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/newbiblio.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/order.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/recieve.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/recieveorder.tmpl -koha-tmpl/intranet-tmpl/default/es/acqui/supplier.tmpl -koha-tmpl/intranet-tmpl/default/es/auth.tmpl -koha-tmpl/intranet-tmpl/default/es/bookcount.tmpl -koha-tmpl/intranet-tmpl/default/es/boraccount.tmpl -koha-tmpl/intranet-tmpl/default/es/catalogue/catalogue-home.tmpl -koha-tmpl/intranet-tmpl/default/es/catalogue/cmsdsearchresults.tmpl -koha-tmpl/intranet-tmpl/default/es/catalogue/detail-opac.tmpl -koha-tmpl/intranet-tmpl/default/es/catalogue/detail.tmpl -koha-tmpl/intranet-tmpl/default/es/catalogue/MARCdetail.tmpl -koha-tmpl/intranet-tmpl/default/es/catalogue/moredetail.tmpl -koha-tmpl/intranet-tmpl/default/es/catalogue/searchresults.tmpl -koha-tmpl/intranet-tmpl/default/es/catalogue/subject.tmpl -koha-tmpl/intranet-tmpl/default/es/charges.tmpl -koha-tmpl/intranet-tmpl/default/es/circ/branchtransfers.tmpl -koha-tmpl/intranet-tmpl/default/es/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/default/es/circ/returns.tmpl -koha-tmpl/intranet-tmpl/default/es/circ/selectbranchprinter.tmpl -koha-tmpl/intranet-tmpl/default/es/cmsd.tmpl -koha-tmpl/intranet-tmpl/default/es/default.tmpl -koha-tmpl/intranet-tmpl/default/es/export/marc.tmpl -koha-tmpl/intranet-tmpl/default/es/images/acq-acq.gif -koha-tmpl/intranet-tmpl/default/es/images/acq-cat.gif -koha-tmpl/intranet-tmpl/default/es/images/acq-crc.gif -koha-tmpl/intranet-tmpl/default/es/images/acq-hom.gif -koha-tmpl/intranet-tmpl/default/es/images/acq-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/acq-rep.gif -koha-tmpl/intranet-tmpl/default/es/images/add-biblio.gif -koha-tmpl/intranet-tmpl/default/es/images/add-child.gif -koha-tmpl/intranet-tmpl/default/es/images/add-item.gif -koha-tmpl/intranet-tmpl/default/es/images/add-order.gif -koha-tmpl/intranet-tmpl/default/es/images/arrow-down-cat.gif -koha-tmpl/intranet-tmpl/default/es/images/arrow-long-cat.gif -koha-tmpl/intranet-tmpl/default/es/images/arrow-long-issues.gif -koha-tmpl/intranet-tmpl/default/es/images/arrow-right-cat.gif -koha-tmpl/intranet-tmpl/default/es/images/arrow-right-issues.gif -koha-tmpl/intranet-tmpl/default/es/images/background-acq.gif -koha-tmpl/intranet-tmpl/default/es/images/background-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/blackdot.gif -koha-tmpl/intranet-tmpl/default/es/images/blankdot.gif -koha-tmpl/intranet-tmpl/default/es/images/button-add-member.gif -koha-tmpl/intranet-tmpl/default/es/images/button-add-new.gif -koha-tmpl/intranet-tmpl/default/es/images/button-add-variable.gif -koha-tmpl/intranet-tmpl/default/es/images/button-issues.gif -koha-tmpl/intranet-tmpl/default/es/images/button-next-borrower.gif -koha-tmpl/intranet-tmpl/default/es/images/button-returns.gif -koha-tmpl/intranet-tmpl/default/es/images/button-transfers.gif -koha-tmpl/intranet-tmpl/default/es/images/cancel-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/cancel-requests.gif -koha-tmpl/intranet-tmpl/default/es/images/cat-acq.gif -koha-tmpl/intranet-tmpl/default/es/images/cat-cat.gif -koha-tmpl/intranet-tmpl/default/es/images/cat-cat.jpg -koha-tmpl/intranet-tmpl/default/es/images/cat-crc.gif -koha-tmpl/intranet-tmpl/default/es/images/cat-hom.gif -koha-tmpl/intranet-tmpl/default/es/images/cat-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/cat-rep.gif -koha-tmpl/intranet-tmpl/default/es/images/catalogue-spot-1.gif -koha-tmpl/intranet-tmpl/default/es/images/catalogue-spot-2.gif -koha-tmpl/intranet-tmpl/default/es/images/clear-button.gif -koha-tmpl/intranet-tmpl/default/es/images/confirm-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/continue.gif -koha-tmpl/intranet-tmpl/default/es/images/crc-acq.gif -koha-tmpl/intranet-tmpl/default/es/images/crc-cat.gif -koha-tmpl/intranet-tmpl/default/es/images/crc-crc.gif -koha-tmpl/intranet-tmpl/default/es/images/crc-hom.gif -koha-tmpl/intranet-tmpl/default/es/images/crc-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/crc-rep.gif -koha-tmpl/intranet-tmpl/default/es/images/create-man-credit.gif -koha-tmpl/intranet-tmpl/default/es/images/create-man-invoice.gif -koha-tmpl/intranet-tmpl/default/es/images/delete-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/front-acquisitions.gif -koha-tmpl/intranet-tmpl/default/es/images/front-admin.gif -koha-tmpl/intranet-tmpl/default/es/images/front-arrow-purple.gif -koha-tmpl/intranet-tmpl/default/es/images/front-circulation.gif -koha-tmpl/intranet-tmpl/default/es/images/front-member.gif -koha-tmpl/intranet-tmpl/default/es/images/front-mouseover-acquisition.gif -koha-tmpl/intranet-tmpl/default/es/images/front-mouseover-acquisitions.gif -koha-tmpl/intranet-tmpl/default/es/images/front-mouseover-admin.gif -koha-tmpl/intranet-tmpl/default/es/images/front-mouseover-circulation.gif -koha-tmpl/intranet-tmpl/default/es/images/front-mouseover-member.gif -koha-tmpl/intranet-tmpl/default/es/images/front-mouseover-reports.gif -koha-tmpl/intranet-tmpl/default/es/images/front-mouseover-search.gif -koha-tmpl/intranet-tmpl/default/es/images/front-reports.gif -koha-tmpl/intranet-tmpl/default/es/images/front-search.gif -koha-tmpl/intranet-tmpl/default/es/images/holder.gif -koha-tmpl/intranet-tmpl/default/es/images/inside-koha-bottom.gif -koha-tmpl/intranet-tmpl/default/es/images/inside-menu-catalogue.gif -koha-tmpl/intranet-tmpl/default/es/images/inside-menu-members.gif -koha-tmpl/intranet-tmpl/default/es/images/inside-top-join.gif -koha-tmpl/intranet-tmpl/default/es/images/inside-top-member.gif -koha-tmpl/intranet-tmpl/default/es/images/inside-top-search.gif -koha-tmpl/intranet-tmpl/default/es/images/intranet-top-menu.gif -koha-tmpl/intranet-tmpl/default/es/images/issues-spot-1.gif -koha-tmpl/intranet-tmpl/default/es/images/issues-spot-2.gif -koha-tmpl/intranet-tmpl/default/es/images/koha-front-background.gif -koha-tmpl/intranet-tmpl/default/es/images/koha-front-koha.gif -koha-tmpl/intranet-tmpl/default/es/images/koha-front.jpg -koha-tmpl/intranet-tmpl/default/es/images/mem-acq.gif -koha-tmpl/intranet-tmpl/default/es/images/mem-cat.gif -koha-tmpl/intranet-tmpl/default/es/images/mem-crc.gif -koha-tmpl/intranet-tmpl/default/es/images/mem-hom.gif -koha-tmpl/intranet-tmpl/default/es/images/mem-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/mem-rep.gif -koha-tmpl/intranet-tmpl/default/es/images/members-spot-1.gif -koha-tmpl/intranet-tmpl/default/es/images/members-spot-2.gif -koha-tmpl/intranet-tmpl/default/es/images/menu-home.gif -koha-tmpl/intranet-tmpl/default/es/images/menu-join.gif -koha-tmpl/intranet-tmpl/default/es/images/menu-login.gif -koha-tmpl/intranet-tmpl/default/es/images/menu-search.gif -koha-tmpl/intranet-tmpl/default/es/images/modify-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/modify-requests.gif -koha-tmpl/intranet-tmpl/default/es/images/modify-user-flags.gif -koha-tmpl/intranet-tmpl/default/es/images/mouseover-home.gif -koha-tmpl/intranet-tmpl/default/es/images/mouseover-join.gif -koha-tmpl/intranet-tmpl/default/es/images/mouseover-member.gif -koha-tmpl/intranet-tmpl/default/es/images/mouseover-search.gif -koha-tmpl/intranet-tmpl/default/es/images/new-basket-short.gif -koha-tmpl/intranet-tmpl/default/es/images/new-basket.gif -koha-tmpl/intranet-tmpl/default/es/images/new-supplier.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-cat-1.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-cat-2.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-cat-3.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-issues-1.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-issues-2.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-issues-3.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-mem-1.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-mem-2.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-mem-3.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers-mem-4.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/1-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/1.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/10-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/10.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/11-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/11.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/12-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/12.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/13-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/13.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/14-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/14.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/15-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/15.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/16-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/16.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/17-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/17.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/18-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/18.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/19-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/19.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/2-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/2.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/20-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/20.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/21-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/21.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/22-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/22.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/23-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/23.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/24-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/24.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/25-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/25.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/26-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/26.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/27-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/27.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/28-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/28.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/29-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/29.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/3-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/3.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/30-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/30.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/31-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/31.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/4-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/4.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/5-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/5.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/6-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/6.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/7-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/7.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/8-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/8.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/9-highlight.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/9.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/next.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/placeholder.gif -koha-tmpl/intranet-tmpl/default/es/images/numbers/prev.gif -koha-tmpl/intranet-tmpl/default/es/images/ok-start-search.gif -koha-tmpl/intranet-tmpl/default/es/images/ok.gif -koha-tmpl/intranet-tmpl/default/es/images/overdues.jpg -koha-tmpl/intranet-tmpl/default/es/images/password-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/pay-fines.gif -koha-tmpl/intranet-tmpl/default/es/images/place-request.gif -koha-tmpl/intranet-tmpl/default/es/images/reading-record.gif -koha-tmpl/intranet-tmpl/default/es/images/receive-order-short.gif -koha-tmpl/intranet-tmpl/default/es/images/receive-order.gif -koha-tmpl/intranet-tmpl/default/es/images/rep-acq.gif -koha-tmpl/intranet-tmpl/default/es/images/rep-cat.gif -koha-tmpl/intranet-tmpl/default/es/images/rep-crc.gif -koha-tmpl/intranet-tmpl/default/es/images/rep-home.gif -koha-tmpl/intranet-tmpl/default/es/images/rep-mem.gif -koha-tmpl/intranet-tmpl/default/es/images/rep-rep.gif -koha-tmpl/intranet-tmpl/default/es/images/reports-mouseover.gif -koha-tmpl/intranet-tmpl/default/es/images/reports-mouseover_B.gif -koha-tmpl/intranet-tmpl/default/es/images/requests.gif -koha-tmpl/intranet-tmpl/default/es/images/save-basket.gif -koha-tmpl/intranet-tmpl/default/es/images/save-changes.gif -koha-tmpl/intranet-tmpl/default/es/images/search-button.gif -koha-tmpl/intranet-tmpl/default/es/images/update-renewals.gif -koha-tmpl/intranet-tmpl/default/es/images/view-account.gif -koha-tmpl/intranet-tmpl/default/es/images/view-basket.gif -koha-tmpl/intranet-tmpl/default/es/includes/acquisitions-bottom.inc -koha-tmpl/intranet-tmpl/default/es/includes/acquisitions-top.inc -koha-tmpl/intranet-tmpl/default/es/includes/aquisitions-bottom.inc -koha-tmpl/intranet-tmpl/default/es/includes/aquisitions-top.inc -koha-tmpl/intranet-tmpl/default/es/includes/cat-bottom.inc -koha-tmpl/intranet-tmpl/default/es/includes/cat-class-list.inc -koha-tmpl/intranet-tmpl/default/es/includes/cat-top.inc -koha-tmpl/intranet-tmpl/default/es/includes/circulation-bottom.inc -koha-tmpl/intranet-tmpl/default/es/includes/circulation-top.inc -koha-tmpl/intranet-tmpl/default/es/includes/issues-bottom.inc -koha-tmpl/intranet-tmpl/default/es/includes/issues-top.inc -koha-tmpl/intranet-tmpl/default/es/includes/members-bottom.inc -koha-tmpl/intranet-tmpl/default/es/includes/members-top.inc -koha-tmpl/intranet-tmpl/default/es/includes/opac-bottom.inc -koha-tmpl/intranet-tmpl/default/es/includes/opac-top.inc -koha-tmpl/intranet-tmpl/default/es/includes/parameters-bottom.inc -koha-tmpl/intranet-tmpl/default/es/includes/parameters-top.inc -koha-tmpl/intranet-tmpl/default/es/includes/reports-bottom.inc -koha-tmpl/intranet-tmpl/default/es/includes/reports-top.inc -koha-tmpl/intranet-tmpl/default/es/intranet-main.tmpl -koha-tmpl/intranet-tmpl/default/es/mancredit.tmpl -koha-tmpl/intranet-tmpl/default/es/maninvoice.tmpl -koha-tmpl/intranet-tmpl/default/es/marcimport/AcceptBiblioitem.tmpl -koha-tmpl/intranet-tmpl/default/es/marcimport/AcceptItemCopy.tmpl -koha-tmpl/intranet-tmpl/default/es/marcimport/AcceptMarcUpload.tmpl -koha-tmpl/intranet-tmpl/default/es/marcimport/ListFileRecords.tmpl -koha-tmpl/intranet-tmpl/default/es/marcimport/mainmenu.tmpl -koha-tmpl/intranet-tmpl/default/es/marcimport/marcimportdetail.tmpl -koha-tmpl/intranet-tmpl/default/es/marcimport/uploadmarc.tmpl -koha-tmpl/intranet-tmpl/default/es/members/imemberentry.tmpl -koha-tmpl/intranet-tmpl/default/es/members/jmemberentry.tmpl -koha-tmpl/intranet-tmpl/default/es/members/member-password.tmpl -koha-tmpl/intranet-tmpl/default/es/members/member.tmpl -koha-tmpl/intranet-tmpl/default/es/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/default/es/members/members-home.tmpl -koha-tmpl/intranet-tmpl/default/es/members/moremember.tmpl -koha-tmpl/intranet-tmpl/default/es/members/pay.tmpl -koha-tmpl/intranet-tmpl/default/es/members/readingrec.tmpl -koha-tmpl/intranet-tmpl/default/es/modbib.tmpl -koha-tmpl/intranet-tmpl/default/es/modbibitem.tmpl -koha-tmpl/intranet-tmpl/default/es/moditem.tmpl -koha-tmpl/intranet-tmpl/default/es/modwebsites.tmpl -koha-tmpl/intranet-tmpl/default/es/newimember.tmpl -koha-tmpl/intranet-tmpl/default/es/newjmember.tmpl -koha-tmpl/intranet-tmpl/default/es/newmember.tmpl -koha-tmpl/intranet-tmpl/default/es/opac-main.tmpl -koha-tmpl/intranet-tmpl/default/es/overdue.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/admin-home.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/aqbudget.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/authorised_values.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/branches.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/categorie.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/categoryitem.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/checkmarc.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/currency.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/printers.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/stopwords.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/systempreferences.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/thesaurus.tmpl -koha-tmpl/intranet-tmpl/default/es/parameters/z3950servers.tmpl -koha-tmpl/intranet-tmpl/default/es/reports.tmpl -koha-tmpl/intranet-tmpl/default/es/reports/reports-home.tmpl -koha-tmpl/intranet-tmpl/default/es/request.tmpl -koha-tmpl/intranet-tmpl/default/es/reservereport.tmpl -koha-tmpl/intranet-tmpl/default/es/search.marc/result.tmpl -koha-tmpl/intranet-tmpl/default/es/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/default/es/searchheader.tmpl -koha-tmpl/intranet-tmpl/default/es/shelves.tmpl -koha-tmpl/intranet-tmpl/default/es/stats.tmpl -koha-tmpl/intranet-tmpl/default/es/style.css -koha-tmpl/intranet-tmpl/default/es/thesaurus_popup.tmpl -koha-tmpl/intranet-tmpl/default/es/updatebiblio.tmpl -koha-tmpl/intranet-tmpl/default/es/user/userpage.tmpl -koha-tmpl/intranet-tmpl/default/es/value_builder/unimarc_field_100.tmpl -koha-tmpl/intranet-tmpl/default/es/value_builder/unimarc_field_225a.tmpl -koha-tmpl/intranet-tmpl/default/es/value_builder/unimarc_field_700-4.tmpl -koha-tmpl/intranet-tmpl/default/es/value_builder/unimarc_field_700_701_702.tmpl -koha-tmpl/intranet-tmpl/default/fr/about.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/addbiblio-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/addbiblio.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/addbiblio.tmpl.ini -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/addbooks.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/addbooks.tmpl.ini -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/additem-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/additem.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/additem.tmpl.ini -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/isbnsearch.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui.simple/marcimport.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/acqui-home.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/acquire.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/basket.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/histsearch.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/newbasket.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/newbasket2.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/newbiblio.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/order.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/recieve.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/recieveorder.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/suggestion-select.tmpl -koha-tmpl/intranet-tmpl/default/fr/acqui/supplier.tmpl -koha-tmpl/intranet-tmpl/default/fr/auth.tmpl -koha-tmpl/intranet-tmpl/default/fr/authorities/auth_finder.tmpl -koha-tmpl/intranet-tmpl/default/fr/authorities/authorities-home.tmpl -koha-tmpl/intranet-tmpl/default/fr/authorities/authorities.tmpl -koha-tmpl/intranet-tmpl/default/fr/authorities/blinddetail-biblio-search.tmpl -koha-tmpl/intranet-tmpl/default/fr/authorities/detail-biblio-search.tmpl -koha-tmpl/intranet-tmpl/default/fr/authorities/detail.tmpl -koha-tmpl/intranet-tmpl/default/fr/authorities/searchresultlist-auth.tmpl -koha-tmpl/intranet-tmpl/default/fr/authorities/searchresultlist.tmpl -koha-tmpl/intranet-tmpl/default/fr/barcodes/barcodes-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/barcodes/barcodes-top.inc -koha-tmpl/intranet-tmpl/default/fr/barcodes/barcodes.tmpl -koha-tmpl/intranet-tmpl/default/fr/barcodes/printerConfig.tmpl -koha-tmpl/intranet-tmpl/default/fr/bookcount.tmpl -koha-tmpl/intranet-tmpl/default/fr/bookshelves/addbookbybiblionumber.tmpl -koha-tmpl/intranet-tmpl/default/fr/bookshelves/shelves.tmpl -koha-tmpl/intranet-tmpl/default/fr/boraccount.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/bull-home.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/order.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/receipt-search-result.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/result.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/search-supply.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/search.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/searchresultlist.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/serial-issues.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/statecollection.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/subscription-add.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/subscription-bib-search.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/subscription-detail.tmpl -koha-tmpl/intranet-tmpl/default/fr/bull/subscription-renew.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/catalogue-home.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/cmsdsearchresults.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/detail-opac.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/detail.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/detailprint.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/ISBDdetail.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/MARCdetail.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/moredetail.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/searchresults.tmpl -koha-tmpl/intranet-tmpl/default/fr/catalogue/subject.tmpl -koha-tmpl/intranet-tmpl/default/fr/charges.tmpl -koha-tmpl/intranet-tmpl/default/fr/circ/boraccount.tmpl -koha-tmpl/intranet-tmpl/default/fr/circ/branchtransfers.tmpl -koha-tmpl/intranet-tmpl/default/fr/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/default/fr/circ/returns.tmpl -koha-tmpl/intranet-tmpl/default/fr/circ/selectbranchprinter.tmpl -koha-tmpl/intranet-tmpl/default/fr/default.tmpl -koha-tmpl/intranet-tmpl/default/fr/errors/400.tmpl -koha-tmpl/intranet-tmpl/default/fr/errors/401.tmpl -koha-tmpl/intranet-tmpl/default/fr/errors/402.tmpl -koha-tmpl/intranet-tmpl/default/fr/errors/403.tmpl -koha-tmpl/intranet-tmpl/default/fr/errors/404.tmpl -koha-tmpl/intranet-tmpl/default/fr/errors/405.tmpl -koha-tmpl/intranet-tmpl/default/fr/errors/500.tmpl -koha-tmpl/intranet-tmpl/default/fr/export/marc.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/authorised_values.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/authtypes.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/biblio_framework.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/branches.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/categorie.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/checkmarc.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/currency.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/issuingrules.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/printers.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/stopwords.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/systempreferences.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/admin/z3950servers.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/authorities/authorities.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/bull-home.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/bull/bull-home.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/bull/statecollection.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/bull/subscription-add.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/bull/subscription-detail.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/circ/returns.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/export/marc.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/import/breeding.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/nohelp.tmpl -koha-tmpl/intranet-tmpl/default/fr/help/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/default/fr/images/arrow-down-cat.gif -koha-tmpl/intranet-tmpl/default/fr/images/arrow-long-cat.gif -koha-tmpl/intranet-tmpl/default/fr/images/arrow-long-issues.gif -koha-tmpl/intranet-tmpl/default/fr/images/arrow-right-cat.gif -koha-tmpl/intranet-tmpl/default/fr/images/arrow-right-issues.gif -koha-tmpl/intranet-tmpl/default/fr/images/background-mem.gif -koha-tmpl/intranet-tmpl/default/fr/images/blackdot.gif -koha-tmpl/intranet-tmpl/default/fr/images/blankdot.gif -koha-tmpl/intranet-tmpl/default/fr/images/catalogue-spot-1.gif -koha-tmpl/intranet-tmpl/default/fr/images/catalogue-spot-2.gif -koha-tmpl/intranet-tmpl/default/fr/images/clear-button.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-acquisitions.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-acquisitions.xcf -koha-tmpl/intranet-tmpl/default/fr/images/front-admin.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-admin.xcf -koha-tmpl/intranet-tmpl/default/fr/images/front-arrow-purple.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-circulation.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-circulation.xcf -koha-tmpl/intranet-tmpl/default/fr/images/front-member.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-member.xcf -koha-tmpl/intranet-tmpl/default/fr/images/front-mouseover-acquisition.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-mouseover-acquisitions.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-mouseover-admin.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-mouseover-circulation.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-mouseover-member.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-mouseover-reports.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-mouseover-search.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-reports.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-reports.xcf -koha-tmpl/intranet-tmpl/default/fr/images/front-search.gif -koha-tmpl/intranet-tmpl/default/fr/images/front-search.xcf -koha-tmpl/intranet-tmpl/default/fr/images/holder.gif -koha-tmpl/intranet-tmpl/default/fr/images/inside-koha-bottom.gif -koha-tmpl/intranet-tmpl/default/fr/images/inside-menu-catalogue.gif -koha-tmpl/intranet-tmpl/default/fr/images/inside-menu-members.gif -koha-tmpl/intranet-tmpl/default/fr/images/inside-top-join.gif -koha-tmpl/intranet-tmpl/default/fr/images/inside-top-member.gif -koha-tmpl/intranet-tmpl/default/fr/images/inside-top-search.gif -koha-tmpl/intranet-tmpl/default/fr/images/issues-spot-1.gif -koha-tmpl/intranet-tmpl/default/fr/images/issues-spot-2.gif -koha-tmpl/intranet-tmpl/default/fr/images/koha-front-background.gif -koha-tmpl/intranet-tmpl/default/fr/images/koha-front-koha.gif -koha-tmpl/intranet-tmpl/default/fr/images/koha-front-koha.xcf -koha-tmpl/intranet-tmpl/default/fr/images/mouseover-home.gif -koha-tmpl/intranet-tmpl/default/fr/images/mouseover-join.gif -koha-tmpl/intranet-tmpl/default/fr/images/mouseover-member.gif -koha-tmpl/intranet-tmpl/default/fr/images/mouseover-search.gif -koha-tmpl/intranet-tmpl/default/fr/images/README -koha-tmpl/intranet-tmpl/default/fr/images/reports-mouseover.gif -koha-tmpl/intranet-tmpl/default/fr/import/breeding.tmpl -koha-tmpl/intranet-tmpl/default/fr/includes/about-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/about-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/acquisitions-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/acquisitions-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/auth-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/auth-search-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/auth-search-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/auth-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/bull-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/bull-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/cat-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/cat-class-list.inc -koha-tmpl/intranet-tmpl/default/fr/includes/cat-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/circulation-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/circulation-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/common-style.css -koha-tmpl/intranet-tmpl/default/fr/includes/error-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/error-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/help-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/help-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/intranet-main.css -koha-tmpl/intranet-tmpl/default/fr/includes/issues-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/issues-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/marc-editor.css -koha-tmpl/intranet-tmpl/default/fr/includes/marc-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/members-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/members-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/neutral-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/onlinehelp.css -koha-tmpl/intranet-tmpl/default/fr/includes/opac-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/opac-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/parameters-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/parameters-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/popup-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/popup-top.inc -koha-tmpl/intranet-tmpl/default/fr/includes/reports-bottom.inc -koha-tmpl/intranet-tmpl/default/fr/includes/reports-top.inc -koha-tmpl/intranet-tmpl/default/fr/intranet-main.tmpl -koha-tmpl/intranet-tmpl/default/fr/maint/catmaintain.tmpl -koha-tmpl/intranet-tmpl/default/fr/mancredit.tmpl -koha-tmpl/intranet-tmpl/default/fr/maninvoice.tmpl -koha-tmpl/intranet-tmpl/default/fr/marcimport/AcceptBiblioitem.tmpl -koha-tmpl/intranet-tmpl/default/fr/marcimport/AcceptItemCopy.tmpl -koha-tmpl/intranet-tmpl/default/fr/marcimport/AcceptMarcUpload.tmpl -koha-tmpl/intranet-tmpl/default/fr/marcimport/ListFileRecords.tmpl -koha-tmpl/intranet-tmpl/default/fr/marcimport/mainmenu.tmpl -koha-tmpl/intranet-tmpl/default/fr/marcimport/marcimportdetail.tmpl -koha-tmpl/intranet-tmpl/default/fr/marcimport/uploadmarc.tmpl -koha-tmpl/intranet-tmpl/default/fr/member-flags.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/imemberentry.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/jmemberentry.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/member-flags.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/member-password.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/member.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/members-home.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/moremember.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/newimember.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/newjmember.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/newmember.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/pay.tmpl -koha-tmpl/intranet-tmpl/default/fr/members/readingrec.tmpl -koha-tmpl/intranet-tmpl/default/fr/modbib.tmpl -koha-tmpl/intranet-tmpl/default/fr/modbibitem.tmpl -koha-tmpl/intranet-tmpl/default/fr/moditem.tmpl -koha-tmpl/intranet-tmpl/default/fr/modwebsites.tmpl -koha-tmpl/intranet-tmpl/default/fr/newimember.tmpl -koha-tmpl/intranet-tmpl/default/fr/newjmember.tmpl -koha-tmpl/intranet-tmpl/default/fr/newmember.tmpl -koha-tmpl/intranet-tmpl/default/fr/opac-detail.tmpl -koha-tmpl/intranet-tmpl/default/fr/opac-main.tmpl -koha-tmpl/intranet-tmpl/default/fr/overdue.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/admin-home.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/aqbudget.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/auth_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/auth_tag_structure.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/authorised_values.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/authtypes.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/biblio_framework.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/branches.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/categorie.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/categoryitem.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/charges.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/checkmarc.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/currency.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/issuingrules.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/printers.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/stopwords.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/systempreferences.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/thesaurus.tmpl -koha-tmpl/intranet-tmpl/default/fr/parameters/z3950servers.tmpl -koha-tmpl/intranet-tmpl/default/fr/reports.tmpl -koha-tmpl/intranet-tmpl/default/fr/reports/inventory.tmpl -koha-tmpl/intranet-tmpl/default/fr/reports/issues_by_borrower_category.tmpl -koha-tmpl/intranet-tmpl/default/fr/reports/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/fr/reports/reports-home.tmpl -koha-tmpl/intranet-tmpl/default/fr/request.tmpl -koha-tmpl/intranet-tmpl/default/fr/reservereport.tmpl -koha-tmpl/intranet-tmpl/default/fr/search.marc/result.tmpl -koha-tmpl/intranet-tmpl/default/fr/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/default/fr/search.marc/suggest.tmpl -koha-tmpl/intranet-tmpl/default/fr/searchheader.tmpl -koha-tmpl/intranet-tmpl/default/fr/shelves.tmpl -koha-tmpl/intranet-tmpl/default/fr/stats.tmpl -koha-tmpl/intranet-tmpl/default/fr/style.css -koha-tmpl/intranet-tmpl/default/fr/suggestion/acceptorreject.tmpl -koha-tmpl/intranet-tmpl/default/fr/suggestion/mail_suggestion_ACCEPTED.tmpl -koha-tmpl/intranet-tmpl/default/fr/suggestion/mail_suggestion_AVAILABLE.tmpl -koha-tmpl/intranet-tmpl/default/fr/suggestion/mail_suggestion_ORDERED.tmpl -koha-tmpl/intranet-tmpl/default/fr/suggestion/mail_suggestion_REJECTED.tmpl -koha-tmpl/intranet-tmpl/default/fr/thesaurus_popup.tmpl -koha-tmpl/intranet-tmpl/default/fr/updatebiblio.tmpl -koha-tmpl/intranet-tmpl/default/fr/user/userpage.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_100.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_105.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_106.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_110.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_115a.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_115b.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_116.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_117.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_120.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_121a.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_121b.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_122.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_123a.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_123d.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_123e.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_123f.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_123g.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_123i.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_123j.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_124a.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_124b.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_124c.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_124d.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_124e.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_124f.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_124g.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_125a.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_125b.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_126a.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_126b.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_127.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_128a.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_128b.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_128c.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_130.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_135a.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_140.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_141.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_225a.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_60X.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_700-4.tmpl -koha-tmpl/intranet-tmpl/default/fr/value_builder/unimarc_field_700_701_702.tmpl -koha-tmpl/intranet-tmpl/default/fr/z3950/searchresult.tmpl -koha-tmpl/intranet-tmpl/default/images/1downarrow.png -koha-tmpl/intranet-tmpl/default/images/1leftarrow.png -koha-tmpl/intranet-tmpl/default/images/1rightarrow.png -koha-tmpl/intranet-tmpl/default/images/1uparrow.png -koha-tmpl/intranet-tmpl/default/images/2downarrow.png -koha-tmpl/intranet-tmpl/default/images/2leftarrow.png -koha-tmpl/intranet-tmpl/default/images/2rightarrow.png -koha-tmpl/intranet-tmpl/default/images/2uparrow.png -koha-tmpl/intranet-tmpl/default/images/arrow-big.gif -koha-tmpl/intranet-tmpl/default/images/arrow.gif -koha-tmpl/intranet-tmpl/default/images/background-mem.gif -koha-tmpl/intranet-tmpl/default/images/edittrash.png -koha-tmpl/intranet-tmpl/default/images/filefind.png -koha-tmpl/intranet-tmpl/default/images/fileimport.png -koha-tmpl/intranet-tmpl/default/images/filenew.png -koha-tmpl/intranet-tmpl/default/images/fileopen.png -koha-tmpl/intranet-tmpl/default/images/fileprint.png -koha-tmpl/intranet-tmpl/default/images/filesave.png -koha-tmpl/intranet-tmpl/default/images/Fleche.jpg -koha-tmpl/intranet-tmpl/default/images/gohome.png -koha-tmpl/intranet-tmpl/default/images/koha-logo.gif -koha-tmpl/intranet-tmpl/default/images/mail_get.png -koha-tmpl/intranet-tmpl/default/images/mail_send.png -koha-tmpl/intranet-tmpl/default/images/numbers/1-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/1.gif -koha-tmpl/intranet-tmpl/default/images/numbers/10-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/10.gif -koha-tmpl/intranet-tmpl/default/images/numbers/11-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/11.gif -koha-tmpl/intranet-tmpl/default/images/numbers/12-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/12.gif -koha-tmpl/intranet-tmpl/default/images/numbers/13-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/13.gif -koha-tmpl/intranet-tmpl/default/images/numbers/14-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/14.gif -koha-tmpl/intranet-tmpl/default/images/numbers/15-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/15.gif -koha-tmpl/intranet-tmpl/default/images/numbers/16-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/16.gif -koha-tmpl/intranet-tmpl/default/images/numbers/17-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/17.gif -koha-tmpl/intranet-tmpl/default/images/numbers/18-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/18.gif -koha-tmpl/intranet-tmpl/default/images/numbers/19-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/19.gif -koha-tmpl/intranet-tmpl/default/images/numbers/2-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/2.gif -koha-tmpl/intranet-tmpl/default/images/numbers/20-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/20.gif -koha-tmpl/intranet-tmpl/default/images/numbers/21-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/21.gif -koha-tmpl/intranet-tmpl/default/images/numbers/22-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/22.gif -koha-tmpl/intranet-tmpl/default/images/numbers/23-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/23.gif -koha-tmpl/intranet-tmpl/default/images/numbers/24-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/24.gif -koha-tmpl/intranet-tmpl/default/images/numbers/25-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/25.gif -koha-tmpl/intranet-tmpl/default/images/numbers/26-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/26.gif -koha-tmpl/intranet-tmpl/default/images/numbers/27-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/27.gif -koha-tmpl/intranet-tmpl/default/images/numbers/28-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/28.gif -koha-tmpl/intranet-tmpl/default/images/numbers/29-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/29.gif -koha-tmpl/intranet-tmpl/default/images/numbers/3-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/3.gif -koha-tmpl/intranet-tmpl/default/images/numbers/30-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/30.gif -koha-tmpl/intranet-tmpl/default/images/numbers/31-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/31.gif -koha-tmpl/intranet-tmpl/default/images/numbers/4-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/4.gif -koha-tmpl/intranet-tmpl/default/images/numbers/5-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/5.gif -koha-tmpl/intranet-tmpl/default/images/numbers/6-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/6.gif -koha-tmpl/intranet-tmpl/default/images/numbers/7-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/7.gif -koha-tmpl/intranet-tmpl/default/images/numbers/8-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/8.gif -koha-tmpl/intranet-tmpl/default/images/numbers/9-highlight.gif -koha-tmpl/intranet-tmpl/default/images/numbers/9.gif -koha-tmpl/intranet-tmpl/default/images/numbers/next.gif -koha-tmpl/intranet-tmpl/default/images/numbers/placeholder.gif -koha-tmpl/intranet-tmpl/default/images/numbers/prev.gif -koha-tmpl/intranet-tmpl/default/pl/about.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui.simple/addbiblio-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui.simple/addbiblio.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui.simple/addbooks.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui.simple/additem-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui.simple/additem.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui.simple/isbnsearch.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui.simple/marcimport.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/acqui-home.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/acquire.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/basket.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/newbasket.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/newbasket2.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/newbiblio.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/order.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/recieve.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/recieveorder.tmpl -koha-tmpl/intranet-tmpl/default/pl/acqui/supplier.tmpl -koha-tmpl/intranet-tmpl/default/pl/auth.tmpl -koha-tmpl/intranet-tmpl/default/pl/bookcount.tmpl -koha-tmpl/intranet-tmpl/default/pl/bookshelves/shelves.tmpl -koha-tmpl/intranet-tmpl/default/pl/boraccount.tmpl -koha-tmpl/intranet-tmpl/default/pl/catalogue/catalogue-home.tmpl -koha-tmpl/intranet-tmpl/default/pl/catalogue/cmsdsearchresults.tmpl -koha-tmpl/intranet-tmpl/default/pl/catalogue/detail-opac.tmpl -koha-tmpl/intranet-tmpl/default/pl/catalogue/detail.tmpl -koha-tmpl/intranet-tmpl/default/pl/catalogue/detailprint.tmpl -koha-tmpl/intranet-tmpl/default/pl/catalogue/MARCdetail.tmpl -koha-tmpl/intranet-tmpl/default/pl/catalogue/moredetail.tmpl -koha-tmpl/intranet-tmpl/default/pl/catalogue/searchresults.tmpl -koha-tmpl/intranet-tmpl/default/pl/catalogue/subject.tmpl -koha-tmpl/intranet-tmpl/default/pl/charges.tmpl -koha-tmpl/intranet-tmpl/default/pl/circ/branchtransfers.tmpl -koha-tmpl/intranet-tmpl/default/pl/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/default/pl/circ/returns.tmpl -koha-tmpl/intranet-tmpl/default/pl/circ/selectbranchprinter.tmpl -koha-tmpl/intranet-tmpl/default/pl/default.tmpl -koha-tmpl/intranet-tmpl/default/pl/export/marc.tmpl -koha-tmpl/intranet-tmpl/default/pl/images/background-mem.gif -koha-tmpl/intranet-tmpl/default/pl/import/breeding.tmpl -koha-tmpl/intranet-tmpl/default/pl/includes/about-bottom.inc -koha-tmpl/intranet-tmpl/default/pl/includes/about-top.inc -koha-tmpl/intranet-tmpl/default/pl/includes/acquisitions-bottom.inc -koha-tmpl/intranet-tmpl/default/pl/includes/acquisitions-top.inc -koha-tmpl/intranet-tmpl/default/pl/includes/cat-bottom.inc -koha-tmpl/intranet-tmpl/default/pl/includes/cat-class-list.inc -koha-tmpl/intranet-tmpl/default/pl/includes/cat-top.inc -koha-tmpl/intranet-tmpl/default/pl/includes/circulation-bottom.inc -koha-tmpl/intranet-tmpl/default/pl/includes/circulation-top.inc -koha-tmpl/intranet-tmpl/default/pl/includes/common-style.css -koha-tmpl/intranet-tmpl/default/pl/includes/issues-bottom.inc -koha-tmpl/intranet-tmpl/default/pl/includes/issues-top.inc -koha-tmpl/intranet-tmpl/default/pl/includes/members-bottom.inc -koha-tmpl/intranet-tmpl/default/pl/includes/members-top.inc -koha-tmpl/intranet-tmpl/default/pl/includes/opac-bottom.inc -koha-tmpl/intranet-tmpl/default/pl/includes/opac-top.inc -koha-tmpl/intranet-tmpl/default/pl/includes/parameters-bottom.inc -koha-tmpl/intranet-tmpl/default/pl/includes/parameters-top.inc -koha-tmpl/intranet-tmpl/default/pl/includes/reports-bottom.inc -koha-tmpl/intranet-tmpl/default/pl/includes/reports-top.inc -koha-tmpl/intranet-tmpl/default/pl/intranet-main.tmpl -koha-tmpl/intranet-tmpl/default/pl/maint/catmaintain.tmpl -koha-tmpl/intranet-tmpl/default/pl/mancredit.tmpl -koha-tmpl/intranet-tmpl/default/pl/maninvoice.tmpl -koha-tmpl/intranet-tmpl/default/pl/marcimport/AcceptBiblioitem.tmpl -koha-tmpl/intranet-tmpl/default/pl/marcimport/AcceptItemCopy.tmpl -koha-tmpl/intranet-tmpl/default/pl/marcimport/AcceptMarcUpload.tmpl -koha-tmpl/intranet-tmpl/default/pl/marcimport/ListFileRecords.tmpl -koha-tmpl/intranet-tmpl/default/pl/marcimport/mainmenu.tmpl -koha-tmpl/intranet-tmpl/default/pl/marcimport/marcimportdetail.tmpl -koha-tmpl/intranet-tmpl/default/pl/marcimport/uploadmarc.tmpl -koha-tmpl/intranet-tmpl/default/pl/member-flags.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/imemberentry.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/jmemberentry.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/member-flags.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/member-password.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/member.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/members-home.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/moremember.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/newimember.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/newjmember.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/newmember.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/pay.tmpl -koha-tmpl/intranet-tmpl/default/pl/members/readingrec.tmpl -koha-tmpl/intranet-tmpl/default/pl/modbib.tmpl -koha-tmpl/intranet-tmpl/default/pl/modbibitem.tmpl -koha-tmpl/intranet-tmpl/default/pl/moditem.tmpl -koha-tmpl/intranet-tmpl/default/pl/modwebsites.tmpl -koha-tmpl/intranet-tmpl/default/pl/newimember.tmpl -koha-tmpl/intranet-tmpl/default/pl/newjmember.tmpl -koha-tmpl/intranet-tmpl/default/pl/newmember.tmpl -koha-tmpl/intranet-tmpl/default/pl/opac-main.tmpl -koha-tmpl/intranet-tmpl/default/pl/overdue.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/admin-home.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/aqbudget.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/authorised_values.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/branches.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/categorie.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/categoryitem.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/charges.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/checkmarc.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/currency.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/printers.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/stopwords.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/systempreferences.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/thesaurus.tmpl -koha-tmpl/intranet-tmpl/default/pl/parameters/z3950servers.tmpl -koha-tmpl/intranet-tmpl/default/pl/reports.tmpl -koha-tmpl/intranet-tmpl/default/pl/reports/inventory.tmpl -koha-tmpl/intranet-tmpl/default/pl/reports/issues_by_borrower_category.tmpl -koha-tmpl/intranet-tmpl/default/pl/reports/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/pl/reports/reports-home.tmpl -koha-tmpl/intranet-tmpl/default/pl/request.tmpl -koha-tmpl/intranet-tmpl/default/pl/reservereport.tmpl -koha-tmpl/intranet-tmpl/default/pl/search.marc/result.tmpl -koha-tmpl/intranet-tmpl/default/pl/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/default/pl/search.marc/suggest.tmpl -koha-tmpl/intranet-tmpl/default/pl/searchheader.tmpl -koha-tmpl/intranet-tmpl/default/pl/shelves.tmpl -koha-tmpl/intranet-tmpl/default/pl/stats.tmpl -koha-tmpl/intranet-tmpl/default/pl/thesaurus_popup.tmpl -koha-tmpl/intranet-tmpl/default/pl/updatebiblio.tmpl -koha-tmpl/intranet-tmpl/default/pl/user/userpage.tmpl -koha-tmpl/intranet-tmpl/default/pl/value_builder/unimarc_field_100.tmpl -koha-tmpl/intranet-tmpl/default/pl/value_builder/unimarc_field_105.tmpl -koha-tmpl/intranet-tmpl/default/pl/value_builder/unimarc_field_225a.tmpl -koha-tmpl/intranet-tmpl/default/pl/value_builder/unimarc_field_60X.tmpl -koha-tmpl/intranet-tmpl/default/pl/value_builder/unimarc_field_700-4.tmpl -koha-tmpl/intranet-tmpl/default/pl/value_builder/unimarc_field_700_701_702.tmpl -koha-tmpl/intranet-tmpl/default/pl/z3950/searchresult.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/about.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui.simple/addbiblio-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui.simple/addbiblio.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui.simple/addbooks.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui.simple/additem-nomarc.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui.simple/additem.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui.simple/isbnsearch.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui.simple/marcimport.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/acqui-home.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/acquire.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/basket.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/newbasket.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/newbasket2.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/newbiblio.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/order.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/recieve.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/recieveorder.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/acqui/supplier.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/auth.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/bookcount.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/boraccount.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/catalogue/catalogue-home.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/catalogue/cmsdsearchresults.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/catalogue/detail-opac.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/catalogue/detail.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/catalogue/detailprint.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/catalogue/MARCdetail.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/catalogue/moredetail.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/catalogue/searchresults.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/catalogue/subject.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/charges.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/circ/branchtransfers.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/circ/returns.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/circ/selectbranchprinter.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/default.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/export/marc.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/images/.cvsignore -koha-tmpl/intranet-tmpl/default/zh-TW/images/background-mem.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/cancel-requests.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/cancel-requests.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-acquisitions.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-acquisitions.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-admin.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-admin.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-circulation.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-circulation.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-member.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-member.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-acquisitions.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-acquisitions.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-admin.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-admin.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-circulation.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-circulation.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-member.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-member.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-reports.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-reports.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-search.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-mouseover-search.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-reports.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-reports.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-search.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/front-search.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/holder.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/koha-front-background.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/koha-front-koha.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/koha-front-koha.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/modify-user-flags.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/modify-user-flags.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/1-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/1.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/10-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/10.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/11-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/11.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/12-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/12.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/13-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/13.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/14-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/14.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/15-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/15.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/16-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/16.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/17-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/17.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/18-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/18.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/19-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/19.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/2-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/2.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/20-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/20.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/21-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/21.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/22-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/22.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/23-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/23.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/24-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/24.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/25-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/25.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/26-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/26.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/27-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/27.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/28-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/28.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/29-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/29.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/3-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/3.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/30-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/30.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/31-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/31.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/4-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/4.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/5-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/5.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/6-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/6.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/7-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/7.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/8-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/8.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/9-highlight.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/9.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/next.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/placeholder.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/numbers/prev.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/password-mem.gif -koha-tmpl/intranet-tmpl/default/zh-TW/images/password-mem.xcf -koha-tmpl/intranet-tmpl/default/zh-TW/import/breeding.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/includes/about-bottom.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/about-top.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/acquisitions-bottom.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/acquisitions-top.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/cat-bottom.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/cat-class-list.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/cat-top.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/circulation-bottom.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/circulation-top.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/common-style.css -koha-tmpl/intranet-tmpl/default/zh-TW/includes/issues-bottom.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/issues-top.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/members-bottom.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/members-top.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/opac-bottom.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/opac-top.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/parameters-bottom.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/parameters-top.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/reports-bottom.inc -koha-tmpl/intranet-tmpl/default/zh-TW/includes/reports-top.inc -koha-tmpl/intranet-tmpl/default/zh-TW/intranet-main.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/mancredit.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/maninvoice.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/marcimport/AcceptBiblioitem.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/marcimport/AcceptItemCopy.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/marcimport/AcceptMarcUpload.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/marcimport/ListFileRecords.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/marcimport/mainmenu.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/marcimport/marcimportdetail.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/marcimport/uploadmarc.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/member-flags.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/members/imemberentry.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/members/jmemberentry.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/members/member-password.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/members/member.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/members/members-home.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/members/moremember.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/members/pay.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/members/readingrec.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/modbib.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/modbibitem.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/moditem.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/modwebsites.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/newimember.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/newjmember.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/newmember.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/opac-main.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/overdue.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/admin-home.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/aqbudget.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/authorised_values.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/branches.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/categorie.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/categoryitem.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/charges.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/checkmarc.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/currency.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/itemtypes.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/printers.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/stopwords.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/systempreferences.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/thesaurus.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/parameters/z3950servers.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/README -koha-tmpl/intranet-tmpl/default/zh-TW/reports.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/reports/inventory.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/reports/reports-home.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/request.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/reservereport.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/search.marc/result.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/searchheader.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/shelves.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/stats.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/thesaurus_popup.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/updatebiblio.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/user/userpage.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/value_builder/unimarc_field_100.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/value_builder/unimarc_field_105.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/value_builder/unimarc_field_225a.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/value_builder/unimarc_field_60X.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/value_builder/unimarc_field_700-4.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/value_builder/unimarc_field_700_701_702.tmpl -koha-tmpl/intranet-tmpl/default/zh-TW/z3950/searchresult.tmpl -koha-tmpl/intranet-tmpl/npl/en/about.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui.simple/addbiblio-nomarc.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui.simple/addbiblio.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui.simple/addbooks.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui.simple/additem-nomarc.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui.simple/additem.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui.simple/isbnsearch.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui.simple/marcimport.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/acqui-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/acquire.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/basket.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/histsearch.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/newbasket.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/newbasket2.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/newbiblio.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/order.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/recieve.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/recieveorder.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/suggestion-select.tmpl -koha-tmpl/intranet-tmpl/npl/en/acqui/supplier.tmpl -koha-tmpl/intranet-tmpl/npl/en/auth.tmpl -koha-tmpl/intranet-tmpl/npl/en/authorities/auth_finder.tmpl -koha-tmpl/intranet-tmpl/npl/en/authorities/authorities-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/authorities/authorities.tmpl -koha-tmpl/intranet-tmpl/npl/en/authorities/blinddetail-biblio-search.tmpl -koha-tmpl/intranet-tmpl/npl/en/authorities/detail-biblio-search.tmpl -koha-tmpl/intranet-tmpl/npl/en/authorities/detail.tmpl -koha-tmpl/intranet-tmpl/npl/en/authorities/searchresultlist-auth.tmpl -koha-tmpl/intranet-tmpl/npl/en/authorities/searchresultlist.tmpl -koha-tmpl/intranet-tmpl/npl/en/barcodes/barcodes.tmpl -koha-tmpl/intranet-tmpl/npl/en/barcodes/printerConfig.tmpl -koha-tmpl/intranet-tmpl/npl/en/bookcount.tmpl -koha-tmpl/intranet-tmpl/npl/en/bookshelves/addbookbybiblionumber.tmpl -koha-tmpl/intranet-tmpl/npl/en/bookshelves/shelves.tmpl -koha-tmpl/intranet-tmpl/npl/en/boraccount.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/bull-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/lateissues.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/order.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/receipt-search-result.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/result.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/search-supply.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/search.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/searchresultlist.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/serial-issues.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/statecollection.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/subscription-add.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/subscription-bib-search.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/subscription-detail.tmpl -koha-tmpl/intranet-tmpl/npl/en/bull/subscription-renew.tmpl -koha-tmpl/intranet-tmpl/npl/en/catalogue/catalogue-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/catalogue/cmsdsearchresults.tmpl -koha-tmpl/intranet-tmpl/npl/en/catalogue/detail.tmpl -koha-tmpl/intranet-tmpl/npl/en/catalogue/detailprint.tmpl -koha-tmpl/intranet-tmpl/npl/en/catalogue/ISBDdetail.tmpl -koha-tmpl/intranet-tmpl/npl/en/catalogue/MARCdetail.tmpl -koha-tmpl/intranet-tmpl/npl/en/catalogue/moredetail.tmpl -koha-tmpl/intranet-tmpl/npl/en/catalogue/searchresults.tmpl -koha-tmpl/intranet-tmpl/npl/en/catalogue/subject.tmpl -koha-tmpl/intranet-tmpl/npl/en/circ/branchtransfers.tmpl -koha-tmpl/intranet-tmpl/npl/en/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/npl/en/circ/returns.tmpl -koha-tmpl/intranet-tmpl/npl/en/circ/selectbranchprinter.tmpl -koha-tmpl/intranet-tmpl/npl/en/errors/400.tmpl -koha-tmpl/intranet-tmpl/npl/en/errors/401.tmpl -koha-tmpl/intranet-tmpl/npl/en/errors/402.tmpl -koha-tmpl/intranet-tmpl/npl/en/errors/403.tmpl -koha-tmpl/intranet-tmpl/npl/en/errors/404.tmpl -koha-tmpl/intranet-tmpl/npl/en/errors/405.tmpl -koha-tmpl/intranet-tmpl/npl/en/errors/500.tmpl -koha-tmpl/intranet-tmpl/npl/en/export/marc.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/acqui/newbiblio.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/authorised_values.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/authtypes.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/biblio_framework.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/branches.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/categorie.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/checkmarc.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/currency.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/issuingrules.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/itemtypes.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/printers.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/stopwords.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/systempreferences.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/admin/z3950servers.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/authorities/authorities.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/bull-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/bull/bull-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/bull/statecollection.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/bull/subscription-add.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/bull/subscription-detail.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/circ/circulation.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/circ/returns.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/export/marc.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/import/breeding.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/members/members-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/members/moremember.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/nohelp.tmpl -koha-tmpl/intranet-tmpl/npl/en/help/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/npl/en/images/checkall.gif -koha-tmpl/intranet-tmpl/npl/en/import/breeding.tmpl -koha-tmpl/intranet-tmpl/npl/en/includes/acqui-topmenu.inc -koha-tmpl/intranet-tmpl/npl/en/includes/admin-topmenu.inc -koha-tmpl/intranet-tmpl/npl/en/includes/authorities-topmenu.inc -koha-tmpl/intranet-tmpl/npl/en/includes/blank.css -koha-tmpl/intranet-tmpl/npl/en/includes/calendar/cal.gif -koha-tmpl/intranet-tmpl/npl/en/includes/calendar/calendar-en.js -koha-tmpl/intranet-tmpl/npl/en/includes/calendar/calendar-setup.js -koha-tmpl/intranet-tmpl/npl/en/includes/calendar/calendar-system.css -koha-tmpl/intranet-tmpl/npl/en/includes/calendar/calendar.js -koha-tmpl/intranet-tmpl/npl/en/includes/circ-topmenu.inc -koha-tmpl/intranet-tmpl/npl/en/includes/countryCodes/countryCodes.dat -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-barcodes-close.inc -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-circ-close.inc -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-circ-open.inc -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-close-addbiblio.inc -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-close-calendar.inc -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-close-print.inc -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-close-receipt.inc -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-close-z3950.inc -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-close.inc -koha-tmpl/intranet-tmpl/npl/en/includes/doc-head-open.inc -koha-tmpl/intranet-tmpl/npl/en/includes/favicon.ico -koha-tmpl/intranet-tmpl/npl/en/includes/help-bottom.inc -koha-tmpl/intranet-tmpl/npl/en/includes/intranet-bottom.inc -koha-tmpl/intranet-tmpl/npl/en/includes/intranet-nav-brief.inc -koha-tmpl/intranet-tmpl/npl/en/includes/intranet-nav.inc -koha-tmpl/intranet-tmpl/npl/en/includes/intranet-topmenu.inc -koha-tmpl/intranet-tmpl/npl/en/includes/intranet.css -koha-tmpl/intranet-tmpl/npl/en/includes/labelConfig/itemsLabelConfig.conf -koha-tmpl/intranet-tmpl/npl/en/includes/main-top-addbiblio.inc -koha-tmpl/intranet-tmpl/npl/en/includes/main-top-blank.inc -koha-tmpl/intranet-tmpl/npl/en/includes/main-top-circ.inc -koha-tmpl/intranet-tmpl/npl/en/includes/main-top-print.inc -koha-tmpl/intranet-tmpl/npl/en/includes/masthead.inc -koha-tmpl/intranet-tmpl/npl/en/includes/members-topmenu.inc -koha-tmpl/intranet-tmpl/npl/en/includes/print.css -koha-tmpl/intranet-tmpl/npl/en/includes/search-topmenu.inc -koha-tmpl/intranet-tmpl/npl/en/includes/serials-topmenu.inc -koha-tmpl/intranet-tmpl/npl/en/includes/tabs.css -koha-tmpl/intranet-tmpl/npl/en/intranet-main.tmpl -koha-tmpl/intranet-tmpl/npl/en/maint/catmaintain.tmpl -koha-tmpl/intranet-tmpl/npl/en/mancredit.tmpl -koha-tmpl/intranet-tmpl/npl/en/maninvoice.tmpl -koha-tmpl/intranet-tmpl/npl/en/marcimport/AcceptBiblioitem.tmpl -koha-tmpl/intranet-tmpl/npl/en/marcimport/AcceptItemCopy.tmpl -koha-tmpl/intranet-tmpl/npl/en/marcimport/AcceptMarcUpload.tmpl -koha-tmpl/intranet-tmpl/npl/en/marcimport/ListFileRecords.tmpl -koha-tmpl/intranet-tmpl/npl/en/marcimport/mainmenu.tmpl -koha-tmpl/intranet-tmpl/npl/en/marcimport/marcimportdetail.tmpl -koha-tmpl/intranet-tmpl/npl/en/marcimport/uploadmarc.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/deletemem.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/imemberentry.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/jmemberentry.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/member-flags.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/member-password.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/member-quicksearch-results.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/member-quicksearch.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/member.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/memberentry.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/members-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/moremember-print.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/moremember-receipt.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/moremember.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/newimember.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/newjmember.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/newmember.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/pay.tmpl -koha-tmpl/intranet-tmpl/npl/en/members/readingrec.tmpl -koha-tmpl/intranet-tmpl/npl/en/modbib.tmpl -koha-tmpl/intranet-tmpl/npl/en/modbibitem.tmpl -koha-tmpl/intranet-tmpl/npl/en/moditem.tmpl -koha-tmpl/intranet-tmpl/npl/en/modwebsites.tmpl -koha-tmpl/intranet-tmpl/npl/en/overdue.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/admin-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/aqbookfund.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/aqbudget.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/auth_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/auth_tag_structure.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/authorised_values.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/authtypes.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/biblio_framework.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/branches.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/categorie.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/categoryitem.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/charges.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/checkmarc.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/currency.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/issuingrules.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/itemtypes.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/koha2marclinks.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/marc_subfields_structure.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/marctagstructure.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/printers.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/stopwords.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/systempreferences.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/thesaurus.tmpl -koha-tmpl/intranet-tmpl/npl/en/parameters/z3950servers.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/acquisitions_stats.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/bor_issues_top.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/borrowers_out.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/borrowers_stats.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/cat_issues_top.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/catalogue_out.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/catalogue_stats.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/inventory.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/issues_avg_stats.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/issues_by_borrower_category.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/issues_stats.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/itemtypes.tmpl -koha-tmpl/intranet-tmpl/npl/en/reports/reports-home.tmpl -koha-tmpl/intranet-tmpl/npl/en/request.tmpl -koha-tmpl/intranet-tmpl/npl/en/reservereport.tmpl -koha-tmpl/intranet-tmpl/npl/en/search.marc/result.tmpl -koha-tmpl/intranet-tmpl/npl/en/search.marc/search.tmpl -koha-tmpl/intranet-tmpl/npl/en/search.marc/suggest.tmpl -koha-tmpl/intranet-tmpl/npl/en/shelves.tmpl -koha-tmpl/intranet-tmpl/npl/en/stats.tmpl -koha-tmpl/intranet-tmpl/npl/en/suggestion/acceptorreject.tmpl -koha-tmpl/intranet-tmpl/npl/en/suggestion/mail_suggestion_ACCEPTED.tmpl -koha-tmpl/intranet-tmpl/npl/en/suggestion/mail_suggestion_AVAILABLE.tmpl -koha-tmpl/intranet-tmpl/npl/en/suggestion/mail_suggestion_ORDERED.tmpl -koha-tmpl/intranet-tmpl/npl/en/suggestion/mail_suggestion_REJECTED.tmpl -koha-tmpl/intranet-tmpl/npl/en/thesaurus_popup.tmpl -koha-tmpl/intranet-tmpl/npl/en/updatebiblio.tmpl -koha-tmpl/intranet-tmpl/npl/en/value_builder/unimarc_field_100.tmpl -koha-tmpl/intranet-tmpl/npl/en/value_builder/unimarc_field_105.tmpl -koha-tmpl/intranet-tmpl/npl/en/value_builder/unimarc_field_225a.tmpl -koha-tmpl/intranet-tmpl/npl/en/value_builder/unimarc_field_60X.tmpl -koha-tmpl/intranet-tmpl/npl/en/value_builder/unimarc_field_700-4.tmpl -koha-tmpl/intranet-tmpl/npl/en/value_builder/unimarc_field_700_701_702.tmpl -koha-tmpl/intranet-tmpl/npl/en/z3950/searchresult.tmpl -koha-tmpl/intranet.html -koha-tmpl/opac-tmpl/css/en/images/background-opac.gif -koha-tmpl/opac-tmpl/css/en/images/bar.gif -koha-tmpl/opac-tmpl/css/en/images/filefind.png -koha-tmpl/opac-tmpl/css/en/images/front-arrow.gif -koha-tmpl/opac-tmpl/css/en/images/front-background-med.gif -koha-tmpl/opac-tmpl/css/en/images/front-background-small.gif -koha-tmpl/opac-tmpl/css/en/includes/basket.js -koha-tmpl/opac-tmpl/css/en/includes/opac-basket-bottom.inc -koha-tmpl/opac-tmpl/css/en/includes/opac-basket-menu.inc -koha-tmpl/opac-tmpl/css/en/includes/opac-basket-top.inc -koha-tmpl/opac-tmpl/css/en/includes/opac-bottom.inc -koha-tmpl/opac-tmpl/css/en/includes/opac-top.inc -koha-tmpl/opac-tmpl/css/en/includes/opac.css -koha-tmpl/opac-tmpl/css/en/includes/popup-bottom.inc -koha-tmpl/opac-tmpl/css/en/includes/popup-top.inc -koha-tmpl/opac-tmpl/css/en/kohaerror.tmpl -koha-tmpl/opac-tmpl/css/en/opac-account.tmpl -koha-tmpl/opac-tmpl/css/en/opac-addbookbybiblionumber.tmpl -koha-tmpl/opac-tmpl/css/en/opac-auth.tmpl -koha-tmpl/opac-tmpl/css/en/opac-basket.tmpl -koha-tmpl/opac-tmpl/css/en/opac-detail.tmpl -koha-tmpl/opac-tmpl/css/en/opac-detailprint.tmpl -koha-tmpl/opac-tmpl/css/en/opac-dictionary.tmpl -koha-tmpl/opac-tmpl/css/en/opac-full-serial-issues.tmpl -koha-tmpl/opac-tmpl/css/en/opac-ISBDdetail.tmpl -koha-tmpl/opac-tmpl/css/en/opac-main.tmpl -koha-tmpl/opac-tmpl/css/en/opac-MARCdetail.tmpl -koha-tmpl/opac-tmpl/css/en/opac-moredetail.tmpl -koha-tmpl/opac-tmpl/css/en/opac-reserve.tmpl -koha-tmpl/opac-tmpl/css/en/opac-search.tmpl -koha-tmpl/opac-tmpl/css/en/opac-searchresults.tmpl -koha-tmpl/opac-tmpl/css/en/opac-sendbasket.tmpl -koha-tmpl/opac-tmpl/css/en/opac-sendbasketform.tmpl -koha-tmpl/opac-tmpl/css/en/opac-serial-issues.tmpl -koha-tmpl/opac-tmpl/css/en/opac-shelves.tmpl -koha-tmpl/opac-tmpl/css/en/opac-suggestions.tmpl -koha-tmpl/opac-tmpl/css/en/opac-user.tmpl -koha-tmpl/opac-tmpl/css/en/opac-userupdate.tmpl -koha-tmpl/opac-tmpl/css/en/subject.tmpl -koha-tmpl/opac-tmpl/css/fr/images/front-arrow.gif -koha-tmpl/opac-tmpl/css/fr/images/front-background-med.gif -koha-tmpl/opac-tmpl/css/fr/images/front-background-small.gif -koha-tmpl/opac-tmpl/css/fr/includes/basket.js -koha-tmpl/opac-tmpl/css/fr/includes/marc-editor.css -koha-tmpl/opac-tmpl/css/fr/includes/opac-basket-bottom.inc -koha-tmpl/opac-tmpl/css/fr/includes/opac-basket-menu.inc -koha-tmpl/opac-tmpl/css/fr/includes/opac-basket-top.inc -koha-tmpl/opac-tmpl/css/fr/includes/opac-bottom.inc -koha-tmpl/opac-tmpl/css/fr/includes/opac-top.inc -koha-tmpl/opac-tmpl/css/fr/includes/opac.css -koha-tmpl/opac-tmpl/css/fr/kohaerror.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-account.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-auth.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-basket.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-detail.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-detailprint.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-ISBDdetail.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-main.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-MARCdetail.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-moredetail.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-reserve.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-search.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-searchresults.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-sendbasket.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-sendbasketform.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-serial-issues.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-shelves.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-suggestions.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-user.tmpl -koha-tmpl/opac-tmpl/css/fr/opac-userupdate.tmpl -koha-tmpl/opac-tmpl/css/fr/subject.tmpl -koha-tmpl/opac-tmpl/default/all/images/background-mem.gif -koha-tmpl/opac-tmpl/default/all/images/background-opac.gif -koha-tmpl/opac-tmpl/default/all/images/front-arrow.gif -koha-tmpl/opac-tmpl/default/all/images/front-background-med.gif -koha-tmpl/opac-tmpl/default/all/images/holder.gif -koha-tmpl/opac-tmpl/default/all/images/inside-koha-bottom.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/1-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/1.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/10-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/10.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/11-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/11.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/12-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/12.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/13-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/13.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/14-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/14.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/15-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/15.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/16-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/16.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/17-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/17.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/18-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/18.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/19-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/19.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/2-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/2.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/20-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/20.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/21-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/21.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/22-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/22.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/23-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/23.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/24-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/24.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/25-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/25.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/26-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/26.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/27-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/27.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/28-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/28.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/29-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/29.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/3-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/3.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/30-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/30.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/31-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/31.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/4-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/4.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/5-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/5.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/6-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/6.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/7-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/7.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/8-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/8.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/9-highlight.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/9.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/next.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/placeholder.gif -koha-tmpl/opac-tmpl/default/all/images/numbers/prev.gif -koha-tmpl/opac-tmpl/default/de/images/clear-button.gif -koha-tmpl/opac-tmpl/default/de/images/delete-mem.gif -koha-tmpl/opac-tmpl/default/de/images/heading-login.gif -koha-tmpl/opac-tmpl/default/de/images/heading-member.gif -koha-tmpl/opac-tmpl/default/de/images/heading-search.gif -koha-tmpl/opac-tmpl/default/de/images/inside-top-join.gif -koha-tmpl/opac-tmpl/default/de/images/inside-top-member.gif -koha-tmpl/opac-tmpl/default/de/images/inside-top-search.gif -koha-tmpl/opac-tmpl/default/de/images/koha.gif -koha-tmpl/opac-tmpl/default/de/images/menu-home.gif -koha-tmpl/opac-tmpl/default/de/images/menu-join.gif -koha-tmpl/opac-tmpl/default/de/images/menu-login.gif -koha-tmpl/opac-tmpl/default/de/images/menu-mysettings.gif -koha-tmpl/opac-tmpl/default/de/images/menu-search.gif -koha-tmpl/opac-tmpl/default/de/images/modify-mem.gif -koha-tmpl/opac-tmpl/default/de/images/mouseover-home.gif -koha-tmpl/opac-tmpl/default/de/images/mouseover-join.gif -koha-tmpl/opac-tmpl/default/de/images/mouseover-member.gif -koha-tmpl/opac-tmpl/default/de/images/mouseover-search.gif -koha-tmpl/opac-tmpl/default/de/images/search-button.gif -koha-tmpl/opac-tmpl/default/de/includes/cat-class-list.inc -koha-tmpl/opac-tmpl/default/de/includes/join-top.inc -koha-tmpl/opac-tmpl/default/de/includes/members-top.inc -koha-tmpl/opac-tmpl/default/de/includes/opac-auth.inc -koha-tmpl/opac-tmpl/default/de/includes/opac-bottom.inc -koha-tmpl/opac-tmpl/default/de/includes/opac-top.inc -koha-tmpl/opac-tmpl/default/de/kohaerror.tmpl -koha-tmpl/opac-tmpl/default/de/opac-account.tmpl -koha-tmpl/opac-tmpl/default/de/opac-auth.tmpl -koha-tmpl/opac-tmpl/default/de/opac-detail.tmpl -koha-tmpl/opac-tmpl/default/de/opac-main.tmpl -koha-tmpl/opac-tmpl/default/de/opac-moredetail.tmpl -koha-tmpl/opac-tmpl/default/de/opac-reserve.tmpl -koha-tmpl/opac-tmpl/default/de/opac-search.tmpl -koha-tmpl/opac-tmpl/default/de/opac-searchresults.tmpl -koha-tmpl/opac-tmpl/default/de/opac-user.tmpl -koha-tmpl/opac-tmpl/default/de/opac-userupdate.tmpl -koha-tmpl/opac-tmpl/default/de/subject.tmpl -koha-tmpl/opac-tmpl/default/en/images/background-mem.gif -koha-tmpl/opac-tmpl/default/en/images/background-opac.gif -koha-tmpl/opac-tmpl/default/en/images/clear-button.gif -koha-tmpl/opac-tmpl/default/en/images/front-arrow-small.gif -koha-tmpl/opac-tmpl/default/en/images/front-arrow.gif -koha-tmpl/opac-tmpl/default/en/images/front-background-med.gif -koha-tmpl/opac-tmpl/default/en/images/heading-login.gif -koha-tmpl/opac-tmpl/default/en/images/heading-member.gif -koha-tmpl/opac-tmpl/default/en/images/heading-search.gif -koha-tmpl/opac-tmpl/default/en/images/holder.gif -koha-tmpl/opac-tmpl/default/en/images/inside-koha-bottom.gif -koha-tmpl/opac-tmpl/default/en/images/inside-top-join.gif -koha-tmpl/opac-tmpl/default/en/images/inside-top-member.gif -koha-tmpl/opac-tmpl/default/en/images/inside-top-search.gif -koha-tmpl/opac-tmpl/default/en/images/koha.gif -koha-tmpl/opac-tmpl/default/en/images/menu-home.gif -koha-tmpl/opac-tmpl/default/en/images/menu-join.gif -koha-tmpl/opac-tmpl/default/en/images/menu-login.gif -koha-tmpl/opac-tmpl/default/en/images/menu-mysettings.gif -koha-tmpl/opac-tmpl/default/en/images/menu-search.gif -koha-tmpl/opac-tmpl/default/en/images/mouseover-home.gif -koha-tmpl/opac-tmpl/default/en/images/mouseover-join.gif -koha-tmpl/opac-tmpl/default/en/images/mouseover-member.gif -koha-tmpl/opac-tmpl/default/en/images/mouseover-search.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/1-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/1.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/10-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/10.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/11-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/11.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/12-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/12.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/13-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/13.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/14-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/14.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/15-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/15.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/16-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/16.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/17-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/17.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/18-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/18.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/19-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/19.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/2-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/2.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/20-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/20.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/21-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/21.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/22-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/22.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/23-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/23.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/24-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/24.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/25-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/25.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/26-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/26.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/27-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/27.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/28-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/28.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/29-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/29.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/3-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/3.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/30-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/30.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/31-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/31.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/4-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/4.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/5-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/5.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/6-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/6.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/7-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/7.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/8-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/8.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/9-highlight.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/9.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/next.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/placeholder.gif -koha-tmpl/opac-tmpl/default/en/images/numbers/prev.gif -koha-tmpl/opac-tmpl/default/en/images/search-button.gif -koha-tmpl/opac-tmpl/default/en/includes/cat-class-list.inc -koha-tmpl/opac-tmpl/default/en/includes/opac-bottom.inc -koha-tmpl/opac-tmpl/default/en/includes/opac-top.inc -koha-tmpl/opac-tmpl/default/en/includes/opac.css -koha-tmpl/opac-tmpl/default/en/kohaerror.tmpl -koha-tmpl/opac-tmpl/default/en/opac-account.tmpl -koha-tmpl/opac-tmpl/default/en/opac-auth.tmpl -koha-tmpl/opac-tmpl/default/en/opac-detail.tmpl -koha-tmpl/opac-tmpl/default/en/opac-main.tmpl -koha-tmpl/opac-tmpl/default/en/opac-moredetail.tmpl -koha-tmpl/opac-tmpl/default/en/opac-reserve.tmpl -koha-tmpl/opac-tmpl/default/en/opac-search.tmpl -koha-tmpl/opac-tmpl/default/en/opac-searchresults.tmpl -koha-tmpl/opac-tmpl/default/en/opac-user.tmpl -koha-tmpl/opac-tmpl/default/en/opac-userupdate.tmpl -koha-tmpl/opac-tmpl/default/en/subject.tmpl -koha-tmpl/opac-tmpl/default/es/images/background-mem.gif -koha-tmpl/opac-tmpl/default/es/images/background-opac.gif -koha-tmpl/opac-tmpl/default/es/images/clear-button.gif -koha-tmpl/opac-tmpl/default/es/images/front-arrow.gif -koha-tmpl/opac-tmpl/default/es/images/front-background-med.gif -koha-tmpl/opac-tmpl/default/es/images/heading-login.gif -koha-tmpl/opac-tmpl/default/es/images/heading-member.gif -koha-tmpl/opac-tmpl/default/es/images/heading-search.gif -koha-tmpl/opac-tmpl/default/es/images/holder.gif -koha-tmpl/opac-tmpl/default/es/images/inside-koha-bottom.gif -koha-tmpl/opac-tmpl/default/es/images/inside-top-join.gif -koha-tmpl/opac-tmpl/default/es/images/inside-top-member.gif -koha-tmpl/opac-tmpl/default/es/images/inside-top-search.gif -koha-tmpl/opac-tmpl/default/es/images/koha.gif -koha-tmpl/opac-tmpl/default/es/images/menu-home.gif -koha-tmpl/opac-tmpl/default/es/images/menu-join.gif -koha-tmpl/opac-tmpl/default/es/images/menu-login.gif -koha-tmpl/opac-tmpl/default/es/images/menu-mysettings.gif -koha-tmpl/opac-tmpl/default/es/images/menu-search.gif -koha-tmpl/opac-tmpl/default/es/images/mouseover-home.gif -koha-tmpl/opac-tmpl/default/es/images/mouseover-join.gif -koha-tmpl/opac-tmpl/default/es/images/mouseover-member.gif -koha-tmpl/opac-tmpl/default/es/images/mouseover-search.gif -koha-tmpl/opac-tmpl/default/es/images/search-button.gif -koha-tmpl/opac-tmpl/default/fr/images/.cvsignore -koha-tmpl/opac-tmpl/default/fr/images/background-mem.gif -koha-tmpl/opac-tmpl/default/fr/images/background-opac.gif -koha-tmpl/opac-tmpl/default/fr/images/clear-button.gif -koha-tmpl/opac-tmpl/default/fr/images/front-arrow.gif -koha-tmpl/opac-tmpl/default/fr/images/front-background-med.gif -koha-tmpl/opac-tmpl/default/fr/images/holder.gif -koha-tmpl/opac-tmpl/default/fr/images/koha.gif -koha-tmpl/opac-tmpl/default/fr/images/menu-home.gif -koha-tmpl/opac-tmpl/default/fr/images/menu-mysettings.gif -koha-tmpl/opac-tmpl/default/fr/images/menu-search.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/1-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/1.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/10-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/10.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/11-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/11.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/12-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/12.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/13-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/13.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/14-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/14.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/15-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/15.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/16-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/16.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/17-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/17.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/18-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/18.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/19-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/19.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/2-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/2.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/20-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/20.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/21-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/21.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/22-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/22.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/23-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/23.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/24-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/24.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/25-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/25.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/26-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/26.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/27-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/27.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/28-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/28.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/29-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/29.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/3-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/3.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/30-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/30.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/31-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/31.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/4-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/4.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/5-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/5.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/6-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/6.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/7-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/7.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/8-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/8.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/9-highlight.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/9.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/next.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/placeholder.gif -koha-tmpl/opac-tmpl/default/fr/images/numbers/prev.gif -koha-tmpl/opac-tmpl/default/fr/images/README -koha-tmpl/opac-tmpl/default/fr/images/search-button.gif -koha-tmpl/opac-tmpl/default/fr/includes/cat-class-list.inc -koha-tmpl/opac-tmpl/default/fr/includes/opac-bottom.inc -koha-tmpl/opac-tmpl/default/fr/includes/opac-top.inc -koha-tmpl/opac-tmpl/default/fr/opac-account.tmpl -koha-tmpl/opac-tmpl/default/fr/opac-auth.tmpl -koha-tmpl/opac-tmpl/default/fr/opac-detail.tmpl -koha-tmpl/opac-tmpl/default/fr/opac-main.tmpl -koha-tmpl/opac-tmpl/default/fr/opac-moredetail.tmpl -koha-tmpl/opac-tmpl/default/fr/opac-reserve.tmpl -koha-tmpl/opac-tmpl/default/fr/opac-search.tmpl -koha-tmpl/opac-tmpl/default/fr/opac-searchresults.tmpl -koha-tmpl/opac-tmpl/default/fr/opac-user.tmpl -koha-tmpl/opac-tmpl/default/fr/opac-userupdate.tmpl -koha-tmpl/opac-tmpl/default/fr/subject.tmpl -koha-tmpl/opac-tmpl/default/pl/includes/cat-class-list.inc -koha-tmpl/opac-tmpl/default/pl/includes/join-top.inc -koha-tmpl/opac-tmpl/default/pl/includes/members-top.inc -koha-tmpl/opac-tmpl/default/pl/includes/opac-bottom.inc -koha-tmpl/opac-tmpl/default/pl/includes/opac-top.inc -koha-tmpl/opac-tmpl/default/pl/kohaerror.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-account.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-auth.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-detail.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-main.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-moredetail.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-reserve.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-search.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-searchresults.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-user.tmpl -koha-tmpl/opac-tmpl/default/pl/opac-userupdate.tmpl -koha-tmpl/opac-tmpl/default/pl/subject.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/images/.cvsignore -koha-tmpl/opac-tmpl/default/zh-TW/images/background-mem.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/background-opac.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/clear-button.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/clear-button.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/front-arrow-small.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/front-arrow.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/front-background-med.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/heading-search.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/heading-search.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/holder.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/inside-koha-bottom.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/inside-top-member.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/inside-top-member.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/inside-top-search.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/inside-top-search.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/koha.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/koha.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/menu-home.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/menu-home.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/menu-join.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/menu-join.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/menu-search.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/menu-search.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/mouseover-home.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/mouseover-home.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/mouseover-join.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/mouseover-join.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/mouseover-member.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/mouseover-member.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/mouseover-search.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/mouseover-search.xcf -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/.cvsignore -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/1-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/1.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/10-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/10.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/11-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/11.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/12-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/12.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/13-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/13.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/14-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/14.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/15-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/15.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/16-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/16.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/17-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/17.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/18-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/18.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/19-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/19.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/2-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/2.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/20-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/20.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/21-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/21.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/22-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/22.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/23-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/23.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/24-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/24.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/25-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/25.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/26-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/26.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/27-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/27.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/28-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/28.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/29-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/29.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/3-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/3.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/30-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/30.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/31-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/31.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/4-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/4.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/5-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/5.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/6-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/6.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/7-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/7.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/8-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/8.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/9-highlight.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/9.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/next.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/placeholder.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/numbers/prev.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/search-button.gif -koha-tmpl/opac-tmpl/default/zh-TW/images/search-button.xcf -koha-tmpl/opac-tmpl/default/zh-TW/includes/cat-class-list.inc -koha-tmpl/opac-tmpl/default/zh-TW/includes/opac-bottom.inc -koha-tmpl/opac-tmpl/default/zh-TW/includes/opac-top.inc -koha-tmpl/opac-tmpl/default/zh-TW/kohaerror.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-account.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-auth.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-detail.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-main.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-moredetail.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-reserve.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-search.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-searchresults.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-user.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/opac-userupdate.tmpl -koha-tmpl/opac-tmpl/default/zh-TW/subject.tmpl -koha-tmpl/opac-tmpl/npl/en/images/AB.gif -koha-tmpl/opac-tmpl/npl/en/images/AC.gif -koha-tmpl/opac-tmpl/npl/en/images/add.gif -koha-tmpl/opac-tmpl/npl/en/images/addtobasket.gif -koha-tmpl/opac-tmpl/npl/en/images/addtoshelf.gif -koha-tmpl/opac-tmpl/npl/en/images/AF.gif -koha-tmpl/opac-tmpl/npl/en/images/Audiobook.gif -koha-tmpl/opac-tmpl/npl/en/images/AV.gif -koha-tmpl/opac-tmpl/npl/en/images/AVJ.gif -koha-tmpl/opac-tmpl/npl/en/images/AVJN.gif -koha-tmpl/opac-tmpl/npl/en/images/AVJNF.gif -koha-tmpl/opac-tmpl/npl/en/images/AVNF.gif -koha-tmpl/opac-tmpl/npl/en/images/back.gif -koha-tmpl/opac-tmpl/npl/en/images/basket.gif -koha-tmpl/opac-tmpl/npl/en/images/BIO.gif -koha-tmpl/opac-tmpl/npl/en/images/Biography.gif -koha-tmpl/opac-tmpl/npl/en/images/brief.gif -koha-tmpl/opac-tmpl/npl/en/images/card.gif -koha-tmpl/opac-tmpl/npl/en/images/cart.gif -koha-tmpl/opac-tmpl/npl/en/images/CDM.gif -koha-tmpl/opac-tmpl/npl/en/images/CDR.gif -koha-tmpl/opac-tmpl/npl/en/images/checkall.gif -koha-tmpl/opac-tmpl/npl/en/images/clearbasket.gif -koha-tmpl/opac-tmpl/npl/en/images/close.gif -koha-tmpl/opac-tmpl/npl/en/images/delete.gif -koha-tmpl/opac-tmpl/npl/en/images/detail.gif -koha-tmpl/opac-tmpl/npl/en/images/DVD.gif -koha-tmpl/opac-tmpl/npl/en/images/EASY.gif -koha-tmpl/opac-tmpl/npl/en/images/edit.gif -koha-tmpl/opac-tmpl/npl/en/images/Fiction.gif -koha-tmpl/opac-tmpl/npl/en/images/isbd.gif -koha-tmpl/opac-tmpl/npl/en/images/JAC.gif -koha-tmpl/opac-tmpl/npl/en/images/JB.gif -koha-tmpl/opac-tmpl/npl/en/images/JF.gif -koha-tmpl/opac-tmpl/npl/en/images/JNF.gif -koha-tmpl/opac-tmpl/npl/en/images/JREF.gif -koha-tmpl/opac-tmpl/npl/en/images/KIT.gif -koha-tmpl/opac-tmpl/npl/en/images/LH.gif -koha-tmpl/opac-tmpl/npl/en/images/LP.gif -koha-tmpl/opac-tmpl/npl/en/images/LPNF.gif -koha-tmpl/opac-tmpl/npl/en/images/MAG.gif -koha-tmpl/opac-tmpl/npl/en/images/Magazine.gif -koha-tmpl/opac-tmpl/npl/en/images/MYS.gif -koha-tmpl/opac-tmpl/npl/en/images/Mystery.gif -koha-tmpl/opac-tmpl/npl/en/images/MZ.gif -koha-tmpl/opac-tmpl/npl/en/images/NF.gif -koha-tmpl/opac-tmpl/npl/en/images/Non-fiction.gif -koha-tmpl/opac-tmpl/npl/en/images/PB.gif -koha-tmpl/opac-tmpl/npl/en/images/placereserve.gif -koha-tmpl/opac-tmpl/npl/en/images/print2.gif -koha-tmpl/opac-tmpl/npl/en/images/REF.gif -koha-tmpl/opac-tmpl/npl/en/images/Reference.gif -koha-tmpl/opac-tmpl/npl/en/images/SCI.gif -koha-tmpl/opac-tmpl/npl/en/images/send.gif -koha-tmpl/opac-tmpl/npl/en/images/trash.gif -koha-tmpl/opac-tmpl/npl/en/images/Videocassette.gif -koha-tmpl/opac-tmpl/npl/en/images/WES.gif -koha-tmpl/opac-tmpl/npl/en/images/Western.gif -koha-tmpl/opac-tmpl/npl/en/images/YA.gif -koha-tmpl/opac-tmpl/npl/en/images/YAC.gif -koha-tmpl/opac-tmpl/npl/en/images/YANF.gif -koha-tmpl/opac-tmpl/npl/en/includes/basket.js -koha-tmpl/opac-tmpl/npl/en/includes/doc-head-close-basket-print.inc -koha-tmpl/opac-tmpl/npl/en/includes/doc-head-close-basket.inc -koha-tmpl/opac-tmpl/npl/en/includes/doc-head-close.inc -koha-tmpl/opac-tmpl/npl/en/includes/doc-head-open.inc -koha-tmpl/opac-tmpl/npl/en/includes/favicon.ico -koha-tmpl/opac-tmpl/npl/en/includes/marc-editor.css -koha-tmpl/opac-tmpl/npl/en/includes/masthead-user.inc -koha-tmpl/opac-tmpl/npl/en/includes/masthead.inc -koha-tmpl/opac-tmpl/npl/en/includes/masthead_adv.inc -koha-tmpl/opac-tmpl/npl/en/includes/masthead_home.inc -koha-tmpl/opac-tmpl/npl/en/includes/navigation.inc -koha-tmpl/opac-tmpl/npl/en/includes/opac.css -koha-tmpl/opac-tmpl/npl/en/includes/print.css -koha-tmpl/opac-tmpl/npl/en/includes/script.js -koha-tmpl/opac-tmpl/npl/en/kohaerror.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-account.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-addbookbybiblionumber.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-auth.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-basket.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-detail.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-detailprint.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-full-serial-issues.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-ISBDdetail.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-main.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-MARCdetail.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-reserve.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-search.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-searchresults.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-sendbasket.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-sendbasketform.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-serial-issues.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-shelves.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-suggestions.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-user.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-userdetails.tmpl -koha-tmpl/opac-tmpl/npl/en/opac-userupdate.tmpl -koha-tmpl/opac.html -koha-tmpl/templates.readme -koha.conf.in -lib/bookcount.xml -loadmodules.pl -logout.pl -mainpage.pl -maint/catmaintain.pl -maint/shiftbib.pl -mancredit.pl -maninvoice.pl -MARCdetail.pl -members/deletemem.pl -members/imemberentry.pl -members/insertdata.pl -members/insertidata.pl -members/insertjdata.pl -members/jmemberentry.pl -members/member-flags.pl -members/member-password.pl -members/member.pl -members/memberentry.pl -members/members-home.pl -members/moremember.pl -members/newimember.pl -members/newjmember.pl -members/newmember.pl -members/setdebar.pl -misc/amazonratings/get_ratings.pl -misc/amazonratings/ratings.sql -misc/auto_install_file -misc/backup.sh -misc/barcodes.pl -misc/build_marc_Tword.pl -misc/build_marc_word.pl -misc/bulkauthimport.pl -misc/cleanmarcdb.pl -misc/compare_iso_and_marc_parameters.pl -misc/cronjobs/j2a.pl -misc/cronjobs/longoverdue.pl -misc/cronjobs/reservefix.pl -misc/cronjobs/reservelist.pl -misc/dumpmarc.pl -misc/fines2.pl -misc/info/ChangeLog -misc/info/Hints -misc/info/HOWTO-testing -misc/info/INSTALL -misc/info/LICENSE -misc/info/News -misc/info/README -misc/info/TODO -misc/install-sh -misc/Install.pm -misc/installer-lite.pl -misc/installer.pl -misc/koha-2-0.mysql -misc/koha-new.mysql -misc/koha.conf -misc/koha.mysql -misc/koha.mysql.edit -misc/koha.upgrade -misc/koha2marc.pl -misc/marc_datas/marc21_en/structure_def.sql -misc/marc_datas/unimarc_fr/structure_def.sql -misc/merge_authority.pl -misc/migration_tools/build6xx.pl -misc/migration_tools/buildCOUNTRY.pl -misc/migration_tools/buildEDITORS.pl -misc/migration_tools/buildLANG.pl -misc/migration_tools/bulkmarcimport.pl -misc/migration_tools/check_marc_definition.pl -misc/notifys/attempted_contacts.sql -misc/notifys/contact_history.pl -misc/notifys/fines.pl -misc/notifys/printnote.pl -misc/notifys/templates/email-15.txt -misc/notifys/templates/email-29.txt -misc/notifys/templates/email-8.txt -misc/notifys/templates/fax-15.html -misc/notifys/templates/fax-29.html -misc/notifys/templates/fax-8.html -misc/notifys/templates/letter-29.html -misc/notifys/templates/sms-15.txt -misc/notifys/templates/sms-8.txt -misc/overduenotices.pl -misc/rebuildnonmarc.pl -misc/rebuildthesaurus.pl -misc/safe-installer -misc/sampledata-1.2 -misc/spellcheck_suggest/make_spellcheck_suggest.pl -misc/sql-datas/english/authorities_normal_marc21.sql -misc/sql-datas/english/authorities_normal_marc21.txt -misc/sql-datas/english/sample_usmarc.mrc -misc/sql-datas/english/sample_usmarc.readme -misc/sql-datas/english/stopwords.sql -misc/sql-datas/english/stopwords.txt -misc/sql-datas/french/authorites_norme_unimarc.sql -misc/sql-datas/french/authorites_norme_unimarc.txt -misc/sql-datas/french/framework_ANCI.sql -misc/sql-datas/french/framework_ANCI.txt -misc/sql-datas/french/framework_BASE.sql -misc/sql-datas/french/framework_BASE.txt -misc/sql-datas/french/framework_CART.sql -misc/sql-datas/french/framework_CART.txt -misc/sql-datas/french/framework_DEFAULT.sql -misc/sql-datas/french/framework_DEFAULT.txt -misc/sql-datas/french/framework_ELEC.sql -misc/sql-datas/french/framework_ELEC.txt -misc/sql-datas/french/framework_MICR.sql -misc/sql-datas/french/framework_MICR.txt -misc/sql-datas/french/framework_MONO.sql -misc/sql-datas/french/framework_MONO.txt -misc/sql-datas/french/framework_PERI.sql -misc/sql-datas/french/framework_PERI.txt -misc/sql-datas/french/framework_PROJ.sql -misc/sql-datas/french/framework_PROJ.txt -misc/sql-datas/french/framework_TIRE.sql -misc/sql-datas/french/framework_TIRE.txt -misc/sql-datas/french/stopwords.sql -misc/sql-datas/french/stopwords.txt -misc/sql-datas/french/unimarc_standard_systemprefs.sql -misc/sql-datas/french/unimarc_standard_systemprefs.txt -misc/testKoha.pl -misc/tidyaccounts.pl -misc/translator/po/css_opac_en_EN.po -misc/translator/po/css_opac_fr_FR.po -misc/translator/po/css_opac_it_IT.po -misc/translator/po/css_opac_zh_TW.po -misc/translator/po/default_intranet_en_EN.po -misc/translator/po/default_intranet_es_AR.po -misc/translator/po/default_intranet_fr_FR.po -misc/translator/po/default_intranet_pl_PL.po -misc/translator/po/default_intranet_zh_TW.po -misc/translator/po/default_opac_pl_PL.po -misc/translator/po/default_opac_zh_TW.po -misc/translator/po/stats.pl -misc/translator/po/update.pl -misc/translator/rebuild_lang.sh -misc/translator/text-extract.pl -misc/translator/text-extract2.pl -misc/translator/tmpl_process3.pl -misc/translator/TmplToken.pm -misc/translator/TmplTokenizer.pm -misc/translator/TmplTokenType.pm -misc/translator/translator_doc.html -misc/translator/translator_doc.txt -misc/translator/VerboseWarnings.pm -misc/translator/xgettext.pl -misc/uninstall.pl -misc/userdbshellchar.patch -misc/zebra/unimarc/explain.att -misc/zebra/unimarc/unimarc.abs -misc/zebra/unimarc/unimarc.mar -misc/zebra/unimarc/unimarc.tag -misc/zebra/unimarc/zebra.cfg -modbib.pl -modbibitem.pl -moditem.pl -modrequest.pl -modwebsites.pl -moredetail.pl -opac/changelanguage.pl -opac/opac-account.pl -opac/opac-addbookbybiblionumber.pl -opac/opac-basket.pl -opac/opac-detail.pl -opac/opac-detailprint.pl -opac/opac-dictionary.pl -opac/opac-ISBDdetail.pl -opac/opac-logout.pl -opac/opac-main.pl -opac/opac-MARCdetail.pl -opac/opac-membership.pl -opac/opac-moredetail.pl -opac/opac-readingrecord.pl -opac/opac-renew.pl -opac/opac-reserve.pl -opac/opac-search-biblio.pl -opac/opac-search.pl -opac/opac-searchresults.pl -opac/opac-sendbasket.pl -opac/opac-serial-issues.pl -opac/opac-shelves.pl -opac/opac-sidebar.pl -opac/opac-suggestions.pl -opac/opac-user.pl -opac/opac-userdetails.pl -opac/opac-userupdate.pl -opac/searchoptions.pl -overdue.pl -pay.pl -placerequest.pl -plugin_launcher.pl -readingrec.pl -renewscript.pl -reports-home.pl -reports/acquisitions_stats.pl -reports/bor_issues_top.pl -reports/borrowers_out.pl -reports/borrowers_stats.pl -reports/cat_issues_top.pl -reports/catalogue_out.pl -reports/catalogue_stats.pl -reports/inventory.pl -reports/issues_avg_stats.pl -reports/issues_by_borrower_category.plugin -reports/issues_stats.pl -reports/itemtypes.plugin -reports/manager.pl -reports/reserves.pl -request.pl -reservereport.pl -reservereport.xls -rss/lastAcquired-1.0.conf -rss/lastAcquired-1.0.tmpl -rss/lastAcquired-2.0.conf -rss/lastAcquired-2.0.tmpl -rss/lastAcquired.conf -rss/lastAcquired.tmpl -rss/longestUnseen.conf -rss/longestUnseen.tmpl -rss/mostReserved.conf -rss/mostReserved.tmpl -rss/README -rss/rss.pl -rss/sm-koha-icon.jpg -search.marc/dictionary.pl -search.marc/search.pl -search.marc/suggest.pl -search.pl -sec/writeoff.pl -stats.pl -stats2.pl -subjectsearch.pl -suggestion/acceptorreject.pl -thesaurus_popup.pl -tidyaccounts.pl -updatebibitem.pl -updatebiblio.pl -updateitem.pl -updater/sample_only_param_tables.sql -updater/thesaurus_create.pl -updater/updatedatabase -updatewebsite.pl -value_builder/unimarc_field_100.pl -value_builder/unimarc_field_105.pl -value_builder/unimarc_field_106.pl -value_builder/unimarc_field_110.pl -value_builder/unimarc_field_115a.pl -value_builder/unimarc_field_115b.pl -value_builder/unimarc_field_116.pl -value_builder/unimarc_field_117.pl -value_builder/unimarc_field_120.pl -value_builder/unimarc_field_121a.pl -value_builder/unimarc_field_121b.pl -value_builder/unimarc_field_122.pl -value_builder/unimarc_field_123a.pl -value_builder/unimarc_field_123d.pl -value_builder/unimarc_field_123e.pl -value_builder/unimarc_field_123f.pl -value_builder/unimarc_field_123g.pl -value_builder/unimarc_field_123i.pl -value_builder/unimarc_field_123j.pl -value_builder/unimarc_field_124.pl -value_builder/unimarc_field_124a.pl -value_builder/unimarc_field_124b.pl -value_builder/unimarc_field_124c.pl -value_builder/unimarc_field_124d.pl -value_builder/unimarc_field_124e.pl -value_builder/unimarc_field_124f.pl -value_builder/unimarc_field_124g.pl -value_builder/unimarc_field_125.pl -value_builder/unimarc_field_125a.pl -value_builder/unimarc_field_125b.pl -value_builder/unimarc_field_126.pl -value_builder/unimarc_field_126a.pl -value_builder/unimarc_field_126b.pl -value_builder/unimarc_field_127.pl -value_builder/unimarc_field_128a.pl -value_builder/unimarc_field_128b.pl -value_builder/unimarc_field_128c.pl -value_builder/unimarc_field_130.pl -value_builder/unimarc_field_135a.pl -value_builder/unimarc_field_140.pl -value_builder/unimarc_field_141.pl -value_builder/unimarc_field_210c.pl -value_builder/unimarc_field_225a.pl -value_builder/unimarc_field_4XX.pl -value_builder/unimarc_field_60X.pl -value_builder/unimarc_field_700-4.pl -value_builder/unimarc_field_700_701_702.pl -z3950/encodingfix/Biblio.pm -z3950/encodingfix/README-english -z3950/encodingfix/README-polish -z3950/encodingfix/search.pl -z3950/processz3950queue -z3950/search.pl -z3950/server/zed-koha-server.pl -z3950/z3950-daemon-launch.sh -z3950/z3950-daemon-shell.sh -z3950/z3950import.pl -Makefile.PL diff --git a/Makefile b/Makefile deleted file mode 100644 index 58e141abd4..0000000000 --- a/Makefile +++ /dev/null @@ -1,105 +0,0 @@ -### Commands -# STTY -# CHOWN -# CHMOD -# PERL -# MYSQL -# MYSQLADMIN -# INSTALL BSD-compatible install tool - -### MySQL database administration -# DBA_NAME Name of MySQL administrator -# DBA_PASSWD MySQL administrator password - -### Koha database -# DB_NAME Koha database name -# DB_USER Koha database user -# DB_PASSWD Koha database user's password - -### OPAC site -# OPAC_DOC_URL Root of tree containing HTML documents -# OPAC_CGI_URL Root of CGI tree -# OPAC_DOC_DIR Where to install HTML files -# OPAC_CGI_DIR Where to install CGI scripts - -### OPAC site -# INTRA_DOC_URL Root of tree containing HTML documents -# INTRA_CGI_URL Root of CGI tree -# INTRA_DOC_DIR Where to install HTML files -# INTRA_CGI_DIR Where to install CGI scripts - -# Prefer 'install-sh -d' over 'mkdir', because 'install-sh' will -# create directories recursively if they don't exist. But not all -# Unices support 'mkdir -p'. -MKDIR = ./install-sh -d - -# XXX - Add 'clean:' target. - -include Make.conf - -all: - @echo "Please use one of the following:" - @echo " config Configuration script" - @echo " install-db Install the database" - @echo " install-opac Install the OPAC web site" - @echo " install-intra Install the intranet web site" - -config configure Make.conf koha.conf.new: - ./safe-installer - -# XXX - Need to create the Koha user(s) and grant permissions before -# creating the database itself. - -# Create the database. -# -# Given the semantics of the MySQL arguments, if $(DBA_PASSWD) isn't -# set, the user will be prompted for them (repeatedly). -# -# First, this runs 'mysqladmin status' to make sure that the current -# user can really connect to the database and do stuff. This really -# isn't a good test, since it really only checks that $(DBA_PASSWD) -# corresponds to $(DBA_USER), and that $(DBA_USER) is authorized to -# read a little bit, but it's better than nothing. -# -# Next, this runs 'mysqldump' on the database we want to create. If -# this exits with a zero status, then everything went well, which -# means that the database already exists. If 'mysqladmin' succeeded -# but 'mysqldump' failed, we figure it must be because the database -# doesn't exist yet, so we need to create it. - -create-db: koha.mysql - @echo "Checking authorization to connect to MySQL" - @echo "You may be prompted for the database administrator's password" - $(MYSQLADMIN) "-u$(DBA_USER)" "-p$(DBA_PASSWD)" status >/dev/null 2>&1 - @echo "Checking whether $(DB_NAME) already exists" - @echo "$(MYSQLDUMP) -d -u$(DBA_USER) -p$(DBA_PASSWD) $(DB_NAME) >/dev/null" - @if $(MYSQLDUMP) -d "-u$(DBA_USER)" "-p$(DBA_PASSWD)" $(DB_NAME) >/dev/null 2>&1; then \ - echo "Database $(DB_NAME) already exists"; \ - else \ - echo "Creating database $(DB_NAME)"; \ - echo "$(MYSQLADMIN) -u$(DBA_USER) -p create $(DB_NAME)"; \ - $(MYSQLADMIN) "-u$(DBA_USER)" "-p$(DBA_PASSWD)" create $(DB_NAME); \ - echo "Adding tables to $(DB_NAME)"; \ - $(MYSQL) "-u$(DBA_USER)" "-p$(DBA_PASSWD)" $(DB_NAME) < koha.mysql; \ - fi - -# After ensuring that the database exists, bring it up to date. -# XXX - Currently, the sample data set assumes the v1.2 database, -# which is different from what 'updater/updatedatabase' will create. -# Hence, if the user wants to install the sample data, it'll be -# necessary to install it before running 'updater/updatedatabase'. -install-db: create-db - @echo "Updating database as necessary" - KOHA_CONF=koha.conf.new ./updater/updatedatabase - -install-opac: install-opac-html install-opac-cgi - -install-opac-html: - -install-opac-cgi: - -install-intra: install-intra-html install-intra-cgi - -install-intra-html: - -install-intra-cgi: diff --git a/Makefile.PL b/Makefile.PL index dc5070bb0d..ba8d22a4ec 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -25,13 +25,13 @@ die "perl 5.6.1 or later required" unless ($] >= 5.006001); WriteMakefile( NAME => 'Koha', DISTNAME => 'koha', - VERSION => '2.3.0', + VERSION => '3.2.0', NO_META => 1, PREREQ_PM => { 'DBI' => 1, 'Date::Manip' => 1, 'DBD::MySQL' => 1, - 'HTML::Template' => 1, + 'HTML::Template::Pro' => 1, 'Digest::MD5' => 1, 'MARC::Record' => 2.0, 'MARC::Charset' => 0.95, @@ -39,8 +39,7 @@ WriteMakefile( 'Mail::Sendmail' => 1, 'PDF::API2' => 1, 'Net::LDAP' => 1, - 'Event' => 1, - 'Net::Z3950' => 1, + XML::Simple=>1, 'XML::SAX::LibXML' => 1 }, CONFIGURE => sub { diff --git a/admin/auth_subfields_structure.pl b/admin/auth_subfields_structure.pl index 40318f2a31..ef6f7ffb59 100755 --- a/admin/auth_subfields_structure.pl +++ b/admin/auth_subfields_structure.pl @@ -134,9 +134,10 @@ my $sth2 = $dbh->prepare("select distinct category from authorised_values"); } $row_data{tab} = CGI::scrolling_list(-name=>'tab', -id=>"tab$i", - -values=>['-1','0'], - -labels => {'-1' =>'ignore','0'=>'0', - }, + -values=>['-1','0','1','2','3','4','5','6','7','8','9'], + -labels => {'-1' =>'ignore','0'=>'0','1'=>'1','2' =>'2','3'=>'3','4'=>'4', + '5' =>'5','6'=>'6','7'=>'7', + '8' =>'8','9'=>'9',}, -default=>$data->{'tab'}, -size=>1, -multiple=>0, @@ -219,10 +220,11 @@ my $sth2 = $dbh->prepare("select distinct category from authorised_values"); for (my $i=1;$i<=$more_subfields;$i++) { my %row_data; # get a fresh hash for the row data $row_data{tab} = CGI::scrolling_list(-name=>'tab', - -id => "tab$i", - -values=>['-1','0'], - -labels => {'-1' =>'ignore','0'=>'0', - }, + -id=>"tab$i", + -values=>['-1','0','1','2','3','4','5','6','7','8','9'], + -labels => {'-1' =>'ignore','0'=>'0','1'=>'1','2' =>'2','3'=>'3','4'=>'4', + '5' =>'5','6'=>'6','7'=>'7', + '8' =>'8','9'=>'9',}, -default=>"", -size=>1, -multiple=>0, diff --git a/admin/branches.pl b/admin/branches.pl index 677d93638f..47322cab0c 100755 --- a/admin/branches.pl +++ b/admin/branches.pl @@ -1,30 +1,5 @@ #!/usr/bin/perl -# NOTE: Use standard 8-space tabs for this file (indents are 4 spaces) - -#require '/u/acli/lib/cvs.pl';#DEBUG -#open(DEBUG,'>/tmp/koha.debug'); - -# FIXME: individual fields in branch address need to be exported to templates, -# in order to fix bug 180; need to notify translators -# FIXME: looped html (e.g., list of checkboxes) need to be properly -# TMPL_LOOP'ized; doing this properly will fix bug 130; need to -# notify translators -# FIXME: need to implement the branch categories stuff -# FIXME: there are too many TMPL_IF's; the proper way to do it is to have -# separate templates for each individual action; need to notify -# translators -# FIXME: there are lots of error messages exported to the template; a lot -# of these should be converted into exported booleans / counters etc -# so that the error messages can be localized; need to notify translators -# -# NOTE: heading() should now be called like this: -# 1. Use heading() as before -# 2. $template->param('heading-LISPISHIZED-HEADING-p' => 1); -# 3. $template->param('use-heading-flags-p' => 1); -# This ensures that both converted and unconverted templates work -# Finlay working on this file from 26-03-2002 -# Reorganising this branches admin page..... # Copyright 2000-2002 Katipo Communications @@ -50,7 +25,7 @@ use C4::Auth; use C4::Context; use C4::Output; use C4::Interface::CGI::Output; - +use C4::Search; # Fixed variables my $linecolor1='#ffffcc'; my $linecolor2='white'; @@ -492,15 +467,21 @@ sub deletecategory { sub checkdatabasefor { # check to see if the branchcode is being used in the database somewhere.... my ($branchcode) = @_; - my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("select count(*) from items where holdingbranch=? or homebranch=?"); - $sth->execute($branchcode, $branchcode); - my ($total) = $sth->fetchrow_array; - $sth->finish; +my @kohafield; +my @value; +my @relation; +my @and_or; + push @kohafield, "holdingbranch","homebranch"; +push @value, $branchcode,$branchcode; +push @and_or, "\@or"; +push @relation ,"\@attr 5=100","\@attr 5=100"; ##do not truncate + my ($total,@results) =ZEBRAsearch_kohafields(\@kohafield,\@value, \@relation,"", \@and_or); + my $message; if ($total) { - # FIXME: need to be replaced by an exported boolean parameter + # We do not return verbal messages but a flag. fix templates to accept $error=1 as a message $message = "Branch cannot be deleted because there are $total items using that branch."; + } return $message; } diff --git a/authorities/auth_finder.pl b/authorities/auth_finder.pl index afe64004ab..0606dd6624 100755 --- a/authorities/auth_finder.pl +++ b/authorities/auth_finder.pl @@ -19,24 +19,19 @@ # Suite 330, Boston, MA 02111-1307 USA use strict; -require Exporter; + use CGI; use C4::Auth; -use HTML::Template; use C4::Context; use C4::Search; -use C4::Auth; -use C4::Output; use C4::Interface::CGI::Output; use C4::AuthoritiesMarc; -use C4::Acquisition; use C4::Koha; # XXX subfield_is_koha_internal_p my $query=new CGI; my $op = $query->param('op'); my $authtypecode = $query->param('authtypecode'); my $index = $query->param('index'); -my $tagid=$query->param('tagid'); my $resultstring = $query->param('result'); my $dbh = C4::Context->dbh; @@ -59,17 +54,14 @@ foreach my $thisauthtype (keys %$authtypes) { if ($op eq "do_search") { my @marclist = $query->param('marclist'); - my @and_or = $query->param('and_or'); - my @excluding = $query->param('excluding'); + my @operator = $query->param('operator'); my @value = $query->param('value'); $resultsperpage= $query->param('resultsperpage'); - $resultsperpage = 19 if(!defined $resultsperpage); + $resultsperpage = 10 ; - my ($results,$total) = authoritysearch($dbh, \@marclist,\@and_or, - \@excluding, \@operator, \@value, - $startfrom*$resultsperpage, $resultsperpage,$authtypecode);# $orderby); + my ($results,$total) = authoritysearch($dbh, \@marclist, \@operator, \@value,$startfrom*$resultsperpage, $resultsperpage,$authtypecode);# $orderby); ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/searchresultlist-auth.tmpl", @@ -94,8 +86,6 @@ if ($op eq "do_search") { my @marclist_ini = $query->param('marclist'); # get marclist again, as the previous one has been modified by catalogsearch (mainentry replaced by field name for(my $i = 0 ; $i <= $#marclist ; $i++) { push @field_data, { term => "marclist", val=>$marclist_ini[$i] }; - push @field_data, { term => "and_or", val=>$and_or[$i] }; - push @field_data, { term => "excluding", val=>$excluding[$i] }; push @field_data, { term => "operator", val=>$operator[$i] }; push @field_data, { term => "value", val=>$value[$i] }; } @@ -131,8 +121,7 @@ if ($op eq "do_search") { resultsperpage => $resultsperpage, startfromnext => $startfrom+1, startfromprev => $startfrom-1, - index => $index, - tagid => $tagid, + index => $index, searchdata=>\@field_data, total=>$total, from=>$from, @@ -152,17 +141,13 @@ if ($op eq "do_search") { }); $template->param(index=>$query->param('index')."", - tagid => $tagid, resultstring => $resultstring, ); } $template->param(authtypesloop => \@authtypesloop, - authtypecode => $authtypecode, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); + authtypecode => $authtypecode, + nonav=>"1",); # Print the page output_html_with_http_headers $query, $cookie, $template->output; diff --git a/authorities/auth_linker.pl b/authorities/auth_linker.pl index 6f495dedc5..9448a36673 100644 --- a/authorities/auth_linker.pl +++ b/authorities/auth_linker.pl @@ -19,18 +19,14 @@ # Suite 330, Boston, MA 02111-1307 USA use strict; -require Exporter; + use CGI; use C4::Auth; -use HTML::Template; use C4::Context; use C4::Search; -use C4::Auth; -use C4::Output; + use C4::Interface::CGI::Output; use C4::AuthoritiesMarc; -#use C4::Biblio; -use C4::Acquisition; use C4::Koha; # XXX subfield_is_koha_internal_p my $query=new CGI; @@ -60,17 +56,15 @@ foreach my $thisauthtype (keys %$authtypes) { if ($op eq "do_search") { my @marclist = $query->param('marclist'); - my @and_or = $query->param('and_or'); - my @excluding = $query->param('excluding'); + my @operator = $query->param('operator'); my @value = $query->param('value'); $resultsperpage= $query->param('resultsperpage'); - $resultsperpage = 19 if(!defined $resultsperpage); + $resultsperpage = 10 if(!defined $resultsperpage); + + my ($results,$total) = authoritysearch($dbh, \@marclist, \@operator, \@value,$startfrom*$resultsperpage, $resultsperpage,$authtypecode) ; - my ($results,$total) = authoritysearch($dbh, \@marclist,\@and_or, - \@excluding, \@operator, \@value, - $startfrom*$resultsperpage, $resultsperpage,$authtypecode);# $orderby); ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/linkresultlist-auth.tmpl", @@ -92,11 +86,9 @@ if ($op eq "do_search") { my @field_data = (); - my @marclist_ini = $query->param('marclist'); # get marclist again, as the previous one has been modified by catalogsearch (mainentry replaced by field name + my @marclist_ini = $query->param('marclist'); # get marclist again, as the previous one has been modified by authoritysearch (mainentry replaced by field name for(my $i = 0 ; $i <= $#marclist ; $i++) { push @field_data, { term => "marclist", val=>$marclist_ini[$i] }; - push @field_data, { term => "and_or", val=>$and_or[$i] }; - push @field_data, { term => "excluding", val=>$excluding[$i] }; push @field_data, { term => "operator", val=>$operator[$i] }; push @field_data, { term => "value", val=>$value[$i] }; } @@ -132,7 +124,7 @@ if ($op eq "do_search") { resultsperpage => $resultsperpage, startfromnext => $startfrom+1, startfromprev => $startfrom-1, - index => $index, + index => $index, searchdata=>\@field_data, total=>$total, from=>$from, diff --git a/authorities/authorities-home.pl b/authorities/authorities-home.pl index 45b5a51d6e..c0b3826e00 100755 --- a/authorities/authorities-home.pl +++ b/authorities/authorities-home.pl @@ -19,134 +19,124 @@ # Suite 330, Boston, MA 02111-1307 USA use strict; -require Exporter; use CGI; use C4::Auth; -use HTML::Template; use C4::Context; -use C4::Search; -use C4::Auth; -use C4::Output; use C4::Interface::CGI::Output; use C4::AuthoritiesMarc; -use C4::Acquisition; use C4::Koha; # XXX subfield_is_koha_internal_p use C4::Biblio; + my $query=new CGI; my $op = $query->param('op'); my $authtypecode = $query->param('authtypecode'); my $dbh = C4::Context->dbh; - +my $mergefrom=$query->param('mergefrom'); +my $mergeto=$query->param('mergeto'); +my $startfrom=$query->param('startfrom'); my $authid=$query->param('authid'); +$startfrom=0 if(!defined $startfrom); my ($template, $loggedinuser, $cookie); +my $resultsperpage; my $authtypes = getauthtypes; my @authtypesloop; foreach my $thisauthtype (sort { $authtypes->{$a} <=> $authtypes->{$b} } keys %$authtypes) { my $selected = 1 if $thisauthtype eq $authtypecode; my %row =(value => $thisauthtype, - selected => $selected, + selected => $selected, authtypetext => $authtypes->{$thisauthtype}{'authtypetext'}, ); push @authtypesloop, \%row; } + if ($op eq "do_search") { my @marclist = $query->param('marclist'); - my @and_or = $query->param('and_or'); - my @excluding = $query->param('excluding'); + my @operator = $query->param('operator'); my @value = $query->param('value'); - my $startfrom = $query->param('startfrom') || 1; - my $resultsperpage = $query->param('resultsperpage') || 19; - - my ($results,$total) = authoritysearch( - $dbh, - \@marclist, - \@and_or, - \@excluding, - \@operator, - \@value, - ($startfrom - 1)*$resultsperpage, - $resultsperpage, - $authtypecode - ); - + $resultsperpage= $query->param('resultsperpage'); + $resultsperpage = 10 unless $resultsperpage; + my @tags; + my ($results,$total) = authoritysearch($dbh, \@marclist, \@operator, \@value,$startfrom*$resultsperpage, $resultsperpage,$authtypecode) ; ($template, $loggedinuser, $cookie) - = get_template_and_user({ - template_name => "authorities/searchresultlist.tmpl", - query => $query, - type => 'intranet', - authnotrequired => 0, - flagsrequired => {borrowers => 1}, - flagsrequired => {catalogue => 1}, - debug => 1, - }); + = get_template_and_user({template_name => "authorities/searchresultlist.tmpl", + query => $query, + type => 'intranet', + authnotrequired => 0, + authtypecode=> $authtypecode, + flagsrequired => {borrowers => 1}, + flagsrequired => {catalogue => 1}, + debug => 1, + }); + + # multi page display gestion + my $displaynext=0; + my $displayprev=$startfrom; + if(($total - (($startfrom+1)*($resultsperpage))) > 0 ){ + $displaynext = 1; + } my @field_data = (); - # we must get parameters once again. Because if there is a mainentry, it - # has been replaced by something else during the search, thus the links - # next/previous would not work anymore + # we must get parameters once again. Because if there is a mainentry, it has been replaced by something else during the search, thus the links next/previous would not work anymore my @marclist_ini = $query->param('marclist'); for(my $i = 0 ; $i <= $#marclist ; $i++) { - push @field_data, { term => "marclist" , val=>$marclist_ini[$i] }; - push @field_data, { term => "and_or" , val=>$and_or[$i] }; - push @field_data, { term => "excluding" , val=>$excluding[$i] }; - push @field_data, { term => "operator" , val=>$operator[$i] }; - push @field_data, { term => "value" , val=>$value[$i] }; + push @field_data, { term => "marclist", val=>$marclist_ini[$i] }; + push @field_data, { term => "operator", val=>$operator[$i] }; + push @field_data, { term => "value", val=>$value[$i] }; } - # construction of the url of each page - my $base_url = - 'authorities-home.pl?' - .join( - '&', - map { $_->{term}.'='.$_->{val} } @field_data - ) - .'&' - .join( - '&', - map { $_->{term}.'='.$_->{val} } ( - {term => 'resultsperpage', val => $resultsperpage}, - {term => 'type' , val => 'intranet'}, - {term => 'op' , val => 'do_search'}, - {term => 'authtypecode' , val => $authtypecode} - ) - ) - ; + my @numbers = (); + + if ($total>$resultsperpage) + { + for (my $i=1; $i<$total/$resultsperpage+1; $i++) + { + if ($i<31) + { + my $highlight=0; + ($startfrom==($i-1)) && ($highlight=1); + push @numbers, { number => $i, + highlight => $highlight , + searchdata=> \@field_data, + startfrom => ($i-1)}; + } + } + } - my $from = ($startfrom - 1) * $resultsperpage + 1; + my $from = $startfrom*$resultsperpage+1; my $to; - if ($total < $startfrom * $resultsperpage) { + if($total < (($startfrom+1)*$resultsperpage)) + { $to = $total; + } else { + $to = (($startfrom+1)*$resultsperpage); } - else { - $to = $startfrom * $resultsperpage; - } - $template->param(result => $results) if $results; - $template->param( - pagination_bar => pagination_bar( - $base_url, - int($total/$resultsperpage)+1, - $startfrom, - 'startfrom' - ), - total=>$total, - from=>$from, - to=>$to, - isEDITORS => $authtypecode eq 'EDITORS', - ); + startfrom=> $startfrom, + displaynext=> $displaynext, + displayprev=> $displayprev, + resultsperpage => $resultsperpage, + startfromnext => $startfrom+1, + startfromprev => $startfrom-1, + searchdata=>\@field_data, + total=>$total, + from=>$from, + to=>$to, + numbers=>\@numbers, + authtypecode=>$authtypecode, + ); } elsif ($op eq "delete") { - &AUTHdelauthority($dbh,$authid, 1); + &AUTHdelauthority($dbh,$authid); ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/authorities-home.tmpl", @@ -156,11 +146,14 @@ if ($op eq "do_search") { flagsrequired => {catalogue => 1}, debug => 1, }); -# $template->param("statements" => \@statements, -# "nbstatements" => $nbstatements); -} -elsif ($op eq "AddStatement") { + +}elsif ($op eq "merge") { + + + my $MARCfrom = XMLgetauthorityhash($dbh,$mergefrom); + my $MARCto = XMLgetauthorityhash($dbh,$mergeto); + merge($dbh,$mergefrom,$MARCfrom,$mergeto,$MARCto); ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/authorities-home.tmpl", query => $query, @@ -169,73 +162,7 @@ elsif ($op eq "AddStatement") { flagsrequired => {catalogue => 1}, debug => 1, }); - - # Gets the entered information - my @marcfields = $query->param('marclist'); - my @and_or = $query->param('and_or'); - my @excluding = $query->param('excluding'); - my @operator = $query->param('operator'); - my @value = $query->param('value'); - - my @statements = (); - - # List of the marc tags to display - my $marcarray = create_marclist(); - - my $nbstatements = $query->param('nbstatements'); - $nbstatements = 1 if(!defined $nbstatements); - - for(my $i = 0 ; $i < $nbstatements ; $i++) - { - my %fields = (); - - # Recreates the old scrolling lists with the previously selected values - my $marclist = create_scrolling_list({name=>"marclist", - values=> $marcarray, - size=> 1, - -tabindex=>'', - default=>$marcfields[$i], - onChange => "sql_update()"} - ); - - $fields{'marclist'} = $marclist; - $fields{'first'} = 1 if($i == 0); - - # Restores the and/or parameters (no need to test the 'and' for activation because it's the default value) - $fields{'or'} = 1 if($and_or[$i] eq "or"); - - #Restores the "not" parameters - $fields{'not'} = 1 if($excluding[$i]); - - #Restores the operators (most common operators first); - if($operator[$i] eq "=") { $fields{'eq'} = 1; } - elsif($operator[$i] eq "contains") { $fields{'contains'} = 1; } - elsif($operator[$i] eq "start") { $fields{'start'} = 1; } - elsif($operator[$i] eq ">") { $fields{'gt'} = 1; } #greater than - elsif($operator[$i] eq ">=") { $fields{'ge'} = 1; } #greater or equal - elsif($operator[$i] eq "<") { $fields{'lt'} = 1; } #lower than - elsif($operator[$i] eq "<=") { $fields{'le'} = 1; } #lower or equal - - #Restores the value - $fields{'value'} = $value[$i]; - - push @statements, \%fields; - } - $nbstatements++; - - # The new scrolling list - my $marclist = create_scrolling_list({name=>"marclist", - values=> $marcarray, - size=>1, - -tabindex=>'', - onChange => "sql_update()"}); - push @statements, {"marclist" => $marclist }; - - $template->param("statements" => \@statements, - "nbstatements" => $nbstatements); - -} -else { +}else { ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/authorities-home.tmpl", query => $query, @@ -247,11 +174,9 @@ else { } -$template->param(authtypesloop => \@authtypesloop, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); + + +$template->param(authtypesloop => \@authtypesloop); # Print the page output_html_with_http_headers $query, $cookie, $template->output; diff --git a/authorities/authorities.pl b/authorities/authorities.pl index 94d762b0eb..141192cb33 100755 --- a/authorities/authorities.pl +++ b/authorities/authorities.pl @@ -25,54 +25,22 @@ use C4::Auth; use C4::Output; use C4::Interface::CGI::Output; use C4::AuthoritiesMarc; +use C4::Biblio; use C4::Context; use C4::Koha; # XXX subfield_is_koha_internal_p -use HTML::Template; -use MARC::File::USMARC; -use MARC::File::XML; -use C4::Biblio; +use Encode; + use vars qw( $tagslib); use vars qw( $authorised_values_sth); use vars qw( $is_a_modif ); my $input = new CGI; my $z3950 = $input->param('z3950'); my $logstatus=C4::Context->preference('Activate_log'); +my $xml; my $itemtype; # created here because it can be used in build_authorized_values_list sub -=item find_value - ($indicators, $value) = find_value($tag, $subfield, $record,$encoding); - -Find the given $subfield in the given $tag in the given -MARC::Record $record. If the subfield is found, returns -the (indicators, value) pair; otherwise, (undef, undef) is -returned. - -=cut -sub find_value { - my ($tagfield,$insubfield,$record,$encoding) = @_; - my @result; - my $indicator; - if ($tagfield <10) { - if ($record->field($tagfield)) { - push @result, $record->field($tagfield)->data(); - } else { - push @result,""; - } - } else { - foreach my $field ($record->field($tagfield)) { - my @subfields = $field->subfields(); - foreach my $subfield (@subfields) { - if (@$subfield[0] eq $insubfield) { - push @result,@$subfield[1]; - $indicator = $field->indicator(1).$field->indicator(2); - } - } - } - } - return($indicator,@result); -} =item build_authorized_values_list @@ -128,7 +96,6 @@ sub build_authorized_values_list ($$$$$) { -labels => \%authorised_lib, -override => 1, -size => 1, - -tabindex=>'', -multiple => 0 ); } @@ -137,11 +104,11 @@ sub build_authorized_values_list ($$$$$) { builds the entry for a subfield. =cut sub create_input () { - my ($tag,$subfield,$value,$i,$tabloop,$rec,$authorised_values_sth) = @_; - # must be encoded as utf-8 before it reaches the editor - my $dbh=C4::Context->dbh; + my ($tag,$subfield,$value,$i,$tabloop,$rec,$authorised_values_sth,$id) = @_; + my $dbh=C4::Context->dbh; $value =~ s/"/"/g; my %subfield_data; + $subfield_data{id}=$id; $subfield_data{tag}=$tag; $subfield_data{subfield}=$subfield; $subfield_data{marc_lib}="".$tagslib->{$tag}->{$subfield}->{lib}.""; @@ -149,15 +116,14 @@ sub create_input () { $subfield_data{tag_mandatory}=$tagslib->{$tag}->{mandatory}; $subfield_data{mandatory}=$tagslib->{$tag}->{$subfield}->{mandatory}; $subfield_data{repeatable}=$tagslib->{$tag}->{$subfield}->{repeatable}; - $subfield_data{kohafield}=$tagslib->{$tag}->{$subfield}->{kohafield}; $subfield_data{index} = $i; $subfield_data{visibility} = "display:none" if (substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "0") ; #check parity # it's an authorised field if ($tagslib->{$tag}->{$subfield}->{authorised_value}) { $subfield_data{marc_value}= build_authorized_values_list($tag, $subfield, $value, $dbh,$authorised_values_sth); - # it's a thesaurus / authority field + # it's linking authority field to another authority } elsif ($tagslib->{$tag}->{$subfield}->{link}) { - $subfield_data{marc_value}=" ..."; + $subfield_data{marc_value}=" ..."; # it's a plugin field } elsif ($tagslib->{$tag}->{$subfield}->{'value_builder'}) { @@ -171,82 +137,105 @@ sub create_input () { require $plugin; my $extended_param = plugin_parameters($dbh,$rec,$tagslib,$i,$tabloop); my ($function_name,$javascript) = plugin_javascript($dbh,$rec,$tagslib,$i,$tabloop); - $subfield_data{marc_value}=" ... $javascript"; + $subfield_data{marc_value}=" ... $javascript"; # it's an hidden field } elsif ($tag eq '') { - $subfield_data{marc_value}=""; + $subfield_data{marc_value}=""; } elsif (substr($tagslib->{$tag}->{$subfield}->{'hidden'},2,1) gt "1") { - $subfield_data{marc_value}=""; + $subfield_data{marc_value}=""; # it's a standard field } else { if (length($value) >100) { - $subfield_data{marc_value}=""; + $subfield_data{marc_value}=""; } else { - $subfield_data{marc_value}=""; #" + $subfield_data{marc_value}=""; #" } } return \%subfield_data; } -sub build_tabs ($$$$) { - my($template, $record, $dbh,$encoding) = @_; +sub build_tabs ($$$;$){ + my($template, $xmlhash, $dbh,$addedfield) = @_; # fill arrays my @loop_data =(); my $tag; my $i=0; +my $id=100; my $authorised_values_sth = $dbh->prepare("select authorised_value,lib from authorised_values where category=? order by lib"); - +my $author; +my $controlfields; +my $leader; +if ($xmlhash){ + $author=$xmlhash->{'datafield'}; + $controlfields=$xmlhash->{'controlfield'}; + $leader=$xmlhash->{'leader'}; +} + my @BIG_LOOP; +my %built; # loop through each tab 0 through 9 for (my $tabloop = 0; $tabloop <= 9; $tabloop++) { my @loop_data = (); foreach my $tag (sort(keys (%{$tagslib}))) { my $indicator; - # if MARC::Record is not empty => use it as master loop, then add missing subfields that should be in the tab. - # if MARC::Record is empty => use tab as master loop. - if ($record ne -1 && ($record->field($tag) || $tag eq '000')) { - my @fields; - if ($tag ne '000') { - @fields = $record->field($tag); - } else { - push @fields,$record->leader(); - } - foreach my $field (@fields) { + # if MARC::Record is not empty => use it as master loop, then add missing subfields that should be in the tab. + # if MARC::Record is empty => use tab as master loop. + if ($xmlhash) { + #### + + my %tagdefined; + my %definedsubfields; + my $hiddenrequired; + my ($ind1,$ind2); + + if ($tag>9){ + foreach my $data (@$author){ + $hiddenrequired=0; my @subfields_data; - if ($tag<10) { - my ($value,$subfield); - if ($tag ne '000') { - $value=$field->data(); - $subfield="@"; - } else { - $value = $field; - $subfield='@'; - } - next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); - # next if ($tagslib->{$tag}->{$subfield}->{kohafield} eq 'auth_header.authid'); - push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$record,$authorised_values_sth)); + undef %definedsubfields; + if ($data->{'tag'} eq $tag){ + $tagdefined{$tag}=1 ; + if ($built{$tag}==1){ + $hiddenrequired=1; + } + $ind1=" "; + $ind2=" "; + foreach my $subfieldcode ( $data->{'subfield'}){ + foreach my $code ( @$subfieldcode){ + next if ($tagslib->{$tag}->{$code->{'code'}}->{tab} ne $tabloop); + my $subfield=$code->{'code'} ; + my $value=$code->{'content'}; + $definedsubfields{$tag.$subfield}=1 ; + $built{$tag}=1; + push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id)) ; + $i++ ; + } + } ##each subfield + $ind1=$data->{'ind1'}; + $ind2= $data->{'ind2'}; + + if ($hiddenrequired && $#loop_data >=0 && $loop_data[$#loop_data]->{'tag'} eq $tag) { + my @hiddensubfields_data; + my %tag_data; + push(@hiddensubfields_data, &create_input('','','',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); + $tag_data{tag} = ''; + $tag_data{tag_lib} = ''; + $tag_data{indicator} = ''; + $tag_data{subfield_loop} = \@hiddensubfields_data; + push (@loop_data, \%tag_data); $i++; - } else { - my @subfields=$field->subfields(); - foreach my $subfieldcount (0..$#subfields) { - my $subfield=$subfields[$subfieldcount][0]; - my $value=$subfields[$subfieldcount][1]; - next if (length $subfield !=1); - next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); - push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$record,$authorised_values_sth)); - $i++; - } } -# now, loop again to add parameter subfield that are not in the MARC::Record + # now, loop again to add parameter subfield that are not in the MARC::Record + foreach my $subfield (sort( keys %{$tagslib->{$tag}})) { next if (length $subfield !=1); next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); - next if ($tag<10); next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1") ); #check for visibility flag - next if (defined($field->subfield($subfield))); - push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$record,$authorised_values_sth)); + next if ($definedsubfields{$tag.$subfield} ); + push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); + $definedsubfields{$tag.$subfield}=1; $i++; } if ($#subfields_data >= 0) { @@ -254,38 +243,139 @@ sub build_tabs ($$$$) { $tag_data{tag} = $tag; $tag_data{tag_lib} = $tagslib->{$tag}->{lib}; $tag_data{repeatable} = $tagslib->{$tag}->{repeatable}; - $tag_data{indicator} = $record->field($tag)->indicator(1). $record->field($tag)->indicator(2) if ($tag>=10); + $tag_data{indicator} = $ind1.$ind2 if ($tag>=10); $tag_data{subfield_loop} = \@subfields_data; - if ($tag<10) { - $tag_data{fixedfield} = 1; - } - push (@loop_data, \%tag_data); + } -# If there is more than 1 field, add an empty hidden field as separator. - if ($#fields >=1 && $#loop_data >=0 && $loop_data[$#loop_data]->{'tag'} eq $tag) { - my @subfields_data; + $id++; + }## if tag matches + + }#eachdata + }else{ ## tag <10 + if ($tag eq "000" || $tag eq "LDR"){ + my $subfield="@"; + next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); + my @subfields_data; + my $value=$leader->[0] if $leader->[0]; + $tagdefined{$tag}=1 ; + push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); + $i++; + if ($#subfields_data >= 0) { + my %tag_data; + $tag_data{tag} = $tag; + $tag_data{tag_lib} = $tagslib->{$tag}->{lib}; + $tag_data{repeatable} = $tagslib->{$tag}->{repeatable}; + $tag_data{subfield_loop} = \@subfields_data; + $tag_data{fixedfield} = 1; + push (@loop_data, \%tag_data); + } + }else{ + foreach my $control (@$controlfields){ + my $subfield="@"; + next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); + my @subfields_data; + if ($control->{'tag'} eq $tag){ + $hiddenrequired=0; + $tagdefined{$tag}=1 ; + if ($built{$tag}==1){$hiddenrequired=1;} + my $value=$control->{'content'} ; + $definedsubfields{$tag.'@'}=1; + push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); + $i++; + + $built{$tag}=1; + if ($hiddenrequired && $#loop_data >=0 && $loop_data[$#loop_data]->{'tag'} eq $tag) { + my @hiddensubfields_data; my %tag_data; - push(@subfields_data, &create_input('','','',$i,$tabloop,$record,$authorised_values_sth)); + push(@hiddensubfields_data, &create_input('','','',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); $tag_data{tag} = ''; $tag_data{tag_lib} = ''; - $tag_data{indicator} = ''; + $tag_data{subfield_loop} = \@hiddensubfields_data; + $tag_data{fixedfield} = 1; + push (@loop_data, \%tag_data); + $i++; + } + if ($#subfields_data >= 0) { + my %tag_data; + $tag_data{tag} = $tag; + $tag_data{tag_lib} = $tagslib->{$tag}->{lib}; + $tag_data{repeatable} = $tagslib->{$tag}->{repeatable}; + $tag_data{subfield_loop} = \@subfields_data; + $tag_data{fixedfield} = 1; + push (@loop_data, \%tag_data); + } + $id++; + }## tag matches + }# each control + } + }##tag >9 + + + ##### Any remaining tag + my @subfields_data; + # now, loop again to add parameter subfield that are not in the MARC::Record + foreach my $subfield (sort( keys %{$tagslib->{$tag}})) { + next if ($tagdefined{$tag} ); + next if (length $subfield !=1); + next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); + next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1") ); #check for visibility flag + + push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); + $tagdefined{$tag.$subfield}=1; + $i++; + } + if ($#subfields_data >= 0) { + my %tag_data; + $tag_data{tag} = $tag; + $tag_data{tag_lib} = $tagslib->{$tag}->{lib}; + $tag_data{repeatable} = $tagslib->{$tag}->{repeatable}; + $tag_data{indicator} = $ind1.$ind2 if ($tag>=10); $tag_data{subfield_loop} = \@subfields_data; if ($tag<10) { - $tag_data{fixedfield} = 1; - } + $tag_data{fixedfield} = 1; + } + push (@loop_data, \%tag_data); + } + + + if ($addedfield eq $tag) { + my %tag_data; + my @subfields_data; + $id++; + $tagdefined{$tag}=1 ; + foreach my $subfield (sort( keys %{$tagslib->{$tag}})) { + next if (length $subfield !=1); + next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); + next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1") ); #check for visibility flag + $addedfield=""; + push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); $i++; + } + if ($#subfields_data >= 0) { + $tag_data{tag} = $tag; + $tag_data{tag_lib} = $tagslib->{$tag}->{lib}; + $tag_data{repeatable} = $tagslib->{$tag}->{repeatable}; + $tag_data{indicator} = ' ' if ($tag>=10); + $tag_data{subfield_loop} = \@subfields_data; + if ($tag<10) { + $tag_data{fixedfield} = 1; + } + push (@loop_data, \%tag_data); + + } + } - } - + + # if breeding is empty } else { my @subfields_data; foreach my $subfield (sort(keys %{$tagslib->{$tag}})) { next if (length $subfield !=1); next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1") ); #check for visibility flag next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); - push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$record,$authorised_values_sth)); + push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); $i++; } if ($#subfields_data >= 0) { @@ -302,9 +392,17 @@ sub build_tabs ($$$$) { push (@loop_data, \%tag_data); } } - } - $template->param($tabloop."XX" =>\@loop_data); + $id++; } + if ($#loop_data >=0) { + my %big_loop_line; + $big_loop_line{number}=$tabloop; + $big_loop_line{innerloop}=\@loop_data; + push @BIG_LOOP,\%big_loop_line; + } +# $template->param($tabloop."XX" =>\@loop_data); + $template->param(BIG_LOOP => \@BIG_LOOP); +}## tab loop } @@ -328,7 +426,7 @@ sub build_hidden_data () { $subfield_data{marc_lib}=$tagslib->{$tag}->{$subfield}->{lib}; $subfield_data{marc_mandatory}=$tagslib->{$tag}->{$subfield}->{mandatory}; $subfield_data{marc_repeatable}=$tagslib->{$tag}->{$subfield}->{repeatable}; - $subfield_data{marc_value}=""; + $subfield_data{marc_value}=""; push(@loop_data, \%subfield_data); $i++ } @@ -362,16 +460,19 @@ my ($template, $loggedinuser, $cookie) }); $template->param(nonav => $nonav,index=>$myindex,authtypecode=>$authtypecode,); $tagslib = AUTHgettagslib($dbh,1,$authtypecode); -my $record=-1; -my $encoding=""; -$record = AUTHgetauthority($dbh,$authid) if ($authid); + +my $xmlhash; +my $xml; +$xmlhash = XMLgetauthorityhash($dbh,$authid) if ($authid); + + my ($oldauthnumtagfield,$oldauthnumtagsubfield); my ($oldauthtypetagfield,$oldauthtypetagsubfield); $is_a_modif=0; if ($authid) { $is_a_modif=1; - ($oldauthnumtagfield,$oldauthnumtagsubfield) = &AUTHfind_marc_from_kohafield($dbh,"auth_header.authid",$authtypecode); - ($oldauthtypetagfield,$oldauthtypetagsubfield) = &AUTHfind_marc_from_kohafield($dbh,"auth_header.authtypecode",$authtypecode); + ($oldauthnumtagfield,$oldauthnumtagsubfield) = MARCfind_marc_from_kohafield("auth_authid","authorities"); + ($oldauthtypetagfield,$oldauthtypetagsubfield) = MARCfind_marc_from_kohafield("auth_authtypecode","authorities"); } #------------------------------------------------------------------------------------------------------------------------------ @@ -385,23 +486,28 @@ if ($op eq "add") { # build indicator hash. my @ind_tag = $input->param('ind_tag'); my @indicator = $input->param('indicator'); - my $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag); - #warn $xml; - my $record=MARC::Record->new_from_xml($xml,'UTF-8'); - $record->encoding('UTF-8'); - #warn $record->as_formatted; - #warn "IN ADDBIB"; - # check for a duplicate - my ($duplicateauthid,$duplicateauthvalue) = C4::AuthoritiesMarc::FindDuplicate($record,$authtypecode) if ($op eq "add") && (!$is_a_modif); +## check for malformed xml -- non UTF-8 like (MARC8) will break xml without warning +### This usually happens with data coming from other Z3950 servers +## Slows the saving process so comment out at your own risk +eval{ + $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag); +}; + if ($@){ +warn $@; + $template->param(error =>1,xmlerror=>1,); +goto FINAL; + }; # check for a duplicate + my $xmlhash=XML_xml2hash_onerecord($xml); + my ($duplicateauthid,$duplicateauthvalue) = C4::AuthoritiesMarc::FindDuplicateauth($xmlhash,$authtypecode) if ($op eq "add") && (!$is_a_modif); #warn "duplicate:$duplicateauthid,$duplicateauthvalue"; my $confirm_not_duplicate = $input->param('confirm_not_duplicate'); # it is not a duplicate (determined either by Koha itself or by user checking it's not a duplicate) if (!$duplicateauthid or $confirm_not_duplicate) { # warn "noduplicate"; if ($is_a_modif ) { - $authid=AUTHmodauthority($dbh,$authid,$record,$authtypecode,1); + $authid=AUTHmodauthority($dbh,$authid,$xmlhash,$authtypecode,1); } else { - ($authid) = AUTHaddauthority($dbh,$record,$authid,$authtypecode); + ($authid) = AUTHaddauthority($dbh,$xmlhash,$authid,$authtypecode); } # now, redirect to detail page @@ -413,9 +519,10 @@ if ($op eq "add") { } exit; } else { +FINAL: #warn "duplicate"; # it may be a duplicate, warn the user and do nothing - build_tabs ($template, $record, $dbh,$encoding); + build_tabs ($template, $xmlhash, $dbh); build_hidden_data; $template->param(authid =>$authid, duplicateauthid => $duplicateauthid, @@ -426,7 +533,6 @@ if ($op eq "add") { } elsif ($op eq "addfield") { #------------------------------------------------------------------------------------------------------------------------------ my $addedfield = $input->param('addfield_field'); - my $tagaddfield_subfield = $input->param('addfield_subfield'); my @tags = $input->param('tag'); my @subfields = $input->param('subfield'); my @values = $input->param('field_value'); @@ -434,12 +540,9 @@ if ($op eq "add") { my @ind_tag = $input->param('ind_tag'); my @indicator = $input->param('indicator'); my $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag); - my $record=MARC::Record->new_from_xml($xml,'UTF-8'); - $record->encoding('UTF-8'); + my $xmlhash=XML_xml2hash_onerecord($xml); # adding an empty field - my $field = MARC::Field->new("$addedfield",'','','$tagaddfield_subfield' => ""); - $record->append_fields($field); - build_tabs ($template, $record, $dbh,$encoding); + build_tabs ($template, $xmlhash, $dbh,$addedfield); build_hidden_data; $template->param( authid => $authid,); @@ -458,23 +561,22 @@ if ($op eq "duplicate") { $authid = ""; } - build_tabs ($template, $record, $dbh,$encoding); + build_tabs ($template, $xmlhash, $dbh); build_hidden_data; $template->param(oldauthtypetagfield=>$oldauthtypetagfield, oldauthtypetagsubfield=>$oldauthtypetagsubfield, oldauthnumtagfield=>$oldauthnumtagfield, oldauthnumtagsubfield=>$oldauthnumtagsubfield, authid => $authid , authtypecode=>$authtypecode, ); } -#unless ($op) { -# warn "BUILDING"; -# build_tabs ($template, $record, $dbh,$encoding); -# build_hidden_data; -#} $template->param( authid => $authid, authtypecode => $authtypecode, linkid=>$linkid, - ); + intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), + intranetstylesheet => C4::Context->preference("intranetstylesheet"), + IntranetNav => C4::Context->preference("IntranetNav"), + advancedMARCEditor => C4::Context->preference("advancedMARCEditor"), + ); my $authtypes = getauthtypes; my @authtypesloop; @@ -489,9 +591,5 @@ foreach my $thisauthtype (keys %$authtypes) { $template->param(authtypesloop => \@authtypesloop, authtypetext => $authtypes->{$authtypecode}{'authtypetext'}, - hide_marc => C4::Context->preference('hide_marc'), - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); + nonav=>$nonav,); output_html_with_http_headers $input, $cookie, $template->output; diff --git a/authorities/blinddetail-biblio-search.pl b/authorities/blinddetail-biblio-search.pl index c5d5d0fd3d..4869fc67e1 100755 --- a/authorities/blinddetail-biblio-search.pl +++ b/authorities/blinddetail-biblio-search.pl @@ -19,7 +19,6 @@ =head1 NAME -etail.pl : script to show an authority in MARC format =head1 SYNOPSIS @@ -28,8 +27,7 @@ etail.pl : script to show an authority in MARC format This script needs an authid -It shows the authority in a (nice) MARC format depending on authority MARC -parameters tables. + =head1 FUNCTIONS @@ -39,32 +37,27 @@ parameters tables. use strict; -require Exporter; use C4::AuthoritiesMarc; use C4::Auth; use C4::Context; -use C4::Output; use C4::Interface::CGI::Output; use CGI; use C4::Search; -use MARC::Record; use C4::Koha; -use HTML::Template; - +use C4::Biblio; my $query=new CGI; my $dbh=C4::Context->dbh; my $authid = $query->param('authid'); -my $index = $query->param('index'); -my $tagid = $query->param('tagid'); +my $index=$query->param('index'); my $authtypecode = &AUTHfind_authtypecode($dbh,$authid); my $tagslib = &AUTHgettagslib($dbh,1,$authtypecode); - +my ($dummyfield,$linkidsubfield)=MARCfind_marc_from_kohafield("auth_biblio_link_subf","biblios"); my $auth_type = AUTHgetauth_type($authtypecode); -# warn "XX = ".$auth_type->{auth_tag_to_report}; +#warn "$authid =$authtypecode ".$auth_type->{auth_tag_to_report}; -my $record =AUTHgetauthority($dbh,$authid); +my $record =XMLgetauthorityhash($dbh,$authid) if $authid; # open template my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/blinddetail-biblio-search.tmpl", @@ -80,30 +73,29 @@ my @loop_data =(); my $tag; my @loop_data =(); if ($authid) { - foreach my $field ($record->field($auth_type->{auth_tag_to_report})) { - my @subfields_data; - my @subf=$field->subfields; + my @record_subs=XML_readline_withtags($record,"","",$auth_type->{auth_tag_to_report}); + ##Put the result in a hash + my %filled_subfield; + foreach my $subfield (@record_subs) { + $filled_subfield{$subfield->[0]}=$subfield->[1]; + } + my @subfields_data; + # loop through each subfield - my %result; - for my $i (0..$#subf) { - $subf[$i][0] = "@" unless $subf[$i][0]; - $result{$subf[$i][0]}.=$subf[$i][1]."|"; - } - foreach (keys %result) { + foreach my $subfield ('a'..'z') { my %subfield_data; - chop $result{$_}; - $subfield_data{marc_value}=$result{$_}; - $subfield_data{marc_subfield}=$_; -# $subfield_data{marc_tag}=$field->tag(); + $subfield_data{marc_value}=$filled_subfield{$subfield} ; + $subfield_data{marc_subfield}=$subfield; + $subfield_data{marc_tag}=$auth_type->{auth_tag_to_report}; push(@subfields_data, \%subfield_data); } if ($#subfields_data>=0) { my %tag_data; - $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; + $tag_data{tag}=$auth_type->{auth_tag_to_report}.' -'. $tagslib->{$auth_type->{auth_tag_to_report}}->{lib}; $tag_data{subfield} = \@subfields_data; push (@loop_data, \%tag_data); } - } + } else { # authid is empty => the user want to empty the entry. my @subfields_data; @@ -113,34 +105,21 @@ if ($authid) { $subfield_data{marc_subfield}=$subfield; push(@subfields_data, \%subfield_data); } -# if ($#subfields_data>=0) { + foreach my $subfield ('0'..'9') { + my %subfield_data; + $subfield_data{marc_value}=''; + $subfield_data{marc_subfield}=$subfield; + push(@subfields_data, \%subfield_data); + } my %tag_data; -# $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; $tag_data{subfield} = \@subfields_data; push (@loop_data, \%tag_data); -# } } $template->param("0XX" =>\@loop_data); -# my $authtypes = getauthtypes; -# my @authtypesloop; -# foreach my $thisauthtype (keys %$authtypes) { -# my $selected = 1 if $thisauthtype eq $authtypecode; -# my %row =(value => $thisauthtype, -# selected => $selected, -# authtypetext => $authtypes->{$thisauthtype}{'authtypetext'}, -# ); -# push @authtypesloop, \%row; -# } - -$template->param(authid => $authid?$authid:"", -# authtypesloop => \@authtypesloop, - index => $index, - tagid => $tagid, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); + + +$template->param(authid => $authid?$authid:"", linkidsubfield=>$linkidsubfield,index=>$index,); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/authorities/blinddetail-linker.pl b/authorities/blinddetail-linker.pl index 5b40090533..599093a51b 100644 --- a/authorities/blinddetail-linker.pl +++ b/authorities/blinddetail-linker.pl @@ -28,8 +28,6 @@ etail.pl : script to show an authority in MARC format This script needs an authid -It shows the authority in a (nice) MARC format depending on authority MARC -parameters tables. =head1 FUNCTIONS @@ -39,18 +37,14 @@ parameters tables. use strict; -require Exporter; use C4::AuthoritiesMarc; use C4::Auth; use C4::Context; -use C4::Output; use C4::Interface::CGI::Output; use CGI; use C4::Search; -use MARC::Record; use C4::Koha; -use HTML::Template; - +use C4::Biblio; my $query=new CGI; my $dbh=C4::Context->dbh; @@ -60,10 +54,10 @@ my $index = $query->param('index'); my $authtypecode=$query->param('authtypecode'); $authtypecode = &AUTHfind_authtypecode($dbh,$authid) if !$authtypecode; my $tagslib = &AUTHgettagslib($dbh,1,$authtypecode); -my ($linkidfield,$linkidsubfield)=AUTHfind_marc_from_kohafield($dbh,"auth_header.linkid",$authtypecode); +my ($linkidfield,$linkidsubfield)=MARCfind_marc_from_kohafield("auth_linkid","authorities"); my $auth_type = AUTHgetauth_type($authtypecode); -my $record =AUTHgetauthority($dbh,$authid); +my $record =XMLgetauthorityhash($dbh,$authid); # open template my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/blinddetail-linker.tmpl", @@ -80,42 +74,46 @@ my $tag; my @loop_data =(); if ($authid) { - foreach my $field ($record->field($auth_type->{auth_tag_to_report})) { - my @subfields_data; - my @subf=$field->subfields; - # loop through each subfield - for my $i (0..$#subf) { - $subf[$i][0] = "@" unless $subf[$i][0]; - my %subfield_data; - $subfield_data{marc_value}=$subf[$i][1]; - $subfield_data{marc_subfield}=$subf[$i][0]; - $subfield_data{marc_tag}=$field->tag(); - push(@subfields_data, \%subfield_data); - } - if ($#subfields_data>=0) { - my %tag_data; - $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; - $tag_data{subfield} = \@subfields_data; - push (@loop_data, \%tag_data); - } - } +# foreach my $field ($record->field($auth_type->{auth_tag_to_report})) { +# my @subfields_data; +# my @subf=$field->subfields; +# # loop through each subfield +# for my $i (0..$#subf) { +# $subf[$i][0] = "@" unless $subf[$i][0]; +# my %subfield_data; +# $subfield_data{marc_value}=$subf[$i][1]; +# $subfield_data{marc_subfield}=$subf[$i][0]; +# $subfield_data{marc_tag}=$field->tag(); +# push(@subfields_data, \%subfield_data); +# } +# if ($#subfields_data>=0) { +# my %tag_data; +# $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; +# $tag_data{subfield} = \@subfields_data; +# push (@loop_data, \%tag_data); +# } +# } } else { # authid is empty => the user want to empty the entry. my @subfields_data; + foreach my $subfield ('0'..'9') { + my %subfield_data; + $subfield_data{marc_value}=''; + $subfield_data{marc_subfield}=$subfield; + push(@subfields_data, \%subfield_data); + } foreach my $subfield ('a'..'z') { my %subfield_data; $subfield_data{marc_value}=''; $subfield_data{marc_subfield}=$subfield; push(@subfields_data, \%subfield_data); - } -# if ($#subfields_data>=0) { + if ($#subfields_data>=0) { my %tag_data; -# $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; $tag_data{subfield} = \@subfields_data; push (@loop_data, \%tag_data); -# } + } } $template->param("0XX" =>\@loop_data); diff --git a/authorities/detail-biblio-search.pl b/authorities/detail-biblio-search.pl index 848e2283c9..83211553be 100755 --- a/authorities/detail-biblio-search.pl +++ b/authorities/detail-biblio-search.pl @@ -39,19 +39,13 @@ parameters tables. use strict; -require Exporter; use C4::AuthoritiesMarc; use C4::Auth; use C4::Context; -use C4::Output; use C4::Interface::CGI::Output; use CGI; use C4::Search; -use MARC::Record; use C4::Koha; -# use C4::Biblio; -# use C4::Catalogue; -use HTML::Template; my $query=new CGI; @@ -62,7 +56,7 @@ my $index = $query->param('index'); my $authtypecode = &AUTHfind_authtypecode($dbh,$authid); my $tagslib = &AUTHgettagslib($dbh,1,$authtypecode); -my $record =AUTHgetauthority($dbh,$authid); +my $record =XMLgetauthorityhash($dbh,$authid); # open template my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/detail-biblio-search.tmpl", @@ -76,96 +70,93 @@ my ($template, $loggedinuser, $cookie) # fill arrays my @loop_data =(); my $tag; +if ($xmlhash){ # loop through each tab 0 through 9 -# for (my $tabloop = 0; $tabloop<=10;$tabloop++) { +my $author=$xmlhash->{'datafield'}; +my $controlfields=$xmlhash->{'controlfield'}; +my $leader=$xmlhash->{'leader'}; +for (my $tabloop = 0; $tabloop<10;$tabloop++) { # loop through each tag - my @fields = $record->fields(); my @loop_data =(); - foreach my $field (@fields) { - my @subfields_data; - # if tag <10, there's no subfield, use the "@" trick - if ($field->tag()<10) { -# next if ($tagslib->{$field->tag()}->{'@'}->{tab} ne $tabloop); - next if ($tagslib->{$field->tag()}->{'@'}->{hidden}); + my @subfields_data; + + # deal with leader + unless (($tagslib->{'000'}->{'@'}->{tab} ne $tabloop) || (substr($tagslib->{'000'}->{'@'}->{hidden},1,1)>0)) { + + my %subfield_data; + $subfield_data{marc_value}=$leader->[0] ; + push(@subfields_data, \%subfield_data); + my %tag_data; + $tag_data{tag}='000 -'. $tagslib->{'000'}->{lib}; + my @tmp = @subfields_data; + $tag_data{subfield} = \@tmp; + push (@loop_data, \%tag_data); + undef @subfields_data; + } + ##Controlfields + + foreach my $control (@$controlfields){ my %subfield_data; - $subfield_data{marc_lib}=$tagslib->{$field->tag()}->{'@'}->{lib}; - $subfield_data{marc_value}=$field->data(); - $subfield_data{marc_subfield}='@'; - $subfield_data{marc_tag}=$field->tag(); + my %tag_data; + next if ($tagslib->{$control->{'tag'}}->{'@'}->{tab} ne $tabloop); + next if (substr($tagslib->{$control->{'tag'}}->{'@'}->{hidden},1,1)>0); + $subfield_data{marc_value}=$control->{'content'} ; push(@subfields_data, \%subfield_data); - } else { - my @subf=$field->subfields; - # loop through each subfield - for my $i (0..$#subf) { - $subf[$i][0] = "@" unless $subf[$i][0]; -# next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne $tabloop); - next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{hidden}); - my %subfield_data; - $subfield_data{marc_lib}=$tagslib->{$field->tag()}->{$subf[$i][0]}->{lib}; - if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{isurl}) { - $subfield_data{marc_value}="$subf[$i][1]"; + if (C4::Context->preference('hide_marc')) { + $tag_data{tag}=$tagslib->{$control->{'tag'}}->{lib}; } else { - $subfield_data{marc_value}=$subf[$i][1]; - } - $subfield_data{marc_subfield}=$subf[$i][0]; - $subfield_data{marc_tag}=$field->tag(); - push(@subfields_data, \%subfield_data); - } + $tag_data{tag}=$control->{'tag'}.' -'. $tagslib->{$control->{'tag'}}->{lib}; + } + my @tmp = @subfields_data; + $tag_data{subfield} = \@tmp; + push (@loop_data, \%tag_data); + undef @subfields_data; } + my $previoustag; + my %datatags; + my $i=0; + foreach my $data (@$author){ + $datatags{$i++}=$data->{'tag'}; + foreach my $subfield ( $data->{'subfield'}){ + foreach my $code ( @$subfield){ + next if ($tagslib->{$data->{'tag'}}->{$code->{'code'}}->{tab} ne $tabloop); + next if (substr($tagslib->{$data->{'tag'}}->{$code->{'code'}}->{hidden},1,1)>0); + my %subfield_data; + my $value=$code->{'content'}; + $subfield_data{marc_lib}=$tagslib->{$data->{'tag'}}->{$code->{'code'}}->{lib}; + $subfield_data{link}=$tagslib->{$data->{'tag'}}->{$code->{'code'}}->{link}; + if ($tagslib->{$data->{'tag'}}->{$code->{'code'}}->{isurl}) { + $subfield_data{marc_value}="$value"; + } else { + $subfield_data{marc_value}=get_authorised_value_desc($data->{'tag'}, $code->{'code'}, $value, '', $dbh); + } + $subfield_data{marc_subfield}=$code->{'code'}; + $subfield_data{marc_tag}=$data->{'tag'}; + push(@subfields_data, \%subfield_data); + }### $code + + if ($#subfields_data>=0) { my %tag_data; - $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; - $tag_data{subfield} = \@subfields_data; + if (($datatags{$i} eq $datatags{$i-1}) && (C4::Context->preference('LabelMARCView') eq 'economical')) { + $tag_data{tag}=""; + } else { + if (C4::Context->preference('hide_marc')) { + $tag_data{tag}=$tagslib->{$data->{'tag'}}->{lib}; + } else { + $tag_data{tag}=$data->{'tag'}.' -'. $tagslib->{$data->{'tag'}}->{lib}; + } + } + my @tmp = @subfields_data; + $tag_data{subfield} = \@tmp; push (@loop_data, \%tag_data); + undef @subfields_data; } + }### each $subfield } - $template->param("0XX" =>\@loop_data); -# } -# now, build item tab ! -# the main difference is that datas are in lines and not in columns : thus, we build the first, then the values... -# loop through each tag -# warning : we may have differents number of columns in each row. Thus, we first build a hash, complete it if necessary -# then construct template. -# my @fields = $record->fields(); -# my %witness; #---- stores the list of subfields used at least once, with the "meaning" of the code -# my @big_array; -# foreach my $field (@fields) { -# next if ($field->tag()<10); -# my @subf=$field->subfields; -# my %this_row; -# # loop through each subfield -# for my $i (0..$#subf) { -# next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne 10); -# $witness{$subf[$i][0]} = $tagslib->{$field->tag()}->{$subf[$i][0]}->{lib}; -# $this_row{$subf[$i][0]} =$subf[$i][1]; -# } -# if (%this_row) { -# push(@big_array, \%this_row); -# } -# } -# #fill big_row with missing datas -# foreach my $subfield_code (keys(%witness)) { -# for (my $i=0;$i<=$#big_array;$i++) { -# $big_array[$i]{$subfield_code}=" " unless ($big_array[$i]{$subfield_code}); -# } -# } -# # now, construct template ! -# my @item_value_loop; -# my @header_value_loop; -# for (my $i=0;$i<=$#big_array; $i++) { -# my $items_data; -# foreach my $subfield_code (keys(%witness)) { -# $items_data .="".$big_array[$i]{$subfield_code}.""; -# } -# my %row_data; -# $row_data{item_value} = $items_data; -# push(@item_value_loop,\%row_data); -# } -# foreach my $subfield_code (keys(%witness)) { -# my %header_value; -# $header_value{header_value} = $witness{$subfield_code}; -# push(@header_value_loop, \%header_value); -# } + + $template->param($tabloop."XX" =>\@loop_data); +} my $authtypes = getauthtypes; my @authtypesloop; @@ -179,10 +170,32 @@ foreach my $thisauthtype (keys %$authtypes) { } $template->param(authid => $authid, - authtypesloop => \@authtypesloop, index => $index, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); + authtypesloop => \@authtypesloop, index => $index); +} output_html_with_http_headers $query, $cookie, $template->output; +sub get_authorised_value_desc ($$$$$) { + my($tag, $subfield, $value, $framework, $dbh) = @_; + + #---- branch + if ($tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) { + return getbranchname($value); + } + + #---- itemtypes + if ($tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "itemtypes" ) { + return ItemType($value); + } + + #---- "true" authorized value + my $category = $tagslib->{$tag}->{$subfield}->{'authorised_value'}; + + if ($category ne "") { + my $sth = $dbh->prepare("select lib from authorised_values where category = ? and authorised_value = ?"); + $sth->execute($category, $value); + my $data = $sth->fetchrow_hashref; + return $data->{'lib'}; + } else { + return $value; # if nothing is found return the original value + } +} diff --git a/authorities/detail.pl b/authorities/detail.pl index eeda2eb33c..352cc81471 100755 --- a/authorities/detail.pl +++ b/authorities/detail.pl @@ -39,39 +39,28 @@ parameters tables. use strict; -require Exporter; use C4::AuthoritiesMarc; use C4::Auth; use C4::Context; -use C4::Output; use C4::Interface::CGI::Output; use CGI; use C4::Search; -use MARC::Record; use C4::Koha; -# use C4::Biblio; -# use C4::Catalogue; -use HTML::Template; + my $query=new CGI; my $dbh=C4::Context->dbh; - +my $nonav = $query->param('nonav'); my $authid = $query->param('authid'); my $authtypecode = &AUTHfind_authtypecode($dbh,$authid); my $tagslib = &AUTHgettagslib($dbh,1,$authtypecode); -my $record =AUTHgetauthority($dbh,$authid); -my $count = AUTHcount_usage($authid); +my $xmlhash =XMLgetauthorityhash($dbh,$authid); -# find the marc field/subfield used in biblio by this authority -my $sth = $dbh->prepare("select distinct tagfield from marc_subfield_structure where authtypecode=?"); -$sth->execute($authtypecode); -my $biblio_fields; -while (my ($tagfield) = $sth->fetchrow) { - $biblio_fields.= $tagfield."9,"; -} -chop $biblio_fields; +my ($count) = AUTHcount_usage($authid); + +#chop; # open template my ($template, $loggedinuser, $cookie) @@ -83,52 +72,97 @@ my ($template, $loggedinuser, $cookie) debug => 1, }); + # fill arrays my @loop_data =(); my $tag; +if ($xmlhash){ # loop through each tab 0 through 9 -# for (my $tabloop = 0; $tabloop<=10;$tabloop++) { +my $author=$xmlhash->{'datafield'}; +my $controlfields=$xmlhash->{'controlfield'}; +my $leader=$xmlhash->{'leader'}; +for (my $tabloop = 0; $tabloop<10;$tabloop++) { # loop through each tag -my @fields = $record->fields(); -my @loop_data =(); -foreach my $field (@fields) { - my @subfields_data; - # if tag <10, there's no subfield, use the "@" trick - if ($field->tag()<10) { - next if ($tagslib->{$field->tag()}->{'@'}->{hidden}); + my @loop_data =(); + my @subfields_data; + + # deal with leader + unless (($tagslib->{'000'}->{'@'}->{tab} ne $tabloop) || (substr($tagslib->{'000'}->{'@'}->{hidden},1,1)>0)) { + my %subfield_data; - $subfield_data{marc_lib}=$tagslib->{$field->tag()}->{'@'}->{lib}; - $subfield_data{marc_value}=$field->data(); - $subfield_data{marc_subfield}='@'; - $subfield_data{marc_tag}=$field->tag(); + $subfield_data{marc_value}=$leader->[0] ; push(@subfields_data, \%subfield_data); - } else { - my @subf=$field->subfields; -# loop through each subfield - for my $i (0..$#subf) { - $subf[$i][0] = "@" unless $subf[$i][0]; - next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{hidden}); + my %tag_data; + $tag_data{tag}='000 -'. $tagslib->{'000'}->{lib}; + my @tmp = @subfields_data; + $tag_data{subfield} = \@tmp; + push (@loop_data, \%tag_data); + undef @subfields_data; + } + ##Controlfields + + foreach my $control (@$controlfields){ my %subfield_data; - $subfield_data{marc_lib}=$tagslib->{$field->tag()}->{$subf[$i][0]}->{lib}; - if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{isurl}) { - $subfield_data{marc_value}="$subf[$i][1]"; + my %tag_data; + next if ($tagslib->{$control->{'tag'}}->{'@'}->{tab} ne $tabloop); + next if (substr($tagslib->{$control->{'tag'}}->{'@'}->{hidden},1,1)>0); + $subfield_data{marc_value}=$control->{'content'} ; + push(@subfields_data, \%subfield_data); + if (C4::Context->preference('hide_marc')) { + $tag_data{tag}=$tagslib->{$control->{'tag'}}->{lib}; + } else { + $tag_data{tag}=$control->{'tag'}.' -'. $tagslib->{$control->{'tag'}}->{lib}; + } + my @tmp = @subfields_data; + $tag_data{subfield} = \@tmp; + push (@loop_data, \%tag_data); + undef @subfields_data; + } + my $previoustag; + my %datatags; + my $i=0; + foreach my $data (@$author){ + $datatags{$i++}=$data->{'tag'}; + foreach my $subfield ( $data->{'subfield'}){ + foreach my $code ( @$subfield){ + next if ($tagslib->{$data->{'tag'}}->{$code->{'code'}}->{tab} ne $tabloop); + next if (substr($tagslib->{$data->{'tag'}}->{$code->{'code'}}->{hidden},1,1)>0); + my %subfield_data; + my $value=$code->{'content'}; + $subfield_data{marc_lib}=$tagslib->{$data->{'tag'}}->{$code->{'code'}}->{lib}; + $subfield_data{link}=$tagslib->{$data->{'tag'}}->{$code->{'code'}}->{link}; + if ($tagslib->{$data->{'tag'}}->{$code->{'code'}}->{isurl}) { + $subfield_data{marc_value}="$value"; } else { - $subfield_data{marc_value}=$subf[$i][1]; + $subfield_data{marc_value}=get_authorised_value_desc($data->{'tag'}, $code->{'code'}, $value, '', $dbh); } - $subfield_data{marc_subfield}=$subf[$i][0]; - $subfield_data{marc_tag}=$field->tag(); + $subfield_data{marc_subfield}=$code->{'code'}; + $subfield_data{marc_tag}=$data->{'tag'}; push(@subfields_data, \%subfield_data); + }### $code + + + if ($#subfields_data>=0) { + my %tag_data; + if (($datatags{$i} eq $datatags{$i-1}) && (C4::Context->preference('LabelMARCView') eq 'economical')) { + $tag_data{tag}=""; + } else { + if (C4::Context->preference('hide_marc')) { + $tag_data{tag}=$tagslib->{$data->{'tag'}}->{lib}; + } else { + $tag_data{tag}=$data->{'tag'}.' -'. $tagslib->{$data->{'tag'}}->{lib}; + } + } + my @tmp = @subfields_data; + $tag_data{subfield} = \@tmp; + push (@loop_data, \%tag_data); + undef @subfields_data; } + }### each $subfield } - if ($#subfields_data>=0) { - my %tag_data; - $tag_data{tag}=$field->tag().' -'. $tagslib->{$field->tag()}->{lib}; - $tag_data{subfield} = \@subfields_data; - push (@loop_data, \%tag_data); - } -} -$template->param("0XX" =>\@loop_data); + $template->param($tabloop."XX" =>\@loop_data); +} my $authtypes = getauthtypes; my @authtypesloop; foreach my $thisauthtype (keys %$authtypes) { @@ -141,13 +175,36 @@ foreach my $thisauthtype (keys %$authtypes) { } $template->param(authid => $authid, - count => $count, - biblio_fields => $biblio_fields, - authtypetext => $authtypes->{$authtypecode}{'authtypetext'}, - authtypesloop => \@authtypesloop, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); + count => $count, + authtypetext => $authtypes->{$authtypecode}{'authtypetext'}, + authtypecode => $authtypes->{$authtypecode}{'authtypecode'}, + authtypesloop => \@authtypesloop); +$template->param(nonav =>$nonav); +}### if $xmlash exist output_html_with_http_headers $query, $cookie, $template->output; +sub get_authorised_value_desc ($$$$$) { + my($tag, $subfield, $value, $framework, $dbh) = @_; + + #---- branch + if ($tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) { + return getbranchname($value); + } + + #---- itemtypes + if ($tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "itemtypes" ) { + return ItemType($value); + } + + #---- "true" authorized value + my $category = $tagslib->{$tag}->{$subfield}->{'authorised_value'}; + + if ($category ne "") { + my $sth = $dbh->prepare("select lib from authorised_values where category = ? and authorised_value = ?"); + $sth->execute($category, $value); + my $data = $sth->fetchrow_hashref; + return $data->{'lib'}; + } else { + return $value; # if nothing is found return the original value + } +} \ No newline at end of file diff --git a/catalogue/MARCdetail.pl b/catalogue/MARCdetail.pl index a6397b8c44..68bbd4afab 100755 --- a/catalogue/MARCdetail.pl +++ b/catalogue/MARCdetail.pl @@ -297,7 +297,7 @@ $template->param(item_loop => \@item_value_loop, intranetstylesheet => C4::Context->preference("intranetstylesheet"), IntranetNav => C4::Context->preference("IntranetNav"), ); -} +}##if $xmlhash output_html_with_http_headers $query, $cookie, $template->output; sub get_authorised_value_desc ($$$$$) { diff --git a/catalogue/detail.pl b/catalogue/detail.pl index 78b724dbc7..2f891ed061 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -59,13 +59,13 @@ $template->param(norequests => $norequests); ## get notes subjects and URLS from MARC record - my $marcflavour = C4::Context->preference("marcflavour"); - my $marcnotesarray = &getMARCnotes($dbh,$record,$marcflavour); - my $marcsubjctsarray = &getMARCsubjects($dbh,$record,$marcflavour); - my $marcurlssarray = &getMARCurls($dbh,$record,$marcflavour); - $template->param(MARCURLS => $marcurlssarray); - $template->param(MARCNOTES => $marcnotesarray); - $template->param(MARCSUBJCTS => $marcsubjctsarray); +# my $marcflavour = C4::Context->preference("marcflavour"); +# my $marcnotesarray = &getMARCnotes($dbh,$record,$marcflavour); +# my $marcsubjctsarray = &getMARCsubjects($dbh,$record,$marcflavour); +# my $marcurlssarray = &getMARCurls($dbh,$record,$marcflavour); +# $template->param(MARCURLS => $marcurlssarray); +# $template->param(MARCNOTES => $marcnotesarray); +# $template->param(MARCSUBJCTS => $marcsubjctsarray); my @results = ($dat,); diff --git a/catalogue/detailprint.pl b/catalogue/detailprint.pl index 55cbed7461..dd22665ecd 100755 --- a/catalogue/detailprint.pl +++ b/catalogue/detailprint.pl @@ -24,8 +24,8 @@ require Exporter; use C4::Context; use C4::Output; # contains gettemplate use CGI; +use C4::Search; use C4::Auth; -use C4::Biblio; use C4::Interface::CGI::Output; use C4::Date; @@ -45,7 +45,7 @@ foreach my $itm (@items) { my $dat=bibdata($biblionumber); -my ($authorcount, $addauthor)= &getaddauthor($biblionumber); +my ($authorcount, $addauthor)= &addauthor($biblionumber); my ($webbiblioitemcount, @webbiblioitems) = &getwebbiblioitems($biblionumber); my ($websitecount, @websites) = &getwebsites($biblionumber); diff --git a/catalogue/moredetail.pl b/catalogue/moredetail.pl index 736d142af5..e9975f8ab4 100755 --- a/catalogue/moredetail.pl +++ b/catalogue/moredetail.pl @@ -57,8 +57,8 @@ my $barcode=$query->param('barcode'); my $title=$query->param('title'); my $biblionumber=$query->param('biblionumber'); -my ($record,)=MARCgetbiblio($dbh,$biblionumber); -my $data=MARCmarc2koha($dbh,$record,"biblios"); +my ($record)=XMLgetbibliohash($dbh,$biblionumber); +my $data=XMLmarc2koha_onerecord($dbh,$record,"biblios"); my $dewey = $data->{'dewey'}; # FIXME Dewey is a string, not a number, & we should use a function $dewey =~ s/0+$//; @@ -105,11 +105,11 @@ if ($flag != 0 && $override ne "yes"){ }else { ##UPDATE here -my $sth=$dbh->prepare("update items set itemlost=? ,wthdrawn=? where itemnumber=?"); -$sth->execute($lost,$withdrawn,$itemnumber); -$sth->finish; -MARCmoditemonefield($dbh,$biblionumber,$itemnumber,'wthdrawn',$withdrawn,1); -MARCmoditemonefield($dbh,$biblionumber,$itemnumber,'itemlost',$lost); +#my $sth=$dbh->prepare("update items set itemlost=? ,wthdrawn=? where itemnumber=?"); +#$sth->execute($lost,$withdrawn,$itemnumber); +#$sth->finish; +XMLmoditemonefield($dbh,$biblionumber,$itemnumber,'wthdrawn',$withdrawn,1); +XMLmoditemonefield($dbh,$biblionumber,$itemnumber,'itemlost',$lost); if ($lost ==1 && $flag ==2){ my $sth=$dbh->prepare("Select * from issues where (itemnumber=?) and (returndate is null)"); @@ -137,13 +137,13 @@ MARCmoditemonefield($dbh,$biblionumber,$itemnumber,'itemlost',$lost); } } -my @itemrecords=MARCgetallitems($dbh,$biblionumber); +my @itemrecords=XMLgetallitems($dbh,$biblionumber); foreach my $itemrecord (@itemrecords){ - -my $items = MARCmarc2koha($dbh,$itemrecord,"holdings"); +$itemrecord=XML_xml2hash_onerecord($itemrecord); +my $items = XMLmarc2koha_onerecord($dbh,$itemrecord,"holdings"); $items->{itemtype}=$data->{itemtype}; $items->{biblionumber}=$biblionumber; -$items=itemissues($dbh,$items,$biblionumber); +$items=itemissues($dbh,$items,$items->{'itemnumber'}); push @items,$items; } my $count=@items; @@ -166,7 +166,7 @@ foreach my $item (@items){ if ($item->{'date_due'} gt '0000-00-00'){ $item->{'date_due'} = format_date($item->{'date_due'}); $item->{'issue'}= 1; - $item->{'borrowernumber'} = $item->{'borrowernumber'}; + $item->{'borrowernumber'} = $item->{'borrower'}; $item->{'cardnumber'} = $item->{'card'}; } else { diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 5278b6f116..7f905839f2 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -29,17 +29,25 @@ use C4::Search; # also includes Biblio.pm, Search is used to FindDuplicate use C4::Context; use C4::Koha; # XXX subfield_is_koha_internal_p use MARC::Record; +use MARC::File::USMARC; +my $format="USMARC"; +$format="UNIMARC" if (C4::Context->preference('marcflavour') eq 'UNIMARC'); +use MARC::File::XML(RecordFormat =>$format); use Encode; use vars qw( $tagslib); use vars qw( $authorised_values_sth); use vars qw( $is_a_modif ); my $input = new CGI; my $z3950 = $input->param('z3950'); -#my $logstatus=C4::Context->preference('Activate_log'); +my $logstatus=C4::Context->preference('Activate_log'); my $xml; my $itemtype; # created here because it can be used in build_authorized_values_list sub - +###Find related tags for Z3950 searches- required by template +my($isbntag,$isbnsub)=MARCfind_marc_from_kohafield("isbn","biblios"); +my($issntag,$issnsub)=MARCfind_marc_from_kohafield("issn","biblios"); +my($titletag,$titlesub)=MARCfind_marc_from_kohafield("title","biblios"); +my($authortag,$authorsub)=MARCfind_marc_from_kohafield("author","biblios"); =item MARCfindbreeding $record = MARCfindbreeding($dbh, $breedingid,$frameworkcode); @@ -62,8 +70,38 @@ sub MARCfindbreeding { if (ref($record) eq undef) { return -1; } - -##Delete biblionumber tag in case a similar tag is used in imported MARC + if (C4::Context->preference("z3950NormalizeAuthor") and C4::Context->preference("z3950AuthorAuthFields")){ + my ($tag,$subfield) = MARCfind_marc_from_kohafield("author","biblios"); + my $auth_fields = C4::Context->preference("z3950AuthorAuthFields"); + my @auth_fields= split /,/,$auth_fields; + my $field; + if ($record->field($tag)){ + foreach my $tmpfield ($record->field($tag)->subfields){ + my $subfieldcode=shift @$tmpfield; + my $subfieldvalue=shift @$tmpfield; + if ($field){ + $field->add_subfields("$subfieldcode"=>$subfieldvalue) if ($subfieldcode ne $subfield); + } else { + $field=MARC::Field->new($tag,"","",$subfieldcode=>$subfieldvalue) if ($subfieldcode ne $subfield); + } + } + } + $record->delete_field($record->field($tag)); + foreach my $fieldtag (@auth_fields){ + next unless ($record->field($fieldtag)); + my $lastname = $record->field($fieldtag)->subfield('a'); + my $firstname= $record->field($fieldtag)->subfield('b'); + my $title = $record->field($fieldtag)->subfield('c'); + my $number= $record->field($fieldtag)->subfield('d'); + if ($title){ + $field->add_subfields("$subfield"=>ucfirst($title)." ".ucfirst($firstname)." ".$number); + }else{ + $field->add_subfields("$subfield"=>ucfirst($firstname).", ".ucfirst($lastname)); + } + } + $record->insert_fields_ordered($field); + } +##Delete biblionumber tag in case a similar tag is used in imported MARC ## my ( $tagfield, $tagsubfield ) =MARCfind_marc_from_kohafield("biblionumber","biblios"); my $old_field = $record->field($tagfield); $record->delete_field($old_field); @@ -148,8 +186,8 @@ sub build_authorized_values_list ($$$$$) { =cut sub create_input () { my ($tag,$subfield,$value,$i,$tabloop,$rec,$authorised_values_sth,$id) = @_; + my $dbh=C4::Context->dbh; $value =~ s/"/"/g; - my $dbh = C4::Context->dbh; my %subfield_data; $subfield_data{id}=$id; $subfield_data{tag}=$tag; @@ -163,7 +201,7 @@ sub create_input () { $subfield_data{visibility} = "display:none" if (substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "0") ; #check parity if ($tagslib->{$tag}->{$subfield}->{authorised_value}) { $subfield_data{marc_value}= build_authorized_values_list($tag, $subfield, $value, $dbh,$authorised_values_sth); - # it's a thesaurus / authority field + # it's an authority field } elsif ($tagslib->{$tag}->{$subfield}->{authtypecode}) { $subfield_data{marc_value}=" {$tag}->{$subfield}->{authtypecode}."&index=$id',$id);\">..."; @@ -207,75 +245,168 @@ my $id=100; my $authorised_values_sth = $dbh->prepare("select authorised_value,lib from authorised_values where category=? order by lib"); +my $biblio; +my $controlfields; +my $leader; +if ($xmlhash){ + $biblio=$xmlhash->{'datafield'}; + $controlfields=$xmlhash->{'controlfield'}; + $leader=$xmlhash->{'leader'}; +} + my @BIG_LOOP; +my %built; # loop through each tab 0 through 9 - for (my $tabloop = 0; $tabloop <= 9; $tabloop++) { +for (my $tabloop = 0; $tabloop <= 9; $tabloop++) { + my @loop_data = (); - foreach my $tag (sort(keys (%{$tagslib}))) { + foreach my $tag (sort(keys (%{$tagslib}))) { my $indicator; # if MARC::Record is not empty => use it as master loop, then add missing subfields that should be in the tab. # if MARC::Record is empty => use tab as master loop. - if ($xmlhash) { + my @subfields_data; + + if ($xmlhash) { #### - my @subfields_data; + + my %tagdefined; my %definedsubfields; my $hiddenrequired; my ($ind1,$ind2); - my $biblio=$xmlhash->{'datafield'}; - my $controlfields=$xmlhash->{'controlfield'}; - my $leader=$xmlhash->{'leader'}; - if ($tag>9){ - foreach my $data (@$biblio){ - if ($data->{'tag'} eq $tag){ + + if ($tag>9){ + foreach my $data (@$biblio){ + $hiddenrequired=0; + my @subfields_data; + undef %definedsubfields; + if ($data->{'tag'} eq $tag){ + $tagdefined{$tag}=1 ; + if ($built{$tag}==1){ + $hiddenrequired=1; + } $ind1=" "; $ind2=" "; - foreach my $subfield ( $data->{'subfield'}){ - foreach my $code ( @$subfield){ - if (@$subfield>1){$hiddenrequired=1;} + foreach my $subfieldcode ( $data->{'subfield'}){ + foreach my $code ( @$subfieldcode){ + next if ($tagslib->{$tag}->{$code->{'code'}}->{tab} ne $tabloop); my $subfield=$code->{'code'} ; my $value=$code->{'content'}; - $definedsubfields{$tag}{$code->{'code'}}=1 ; - next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); - push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); - $i++; + $definedsubfields{$tag.$subfield}=1 ; + $built{$tag}=1; + push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id)) ; + $i++ ; } - } + } ##each subfield $ind1=$data->{'ind1'}; $ind2= $data->{'ind2'}; - } - } - }else{ + + if ($hiddenrequired && $#loop_data >=0 && $loop_data[$#loop_data]->{'tag'} eq $tag) { + my @hiddensubfields_data; + my %tag_data; + push(@hiddensubfields_data, &create_input('','','',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); + $tag_data{tag} = ''; + $tag_data{tag_lib} = ''; + $tag_data{indicator} = ''; + $tag_data{subfield_loop} = \@hiddensubfields_data; + push (@loop_data, \%tag_data); + $i++; + } + # now, loop again to add parameter subfield that are not in the MARC::Record + + foreach my $subfield (sort( keys %{$tagslib->{$tag}})) { + next if (length $subfield !=1); + next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); + next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1") ); #check for visibility flag + next if ($definedsubfields{$tag.$subfield} ); + push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); + $definedsubfields{$tag.$subfield}=1; + $i++; + } + if ($#subfields_data >= 0) { + my %tag_data; + $tag_data{tag} = $tag; + $tag_data{tag_lib} = $tagslib->{$tag}->{lib}; + $tag_data{repeatable} = $tagslib->{$tag}->{repeatable}; + $tag_data{indicator} = $ind1.$ind2 if ($tag>=10); + $tag_data{subfield_loop} = \@subfields_data; + push (@loop_data, \%tag_data); + + } + $id++; + }## if tag matches + + }#eachdata + }else{ ## tag <10 if ($tag eq "000" || $tag eq "LDR"){ my $subfield="@"; - my $value=$leader->[0] if $leader->[0]; - $definedsubfields{$tag}{'@'}=1; next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); + my @subfields_data; + my $value=$leader->[0] if $leader->[0]; + $tagdefined{$tag}=1 ; push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); $i++; + if ($#subfields_data >= 0) { + my %tag_data; + $tag_data{tag} = $tag; + $tag_data{tag_lib} = $tagslib->{$tag}->{lib}; + $tag_data{repeatable} = $tagslib->{$tag}->{repeatable}; + $tag_data{subfield_loop} = \@subfields_data; + $tag_data{fixedfield} = 1; + push (@loop_data, \%tag_data); + } }else{ foreach my $control (@$controlfields){ - if ($control->{'tag'} eq $tag){ my $subfield="@"; - my $value=$control->{'content'} ; - $definedsubfields{$tag}{'@'}=1; next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); + my @subfields_data; + if ($control->{'tag'} eq $tag){ + $hiddenrequired=0; + $tagdefined{$tag}=1 ; + if ($built{$tag}==1){$hiddenrequired=1;} + my $value=$control->{'content'} ; + $definedsubfields{$tag.'@'}=1; push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); $i++; + + $built{$tag}=1; + if ($hiddenrequired && $#loop_data >=0 && $loop_data[$#loop_data]->{'tag'} eq $tag) { + my @hiddensubfields_data; + my %tag_data; + push(@hiddensubfields_data, &create_input('','','',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); + $tag_data{tag} = ''; + $tag_data{tag_lib} = ''; + $tag_data{subfield_loop} = \@hiddensubfields_data; + $tag_data{fixedfield} = 1; + push (@loop_data, \%tag_data); + $i++; + } + if ($#subfields_data >= 0) { + my %tag_data; + $tag_data{tag} = $tag; + $tag_data{tag_lib} = $tagslib->{$tag}->{lib}; + $tag_data{repeatable} = $tagslib->{$tag}->{repeatable}; + $tag_data{subfield_loop} = \@subfields_data; + $tag_data{fixedfield} = 1; + push (@loop_data, \%tag_data); } - } + $id++; + }## tag matches + }# each control } }##tag >9 - ##### - + ##### Any remaining tag + my @subfields_data; # now, loop again to add parameter subfield that are not in the MARC::Record foreach my $subfield (sort( keys %{$tagslib->{$tag}})) { + next if ($tagdefined{$tag} ); next if (length $subfield !=1); next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1") ); #check for visibility flag - next if ($definedsubfields{$tag}{$subfield} ); + push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); + $tagdefined{$tag.$subfield}=1; $i++; } if ($#subfields_data >= 0) { @@ -293,42 +424,32 @@ my $id=100; } -# If there is more than 1 field, add an empty hidden field as separator. - if ($hiddenrequired && $#loop_data >=0 && $loop_data[$#loop_data]->{'tag'} eq $tag) { - my @subfields_data; - my %tag_data; - push(@subfields_data, &create_input('','','',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); - $tag_data{tag} = ''; - $tag_data{tag_lib} = ''; - $tag_data{indicator} = ''; - $tag_data{subfield_loop} = \@subfields_data; - if ($tag<10) { - $tag_data{fixedfield} = 1; - } - push (@loop_data, \%tag_data); - $i++; - } if ($addedfield eq $tag) { my %tag_data; my @subfields_data; - foreach my $subfield (sort( keys %{$tagslib->{$tag}})) { + $id++; + $tagdefined{$tag}=1 ; + foreach my $subfield (sort( keys %{$tagslib->{$tag}})) { next if (length $subfield !=1); next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop); - next if ($tag<10); next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1") ); #check for visibility flag + $addedfield=""; push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id)); $i++; } + if ($#subfields_data >= 0) { $tag_data{tag} = $tag; $tag_data{tag_lib} = $tagslib->{$tag}->{lib}; $tag_data{repeatable} = $tagslib->{$tag}->{repeatable}; - $tag_data{indicator} = $ind1.$ind2 if ($tag>=10); + $tag_data{indicator} = ' ' if ($tag>=10); $tag_data{subfield_loop} = \@subfields_data; - if ($tag<10) { - $tag_data{fixedfield} = 1; - } + if ($tag<10) { + $tag_data{fixedfield} = 1; + } push (@loop_data, \%tag_data); - $i++; + + } + } # if breeding is empty @@ -356,9 +477,15 @@ my $id=100; } } $id++; - } - $template->param($tabloop."XX" =>\@loop_data); } + if ($#loop_data >=0) { + my %big_loop_line; + $big_loop_line{number}=$tabloop; + $big_loop_line{innerloop}=\@loop_data; + push @BIG_LOOP,\%big_loop_line; + } + $template->param(BIG_LOOP => \@BIG_LOOP); +}## tab loop } @@ -376,7 +503,7 @@ sub build_hidden_data () { next if ($subfield eq 'lib'); next if ($subfield eq 'tab'); next if ($subfield eq 'mandatory'); - next if ($subfield eq 'repeatable'); + next if ($subfield eq 'repeatable'); next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "-1"); my %subfield_data; $subfield_data{marc_lib}=$tagslib->{$tag}->{$subfield}->{lib}; @@ -577,6 +704,17 @@ goto OUT; oldbiblionumtagsubfield => $oldbiblionumtagsubfield ); } +$template->param( + isbntag => $isbntag, + isbnsub => $isbnsub, + issntag => $isbntag, + issnsub => $issnsub, + titletag => $titletag, + titlesub => $titlesub, + authortag => $authortag, + authorsub => $authorsub, + ); + $template->param( frameworkcode => $frameworkcode, itemtype => $frameworkcode, # HINT: if the library has itemtype = framework, itemtype is auto filled ! diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index 22d5f940aa..5bfa59ba63 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -29,7 +29,6 @@ use C4::Context; use C4::Koha; # XXX subfield_is_koha_internal_p use C4::Search; use C4::Circulation::Circ2; -use Encode; use C4::Log; my $logstatus=C4::Context->preference('Activate_log'); @@ -89,15 +88,6 @@ my $itemrecord; my $nextop="additem"; my @errors; # store errors found while checking data BEFORE saving item. -###DO NOT CHANGE TO RETRIVE FROM ZEBRA##### -my $record =XMLgetbiblio($dbh,$biblionumber); -$bibliorecord=XML_xml2hash_onerecord($record); -my @itemxmls=XMLgetallitems($dbh,$biblionumber); - foreach my $itemrecord(@itemxmls){ - my $itemhash=XML_xml2hash($itemrecord); - push @itemrecords, $itemhash; - } -#### my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "cataloguing/additem.tmpl", @@ -174,7 +164,7 @@ $newrecord=XML_writeline( $newrecord, "serialid", $serialid,"holdings" ); } elsif ($op eq "edititem") { #------------------------------------------------------------------------------------------------------------------------------ # retrieve item if exist => then, it's a modif - ($itemrecexist) = XMLfinditem($itemnumber,@itemrecords);## item is already in our array-getit + ($itemrecexist) = XMLgetitemhash($dbh,$itemnumber);## item is already in our array-getit $nextop="saveitem"; #logaction($loggedinuser,"acqui.simple","modify",$oldbiblionumber,"item : ".$itemnumber) if ($logstatus); @@ -244,6 +234,15 @@ FINAL: my %indicators; $indicators{995}=' '; # now, build existing item list +###DO NOT CHANGE TO RETRIVE FROM ZEBRA##### +my $record =XMLgetbiblio($dbh,$biblionumber); +$bibliorecord=XML_xml2hash_onerecord($record); +my @itemxmls=XMLgetallitems($dbh,$biblionumber); + foreach my $itemrecord(@itemxmls){ + my $itemhash=XML_xml2hash($itemrecord); + push @itemrecords, $itemhash; + } +#### diff --git a/circ/branchtransfers.pl b/circ/branchtransfers.pl index 6d06b1db58..dd4db98420 100755 --- a/circ/branchtransfers.pl +++ b/circ/branchtransfers.pl @@ -31,15 +31,15 @@ use C4::Auth; use C4::Interface::CGI::Output; use HTML::Template; use C4::Koha; - +use C4::Members; ############################################### # constants my %env; -my $linecolor1= 0; -my $linecolor2= 1; +my $linecolor1='#ffffcc'; +my $linecolor2='white'; -my $branches = GetBranches(); +my $branches = getbranches(); my $printers = getprinters(\%env); @@ -63,14 +63,13 @@ my $reqmessage; my $cancelled; my $setwaiting; my $reqbrchname; -my $allmessages; - +my $user=$query->param('loggedinuser'); my $request=$query->param('request'); my $borrnum = $query->param('borrowernumber'); my $tobranchcd=$query->param('tobranchcd'); my $frbranchcd=''; - +my $dbh=C4::Context->dbh; ############ # Deal with the requests.... if ($request eq "KillWaiting") { @@ -78,7 +77,6 @@ if ($request eq "KillWaiting") { CancelReserve(0, $item, $borrnum); $cancelled = 1; $reqmessage =1; - $allmessages = 1; } my $ignoreRs = 0; @@ -89,14 +87,12 @@ if ($request eq "SetWaiting") { $ignoreRs = 1; $setwaiting = 1; $reqmessage =1; - $allmessages = 1; } if ($request eq 'KillReserved'){ my $biblio = $query->param('biblionumber'); CancelReserve($biblio, 0, $borrnum); $cancelled = 1; $reqmessage =1; - $allmessages = 1; } @@ -119,17 +115,17 @@ my %transfereditems; my %frbranchcds; my %tobranchcds; my $color=$linecolor2; -my $transfered; + my $barcode = $query->param('barcode'); if ($barcode) { - + my $transfered; my $iteminformation; ($transfered, $messages, $iteminformation) - = transferbook($tobranchcd, $barcode, $ignoreRs); + = transferbook($tobranchcd, $barcode, $ignoreRs,$user); $found = $messages->{'ResFound'}; if ($transfered) { my %item; - my $frbranchcd = $iteminformation->{'frbranchcd'}; + my $frbranchcd = $iteminformation->{'holdingbranch'}; if (not ($found)) { ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1); $item{'color'}=$color; @@ -184,21 +180,13 @@ foreach ($query->param){ push (@trsfitemloop, \%item); } -my $title; -my $surname; -my $firstname; -my $bornum; -my $borphone; -my $borstraddress; -my $borcity; -my $borzip; -my $boremail; + +my $name; my $bornum; my $borcnum; my $itemnumber; my $biblionum; my $branchname; -my $wastransferred; ##################### @@ -207,17 +195,8 @@ if ($found) { my $res = $messages->{'ResFound'}; $branchname = $branches->{$res->{'branchcode'}}->{'branchname'}; my ($borr) = getpatroninformation(\%env, $res->{'borrowernumber'}, 0); - $title = $borr->{'title'}; - $surname = $borr->{'surname'}; - $firstname = $borr->{'firstname'}; - $bornum = $borr->{'borrowernumber'}; - $borphone = $borr->{'phone'}; - $borstraddress = $borr->{'streetaddress'}; - $borcity = $borr->{'city'}; - $borzip = $borr->{'zipcode'}; - $boremail = $borr->{'emailadress'}; - - #Hopefully, borr->{borrowernumber}=res->{borrowernumber} + $name = name($borr); + $bornum = $borr->{'borrowernumber'}; #Hopefully, borr->{borrowernumber}=res->{borrowernumber} $borcnum = $borr->{'cardnumber'}; $itemnumber = $res->{'itemnumber'}; @@ -235,39 +214,33 @@ if ($found) { my @errmsgloop; foreach my $code (keys %$messages) { my %err; - + $err{errbadcode} = ($code eq 'BadBarcode'); if ($code eq 'BadBarcode') { $err{msg}=$messages->{'BadBarcode'}; - $err{errbadcode} = 1; - $allmessages = 1; } + $err{errispermanent} = ($code eq 'IsPermanent'); if ($code eq 'IsPermanent'){ - $err{errispermanent} = 1; $err{msg} = $branches->{$messages->{'IsPermanent'}}->{'branchname'}; # Here, msg contains the branchname # Not so satisfied with this... But should work - $allmessages = 1; } $err{errdesteqholding} = ($code eq 'DestinationEqualsHolding'); + $err{errwasreturned} = ($code eq 'WasReturned'); if ($code eq 'WasReturned') { - $err{errwasreturned} = 1; - $allmessages = 1; my ($borrowerinfo) = getpatroninformation(\%env, $messages->{'WasReturned'}, 0); - $title = $borrowerinfo->{'title'}; - $surname = $borrowerinfo->{'surname'}; - $firstname = $borrowerinfo->{'firstname'}; + $name =name($borrowerinfo); $bornum =$borrowerinfo->{'borrowernumber'}; $borcnum =$borrowerinfo->{'cardnumber'}; } -# if ($code eq 'WasTransfered'){ + if ($code eq 'WasTransfered'){ # Put code here if you want to notify the user that item was transfered... -# $wastransferred = 1; -# } + } push (@errmsgloop, \%err); } + ####################################################################################### # Make the page ..... my ($template, $borrowernumber, $cookie) @@ -275,12 +248,8 @@ my ($template, $borrowernumber, $cookie) query => $query, type => "intranet", authnotrequired => 0, - flagsrequired => {circulate => 1}, + flagsrequired => {editcatalogue => 1}, }); -if($allmessages){ - $template->param(allmessages => 1); -} - $template->param( genbrname => $genbrname, genprname => $genprname, branch => $branch, @@ -288,14 +257,7 @@ $template->param( genbrname => $genbrname, found => $found, reserved => $reserved, waiting => $waiting, - title => $title, - surname => $surname, - firstname => $firstname, - borphone => $borphone, - borstraddress => $borstraddress, - borcity => $borcity, - borzip => $borzip, - boremail => $boremail, + name => $name, bornum => $bornum, borcnum => $borcnum, branchname => $branchname, @@ -306,13 +268,9 @@ $template->param( genbrname => $genbrname, reqmessage => $reqmessage, cancelled => $cancelled, setwaiting => $setwaiting, - wastransferred => $wastransferred, trsfitemloop => \@trsfitemloop, branchoptionloop => \@branchoptionloop, - errmsgloop => \@errmsgloop, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), + errmsgloop => \@errmsgloop ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/circ/circulation.pl b/circ/circulation.pl index 9fcd6e24f6..121ef99480 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -2,8 +2,9 @@ # Please use 8-character tabs for this file (indents are every 4 characters) -# written 8/5/2002 by Finlay -# script to execute issuing of books +#written 8/5/2002 by Finlay +#script to execute issuing of books +# New functions (renew etc.) added 07-08-2005 Tumer Garip tgarip@neu.edu.tr # Copyright 2000-2002 Katipo Communications # @@ -26,101 +27,86 @@ use strict; use CGI; use C4::Circulation::Circ2; use C4::Search; -use C4::Members; use C4::Output; use C4::Print; -use DBI; + use C4::Auth; use C4::Interface::CGI::Output; use C4::Koha; -use HTML::Template; + use C4::Date; -use Date::Manip; -use C4::Biblio; -use C4::Reserves2; -use C4::Circulation::Date; +use C4::Context; +use C4::Members; -# # PARAMETERS READING # -my $query = new CGI; - -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { - template_name => 'circ/circulation.tmpl', - query => $query, - type => "intranet", - authnotrequired => 0, - flagsrequired => { circulate => 1 }, - } -); +my $query=new CGI; + +my ($template, $loggedinuser, $cookie) = get_template_and_user + ({ + template_name => 'circ/circulation.tmpl', + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => { circulate => 1 }, + }); my $branches = GetBranches(); -# my $printers = getprinters(); -# my $printer = getprinter($query, $printers); +my $printers = getprinters(); +#my $branch = getbranch($query, $branches); +my $branch=C4::Context->preference("defaultBranch"); +my $printer = getprinter($query, $printers); my $findborrower = $query->param('findborrower'); $findborrower =~ s|,| |g; $findborrower =~ s|'| |g; my $borrowernumber = $query->param('borrnumber'); -# new op dev the branch and the printer are now defined by the userenv -my $branch = C4::Context->userenv->{'branch'}; -my $printer=C4::Context->userenv->{'branchprinter'}; -my $barcode = $query->param('barcode') || ''; +my $print=$query->param('print'); +my $barcode = $query->param('barcode'); my $year=$query->param('year'); my $month=$query->param('month'); my $day=$query->param('day'); my $stickyduedate=$query->param('stickyduedate'); my $issueconfirmed = $query->param('issueconfirmed'); -my $cancelreserve = $query->param('cancelreserve'); -my $organisation = $query->param('organisations'); -my $print = $query->param('print'); - +my $cancelreserve = $query->param('cancelreserve'); +my %error; +my $errorflag=$query->param('error'); +## The following er +if ( $errorflag gt "1"){ +%error=(TOO_EARLY=>{1},) if ($errorflag eq "2"); +%error=(NO_MORE_RENEWALS=>{1},) if ($errorflag eq "3"); +%error=(RESERVE_FOUND=>{1},) if ($errorflag eq "4"); +}elsif ( $errorflag eq "1"){ +%error=(SUCCESFULL_RENEW=>{1},) +} #set up cookie..... -# my $branchcookie; -# my $printercookie; -# if ($query->param('setcookies')) { -# $branchcookie = $query->cookie(-name=>'branch', -value=>"$branch", -expires=>'+1y'); -# $printercookie = $query->cookie(-name=>'printer', -value=>"$printer", -expires=>'+1y'); -# } +my $branchcookie; +my $printercookie; +#if ($query->param('setcookies')) { +# $branchcookie = $query->cookie(-name=>'branch', -value=>"$branch", -expires=>'+1y'); +# $printercookie = $query->cookie(-name=>'printer', -value=>"$printer", -expires=>'+1y'); +#} my %env; # FIXME env is used as an "environment" variable. Could be dropped probably... -# -my $print; -$env{'branchcode'}= $branch; -$env{'printer'}= $printer; -$env{'organisation'} = $organisation; -# $env{'queue'}=$printer; + +$env{'branchcode'}=$branch; +$env{'printer'}=$printer; +$env{'queue'}=$printer; my @datearr = localtime(time()); # FIXME - Could just use POSIX::strftime("%Y%m%d", localtime); -my $todaysdate = - ( 1900 + $datearr[5] ) - . sprintf( "%0.2d", ( $datearr[4] + 1 ) ) - . sprintf( "%0.2d", ( $datearr[3] ) ); +my $todaysdate = (1900+$datearr[5])."-".sprintf ("%0.2d", ($datearr[4]+1))."-".sprintf ("%0.2d", ($datearr[3])); -# check and see if we should print -if ( $barcode eq '' && $print eq 'maybe' ) { - $print = 'yes'; -} - -my $inprocess = $query->param('inprocess'); -if ($barcode eq ''){ - $inprocess=''; -} -else { -} - -if ($barcode eq '' && $query->param('charges') eq 'yes'){ - $template->param( PAYCHARGES=>'yes', - bornum=>$borrowernumber); - } -if ( $print eq 'yes' && $borrowernumber ne '' ) { - printslip( \%env, $borrowernumber ); - $query->param( 'borrnumber', '' ); - $borrowernumber = ''; -} +# check and see if we should print + if ($barcode eq '' && $print eq 'maybe'){ + $print = 'yes'; + } + if ($print eq 'yes' && $borrowernumber ne ''){ + printslip(\%env,$borrowernumber); + $query->param('borrnumber',''); + $borrowernumber=''; + } # # STEP 2 : FIND BORROWER @@ -129,381 +115,264 @@ if ( $print eq 'yes' && $borrowernumber ne '' ) { my $borrowerslist; my $message; if ($findborrower) { - my ( $count, $borrowers ) = - BornameSearch( \%env, $findborrower, 'cardnumber', 'web' ); - my @borrowers = @$borrowers; - if ( $#borrowers == -1 ) { - $query->param( 'findborrower', '' ); - $message = "'$findborrower'"; - } - elsif ( $#borrowers == 0 ) { - $query->param( 'borrnumber', $borrowers[0]->{'borrowernumber'} ); - $query->param( 'barcode', '' ); - $borrowernumber = $borrowers[0]->{'borrowernumber'}; - } - else { - $borrowerslist = \@borrowers; - } + my ($count,$borrowers)=BornameSearch(\%env,$findborrower,'cardnumber','web'); + my @borrowers=@$borrowers; + if ($#borrowers == -1) { + $query->param('findborrower', ''); + $message = "'$findborrower'"; + } elsif ($#borrowers == 0) { + $query->param('borrnumber', $borrowers[0]->{'borrowernumber'}); + $query->param('barcode',''); + $borrowernumber=$borrowers[0]->{'borrowernumber'}; + } else { + $borrowerslist = \@borrowers; + } } # get the borrower information..... my $borrower; -my $picture; -my @lines; +my $bornum=$query->param('bornum'); +if ($bornum){ +$borrowernumber=$bornum; +} +my $issues; if ($borrowernumber) { - $borrower = getpatroninformation( \%env, $borrowernumber, 0 ); - my ( $od, $issue, $fines ) = borrdata2( \%env, $borrowernumber ); - my $warningdate = - DateCalc( $borrower->{'expiry'}, - "- " . C4::Context->preference('NotifyBorrowerDeparture') . " days" ); - my $warning = Date_Cmp( ParseDate("today"), $warningdate ); - if ( $warning > 0 ) { - - #borrowercard expired - $template->param( warndeparture => $warning ); - } - my ($reserved_num,$reserved_waiting) = CheckWaiting($borrowernumber); - if ($reserved_num > 0) { - for (my $i = 0; $i < $reserved_num; $i++) { - my ($count,$line) = getbiblio($reserved_waiting->[$i]->{'biblionumber'}); - push(@lines, $line); - } - # warn Dumper(@lines); - } - - $template->param( - overduecount => $od, - issuecount => $issue, - finetotal => $fines, - returned_reserve => \@lines, - ); - my $htdocs = C4::Context->config('intrahtdocs'); - $picture = "/borrowerimages/" . $borrowernumber . ".jpg"; - if ( -e $htdocs . "$picture" ) { - $template->param( picture => $picture ); - } + $borrower = getpatroninformation(\%env,$borrowernumber,0); + my ($od,$issue,$fines)=borrdata2(\%env,$borrowernumber); +my $warning; + + $template->param(overduecount => $od, + issuecount => $issue.$warning, + finetotal => $fines); +$issues=$issue; +my $picture; + my $htdocs = C4::Context->config('opacdir'); + +$picture =$htdocs. "/htdocs/uploaded-files/users-photo/".$borrower->{'cardnumber'}.".jpg"; + if (-e $picture) +{ + $template->param(borrowerphoto => "http://library.neu.edu.tr/uploaded-files/users-photo/".$borrower->{'cardnumber'}.".jpg"); + }else{ +$picture = "http://cc.neu.edu.tr/stdpictures/".$borrower->{'cardnumber'}.".jpg"; + $template->param(borrowerphoto => $picture); +} } # # STEP 3 : ISSUING # -# +#Try to issue -if ($barcode) { - $barcode = cuecatbarcodedecode($barcode); - my ( $datedue, $invalidduedate ) = fixdate( $year, $month, $day ); - if ($issueconfirmed) { - issuebook( \%env, $borrower, $barcode, $datedue, $cancelreserve ); - $inprocess=1; - } - else { - my ( $error, $question ) = - canbookbeissued( \%env, $borrower, $barcode, $year, $month, $day, $inprocess ); - my $noerror = 1; - my $noquestion = 1; - foreach my $impossible ( keys %$error ) { - $template->param( - $impossible => $$error{$impossible}, - IMPOSSIBLE => 1 - ); - $noerror = 0; - } - foreach my $needsconfirmation ( keys %$question ) { - $template->param( - $needsconfirmation => $$question{$needsconfirmation}, - NEEDSCONFIRMATION => 1 - ); - $noquestion = 0; - } - $template->param( - day => $day, - month => $month, - year => $year - ); - if ( $noerror && ( $noquestion || $issueconfirmed ) ) { - issuebook( \%env, $borrower, $barcode, $datedue ); - $inprocess=1; - } - } -} -# reload the borrower info for the sake of reseting the flags..... -if ($borrowernumber) { - $borrower = getpatroninformation( \%env, $borrowernumber, 0 ); -} +if ($barcode) { -################################################################################## -# BUILD HTML -# show all reserves of this borrower, and the position of the reservation .... -if ($borrowernumber) { -# new op dev -# now we show the status of the borrower's reservations - my @borrowerreserv = FastFindReserves(0,$borrowernumber); - my @reservloop; - foreach my $num_res (@borrowerreserv) { - my %getreserv; - my %env; - my $getiteminfo = getiteminformation(\%env,$num_res->{'itemnumber'}); - my $itemtypeinfo = getitemtypeinfo($getiteminfo->{'itemtype'}); - my ($transfertwhen,$transfertfrom,$transfertto) = checktransferts($num_res->{'itemnumber'}); - - $getreserv{waiting} = 0; - $getreserv{transfered} = 0; - $getreserv{nottransfered} = 0; - - $getreserv{reservedate} = format_date($num_res->{'reservedate'}); - $getreserv{biblionumber} = $getiteminfo->{'biblionumber'}; - $getreserv{title} = $getiteminfo->{'title'}; - $getreserv{itemtype} = $itemtypeinfo->{'description'}; - $getreserv{author} = $getiteminfo->{'author'}; - $getreserv{barcodereserv} = $getiteminfo->{'barcode'}; - $getreserv{itemcallnumber} = $getiteminfo->{'itemcallnumber'}; -# check if we have a waitin status for reservations - if ($num_res->{'found'} eq 'W'){ - $getreserv{color} = 'reserved'; - $getreserv{waiting} = 1; + $barcode = cuecatbarcodedecode($barcode); + my ($datedue, $invalidduedate) = fixdate($year, $month, $day); + if ($issueconfirmed) { + issuebook(\%env, $borrower, $barcode, $datedue,$cancelreserve); + my ($od,$issue,$fines)=borrdata2(\%env,$borrowernumber); + my $warning; + + $template->param(overduecount => $od, + issuecount => $issue.$warning, + finetotal => $fines); + + } else { + my ($error, $question) = canbookbeissued(\%env, $borrower, $barcode, $year, $month, $day) unless %error; + $error=\%error if %error; + + my $noerror=1; + my $noquestion = 1; + foreach my $impossible (keys %$error) { + $template->param($impossible => $$error{$impossible}, + IMPOSSIBLE => 1) unless ($impossible eq 'SUCCESFULL_RENEW'); + $noerror = 0; } - -# check transfers with the itemnumber foud in th reservation loop - if ($transfertwhen){ - $getreserv{color} = 'transfered'; - $getreserv{transfered} = 1; - $getreserv{datesent} = format_date($transfertwhen); - $getreserv{frombranch} = getbranchname($transfertfrom); + foreach my $needsconfirmation (keys %$question) { + $template->param($needsconfirmation => $$question{$needsconfirmation}, + NEEDSCONFIRMATION => 1); + $noquestion = 0; } - - if (($getiteminfo->{'holdingbranch'} ne $num_res->{'branchcode'}) and not $transfertwhen){ - $getreserv{nottransfered} = 1; - $getreserv{nottransferedby} = getbranchname($getiteminfo->{'holdingbranch'}); + $template->param(day => $day, + month => $month, + year => $year); + if ($noerror && ($noquestion || $issueconfirmed)) { + + issuebook(\%env, $borrower, $barcode, $datedue); + my ($od,$issue,$fines)=borrdata2(\%env,$borrowernumber); + my $warning; + + $template->param(overduecount => $od, + issuecount => $issue.$warning, + finetotal => $fines); } - -# if we don't have a reserv on item, we put the biblio infos and the waiting position - if ($getiteminfo->{'title'} eq '' ){ - my $getbibinfo = bibitemdata($num_res->{'biblionumber'}); - my $getbibtype = getitemtypeinfo($getbibinfo->{'itemtype'}); - $getreserv{color} = 'inwait'; - $getreserv{title} = $getbibinfo->{'title'}; - $getreserv{waitingposition} = $num_res->{'priority'}; - $getreserv{nottransfered} = 0; - $getreserv{itemtype} = $getbibtype->{'description'}; - $getreserv{author} = $getbibinfo->{'author'}; - $getreserv{itemcallnumber} = '----------'; - - } - - push(@reservloop, \%getreserv); } - # return result to the template - $template->param(reservloop => \@reservloop); } + + +################################################################################## +# BUILD HTML + # make the issued books table..... -my $todaysissues = ''; -my $previssues = ''; +my $todaysissues=''; +my $previssues=''; my @realtodayissues; my @realprevissues; +#my @renewissues; my $allowborrow; if ($borrower) { # get each issue of the borrower & separate them in todayissues & previous issues - my @todaysissues; - my @previousissues; - my $issueslist = getissues($borrower); - - # split in 2 arrays for today & previous - my $dbh = C4::Context->dbh; - foreach my $it ( keys %$issueslist ) { - my $issuedate = $issueslist->{$it}->{'timestamp'}; - $issuedate =~ s/-//g; - $issuedate = substr( $issuedate, 0, 8 ); - if ( $todaysdate == $issuedate ) { - ($issueslist->{$it}->{'charge'}, $issueslist->{$it}->{'itemtype_charge'})=calc_charges($dbh,$issueslist->{$it}->{'itemnumber'},$borrower->{'borrowernumber'}); - $issueslist->{$it}->{'charge'} = sprintf("%.2f",$issueslist->{$it}->{'charge'}); - ($issueslist->{$it}->{'can_renew'}, $issueslist->{$it}->{'can_renew_error'}) =renewstatus(\%env,$borrower->{'borrowernumber'}, $issueslist->{$it}->{'itemnumber'}); - my ($restype,$reserves)=CheckReserves($issueslist->{$it}->{'itemnumber'}); - if ($restype){ - $issueslist->{$it}->{'can_renew'}=0; - } - push @todaysissues, $issueslist->{$it}; - } - else { - ($issueslist->{$it}->{'charge'}, $issueslist->{$it}->{'itemtype_charge'})=calc_charges($dbh,$issueslist->{$it}->{'itemnumber'},$borrower->{'borrowernumber'}); - $issueslist->{$it}->{'charge'} = sprintf("%.2f",$issueslist->{$it}->{'charge'}); - ($issueslist->{$it}->{'can_renew'}, $issueslist->{$it}->{'can_renew_error'}) =renewstatus(\%env,$borrower->{'borrowernumber'}, $issueslist->{$it}->{'itemnumber'}); - my ($restype,$reserves)=CheckReserves($issueslist->{$it}->{'itemnumber'}); - if ($restype){ - $issueslist->{$it}->{'can_renew'}=0; + my @todaysissues; + my @previousissues; + my $issueslist = getissues($borrower); + # split in 2 arrays for today & previous + foreach my $it (keys %$issueslist) { + my $issuedate = $issueslist->{$it}->{'issue_date'}; +# $issuedate = substr($issuedate, 0, 10); + + if ($todaysdate eq $issuedate) { + push @todaysissues, $issueslist->{$it}; + } else { + push @previousissues, $issueslist->{$it}; } - push @previousissues, $issueslist->{$it}; - } - } - my $od; # overdues - my $i = 0; - my $togglecolor; - - # parses today & build Template array - foreach my $book ( sort { $b->{'timestamp'} <=> $a->{'timestamp'} } - @todaysissues ) - { - my $dd = $book->{'date_due'}; - my $datedue = $book->{'date_due'}; - $dd = format_date($dd); - $datedue =~ s/-//g; - if ( $datedue < $todaysdate ) { - $od = 1; - } - else { - $od = 0; - } - if ( $i % 2 ) { - $togglecolor = 0; - } - else { - $togglecolor = 1; - } - $book->{'togglecolor'} = $togglecolor; - $book->{'od'} = $od; - $book->{'dd'} = $dd; - if ( $book->{'author'} eq '' ) { - $book->{'author'} = ' '; - } - push @realtodayissues, $book; - $i++; } - # parses previous & build Template array - $i = 0; - foreach my $book ( sort { $a->{'date_due'} cmp $b->{'date_due'} } - @previousissues ) - { - my $dd = $book->{'date_due'}; - my $datedue = $book->{'date_due'}; - $dd = format_date($dd); - my $pcolor = ''; - my $od = ''; - $datedue =~ s/-//g; - if ( $datedue < $todaysdate ) { - $od = 1; - } - else { - $od = 0; - } - if ( $i % 2 ) { - $togglecolor = 0; - } - else { - $togglecolor = 1; - } - $book->{'togglecolor'} = $togglecolor; - $book->{'dd'} = $dd; - $book->{'od'} = $od; - if ( $book->{'author'} eq '' ) { - $book->{'author'} = ' '; - } - push @realprevissues, $book; - $i++; - } -} + + my $od; # overdues + my $i = 0; + my $togglecolor; + # parses today & build Template array + foreach my $book (sort {$b->{'timestamp'} <=> $a->{'timestamp'}} @todaysissues){ + my $dd = $book->{'date_due'}; + my $datedue = $book->{'date_due'}; + + $dd=format_date($dd); +# $datedue=~s/-//g; + if ($datedue lt $todaysdate) { + $od = 1; + } else { + $od=0; + } + $book->{'od'}=$od; + $book->{'dd'}=$dd; + + if ($togglecolor) { + $togglecolor=0; + } else { + $togglecolor=1; + } + $book->{'tcolor'}=$togglecolor; + if ($book->{'author'} eq ''){ + $book->{'author'}=' '; + } + push @realtodayissues,$book; + $i++; + } + + + + # parses previous & build Template array + $i=0; + foreach my $book (sort {$a->{'date_due'} cmp $b->{'date_due'}} @previousissues){ + my $dd = $book->{'date_due'}; + my $datedue = $book->{'date_due'}; + $dd=format_date($dd); + my $pcolor = ''; + my $od = ''; +# $datedue=~s/-//g; + if ($datedue lt $todaysdate) { + + $od = 1; + } else { + $od = 0; + } + + if ($togglecolor) { + $togglecolor=0; + } else { + $togglecolor=1; + } + $book->{'tcolor'}=$togglecolor; + $book->{'dd'}=$dd; + $book->{'od'}=$od; + #$book->{'tcolor'}=$pcolor; + if ($book->{'author'} eq ''){ + $book->{'author'}=' '; + } + + push @realprevissues,$book; + $i++; + } + +}#borrower + my @values; my %labels; my $CGIselectborrower; if ($borrowerslist) { - foreach ( - sort { - $a->{'surname'} - . $a->{'firstname'} cmp $b->{'surname'} - . $b->{'firstname'} - } @$borrowerslist - ) - { - push @values, $_->{'borrowernumber'}; - $labels{ $_->{'borrowernumber'} } = -"$_->{'surname'}, $_->{'firstname'} ... ($_->{'cardnumber'} - $_->{'categorycode'}) ... $_->{'streetaddress'} "; - } - $CGIselectborrower = CGI::scrolling_list( - -name => 'borrnumber', - -values => \@values, - -labels => \%labels, - -size => 7, - -multiple => 0 - ); + foreach (sort {$a->{'surname'}.$a->{'firstname'} cmp $b->{'surname'}.$b->{'firstname'}} @$borrowerslist){ + push @values,$_->{'borrowernumber'}; + $labels{$_->{'borrowernumber'}} ="$_->{'surname'}, $_->{'firstname'} ... ($_->{'cardnumber'} - $_->{'categorycode'}) ... $_->{'streetaddress'} "; + } + $CGIselectborrower=CGI::scrolling_list( -name => 'borrnumber', + -values => \@values, + -labels => \%labels, + -size => 7, + -multiple => 0 ); } - #title -my ( $patrontable, $flaginfotable ) = patrontable($borrower); -my $amountold = $borrower->{flags}->{'CHARGES'}->{'message'} || 0; -my @temp = split( /\$/, $amountold ); - -my $CGIorganisations; -my $member_of_institution; -if ( C4::Context->preference("memberofinstitution") ) { - my $organisations = get_institutions(); - my @orgs; - my %org_labels; - foreach my $organisation ( keys %$organisations ) { - push @orgs, $organisation; - $org_labels{$organisation} = - $organisations->{$organisation}->{'surname'}; - } - $member_of_institution = 1; - $CGIorganisations = CGI::popup_menu( - -id => 'organisations', - -name => 'organisations', - -labels => \%org_labels, - -values => \@orgs, - - ); -} - -$amountold = $temp[1]; -$template->param( - findborrower => $findborrower, - borrower => $borrower, - borrowernumber => $borrowernumber, - branch => $branch, - printer => $printer, - printername => $printer, - firstname => $borrower->{'firstname'}, - surname => $borrower->{'surname'}, - categorycode => $borrower->{'categorycode'}, - streetaddress => $borrower->{'streetaddress'}, - emailaddress => $borrower->{'emailaddress'}, - borrowernotes => $borrower->{'borrowernotes'}, - city => $borrower->{'city'}, - phone => $borrower->{'phone'}, - cardnumber => $borrower->{'cardnumber'}, - amountold => $amountold, - barcode => $barcode, - stickyduedate => $stickyduedate, - message => $message, - CGIselectborrower => $CGIselectborrower, - todayissues => \@realtodayissues, - previssues => \@realprevissues, - inprocess => $inprocess, - memberofinstution => $member_of_institution, - CGIorganisations => $CGIorganisations, -); - +my ($patrontable, $flaginfotable) = patrontable($borrower); +my $amountold=$borrower->{flags}->{'CHARGES'}->{'message'}; +my @temp=split(/\$/,$amountold); +$amountold=$temp[1]; +$template->param( today=>format_date($todaysdate), + findborrower => $findborrower, + borrower => $borrower, + borrowernumber => $borrowernumber, + branch => $branch, + printer => $printer, + branchname => $branches->{$branch}->{'branchname'}, + printername => $printers->{$printer}->{'printername'}, + firstname => $borrower->{'firstname'}, + surname => $borrower->{'surname'}, + categorycode => getborrowercategory($borrower->{'categorycode'}), + streetaddress => $borrower->{'streetaddress'}, + emailaddress => $borrower->{'emailaddress'}, + borrowernotes => $borrower->{'borrowernotes'}, + city => $borrower->{'city'}, + phone => $borrower->{'phone'}, + cardnumber => $borrower->{'cardnumber'}, + amountold => $amountold, + barcode => $barcode, + stickyduedate => $stickyduedate, + message => $message, + CGIselectborrower => $CGIselectborrower, + todayissues => \@realtodayissues, + previssues => \@realprevissues, + + ); # set return date if stickyduedate if ($stickyduedate) { - my $t_year = "year" . $year; - my $t_month = "month" . $month; - my $t_day = "day" . $day; - $template->param( - $t_year => 1, - $t_month => 1, - $t_day => 1, - ); + my $t_year = "year".$year; + my $t_month = "month".$month; + my $t_day = "day".$day; + $template->param( + $t_year => 1, + $t_month => 1, + $t_day => 1, + ); } -# if ($branchcookie) { -# $cookie=[$cookie, $branchcookie, $printercookie]; -# } +if ($branchcookie) { + $cookie=[$cookie, $branchcookie, $printercookie]; +} output_html_with_http_headers $query, $cookie, $template->output; @@ -511,121 +380,105 @@ output_html_with_http_headers $query, $cookie, $template->output; # Extra subroutines,,, sub patrontable { - my ($borrower) = @_; - my $flags = $borrower->{'flags'}; - my $flaginfotable = ''; + my ($borrower) = @_; + my $flags = $borrower->{'flags'}; + my $flaginfotable=''; my $flaginfotext; - #my $flaginfotext=''; my $flag; - my $color = ''; - foreach $flag ( sort keys %$flags ) { - - # my @itemswaiting=''; - $flags->{$flag}->{'message'} =~ s/\n/
/g; - if ( $flags->{$flag}->{'noissues'} ) { - $template->param( - flagged => 1, - noissues => 'true', - ); - if ( $flag eq 'GNA' ) { - $template->param( gna => 'true' ); - } - if ( $flag eq 'LOST' ) { - $template->param( lost => 'true' ); - } - if ( $flag eq 'DBARRED' ) { - $template->param( dbarred => 'true' ); - } - if ( $flag eq 'CHARGES' ) { - $template->param( - charges => 'true', - chargesmsg => $flags->{'CHARGES'}->{'message'} - ); - } - if ($flag eq 'CREDITS') { - $template->param( - credits => 'true', - creditsmsg => $flags->{'CREDITS'}->{'message'} - ); - } - } - else { - if ( $flag eq 'CHARGES' ) { - $template->param( - charges => 'true', - flagged => 1, - chargesmsg => $flags->{'CHARGES'}->{'message'} - ); - } - if ($flag eq 'CREDITS') { + my $color=''; + foreach $flag (sort keys %$flags) { +# my @itemswaiting=''; + $flags->{$flag}->{'message'}=~s/\n/
/g; + if ($flags->{$flag}->{'noissues'}) { $template->param( - credits => 'true', - creditsmsg => $flags->{'CREDITS'}->{'message'} - ); - } - -# FIXME this part can be removed if we keep new display of reserves "reservloop" -# if ( $flag eq 'WAITING' ) { -# my $items = $flags->{$flag}->{'itemlist'}; -# my @itemswaiting; -# foreach my $item (@$items) { -# my ($iteminformation) = -# getiteminformation( \%env, $item->{'itemnumber'}, 0 ); -# $iteminformation->{'branchname'} = -# $branches->{ $iteminformation->{'holdingbranch'} } -# ->{'branchname'}; -# push @itemswaiting, $iteminformation; -# } -# $template->param( -# flagged => 1, -# waiting => 'true', -# waitingmsg => $flags->{'WAITING'}->{'message'}, -# itemswaiting => \@itemswaiting, -# ); -# } - if ( $flag eq 'ODUES' ) { - $template->param( - odues => 'true', - flagged => 1, - oduesmsg => $flags->{'ODUES'}->{'message'} - ); - - my $items = $flags->{$flag}->{'itemlist'}; - { - my @itemswaiting; - foreach my $item (@$items) { - my ($iteminformation) = - getiteminformation( \%env, $item->{'itemnumber'}, 0 ); - push @itemswaiting, $iteminformation; - } - } - if ( $query->param('module') ne 'returns' ) { - $template->param( nonreturns => 'true' ); - } - } - if ( $flag eq 'NOTES' ) { - $template->param( - notes => 'true', - flagged => 1, - notesmsg => $flags->{'NOTES'}->{'message'} - ); - } - } + flagged => 1, + noissues => 'true', + ); + if ($flag eq 'GNA'){ + $template->param( + gna => 'true' + ); + } + if ($flag eq 'LOST'){ + $template->param( + lost => 'true' + ); + } + if ($flag eq 'DBARRED'){ + $template->param( + dbarred => 'true' + ); + } + if ($flag eq 'CHARGES') { + $template->param( + charges => 'true', + chargesmsg => $flags->{'CHARGES'}->{'message'} + ); + } + } else { + if ($flag eq 'CHARGES') { + $template->param( + charges => 'true', + flagged => 1, + chargesmsg => $flags->{'CHARGES'}->{'message'} + ); + } + if ($flag eq 'WAITING') { + my $items=$flags->{$flag}->{'itemlist'}; + my @itemswaiting; + foreach my $item (@$items) { + my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0); + $iteminformation->{'branchname'} = $branches->{$iteminformation->{'holdingbranch'}}->{'branchname'}; + push @itemswaiting, $iteminformation; + } + $template->param( + flagged => 1, + waiting => 'true', + waitingmsg => $flags->{'WAITING'}->{'message'}, + itemswaiting => \@itemswaiting, + ); + } + if ($flag eq 'ODUES') { + $template->param( + odues => 'true', + flagged => 1, + oduesmsg => $flags->{'ODUES'}->{'message'} + ); + + my $items=$flags->{$flag}->{'itemlist'}; + { + my @itemswaiting; + foreach my $item (@$items) { + my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0); + push @itemswaiting, $iteminformation; + } + } + if ($query->param('module') ne 'returns'){ + $template->param( nonreturns => 'true' ); + } + } + if ($flag eq 'NOTES') { + $template->param( + notes => 'true', + flagged => 1, + notesmsg => $flags->{'NOTES'}->{'message'} + ); + } + } } - return ( $patrontable, $flaginfotext ); + return($patrontable, $flaginfotext); } sub cuecatbarcodedecode { my ($barcode) = @_; chomp($barcode); - my @fields = split( /\./, $barcode ); - my @results = map( decode($_), @fields[ 1 .. $#fields ] ); - if ( $#results == 2 ) { - return $results[2]; - } - else { - return $barcode; + my @fields = split(/\./,$barcode); + my @results = map(decode($_), @fields[1..$#fields]); + if ($#results == 2){ + return $results[2]; + } else { + return $barcode; } } diff --git a/circ/renewscript.pl b/circ/renewscript.pl new file mode 100644 index 0000000000..c567a04034 --- /dev/null +++ b/circ/renewscript.pl @@ -0,0 +1,70 @@ +#!/usr/bin/perl + +# $Id$ + +#written 18/1/2000 by chris@katipo.co.nz +#script to renew items from the web + + +# Copyright 2000-2002 Katipo Communications +# +# 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 CGI; +use C4::Circulation::Circ2; +use C4::Date; +use C4::Members; +#get input +my $input= new CGI; + + +my @names=$input->param(); +my $count=@names; +my %data; +my $dbh = C4::Context->dbh; +for (my $i=0;$i<$count;$i++){ + if ($names[$i] =~ /renew/){ + my $temp=$names[$i]; + $temp=~ s/renew_item_//; + $data{$temp}=$input->param($names[$i]); + } +} +my %env; +my $barcode; +my $destination = $input->param("destination"); +my $cardnumber = $input->param("cardnumber"); +my $bornum=$input->param("bornum"); +my $error; +my $status=0; +while ( my ($itemno, $value) = each %data) { + + if ($value eq 'y'){ +my $iteminformation = getiteminformation($env, $itemno,0); +$barcode=$iteminformation->{'barcode'}; + $status=renewstatus(\%env,$bornum,$itemno); + if ($status==1){ + renewbook($env,$bornum,$itemno); + }else{ + last; + } +} +} + +if($destination eq "circ" || $status>1){ + print $input->redirect("/cgi-bin/koha/circ/circulation.pl?bornum=$bornum&error=$status&barcode=$barcode"); +} else { + print $input->redirect("/cgi-bin/koha/members/moremember.pl?bornum=$bornum"); +} \ No newline at end of file diff --git a/circ/rescirculation.pl b/circ/rescirculation.pl new file mode 100644 index 0000000000..418b5f0143 --- /dev/null +++ b/circ/rescirculation.pl @@ -0,0 +1,467 @@ +#!/usr/bin/perl + +# Please use 8-character tabs for this file (indents are every 4 characters) + +#written 8/5/2002 by Finlay +#script to execute issuing of books +# New functions added 07-08-2005 Tumer Garip tgarip@neu.edu.tr + +# Copyright 2000-2002 Katipo Communications +# +# 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::Circulation::Circ3; +#use C4::Search; +use C4::Output; +use C4::Print; +use DBI; +use C4::Auth; +use C4::Interface::CGI::Output; +use C4::Koha; +#use HTML::Template; +use C4::Date; +use C4::Context; +use C4::Members; +# +# PARAMETERS READING +# +my $query=new CGI; + +my ($template, $loggedinuser, $cookie) = get_template_and_user + ({ + template_name => 'circ/rescirculation.tmpl', + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => { circulate => 1 }, + }); +my $branches = getbranches(); +my $printers = getprinters(); +#my $branch = getbranch($query, $branches); +my $branch=C4::Context->preference("defaultBranch"); +my $printer = getprinter($query, $printers); + +my $findborrower = $query->param('findborrower'); +$findborrower =~ s|,| |g; +$findborrower =~ s|'| |g; +my $borrowernumber = $query->param('borrnumber'); + +my $print=$query->param('print'); +my $barcode = $query->param('barcode'); +my $year=$query->param('year'); +my $month=$query->param('month'); +my $day=$query->param('day'); +my $stickyduedate=$query->param('stickyduedate'); +my $issueconfirmed = $query->param('issueconfirmed'); +my $cancelreserve = $query->param('cancelreserve'); + +my $renew=0; + +#set up cookie..... +my $branchcookie; +my $printercookie; +#if ($query->param('setcookies')) { +# $branchcookie = $query->cookie(-name=>'branch', -value=>"$branch", -expires=>'+1y'); +# $printercookie = $query->cookie(-name=>'printer', -value=>"$printer", -expires=>'+1y'); +#} + +my %env; # FIXME env is used as an "environment" variable. Could be dropped probably... + +$env{'branchcode'}=$branch; +$env{'printer'}=$printer; +$env{'queue'}=$printer; + +my @datearr = localtime(time()); +# FIXME - Could just use POSIX::strftime("%Y%m%d", localtime); +my $todaysdate = (1900+$datearr[5])."-".sprintf ("%0.2d", ($datearr[4]+1))."-".sprintf ("%0.2d", ($datearr[3])); + + +# check and see if we should print + if ($barcode eq '' && $print eq 'maybe'){ + $print = 'yes'; + } + if ($print eq 'yes' && $borrowernumber ne ''){ + printslip(\%env,$borrowernumber); + $query->param('borrnumber',''); + $borrowernumber=''; + } + +# +# STEP 2 : FIND BORROWER +# if there is a list of find borrowers.... +# +my $borrowerslist; +my $message; +if ($findborrower) { + my ($count,$borrowers)=BornameSearch(\%env,$findborrower,'cardnumber','web'); + my @borrowers=@$borrowers; + if ($#borrowers == -1) { + $query->param('findborrower', ''); + $message = "'$findborrower'"; + } elsif ($#borrowers == 0) { + $query->param('borrnumber', $borrowers[0]->{'borrowernumber'}); + $query->param('barcode',''); + $borrowernumber=$borrowers[0]->{'borrowernumber'}; + } else { + $borrowerslist = \@borrowers; + } +} + +# get the borrower information..... +my $borrower; +my $bornum=$query->param('bornum'); +if ($bornum){ +$borrowernumber=$bornum; +} + +if ($borrowernumber) { + $borrower = C4::Circulation::Circ2::getpatroninformation(\%env,$borrowernumber,0); + my ($od,$issue,$fines,$resfine)=borrdata3(\%env,$borrowernumber); +if ($resfine >0 || $fines) { +$template->param( + flagged => 1, + noissues => 'true', + ); +} + $template->param(overduecount => $od, + issuecount => $issue, + finetotal => $fines, + resfine => $resfine); +my $picture; + my $htdocs = C4::Context->config('opacdir'); + +$picture =$htdocs. "/htdocs/uploaded-files/users-photo/".$borrower->{'cardnumber'}.".jpg"; + if (-e $picture) +{ + + $template->param(borrowerphoto => "http://library.neu.edu.tr/uploaded-files/users-photo/".$borrower->{'cardnumber'}.".jpg"); + }else{ +$picture = "http://cc.neu.edu.tr/stdpictures/".$borrower->{'cardnumber'}.".jpg"; + $template->param(borrowerphoto => $picture); +} +} +$renew=$query->param('renew'); + +# +# STEP 3 : ISSUING +# +#Try to issue + +if ($barcode) { + + $barcode = cuecatbarcodedecode($barcode); +# my ($datedue, $invalidduedate) = fixdate($year, $month, $day); + if ($issueconfirmed) { + issuebook(\%env, $borrower, $barcode, $cancelreserve); +my ($od,$issue,$fines,$resfine)=borrdata3(\%env,$borrowernumber); + $template->param(overduecount => $od, + issuecount => $issue, + finetotal => $fines, + resfine => $resfine); + } else { + my ($error, $question) = canbookbeissued(\%env, $borrower, $barcode, $year, $month, $day); + my $noerror=1; + my $noquestion = 1; + foreach my $impossible (keys %$error) { + $template->param($impossible => $$error{$impossible}, + IMPOSSIBLE => 1); + $noerror = 0; + } + foreach my $needsconfirmation (keys %$question) { + $template->param($needsconfirmation => $$question{$needsconfirmation}, + NEEDSCONFIRMATION => 1); + $noquestion = 0; + } + $template->param(day => $day, + month => $month, + year => $year); + if ($noerror && ($noquestion || $issueconfirmed)) { + issuebook(\%env, $borrower, $barcode); + my ($od,$issue,$fines,$resfine)=borrdata3(\%env,$borrowernumber); + $template->param(overduecount => $od, + issuecount => $issue, + finetotal => $fines, + resfine => $resfine); + } + } + }#barcode + + + + + +################################################################################## +# BUILD HTML + +# make the issued books table..... +my $todaysissues=''; +my $previssues=''; +my @realtodayissues; +my @realprevissues; +my $allowborrow; +if ($borrower) { +# get each issue of the borrower & separate them in todayissues & previous issues + my @todaysissues; + my @previousissues; + my $issueslist = getissues($borrower); + + # split in 2 arrays for today & previous + foreach my $it (keys %$issueslist) { + my $issuedate = $issueslist->{$it}->{'timestamp'}; + $issuedate = substr($issuedate, 0, 10); +#warn "$todaysdate,$issuedate"; + if ($todaysdate == $issuedate) { + push @todaysissues, $issueslist->{$it}; + } else { + push @previousissues, $issueslist->{$it}; + } + } + + + my $od; # overdues + my $togglecolor; + # parses today & build Template array + foreach my $book (sort {$b->{'timestamp'} <=> $a->{'timestamp'}} @todaysissues){ + my $dd = $book->{'duetime'}; + my $overdue = $book->{'overdue'}; +# $dd=format_date($dd); +# $datedue=~s/-//g; + if ($overdue) { + $od = 1; + } else { + $od=0; + } + $book->{'od'}=$od; + $book->{'dd'}=$dd; + + if ($togglecolor) { + $togglecolor=0; + } else { + $togglecolor=1; + } + $book->{'tcolor'}=$togglecolor; + if ($book->{'author'} eq ''){ + $book->{'author'}=' '; + } + push @realtodayissues,$book; + } + + # parses previous & build Template array + foreach my $book (sort {$a->{'date_due'} cmp $b->{'date_due'}} @previousissues){ + my $dd = $book->{'duedate'}; + my $overdue = $book->{'overdue'}; +# $dd=format_date($dd); + my $pcolor = ''; + my $od = ''; +# $datedue=~s/-//g; + if ($overdue) { + $od = 1; + } else { + $od = 0; + } + + if ($togglecolor) { + $togglecolor=0; + } else { + $togglecolor=1; + } + $book->{'dd'}=$dd; + $book->{'od'}=$od; + $book->{'tcolor'}=$togglecolor; + if ($book->{'author'} eq ''){ + $book->{'author'}=' '; + } + push @realprevissues,$book + } +} + + +my @values; +my %labels; +my $CGIselectborrower; +if ($borrowerslist) { + foreach (sort {$a->{'surname'}.$a->{'firstname'} cmp $b->{'surname'}.$b->{'firstname'}} @$borrowerslist){ + push @values,$_->{'borrowernumber'}; + $labels{$_->{'borrowernumber'}} ="$_->{'surname'}, $_->{'firstname'} ... ($_->{'cardnumber'} - $_->{'categorycode'}) ... $_->{'streetaddress'} "; + } + $CGIselectborrower=CGI::scrolling_list( -name => 'borrnumber', + -values => \@values, + -labels => \%labels, + -size => 7, + -multiple => 0 ); +} +#title + +my ($patrontable, $flaginfotable) = patrontable($borrower); +my $amountold=$borrower->{flags}->{'CHARGES'}->{'message'}; +my @temp=split(/\$/,$amountold); +$amountold=$temp[1]; +$template->param( today=>format_date($todaysdate), + findborrower => $findborrower, + borrower => $borrower, + borrowernumber => $borrowernumber, + branch => $branch, + printer => $printer, + branchname => $branches->{$branch}->{'branchname'}, + printername => $printers->{$printer}->{'printername'}, + firstname => $borrower->{'firstname'}, + surname => $borrower->{'surname'}, + categorycode => getborrowercategory($borrower->{'categorycode'}), + streetaddress => $borrower->{'streetaddress'}, + emailaddress => $borrower->{'emailaddress'}, + borrowernotes => $borrower->{'borrowernotes'}, + city => $borrower->{'city'}, + phone => $borrower->{'phone'}, + cardnumber => $borrower->{'cardnumber'}, + amountold => $amountold, + barcode => $barcode, + renew=>$renew, + stickyduedate => $stickyduedate, + message => $message, + CGIselectborrower => $CGIselectborrower, + todayissues => \@realtodayissues, + previssues => \@realprevissues, + ); +# set return date if stickyduedate +if ($stickyduedate) { + my $t_year = "year".$year; + my $t_month = "month".$month; + my $t_day = "day".$day; + $template->param( + $t_year => 1, + $t_month => 1, + $t_day => 1, + ); +} + + +if ($branchcookie) { + $cookie=[$cookie, $branchcookie, $printercookie]; +} + +output_html_with_http_headers $query, $cookie, $template->output; + +#################################################################### +# Extra subroutines,,, + +sub patrontable { + my ($borrower) = @_; + my $flags = $borrower->{'flags'}; + my $flaginfotable=''; + my $flaginfotext; + #my $flaginfotext=''; + my $flag; + my $color=''; + foreach $flag (sort keys %$flags) { +# my @itemswaiting=''; + $flags->{$flag}->{'message'}=~s/\n/
/g; + if ($flags->{$flag}->{'noissues'}) { + $template->param( + flagged => 1, + noissues => 'true', + ); + if ($flag eq 'GNA'){ + $template->param( + gna => 'true' + ); + } + if ($flag eq 'LOST'){ + $template->param( + lost => 'true' + ); + } + if ($flag eq 'DBARRED'){ + $template->param( + dbarred => 'true' + ); + } + if ($flag eq 'CHARGES') { + $template->param( + charges => 'true', + chargesmsg => $flags->{'CHARGES'}->{'message'} + ); + } + } else { + if ($flag eq 'CHARGES') { + $template->param( + charges => 'true', + flagged => 1, + chargesmsg => $flags->{'CHARGES'}->{'message'} + ); + } + if ($flag eq 'WAITING') { + my $items=$flags->{$flag}->{'itemlist'}; + my @itemswaiting; + foreach my $item (@$items) { + my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0); + $iteminformation->{'branchname'} = $branches->{$iteminformation->{'holdingbranch'}}->{'branchname'}; + push @itemswaiting, $iteminformation; + } + $template->param( + flagged => 1, + waiting => 'true', + waitingmsg => $flags->{'WAITING'}->{'message'}, + itemswaiting => \@itemswaiting, + ); + } + if ($flag eq 'ODUES') { + $template->param( + odues => 'true', + flagged => 1, + oduesmsg => $flags->{'ODUES'}->{'message'} + ); + + my $items=$flags->{$flag}->{'itemlist'}; + { + my @itemswaiting; + foreach my $item (@$items) { + my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0); + push @itemswaiting, $iteminformation; + } + } + if ($query->param('module') ne 'returns'){ + $template->param( nonreturns => 'true' ); + } + } + if ($flag eq 'NOTES') { + $template->param( + notes => 'true', + flagged => 1, + notesmsg => $flags->{'NOTES'}->{'message'} + ); + } + } + } + return($patrontable, $flaginfotext); +} + +sub cuecatbarcodedecode { + my ($barcode) = @_; + chomp($barcode); + my @fields = split(/\./,$barcode); + my @results = map(decode($_), @fields[1..$#fields]); + if ($#results == 2){ + return $results[2]; + } else { + return $barcode; + } +} + +# Local Variables: +# tab-width: 8 +# End: diff --git a/circ/resreturns.pl b/circ/resreturns.pl new file mode 100644 index 0000000000..2259b5358c --- /dev/null +++ b/circ/resreturns.pl @@ -0,0 +1,478 @@ +#!/usr/bin/perl +# WARNING: This file contains mixed-sized tabs! (some 4-character, some 8) +# WARNING: Currently, 4-character tabs seem to be dominant +# WARNING: But there are still lots of 8-character tabs + +#written 11/3/2002 by Finlay +#script to execute returns of books + +# Copyright 2000-2002 Katipo Communications +# +# 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::Circulation::Circ3; +use C4::Search; +use C4::Output; +use C4::Print; +use C4::Reserves2; +use C4::Auth; +use C4::Interface::CGI::Output; +#use HTML::Template; +use C4::Koha; +use C4::Members; +my $query = new CGI; + +#getting the template +my ( $template, $borrowernumber, $cookie ) = get_template_and_user( + { + template_name => "circ/resreturns.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => { circulate => 1 }, + } +); + +##################### +#Global vars +my %env; +my $headerbackgroundcolor = '#99cc33'; +my $linecolor1 = '#ffffcc'; +my $linecolor2 = 'white'; + +my $branches = getbranches(); +my $printers = getprinters( \%env ); + +# my $branch = getbranch( $query, $branches ); +my $printer = getprinter( $query, $printers ); + +# +# Some code to handle the error if there is no branch or printer setting..... +# +my $branch=C4::Context->preference("defaultBranch"); +$env{'branchcode'} = $branch; +$env{'printer'} = $printer; +$env{'queue'} = $printer; + +# Set up the item stack .... +my %returneditems; +my %riduedate; +my %riborrowernumber; +my @inputloop; +foreach ( $query->param ) { + (next) unless (/ri-(\d*)/); + my %input; + my $counter = $1; + (next) if ( $counter > 20 ); + my $barcode = $query->param("ri-$counter"); + my $duedate = $query->param("dd-$counter"); + my $borrowernumber = $query->param("bn-$counter"); + $counter++; + + # decode cuecat + $barcode = cuecatbarcodedecode($barcode); + + ###################### + #Are these lines still useful ? + $returneditems{$counter} = $barcode; + $riduedate{$counter} = $duedate; + $riborrowernumber{$counter} = $borrowernumber; + + ####################### + $input{counter} = $counter; + $input{barcode} = $barcode; + $input{duedate} = $duedate; + $input{bornum} = $borrowernumber; + push ( @inputloop, \%input ); +} + +############ +# Deal with the requests.... +if ( $query->param('resbarcode') ) { + my $item = $query->param('itemnumber'); + my $borrnum = $query->param('borrowernumber'); + my $resbarcode = $query->param('resbarcode'); + + # set to waiting.... + my $iteminfo = getiteminformation( \%env, $item ); + my $tobranchcd = ReserveWaiting( $item, $borrnum ); + my $branchname = $branches->{$tobranchcd}->{'branchname'}; + my ($borr) = getpatroninformation( \%env, $borrnum, 0 ); + my $borcnum = $borr->{'cardnumber'}; + my $name = + $borr->{'surname'} . " " . $borr->{'title'} . " " . $borr->{'firstname'}; + my $slip = $query->param('resslip'); + printslip( \%env, $slip ); #removed by paul + + if ( $tobranchcd ne $branch ) { + $template->param( + itemtitle => $iteminfo->{'title'}, + iteminfo => $iteminfo->{'author'}, + branchname => $branchname, + name => $name, + bornum => $borrnum, + borcnum => $borcnum, + diffbranch => 1 + ); + } +} + +my $iteminformation; +my $borrower; +my $returned = 0; +my $messages; + +my $barcode = $query->param('barcode'); + +# actually return book and prepare item table..... +if ($barcode) { + + # decode cuecat + $barcode = cuecatbarcodedecode($barcode); + ( $returned, $messages, $iteminformation, $borrower ) = + returnbook( $barcode, $branch ); + if ($returned) { + $returneditems{0} = $barcode; + $riborrowernumber{0} = $borrower->{'borrowernumber'}; + $riduedate{0} = $iteminformation->{'date_due'}; + my %input; + $input{counter} = 0; + $input{first} = 1; + $input{barcode} = $barcode; + $input{duedate} = $riduedate{0}; + $input{bornum} = $riborrowernumber{0}; + push ( @inputloop, \%input ); + } + elsif ( !$messages->{'BadBarcode'} ) { + if ( $messages->{'NotIssued'} ) { + my $dbh = C4::Context->dbh; + my $sth=$dbh->prepare("select date_due from issues where itemnumber=? and isnull(returndate)"); + $sth->execute($iteminformation->{'itemnumber'}); + my ($date_due) = $sth->fetchrow; + + $sth->finish; + if ($date_due){ + print $query->redirect("/cgi-bin/koha/circ/returns.pl?barcode=$barcode"); + } + } + my %input; + $input{counter} = 0; + $input{first} = 1; + $input{barcode} = $barcode; + $input{duedate} = 0; + + $returneditems{0} = $barcode; + $riduedate{0} = 0; + if ( $messages->{'wthdrawn'} ) { + $input{withdrawn} = 1; + $input{bornum} = "Item Cancelled"; + $riborrowernumber{0} = 'Item Cancelled'; + } + else { + $input{bornum} = " "; + $riborrowernumber{0} = ' '; + } + push ( @inputloop, \%input ); + } + $template->param( + returned => $returned, + itemtitle => $iteminformation->{'title'}, + + # itembc => $iteminformation->{'barcode'}, + # itemdatedue => $iteminformation->{'date_due'}, + itemauthor => $iteminformation->{'author'} + ); +} +$template->param( inputloop => \@inputloop ); + +my $found = 0; +my $waiting = 0; +my $reserved = 0; + +if ( $messages->{'ResFound'} ) { + my $res = $messages->{'ResFound'}; + my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'}; + my ($borr) = getpatroninformation( \%env, $res->{'borrowernumber'}, 0 ); + my $name = + $borr->{'surname'} . " " . $borr->{'title'} . " " . $borr->{'firstname'}; + my ($iteminfo) = getiteminformation( \%env, 0, $barcode ); + + if ( $res->{'ResFound'} eq "Waiting" ) { + $template->param( + found => 1, + name => $name, + borfirstname => $borr->{'firstname'}, + borsurname => $borr->{'surname'}, + bortitle => $borr->{'title'}, + borphone => $borr->{'phone'}, + borstraddress => $borr->{'streetaddress'}, + borcity => $borr->{'city'}, + borzip => $borr->{'zipcode'}, + bornum => $res->{'borrowernumber'}, + borcnum => $borr->{'cardnumber'}, + branchname => $branches->{ $res->{'branchcode'} }->{'branchname'}, + waiting => 1, + itemnumber => $res->{'itemnumber'}, + itemtitle => $iteminfo->{'title'}, + itemauthor => $iteminfo->{'author'}, + itembarcode => $iteminfo->{'barcode'}, + itemtype => $iteminfo->{'itemtype'}, + itembiblionumber => $iteminfo->{'biblionumber'} + ); + + } + if ( $res->{'ResFound'} eq "Reserved" ) { + my @da = localtime( time() ); + my $todaysdate = + sprintf( "%0.2d", ( $da[3] + 1 ) ) . "/" + . sprintf( "%0.2d", ( $da[4] + 1 ) ) . "/" + . ( $da[5] + 1900 ); + $template->param( + found => 1, + branchname => $branches->{ $res->{'branchcode'} }->{'branchname'}, + reserved => 1, + today => $todaysdate, + itemnumber => $res->{'itemnumber'}, + itemtitle => $iteminfo->{'title'}, + itemauthor => $iteminfo->{'author'}, + itembarcode => $iteminfo->{'barcode'}, + itemtype => $iteminfo->{'itemtype'}, + itembiblionumber => $iteminfo->{'biblionumber'}, + borsurname => $borr->{'surname'}, + bortitle => $borr->{'title'}, + borfirstname => $borr->{'firstname'}, + bornum => $res->{'borrowernumber'}, + borcnum => $borr->{'cardnumber'}, + borphone => $borr->{'phone'}, + borstraddress => $borr->{'streetaddress'}, + borsub => $borr->{'suburb'}, + borcity => $borr->{'city'}, + borzip => $borr->{'zipcode'}, + boremail => $borr->{'emailadress'}, + barcode => $barcode + ); + } +} + +# Error Messages +my @errmsgloop; +foreach my $code ( keys %$messages ) { + + # warn $code; + my %err; + my $exit_required_p = 0; + if ( $code eq 'BadBarcode' ) { + $err{badbarcode} = 1; + $err{msg} = $messages->{'BadBarcode'}; + } + elsif ( $code eq 'NotIssued' ) { + $err{notissued} = 1; + $err{msg} = $branches->{ $messages->{'IsPermanent'} }->{'branchname'}; + } + elsif ( $code eq 'WasLost' ) { + $err{waslost} = 1; + } + elsif ( $code eq 'ResFound' ) { + ; # FIXME... anything to do here? + } + elsif ( $code eq 'WasReturned' ) { + ; # FIXME... anything to do here? + } + elsif ( $code eq 'WasTransfered' ) { + ; # FIXME... anything to do here? + } + elsif ( $code eq 'wthdrawn' ) { + $err{withdrawn} = 1; + $exit_required_p = 1; + } + elsif ( ( $code eq 'IsPermanent' ) && ( not $messages->{'ResFound'} ) ) { + if ( $messages->{'IsPermanent'} ne $branch ) { + $err{ispermanent} = 1; + $err{msg} = + $branches->{ $messages->{'IsPermanent'} }->{'branchname'}; + } + } + else { + die "Unknown error code $code"; # XXX + } + if (%err) { + push ( @errmsgloop, \%err ); + } + last if $exit_required_p; +} +$template->param( errmsgloop => \@errmsgloop ); + +# patrontable .... +if ($borrower) { + my $flags = $borrower->{'flags'}; + my $color = ''; + my @flagloop; + my $flagset; + foreach my $flag ( sort keys %$flags ) { + my %flaginfo; + ( $color eq $linecolor1 ) + ? ( $color = $linecolor2 ) + : ( $color = $linecolor1 ); + unless ($flagset) { $flagset = 1; } + $flaginfo{color} = $color; + $flaginfo{redfont} = ( $flags->{$flag}->{'noissues'} ); + $flaginfo{flag} = $flag; + if ( $flag eq 'CHARGES' ) { + $flaginfo{msg} = $flag; + $flaginfo{charges} = 1; + $flaginfo{bornum} = $borrower->{borrowernumber}; + } + elsif ( $flag eq 'WAITING' ) { + $flaginfo{msg} = $flag; + $flaginfo{waiting} = 1; + my @waitingitemloop; + my $items = $flags->{$flag}->{'itemlist'}; + foreach my $item (@$items) { + my ($iteminformation) = + getiteminformation( \%env, $item->{'itemnumber'}, 0 ); + my %waitingitem; + $waitingitem{biblionum} = $iteminformation->{'biblionumber'}; + $waitingitem{barcode} = $iteminformation->{'barcode'}; + $waitingitem{title} = $iteminformation->{'title'}; + $waitingitem{brname} = + $branches->{ $iteminformation->{'holdingbranch'} }->{ + 'branchname'}; + push ( @waitingitemloop, \%waitingitem ); + } + $flaginfo{itemloop} = \@waitingitemloop; + } + elsif ( $flag eq 'ODUES' ) { + my $items = $flags->{$flag}->{'itemlist'}; + my @itemloop; + foreach my $item ( sort { $a->{'date_due'} cmp $b->{'date_due'} } + @$items ) + { + my ($iteminformation) = + getiteminformation( \%env, $item->{'itemnumber'}, 0 ); + my %overdueitem; + $overdueitem{duedate} = $item->{'date_due'}; + $overdueitem{biblionum} = $iteminformation->{'biblionumber'}; + $overdueitem{barcode} = $iteminformation->{'barcode'}; + $overdueitem{title} = $iteminformation->{'title'}; + $overdueitem{brname} = + $branches->{ $iteminformation->{'holdingbranch'} }->{ + 'branchname'}; + push ( @itemloop, \%overdueitem ); + } + $flaginfo{itemloop} = \@itemloop; + $flaginfo{overdue} = 1; + } + else { + $flaginfo{other} = 1; + $flaginfo{msg} = $flags->{$flag}->{'message'}; + } + push ( @flagloop, \%flaginfo ); + } + $template->param( + flagset => $flagset, + flagloop => \@flagloop, + ribornum => $borrower->{'borrowernumber'}, + riborcnum => $borrower->{'cardnumber'}, + riborsurname => $borrower->{'surname'}, + ribortitle => $borrower->{'title'}, + riborfirstname => $borrower->{'firstname'} + ); +} + +my $color = ''; + +#set up so only the last 8 returned items display (make for faster loading pages) +my $count = 0; +my @riloop; +foreach ( sort { $a <=> $b } keys %returneditems ) { + my %ri; + if ( $count < 8 ) { + ( $color eq $linecolor1 ) + ? ( $color = $linecolor2 ) + : ( $color = $linecolor1 ); + $ri{color} = $color; + my $barcode = $returneditems{$_}; + my $duedate = $riduedate{$_}; + my $overduetext; + my $borrowerinfo; + if ($duedate) { + my @tempdate = split ( /-/, $duedate ); + $ri{year}=$tempdate[0]; + $ri{month}=$tempdate[1]; + $ri{day}=$tempdate[2]; + my $duedatenz = "$tempdate[2]/$tempdate[1]/$tempdate[0]"; + my @datearr = localtime( time() ); + my $todaysdate = + $datearr[5] . '-' + . sprintf( "%0.2d", ( $datearr[4] + 1 ) ) . '-' + . sprintf( "%0.2d", $datearr[3] ); + $ri{duedate}=$duedate; + my ($borrower) = getpatroninformation( \%env, $riborrowernumber{$_}, 0 ); + $ri{bornum} = $borrower->{'borrowernumber'}; + $ri{borcnum} = $borrower->{'cardnumber'}; + $ri{borfirstname} = $borrower->{'firstname'}; + $ri{borsurname} = $borrower->{'surname'}; + $ri{bortitle} = $borrower->{'title'}; + } + else { + $ri{bornum} = $riborrowernumber{$_}; + } +# my %ri; + my ($iteminformation) =C4::Circulation::Circ2::getiteminformation( \%env, 0, $barcode ); + $ri{color} = $color; + $ri{itembiblionumber} = $iteminformation->{'biblionumber'}; + $ri{itemtitle} = $iteminformation->{'title'}; + $ri{itemauthor} = $iteminformation->{'author'}; + $ri{itemtype} = $iteminformation->{'itemtype'}; + $ri{barcode} = $barcode; + } + else { + last; + } + $count++; + push ( @riloop, \%ri ); +} +$template->param( riloop => \@riloop ); + +$template->param( + genbrname => $branches->{$branch}->{'branchname'}, + genprname => $printers->{$printer}->{'printername'}, + branch => $branch, + printer => $printer, + errmsgloop => \@errmsgloop +); + +# actually print the page! +output_html_with_http_headers $query, $cookie, $template->output; + +sub cuecatbarcodedecode { + my ($barcode) = @_; + chomp($barcode); + my @fields = split ( /\./, $barcode ); + my @results = map( decode($_), @fields[ 1 .. $#fields ] ); + if ( $#results == 2 ) { + return $results[2]; + } + else { + return $barcode; + } +} + +# Local Variables: +# tab-width: 4 +# End: diff --git a/circ/returns.pl b/circ/returns.pl index f8dbc7475a..708eebed68 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -26,17 +26,14 @@ use strict; use CGI; use C4::Circulation::Circ2; -use C4::Date; use C4::Search; use C4::Output; use C4::Print; use C4::Reserves2; use C4::Auth; use C4::Interface::CGI::Output; -use HTML::Template; use C4::Koha; -use C4::Context; - +use C4::Members; my $query = new CGI; #getting the template @@ -57,16 +54,16 @@ my $headerbackgroundcolor = '#99cc33'; my $linecolor1 = '#ffffcc'; my $linecolor2 = 'white'; -my $branches = GetBranches('IS'); +my $branches = GetBranches(); my $printers = getprinters( \%env ); -my $branch = C4::Context->userenv->{'branch'}; -my $printer = C4::Context->userenv->{'branchprinter'}; +# my $branch = getbranch( $query, $branches ); +my $printer = getprinter( $query, $printers ); # # Some code to handle the error if there is no branch or printer setting..... # - +my $branch=C4::Context->preference("defaultBranch"); $env{'branchcode'} = $branch; $env{'printer'} = $printer; $env{'queue'} = $printer; @@ -104,45 +101,34 @@ foreach ( $query->param ) { } ############ +my $item; # Deal with the requests.... if ( $query->param('resbarcode') ) { - my $item = $query->param('itemnumber'); + $item = $query->param('itemnumber'); my $borrnum = $query->param('borrowernumber'); my $resbarcode = $query->param('resbarcode'); # set to waiting.... my $iteminfo = getiteminformation( \%env, $item ); my $tobranchcd = ReserveWaiting( $item, $borrnum ); -# if($iteminfo->{'holdingbranch'} ne $branch){ -# UpdateHoldingbranch($branch,$item); -# } -# check if we have other reservs for this document, if we have a return send the message of transfer - my ($messages,$nextreservinfo) = OtherReserves($item); - # my $branchname = $branches->{$tobranchcd}->{'branchname'}; - not sure if this line + $tobranchcd line do the same thing - # as the $messages{'transfert'} code - my $branchname = getbranchname($messages->{'transfert'}); - my ($borr) = getpatroninformation( \%env, $nextreservinfo, 0 ); + my $branchname = $branches->{$tobranchcd}->{'branchname'}; + my ($borr) = getpatroninformation( \%env, $borrnum, 0 ); my $borcnum = $borr->{'cardnumber'}; my $name = - $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'}; + $borr->{'surname'} . " " . $borr->{'title'} . " " . $borr->{'firstname'}; my $slip = $query->param('resslip'); - printreserve( \%env, $branchname, $borr, $iteminfo ); -# if ( $tobranchcd ne $branch ) { - not sure if line below is doing the same - if ( $messages->{'transfert'} ) { -# add the transfer routine -# C4::Circulation::Circ2::dotransfer($item,$iteminfo->{'holdingbranch'},$tobranchcd); + printslip( \%env, $slip ); #removed by paul + + if ( $tobranchcd ne $branch ) { $template->param( itemtitle => $iteminfo->{'title'}, iteminfo => $iteminfo->{'author'}, - tobranchname => $branchname, + branchname => $branchname, name => $name, bornum => $borrnum, borcnum => $borcnum, - borfirstname => $borr->{'firstname'}, - borsurname => $borr->{'surname'}, diffbranch => 1 ); - set_transit($item); } } @@ -154,6 +140,7 @@ my $barcode = $query->param('barcode'); # actually return book and prepare item table..... if ($barcode) { + # decode cuecat $barcode = cuecatbarcodedecode($barcode); ( $returned, $messages, $iteminformation, $borrower ) = @@ -169,13 +156,20 @@ if ($barcode) { $input{duedate} = $riduedate{0}; $input{bornum} = $riborrowernumber{0}; push ( @inputloop, \%input ); - # check if the branch is the same as homebranch - # if not, we want to put a message - if ($iteminformation->{'homebranch'} ne $branch){ - $template->param( homebranch =>$iteminformation->{'homebranch'}); - } } elsif ( !$messages->{'BadBarcode'} ) { + if ( $messages->{'NotIssued'} ) { + my $dbh = C4::Context->dbh; + my $sth=$dbh->prepare("select duetime from reserveissue where itemnumber=? and isnull(rettime)"); + $sth->execute($iteminformation->{'itemnumber'}); + my ($date_due) = $sth->fetchrow; + + $sth->finish; + if ($date_due){ +# $messages->{'ReserveIssued'} =$barcode; + print $query->redirect("/cgi-bin/koha/circ/resreturns.pl?barcode=$barcode"); + } + } my %input; $input{counter} = 0; $input{first} = 1; @@ -210,32 +204,6 @@ my $found = 0; my $waiting = 0; my $reserved = 0; -# new op dev : we check if the document must be returned to his homebranch directly, -# if the document is transfered, we have warning message . - -if ( $messages->{'WasTransfered'} ) { -# my $res = $messages->{'ResFound'}; -# my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'}; -# my ($borr) = getpatroninformation( \%env, $res->{'borrowernumber'}, 0 ); -# my $name = -# $borr->{'surname'} . " " . $borr->{'title'} . " " . $borr->{'firstname'}; - my ($iteminfo) = getiteminformation( \%env, 0, $barcode ); - -# if ( $res->{'ResFound'} eq "Waiting" ) { -# if($branch eq $res->{'branchcode'}){ -# $template->param(intransit => 0); -# } else { -# $template->param(intransit => 1); -# } - - $template->param( - found => 1, - transfer => 1, - itemhomebranch => $branches->{$iteminfo->{'homebranch'} }->{'branchname'} - ); - - } - if ( $messages->{'ResFound'} ) { my $res = $messages->{'ResFound'}; my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'}; @@ -245,12 +213,6 @@ if ( $messages->{'ResFound'} ) { my ($iteminfo) = getiteminformation( \%env, 0, $barcode ); if ( $res->{'ResFound'} eq "Waiting" ) { - if($branch eq $res->{'branchcode'}){ - $template->param(intransit => 0); - } else { - $template->param(intransit => 1); - } - $template->param( found => 1, name => $name, @@ -258,16 +220,12 @@ if ( $messages->{'ResFound'} ) { borsurname => $borr->{'surname'}, bortitle => $borr->{'title'}, borphone => $borr->{'phone'}, - boremail => $borr->{'emailaddress'}, borstraddress => $borr->{'streetaddress'}, borcity => $borr->{'city'}, borzip => $borr->{'zipcode'}, bornum => $res->{'borrowernumber'}, borcnum => $borr->{'cardnumber'}, - debarred => $borr->{'debarred'}, - gonenoaddress => $borr->{'gonenoaddress'}, - currentbranch => $branches->{ $branch }->{'branchname'}, - tobranchname => $branches->{ $res->{'branchcode'} }->{'branchname'}, + branchname => $branches->{ $res->{'branchcode'} }->{'branchname'}, waiting => 1, itemnumber => $res->{'itemnumber'}, itemtitle => $iteminfo->{'title'}, @@ -284,17 +242,8 @@ if ( $messages->{'ResFound'} ) { sprintf( "%0.2d", ( $da[3] + 1 ) ) . "/" . sprintf( "%0.2d", ( $da[4] + 1 ) ) . "/" . ( $da[5] + 1900 ); - - if($branch eq $res->{'branchcode'}){ - $template->param(intransit => 0); - } else { - $template->param(intransit => 1); - } - $template->param( found => 1, - currentbranch => $branches->{ $branch }->{'branchname'}, - name => $name, branchname => $branches->{ $res->{'branchcode'} }->{'branchname'}, reserved => 1, today => $todaysdate, @@ -314,9 +263,7 @@ if ( $messages->{'ResFound'} ) { borsub => $borr->{'suburb'}, borcity => $borr->{'city'}, borzip => $borr->{'zipcode'}, - boremail => $borr->{'emailaddress'}, - debarred => $borr->{'debarred'}, - gonenoaddress => $borr->{'gonenoaddress'}, + boremail => $borr->{'emailadress'}, barcode => $barcode ); } @@ -348,6 +295,9 @@ foreach my $code ( keys %$messages ) { } elsif ( $code eq 'WasTransfered' ) { ; # FIXME... anything to do here? + } + elsif ( $code eq 'ReserveIssued' ) { + $err{reserveissued} = 1; } elsif ( $code eq 'wthdrawn' ) { $err{withdrawn} = 1; @@ -418,7 +368,7 @@ if ($borrower) { my ($iteminformation) = getiteminformation( \%env, $item->{'itemnumber'}, 0 ); my %overdueitem; - $overdueitem{duedate} = format_date($item->{'date_due'}); + $overdueitem{duedate} = $item->{'date_due'}; $overdueitem{biblionum} = $iteminformation->{'biblionumber'}; $overdueitem{barcode} = $iteminformation->{'barcode'}; $overdueitem{title} = $iteminformation->{'title'}; @@ -474,7 +424,7 @@ foreach ( sort { $a <=> $b } keys %returneditems ) { $datearr[5] . '-' . sprintf( "%0.2d", ( $datearr[4] + 1 ) ) . '-' . sprintf( "%0.2d", $datearr[3] ); - $ri{duedate}=format_date($duedate); + $ri{duedate}=$duedate; my ($borrower) = getpatroninformation( \%env, $riborrowernumber{$_}, 0 ); $ri{bornum} = $borrower->{'borrowernumber'}; @@ -506,12 +456,9 @@ $template->param( riloop => \@riloop ); $template->param( genbrname => $branches->{$branch}->{'branchname'}, genprname => $printers->{$printer}->{'printername'}, - branchname => $branches->{$branch}->{'branchname'}, + branch => $branch, printer => $printer, - errmsgloop => \@errmsgloop, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), + errmsgloop => \@errmsgloop ); # actually print the page! @@ -530,26 +477,6 @@ sub cuecatbarcodedecode { } } - -sub set_transit { - my ($itemnumber) = @_; - my $dbh=C4::Context->dbh(); - my $query = "UPDATE items SET holdingbranch='TRA' WHERE itemnumber = ?"; - my $sth=$dbh->prepare($query); - $sth->execute($itemnumber); - $sth->finish(); - } - -sub set_transit { - my ($itemnumber) = @_; - my $dbh=C4::Context->dbh(); - my $query = "UPDATE items SET holdingbranch='TRA' WHERE itemnumber = ?"; - my $sth=$dbh->prepare($query); - $sth->execute($itemnumber); - $sth->finish(); -} - - # Local Variables: # tab-width: 4 # End: diff --git a/import/breeding.pl b/import/breeding.pl index 4ab2a2452f..97c2d6b9b0 100755 --- a/import/breeding.pl +++ b/import/breeding.pl @@ -10,221 +10,6 @@ # Licensed under the GPL -# Copyright 2000-2002 Katipo Communications -# -# 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; - -# standard or CPAN modules used -use CGI qw(:standard); -use DBI; - -# Koha modules used -use C4::Context; -use C4::Output; -use C4::Interface::CGI::Output; -use C4::Input; -use C4::Biblio; -use MARC::File::USMARC; -use HTML::Template; -use C4::Output; -use C4::Auth; -use C4::Breeding; - -#------------------ -# Constants - -my $includes = C4::Context->config('includes') || - "/usr/local/www/hdl/htdocs/includes"; - -# HTML colors for alternating lines -my $lc1='#dddddd'; -my $lc2='#ddaaaa'; - -#------------- -#------------- -# Initialize - -my $userid=$ENV{'REMOTE_USER'}; - -my $input = new CGI; -my $dbh = C4::Context->dbh; - -my $uploadmarc=$input->param('uploadmarc'); -my $overwrite_biblio = $input->param('overwrite_biblio'); -my $filename = $input->param('filename'); -my $syntax = $input->param('syntax'); -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "import/breeding.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {parameters => 1, management => 1, tools => 1}, - debug => 1, - }); - -$template->param(SCRIPT_NAME => $ENV{'SCRIPT_NAME'}, - uploadmarc => $uploadmarc); -if ($uploadmarc && length($uploadmarc)>0) { - my $marcrecord=''; - while (<$uploadmarc>) { - $marcrecord.=$_; - } - my ($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported) = ImportBreeding($marcrecord,$overwrite_biblio,$filename,$syntax,int(rand(99999))); - - $template->param(imported => $imported, - alreadyindb => $alreadyindb, - alreadyinfarm => $alreadyinfarm, - notmarcrecord => $notmarcrecord, - total => $imported+$alreadyindb+$alreadyinfarm+$notmarcrecord, - ); - -} -$template-param(intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); -output_html_with_http_headers $input, $cookie, $template->output; -my $menu; -my $file; - - -#--------------- -# log cleared, as marcimport is (almost) rewritten from scratch. -# $Log$ -# Revision 1.5 2006/07/04 14:36:52 toins -# Head & rel_2_2 merged -# -# Revision 1.4 2005/05/04 08:52:13 tipaul -# synch'ing 2.2 and head -# -# Revision 1.3 2005/03/23 09:57:47 doxulting -# Adding a parameter to allow acces to people with management/tools flags -# -# Revision 1.2 2003/10/06 09:10:38 slef -# Removing config info from z3950*sh and using C4::Context in processz3950queue (Fixed bug 39) -# -# Revision 1.1 2003/06/04 13:46:25 tipaul -# moving breeding farm import to parameters page (GUI) and to new import/ directory (code structure) -# -# Revision 1.33 2003/04/29 16:48:36 tipaul -# really proud of this commit :-) -# z3950 search and import seems to works fine. -# Let me explain how : -# * a "search z3950" button is added in the addbiblio template. -# * when clicked, a popup appears and z3950/search.pl is called -# * z3950/search.pl calls addz3950search in the DB -# * the z3950 daemon retrieve the records and stores them in z3950results AND in marc_breeding table. -# * as long as there as searches pending, the popup auto refresh every 2 seconds, and says how many searches are pending. -# * when the user clicks on a z3950 result => the parent popup is called with the requested biblio, and auto-filled -# -# Note : -# * character encoding support : (It's a nightmare...) In the z3950servers table, a "encoding" column has been added. You can put "UNIMARC" or "USMARC" in this column. Depending on this, the char_decode in C4::Biblio.pm replaces marc-char-encode by an iso 8859-1 encoding. Note that in the breeding import this value has been added too, for a better support. -# * the marc_breeding and z3950* tables have been modified : they have an encoding column and the random z3950 number is stored too for convenience => it's the key I use to list only requested biblios in the popup. -# -# Revision 1.32 2003/04/22 12:22:54 tipaul -# 1st draft for z3950 client import. -# moving Breeding farm script to a perl package C4/Breeding.pm -# -# Revision 1.31 2003/02/19 01:01:07 wolfpac444 -# Removed the unecessary $dbh argument from being passed. -# Resolved a few minor FIXMEs. -# -# Revision 1.30 2003/02/02 07:18:38 acli -# Moved C4/Charset.pm to C4/Interface/CGI/Output.pm -# -# Create output_html_with_http_headers function to contain the "print $query -# ->header(-type => guesstype...),..." call. This is in preparation for -# non-HTML output (e.g., text/xml) and charset conversion before output in -# the future. -# -# Created C4/Interface/CGI/Template.pm to hold convenience functions specific -# to the CGI interface using HTML::Template -# -# Modified moremembers.pl to make the "sex" field localizable for languages -# where M and F doesn't make sense -# -# Revision 1.29 2003/01/28 15:28:31 tipaul -# removing use MARC::Charset -# Was a buggy test -# -# Revision 1.28 2003/01/28 15:00:31 tipaul -# user can now search in breeding farm with isbn/issn or title. Title/name are stored in breeding farm and showed when a search is done -# -# Revision 1.27 2003/01/26 23:21:49 acli -# Handle non-latin1 charsets -# -# Revision 1.26 2003/01/23 12:26:41 tipaul -# upgrading import in breeding farm (you can now search on ISBN or on title) AND character encoding. -# -# Revision 1.25 2003/01/21 08:13:50 tipaul -# character encoding ISO646 => 8859-1, first draft -# -# Revision 1.24 2003/01/14 16:41:17 tipaul -# bugfix : use gettemplate_and_user instead of gettemplate. -# fix a blank screen in 1.3.3 in "import in breeding farm" -# -# Revision 1.23 2003/01/06 13:06:28 tipaul -# removing trailing # -# -# Revision 1.22 2002/11/12 15:58:43 tipaul -# road to 1.3.2 : -# * many bugfixes -# * adding value_builder : you can map a subfield in the marc_subfield_structure to a sub stored in "value_builder" directory. In this directory you can create screen used to build values with any method. In this commit is a 1st draft of the builder for 100$a unimarc french subfield, which is composed of 35 digits, with 12 differents values (only the 4th first are provided for instance) -# -# Revision 1.21 2002/10/22 15:50:23 tipaul -# road to 1.3.2 : adding a biblio in MARC format. -# seems to work a few. -# still to do : -# * manage html checks (mandatory subfields...) -# * add list of acceptable values (authorities) -# * manage ## in MARC format -# * manage correctly repeatable fields -# and probably a LOT of bugfixes -# -# Revision 1.20 2002/10/16 12:46:19 arensb -# Added a FIXME comment. -# -# Revision 1.19 2002/10/15 10:14:44 tipaul -# road to 1.3.2. Full rewrite of marcimport.pl. -# The acquisition system in MARC version will work like this : -# * marcimport will put marc records into a "breeding farm" table. -# * when the user want to add a biblio, he enters first the ISBN/ISSN of the biblio. koha searches into breeding farm and if the record exists, it is shown to the user to help him adding the biblio. When the biblio is added, it's deleted from the breeding farm. -# -# This commit : -# * modify acqui.simple home page (addbooks.pl) -# * adds import into breeding farm -# -# Please note that : -# * z3950 functionnality is dropped from "marcimport" will be added somewhere else. -# * templates are in a new acqui.simple sub directory, and the marcimport template directory will become obsolete soon.I think this is more logic -# -#!/usr/bin/perl - -# $Id$ - -# Script for handling import of MARC data into Koha db -# and Z39.50 lookups - -# Koha library project www.koha.org - -# Licensed under the GPL - - # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. @@ -246,16 +31,12 @@ use strict; # standard or CPAN modules used use CGI; -use DBI; # Koha modules used use C4::Context; -use C4::Output; use C4::Interface::CGI::Output; use C4::Input; use C4::Biblio; -use MARC::File::USMARC; -use HTML::Template; use C4::Output; use C4::Auth; use C4::Breeding; @@ -263,8 +44,7 @@ use C4::Breeding; #------------------ # Constants -my $includes = C4::Context->config('includes') || - "/usr/local/www/hdl/htdocs/includes"; + # HTML colors for alternating lines my $lc1='#dddddd'; @@ -299,7 +79,7 @@ if ($uploadmarc && length($uploadmarc)>0) { while (<$uploadmarc>) { $marcrecord.=$_; } - my ($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported) = ImportBreeding($marcrecord,$overwrite_biblio,$filename,$syntax,int(rand(99999))); + my ($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported) = ImportBreeding($marcrecord,$overwrite_biblio,$filename,$syntax,""); $template->param(imported => $imported, alreadyindb => $alreadyindb, @@ -318,11 +98,8 @@ my $file; #--------------- # log cleared, as marcimport is (almost) rewritten from scratch. # $Log$ -# Revision 1.5 2006/07/04 14:36:52 toins -# Head & rel_2_2 merged -# -# Revision 1.4 2005/05/04 08:52:13 tipaul -# synch'ing 2.2 and head +# Revision 1.6 2006/09/06 16:21:04 tgarip1957 +# Clean up before final commits # # Revision 1.2.4.1 2005/04/07 10:10:52 tipaul # copying processz3950queue from 2.0 branch. The 2.2 version misses an important fix diff --git a/koha-tmpl/intranet-tmpl/prog/en/acqui/basket.tmpl b/koha-tmpl/intranet-tmpl/prog/en/acqui/basket.tmpl index 7ca2b679e3..066362c5b2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/acqui/basket.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/acqui/basket.tmpl @@ -1,8 +1,8 @@ Koha -- New Shopping Basket () for - +

New Shopping Basket for ">

Basket Details

diff --git a/koha-tmpl/intranet-tmpl/prog/en/acqui/histsearch.tmpl b/koha-tmpl/intranet-tmpl/prog/en/acqui/histsearch.tmpl index ee49bdf5bb..892e20f7da 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/acqui/histsearch.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/acqui/histsearch.tmpl @@ -1,9 +1,9 @@ Koha -- Search order - +

Order search

diff --git a/loadmodules.pl b/loadmodules.pl deleted file mode 100755 index c347320320..0000000000 --- a/loadmodules.pl +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/perl - -#script to show list of budgets and bookfunds -#written 4/2/00 by chris@katipo.co.nz -#called as an include by the acquisitions index page - - -# Copyright 2000-2002 Katipo Communications -# -# 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 C4::Context; -use CGI; -my $input=new CGI; - -my $module=$input->param('module'); - -SWITCH: { - if ($module eq 'acquisitions') { acquisitions(); last SWITCH; } - if ($module eq 'search') { catalogue_search(); last SWITCH; } - if ($module eq 'addbiblio') {addbiblio(); last SWITCH;} - if ($module eq 'somethingelse') { somethingelse(); last SWITCH; } -} - -sub acquisitions { - my $aq_type = $input->param('acquisitions'); - $aq_type = C4::Context->preference("acquisitions") || "normal" unless $aq_type; - my $marc_bool =$input->param('MARC'); - $marc_bool = C4::Context->boolean_preference('marc') || 0 unless $marc_bool; - # Get the acquisition preference. This should be: - # "simple" - minimal information required - # "normal" - full information required - # other - Same as "normal" - - if ($aq_type eq 'simple') { - print $input->redirect("/cgi-bin/koha/cataloguing/addbooks.pl"); - } else { - print $input ->redirect("/cgi-bin/koha/acqui/acqui-home.pl"); - } -} - -sub addbiblio { - my $marc_bool = C4::Context->boolean_preference("MARC") || 0; - if ($marc_bool eq "1") { - print $input->redirect("/cgi-bin/koha/cataloguing/addbooks.pl"); - } else { - print $input->redirect("/cgi-bin/koha/cataloguing/addbiblio-nomarc.pl"); - } -} - -sub catalogue_search { - my $marc_p = $input->param('marc'); - $marc_p = C4::Context->boolean_preference('marc') unless defined $marc_p; - $marc_p = 'ON' unless defined $marc_p; - my $keyword=$input->param('keyword'); - my $query = new CGI; - my $type = $query->param('type'); -# if ($keyword) { -# if ($marc_p) { -# print $input->redirect("/cgi-bin/koha/search.marc/search.pl?type=$type"); -# } else { -# print $input ->redirect("/cgi-bin/koha/search.pl?keyword=$keyword"); -# } -# } else { -# if ($marc_p) { - print $input->redirect("/cgi-bin/koha/search.marc/search.pl?type=$type"); -# } else { -# print $input ->redirect("/cgi-bin/koha/catalogue-home.pl"); -# } -# } -} - -sub somethingelse { -# just an example subroutine -} diff --git a/maint/catmaintain.pl b/maint/catmaintain.pl deleted file mode 100755 index f6ca90d603..0000000000 --- a/maint/catmaintain.pl +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/perl - -#script to do some serious catalogue maintainance -#written 22/11/00 -# by chris@katipo.co.nz - - -# Copyright 2000-2002 Katipo Communications -# -# 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::Auth; -use C4::Output; -use C4::Interface::CGI::Output; -use C4::Maintainance; -use HTML::Template; - -my $input = new CGI; -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => 'maint/catmaintain.tmpl', - query => $input, - type => 'intranet', - authnotrequired => 0, - flagsrequired => {catalogue => 1}, - debug => 1, - }); - -my %params = (); - - -my $type=$input->param('type'); -my $blah; -my $num=0; -my $offset=0; -if ($type eq 'allsub'){ - my $sub=$input->param('sub'); - my ($count,$results)=listsubjects($sub,$num,$offset); - my @it = (); - for (my $i=0;$i<$count;$i++){ - my $sub2=$results->[$i]->{'subject'}; - push @it, {'sub2' => $sub2, 'subject' => $results->[$i]->{'subject'}}; - } - %params = ('sub' => $sub, 'loop' => \@it); - -} elsif ($type eq 'modsub'){ - %params = ('sub' => $input->param('sub')); - -} elsif ($type eq 'upsub'){ - my $sub=$input->param('sub'); - my $oldsub=$input->param('oldsub'); - updatesub($sub,$oldsub); - %params = ('sub' => $sub, 'oldsub' => $oldsub); - -} elsif ($type eq 'undel'){ - my $title=$input->param('title'); - my ($count,$results)=deletedbib($title); - my @it = (); - for (my $i=0;$i<$count;$i++){ - push @it, { - 'title' => $results->[$i]->{'title'}, - 'author' => $results->[$i]->{'author'}, - 'undelete' => "type=finun&bib=$results->[$i]->{'biblionumber'}", - }; - } - %params = ('loop' => \@it); - -} elsif ($type eq 'finun'){ - my $bib=$input->param('bib'); - undeletebib($bib); - -} elsif ($type eq 'fixitemtype'){ - my $bi=$input->param('bi'); - my $item=$input->param('item'); - %params = ('bi' => $bi, 'item' => $item); - -} elsif ($type eq 'updatetype'){ - my $bi=$input->param('bi'); - my $itemtype=$input->param('itemtype'); - updatetype($bi,$itemtype); - -} else { - $type = 'mainmenu'; # NOTE - -} - -$template->param(type => 'intranet', - "$type-p" => 1, - %params, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); - -output_html_with_http_headers $input, $cookie, $template->output; diff --git a/maint/shiftbib.pl b/maint/shiftbib.pl deleted file mode 100755 index ae3bfe8886..0000000000 --- a/maint/shiftbib.pl +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/perl - -#script to do some serious catalogue maintainance -#written 22/11/00 -# by chris@katipo.co.nz - - -# Copyright 2000-2002 Katipo Communications -# -# 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::Output; -use C4::Maintainance; - -my $input = new CGI; -print $input->header; -my $type=$input->param('type'); -my $bi=$input->param('bi'); -my $bib=$input->param('bib'); -my $type=$input->param('type'); # FIXME - Redundant -print startpage(); -print startmenu('catalog'); - -if ($type eq 'change'){ - my $biblionumber=$input->param('biblionumber'); - my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("Select * from biblio where biblionumber=?"); - $sth->execute($biblionumber); - my $data=$sth->fetchrow_hashref; - print "Shifting group $bi to biblio $biblionumber
- Title:$data->{'title'}
- Author:$data->{'author'}

- Are you sure? -

- "; - print "Yes"; -} elsif ($type eq 'update'){ - shiftgroup($bib,$bi); - print "Shifted"; -} else { - print "Shifting Group $bi from biblio $bib to

"; - print ""; - print ""; - print ""; - print "
"; - print "

"; -} -print endmenu('catalog'); -print endpage(); diff --git a/misc/export_xml_koharecords.pl b/misc/export_xml_koharecords.pl new file mode 100644 index 0000000000..bbc08c8f8f --- /dev/null +++ b/misc/export_xml_koharecords.pl @@ -0,0 +1,78 @@ +#!/usr/bin/perl +## This script allows you to export a rel_2_2 bibliographic db in +#MARC21 format from the command line. +# +use strict; +require Exporter; +use C4::Auth; +use C4::Biblio; +use XML::Simple; +use Getopt::Long; + +my ( $out_marc_file, $check) ; +GetOptions( + 'file:s' => \$out_marc_file, + 'c:s' => \$check, + +); +### Usage +## export_xml_koharecords -file somefilename -c 1 +## use the -c flag if you want to check whether you xml is proper or not. Advisable but very slow +open(OUT,">" ,$out_marc_file) or die $!; + + my $dbh= C4::Context->dbh; + + my $sth; + + $sth=$dbh->prepare("select biblionumber,marcxml from biblio order by biblionumber "); +my $sth2=$dbh->prepare("select marcxml from items where biblionumber =?"); + $sth->execute(); + +my $header=&collection_header; + print OUT ''."\n"; + print OUT $header; + while (my ($biblionumber,$marcxml) = $sth->fetchrow) { +my $hash; +if ($check){ + eval { + $hash=XMLin($marcxml); + }; ### is it a proper xml? broken xml may crash ZEBRA- slow but safe + + + if ($@){ +warn $biblionumber; + next; + } +} + print OUT "\n"; + print OUT $marcxml; + print OUT ""; + $sth2->execute($biblionumber); + while (my ($itemxml)=$sth2->fetchrow){ +if ($check){ + eval { + $hash=XMLin($itemxml); + }; ### is it a proper xml? broken xml may crash ZEBRA- slow but safe + + if ($@){ +warn $biblionumber; + next; + } +} + + print OUT $itemxml; + } + print OUT "\n"; + } + print OUT "\n"; +close(OUT); + +sub collection_header { +#### this one is for koha collection + my $format = shift; + my $enc = shift || 'UTF-8'; + return( < +KOHA_XML_HEADER +} \ No newline at end of file diff --git a/misc/merge_authority.pl b/misc/merge_authority.pl index a046d83360..8f5fb51aca 100755 --- a/misc/merge_authority.pl +++ b/misc/merge_authority.pl @@ -1,28 +1,26 @@ #!/usr/bin/perl -# script that rebuild thesaurus from biblio table. + use strict; # Koha modules used -use MARC::File::USMARC; -use MARC::Record; -use MARC::Batch; use C4::Context; use C4::Biblio; -use C4::AuthoritiesMarc; +use C4::AuthoritiesMarc; ###merge routine moved to there use Time::HiRes qw(gettimeofday); use Getopt::Long; -my ($version, $verbose, $mergefrom,$mergeto,$noconfirm); +my ($version, $verbose, $mergefrom,$mergeto,$noconfirm,$batch); GetOptions( 'h' => \$version, 'f:s' => \$mergefrom, 't:s' => \$mergeto, 'v' => \$verbose, 'n' => \$noconfirm, + 'b' => \$batch, ); -if ($version || ($mergefrom eq '')) { +if ($version || ($mergefrom eq '' && !$batch)) { print <dbh; # my @subf = $subfields =~ /(##\d\d\d##.)/g; $|=1; # flushes output -my $authfrom = AUTHgetauthority($dbh,$mergefrom); -my $authto = AUTHgetauthority($dbh,$mergeto); - -my $authtypecodefrom = AUTHfind_authtypecode($dbh,$mergefrom); -my $authtypecodeto = AUTHfind_authtypecode($dbh,$mergeto); - -unless ($noconfirm) { - print "************\n"; - print "You will merge authority : $mergefrom ($authtypecodefrom)\n".$authfrom->as_formatted; - print "\n*************\n"; - print "Into authority : $mergeto ($authtypecodeto)\n".$authto->as_formatted; - print "\n\nDo you confirm (enter YES)?"; - my $confirm = ; - chop $confirm; - unless (uc($confirm) eq 'YES' and $authtypecodefrom eq $authtypecodeto) { - print "IMPOSSIBLE : authorities are not of the same type ($authtypecodefrom vs $authtypecodeto) !!!\n" if $authtypecodefrom ne $authtypecodeto; - print "Merge cancelled\n"; - exit; - } -} my $starttime = gettimeofday; -print "Merging\n" unless $noconfirm; - -# search the tag to report -my $sth = $dbh->prepare("select auth_tag_to_report from auth_types where authtypecode=?"); -$sth->execute($authtypecodefrom); -my ($auth_tag_to_report) = $sth->fetchrow; -# my $record_to_report = $authto->field($auth_tag_to_report); -print "Reporting authority tag $auth_tag_to_report :\n" if $verbose; -my @record_to = $authto->field($auth_tag_to_report)->subfields(); -my @record_from = $authfrom->field($auth_tag_to_report)->subfields(); - -# search all biblio tags using this authority. -$sth = $dbh->prepare("select distinct tagfield from marc_subfield_structure where authtypecode=?"); -$sth->execute($authtypecodefrom); -my $tags_using_authtype; -while (my ($tagfield) = $sth->fetchrow) { - $tags_using_authtype.= "'".$tagfield."',"; -} -chop $tags_using_authtype; -# now, find every biblio using this authority -my $query = "select bibid,tag,tag_indicator,tagorder,subfieldcode,subfieldorder from marc_subfield_table where tag in ($tags_using_authtype) and subfieldcode='9' and subfieldvalue='$mergefrom'"; -$sth = $dbh->prepare($query); -$sth->execute; -my $nbdone; -# and delete entries before recreating them -while (my ($bibid,$tag,$tag_indicator,$tagorder,$subfieldcode,$subfieldorder) = $sth->fetchrow) { - my $biblio = MARCgetbiblio($dbh,$bibid); - print "BEFORE : ".$biblio->as_formatted."\n" if $verbose; - # now, we know what uses the authority & where. - # delete all subfields that are in the same tag/tagorder and that are in the authority (& that are not in tab ignore in the biblio) - # then recreate them with the new authority. - foreach my $subfield (@record_from) { - &MARCdelsubfield($dbh,$bibid,$tag,$tagorder,$subfield->[0]); - } - &MARCdelsubfield($dbh,$bibid,$tag,$tagorder,'9'); - foreach my $subfield (@record_to) { - &MARCaddsubfield($dbh,$bibid,$tag,$tag_indicator,$tagorder,$subfield->[0],$subfieldorder,$subfield->[1]); +if ($batch) { + my @authlist; + my $cgidir = C4::Context->intranetdir ."/cgi-bin"; + unless (opendir(DIR, "$cgidir/localfile/modified_authorities")) { + $cgidir = C4::Context->intranetdir; + opendir(DIR, "$cgidir/localfile/modified_authorities") || die "can't opendir $cgidir/localfile/modified_authorities: $!"; + } + while (my $authid = readdir(DIR)) { + if ($authid =~ /\.authid$/) { + $authid =~ s/\.authid$//; + print "managing $authid\n" if $verbose; + my $MARCauth = XMLgetauthorityhash($dbh,$authid); + &merge($dbh,$authid,$MARCauth,$authid,$MARCauth) if ($MARCauth); + unlink $cgidir.'/localfile/modified_authorities/'.$authid.'.authid'; + } } - &MARCaddsubfield($dbh,$bibid,$tag,$tag_indicator,$tagorder,'9',$subfieldorder,$mergeto); - my $biblio = MARCgetbiblio($dbh,$bibid); - print "AFTER : ".$biblio->as_formatted."\n" if $verbose; - $nbdone++; -# &MARCdelsubfield($dbh,$bibid,$tag,$tagorder,$subfieldcode,$subfieldorder); - + closedir DIR; +} else { + my $MARCfrom = XMLgetauthorityhash($dbh,$mergefrom); + my $MARCto = XMLgetauthorityhash($dbh,$mergeto); + &merge($dbh,$mergefrom,$MARCfrom,$mergeto,$MARCto); } my $timeneeded = gettimeofday - $starttime; -print "$nbdone authorities done in $timeneeded seconds" unless $noconfirm; \ No newline at end of file +print "Done in $timeneeded seconds" unless $noconfirm; + diff --git a/reservereport.xls b/reservereport.xls deleted file mode 100755 index d61791438d..0000000000 --- a/reservereport.xls +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/perl - -#written 26/4/2000 -#script to display reports - -use C4::Stats; -use strict; -use CGI; -use C4::Output; - -my $input=new CGI; - -#print $input->header; - -#print startpage; -#print startmenu('report'); -#print center; -#print mktablehdr(); -my ($count,$data)=unfilledreserves(); -#print $count; -for (my $i=0;$i<$count;$i++){ -# print mktablerow(4,'white',"$data->[$i]->{'surname'}\, $data->[$i]->{'firstname'}",$data->[$i]->{'reservedate'},$data->[$i]->{'title'},"$data->[$i]->{'classification'}$data->[$i]->{'dewey'}"); - print "$data->[$i]->{'surname'}\'$data->[$i]->{'firstname'}\t$data->[$i]->{'reservedate'}\t$data->[$i]->{'title'}\t$data->[$i]->{'classification'}$data->[$i]->{'dewey'}$data->[$i]->{'subclass'}\n"; -} -#print mktableft(); -#print endmenu('report'); -#print endpage; diff --git a/search.marc/dictionary.pl b/search.marc/dictionary.pl deleted file mode 100755 index e7df534d7d..0000000000 --- a/search.marc/dictionary.pl +++ /dev/null @@ -1,267 +0,0 @@ -#!/usr/bin/perl - - -# Copyright 2000-2002 Katipo Communications -# -# 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 C4::Output; -use C4::Interface::CGI::Output; -use C4::Auth; -use CGI; -use C4::Search; -use C4::AuthoritiesMarc; -use C4::Context; -use C4::Biblio; -use HTML::Template; - -=head1 NAME - -dictionnary.pl : script to search in biblio & authority an existing value - -=head1 SYNOPSIS - -useful when the user want to search a term before running a query. For example, to see if "computer" is used in the database - -The parameter "marclist" tells which field is searched (title, author, subject, but could be anything else) - -This script searches in both biblios & authority -* in biblio, the script search in all marc fields related to what the user is looking for (for example, if the dictionnary is used on "author", the script searches in biblio.author, but also in additional authors & any MARC field related to author (through the "seealso" MARC constraint) -* in authority, the script search everywhere. Thus, the accepted & rejected forms are found. - -The script shows all results & the user can choose what he want, that is copied into search form. - -=cut - -my $input = new CGI; -my $field =$input->param('marclist'); -#warn "field :$field"; -my ($tablename, $kohafield)=split /./,$field; -#my $tablename=$input->param('tablename'); -$tablename="biblio" unless ($tablename); -#my $kohafield = $input->param('kohafield'); -my @search = $input->param('search'); -# warn " ".$search[0]; -my $index = $input->param('index'); -# warn " index: ".$index; -my $op=$input->param('op'); -if (($search[0]) and not ($op eq 'do_search')){ - $op='do_search'; -} -my $script_name = 'search.marc/dictionary.pl'; -my $query; -my $type=$input->param('type'); -#warn " ".$type; - -my $dbh = C4::Context->dbh; -my ($template, $loggedinuser, $cookie); - -my $env; - -my $startfrom=$input->param('startfrom'); -$startfrom=0 if(!defined $startfrom); -my $searchdesc; -my $resultsperpage; - -#warn "Starting process"; - -if ($op eq "do_search") { - # - # searching in biblio - # - my $sth=$dbh->prepare("Select distinct tagfield,tagsubfield from marc_subfield_structure where kohafield = ?"); - $sth->execute("$field"); - my (@tags, @and_or, @operator, @excluding,@value); - - while ((my $tagfield,my $tagsubfield,my $liblibrarian) = $sth->fetchrow) { - push @tags, $dbh->quote("$tagfield$tagsubfield"); - } - - $resultsperpage= $input->param('resultsperpage'); - $resultsperpage = 19 if(!defined $resultsperpage); - my $orderby = $input->param('orderby'); - - findseealso($dbh,\@tags); - - my @results, my $total; - my $strsth="select distinct subfieldvalue, count(marc_subfield_table.bibid) from marc_subfield_table,marc_word where marc_word.word like ? and marc_subfield_table.bibid=marc_word.bibid and marc_subfield_table.tagorder=marc_word.tagorder and marc_word.tagsubfield in "; - my $listtags="("; - foreach my $tag (@tags){ - $listtags .= $tag .","; - } - $listtags =~s/,$/)/; - $strsth .= $listtags." and marc_word.tagsubfield=concat(marc_subfield_table.tag,marc_subfield_table.subfieldcode) group by subfieldvalue "; -# warn "search in biblio : ".$strsth; - my $value = uc($search[0]); - $value=~s/\*/%/g; - $value.= "%" if not($value=~m/%/); -# warn " texte : ".$value; - - $sth=$dbh->prepare($strsth); - $sth->execute($value); - my $total; - my @catresults; - my $javalue; - while (my ($value,$ctresults)=$sth->fetchrow) { - # This $javalue is used for the javascript selectentry function (javalue for javascript value !) - $javalue = $value; - $javalue =~s/'/\\'/g; - - push @catresults,{value=> $value, - javalue=> $javalue, - even=>($total-$startfrom*$resultsperpage)%2, - count=>$ctresults - } if (($total>=$startfrom*$resultsperpage) and ($total<($startfrom+1)*$resultsperpage)); - $total++; - } - - - my $strsth="Select distinct authtypecode from marc_subfield_structure where ("; - foreach my $listtags (@tags){ - my @taglist=split /,/,$listtags; - foreach my $curtag (@taglist){ - $curtag =~s/\s+//; - $strsth.="(tagfield='".substr($curtag,1,3)."' AND tagsubfield='".substr($curtag,4,1)."') OR"; - } - } - - $strsth=~s/ OR$/)/; - my $strsth = $strsth." and authtypecode is not NULL"; -# warn $strsth; - my $sth=$dbh->prepare($strsth); - $sth->execute; - - # - # searching in authorities - # - my @authresults; - my $authnbresults; - while ((my $authtypecode) = $sth->fetchrow) { - my ($curauthresults,$nbresults) = authoritysearch($dbh,[''],[''],[''],['contains'], - \@search,$startfrom*$resultsperpage, $resultsperpage,$authtypecode); - if (defined(@$curauthresults)) { - for (my $i = 0; $i < @$curauthresults ;$i++) { - @$curauthresults[$i]->{jamainentry} = @$curauthresults[$i]->{mainentry}; - @$curauthresults[$i]->{jamainentry} =~ s/'/\\'/g; - } - } - push @authresults, @$curauthresults; - $authnbresults+=$nbresults; -# warn "auth : $authtypecode nbauthresults : $nbresults"; - } - - # - # OK, filling the template with authorities & biblio entries found. - # - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "search.marc/dictionary.tmpl", - query => $input, - type => $type, - authnotrequired => 0, - flagsrequired => {catalogue => 1}, - debug => 1, - }); - - # multi page display gestion - my $displaynext=0; - my $displayprev=$startfrom; - if(($total - (($startfrom+1)*($resultsperpage))) > 0 ) { - $displaynext = 1; - } - - my @field_data = (); - - for(my $i = 0 ; $i <= $#tags ; $i++) { - push @field_data, { term => "marclist", val=>$tags[$i] }; - push @field_data, { term => "and_or", val=>$and_or[$i] }; - push @field_data, { term => "excluding", val=>$excluding[$i] }; - push @field_data, { term => "operator", val=>$operator[$i] }; - push @field_data, { term => "value", val=>$value[$i] }; - } - - my @numbers = (); - - if ($total>$resultsperpage) { - for (my $i=1; $i<$total/$resultsperpage+1; $i++) { - if ($i<16) { - my $highlight=0; - ($startfrom==($i-1)) && ($highlight=1); - push @numbers, { number => $i, - highlight => $highlight , - searchdata=> \@field_data, - startfrom => ($i-1)}; - } - } - } - - my $from = $startfrom*$resultsperpage+1; - my $to; - - if($total < (($startfrom+1)*$resultsperpage)) - { - $to = $total; - } else { - $to = (($startfrom+1)*$resultsperpage); - } - $template->param(anindex => $input->param('index')); - $template->param(result => \@results, - catresult=> \@catresults, - search => $search[0], - marclist =>$field, - authresult => \@authresults, - nbresults => $authnbresults, - startfrom=> $startfrom, - displaynext=> $displaynext, - displayprev=> $displayprev, - resultsperpage => $resultsperpage, - startfromnext => $startfrom+1, - startfromprev => $startfrom-1, - searchdata=>\@field_data, - total=>$total, - from=>$from, - to=>$to, - numbers=>\@numbers, - MARC_ON => C4::Context->preference("marc"), - ); - - } else { - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "search.marc/dictionary.tmpl", - query => $input, - type => $type, - authnotrequired => 0, - flagsrequired => {catalogue => 1}, - debug => 1, - }); -#warn "type : $type"; - - } -$template->param(search => $search[0], - marclist =>$field, - type=>$type, - anindex => $input->param('index'), - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); - -# Print the page -output_html_with_http_headers $input, $cookie, $template->output; - -# Local Variables: -# tab-width: 4 -# End: diff --git a/search.marc/search.pl b/search.marc/search.pl deleted file mode 100755 index 1097d3348e..0000000000 --- a/search.marc/search.pl +++ /dev/null @@ -1,386 +0,0 @@ -#!/usr/bin/perl -# WARNING: 4-character tab stops here - -# Copyright 2000-2002 Katipo Communications -# -# 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; -require Exporter; -use CGI; -use C4::Auth; -use HTML::Template; -use C4::Context; -use C4::Search; -use C4::Auth; -use C4::Output; -use C4::Interface::CGI::Output; -use C4::Biblio; -use C4::Acquisition; -use C4::Koha; # XXX subfield_is_koha_internal_p - -# Creates the list of active tags using the active MARC configuration -sub create_marclist { - my $dbh = C4::Context->dbh; - my $tagslib = &MARCgettagslib($dbh,1); - my @marcarray; - push @marcarray,""; - my $widest_menu_item_width = 0; - for (my $pass = 1; $pass <= 2; $pass += 1) - { - for (my $tabloop = 0; $tabloop<=10;$tabloop++) - { - my $separator_inserted_p = 0; # FIXME... should not use!! - foreach my $tag (sort(keys (%{$tagslib}))) - { - foreach my $subfield (sort(keys %{$tagslib->{$tag}})) - { - next if subfield_is_koha_internal_p($subfield); - next unless ($tagslib->{$tag}->{$subfield}->{tab} eq $tabloop); - my $menu_item = "$tag$subfield - $tagslib->{$tag}->{$subfield}->{lib}"; - if ($pass == 1) - { - $widest_menu_item_width = length $menu_item if($widest_menu_item_width < length $menu_item); - } else { - if (!$separator_inserted_p) - { - my $w = int(($widest_menu_item_width - 3 + 0.5)/2); - my $s = ('-' x ($w * 4/5)); - push @marcarray, "$s $tabloop $s"; - $separator_inserted_p = 1; - } - push @marcarray, $menu_item; - } - } - } - } - } - return \@marcarray; -} - -# Creates a scrolling list with the associated default value. -# Using more than one scrolling list in a CGI assigns the same default value to all the -# scrolling lists on the page !?!? That's why this function was written. -sub create_scrolling_list { - my ($params) = @_; - my $scrollist = sprintf("\n"; - - return $scrollist; -} - -my $query=new CGI; -my $type=$query->param('type'); -my $op = $query->param('op') || ""; -my $dbh = C4::Context->dbh; - -my $startfrom=$query->param('startfrom'); -$startfrom=0 if(!defined $startfrom); -my ($template, $loggedinuser, $cookie); -my $searchdesc; -my $resultsperpage; - -if ($op eq "do_search") { - my @marclist = $query->param('marclist'); - my @and_or = $query->param('and_or'); - my @excluding = $query->param('excluding'); - my @operator = $query->param('operator'); - my @value = $query->param('value'); - - for (my $i=0;$i<=$#marclist;$i++) { - if ($searchdesc) { # don't put the and_or on the 1st search term - $searchdesc .= $and_or[$i]." ".$excluding[$i]." ".($marclist[$i]?$marclist[$i]:"*")." ".$operator[$i]." ".$value[$i]." " if ($value[$i]); - } else { - $searchdesc = $excluding[$i]." ".($marclist[$i]?$marclist[$i]:"*")." ".$operator[$i]." ".$value[$i]." " if ($value[$i]); - } - } - - $resultsperpage= $query->param('resultsperpage'); - $resultsperpage = 19 if(!defined $resultsperpage); - my $orderby = $query->param('orderby'); - my $desc_or_asc = $query->param('desc_or_asc'); - - # builds tag and subfield arrays - my @tags; - - foreach my $marc (@marclist) { - if ($marc) { - my ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,$marc,''); - if ($tag) { - push @tags,$dbh->quote("$tag$subfield"); - } else { - if ($marc =~ /^(\d){3}(. -)(.)*/) - { - # The user is using the search catalogue part, more fields - push @tags, $dbh->quote(substr($marc,0,4)); - } - else - { - push @tags, $marc; - } - } - } else { - push @tags, ""; - } - } - findseealso($dbh,\@tags); - my ($results,$total) = catalogsearch($dbh, \@tags,\@and_or, - \@excluding, \@operator, \@value, - $startfrom*$resultsperpage, $resultsperpage,$orderby,$desc_or_asc); - if ($total == 1) { - # if only 1 answer, jump directly to the biblio - if (C4::Context->preference("IntranetBiblioDefaultView") eq "normal") { - print $query->redirect("/cgi-bin/koha/detail.pl?bib=".@$results[0]->{biblionumber}); - } elsif (C4::Context->preference("IntranetBiblioDefaultView") eq "marc") { - print $query->redirect("/cgi-bin/koha/MARCdetail.pl?bib=".@$results[0]->{biblionumber}); - } else { - print $query->redirect("/cgi-bin/koha/ISBDdetail.pl?bib=".@$results[0]->{biblionumber}); - } - exit - } - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "search.marc/result.tmpl", - query => $query, - type => $type, - authnotrequired => 0, - flagsrequired => {borrowers => 1}, - flagsrequired => {catalogue => 1}, - debug => 1, - }); - - # multi page display gestion - my $displaynext=0; - my $displayprev=$startfrom; - if(($total - (($startfrom+1)*($resultsperpage))) > 0 ) { - $displaynext = 1; - } - - my @field_data = (); - - for(my $i = 0 ; $i <= $#marclist ; $i++) { - push @field_data, { term => "marclist", val=>$marclist[$i] }; - push @field_data, { term => "and_or", val=>$and_or[$i] }; - push @field_data, { term => "excluding", val=>$excluding[$i] }; - push @field_data, { term => "operator", val=>$operator[$i] }; - push @field_data, { term => "value", val=>$value[$i] }; - } - - my @numbers = (); - - if ($total>$resultsperpage) { - for (my $i=1; $i<$total/$resultsperpage+1; $i++) { - if ($i<16) { - my $highlight=0; - ($startfrom==($i-1)) && ($highlight=1); - push @numbers, { number => $i, - highlight => $highlight , - searchdata=> \@field_data, - startfrom => ($i-1)}; - } - } - } - - my $from = $startfrom*$resultsperpage+1; - my $to; - - if($total < (($startfrom+1)*$resultsperpage)) - { - $to = $total; - } else { - $to = (($startfrom+1)*$resultsperpage); - } - my $defaultview = 'BiblioDefaultView'.C4::Context->preference('IntranetBiblioDefaultView'); - $template->param(result => $results, - startfrom=> $startfrom, - displaynext=> $displaynext, - displayprev=> $displayprev, - resultsperpage => $resultsperpage, - startfromnext => $startfrom+1, - startfromprev => $startfrom-1, - searchdata=>\@field_data, - total=>$total, - from=>$from, - to=>$to, - numbers=>\@numbers, - searchdesc=> $searchdesc, - desc_asc=>$desc_or_asc, - orderby=>$orderby, - MARC_ON => C4::Context->preference("marc"), - $defaultview => 1, - ); - -} elsif ($op eq "AddStatement") { - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "search.marc/search.tmpl", - query => $query, - type => $type, - authnotrequired => 0, - flagsrequired => {catalogue => 1}, - debug => 1, - }); - - # Gets the entered information - my @marcfields = $query->param('marclist'); - my @and_or = $query->param('and_or'); - my @excluding = $query->param('excluding'); - my @operator = $query->param('operator'); - my @value = $query->param('value'); - - my @statements = (); - - # List of the marc tags to display - my $marcarray = create_marclist(); - - my $nbstatements = $query->param('nbstatements'); - $nbstatements = 1 if(!defined $nbstatements); - - for(my $i = 0 ; $i < $nbstatements ; $i++) - { - my %fields = (); - - # Recreates the old scrolling lists with the previously selected values - my $marclist = create_scrolling_list({name=>"marclist", - values=> $marcarray, - size=> 1, - default=>$marcfields[$i], - onChange => "sql_update()"} - ); - - $fields{'marclist'} = $marclist; - $fields{'first'} = 1 if($i == 0); - - # Restores the and/or parameters (no need to test the 'and' for activation because it's the default value) - $fields{'or'} = 1 if($and_or[$i] eq "or"); - - #Restores the "not" parameters - $fields{'not'} = 1 if($excluding[$i]); - - #Restores the operators (most common operators first); - if($operator[$i] eq "=") { $fields{'eq'} = 1; } - elsif($operator[$i] eq "contains") { $fields{'contains'} = 1; } - elsif($operator[$i] eq "start") { $fields{'start'} = 1; } - elsif($operator[$i] eq ">") { $fields{'gt'} = 1; } #greater than - elsif($operator[$i] eq ">=") { $fields{'ge'} = 1; } #greater or equal - elsif($operator[$i] eq "<") { $fields{'lt'} = 1; } #lower than - elsif($operator[$i] eq "<=") { $fields{'le'} = 1; } #lower or equal - - #Restores the value - $fields{'value'} = $value[$i]; - - push @statements, \%fields; - } - $nbstatements++; - - # The new scrolling list - my $marclist = create_scrolling_list({name=>"marclist", - values=> $marcarray, - size=>1, - onChange => "sql_update()"}); - push @statements, {"marclist" => $marclist }; - - $template->param("statements" => \@statements, - "nbstatements" => $nbstatements); - -} -else { - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "search.marc/search.tmpl", - query => $query, - type => $type, - authnotrequired => 0, - flagsrequired => {catalogue => 1}, - debug => 1, - }); - #$template->param(loggedinuser => $loggedinuser); - - my $marcarray = create_marclist(); - - my $marclist = CGI::scrolling_list(-name=>"marclist", - -values=> $marcarray, - -size=>1, - -tabindex=>'', - -multiple=>0, - -onChange => "sql_update()", - ); - - my @statements = (); - - # Considering initial search with 3 criterias - push @statements, { "marclist" => $marclist, "first" => 1 }; - push @statements, { "marclist" => $marclist, "first" => 0 }; - push @statements, { "marclist" => $marclist, "first" => 0 }; - my $sth=$dbh->prepare("Select itemtype,description from itemtypes order by description"); - $sth->execute; - my @itemtype; - my %itemtypes; - push @itemtype, ""; - $itemtypes{''} = ""; - while (my ($value,$lib) = $sth->fetchrow_array) { - push @itemtype, $value; - $itemtypes{$value}=$lib; - } - - my $CGIitemtype=CGI::scrolling_list( -name => 'value', - -id => 'itemtype', - -values => \@itemtype, - -labels => \%itemtypes, - -size => 1, - -tabindex=>'', - -multiple => 0 ); - $sth->finish; - - my @branches; - my @select_branch; - my %select_branches; - my $branches=GetBranches(); - my @branchloop; - foreach my $thisbranch (sort keys %$branches) { -# my $selected = 1 if $thisbranch eq $branch; - my %row =(value => $thisbranch, -# selected => $selected, - branchname => $branches->{$thisbranch}->{'branchname'}, - ); - push @branchloop, \%row; - } - $sth->finish; - - - $template->param('Disable_Dictionary'=>C4::Context->preference("Disable_Dictionary")) if (C4::Context->preference("Disable_Dictionary")); - $template->param("statements" => \@statements, - "nbstatements" => 3, - CGIitemtype => $CGIitemtype, - branchloop => \@branchloop, - ); -} - - -# Print the page -$template->param(intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); -output_html_with_http_headers $query, $cookie, $template->output; - -# Local Variables: -# tab-width: 4 -# End: diff --git a/search.marc/suggest.pl b/search.marc/suggest.pl deleted file mode 100755 index bd015281c4..0000000000 --- a/search.marc/suggest.pl +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/perl -# WARNING: 4-character tab stops here - -# Copyright 2000-2002 Katipo Communications -# -# 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; -require Exporter; -use CGI; -use C4::Auth; -use HTML::Template; -use C4::Context; -use C4::Search; -use C4::Auth; -use C4::Output; -use C4::Interface::CGI::Output; -use C4::Biblio; -use C4::Acquisition; -use C4::Koha; # XXX subfield_is_koha_internal_p - -# Creates the list of active tags using the active MARC configuration -my $query=new CGI; -my $Q=$query->param('Q'); -my @words = split / /,$Q; -my $dbh = C4::Context->dbh; - -my $suggestions = findsuggestion($dbh,\@words); -my @loop_suggests; -foreach my $line (@$suggestions) { - my ($word,$suggestion,$count) = split /\|/,$line; - push @loop_suggests, { word => $word, suggestion =>$suggestion, count => $count }; -} - -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "search.marc/suggest.tmpl", - query => $query, - type => "intranet", - authnotrequired => 0, - flagsrequired => {editcatalogue => 1}, - debug => 1, - }); -$template->param("loop" => \@loop_suggests, - intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), - ); - -output_html_with_http_headers $query, $cookie, $template->output; -1; -# Local Variables: -# tab-width: 4 -# End: diff --git a/serials/acqui-search-result.pl b/serials/acqui-search-result.pl index ccb0c79485..e936ea5caa 100755 --- a/serials/acqui-search-result.pl +++ b/serials/acqui-search-result.pl @@ -43,14 +43,12 @@ acqui-search-result.pl use strict; use C4::Auth; use C4::Biblio; -use C4::Output; use CGI; use C4::Interface::CGI::Output; -use C4::Database; -use HTML::Template; use C4::Acquisition; use C4::Date; use C4::Bookseller; +use C4::Acquisition; my $query=new CGI; my ($template, $loggedinuser, $cookie) diff --git a/serials/acqui-search.pl b/serials/acqui-search.pl index f9ee6c4b4a..fcd48a7b94 100755 --- a/serials/acqui-search.pl +++ b/serials/acqui-search.pl @@ -24,9 +24,9 @@ use CGI; use C4::Auth; use C4::Output; use C4::Interface::CGI::Output; -use C4::Database; -use HTML::Template; + use C4::Bookfund; +use C4::Acquisition; my $query = new CGI; my ($template, $loggedinuser, $cookie) @@ -38,8 +38,8 @@ my ($template, $loggedinuser, $cookie) debug => 1, }); -# FIXME : Is this page still used ???? -# looks like no. + + # budget my $dbh = C4::Context->dbh; @@ -77,8 +77,8 @@ my $count = scalar @rates; my @loop_currency = (); for (my $i=0;$i<$count;$i++){ my %line; - $line{currency} = $rates->[$i]->{'currency'}; - $line{rate} = $rates->[$i]->{'rate'}; + $line{currency} = $rates[$i]->{'currency'}; + $line{rate} = $rates[$i]->{'rate'}; push @loop_currency, \%line; } $template->param(classlist => $classlist, @@ -88,6 +88,10 @@ $template->param(classlist => $classlist, total => sprintf("%.2f",$total), totspent => sprintf("%.2f",$totspent), totcomtd => sprintf("%.2f",$totcomtd), - totavail => sprintf("%.2f",$totavail)); + totavail => sprintf("%.2f",$totavail), + intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), + intranetstylesheet => C4::Context->preference("intranetstylesheet"), + IntranetNav => C4::Context->preference("IntranetNav"), + ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/serials/claims.pl b/serials/claims.pl index b6e1954f30..de9f22208e 100755 --- a/serials/claims.pl +++ b/serials/claims.pl @@ -5,11 +5,10 @@ use CGI; use C4::Auth; use C4::Serials; use C4::Acquisition; -use C4::Output; + use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; -use Data::Dumper; + my $query = new CGI; diff --git a/serials/distributedto.pl b/serials/distributedto.pl index d266ac8a22..5657695848 100755 --- a/serials/distributedto.pl +++ b/serials/distributedto.pl @@ -52,10 +52,10 @@ use CGI; use C4::Date; use C4::Auth; use C4::Context; -use C4::Output; + use C4::Interface::CGI::Output; use C4::Search; -use HTML::Template; + use C4::Serials; use C4::Members; diff --git a/serials/lateissues-excel.pl b/serials/lateissues-excel.pl index 19e31fb04b..4cb9c44b5e 100755 --- a/serials/lateissues-excel.pl +++ b/serials/lateissues-excel.pl @@ -8,8 +8,7 @@ use C4::Acquisition; use C4::Output; use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; -# use Date::Manip; + use Text::CSV_XS; diff --git a/serials/lateissues.pl b/serials/lateissues.pl index 226ade960b..6169ca04f7 100755 --- a/serials/lateissues.pl +++ b/serials/lateissues.pl @@ -43,10 +43,8 @@ use CGI; use C4::Auth; use C4::Serials; use C4::Acquisition; -use C4::Output; use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; use C4::Bookseller; my $query = new CGI; diff --git a/serials/member-search.pl b/serials/member-search.pl index 54e87a9e5f..f40f317ded 100755 --- a/serials/member-search.pl +++ b/serials/member-search.pl @@ -6,11 +6,9 @@ use CGI; use C4::Koha; use C4::Auth; use C4::Date; -use C4::Output; use C4::Acquisition; use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; use C4::Search; use C4::Serials; diff --git a/serials/printlist.pl b/serials/printlist.pl index 4e0161647b..288e677bac 100755 --- a/serials/printlist.pl +++ b/serials/printlist.pl @@ -40,11 +40,10 @@ this script print the list of members who have reserved the subscription given o =cut -use HTML::Template; + use strict; require Exporter; use C4::Context; -use C4::Output; # contains gettemplate use CGI; use C4::Auth; use C4::Serials; diff --git a/serials/reorder_members.pl b/serials/reorder_members.pl index ee498d5db9..0876ff4e8f 100755 --- a/serials/reorder_members.pl +++ b/serials/reorder_members.pl @@ -6,17 +6,12 @@ # printed out use strict; use CGI; -use C4::Koha; -use C4::Auth; -use C4::Date; -use C4::Output; + use C4::Acquisition; use C4::Interface::CGI::Output; -use C4::Context; -use HTML::Template; -use C4::Search; + use C4::Serials; -use Data::Dumper; + my $query = new CGI; my $subscriptionid = $query->param('subscriptionid'); diff --git a/serials/routing-preview.pl b/serials/routing-preview.pl index 755d9c977e..10d1390cd8 100755 --- a/serials/routing-preview.pl +++ b/serials/routing-preview.pl @@ -14,7 +14,6 @@ use C4::Reserves2; use C4::Circulation::Circ2; use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; use C4::Search; use C4::Serials; diff --git a/serials/routing.pl b/serials/routing.pl index 52efd84699..87a04dc60b 100755 --- a/serials/routing.pl +++ b/serials/routing.pl @@ -9,11 +9,9 @@ use CGI; use C4::Koha; use C4::Auth; use C4::Date; -use C4::Output; use C4::Acquisition; use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; use C4::Search; use C4::Serials; diff --git a/serials/serial-issues.pl b/serials/serial-issues.pl index f1ec5b8fe4..f7a8603123 100755 --- a/serials/serial-issues.pl +++ b/serials/serial-issues.pl @@ -51,7 +51,7 @@ use C4::Serials; use C4::Output; use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; + my $query = new CGI; my $dbh = C4::Context->dbh; @@ -110,4 +110,8 @@ if ($selectview eq "full"){ virtualshelves => "".C4::Context->preference("virtualshelves"), ); } +$template->param(intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), + intranetstylesheet => C4::Context->preference("intranetstylesheet"), + IntranetNav => C4::Context->preference("IntranetNav"), + ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/serials/serials-home.pl b/serials/serials-home.pl index 356d9525ee..85a576311c 100755 --- a/serials/serials-home.pl +++ b/serials/serials-home.pl @@ -46,10 +46,8 @@ use strict; use CGI; use C4::Auth; use C4::Serials; -use C4::Output; use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; my $query = new CGI; my $title = $query->param('title'); diff --git a/serials/serials-recieve.pl b/serials/serials-receive.pl similarity index 63% rename from serials/serials-recieve.pl rename to serials/serials-receive.pl index 3cb8375ad2..8c43faddc0 100755 --- a/serials/serials-recieve.pl +++ b/serials/serials-receive.pl @@ -21,7 +21,7 @@ =head1 NAME -serials-recieve.pl +serials-receive.pl =head1 Parameters @@ -40,7 +40,7 @@ serials-recieve.pl =item enddate -=item recievedlist +=item receivedlist =item missinglist @@ -69,39 +69,37 @@ use C4::Auth; use C4::Date; use C4::Biblio; use C4::Koha; -use C4::Output; use C4::Interface::CGI::Output; use C4::Context; use C4::Serials; -use HTML::Template; my $query = new CGI; my $op = $query->param('op'); my $dbh = C4::Context->dbh; my $subscriptionid = $query->param('subscriptionid'); -# my $auser = $query->param('user'); my $histstartdate = format_date_in_iso($query->param('histstartdate')); my $enddate = format_date_in_iso($query->param('enddate')); -my $recievedlist = $query->param('recievedlist'); +my $receivedlist = $query->param('receivedlist'); my $missinglist = $query->param('missinglist'); my $opacnote = $query->param('opacnote'); my $librariannote = $query->param('librariannote'); my @serialids = $query->param('serialid'); my @serialseqs = $query->param('serialseq'); my @planneddates = $query->param('planneddate'); +my @publisheddates = $query->param('publisheddate'); my @status = $query->param('status'); my @notes = $query->param('notes'); my @barcodes = $query->param('barcode'); my @itemcallnumbers = $query->param('itemcallnumber'); my @locations = $query->param('location'); my @itemstatus = $query->param('itemstatus'); -my @homebranches = $query->param('branch'); +my @holdingbranches = $query->param('holdingbranch'); my $hassubscriptionexpired = HasSubscriptionExpired($subscriptionid); my $abouttoexpire = abouttoexpire($subscriptionid); - +my @itemnumbers=$query->param('itemnumber'); my $subscription=GetSubscription($subscriptionid); - + $hassubscriptionexpired=1 ; my $auser = $subscription->{'librarian'}; # bob my $routing = check_routing($subscriptionid); # to see if routing list exists my $manualdate =''; @@ -117,7 +115,7 @@ if ($op eq 'found'){ $manualid = $sth->fetchrow; } if ($op eq 'modsubscriptionhistory') { - ModSubscriptionHistory($subscriptionid,$histstartdate,$enddate,$recievedlist,$missinglist,$opacnote,$librariannote); + ModSubscriptionHistory($subscriptionid,$histstartdate,$enddate,$receivedlist,$missinglist,$opacnote,$librariannote); } # change status except, if subscription has expired, for the "waited" issue. @@ -128,52 +126,41 @@ if ($op eq 'serialchangestatus') { my ($oldstatus) = $sth->fetchrow; if ($serialids[$i]) { - ModSerialStatus($serialids[$i],$serialseqs[$i],format_date_in_iso($planneddates[$i]),$status[$i],$notes[$i]) unless ($hassubscriptionexpired && $oldstatus == 1); - if (($status[$i]==2) && C4::Context->preference("serialsadditems")){ + + my $planneddate = ($planneddates[$i]?format_date_in_iso($planneddates[$i]):format_date_in_iso("today")) if ($status[$i]==2); + ModSerialStatus($serialids[$i],$serialseqs[$i],format_date_in_iso($publisheddates[$i]),format_date_in_iso($planneddates[$i]),$status[$i],$notes[$i],$itemnumbers[$i]) unless ($hassubscriptionexpired && $oldstatus ==1 ); + if (($status[$i]==2) && $itemnumbers[$i]){ my %info; - $info{branch}=$homebranches[$i]; - $info{barcode}=$barcodes[$i]; - $info{itemcallnumber}=$itemcallnumbers[$i]; - $info{location}=$locations[$i]; - $info{status}=$itemstatus[$i]; - $info{notes}=$serialseqs[$i]." (".$planneddates[$i].")"; - my ($status2, @errors)= ItemizeSerials($serialids[$i],\%info); + my $status2; my $sth2 = $dbh->prepare("UPDATE subscriptionhistory SET lastbranch = ? WHERE subscriptionid = ?"); - $sth2->execute($homebranches[$i],$subscriptionid); + $sth2->execute($holdingbranches[$i],$subscriptionid); $sth2->finish; # remove from missing list if item being checked in is on it - if ($status2 ==1){ removeMissingIssue($serialseqs[$i],$subscriptionid); - } } } else { # add a special issue if ($serialseqs[$i]) { - NewIssue($serialseqs[$i],$subscriptionid,$subscription->{biblionumber},$status[$i], format_date_in_iso($planneddates[$i])); + NewIssue($serialseqs[$i],$subscriptionid,$subscription->{biblionumber},$status[$i],format_date_in_iso($publisheddates[$i]), format_date_in_iso($planneddates[$i]),$itemnumbers[$i]); } - if (($status[$i]==2) && C4::Context->preference("serialsadditems") && !hassubscriptionexpired($subscriptionid)){ + if (($status[$i]==2) && $itemnumbers[$i] && !$hassubscriptionexpired){ my %info; - $info{branch}=$homebranches[$i]; - $info{barcode}=$barcodes[$i]; - $info{itemcallnumber}=$itemcallnumbers[$i]; - $info{location}=$locations[$i]; - $info{status}=$itemstatus[$i]; - $info{notes}=$serialseqs[$i]." (".$planneddates[$i].")"; - my ($status2, @errors)= ItemizeSerials($serialids[$i],\%info); + my $status2; my $sth2 = $dbh->prepare("UPDATE subscriptionhistory SET lastbranch = ? WHERE subscriptionid = ?"); - $sth2->execute($homebranches[$i],$subscriptionid); + $sth2->execute($holdingbranches[$i],$subscriptionid); $sth2->finish; # remove from missing list if item being checked in is on it - if ($status2 ==1){ +# if ($status2 ==1){ removeMissingIssue($serialseqs[$i],$subscriptionid); - } +# } } } } + } my ($template, $loggedinuser, $cookie) -= get_template_and_user({template_name => "serials/statecollection.tmpl", += get_template_and_user({template_name => "serials/serials-receive.tmpl", query => $query, type => "intranet", authnotrequired => 0, @@ -201,62 +188,8 @@ my $subs = &GetSubscription($subscriptionid); my ($totalissues,@serialslist) = GetSerials($subscriptionid); if (C4::Context->preference("serialsadditems")){ - my $bibid=MARCfind_MARCbibid_from_oldbiblionumber($dbh,$subscription->{biblionumber}); - my $fwk=MARCfind_frameworkcode($dbh,$bibid); - - my $branches = GetBranches; - my @branchloop; - foreach my $thisbranch (keys %$branches) { - my $selected = 0; - if($thisbranch eq $solhistory->{'lastbranch'}){ - $selected = 1; - } - my %row =(value => $thisbranch, - branchname => $branches->{$thisbranch}->{'branchname'}, - selected => $selected, - ); - push @branchloop, \%row; - } - - my $itemstatushash = getitemstatus($fwk); - my @itemstatusloop; - my $itemstatusloopcount=0; - foreach my $thisitemstatus (keys %$itemstatushash) { - my %row =(itemval => $thisitemstatus, - itemlib => $itemstatushash->{$thisitemstatus}, - ); -# warn "".$row{'itemval'}.", ". $row{"itemlib"}; - $itemstatusloopcount++; - push @itemstatusloop, \%row; - } - - my $itemlocationhash = getitemlocation($fwk); - my @itemlocationloop; - foreach my $thisitemlocation (keys %$itemlocationhash) { - my %row =(value => $thisitemlocation, - itemlocationname => $itemlocationhash->{$thisitemlocation}, - ); - push @itemlocationloop, \%row; - } - - my $choice = 0; - if($itemstatusloopcount == 1){ $choice = 1;} - foreach my $data (@serialslist){ - if (scalar(@itemstatusloop)){$data->{"itemstatusloop"}=\@itemstatusloop;} - else { $data->{"itemstatusloop"}=[];} - if (scalar(@itemlocationloop)){$data->{"itemlocationloop"}=\@itemlocationloop;} - else {$data->{"itemlocationloop"}=[];} - $data->{"branchloop"}=\@branchloop ; - } -# warn "Choice: $choice"; - $template->param(choice => $choice); - $template->param(serialadditems =>C4::Context->preference("serialsadditems"), - branchloop => \@branchloop, - ) ; - $template->param(itemstatus=>1,itemstatusloop=>\@itemstatusloop) if (scalar(@itemstatusloop)); - $template->param(itemlocation=>1,itemlocationloop=>\@itemlocationloop) if (scalar(@itemlocationloop)); -}else{ - $template->param(branchloop=>[],itemstatusloop=>[],itemlocationloop=>[]) ; + $template->param(scriptaddserials=>"/cgi-bin/koha/cataloguing/additem.pl?biblionumber= $serialslist[0]->{'biblionumber'}&fromserials=1&serialid=", + serialsadditems=>1 ) ; } my $sth= C4::Serials::GetSubscriptionHistoryFromSubscriptionId(); @@ -271,7 +204,7 @@ $template->param( biblionumber => $subscription->{biblionumber}, histstartdate => format_date($solhistory->{'histstartdate'}), enddate => format_date($solhistory->{'enddate'}), - recievedlist => $solhistory->{'recievedlist'}, + receivedlist => $solhistory->{'receivedlist'}, missinglist => $solhistory->{'missinglist'}, opacnote => $solhistory->{'opacnote'}, librariannote => $solhistory->{'librariannote'}, diff --git a/serials/subscription-add.pl b/serials/subscription-add.pl index 8cdc97375d..cbe75c2621 100755 --- a/serials/subscription-add.pl +++ b/serials/subscription-add.pl @@ -49,25 +49,24 @@ use CGI; use C4::Koha; use C4::Auth; use C4::Date; -use C4::Output; use C4::Serials; use C4::Bookfund; use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; use C4::Letters; use C4::Members; +use Date::Manip; my $query = new CGI; my $op = $query->param('op'); my $dbh = C4::Context->dbh; my ($subscriptionid,$auser,$librarian,$cost,$aqbooksellerid, $aqbooksellername,$aqbudgetid, $bookfundid, $startdate, $periodicity, - $dow, $numberlength, $weeklength, $monthlength, + $publisheddate,$dow,$irregularity, $numberpattern, $numberlength, $weeklength, $monthlength, $sublength, $add1,$every1,$whenmorethan1,$setto1,$lastvalue1,$innerloop1, $add2,$every2,$whenmorethan2,$setto2,$lastvalue2,$innerloop2, $add3,$every3,$whenmorethan3,$setto3,$lastvalue3,$innerloop3, $numberingmethod, $status, $biblionumber, - $bibliotitle, $notes, $letter); + $title, $notes, $letter,$callnumber,$hemisphere); my @budgets; my ($template, $loggedinuser, $cookie) @@ -79,6 +78,29 @@ my ($template, $loggedinuser, $cookie) debug => 1, }); +my $weekarrayjs=''; +my $count = 0; +my ($year, $month, $day) = UnixDate("today", "%Y", "%m", "%d"); +my $firstday = Date_DayOfYear($month,$day,$year); +my $wkno = Date_WeekOfYear($month,$day,$year,1); # week starting monday +my $weekno = $wkno; +for(my $i=$firstday;$i<($firstday+365);$i=$i+7){ + $count = $i; + if($wkno > 52){$year++; $wkno=1;} + if($count>365){$count=$i-365;} + my ($y,$m,$d) = Date_NthDayOfYear($year,$count); + my $output = "$y-$m-$d"; + $weekarrayjs .= "'Wk $wkno: ".format_date($output)."',"; + $wkno++; +} +chop($weekarrayjs); +# warn $weekarrayjs; + +my $sub_on; +my @subscription_types = ( + 'issues', 'weeks', 'months' + ); +my @sub_type_data; if ($op eq 'mod') { my $subscriptionid = $query->param('subscriptionid'); my $subs = &GetSubscription($subscriptionid); @@ -91,11 +113,36 @@ if ($op eq 'mod') { $aqbudgetid = $subs->{'aqbudgetid'}; defined $aqbudgetid or $aqbudgetid=''; $startdate = $subs->{'startdate'}; + $publisheddate = $subs->{'publisheddate'}; $periodicity = $subs->{'periodicity'}; $dow = $subs->{'dow'}; + $irregularity = $subs->{'irregularity'}; + $numberpattern = $subs->{'numberpattern'}; $numberlength = $subs->{'numberlength'}; $weeklength = $subs->{'weeklength'}; $monthlength = $subs->{'monthlength'}; + if($monthlength > 0){ + $sublength = $monthlength; + $sub_on = $subscription_types[2]; + } elsif ($weeklength>0){ + $sublength = $weeklength; + $sub_on = $subscription_types[1]; + } else { + $sublength = $numberlength; + $sub_on = $subscription_types[0]; + } + + + while (@subscription_types) { + my $sub_type = shift @subscription_types; + my %row = ( 'name' => $sub_type ); + if ( $sub_on eq $sub_type ) { + $row{'selected'} = ' selected'; + } else { + $row{'selected'} = ''; + } + push( @sub_type_data, \%row ); + } $add1 = $subs->{'add1'}; $every1 = $subs->{'every1'}; $whenmorethan1 = $subs->{'whenmorethan1'}; @@ -117,7 +164,9 @@ if ($op eq 'mod') { $numberingmethod = $subs->{'numberingmethod'}; $status = $subs->{status}; $biblionumber = $subs->{'biblionumber'}; - $bibliotitle = $subs->{'bibliotitle'}, + $title = $subs->{'title'}, + $callnumber = $subs->{'callnumber'}; + $hemisphere = $subs->{'hemisphere'}; $notes = $subs->{'notes'}; $letter = $subs->{'letter'}; defined $letter or $letter=''; @@ -130,12 +179,15 @@ if ($op eq 'mod') { cost => $cost, aqbudgetid => $aqbudgetid, bookfundid => $bookfundid, - startdate => format_date($startdate), + startdate => format_date($startdate), + publisheddate => format_date($publisheddate), periodicity => $periodicity, + numberpattern=>$numberpattern, dow => $dow, numberlength => $numberlength, weeklength => $weeklength, monthlength => $monthlength, + sublength=>$sublength, add1 => $add1, every1 => $every1, whenmorethan1 => $whenmorethan1, @@ -157,12 +209,17 @@ if ($op eq 'mod') { numberingmethod => $numberingmethod, status => $status, biblionumber => $biblionumber, - bibliotitle => $bibliotitle, + title => $title, + callnumber => $callnumber, notes => $notes, letter => $letter, subscriptionid => $subscriptionid, + weekarrayjs => $weekarrayjs, + weekno => $weekno, + hemisphere => $hemisphere, "periodicity$periodicity" => 1, "dow$dow" => 1, + "numberpattern$numberpattern" => 1, ); } @@ -173,44 +230,80 @@ for (my $i=0;$i<=$#letterlist;$i++) { $template->param(letters => \@letterlist); if ($op eq 'addsubscription') { + my @irregular = $query->param('irregular'); + my $irregular_count = @irregular; + for(my $i =0;$i<$irregular_count;$i++){ + $irregularity .=$irregular[$i]."|"; + } + $irregularity =~ s/\|$//; + my $auser = $query->param('user'); my $aqbooksellerid = $query->param('aqbooksellerid'); my $cost = $query->param('cost'); my $aqbudgetid = $query->param('aqbudgetid'); my $startdate = $query->param('startdate'); + my $publisheddate = $query->param('publisheddate'); + my $callnumber=$query->param('callnumber'); my $periodicity = $query->param('periodicity'); my $dow = $query->param('dow'); - my $numberlength = $query->param('numberlength'); - my $weeklength = $query->param('weeklength'); - my $monthlength = $query->param('monthlength'); - my $add1 = $query->param('add1'); - my $every1 = $query->param('every1'); - my $whenmorethan1 = $query->param('whenmorethan1'); - my $setto1 = $query->param('setto1'); - my $lastvalue1 = $query->param('lastvalue1'); - my $add2 = $query->param('add2'); - my $every2 = $query->param('every2'); - my $whenmorethan2 = $query->param('whenmorethan2'); - my $setto2 = $query->param('setto2'); - my $lastvalue2 = $query->param('lastvalue2'); - my $add3 = $query->param('add3'); - my $every3 = $query->param('every3'); - my $whenmorethan3 = $query->param('whenmorethan3'); - my $setto3 = $query->param('setto3'); - my $lastvalue3 = $query->param('lastvalue3'); - my $numberingmethod = $query->param('numberingmethod'); - my $status = 1; + my $numberlength = 0; + my $weeklength = 0; + my $monthlength = 0; + my $numberpattern = $query->param('numbering_pattern'); + my $sublength = $query->param('sublength'); + my $subtype = $query->param('subtype'); + if ($subtype eq 'months'){ + $monthlength = $sublength; + } elsif ($subtype eq 'weeks'){ + $weeklength = $sublength; + } else { + $numberlength = $sublength; + } + + + my $add1 = $query->param('add1'); + my $every1 = $query->param('every1'); + my $whenmorethan1 = $query->param('whenmorethan1'); + my $setto1 = $query->param('setto1'); + my $lastvalue1 = $query->param('lastvalue1'); + my $add2 = $query->param('add2'); + my $every2 = $query->param('every2'); + my $whenmorethan2 = $query->param('whenmorethan2'); + my $setto2 = $query->param('setto2'); + my $lastvalue2 = $query->param('lastvalue2'); + my $add3 = $query->param('add3'); + my $every3 = $query->param('every3'); + my $whenmorethan3 = $query->param('whenmorethan3'); + my $setto3 = $query->param('setto3'); + my $lastvalue3 = $query->param('lastvalue3'); + my $numberingmethod = $query->param('numberingmethod'); + my $status = 1; my $biblionumber = $query->param('biblionumber'); my $notes = $query->param('notes'); my $letter = $query->param('letter'); + my $hemisphere = $query->param('hemisphere') || 1; + my $subscriptionid = NewSubscription($auser,$aqbooksellerid,$cost,$aqbudgetid,$biblionumber, $startdate,$periodicity,$dow,$numberlength,$weeklength,$monthlength, $add1,$every1,$whenmorethan1,$setto1,$lastvalue1, $add2,$every2,$whenmorethan2,$setto2,$lastvalue2, $add3,$every3,$whenmorethan3,$setto3,$lastvalue3, - $numberingmethod, $status, $notes, $letter - ); + $numberingmethod, $status, $notes, $letter,$irregularity,$hemisphere,$callnumber,$numberpattern,$publisheddate ); print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); } else { + while (@subscription_types) { + my $sub_type = shift @subscription_types; + my %row = ( 'name' => $sub_type ); + if ( $sub_on eq $sub_type ) { + $row{'selected'} = ' selected'; + } else { + $row{'selected'} = ''; + } + push( @sub_type_data, \%row ); + } + $template->param(subtype => \@sub_type_data, + weekarrayjs => $weekarrayjs, + weekno => $weekno, + ); output_html_with_http_headers $query, $cookie, $template->output; } diff --git a/serials/subscription-bib-search.pl b/serials/subscription-bib-search.pl index 78cbc4db71..e7444ae511 100755 --- a/serials/subscription-bib-search.pl +++ b/serials/subscription-bib-search.pl @@ -18,181 +18,153 @@ # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA - -=head1 NAME - -subscription-bib-search.pl - -=head1 DESCRIPTION - -this script search among all existing subscriptions. - -=head1 PARAMETERS - -=over 4 - -=item op -op use to know the operation to do on this template. - * do_search : to search the subscription. - -Note that if op = do_search there are some others params specific to the search : - marclist,and_or,excluding,operator,value - -=item startfrom -to multipage gestion. - - -=back - -=cut - - use strict; -require Exporter; + use CGI; use C4::Koha; use C4::Auth; -use HTML::Template; use C4::Context; -use C4::Output; +use C4::Search; +use C4::Auth; use C4::Interface::CGI::Output; -use C4::SearchMarc; +use C4::Biblio; +use C4::Acquisition; +use C4::Koha; # XXX subfield_is_koha_internal_p + + +# Creates a scrolling list with the associated default value. +# Using more than one scrolling list in a CGI assigns the same default value to all the +# scrolling lists on the page !?!? That's why this function was written. my $query=new CGI; -# my $type=$query->param('type'); +my $type=$query->param('type'); my $op = $query->param('op'); my $dbh = C4::Context->dbh; my $startfrom=$query->param('startfrom'); -$startfrom=0 unless $startfrom; +$startfrom=0 if(!defined $startfrom); my ($template, $loggedinuser, $cookie); my $resultsperpage; if ($op eq "do_search") { - my @marclist = $query->param('marclist'); - my @and_or = $query->param('and_or'); - my @excluding = $query->param('excluding'); - my @operator = $query->param('operator'); - my @value = $query->param('value'); - - $resultsperpage= $query->param('resultsperpage'); - $resultsperpage = 19 if(!defined $resultsperpage); - my $orderby = $query->param('orderby'); - - # builds tag and subfield arrays - my @tags; - - foreach my $marc (@marclist) { - if ($marc) { - my ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,$marc); - if ($tag) { - push @tags,$dbh->quote("$tag$subfield"); - } else { - push @tags, $dbh->quote(substr($marc,0,4)); - } - } else { - push @tags, ""; - } - } - my ($results,$total) = catalogsearch($dbh, \@tags,\@and_or, - \@excluding, \@operator, \@value, - $startfrom*$resultsperpage, $resultsperpage,$orderby); - - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "serials/result.tmpl", - query => $query, - type => "intranet", - authnotrequired => 0, - flagsrequired => {borrowers => 1}, - flagsrequired => {catalogue => 1}, - debug => 1, - }); - - # multi page display gestion - my $displaynext=0; - my $displayprev=$startfrom; - if(($total - (($startfrom+1)*($resultsperpage))) > 0 ){ - $displaynext = 1; - } - - my @field_data = (); - - - for(my $i = 0 ; $i <= $#marclist ; $i++) - { - push @field_data, { term => "marclist", val=>$marclist[$i] }; - push @field_data, { term => "and_or", val=>$and_or[$i] }; - push @field_data, { term => "excluding", val=>$excluding[$i] }; - push @field_data, { term => "operator", val=>$operator[$i] }; - push @field_data, { term => "value", val=>$value[$i] }; - } - - my @numbers = (); - - if ($total>$resultsperpage) - { - for (my $i=1; $i<$total/$resultsperpage+1; $i++) - { - if ($i<16) - { - my $highlight=0; - ($startfrom==($i-1)) && ($highlight=1); - push @numbers, { number => $i, - highlight => $highlight , - searchdata=> \@field_data, - startfrom => ($i-1)}; - } - } - } - - my $from = $startfrom*$resultsperpage+1; - my $to; - - if($total < (($startfrom+1)*$resultsperpage)) - { - $to = $total; - } else { - $to = (($startfrom+1)*$resultsperpage); - } - $template->param(result => $results, - startfrom=> $startfrom, - displaynext=> $displaynext, - displayprev=> $displayprev, - resultsperpage => $resultsperpage, - startfromnext => $startfrom+1, - startfromprev => $startfrom-1, - searchdata=>\@field_data, - total=>$total, - from=>$from, - to=>$to, - numbers=>\@numbers, - ); + my @kohafield = $query->param('kohafield'); + my @and_or = $query->param('and_or'); + my @relation = $query->param('relation'); + my @value = $query->param('value'); + my $order=$query->param('order'); + $resultsperpage= $query->param('resultsperpage'); + $resultsperpage = 9 if(!defined $resultsperpage); + # builds tag and subfield arrays + + my ($total,@results) = ZEBRAsearch_kohafields(\@kohafield,\@value,\@relation,$order,\@and_or,1,"",$startfrom,$resultsperpage,"intranet"); + + ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "serials/result.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => {borrowers => 1}, + flagsrequired => {catalogue => 1}, + debug => 1, + }); + + # multi page display gestion + my $displaynext=0; + my $displayprev=$startfrom; + if(($total - (($startfrom+1)*($resultsperpage))) > 0 ){ + $displaynext = 1; + } + + my @field_data = (); + + + for(my $i = 0 ; $i <= $#value ; $i++) + { + push @field_data, { term => "kohafield", val=>$kohafield[$i] }; + push @field_data, { term => "and_or", val=>$and_or[$i] }; + push @field_data, { term => "relation", val=>$relation[$i] }; + push @field_data, { term => "value", val=>$value[$i] }; + } + + my @numbers = (); + + if ($total>$resultsperpage) + { + for (my $i=1; $i<$total/$resultsperpage+1; $i++) + { + if ($i<16) + { + my $highlight=0; + ($startfrom==($i-1)) && ($highlight=1); + push @numbers, { number => $i, + highlight => $highlight , + searchdata=> \@field_data, + startfrom => ($i-1)}; + } + } + } + + my $from = $startfrom*$resultsperpage+1; + my $to; + + if($total < (($startfrom+1)*$resultsperpage)) + { + $to = $total; + } else { + $to = (($startfrom+1)*$resultsperpage); + } + $template->param(result => \@results, + startfrom=> $startfrom, + displaynext=> $displaynext, + displayprev=> $displayprev, + resultsperpage => $resultsperpage, + startfromnext => $startfrom+1, + startfromprev => $startfrom-1, + searchdata=>\@field_data, + total=>$total, + from=>$from, + to=>$to, + numbers=>\@numbers, + ); } else { - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "serials/subscription-bib-search.tmpl", - query => $query, - type => "intranet", - authnotrequired => 0, - flagsrequired => {catalogue => 1}, - debug => 1, - }); - - my %itemtypes = GetItemTypes(); - my @values = values %itemtypes; - my $CGIitemtype=CGI::scrolling_list( - -name => 'value', - -values => \@values, - -labels => \%itemtypes, - -size => 1, - -multiple => 0 - ); - - $template->param( - CGIitemtype => $CGIitemtype, - ); + ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "serials/subscription-bib-search.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => {catalogue => 1}, + debug => 1, + }); + my $sth=$dbh->prepare("Select itemtype,description from itemtypes order by description"); + $sth->execute; + my @itemtype; + my %itemtypes; + push @itemtype, ""; + $itemtypes{''} = ""; + while (my ($value,$lib) = $sth->fetchrow_array) { + push @itemtype, $value; + $itemtypes{$value}=$lib; + } + + my $CGIitemtype=CGI::scrolling_list( -name => 'value', + -values => \@itemtype, + -labels => \%itemtypes, + -size => 1, + -tabindex=>'', + -multiple => 0 ); + $sth->finish; + + $template->param( + CGIitemtype => $CGIitemtype, + ); } + # Print the page +$template->param(intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), + intranetstylesheet => C4::Context->preference("intranetstylesheet"), + IntranetNav => C4::Context->preference("IntranetNav"), + ); output_html_with_http_headers $query, $cookie, $template->output; # Local Variables: diff --git a/serials/subscription-detail.pl b/serials/subscription-detail.pl index 52d34fa905..646bc03d19 100755 --- a/serials/subscription-detail.pl +++ b/serials/subscription-detail.pl @@ -1,51 +1,5 @@ #!/usr/bin/perl -# Copyright 2000-2002 Katipo Communications -# -# 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 - -# $Id$ - -=head1 NAME - -subscription-details.pl - -=head1 DESCRIPTION - -this script display the detail of a subscription given on input arg. - -=head1 Parameters - -=over 4 - -=item op -op use to know the operation to do on this template. - * modsubscription : to modify the subscription. - * del : to delete this subscription. - -Note that if op = modsubscription there are a lot of other parameters. - -=item subscriptionid -The subscription this script has to dislay - -=back - -=cut - - use strict; use CGI; use C4::Auth; @@ -55,134 +9,120 @@ use C4::Serials; use C4::Output; use C4::Interface::CGI::Output; use C4::Context; -use HTML::Template; +use Date::Manip; my $query = new CGI; -my $op = $query->param('op') || ''; +my $op = $query->param('op'); my $dbh = C4::Context->dbh; my $sth; # my $id; -my ($template, $loggedinuser, $cookie, $subs, $user, $sessionID, $flags); +my ($template, $loggedinuser, $cookie, $subs); my ($subscriptionid,$auser,$librarian,$cost,$aqbooksellerid, $aqbooksellername,$aqbudgetid, $bookfundid, $startdate, $periodicity, - $dow, $numberlength, $weeklength, $monthlength, - $add1,$every1,$whenmorethan1,$setto1,$lastvalue1,$innerloop1, - $add2,$every2,$whenmorethan2,$setto2,$lastvalue2,$innerloop2, - $add3,$every3,$whenmorethan3,$setto3,$lastvalue3,$innerloop3, - $numberingmethod, $status, $biblionumber, $bibliotitle, $notes,$letter); + $publisheddate, $dow, $irregularity, $sublength, $subtype, $numberpattern, $numberlength, $weeklength, $monthlength, + $add1,$every1,$whenmorethan1,$setto1,$lastvalue1,$innerloop1, + $add2,$every2,$whenmorethan2,$setto2,$lastvalue2,$innerloop2, + $add3,$every3,$whenmorethan3,$setto3,$lastvalue3,$innerloop3, + $numberingmethod, $status, $biblionumber, $bibliotitle, $callnumber, $notes, $hemisphere); $subscriptionid = $query->param('subscriptionid'); -if ($op eq 'modsubscription') { - $auser = $query->param('user'); - $librarian = $query->param('librarian'); - $cost = $query->param('cost'); - $aqbooksellerid = $query->param('aqbooksellerid'); - $biblionumber = $query->param('biblionumber'); - $aqbudgetid = $query->param('aqbudgetid'); - $startdate = format_date_in_iso($query->param('startdate')); - $periodicity = $query->param('periodicity'); - $dow = $query->param('dow'); - $numberlength = $query->param('numberlength'); - $weeklength = $query->param('weeklength'); - $monthlength = $query->param('monthlength'); - $add1 = $query->param('add1'); - $every1 = $query->param('every1'); - $whenmorethan1 = $query->param('whenmorethan1'); - $setto1 = $query->param('setto1'); - $lastvalue1 = $query->param('lastvalue1'); - $innerloop1 = $query->param('innerloop1'); - $add2 = $query->param('add2'); - $every2 = $query->param('every2'); - $whenmorethan2 = $query->param('whenmorethan2'); - $setto2 = $query->param('setto2'); - $lastvalue2 = $query->param('lastvalue2'); - $innerloop2 = $query->param('innerloop2'); - $add3 = $query->param('add3'); - $every3 = $query->param('every3'); - $whenmorethan3 = $query->param('whenmorethan3'); - $setto3 = $query->param('setto3'); - $lastvalue3 = $query->param('lastvalue3'); - $innerloop3 = $query->param('innerloop3'); - $numberingmethod = $query->param('numberingmethod'); - $status = 1; - $notes = $query->param('notes'); - $letter = $query->param('letter'); - - &ModSubscription($auser,$aqbooksellerid,$cost,$aqbudgetid,$startdate, - $periodicity,$dow,$numberlength,$weeklength,$monthlength, - $add1,$every1,$whenmorethan1,$setto1,$lastvalue1,$innerloop1, - $add2,$every2,$whenmorethan2,$setto2,$lastvalue2,$innerloop2, - $add3,$every3,$whenmorethan3,$setto3,$lastvalue3,$innerloop3, - $numberingmethod, $status, $biblionumber, $notes, $letter, $subscriptionid); -} if ($op eq 'del') { - &DelSubscription($subscriptionid); - print "Content-Type: text/html\n\n"; - exit; +$biblionumber = $query->param('biblionumber'); + &DelSubscription($subscriptionid,$biblionumber); + $query->redirect("/cgi-bin/koha/serials/serials-home.pl"); + exit; + } -$subs = &GetSubscription($subscriptionid); -# html'ize distributedto -$subs->{distributedto}=~ s/\n/
/g; +my $subs = &GetSubscription($subscriptionid); +my ($routing, @routinglist) = getroutinglist($subscriptionid); my ($totalissues,@serialslist) = GetSerials($subscriptionid); $totalissues-- if $totalissues; # the -1 is to have 0 if this is a new subscription (only 1 issue) +# the subscription must be deletable if there is NO issues for a reason or another (should not happend, but...) ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "serials/subscription-detail.tmpl", - query => $query, - type => "intranet", - authnotrequired => 0, - flagsrequired => {catalogue => 1}, - debug => 1, - }); - -($user, $cookie, $sessionID, $flags) = checkauth($query, 0, {catalogue => 1}, "intranet"); + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => {catalogue => 1}, + debug => 1, + }); + +my ($user, $cookie, $sessionID, $flags) + = checkauth($query, 0, {catalogue => 1}, "intranet"); + +my $weekarrayjs=''; +my $count = 0; +my ($year, $month, $day) = UnixDate("today", "%Y", "%m", "%d"); +my $firstday = Date_DayOfYear($month,$day,$year); +my $wkno = Date_WeekOfYear($month,$day,$year,1); # week starting monday +my $weekno = $wkno; +for(my $i=$firstday;$i<($firstday+365);$i=$i+7){ + $count = $i; + if($wkno > 52){$year++; $wkno=1;} + if($count>365){$count=$i-365;} + my ($y,$m,$d) = Date_NthDayOfYear($year,$count); + my $output = "$y-$m-$d"; + $weekarrayjs .= "'Wk $wkno: ".format_date($output)."',"; + $wkno++; + } +chop($weekarrayjs); $template->param( - user => $subs->{auser}, - librarian => $subs->{librarian}, - aqbooksellerid => $subs->{aqbooksellerid}, - aqbooksellername => $subs->{aqbooksellername}, - cost => $subs->{cost}, - aqbudgetid => $subs->{aqbudgetid}, - bookfundid => $subs->{bookfundid}, - startdate => format_date($subs->{startdate}), - periodicity => $subs->{periodicity}, - dow => $subs->{dow}, - numberlength => $subs->{numberlength}, - weeklength => $subs->{weeklength}, - monthlength => $subs->{monthlength}, - add1 => $subs->{add1}, - every1 => $subs->{every1}, - whenmorethan1 => $subs->{whenmorethan1}, - innerloop1 => $subs->{innerloop1}, - setto1 => $subs->{setto1}, - lastvalue1 => $subs->{lastvalue1}, - add2 => $subs->{add2}, - every2 => $subs->{every2}, - whenmorethan2 => $subs->{whenmorethan2}, - setto2 => $subs->{setto2}, - lastvalue2 => $subs->{lastvalue2}, - innerloop2 => $subs->{innerloop2}, - add3 => $subs->{add3}, - every3 => $subs->{every3}, - whenmorethan3 => $subs->{whenmorethan3}, - setto3 => $subs->{setto3}, - lastvalue3 => $subs->{lastvalue3}, - innerloop3 => $subs->{innerloop3}, - numberingmethod => $subs->{numberingmethod}, - status => $subs->{status}, - biblionumber => $subs->{biblionumber}, - bibliotitle => $subs->{bibliotitle}, - notes => $subs->{notes}, - letter => $subs->{letter}, - distributedto => $subs->{distributedto}, - subscriptionid => $subs->{subscriptionid}, - serialslist => \@serialslist, - totalissues => $totalissues, - "periodicity$subs->{periodicity}" => 1, - "arrival$subs->{dow}" => 1 -); - + routing => $routing, + user => $subs->{auser}, + librarian => $subs->{librarian}, + aqbooksellerid => $subs->{aqbooksellerid}, + aqbooksellername => $subs->{aqbooksellername}, + cost => $subs->{cost}, + aqbudgetid => $subs->{aqbudgetid}, + bookfundid => $subs->{bookfundid}, + startdate => format_date($subs->{startdate}), + publisheddate => format_date($subs->{publisheddate}), + periodicity => $subs->{periodicity}, + dow => $subs->{dow}, + irregularity => $subs->{irregularity}, + numberlength => $subs->{numberlength}, + weeklength => $subs->{weeklength}, + monthlength => $subs->{monthlength}, + numberpattern => $subs->{numberpattern}, + add1 => $subs->{add1}, + every1 => $subs->{every1}, + whenmorethan1 => $subs->{whenmorethan1}, + innerloop1 => $subs->{innerloop1}, + setto1 => $subs->{setto1}, + lastvalue1 => $subs->{lastvalue1}, + add2 => $subs->{add2}, + every2 => $subs->{every2}, + whenmorethan2 => $subs->{whenmorethan2}, + setto2 => $subs->{setto2}, + lastvalue2 => $subs->{lastvalue2}, + innerloop2 => $subs->{innerloop2}, + add3 => $subs->{add3}, + every3 => $subs->{every3}, + whenmorethan3 => $subs->{whenmorethan3}, + setto3 => $subs->{setto3}, + lastvalue3 => $subs->{lastvalue3}, + innerloop3 => $subs->{innerloop3}, + weekarrayjs => $weekarrayjs, + numberingmethod => $subs->{numberingmethod}, + status => $subs->{status}, + biblionumber => $subs->{biblionumber}, + bibliotitle => $subs->{bibliotitle}, + callnumber => $subs->{callnumber}, + notes => $subs->{notes}, + subscriptionid => $subs->{subscriptionid}, + serialslist => \@serialslist, + totalissues => $totalissues, + hemisphere => $hemisphere, + ); +$template->param( + "periodicity$subs->{periodicity}" => 1, + "arrival$subs->{dow}" => 1, + "numberpattern$subs->{numberpattern}" => 1, + intranetstylesheet => C4::Context->preference("intranetstylesheet"), + intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), + ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/serials/subscription-renew.pl b/serials/subscription-renew.pl index 127e47e89b..6ef217c075 100755 --- a/serials/subscription-renew.pl +++ b/serials/subscription-renew.pl @@ -52,7 +52,6 @@ use CGI; use C4::Koha; use C4::Auth; use C4::Date; -use HTML::Template; use C4::Context; use C4::Search; use C4::Auth; diff --git a/serials/viewalerts.pl b/serials/viewalerts.pl index c72b1993d6..af235ea1b0 100755 --- a/serials/viewalerts.pl +++ b/serials/viewalerts.pl @@ -22,10 +22,10 @@ use strict; use C4::Auth; use C4::Context; -use C4::Output; + use CGI; use C4::Interface::CGI::Output; -use C4::Interface::CGI::Template; + use C4::Koha; use C4::Letters; use C4::Serials; @@ -34,7 +34,7 @@ my $dbh = C4::Context->dbh; my $input = new CGI; my $print = $input->param('print'); -my $template_name; + my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => 'serials/viewalerts.tmpl', diff --git a/thesaurus_popup.pl b/thesaurus_popup.pl deleted file mode 100755 index 62518ba37d..0000000000 --- a/thesaurus_popup.pl +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/perl - -# written 10/5/2002 by Paul -# build result field using bibliothesaurus table - - -# Copyright 2000-2002 Katipo Communications -# -# 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 C4::Auth; -use CGI; -use C4::Context; -use HTML::Template; -use C4::Search; -use C4::Output; -use C4::Authorities; -use C4::Interface::CGI::Output; -# get all the data .... -my %env; - -my $input = new CGI; -my $result = $input->param('result'); -my $search_string= $input->param('search_string'); -$search_string = $result unless ($search_string); -my $op = $input->param('op'); -my $id = $input->param('id'); -my $category = $input->param('category'); -my $index= $input->param('index'); -my $insert = $input->param('insert'); -my $nohierarchy = $input->param('nohierarchy'); # if 1, just show the last part of entry (Marseille). If 0, show everything (Europe -- France --Marseille) -my $dbh = C4::Context->dbh; - -# make the page ... -#print $input->header; -if ($op eq "select") { - my $sti = $dbh->prepare("select father,stdlib from bibliothesaurus where id=?"); - $sti->execute($id); - my ($father,$freelib_text) = $sti->fetchrow_array; - if (length($result)>0) { - if ($nohierarchy) { - $result .= "|$freelib_text"; - } else { - $result .= "|$father $freelib_text"; - } - } else { - if ($nohierarchy) { - $result = "$freelib_text"; - } else { - $result = "$father $freelib_text"; - } - } -} -if ($op eq "add") { - newauthority($dbh,$category,$insert,$insert,'',1,''); - $search_string=$insert; -} -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "thesaurus_popup.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {parameters => 1}, - debug => 1, - }); -# /search thesaurus terms starting by search_string -my @freelib; -my %stdlib; -my $select_list; -if ($search_string) { -# my $sti=$dbh->prepare("select id,freelib from bibliothesaurus where freelib like '".$search_string."%' and category ='$category'"); - my $sti=$dbh->prepare("select id,freelib,father from bibliothesaurus where match (category,freelib) AGAINST (?) and category =?"); - $sti->execute($search_string,$category); - while (my $line=$sti->fetchrow_hashref) { - if ($nohierarchy) { - $stdlib{$line->{'id'}} = "$line->{'freelib'}"; - } else { - $stdlib{$line->{'id'}} = "$line->{'father'} $line->{'freelib'}"; - } - push(@freelib,$line->{'id'}); - } - $select_list= CGI::scrolling_list( -name=>'id', - -values=> \@freelib, - -default=> "", - -size=>1, - -multiple=>0, - -labels=> \%stdlib - ); -} -my @x = SearchDeeper('',$category,$search_string); -#my @son; -#foreach (my $value @$x) { -# warn \@$x[$value]->{'stdlib'}; -#} -my $dig_list= CGI::scrolling_list( -name=>'search_string', - -values=> \@x, - -default=> "", - -size=>1, - -multiple=>0, - ); - -$template->param(select_list => $select_list, - search_string => $search_string, - dig_list => $dig_list, - result => $result, - category => $category, - index => $index, - nohierarchy => $nohierarchy, - ); -output_html_with_http_headers $input, $cookie, $template->output; - - diff --git a/value_builder/marc21_008_holdings.pl b/value_builder/marc21_008_holdings.pl new file mode 100644 index 0000000000..270f534cff --- /dev/null +++ b/value_builder/marc21_008_holdings.pl @@ -0,0 +1,139 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 C4::Auth; +use CGI; +use C4::Context; +use HTML::Template; +use C4::Search; +use C4::Output; + +=head1 + +plugin_parameters : other parameters added when the plugin is called by the dopop function + +=cut +# find today's date +my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); + +$year +=1900; $mon +=1; +my $dateentered = substr($year,2,2).sprintf ("%0.2d", $mon).sprintf ("%0.2d",$mday); +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "100".(int(rand(100000))+1); +my $res=" + +"; + +return ($function_name,$res); +} +sub plugin { +my ($input) = @_; + my %env; + +# my $input = new CGI; + my $index= $input->param('index'); + my $result= $input->param('result'); + + + my $dbh = C4::Context->dbh; + +my ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "value_builder/marc21_008_holdings.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {editcatalogue => 1}, + debug => 1, + }); + $result = '$dateentered' + '1p||||8|||401ab|||0000000'; + my $f1 = substr($result,0,6); + my $f6 = substr($result,6,1); + my $f710 = substr($result,7,4); + my $f1114 = substr($result,11,4); + my $f1517 = substr($result,15,3); + my $f1821 = substr($result,18,4); + my $f22 = substr($result,22,1); + my $f23 = substr($result,23,1); + my $f2427 = substr($result,24,4); + my $f28 = substr($result,28,1); + my $f29 = substr($result,29,1); + my $f30 = substr($result,30,1); + +if (!$f1){ + $f1=$dateentered +} + + $template->param( index => $index, + f1 => $f1, + f6 => $f6, + "f6$f6" => $f6, + f710 => $f710, + f1114 => $f1114, + f1517 => $f1517, + f1821 => $f1821, + f22 => $f22, + "f22$f22" => $f22, + f23 => $f23, + "f23$f23" => $f23, + f2427 => $f2427, + "f24$f2427" => $f2427, + f28 => $f28, + "f28$f28" => $f28, + f29 => $f29, + "f29$f29" => $f29, + f30 => $f30, + "f30$f30" => $f30, + + + ); + print $input->header(-cookie => $cookie),$template->output; +} + +1; diff --git a/value_builder/marc21_field_003.pl b/value_builder/marc21_field_003.pl new file mode 100755 index 0000000000..ca62b58928 --- /dev/null +++ b/value_builder/marc21_field_003.pl @@ -0,0 +1,97 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 + +require Exporter; +use C4::AuthoritiesMarc; +use C4::Auth; +use C4::Context; +use C4::Output; +use C4::Interface::CGI::Output; +use CGI; +use C4::Search; +use MARC::Record; +use C4::Koha; +use HTML::Template; + +=head1 + +plugin_parameters : other parameters added when the plugin is called by the dopop function + +=cut +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +=head1 + +plugin_javascript : the javascript function called when the user enters the subfield. +contain 3 javascript functions : +* one called when the field is entered (OnFocus). Named FocusXXX +* one called when the field is leaved (onBlur). Named BlurXXX +* one called when the ... link is clicked () named ClicXXX + +returns : +* XXX +* a variable containing the 3 scripts. +the 3 scripts are inserted after the in the html code + +=cut +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "003".(int(rand(100000))+1); + +# find today's date +my $org = C4::Context->preference('MARCOrgCode'); +my $res = " + +"; +return ($function_name,$res); +} + +=head1 + +plugin : the true value_builded. The screen that is open in the popup window. + +=cut + +sub plugin { +my ($input) = @_; +return ""; +} + +1; diff --git a/value_builder/marc21_field_005.pl b/value_builder/marc21_field_005.pl new file mode 100755 index 0000000000..da51c526b7 --- /dev/null +++ b/value_builder/marc21_field_005.pl @@ -0,0 +1,100 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 + +require Exporter; +use C4::Auth; +use C4::Context; +use C4::Interface::CGI::Output; +use CGI; + + +=head1 + +plugin_parameters : other parameters added when the plugin is called by the dopop function + +=cut +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +=head1 + +plugin_javascript : the javascript function called when the user enters the subfield. +contain 3 javascript functions : +* one called when the field is entered (OnFocus). Named FocusXXX +* one called when the field is leaved (onBlur). Named BlurXXX +* one called when the ... link is clicked () named ClicXXX + +returns : +* XXX +* a variable containing the 3 scripts. +the 3 scripts are inserted after the in the html code + +=cut +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "005".(int(rand(100000))+1); + +# find today's date +my ($sec,$min,$hour,$mday,$mon,$year) = localtime(); + $year += 1900; + $mon += 1; + my $timestamp = sprintf("%4d%02d%02d%02d%02d%02d.0", + $year,$mon,$mday,$hour,$min,$sec); + + + +my $res = " + +"; +return ($function_name,$res); +} + +=head1 + +plugin : the true value_builded. The screen that is open in the popup window. + +=cut + +sub plugin { +my ($input) = @_; +return ""; +} + +1; diff --git a/value_builder/marc21_field_006.pl b/value_builder/marc21_field_006.pl new file mode 100644 index 0000000000..156512b932 --- /dev/null +++ b/value_builder/marc21_field_006.pl @@ -0,0 +1,126 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 C4::Auth; +use CGI; +use C4::Context; +use HTML::Template; +use C4::Search; +use C4::Output; + +=head1 + +plugin_parameters : other parameters added when the plugin is called by the dopop function + +=cut +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "100".(int(rand(100000))+1); +my $res=" + +"; + +return ($function_name,$res); +} +sub plugin { +my ($input) = @_; + my %env; + +# my $input = new CGI; + my $index= $input->param('index'); + my $result= $input->param('result'); + + + my $dbh = C4::Context->dbh; + +my ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "value_builder/marc21_field_006.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {editcatalogue => 1}, + debug => 1, + }); + $result = "a|||||r|||| 00| 0 " unless $result; +# $result = "a r 00 0 " unless $result; + my $f0 = substr($result,0,1); + my $f014 = substr($result,1,4); + my $f5 = substr($result,5,1); + my $f6 = substr($result,6,1); + my $f710 = substr($result,7,4); + my $f11 = substr($result,11,1); + my $f12 = substr($result,12,1); + my $f13 = substr($result,13,1); + my $f14 = substr($result,14,1); + my $f15 = substr($result,15,1); + my $f16 = substr($result,16,1); + my $f17 = substr($result,17,1); + + $template->param( index => $index, + f0 => $f0, + "f0$f0" => $f0, + f014 => $f014, + "f014$f014" => $f014, + f5 => $f5, + "f5$f5" => $f5, + f6 => $f6, + "f6$f6" => $f6, + f710 => $f710, + "f710$f710" => $f710, + f11 => $f11, + "f11$f11" => $f11, + f12 => $f12, + "f12$f12" => $f12, + f13 => $f13, + "f13$f13" => $f13, + f14 => $f14, + "f14$f14" => $f14, + f15 => $f15, + "f15$f15" => $f15, + f16 => $f16, + "f16$f16" => $f16, + f17 => $f17, + "f17$f17" => $f17, + ); + print $input->header(-cookie => $cookie),$template->output; +} + +1; diff --git a/value_builder/marc21_field_007.pl b/value_builder/marc21_field_007.pl new file mode 100644 index 0000000000..0d01848229 --- /dev/null +++ b/value_builder/marc21_field_007.pl @@ -0,0 +1,95 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 C4::Auth; +use CGI; +use C4::Context; +use HTML::Template; +use C4::Search; +use C4::Output; + +=head1 + +plugin_parameters : other parameters added when the plugin is called by the dopop function + +=cut +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "100".(int(rand(100000))+1); +my $res=" + +"; + +return ($function_name,$res); +} +sub plugin { +my ($input) = @_; + my %env; + +# my $input = new CGI; + my $index= $input->param('index'); + my $result= $input->param('result'); + + + my $dbh = C4::Context->dbh; + +my ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "value_builder/marc21_field_007.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {editcatalogue => 1}, + debug => 1, + }); + $result = "ta" unless $result; + my $f0 = substr($result,0,1); + my $f1 = substr($result,1,4); + + $template->param( index => $index, + f0 => $f0, + "f0$f0" => $f0, + f1 => $f1, + "f1$f1" => $f1, + ); + print $input->header(-cookie => $cookie),$template->output; +} + +1; diff --git a/value_builder/marc21_field_008.pl b/value_builder/marc21_field_008.pl new file mode 100644 index 0000000000..c03b9467f5 --- /dev/null +++ b/value_builder/marc21_field_008.pl @@ -0,0 +1,154 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 C4::Auth; +use CGI; +use C4::Context; +use HTML::Template; +use C4::Search; +use C4::Output; + +=head1 + +plugin_parameters : other parameters added when the plugin is called by the dopop function + +=cut +# find today's date +my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); + +$year +=1900; $mon +=1; +my $dateentered = substr($year,2,2).sprintf ("%0.2d", $mon).sprintf ("%0.2d",$mday); +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "100".(int(rand(100000))+1); +my $res=" + +"; + +return ($function_name,$res); +} +sub plugin { +my ($input) = @_; + my %env; + +# my $input = new CGI; + my $index= $input->param('index'); + my $result= $input->param('result'); + + + my $dbh = C4::Context->dbh; + +my ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "value_builder/marc21_field_008.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {editcatalogue => 1}, + debug => 1, + }); +# $result = " t xxu 00 0 eng d" unless $result; + $result = "$dateentered"."t xxu||||| |||| 00| 0 ||| d" unless $result; + my $f1 = substr($result,0,6); + my $f6 = substr($result,6,1); + my $f710 = substr($result,7,4); + my $f1114 = substr($result,11,4); + my $f1517 = substr($result,15,3); + my $f1821 = substr($result,18,4); + my $f22 = substr($result,22,1); + my $f23 = substr($result,23,1); + my $f2427 = substr($result,24,4); + my $f28 = substr($result,28,1); + my $f29 = substr($result,29,1); + my $f30 = substr($result,30,1); + my $f31 = substr($result,31,1); + my $f33 = substr($result,33,1); + my $f34 = substr($result,34,1); + my $f3537 = substr($result,35,3); + my $f38 = substr($result,38,1); + my $f39 = substr($result,39,1); + +if (!$f1){ + $f1=$dateentered +} + + $template->param( index => $index, + f1 => $f1, + f6 => $f6, + "f6$f6" => $f6, + f710 => $f710, + f1114 => $f1114, + f1517 => $f1517, + f1821 => $f1821, + f22 => $f22, + "f22$f22" => $f22, + f23 => $f23, + "f23$f23" => $f23, + f2427 => $f2427, + "f24$f2427" => $f2427, + f28 => $f28, + "f28$f28" => $f28, + f29 => $f29, + "f29$f29" => $f29, + f30 => $f30, + "f230$f30" => $f30, + f31 => $f31, + "f31$f31" => $f31, + f33 => $f33, + "f33$f33" => $f33, + f34 => $f34, + "f34$f34" => $f34, + f3537 => $f3537, + f38 => $f38, + "f38$f38" => $f38, + f39 => $f39, + "f39$f39" => $f39, + ); + print $input->header(-cookie => $cookie),$template->output; +} + +1; diff --git a/value_builder/marc21_leader.pl b/value_builder/marc21_leader.pl index 73bf72b10a..e7e2fc78cc 100644 --- a/value_builder/marc21_leader.pl +++ b/value_builder/marc21_leader.pl @@ -23,9 +23,7 @@ use strict; use C4::Auth; use CGI; use C4::Context; -use HTML::Template; -use C4::Search; -use C4::Output; + =head1 @@ -46,7 +44,7 @@ function Focus$function_name(subfield_managed) { for (i=0 ; i @@ -86,7 +84,7 @@ my ($template, $loggedinuser, $cookie) flagsrequired => {editcatalogue => 1}, debug => 1, }); - $result = " nam " unless $result; + $result = " naa a22 7ar4500" unless $result; my $f5 = substr($result,5,1); my $f6 = substr($result,6,1); my $f7 = substr($result,7,1); diff --git a/value_builder/marc21_leader_authorities.pl b/value_builder/marc21_leader_authorities.pl new file mode 100644 index 0000000000..bca0779e38 --- /dev/null +++ b/value_builder/marc21_leader_authorities.pl @@ -0,0 +1,111 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 C4::Auth; +use CGI; +use C4::Context; +use HTML::Template; +use C4::Search; +use C4::Output; + +=head1 + +plugin_parameters : other parameters added when the plugin is called by the dopop function + +=cut +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "100".(int(rand(100000))+1); +my $res=" + +"; + +return ($function_name,$res); +} +sub plugin { +my ($input) = @_; + my %env; + +# my $input = new CGI; + my $index= $input->param('index'); + my $result= $input->param('result'); + + + my $dbh = C4::Context->dbh; + +my ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "value_builder/marc21_leader_authorities.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {editcatalogue => 1}, + debug => 1, + }); + $result = " nz||a22 o||4500" unless $result; + my $f5 = substr($result,5,1); + my $f6 = substr($result,6,1); + + + my $f9 = substr($result,9,1); + my $f17 = substr($result,17,1); + + + $template->param(index => $index, + "f5$f5" => 1, + "f6$f6" => 1, + + "f9$f9" => 1, + "f17$f17" => 1, + + + + ); + print $input->header(-cookie => $cookie),$template->output; +} + +1; diff --git a/value_builder/marc21_leader_holdings.pl b/value_builder/marc21_leader_holdings.pl new file mode 100644 index 0000000000..3e9f7e73c8 --- /dev/null +++ b/value_builder/marc21_leader_holdings.pl @@ -0,0 +1,111 @@ +#!/usr/bin/perl + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# 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 C4::Auth; +use CGI; +use C4::Context; +use HTML::Template; +use C4::Search; +use C4::Output; + +=head1 + +plugin_parameters : other parameters added when the plugin is called by the dopop function + +=cut +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "100".(int(rand(100000))+1); +my $res=" + +"; + +return ($function_name,$res); +} +sub plugin { +my ($input) = @_; + my %env; + +# my $input = new CGI; + my $index= $input->param('index'); + my $result= $input->param('result'); + + + my $dbh = C4::Context->dbh; + +my ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "value_builder/marc21_leader_holdings.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {editcatalogue => 1}, + debug => 1, + }); + $result = " nx||a22 1i|4500" unless $result; + my $f5 = substr($result,5,1); + my $f6 = substr($result,6,1); + + + my $f9 = substr($result,9,1); + my $f17 = substr($result,17,1); + my $f18 = substr($result,18,1); + + $template->param(index => $index, + "f5$f5" => 1, + "f6$f6" => 1, + + "f9$f9" => 1, + "f17$f17" => 1, + "f18$f18" => 1, + + + ); + print $input->header(-cookie => $cookie),$template->output; +} + +1; diff --git a/z3950/zebraqueue_start.pl b/z3950/zebraqueue_start.pl new file mode 100644 index 0000000000..5c9e880490 --- /dev/null +++ b/z3950/zebraqueue_start.pl @@ -0,0 +1,57 @@ +#!/usr/bin/perl +# script that starts the zebraquee +# Written by TG on 01/08/2006 +use strict; + + +use C4::Context; +use C4::Biblio; +use C4::AuthoritiesMarc; +use XML::Simple; +use utf8; +### ZEBRA SERVER UPDATER +##Uses its own database handle +my $dbh=C4::Context->dbh; +my $readsth=$dbh->prepare("select id,biblio_auth_number,operation,server from zebraqueue"); +my $delsth=$dbh->prepare("delete from zebraqueue where id =?"); + + +AGAIN: +my $wait=C4::Context->preference('zebrawait'); + $wait=120 unless $wait; +my ($id,$biblionumber,$operation,$server,$marcxml); +$readsth->execute; +while (($id,$biblionumber,$operation,$server)=$readsth->fetchrow){ +if ($server eq "biblioserver"){ + ($marcxml) =ZEBRA_readyXML($dbh,$biblionumber); + }elsif($server eq "authorityserver"){ + $marcxml =C4::AuthoritiesMarc::XMLgetauthority($dbh,$biblionumber); + } + +eval { +my $hashed=XMLin($marcxml); +}; ### is it a proper xml? broken xml may crash ZEBRA- slow but safe + +if ($@){ +warn $@; +## Broken XML-- Should not reach here-- but if it does -lets protect ZEBRA +$delsth->execute($id); +next; +} +my $ok; +eval{ + $ok=ZEBRAopserver($marcxml,$operation,$server); +}; + ## If a delete operation delete the SQL DB as well + if ($operation eq "recordDelete" && $ok==1){ + if ($server eq "biblioserver"){ + ZEBRAdelbiblio($dbh,$biblionumber); + }elsif ($server eq "authorityserver"){ + ZEBRAdelauthority($dbh,$biblionumber); + } + } +$delsth->execute($id) if ($ok==1); +} + +sleep $wait; +goto AGAIN; \ No newline at end of file diff --git a/z3950/zebraqueue_windows_start.pl b/z3950/zebraqueue_windows_start.pl new file mode 100644 index 0000000000..4cc963a59f --- /dev/null +++ b/z3950/zebraqueue_windows_start.pl @@ -0,0 +1,16 @@ +#!/usr/bin/perl +# script that starts the zebraquee +# Written by TG on 01/08/2006 +use strict; + +use Win32::Process; +use Win32; +use C4::Context; +use CGI; +my $input=new CGI; +my $fileplace=C4::Context->config('intranetdir'); +my $fullpath=$fileplace."/cgi-bin/z3950"; +my $ZebraObj; + my $pid=Win32::Process::Create($ZebraObj, "C:/usr/bin/perl.exe",'perl zebraqueue_start.pl', 0, DETACHED_PROCESS,$fullpath) ; + +print $input->redirect("/cgi-bin/koha/mainpage.pl?pid=$pid"); -- 2.39.2