Bugzilla – Attachment 31010 Details for
Bug 7673
New patron permissions to manage items (edit, batchmod, delete all)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 7673 : New patron permissions
Bug-7673--New-patron-permissions.patch (text/plain), 9.81 KB, created by
Jonathan Druart
on 2014-08-20 10:44:57 UTC
(
hide
)
Description:
Bug 7673 : New patron permissions
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2014-08-20 10:44:57 UTC
Size:
9.81 KB
patch
obsolete
>From 89ad6f60196d9e32a97facd1d65a5388c4818222 Mon Sep 17 00:00:00 2001 >From: Matthias Meusburger <matthias.meusburger@biblibre.com> >Date: Fri, 30 Mar 2012 13:52:38 +0200 >Subject: [PATCH] Bug 7673 : New patron permissions > > This patch adds the following permissions: > > - editcatalogue.limited_item_edition: Limit item modification to barcode, status and note > - editcatalogue.delete_all_items: Delete all items at once > - tools.items_limited_batchmod: Limit batch item modification to item status > > The SubfieldsToAllowForLimitedEdition syspref is used to define which subfields can be edited > when the editcatalogue.limited_item_edition permission is enabled. > > In the same way, the SubfieldsToAllowForLimitedBatchmod is used to define which subfields > can be edited when the tools.items_limited_batchmod permission is enabled. > >Signed-off-by: Koha Team AMU <koha.aixmarseille@gmail.com> >--- > cataloguing/additem.pl | 42 ++++++++++++++++++---- > .../prog/en/modules/cataloguing/additem.tt | 13 +++++-- > tools/batchMod.pl | 10 ++++++ > 3 files changed, 56 insertions(+), 9 deletions(-) > >diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl >index 7110f7f..7105753 100755 >--- a/cataloguing/additem.pl >+++ b/cataloguing/additem.pl >@@ -36,7 +36,7 @@ use List::MoreUtils qw/any/; > use C4::Search; > use Storable qw(thaw freeze); > use URI::Escape; >- >+use C4::Members; > > use MARC::File::XML; > use URI::Escape; >@@ -104,9 +104,10 @@ sub _increment_barcode { > > > 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, $limitededition) = @_; > >- my $frameworkcode = &GetFrameworkCode($biblionumber); >+ my $frameworkcode = &GetFrameworkCode($biblionumber); >+ > my %subfield_data; > my $dbh = C4::Context->dbh; > >@@ -156,6 +157,19 @@ sub generate_subfield_form { > } > 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 limited edition is enabled >+ my $subfieldsToAllowForLimitedEdition = C4::Context->preference('SubfieldsToAllowForLimitedEdition'); >+ my @subfieldsToAllow = split(/ /, $subfieldsToAllowForLimitedEdition); >+ >+ # If we're on limited edition, and our field is not in the list of subfields to allow, >+ # then it is read-only >+ $attributes_no_value .= 'readonly="readonly" ' >+ if ( >+ $limitededition >+ and !grep { $tag . '$' . $subfieldtag eq $_ } @subfieldsToAllow >+ ); >+ > my $attributes = qq($attributes_no_value value="$value" ); > > if ( $subfieldlib->{authorised_value} ) { >@@ -216,7 +230,7 @@ sub generate_subfield_form { > $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, >@@ -227,6 +241,15 @@ sub generate_subfield_form { > -id => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield, > -class => "input_marceditor", > ); >+ >+ # If we're on limited edition, and our field is not in the list of subfields to allow, >+ # then it is read-only >+ push @scrparam, (-readonly => "readonly"), (-disabled => "disabled") >+ if ( >+ $limitededition >+ and !grep { $tag . '$' . $subfieldtag eq $_ } @subfieldsToAllow >+ ); >+ $subfield_data{marc_value} =CGI::scrolling_list(@scrparam); > } > > } >@@ -345,6 +368,12 @@ my ($template, $loggedinuser, $cookie) > }); > > >+# Does the user have a limited item edition permission? >+my $uid = GetMember( borrowernumber => $loggedinuser )->{userid} if ($loggedinuser) ; >+my $limitededition = haspermission($uid, {'editcatalogue' => 'limited_item_edition'}) if ($uid); >+# In case user is a superlibrarian, edition is not limited >+$limitededition = 0 if ($limitededition != 0 && $limitededition->{'superlibrarian'} eq 1); >+ > my $today_iso = C4::Dates->today('iso'); > my $tagslib = &GetMarcStructure(1,$frameworkcode); > my $record = GetMarcBiblio($biblionumber); >@@ -777,8 +806,7 @@ if($itemrecord){ > 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, $limitededition); > push @fields, "$tag$subfieldtag"; > push (@loop_data, $subfield_data); > $i++; >@@ -802,7 +830,7 @@ foreach my $tag ( keys %{$tagslib}){ > 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, $limitededition); > push (@loop_data, $subfield_data); > $i++; > } >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt >index 85a4486..1d11caf 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt >@@ -61,7 +61,16 @@ function active(numlayer) > } > function Check(f) { > var total_errors = CheckMandatorySubfields(f); >- if (total_errors > 0) { >+ if (total_errors==0) { >+ // Explanation about this line: >+ // In case of limited edition permission, we have to prevent user from modifying some fields. >+ // But there is no such thing as readonly attribute for select elements. >+ // So we use disabled instead. But disabled prevent values from being passed through the form at submit. >+ // So we "un-disable" the elements just before submitting. >+ // That's a bit clumsy, and if someone comes up with a better solution, feel free to improve that. >+ $("select[name=field_value]").removeAttr("disabled"); >+ return true; >+ } else { > var alertString2 = _("Form not submitted because of the following problem(s)"); > alertString2 += "\n------------------------------------------------------------------------------------\n"; > alertString2 += "\n- " + _("%s mandatory fields empty (highlighted)").format(total_errors); >@@ -192,7 +201,7 @@ $(document).ready(function() { > </div> > <div class="yui-u"> > <div id="cataloguing_additem_newitem"> >- <form method="post" action="/cgi-bin/koha/cataloguing/additem.pl" name="f"> >+ <form id="f" method="post" action="/cgi-bin/koha/cataloguing/additem.pl" name="f"> > <input type="hidden" name="op" value="[% op %]" /> > [% IF (popup) %] > <input type="hidden" name="popup" value="1" /> >diff --git a/tools/batchMod.pl b/tools/batchMod.pl >index 8cf1204..ca10f61 100755 >--- a/tools/batchMod.pl >+++ b/tools/batchMod.pl >@@ -33,6 +33,7 @@ use C4::BackgroundJob; > use C4::ClassSource; > use C4::Dates; > use C4::Debug; >+use C4::Members; > use MARC::File::XML; > use List::MoreUtils qw/uniq/; > >@@ -69,6 +70,11 @@ my ($template, $loggedinuser, $cookie) > flagsrequired => $template_flag, > }); > >+# Does the user have a limited item edition permission? >+my $uid = GetMember( borrowernumber => $loggedinuser )->{userid} if ($loggedinuser) ; >+my $limitededition = haspermission($uid, {'tools' => 'items_limited_batchmod'}) if ($uid); >+# In case user is a superlibrarian, edition is not limited >+$limitededition = 0 if ($limitededition != 0 && $limitededition->{'superlibrarian'} eq 1); > > my $today_iso = C4::Dates->today('iso'); > $template->param(today_iso => $today_iso); >@@ -293,11 +299,15 @@ unshift (@$branches, $nochange_branch); > > my $pref_itemcallnumber = C4::Context->preference('itemcallnumber'); > >+# Getting list of subfields to keep when limited batchmod edit is enabled >+my $subfieldsToAllowForBatchmod = C4::Context->preference('SubfieldsToAllowForLimitedBatchmod'); >+my @subfieldsToAllow = split(/ /, $subfieldsToAllowForBatchmod); > > foreach my $tag (sort keys %{$tagslib}) { > # loop through each subfield > foreach my $subfield (sort keys %{$tagslib->{$tag}}) { > next if subfield_is_koha_internal_p($subfield); >+ next if ($limitededition && !grep { $tag . '$' . $subfield eq $_ } @subfieldsToAllow ); > next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10"); > # barcode and stocknumber are not meant to be batch-modified > next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.barcode'; >-- >2.0.0.rc2
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 7673
:
8714
|
9857
|
10360
|
12102
|
13004
|
16225
|
16239
|
16368
|
16371
|
23266
|
23267
|
23270
|
23271
|
26008
|
26009
|
26704
|
26705
|
26722
|
27631
|
27632
|
27633
|
27634
|
27635
|
27636
|
27637
|
27638
|
27640
|
27641
|
28007
|
28008
|
28009
|
28010
|
28011
|
28012
|
28013
|
28014
|
28015
|
29550
|
30910
|
30911
|
30912
|
30913
|
30914
|
30915
|
30916
|
30917
|
30918
|
30919
|
31010
|
31011
|
31012
|
31013
|
31015
|
31016
|
31017
|
31019
|
32200
|
32201
|
32215
|
32217
|
32219
|
32220
|
32222
|
32224
|
32225
|
32226
|
32227
|
32228
|
32928
|
32962
|
32993
|
33487