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(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="50" maxlength="$subfield_data{maxlength}" );
158
        my $attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="50" maxlength="$subfield_data{maxlength}" );
158
        my $attributes_no_value_textarea = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" rows="5" cols="64" );
159
        my $attributes_no_value_textarea = qq(tabindex="1" 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 228-233 sub generate_subfield_form { Link Here
228
                    -id       => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield,
242
                    -id       => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield,
229
                    -class    => "input_marceditor",
243
                    -class    => "input_marceditor",
230
                );
244
                );
245
246
                # If we're on limited edition, and our field is not in the list of subfields to allow,
247
                # then it is read-only
248
                push @scrparam, (-readonly => "readonly"), (-disabled => "disabled")
249
                    if (
250
                        $limitededition
251
                        and !grep { $tag . '$' . $subfieldtag  eq $_ } @subfieldsToAllow
252
                    );
253
                $subfield_data{marc_value} =CGI::scrolling_list(@scrparam);
231
            }
254
            }
232
255
233
        }
256
        }
Lines 346-351 my ($template, $loggedinuser, $cookie) Link Here
346
                 });
369
                 });
347
370
348
371
372
# Does the user have a limited item edition permission?
373
my $uid = GetMember( borrowernumber => $loggedinuser )->{userid} if ($loggedinuser) ;
374
my $limitededition = haspermission($uid,  {'editcatalogue' => 'limited_item_edition'}) if ($uid);
375
# In case user is a superlibrarian, edition is not limited
376
$limitededition = 0 if ($limitededition != 0 && $limitededition->{'superlibrarian'} eq 1);
377
349
my $today_iso = C4::Dates->today('iso');
378
my $today_iso = C4::Dates->today('iso');
350
my $tagslib = &GetMarcStructure(1,$frameworkcode);
379
my $tagslib = &GetMarcStructure(1,$frameworkcode);
351
my $record = GetMarcBiblio($biblionumber);
380
my $record = GetMarcBiblio($biblionumber);
Lines 778-785 if($itemrecord){ Link Here
778
            next if subfield_is_koha_internal_p($subfieldtag);
807
            next if subfield_is_koha_internal_p($subfieldtag);
779
            next if ($tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10");
808
            next if ($tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10");
780
809
781
            my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i);        
810
            my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i, $limitededition);
782
783
            push @fields, "$tag$subfieldtag";
811
            push @fields, "$tag$subfieldtag";
784
            push (@loop_data, $subfield_data);
812
            push (@loop_data, $subfield_data);
785
            $i++;
813
            $i++;
Lines 803-809 foreach my $tag ( keys %{$tagslib}){ Link Here
803
        my @values = (undef);
831
        my @values = (undef);
804
        @values = $itemrecord->field($tag)->subfield($subtag) if ($itemrecord && defined($itemrecord->field($tag)) && defined($itemrecord->field($tag)->subfield($subtag)));
832
        @values = $itemrecord->field($tag)->subfield($subtag) if ($itemrecord && defined($itemrecord->field($tag)) && defined($itemrecord->field($tag)->subfield($subtag)));
805
        for my $value (@values){
833
        for my $value (@values){
806
            my $subfield_data = generate_subfield_form($tag, $subtag, $value, $tagslib, $tagslib->{$tag}->{$subtag}, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i); 
834
            my $subfield_data = generate_subfield_form($tag, $subtag, $value, $tagslib, $tagslib->{$tag}->{$subtag}, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i, $limitededition); 
807
            push (@loop_data, $subfield_data);
835
            push (@loop_data, $subfield_data);
808
            $i++;
836
            $i++;
809
        } 
837
        } 
(-)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- "+ total_errors + _(" mandatory fields empty (highlighted)");
76
        alertString2 += "\n- "+ total_errors + _(" mandatory fields empty (highlighted)");
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