Bugzilla – Attachment 13004 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), 12.87 KB, created by
Jonathan Druart
on 2012-10-23 09:49:11 UTC
(
hide
)
Description:
Bug 7673 : New patron permissions
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2012-10-23 09:49:11 UTC
Size:
12.87 KB
patch
obsolete
>From 8352b218fd806a0ccd087e2cfec6d4e4b36ce22c 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 >--- > cataloguing/additem.pl | 40 ++++++++++++++++---- > .../data/mysql/en/mandatory/userpermissions.sql | 3 ++ > installer/data/mysql/updatedatabase.pl | 19 ++++++++++ > .../intranet-tmpl/prog/en/includes/cat-toolbar.inc | 2 +- > .../prog/en/modules/cataloguing/additem.tt | 9 ++++- > tools/batchMod.pl | 7 ++++ > 6 files changed, 71 insertions(+), 9 deletions(-) > >diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl >index 7b7dbac..ed27fa6 100755 >--- a/cataloguing/additem.pl >+++ b/cataloguing/additem.pl >@@ -35,7 +35,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; >@@ -103,9 +103,13 @@ 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 ($barcodefield, $barcodesubfield) = GetMarcFromKohaField("items.barcode", $frameworkcode); >+ my ($notesfield, $notessubfield) = GetMarcFromKohaField("items.itemnotes", $frameworkcode); >+ my ($notforloanfield, $notforloansubfield) = GetMarcFromKohaField("items.notforloan", $frameworkcode); >+ > my %subfield_data; > my $dbh = C4::Context->dbh; > my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib"); >@@ -155,6 +159,14 @@ sub generate_subfield_form { > $value = $input->param('barcode'); > } > my $attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="$subfield_data{maxlength}" ); >+ $attributes_no_value .= 'readonly="readonly" ' >+ if ( >+ $limitededition >+ and $subfieldtag ne $barcodesubfield >+ and $subfieldtag ne $notessubfield >+ and $subfieldtag ne $notforloansubfield >+ ); >+ > my $attributes = qq($attributes_no_value value="$value" ); > > if ( $subfieldlib->{authorised_value} ) { >@@ -215,7 +227,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 +239,15 @@ sub generate_subfield_form { > -id => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield, > -class => "input_marceditor", > ); >+ >+ push @scrparam, (-readonly => "readonly"), (-disabled => "disabled") >+ if ( >+ $limitededition >+ and $subfieldtag ne $barcodesubfield >+ and $subfieldtag ne $notessubfield >+ and $subfieldtag ne $notforloansubfield >+ ); >+ $subfield_data{marc_value} =CGI::scrolling_list(@scrparam); > } > > } >@@ -338,6 +359,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); >@@ -762,8 +789,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++; >@@ -787,7 +813,7 @@ foreach my $tag ( keys %{$tagslib}){ > my @values = (undef); > @values = $itemrecord->field($tag)->subfield($subtag) if ($itemrecord && 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/installer/data/mysql/en/mandatory/userpermissions.sql b/installer/data/mysql/en/mandatory/userpermissions.sql >index 070e8f5..6e083e1 100644 >--- a/installer/data/mysql/en/mandatory/userpermissions.sql >+++ b/installer/data/mysql/en/mandatory/userpermissions.sql >@@ -8,6 +8,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES > ( 9, 'edit_catalogue', 'Edit catalog (Modify bibliographic/holdings data)'), > ( 9, 'fast_cataloging', 'Fast cataloging'), > ( 9, 'edit_items', 'Edit Items'), >+ ( 9, 'limited_item_edition', 'Limit item modification to barcode, status and note (please note that edit_item is still required)'), >+ ( 9, 'delete_all_items', 'Delete all items'), > (11, 'vendors_manage', 'Manage vendors'), > (11, 'contracts_manage', 'Manage contracts'), > (11, 'period_manage', 'Manage periods'), >@@ -37,6 +39,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES > (13, 'batch_upload_patron_images', 'Upload patron images in batch or one at a time'), > (13, 'schedule_tasks', 'Schedule tasks to run'), > (13, 'items_batchmod', 'Perform batch modification of items'), >+ (13, 'items_limited_batchmod', 'Limit batch item modification to item status (please note that items_batchmod is still required)'), > (13, 'items_batchdel', 'Perform batch deletion of items'), > (13, 'manage_csv_profiles', 'Manage CSV export profiles'), > (13, 'moderate_tags', 'Moderate patron tags'), >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index 4759034..fc41b02 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -6019,6 +6019,25 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { > SetVersion ($DBversion); > } > >+$DBversion = "3.09.00.XXX"; >+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { >+ $dbh->do(qq{ >+ INSERT INTO permissions (module_bit, code, description) VALUES ('9', 'limited_item_edition', 'Limit item modification to barcode, status and note (please note that edit_item is still required)'); >+ }); >+ >+ $dbh->do(qq{ >+ INSERT INTO permissions (module_bit, code, description) VALUES ('9', 'delete_all_items', 'Delete all items at once'); >+ }); >+ >+ $dbh->do(qq{ >+ INSERT INTO permissions (module_bit, code, description) VALUES ('13', 'items_limited_batchmod', 'Limit batch item modification to item status (please note that items_batchmod is still required)'); >+ }); >+ >+ print "Upgrade to $DBversion done (Adds new permissions for cataloguing and batch item modification)\n"; >+ >+ SetVersion($DBversion); >+} >+ > =head1 FUNCTIONS > > =head2 TableExists($table) >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc >index 740a3b5..09c2b03 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc >@@ -118,7 +118,7 @@ function confirm_items_deletion() { > [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]{ text: _("Edit as new (duplicate)"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=[% biblionumber %]&frameworkcode=&op=duplicate" },[% END %] > [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]{ text: _("Replace record via Z39.50"), onclick: {fn: PopupZ3950 } },[% END %] > [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]{ text: _("Delete record"), onclick: {fn: confirm_deletion }[% IF ( count ) %],id:'disabled'[% END %] },[% END %] >- [% IF ( CAN_user_editcatalogue_edit_items ) %]{ text: _("Delete all items"), onclick: {fn: confirm_items_deletion }[% UNLESS ( count ) %],id:'disabled'[% END %] }[% END %] >+ [% IF ( CAN_user_editcatalogue_delete_all_items ) %]{ text: _("Delete all items"), onclick: {fn: confirm_items_deletion }[% UNLESS ( count ) %],id:'disabled'[% END %] }[% END %] > ]; > if(editmenu.length){ > new YAHOO.widget.Button({ >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 05750b2..191ac4f 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt >@@ -52,6 +52,13 @@ function Check(f) { > > var alertString2; > 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 { > alertString2 = _("Form not submitted because of the following problem(s)"); >@@ -222,7 +229,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 f0ea8f8..710aa06 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; > > my $input = new CGI; >@@ -68,6 +69,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); >@@ -281,6 +287,7 @@ 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 && $tagslib->{$tag}->{$subfield}->{'kohafield'} ne 'items.notforloan'); > 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'; >-- >1.7.10.4
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