Merge remote-tracking branch 'skodak/w03_MDL-31011_m23_loglinks'
authorSam Hemelryk <sam@moodle.com>
Mon, 16 Jan 2012 06:49:55 +0000 (14:49 +0800)
committerSam Hemelryk <sam@moodle.com>
Mon, 16 Jan 2012 06:49:55 +0000 (14:49 +0800)
43 files changed:
admin/cli/mysql_engine.php
admin/renderer.php
admin/roles/lib.php
admin/tool/innodb/index.php
admin/tool/unittest/ex_reporter.php
course/lib.php
grade/grading/pick.php
grade/report/grader/styles.css
group/externallib.php
lang/en/moodle.php
lib/ajax/ajaxlib.php
lib/ajax/section_classes.js
lib/db/install.xml
lib/db/upgrade.php
lib/moodlelib.php
lib/navigationlib.php
lib/simpletest/testweblib.php
lib/weblib.php
mod/quiz/attempt.php
mod/quiz/attemptlib.php
mod/quiz/db/install.xml
mod/quiz/db/upgrade.php
mod/quiz/edit.php
mod/quiz/editlib.php
mod/quiz/locallib.php
mod/quiz/startattempt.php
mod/quiz/version.php
mod/scorm/datamodels/scorm_13.js.php
mod/workshop/form/accumulative/backup/moodle1/lib.php
mod/workshop/form/comments/backup/moodle1/lib.php
mod/workshop/form/numerrors/backup/moodle1/lib.php
mod/workshop/form/rubric/backup/moodle1/lib.php
question/editlib.php
question/engine/renderer.php
theme/arialist/config.php
theme/arialist/style/pagelayout.css
theme/base/style/dock.css
theme/canvas/style/core.css
theme/sky_high/config.php
theme/sky_high/style/admin.css [new file with mode: 0644]
theme/sky_high/style/report.css
theme/splash/style/sl.css
user/selector/lib.php

index 53c4b84..c6d7c6e 100644 (file)
@@ -76,7 +76,7 @@ if (!empty($options['engine'])) {
         }
         echo str_pad($table->name, 40). " - ";
 
-        $DB->change_database_structure("ALTER TABLE {$table->name} TYPE = $engine");
+        $DB->change_database_structure("ALTER TABLE {$table->name} ENGINE = $engine");
         echo "DONE\n";
         $converted++;
     }
index d823e0e..f0aae31 100644 (file)
@@ -339,8 +339,10 @@ class core_admin_renderer extends plugin_renderer_base {
             return '';
         }
 
-        return $this->warning(get_string('sitemaintenancewarning2', 'admin',
-                new moodle_url('/admin/settings.php', array('section' => 'maintenancemode'))));
+        $url = new moodle_url('/admin/settings.php', array('section' => 'maintenancemode'));
+        $url = $url->out(); // get_string() does not support objects in params
+
+        return $this->warning(get_string('sitemaintenancewarning2', 'admin', $url));
     }
 
     /**
index 68a3c8b..d2dbaba 100644 (file)
@@ -1044,10 +1044,9 @@ class potential_assignees_below_course extends role_assign_user_selector_base {
         $sql   = " FROM {user} u
                   WHERE u.id IN ($enrolsql) $wherecondition
                         AND u.id NOT IN (
-                           SELECT u.id
-                             FROM {role_assignments} r, {user} u
+                           SELECT r.userid
+                             FROM {role_assignments} r
                             WHERE r.contextid = :contextid
-                                  AND u.id = r.userid
                                   AND r.roleid = :roleid)";
         $order = ' ORDER BY lastname ASC, firstname ASC';
 
@@ -1096,10 +1095,9 @@ class potential_assignees_course_and_above extends role_assign_user_selector_bas
         $sql = " FROM {user}
                 WHERE $wherecondition
                       AND id NOT IN (
-                         SELECT u.id
-                           FROM {role_assignments} r, {user} u
+                         SELECT r.userid
+                           FROM {role_assignments} r
                           WHERE r.contextid = :contextid
-                                AND u.id = r.userid
                                 AND r.roleid = :roleid)";
         $order = ' ORDER BY lastname ASC, firstname ASC';
 
index faaea89..bbe4d85 100644 (file)
@@ -50,7 +50,7 @@ if (data_submitted() and $confirm and confirm_sesskey()) {
         $DB->set_debug(true);
         foreach ($tables as $table) {
             $fulltable = $DB->get_prefix().$table;
-            $DB->change_database_structure("ALTER TABLE $fulltable TYPE=INNODB");
+            $DB->change_database_structure("ALTER TABLE $fulltable ENGINE=INNODB");
         }
         $DB->set_debug(false);
     }
index 995bebd..5d440f3 100644 (file)
@@ -289,4 +289,9 @@ class ExHtmlReporter extends HtmlReporter {
     function get_string($identifier, $a = NULL) {
         return get_string($identifier, 'tool_unittest', $a);
     }
+
+    function _htmlEntities($message) {
+        // Override subclass message that breaks UTF8.
+        return s($message);
+    }
 }
index 6276f07..88b5ee5 100644 (file)
@@ -3104,11 +3104,12 @@ function make_editing_buttons(stdClass $mod, $absolute_ignored = true, $movesele
         $str->duplicate      = get_string("duplicate");
         $str->hide           = get_string("hide");
         $str->show           = get_string("show");
-        $str->clicktochange  = get_string("clicktochange");
-        $str->forcedmode     = get_string("forcedmode");
-        $str->groupsnone     = get_string("groupsnone");
-        $str->groupsseparate = get_string("groupsseparate");
-        $str->groupsvisible  = get_string("groupsvisible");
+        $str->groupsnone     = get_string('clicktochangeinbrackets', 'moodle', get_string("groupsnone"));
+        $str->groupsseparate = get_string('clicktochangeinbrackets', 'moodle', get_string("groupsseparate"));
+        $str->groupsvisible  = get_string('clicktochangeinbrackets', 'moodle', get_string("groupsvisible"));
+        $str->forcedgroupsnone     = get_string('forcedmodeinbrackets', 'moodle', get_string("groupsnone"));
+        $str->forcedgroupsseparate = get_string('forcedmodeinbrackets', 'moodle', get_string("groupsseparate"));
+        $str->forcedgroupsvisible  = get_string('forcedmodeinbrackets', 'moodle', get_string("groupsvisible"));
     }
 
     $baseurl = new moodle_url('/course/mod.php', array('sesskey' => sesskey()));
@@ -3225,16 +3226,19 @@ function make_editing_buttons(stdClass $mod, $absolute_ignored = true, $movesele
         if ($mod->groupmode == SEPARATEGROUPS) {
             $groupmode = 0;
             $grouptitle = $str->groupsseparate;
+            $forcedgrouptitle = $str->forcedgroupsseparate;
             $groupclass = 'editing_groupsseparate';
             $groupimage = 't/groups';
         } else if ($mod->groupmode == VISIBLEGROUPS) {
             $groupmode = 1;
             $grouptitle = $str->groupsvisible;
+            $forcedgrouptitle = $str->forcedgroupsvisible;
             $groupclass = 'editing_groupsvisible';
             $groupimage = 't/groupv';
         } else {
             $groupmode = 2;
             $grouptitle = $str->groupsnone;
+            $forcedgrouptitle = $str->forcedgroupsnone;
             $groupclass = 'editing_groupsnone';
             $groupimage = 't/groupn';
         }
@@ -3243,10 +3247,10 @@ function make_editing_buttons(stdClass $mod, $absolute_ignored = true, $movesele
                 new moodle_url($baseurl, array('id' => $mod->id, 'groupmode' => $groupmode)),
                 new pix_icon($groupimage, $grouptitle, 'moodle', array('class' => 'iconsmall')),
                 null,
-                array('class' => $groupclass, 'title' => $grouptitle.' ('.$str->clicktochange.')')
+                array('class' => $groupclass, 'title' => $grouptitle)
             );
         } else {
-            $actions[] = new pix_icon($groupimage, $grouptitle, 'moodle', array('title' => $grouptitle.' ('.$str->forcedmode.')', 'class' => 'iconsmall'));
+            $actions[] = new pix_icon($groupimage, $forcedgrouptitle, 'moodle', array('title' => $forcedgrouptitle, 'class' => 'iconsmall'));
         }
     }
 
index fd4d6ef..779e95c 100644 (file)
@@ -144,8 +144,7 @@ if ($searchdata = $searchform->get_data()) {
 }
 
 // construct the SQL to find all matching templates
-$sql = "SELECT DISTINCT gd.id, gd.areaid, gd.name, gd.description, gd.descriptionformat, gd.timecreated,
-                        gd.usercreated, gd.timemodified, gd.usermodified
+$sql = "SELECT DISTINCT gd.id, gd.areaid, gd.name, gd.usercreated
           FROM {grading_definitions} gd
           JOIN {grading_areas} ga ON (gd.areaid = ga.id)
           JOIN {context} cx ON (ga.contextid = cx.id)";
index 20c78ed..4730ba5 100644 (file)
@@ -342,10 +342,6 @@ text-align:center;
 clear:both;
 }
 
-.path-grade-report-grader form {
-text-align:center;
-}
-
 .path-grade-report-grader input.center {
 margin:10px auto 0;
 }
index 160dcbf..7ff57d5 100644 (file)
@@ -267,7 +267,6 @@ class core_group_external extends external_api {
 
         $transaction = $DB->start_delegated_transaction();
 
-// TODO: this is problematic because the DB rollback does not handle deleting of group images!
         foreach ($params['groupids'] as $groupid) {
             // validate params
             $groupid = validate_param($groupid, PARAM_INTEGER);
index 7f8fb12..28e82c6 100644 (file)
@@ -236,7 +236,7 @@ $string['clear'] = 'Clear';
 $string['clickhelpiconformoreinfo'] = '... continues ... Click on the help icon to read the full article';
 $string['clickhere'] = 'Click here ...';
 $string['clicktohideshow'] = 'Click to expand or collapse';
-$string['clicktochange'] = 'Click to change';
+$string['clicktochangeinbrackets'] = '{$a} (Click to change)';
 $string['closewindow'] = 'Close this window';
 $string['collapseall'] = 'Collapse all';
 $string['commentincontext'] = 'Find this comment in context';
@@ -672,7 +672,7 @@ $string['folderopened'] = 'Opened folder';
 $string['followingoptional'] = 'The following items are optional';
 $string['followingrequired'] = 'The following items are required';
 $string['force'] = 'Force';
-$string['forcedmode'] = 'forced mode';
+$string['forcedmodeinbrackets'] = '{$a} (forced mode)';
 $string['forcelanguage'] = 'Force language';
 $string['forceno'] = 'Do not force';
 $string['forcepasswordchange'] = 'Force password change';
index 37d0f29..f7d378f 100644 (file)
@@ -149,10 +149,9 @@ class jsportal {
         $output .= "    main.portal.strings['moveleft']='".addslashes_js(get_string('moveleft'))."';\n";
         $output .= "    main.portal.strings['moveright']='".addslashes_js(get_string('moveright'))."';\n";
         $output .= "    main.portal.strings['update']='".addslashes_js(get_string('update'))."';\n";
-        $output .= "    main.portal.strings['groupsnone']='".addslashes_js(get_string('groupsnone'))."';\n";
-        $output .= "    main.portal.strings['groupsseparate']='".addslashes_js(get_string('groupsseparate'))."';\n";
-        $output .= "    main.portal.strings['groupsvisible']='".addslashes_js(get_string('groupsvisible'))."';\n";
-        $output .= "    main.portal.strings['clicktochange']='".addslashes_js(get_string('clicktochange'))."';\n";
+        $output .= "    main.portal.strings['groupsnone']='".addslashes_js(get_string('clicktochangeinbrackets', 'moodle', get_string('groupsnone')))."';\n";
+        $output .= "    main.portal.strings['groupsseparate']='".addslashes_js(get_string('clicktochangeinbrackets', 'moodle', get_string('groupsseparate')))."';\n";
+        $output .= "    main.portal.strings['groupsvisible']='".addslashes_js(get_string('clicktochangeinbrackets', 'moodle', get_string('groupsvisible')))."';\n";
         $output .= "    main.portal.strings['deletecheck']='".addslashes_js(get_string('deletecheckfull','','_var_'))."';\n";
         $output .= "    main.portal.strings['resource']='".addslashes_js(get_string('resource'))."';\n";
         $output .= "    main.portal.strings['activity']='".addslashes_js(get_string('activity'))."';\n";
index cac7cec..c787e3f 100644 (file)
@@ -620,9 +620,9 @@ resource_class.prototype.init_buttons = function() {
     }
 
     // Language strings.
-    var strgroupsnone = main.portal.strings['groupsnone']+' ('+main.portal.strings['clicktochange']+')';
-    var strgroupsseparate = main.portal.strings['groupsseparate']+' ('+main.portal.strings['clicktochange']+')';
-    var strgroupsvisible = main.portal.strings['groupsvisible']+' ('+main.portal.strings['clicktochange']+')';
+    var strgroupsnone = main.portal.strings['groupsnone'];
+    var strgroupsseparate = main.portal.strings['groupsseparate'];
+    var strgroupsvisible = main.portal.strings['groupsvisible'];
 
     this.commandContainer = commandContainer;
     var buttons = commandContainer.getElementsByTagName('a');
@@ -864,13 +864,13 @@ resource_class.prototype.toggle_groupmode = function() {
 
     switch (this.groupmode) {
         case 0:
-            newtitle = main.portal.strings['groupsnone']+' ('+main.portal.strings['clicktochange']+')';
+            newtitle = main.portal.strings['groupsnone'];
             break;
         case 1:
-            newtitle = main.portal.strings['groupsseparate']+' ('+main.portal.strings['clicktochange']+')';
+            newtitle = main.portal.strings['groupsseparate'];
             break;
         case 2:
-            newtitle = main.portal.strings['groupsvisible']+' ('+main.portal.strings['clicktochange']+')';
+            newtitle = main.portal.strings['groupsvisible'];
             break;
     }
 
index dc937ce..657814d 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="lib/db" VERSION="20111214" COMMENT="XMLDB file for core Moodle tables"
+<XMLDB PATH="lib/db" VERSION="20120110" COMMENT="XMLDB file for core Moodle tables"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
 >
         <KEY NAME="userid" TYPE="foreign" FIELDS="userid" REFTABLE="user" REFFIELDS="id" PREVIOUS="contextid"/>
       </KEYS>
       <INDEXES>
-        <INDEX NAME="sortorder" UNIQUE="false" FIELDS="sortorder"/>
+        <INDEX NAME="sortorder" UNIQUE="false" FIELDS="sortorder" NEXT="rolecontext"/>
+        <INDEX NAME="rolecontext" UNIQUE="false" FIELDS="roleid, contextid" COMMENT="Index on roleid and contextid" PREVIOUS="sortorder" NEXT="usercontextrole"/>
+        <INDEX NAME="usercontextrole" UNIQUE="false" FIELDS="userid, contextid, roleid" COMMENT="Index on userid, contextid and roleid" PREVIOUS="rolecontext"/>
       </INDEXES>
     </TABLE>
     <TABLE NAME="role_capabilities" COMMENT="permission has to be signed, overriding a capability for a particular role in a particular context" PREVIOUS="role_assignments" NEXT="role_names">
index ea92158..ca60e07 100644 (file)
@@ -112,6 +112,29 @@ function xmldb_main_upgrade($oldversion) {
         upgrade_main_savepoint(true, 2011120500.03);
     }
 
+    if ($oldversion < 2012020200.03) {
+
+        // Define index rolecontext (not unique) to be added to role_assignments
+        $table = new xmldb_table('role_assignments');
+        $index = new xmldb_index('rolecontext', XMLDB_INDEX_NOTUNIQUE, array('roleid', 'contextid'));
+
+        // Conditionally launch add index rolecontext
+        if (!$dbman->index_exists($table, $index)) {
+            $dbman->add_index($table, $index);
+        }
+
+        // Define index usercontextrole (not unique) to be added to role_assignments
+        $index = new xmldb_index('usercontextrole', XMLDB_INDEX_NOTUNIQUE, array('userid', 'contextid', 'roleid'));
+
+        // Conditionally launch add index usercontextrole
+        if (!$dbman->index_exists($table, $index)) {
+            $dbman->add_index($table, $index);
+        }
+
+        // Main savepoint reached
+        upgrade_main_savepoint(true, 2012020200.03);
+    }
+
     return true;
 }
 
index 2914205..760e134 100644 (file)
@@ -3365,7 +3365,7 @@ function get_extra_user_fields($context, $already = array()) {
     }
 
     // Split showuseridentity on comma
-    if ($CFG->showuseridentity === '') {
+    if (empty($CFG->showuseridentity)) {
         // Explode gives wrong result with empty string
         $extra = array();
     } else {
@@ -5238,6 +5238,11 @@ function generate_email_supportuser() {
 function setnew_password_and_mail($user) {
     global $CFG, $DB;
 
+    // we try to send the mail in language the user understands,
+    // unfortunately the filter_string() does not support alternative langs yet
+    // so multilang will not work properly for site->fullname
+    $lang = empty($user->lang) ? $CFG->lang : $user->lang;
+
     $site  = get_site();
 
     $supportuser = generate_email_supportuser();
@@ -5254,9 +5259,9 @@ function setnew_password_and_mail($user) {
     $a->link        = $CFG->wwwroot .'/login/';
     $a->signoff     = generate_email_signoff();
 
-    $message = get_string('newusernewpasswordtext', '', $a);
+    $message = (string)new lang_string('newusernewpasswordtext', '', $a, $lang);
 
-    $subject = format_string($site->fullname) .': '. get_string('newusernewpasswordsubj');
+    $subject = format_string($site->fullname) .': '. (string)new lang_string('newusernewpasswordsubj', '', $a, $lang);
 
     //directly email rather than using the messaging system to ensure its not routed to a popup or jabber
     return email_to_user($user, $supportuser, $subject, $message);
@@ -10053,40 +10058,20 @@ function object_property_exists( $obj, $property ) {
  * Detect a custom script replacement in the data directory that will
  * replace an existing moodle script
  *
- * @param string $urlpath path to the original script
  * @return string|bool full path name if a custom script exists, false if no custom script exists
  */
-function custom_script_path($urlpath='') {
-    global $CFG;
+function custom_script_path() {
+    global $CFG, $SCRIPT;
 
-    // set default $urlpath, if necessary
-    if (empty($urlpath)) {
-        $urlpath = qualified_me(); // e.g. http://www.this-server.com/moodle/this-script.php
-    }
-
-    // $urlpath is invalid if it is empty or does not start with the Moodle wwwroot
-    if (empty($urlpath) or (strpos($urlpath, $CFG->wwwroot) === false )) {
+    if ($SCRIPT === null) {
+        // Probably some weird external script
         return false;
     }
 
-    // replace wwwroot with the path to the customscripts folder and clean path
-    $scriptpath = $CFG->customscripts . clean_param(substr($urlpath, strlen($CFG->wwwroot)), PARAM_PATH);
-
-    // remove the query string, if any
-    if (($strpos = strpos($scriptpath, '?')) !== false) {
-        $scriptpath = substr($scriptpath, 0, $strpos);
-    }
-
-    // remove trailing slashes, if any
-    $scriptpath = rtrim($scriptpath, '/\\');
-
-    // append index.php, if necessary
-    if (is_dir($scriptpath)) {
-        $scriptpath .= '/index.php';
-    }
+    $scriptpath = $CFG->customscripts . $SCRIPT;
 
     // check the custom script exists
-    if (file_exists($scriptpath)) {
+    if (file_exists($scriptpath) and is_file($scriptpath)) {
         return $scriptpath;
     } else {
         return false;
index 22a7f68..4f30b84 100644 (file)
@@ -1707,24 +1707,17 @@ class global_navigation extends navigation_node {
     /**
      * Loads all of the activities for a section into the navigation structure.
      *
-     * @todo 2.2 - $activities should always be an array and we should no longer check for it being a
-     *             course_modinfo object
-     *
      * @param navigation_node $sectionnode
      * @param int $sectionnumber
-     * @param course_modinfo $modinfo Object returned from {@see get_fast_modinfo()}
+     * @param array $activities An array of activites as returned by {@see global_navigation::generate_sections_and_activities()}
+     * @param stdClass $course The course object the section and activities relate to.
      * @return array Array of activity nodes
      */
-    protected function load_section_activities(navigation_node $sectionnode, $sectionnumber, $activities, $course = null) {
+    protected function load_section_activities(navigation_node $sectionnode, $sectionnumber, array $activities, $course = null) {
         global $CFG;
         // A static counter for JS function naming
         static $legacyonclickcounter = 0;
 
-        if ($activities instanceof course_modinfo) {
-            debugging('global_navigation::load_section_activities argument 3 should now recieve an array of activites. See that method for an example.', DEBUG_DEVELOPER);
-            list($sections, $activities) = $this->generate_sections_and_activities($activities->course);
-        }
-
         $activitynodes = array();
         if (empty($activities)) {
             return $activitynodes;
index 35caaca..bdcdd55 100644 (file)
@@ -127,6 +127,15 @@ class web_test extends UnitTestCase {
         $this->assertTrue($url1->compare($url2, URL_MATCH_EXACT));
     }
 
+    function test_out_as_local_url() {
+        $url1 = new moodle_url('/lib/simpletest/testweblib.php');
+        $this->assertEqual('/lib/simpletest/testweblib.php', $url1->out_as_local_url());
+
+        $url2 = new moodle_url('http://www.google.com/lib/simpletest/testweblib.php');
+        $this->expectException('coding_exception');
+        $url2->out_as_local_url();
+    }
+
     public function test_html_to_text_simple() {
         $this->assertEqual("\n\n_Hello_ WORLD!", html_to_text('<p><i>Hello</i> <b>world</b>!</p>'));
     }
index 89bdce5..c97e06b 100644 (file)
@@ -717,6 +717,28 @@ class moodle_url {
         $urlbase = "$CFG->wwwroot/file.php";
         return self::make_file_url($urlbase, '/'.$courseid.'/'.$filepath, $forcedownload);
     }
+
+    /**
+     * Returns URL a relative path from $CFG->wwwroot
+     *
+     * Can be used for passing around urls with the wwwroot stripped
+     *
+     * @param boolean $escaped Use &amp; as params separator instead of plain &
+     * @param array $overrideparams params to add to the output url, these override existing ones with the same name.
+     * @return string Resulting URL
+     * @throws coding_exception if called on a non-local url
+     */
+    public function out_as_local_url($escaped = true, array $overrideparams = null) {
+        global $CFG;
+
+        $url = $this->out($escaped, $overrideparams);
+
+        if (strpos($url, $CFG->wwwroot) !== 0) {
+            throw new coding_exception('out_as_local_url called on a non-local URL');
+        }
+
+        return str_replace($CFG->wwwroot, '', $url);
+    }
 }
 
 /**
index 5c5395d..1440106 100644 (file)
@@ -96,6 +96,11 @@ if (empty($slots)) {
     throw new moodle_quiz_exception($attemptobj->get_quizobj(), 'noquestionsfound');
 }
 
+// Update attempt page
+if ($attemptobj->get_currentpage() != $page) {
+    $DB->set_field('quiz_attempts', 'currentpage', $page);
+}
+
 // Initialise the JavaScript.
 $headtags = $attemptobj->get_html_head_contributions($page);
 $PAGE->requires->js_init_call('M.mod_quiz.init_attempt_form', null, false, quiz_get_js_module());
index 385832d..a713757 100644 (file)
@@ -602,6 +602,11 @@ class quiz_attempt {
         return $this->attempt->userid;
     }
 
+    /** @return int the current page of the attempt. */
+    public function get_currentpage() {
+        return $this->attempt->currentpage;
+    }
+
     /**
      * @return bool whether this attempt has been finished (true) or is still
      *     in progress (false).
index d57135c..0036275 100644 (file)
@@ -61,8 +61,9 @@
         <FIELD NAME="timestart" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="sumgrades" NEXT="timefinish"/>
         <FIELD NAME="timefinish" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="timestart" NEXT="timemodified"/>
         <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="timefinish" NEXT="layout"/>
-        <FIELD NAME="layout" TYPE="text" LENGTH="small" NOTNULL="true" SEQUENCE="false" PREVIOUS="timemodified" NEXT="preview"/>
-        <FIELD NAME="preview" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="layout" NEXT="needsupgradetonewqe"/>
+        <FIELD NAME="layout" TYPE="text" LENGTH="small" NOTNULL="true" SEQUENCE="false" PREVIOUS="timemodified" NEXT="currentpage"/>
+        <FIELD NAME="currentpage" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" PREVIOUS="layout" NEXT="preview"/>
+        <FIELD NAME="preview" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="currentpage" NEXT="needsupgradetonewqe"/>
         <FIELD NAME="needsupgradetonewqe" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="preview"/>
       </FIELDS>
       <KEYS>
index 92d7d98..a512fc2 100644 (file)
@@ -70,6 +70,18 @@ function xmldb_quiz_upgrade($oldversion) {
         upgrade_mod_savepoint(true, 2011120701, 'quiz');
     }
 
+    if ($oldversion < 2011120703) {
+        // Track page of quiz attempts
+        $table = new xmldb_table('quiz_attempts');
+
+        $field = new xmldb_field('currentpage', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, 0);
+
+        if (!$dbman->field_exists($table, $field)) {
+            $dbman->add_field($table, $field);
+        }
+        upgrade_mod_savepoint(true, 2011120703, 'quiz');
+    }
+
     return true;
 }
 
index 257208e..eb1e658 100644 (file)
@@ -561,7 +561,7 @@ if (!$quiz_reordertool) {
     $randomform = new quiz_add_random_form(new moodle_url('/mod/quiz/addrandom.php'), $contexts);
     $randomform->set_data(array(
         'category' => $pagevars['cat'],
-        'returnurl' => str_replace($CFG->wwwroot, '', $thispageurl->out(false)),
+        'returnurl' => $thispageurl->out_as_local_url(false),
         'cmid' => $cm->id,
     ));
     ?>
index 608e38e..5ee8b4b 100644 (file)
@@ -453,7 +453,7 @@ function quiz_print_question_list($quiz, $pageurl, $allowdelete, $reordertool,
 
     $pageopen = false;
 
-    $returnurl = str_replace($CFG->wwwroot, '', $pageurl->out(false));
+    $returnurl = $pageurl->out_as_local_url(false);
     $questiontotalcount = count($order);
 
     foreach ($order as $count => $qnum) {
@@ -731,7 +731,7 @@ function quiz_print_pagecontrols($quiz, $pageurl, $page, $hasattempts, $defaultc
     $returnurladdtoquiz = new moodle_url($pageurl, array('addonpage' => $page));
 
     // Print a button linking to the choose question type page.
-    $returnurladdtoquiz = str_replace($CFG->wwwroot, '', $returnurladdtoquiz->out(false));
+    $returnurladdtoquiz = $returnurladdtoquiz->out_as_local_url(false);
     $newquestionparams = array('returnurl' => $returnurladdtoquiz,
             'cmid' => $quiz->cmid, 'appendqnumstring' => 'addquestion');
     create_new_question_button($defaultcategoryid, $newquestionparams,
index 7e10d16..2d5d8e0 100644 (file)
@@ -829,7 +829,7 @@ function quiz_question_edit_button($cmid, $question, $returnurl, $contentafteric
     // Build the icon.
     if ($action) {
         if ($returnurl instanceof moodle_url) {
-            $returnurl = str_replace($CFG->wwwroot, '', $returnurl->out(false));
+            $returnurl = $returnurl->out_as_local_url(false);
         }
         $questionparams = array('returnurl' => $returnurl, 'cmid' => $cmid, 'id' => $question->id);
         $questionurl = new moodle_url("$CFG->wwwroot/question/question.php", $questionparams);
index c3e31d8..a945123 100644 (file)
@@ -33,7 +33,7 @@ require_once($CFG->dirroot . '/mod/quiz/locallib.php');
 // Get submitted parameters.
 $id = required_param('cmid', PARAM_INT); // Course module id
 $forcenew = optional_param('forcenew', false, PARAM_BOOL); // Used to force a new preview
-$page = optional_param('page', 0, PARAM_INT); // Page to jump to in the attempt.
+$page = optional_param('page', -1, PARAM_INT); // Page to jump to in the attempt.
 
 if (!$cm = get_coursemodule_from_id('quiz', $id)) {
     print_error('invalidcoursemodule');
@@ -83,6 +83,10 @@ if ($lastattempt && !$lastattempt->timefinish) {
     $currentattemptid = $lastattempt->id;
     $messages = $accessmanager->prevent_access();
 
+    if ($page == -1) {
+        $page = $lastattempt->currentpage;
+    }
+
 } else {
     // Get number for the next or unfinished attempt
     if ($lastattempt && !$lastattempt->preview && !$quizobj->is_preview_user()) {
@@ -95,6 +99,10 @@ if ($lastattempt && !$lastattempt->timefinish) {
 
     $messages = $accessmanager->prevent_access() +
             $accessmanager->prevent_new_attempt(count($attempts), $lastattempt);
+
+    if ($page == -1) {
+        $page = 0;
+    }
 }
 
 // Check access.
index 33124f0..578958f 100644 (file)
@@ -25,7 +25,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$module->version   = 2011120702;       // The current module version (Date: YYYYMMDDXX)
+$module->version   = 2011120703;       // The current module version (Date: YYYYMMDDXX)
 $module->requires  = 2011112900;       // Requires this Moodle version
 $module->component = 'mod_quiz';       // Full name of the plugin (used for diagnostics)
 $module->cron      = 60;
index 8349cb1..899985e 100644 (file)
@@ -90,9 +90,9 @@ function SCORMapi1_3() {
     var CMIInteger = '^\\d+$';
     var CMISInteger = '^-?([0-9]+)$';
     var CMIDecimal = '^-?([0-9]{1,5})(\\.[0-9]{1,18})?$';
-    var CMIIdentifier = '^\\S{0,250}[a-zA-Z0-9]$';
+    var CMIIdentifier = '^\\S{1,250}[a-zA-Z0-9]$';
     var CMIShortIdentifier = '^[\\w\.]{1,250}$';
-    var CMILongIdentifier = '^\\S{0,4000}$';
+    var CMILongIdentifier = '^(?:(?!urn:)\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\S{1,4000})$';
     var CMIFeedback = '^.*$'; // This must be redefined
     var CMIIndex = '[._](\\d+).';
     var CMIIndexStore = '.N(\\d+).';
index 20293f8..c33e8bc 100644 (file)
@@ -26,8 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-require_once($CFG->dirroot.'/mod/workshop/form/accumulative/db/upgradelib.php');
-
 /**
  * Conversion handler for the accumulative grading strategy data
  */
@@ -171,3 +169,46 @@ class moodle1_workshopform_accumulative_handler extends moodle1_workshopform_han
         return $data;
     }
 }
+
+/**
+ * Transforms a given record from workshop_elements_old into an object to be saved into workshopform_accumulative
+ *
+ * @param stdClass $old legacy record from workshop_elements_old
+ * @param array $newscaleids mapping from old scale types into new standard ones
+ * @param int $newworkshopid id of the new workshop instance that replaced the previous one
+ * @return stdclass to be saved in workshopform_accumulative
+ */
+function workshopform_accumulative_upgrade_element(stdclass $old, array $newscaleids, $newworkshopid) {
+    $new = new stdclass();
+    $new->workshopid = $newworkshopid;
+    $new->sort = $old->elementno;
+    $new->description = $old->description;
+    $new->descriptionformat = FORMAT_HTML;
+    // calculate new grade/scale of the element
+    if ($old->scale >= 0 and $old->scale <= 6 and isset($newscaleids[$old->scale])) {
+        $new->grade = -$newscaleids[$old->scale];
+    } elseif ($old->scale == 7) {
+        $new->grade = 10;
+    } elseif ($old->scale == 8) {
+        $new->grade = 20;
+    } elseif ($old->scale == 9) {
+        $new->grade = 100;
+    } else {
+        $new->grade = 0;    // something is wrong
+    }
+    // calculate new weight of the element. Negative weights are not supported any more and
+    // are replaced with weight = 0. Legacy workshop did not store the raw weight but the index
+    // in the array of weights (see $WORKSHOP_EWEIGHTS in workshop 1.x)
+    // workshop 2.0 uses integer weights only (0-16) so all previous weights are multiplied by 4.
+    switch ($old->weight) {
+        case 8: $new->weight = 1; break;
+        case 9: $new->weight = 2; break;
+        case 10: $new->weight = 3; break;
+        case 11: $new->weight = 4; break;
+        case 12: $new->weight = 6; break;
+        case 13: $new->weight = 8; break;
+        case 14: $new->weight = 16; break;
+        default: $new->weight = 0;
+    }
+    return $new;
+}
index a0aed8b..10b6b28 100644 (file)
@@ -26,8 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-require_once($CFG->dirroot.'/mod/workshop/form/comments/db/upgradelib.php');
-
 /**
  * Conversion handler for the comments grading strategy data
  */
@@ -48,3 +46,19 @@ class moodle1_workshopform_comments_handler extends moodle1_workshopform_handler
         return $converted;
     }
 }
+
+/**
+ * Transforms a given record from workshop_elements_old into an object to be saved into workshopform_comments
+ *
+ * @param stdClass $old legacy record from workshop_elements_old
+ * @param int $newworkshopid id of the new workshop instance that replaced the previous one
+ * @return stdclass to be saved in workshopform_comments
+ */
+function workshopform_comments_upgrade_element(stdclass $old, $newworkshopid) {
+    $new                    = new stdclass();
+    $new->workshopid        = $newworkshopid;
+    $new->sort              = $old->elementno;
+    $new->description       = $old->description;
+    $new->descriptionformat = FORMAT_HTML;
+    return $new;
+}
index 5bff2d5..a88a2b3 100644 (file)
@@ -26,7 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-require_once($CFG->dirroot.'/mod/workshop/form/numerrors/db/upgradelib.php');
 require_once($CFG->libdir.'/gradelib.php'); // grade_floatval() called here
 
 /**
@@ -96,3 +95,35 @@ class moodle1_workshopform_numerrors_handler extends moodle1_workshopform_handle
         }
     }
 }
+
+/**
+ * Transforms a given record from workshop_elements_old into an object to be saved into workshopform_numerrors
+ *
+ * @param stdClass $old legacy record from workshop_elements_old
+ * @param int $newworkshopid id of the new workshop instance that replaced the previous one
+ * @return stdclass to be saved in workshopform_numerrors
+ */
+function workshopform_numerrors_upgrade_element(stdclass $old, $newworkshopid) {
+    $new = new stdclass();
+    $new->workshopid = $newworkshopid;
+    $new->sort = $old->elementno;
+    $new->description = $old->description;
+    $new->descriptionformat = FORMAT_HTML;
+    $new->grade0 = get_string('grade0default', 'workshopform_numerrors');
+    $new->grade1 = get_string('grade1default', 'workshopform_numerrors');
+    // calculate new weight of the element. Negative weights are not supported any more and
+    // are replaced with weight = 0. Legacy workshop did not store the raw weight but the index
+    // in the array of weights (see $WORKSHOP_EWEIGHTS in workshop 1.x)
+    // workshop 2.0 uses integer weights only (0-16) so all previous weights are multiplied by 4.
+    switch ($old->weight) {
+        case 8: $new->weight = 1; break;
+        case 9: $new->weight = 2; break;
+        case 10: $new->weight = 3; break;
+        case 11: $new->weight = 4; break;
+        case 12: $new->weight = 6; break;
+        case 13: $new->weight = 8; break;
+        case 14: $new->weight = 16; break;
+        default: $new->weight = 0;
+    }
+    return $new;
+}
index b1c5cb2..be16f7c 100644 (file)
@@ -26,8 +26,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-require_once($CFG->dirroot.'/mod/workshop/form/rubric/db/upgradelib.php');
-
 /**
  * Conversion handler for the rubric grading strategy data
  */
@@ -141,3 +139,21 @@ class moodle1_workshopform_rubric_handler extends moodle1_workshopform_handler {
         }
     }
 }
+
+/**
+ * Transforms given record into an object to be saved into workshopform_rubric_levels
+ *
+ * This is used during Rubric 1.9 -> Rubric 2.0 conversion
+ *
+ * @param stdClass $old legacy record from joined workshop_elements_old + workshop_rubrics_old
+ * @param int $newdimensionid id of the new workshopform_rubric dimension record to be linked to
+ * @return stdclass to be saved in workshopform_rubric_levels
+ */
+function workshopform_rubric_upgrade_rubric_level(stdclass $old, $newdimensionid) {
+    $new = new stdclass();
+    $new->dimensionid = $newdimensionid;
+    $new->grade = $old->rgrade * workshopform_rubric_upgrade_weight($old->eweight);
+    $new->definition = $old->rdesc;
+    $new->definitionformat = FORMAT_HTML;
+    return $new;
+}
index 7f781a1..a0cc6b3 100644 (file)
@@ -871,7 +871,7 @@ class question_bank_view {
         }
 
         // Create the url of the new question page to forward to.
-        $returnurl = str_replace($CFG->wwwroot, '', $pageurl->out(false));
+        $returnurl = $pageurl->out_as_local_url(false);
         $this->editquestionurl = new moodle_url('/question/question.php',
                 array('returnurl' => $returnurl));
         if ($cm !== null){
@@ -1360,10 +1360,10 @@ class question_bank_view {
         echo $OUTPUT->render($pagingbar);
         if ($totalnumber > DEFAULT_QUESTIONS_PER_PAGE) {
             if ($perpage == DEFAULT_QUESTIONS_PER_PAGE) {
-                $url = new moodle_url('edit.php', ($pageurl->params()+array('qperpage'=>1000)));
+                $url = new moodle_url('edit.php', array_merge($pageurl->params(), array('qperpage'=>1000)));
                 $showall = '<a href="'.$url.'">'.get_string('showall', 'moodle', $totalnumber).'</a>';
             } else {
-                $url = new moodle_url('edit.php', ($pageurl->params()+array('qperpage'=>DEFAULT_QUESTIONS_PER_PAGE)));
+                $url = new moodle_url('edit.php', array_merge($pageurl->params(), array('qperpage'=>DEFAULT_QUESTIONS_PER_PAGE)));
                 $showall = '<a href="'.$url.'">'.get_string('showperpage', 'moodle', DEFAULT_QUESTIONS_PER_PAGE).'</a>';
             }
             echo "<div class='paging'>$showall</div>";
index 96b8353..006729a 100644 (file)
@@ -278,8 +278,7 @@ class core_question_renderer extends plugin_renderer_base {
 
         $params = $options->editquestionparams;
         if ($params['returnurl'] instanceof moodle_url) {
-            $params['returnurl'] = str_replace($CFG->wwwroot, '',
-                    $params['returnurl']->out(false));
+            $params['returnurl'] = $params['returnurl']->out_as_local_url(false);
         }
         $params['id'] = $qa->get_question()->id;
         $editurl = new moodle_url('/question/question.php', $params);
index a469b5a..751523c 100644 (file)
@@ -54,8 +54,8 @@ $THEME->parents = array(
 
 
 $THEME->sheets = array(
+    'pagelayout',
        'core',
-       'pagelayout',
        'settings',
 );
 
index 5c8249c..dbaf485 100644 (file)
@@ -75,29 +75,19 @@ body {
     width: 100%;
 }
 
-
 .has_dock.side-post-only .page-middle #region-main {
     margin-left: 200px;
 }
 
 /** No blocks whatsoever **/
-.content-only #page-content #region-main-box {
-    margin-left: 0px;
-}
-
-.content-only #page-content #region-post-box {
-    margin-left: 0px;
-}
-
-.content-only #page-content #region-main {
+.content-only #page-content #region-main-box,
+.content-only #page-content #region-main-box #region-post-box,
+.content-only #page-content #region-main-box #region-main-wrap #region-main {
     margin-left: 0px;
 }
 
-.content-only #page-content #region-pre {
-    width: 0px;
-}
-
-.content-only #page-content #region-post {
+.content-only #page-content #region-main-box #region-post-box #region-pre,
+.content-only #page-content #region-main-box #region-post-box #region-post {
     width: 0px;
 }
 
index 4dd92f0..30acfef 100644 (file)
@@ -22,6 +22,7 @@ body.has_dock {margin-left:30px;}
 #dockeditempanel .dockeditempanel_content {background-color:#fff;border:1px solid #000;z-index:12050;}
 #dockeditempanel .dockeditempanel_bd {overflow:auto;width:auto;}
 #dockeditempanel .dockeditempanel_bd .block_docked {margin:10px;}
+#dockeditempanel .dockeditempanel_bd .block_navigation .block_tree li {overflow:visible;}
 #dockeditempanel .dockeditempanel_hd {border-bottom:1px solid #000;text-align:right;}
 #dockeditempanel .dockeditempanel_hd h2 {display:inline;margin:0;padding-right:1em;}
 #dockeditempanel .dockeditempanel_hd .commands {display:inline;}
index f763f97..b1e5f48 100644 (file)
@@ -81,100 +81,6 @@ input[type="radio"] {
     margin-right: 7px;
 }
 
-/* Login
--------------------------*/
-
-.loginbox {
-    margin: 15px 25%;
-}
-
-.loginbox .loginerrors {
-    color: #f00;
-}
-
-.loginbox .loginform {
-    margin: 15px auto 0;
-    width: 175px;
-}
-
-.loginbox .loginform .form-label {
-    float: none;
-    width: 100%;
-    margin: 0 auto;
-    text-align: left;
-}
-.dir-rtl .loginbox .loginform .form-label {
-    text-align: right;
-}
-.loginbox .loginform .form-input {
-    float: none;
-    width: 100%;
-    margin: 0 auto;
-}
-
-.loginbox .loginform .form-input #username,
-.loginbox .loginform .form-input #password {
-    width: 97%;
-    padding: 3px;
-    font-size: 1.1em;
-    font-family: Helvetica, Arial, sans-serif;
-    border: 2px solid #ddd;
-    margin: 0 0 5px;
-    color: #333;
-}
-
-.loginbox .loginform .form-input #loginbtn {
-    margin: 0.5em auto;
-}
-
-.loginbox .forgetpass {
-    margin: 1em 0 0;
-    font-size: 0.95em;
-}
-
-.loginbox.twocolumns {
-    width: 90%;
-    margin-left: 5%;
-}
-
-.loginbox .guestsub {
-    border-top: 1px solid #DDDDDD;
-    margin: 5px 20%
-}
-
-.loginbox.twocolumns .loginpanel {
-    border-color: #ddd;
-    padding-right: 0.5%;
-}
-
-.loginbox.twocolumns .signuppanel {
-    padding-left: 1%;
-    width: 48%;
-}
-
-#page-course-loginas #notice {
-    border: none;
-}
-
-#page-login-forgot_password .generalbox {
-    margin: 0 auto 1.5em;
-    width: 75%;
-    padding: 10px;
-}
-
-#page-login-signup .mform {
-    width: 85%;
-    margin: 0 auto;
-}
-
-#page-login-signup .mform .fitem .fitemtitle {
-    width: 20%;
-}
-
-#page-login-signup .mform .fitem .felement {
-    margin-left: 21%;
-}
-
 /* Calendar
 -------------------------*/
 
index 5f6d6c6..2f7c358 100644 (file)
@@ -55,7 +55,8 @@ $THEME->sheets = array(
     'core',
     'pagelayout',
     'menu',
-    'report'
+    'report',
+    'admin'
 );
 
 ////////////////////////////////////////////////////
@@ -119,7 +120,8 @@ $THEME->layouts = array(
         'defaultregion' => 'side-post',
     ),
     'admin' => array(
-        'file' => 'general.php',
+        'theme' => 'base',
+        'file' => 'report.php',
         'regions' => array('side-pre'),
         'defaultregion' => 'side-pre',
     ),
diff --git a/theme/sky_high/style/admin.css b/theme/sky_high/style/admin.css
new file mode 100644 (file)
index 0000000..0cf29a7
--- /dev/null
@@ -0,0 +1,128 @@
+/** Admin layout **/
+
+body.pagelayout-admin {
+    background-image: none;
+    background-color: #fff;
+}
+
+body.pagelayout-admin.has_dock {
+    margin-left: 30px;
+}
+.pagelayout-admin #page {
+    width: 100%;
+    margin: 0 auto;
+    position: relative;
+}
+.pagelayout-admin #page-header,
+.pagelayout-admin #page-footer {
+    float: none;
+    background: #f3f3f3 none;
+    width: 100%;
+    margin: 0;
+    padding: 0;
+    text-align: left;
+}
+.pagelayout-admin #page-header {
+    background:#97d3f4 url([[pix:theme|header]]) no-repeat top right;
+    margin-bottom: 0px;
+    height: 105px;
+    border-bottom: 1px solid #FFF;
+}
+
+.pagelayout-admin #page-header #custommenu {
+    display: none;
+}
+.pagelayout-admin .navbar {
+    background-color: #FFF;
+    height: 20px;
+    margin: 0;
+    padding: 5px 0;
+}
+
+.pagelayout-admin #page-footer {
+    text-align: center;
+    height: auto;
+}
+.pagelayout-admin  #page-footer .logininfo,
+.pagelayout-admin  #page-footer .homelink {
+    margin: 1em 0 0;
+    padding: 0;
+    text-align: center;
+}
+
+.pagelayout-admin #page-content {
+    background: #FFF url([[pix:theme|top_bg]]) repeat-x center top;
+    float: none;
+    overflow: visible;
+    width: auto;
+    padding-top: 1em;
+}
+.pagelayout-admin #report-main-content {
+    float: left;
+    width: 100%;
+}
+.pagelayout-admin #report-main-content .region-content {
+    margin-left: 210px;
+    overflow: visible;
+    padding-bottom: 20px;
+}
+.pagelayout-admin #report-main-content .region-content table.generaltable {
+    background-color: #FFF;
+    width: 98%;
+    margin: 0 auto;
+    padding: 0;
+}
+.pagelayout-admin #report-region-wrap {
+    width: 0;
+    float: right;
+    position: relative;
+    left: -100%;
+}
+.pagelayout-admin #report-region-pre {
+    width: 200px;
+    margin-left: 5px;
+}
+
+/** CONTENT ONLY **/
+.pagelayout-admin.content-only #report-main-content .region-content {
+    margin-left: 10px;
+}
+.pagelayout-admin.content-only #report-region-pre {
+    width: 0;
+}
+
+/** Correct for right to left languages **/
+.dir-rtl.pagelayout-admin #report-main-content .region-content {
+    margin-left: 0;
+    margin-right: 210px;
+}
+.dir-rtl.pagelayout-admin #report-region-wrap {
+    left:0;
+}
+
+/** Stabalise IE6 behaviour on the report layout **/
+.ie6.pagelayout-admin #report-main-content {
+    float: none;
+    width: auto;
+}
+.ie6.pagelayout-admin #report-region-wrap {
+    float: none;
+    width: 200px;
+    left: auto;
+    position: absolute;
+    top: 0;
+}
+.ie6.pagelayout-admin #report-region-pre,
+.ie6.pagelayout-admin #report-region-pre .block {
+    width: 100%;
+}
+
+@media print {
+    .pagelayout-admin .region-content {margin-left: 0px !important;}
+    .pagelayout-admin #report-region-pre {width: 0px !important;}
+    .pagelayout-admin .region-content table.generaltable {font-size:70% !important;}
+    .pagelayout-admin #report-region-pre,
+    .pagelayout-admin #page-header,
+    .pagelayout-admin #page-footer,
+    .pagelayout-admin #dock { display: none;}
+}
index 5e8f3ae..570bb96 100644 (file)
@@ -121,6 +121,7 @@ body.pagelayout-report.has_dock {
     .pagelayout-report .region-content {margin-left: 0px !important;}
     .pagelayout-report #report-region-pre {width: 0px !important;}
     .pagelayout-report .region-content table.generaltable {font-size:70% !important;}
+    .pagelayout-report #report-region-pre,
     .pagelayout-report #page-header,
     .pagelayout-report #page-footer,
     .pagelayout-report #dock { display: none;}
index eadc4ff..2f4e50a 100644 (file)
@@ -7,7 +7,7 @@
 **
 *********************************************************/
 
-/* Global 
+/* Global
 ------------------------*/
 html {                /* Reset html page to 0 padding/margins */
     padding: 0;
@@ -22,7 +22,7 @@ body {                /* Define margins and background colour/image */
     width: 100%;
 }
 
-body,h1,h2,h3,h4,h5,h6,p,ul,ol,dl,input,textarea {   /* Set fonttype for site */ 
+body,h1,h2,h3,h4,h5,h6,p,ul,ol,dl,input,textarea {   /* Set fonttype for site */
     font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 }
 
@@ -58,9 +58,14 @@ a:active {
     display: none;
 }
 
-.loginpanel {
-    background: url([[pix:theme|loginpanel]]) top center no-repeat;
+.loginbox.twocolumns .loginpanel {
+    border-right: 1px solid #ddd;
+}
+
+.loginpanel, .signuppanel {
+    background: url([[pix:theme|loginpanel]]) center top no-repeat;
     height: 480px;
+    margin-top: -5px;
 }
 
 .loginbox .loginpanel .subcontent {
@@ -68,12 +73,12 @@ a:active {
     clear: right;
     width: 300px;
 }
-/* fix issues conflicting with the floating columns */                 
+/* fix issues conflicting with the floating columns */
 .clearer {
     clear:left;
 }
 
-/* Header 
+/* Header
 -----------------------*/
 
 #page-header {            /* Set height for header */
@@ -151,7 +156,7 @@ a:active {
     height: 60px;
 }
 
-#userdetails_loggedout h1{ /* positioning of user h1 tag*/ 
+#userdetails_loggedout h1{ /* positioning of user h1 tag*/
     padding-top:40px
 }
 
@@ -462,11 +467,11 @@ div.summary {
 /* Mini Calendar
 ------------------------*/
 
-.block .minicalendar {   /* setting background colour for mini cal*/ 
+.block .minicalendar {   /* setting background colour for mini cal*/
     background: #fff;
 }
 
-.block .minicalendar td.weekend {    /* setting weekend date colour */ 
+.block .minicalendar td.weekend {    /* setting weekend date colour */
     color:#7c3041;
 }
 
index 9dd55f6..b2aa1c4 100644 (file)
@@ -369,13 +369,13 @@ abstract class user_selector_base {
         // See if we got anything.
         if ($this->multiselect) {
             $userids = optional_param_array($this->name, array(), PARAM_INTEGER);
-        } else {
-            $userid = optional_param($this->name, 0, PARAM_INTEGER);
-            if (empty($userid)) {
-                return array();
-            }
+        } else if ($userid = optional_param($this->name, 0, PARAM_INTEGER)) {
             $userids = array($userid);
         }
+        // If there are no users there is nobody to load
+        if (empty($userids)) {
+            return array();
+        }
 
         // If we did, use the find_users method to validate the ids.
         $this->validatinguserids = $userids;