Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

MDL-29161 weblib: moodle_ulr::out does not cope with array params.

  • Loading branch information...
commit 94cd982f8409abd1f5b071e9e4c9dc80743d2167 1 parent d1c12af
@timhunt timhunt authored
Showing with 26 additions and 1 deletion.
  1. +19 −0 lib/simpletest/testweblib.php
  2. +7 −1 lib/weblib.php
View
19 lib/simpletest/testweblib.php
@@ -100,6 +100,25 @@ function test_wikify_links() {
$this->assertEqual(wikify_links('this is a <a href="http://someaddress.com/query">link</a>'), 'this is a link [ http://someaddress.com/query ]');
}
+ function test_moodle_url_round_trip() {
+ $strurl = 'http://moodle.org/course/view.php?id=5';
+ $url = new moodle_url($strurl);
+ $this->assertEqual($strurl, $url->out(false));
+
+ $strurl = 'http://moodle.org/user/index.php?contextid=53&sifirst=M&silast=D';
+ $url = new moodle_url($strurl);
+ $this->assertEqual($strurl, $url->out(false));
+ }
+
+ function test_moodle_url_round_trip_array_params() {
+ $strurl = 'http://example.com/?a%5B1%5D=1&a%5B2%5D=2';
+ $url = new moodle_url($strurl);
+ $this->assertEqual($strurl, $url->out(false));
+
+ $url = new moodle_url('http://example.com/?a[1]=1&a[2]=2');
+ $this->assertEqual($strurl, $url->out(false));
+ }
+
function test_compare_url() {
$url1 = new moodle_url('index.php', array('var1' => 1, 'var2' => 2));
$url2 = new moodle_url('index2.php', array('var1' => 1, 'var2' => 2, 'var3' => 3));
View
8 lib/weblib.php
@@ -474,7 +474,13 @@ public function get_query_string($escaped = true, array $overrideparams = null)
$params = $this->params;
}
foreach ($params as $key => $val) {
- $arr[] = rawurlencode($key)."=".rawurlencode($val);
+ if (is_array($val)) {
+ foreach ($val as $index => $value) {
+ $arr[] = rawurlencode($key.'['.$index.']')."=".rawurlencode($value);
+ }
+ } else {
+ $arr[] = rawurlencode($key)."=".rawurlencode($val);
+ }
}
if ($escaped) {
return implode('&amp;', $arr);
Please sign in to comment.
Something went wrong with that request. Please try again.