From e445f382c8dc8db6fbef962b97fc0853d10191d5 Mon Sep 17 00:00:00 2001
From: Owen Leonard <oleonard@myacpl.org>
Date: Mon, 16 Dec 2019 17:41:42 +0000
Subject: [PATCH] Bug 24249: OPAC lists page should require login for
 login-dependent operations

This patch modifies opac-shelves.pl so that login is required if the
requested operation is anything but "view" and "list."

The patch also modifies a couple of "Log in to create a new list" links
so that they point to the list creation form instead of opac-user.pl.

To test, apply the patch and go to the main lists page (the list of
lists) in the OPAC while not logged in.

 - Click the "Log in to create a new list" link.
 - Log in.
 - You should be taken to the "Create a new list" form.
 - Also test the "New list" link shown in the toolbar when you're
   viewing the contents of a list.
 - When not logged in click the "Lists" menu in the page's header menu.
   Clicking "Log in to create a new list" should take you to the login
   form and then to the list creation form.

Signed-off-by: David Nind <david@davidnind.com>
---
 .../opac-tmpl/bootstrap/en/includes/masthead.inc   |  7 +-----
 .../opac-tmpl/bootstrap/en/modules/opac-shelves.tt |  4 ++--
 opac/opac-shelves.pl                               | 27 +++++++++++++++-------
 3 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc
index 5ee70cc322..a54b7ccc42 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc
@@ -68,12 +68,7 @@
                                         [% END %]
                                             <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?op=add_form" tabindex="-1" role="menuitem" class="listmenulink">New list</a></li>
                                     [% ELSE %]
-                                        [% IF Koha.Preference('casAuthentication') %]
-                                            [%# CAS authentication is too complicated for modal window %]
-                                            <li role="presentation"><a href="/cgi-bin/koha/opac-user.pl" tabindex="-1" class="menu-inactive" role="menuitem">Log in to create your own lists</a></li>
-                                        [% ELSE %]
-                                            <li role="presentation"><a href="/cgi-bin/koha/opac-user.pl" tabindex="-1" class="menu-inactive loginModal-trigger" role="menuitem">Log in to create your own lists</a></li>
-                                        [% END %]
+                                        <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?op=add_form" tabindex="-1" class="menu-inactive" role="menuitem">Log in to create your own lists</a></li>
                                     [% END # / IF loggedinusername %]
                                 [% END # / IF opacuserlogin %]
                                 </ul> <!-- / .dropdown-menu -->
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt
index 424ae632c7..ebaa86e27d 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt
@@ -638,7 +638,7 @@
                                 <div id="toolbar" class="toolbar"><a class="btn btn-link newshelf" href="/cgi-bin/koha/opac-shelves.pl?op=add_form"><i class="fa fa-plus"></i> New list</a></div>
                             [% ELSE %]
                                 [% IF Koha.Preference( 'opacuserlogin' ) == 1 %]
-                                    <div class="alert alert-info"><a href="/cgi-bin/koha/opac-user.pl">Log in</a> to create new lists.</div>
+                                    <div class="alert alert-info"><a href="/cgi-bin/koha/opac-shelves.pl?op=add_form">Log in to create a new list</a></div>
                                 [% END %]
                             [% END %]
 
@@ -713,7 +713,7 @@
                             </div> [%# <div class="toptabs ui-tabs ui-widget ui-widget-content ui-corner-all"> %]
                         [% ELSIF NOT loggedinusernumber %]
                             [% IF Koha.Preference( 'opacuserlogin' ) == 1 %]
-                                <div class="alert alert-info"><a href="/cgi-bin/koha/opac-user.pl">Log in</a> to create new lists.</div>
+                                <div class="alert alert-info"><a href="/cgi-bin/koha/opac-shelves.pl?op=add_form">Log in to create a new list</a></div>
                             [% END %]
                         [% END  # IF loggedinusername %]
                 </div> <!-- / #usershelves -->
diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl
index afb0f5e7e6..2f1a8f9428 100755
--- a/opac/opac-shelves.pl
+++ b/opac/opac-shelves.pl
@@ -50,14 +50,25 @@ if ( ! C4::Context->preference('virtualshelves') ) {
     exit;
 }
 
-my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
-        template_name   => $template_name,
-        query           => $query,
-        type            => "opac",
-        authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ),
-    });
-
-my $op       = $query->param('op')       || 'list';
+my $op = $query->param('op') || 'list';
+my ( $template, $loggedinuser, $cookie );
+
+if( $op eq 'view' || $op eq 'list' ){
+    ( $template, $loggedinuser, $cookie ) = get_template_and_user({
+            template_name   => $template_name,
+            query           => $query,
+            type            => "opac",
+            authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ),
+        });
+} else {
+    ( $template, $loggedinuser, $cookie ) = get_template_and_user({
+            template_name   => $template_name,
+            query           => $query,
+            type            => "opac",
+            authnotrequired => 0,
+        });
+}
+
 my $referer  = $query->param('referer')  || $op;
 my $category = $query->param('category') || 1;
 my ( $shelf, $shelfnumber, @messages );
-- 
2.11.0