MDL-51718 weblib: Allow moodle_url scheme to be set
authorBrendan Heywood <brendan@catalyst-au.net>
Sun, 11 Oct 2015 23:40:50 +0000 (10:40 +1100)
committerBrendan Heywood <brendan@catalyst-au.net>
Wed, 4 Nov 2015 22:08:00 +0000 (09:08 +1100)
lib/tests/weblib_test.php
lib/weblib.php

index f2a60e3..899b088 100644 (file)
@@ -246,6 +246,24 @@ class core_weblib_testcase extends advanced_testcase {
         $this->assertSame($strurl, $url->out(false));
     }
 
         $this->assertSame($strurl, $url->out(false));
     }
 
+    /**
+     * Test set good scheme on Moodle URL objects.
+     */
+    public function test_moodle_url_set_good_scheme() {
+        $url = new moodle_url('http://moodle.org/foo/bar');
+        $url->set_scheme('myscheme');
+        $this->assertSame('myscheme://moodle.org/foo/bar', $url->out());
+    }
+
+    /**
+     * Test set bad scheme on Moodle URL objects.
+     */
+    public function test_moodle_url_set_bad_scheme() {
+        $url = new moodle_url('http://moodle.org/foo/bar');
+        $this->setExpectedException('coding_exception');
+        $url->set_scheme('not a valid $ scheme');
+    }
+
     public 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);
     public 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);
index b7e67e5..aed1cb4 100644 (file)
@@ -672,6 +672,20 @@ class moodle_url {
         }
     }
 
         }
     }
 
+    /**
+     * Sets the scheme for the URI (the bit before ://)
+     *
+     * @param string $scheme
+     */
+    public function set_scheme($scheme) {
+        // See http://www.ietf.org/rfc/rfc3986.txt part 3.1.
+        if (preg_match('/^[a-zA-Z][a-zA-Z0-9+.-]*$/', $scheme)) {
+            $this->scheme = $scheme;
+        } else {
+            throw new coding_exception('Bad URL scheme.');
+        }
+    }
+
     /**
      * Sets the url slashargument value.
      *
     /**
      * Sets the url slashargument value.
      *