MDL-25394 Tidied up several things in order to get this integrated
This commit is contained in:
@@ -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
@@ -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
|
||||
*
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user