Bug 20256: Use new methods
authorKyle M Hall <kyle@bywatersolutions.com>
Thu, 28 Mar 2019 15:07:02 +0000 (11:07 -0400)
committerTomas Cohen Arazi <tomascohen@theke.io>
Thu, 2 Feb 2023 14:59:26 +0000 (11:59 -0300)
Signed-off-by: Bob Bennhoff - CLiC <bbennhoff@clicweb.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
16 files changed:
Koha/Item.pm
Koha/UI/Table/Builder/Items.pm
catalogue/detail.pl
catalogue/itemsearch.pl
catalogue/moredetail.pl
cataloguing/additem.pl
course_reserves/course-details.pl
koha-tmpl/intranet-tmpl/prog/en/includes/catalogue/itemsearch_item.json.inc
koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc
koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc
koha-tmpl/intranet-tmpl/prog/en/modules/admin/library_groups.tt
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/itemsearch_json.tt
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt
koha-tmpl/intranet-tmpl/prog/en/modules/course_reserves/course-details.tt
tools/batchMod.pl

index 17075e4..89d1a94 100644 (file)
@@ -295,9 +295,8 @@ sub safe_to_delete {
 
     $error //= "not_same_branch"
       if defined C4::Context->userenv
-      && !C4::Context->IsSuperLibrarian()
-      && C4::Context->preference("IndependentBranches")
-      && ( C4::Context->userenv->{branch} ne $self->homebranch );
+      and defined C4::Context->userenv->{number}
+      and !Koha::Patrons->find( C4::Context->userenv->{number} )->can_edit_item( $self );
 
     # check it doesn't have a waiting reserve
     $error //= "book_reserved"
index 8837ad5..a723099 100644 (file)
@@ -71,7 +71,11 @@ Use it with:
 
 sub build_table {
     my ( $self, $params ) = @_;
+
+    my $patron = $params->{patron};
+
     my %itemnumbers_to_idx = map { $self->{itemnumbers}->[$_] => $_ } 0..$#{$self->{itemnumbers}};
+
     my $items = Koha::Items->search( { itemnumber => $self->{itemnumbers} } );
 
     my @items;
@@ -85,6 +89,7 @@ sub build_table {
             holds          => $item->biblio->holds->count,
             item_holds     => $item->holds->count,
             is_checked_out => $item->checkout ? 1 : 0,
+            nomod          => $patron ? !$patron->can_edit_item($item) : 0,
         };
         push @items, $item_info;
     }
index c7908bc..905120e 100755 (executable)
@@ -442,6 +442,8 @@ foreach my $item (@items) {
         $item_info->{'course_reserves'} = GetItemCourseReservesInfo( itemnumber => $item->itemnumber );
     }
 
+    $item_info->{can_be_edited} = $patron->can_edit_item( $item );
+
     if ( C4::Context->preference("LocalCoverImages") == 1 ) {
         $item_info->{cover_images} = $item->cover_images;
     }
index e185243..72074a8 100755 (executable)
@@ -251,10 +251,11 @@ if ( defined $format ) {
     }
 
     $template->param(
-        filter => $filter,
+        filter        => $filter,
         search_params => $search_params,
-        results => $results,
-        total_rows => $total_rows,
+        results       => $results,
+        total_rows    => $total_rows,
+        user          => Koha::Patrons->find( $borrowernumber ),
     );
 
     if ($format eq 'csv') {
index 6611790..46ac7f7 100755 (executable)
@@ -247,6 +247,8 @@ foreach my $item (@items){
         }
     );
 
+    $item_info->{nomod} = !$patron->can_edit_item( $item );
+
     push @item_data, $item_info;
 }
 
index ed31390..586f89c 100755 (executable)
@@ -158,7 +158,15 @@ my ($template, $loggedinuser, $cookie)
 
 
 # Does the user have a restricted item editing permission?
-my $uid = Koha::Patrons->find( $loggedinuser )->userid;
+my $patron = Koha::Patrons->find( $loggedinuser );
+
+my $item = $itemnumber ? Koha::Items->find( $itemnumber ) : undef;
+if ( $item && !$patron->can_edit_item( $item ) ) {
+    print $input->redirect("/cgi-bin/koha/catalogue/detail.pl?biblionumber=$biblionumber");
+    exit;
+}
+
+my $uid = $patron->userid;
 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());
@@ -626,7 +634,9 @@ if ($op) {
 
 my @items;
 for my $item ( $biblio->items->as_list, $biblio->host_items->as_list ) {
-    push @items, $item->columns_to_str;
+    my $i = $item->columns_to_str;
+    $i->{nomod} = 1 unless $patron->can_edit_item($item);
+    push @items, $i;
 }
 
 my @witness_attributes = uniq map {
index e5c7efe..c5d74f9 100755 (executable)
@@ -66,6 +66,7 @@ my $course_reserves = GetCourseReserves(
 $template->param(
     course          => $course,
     course_reserves => $course_reserves,
+    user            => Koha::Patrons->find( $loggedinuser ),
 );
 
 output_html_with_http_headers $cgi, $cookie, $template->output;
index 5d30c08..39e95ac 100644 (file)
@@ -32,6 +32,6 @@
   "[% (item.issues || 0) | html %]",
   "[% IF item.checkout %][% item.checkout.date_due | $KohaDates %][% END %]",
   "[% FILTER escape_quotes ~%]
-    <div class="btn-group dropup"><button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-pencil"></i> Edit <span class="caret"></span> </button> <ul class="dropdown-menu pull-right"> <li><a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=[% item.biblionumber | uri %]&itemnumber=[% item.itemnumber | uri %]">Edit item</a></li> <li><a href="/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=[% item.biblionumber | html %]">Edit record</a></li> </ul> </div>
+    <div class="btn-group dropup"><button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-pencil"></i> Edit <span class="caret"></span> </button> <ul class="dropdown-menu pull-right"> [% IF user.can_edit_item( item ) %]<li><a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=[% item.biblionumber | uri %]&itemnumber=[% item.itemnumber | uri %]">Edit item</a></li>[% END %] <li><a href="/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=[% item.biblionumber | html %]">Edit record</a></li> </ul> </div>
   [%~ END %]"
 ]
index 52d645f..dd8682a 100644 (file)
         </thead>
         <tbody>
             [% FOREACH item IN items %]
-                [% SET can_be_edited = ! ( Koha.Preference('IndependentBranches') && ! logged_in_user.is_superlibrarian && item.homebranch != Branches.GetLoggedInBranchname() ) %]
+                [% SET can_be_edited = !item.nomod && !( Koha.Preference('IndependentBranches') && ! logged_in_user && item.homebranch != Branches.GetLoggedInBranchname() ) %]
 
                 <tr>
                     <td>[% item.index + 1 | html %]</td>
index a406d68..a8bfd89 100644 (file)
         <span class="permissioncode">([% name | html %])</span>
     [%- CASE 'edit_items' -%]
         <span class="sub_permission edit_items_subpermission">
-            Edit items
+            Edit items (not including items restricted by library group)
         </span>
         <span class="permissioncode">([% name | html %])</span>
     [%- CASE 'edit_any_item' -%]
         <span class="sub_permission edit_items_subpermission">
-            Edit any item. If not set the logged in user can only edit items whose home library matches the logged in library.
+            Edit any item including items that would otherwise be restricted
         </span>
         <span class="permissioncode">([% name | html %])</span>
     [%- CASE 'edit_items_restricted' -%]
index 7b631bd..49dba18 100644 (file)
                     <li>Hide patron's info for librarians outside of this group.</li>
                 [% END %]
                 [% IF group.ft_limit_item_editing %]
-                    <li>Limit item editing for librarians outside of this group.</li>
+                    <li>Limit item editing to librarians inside of this group.</li>
                 [% END %]
                 [% IF group.ft_search_groups_opac %]
                     <li>Use for OPAC search groups</li>
index 9d9e3a3..36d9f84 100644 (file)
                 <tr id="item_[% item.itemnumber | html %]" data-itemnumber="[% item.itemnumber | html %]" data-duedate="[% item.datedue | html %]">
                 [% IF (StaffDetailItemSelection) %]
                     <td style="text-align:center;vertical-align:middle">
-                        <input type="checkbox" value="[% item.itemnumber | html %]" name="itemnumber" />
+                        [% IF item.can_be_edited %]
+                            <input type="checkbox" value="[% item.itemnumber | html %]" name="itemnumber" />
+                        [% END %]
                     </td>
                 [% END %]
                     [% IF Koha.Preference('LocalCoverImages') && ( tab == 'holdings' && itemloop_has_images || tab == 'otherholdings' && otheritemloop_has_images ) %]
@@ -638,7 +640,7 @@ Note that permanent location is a code, and location may be an authval.
 
                 [% IF CAN_user_editcatalogue_edit_items %]
                     <td class="actions">
-                        [% UNLESS item.cannot_be_edited %]
+                        [% IF item.can_be_edited %]
                             [% IF Koha.Preference('LocalCoverImages') OR Koha.Preference('OPACLocalCoverImages') %]
                                 <div class="btn-group">
                                     <a  class="btn btn-default btn-xs" href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=[% item.biblionumber | html %]&itemnumber=[% item.itemnumber | html %]#edititem"><i class="fa fa-pencil"></i> Edit</a><a class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></a>
index 3c7b17d..3d46ae4 100644 (file)
@@ -4,7 +4,7 @@
   "iTotalDisplayRecords": [% total_rows | html %],
   "aaData": [
   [%- FOREACH item IN results -%]
-    [%- INCLUDE 'catalogue/itemsearch_item.json.inc' item = item -%]
+    [%- INCLUDE 'catalogue/itemsearch_item.json.inc' item = item, user = user -%]
     [%- UNLESS loop.last %],[% END -%]
   [%- END -%]
   ]
index 6d3450f..38fdd89 100644 (file)
                             [% IF item.biblionumber != biblio.biblionumber %] [%# Host item %]
                                 <li><a href="additem.pl?op=edititem&amp;biblionumber=[% item.biblionumber | uri %]&amp;itemnumber=[% item.itemnumber | uri %]#edititem">Edit in host</a> &nbsp; <a class="delete" href="/cgi-bin/koha/cataloguing/additem.pl?op=delinkitem&amp;biblionumber=[% biblio.biblionumber | html %]&amp;hostitemnumber=[% item.itemnumber | html %]&amp;searchid=[% searchid | html %]">Delink</a></li>
                             [% ELSE %]
-                                <li><a href="additem.pl?op=edititem&amp;biblionumber=[% biblio.biblionumber | uri %]&amp;itemnumber=[% item.itemnumber | uri %]&amp;searchid=[% searchid | uri %]#edititem">Edit</a></li>
+                                [% UNLESS item.nomod %]
+                                    <li><a href="additem.pl?op=edititem&amp;biblionumber=[% biblio.biblionumber | uri %]&amp;itemnumber=[% item.itemnumber | uri %]&amp;searchid=[% searchid | uri %]#edititem">Edit</a></li>
+                                [% END %]
                                 <li><a href="additem.pl?op=dupeitem&amp;biblionumber=[% biblio.biblionumber | uri %]&amp;itemnumber=[% item.itemnumber | uri %]&amp;searchid=[% searchid | uri %]#additema">Duplicate</a></li>
                                 <li class="print_label"><a href="/cgi-bin/koha/labels/label-edit-batch.pl?op=add&amp;number_type=itemnumber&amp;number_list=[% item.itemnumber | uri %]" target="_blank" >Print label</a></li>
-                                <li><a class="delete" href="/cgi-bin/koha/cataloguing/additem.pl?op=delitem&amp;biblionumber=[% item.biblionumber | html %]&amp;itemnumber=[% item.itemnumber | html %]&amp;searchid=[% searchid | html %]" onclick="return confirm_deletion();">Delete</a></li>
+                                [% UNLESS item.nomod %]
+                                    <li><a class="delete" href="/cgi-bin/koha/cataloguing/additem.pl?op=delitem&amp;biblionumber=[% item.biblionumber | html %]&amp;itemnumber=[% item.itemnumber | html %]&amp;searchid=[% searchid | html %]" onclick="return confirm_deletion();">Delete</a></li>
+                                [% END %]
                             [% END %]
                                 [% IF ( OPACBaseURL ) %]
                                     <li class="view-in-opac"><a target="_blank" href="[% Koha.Preference('OPACBaseURL') | url %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% item.biblionumber | uri %]">OPAC view</a></li>
                         [% END %]
                     [% FOREACH header IN item_header_loop %]
                         [% SET attribute = header.attribute %]
+                        [% SET can_mod = item.nomod ? "nomod" : "canmod" %]
                         [% IF header.attribute AND date_fields.grep('^' _ attribute _ '$').size %]
-                            <td data-order="[% item.$attribute | html %]">[% item.$attribute | $KohaDates %]</td>
+                            <td class="[% can_mod | html %]" data-order="[% item.$attribute | html %]">[% item.$attribute | $KohaDates %]</td>
                         [% ELSIF ( item.$attribute && ( attribute == 'price' || attribute == 'replacementprice' ) ) %]
-                            <td data-order="[% item.$attribute | html %]">[% item.$attribute | $Price %]</td>
+                            <td class="[% can_mod | html %]" data-order="[% item.$attribute | html %]">[% item.$attribute | $Price %]</td>
                         [% ELSE %]
-                            <td>[% item.$attribute | html %]</td>
+                            <td class="[% can_mod | html %]">[% item.$attribute | html %]</td>
                         [% END %]
                     [% END %]
                     </tr>
index 36abc1d..623974a 100644 (file)
 
                                     [% IF CAN_user_coursereserves_add_reserves || CAN_user_coursereserves_delete_reserves %]
                                         <td class="actions">
-                                            [% IF CAN_user_coursereserves_add_reserves %]
+                                            [% IF CAN_user_coursereserves_add_reserves && user.can_edit_item( cr.item ) %]
                                                 <a class="btn btn-default btn-xs" href="add_items.pl?course_id=[% course.course_id | html %]&amp;itemnumber=[% cr.item.itemnumber | html %]&amp;biblionumber=[% cr.biblio.biblionumber | html %]&amp;action=lookup&amp;return=[% course.course_id | html %]&amp;is_edit=1"><i class="fa fa-pencil"></i> Edit</a>
                                             [% END %]
 
                                             [% END %]
                                         </td>
                                     [% END %]
-
                                 </tr>
                             [% END %]
                         </tbody>
index 31a61b7..27830f5 100755 (executable)
@@ -74,7 +74,8 @@ my ($template, $loggedinuser, $cookie)
 $template->param( searchid => scalar $input->param('searchid'), );
 
 # Does the user have a restricted item edition permission?
-my $uid = $loggedinuser ? Koha::Patrons->find( $loggedinuser )->userid : undef;
+my $patron = Koha::Patrons->find( $loggedinuser );
+my $uid = $loggedinuser ? $patron->userid : undef;
 my $restrictededition = $uid ? haspermission($uid,  {'tools' => 'items_batchmod_restricted'}) : undef;
 # In case user is a superlibrarian, edition is not restricted
 $restrictededition = 0 if ($restrictededition != 0 && C4::Context->IsSuperLibrarian());
@@ -292,7 +293,7 @@ if ($op eq "show"){
 if ( $display_items ) {
     my $items_table =
       Koha::UI::Table::Builder::Items->new( { itemnumbers => \@itemnumbers } )
-      ->build_table;
+      ->build_table( { patron => $patron } );;
     $template->param(
         items        => $items_table->{items},
         item_header_loop => $items_table->{headers},