$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"
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;
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;
}
$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;
}
}
$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') {
}
);
+ $item_info->{nomod} = !$patron->can_edit_item( $item );
+
push @item_data, $item_info;
}
# 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());
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 {
$template->param(
course => $course,
course_reserves => $course_reserves,
+ user => Koha::Patrons->find( $loggedinuser ),
);
output_html_with_http_headers $cgi, $cookie, $template->output;
"[% (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 %]"
]
</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>
<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' -%]
<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>
<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 ) %]
[% 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>
"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 -%]
]
[% IF item.biblionumber != biblio.biblionumber %] [%# Host item %]
<li><a href="additem.pl?op=edititem&biblionumber=[% item.biblionumber | uri %]&itemnumber=[% item.itemnumber | uri %]#edititem">Edit in host</a> <a class="delete" href="/cgi-bin/koha/cataloguing/additem.pl?op=delinkitem&biblionumber=[% biblio.biblionumber | html %]&hostitemnumber=[% item.itemnumber | html %]&searchid=[% searchid | html %]">Delink</a></li>
[% ELSE %]
- <li><a href="additem.pl?op=edititem&biblionumber=[% biblio.biblionumber | uri %]&itemnumber=[% item.itemnumber | uri %]&searchid=[% searchid | uri %]#edititem">Edit</a></li>
+ [% UNLESS item.nomod %]
+ <li><a href="additem.pl?op=edititem&biblionumber=[% biblio.biblionumber | uri %]&itemnumber=[% item.itemnumber | uri %]&searchid=[% searchid | uri %]#edititem">Edit</a></li>
+ [% END %]
<li><a href="additem.pl?op=dupeitem&biblionumber=[% biblio.biblionumber | uri %]&itemnumber=[% item.itemnumber | uri %]&searchid=[% searchid | uri %]#additema">Duplicate</a></li>
<li class="print_label"><a href="/cgi-bin/koha/labels/label-edit-batch.pl?op=add&number_type=itemnumber&number_list=[% item.itemnumber | uri %]" target="_blank" >Print label</a></li>
- <li><a class="delete" href="/cgi-bin/koha/cataloguing/additem.pl?op=delitem&biblionumber=[% item.biblionumber | html %]&itemnumber=[% item.itemnumber | html %]&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&biblionumber=[% item.biblionumber | html %]&itemnumber=[% item.itemnumber | html %]&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>
[% 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 %]&itemnumber=[% cr.item.itemnumber | html %]&biblionumber=[% cr.biblio.biblionumber | html %]&action=lookup&return=[% course.course_id | html %]&is_edit=1"><i class="fa fa-pencil"></i> Edit</a>
[% END %]
[% END %]
</td>
[% END %]
-
</tr>
[% END %]
</tbody>
$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());
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},