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)
committerBrendan Gallagher <brendan@bywatersolutions.com>
Wed, 23 Mar 2016 01:06:55 +0000 (01:06 +0000)
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
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 f06ee4f..e26aa79 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 );
@@ -52,7 +51,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";
 
@@ -84,8 +83,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, "";
@@ -130,133 +127,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
@@ -276,9 +198,7 @@ if ($op eq 'add_form') {
        my @kohafield           = ''.$input->param('kohafield');
        my @tab                         = $input->param('tab');
        my @seealso             = $input->param('seealso');
-       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');
@@ -299,11 +219,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,
@@ -372,7 +291,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 e6d2231..979d7ec 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 );
@@ -65,7 +64,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(
@@ -80,7 +79,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) {
@@ -103,9 +102,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;
@@ -173,135 +170,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 );
@@ -309,7 +227,6 @@ if ( $op eq 'add_form' ) {
         action   => "Edit subfields",
         tagfield => $tagfield,
         loop           => \@loop_data,
-        more_subfields => $more_subfields,
         more_tag       => $tagfield
     );
 
@@ -368,7 +285,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,
@@ -457,7 +374,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 0d5bff3..7caceca 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>
             <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>
+                <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%]" />
             <button type="submit" class="approve"><i class="fa fa-fw fa-check"></i> Yes, delete this subfield</button>
         </form>
 
-
         <form action="[% delete_link %]" method="get">
             <input type="hidden" name="searchfield" value="[% searchfield %]" />
             <input type="hidden" name="tagfield" value="[% tagfield | html %]" />
         <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 883d168..78e12ac 100644 (file)
@@ -46,9 +46,9 @@
    <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 %]
                                [% 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>
                     <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>
                        <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>
                             </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>
                             </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>
     <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 %]" />
     <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>