Bug 28445: Use Koha::UI::Form::Builder::Item from batchmod as well
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 26 Jul 2021 16:29:16 +0000 (18:29 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 18 Oct 2021 09:28:40 +0000 (11:28 +0200)
Now that it's reusable, let use it somewhere else!

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Koha/UI/Form/Builder/Item.pm
cataloguing/additem.pl
koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tt
tools/batchMod.pl

index 49683b8..f0794de 100644 (file)
@@ -24,6 +24,34 @@ use C4::ClassSource qw( GetClassSources );
 use Koha::DateUtils qw( dt_from_string );
 use Koha::Libraries;
 
+=head1 NAME
+
+Koha::UI::Form::Builder::Item
+
+Helper to build a form to add or edit a new item.
+
+=head1 API
+
+=head2 Class methods
+
+=cut
+
+=head3 new
+
+    my $form = Koha::UI::Form::Builder::Item->new(
+        {
+            biblionumber => $biblionumber,
+            item => $current_item,
+        }
+    );
+
+Constructor.
+biblionumber should be passed if we are creating a new item.
+For edition, an hashref representing the item to edit item must be passed.
+
+=cut
+
+
 sub new {
     my ( $class, $params ) = @_;
 
@@ -35,6 +63,12 @@ sub new {
     return $self;
 }
 
+=head3 generate_subfield_form
+
+Generate subfield's info for given tag, subfieldtag, etc.
+
+=cut
+
 sub generate_subfield_form {
 
     my ($self, $params)    = @_;
@@ -45,8 +79,10 @@ sub generate_subfield_form {
     my $libraries   = $params->{libraries};
     my $marc_record = $params->{marc_record};
     my $restricted_edition = $params->{restricted_editition};
+    my $prefill_with_default_values = $params->{prefill_with_default_values};
+    my $branch_limit = $params->{branch_limit};
 
-    my $item = $self->{item};
+    my $item         = $self->{item};
     my $subfield     = $tagslib->{$tag}{$subfieldtag};
     my $biblionumber = $self->{biblionumber};
 
@@ -79,7 +115,7 @@ sub generate_subfield_form {
     $subfield_data{kohafield} =
       $subfield->{kohafield} || 'items.more_subfields_xml';
 
-    if ( !defined($value) || $value eq '' ) {
+    if ( $prefill_with_default_values && ( !defined($value) || $value eq '' ) ) {
         $value = $subfield->{defaultvalue};
         if ($value) {
 
@@ -108,7 +144,9 @@ sub generate_subfield_form {
       if ( ( $subfield->{hidden} > 4 ) || ( $subfield->{hidden} <= -4 ) );
 
     my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
-    if (  !$value
+    if (  $prefill_with_default_values
+        && !$value
+        && $subfield->{kohafield}
         && $subfield->{kohafield} eq 'items.itemcallnumber'
         && $pref_itemcallnumber )
     {
@@ -128,22 +166,6 @@ sub generate_subfield_form {
         }
     }
 
-    my $default_location = C4::Context->preference('NewItemsDefaultLocation');
-    if (  !$value
-        && $subfield->{kohafield} eq 'items.location'
-        && $default_location )
-    {
-        $value = $default_location;
-    }
-
-    if (   $frameworkcode eq 'FA'
-        && $subfield->{kohafield} eq 'items.barcode'
-        && !$value )
-    {
-        my $input = CGI->new;
-        $value = $input->param('barcode');
-    }
-
     if ( $subfield->{authorised_value} ) {
         my @authorised_values;
         my %authorised_lib;
@@ -178,8 +200,6 @@ sub generate_subfield_form {
         }
         elsif ( $subfield->{authorised_value} eq "itemtypes" ) {
             push @authorised_values, "";
-            my $branch_limit =
-              C4::Context->userenv && C4::Context->userenv->{"branch"};
             my $itemtypes;
             if ($branch_limit) {
                 $itemtypes = Koha::ItemTypes->search_with_localization(
@@ -194,7 +214,7 @@ sub generate_subfield_form {
                   $itemtype->translated_description;
             }
 
-            unless ($value) {
+            if (!$value && $biblionumber) {
                 my $itype_sth = $dbh->prepare(
                     "SELECT itemtype FROM biblioitems WHERE biblionumber = ?");
                 $itype_sth->execute($biblionumber);
@@ -219,7 +239,7 @@ sub generate_subfield_form {
                 $authorised_lib{$class_source} =
                   $class_sources->{$class_source}->{'description'};
             }
-            $value = $default_source unless ($value);
+            $value = $default_source if !$value && $prefill_with_default_values;
 
             #---- "true" authorised value
         }
@@ -380,16 +400,82 @@ sub generate_subfield_form {
     return \%subfield_data;
 }
 
+    my $subfields =
+      Koha::UI::Form::Builder::Item->new(
+        { biblionumber => $biblionumber, item => $current_item } )->edit_form(
+        {
+            branchcode           => $branchcode,
+            restricted_editition => $restrictededition,
+            (
+                @subfields_to_prefill
+                ? ( subfields_to_prefill => \@subfields_to_prefill )
+                : ()
+            ),
+            prefill_with_default_values => 1,
+            branch_limit => C4::Context->userenv->{"branch"},
+        }
+    );
+
+Returns the list of subfields to display on the add/edit item form.
+
+Use it in the view with:
+  [% PROCESS subfields_for_item subfields => subfields %]
+
+Parameters:
+
+=over
+
+=item branchcode
+
+Pre-select a library (for logged in user)
+
+=item restricted_editition
+
+Flag to restrict the edition if the user does not have necessary permissions.
+
+=item subfields_to_prefill
+
+List of subfields to prefill (value of syspref SubfieldsToUseWhenPrefill)
+
+=item subfields_to_allow
+
+List of subfields to allow (value of syspref SubfieldsToAllowForRestrictedBatchmod)
+
+=item subfields_to_ignore
+
+List of subfields to ignore/skip
+
+=item prefill_with_default_values
+
+Flag to prefill with the default values defined in the framework.
+
+=item branch_limit
+
+Limit info depending on the library (so far only item types).
+
+=item default_branches_empty
+
+Flag to add an empty option to the library list.
+
+=back
+
+=cut
+
 sub edit_form {
     my ( $self, $params ) = @_;
 
     my $branchcode         = $params->{branchcode};
     my $restricted_edition = $params->{restricted_editition};
     my $subfields_to_prefill = $params->{subfields_to_prefill} || [];
+    my $subfields_to_allow = $params->{subfields_to_allow} || [];
+    my $subfields_to_ignore= $params->{subfields_to_ignore} || [];
+    my $prefill_with_default_values = $params->{prefill_with_default_values};
+    my $branch_limit = $params->{branch_limit};
+
     my $libraries =
       Koha::Libraries->search( {}, { order_by => ['branchname'] } )->unblessed;
     for my $library (@$libraries) {
-        $library->{selected} = 1 if $library->{branchcode} eq $branchcode;
+        $library->{selected} = 1 if $branchcode && $library->{branchcode} eq $branchcode;
     }
 
     my $item           = $self->{item};
@@ -405,7 +491,11 @@ sub edit_form {
             my $subfield = $tagslib->{$tag}{$subfieldtag};
 
             next if IsMarcStructureInternal($subfield);
-            next if ( $subfield->{tab} ne "10" );
+            next if $subfield->{tab} ne "10";
+            next if @$subfields_to_allow && !grep { $subfield->{kohafield} eq $_ } @$subfields_to_allow;
+            next
+              if grep { $subfield->{kohafield} && $subfield->{kohafield} eq $_ }
+              @$subfields_to_ignore;
 
             my @values = ();
 
@@ -442,12 +532,19 @@ sub edit_form {
 
             for my $value (@values) {
                 my $subfield_data = $self->generate_subfield_form(
-                    {tag => $tag,          subfieldtag => $subfieldtag,      value => $value,
-                    tagslib => $tagslib,      libraries => $libraries,
-                    marc_record => $marc_record, restricted_edition => $restricted_edition,
-                });
+                    {
+                        tag                => $tag,
+                        subfieldtag        => $subfieldtag,
+                        value              => $value,
+                        tagslib            => $tagslib,
+                        libraries          => $libraries,
+                        marc_record        => $marc_record,
+                        restricted_edition => $restricted_edition,
+                        prefill_with_default_values => $prefill_with_default_values,
+                        branch_limit       => $branch_limit,
+                    }
+                );
                 push @subfields, $subfield_data;
-                $i++;
             }
         }
     }
index fcfb054..c9d3b78 100755 (executable)
@@ -572,9 +572,16 @@ my $subfields =
             @subfields_to_prefill
             ? ( subfields_to_prefill => \@subfields_to_prefill )
             : ()
-        )
+        ),
+        prefill_with_default_values => 1,
+        branch_limit => C4::Context->userenv->{"branch"},
     }
-    );
+);
+
+if (   $frameworkcode eq 'FA' ) {
+    my ( $barcode_field ) = grep {$_->{kohafield} eq 'items.barcode'} @$subfields;
+    $barcode_field->{marc_value}->{value} ||= $input->param('barcode');
+}
 
 if( my $default_location = C4::Context->preference('NewItemsDefaultLocation') ) {
     my ( $location_field ) = grep {$_->{kohafield} eq 'items.location'} @$subfields;
index 7c444d4..af9c384 100644 (file)
                         <h2>Edit items</h2>
                         <div class="hint">Checking the box right next to the subfield label will disable the entry and delete the subfield on all selected items. Leave fields blank to make no change.</div>
                         <fieldset class="rows">
-                            <ol>
-                                [% FOREACH ite IN item %]
-                                    <li>
-                                        <div class="subfield_line" style="[% ite.visibility | html %]" id="subfield[% ite.tag | html %][% ite.subfield | html %][% ite.random | html %]">
-                                            [% SET mv = ite.marc_value %]
-                                            [% IF ( ite.mandatory ) %]
-                                                <label class="required" for="[%- mv.id | html -%]">
-                                            [% ELSE %]
-                                                <label for="[%- mv.id | html -%]">
-                                            [% END %]
-                                                [% ite.subfield | html %] - [% ite.marc_lib | $raw %]
-                                            </label>
-
-                                            [% IF ( mv.type == 'select' ) -%]
-                                                <select name="[%- mv.name | html -%]" id="[%- mv.id | html -%]" tabindex="1" class="input_marceditor select2">
-                                                    [%- FOREACH aval IN mv.values %]
-                                                        [% ite.subfield | html %] -
-                                                        [% IF aval == mv.default %]
-                                                            <option value="[%- aval | html -%]" selected="selected">[%- mv.labels.$aval | html -%]</option>
-                                                        [% ELSE %]
-                                                            <option value="[%- aval | html -%]">[%- mv.labels.$aval | html -%]</option>
-                                                        [% END %]
-                                                    [%- END -%]
-                                                </select>
-                                            [% ELSIF ( mv.type == 'text1' ) %]
-                                                <input type="text" tabindex="1" id="[%- mv.id | html -%]" name="field_value" class="input_marceditor" size="50" maxlength="255" value="[%- mv.value | html -%]" />
-                                                <a href="#" class="buttonDot" onclick="Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=[%- mv.authtypecode | uri -%]&index=[%- mv.id | uri -%]','[%- mv.id | uri -%]'); return false;" title="Tag editor">...</a>
-                                            [% ELSIF ( mv.type == 'text2' ) %]
-                                                <input type="text" id="[%- mv.id | html -%]" name="field_value" class="input_marceditor" size="50" maxlength="255" value="[%- mv.value | html -%]" />
-                                                [% IF mv.noclick %]
-                                                    <a href="#" class="buttonDot disabled" title="No popup">...</a>
-                                                [% ELSE %]
-                                                    <a href="#" id="buttonDot_[% mv.id | html %]" class="buttonDot" title="Tag editor">...</a>
-                                                [% END %]
-                                            [% ELSIF ( mv.type == 'text' ) %]
-                                                <input type="text" tabindex="1" id="[%- mv.id | html -%]" name="field_value" class="input_marceditor" size="50" maxlength="255" value="[%- mv.value | html -%]" />
-                                            [% ELSIF ( mv.type == 'hidden' ) %]
-                                                <input type="hidden" tabindex="1" id="[%- mv.id | html -%]" name="field_value" class="input_marceditor" size="50" maxlength="255" value="[%- mv.value | html -%]" />
-                                            [% ELSIF ( mv.type == 'textarea' ) %]
-                                                <textarea tabindex="1" id="[%- mv.id | html -%]" name="field_value" class="input_marceditor" size="50" maxlength="255">[%- mv.value | html -%]"</textarea>
-                                            [%- END # /IF mv.type == ... -%]
-
-                                            <span name="regex_fields" style="display: none;">
-                                                s/<input type="text" id="[% mv.id | html %]" name="regex_search" placeholder="regex pattern" />/
-                                                <input type="text" id="[% mv.id | html %]" name="regex_replace" placeholder="regex replacement" />/
-                                                <input type="text" id="[% mv.id | html %]" name="regex_modifiers" placeholder="ig" size="3" />
-                                            </span>
-
-                                            [% UNLESS ( ite.mandatory ) %]
-                                                <input type="checkbox" id="row[% ite.tag | html %][% ite.subfield | html %][% ite.random | html %]" title="Check to delete subfield [% ite.subfield | html %]" name="disable_input" value="[% ite.subfield | html %]" />
-                                            [% ELSE %]
-                                                <span class="required">Required</span>
-                                            [% END %]
-
-                                            [% IF (mv.type == 'text' || mv.type == 'text2' || mv.type == 'textarea' ) %]
-                                                <a href="#" name="field_regex" id="[% ite.id | html %]" >RegEx</a>
-                                            [% END %]
-
-                                            <input type="hidden" name="tag" value="[% ite.tag | html %]" />
-                                            <input type="hidden" name="subfield" value="[% ite.subfield | html %]" />
-                                            <input type="hidden" name="mandatory" value="[% ite.mandatory | html %]" />
-                                            [% IF ( ite.repeatable ) %]
-                                                <a href="#" class="buttonPlus" onclick="CloneItemSubfield(this.parentNode.parentNode); return false;">
-                                                    <img src="[% interface | html %]/[% theme | html %]/img/clone-subfield.png" alt="Clone" title="Clone this subfield" />
-                                                </a>
-                                            [% END %]
-                                            <span class="hint" id="hint[% ite.tag | html %][% ite.subfield | html %][% ite.random | html %]"></span>
-                                        </div> <!-- /.subfield_line -->
-                                    </li>
-                                [% END # /FOREACH ite %]
-                            </ol>
+                            [% PROCESS subfields_for_item subfields => subfields, add_regex => 1, add_delete_checkbox => 1 %]
                         </fieldset>
 
                         <fieldset class="rows">
index a753f72..13ecde7 100755 (executable)
@@ -50,6 +50,7 @@ use Koha::Items;
 use Koha::ItemTypes;
 use Koha::Patrons;
 use Koha::SearchEngine::Indexer;
+use Koha::UI::Form::Builder::Item;
 
 my $input = CGI->new;
 my $dbh = C4::Context->dbh;
@@ -393,209 +394,39 @@ if ($op eq "show"){
         # Even if we do not display the items, we need the itemnumbers
         $template->param(itemnumbers_array => \@itemnumbers);
     }
-# now, build the item form for entering a new item
-my @loop_data =();
-my $i=0;
-my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : "";
-
-my $libraries = Koha::Libraries->search({}, { order_by => ['branchname'] })->unblessed;# build once ahead of time, instead of multiple times later.
-
-# Adding a default choice, in case the user does not want to modify the branch
-my $nochange_branch = { branchname => '', value => '', selected => 1 };
-unshift (@$libraries, $nochange_branch);
-
-my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
-
-# Getting list of subfields to keep when restricted batchmod edit is enabled
-my $subfieldsToAllowForBatchmod = C4::Context->preference('SubfieldsToAllowForRestrictedBatchmod');
-my $allowAllSubfields = (
-    not defined $subfieldsToAllowForBatchmod
-      or $subfieldsToAllowForBatchmod eq q||
-) ? 1 : 0;
-my @subfieldsToAllow = split(/ /, $subfieldsToAllowForBatchmod);
-
-foreach my $tag (sort keys %{$tagslib}) {
-    # loop through each subfield
-    foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
-        next if IsMarcStructureInternal( $tagslib->{$tag}{$subfield} );
-        next if (not $allowAllSubfields and $restrictededition && !grep { $tag . '$' . $subfield eq $_ } @subfieldsToAllow );
-       next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10");
-        # barcode is not meant to be batch-modified
-        next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.barcode';
-       my %subfield_data;
-       my $index_subfield = int(rand(1000000)); 
-       if ($subfield eq '@'){
-           $subfield_data{id} = "tag_".$tag."_subfield_00_".$index_subfield;
-       } else {
-           $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
-       }
-       $subfield_data{tag}        = $tag;
-       $subfield_data{subfield}   = $subfield;
-       $subfield_data{marc_lib}   ="<span id=\"error$i\" title=\"".$tagslib->{$tag}->{$subfield}->{lib}."\">".$tagslib->{$tag}->{$subfield}->{lib}."</span>";
-       $subfield_data{mandatory}  = $tagslib->{$tag}->{$subfield}->{mandatory};
-       $subfield_data{repeatable} = $tagslib->{$tag}->{$subfield}->{repeatable};
-    my $value;
-    if ( $use_default_values) {
-           $value = $tagslib->{$tag}->{$subfield}->{defaultvalue};
-           # get today date & replace YYYY, MM, DD if provided in the default value
-            my $today = dt_from_string;
-            my $year  = $today->year;
-            my $month = $today->month;
-            my $day   = $today->day;
-            $value =~ s/YYYY/$year/g;
-            $value =~ s/MM/$month/g;
-            $value =~ s/DD/$day/g;
-       }
-       $subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} > 4) || ($tagslib->{$tag}->{$subfield}->{hidden} < -4));
-    # testing branch value if IndependentBranches.
-
-       if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) {
-       my @authorised_values;
-       my %authorised_lib;
-       # builds list, depending on authorised value...
-
-    if ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "branches" ) {
-        foreach my $library (@$libraries) {
-            push @authorised_values, $library->{branchcode};
-            $authorised_lib{$library->{branchcode}} = $library->{branchname};
+    # now, build the item form for entering a new item
+    my @loop_data =();
+    my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : "";
+
+    my $libraries = Koha::Libraries->search({}, { order_by => ['branchname'] })->unblessed;# build once ahead of time, instead of multiple times later.
+
+    # Adding a default choice, in case the user does not want to modify the branch
+    my $nochange_branch = { branchname => '', value => '', selected => 1 };
+    unshift (@$libraries, $nochange_branch);
+
+    my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
+
+    # Getting list of subfields to keep when restricted batchmod edit is enabled
+    my @subfields_to_allow = $restrictededition ? split ' ', C4::Context->preference('SubfieldsToAllowForRestrictedBatchmod') : ();
+
+    my $subfields = Koha::UI::Form::Builder::Item->new->edit_form(
+        {
+            restricted_editition => $restrictededition,
+            (
+                @subfields_to_allow
+                ? ( subfields_to_allow => \@subfields_to_allow )
+                : ()
+            ),
+            subfields_to_ignore         => ['items.barcode'],
+            prefill_with_default_values => $use_default_values,
         }
-        $value = "";
-    }
-    elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) {
-        push @authorised_values, "";
-        my $itemtypes = Koha::ItemTypes->search_with_localization;
-        while ( my $itemtype = $itemtypes->next ) {
-            push @authorised_values, $itemtype->itemtype;
-            $authorised_lib{$itemtype->itemtype} = $itemtype->translated_description;
-        }
-        $value = "";
-
-          #---- class_sources
-      }
-      elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) {
-          push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
-            
-          my $class_sources = GetClassSources();
-          my $default_source = C4::Context->preference("DefaultClassificationSource");
-          
-          foreach my $class_source (sort keys %$class_sources) {
-              next unless $class_sources->{$class_source}->{'used'} or
-                          ($value and $class_source eq $value)      or
-                          ($class_source eq $default_source);
-              push @authorised_values, $class_source;
-              $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
-          }
-                 $value = '';
-
-          #---- "true" authorised value
-      }
-      else {
-          push @authorised_values, ""; # unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
-
-          my @avs = Koha::AuthorisedValues->search_with_library_limits(
-              {
-                  category   => $tagslib->{$tag}->{$subfield}->{authorised_value}
-              },
-              { order_by => 'lib' },
-              $branch_limit
-          );
-          for my $av ( @avs ) {
-              push @authorised_values, $av->authorised_value;
-              $authorised_lib{$av->authorised_value} = $av->lib;
-          }
-          $value="";
-      }
-        $subfield_data{marc_value} = {
-            type    => 'select',
-            id      => "tag_".$tag."_subfield_".$subfield."_".$index_subfield,
-            name    => "field_value",
-            values  => \@authorised_values,
-            labels  => \%authorised_lib,
-            default => $value,
-        };
-    # it's a thesaurus / authority field
-    }
-    elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) {
-        $subfield_data{marc_value} = {
-            type         => 'text1',
-            id           => $subfield_data{id},
-            value        => $value,
-            authtypecode => $tagslib->{$tag}->{$subfield}->{authtypecode},
-        }
-    }
-    elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) { # plugin
-        require Koha::FrameworkPlugin;
-        my $plugin = Koha::FrameworkPlugin->new( {
-            name => $tagslib->{$tag}->{$subfield}->{'value_builder'},
-            item_style => 1,
-        });
-        my $temp;
-        my $pars= { dbh => $dbh, record => $temp, tagslib => $tagslib,
-            id => $subfield_data{id} };
-        $plugin->build( $pars );
-        if( !$plugin->errstr ) {
-            $subfield_data{marc_value} = {
-                type       => 'text2',
-                id         => $subfield_data{id},
-                value      => $value,
-                javascript => $plugin->javascript,
-                noclick    => $plugin->noclick,
-            };
-        } else {
-            warn $plugin->errstr;
-            $subfield_data{marc_value} = { # supply default input form
-                type       => 'text',
-                id         => $subfield_data{id},
-                value      => $value,
-            };
-        }
-    }
-    elsif ( $tag eq '' ) {       # it's an hidden field
-            $subfield_data{marc_value} = {
-                type       => 'hidden',
-                id         => $subfield_data{id},
-                value      => $value,
-            };
-    }
-    elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) {   # FIXME: shouldn't input type be "hidden" ?
-        $subfield_data{marc_value} = {
-                type       => 'text',
-                id         => $subfield_data{id},
-                value      => $value,
-        };
-    }
-    elsif ( length($value) > 100
-            or (C4::Context->preference("marcflavour") eq "UNIMARC" and
-                  300 <= $tag && $tag < 400 && $subfield eq 'a' )
-            or (C4::Context->preference("marcflavour") eq "MARC21"  and
-                  500 <= $tag && $tag < 600                     )
-          ) {
-        # oversize field (textarea)
-        $subfield_data{marc_value} = {
-                type       => 'textarea',
-                id         => $subfield_data{id},
-                value      => $value,
-        };
-    } else {
-        # it's a standard field
-        $subfield_data{marc_value} = {
-                type       => 'text',
-                id         => $subfield_data{id},
-                value      => $value,
-        };
-    }
-#   $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\">";
-    push (@loop_data, \%subfield_data);
-    $i++
-  }
-} # -- End foreach tag
+    );
 
 
 
     # what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit.
     $template->param(
-        item                => \@loop_data,
+        subfields           => $subfields,
         notfoundbarcodes    => \@notfoundbarcodes,
         notfounditemnumbers => \@notfounditemnumbers
     );