]> git.mjollnir.org Git - moodle.git/commitdiff
moodle_page: MDL-14305 (and MDL-12212) class on body based on ->wwwroot
authortjhunt <tjhunt>
Wed, 6 May 2009 08:44:58 +0000 (08:44 +0000)
committertjhunt <tjhunt>
Wed, 6 May 2009 08:44:58 +0000 (08:44 +0000)
lib/moodlelib.php
lib/pagelib.php
lib/simpletest/testmoodlelib.php
lib/simpletest/testpagelib_moodlepage.php

index 5aaeb7041d25b1cd376fdf1c7ea21b632cd5aa69..4c819c1d28827b51ca393988e3efae64c475e173 100644 (file)
@@ -6464,28 +6464,29 @@ function check_php_version($version='5.2.4') {
  * in the body tag of the page to apply browser-specific rules without relying on CSS hacks
  */
 function get_browser_version_classes() {
-    $classes = '';
+    $classes = array();
+
     if (check_browser_version("MSIE", "0")) {
-        $classes .= 'ie ';
+        $classes[] = 'ie';
         if (check_browser_version("MSIE", 8)) {
-            $classes .= 'ie8 ';
+            $classes[] = 'ie8';
         } elseif (check_browser_version("MSIE", 7)) {
-            $classes .= 'ie7 ';
+            $classes[] = 'ie7';
         } elseif (check_browser_version("MSIE", 6)) {
-            $classes .= 'ie6 ';
+            $classes[] = 'ie6';
         }
-    } elseif (check_browser_version("Firefox", 0) || check_browser_version("Gecko", 0) || check_browser_version("Camino", 0)) {
-        $classes .= 'gecko ';
 
+    } elseif (check_browser_version("Firefox", 0) || check_browser_version("Gecko", 0) || check_browser_version("Camino", 0)) {
+        $classes[] = 'gecko';
         if (preg_match('/rv\:([1-2])\.([0-9])/', $_SERVER['HTTP_USER_AGENT'], $matches)) {
-            $classes .= "gecko{$matches[1]}{$matches[2]} ";
+            $classes[] = "gecko{$matches[1]}{$matches[2]}";
         }
 
     } elseif (check_browser_version("Safari", 0)) {
-        $classes .= 'safari ';
+        $classes[] = 'safari';
 
     } elseif (check_browser_version("Opera", 0)) {
-        $classes .= 'opera ';
+        $classes[] = 'opera';
 
     }
 
index 5713c9b990bc47ab2c8f3fa008e9b77d3282270d..e511ec0d490b57dbff426044760a7a1438748e79 100644 (file)
@@ -125,6 +125,18 @@ class moodle_page {
         return implode(' ', array_keys($this->_bodyclasses));
     }
 
+    /**
+     * PHP overloading magic to make the $PAGE->course syntax work.
+     */
+    public function __get($field) {
+        $getmethod = 'get_' . $field;
+        if (method_exists($this, $getmethod)) {
+            return $this->$getmethod();
+        } else {
+            throw new coding_exception('Unknown field ' . $field . ' of $PAGE.');
+        }
+    }
+
 /// Setter methods =============================================================
 
     /**
@@ -215,14 +227,11 @@ class moodle_page {
     }
 
     /**
-     * PHP overloading magic to make the $PAGE->course syntax work.
+     * @param array $classes this utility method calls add_body_class for each array element.
      */
-    public function __get($field) {
-        $getmethod = 'get_' . $field;
-        if (method_exists($this, $getmethod)) {
-            return $this->$getmethod();
-        } else {
-            throw new coding_exception('Unknown field ' . $field . ' of $PAGE.');
+    public function add_body_classes($classes) {
+        foreach ($classes as $class) {
+            $this->add_body_class($class);
         }
     }
 
@@ -268,6 +277,8 @@ class moodle_page {
     }
 
     protected function initialise_standard_body_classes() {
+        global $CFG;
+
         $pagetype = $this->pagetype;
         if ($pagetype == 'site-index') {
             $this->_legacyclass = 'course';
@@ -279,10 +290,12 @@ class moodle_page {
         $this->add_body_class($this->_legacyclass);
 
         $this->add_body_class('course-' . $this->_course->id);
-        $this->add_body_class(get_browser_version_classes());
+        $this->add_body_classes(get_browser_version_classes());
         $this->add_body_class('dir-' . get_string('thisdirection'));
         $this->add_body_class('lang-' . current_language());
 
+        $this->add_body_class($this->url_to_class_name($CFG->wwwroot));
+
         if (!isloggedin()) {
             $this->add_body_class('notloggedin');
         }
@@ -296,6 +309,21 @@ class moodle_page {
         }
     }
 
+    protected function url_to_class_name($url) {
+        $bits = parse_url($url);
+        $class = str_replace('.', '-', $bits['host']);
+        if (!empty($bits['port'])) {
+            $class .= '--' . $bits['port'];
+        }
+        if (!empty($bits['path'])) {
+            $path = trim($bits['path'], '/');
+            if ($path) {
+                $class .= '--' . str_replace('/', '-', $path);
+            }
+        }
+        return $class;
+    }
+
 /// Deprecated fields and methods for backwards compatibility ==================
 
     /**
index f3bcdb779d355a73d14dff7239f89472969ba093..886c5e0ebd9201bc48a24cc9727336efd4c56295 100644 (file)
@@ -205,25 +205,25 @@ class moodlelib_test extends UnitTestCase {
 
     function test_get_browser_version_classes() {
         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Safari']['2.0']['Mac OS X'];
-        $this->assertEqual('safari ', get_browser_version_classes());
+        $this->assertEqual(array('safari'), get_browser_version_classes());
 
         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Opera']['9.0']['Windows XP'];
-        $this->assertEqual('opera ', get_browser_version_classes());
+        $this->assertEqual(array('opera'), get_browser_version_classes());
 
         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['6.0']['Windows XP SP2'];
-        $this->assertEqual('ie ie6 ', get_browser_version_classes());
+        $this->assertEqual(array('ie', 'ie6'), get_browser_version_classes());
 
         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['7.0']['Windows XP SP2'];
-        $this->assertEqual('ie ie7 ', get_browser_version_classes());
+        $this->assertEqual(array('ie', 'ie7'), get_browser_version_classes());
 
         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['8.0']['Windows Vista'];
-        $this->assertEqual('ie ie8 ', get_browser_version_classes());
+        $this->assertEqual(array('ie', 'ie8'), get_browser_version_classes());
 
         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['2.0']['Windows XP'];
-        $this->assertEqual('gecko gecko18 ', get_browser_version_classes());
+        $this->assertEqual(array('gecko', 'gecko18'), get_browser_version_classes());
 
         $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['3.0.6']['SUSE'];
-        $this->assertEqual('gecko gecko19 ', get_browser_version_classes());
+        $this->assertEqual(array('gecko', 'gecko19'), get_browser_version_classes());
     }
 
     function test_optional_param()
index 34e5259f5383c3a5445d633883674c8fe51f3f82..623c6f521ccb259bb4ed57034c3f7cec9e622d88 100644 (file)
@@ -41,6 +41,9 @@ class testable_moodle_page extends moodle_page {
     public function initialise_default_pagetype($script = '') {
         parent::initialise_default_pagetype($script);
     }
+    public function url_to_class_name($url) {
+        return parent::url_to_class_name($url);
+    }
 }
 
 /**
@@ -211,13 +214,19 @@ class moodle_page_test extends UnitTestCase {
         $this->assertEqual('aclassname', $this->testpage->bodyclasses);
     }
 
-    public function test_get_body_classes_double() {
+    public function test_get_body_classes() {
         // Exercise SUT
-        $this->testpage->add_body_class('aclassname');
-        $this->testpage->add_body_class('anotherclassname');
+        $this->testpage->add_body_classes(array('aclassname', 'anotherclassname'));
         // Validate
         $this->assertEqual('aclassname anotherclassname', $this->testpage->bodyclasses);
     }
+
+    public function test_url_to_class_name() {
+        $this->assertEqual('example-com', $this->testpage->url_to_class_name('http://example.com'));
+        $this->assertEqual('example-com--80', $this->testpage->url_to_class_name('http://example.com:80'));
+        $this->assertEqual('example-com--moodle', $this->testpage->url_to_class_name('https://example.com/moodle'));
+        $this->assertEqual('example-com--8080--nested-moodle', $this->testpage->url_to_class_name('https://example.com:8080/nested/moodle'));
+    }
 }
 
 /**