Bug 15773: Fix and standardise checkboxes code in framework
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 9 Feb 2016 17:02:05 +0000 (17:02 +0000)
committerFrédéric Demians <f.demians@tamil.fr>
Wed, 27 Apr 2016 14:24:23 +0000 (16:24 +0200)
When creating a new subfield for an authority framework, the checkboxes
don't behave as they should.
If you click on the 'repeatable', 'mandatory' or 'is url' checkbox's
label, the checkbox from the second tab will be checked/unchecked.
This is caused by a non-unique id of the input element.

I have found this bug when working on the removal of CGI::checkbox in
both admin/auth_subfields_structure.pl and
admin/marc_subfields_structure.pl scripts.

This patch remove the use of CGI::checkbox as well as the generation of
html code from these 2 pl scripts (which should be avoided).
The code these scripts are now pretty similar.

Test plan:
Add/modify/remove subfield for a MARC framework and an Authority
framework.
Use as many field as possible and confirm that the values are correctly
inserted/displayed.

Signed-off-by: Hector Castro <hector.hecaxmmx@gmail.com>
Works as advertised

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Brendan Gallagher brendan@bywatersolutions.com
(cherry picked from commit 39597b86ae299a9b4c0c1e8221f51f9e8dd300ed)
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
(cherry picked from commit 60e601bf5f485a46b36bf14d2145adf9c25fe098)
Signed-off-by: Frédéric Demians <f.demians@tamil.fr>

admin/auth_subfields_structure.pl
admin/marc_subfields_structure.pl
koha-tmpl/intranet-tmpl/prog/en/modules/admin/auth_subfields_structure.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tt

index 3833b48..68a4aae 100755 (executable)
@@ -17,8 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
-use strict;
-#use warnings; FIXME - Bug 2505
+use Modern::Perl;
 use C4::Output;
 use C4::Auth;
 use CGI qw ( -utf8 );
@@ -49,7 +48,7 @@ my $input        = new CGI;
 my $tagfield     = $input->param('tagfield');
 my $tagsubfield  = $input->param('tagsubfield');
 my $authtypecode = $input->param('authtypecode');
-my $offset       = $input->param('offset');
+my $offset       = $input->param('offset') || 0;
 my $op           = $input->param('op') || '';
 my $script_name  = "/cgi-bin/koha/admin/auth_subfields_structure.pl";
 
@@ -81,8 +80,6 @@ my $dbh = C4::Context->dbh;
 ################## ADD_FORM ##################################
 # called by default. Used to create form to add or  modify a record
 if ($op eq 'add_form') {
-       my $data;
-       my $more_subfields = $input->param("more_subfields")+1;
        # builds kohafield tables
        my @kohafields;
        push @kohafields, "";
@@ -127,133 +124,58 @@ if ($op eq 'add_form') {
        $sth->execute($tagfield,$authtypecode);
        my @loop_data = ();
        my $i=0;
-       while ($data =$sth->fetchrow_hashref) {
-
-               my %row_data;  # get a fresh hash for the row data
-        $row_data{defaultvalue} = $data->{defaultvalue};
-        $row_data{tab} = {
-                    id      => "tab$i",
-                    default => $data->{'tab'},
-                    };
-        $row_data{ohidden} = {
-                    id      => "ohidden$i",
-                    default => $data->{'hidden'}
-                    };
-               $row_data{tagsubfieldinput} = "<input type=\"hidden\" name=\"tagsubfield\" value=\"".$data->{'tagsubfield'}."\" id=\"tagsubfield\" />";
-               $row_data{tagsubfield} = $data->{'tagsubfield'};
-               $row_data{liblibrarian} = CGI::escapeHTML($data->{'liblibrarian'});
-               $row_data{libopac} = CGI::escapeHTML($data->{'libopac'});
-               $row_data{seealso} = CGI::escapeHTML($data->{'seealso'});
-        $row_data{kohafield} = {
-                    id      => "kohafield$i",
-                    values  => \@kohafields,
-                    default => "$data->{'kohafield'}",
-                    };
-        $row_data{authorised_value} = {
-                    id      => "authorised_value$i",
-                    values  => $authorised_values,
-                    default => $data->{'authorised_value'},
-        };
-        $row_data{frameworkcode} = {
-                    id      => "frameworkcode$i",
-                    values  => \@authtypes,
-                    default => $data->{'frameworkcode'},
-        };
-        $row_data{value_builder} = {
-                    id      => "value_builder$i",
-                    values  => \@value_builder,
-                    default => $data->{'value_builder'},
-        };
-               
-               $row_data{repeatable} = CGI::checkbox(-name=>"repeatable$i",
-       -checked => $data->{'repeatable'}?'checked':'',
-       -value => 1,
-       -label => '',
-       -id => "repeatable$i");
-               $row_data{mandatory} = CGI::checkbox(-name => "mandatory$i",
-       -checked => $data->{'mandatory'}?'checked':'',
-       -value => 1,
-       -label => '',
-       -id => "mandatory$i");
-               $row_data{hidden} = CGI::escapeHTML($data->{hidden}) ;
-               $row_data{isurl} = CGI::checkbox( -name => "isurl$i",
-                       -id => "isurl$i",
-                       -checked => $data->{'isurl'}?'checked':'',
-                       -value => 1,
-                       -label => '');
-               $row_data{row} = $i;
-               push(@loop_data, \%row_data);
-               $i++;
-       }
-       # add more_subfields empty lines for add if needed
-       for (my $i=1;$i<=$more_subfields;$i++) {
-               my %row_data;  # get a fresh hash for the row data
-        $row_data{'new_subfield'} = 1;
-        $row_data{tab} = {
-                    id      => "tab$i",
-                    default => $data->{'tab'},
-                    };
-        $row_data{ohidden} = {
-                    id      => "ohidden$i",
-                    default => $data->{'hidden'}
-                    };
+    while ( my $data = $sth->fetchrow_hashref ) {
+        my %row_data;    # get a fresh hash for the row data
+        $row_data{defaultvalue}      = $data->{defaultvalue};
+        $row_data{tab}               = $data->{tab};
+        $row_data{ohidden}           = $data->{'hidden'};
+        $row_data{tagsubfield}       = $data->{'tagsubfield'};
+        $row_data{liblibrarian}      = $data->{'liblibrarian'};
+        $row_data{libopac}           = $data->{'libopac'};
+        $row_data{seealso}           = $data->{'seealso'};
+        $row_data{kohafields}        = \@kohafields;
+        $row_data{kohafield}         = $data->{'kohafield'};
+        $row_data{authorised_values} = $authorised_values;
+        $row_data{authorised_value}  = $data->{'authorised_value'};
+        $row_data{frameworkcodes}    = \@authtypes;
+        $row_data{frameworkcode}     = $data->{'frameworkcode'};
+        $row_data{value_builders}    = \@value_builder;
+        $row_data{value_builder}     = $data->{'value_builder'};
+        $row_data{repeatable}        = $data->{repeatable};
+        $row_data{mandatory}         = $data->{mandatory};
+        $row_data{hidden}            = $data->{hidden};
+        $row_data{isurl}             = $data->{isurl};
+        $row_data{row}               = $i;
+        push( @loop_data, \%row_data );
+        $i++;
+    }
 
-               $row_data{tagsubfieldinput} = "<input type=\"text\" name=\"tagsubfield\" value=\"".$data->{'tagsubfield'}."\" size=\"1\" id=\"tagsubfield\" maxlength=\"1\" />";
-                $row_data{tagsubfieldinput} = 
-                        "<label><input type=\"text\" name=\"tagsubfield\" value=\""
-                        . $data->{'tagsubfield'}
-                        . "\" size=\"1\" id=\"tagsubfield\" maxlength=\"1\" /></label>";
-               $row_data{tagsubfield} = $data->{'tagsubfield'};
-               $row_data{liblibrarian} = "";
-               $row_data{libopac} = "";
-               $row_data{seealso} = "";
-               $row_data{hidden} = "000";
-               $row_data{repeatable} = CGI::checkbox( -name=> 'repeatable',
-                               -id => "repeatable$i",
-                               -checked => '',
-                               -value => 1,
-                               -label => '');
-               $row_data{mandatory} = CGI::checkbox( -name=> 'mandatory',
-                       -id => "mandatory$i",
-                       -checked => '',
-                       -value => 1,
-                       -label => '');
-               $row_data{isurl} = CGI::checkbox(-name => 'isurl',
-                       -id => "isurl$i",
-                       -checked => '',
-                       -value => 1,
-                       -label => '');
-        $row_data{kohafield} = {
-                    id      => "kohafield$i",
-                    values  => \@kohafields,
-                    default => "",
-                    };
-        $row_data{authorised_value} = {
-                    id      => "authorised_value",
-                    values  => $authorised_values,
-                    default => "",
-        };
-        $row_data{frameworkcode} = {
-                    id      => "frameworkcode",
-                    values  => \@authtypes,
-                    default => $data->{'frameworkcode'},
-        };
-        $row_data{value_builder} = {
-                    id      => "value_builder",
-                    values  => \@value_builder,
-                    default => $data->{'value_builder'},
-        };
+    # Add a new row for the "New" tab
+    my %row_data;    # get a fresh hash for the row data
+    $row_data{'new_subfield'} = 1;
+    $row_data{tab} = -1; # ignore
+    $row_data{ohidden} = 0; # show all
+    $row_data{tagsubfield}      = "";
+    $row_data{liblibrarian}     = "";
+    $row_data{libopac}          = "";
+    $row_data{seealso}          = "";
+    $row_data{hidden}           = "000";
+    $row_data{repeatable}       = 0;
+    $row_data{mandatory}        = 0;
+    $row_data{isurl}            = 0;
+    $row_data{kohafields} = \@kohafields,
+    $row_data{authorised_values} = $authorised_values;
+    $row_data{frameworkcodes} = \@authtypes;
+    $row_data{value_builders} = \@value_builder;
+    $row_data{row} = $i;
+    push( @loop_data, \%row_data );
 
-               $row_data{row} = $i;
-               push(@loop_data, \%row_data);
-       }
        $template->param('use_heading_flags_p' => 1);
        $template->param('heading_edit_subfields_p' => 1);
        $template->param(action => "Edit subfields",
                                                        tagfield => $tagfield,
                                                        tagfieldinput => "<input type=\"hidden\" name=\"tagfield\" value=\"$tagfield\" />",
                                                        loop => \@loop_data,
-                                                       more_subfields => $more_subfields,
                                                        more_tag => $tagfield);
 
                                                                                                # END $OP eq ADD_FORM
@@ -273,10 +195,7 @@ if ($op eq 'add_form') {
        my @kohafield           = ''.$input->param('kohafield');
        my @tab                         = $input->param('tab');
        my @seealso             = $input->param('seealso');
-       my @hidden;
-       my @ohidden             = $input->param('ohidden');
-       #my @ihidden            = $input->param('ihidden');
-       #my @ehidden            = $input->param('ehidden');
+    my @ohidden             = $input->param('ohidden');
        my @authorised_values   = $input->param('authorised_value');
        my $authtypecode        = $input->param('authtypecode');
        my @frameworkcodes      = $input->param('frameworkcode');
@@ -297,11 +216,10 @@ if ($op eq 'add_form') {
                my $frameworkcode               =$frameworkcodes[$i];
                my $value_builder=$value_builder[$i];
         my $defaultvalue = $defaultvalue[$i];
-               #my $hidden = $ohidden[$i].$ihidden[$i].$ehidden[$i]; #collate from 3 hiddens;
                my $hidden = $ohidden[$i]; #collate from 3 hiddens;
                my $isurl = $input->param("isurl$i")?1:0;
                if ($liblibrarian) {
-                       unless (C4::Context->config('demo') eq 1) {
+                       unless (C4::Context->config('demo') or C4::Context->config('demo') eq 1) {
                                if (auth_subfield_structure_exists($authtypecode, $tagfield, $tagsubfield)) {
                                        $sth_update->execute(
                                                $authtypecode,
@@ -370,7 +288,7 @@ if ($op eq 'add_form') {
 ################## 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) {
+       unless (C4::Context->config('demo') or C4::Context->config('demo') eq 1) {
                my $sth=$dbh->prepare("delete from auth_subfield_structure where tagfield=? and tagsubfield=? and authtypecode=?");
                $sth->execute($tagfield,$tagsubfield,$authtypecode);
        }
index c8b7815..60d7c5c 100755 (executable)
@@ -17,8 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
-use strict;
-#use warnings; FIXME - Bug 2505
+use Modern::Perl;
 use C4::Output;
 use C4::Auth;
 use CGI qw ( -utf8 );
@@ -62,7 +61,7 @@ my $tagfield      = $input->param('tagfield');
 my $tagsubfield   = $input->param('tagsubfield');
 my $frameworkcode = $input->param('frameworkcode');
 my $pkfield       = "tagfield";
-my $offset        = $input->param('offset');
+my $offset        = $input->param('offset') || 0;
 my $script_name   = "/cgi-bin/koha/admin/marc_subfields_structure.pl";
 
 my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
@@ -77,7 +76,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
 );
 my $cache = Koha::Cache->get_instance();
 
-my $op       = $input->param('op');
+my $op       = $input->param('op') || "";
 $tagfield =~ s/\,//g;
 
 if ($op) {
@@ -100,9 +99,7 @@ else {
 ################## ADD_FORM ##################################
 # called by default. Used to create form to add or  modify a record
 if ( $op eq 'add_form' ) {
-    my $data;
     my $dbh            = C4::Context->dbh;
-    my $more_subfields = $input->param("more_subfields") + 1;
 
     # builds kohafield tables
     my @kohafields;
@@ -177,135 +174,56 @@ if ( $op eq 'add_form' ) {
     $sth->execute( $tagfield, $frameworkcode );
     my @loop_data = ();
     my $i         = 0;
-    while ( $data = $sth->fetchrow_hashref ) {
+    while ( my $data = $sth->fetchrow_hashref ) {
         my %row_data;    # get a fresh hash for the row data
-        $row_data{defaultvalue} = $data->{defaultvalue};
-        $row_data{maxlength} = $data->{maxlength};
-        $row_data{tab} = {
-                    id      => "tab$i",
-                    default => $data->{'tab'},
-                    };
-
-        $row_data{tagsubfield} =
-            $data->{'tagsubfield'}
-          . "<input type=\"hidden\" name=\"tagsubfield\" value=\""
-          . $data->{'tagsubfield'}
-          . "\" id=\"tagsubfield\" />";
-        $row_data{subfieldcode} = $data->{'tagsubfield'} eq '@'?'_':$data->{'tagsubfield'};
-        $row_data{urisubfieldcode} = $row_data{subfieldcode} eq '%' ? 'pct' : $row_data{subfieldcode};
-        $row_data{liblibrarian} = CGI::escapeHTML( $data->{'liblibrarian'} );
-        $row_data{libopac}      = CGI::escapeHTML( $data->{'libopac'} );
-        $row_data{seealso}      = CGI::escapeHTML( $data->{'seealso'} );
-        $row_data{kohafield} = {
-                    id      => "kohafield$i",
-                    values  => \@kohafields,
-                    default => "$data->{'kohafield'}",
-                    };
-        $row_data{authorised_value} = {
-                    id      => "authorised_value$i",
-                    values  => \@authorised_values,
-                    default => $data->{'authorised_value'},
-        };
-        $row_data{value_builder} = {
-                    id      => "value_builder$i",
-                    values  => \@value_builder,
-                    default => $data->{'value_builder'},
-        };
-        $row_data{authtypes} = {
-                    id      => "authtypecode$i",
-                    values  => \@authtypes,
-                    default => $data->{'authtypecode'},
-        };
-        $row_data{repeatable} = CGI::checkbox(
-            -name     => "repeatable$i",
-            -checked  => $data->{'repeatable'} ? 'checked' : '',
-            -value    => 1,
-            -label    => '',
-            -id       => "repeatable$i"
-        );
-        $row_data{mandatory} = CGI::checkbox(
-            -name     => "mandatory$i",
-            -checked  => $data->{'mandatory'} ? 'checked' : '',
-            -value    => 1,
-            -label    => '',
-            -id       => "mandatory$i"
-        );
-        $row_data{hidden} = CGI::escapeHTML( $data->{hidden} );
-        $row_data{isurl}  = CGI::checkbox(
-            -name     => "isurl$i",
-            -id       => "isurl$i",
-            -checked  => $data->{'isurl'} ? 'checked' : '',
-            -value    => 1,
-            -label    => ''
-        );
-        $row_data{row}    = $i;
-        $row_data{link}   = CGI::escapeHTML( $data->{'link'} ); 
+        $row_data{defaultvalue}      = $data->{defaultvalue};
+        $row_data{maxlength}         = $data->{maxlength};
+        $row_data{tab}               = $data->{tab};
+        $row_data{tagsubfield}       = $data->{tagsubfield};
+        $row_data{subfieldcode}      = $data->{'tagsubfield'} eq '@' ? '_' : $data->{'tagsubfield'};
+        $row_data{urisubfieldcode}   = $row_data{subfieldcode} eq '%' ? 'pct' : $row_data{subfieldcode};
+        $row_data{liblibrarian}      = $data->{'liblibrarian'};
+        $row_data{libopac}           = $data->{'libopac'};
+        $row_data{seealso}           = $data->{'seealso'};
+        $row_data{kohafields}        = \@kohafields;
+        $row_data{kohafield}         = $data->{kohafield};
+        $row_data{authorised_values} = \@authorised_values;
+        $row_data{authorised_value}  = $data->{authorised_value};
+        $row_data{value_builders}    = \@value_builder;
+        $row_data{value_builder}     = $data->{'value_builder'};
+        $row_data{authtypes}         = \@authtypes;
+        $row_data{authtypecode}      = $data->{'authtypecode'};
+        $row_data{repeatable}        = $data->{repeatable};
+        $row_data{mandatory}         = $data->{mandatory};
+        $row_data{hidden}            = $data->{hidden};
+        $row_data{isurl}             = $data->{isurl};
+        $row_data{row}               = $i;
+        $row_data{link}              = $data->{'link'};
         push( @loop_data, \%row_data );
         $i++;
     }
 
-    # add more_subfields empty lines for add if needed
-        my %row_data;    # get a fresh hash for the row data
-        $row_data{'new_subfield'} = 1;
-        $row_data{'subfieldcode'} = '';
-        $row_data{'maxlength'} = 9999;
-
-        $row_data{tab} = {
-                    id      => "tab$i",
-                    default => $data->{'tab'},
-                    };
-        $row_data{tagsubfield} =
-            "<input type=\"text\" name=\"tagsubfield\" value=\""
-          . $data->{'tagsubfield'}
-          . "\" size=\"1\" id=\"tagsubfield\" maxlength=\"1\" />";
-        $row_data{liblibrarian} = "";
-        $row_data{libopac}      = "";
-        $row_data{seealso}      = "";
-        $row_data{kohafield} = {
-                    id      => "kohafield$i",
-                    values  => \@kohafields,
-                    default => "$data->{'kohafield'}",
-                    };
-        $row_data{hidden}     = "";
-        $row_data{repeatable} = CGI::checkbox(
-            -name     => "repeatable$i",
-            -id       => "repeatable$i",
-            -checked  => '',
-            -value    => 1,
-            -label    => ''
-        );
-        $row_data{mandatory} = CGI::checkbox(
-            -name     => "mandatory$i",
-            -id       => "mandatory$i",
-            -checked  => '',
-            -value    => 1,
-            -label    => ''
-        );
-        $row_data{isurl} = CGI::checkbox(
-            -name     => "isurl$i",
-            -id       => "isurl$i",
-            -checked  => '',
-            -value    => 1,
-            -label    => ''
-        );
-        $row_data{value_builder} = {
-                    id      => "value_builder$i",
-                    values  => \@value_builder,
-                    default => $data->{'value_builder'},
-        };
-        $row_data{authorised_value} = {
-                    id      => "authorised_value$i",
-                    values  => \@authorised_values,
-                    default => $data->{'authorised_value'},
-        };
-        $row_data{authtypes} = {
-                    id      => "authtypecode$i",
-                    values  => \@authtypes,
-                    default => $data->{'authtypecode'},
-        };
-        $row_data{link}   = CGI::escapeHTML( $data->{'link'} );
-        $row_data{row}    = $i;
-        push( @loop_data, \%row_data );
+    # Add a new row for the "New" tab
+    my %row_data;    # get a fresh hash for the row data
+    $row_data{'new_subfield'}    = 1;
+    $row_data{'subfieldcode'}    = '';
+    $row_data{'maxlength'}       = 9999;
+    $row_data{tab}               = -1;                    #ignore
+    $row_data{tagsubfield}       = "";
+    $row_data{liblibrarian}      = "";
+    $row_data{libopac}           = "";
+    $row_data{seealso}           = "";
+    $row_data{hidden}            = "";
+    $row_data{repeatable}        = 0;
+    $row_data{mandatory}         = 0;
+    $row_data{isurl}             = 0;
+    $row_data{kohafields}        = \@kohafields;
+    $row_data{authorised_values} = \@authorised_values;
+    $row_data{value_builders}    = \@value_builder;
+    $row_data{authtypes}         = \@authtypes;
+    $row_data{link}              = "";
+    $row_data{row}               = $i;
+    push( @loop_data, \%row_data );
 
     $template->param( 'use_heading_flags_p'      => 1 );
     $template->param( 'heading_edit_subfields_p' => 1 );
@@ -313,7 +231,6 @@ if ( $op eq 'add_form' ) {
         action   => "Edit subfields",
         tagfield => $tagfield,
         loop           => \@loop_data,
-        more_subfields => $more_subfields,
         more_tag       => $tagfield
     );
 
@@ -372,7 +289,7 @@ elsif ( $op eq 'add_validate' ) {
         my $maxlength = $maxlength[$i] ? $maxlength[$i] : 9999;
         
         if (defined($liblibrarian) && $liblibrarian ne "") {
-            unless ( C4::Context->config('demo') eq 1 ) {
+            unless ( C4::Context->config('demo') or C4::Context->config('demo') eq 1 ) {
                 if (marc_subfield_structure_exists($tagfield, $tagsubfield, $frameworkcode)) {
                     $sth_update->execute(
                         $tagfield,
@@ -461,7 +378,7 @@ elsif ( $op eq 'delete_confirm' ) {
 }
 elsif ( $op eq 'delete_confirmed' ) {
     my $dbh = C4::Context->dbh;
-    unless ( C4::Context->config('demo') eq 1 ) {
+    unless ( C4::Context->config('demo') or C4::Context->config('demo') eq 1 ) {
         my $sth =
           $dbh->prepare(
 "delete from marc_subfield_structure where tagfield=? and tagsubfield=? and frameworkcode=?"
index cd53fa2..065b617 100644 (file)
@@ -49,9 +49,9 @@
             <ul>
                 [% FOREACH loo IN loop %]
                     [% IF ( loo.new_subfield ) %]
-                        <li><a href="#sub[% loo.tagsubfield %]field" title="[% loo.liblibrarian %]">New</a></li>
+                        <li><a href="#sub[% loo.tagsubfield %]field" title="[% loo.liblibrarian | html_entity %]">New</a></li>
                     [% ELSE %]
-                        <li><a href="#sub[% loo.tagsubfield %]field" title="[% loo.liblibrarian %]">
+                        <li><a href="#sub[% loo.tagsubfield %]field" title="[% loo.liblibrarian | html_entity %]">
                             [% loo.tagsubfield %]
                     </a></li>
                     [% END %]
         <div id="sub[% loo.tagsubfield %]field">
             <fieldset class="rows"><ol>
 
-                    [% IF ( loo.new_subfield ) %]
-                <li><label for="tagsubfieldinput[% loo.row %]">Subfield code: </label>[% loo.tagsubfieldinput %]&nbsp;</li>
+                [% IF ( loo.new_subfield ) %]
+                    <li>
+                        <label for="tagsubfieldinput[% loo.row %]">Subfield code: </label>
+                        <input type="text" name="tagsubfield" value="[% loo.tagsubfield %]" size="1" id="tagsubfield" maxlength="1" />
+                    </li>
+                [% ELSE %]
+                    <li>
+                        <input type="hidden" name="tagsubfield" value="[% loo.tagsubfield %]" />
+                    </li>
+                [% END %]
+                <li>
+                    <label for="repeatable[% loo.row %]">Repeatable: </label>
+                    [% IF loo.repeatable %]
+                        <input type="checkbox" id="repeatable[% loo.row %]" name="repeatable[% loo.row %]" checked="checked" value="1" />
                     [% ELSE %]
+                        <input type="checkbox" id="repeatable[% loo.row %]" name="repeatable[% loo.row %]" value="1" />
+                    [% END %]
+                </li>
                 <li>
-                <input type="hidden" name="tagsubfield" value="[% loo.tagsubfield %]" />
-                 </li>
+                    <label for="mandatory[% loo.row %]">Mandatory: </label>
+                    [% IF loo.mandatory %]
+                        <input type="checkbox" id="mandatory[% loo.row %]" name="mandatory[% loo.row %]" checked="checked" value="1" />
+                    [% ELSE %]
+                        <input type="checkbox" id="mandatory[% loo.row %]" name="mandatory[% loo.row %]" value="1" />
                     [% END %]
-                <li><label for="repeatable[% loo.row %]">Repeatable: </label>[% loo.repeatable %]&nbsp;</li>
-                <li><label for="mandatory[% loo.row %]">Mandatory: </label>[% loo.mandatory %]&nbsp;</li>
-                <li><label for="liblibrarian[% loo.row %]">Text for librarian: </label><input id="liblibrarian[% loo.row %]" type="text" name="liblibrarian" value="[% loo.liblibrarian %]" size="40" maxlength="80" /></li>
-                <li><label for="libopac[% loo.row %]">Text for OPAC: </label><input type="text" id="libopac[% loo.row %]" name="libopac" value="[% loo.libopac %]" size="40" maxlength="80" /></li>
+                </li>
+                <li><label for="liblibrarian[% loo.row %]">Text for librarian: </label><input id="liblibrarian[% loo.row %]" type="text" name="liblibrarian" value="[% loo.liblibrarian | html_entity %]" size="40" maxlength="80" /></li>
+                <li><label for="libopac[% loo.row %]">Text for OPAC: </label><input type="text" id="libopac[% loo.row %]" name="libopac" value="[% loo.libopac | html_entity %]" size="40" maxlength="80" /></li>
                 <li><label for="tab[% loo.row %]">Managed in tab: </label>
-                    <select name="tab" size="1" id="[% loo.tab.id %]">
-                        [%- IF ( loo.tab.default ==  -1 ) -%]
+                    <select name="tab" size="1" id="tab[% loo.row %]">
+                        [%- IF ( loo.tab ==  -1 ) -%]
                         <option value="-1" selected="selected">ignore</option>
                         [%- ELSE -%]
                         <option value="-1">ignore</option>
                         [%- END -%]
                     [%- FOREACH t IN [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] -%]
-                        [%- IF ( loo.tab.default ==  t && t.length>0 ) -%]
+                        [%- IF ( loo.tab ==  t && t.length>0 ) -%]
                         <option value="[%- t -%]" selected="selected">[%- t -%]</option>
-                        [%- ELSIF ( loo.tab.default ==  t ) -%]
+                        [%- ELSIF ( loo.tab ==  t ) -%]
                         <option value="[%- t -%]" selected="selected">&nbsp;</option>
                         [%- ELSE -%]
                         <option value="[%- t -%]">[%- t -%]</option>
                         <legend>Display</legend>
                         <ol>
                             <li><label for="ohidden[% loo.row %]">Select to display or not:</label>
-                                <select name="ohidden" size="1" id="[% loo.ohidden.id %]">
-                                    [%- IF ( loo.ohidden.default ==  0 ) -%]
+                                <select name="ohidden" size="1" id="ohidden[% loo.row %]">
+                                    [%- IF ( loo.ohidden ==  0 ) -%]
                                     <option value= "0" selected="selected">Show all</option>
                                     <option value="-5">Hide all</option>
-                                    [%- ELSIF ( loo.ohidden.default == -5 ) -%]
+                                    [%- ELSIF ( loo.ohidden == -5 ) -%]
                                     <option value= "0">Show all</option>
                                     <option value="-5" selected="selected">Hide all</option>
                                     [%- ELSE -%]
                     <fieldset class="rows">
                         <legend>Advanced constraints:</legend>
                         <ol>
-                            <li><label for="isurl[% loo.row %]">Is a URL:</label>[% loo.isurl %] (if checked, it means that the subfield is a URL and can be clicked)</li>
+                            <li>
+                                <label for="isurl[% loo.row %]">Is a URL:</label>
+                                [% IF loo.isurl %]
+                                    <input type="checkbox" id="isurl[% loo.row %]" name="isurl[% loo.row %]" checked="checked" value="1" />
+                                [% ELSE %]
+                                    <input type="checkbox" id="isurl[% loo.row %]" name="isurl[% loo.row %]" value="1" />
+                                [% END %]
+                                (if checked, it means that the subfield is a URL and can be clicked)
+                            </li>
                             <li>
                                 <label for="defaultvalue[% loo.row %]">Default value:</label>
                                 <input type="text" name="defaultvalue" id="defaultvalue[% loo.row %]" value="[% loo.defaultvalue %]" />
                         <ol>
                             <li>
                                 <label for="kohafield[% loo.row %]">Koha field:</label>
-                                <select name="kohafield" id="[% loo.kohafield.id %]" size="1">
-                                [%- FOREACH value IN loo.kohafield.values %]
-                                    [% IF ( value == loo.kohafield.default  && value.length>0 ) -%]
+                                <select name="kohafield" id="kohafield[% loo.row %]" size="1">
+                                [%- FOREACH value IN loo.kohafields %]
+                                    [% IF ( value == loo.kohafield  && value.length>0 ) -%]
                                     <option value="[% value %]" selected="selected">[% value %]</option>
-                                    [%- ELSIF ( value == loo.kohafield.default ) -%]
+                                    [%- ELSIF ( value == loo.kohafield ) -%]
                                     <option value="[% value %]" selected="selected">&nbsp;</option>
                                     [%- ELSIF ( value.length==0 ) -%]
                                     <option value="[% value %]">&nbsp;</option>
                             </li>
                             <li>
                                 <label for="authorised_value[% loo.row %]">Authorized value:</label>
-                                <select name="authorised_value" id="[% loo.authorised_value.id %]" size="1">
-                                [%- FOREACH value IN loo.authorised_value.values %]
-                                    [% IF ( value == loo.authorised_value.default && value.length>0 ) -%]
+                                <select name="authorised_value" id="authorised_value[% loo.row %]" size="1">
+                                [%- FOREACH value IN loo.authorised_values %]
+                                    [% IF ( value == loo.authorised_value && value.length>0 ) -%]
                                     <option value="[% value %]" selected="selected">[% value %]</option>
-                                    [%- ELSIF ( value == loo.authorised_value.default ) -%]
+                                    [%- ELSIF ( value == loo.authorised_value ) -%]
                                     <option value="[% value %]" selected>&nbsp;</option>
                                     [%- ELSIF ( value.length==0 ) -%]
                                     <option value="[% value %]">&nbsp;</option>
                             </li>
                             <li>
                                 <label for="frameworkcode[% loo.row %]">Thesaurus:</label>
-                                <select name="frameworkcode" id="[% loo.frameworkcode.id %]" size="1">
-                                [%- FOREACH value IN loo.frameworkcode.values %]
-                                    [% IF ( value == loo.frameworkcode.default && value.length>0 ) -%]
+                                <select name="frameworkcode" id="frameworkcode[% loo.row %]" size="1">
+                                [%- FOREACH value IN loo.frameworkcodes %]
+                                    [% IF ( value == loo.frameworkcode && value.length>0 ) -%]
                                     <option value="[% value %]" selected="selected">[% value %]</option>
-                                    [%- ELSIF ( value == loo.frameworkcode.default ) -%]
+                                    [%- ELSIF ( value == loo.frameworkcode ) -%]
                                     <option value="[% value %]" selected="selected">&nbsp;</option>
                                     [%- ELSIF ( value.length==0 ) -%]
                                     <option value="[% value %]">&nbsp;</option>
                             </li>
                             <li>
                                 <label for="value_builder[% loo.row %]">Plugin:</label>
-                                <select name="value_builder" id="[% loo.value_builder.id %]" size="1">
-                                [%- FOREACH value IN loo.value_builder.values %]
-                                    [% IF ( value == loo.value_builder.default && value.length>0 ) -%]
+                                <select name="value_builder" id="value_builder[% loo.row %]" size="1">
+                                [%- FOREACH value IN loo.value_builders %]
+                                    [% IF ( value == loo.value_builder && value.length>0 ) -%]
                                     <option value="[% value %]" selected="selected">[% value %]</option>
-                                    [%- ELSIF ( value == loo.value_builder.default ) -%]
+                                    [%- ELSIF ( value == loo.value_builder ) -%]
                                     <option value="[% value %]" selected="selected">&nbsp;</option>
                                     [%- ELSIF ( value.length==0 ) -%]
                                     <option value="[% value %]">&nbsp;</option>
     <div class="dialog alert"><h3>Delete subfield <span class="ex">'[% tagsubfield %]'?</span></h3>
     <form action="[% delete_link %]" method="post"><input type="hidden" name="op" value="delete_confirmed" />
     <table><tr><th scope="row">Subfield:</th> <td>[% tagsubfield %]</td></tr>
-    <tr><th scope="row">Description:</th> <td>[% liblibrarian %]</td></tr></table>
+    <tr><th scope="row">Description:</th> <td>[% liblibrarian | html_entity %]</td></tr></table>
         <input type="hidden" name="searchfield" value="[% searchfield %]" />
         <input type="hidden" name="tagfield" value="[% tagfield | html%]" />
         <input type="hidden" name="tagsubfield" value="[% tagsubfield %]" />
         <td>[% loo.tagsubfield %]</td>
         <td>
             [% IF ( loo.subfield_ignored ) %]
-                    <i>[% loo.liblibrarian %]</i>
+                    <i>[% loo.liblibrarian | html_entity %]</i>
             [% ELSE %]
-                    [% loo.liblibrarian %]
+                    [% loo.liblibrarian | html_entity %]
             [% END %]
         </td>
         <td>
index 20a4e1c..e4c9d25 100644 (file)
@@ -204,9 +204,9 @@ function populateHiddenCheckboxes(tab) {
    <ul>
         [% FOREACH loo IN loop %]
             [% IF ( loo.new_subfield ) %]
-                <li><a href="#sub[% loo.urisubfieldcode %]field" title="[% loo.liblibrarian %]">New</a></li>
+                <li><a href="#sub[% loo.urisubfieldcode %]field" title="[% loo.liblibrarian | html_entity %]">New</a></li>
             [% ELSE %]
-                <li><a href="#sub[% loo.urisubfieldcode %]field" title="[% loo.liblibrarian %]">
+                <li><a href="#sub[% loo.urisubfieldcode %]field" title="[% loo.liblibrarian | html_entity %]">
                     [% loo.subfieldcode %]
                </a></li>
             [% END %]
@@ -225,25 +225,39 @@ function populateHiddenCheckboxes(tab) {
                                [% ELSE %]
                                <li><label for="tagsubfield[% loo.row %]">Subfield code:</label> <input type="text" id="tagsubfield[% loo.row %]" name="tagsubfield" value="[% loo.subfieldcode %]" /></li>
                                [% END %]
-                               <li><label for="liblibrarian[% loo.row %]">Text for librarian: </label><input id="liblibrarian[% loo.row %]" type="text" name="liblibrarian" value="[% loo.liblibrarian %]" size="40" maxlength="80" /></li>
-                               <li><label for="libopac[% loo.row %]">Text for OPAC: </label><input type="text" id="libopac[% loo.row %]" name="libopac" value="[% loo.libopac %]" size="40" maxlength="80" /></li>
-                               <li><label for="repeatable[% loo.row %]">Repeatable: </label>[% loo.repeatable %]</li>
-                               <li><label for="mandatory[% loo.row %]">Mandatory: </label>[% loo.mandatory %]</li>
+                        <li><label for="liblibrarian[% loo.row %]">Text for librarian: </label><input id="liblibrarian[% loo.row %]" type="text" name="liblibrarian" value="[% loo.liblibrarian | html_entity %]" size="40" maxlength="80" /></li>
+                        <li><label for="libopac[% loo.row %]">Text for OPAC: </label><input type="text" id="libopac[% loo.row %]" name="libopac" value="[% loo.libopac | html_entity %]" size="40" maxlength="80" /></li>
+                        <li>
+                            <label for="repeatable[% loo.row %]">Repeatable: </label>
+                            [% IF loo.repeatable %]
+                                <input type="checkbox" id="repeatable[% loo.row %]" name="repeatable[% loo.row %]" checked="checked" value="1" />
+                            [% ELSE %]
+                                <input type="checkbox" id="repeatable[% loo.row %]" name="repeatable[% loo.row %]" value="1" />
+                            [% END %]
+                        </li>
+                        <li>
+                            <label for="mandatory[% loo.row %]">Mandatory: </label>
+                            [% IF loo.mandatory %]
+                                <input type="checkbox" id="mandatory[% loo.row %]" name="mandatory[% loo.row %]" checked="checked" value="1" />
+                            [% ELSE %]
+                                <input type="checkbox" id="mandatory[% loo.row %]" name="mandatory[% loo.row %]" value="1" />
+                            [% END %]
+                        </li>
                         <li><label for="tab[% loo.row %]">Managed in tab: </label>
-                            <select name="tab" tabindex="" size="1" id="[% loo.tab.id %]">
-                            [%- IF ( loo.tab.default ==  -1 ) -%]
+                            <select name="tab" tabindex="" size="1" id="tab[% loo.row %]">
+                            [%- IF ( loo.tab ==  -1 ) -%]
                                 <option value="-1" selected="selected">ignore</option>
                             [%- ELSE -%]
                                 <option value="-1">ignore</option>
                             [%- END -%]
                             [%- FOREACH t IN [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] -%]
-                                [%- IF ( loo.tab.default ==  t ) -%]
+                                [%- IF ( loo.tab ==  t ) -%]
                                 <option value="[%- t -%]" selected="selected">[%- t -%]</option>
                                 [%- ELSE -%]
                                 <option value="[%- t -%]">[%- t -%]</option>
                                 [%- END -%]
                             [%- END -%]
-                            [%- IF ( loo.tab.default ==  10 ) -%]
+                            [%- IF ( loo.tab ==  10 ) -%]
                                 <option value="10" selected="selected">items (10)</option>
                             [%- ELSE -%]
                                 <option value="10">items (10)</option>
@@ -275,13 +289,21 @@ function populateHiddenCheckboxes(tab) {
                     <input type="checkbox" id="hidden_flagged_[% loo.row %]" name="flagged_[% loo.row %]"/>
                     <label for="hidden_flagged_[% loo.row %]" style="float: none;">Flagged</label>
                 </li>
-                <li><label for="isurl[% loo.row %]">Is a URL:</label>[% loo.isurl %] (if checked, it means that the subfield is a URL and can be clicked)</li>
+                <li>
+                    <label for="isurl[% loo.row %]">Is a URL:</label>
+                    [% IF loo.isurl %]
+                        <input type="checkbox" id="isurl[% loo.row %]" name="isurl[% loo.row %]" checked="checked" value="1" />
+                    [% ELSE %]
+                        <input type="checkbox" id="isurl[% loo.row %]" name="isurl[% loo.row %]" value="1" />
+                    [% END %]
+                    (if checked, it means that the subfield is a URL and can be clicked)
+                </li>
                 <li><label for="link[% loo.row %]">Link:</label><input type="text" id="link[% loo.row %]" name="link" value="[% loo.link %]" size="10" maxlength="80" /> (e.g., Title or Local-Number) <span class="error"><em>NOTE: If you change this value you must ask your administrator to run misc/batchRebuildBiblioTables.pl.</em></span></li>
                 <li>
                     <label for="kohafield[% loo.row %]">Koha link:</label>
-                    <select name="kohafield" id="[% loo.kohafield.id %]" size="1">
-                    [% FOREACH value IN loo.kohafield.values %]
-                      [% IF ( value == loo.kohafield.default ) %]
+                    <select name="kohafield" id="kohafield[% loo.row %]" size="1">
+                    [% FOREACH value IN loo.kohafields %]
+                      [% IF ( value == loo.kohafield ) %]
                         <option value="[% value %]" selected="selected">[% value %]</option>
                       [% ELSE %]
                         <option value="[% value %]">[% value %]</option>
@@ -298,9 +320,9 @@ function populateHiddenCheckboxes(tab) {
                        <ol>
                             <li>
                                 <label for="authorised_value[% loo.row %]">Authorized value:</label>
-                                <select name="authorised_value" id="[% loo.authorised_value.id %]" size="1">
-                                [% FOREACH value IN loo.authorised_value.values %]
-                                    [% IF ( value == loo.authorised_value.default ) %]
+                                <select name="authorised_value" id="authorised_value[% loo.row %]" size="1">
+                                [% FOREACH value IN loo.authorised_values %]
+                                    [% IF ( value == loo.authorised_value ) %]
                                     <option value="[% value %]" selected="selected">[% value %]</option>
                                     [% ELSE %]
                                     <option value="[% value %]">[% value %]</option>
@@ -310,9 +332,9 @@ function populateHiddenCheckboxes(tab) {
                             </li>
                             <li>
                                 <label for="authtypecode[% loo.row %]">Thesaurus:</label>
-                                <select name="authtypecode" id="[% loo.authtypes.id %]" size="1">
-                                [% FOREACH value IN loo.authtypes.values %]
-                                    [% IF ( value == loo.authtypes.default ) %]
+                                <select name="authtypecode" id="authtypecode[% loo.row %]" size="1">
+                                [% FOREACH value IN loo.authtypes %]
+                                    [% IF ( value == loo.authtypecode ) %]
                                     <option value="[% value %]" selected="selected">[% value %]</option>
                                     [% ELSE %]
                                     <option value="[% value %]">[% value %]</option>
@@ -322,9 +344,9 @@ function populateHiddenCheckboxes(tab) {
                             </li>
                             <li>
                                 <label for="value_builder[% loo.row %]">Plugin:</label>
-                                <select name="value_builder" id="[% loo.value_builder.id %]" size="1">
-                                [% FOREACH value IN loo.value_builder.values %]
-                                    [% IF ( value == loo.value_builder.default ) %]
+                                <select name="value_builder" id="value_builder[% loo.row %]" size="1">
+                                [% FOREACH value IN loo.value_builders %]
+                                    [% IF ( value == loo.value_builder ) %]
                                     <option value="[% value %]" selected="selected">[% value %]</option>
                                     [% ELSE %]
                                     <option value="[% value %]">[% value %]</option>
@@ -349,7 +371,7 @@ function populateHiddenCheckboxes(tab) {
     <div class="dialog alert">
         <h3>Confirm deletion of subfield [% tagsubfield %]?</h3>
         <p>Subfield: [% tagsubfield %]</p>
-        <p>Description: [% liblibrarian %]</p>
+        <p>Description: [% liblibrarian | html_entity %]</p>
 
         <form action="[% delete_link %]" method="post"><input type="hidden" name="op" value="delete_confirmed" />
             <input type="hidden" name="searchfield" value="[% searchfield %]" />
@@ -399,9 +421,9 @@ function populateHiddenCheckboxes(tab) {
     <td><a href="/cgi-bin/koha/admin/marc_subfields_structure.pl?op=add_form&amp;tagfield=[% loo.tagfield %]&amp;frameworkcode=[% frameworkcode %]#sub[% loo.tagsubfield %]field">[% loo.tagsubfield %]</a></td>
     <td>
         [% IF ( loo.subfield_ignored ) %]
-            <i>[% loo.liblibrarian %]</i>
+            <i>[% loo.liblibrarian | html_entity %]</i>
         [% ELSE %]
-            [% loo.liblibrarian %]
+            [% loo.liblibrarian | html_entity %]
         [% END %]
     </td>
     <td>