summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_test/tests/inc/common_wl.test.php148
-rw-r--r--inc/common.php24
2 files changed, 161 insertions, 11 deletions
diff --git a/_test/tests/inc/common_wl.test.php b/_test/tests/inc/common_wl.test.php
new file mode 100644
index 000000000..2e34dcae3
--- /dev/null
+++ b/_test/tests/inc/common_wl.test.php
@@ -0,0 +1,148 @@
+<?php
+
+class common_wl_test extends DokuWikiTest {
+
+ function test_wl_empty() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 0;
+ $conf['start'] = 'start';
+
+ $this->assertEquals(DOKU_BASE . DOKU_SCRIPT . '?id=start' , wl());
+ }
+
+ function test_wl_empty_rewrite1() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 1;
+ $conf['start'] = 'start';
+
+ $this->assertEquals(DOKU_BASE . 'start' , wl());
+ }
+
+ function test_wl_empty_rewrite2() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 2;
+ $conf['start'] = 'start';
+
+ $this->assertEquals(DOKU_BASE . DOKU_SCRIPT . '/start' , wl());
+ }
+
+ function test_wl_id() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 0;
+
+ $expect = DOKU_BASE . DOKU_SCRIPT . '?id=some';
+ $this->assertEquals($expect, wl('some'));
+ }
+
+ function test_wl_id_ns() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 0;
+
+ $expect = DOKU_BASE . DOKU_SCRIPT . '?id=some:some';
+ $this->assertEquals($expect, wl('some:some'));
+ }
+
+ function test_wl_id_ns_start() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 0;
+
+ $expect = DOKU_BASE . DOKU_SCRIPT . '?id=some:';
+ $this->assertEquals($expect, wl('some:'));
+ }
+
+ function test_wl_args_array() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 0;
+
+ $args = array('a' => 'b', 'c' => 'd', 'q' => '&ä');
+
+ $expect = DOKU_BASE . DOKU_SCRIPT . '?id=some:&amp;a=b&amp;c=d&amp;q=%26%C3%A4';
+ $this->assertEquals($expect, wl('some:', $args));
+ }
+
+ function test_wl_args_string() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 0;
+
+ $args = 'a=b&c=d';
+
+ $expect = DOKU_BASE . DOKU_SCRIPT . '?id=some:&amp;a=b&c=d';
+ $this->assertEquals($expect, wl('some:', $args));
+ }
+
+ function test_wl_args_comma_string() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 0;
+
+ $args = 'a=b,c=d';
+
+ $expect = DOKU_BASE . DOKU_SCRIPT . '?id=some:&amp;a=b&amp;c=d';
+ $this->assertEquals($expect, wl('some:', $args));
+ }
+
+ function test_wl_abs() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 0;
+
+ $expect = DOKU_URL . DOKU_SCRIPT . '?id=some:';
+ $this->assertEquals($expect, wl('some:', '', true));
+ }
+
+ function test_wl_sep() {
+ global $conf;
+ $conf['useslash'] = 0;
+ $conf['userewrite'] = 0;
+
+ $expect = DOKU_BASE . DOKU_SCRIPT . '?id=some:&a=b&c=d';
+ $this->assertEquals($expect, wl('some:', 'a=b,c=d', false, '&'));
+ }
+
+ function test_wl_useslash() {
+ global $conf;
+ $conf['useslash'] = 1;
+ $conf['userewrite'] = 0;
+
+ $expect = DOKU_BASE . DOKU_SCRIPT . '?id=some:&a=b&c=d';
+ $this->assertEquals($expect, wl('some:', 'a=b,c=d', false, '&'));
+ }
+
+ function test_wl_useslash_rewrite1() {
+ global $conf;
+ $conf['useslash'] = 1;
+ $conf['userewrite'] = 1;
+
+ $expect = DOKU_BASE . 'some/?a=b&c=d';
+ $this->assertEquals($expect, wl('some:', 'a=b,c=d', false, '&'));
+ }
+
+ function test_wl_useslash_rewrite1_sub_page() {
+ global $conf;
+ $conf['useslash'] = 1;
+ $conf['userewrite'] = 1;
+
+ $expect = DOKU_BASE . 'some/one?a=b&c=d';
+ $this->assertEquals($expect, wl('some:one', 'a=b,c=d', false, '&'));
+ }
+
+ function test_wl_useslash_rewrite2() {
+ global $conf;
+ $conf['useslash'] = 1;
+ $conf['userewrite'] = 2;
+
+ $expect = DOKU_BASE . DOKU_SCRIPT . '/some/one?a=b&c=d';
+ $this->assertEquals($expect, wl('some:one', 'a=b,c=d', false, '&'));
+ }
+
+
+
+} \ No newline at end of file
diff --git a/inc/common.php b/inc/common.php
index 6ea536c44..cd0780730 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -342,16 +342,18 @@ function idfilter($id,$ue=true){
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function wl($id='',$more='',$abs=false,$sep='&amp;'){
+function wl($id='',$urlParameters='',$absolute=false,$separator='&amp;'){
global $conf;
- if(is_array($more)){
- $more = buildURLparams($more,$sep);
+ if(is_array($urlParameters)){
+ $urlParameters = buildURLparams($urlParameters,$separator);
}else{
- $more = str_replace(',',$sep,$more);
+ $urlParameters = str_replace(',',$separator,$urlParameters);
}
-
- $id = idfilter($id);
- if($abs){
+ if ($id === '') {
+ $id = $conf['start'];
+ }
+ $id = idfilter($id);
+ if($absolute){
$xlink = DOKU_URL;
}else{
$xlink = DOKU_BASE;
@@ -359,16 +361,16 @@ function wl($id='',$more='',$abs=false,$sep='&amp;'){
if($conf['userewrite'] == 2){
$xlink .= DOKU_SCRIPT.'/'.$id;
- if($more) $xlink .= '?'.$more;
+ if($urlParameters) $xlink .= '?'.$urlParameters;
}elseif($conf['userewrite']){
$xlink .= $id;
- if($more) $xlink .= '?'.$more;
+ if($urlParameters) $xlink .= '?'.$urlParameters;
}elseif($id){
$xlink .= DOKU_SCRIPT.'?id='.$id;
- if($more) $xlink .= $sep.$more;
+ if($urlParameters) $xlink .= $separator.$urlParameters;
}else{
$xlink .= DOKU_SCRIPT;
- if($more) $xlink .= '?'.$more;
+ if($urlParameters) $xlink .= '?'.$urlParameters;
}
return $xlink;