Bug 21299: Introduce localReferer in [opac-]changelanguage.pl
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Mon, 30 Jul 2018 10:57:58 +0000 (12:57 +0200)
committerNick Clemens <nick@bywatersolutions.com>
Wed, 7 Nov 2018 21:52:17 +0000 (21:52 +0000)
With the work from the former patch, we now have a nice and easy replace..

NOTE: The additional logic in opac-changelanguage.pl is now also applied
to the intranet counterpart (changelanguage.pl). This effectively makes
changelanguage.pl no longer refer to external URLs (as the opac already
did by testing the referer). Might be just theoretical, but consistent.

Test plan:
Test changing language from various OPAC and staff locations.
Include language=[some_language] in the URL before changing language.
[Bonus] Test calling changelanguage.pl from another server. You should no
longer be referred back to the calling server. (See below.)

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Added link <a href="[mystaffserver]/cgi-bin/koha/changelanguage.pl?language=en">link</a> somewhere on external server.
Verified that without this patch, it hits the staff server and refers back to the caller. But with this patch, it refers to staff homepage.
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

changelanguage.pl
opac/opac-changelanguage.pl

index 3463c60..c7a5c94 100755 (executable)
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
-
-use C4::Templates;
 use CGI qw ( -utf8 );
+use C4::Templates;
+use Koha::Util;
 
-my $query    = new CGI;
+my $query = new CGI;
 my $language = $query->param('language');
-my $url      = $query->referer();
-
-$url =~ s|(.)language=[\w-]*&?|$1|;
-$url =~ s|(&\|\?)$||; # Remove extraneous ? or &
+my $url = Koha::Util::localReferer($query, {remove_language => 1, staff => 1});
 
 C4::Templates::setlanguagecookie( $query, $language, $url );
index 133e58e..2c01b28 100755 (executable)
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
-
-use C4::Templates;
 use CGI qw ( -utf8 );
+use C4::Templates;
+use Koha::Util;
 
-my $query    = new CGI;
+my $query = new CGI;
 my $language = $query->param('language');
-
-# Detect where the user came from and save that url
-my $requestedUrl = $query->url( -base => 1 );
-
-# Use referer url if it matches $requestedUrl else use $requestedUrl as the url .
-my $url =
-  $query->referer() =~ $requestedUrl ? $query->referer() : $requestedUrl;
-
-# warn "Language : $query // $language // $url";
-
-# If language was set by an external URL the parameter
-# 'language=' should be removed from url string, otherwise
-# the language picker will not work
-$url =~ s|(.)language=[\w-]*&?|$1|;
-$url =~ s|(&\|\?)$||;    # Remove extraneous ? or &
+my $url = Koha::Util::localReferer($query, { remove_language => 1 });
 
 C4::Templates::setlanguagecookie( $query, $language, $url );