Bug 19847: Track links within the records and 404 for others
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 20 Dec 2017 15:13:10 +0000 (12:13 -0300)
committerChris Cormack <chrisc@catalyst.net.nz>
Thu, 22 Feb 2018 18:48:41 +0000 (07:48 +1300)
Test plan:
Behave like a robot, you will get 404
Be a human, you will be tracked

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
(cherry picked from commit 40ca9443a882c822d490620d26accef53dfb56c1)
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>

opac/tracklinks.pl

index 02b402d..48076cf 100755 (executable)
@@ -21,6 +21,7 @@
 use Modern::Perl;
 use C4::Context;
 use C4::Auth qw(checkauth);
+use C4::Biblio;
 use Koha::Linktracker;
 use CGI qw ( -utf8 );
 
@@ -54,25 +55,28 @@ if ($uri) {
         my $biblionumber = $cgi->param('biblionumber') || 0;
         my $itemnumber   = $cgi->param('itemnumber')   || 0;
 
-        $tracker->trackclick(
-            {
-                uri            => $uri,
-                biblionumber   => $biblionumber,
-                borrowernumber => $borrowernumber,
-                itemnumber     => $itemnumber
-            }
-        );
-        print $cgi->redirect($uri);
+        my $record = C4::Biblio::GetMarcBiblio({ biblionumber => $biblionumber });
+        my $marc_urls = C4::Biblio::GetMarcUrls($record, C4::Context->preference('marcflavour'));
+        if ( grep { /^$uri$/ } map { $_->{MARCURL} } @$marc_urls ) {
+            $tracker->trackclick(
+                {
+                    uri            => $uri,
+                    biblionumber   => $biblionumber,
+                    borrowernumber => $borrowernumber,
+                    itemnumber     => $itemnumber
+                }
+            );
+            print $cgi->redirect($uri);
+            exit;
+        }
     }
     else {
 
         # We have a valid url, but we shouldn't track it, just redirect
         print $cgi->redirect($uri);
+        exit;
     }
 }
-else {
 
-    # we shouldn't be here, bail out
-    print $cgi->redirect("/cgi-bin/koha/errors/404.pl");    # escape early
-    exit;
-}
+print $cgi->redirect("/cgi-bin/koha/errors/404.pl");    # escape early
+exit;