X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=admin%2Fmarctagstructure.pl;h=92e0d99b196869e25cc2e6825c32638e50e9c31c;hb=0a2b32675f9672c02d2a9c1ab47b5ae88f41e363;hp=5c805eaf491c12fcfa8200c073170f9cdb42d5e7;hpb=6ffc27d72f9d123a964bbdb8813791618c1dafce;p=koha.git diff --git a/admin/marctagstructure.pl b/admin/marctagstructure.pl index 5c805eaf49..92e0d99b19 100755 --- a/admin/marctagstructure.pl +++ b/admin/marctagstructure.pl @@ -14,43 +14,41 @@ # 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 +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. use strict; +use warnings; use CGI; use C4::Auth; use C4::Koha; use C4::Context; use C4::Output; -use C4::Interface::CGI::Output; -use C4::Search; use C4::Context; -use HTML::Template; + # retrieve parameters my $input = new CGI; -my $frameworkcode = $input->param('frameworkcode'); # set to select framework -$frameworkcode="" unless $frameworkcode; -my $existingframeworkcode = $input->param('existingframeworkcode'); # set when we have to create a new framework (in frameworkcode) by copying an old one (in existingframeworkcode) -$existingframeworkcode = "" unless $existingframeworkcode; +my $frameworkcode = $input->param('frameworkcode') || ''; # set to select framework +my $existingframeworkcode = $input->param('existingframeworkcode') || ''; +my $searchfield = $input->param('searchfield') || 0; +# set when we have to create a new framework (in frameworkcode) by copying an old one (in existingframeworkcode) my $frameworkinfo = getframeworkinfo($frameworkcode); -my $searchfield=$input->param('searchfield'); -$searchfield=0 unless $searchfield; $searchfield=~ s/\,//g; -my $offset=$input->param('offset'); -my $op = $input->param('op'); -my $pagesize=20; +my $offset = $input->param('offset') || 0; +my $op = $input->param('op') || ''; +my $dspchoice = $input->param('select_display'); +my $pagesize = 20; -my $script_name="/cgi-bin/koha/admin/marctagstructure.pl"; +my $script_name = "/cgi-bin/koha/admin/marctagstructure.pl"; my $dbh = C4::Context->dbh; # open template my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "parameters/marctagstructure.tmpl", + = get_template_and_user({template_name => "admin/marctagstructure.tmpl", query => $input, type => "intranet", authnotrequired => 0, @@ -62,39 +60,34 @@ my ($template, $loggedinuser, $cookie) my $frameworks = getframeworks(); my @frameworkloop; foreach my $thisframeworkcode (keys %$frameworks) { - my $selected = 1 if $thisframeworkcode eq $frameworkcode; - my %row =(value => $thisframeworkcode, - selected => $selected, - frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'}, - ); - push @frameworkloop, \%row; + push @frameworkloop, { + value => $thisframeworkcode, + selected => ($thisframeworkcode eq $frameworkcode) ? 1 : 0, + frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'}, + }; } # check that framework is defined in marc_tag_structure my $sth=$dbh->prepare("select count(*) from marc_tag_structure where frameworkcode=?"); $sth->execute($frameworkcode); my ($frameworkexist) = $sth->fetchrow; -if ($frameworkexist) { -} else { +unless ($frameworkexist) { # if frameworkcode does not exists, then OP must be changed to "create framework" if we are not on the way to create it # (op = itemtyp_create_confirm) if ($op eq "framework_create_confirm") { duplicate_framework($frameworkcode, $existingframeworkcode); - $op=""; # unset $op to go back to framework list + $op = ""; # unset $op to go back to framework list } else { $op = "framework_create"; } } -$template->param(frameworkloop => \@frameworkloop, - frameworkcode => $frameworkcode, - frameworktext => $frameworkinfo->{frameworktext}); -if ($op) { -$template->param(script_name => $script_name, - $op => 1); # we show only the TMPL_VAR names $op -} else { -$template->param(script_name => $script_name, - else => 1); # we show only the TMPL_VAR names $op -} +$template->param( + frameworkloop => \@frameworkloop, + frameworkcode => $frameworkcode, + frameworktext => $frameworkinfo->{frameworktext}, + script_name => $script_name, + ($op||'else') => 1, +); ################## ADD_FORM ################################## @@ -106,7 +99,6 @@ if ($op eq 'add_form') { $sth=$dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value from marc_tag_structure where tagfield=? and frameworkcode=?"); $sth->execute($searchfield,$frameworkcode); $data=$sth->fetchrow_hashref; - $sth->finish; } my $sth = $dbh->prepare("select distinct category from authorised_values"); $sth->execute; @@ -118,71 +110,100 @@ if ($op eq 'add_form') { my $authorised_value = CGI::scrolling_list(-name=>'authorised_value', -values=> \@authorised_values, -size=>1, + -id=>"authorised_value", -multiple=>0, -default => $data->{'authorised_value'}, ); if ($searchfield) { - $template->param(action => "Modify tag", - searchfield => "$searchfield"); - $template->param('heading-modify-tag-p' => 1); + $template->param(searchfield => $searchfield); + $template->param(action => "Modify tag"); + $template->param('heading_modify_tag_p' => 1); } else { - $template->param(action => "Add tag", - searchfield => ""); - $template->param('heading-add-tag-p' => 1); + $template->param(action => "Add tag"); + $template->param('heading_add_tag_p' => 1); } - $template->param('use-heading-flags-p' => 1); + $template->param('use_heading_flags_p' => 1); $template->param(liblibrarian => $data->{'liblibrarian'}, - libopac => $data->{'libopac'}, - repeatable => CGI::checkbox('repeatable',$data->{'repeatable'}?'checked':'',1,''), - mandatory => CGI::checkbox('mandatory',$data->{'mandatory'}?'checked':'',1,''), - authorised_value => $authorised_value, - frameworkcode => $frameworkcode, - ); + libopac => $data->{'libopac'}, + repeatable => CGI::checkbox(-name=>'repeatable', + -checked=> $data->{'repeatable'}?'checked':'', + -value=> 1, + -label => '', + -id=> 'repeatable'), + mandatory => CGI::checkbox(-name => 'mandatory', + -checked => $data->{'mandatory'}?'checked':'', + -value => 1, + -label => '', + -id => 'mandatory'), + authorised_value => $authorised_value, + frameworkcode => $frameworkcode, + ); # FIXME: move checkboxes to presentation layer # END $OP eq ADD_FORM ################## ADD_VALIDATE ################################## # called by add_form, used to insert/modify data in DB } elsif ($op eq 'add_validate') { - $sth=$dbh->prepare("replace marc_tag_structure (tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value,frameworkcode) values (?,?,?,?,?,?,?)"); - my $tagfield =$input->param('tagfield'); - my $liblibrarian = $input->param('liblibrarian'); - my $libopac =$input->param('libopac'); - my $repeatable =$input->param('repeatable'); - my $mandatory =$input->param('mandatory'); - my $authorised_value =$input->param('authorised_value'); - unless (C4::Context->config('demo') eq 1) { - $sth->execute($tagfield, - $liblibrarian, - $libopac, - $repeatable?1:0, - $mandatory?1:0, - $authorised_value, - $frameworkcode - ); + my $tagfield = $input->param('tagfield'); + my $liblibrarian = $input->param('liblibrarian'); + my $libopac = $input->param('libopac'); + my $repeatable = $input->param('repeatable') ? 1 : 0; + my $mandatory = $input->param('mandatory') ? 1 : 0; + my $authorised_value = $input->param('authorised_value'); + unless (C4::Context->config('demo') == 1) { + if ($input->param('modif')) { + $sth = $dbh->prepare( + "UPDATE marc_tag_structure SET liblibrarian=? ,libopac=? ,repeatable=? ,mandatory=? ,authorised_value=? WHERE frameworkcode=? AND tagfield=?" + ); + $sth->execute( $liblibrarian, + $libopac, + $repeatable, + $mandatory, + $authorised_value, + $frameworkcode, + $tagfield + ); + } else { + $sth = $dbh->prepare( + "INSERT INTO marc_tag_structure (tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value,frameworkcode) values (?,?,?,?,?,?,?)" + ); + $sth->execute($tagfield, + $liblibrarian, + $libopac, + $repeatable, + $mandatory, + $authorised_value, + $frameworkcode + ); + } } - $sth->finish; - print "Content-Type: text/html\n\n"; + print $input->redirect("/cgi-bin/koha/admin/marctagstructure.pl?searchfield=$tagfield&frameworkcode=$frameworkcode"); exit; # END $OP eq ADD_VALIDATE ################## DELETE_CONFIRM ################################## # called by default form, used to confirm deletion of data in DB } elsif ($op eq 'delete_confirm') { $sth=$dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value from marc_tag_structure where tagfield=? and frameworkcode=?"); - $sth->execute($searchfield,$frameworkcode); - my $data=$sth->fetchrow_hashref; - $sth->finish; - $template->param(liblibrarian => $data->{'liblibrarian'}, - searchfield => $searchfield, - frameworkcode => $frameworkcode, - ); + $sth->execute($searchfield, $frameworkcode); + my $data = $sth->fetchrow_hashref; + $template->param( + liblibrarian => $data->{'liblibrarian'}, + searchfield => $searchfield, + frameworkcode => $frameworkcode, + ); # END $OP eq DELETE_CONFIRM ################## DELETE_CONFIRMED ################################## # called by delete_confirm, used to effectively confirm deletion of data in DB } elsif ($op eq 'delete_confirmed') { - unless (C4::Context->config('demo') eq 1) { - $dbh->do("delete from marc_tag_structure where tagfield='$searchfield' and frameworkcode='$frameworkcode'"); - $dbh->do("delete from marc_subfield_structure where tagfield='$searchfield' and frameworkcode='$frameworkcode'"); + unless (C4::Context->config('demo') == 1) { + my $sth1 = $dbh->prepare("DELETE FROM marc_tag_structure WHERE tagfield=? AND frameworkcode=?"); + my $sth2 = $dbh->prepare("DELETE FROM marc_subfield_structure WHERE tagfield=? AND frameworkcode=?"); + $sth1->execute($searchfield, $frameworkcode); + $sth2->execute($searchfield, $frameworkcode); } + $template->param( + searchfield => $searchfield, + frameworkcode => $frameworkcode, + ); # END $OP eq DELETE_CONFIRMED ################## ITEMTYPE_CREATE ################################## # called automatically if an unexisting frameworkis selected @@ -192,10 +213,10 @@ if ($op eq 'add_form') { my @existingframeworkloop; while (my ($tot,$thisframeworkcode,$frameworktext) = $sth->fetchrow) { if ($tot>0) { - my %line = ( value => $thisframeworkcode, - frameworktext => $frameworktext, - ); - push @existingframeworkloop,\%line; + push @existingframeworkloop, { + value => $thisframeworkcode, + frameworktext => $frameworktext, + }; } } $template->param(existingframeworkloop => \@existingframeworkloop, @@ -205,44 +226,98 @@ if ($op eq 'add_form') { ################## DEFAULT ################################## } else { # DEFAULT # here, $op can be unset or set to "framework_create_confirm". - if ($searchfield ne '') { - $template->param(searchfield => $searchfield); - } - my $env; - my ($count,$results)=StringSearch($env,$searchfield,$frameworkcode); - my $toggle="white"; - my @loop_data = (); - for (my $i=$offset; $i < ($offset+$pagesize<$count?$offset+$pagesize:$count); $i++){ - if ($toggle eq 'white'){ - $toggle="#ffffcc"; - } else { - $toggle="white"; - } - my %row_data; # get a fresh hash for the row data - $row_data{tagfield} = $results->[$i]{'tagfield'}; - $row_data{liblibrarian} = $results->[$i]{'liblibrarian'}; - $row_data{repeatable} = $results->[$i]{'repeatable'}; - $row_data{mandatory} = $results->[$i]{'mandatory'}; - $row_data{authorised_value} = $results->[$i]{'authorised_value'}; - $row_data{subfield_link} ="marc_subfields_structure.pl?tagfield=".$results->[$i]{'tagfield'}."&frameworkcode=".$frameworkcode; - $row_data{edit} = "$script_name?op=add_form&searchfield=".$results->[$i]{'tagfield'}."&frameworkcode=".$frameworkcode; - $row_data{delete} = "$script_name?op=delete_confirm&searchfield=".$results->[$i]{'tagfield'}."&frameworkcode=".$frameworkcode; - $row_data{bgcolor} = $toggle; - push(@loop_data, \%row_data); + if ($searchfield ne '') { + $template->param(searchfield => $searchfield); + } + my $cnt=0; + if ($dspchoice) { + #here, user only wants used tags/subfields displayed + $searchfield=~ s/\'/\\\'/g; + my @data=split(' ',$searchfield); + my $sth=$dbh->prepare(" + SELECT marc_tag_structure.tagfield AS mts_tagfield, + marc_tag_structure.liblibrarian as mts_liblibrarian, + marc_tag_structure.libopac as mts_libopac, + marc_tag_structure.repeatable as mts_repeatable, + marc_tag_structure.mandatory as mts_mandatory, + marc_tag_structure.authorised_value as mts_authorized_value, + marc_subfield_structure.* + FROM marc_tag_structure + LEFT JOIN marc_subfield_structure ON (marc_tag_structure.tagfield=marc_subfield_structure.tagfield AND marc_tag_structure.frameworkcode=marc_subfield_structure.frameworkcode) WHERE (marc_tag_structure.tagfield >= ? and marc_tag_structure.frameworkcode=?) AND marc_subfield_structure.tab>=0 ORDER BY marc_tag_structure.tagfield,marc_subfield_structure.tagsubfield"); + #could be ordoned by tab + $sth->execute($data[0], $frameworkcode); + my @results = (); + while (my $data=$sth->fetchrow_hashref){ + push(@results,$data); + $cnt++; + } + + my @loop_data = (); + my $j=1; + my $i=$offset; + while ( $i < $cnt ) { + my %row_data; # get a fresh hash for the row data + $row_data{tagfield} = $results[$i]->{'mts_tagfield'}; + $row_data{liblibrarian} = $results[$i]->{'mts_liblibrarian'}; + $row_data{repeatable} = $results[$i]->{'mts_repeatable'}; + $row_data{mandatory} = $results[$i]->{'mts_mandatory'}; + $row_data{authorised_value} = $results[$i]->{'mts_authorised_value'}; + $row_data{subfield_link} = "marc_subfields_structure.pl?op=add_form&tagfield=".$results[$i]->{'mts_tagfield'}."&frameworkcode=".$frameworkcode; + $row_data{edit} = "$script_name?op=add_form&searchfield=" .$results[$i]->{'mts_tagfield'}."&frameworkcode=".$frameworkcode; + $row_data{delete} = "$script_name?op=delete_confirm&searchfield=" .$results[$i]->{'mts_tagfield'}."&frameworkcode=".$frameworkcode; + $j=$i; + my @internal_loop = (); + while ( ( $results[$i]->{'tagfield'} == $results[$j]->{'tagfield'} ) and ( $j < $cnt ) ) { + my %subfield_data; + $subfield_data{tagsubfield} = $results[$j]->{'tagsubfield'}; + $subfield_data{liblibrarian} = $results[$j]->{'liblibrarian'}; + $subfield_data{kohafield} = $results[$j]->{'kohafield'}; + $subfield_data{repeatable} = $results[$j]->{'repeatable'}; + $subfield_data{mandatory} = $results[$j]->{'mandatory'}; + $subfield_data{tab} = $results[$j]->{'tab'}; + $subfield_data{seealso} = $results[$j]->{'seealso'}; + $subfield_data{authorised_value} = $results[$j]->{'authorised_value'}; + $subfield_data{authtypecode} = $results[$j]->{'authtypecode'}; + $subfield_data{value_builder} = $results[$j]->{'value_builder'}; +# warn "tagfield : ".$results[$j]->{'tagfield'}." tagsubfield :".$results[$j]->{'tagsubfield'}; + push @internal_loop,\%subfield_data; + $j++; + } + $row_data{'subfields'}=\@internal_loop; + push(@loop_data, \%row_data); + $i=$j; + } + $template->param(select_display => "True", + loop => \@loop_data); + } else { + #here, normal old style : display every tags + my ($count,$results)=StringSearch($searchfield,$frameworkcode); + $cnt = $count; + my @loop_data = (); + for ( my $i = $offset ; $i < $count ; $i++ ) { + my %row_data; # get a fresh hash for the row data + $row_data{tagfield} = $results->[$i]{'tagfield'}; + $row_data{liblibrarian} = $results->[$i]{'liblibrarian'}; + $row_data{repeatable} = $results->[$i]{'repeatable'}; + $row_data{mandatory} = $results->[$i]{'mandatory'}; + $row_data{authorised_value} = $results->[$i]{'authorised_value'}; + $row_data{subfield_link} = "marc_subfields_structure.pl?tagfield=" .$results->[$i]{'tagfield'}."&frameworkcode=".$frameworkcode; + $row_data{edit} = "$script_name?op=add_form&searchfield=" .$results->[$i]{'tagfield'}."&frameworkcode=".$frameworkcode; + $row_data{delete} = "$script_name?op=delete_confirm&searchfield=".$results->[$i]{'tagfield'}."&frameworkcode=".$frameworkcode; + push(@loop_data, \%row_data); + } + $template->param(loop => \@loop_data); } - $template->param(loop => \@loop_data); if ($offset>0) { - my $prevpage = $offset-$pagesize; $template->param(isprevpage => $offset, - prevpage=> $prevpage, + prevpage=> $offset-$pagesize, searchfield => $searchfield, script_name => $script_name, frameworkcode => $frameworkcode, - ); + ); } - if ($offset+$pagesize<$count) { - my $nextpage =$offset+$pagesize; - $template->param(nextpage =>$nextpage, + if ($offset+$pagesize<$cnt) { + $template->param(nextpage =>$offset+$pagesize, searchfield => $searchfield, script_name => $script_name, frameworkcode => $frameworkcode, @@ -250,28 +325,22 @@ if ($op eq 'add_form') { } } #---- END $OP eq DEFAULT -$template->param(loggeninuser => $loggedinuser); output_html_with_http_headers $input, $cookie, $template->output; - # # the sub used for searches # sub StringSearch { - my ($env,$searchstring,$frameworkcode)=@_; - my $dbh = C4::Context->dbh; - $searchstring=~ s/\'/\\\'/g; - my @data=split(' ',$searchstring); - my $count=@data; - my $sth=$dbh->prepare("Select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value from marc_tag_structure where (tagfield >= ? and frameworkcode=?) order by tagfield"); - $sth->execute($data[0], $frameworkcode); - my @results; - while (my $data=$sth->fetchrow_hashref){ - push(@results,$data); - } - # $sth->execute; - $sth->finish; - return (scalar(@results),\@results); + my ($searchstring,$frameworkcode)=@_; + my $sth = C4::Context->dbh->prepare(" + SELECT tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value + FROM marc_tag_structure + WHERE (tagfield >= ? and frameworkcode=?) + ORDER BY tagfield + "); + $sth->execute($searchstring, $frameworkcode); + my $results = $sth->fetchall_arrayref({}); + return (scalar(@$results), $results); } # @@ -286,11 +355,11 @@ sub duplicate_framework { $sth_insert->execute($tagfield,$liblibrarian,$libopac,$repeatable,$mandatory,$authorised_value,$newframeworkcode); } - $sth = $dbh->prepare("select frameworkcode,tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,authorised_value,authtypecode,value_builder,seealso from marc_subfield_structure where frameworkcode=?"); + $sth = $dbh->prepare("select frameworkcode,tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,authorised_value,authtypecode,value_builder,seealso,hidden from marc_subfield_structure where frameworkcode=?"); $sth->execute($oldframeworkcode); - $sth_insert = $dbh->prepare("insert into marc_subfield_structure (frameworkcode,tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,authorised_value,authtypecode,value_builder,seealso) values (?,?,?,?,?,?,?,?,?,?,?,?,?)"); - while ( my ($frameworkcode, $tagfield, $tagsubfield, $liblibrarian, $libopac, $repeatable, $mandatory, $kohafield, $tab, $authorised_value, $thesaurus_category, $value_builder, $seealso) = $sth->fetchrow) { - $sth_insert->execute($newframeworkcode, $tagfield, $tagsubfield, $liblibrarian, $libopac, $repeatable, $mandatory, $kohafield, $tab, $authorised_value, $thesaurus_category, $value_builder, $seealso); + $sth_insert = $dbh->prepare("insert into marc_subfield_structure (frameworkcode,tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,authorised_value,authtypecode,value_builder,seealso,hidden) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); + while ( my ($frameworkcode, $tagfield, $tagsubfield, $liblibrarian, $libopac, $repeatable, $mandatory, $kohafield, $tab, $authorised_value, $thesaurus_category, $value_builder, $seealso,$hidden) = $sth->fetchrow) { + $sth_insert->execute($newframeworkcode, $tagfield, $tagsubfield, $liblibrarian, $libopac, $repeatable, $mandatory, $kohafield, $tab, $authorised_value, $thesaurus_category, $value_builder, $seealso, $hidden); } }