diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 35f51b7c7..0e79df8d7 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -11,6 +11,7 @@ - fix: Fixed a bug where the isCurrentPost tmpl_var would always be set to the first post of the thread in stead of the current post. (Martin Kamerbeek / Oqapi) - fix: Non-existant variables in CS templates (perlDreamer Consulting, LLC) + - fix: Slash_Gateway macro (perlDreamer Consulting, LLC) 7.3.5 diff --git a/lib/WebGUI/Macro/PageUrl.pm b/lib/WebGUI/Macro/PageUrl.pm index d8380a330..8e89c28a0 100644 --- a/lib/WebGUI/Macro/PageUrl.pm +++ b/lib/WebGUI/Macro/PageUrl.pm @@ -11,6 +11,7 @@ package WebGUI::Macro::PageUrl; #------------------------------------------------------------------- use strict; +use URI; =head1 NAME @@ -20,16 +21,33 @@ Package WebGUI::Macro::Page Macro for displaying the url for the current asset. -=head2 process ( ) +=head2 process ( $session, $url ) process is really a wrapper around $session->url->page(); +=head3 $session + +The current WebGUI session variable. + +=head3 $url + +A URL to safely append to the end of the page URL. + =cut #------------------------------------------------------------------- sub process { my $session = shift; - return $session->url->page(); + my $url = shift; + my $pageUrl = $session->url->page(); + if ($url) { + my $uri = URI->new($pageUrl); + ##Append the requested URL to the path part of the URL + $uri->path(join "/", $uri->path, $url); + $pageUrl = $uri->as_string; + } + $pageUrl =~ tr{/}{/}s; ##Remove duplicate slashes. + return $pageUrl; } diff --git a/lib/WebGUI/Macro/Slash_gatewayUrl.pm b/lib/WebGUI/Macro/Slash_gatewayUrl.pm index 73a37e4b5..7411825ae 100644 --- a/lib/WebGUI/Macro/Slash_gatewayUrl.pm +++ b/lib/WebGUI/Macro/Slash_gatewayUrl.pm @@ -20,16 +20,25 @@ Package WebGUI::Macro::Slash_gatewayUrl Macro for returning the gateway URL (defined in the WebGUI config file) to the site. -=head2 process ( ) +=head2 process ( $session, $url ) process is really a wrapper around $session->url->gateway(); +=head3 $session + +A WebGUI session variable. + +=head3 $url + +A url which will be passed to $session->url->gateway(). + =cut #------------------------------------------------------------------- sub process { my $session = shift; - return $session->url->gateway(); + my $url = shift; + return $session->url->gateway($url); } diff --git a/lib/WebGUI/i18n/English/Macro_PageUrl.pm b/lib/WebGUI/i18n/English/Macro_PageUrl.pm index e1efc782c..887e9848e 100644 --- a/lib/WebGUI/i18n/English/Macro_PageUrl.pm +++ b/lib/WebGUI/i18n/English/Macro_PageUrl.pm @@ -15,11 +15,17 @@ our $I18N = { 'page url body' => { message => q|

^PageUrl;
+^PageUrl(/sub/page);
The URL to the current page (example: /index.pl/pagename).

+ +

The macro takes a single, optional argument; a URL. The URL will be appended to +the end of the page's URL. This is mainly useful when you enable Prevent Proxy Caching +in the WebGUI settings.

+

This Macro may be nested inside other Macros.

|, - lastUpdated => 1168622829, + lastUpdated => 1169588703, }, }; diff --git a/lib/WebGUI/i18n/English/Macro_Slash_gatewayUrl.pm b/lib/WebGUI/i18n/English/Macro_Slash_gatewayUrl.pm index e407b591d..ca5d9f37e 100644 --- a/lib/WebGUI/i18n/English/Macro_Slash_gatewayUrl.pm +++ b/lib/WebGUI/i18n/English/Macro_Slash_gatewayUrl.pm @@ -15,11 +15,21 @@ our $I18N = { 'gateway url body' => { message => q|

^/; - System URL
-The URL to the gateway script (example: /index.pl/). -

+^/(/home/page); - System URL
+The URL to the gateway script (example: /).

+ +

The macro takes a single, optional argument; a URL. The URL will be appended to +the end of the gateway URL. This is mainly useful when you enable Prevent Proxy Caching +in the WebGUI settings.

+ +

^/;home/page will break with Prevent Proxy Caching set because the URL that is made +will look like this: /?noCache=37,1127808995home/page. By passing the URL directly to the +macro, ^/(home/page);, the special param for disabling caching will be placed on the +end, /home/page?noCache=37,1127808995. +

This Macro may be nested inside other Macros.

|, - lastUpdated => 1168623028, + lastUpdated => 1169584181, }, }; diff --git a/t/Macro/PageUrl.t b/t/Macro/PageUrl.t index b4f956052..e7a901f6b 100644 --- a/t/Macro/PageUrl.t +++ b/t/Macro/PageUrl.t @@ -13,7 +13,6 @@ use strict; use lib "$FindBin::Bin/../lib"; use WebGUI::Test; -use WebGUI::Macro::PageUrl; use WebGUI::Session; use Data::Dumper; @@ -21,16 +20,45 @@ use Test::More; # increment this value for each test you create my $session = WebGUI::Test->session; -plan tests => 2; +my $numTests = 5; +$numTests += 1; #For the use_ok + +plan tests => $numTests; + +my $preventProxyCache = $session->setting->get('preventProxyCache'); + +my $macro = 'WebGUI::Macro::PageUrl'; +my $loaded = use_ok($macro); + +SKIP: { + +skip "Unable to load $macro", $numTests-1 unless $loaded; + +$session->setting->set('preventProxyCache', 0) if ($preventProxyCache); my $homeAsset = WebGUI::Asset->getDefault($session); ##Make the homeAsset the default asset in the session. $session->asset($homeAsset); -my $output = WebGUI::Macro::PageUrl::process($session); +my $output; + +$output = WebGUI::Macro::PageUrl::process($session); is($output, $session->url->gateway.$homeAsset->get('url'), 'fetching url for site default asset'); +$output = WebGUI::Macro::PageUrl::process($session, '/sub/page'); +is($output, $session->url->gateway.$homeAsset->get('url').'/sub/page', 'fetching url for site default asset with sub url'); + +$session->setting->set('preventProxyCache', 1); + +$output = WebGUI::Macro::PageUrl::process($session); +like($output, qr{\?noCache=\d+,\d+$}, 'checking the cache settings in the page URL'); + +$output = WebGUI::Macro::PageUrl::process($session, '/sub/page'); +like($output, qr{/sub/page\?noCache=\d+,\d+$}, 'checking the cache settings in the URL are at the end of the page URL'); + +} + TODO: { local $TODO = "Tests to make later"; ok(0, 'Fetch url from locally made asset with known url'); diff --git a/t/Macro/Slash_gatewayUrl.t b/t/Macro/Slash_gatewayUrl.t index b724b8fd4..a2100568c 100644 --- a/t/Macro/Slash_gatewayUrl.t +++ b/t/Macro/Slash_gatewayUrl.t @@ -13,7 +13,6 @@ use strict; use lib "$FindBin::Bin/../lib"; use WebGUI::Test; -use WebGUI::Macro::Slash_gatewayUrl; use WebGUI::Session; use Data::Dumper; @@ -21,11 +20,46 @@ use Test::More; # increment this value for each test you create my $session = WebGUI::Test->session; -plan tests => 1; - ##Note, this is not a test of the gateway method. That is done over ##in t/Session/Url.t All we need to do is make sure that the macro ##fetches the same thing as the method. -my $output = WebGUI::Macro::Slash_gatewayUrl::process($session); +my $numTests = 4; +$numTests += 1; #For the use_ok + +plan tests => $numTests; + +my $preventProxyCache = $session->setting->get('preventProxyCache'); + +my $macro = 'WebGUI::Macro::Slash_gatewayUrl'; +my $loaded = use_ok($macro); + +SKIP: { + +skip "Unable to load $macro", $numTests-1 unless $loaded; + +$session->setting->set('preventProxyCache', 0) if ($preventProxyCache); + +my $output; + +$output = WebGUI::Macro::Slash_gatewayUrl::process($session); is($output, $session->url->gateway, 'fetching site gateway'); + +$output = WebGUI::Macro::Slash_gatewayUrl::process($session, '/foo/bar'); +is($output, $session->url->gateway('/foo/bar'), 'passing URL through to macro'); + +$session->setting->set('preventProxyCache', 1); + +$output = WebGUI::Macro::Slash_gatewayUrl::process($session); +like($output, qr{/\?noCache=\d+,\d+$}, 'checking the cache settings in the URL'); + +$output = WebGUI::Macro::Slash_gatewayUrl::process($session, '/foo/bar'); +like($output, qr{/foo/bar\?noCache=\d+,\d+$}, 'checking the cache settings in the URL are at the end of the URL'); + +$session->setting->set('preventProxyCache', 0); + +} + +END { + $session->setting->set('preventProxyCache', $preventProxyCache); +}