use Modern::Perl;
use Koha::Database;
+use Koha::Caches;
use Koha::IssuingRule;
use base qw(Koha::Objects);
+use constant GUESSED_ITEMTYPES_KEY => 'Koha_IssuingRules_last_guess';
+
=head1 NAME
Koha::IssuingRules - Koha IssuingRule Object set class
=cut
-our $last_article_requestable_guesses; # used during Plack life time
-
sub guess_article_requestable_itemtypes {
my ( $class_or_self, $params ) = @_;
my $category = $params->{categorycode};
return {} if !C4::Context->preference('ArticleRequests');
+ my $cache = Koha::Caches->get_instance;
+ my $last_article_requestable_guesses = $cache->get_from_cache(GUESSED_ITEMTYPES_KEY);
my $key = $category || '*';
return $last_article_requestable_guesses->{$key}
if $last_article_requestable_guesses && exists $last_article_requestable_guesses->{$key};
foreach my $rule ( $rules->as_list ) {
$res->{ $rule->itemtype } = 1;
}
- $last_article_requestable_guesses->{$key} = $res;
+ $cache->set_in_cache(GUESSED_ITEMTYPES_KEY, $res);
return $res;
}
use Koha::RefundLostItemFeeRules;
use Koha::Libraries;
use Koha::Patron::Categories;
+use Koha::Caches;
my $input = CGI->new;
my $dbh = C4::Context->dbh;
my $op = $input->param('op') || q{};
my $language = C4::Languages::getlanguage();
+my $cache = Koha::Caches->get_instance;
+$cache->clear_from_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY );
+
if ($op eq 'delete') {
my $itemtype = $input->param('itemtype');
my $categorycode = $input->param('categorycode');
use Koha::Patron;
use Koha::Library::Group;
use Koha::IssuingRules;
+use Koha::Caches;
BEGIN {
use_ok('Koha::ArticleRequest');
my $schema = Koha::Database->new()->schema();
$schema->storage->txn_begin();
my $builder = t::lib::TestBuilder->new;
+our $cache = Koha::Caches->get_instance;
my $dbh = C4::Context->dbh;
$dbh->{RaiseError} = 1;
# mocking
t::lib::Mocks::mock_preference('ArticleRequests', 1);
- $Koha::IssuingRules::last_article_requestable_guesses = {
+ $cache->set_in_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY, {
'*' => { 'CR' => 1 },
'S' => { '*' => 1 },
'PT' => { 'BK' => 1 },
- };
+ });
# tests for class method call
is( Koha::Biblio->may_article_request({ itemtype => 'CR' }), 1, 'SER/* should be true' );
is( $biblio->may_article_request({ categorycode => 'PT' }), 1, 'BK/PT true' );
# Cleanup
- $Koha::IssuingRules::last_article_requestable_guesses = undef;
+ $cache->clear_from_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY );
};
$schema->storage->txn_rollback();
use t::lib::TestBuilder;
use Koha::Database;
use Koha::IssuingRules;
+use Koha::Caches;
my $schema = Koha::Database->new->schema;
$schema->storage->txn_begin;
our $builder = t::lib::TestBuilder->new;
+our $cache = Koha::Caches->get_instance;
subtest 'guess_article_requestable_itemtypes' => sub {
plan tests => 12;
t::lib::Mocks::mock_preference('ArticleRequests', 1);
+ $cache->clear_from_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY );
Koha::IssuingRules->delete;
my $itype1 = $builder->build_object({ class => 'Koha::ItemTypes' });
my $itype2 = $builder->build_object({ class => 'Koha::ItemTypes' });
# Change the rules
$rule2->itemtype('*')->store;
- $Koha::IssuingRules::last_article_requestable_guesses = {};
+ $cache->clear_from_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY );
$res = Koha::IssuingRules->guess_article_requestable_itemtypes;
is( $res->{'*'}, 1, 'Item type * seems permitted' );
is( $res->{$itype1->itemtype}, 1, 'Item type 1 seems permitted' );
is( $res->{$itype1->itemtype}, 1, 'Item type 1 seems permitted' );
is( $res->{$itype2->itemtype}, undef, 'Item type 2 seems not permitted' );
- $Koha::IssuingRules::last_article_requestable_guesses = {};
+ $cache->clear_from_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY );
};
$schema->storage->txn_rollback;