From 2623f7f471bbfc17fdc1799e83aa56ccc513a1f1 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 24 Mar 2015 17:01:30 +0100 Subject: [PATCH] [SIGNED-OFF] Bug 4137: Fix the OPACViewOthersSuggestions behavior This pref does not work at all, the interface let the user choose to list all suggestions, but whatever he chooses the suggestion list is the same. This patch cleans a bit the suggestedby management. There are a lot of cases to test, because linked to 2 prefs: AnonSuggestions and OPACViewOthersSuggestions. 1/ AnonSuggestions = 0 and OPACViewOthersSuggestions = 0 - A non logged in user is not able to purchase a suggestion. - A logged in user is not able to see suggestions made by someone else. 2/ AnonSuggestions = 0 and OPACViewOthersSuggestions = 1 - A non logged in user is not able to purchase a suggestion. - A logged in user is able to see suggestions made by someone else. 3/ AnonSuggestions = 1 and OPACViewOthersSuggestions = 0 - A non logged in user is able to purchase a suggestion. The suggestedby field will be filled with the AnonymousPatron pref value. He is not able to see suggestions, even the ones made by AnonymousPatron. - A logged in user is not able to see suggestions made by someone else. 4/ AnonSuggestions = 1 and OPACViewOthersSuggestions = 1 - A non logged in user is able to purchase a suggestion. He is able to see all suggestions. - A logged in user is able to see suggestions made by someone else. In all cases a logged in user should be able to search for suggestions (except if he is not able to see them). Signed-off-by: Bernardo Gonzalez Kriegel All use cases tested, work as expected No errors Only comment is perhaps (in the future) a gracefull failure when AnonymousPatron is not set, or has '0' value Message is DBIx::Class::ResultSet::create(): Column 'suggestedby' cannot be null at ... --- C4/Auth.pm | 1 - .../opac-tmpl/bootstrap/en/includes/usermenu.inc | 12 ++--- .../bootstrap/en/modules/opac-suggestions.tt | 57 ++++++++++++-------- opac/opac-suggestions.pl | 46 +++++++++++----- 4 files changed, 72 insertions(+), 44 deletions(-) diff --git a/C4/Auth.pm b/C4/Auth.pm index 9a5d6b4..49c9d0f 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -481,7 +481,6 @@ sub get_template_and_user { OPACShelfBrowser => "" . C4::Context->preference("OPACShelfBrowser"), OPACURLOpenInNewWindow => "" . C4::Context->preference("OPACURLOpenInNewWindow"), OPACUserCSS => "" . C4::Context->preference("OPACUserCSS"), - OPACViewOthersSuggestions => "" . C4::Context->preference("OPACViewOthersSuggestions"), OpacAuthorities => C4::Context->preference("OpacAuthorities"), OPACBaseURL => ( $using_https ? "https://" : "http://" ) . $opac_base_url, opac_css_override => $ENV{'OPAC_CSS_OVERRIDE'}, diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc index 2c896fa..c5a2298 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc +++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc @@ -68,14 +68,12 @@ [% END # / opacreadinghistory %] [% IF Koha.Preference( 'suggestion' ) == 1 %] - [% UNLESS ( Koha.Preference( 'AnonSuggestions' ) == 1 ) %] - [% IF ( suggestionsview ) %] -
  • - [% ELSE %] -
  • - [% END %] - your purchase suggestions
  • + [% IF ( suggestionsview ) %] +
  • + [% ELSE %] +
  • [% END %] + your purchase suggestions
  • [% END %] [% IF ( EnhancedMessagingPreferences ) %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-suggestions.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-suggestions.tt index 8ae9214..e249709 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-suggestions.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-suggestions.tt @@ -92,7 +92,7 @@
    - + Cancel
    @@ -127,29 +127,36 @@ [% IF ( deleted ) %]
    The selected suggestions have been deleted.
    [% END %] [% IF ( suggestions_loop ) %] - [% IF Koha.Preference( 'OPACViewOthersSuggestions' ) == 1 %] -
    -
    - - - -
    - - -
    -
    -
    - [% END %] +
    +
    + + + [% IF Koha.Preference( 'OPACViewOthersSuggestions' ) == 1 %] + [% IF loggedinusername %] + +
    + + +
    + [% END %] + [% END %] +
    +
    -
    - [% IF ( loggedinusername || ( Koha.Preference( 'AnonSuggestions' ) == 1 ) ) %] + [% IF ( loggedinusername || ( Koha.Preference( 'AnonSuggestions' ) == 1 ) ) %] +
    New purchase suggestion - [% END %] -
    +
    + [% END %] [% IF ( loggedinusername ) %]
    @@ -237,7 +244,11 @@ [% END %] [% ELSE %] -

    There are no pending purchase suggestions.

    + [% UNLESS Koha.Preference( 'OPACViewOthersSuggestions' ) or $loggedinusername %] +

    You are not authorized to see pending purchase suggestions.

    + [% ELSE %] +

    There are no pending purchase suggestions.

    + [% END %] [% IF ( loggedinusername || ( Koha.Preference( 'AnonSuggestions' ) == 1 ) ) %]

    New purchase suggestion

    [% END %] @@ -280,7 +291,7 @@ [% IF ( loggedinusername ) %]null,[% END %] { "sType": "anti-the" }, null, - [% IF ( OPACViewOthersSuggestions ) %]null,[% END %] + [% IF Koha.Preference( 'OPACViewOthersSuggestions' ) == 1 %]null,[% END %] [% IF Koha.Preference( 'OpacSuggestionManagedBy' ) %]null,[% END %] null ] diff --git a/opac/opac-suggestions.pl b/opac/opac-suggestions.pl index 0fa7812..6b7f8d4 100755 --- a/opac/opac-suggestions.pl +++ b/opac/opac-suggestions.pl @@ -33,11 +33,11 @@ use C4::Scrubber; use Koha::DateUtils qw( dt_from_string ); my $input = new CGI; -my $allsuggestions = $input->param('showall'); my $op = $input->param('op'); my $suggestion = $input->Vars; delete $suggestion->{negcap}; my $negcaptcha = $input->param('negcap'); +my $suggested_by_anyone = $input->param('suggested_by_anyone') || 0; # If a spambot accidentally populates the 'negcap' field in the sugesstions form, then silently skip and return. if ($negcaptcha ) { @@ -51,14 +51,14 @@ if ( ! C4::Context->preference('suggestion') ) { exit; } -delete $$suggestion{$_} foreach qw; +delete $suggestion->{$_} foreach qw; $op = 'else' unless $op; my ( $template, $borrowernumber, $cookie, @messages ); my $deleted = $input->param('deleted'); my $submitted = $input->param('submitted'); -if ( C4::Context->preference("AnonSuggestions") ) { +if ( C4::Context->preference("AnonSuggestions") or ( C4::Context->preference("OPACViewOthersSuggestions") and $op eq 'else' ) ) { ( $template, $borrowernumber, $cookie ) = get_template_and_user( { template_name => "opac-suggestions.tt", @@ -67,9 +67,6 @@ if ( C4::Context->preference("AnonSuggestions") ) { authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); - if ( !$$suggestion{suggestedby} ) { - $$suggestion{suggestedby} = C4::Context->preference("AnonymousPatron"); - } } else { ( $template, $borrowernumber, $cookie ) = get_template_and_user( @@ -81,13 +78,36 @@ else { } ); } -if ($allsuggestions){ - delete $$suggestion{suggestedby}; -} -else { - $$suggestion{suggestedby} ||= $borrowernumber unless ($allsuggestions); + +if ( $op eq 'else' ) { + if ( C4::Context->preference("OPACViewOthersSuggestions") ) { + if ( $borrowernumber ) { + # A logged in user is able to see suggestions from others + $suggestion->{suggestedby} = $suggested_by_anyone + ? undef + : $borrowernumber; + } + else { + # Non logged in user is able to see all suggestions + $suggestion->{suggestedby} = undef; + } + } + else { + if ( $borrowernumber ) { + $suggestion->{suggestedby} = $borrowernumber; + } + else { + $suggestion->{suggestedby} = -1; + } + } +} else { + if ( $borrowernumber ) { + $suggestion->{suggestedby} = $borrowernumber; + } + else { + $suggestion->{suggestedby} = C4::Context->preference("AnonymousPatron"); + } } -# warn "bornum:",$borrowernumber; my $suggestions_loop = &SearchSuggestion( $suggestion); @@ -172,11 +192,11 @@ $template->param( itemtypeloop=> $supportlist, suggestions_loop => $suggestions_loop, patron_reason_loop => $patron_reason_loop, - showall => $allsuggestions, "op_$op" => 1, $op => 1, messages => \@messages, suggestionsview => 1, + suggested_by_anyone => $suggested_by_anyone, ); output_html_with_http_headers $input, $cookie, $template->output; -- 1.7.9.5