@@ -, +, @@ --- Koha/IssuingRules.pm | 3 +++ installer/data/mysql/atomicupdate/bug_17530.perl | 8 ++++++++ installer/data/mysql/sysprefs.sql | 1 + .../prog/en/modules/admin/preferences/circulation.pref | 6 ++++++ t/db_dependent/ArticleRequests.t | 5 ++++- .../Koha/IssuingRules/guess_article_requestable_itemtypes.t | 8 +++++++- 6 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_17530.perl --- a/Koha/IssuingRules.pm +++ a/Koha/IssuingRules.pm @@ -150,6 +150,8 @@ sub article_requestable_rules { 'article requested'. Constructed by an intelligent guess in the issuing rules (see article_requestable_rules). + Note: pref ArticleRequestsLinkControl overrides the algorithm. + Optional parameters: categorycode. Note: the routine is used in opac-search to obtain a reasonable @@ -164,6 +166,7 @@ sub guess_article_requestable_itemtypes { my ( $class, $params ) = @_; my $category = $params->{categorycode}; return {} if !C4::Context->preference('ArticleRequests'); + return { '*' => 1 } if C4::Context->preference('ArticleRequestsLinkControl') eq 'always'; my $cache = Koha::Caches->get_instance; my $last_article_requestable_guesses = $cache->get_from_cache(GUESSED_ITEMTYPES_KEY); --- a/installer/data/mysql/atomicupdate/bug_17530.perl +++ a/installer/data/mysql/atomicupdate/bug_17530.perl @@ -0,0 +1,8 @@ +$DBversion = 'XXX'; # will be replaced by the RM +if( CheckVersion( $DBversion ) ) { + $dbh->do(q| +INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type) VALUES ('ArticleRequestsLinkControl', 'always', 'always\|calc', 'Control display of article request link on search results', 'Choice') + |); + SetVersion( $DBversion ); + print "Upgrade to $DBversion done (Bug 17530 - Add pref ArticleRequestsLinkControl)\n"; +} --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -47,6 +47,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('AnonSuggestions','0',NULL,'Set to enable Anonymous suggestions to AnonymousPatron borrowernumber','YesNo'), ('AnonymousPatron','0',NULL,'Set the identifier (borrowernumber) of the anonymous patron. Used for Suggestion and reading history privacy',''), ('ArticleRequests', '0', NULL, 'Enables the article request feature', 'YesNo'), +('ArticleRequestsLinkControl', 'calc', 'always|calc', 'Control display of article request link on search results', 'Choice'), ('ArticleRequestsMandatoryFields', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''yes''', 'multiple'), ('ArticleRequestsMandatoryFieldsItemsOnly', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''item_only''', 'multiple'), ('ArticleRequestsMandatoryFieldsRecordOnly', '', NULL, 'Comma delimited list of required fields for bibs where article requests rule = ''bib_only''', 'multiple'), --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref @@ -944,6 +944,12 @@ Circulation: no: "Don't enable" - patrons to place article requests. - + - pref: ArticleRequestsLinkControl + choices: + always: Always show + calc: Use algorithm to show or hide + - article request link on search results. + - - For records that are record level or item level requestable, make the following fields mandatory - pref: ArticleRequestsMandatoryFields multiple: --- a/t/db_dependent/ArticleRequests.t +++ a/t/db_dependent/ArticleRequests.t @@ -221,10 +221,11 @@ subtest 'search_limited' => sub { }; subtest 'may_article_request' => sub { - plan tests => 3; + plan tests => 4; # mocking t::lib::Mocks::mock_preference('ArticleRequests', 1); + t::lib::Mocks::mock_preference('ArticleRequestsLinkControl', 'calc'); $cache->set_in_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY, { '*' => { 'CR' => 1 }, 'S' => { '*' => 1 }, @@ -235,6 +236,8 @@ subtest 'may_article_request' => sub { is( $itemtype->may_article_request, 1, 'SER/* should be true' ); is( $itemtype->may_article_request({ categorycode => 'S' }), 1, 'SER/S should be true' ); is( $itemtype->may_article_request({ categorycode => 'PT' }), '', 'SER/PT should be false' ); + t::lib::Mocks::mock_preference('ArticleRequestsLinkControl', 'always'); + is( $itemtype->may_article_request({ categorycode => 'PT' }), '1', 'Result should be true when LinkControl is set to always' ); # Cleanup $cache->clear_from_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY ); --- a/t/db_dependent/Koha/IssuingRules/guess_article_requestable_itemtypes.t +++ a/t/db_dependent/Koha/IssuingRules/guess_article_requestable_itemtypes.t @@ -15,9 +15,10 @@ our $builder = t::lib::TestBuilder->new; our $cache = Koha::Caches->get_instance; subtest 'guess_article_requestable_itemtypes' => sub { - plan tests => 12; + plan tests => 13; t::lib::Mocks::mock_preference('ArticleRequests', 1); + t::lib::Mocks::mock_preference('ArticleRequestsLinkControl', 'calc'); $cache->clear_from_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY ); Koha::IssuingRules->delete; my $itype1 = $builder->build_object({ class => 'Koha::ItemTypes' }); @@ -64,6 +65,11 @@ subtest 'guess_article_requestable_itemtypes' => sub { is( $res->{$itype1->itemtype}, 1, 'Item type 1 seems permitted' ); is( $res->{$itype2->itemtype}, undef, 'Item type 2 seems not permitted' ); + # Finally test the overriding pref + t::lib::Mocks::mock_preference('ArticleRequestsLinkControl', 'always'); + $res = Koha::IssuingRules->guess_article_requestable_itemtypes({}); + is( $res->{'*'}, 1, 'Override algorithm with pref setting' ); + $cache->clear_from_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY ); }; --