From 89fbdca3008233739964a74e81541138e35a6f47 Mon Sep 17 00:00:00 2001 From: tjhunt Date: Wed, 6 May 2009 08:44:58 +0000 Subject: [PATCH] moodle_page: MDL-14305 (and MDL-12212) class on body based on ->wwwroot --- lib/moodlelib.php | 21 +++++------ lib/pagelib.php | 44 ++++++++++++++++++----- lib/simpletest/testmoodlelib.php | 14 ++++---- lib/simpletest/testpagelib_moodlepage.php | 15 ++++++-- 4 files changed, 66 insertions(+), 28 deletions(-) diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 5aaeb7041d..4c819c1d28 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -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'; } diff --git a/lib/pagelib.php b/lib/pagelib.php index 5713c9b990..e511ec0d49 100644 --- a/lib/pagelib.php +++ b/lib/pagelib.php @@ -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 ================== /** diff --git a/lib/simpletest/testmoodlelib.php b/lib/simpletest/testmoodlelib.php index f3bcdb779d..886c5e0ebd 100644 --- a/lib/simpletest/testmoodlelib.php +++ b/lib/simpletest/testmoodlelib.php @@ -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() diff --git a/lib/simpletest/testpagelib_moodlepage.php b/lib/simpletest/testpagelib_moodlepage.php index 34e5259f53..623c6f521c 100644 --- a/lib/simpletest/testpagelib_moodlepage.php +++ b/lib/simpletest/testpagelib_moodlepage.php @@ -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')); + } } /** -- 2.39.5