View | Details | Raw Unified | Return to bug 4263
Collapse All | Expand All

(-)a/C4/Biblio.pm (-3 / +8 lines)
Lines 1680-1692 sub TransformKohaToMarcOneField { Link Here
1680
    }
1680
    }
1681
    $sth->execute( $frameworkcode, $kohafieldname );
1681
    $sth->execute( $frameworkcode, $kohafieldname );
1682
    if ( ( $tagfield, $tagsubfield ) = $sth->fetchrow ) {
1682
    if ( ( $tagfield, $tagsubfield ) = $sth->fetchrow ) {
1683
        my @values = split(/\s?\|\s?/, $value, -1);
1684
        
1685
        foreach my $itemvalue (@values){
1683
        my $tag = $record->field($tagfield);
1686
        my $tag = $record->field($tagfield);
1684
        if ($tag) {
1687
        if ($tag) {
1685
            $tag->update( $tagsubfield => $value );
1688
                $tag->add_subfields( $tagsubfield => $itemvalue );
1686
            $record->delete_field($tag);
1689
            $record->delete_field($tag);
1687
            $record->insert_fields_ordered($tag);
1690
            $record->insert_fields_ordered($tag);
1688
        } else {
1691
            }
1689
            $record->add_fields( $tagfield, " ", " ", $tagsubfield => $value );
1692
            else {
1693
                $record->add_fields( $tagfield, " ", " ", $tagsubfield => $itemvalue );
1694
            }
1690
        }
1695
        }
1691
    }
1696
    }
1692
    return $record;
1697
    return $record;
(-)a/C4/Items.pm (-11 / +26 lines)
Lines 402-408 my %default_values_for_mod_from_marc = ( Link Here
402
    'items.cn_source'    => undef, 
402
    'items.cn_source'    => undef, 
403
    copynumber           => undef, 
403
    copynumber           => undef, 
404
    damaged              => 0,
404
    damaged              => 0,
405
    dateaccessioned      => undef, 
405
#    dateaccessioned      => undef,
406
    enumchron            => undef, 
406
    enumchron            => undef, 
407
    holdingbranch        => undef, 
407
    holdingbranch        => undef, 
408
    homebranch           => undef, 
408
    homebranch           => undef, 
Lines 429-434 sub ModItemFromMarc { Link Here
429
    my $biblionumber = shift;
429
    my $biblionumber = shift;
430
    my $itemnumber = shift;
430
    my $itemnumber = shift;
431
431
432
    my $dbh           = C4::Context->dbh;
433
    my $frameworkcode = GetFrameworkCode($biblionumber);
434
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode );
435
436
    my $localitemmarc = MARC::Record->new;
437
    $localitemmarc->append_fields( $item_marc->field($itemtag) );
438
    my $item = &TransformMarcToKoha( $dbh, $localitemmarc, $frameworkcode, 'items' );
439
    foreach my $item_field ( keys %default_values_for_mod_from_marc ) {
440
        $item->{$item_field} = $default_values_for_mod_from_marc{$item_field} unless (exists $item->{$item_field});
441
    }
442
    my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
443
432
    my $dbh = C4::Context->dbh;
444
    my $dbh = C4::Context->dbh;
433
    my $frameworkcode = GetFrameworkCode( $biblionumber );
445
    my $frameworkcode = GetFrameworkCode( $biblionumber );
434
	my ($itemtag,$itemsubfield)=GetMarcFromKohaField("items.itemnumber",$frameworkcode);
446
	my ($itemtag,$itemsubfield)=GetMarcFromKohaField("items.itemnumber",$frameworkcode);
Lines 2136-2152 sub _marc_from_item_hash { Link Here
2136
                                : ()  } keys %{ $item } }; 
2148
                                : ()  } keys %{ $item } }; 
2137
2149
2138
    my $item_marc = MARC::Record->new();
2150
    my $item_marc = MARC::Record->new();
2139
    foreach my $item_field (keys %{ $mungeditem }) {
2151
    foreach my $item_field ( keys %{$mungeditem} ) {
2140
        my ($tag, $subfield) = GetMarcFromKohaField($item_field, $frameworkcode);
2152
        my ( $tag, $subfield ) = GetMarcFromKohaField( $item_field, $frameworkcode );
2141
        next unless defined $tag and defined $subfield; # skip if not mapped to MARC field
2153
        next unless defined $tag and defined $subfield;    # skip if not mapped to MARC field
2142
        if (my $field = $item_marc->field($tag)) {
2154
        my @values = split(/\s?\|\s?/, $mungeditem->{$item_field}, -1);
2143
            $field->add_subfields($subfield => $mungeditem->{$item_field});
2155
        foreach my $value (@values){
2144
        } else {
2156
            if ( my $field = $item_marc->field($tag) ) {
2145
            my $add_subfields = [];
2157
                    $field->add_subfields( $subfield => $value );
2146
            if (defined $unlinked_item_subfields and ref($unlinked_item_subfields) eq 'ARRAY' and $#$unlinked_item_subfields > -1) {
2158
            } else {
2147
                $add_subfields = $unlinked_item_subfields;
2159
                my $add_subfields = [];
2160
                if (defined $unlinked_item_subfields and ref($unlinked_item_subfields) eq 'ARRAY' and $#$unlinked_item_subfields > -1) {
2161
                    $add_subfields = $unlinked_item_subfields;
2162
            }
2163
            $item_marc->add_fields( $tag, " ", " ", $subfield => $value, @$add_subfields );
2148
            }
2164
            }
2149
            $item_marc->add_fields( $tag, " ", " ", $subfield =>  $mungeditem->{$item_field}, @$add_subfields);
2150
        }
2165
        }
2151
    }
2166
    }
2152
2167
(-)a/cataloguing/additem.pl (-188 / +234 lines)
Lines 30-35 use C4::Koha; # XXX subfield_is_koha_internal_p Link Here
30
use C4::Branch; # XXX subfield_is_koha_internal_p
30
use C4::Branch; # XXX subfield_is_koha_internal_p
31
use C4::ClassSource;
31
use C4::ClassSource;
32
use C4::Dates;
32
use C4::Dates;
33
use List::MoreUtils qw/any/;
33
34
34
use MARC::File::XML;
35
use MARC::File::XML;
35
36
Lines 91-97 sub _increment_barcode { Link Here
91
}
92
}
92
93
93
94
94
my $input = new CGI;
95
sub generate_subfield_form {
96
        my ($tag, $subfieldtag, $value, $tagslib,$subfieldlib, $branches, $today_iso, $biblionumber, $temp, $loop_data, $i) = @_;
97
        
98
        my %subfield_data;
99
        my $dbh = C4::Context->dbh;        
100
        my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib");
101
        
102
        my $index_subfield = int(rand(1000000)); 
103
        if ($subfieldtag eq '@'){
104
            $subfield_data{id} = "tag_".$tag."_subfield_00_".$index_subfield;
105
        } else {
106
            $subfield_data{id} = "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield;
107
        }
108
        
109
        $subfield_data{tag}        = $tag;
110
        $subfield_data{subfield}   = $subfieldtag;
111
        $subfield_data{random}     = int(rand(1000000));    # why do we need 2 different randoms?
112
        $subfield_data{marc_lib}   ="<span id=\"error$i\" title=\"".$subfieldlib->{lib}."\">".$subfieldlib->{lib}."</span>";
113
        $subfield_data{mandatory}  = $subfieldlib->{mandatory};
114
        $subfield_data{repeatable} = $subfieldlib->{repeatable};
115
        
116
        $value =~ s/"/&quot;/g;
117
        if ( ! defined( $value ) || $value eq '')  {
118
            $value = $subfieldlib->{defaultvalue};
119
            # get today date & replace YYYY, MM, DD if provided in the default value
120
            my ( $year, $month, $day ) = split ',', $today_iso;     # FIXME: iso dates don't have commas!
121
            $value =~ s/YYYY/$year/g;
122
            $value =~ s/MM/$month/g;
123
            $value =~ s/DD/$day/g;
124
        }
125
        
126
        $subfield_data{visibility} = "display:none;" if (($subfieldlib->{hidden} > 4) || ($subfieldlib->{hidden} < -4));
127
        
128
        my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
129
        if (!$value && $subfieldlib->{kohafield} eq 'items.itemcallnumber' && $pref_itemcallnumber) {
130
            my $CNtag       = substr($pref_itemcallnumber, 0, 3);
131
            my $CNsubfield  = substr($pref_itemcallnumber, 3, 1);
132
            my $CNsubfield2 = substr($pref_itemcallnumber, 4, 1);
133
            my $temp2 = $temp->field($CNtag);
134
            if ($temp2) {
135
                $value = ($temp2->subfield($CNsubfield)).' '.($temp2->subfield($CNsubfield2));
136
                #remove any trailing space incase one subfield is used
137
                $value =~ s/^\s+|\s+$//g;
138
            }
139
        }
140
        
141
        my $attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" );
142
        my $attributes          = qq($attributes_no_value value="$value" );
143
        
144
        if ( $subfieldlib->{authorised_value} ) {
145
            my @authorised_values;
146
            my %authorised_lib;
147
            # builds list, depending on authorised value...
148
            if ( $subfieldlib->{authorised_value} eq "branches" ) {
149
                foreach my $thisbranch (@$branches) {
150
                    push @authorised_values, $thisbranch->{value};
151
                    $authorised_lib{$thisbranch->{value}} = $thisbranch->{branchname};
152
                    $value = $thisbranch->{value} if $thisbranch->{selected};
153
                }
154
            }
155
            elsif ( $subfieldlib->{authorised_value} eq "itemtypes" ) {
156
                  push @authorised_values, "" unless ( $subfieldlib->{mandatory} );
157
                  my $sth = $dbh->prepare("SELECT itemtype,description FROM itemtypes ORDER BY description");
158
                  $sth->execute;
159
                  while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) {
160
                      push @authorised_values, $itemtype;
161
                      $authorised_lib{$itemtype} = $description;
162
                  }
163
        
164
                  unless ( $value ) {
165
                      my $itype_sth = $dbh->prepare("SELECT itemtype FROM biblioitems WHERE biblionumber = ?");
166
                      $itype_sth->execute( $biblionumber );
167
                      ( $value ) = $itype_sth->fetchrow_array;
168
                  }
169
          
170
                  #---- class_sources
171
            }
172
            elsif ( $subfieldlib->{authorised_value} eq "cn_source" ) {
173
                  push @authorised_values, "" unless ( $subfieldlib->{mandatory} );
174
                    
175
                  my $class_sources = GetClassSources();
176
                  my $default_source = C4::Context->preference("DefaultClassificationSource");
177
                  
178
                  foreach my $class_source (sort keys %$class_sources) {
179
                      next unless $class_sources->{$class_source}->{'used'} or
180
                                  ($value and $class_source eq $value)      or
181
                                  ($class_source eq $default_source);
182
                      push @authorised_values, $class_source;
183
                      $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
184
                  }
185
        		  $value = $default_source unless ($value);
186
        
187
                  #---- "true" authorised value
188
            }
189
            else {
190
                  push @authorised_values, "" unless ( $subfieldlib->{mandatory} );
191
                  $authorised_values_sth->execute( $subfieldlib->{authorised_value} );
192
                  while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) {
193
                      push @authorised_values, $value;
194
                      $authorised_lib{$value} = $lib;
195
                  }
196
            }
197
198
            $subfield_data{marc_value} =CGI::scrolling_list(      # FIXME: factor out scrolling_list
199
                  -name     => "field_value",
200
                  -values   => \@authorised_values,
201
                  -default  => $value,
202
                  -labels   => \%authorised_lib,
203
                  -override => 1,
204
                  -size     => 1,
205
                  -multiple => 0,
206
                  -tabindex => 1,
207
                  -id       => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield,
208
                  -class    => "input_marceditor",
209
            );
210
211
            # it's a thesaurus / authority field
212
        }
213
        elsif ( $subfieldlib->{authtypecode} ) {
214
                $subfield_data{marc_value} = "<input type=\"text\" $attributes />
215
                    <a href=\"#\" class=\"buttonDot\"
216
                        onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$subfieldlib->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
217
            ";
218
            # it's a plugin field
219
        }
220
        elsif ( $subfieldlib->{value_builder} ) {
221
                # opening plugin
222
                my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $subfieldlib->{'value_builder'};
223
                if (do $plugin) {
224
                    my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, $loop_data );
225
                    my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, $loop_data );
226
		    my $change = index($javascript, 'function Change') > -1 ?
227
		        "return Change$function_name($subfield_data{random}, '$subfield_data{id}');" :
228
		        'return 1;';
229
                    $subfield_data{marc_value} = qq[<input $attributes
230
                        onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
231
			onchange=" $change"
232
                         onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
233
                        <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
234
                        $javascript];
235
                } else {
236
                    warn "Plugin Failed: $plugin";
237
                    $subfield_data{marc_value} = "<input $attributes />"; # supply default input form
238
                }
239
        }
240
        elsif ( $tag eq '' ) {       # it's an hidden field
241
            $subfield_data{marc_value} = qq(<input type="hidden" $attributes />);
242
        }
243
        elsif ( $subfieldlib->{'hidden'} ) {   # FIXME: shouldn't input type be "hidden" ?
244
            $subfield_data{marc_value} = qq(<input type="text" $attributes />);
245
        }
246
        elsif ( length($value) > 100
247
                    or (C4::Context->preference("marcflavour") eq "UNIMARC" and
248
                          300 <= $tag && $tag < 400 && $subfieldtag eq 'a' )
249
                    or (C4::Context->preference("marcflavour") eq "MARC21"  and
250
                          500 <= $tag && $tag < 600                     )
251
                  ) {
252
            # oversize field (textarea)
253
            $subfield_data{marc_value} = "<textarea $attributes_no_value>$value</textarea>\n";
254
        } else {
255
           # it's a standard field
256
           $subfield_data{marc_value} = "<input $attributes />";
257
        }
258
        
259
        return \%subfield_data;
260
}
261
262
263
my $input        = new CGI;
264
my $dbh          = C4::Context->dbh;
95
my $error        = $input->param('error');
265
my $error        = $input->param('error');
96
my $biblionumber = $input->param('biblionumber');
266
my $biblionumber = $input->param('biblionumber');
97
my $itemnumber   = $input->param('itemnumber');
267
my $itemnumber   = $input->param('itemnumber');
Lines 318-347 my ( $itemtagfield, $itemtagsubfield) = &GetMarcFromKohaField("items.itemnumb Link Here
318
my ($branchtagfield, $branchtagsubfield) = &GetMarcFromKohaField("items.homebranch", $frameworkcode);
488
my ($branchtagfield, $branchtagsubfield) = &GetMarcFromKohaField("items.homebranch", $frameworkcode);
319
489
320
foreach my $field (@fields) {
490
foreach my $field (@fields) {
321
    next if ($field->tag()<10);
491
    next if ( $field->tag() < 10 );
322
    my @subf = $field->subfields or (); # don't use ||, as that forces $field->subfelds to be interpreted in scalar context
492
493
    my @subf = $field->subfields or ();    # don't use ||, as that forces $field->subfelds to be interpreted in scalar context
323
    my %this_row;
494
    my %this_row;
324
# loop through each subfield
495
    # loop through each subfield
325
    for my $i (0..$#subf) {
496
    my $i = 0;
326
        next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne 10 
497
    foreach my $subfield (@subf){
327
                && ($field->tag() ne $itemtagfield 
498
        my $subfieldcode = $subfield->[0];
328
                && $subf[$i][0]   ne $itemtagsubfield));
499
        my $subfieldvalue= $subfield->[1];
329
500
330
        $witness{$subf[$i][0]} = $tagslib->{$field->tag()}->{$subf[$i][0]}->{lib} if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab}  eq 10);
501
        next if ($tagslib->{$field->tag()}->{$subfieldcode}->{tab} ne 10 
331
		if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab}  eq 10) {
502
                && ($field->tag() ne $itemtagfield 
332
        	$this_row{$subf[$i][0]}=GetAuthorisedValueDesc( $field->tag(),
503
                && $subfieldcode   ne $itemtagsubfield));
333
                        $subf[$i][0], $subf[$i][1], '', $tagslib) 
504
        $witness{$subfieldcode} = $tagslib->{$field->tag()}->{$subfieldcode}->{lib} if ($tagslib->{$field->tag()}->{$subfieldcode}->{tab}  eq 10);
334
						|| $subf[$i][1];
505
		if ($tagslib->{$field->tag()}->{$subfieldcode}->{tab}  eq 10) {
335
		}
506
		    $this_row{$subfieldcode} .= " | " if($this_row{$subfieldcode});
507
        	$this_row{$subfieldcode} .= GetAuthorisedValueDesc( $field->tag(),
508
                        $subfieldcode, $subfieldvalue, '', $tagslib) 
509
						|| $subfieldvalue;
510
        }
336
511
337
        if (($field->tag eq $branchtagfield) && ($subf[$i][$0] eq $branchtagsubfield) && C4::Context->preference("IndependantBranches")) {
512
        if (($field->tag eq $branchtagfield) && ($subfieldcode eq $branchtagsubfield) && C4::Context->preference("IndependantBranches")) {
338
            #verifying rights
513
            #verifying rights
339
            my $userenv = C4::Context->userenv();
514
            my $userenv = C4::Context->userenv();
340
            unless (($userenv->{'flags'} == 1) or (($userenv->{'branch'} eq $subf[$i][1]))){
515
            unless (($userenv->{'flags'} == 1) or (($userenv->{'branch'} eq $subfieldvalue))){
341
                    $this_row{'nomod'}=1;
516
                $this_row{'nomod'} = 1;
342
            }
517
            }
343
        }
518
        }
344
        $this_row{itemnumber} = $subf[$i][1] if ($field->tag() eq $itemtagfield && $subf[$i][0] eq $itemtagsubfield);
519
        $this_row{itemnumber} = $subfieldvalue if ($field->tag() eq $itemtagfield && $subfieldcode eq $itemtagsubfield);
345
    }
520
    }
346
    if (%this_row) {
521
    if (%this_row) {
347
        push(@big_array, \%this_row);
522
        push(@big_array, \%this_row);
Lines 374-550 foreach my $subfield_code (sort keys(%witness)) { Link Here
374
my @loop_data =();
549
my @loop_data =();
375
my $i=0;
550
my $i=0;
376
551
377
my $branches = GetBranchesLoop();  # build once ahead of time, instead of multiple times later.
378
my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
552
my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
379
553
380
# Getting the fields where the item location is
554
my $onlymine = C4::Context->preference('IndependantBranches') && 
381
my ($location_field, $location_subfield) = GetMarcFromKohaField('items.location', $frameworkcode);
555
               C4::Context->userenv                           && 
382
556
               C4::Context->userenv->{flags}!=1               && 
383
# Getting the name of the authorised values' category for item location
557
               C4::Context->userenv->{branch};
384
my $item_location_category = $tagslib->{$location_field}->{$location_subfield}->{'authorised_value'};
558
my $branches = GetBranchesLoop(undef,$onlymine);  # build once ahead of time, instead of multiple times later.
385
386
foreach my $tag (sort keys %{$tagslib}) {
387
# loop through each subfield
388
  foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
389
    next if subfield_is_koha_internal_p($subfield);
390
    next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10");
391
    my %subfield_data;
392
 
393
    my $index_subfield = int(rand(1000000)); 
394
    if ($subfield eq '@'){
395
        $subfield_data{id} = "tag_".$tag."_subfield_00_".$index_subfield;
396
    } else {
397
        $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
398
    }
399
    $subfield_data{tag}        = $tag;
400
    $subfield_data{subfield}   = $subfield;
401
    $subfield_data{random}     = int(rand(1000000));    # why do we need 2 different randoms?
402
#   $subfield_data{marc_lib}   = $tagslib->{$tag}->{$subfield}->{lib};
403
    $subfield_data{marc_lib}   ="<span id=\"error$i\" title=\"".$tagslib->{$tag}->{$subfield}->{lib}."\">".$tagslib->{$tag}->{$subfield}->{lib}."</span>";
404
    $subfield_data{mandatory}  = $tagslib->{$tag}->{$subfield}->{mandatory};
405
    $subfield_data{repeatable} = $tagslib->{$tag}->{$subfield}->{repeatable};
406
    my ($x,$value);
407
    ($x,$value) = find_value($tag,$subfield,$itemrecord) if ($itemrecord);
408
    $value =~ s/"/&quot;/g;
409
    unless ($value) {
410
        $value = $tagslib->{$tag}->{$subfield}->{defaultvalue};
411
        # get today date & replace YYYY, MM, DD if provided in the default value
412
        my ( $year, $month, $day ) = split ',', $today_iso;     # FIXME: iso dates don't have commas!
413
        $value =~ s/YYYY/$year/g;
414
        $value =~ s/MM/$month/g;
415
        $value =~ s/DD/$day/g;
416
    }
417
    $subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} > 4) || ($tagslib->{$tag}->{$subfield}->{hidden} < -4));
418
    # testing branch value if IndependantBranches.
419
    if (!$value && $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' && $pref_itemcallnumber) {
420
        my $CNtag       = substr($pref_itemcallnumber, 0, 3);
421
        my $CNsubfield  = substr($pref_itemcallnumber, 3, 1);
422
        my $CNsubfield2 = substr($pref_itemcallnumber, 4, 1);
423
        my $temp2 = $temp->field($CNtag);
424
        if ($temp2) {
425
            $value = ($temp2->subfield($CNsubfield)).' '.($temp2->subfield($CNsubfield2));
426
            #remove any trailing space incase one subfield is used
427
            $value =~ s/^\s+|\s+$//g;
428
        }
429
    }
430
559
431
    my $attributes_no_value = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" );
560
# We generate form, from actuel record
432
    my $attributes          = qq($attributes_no_value value="$value" );
561
my @fields;
433
    if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) {
562
if($itemrecord){
434
      my @authorised_values;
563
    foreach my $field ($itemrecord->fields()){
435
      my %authorised_lib;
564
        my $tag = $field->{_tag};
436
      # builds list, depending on authorised value...
565
        foreach my $subfield ( $field->subfields() ){
437
  
566
438
      if ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "branches" ) {
567
            my $subfieldtag = $subfield->[0];
439
          foreach my $thisbranch (@$branches) {
568
            my $value       = $subfield->[1];
440
              push @authorised_values, $thisbranch->{value};
569
            my $subfieldlib = $tagslib->{$tag}->{$subfieldtag};
441
              $authorised_lib{$thisbranch->{value}} = $thisbranch->{branchname};
570
442
              # in edit item this is set to the data value otherwise use default
571
            next if subfield_is_koha_internal_p($subfieldtag);
443
              if ($op ne 'edititem' && $thisbranch->{selected} ) {
572
            next if ($tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10");
444
                  $value = $thisbranch->{value};
573
445
              }
574
            my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i);        
446
          }
575
447
      }
576
            push @fields, "$tag$subfieldtag";
448
      elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) {
577
            push (@loop_data, $subfield_data);
449
          push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
578
            $i++;
450
          my $sth = $dbh->prepare("select itemtype,description from itemtypes order by description");
579
                    }
451
          $sth->execute;
580
452
          while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) {
581
                }
453
              push @authorised_values, $itemtype;
582
            }
454
              $authorised_lib{$itemtype} = $description;
583
    # and now we add fields that are empty
455
          }
584
456
585
foreach my $tag ( keys %{$tagslib}){
457
          unless ( $value ) {
586
    foreach my $subtag (keys %{$tagslib->{$tag}}){
458
              my $itype_sth = $dbh->prepare("SELECT itemtype FROM biblioitems WHERE biblionumber = ?");
587
        next if subfield_is_koha_internal_p($subtag);
459
              $itype_sth->execute( $biblionumber );
588
        next if ($tagslib->{$tag}->{$subtag}->{'tab'} ne "10");
460
              ( $value ) = $itype_sth->fetchrow_array;
589
        next if any { /^$tag$subtag$/ }  @fields;
461
          }
590
462
  
591
        my $value = "";
463
          #---- class_sources
592
        my $subfield_data = generate_subfield_form($tag, $subtag, $value, $tagslib, $tagslib->{$tag}->{$subtag}, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i);
464
      }
593
465
      elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) {
594
        push (@loop_data, $subfield_data);
466
          push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
595
        $i++;
467
            
468
          my $class_sources = GetClassSources();
469
          my $default_source = C4::Context->preference("DefaultClassificationSource");
470
          
471
          foreach my $class_source (sort keys %$class_sources) {
472
              next unless $class_sources->{$class_source}->{'used'} or
473
                          ($value and $class_source eq $value)      or
474
                          ($class_source eq $default_source);
475
              push @authorised_values, $class_source;
476
              $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
477
          }
478
		  $value = $default_source unless ($value);
479
480
          #---- "true" authorised value
481
      }
482
      else {
483
          push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
484
485
	  # Are we dealing with item location ?
486
          my $item_location = ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) ? 1 : 0;
487
488
          # If so, we sort by authorised_value, else by libelle
489
          my $orderby = $item_location ? 'authorised_value' : 'lib';
490
491
          my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY $orderby");
492
493
          $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value});
494
495
496
          while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) {
497
            push @authorised_values, $value;
498
	      	if ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) {
499
		  		$authorised_lib{$value} = $value . " - " . $lib;
500
	      	} else {
501
		  		$authorised_lib{$value} = $lib;
502
	      	}
503
504
	      	# For item location, we show the code and the libelle
505
	      	$authorised_lib{$value} = ($item_location) ? $value . " - " . $lib : $lib;
506
          }
507
      }
508
      $subfield_data{marc_value} =CGI::scrolling_list(      # FIXME: factor out scrolling_list
509
          -name     => "field_value",
510
          -values   => \@authorised_values,
511
          -default  => $value,
512
          -labels   => \%authorised_lib,
513
          -override => 1,
514
          -size     => 1,
515
          -multiple => 0,
516
         # -tabindex => 1,
517
          -id       => "tag_".$tag."_subfield_".$subfield."_".$index_subfield,
518
          -class    => "input_marceditor",
519
      );
520
    # it's a thesaurus / authority field
521
    }
522
    elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) {
523
        $subfield_data{marc_value} = "<input type=\"text\" $attributes />
524
            <a href=\"#\" class=\"buttonDot\"
525
                onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
526
    ";
527
    # it's a plugin field
528
    }
529
    elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) {
530
        # opening plugin
531
        my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'};
532
        if (do $plugin) {
533
            my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
534
            my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
535
            my $change = index($javascript, 'function Change') > -1 ?
536
                "return Change$function_name($subfield_data{random}, '$subfield_data{id}');" :
537
                'return 1;';
538
            $subfield_data{marc_value} = qq[<input $attributes
539
                onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
540
                onchange=" $change"
541
                 onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
542
                <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
543
                $javascript];
544
        } else {
545
            warn "Plugin Failed: $plugin";
546
            $subfield_data{marc_value} = "<input $attributes />"; # supply default input form
547
        }
548
    }
596
    }
549
    elsif ( $tag eq '' ) {       # it's an hidden field
597
    elsif ( $tag eq '' ) {       # it's an hidden field
550
        $subfield_data{marc_value} = qq(<input type="hidden" $attributes />);
598
        $subfield_data{marc_value} = qq(<input type="hidden" $attributes />);
Lines 569-575 foreach my $tag (sort keys %{$tagslib}) { Link Here
569
    $i++
617
    $i++
570
  }
618
  }
571
}
619
}
572
573
# what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit.
620
# what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit.
574
$template->param( title => $record->title() ) if ($record ne "-1");
621
$template->param( title => $record->title() ) if ($record ne "-1");
575
$template->param(
622
$template->param(
576
- 

Return to bug 4263