MDL-25394 Tidied up several things in order to get this integrated

This commit is contained in:
Sam Hemelryk
2011-05-31 14:28:03 +08:00
parent 37959dd471
commit e5824bb9c6
9 changed files with 206 additions and 209 deletions
+1
View File
@@ -277,6 +277,7 @@ $string['invalidcoursemodule'] = 'Invalid course module ID';
$string['invalidcoursenameshort'] = 'Invalid short course name';
$string['invaliddata'] = 'Data submitted is invalid';
$string['invaliddatarootpermissions'] = 'Invalid permissions detected in $CFG->dataroot directory, administrator has to fix permissions.';
$string['invaliddevicetype'] = 'Invalid device type';
$string['invalidelementid'] = 'Incorrect element id!';
$string['invalidentry'] = 'This is not valid entry!';
$string['invalidevent'] = 'Invalid event';
+7 -3
View File
@@ -7317,8 +7317,13 @@ class admin_setting_configcolourpicker extends admin_setting {
class admin_setting_devicedetectregex extends admin_setting {
/**
* Calls parent::__construct with specific args
*/
* Calls parent::__construct with specific args
*
* @param string $name
* @param string $visiblename
* @param string $description
* @param mixed $defaultsetting
*/
public function __construct($name, $visiblename, $description, $defaultsetting = '') {
global $CFG;
parent::__construct($name, $visiblename, $description, $defaultsetting);
@@ -7496,7 +7501,6 @@ class admin_setting_devicedetectregex extends admin_setting {
}
}
/**
* Multiselect for current modules
*
-7
View File
@@ -6112,13 +6112,6 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
upgrade_main_savepoint(true, 2011052300.02);
}
//set enable theme detection to the new themes setting.
if ($oldversion < 2011052500.00) {
set_config('enabledevicedetection', 1);
upgrade_main_savepoint(true, 2011052500.00);
}
return true;
}
+37 -75
View File
@@ -7603,7 +7603,6 @@ function check_php_version($version='5.2.4') {
return false;
}
/**
* Returns whether a device/browser combination is mobile, tablet, legacy, default or the result of
* an optional admin specified regular expression. If enabledevicedetection is set to no or not set
@@ -7633,13 +7632,11 @@ function get_device_type() {
//mobile detection PHP direct copy from open source detectmobilebrowser.com
$phonesregex = '/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i';
$modelsregex = '/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i';
if (preg_match($phonesregex,$useragent)||preg_match($modelsregex,substr($useragent,0,4))){
if (preg_match($phonesregex,$useragent) || preg_match($modelsregex,substr($useragent, 0, 4))){
return 'mobile';
}
$tabletregex = '/Tablet browser|iPad|iProd|GT-P1000|GT-I9000|SHW-M180S|SGH-T849|SCH-I800|Build\/ERE27|sholest/i';
if (preg_match($tabletregex, $useragent)) {
return 'tablet';
}
@@ -7651,10 +7648,10 @@ function get_device_type() {
return 'default';
}
/**
* Returns a list of the device types supporting by Moodle
* @param boolean incusertypes includes types specified using the devicedetectregex admin setting
*
* @param boolean $incusertypes includes types specified using the devicedetectregex admin setting
* @return array $types
*/
function get_device_type_list($incusertypes = true) {
@@ -7673,49 +7670,32 @@ function get_device_type_list($incusertypes = true) {
return $types;
}
/**
* Returns the theme selected for a particular device or false if none selected.
* @param string $themes
*
* @param string $devicetype
* @return string $theme or boolean false
* @return string|false The name of the theme to use for the device or the false if not set
*/
function get_selected_theme_for_device_type($devicetype = null) {
global $CFG;
if (empty($devicetype)) {
$devicetype = get_device_type();
//check if the user has switched theme, change $devicetype to default.
$switched = get_user_switched_device($devicetype);
if ($switched) {
$devicetype = $switched;
}
$devicetype = get_user_device_type();
}
$themevarname = get_device_cfg_var_name($devicetype);
if (empty($CFG->$themevarname)) {
return false;
}
//prevent problems if a user installs themes
if (!is_dir($CFG->dirroot.'/theme/'.$CFG->$themevarname)) {
if ($devicetype == 'default') {
return 'standard';
} else {
return false;
}
}
return $CFG->$themevarname;
}
/**
* Returns the name of the device type theme var in $CFG (because there is not a standard convention to allow backwards compatability
*
* @param string $devicetype
* @return string The config variable to use to determine the theme
*/
function get_device_cfg_var_name($devicetype = null) {
if ($devicetype == 'default' || empty($devicetype)) {
@@ -7725,59 +7705,41 @@ function get_device_cfg_var_name($devicetype = null) {
return 'theme' . $devicetype;
}
/**
* Allows the user to switch the device they are seeing the theme for.
* This allows mobile users to switch back to the default theme, or theme for any other device.
*
* @param string $newdevice The device the user is currently using.
* @return string The device the user has switched to
*/
function set_user_device_type($newdevice) {
global $USER;
$devicetype = get_device_type();
$devicetypes = get_device_type_list();
if ($newdevice == $devicetype) {
unset_user_preference('switchdevice'.$devicetype);
} else if (in_array($newdevice, $devicetypes)) {
set_user_preference('switchdevice'.$devicetype, $newdevice);
}
}
/**
* Returns device type or false if the user has switched theme to default for a device type
* @param string $devicetype
* Returns the device the user is currently using, or if the user has chosen to switch devices
* for the current device type the type they have switched to.
*
* @return string The device the user is currently using or wishes to use
*/
function get_user_switched_device($devicetype = null) {
global $USER;
if (empty($USER)) {
return false;
function get_user_device_type() {
$device = get_device_type();
$switched = get_user_preferences('switchdevice'.$device, false);
if ($switched != false) {
return $switched;
}
if (empty($devicetype)) {
$devicetype = get_device_type();
}
$switchdevice = get_user_preferences('switchdevice'.$devicetype);
if (empty($switchdevice)) {
return false;
}
return $switchdevice;
return $device;
}
function switch_device($devicetype = null) {
global $USER;
if (is_null($devicetype)) {
$devicetype = get_device_type();
}
$switcheddevice = get_user_preferences('switchdevice'.$devicetype);
if (!empty($switcheddevice)) {
$switcheddevice = false;
} else {
$pref = optional_param('switchdevice', '', PARAM_TEXT);
if (!empty($pref)) {
$switcheddevice = $pref;
} else if ($devicetype == 'default') {
$switcheddevice = 'mobile';
} else {
$switcheddevice = 'default';
}
}
set_user_preference('switchdevice'.$devicetype, $switcheddevice);
}
/**
* Returns one or several CSS class names that match the user's browser. These can be put
* in the body tag of the page to apply browser-specific rules without relying on CSS hacks
+17 -22
View File
@@ -212,8 +212,6 @@ class core_renderer extends renderer_base {
protected $contenttype;
/** @var string used by {@link redirect_message()} method to communicate with {@link header()}. */
protected $metarefreshtag = '';
/** @var set if the theme links function has been called **/
protected $switchlinkdisplayed;
/**
* Get the DOCTYPE declaration that should be used with this page. Designed to
@@ -364,11 +362,12 @@ class core_renderer extends renderer_base {
// but some of the content won't be known until later, so we return a placeholder
// for now. This will be replaced with the real content in {@link footer()}.
$output = self::PERFORMANCE_INFO_TOKEN;
if ($this->page->devicetypeinuse == 'legacy'){
if ($this->page->devicetypeinuse == 'legacy') {
// The legacy theme is in use print the notification
$output .= html_writer::tag('div', get_string('legacythemeinuse'), array('class'=>'legacythemeinuse'));
}
// Get links to switch device types (only shown for users not on a default device)
$output .= $this->theme_switch_links();
if (!empty($CFG->debugpageinfo)) {
@@ -2502,36 +2501,33 @@ EOD;
return $content;
}
/*
/**
* Renders theme links for switching between default and other themes.
*
* @return string
*/
protected function theme_switch_links() {
if ($this->switchlinkdisplayed) {
$actualdevice = get_device_type();
$currentdevice = $this->page->devicetypeinuse;
$switched = ($actualdevice != $currentdevice);
if (!$switched && $currentdevice == 'default' && $actualdevice == 'default') {
// The user is using the a default device and hasn't switched so don't shown the switch
// device links.
return '';
}
global $USER;
$type = get_device_type();
$this->switchlinkdisplayed = true;
if ($type == 'default') {
return '';
}
$switched = get_user_switched_device();
if ($switched) {
$linktext = get_string('switchdevicerecommended');
$devicetype = $actualdevice;
} else {
$linktext = get_string('switchdevicedefault');
$devicetype = 'default';
}
$linkurl = new moodle_url('/theme/switchdevice.php', array('url' => $this->page->url, 'device' => $devicetype, 'sesskey' => sesskey()));
$content = html_writer::start_tag('div', array('id'=>'theme_switch_link'));
$linkurl = new moodle_url('/theme/switch.php', array('url' => $this->page->url));
$content = html_writer::start_tag('div', array('id' => 'theme_switch_link'));
$content .= html_writer::link($linkurl, $linktext);
$content .= html_writer::end_tag('div');
@@ -2539,7 +2535,6 @@ EOD;
}
}
/// RENDERERS
/**
+35 -15
View File
@@ -64,7 +64,7 @@ defined('MOODLE_INTERNAL') || die();
* @property-read object $course The current course that we are inside - a row from the
* course table. (Also available as $COURSE global.) If we are not inside
* an actual course, this will be the site course.
* @property-read bool $devicetypeinuse name of the device type in use
* @property-read string $devicetypeinuse The name of the device type in use
* @property-read string $docspath The path to the Moodle docs for this page.
* @property-read string $focuscontrol The id of the HTML element to be focused when the page has loaded.
* @property-read bool $headerprinted
@@ -218,9 +218,11 @@ class moodle_page {
/**
* Is set to the name of the device type in use.
* This will we worked out when it is first used.
*
* @var string
*/
protected $_devicetypeinuse = 'default';
protected $_devicetypeinuse = null;
protected $_https_login_required = false;
@@ -524,10 +526,24 @@ class moodle_page {
/**
* Please do not call this method directly, use the ->devicetypeinuse syntax. {@link __get()}.
* @return bool
*
* @return string The device type being used.
*/
protected function magic_get_devicetypeinuse() {
return ($this->_devicetypeinuse);
if (empty($this->_devicetypeinuse)) {
$this->_devicetypeinuse = get_user_device_type();
}
return $this->_devicetypeinuse;
}
/**
* Please do not call this method directly, use the ->legacythemeinuse syntax. {@link __get()}.
* @deprecated since 2.1
* @return bool
*/
protected function magic_get_legacythemeinuse() {
debugging('$PAGE->legacythemeinuse is a deprecated property - please use $PAGE->devicetypeinuse and check if it is equal to legacy.', DEVELOPER_DEBUG);
return ($this->devicetypeinuse == 'legacy');
}
/**
@@ -1280,19 +1296,15 @@ class moodle_page {
}
}
$devicetype = get_device_type();
$theme = '';
foreach ($themeorder as $themetype) {
switch ($themetype) {
case 'course':
if (!empty($CFG->allowcoursethemes) and !empty($this->_course->theme) and $devicetype == 'default') {
if (!empty($CFG->allowcoursethemes) && !empty($this->_course->theme) && $this->devicetypeinuse == 'default') {
return $this->_course->theme;
}
case 'category':
if (!empty($CFG->allowcategorythemes) and $devicetype == 'default') {
if (!empty($CFG->allowcategorythemes) && $this->devicetypeinuse == 'default') {
$categories = $this->categories;
foreach ($categories as $category) {
if (!empty($category->theme)) {
@@ -1307,7 +1319,7 @@ class moodle_page {
}
case 'user':
if (!empty($CFG->allowuserthemes) and !empty($USER->theme) && $devicetype == 'default') {
if (!empty($CFG->allowuserthemes) && !empty($USER->theme) && $this->devicetypeinuse == 'default') {
if ($mnetpeertheme) {
return $mnetpeertheme;
} else {
@@ -1319,10 +1331,18 @@ class moodle_page {
if ($mnetpeertheme) {
return $mnetpeertheme;
}
$this->_devicetypeinuse = $devicetype;
return get_selected_theme_for_device_type();
// First try for the device the user is using.
$devicetheme = get_selected_theme_for_device_type($this->devicetypeinuse);
if (!empty($devicetheme)) {
return $devicetheme;
}
// Next try for the default device (as a fallback)
$devicetheme = get_selected_theme_for_device_type('default');
if (!empty($devicetheme)) {
return $devicetheme;
}
// The default device theme isn't set up - use the overall default theme.
return theme_config::DEFAULT_THEME;
}
}
}
+99 -83
View File
@@ -28,19 +28,26 @@ $device = optional_param('device', '', PARAM_TEXT);
admin_externalpage_setup('themeselector');
if (!empty($device)) {
// Make sure the device requested is valid
$devices = get_device_type_list();
if (!in_array($device, $devices)) {
// The provided device isn't a valid device throw an error
print_error('invaliddevicetype');
}
}
unset($SESSION->theme);
if ($reset and confirm_sesskey()) {
theme_reset_all_caches();
} else if ($choose && $device && confirm_sesskey()) {
$chosentheme = $choose;
$heading = get_string('themesaved');
$theme = theme_config::load($chosentheme);
// Load the theme to make sure it is valid.
$theme = theme_config::load($choose);
// Get the config argument for the chosen device.
$themename = get_device_cfg_var_name($device);
set_config($themename, $theme->name);
// Create a new page for the display of the themes readme.
@@ -57,7 +64,7 @@ if ($reset and confirm_sesskey()) {
$output = $confirmpage->get_renderer('core');
echo $output->header();
echo $output->heading($heading);
echo $output->heading(get_string('themesaved'));
echo $output->box_start();
echo format_text(get_string('choosereadme', 'theme_'.$theme->name), FORMAT_MOODLE);
echo $output->box_end();
@@ -72,108 +79,117 @@ if ($reset and confirm_sesskey()) {
echo $OUTPUT->header('themeselector');
echo $OUTPUT->heading(get_string('themes'));
echo $OUTPUT->single_button(new moodle_url('index.php', array('sesskey'=>sesskey(), 'reset'=>1)), get_string('themeresetcaches', 'admin'));
echo $OUTPUT->single_button(new moodle_url('index.php', array('sesskey' => sesskey(), 'reset' => 1)), get_string('themeresetcaches', 'admin'));
$table = new html_table();
$table->data = array();
if ($CFG->enabledevicedetection && empty($device)) {
$table = new html_table();
$table->id = 'devicethemeselector';
// Display a list of devices that a user can select a theme for.
$strthemenotselected = get_string('themenoselected', 'admin');
$strthemeselect = get_string('themeselect', 'admin');
// Display the device selection screen
$table->id = 'admindeviceselector';
$table->head = array(get_string('devicetype', 'admin'), get_string('theme'), get_string('info'));
$devices = get_device_type_list();
foreach ($devices as $device) {
$row = array();
$row[] = $device;
$themename = get_selected_theme_for_device_type($device);
if (!$themename && $device == 'default') {
$themename = theme_config::DEFAULT_THEME;
}
$screenshotcell = $strthemenotselected;
if ($themename) {
$strthemename = get_string('pluginname', 'theme_'.$themename);
// link to the screenshot, now mandatory - the image path is hardcoded because we need image from other themes, not the current one
$screenshotpath = new moodle_url('/theme/image.php', array('theme'=>$themename, 'image'=>'screenshot', 'component'=>'theme'));
// Contents of the first screenshot/preview cell.
$row[] = html_writer::empty_tag('img', array('src'=>$screenshotpath, 'alt'=>$strthemename));
} else {
$row[] = get_string('themenoselected', 'admin');
// Check the theme exists
$themename = clean_param($themename, PARAM_THEME);
if (empty($themename)) {
// Likely the theme has been deleted
unset_config(get_device_cfg_var_name($device));
} else {
$strthemename = get_string('pluginname', 'theme_'.$themename);
// link to the screenshot, now mandatory - the image path is hardcoded because we need image from other themes, not the current one
$screenshoturl = new moodle_url('/theme/image.php', array('theme' => $themename, 'image' => 'screenshot', 'component' => 'theme'));
// Contents of the screenshot/preview cell.
$screenshotcell = html_writer::empty_tag('img', array('src' => $screenshoturl, 'alt' => $strthemename));
}
}
$select = new single_button(new moodle_url('/theme/index.php', array('device' => $device, 'sesskey' => sesskey())), get_string('themeselect', 'admin'), 'get');
$deviceurl = new moodle_url('/theme/index.php', array('device' => $device, 'sesskey' => sesskey()));
$select = new single_button($deviceurl, $strthemeselect, 'get');
$row[] = $OUTPUT->render($select);
$table->data[] = array(
$device,
$screenshotcell,
$OUTPUT->render($select)
);
}
} else {
// Either a device has been selected of $CFG->enabledevicedetection is off so display a list
// of themes to select.
$table->data[$device] = $row;
if (empty($device)) {
// if $CFG->enabledevicedetection is off this will return 'default'
$device = get_device_type();
}
echo html_writer::table($table);
echo $OUTPUT->footer();
$table->id = 'adminthemeselector';
$table->head = array(get_string('theme'), get_string('info'));
exit;
}
$themes = get_plugin_list('theme');
//if $CFG->enabledevicedetection is set to no, then this will return the default device type.
if (empty($device)) {
$device = get_device_type();
}
foreach ($themes as $themename => $themedir) {
$table = new html_table();
$table->id = 'adminthemeselector';
$table->head = array(get_string('theme'), get_string('info'));
// Load the theme config.
try {
$theme = theme_config::load($themename);
} catch (Exception $e) {
// Bad theme, just skip it for now.
continue;
}
if ($themename !== $theme->name) {
//obsoleted or broken theme, just skip for now
continue;
}
if (!$CFG->themedesignermode && $theme->hidefromselector) {
// The theme doesn't want to be shown in the theme selector and as theme
// designer mode is switched off we will respect that decision.
continue;
}
$strthemename = get_string('pluginname', 'theme_'.$themename);
$themes = get_plugin_list('theme');
// Build the table row, and also a list of items to go in the second cell.
$row = array();
$infoitems = array();
$rowclasses = array();
foreach ($themes as $themename => $themedir) {
// Load the theme config.
try {
$theme = theme_config::load($themename);
} catch (Exception $e) {
// Bad theme, just skip it for now.
continue;
// Set up bools whether this theme is chosen either main or legacy
$ischosentheme = ($themename == get_selected_theme_for_device_type($device));
if ($ischosentheme) {
// Is the chosen main theme
$rowclasses[] = 'selectedtheme';
}
// link to the screenshot, now mandatory - the image path is hardcoded because we need image from other themes, not the current one
$screenshotpath = new moodle_url('/theme/image.php', array('theme'=>$themename, 'image'=>'screenshot', 'component'=>'theme'));
// Contents of the first screenshot/preview cell.
$row[] = html_writer::empty_tag('img', array('src'=>$screenshotpath, 'alt'=>$strthemename));
// Contents of the second cell.
$infocell = $OUTPUT->heading($strthemename, 3);
// Button to choose this as the main theme
$maintheme = new single_button(new moodle_url('/theme/index.php', array('device' => $device, 'choose' => $themename, 'sesskey' => sesskey())), get_string('usetheme'), 'get');
$maintheme->disabled = $ischosentheme;
$infocell .= $OUTPUT->render($maintheme);
$row[] = $infocell;
$table->data[$themename] = $row;
$table->rowclasses[$themename] = join(' ', $rowclasses);
}
if ($themename !== $theme->name) {
//obsoleted or broken theme, just skip for now
continue;
}
if (!$CFG->themedesignermode && $theme->hidefromselector) {
// The theme doesn't want to be shown in the theme selector and as theme
// designer mode is switched off we will respect that decision.
continue;
}
$strthemename = get_string('pluginname', 'theme_'.$themename);
// Build the table row, and also a list of items to go in the second cell.
$row = array();
$infoitems = array();
$rowclasses = array();
// Set up bools whether this theme is chosen either main or legacy
$ischosentheme = ($themename == get_selected_theme_for_device_type($device));
if ($ischosentheme) {
// Is the chosen main theme
$rowclasses[] = 'selectedtheme';
}
// link to the screenshot, now mandatory - the image path is hardcoded because we need image from other themes, not the current one
$screenshotpath = new moodle_url('/theme/image.php', array('theme'=>$themename, 'image'=>'screenshot', 'component'=>'theme'));
// Contents of the first screenshot/preview cell.
$row[] = html_writer::empty_tag('img', array('src'=>$screenshotpath, 'alt'=>$strthemename));
// Contents of the second cell.
$infocell = $OUTPUT->heading($strthemename, 3);
// Button to choose this as the main theme
$maintheme = new single_button(new moodle_url('/theme/index.php', array('device' => $device, 'choose' => $themename, 'sesskey' => sesskey())), get_string('usetheme'), 'get');
$maintheme->disabled = $ischosentheme;
$infocell .= $OUTPUT->render($maintheme);
$row[] = $infocell;
$table->data[$themename] = $row;
$table->rowclasses[$themename] = join(' ', $rowclasses);
}
echo html_writer::table($table);
+9 -3
View File
@@ -15,13 +15,19 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This code processes switch requests-> ... -> Theme selector UI.
* This code processes switch device requests-> ... -> Theme selector UI.
*
* This script doesn't require login as not logged in users should still
* be able to switch the device theme they are using.
*/
require('../config.php');
$url = required_param('url', PARAM_LOCALURL);
$url = required_param('url', PARAM_LOCALURL);
$newdevice = required_param('device', PARAM_TEXT);
switch_device();
require_sesskey();
set_user_device_type($newdevice);
redirect($url);
+1 -1
View File
@@ -30,7 +30,7 @@
defined('MOODLE_INTERNAL') || die();
$version = 2011052500.06; // YYYYMMDD = weekly release date of this DEV branch
$version = 2011053100.00; // YYYYMMDD = weekly release date of this DEV branch
// RR = release increments - 00 in DEV branches
// .XX = incremental changes