X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=cataloguing%2Faddbiblio.pl;h=cb403968ae4207d17f8bc1757f86bf631924709f;hb=449fc4e168368cc3b1991152f32a2862b578a04c;hp=60f8e15ddea57c2880b3050063053c843ecd64c7;hpb=56d7ab5a19942d2f1adb3abfdcf39a883aea84a9;p=koha_fer diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 60f8e15dde..cb403968ae 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -39,6 +39,7 @@ use C4::Charset; use Date::Calc qw(Today); use MARC::File::USMARC; use MARC::File::XML; +use URI::Escape; if ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) { MARC::File::XML->default_record_format('UNIMARC'); @@ -93,9 +94,10 @@ sub MARCfindbreeding { return -1; } else { - # normalize author : probably UNIMARC specific... + # normalize author : UNIMARC specific... if ( C4::Context->preference("z3950NormalizeAuthor") - and C4::Context->preference("z3950AuthorAuthFields") ) + and C4::Context->preference("z3950AuthorAuthFields") + and C4::Context->preference("marcflavour") eq 'UNIMARC' ) { my ( $tag, $subfield ) = GetMarcFromKohaField("biblio.author", ''); @@ -159,7 +161,7 @@ sub MARCfindbreeding { =cut -sub build_authorized_values_list ($$$$$$$) { +sub build_authorized_values_list { my ( $tag, $subfield, $value, $dbh, $authorised_values_sth,$index_tag,$index_subfield ) = @_; my @authorised_values; @@ -170,7 +172,7 @@ sub build_authorized_values_list ($$$$$$$) { #---- branch if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) { #Use GetBranches($onlymine) - my $onlymine=C4::Context->preference('IndependantBranches') && + my $onlymine=C4::Context->preference('IndependentBranches') && C4::Context->userenv && C4::Context->userenv->{flags} % 2 == 0 && C4::Context->userenv->{branch}; @@ -215,14 +217,15 @@ sub build_authorized_values_list ($$$$$$$) { ($class_source eq $default_source); push @authorised_values, $class_source; $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; - $value = $class_source unless ($value); - $value = $default_source unless ($value); } - #---- "true" authorised value + $value = $default_source unless $value; } else { + my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : ""; $authorised_values_sth->execute( - $tagslib->{$tag}->{$subfield}->{authorised_value} ); + $tagslib->{$tag}->{$subfield}->{authorised_value}, + $branch_limit ? $branch_limit : (), + ); push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); @@ -232,6 +235,7 @@ sub build_authorized_values_list ($$$$$$$) { $authorised_lib{$value} = $lib; } } + $authorised_values_sth->finish; return CGI::scrolling_list( -name => "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield, -values => \@authorised_values, @@ -252,7 +256,7 @@ sub build_authorized_values_list ($$$$$$$) { =cut -sub CreateKey(){ +sub CreateKey { return int(rand(1000000)); } @@ -263,7 +267,7 @@ sub CreateKey(){ =cut -sub GetMandatoryFieldZ3950($){ +sub GetMandatoryFieldZ3950 { my $frameworkcode = shift; my @isbn = GetMarcFromKohaField('biblioitems.isbn',$frameworkcode); my @title = GetMarcFromKohaField('biblio.title',$frameworkcode); @@ -293,14 +297,6 @@ sub create_input { $value =~ s/"/"/g; - # determine maximum length; 9999 bytes per ISO 2709 except for leader and MARC21 008 - my $max_length = 9999; - if ($tag eq '000') { - $max_length = 24; - } elsif ($tag eq '008' and C4::Context->preference('marcflavour') eq 'MARC21') { - $max_length = 40; - } - # if there is no value provided but a default value in parameters, get it if ( $value eq '' ) { $value = $tagslib->{$tag}->{$subfield}->{defaultvalue}; @@ -335,20 +331,25 @@ sub create_input { index => $index_tag, id => "tag_".$tag."_subfield_".$id_subfield."_".$index_tag."_".$index_subfield, value => $value, + maxlength => $tagslib->{$tag}->{$subfield}->{maxlength}, random => CreateKey(), ); if(exists $mandatory_z3950->{$tag.$subfield}){ $subfield_data{z3950_mandatory} = $mandatory_z3950->{$tag.$subfield}; } - # decide if the subfield must be expanded (visible) by default or not - # if it is mandatory, then expand. If it is hidden explicitly by the hidden flag, hidden anyway + # Subfield is hidden depending of hidden and mandatory flag, and is always + # shown if it contains anything or if its field is mandatory. + my $tdef = $tagslib->{$tag}; $subfield_data{visibility} = "display:none;" - if ( ($tagslib->{$tag}->{$subfield}->{hidden} % 2 == 1) and $value ne '' - or ($value eq '' and !$tagslib->{$tag}->{$subfield}->{mandatory}) - ); - # always expand all subfields of a mandatory field - $subfield_data{visibility} = "" if $tagslib->{$tag}->{mandatory}; + if $tdef->{$subfield}->{hidden} % 2 == 1 && + $value eq '' && + !$tdef->{$subfield}->{mandatory} && + !$tdef->{mandatory}; + # expand all subfields of 773 if there is a host item provided in the input + $subfield_data{visibility} ="" if ($tag eq 773 and $cgi->param('hostitemnumber')); + + # it's an authorised field if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { $subfield_data{marc_value} = @@ -370,28 +371,15 @@ sub create_input { class=\"input_marceditor readonly\" tabindex=\"1\" size=\"5\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" readonly=\"readonly\" \/>"; # it's a thesaurus / authority field } elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) { - if (C4::Context->preference("BiblioAddsAuthorities")) { - $subfield_data{marc_value} = - " - {$tag}->{$subfield}->{authtypecode}."'); return false;\" tabindex=\"1\" title=\"Tag Editor\">... - "; - } else { + # when authorities auto-creation is allowed, do not set readonly + my $is_readonly = !C4::Context->preference("BiblioAddsAuthorities"); $subfield_data{marc_value} = "{$tag}->{$subfield}->{authtypecode}."'); return false;\" tabindex=\"1\" title=\"Tag Editor\">... + maxlength=\"".$subfield_data{maxlength}."\"". + ($is_readonly ? "readonly=\"readonly\"" : ""). + "\/> + {$tag}->{$subfield}->{authtypecode}."','biblio'); return false;\" tabindex=\"1\">Tag editor "; - } # it's a plugin field } elsif ( $tagslib->{$tag}->{$subfield}->{'value_builder'} ) { - # opening plugin. Just check wether we are on a developper computer on a production one + # opening plugin. Just check whether we are on a developer computer on a production one # (the cgidir differs) my $cgidir = C4::Context->intranetdir . "/cgi-bin/cataloguing/value_builder"; unless ( opendir( DIR, "$cgidir" ) ) { @@ -431,9 +419,9 @@ sub create_input { class=\"input_marceditor\" onfocus=\"Focus$function_name($index_tag)\" size=\"67\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" onblur=\"Blur$function_name($index_tag); \" \/> - ... + Tag editor $javascript"; } else { warn "Plugin Failed: $plugin"; @@ -445,7 +433,7 @@ sub create_input { value=\"$value\" tabindex=\"1\" size=\"67\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" class=\"input_marceditor\" \/> "; @@ -459,25 +447,12 @@ sub create_input { id=\"".$subfield_data{id}."\" name=\"".$subfield_data{id}."\" size=\"67\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" value=\"$value\" \/> "; } - elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { - $subfield_data{marc_value} = - ""; - - # it's a standard field - } else { + # it's a standard field if ( length($value) > 100 or @@ -506,7 +481,7 @@ sub create_input { value=\"$value\" tabindex=\"1\" size=\"67\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" class=\"input_marceditor\" \/> "; @@ -532,19 +507,22 @@ sub format_indicator { return $ind_value; } -sub build_tabs ($$$$$) { +sub build_tabs { my ( $template, $record, $dbh, $encoding,$input ) = @_; # fill arrays my @loop_data = (); my $tag; - my $authorised_values_sth = $dbh->prepare( - "select authorised_value,lib - from authorised_values - where category=? order by lib" - ); - + my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : ""; + my $query = "SELECT authorised_value, lib + FROM authorised_values"; + $query .= qq{ LEFT JOIN authorised_values_branches ON ( id = av_id )} if $branch_limit; + $query .= " WHERE category = ?"; + $query .= " AND ( branchcode = ? OR branchcode IS NULL )" if $branch_limit; + $query .= " GROUP BY lib ORDER BY lib, lib_opac"; + my $authorised_values_sth = $dbh->prepare( $query ); + # in this array, we will push all the 10 tabs # to avoid having 10 tabs in the template : they will all be in the same BIG_LOOP my @BIG_LOOP; @@ -696,7 +674,7 @@ sub build_tabs ($$$$$) { # always include in the form regardless of the hidden setting - bug 2206 next if ( $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop ); - push( + push( @subfields_data, &create_input( $tag, $subfield, '', $index_tag, $tabloop, $record, @@ -729,121 +707,47 @@ sub build_tabs ($$$$$) { }; } } + $authorised_values_sth->finish; $template->param( BIG_LOOP => \@BIG_LOOP ); } -# -# sub that tries to find authorities linked to the biblio -# the sub : -# - search in the authority DB for the same authid (in $9 of the biblio) -# - search in the authority DB for the same 001 (in $3 of the biblio in UNIMARC) -# - search in the authority DB for the same values (exactly) (in all subfields of the biblio) -# if the authority is found, the biblio is modified accordingly to be connected to the authority. -# if the authority is not found, it's added, and the biblio is then modified to be connected to the authority. -# - -sub BiblioAddAuthorities{ - my ( $record, $frameworkcode ) = @_; - my $dbh=C4::Context->dbh; - my $query=$dbh->prepare(qq| -SELECT authtypecode,tagfield -FROM marc_subfield_structure -WHERE frameworkcode=? -AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|); -# SELECT authtypecode,tagfield -# FROM marc_subfield_structure -# WHERE frameworkcode=? -# AND (authtypecode IS NOT NULL OR authtypecode<>\"\")|); - $query->execute($frameworkcode); - my ($countcreated,$countlinked); - while (my $data=$query->fetchrow_hashref){ - foreach my $field ($record->field($data->{tagfield})){ - next if ($field->subfield('9')); - # No authorities id in the tag. - # Search if there is any authorities to link to. - my $query='at='.$data->{authtypecode}.' '; - map {$query.= ' and he,ext="'.$_->[1].'"' if ($_->[0]=~/[A-z]/)} $field->subfields(); - my ($error, $results, $total_hits)=SimpleSearch( $query, undef, undef, [ "authorityserver" ] ); - # there is only 1 result - if ( $error ) { - warn "BIBLIOADDSAUTHORITIES: $error"; - return (0,0) ; - } - if ($results && scalar(@$results)==1) { - my $marcrecord = MARC::File::USMARC::decode($results->[0]); - $field->add_subfields('9'=>$marcrecord->field('001')->data); - $countlinked++; - } elsif (scalar(@$results)>1) { - #More than One result - #This can comes out of a lack of a subfield. -# my $marcrecord = MARC::File::USMARC::decode($results->[0]); -# $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data); - $countlinked++; - } else { - #There are no results, build authority record, add it to Authorities, get authid and add it to 9 - ###NOTICE : This is only valid if a subfield is linked to one and only one authtypecode - ###NOTICE : This can be a problem. We should also look into other types and rejected forms. - my $authtypedata=GetAuthType($data->{authtypecode}); - next unless $authtypedata; - my $marcrecordauth=MARC::Record->new(); - if (C4::Context->preference('marcflavour') eq 'MARC21') { - $marcrecordauth->leader(' nz a22 o 4500'); - SetMarcUnicodeFlag($marcrecordauth, 'MARC21'); - } - my $authfield=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$field->subfield('a')); - map { $authfield->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )} $field->subfields(); - $marcrecordauth->insert_fields_ordered($authfield); - - # bug 2317: ensure new authority knows it's using UTF-8; currently - # only need to do this for MARC21, as MARC::Record->as_xml_record() handles - # automatically for UNIMARC (by not transcoding) - # FIXME: AddAuthority() instead should simply explicitly require that the MARC::Record - # use UTF-8, but as of 2008-08-05, did not want to introduce that kind - # of change to a core API just before the 3.0 release. - - if (C4::Context->preference('marcflavour') eq 'MARC21') { - $marcrecordauth->insert_fields_ordered(MARC::Field->new('667','','','a'=>"Machine generated authority record.")); - my $cite = $record->author() . ", " . $record->title_proper() . ", " . $record->publication_date() . " "; - $cite =~ s/^[\s\,]*//; - $cite =~ s/[\s\,]*$//; - $cite = "Work cat.: (" . C4::Context->preference('MARCOrgCode') . ")". $record->subfield('999','c') . ": " . $cite; - $marcrecordauth->insert_fields_ordered(MARC::Field->new('670','','','a'=>$cite)); - } - -# warn "AUTH RECORD ADDED : ".$marcrecordauth->as_formatted; - - my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode}); - $countcreated++; - $field->add_subfields('9'=>$authid); - } - } - } - return ($countlinked,$countcreated); -} - # ======================== # MAIN #========================= my $input = new CGI; my $error = $input->param('error'); my $biblionumber = $input->param('biblionumber'); # if biblionumber exists, it's a modif, not a new biblio. +my $parentbiblio = $input->param('parentbiblionumber'); my $breedingid = $input->param('breedingid'); my $z3950 = $input->param('z3950'); my $op = $input->param('op'); my $mode = $input->param('mode'); my $frameworkcode = $input->param('frameworkcode'); my $redirect = $input->param('redirect'); +my $searchid = $input->param('searchid'); my $dbh = C4::Context->dbh; +my $hostbiblionumber = $input->param('hostbiblionumber'); +my $hostitemnumber = $input->param('hostitemnumber'); +# fast cataloguing datas in transit +my $fa_circborrowernumber = $input->param('circborrowernumber'); +my $fa_barcode = $input->param('barcode'); +my $fa_branch = $input->param('branch'); +my $fa_stickyduedate = $input->param('stickyduedate'); +my $fa_duedatespec = $input->param('duedatespec'); + +my $userflags = 'edit_catalogue'; +if ($frameworkcode eq 'FA'){ + $userflags = 'fast_cataloging'; +} -my $userflags = ($frameworkcode eq 'FA') ? "fast_cataloging" : "edit_catalogue"; - +my $changed_framework = $input->param('changed_framework'); $frameworkcode = &GetFrameworkCode($biblionumber) - if ( $biblionumber and not($frameworkcode) ); + if ( $biblionumber and not($frameworkcode) and $op ne 'addbiblio' ); $frameworkcode = '' if ( $frameworkcode eq 'Default' ); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "cataloguing/addbiblio.tmpl", + template_name => "cataloguing/addbiblio.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -851,6 +755,17 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); +if ($frameworkcode eq 'FA'){ + # We need to grab and set some variables in the template for use on the additems screen + $template->param( + 'circborrowernumber' => $fa_circborrowernumber, + 'barcode' => $fa_barcode, + 'branch' => $fa_branch, + 'stickyduedate' => $fa_stickyduedate, + 'duedatespec' => $fa_duedatespec, + ); +} + # Getting the list of all frameworks # get framework list my $frameworks = getframeworks; @@ -861,7 +776,7 @@ foreach my $thisframeworkcode ( keys %$frameworks ) { frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'}, ); if ($frameworkcode eq $thisframeworkcode){ - $row{'selected'}="selected=\"selected\""; + $row{'selected'} = 1; } push @frameworkcodeloop, \%row; } @@ -892,6 +807,26 @@ if ($breedingid) { ( $record, $encoding ) = MARCfindbreeding( $breedingid ) ; } +#populate hostfield if hostbiblionumber is available +if ($hostbiblionumber) { + my $marcflavour = C4::Context->preference("marcflavour"); + $record = MARC::Record->new(); + $record->leader(''); + my $field = + PrepHostMarcField( $hostbiblionumber, $hostitemnumber, $marcflavour ); + $record->append_fields($field); +} + +# This is a child record +if ($parentbiblio) { + my $marcflavour = C4::Context->preference('marcflavour'); + $record = MARC::Record->new(); + my $hostfield = prepare_host_field($parentbiblio,$marcflavour); + if ($hostfield) { + $record->append_fields($hostfield); + } +} + $is_a_modif = 0; if ($biblionumber) { @@ -913,18 +848,24 @@ if ($biblionumber) { #------------------------------------------------------------------------------------- if ( $op eq "addbiblio" ) { #------------------------------------------------------------------------------------- + $template->param( + biblionumberdata => $biblionumber, + ); # getting html input my @params = $input->param(); - $record = TransformHtmlToMarc( \@params , $input ); + $record = TransformHtmlToMarc( $input ); # check for a duplicate - my ($duplicatebiblionumber,$duplicatetitle) = FindDuplicate($record) if (!$is_a_modif); + my ( $duplicatebiblionumber, $duplicatetitle ); + if ( !$is_a_modif ) { + ( $duplicatebiblionumber, $duplicatetitle ) = FindDuplicate($record); + } 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 ( !$duplicatebiblionumber or $confirm_not_duplicate ) { my $oldbibnum; my $oldbibitemnum; if (C4::Context->preference("BiblioAddsAuthorities")){ - my ($countlinked,$countcreated)=BiblioAddAuthorities($record,$frameworkcode); + my ($countlinked,$countcreated)=BiblioAutoLink($record,$frameworkcode); } if ( $is_a_modif ) { ModBiblioframework( $biblionumber, $frameworkcode ); @@ -933,27 +874,47 @@ if ( $op eq "addbiblio" ) { else { ( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode ); } - if ($redirect eq "items" || ($mode ne "popup" && !$is_a_modif && $redirect ne "view")){ - print $input->redirect( - "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode" - ); - exit; + if ($redirect eq "items" || ($mode ne "popup" && !$is_a_modif && $redirect ne "view" && $redirect ne "just_save")){ + if ($frameworkcode eq 'FA'){ + print $input->redirect( + '/cgi-bin/koha/cataloguing/additem.pl?' + .'biblionumber='.$biblionumber + .'&frameworkcode='.$frameworkcode + .'&circborrowernumber='.$fa_circborrowernumber + .'&branch='.$fa_branch + .'&barcode='.uri_escape($fa_barcode) + .'&stickyduedate='.$fa_stickyduedate + .'&duedatespec='.$fa_duedatespec + ); + exit; + } + else { + print $input->redirect( + "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid" + ); + exit; + } } - elsif($is_a_modif || $redirect eq "view"){ + elsif(($is_a_modif || $redirect eq "view") && $redirect ne "just_save"){ my $defaultview = C4::Context->preference('IntranetBiblioDefaultView'); my $views = { C4::Search::enabled_staff_search_views }; if ($defaultview eq 'isbd' && $views->{can_view_ISBD}) { - print $input->redirect("/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=$biblionumber"); + print $input->redirect("/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=$biblionumber&searchid=$searchid"); } elsif ($defaultview eq 'marc' && $views->{can_view_MARC}) { - print $input->redirect("/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"); + print $input->redirect("/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid"); } elsif ($defaultview eq 'labeled_marc' && $views->{can_view_labeledMARC}) { - print $input->redirect("/cgi-bin/koha/catalogue/labeledMARCdetail.pl?biblionumber=$biblionumber"); + print $input->redirect("/cgi-bin/koha/catalogue/labeledMARCdetail.pl?biblionumber=$biblionumber&searchid=$searchid"); } else { - print $input->redirect("/cgi-bin/koha/catalogue/detail.pl?biblionumber=$biblionumber"); + print $input->redirect("/cgi-bin/koha/catalogue/detail.pl?biblionumber=$biblionumber&searchid=$searchid"); } exit; - }else { + } + elsif ($redirect eq "just_save"){ + my $tab = $input->param('current_tab'); + print $input->redirect("/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=$biblionumber&framework=$frameworkcode&tab=$tab&searchid=$searchid"); + } + else { $template->param( biblionumber => $biblionumber, done =>1, @@ -996,18 +957,27 @@ elsif ( $op eq "delete" ) { #---------------------------------------------------------------------------- # If we're in a duplication case, we have to set to "" the biblionumber # as we'll save the biblio as a new one. + $template->param( + biblionumberdata => $biblionumber, + op => $op, + ); if ( $op eq "duplicate" ) { $biblionumber = ""; } + if($changed_framework eq "changed"){ + $record = TransformHtmlToMarc( $input ); + } + elsif( $record ne -1 ) { #FIXME: it's kind of silly to go from MARC::Record to MARC::File::XML and then back again just to fix the encoding - eval { - my $uxml = $record->as_xml; - MARC::Record::default_record_format("UNIMARC") - if ( C4::Context->preference("marcflavour") eq "UNIMARC" ); - my $urecord = MARC::Record::new_from_xml( $uxml, 'UTF-8' ); - $record = $urecord; - }; + eval { + my $uxml = $record->as_xml; + MARC::Record::default_record_format("UNIMARC") + if ( C4::Context->preference("marcflavour") eq "UNIMARC" ); + my $urecord = MARC::Record::new_from_xml( $uxml, 'UTF-8' ); + $record = $urecord; + }; + } build_tabs( $template, $record, $dbh, $encoding,$input ); $template->param( biblionumber => $biblionumber, @@ -1016,17 +986,19 @@ elsif ( $op eq "delete" ) { biblioitemnumtagfield => $biblioitemnumtagfield, biblioitemnumtagsubfield => $biblioitemnumtagsubfield, biblioitemnumber => $biblioitemnumber, + hostbiblionumber => $hostbiblionumber, + hostitemnumber => $hostitemnumber ); } $template->param( title => $record->title() ) if ( $record ne "-1" ); -if (C4::Context->preference("marcflavour") eq "MARC21"){ - $template->param(MARC21 => 1); -} $template->param( popup => $mode, frameworkcode => $frameworkcode, itemtype => $frameworkcode, + borrowernumber => $loggedinuser, + tab => $input->param('tab') ); +$template->{'VARS'}->{'searchid'} = $searchid; output_html_with_http_headers $input, $cookie, $template->output;