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

(-)a/cataloguing/additem.pl (-7 / +35 lines)
Lines 36-42 use List::MoreUtils qw/any/; Link Here
36
use C4::Search;
36
use C4::Search;
37
use Storable qw(thaw freeze);
37
use Storable qw(thaw freeze);
38
use URI::Escape;
38
use URI::Escape;
39
39
use C4::Members;
40
40
41
use MARC::File::XML;
41
use MARC::File::XML;
42
use URI::Escape;
42
use URI::Escape;
Lines 104-112 sub _increment_barcode { Link Here
104
104
105
105
106
sub generate_subfield_form {
106
sub generate_subfield_form {
107
        my ($tag, $subfieldtag, $value, $tagslib,$subfieldlib, $branches, $today_iso, $biblionumber, $temp, $loop_data, $i) = @_;
107
        my ($tag, $subfieldtag, $value, $tagslib,$subfieldlib, $branches, $today_iso, $biblionumber, $temp, $loop_data, $i, $limitededition) = @_;
108
  
108
  
109
  my $frameworkcode = &GetFrameworkCode($biblionumber);
109
        my $frameworkcode = &GetFrameworkCode($biblionumber);
110
110
        my %subfield_data;
111
        my %subfield_data;
111
        my $dbh = C4::Context->dbh;
112
        my $dbh = C4::Context->dbh;
112
        
113
        
Lines 156-161 sub generate_subfield_form { Link Here
156
	}
157
	}
157
        my $attributes_no_value = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" size="50" maxlength="$subfield_data{maxlength}" );
158
        my $attributes_no_value = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" size="50" maxlength="$subfield_data{maxlength}" );
158
        my $attributes_no_value_textarea = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" rows="5" cols="64" );
159
        my $attributes_no_value_textarea = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" rows="5" cols="64" );
160
161
        # Getting list of subfields to keep when limited edition is enabled
162
        my $subfieldsToAllowForLimitedEdition = C4::Context->preference('SubfieldsToAllowForLimitedEdition');
163
        my @subfieldsToAllow = split(/ /, $subfieldsToAllowForLimitedEdition);
164
165
        # If we're on limited edition, and our field is not in the list of subfields to allow,
166
        # then it is read-only
167
        $attributes_no_value .= 'readonly="readonly" '
168
            if (
169
                $limitededition
170
                and !grep { $tag . '$' . $subfieldtag  eq $_ } @subfieldsToAllow
171
            );
172
159
        my $attributes          = qq($attributes_no_value value="$value" );
173
        my $attributes          = qq($attributes_no_value value="$value" );
160
        
174
        
161
        if ( $subfieldlib->{authorised_value} ) {
175
        if ( $subfieldlib->{authorised_value} ) {
Lines 216-222 sub generate_subfield_form { Link Here
216
                $subfield_data{marc_value} = qq(<input type="hidden" $attributes /> $authorised_lib{$value});
230
                $subfield_data{marc_value} = qq(<input type="hidden" $attributes /> $authorised_lib{$value});
217
            }
231
            }
218
            else {
232
            else {
219
                $subfield_data{marc_value} =CGI::scrolling_list(      # FIXME: factor out scrolling_list
233
                my @scrparam = (
220
                    -name     => "field_value",
234
                    -name     => "field_value",
221
                    -values   => \@authorised_values,
235
                    -values   => \@authorised_values,
222
                    -default  => $value,
236
                    -default  => $value,
Lines 227-232 sub generate_subfield_form { Link Here
227
                    -id       => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield,
241
                    -id       => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield,
228
                    -class    => "input_marceditor",
242
                    -class    => "input_marceditor",
229
                );
243
                );
244
245
                # If we're on limited edition, and our field is not in the list of subfields to allow,
246
                # then it is read-only
247
                push @scrparam, (-readonly => "readonly"), (-disabled => "disabled")
248
                    if (
249
                        $limitededition
250
                        and !grep { $tag . '$' . $subfieldtag  eq $_ } @subfieldsToAllow
251
                    );
252
                $subfield_data{marc_value} =CGI::scrolling_list(@scrparam);
230
            }
253
            }
231
254
232
        }
255
        }
Lines 345-350 my ($template, $loggedinuser, $cookie) Link Here
345
                 });
368
                 });
346
369
347
370
371
# Does the user have a limited item edition permission?
372
my $uid = GetMember( borrowernumber => $loggedinuser )->{userid} if ($loggedinuser) ;
373
my $limitededition = haspermission($uid,  {'editcatalogue' => 'limited_item_edition'}) if ($uid);
374
# In case user is a superlibrarian, edition is not limited
375
$limitededition = 0 if ($limitededition != 0 && $limitededition->{'superlibrarian'} eq 1);
376
348
my $today_iso = C4::Dates->today('iso');
377
my $today_iso = C4::Dates->today('iso');
349
my $tagslib = &GetMarcStructure(1,$frameworkcode);
378
my $tagslib = &GetMarcStructure(1,$frameworkcode);
350
my $record = GetMarcBiblio($biblionumber);
379
my $record = GetMarcBiblio($biblionumber);
Lines 777-784 if($itemrecord){ Link Here
777
            next if subfield_is_koha_internal_p($subfieldtag);
806
            next if subfield_is_koha_internal_p($subfieldtag);
778
            next if ($tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10");
807
            next if ($tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10");
779
808
780
            my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i);        
809
            my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i, $limitededition);
781
782
            push @fields, "$tag$subfieldtag";
810
            push @fields, "$tag$subfieldtag";
783
            push (@loop_data, $subfield_data);
811
            push (@loop_data, $subfield_data);
784
            $i++;
812
            $i++;
Lines 802-808 foreach my $tag ( keys %{$tagslib}){ Link Here
802
        my @values = (undef);
830
        my @values = (undef);
803
        @values = $itemrecord->field($tag)->subfield($subtag) if ($itemrecord && defined($itemrecord->field($tag)) && defined($itemrecord->field($tag)->subfield($subtag)));
831
        @values = $itemrecord->field($tag)->subfield($subtag) if ($itemrecord && defined($itemrecord->field($tag)) && defined($itemrecord->field($tag)->subfield($subtag)));
804
        for my $value (@values){
832
        for my $value (@values){
805
            my $subfield_data = generate_subfield_form($tag, $subtag, $value, $tagslib, $tagslib->{$tag}->{$subtag}, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i); 
833
            my $subfield_data = generate_subfield_form($tag, $subtag, $value, $tagslib, $tagslib->{$tag}->{$subtag}, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i, $limitededition); 
806
            push (@loop_data, $subfield_data);
834
            push (@loop_data, $subfield_data);
807
            $i++;
835
            $i++;
808
        } 
836
        } 
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt (-2 / +11 lines)
Lines 61-67 function active(numlayer) Link Here
61
}
61
}
62
function Check(f) {
62
function Check(f) {
63
    var total_errors = CheckMandatorySubfields(f);
63
    var total_errors = CheckMandatorySubfields(f);
64
    if (total_errors > 0) {
64
    if (total_errors==0) {
65
        // Explanation about this line:
66
        // In case of limited edition permission, we have to prevent user from modifying some fields.
67
        // But there is no such thing as readonly attribute for select elements.
68
        // So we use disabled instead. But disabled prevent values from being passed through the form at submit.
69
        // So we "un-disable" the elements just before submitting.
70
        // That's a bit clumsy, and if someone comes up with a better solution, feel free to improve that.
71
        $("select[name=field_value]").removeAttr("disabled");
72
        return true;
73
    } else {
65
        var alertString2 = _("Form not submitted because of the following problem(s)");
74
        var alertString2 = _("Form not submitted because of the following problem(s)");
66
        alertString2 += "\n------------------------------------------------------------------------------------\n";
75
        alertString2 += "\n------------------------------------------------------------------------------------\n";
67
        alertString2 += "\n- " + _("%s mandatory fields empty (highlighted)").format(total_errors);
76
        alertString2 += "\n- " + _("%s mandatory fields empty (highlighted)").format(total_errors);
Lines 192-198 $(document).ready(function() { Link Here
192
</div>
201
</div>
193
<div class="yui-u">
202
<div class="yui-u">
194
<div id="cataloguing_additem_newitem">
203
<div id="cataloguing_additem_newitem">
195
    <form method="post" action="/cgi-bin/koha/cataloguing/additem.pl" name="f">
204
    <form id="f" method="post" action="/cgi-bin/koha/cataloguing/additem.pl" name="f">
196
    <input type="hidden" name="op" value="[% op %]" />
205
    <input type="hidden" name="op" value="[% op %]" />
197
    [% IF (popup) %]
206
    [% IF (popup) %]
198
        <input type="hidden" name="popup" value="1" />
207
        <input type="hidden" name="popup" value="1" />
(-)a/tools/batchMod.pl (-1 / +10 lines)
Lines 33-38 use C4::BackgroundJob; Link Here
33
use C4::ClassSource;
33
use C4::ClassSource;
34
use C4::Dates;
34
use C4::Dates;
35
use C4::Debug;
35
use C4::Debug;
36
use C4::Members;
36
use MARC::File::XML;
37
use MARC::File::XML;
37
use List::MoreUtils qw/uniq/;
38
use List::MoreUtils qw/uniq/;
38
39
Lines 69-74 my ($template, $loggedinuser, $cookie) Link Here
69
                 flagsrequired => $template_flag,
70
                 flagsrequired => $template_flag,
70
                 });
71
                 });
71
72
73
# Does the user have a limited item edition permission?
74
my $uid = GetMember( borrowernumber => $loggedinuser )->{userid} if ($loggedinuser) ;
75
my $limitededition = haspermission($uid,  {'tools' => 'items_limited_batchmod'}) if ($uid);
76
# In case user is a superlibrarian, edition is not limited
77
$limitededition = 0 if ($limitededition != 0 && $limitededition->{'superlibrarian'} eq 1);
72
78
73
my $today_iso = C4::Dates->today('iso');
79
my $today_iso = C4::Dates->today('iso');
74
$template->param(today_iso => $today_iso);
80
$template->param(today_iso => $today_iso);
Lines 293-303 unshift (@$branches, $nochange_branch); Link Here
293
299
294
my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
300
my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
295
301
302
# Getting list of subfields to keep when limited batchmod edit is enabled
303
my $subfieldsToAllowForBatchmod = C4::Context->preference('SubfieldsToAllowForLimitedBatchmod');
304
my @subfieldsToAllow = split(/ /, $subfieldsToAllowForBatchmod);
296
305
297
foreach my $tag (sort keys %{$tagslib}) {
306
foreach my $tag (sort keys %{$tagslib}) {
298
    # loop through each subfield
307
    # loop through each subfield
299
    foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
308
    foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
300
     	next if subfield_is_koha_internal_p($subfield);
309
     	next if subfield_is_koha_internal_p($subfield);
310
        next if ($limitededition && !grep { $tag . '$' . $subfield eq $_ } @subfieldsToAllow );
301
    	next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10");
311
    	next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10");
302
        # barcode and stocknumber are not meant to be batch-modified
312
        # barcode and stocknumber are not meant to be batch-modified
303
    	next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.barcode';
313
    	next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.barcode';
304
- 

Return to bug 7673