From d6424c1999d3563c5243185503dd5a9b5b928f8f Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Mon, 3 Sep 2018 11:49:08 +0200 Subject: [PATCH] Bug 17530: (QA follow-up) Add pref ArticleRequestsLinkControl As requested by RM on Bugzilla comment53. This pref allows you to always display the link on search results. Which is the previous behavior ;) It will raise false positives, whereas the algorithm may result in false positives or negatives (depending on default item type and circulation rules). When upgrading the pref is set to always (current behavior), new installs get the new calc value using the algorithm in may_article_request. Test plan: Run t/db_dependent/Koha/IssuingRules/guess_article_requestable_itemtypes.t Run t/db_dependent/ArticleRequests.t Signed-off-by: Marcel de Rooy Signed-off-by: Nick Clemens --- 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 ++++- .../IssuingRules/guess_article_requestable_itemtypes.t | 8 +++++++- 6 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_17530.perl diff --git a/Koha/IssuingRules.pm b/Koha/IssuingRules.pm index 37cc45c6b7..9ec3ee5450 100644 --- a/Koha/IssuingRules.pm +++ b/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); diff --git a/installer/data/mysql/atomicupdate/bug_17530.perl b/installer/data/mysql/atomicupdate/bug_17530.perl new file mode 100644 index 0000000000..9e2156f1c6 --- /dev/null +++ b/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"; +} diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 868e6039a6..753bc57d0a 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/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'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref index a7a1df11a2..c7193dfb0e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref @@ -943,6 +943,12 @@ Circulation: yes: Enable 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 diff --git a/t/db_dependent/ArticleRequests.t b/t/db_dependent/ArticleRequests.t index 65b3288065..884c2e2598 100755 --- a/t/db_dependent/ArticleRequests.t +++ b/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 ); diff --git a/t/db_dependent/Koha/IssuingRules/guess_article_requestable_itemtypes.t b/t/db_dependent/Koha/IssuingRules/guess_article_requestable_itemtypes.t index 55529181f3..ae716db5dc 100644 --- a/t/db_dependent/Koha/IssuingRules/guess_article_requestable_itemtypes.t +++ b/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 ); }; -- 2.20.1