Bug 21299: Introduce localReferer in [opac-]changelanguage.pl

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>
This commit is contained in:
Marcel de Rooy 2018-07-30 12:57:58 +02:00 committed by Nick Clemens
parent db539f4dc0
commit 07d5f76225
2 changed files with 8 additions and 25 deletions

View File

@ -16,15 +16,12 @@
# 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 );

View File

@ -16,26 +16,12 @@
# 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 );