Merge branch 'MDL-36900-master' of git://github.com/FMCorz/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 11 Mar 2013 23:45:59 +0000 (00:45 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 11 Mar 2013 23:45:59 +0000 (00:45 +0100)
20 files changed:
admin/index.php
admin/tool/behat/tests/behat/nasty_strings.feature
auth/cas/auth.php
auth/cas/config.html
auth/ldap/auth.php
auth/ldap/config.html
backup/converter/moodle1/handlerlib.php
blocks/tests/behat/restrict_available_blocks.feature
blog/lib.php
cache/classes/helper.php
cache/locallib.php
lib/outputrequirementslib.php
lib/testing/classes/nasty_strings.php
lib/tests/behat/behat_transformations.php
mod/quiz/mod_form.php
question/type/match/backup/moodle1/lib.php
question/type/multichoice/backup/moodle1/lib.php
theme/mymobile/javascript/custom.js
theme/mymobile/layout/embedded.php
theme/mymobile/layout/general.php

index d75e364..35cbdaf 100644 (file)
@@ -208,8 +208,8 @@ if ($version > $CFG->version) {  // upgrade
 
     if (empty($confirmupgrade)) {
         $a = new stdClass();
-        $a->oldversion = "$CFG->release ($CFG->version)";
-        $a->newversion = "$release ($version)";
+        $a->oldversion = "$CFG->release (".sprintf('%.2f', $CFG->version).")";
+        $a->newversion = "$release (".sprintf('%.2f', $version).")";
         $strdatabasechecking = get_string('databasechecking', '', $a);
 
         $PAGE->set_title($stradministration);
index 9135798..550386f 100644 (file)
@@ -43,7 +43,7 @@ Feature: Transform steps arguments
     And I follow "Edit profile"
     Then I should not see "NASTYSTRING"
     And the "First name" field should match "va\"lue1" value
-    And the "Description" field should match "va\"lue2" value
+    And the "Description" field should match "va\\"lue2" value
     And the "City/town" field should match "va\"lue3" value
 
   @javascript
index ccd1021..6b22044 100644 (file)
@@ -208,10 +208,6 @@ class auth_plugin_cas extends auth_plugin_ldap {
             }
         }
 
-        if (!ldap_paged_results_supported($this->config->ldap_version)) {
-            echo $OUTPUT->notification(get_string('pagedresultsnotsupp', 'auth_ldap'));
-        }
-
         include($CFG->dirroot.'/auth/cas/config.html');
     }
 
index b333f29..222845b 100644 (file)
@@ -95,6 +95,12 @@ if (!isset($config->removeuser)) {
 
 $yesno = array( get_string('no'), get_string('yes') );
 
+$disabled = '';
+if (!ldap_paged_results_supported($config->ldap_version)) {
+    $disabled = ' disabled="disabled"';
+    echo $OUTPUT->notification(get_string('pagedresultsnotsupp', 'auth_ldap'));
+}
+
 ?>
 <table cellspacing="0" cellpadding="5" border="0">
 <tr>
@@ -280,7 +286,6 @@ $yesno = array( get_string('no'), get_string('yes') );
         <label for="pagesize"><?php print_string('pagesize_key', 'auth_ldap') ?></label>
     </td>
     <td>
-        <?php $disabled = (!ldap_paged_results_supported($config->ldap_version)) ? ' disabled="disabled"' : '' ; ?>
         <input id="pagesize" name="pagesize" type="text" value="<?php echo $config->pagesize ?>" <?php echo $disabled ?>/>
         <?php
             if (isset($err['pagesize'])) { echo $OUTPUT->error_text($err['pagesize']); }
index 9bdd5b3..00f0bf9 100644 (file)
@@ -1736,10 +1736,6 @@ class auth_plugin_ldap extends auth_plugin_base {
             return;
         }
 
-        if (!ldap_paged_results_supported($this->config->ldap_version)) {
-            echo $OUTPUT->notification(get_string('pagedresultsnotsupp', 'auth_ldap'));
-        }
-
         include($CFG->dirroot.'/auth/ldap/config.html');
     }
 
index 333bca3..5140397 100644 (file)
@@ -106,6 +106,12 @@ if (!isset($config->ntlmsso_remoteuserformat)) {
 
 $yesno = array(get_string('no'), get_string('yes'));
 
+$disabled = '';
+if (!ldap_paged_results_supported($config->ldap_version)) {
+    $disabled = ' disabled="disabled"';
+    echo $OUTPUT->notification(get_string('pagedresultsnotsupp', 'auth_ldap'));
+}
+
 ?>
 <table cellspacing="0" cellpadding="5" border="0">
 <tr>
@@ -170,7 +176,6 @@ $yesno = array(get_string('no'), get_string('yes'));
         <label for="pagesize"><?php print_string('pagesize_key', 'auth_ldap') ?></label>
     </td>
     <td>
-        <?php $disabled = (!ldap_paged_results_supported($config->ldap_version)) ? ' disabled="disabled"' : '' ; ?>
         <input id="pagesize" name="pagesize" type="text" value="<?php echo $config->pagesize ?>" <?php echo $disabled ?>/>
         <?php
             if (isset($err['pagesize'])) { echo $OUTPUT->error_text($err['pagesize']); }
index a2744c2..94c0b1d 100644 (file)
@@ -1040,6 +1040,24 @@ class moodle1_question_bank_handler extends moodle1_xml_handler {
     /** @var array holds the instances of qtype specific conversion handlers */
     private $qtypehandlers = null;
 
+    /**
+     * Return the file manager instance used.
+     *
+     * @return moodle1_file_manager
+     */
+    public function get_file_manager() {
+        return $this->fileman;
+    }
+
+    /**
+     * Returns the information about the question category context being currently parsed
+     *
+     * @return array with keys contextid, contextlevel and contextinstanceid
+     */
+    public function get_current_category_context() {
+        return $this->currentcategory;
+    }
+
     /**
      * Registers path that are not qtype-specific
      */
@@ -1191,6 +1209,17 @@ class moodle1_question_bank_handler extends moodle1_xml_handler {
             $data['generalfeedbackformat'] = FORMAT_HTML;
         }
 
+        // Migrate files in questiontext.
+        $this->fileman->contextid = $this->currentcategory['contextid'];
+        $this->fileman->component = 'question';
+        $this->fileman->filearea  = 'questiontext';
+        $this->fileman->itemid    = $data['id'];
+        $data['questiontext'] = moodle1_converter::migrate_referenced_files($data['questiontext'], $this->fileman);
+
+        // Migrate files in generalfeedback.
+        $this->fileman->filearea  = 'generalfeedback';
+        $data['generalfeedback'] = moodle1_converter::migrate_referenced_files($data['generalfeedback'], $this->fileman);
+
         // replay the upgrade step 2010080901 - updating question image
         if (!empty($data['image'])) {
             if (textlib::substr(textlib::strtolower($data['image']), 0, 7) == 'http://') {
@@ -1736,12 +1765,41 @@ abstract class moodle1_qtype_handler extends moodle1_plugin_handler {
         foreach ($answers as $elementname => $elements) {
             foreach ($elements as $element) {
                 $answer = $this->convert_answer($element, $qtype);
+                // Migrate images in answertext.
+                if ($answer['answerformat'] == FORMAT_HTML) {
+                    $answer['answertext'] = $this->migrate_files($answer['answertext'], 'question', 'answer', $answer['id']);
+                }
+                // Migrate images in feedback.
+                if ($answer['feedbackformat'] == FORMAT_HTML) {
+                    $answer['feedback'] = $this->migrate_files($answer['feedback'], 'question', 'answerfeedback', $answer['id']);
+                }
                 $this->write_xml('answer', $answer, array('/answer/id'));
             }
         }
         $this->xmlwriter->end_tag('answers');
     }
 
+    /**
+     * Migrate files belonging to one qtype plugin text field.
+     *
+     * @param array $text the html fragment containing references to files
+     * @param string $component the component for restored files
+     * @param string $filearea the file area for restored files
+     * @param int $itemid the itemid for restored files
+     *
+     * @return string the text for this field, after files references have been processed
+     */
+    protected function migrate_files($text, $component, $filearea, $itemid) {
+        $context = $this->qbankhandler->get_current_category_context();
+        $fileman = $this->qbankhandler->get_file_manager();
+        $fileman->contextid = $context['contextid'];
+        $fileman->component = $component;
+        $fileman->filearea  = $filearea;
+        $fileman->itemid    = $itemid;
+        $text = moodle1_converter::migrate_referenced_files($text, $fileman);
+        return $text;
+    }
+
     /**
      * Writes the grouped numerical_units structure
      *
@@ -1900,7 +1958,8 @@ abstract class moodle1_qtype_handler extends moodle1_plugin_handler {
         if ($qtype !== 'multichoice') {
             $new['answerformat'] = FORMAT_PLAIN;
         } else {
-            $new['answerformat'] = FORMAT_MOODLE;
+            $new['answertext'] = text_to_html($new['answertext'], false, false, true);
+            $new['answerformat'] = FORMAT_HTML;
         }
 
         if ($CFG->texteditors !== 'textarea') {
index 29590aa..00cf8de 100644 (file)
@@ -4,8 +4,7 @@ Feature: Allowed blocks controls
   As an admin
   I need to restrict some blocks to be used in courses
 
-  @javascript
-  Scenario: Blocks can be added with the default permissions
+  Background:
     Given the following "users" exists:
       | username | firstname | lastname | email |
       | teacher1 | Teacher | 1 | teacher1@asd.com |
@@ -15,7 +14,10 @@ Feature: Allowed blocks controls
     And the following "course enrolments" exists:
       | user | course | role |
       | teacher1 | C1 | editingteacher |
-    And I log in as "teacher1"
+
+  @javascript
+  Scenario: Blocks can be added with the default permissions
+    Given I log in as "teacher1"
     And I follow "Course $NASTYSTRING1"
     And I turn editing mode on
     When I add the "Course completion status" block
@@ -25,16 +27,7 @@ Feature: Allowed blocks controls
 
   @javascript
   Scenario: Blocks can not be added when the admin restricts the permissions
-    Given the following "users" exists:
-      | username | firstname | lastname | email |
-      | teacher1 | Teacher | 1 | teacher1@asd.com |
-    And the following "courses" exists:
-      | fullname | shortname | category |
-      | Course $NASTYSTRING1 | C1 | 0 |
-    And the following "course enrolments" exists:
-      | user | course | role |
-      | teacher1 | C1 | editingteacher |
-    And I log in as "admin"
+    Given I log in as "admin"
     And I set the following system permissions of "Teacher" role:
       | block/activity_modules:addinstance | Prohibit |
     And I am on homepage
index a063a73..d809215 100644 (file)
@@ -601,7 +601,7 @@ function blog_get_options_for_module($module, $user=null) {
     }
     if (array_key_exists($key, $moduleoptions)) {
         // Serve from the cache so we don't have to regenerate
-        return $moduleoptions[$module->id];
+        return $moduleoptions[$key];
     }
 
     $canparticipate = (is_enrolled($modcontext) or is_viewing($modcontext));
index 20e2f6d..d63405b 100644 (file)
@@ -511,6 +511,7 @@ class cache_helper {
      * Update the site identifier stored by the cache API.
      *
      * @param string $siteidentifier
+     * @return string The new site identifier.
      */
     public static function update_site_identifier($siteidentifier) {
         global $CFG;
@@ -519,9 +520,10 @@ class cache_helper {
         $factory = cache_factory::instance();
         $factory->updating_started();
         $config = $factory->create_config_instance(true);
-        $config->update_site_identifier($siteidentifier);
+        $siteidentifier = $config->update_site_identifier($siteidentifier);
         $factory->updating_finished();
         cache_factory::reset();
+        return $siteidentifier;
     }
 
     /**
@@ -530,11 +532,30 @@ class cache_helper {
      * @return string
      */
     public static function get_site_identifier() {
-        if (is_null(self::$siteidentifier)) {
-            $factory = cache_factory::instance();
+        global $CFG;
+        if (!is_null(self::$siteidentifier)) {
+            return self::$siteidentifier;
+        }
+        // If site identifier hasn't been collected yet attempt to get it from the cache config.
+        $factory = cache_factory::instance();
+        // If the factory is initialising then we don't want to try to get it from the config or we risk
+        // causing the cache to enter an infinite initialisation loop.
+        if (!$factory->is_initialising()) {
             $config = $factory->create_config_instance();
             self::$siteidentifier = $config->get_site_identifier();
         }
+        if (is_null(self::$siteidentifier)) {
+            // If the site identifier is still null then config isn't aware of it yet.
+            // We'll see if the CFG is loaded, and if not we will just use unknown.
+            // It's very important here that we don't use get_config. We don't want an endless cache loop!
+            if (isset($CFG->siteidentifier)) {
+                self::$siteidentifier = self::update_site_identifier($CFG->siteidentifier);
+            } else {
+                // It's not being recorded in MUC's config and the config data hasn't been loaded yet.
+                // Likely we are initialising.
+                return 'unknown';
+            }
+        }
         return self::$siteidentifier;
     }
 
index 4d6d745..e2b498e 100644 (file)
@@ -529,10 +529,12 @@ class cache_config_writer extends cache_config {
      * Update the site identifier stored by the cache API.
      *
      * @param string $siteidentifier
+     * @return string The new site identifier.
      */
     public function update_site_identifier($siteidentifier) {
         $this->siteidentifier = md5((string)$siteidentifier);
         $this->config_save();
+        return $this->siteidentifier;
     }
 }
 
index 95a21a7..7aa0c60 100644 (file)
@@ -158,13 +158,6 @@ class page_requirements_manager {
         $this->YUI_config = new stdClass();
 
         // Set up some loader options.
-        if (debugging('', DEBUG_DEVELOPER)) {
-            $this->yui3loader->filter = 'RAW'; // For more detailed logging info use 'DEBUG' here.
-            $this->YUI_config->debug = true;
-        } else {
-            $this->yui3loader->filter = null;
-            $this->YUI_config->debug = false;
-        }
         if (!empty($CFG->useexternalyui) and strpos($CFG->httpswwwroot, 'https:') !== 0) {
             $this->yui3loader->base = 'http://yui.yahooapis.com/' . $CFG->yui3version . '/build/';
             $this->yui3loader->comboBase = 'http://yui.yahooapis.com/combo?';
@@ -188,7 +181,6 @@ class page_requirements_manager {
         $this->YUI_config->base         = $this->yui3loader->base;
         $this->YUI_config->comboBase    = $this->yui3loader->comboBase;
         $this->YUI_config->combine      = $this->yui3loader->combine;
-        $this->YUI_config->filter       = (string)$this->yui3loader->filter;
         $this->YUI_config->insertBefore = 'firstthemesheet';
         $this->YUI_config->modules      = array();
         $this->YUI_config->groups       = array(
@@ -213,7 +205,6 @@ class page_requirements_manager {
                 'base' => $CFG->httpswwwroot . '/lib/yui/gallery/',
                 'comboBase' => $CFG->httpswwwroot . '/theme/yui_combo.php'.$sep,
                 'combine' => $this->yui3loader->combine,
-                'filter' => $this->YUI_config->filter,
                 'ext' => false,
                 'root' => 'gallery/',
                 'patterns' => array(
@@ -239,6 +230,23 @@ class page_requirements_manager {
             )
         );
 
+        // Set some more loader options applying to groups too.
+        if (debugging('', DEBUG_DEVELOPER)) {
+            // When debugging is enabled, we want to load the non-minified (RAW) versions of YUI library modules rather
+            // than the DEBUG versions as these generally generate too much logging for our purposes.
+            // However we do want the DEBUG versions of our Moodle-specific modules.
+            // To debug a YUI-specific issue, change the yui3loader->filter value to DEBUG.
+            $this->YUI_config->filter = 'RAW';
+            $this->YUI_config->groups['moodle']['filter'] = 'DEBUG';
+
+            // We use the yui3loader->filter setting when writing the YUI3 seed scripts into the header.
+            $this->yui3loader->filter = $this->YUI_config->filter;
+            $this->YUI_config->debug = true;
+        } else {
+            $this->yui3loader->filter = null;
+            $this->YUI_config->debug = false;
+        }
+
         // Every page should include definition of following modules.
         $this->js_module($this->find_module('core_filepicker'));
         $this->js_module($this->find_module('core_dock'));
index 95026d7..826a8ed 100644 (file)
@@ -56,7 +56,7 @@ class nasty_strings {
         '\' \\" \ \'$@NULL@$ @@TEST@@ < > & &lt; &gt; &amp; \\\" \\ , ; : . 日本語­% %%',
         '\\\" \\ , ; : . 日本語­% < > & &lt; &gt; &amp; \' \\" \ \'$@NULL@$ @@TEST@@ %%',
         '< > & &lt; &gt; &amp; \' \\" \ \'$@NULL@$ 日本語­% %% @@TEST@@ \\\" \\ . , ; :',
-        '. 日本語&amp; \' \\"< > & &lt; &gt; \\\" \\ , ; : \ \'$@NULL@$ @@TEST@@­% %%',
+        '. 日本語&amp; \' \\" < > & &lt; &gt; \\ , ; : \ \'$@NULL@$ \\\" @@TEST@@­% %%',
         '&amp; \' \\" \ < > & &lt; &gt; \\\" \\ , ; : . 日本語\'$@NULL@$ @@TEST@@­% %%',
     );
 
index c684c8a..a5591c8 100644 (file)
@@ -56,7 +56,7 @@ class behat_transformations extends behat_base {
      * @return string The string with the arguments fixed.
      */
     public function arg_replace_slashes($string) {
-        return $this->replace_slashes($string);
+        return str_replace('\"', '"', $string);
     }
 
     /**
@@ -73,8 +73,8 @@ class behat_transformations extends behat_base {
     /**
      * Transformations for TableNode arguments.
      *
-     * All the transformations have to be applied to tables,
-     * adding them in a different method for Behat API restrictions.
+     * Transformations applicable to TableNode arguments should also
+     * be applied, adding them in a different method for Behat API restrictions.
      *
      * @Transform /^table:(.*)/
      * @param TableNode $tablenode
@@ -87,9 +87,6 @@ class behat_transformations extends behat_base {
         foreach ($rows as $rowkey => $row) {
             foreach ($row as $colkey => $value) {
 
-                // TableNodes values doesn't need to be escaped, but maybe somebody does it.
-                $rows[$rowkey][$colkey] = $this->replace_slashes($value);
-
                 // Transforms vars into nasty strings.
                 if (preg_match('/\$NASTYSTRING(\d)/', $rows[$rowkey][$colkey])) {
                     $rows[$rowkey][$colkey] = $this->replace_nasty_strings($rows[$rowkey][$colkey]);
@@ -102,18 +99,6 @@ class behat_transformations extends behat_base {
         return $tablenode;
     }
 
-    /**
-     * Removes the escaped double quotes.
-     *
-     * Method reused by TableNode transformation.
-     *
-     * @param string $string
-     * @return string
-     */
-    public function replace_slashes($string) {
-        return str_replace('\"', '"', $string);
-    }
-
     /**
      * Replaces $NASTYSTRING vars for a nasty string.
      *
index a7db5cf..90cdb1f 100644 (file)
@@ -388,6 +388,10 @@ class mod_quiz_mod_form extends moodleform_mod {
         // Check and act on whether setting outcomes is considered an advanced setting.
         $mform->setAdvanced('modoutcomes', !empty($quizconfig->outcomes_adv));
 
+        // The standard_coursemodule_elements method sets this to 100, but the
+        // quiz has its own setting, so use that.
+        $mform->setDefault('grade', $quizconfig->maximumgrade);
+
         // -------------------------------------------------------------------------------
         $this->add_action_buttons();
     }
index 80cb251..f0f310a 100644 (file)
@@ -76,6 +76,8 @@ class moodle1_qtype_match_handler extends moodle1_qtype_handler {
                     $match['questiontextformat'] = $data['oldquestiontextformat'];
                 }
 
+                $match['questiontext'] = $this->migrate_files(
+                        $match['questiontext'], 'qtype_match', 'subquestion', $match['id']);
                 $this->write_xml('match', $match, array('/match/id'));
             }
         }
index bb1a459..9913c9c 100644 (file)
@@ -65,7 +65,7 @@ class moodle1_qtype_multichoice_handler extends moodle1_qtype_handler {
                 'answernumbering'                => 'abc',
             ));
         }
-        $this->write_multichoice($data['multichoice'], $data['oldquestiontextformat']);
+        $this->write_multichoice($data['multichoice'], $data['oldquestiontextformat'], $data['id']);
     }
 
     /**
@@ -73,8 +73,9 @@ class moodle1_qtype_multichoice_handler extends moodle1_qtype_handler {
      *
      * @param array $multichoices the grouped structure
      * @param int $oldquestiontextformat - {@see moodle1_question_bank_handler::process_question()}
+     * @param int $questionid question id
      */
-    protected function write_multichoice(array $multichoices, $oldquestiontextformat) {
+    protected function write_multichoice(array $multichoices, $oldquestiontextformat, $questionid) {
         global $CFG;
 
         // the grouped array is supposed to have just one element - let us use foreach anyway
@@ -101,6 +102,13 @@ class moodle1_qtype_multichoice_handler extends moodle1_qtype_handler {
                 $multichoice['incorrectfeedbackformat']         = $oldquestiontextformat;
             }
 
+            $multichoice['correctfeedback'] = $this->migrate_files(
+                    $multichoice['correctfeedback'], 'question', 'correctfeedback', $questionid);
+            $multichoice['partiallycorrectfeedback'] = $this->migrate_files(
+                    $multichoice['partiallycorrectfeedback'], 'question', 'partiallycorrectfeedback', $questionid);
+            $multichoice['incorrectfeedback'] = $this->migrate_files(
+                    $multichoice['incorrectfeedback'], 'question', 'incorrectfeedback', $questionid);
+
             $this->write_xml('multichoice', $multichoice, array('/multichoice/id'));
         }
     }
index bca2131..629c22d 100644 (file)
@@ -61,7 +61,7 @@ $(document).ready(function() {
         });
 
         //calendar and other links that need to be external
-        $('.maincalendar .filters a, li.activity.scorm a, div.files a, #page-user-filesPAGE li div a, .maincalendar .bottom a, .section li.url.modtype_url a, .resourcecontent .resourcemediaplugin a, #underfooter .noajax a, .block_mnet_hosts .content a, .block_private_files .content a, a.portfolio-add-link, #attempts td a').attr("data-ajax", "false");
+        $('.maincalendar .filters a, li.activity.scorm a, div.files a, #page-user-filesPAGE li div a, .maincalendar .bottom a, .section li.url.modtype_url a, .resourcecontent .resourcemediaplugin a, #underfooter .noajax a, .block_mnet_hosts .content a, .block_private_files .content a, a.portfolio-add-link, #attempts td a, .settingsul li a, .foldertree li a').attr("data-ajax", "false");
 
         //add blank to open in window for some
         $('#page-mod-url-viewPAGE div.urlworkaround a, #page-mod-resource-viewPAGE div.resourceworkaround a, .mediaplugin a.mediafallbacklink, #page-mod-resource-viewPAGE .resourcemp3 a, .foldertree li a').attr("target", "_blank").attr("data-role", "button").attr("data-icon", "plus");
index 7212b70..3c9b666 100644 (file)
@@ -55,7 +55,6 @@ echo $OUTPUT->doctype() ?>
     <div data-role="page" id="chatpage" data-fullscreen="true" data-title="<?php p($SITE->shortname) ?>">
         <?php echo $OUTPUT->main_content(); ?>
         <input type="button" value="back" data-role="none" id="chatback" onClick="history.back()">
-    </div>
     <?php } else { ?>
     <div id="content2" data-role="page" data-title="<?php p($SITE->shortname) ?>" data-theme="<?php echo $datatheme;?>">
         <div data-role="header" data-theme="<?php echo $datatheme;?>">
@@ -67,9 +66,9 @@ echo $OUTPUT->doctype() ?>
         <div data-role="content" class="mymobilecontent" data-theme="<?php echo $databodytheme;?>">
             <?php echo $OUTPUT->main_content(); ?>
         </div>
-    </div>
     <?php } ?>
-    <!-- START OF FOOTER -->
-    <?php echo $OUTPUT->standard_end_of_body_html() ?>
+        <!-- START OF FOOTER -->
+        <?php echo $OUTPUT->standard_end_of_body_html() ?>
+    </div>
 </body>
 </html>
\ No newline at end of file
index d956b85..6b86b65 100644 (file)
@@ -23,9 +23,9 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-// get blocks?
+// Get blocks?
 $toblock = optional_param('mymobile_blocks', false, PARAM_BOOL);
-// get settings?
+// Get settings?
 $toset = optional_param('mymobile_settings', false, PARAM_BOOL);
 
 $mypagetype = $PAGE->pagetype;
@@ -50,7 +50,7 @@ if ($showswatch == 'light') {
     $databodytheme = '';
 }
 
-//custom settings
+// Custom settings.
 $hasshowmobileintro = (!empty($PAGE->theme->settings->showmobileintro));
 
 if (!empty($PAGE->theme->settings->showfullsizeimages)) {
@@ -74,13 +74,13 @@ if (!empty($PAGE->theme->settings->usetableview)) {
 // TODO: Fix this hardcoding there are other course formats that peopleuse.
 //       Probably changing to an appropriate regex will do.
 if ($mypagetype == 'course-view-topics' || $mypagetype == 'course-view-weeks') {
-    // jump to current topic only in course pages
+    // Jump to current topic only in course pages.
     $jumptocurrent = 'true';
 } else {
     $jumptocurrent = 'false';
 }
 
-// below sets a URL variable to use in some links
+// Below sets a URL variable to use in some links.
 $urlblocks = new moodle_url($PAGE->url, array('mymobile_blocks' => 'true'));
 $urlsettings = new moodle_url($PAGE->url, array('mymobile_settings' => 'true'));
 
@@ -102,12 +102,12 @@ if (empty($PAGE->layout_options['nocourseheaderfooter'])) {
 $bodyclasses = array();
 $bodyclasses[] = (string)$hasithumb;
 $bodyclasses[] = (string)$showsitetopic;
-// add ithumb class to decide whether to show or hide images and site topic
+// Add ithumb class to decide whether to show or hide images and site topic.
 
-// TODO: Better illustrate preceedence
+// TODO: Better illustrate preceedence.
 $gowide = ($mydevice == 'default' && $showusetableview == 'tabshow' || $mydevice == 'tablet' && $showusetableview == 'tabshow');
 if ($gowide) {
-    // initialize column position choices.
+    // Initialize column position choices.
     mymobile_initialise_colpos($PAGE);
 }
 $usercol = (mymobile_get_colpos() == 'on');
@@ -132,7 +132,7 @@ echo $OUTPUT->doctype() ?>
     <?php echo $OUTPUT->standard_top_of_body_html() ?>
     <div id="<?php p($PAGE->bodyid) ?>PAGE" data-role="page" class="generalpage <?php echo 'ajaxedclass '; p($PAGE->bodyclasses.' '.join(' ', $bodyclasses));  ?> <?php if ($hasmyblocks && $usercol) { echo 'has-myblocks'; } ?> " data-title="<?php p($SITE->shortname) ?>">
         <!-- start header -->
-        <div data-role="header" <?php echo($datatheme);?> class="mymobileheader" data-position="fixed">
+        <div id="page-header" data-role="header" <?php echo($datatheme);?> class="mymobileheader" data-position="fixed">
             <h1><?php echo $PAGE->heading ?></h1>
             <?php if (isloggedin() && $mypagetype != 'site-index') { ?>
             <a class="ui-btn-right" data-icon="home" href="<?php p($CFG->wwwroot) ?>" data-iconpos="notext" data-ajax="false"><?php p(get_string('home')); ?></a>
@@ -161,15 +161,14 @@ echo $OUTPUT->doctype() ?>
             </div>
             <!-- end navbar -->
         </div>
-        <div id="page-header"><!-- empty page-header needed by moodle yui --></div>
         <!-- end header -->
 
         <!-- main content -->
         <div data-role="content" class="mymobilecontent" <?php echo $databodytheme; ?>>
-          <?php if($toset) {  //if we get the true, that means load/show settings only ?>
+          <?php if($toset) {  // If we get the true, that means load/show settings only. ?>
             <h2 class="jsets"><?php p(get_string('settings')); ?></h2>
             <?php
-            //load lang menu if available
+            // Load lang menu if available.
             echo $OUTPUT->lang_menu();
             ?>
             <ul data-role="listview" data-theme="<?php echo $dthemeb;?>" data-dividertheme="<?php echo $dtheme;?>" data-inset="true" class="settingsul">
@@ -181,7 +180,7 @@ echo $OUTPUT->doctype() ?>
             <div class="content-primary">
                 <div class="region-content <?php if ($toblock) { echo 'mobile_blocksonly'; } ?>" id="themains">
                 <?php
-                //only show main content if we are not showing anything else
+                // Only show main content if we are not showing anything else.
                 if (!$toblock && !$toset) { ?>
                     <?php if ($hasshowmobileintro && $mypagetype == 'site-index') { ?>
                         <?php echo $PAGE->theme->settings->showmobileintro; ?>
@@ -194,7 +193,7 @@ echo $OUTPUT->doctype() ?>
             </div>
 
             <?php if ($gowide && $hasmyblocks && !$toset) {
-            //if we get the true, that means load/show blocks only for tablet views only ?>
+            // If we get the true, that means load/show blocks only for tablet views only. ?>
             <div class="content-secondary">
                 <div class="tablets">
                     <h1><?php echo $PAGE->heading ?></h1>
@@ -224,7 +223,7 @@ echo $OUTPUT->doctype() ?>
                 </div>
 
                 <div data-role="fieldcontain" id="sliderdiv">
-                    <label for="slider"><?php p(get_string('mtoggle','theme_mymobile')); ?>:</label>
+                    <label for="slider"><?php p(get_string('mtoggle', 'theme_mymobile')); ?>:</label>
                     <select name="slider" class="slider" data-role="slider" id="slider">
                         <option value="on">On</option>
                         <option value="off">Off</option>
@@ -239,7 +238,7 @@ echo $OUTPUT->doctype() ?>
 
             <?php
             if ($toblock && !$gowide) {
-                //regular block load for phones + handhelds
+                // Regular block load for phones + handhelds.
                 if ($hasmyblocks) {
                     ?><div class="headingwrap ui-bar-<?php echo $dtheme;?> ui-footer jsetsbar">
                         <h2 class="jsets ui-title"><?php p(get_string('blocks')); ?></h2>
@@ -256,39 +255,39 @@ echo $OUTPUT->doctype() ?>
         <div data-role="course-footer"><?php echo $coursefooter; ?></div>
         <?php } ?>
 
-        <div data-role="footer" class="mobilefooter" <?php echo $datatheme;?>>
-            <div data-role="navbar" class="jnav" >
-                <ul>
-                    <li><a id="mycal" class="callink" href="<?php p($CFG->wwwroot) ?>/calendar/view.php" data-icon="info" data-iconpos="top" ><?php p(get_string('calendar', 'calendar')); ?></a></li>
-                    <?php if (!empty($CFG->messaging)) { ?>
-                    <li><a id="mymess" href="<?php p($CFG->wwwroot) ?>/message/index.php" data-iconpos="top" data-icon="mymessage" ><?php p(get_string('messages', 'message')); ?></a></li>
-                    <?php } ?>
-                    <?php if ($mypagetype != 'site-index') { ?>
-                    <li><a href="#" data-inline="true" data-role="button" data-iconpos="top" data-icon="arrow-u" id="uptotop"><?php p(get_string('up')); ?></a></li>
-                    <?php } ?>
-                </ul>
+        <div id="page-footer">
+            <div data-role="footer" class="mobilefooter" <?php echo $datatheme;?>>
+                <div data-role="navbar" class="jnav" >
+                    <ul>
+                        <li><a id="mycal" class="callink" href="<?php p($CFG->wwwroot) ?>/calendar/view.php" data-icon="info" data-iconpos="top" ><?php p(get_string('calendar', 'calendar')); ?></a></li>
+                        <?php if (!empty($CFG->messaging)) { ?>
+                        <li><a id="mymess" href="<?php p($CFG->wwwroot) ?>/message/index.php" data-iconpos="top" data-icon="mymessage" ><?php p(get_string('messages', 'message')); ?></a></li>
+                        <?php } ?>
+                        <?php if ($mypagetype != 'site-index') { ?>
+                        <li><a href="#" data-inline="true" data-role="button" data-iconpos="top" data-icon="arrow-u" id="uptotop"><?php p(get_string('up')); ?></a></li>
+                        <?php } ?>
+                    </ul>
+                </div>
             </div>
-        </div>
-        <!-- end footer -->
 
-        <div id="underfooter">
-            <?php
-            echo $OUTPUT->login_info_footer();
-            echo '<div class="noajax">';
-            echo $OUTPUT->standard_footer_html();
-            echo '</div>';
-            ?>
+            <div id="underfooter">
+                <?php
+                echo $OUTPUT->login_info_footer();
+                echo '<div class="noajax">';
+                echo $OUTPUT->standard_footer_html();
+                echo '</div>';
+                ?>
+            </div>
         </div>
+        <!-- end footer -->
+        <!-- empty divs with info for the JS to use -->
+        <div id="<?php echo sesskey(); ?>" class="mobilesession"></div>
+        <div id="<?php p($CFG->wwwroot); ?>" class="mobilesiteurl"></div>
+        <div id="<?php echo $dtheme;?>" class="datatheme"></div>
+        <div id="<?php echo $dthemeb;?>" class="datathemeb"></div>
+        <!-- end js divs -->
+
+        <?php echo $OUTPUT->standard_end_of_body_html() ?>
     </div><!-- ends page -->
-
-    <!-- empty divs with info for the JS to use -->
-    <div id="<?php echo sesskey(); ?>" class="mobilesession"></div>
-    <div id="<?php p($CFG->wwwroot); ?>" class="mobilesiteurl"></div>
-    <div id="<?php echo $dtheme;?>" class="datatheme"></div>
-    <div id="<?php echo $dthemeb;?>" class="datathemeb"></div>
-    <div id="page-footer"><!-- empty page footer needed by moodle yui for embeds --></div>
-    <!-- end js divs -->
-
-    <?php echo $OUTPUT->standard_end_of_body_html() ?>
 </body>
 </html>
\ No newline at end of file