b9a22b3636
Only superlibrarian users and users with superserials permission can override this limitation. This patch adds a new subroutine C4::Serials::can_claim_subscription. Signed-off-by: Paola Rossi <paola.rossi@cineca.it> The upgrading of the DB was as required: for each [PT/S] patron with the permission "claim_serials" ON, the permission "superserials" became[/was kept to] ON. Then, after having checked the DB upgrading, to test the currently adding limitation: > Users can only claim for serials related to their branch , I reset 2 PT/S patrons-users to: permission claim_serials: YES permission superserials: NO and I set the syspref "IndependendeBranches" to "Prevent". For: > Only superlibrarian users can override this limitation. the S patron-user could list AND claim: A) subscriptions of his own branch, B) subscriptions of other branch, C) subscriptions without branch. For: > Only users with superserials permission can override this limitation. the PT patron-user could list: A) subscriptions of his own branch, B) subscriptions of other branch, C) subscriptions without branch, and could claim only: A) subscriptions of his own branch, C) subscriptions without branch. NB: a subscription is selected to be claimed. Then I set the syspref "IndependendeBranches" to "Don't prevent". The behaviour was [exactly the same as in master] without the added limitation. On [S/PT] patrons, if permission claim_serials was NO, no Claims link was available on Serials' page, either under "Prevent" or under "Don't prevent". Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Added the results of Paola's testing to the commit message as test plan. Note to RM: Maybe we could add a note to the release notes, that Koha now enforces superserials with independent branches better, so people might have to adapt permissions in order to claim for other branches. Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
275 lines
11 KiB
Perl
275 lines
11 KiB
Perl
#!/usr/bin/perl
|
|
use Modern::Perl;
|
|
|
|
use Test::More tests => 46;
|
|
|
|
use MARC::Record;
|
|
|
|
use C4::Biblio qw( AddBiblio );
|
|
use C4::Members qw( AddMember );
|
|
use t::lib::Mocks;
|
|
use_ok('C4::Serials');
|
|
use_ok('C4::Budgets');
|
|
|
|
# Mock userenv
|
|
local $SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /redefined/ };
|
|
my $userenv;
|
|
*C4::Context::userenv = \&Mock_userenv;
|
|
|
|
my $dbh = C4::Context->dbh;
|
|
$dbh->{AutoCommit} = 0;
|
|
$dbh->{RaiseError} = 1;
|
|
|
|
my $record = MARC::Record->new();
|
|
$record->append_fields(
|
|
MARC::Field->new( '952', '0', '0', a => 'CPL', b => 'CPL' )
|
|
);
|
|
my ( $biblionumber, $biblioitemnumber ) = C4::Biblio::AddBiblio($record, '');
|
|
|
|
my $my_branch = 'CPL';
|
|
my $another_branch = 'MPL';
|
|
my $budgetid;
|
|
my $bpid = AddBudgetPeriod({
|
|
budget_period_startdate => '2015-01-01',
|
|
budget_period_enddate => '2015-12-31',
|
|
budget_period_description => "budget desc"
|
|
});
|
|
|
|
my $budget_id = AddBudget({
|
|
budget_code => "ABCD",
|
|
budget_amount => "123.132",
|
|
budget_name => "Périodiques",
|
|
budget_notes => "This is a note",
|
|
budget_period_id => $bpid
|
|
});
|
|
|
|
my $subscriptionid_from_my_branch = NewSubscription(
|
|
undef, $my_branch, undef, undef, $budget_id, $biblionumber,
|
|
'2013-01-01', undef, undef, undef, undef,
|
|
undef, undef, undef, undef, undef, undef,
|
|
1, "notes",undef, '2013-01-01', undef, undef,
|
|
undef, undef, 0, "intnotes", 0,
|
|
undef, undef, 0, undef, '2013-12-31', 0
|
|
);
|
|
die unless $subscriptionid_from_my_branch;
|
|
|
|
my $subscriptionid_from_another_branch = NewSubscription(
|
|
undef, $another_branch, undef, undef, $budget_id, $biblionumber,
|
|
'2013-01-01', undef, undef, undef, undef,
|
|
undef, undef, undef, undef, undef, undef,
|
|
1, "notes",undef, '2013-01-01', undef, undef,
|
|
undef, undef, 0, "intnotes", 0,
|
|
undef, undef, 0, undef, '2013-12-31', 0
|
|
);
|
|
|
|
|
|
my $subscription_from_my_branch = GetSubscription( $subscriptionid_from_my_branch );
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 0, "cannot edit a subscription without userenv set");
|
|
is( C4::Serials::can_claim_subscription($subscription_from_my_branch), 0, "cannot edit a subscription without userenv set");
|
|
|
|
my $userid = 'my_userid';
|
|
my $borrowernumber = C4::Members::AddMember(
|
|
firstname => 'my fistname',
|
|
surname => 'my surname',
|
|
categorycode => 'S',
|
|
branchcode => $my_branch,
|
|
userid => $userid,
|
|
);
|
|
|
|
$userenv = { flags => 1, id => $borrowernumber, branch => '' };
|
|
|
|
# Can edit a subscription
|
|
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 1, "User can edit a subscription with an empty branchcode");
|
|
is( C4::Serials::can_claim_subscription($subscription_from_my_branch), 1, "User can edit a subscription with an empty branchcode");
|
|
|
|
my $subscription_from_another_branch = GetSubscription( $subscriptionid_from_another_branch );
|
|
|
|
$userenv->{id} = $userid;
|
|
$userenv->{branch} = $my_branch;
|
|
|
|
# Branches are independent
|
|
t::lib::Mocks::mock_preference( "IndependentBranches", 1 );
|
|
set_flags( 'superlibrarian', $borrowernumber );
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, superlibrarian can edit a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_edit_subscription($subscription_from_another_branch), 1,
|
|
"With IndependentBranches, superlibrarian can edit a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, superlibrarian can show a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_another_branch), 1,
|
|
"With IndependentBranches, superlibrarian can show a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_claim_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, superlibrarian can claim a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_claim_subscription($subscription_from_another_branch), 1,
|
|
"With IndependentBranches, superlibrarian can claim a subscription from another branch"
|
|
);
|
|
|
|
|
|
set_flags( 'superserials', $borrowernumber );
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, superserials can edit a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_edit_subscription($subscription_from_another_branch), 1,
|
|
"With IndependentBranches, superserials can edit a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, superserials can show a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_another_branch), 1,
|
|
"With IndependentBranches, superserials can show a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_claim_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, superserials can claim a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_claim_subscription($subscription_from_another_branch), 1,
|
|
"With IndependentBranches, superserials can claim a subscription from another branch"
|
|
);
|
|
|
|
|
|
|
|
set_flags( 'edit_subscription', $borrowernumber );
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, edit_subscription can edit a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_edit_subscription($subscription_from_another_branch), 0,
|
|
"With IndependentBranches, edit_subscription cannot edit a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, show_subscription can show a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_another_branch), 0,
|
|
"With IndependentBranches, show_subscription cannot show a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_claim_subscription($subscription_from_my_branch), 0,
|
|
"With IndependentBranches, claim_subscription cannot claim a subscription from his branch with the edit_subscription permission"
|
|
);
|
|
is( C4::Serials::can_claim_subscription($subscription_from_another_branch), 0,
|
|
"With IndependentBranches, claim_subscription cannot claim a subscription from another branch"
|
|
);
|
|
|
|
|
|
set_flags( 'renew_subscription', $borrowernumber );
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 0,
|
|
"With IndependentBranches, renew_subscription cannot edit a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_edit_subscription($subscription_from_another_branch), 0,
|
|
"With IndependentBranches, renew_subscription cannot edit a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, renew_subscription can show a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_another_branch), 0,
|
|
"With IndependentBranches, renew_subscription cannot show a subscription from another branch"
|
|
);
|
|
|
|
set_flags( 'claim_serials', $borrowernumber );
|
|
is( C4::Serials::can_claim_subscription($subscription_from_my_branch), 1,
|
|
"With IndependentBranches, claim_subscription can claim a subscription from his branch with the edit_subscription permission"
|
|
);
|
|
is( C4::Serials::can_claim_subscription($subscription_from_another_branch), 0,
|
|
"With IndependentBranches, claim_subscription cannot claim a subscription from another branch"
|
|
);
|
|
|
|
# Branches are not independent
|
|
t::lib::Mocks::mock_preference( "IndependentBranches", 0 );
|
|
set_flags( 'superlibrarian', $borrowernumber );
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 1,
|
|
"Without IndependentBranches, superlibrarian can edit a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_edit_subscription($subscription_from_another_branch), 1,
|
|
"Without IndependentBranches, superlibrarian can edit a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_my_branch), 1,
|
|
"Without IndependentBranches, superlibrarian can show a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_another_branch), 1,
|
|
"Without IndependentBranches, superlibrarian can show a subscription from another branch"
|
|
);
|
|
|
|
set_flags( 'superserials', $borrowernumber );
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 1,
|
|
"Without IndependentBranches, superserials can edit a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_edit_subscription($subscription_from_another_branch), 1,
|
|
"Without IndependentBranches, superserials can edit a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_my_branch), 1,
|
|
"Without IndependentBranches, superserials can show a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_another_branch), 1,
|
|
"Without IndependentBranches, superserials can show a subscription from another branch"
|
|
);
|
|
|
|
set_flags( 'edit_subscription', $borrowernumber );
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 1,
|
|
"Without IndependentBranches, edit_subscription can edit a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_edit_subscription($subscription_from_another_branch), 1,
|
|
"Without IndependentBranches, edit_subscription can edit a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_my_branch), 1,
|
|
"Without IndependentBranches, show_subscription can show a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_another_branch), 1,
|
|
"Without IndependentBranches, show_subscription can show a subscription from another branch"
|
|
);
|
|
|
|
set_flags( 'renew_subscription', $borrowernumber );
|
|
is( C4::Serials::can_edit_subscription($subscription_from_my_branch), 0,
|
|
"Without IndependentBranches, renew_subscription cannot edit a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_edit_subscription($subscription_from_another_branch), 0,
|
|
"Without IndependentBranches, renew_subscription cannot edit a subscription from another branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_my_branch), 1,
|
|
"Without IndependentBranches, renew_subscription cannot show a subscription from his branch"
|
|
);
|
|
is( C4::Serials::can_show_subscription($subscription_from_another_branch), 1,
|
|
"Without IndependentBranches, renew_subscription cannot show a subscription from another branch"
|
|
);
|
|
|
|
$dbh->rollback;
|
|
|
|
# C4::Context->userenv
|
|
sub Mock_userenv {
|
|
return $userenv;
|
|
}
|
|
|
|
sub set_flags {
|
|
my ( $flags, $borrowernumber ) = @_;
|
|
my $superlibrarian_flags = 1;
|
|
if ( $flags eq 'superlibrarian' ) {
|
|
$dbh->do(
|
|
q|
|
|
UPDATE borrowers SET flags=? WHERE borrowernumber=?
|
|
|, {}, $superlibrarian_flags, $borrowernumber
|
|
);
|
|
$userenv->{flags} = $superlibrarian_flags;
|
|
}
|
|
else {
|
|
$dbh->do(
|
|
q|
|
|
UPDATE borrowers SET flags=? WHERE borrowernumber=?
|
|
|, {}, 0, $borrowernumber
|
|
);
|
|
$userenv->{flags} = 0;
|
|
my ( $module_bit, $code ) = ( '15', $flags );
|
|
$dbh->do(
|
|
q|
|
|
DELETE FROM user_permissions where borrowernumber=?
|
|
|, {}, $borrowernumber
|
|
);
|
|
|
|
$dbh->do(
|
|
q|
|
|
INSERT INTO user_permissions( borrowernumber, module_bit, code ) VALUES ( ?, ?, ? )
|
|
|, {}, $borrowernumber, $module_bit, $code
|
|
);
|
|
}
|
|
}
|