From 154e383a1dad9dce939449dce50fd6bcad091dac Mon Sep 17 00:00:00 2001 From: Paul POULAIN Date: Tue, 16 Oct 2007 16:02:39 -0500 Subject: [PATCH] BUGfixing authorities editor With the YUI tabs, the SINGLETAB feature (that hides tabs when there is only 1) was bugguy This commit fixes the problem, and solve some other ones : - order the fields - resize the input size (see previous commit in addbiblio.pl) - remove some unused code - reindent Signed-off-by: Chris Cormack Signed-off-by: Joshua Ferraro --- C4/AuthoritiesMarc.pm | 2 +- authorities/authorities.pl | 381 ++++++++---------- authorities/detail.pl | 5 +- .../en/modules/authorities/authorities.tmpl | 183 +++++---- .../en/modules/cataloguing/addbiblio.tmpl | 11 +- 5 files changed, 278 insertions(+), 304 deletions(-) diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index 878a1e261f..d3af8c324c 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -417,7 +417,7 @@ sub GetTagsLabels { # check that authority exists - $sth=$dbh->prepare("select count(*) from auth_tag_structure where authtypecode=?"); + $sth=$dbh->prepare("SELECT count(*) FROM auth_tag_structure WHERE authtypecode=?"); $sth->execute($authtypecode); my ($total) = $sth->fetchrow; $authtypecode="" unless ($total >0); diff --git a/authorities/authorities.pl b/authorities/authorities.pl index b8f8943169..dc41e46c33 100755 --- a/authorities/authorities.pl +++ b/authorities/authorities.pl @@ -48,27 +48,27 @@ 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); + 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); } @@ -87,11 +87,11 @@ sub build_authorized_values_list ($$$$$$$) { #---- branch if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) { my $sth = - $dbh->prepare( + $dbh->prepare( "select branchcode,branchname from branches order by branchname"); $sth->execute; push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); + unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); while ( my ( $branchcode, $branchname ) = $sth->fetchrow_array ) { push @authorised_values, $branchcode; @@ -102,12 +102,12 @@ sub build_authorized_values_list ($$$$$$$) { } elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { my $sth = - $dbh->prepare( + $dbh->prepare( "select itemtype,description from itemtypes order by description"); $sth->execute; push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); - + unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); + my $itemtype; while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) { @@ -123,7 +123,7 @@ sub build_authorized_values_list ($$$$$$$) { $tagslib->{$tag}->{$subfield}->{authorised_value} ); push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); + unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { push @authorised_values, $value; @@ -146,7 +146,7 @@ sub build_authorized_values_list ($$$$$$$) { =item create_input - builds the entry for a subfield. +builds the entry for a subfield. =cut sub create_input { @@ -185,7 +185,7 @@ sub create_input { if($subfield eq '@'){ $subfield_data{id} = "tag_".$tag."_subfield_00_".$index_tag."_".$index_subfield; } else { - $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield; + $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield; } if(exists $mandatory_z3950->{$tag.$subfield}){ @@ -200,7 +200,7 @@ sub create_input { # it's an authorised field if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { $subfield_data{marc_value} = - build_authorized_values_list( $tag, $subfield, $value, $dbh, + build_authorized_values_list( $tag, $subfield, $value, $dbh, $authorised_values_sth,$index_tag,$index_subfield ); # it's a thesaurus / authority field @@ -210,12 +210,12 @@ sub create_input { " - + {$tag}->{$subfield}->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}')\">... "; # it's a plugin field @@ -235,17 +235,19 @@ sub create_input { # my ( $function_name, $javascript,$extended_param ); $subfield_data{marc_value} = - " - ... - $javascript"; + " + ... + $javascript"; # it's an hidden field } elsif ( $tag eq '' ) { @@ -254,6 +256,8 @@ sub create_input { type=\"hidden\" id=\"".$subfield_data{id}."\" name=\"".$subfield_data{id}."\" + size=\"67\" + maxlength=\"255\" value=\"$value\" \/> "; } @@ -264,6 +268,8 @@ sub create_input { name=\"".$subfield_data{id}."\" class=\"input_marceditor\" tabindex=\"1\" + size=\"67\" + maxlength=\"255\" value=\"$value\" \/>"; @@ -278,16 +284,18 @@ sub create_input { or ( $tag >= 500 and $tag < 600 && C4::Context->preference("marcflavour") eq "MARC21" ) - ) + ) { $subfield_data{marc_value} = " + rows=\"4\" + id=\"".$subfield_data{id}."\" + name=\"".$subfield_data{id}."\" + class=\"input_marceditor\" + tabindex=\"1\" + size=\"67\" + maxlength=\"255\" + >$value "; } else { @@ -297,6 +305,8 @@ sub create_input { name=\"".$subfield_data{id}."\" value=\"$value\" tabindex=\"1\" + size=\"67\" + maxlength=\"255\" class=\"input_marceditor\" \/> "; @@ -324,9 +334,9 @@ sub build_tabs ($$$$$) { my $tag; my $authorised_values_sth = $dbh->prepare( - "select authorised_value,lib - from authorised_values - where category=? order by lib" + "SELECT authorised_value,lib + FROM authorised_values + WHERE category=? ORDER BY lib" ); # in this array, we will push all the 10 tabs @@ -345,7 +355,7 @@ sub build_tabs ($$$$$) { for ( my $tabloop = 0 ; $tabloop <= $max_num_tab ; $tabloop++ ) { my @loop_data = (); #innerloop in the template. my $i = 0; - foreach my $tag (@tab_data) { + foreach my $tag (sort @tab_data) { $i++; next if ! $tag; my $indicator; @@ -355,13 +365,13 @@ sub build_tabs ($$$$$) { # 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(); # if tag == 000 - } - # loop through each field + if ( $tag ne '000' ) { + @fields = $record->field($tag); + } + else { + push @fields, $record->leader(); # if tag == 000 + } + # loop through each field foreach my $field (@fields) { my @subfields_data; @@ -376,9 +386,6 @@ sub build_tabs ($$$$$) { $subfield = '@'; } next if ( $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop ); - next - if ( $tagslib->{$tag}->{$subfield}->{kohafield} eq - 'biblio.biblionumber' ); push( @subfields_data, &create_input( @@ -411,9 +418,9 @@ sub build_tabs ($$$$$) { next if ( $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop ); next if ( $tag < 10 ); next - if ( ( $tagslib->{$tag}->{$subfield}->{hidden} <= -4 ) + if ( ( $tagslib->{$tag}->{$subfield}->{hidden} <= -4 ) or ( $tagslib->{$tag}->{$subfield}->{hidden} >= 5 ) - ); #check for visibility flag + ); #check for visibility flag next if ( defined( $field->subfield($subfield) ) ); push( @subfields_data, @@ -438,11 +445,11 @@ sub build_tabs ($$$$$) { random => CreateKey, ); if ($tag >= 010){ # no indicator for theses tag - $tag_data{indicator} = $field->indicator(1).$field->indicator(2); + $tag_data{indicator} = $field->indicator(1).$field->indicator(2); } push( @loop_data, \%tag_data ); } - } # foreach $field end + } # foreach $field end # if breeding is empty } @@ -450,12 +457,10 @@ sub build_tabs ($$$$$) { my @subfields_data; foreach my $subfield ( sort( keys %{ $tagslib->{$tag} } ) ) { next if ( length $subfield != 1 ); - next - if ( ( $tagslib->{$tag}->{$subfield}->{hidden} <= -5 ) - or ( $tagslib->{$tag}->{$subfield}->{hidden} >= 4 ) ) - ; #check for visibility flag - next - if ( $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop ); + next if ( ( $tagslib->{$tag}->{$subfield}->{hidden} <= -5 ) + or ( $tagslib->{$tag}->{$subfield}->{hidden} >= 4 ) ) + ; #check for visibility flag + next if ( $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop ); push( @subfields_data, &create_input( @@ -487,7 +492,7 @@ sub build_tabs ($$$$$) { }; } } - $template->param( singletab => (scalar(@BIG_LOOP)==1), BIG_LOOP => \@BIG_LOOP ); + $template->param( BIG_LOOP => \@BIG_LOOP ); } @@ -498,23 +503,23 @@ sub build_hidden_data () { my @loop_data =(); my $i=0; foreach my $tag (keys %{$tagslib}) { - my $previous_tag = ''; - - # loop through each subfield - foreach my $subfield (keys %{$tagslib->{$tag}}) { - next if ($subfield eq 'lib'); - next if ($subfield eq 'tab'); - next if ($subfield eq 'mandatory'); - next if ($subfield eq 'repeatable'); - next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "-1"); - my %subfield_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}=""; - push(@loop_data, \%subfield_data); - $i++ - } + my $previous_tag = ''; + + # loop through each subfield + foreach my $subfield (keys %{$tagslib->{$tag}}) { + next if ($subfield eq 'lib'); + next if ($subfield eq 'tab'); + next if ($subfield eq 'mandatory'); + next if ($subfield eq 'repeatable'); + next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "-1"); + my %subfield_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}=""; + push(@loop_data, \%subfield_data); + $i++ + } } } @@ -536,12 +541,12 @@ $authtypecode = &GetAuthTypeCode($authid) if !$authtypecode; my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "authorities/authorities.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {editauthorities => 1}, - debug => 1, - }); + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {editauthorities => 1}, + debug => 1, + }); $template->param(nonav => $nonav,index=>$myindex,authtypecode=>$authtypecode,); $tagslib = GetTagsLabels(1,$authtypecode); my $record=-1; @@ -551,126 +556,94 @@ my ($oldauthnumtagfield,$oldauthnumtagsubfield); my ($oldauthtypetagfield,$oldauthtypetagsubfield); $is_a_modif=0; if ($authid) { - $is_a_modif=1; - ($oldauthnumtagfield,$oldauthnumtagsubfield) = &GetAuthMARCFromKohaField("auth_header.authid",$authtypecode); - ($oldauthtypetagfield,$oldauthtypetagsubfield) = &GetAuthMARCFromKohaField("auth_header.authtypecode",$authtypecode); + $is_a_modif=1; + ($oldauthnumtagfield,$oldauthnumtagsubfield) = &GetAuthMARCFromKohaField("auth_header.authid",$authtypecode); + ($oldauthtypetagfield,$oldauthtypetagsubfield) = &GetAuthMARCFromKohaField("auth_header.authtypecode",$authtypecode); } #------------------------------------------------------------------------------------------------------------------------------ if ($op eq "add") { #------------------------------------------------------------------------------------------------------------------------------ - # rebuild - my @tags = $input->param('tag'); - my @subfields = $input->param('subfield'); - my @values = $input->param('field_value'); - # build indicator hash. - my @ind_tag = $input->param('ind_tag'); - my @indicator = $input->param('indicator'); - my @params = $input->param(); - my $record = TransformHtmlToMarc(\@params,$input); - if (C4::Context->preference("marcflavour") eq "UNIMARC"){ - unless ($record->field('100')){ - use POSIX qw(strftime); - my $string = strftime( "%Y%m%d", localtime(time) ); - # set 50 to position 26 is biblios, 13 if authorities - my $pos=13; - $string = sprintf( "%-*s", 35, $string ); - substr( $string, $pos , 2, "50" ); - $record->append_fields(MARC::Field->new('100','','',"a"=>$string)); - } - } - -# warn $record->as_formatted; -# my $record=MARC::Record->new_from_xml($xml,'UTF-8',(C4::Context->preference("marcflavour") eq "UNIMARC"?"UNIMARCAUTH":C4::Context->preference("marcflavour"))); -# $record->encoding('UTF-8'); - #warn $record->as_formatted; - # check for a duplicate - my ($duplicateauthid,$duplicateauthvalue) = FindDuplicateAuthority($record,$authtypecode) if ($op eq "add") && (!$is_a_modif); - 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 ) { + # rebuild + my @tags = $input->param('tag'); + my @subfields = $input->param('subfield'); + my @values = $input->param('field_value'); + # build indicator hash. + my @ind_tag = $input->param('ind_tag'); + my @indicator = $input->param('indicator'); + my @params = $input->param(); + my $record = TransformHtmlToMarc(\@params,$input); + if (C4::Context->preference("marcflavour") eq "UNIMARC"){ + unless ($record->field('100')){ + use POSIX qw(strftime); + my $string = strftime( "%Y%m%d", localtime(time) ); + # set 50 to position 26 is biblios, 13 if authorities + my $pos=13; + $string = sprintf( "%-*s", 35, $string ); + substr( $string, $pos , 2, "50" ); + $record->append_fields(MARC::Field->new('100','','',"a"=>$string)); + } + } + + my ($duplicateauthid,$duplicateauthvalue) = FindDuplicateAuthority($record,$authtypecode) if ($op eq "add") && (!$is_a_modif); + 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) { + if ($is_a_modif ) { ModAuthority($authid,$record,$authtypecode,1); - } else { + } else { ($authid) = AddAuthority($record,$authid,$authtypecode); - } - print $input->redirect("detail.pl?authid=$authid"); - exit; - } else { - # it may be a duplicate, warn the user and do nothing - build_tabs($template, $record, $dbh, $encoding,$input); - build_hidden_data; - $template->param(authid =>$authid, - duplicateauthid => $duplicateauthid, - duplicateauthvalue => $duplicateauthvalue, - ); - } -# #------------------------------------------------------------------------------------------------------------------------------ -# } 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'); -# # build indicator hash. -# my @ind_tag = $input->param('ind_tag'); -# my @indicator = $input->param('indicator'); -# my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag); -# my $record=MARC::Record->new_from_xml($xml,'UTF-8'); -# $record->encoding('UTF-8'); -# # adding an empty field -# my $field = MARC::Field->new("$addedfield",'','','$tagaddfield_subfield' => ""); -# $record->append_fields($field); -# build_tabs ($template, $record, $dbh,$encoding,$input); -# build_hidden_data; -# $template->param( -# authid => $authid,); -# + } + print $input->redirect("detail.pl?authid=$authid"); + exit; + } else { + # it may be a duplicate, warn the user and do nothing + build_tabs($template, $record, $dbh, $encoding,$input); + build_hidden_data; + $template->param(authid =>$authid, + duplicateauthid => $duplicateauthid, + duplicateauthvalue => $duplicateauthvalue, + ); + } } elsif ($op eq "delete") { #------------------------------------------------------------------------------------------------------------------------------ - &AUTHdelauthority($authid); - if ($nonav){ - print $input->redirect("auth_finder.pl"); - }else{ - print $input->redirect("authorities-home.pl?authid=0"); - } - exit; + &AUTHdelauthority($authid); + if ($nonav){ + print $input->redirect("auth_finder.pl"); + }else{ + print $input->redirect("authorities-home.pl?authid=0"); + } + exit; } else { if ($op eq "duplicate") - { - $authid = ""; - } - build_tabs ($template, $record, $dbh,$encoding,$input); - build_hidden_data; - $template->param(oldauthtypetagfield=>$oldauthtypetagfield, oldauthtypetagsubfield=>$oldauthtypetagsubfield, - oldauthnumtagfield=>$oldauthnumtagfield, oldauthnumtagsubfield=>$oldauthnumtagsubfield, - authid => $authid , authtypecode=>$authtypecode, ); + { + $authid = ""; + } + build_tabs ($template, $record, $dbh,$encoding,$input); + build_hidden_data; + $template->param(oldauthtypetagfield=>$oldauthtypetagfield, oldauthtypetagsubfield=>$oldauthtypetagsubfield, + oldauthnumtagfield=>$oldauthnumtagfield, oldauthnumtagsubfield=>$oldauthnumtagsubfield, + authid => $authid , authtypecode=>$authtypecode, ); } -$template->param( - authid => $authid, - authtypecode => $authtypecode, - linkid=>$linkid, - ); +$template->param(authid => $authid, + authtypecode => $authtypecode, + linkid=>$linkid, +); 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; + my $selected = 1 if $thisauthtype eq $authtypecode; + my %row =(value => $thisauthtype, + selected => $selected, + authtypetext => $authtypes->{$thisauthtype}{'authtypetext'}, + ); + push @authtypesloop, \%row; } $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"), - ); + authtypetext => $authtypes->{$authtypecode}{'authtypetext'}, + hide_marc => C4::Context->preference('hide_marc'), + ); output_html_with_http_headers $input, $cookie, $template->output; diff --git a/authorities/detail.pl b/authorities/detail.pl index 592c26b709..52df8dcba5 100755 --- a/authorities/detail.pl +++ b/authorities/detail.pl @@ -356,7 +356,7 @@ sub build_tabs ($$$$$) { for ( my $tabloop = 0 ; $tabloop <= $max_num_tab ; $tabloop++ ) { my @loop_data = (); #innerloop in the template. my $i = 0; - foreach my $tag (@tab_data) { + foreach my $tag (sort @tab_data) { $i++; next if ! $tag; my $indicator; @@ -423,8 +423,7 @@ sub build_tabs ($$$$$) { innerloop => \@loop_data, }; } - } - warn Data::Dumper::Dumper(@BIG_LOOP); + } $template->param( singletab => (scalar(@BIG_LOOP)==1), BIG_LOOP => \@BIG_LOOP ); } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tmpl index d293498365..af9bb264a3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tmpl @@ -410,7 +410,6 @@ function searchauthority() {
-
  • XX"> @@ -418,114 +417,112 @@ function searchauthority() { XX">
- - - - -
XX"> - -
XX"> - - - - - -
_"> -
- - "> - - _indicator_" - size="2" - maxlength="2" - value="" /> - - _indicator_" - size="2" - maxlength="2" - value="" /> - - + + +
XX"> - - _indicator_" - value="" /> - - _indicator_" - value="" /> - - - - - _')"> - - - _')">+ +
XX"> - -
- - - -
- - -
- - -
- -
+ + +
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tmpl index 92b668cb42..4e308faedc 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tmpl @@ -423,10 +423,15 @@ function unHideSubfield(index,labelindex) { // FIXME :: is it used ?
-

Duplicate Record?

+

Duplicate Record?

Is this a duplicate of " onclick="openWindow('../MARCdetail.pl?biblionumber=&popup=1', 'Duplicate biblio'; return false;)">?

-
" />
-
+
+ " /> + +
+
+ +
-- 2.39.5