use C4::Search;
use Storable qw(thaw freeze);
use URI::Escape;
-
+use C4::Members;
use MARC::File::XML;
use URI::Escape;
sub generate_subfield_form {
- my ($tag, $subfieldtag, $value, $tagslib,$subfieldlib, $branches, $today_iso, $biblionumber, $temp, $loop_data, $i) = @_;
+ my ($tag, $subfieldtag, $value, $tagslib,$subfieldlib, $branches, $today_iso, $biblionumber, $temp, $loop_data, $i, $restrictededition) = @_;
- my $frameworkcode = &GetFrameworkCode($biblionumber);
+ my $frameworkcode = &GetFrameworkCode($biblionumber);
+
my %subfield_data;
my $dbh = C4::Context->dbh;
}
my $attributes_no_value = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" size="50" maxlength="$subfield_data{maxlength}" );
my $attributes_no_value_textarea = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" rows="5" cols="64" );
+
+ # Getting list of subfields to keep when restricted editing is enabled
+ my $subfieldsToAllowForRestrictedEditing = C4::Context->preference('SubfieldsToAllowForRestrictedEditing');
+ my $allowAllSubfields = (
+ not defined $subfieldsToAllowForRestrictedEditing
+ or $subfieldsToAllowForRestrictedEditing == q||
+ ) ? 1 : 0;
+ my @subfieldsToAllow = split(/ /, $subfieldsToAllowForRestrictedEditing);
+
+ # If we're on restricted editing, and our field is not in the list of subfields to allow,
+ # then it is read-only
+ $attributes_no_value .= 'readonly="readonly" '
+ if (
+ not $allowAllSubfields
+ and $restrictededition
+ and !grep { $tag . '$' . $subfieldtag eq $_ } @subfieldsToAllow
+ );
+
my $attributes = qq($attributes_no_value value="$value" );
if ( $subfieldlib->{authorised_value} ) {
$subfield_data{marc_value} = qq(<input type="hidden" $attributes /> $authorised_lib{$value});
}
else {
- $subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list
+ my @scrparam = (
-name => "field_value",
-values => \@authorised_values,
-default => $value,
-id => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield,
-class => "input_marceditor",
);
+
+ # If we're on restricted editing, and our field is not in the list of subfields to allow,
+ # then it is read-only
+ push @scrparam, (-readonly => "readonly"), (-disabled => "disabled")
+ if (
+ not $allowAllSubfields
+ and $restrictededition
+ and !grep { $tag . '$' . $subfieldtag eq $_ } @subfieldsToAllow
+ );
+ $subfield_data{marc_value} =CGI::scrolling_list(@scrparam);
}
}
});
+# Does the user have a restricted item editing permission?
+my $uid = $loggedinuser ? GetMember( borrowernumber => $loggedinuser )->{userid} : undef;
+my $restrictededition = $uid ? haspermission($uid, {'editcatalogue' => 'edit_items_restricted'}) : undef;
+# In case user is a superlibrarian, editing is not restricted
+$restrictededition = 0 if ($restrictededition != 0 && C4::Context->IsSuperLibrarian());
+# In case user has fast cataloging permission (and we're in fast cataloging), editing is not restricted
+$restrictededition = 0 if ($restrictededition != 0 && $frameworkcode eq 'FA' && haspermission($uid, {'editcatalogue' => 'fast_cataloging'}));
+
my $today_iso = C4::Dates->today('iso');
my $tagslib = &GetMarcStructure(1,$frameworkcode);
my $record = GetMarcBiblio($biblionumber);
next if subfield_is_koha_internal_p($subfieldtag);
next if ($tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10");
- my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i);
-
+ my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i, $restrictededition);
push @fields, "$tag$subfieldtag";
push (@loop_data, $subfield_data);
$i++;
my @values = (undef);
@values = $itemrecord->field($tag)->subfield($subtag) if ($itemrecord && defined($itemrecord->field($tag)) && defined($itemrecord->field($tag)->subfield($subtag)));
for my $value (@values){
- my $subfield_data = generate_subfield_form($tag, $subtag, $value, $tagslib, $tagslib->{$tag}->{$subtag}, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i);
+ my $subfield_data = generate_subfield_form($tag, $subtag, $value, $tagslib, $tagslib->{$tag}->{$subtag}, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i, $restrictededition);
push (@loop_data, $subfield_data);
$i++;
- }
+ }
}
}
@loop_data = sort {$a->{subfield} cmp $b->{subfield} } @loop_data;