Merge branch 'm20_MDL-22449_wiki_help_buttons' of git://github.com/dongsheng/moodle
authorPetr Skoda <commits@skodak.org>
Mon, 27 Dec 2010 12:44:54 +0000 (13:44 +0100)
committerPetr Skoda <commits@skodak.org>
Mon, 27 Dec 2010 12:44:54 +0000 (13:44 +0100)
21 files changed:
admin/environment.xml
enrol/self/lib.php
lang/en/admin.php [changed mode: 0755->0644]
lib/ajax/section_classes.js
lib/customcheckslib.php
lib/datalib.php
lib/dml/pgsql_native_moodle_database.php
lib/dml/simpletest/testdml.php
lib/dml/sqlsrv_native_moodle_database.php
lib/dmllib.php
lib/grade/grade_object.php
lib/moodlelib.php
mod/data/locallib.php
mod/feedback/db/messages.php
mod/forum/lib.php
mod/lesson/db/messages.php [new file with mode: 0644]
mod/lesson/lang/en/lesson.php
mod/lesson/version.php
theme/base/style/core.css
user/edit.php
version.php

index b70ced3..614fe68 100644 (file)
       </PHP_SETTING>
     </PHP_SETTINGS>
     <CUSTOM_CHECKS>
+      <CUSTOM_CHECK file="lib/customcheckslib.php" function="php_check_php533" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="php533warning" />
+        </FEEDBACK>
+      </CUSTOM_CHECK>
     </CUSTOM_CHECKS>
   </MOODLE>
 </COMPATIBILITY_MATRIX>
index dc4e623..c977fcf 100644 (file)
@@ -303,6 +303,7 @@ class enrol_self_plugin extends enrol_plugin {
             $contact = get_admin();
         }
 
+        //directly emailing welcome message rather than using messaging
         email_to_user($user, $contact, $subject, $message);
     }
 
old mode 100755 (executable)
new mode 100644 (file)
index 1bad6b9..b1d59ec
@@ -782,6 +782,7 @@ $string['perfdebug'] = 'Performance info';
 $string['performance'] = 'Performance';
 $string['pgcluster'] = 'PostgreSQL Cluster';
 $string['pgclusterdescription'] = 'PostgreSQL version/cluster parameter for command line operations. If you only have one postgresql on your system or you are not sure what this is, leave this blank.';
+$string['php533warning'] = 'PHP 5.3.3 and upwards is recommended';
 $string['phpfloatproblem'] = 'Detected unexpected problem in handling of PHP float numbers - {$a}';
 $string['php50restricted'] = 'PHP 5.0.x has a number of known problems, please upgrade to 5.1.x or downgrade to 4.3.x or 4.4.x';
 $string['pleaserefreshregistration'] = 'Your site has been registered with moodle.org, please consider updating the registration if significant changes happened since your last update, on {$a}';
index b228110..9acf607 100755 (executable)
@@ -631,6 +631,7 @@ resource_class.prototype.init_buttons = function() {
     var moveLeft = false;
     var moveRight = false;
     var updateButton = null;
+    var assignButton = null;
 
     // for RTL support
     var isrtl = (document.getElementsByTagName("html")[0].dir=="rtl");
@@ -642,6 +643,8 @@ resource_class.prototype.init_buttons = function() {
             moveRight = true;
         } else if (buttons[x].className == 'editing_update') {
             updateButton = buttons[x].cloneNode(true);
+        } else if (buttons[x].className == 'editing_assign') {
+            assignButton = buttons[x].cloneNode(true);
         } else if (buttons[x].className == 'editing_groupsnone') {
             this.groupmode = this.NOGROUPS;
         } else if (buttons[x].className == 'editing_groupsseparate') {
@@ -661,8 +664,7 @@ resource_class.prototype.init_buttons = function() {
 
     // Add move-handle for drag and drop.
     var handleRef = main.mk_button('a', main.portal.icons['move_2d'], main.portal.strings['move'],
-            [['style', 'cursor:move']],
-            [['height', '11'], ['width', '11'], ['style', 'margin-right:3px; border:0;']]);
+            [['style', 'cursor:move']], [['class', 'iconsmall']]);
 
     YAHOO.util.Dom.generateId(handleRef, 'sectionHandle');
     this.handle = handleRef;
@@ -672,7 +674,7 @@ resource_class.prototype.init_buttons = function() {
     // Add indentation buttons if needed (move left, move right).
     if (moveLeft) {
         var button = main.mk_button('a', main.portal.icons['backwards'], main.portal.strings['moveleft'],
-                [['class', 'editing_moveleft']]);
+                [['class', 'editing_moveleft']], [['class', 'iconsmall']]);
         YAHOO.util.Event.addListener(button, 'click', this.indent_left, this, true);
         commandContainer.appendChild(button);
         this.indentLeftButton = button;
@@ -680,7 +682,7 @@ resource_class.prototype.init_buttons = function() {
 
     if (moveRight) {
         var button = main.mk_button('a', main.portal.icons['forwards'], main.portal.strings['moveright'],
-                [['class', 'editing_moveright']]);
+                [['class', 'editing_moveright']], [['class', 'iconsmall']]);
         YAHOO.util.Event.addListener(button, 'click', this.indent_right, this, true);
         commandContainer.appendChild(button);
         this.indentRightButton = button;
@@ -690,15 +692,15 @@ resource_class.prototype.init_buttons = function() {
     commandContainer.appendChild(updateButton);
 
     // Add the delete button.
-    var button = main.mk_button('a', main.portal.icons['delete'], main.portal.strings['delete']);
+    var button = main.mk_button('a', main.portal.icons['delete'], main.portal.strings['delete'], null, [['class', 'iconsmall']]);
     YAHOO.util.Event.addListener(button, 'click', this.delete_button, this, true);
     commandContainer.appendChild(button);
 
     // Add the hide or show button.
     if (this.hidden) {
-        var button = main.mk_button('a', main.portal.icons['show'], main.portal.strings['show']);
+        var button = main.mk_button('a', main.portal.icons['show'], main.portal.strings['show'], null, [['class', 'iconsmall']]);
     } else {
-        var button = main.mk_button('a', main.portal.icons['hide'], main.portal.strings['hide']);
+        var button = main.mk_button('a', main.portal.icons['hide'], main.portal.strings['hide'], null, [['class', 'iconsmall']]);
     }
     YAHOO.util.Event.addListener(button, 'click', this.toggle_hide, this, true);
     commandContainer.appendChild(button);
@@ -707,16 +709,21 @@ resource_class.prototype.init_buttons = function() {
     // Add the groupmode button if needed.
     if (this.groupmode != null) {
         if (this.groupmode == this.NOGROUPS) {
-            var button = main.mk_button('a', main.portal.icons['groupn'], strgroupsnone);
+            var button = main.mk_button('a', main.portal.icons['groupn'], strgroupsnone, null, [['class', 'iconsmall']]);
         } else if (this.groupmode == this.SEPARATEGROUPS) {
-            var button = main.mk_button('a', main.portal.icons['groups'], strgroupsseparate);
+            var button = main.mk_button('a', main.portal.icons['groups'], strgroupsseparate, null, [['class', 'iconsmall']]);
         } else {
-            var button = main.mk_button('a', main.portal.icons['groupv'], strgroupsvisible);
+            var button = main.mk_button('a', main.portal.icons['groupv'], strgroupsvisible, null, [['class', 'iconsmall']]);
         }
         YAHOO.util.Event.addListener(button, 'click', this.toggle_groupmode, this, true);
         commandContainer.appendChild(button);
         this.groupButton = button;
     }
+
+    // Add the assign roles button back in
+    if (assignButton != null) {
+        commandContainer.appendChild(assignButton);
+    }
 };
 
 
@@ -774,7 +781,7 @@ resource_class.prototype.indent_right = function() {
         // Add a indent left button if none is present.
         var commandContainer = YAHOO.util.Dom.getElementsByClassName('commands', 'span', this.getEl())[0];
         var button = main.mk_button('a', main.portal.icons['backwards'], main.portal.strings['moveleft'],
-                [['class', 'editing_moveleft']]);
+                [['class', 'editing_moveleft']], [['class', 'iconsmall']]);
         YAHOO.util.Event.addListener(button, 'click', this.indent_left, this, true);
         commandContainer.insertBefore(button, this.indentRightButton);
         this.indentLeftButton = button;
index 35f4698..7c63c50 100644 (file)
@@ -54,3 +54,12 @@ function php_check_register_globals($result) {
 
     return $result;
 }
+
+function php_check_php533($result) {
+    if (version_compare(phpversion(), '5.3.3') < 0) {
+        $result->status = false;
+    } else {
+        $result = null;
+    }
+    return $result;
+}
index 9785734..ad75220 100644 (file)
@@ -1695,6 +1695,7 @@ function add_to_log($courseid, $module, $action, $url='', $info='', $cm=0, $user
 
             $lasttime = get_config('admin', 'lastloginserterrormail');
             if(empty($lasttime) || time() - $lasttime > 60*60*24) { // limit to 1 email per day
+                //using email directly rather than messaging as they may not be able to log in to access a message
                 mail($CFG->supportemail, $subject, $message);
                 set_config('lastloginserterrormail', time(), 'admin');
             }
index bd70bba..d78bf57 100644 (file)
@@ -1115,7 +1115,9 @@ class pgsql_native_moodle_database extends moodle_database {
         if ($s === '') {
             return " '' ";
         }
-        return " $s ";
+        // Add always empty string element so integer-exclusive concats
+        // will work without needing to cast each element explicity
+        return " '' || $s ";
     }
 
     public function sql_concat_join($separator="' '", $elements=array()) {
index d721326..a302282 100755 (executable)
@@ -2904,11 +2904,14 @@ class dml_test extends UnitTestCase {
         // float, empty and strings
         $params = array(123.45, '', 'test');
         $this->assertEqual('123.45test', $DB->get_field_sql($sql, $params));
+        // only integers
+        $params = array(12, 34, 56);
+        $this->assertEqual('123456', $DB->get_field_sql($sql, $params));
         // float, null and strings
         $params = array(123.45, null, 'test');
         $this->assertNull($DB->get_field_sql($sql, $params), 'ANSI behaviour: Concatenating NULL must return NULL - But in Oracle :-(. [%s]'); // Concatenate NULL with anything result = NULL
 
-        /// Testing fieldnames + values
+        /// Testing fieldnames + values and also integer fieldnames
         $table = $this->get_test_table();
         $tablename = $table->getName();
 
@@ -2921,10 +2924,22 @@ class dml_test extends UnitTestCase {
         $DB->insert_record($tablename, array('description'=>'dxxx'));
         $DB->insert_record($tablename, array('description'=>'bcde'));
 
+        // fieldnames and values mixed
         $sql = 'SELECT id, ' . $DB->sql_concat('description', "'harcoded'", '?', '?') . ' AS result FROM {' . $tablename . '}';
         $records = $DB->get_records_sql($sql, array(123.45, 'test'));
         $this->assertEqual(count($records), 3);
         $this->assertEqual($records[1]->result, 'áéíóúharcoded123.45test');
+        // integer fieldnames and values
+        $sql = 'SELECT id, ' . $DB->sql_concat('id', "'harcoded'", '?', '?') . ' AS result FROM {' . $tablename . '}';
+        $records = $DB->get_records_sql($sql, array(123.45, 'test'));
+        $this->assertEqual(count($records), 3);
+        $this->assertEqual($records[1]->result, '1harcoded123.45test');
+        // all integer fieldnames
+        $sql = 'SELECT id, ' . $DB->sql_concat('id', 'id', 'id') . ' AS result FROM {' . $tablename . '}';
+        $records = $DB->get_records_sql($sql, array());
+        $this->assertEqual(count($records), 3);
+        $this->assertEqual($records[1]->result, '111');
+
     }
 
     function test_concat_join() {
index 9d8ab2d..88539aa 100644 (file)
@@ -771,42 +771,109 @@ class sqlsrv_native_moodle_database extends moodle_database {
      * @return string sql
      */
     private function limit_to_top_n($sql, $offset, $limit) {
+        // If there is no limit we can return immediatly
         if ($limit < 1 && $offset < 1) {
             return $sql;
         }
-        $limit = max(0, $limit);
-        $offset = max(0, $offset);
 
-        if ($limit > 0 && $offset == 0) {
-            $sql1 = preg_replace('/^([\s(])*SELECT([\s]+(DISTINCT|ALL))?(?!\s*TOP\s*\()/i',
-                                 "\\1SELECT\\2 TOP $limit", $sql);
+        // Make sure they are at least 0
+        $limit = max(0, (int)$limit);
+        $offset = max(0, (int)$offset);
+        // This is an sqlserver bigint - -1 and will be used as a value
+        // for top when essentially we want everything.
+        // This needs to be a string so that it doesn't get malformed.
+        $bigint = '9223372036854775806';
+
+        // If limit is 0 set it to BITINT - 1
+        if (empty($limit)) {
+            $limit = $bigint;
         } else {
-            // Only apply TOP clause if we have any limitnum (limitfrom offset is handled later)
-            if ($limit < 1) {
-               $limit = "9223372036854775806"; // MAX BIGINT -1
-            }
-            if (preg_match('/\w*FROM[\s|{]*([\w|.]*)[\s|}]?/i', $sql, $match)) {
-                $from_table = $match[1];
-                if (preg_match('/SELECT[\w|\s]*(\*)[\w|\s]*FROM/i', $sql)) {
-                    // Need all the columns as the emulation returns some temp cols
-                    $cols = array_keys($this->get_columns($from_table));
-                    $cols = implode(', ', $cols);
-                } else {
-                    $cols = '*';
+            $limit = $offset + $limit;
+        }
+
+        // Set up defaults for the next bit.
+        $columns = '*';      // Default to all columns
+        $columnnames = '*';  // As above
+        $firstcolumn = 'id'; // The default first column is id
+        $orderby = '';       // The order by of the main query
+
+        // We need to find all the columns so that we can request JUST the desired
+        // columns in the end transaction. We also need to do a couple of maintenance
+        // tasks on the columns seeing as they are going to be wrapped in a 
+        // sub select.
+        //
+        // 1. Collect the first column to use for an order by if there isn't an
+        //    explicit order by within the query.
+        // 2. Make we use the aliases for columns that have it because of next point.
+        // 3. Strip off table aliases they will be incorrect outside of the immediate
+        //    sub select.
+        // 4. Give all constant columns a proper alias, this is required because
+        //    of the subselect.
+        if (preg_match('#^(\s*SELECT\s+)(DISTINCT\s+)?(.*?)(\sFROM\s)#is', $sql, $columnmatches)) {
+            // Make sure we have some columns
+            if (!empty($columnmatches[3])) {
+                $columns = explode(',', $columnmatches[3]);
+                $columnnames = array();
+                $firstcolumn = null;
+                $constantcount = 0;
+                foreach ($columns as $key=>$column) {
+                    // Trim, trim, trim, except during Movember.
+                    $column = trim($column);
+                    if (preg_match('#\sAS\s+(\w+)\s*$#si', $column, $matches)) {
+                        // Make sure we use the column alias if available.
+                        $column = $matches[1];
+                    } else if (preg_match("#^'[^']*'$#", $column)) {
+                        // Give constants an alias in the main query and use the
+                        // alias for the new outer queries.
+                        $constantcount++;
+                        $column = 'constant_'.$constantcount;
+                        $columns[$key] .= ' AS '.$column;
+                    }
+
+                    // Store the first column for later abuse.
+                    if ($firstcolumn === null) {
+                        $firstcolumn = $column;
+                    }
+
+                    // Remove any table aliases from the column name for the outer
+                    // queries.
+                    if (preg_match('#^\w+\.(.*)$#s', $column, $matches)) {
+                        $column = $matches[1];
+                    }
+                    $columnnames[] = $column;
                 }
-                $sql1 = "SELECT $cols
-                           FROM (SELECT sub2.*, ROW_NUMBER() OVER(ORDER BY sub2.line2) AS line3
-                                   FROM (SELECT 1 AS line2, sub1.*
-                                           FROM {".$from_table."} AS sub1
-                                        ) AS sub2
-                                ) AS sub3
-                          WHERE line3 BETWEEN ".($offset+1)." AND ".($offset + $limit);
-            } else {
-                $sql1 = "SELECT 'Invalid table'";
+                // Glue things back together
+                $columnnames = join(', ', $columnnames);
+                $columns = join(', ', $columns);
+                // Switch out the fixed main columns (added constant aliases).
+                $sql = str_replace($columnmatches[0], $columnmatches[1].$columnmatches[2].$columns.$columnmatches[4], $sql);
             }
         }
 
-        return $sql1;
+        // Collect the orderby from the main query to use in the row number order by.
+        if (preg_match('#\sORDER\s+BY\s+([^)]+?)(GROUP\s+BY|$)#i', $sql, $matches)) {
+            // We need to remove it from the main query as well.
+            $sql = str_replace($matches[0], ' '.$matches[2], $sql);
+            $orderby = $matches[1];
+        } else {
+            // Default orderby to the first column.
+            $orderby = $firstcolumn;
+        }
+        // Remove any table aliases from the order by.
+        $orderby = preg_replace('#[^\s,]*\.([^\s,]*)#', '$1', $orderby);
+
+        // If the orderby is all tables everything will break, default to id.
+        if ($orderby == '*') {
+            $orderby = 'id';
+        }
+
+        // Build the inner outer query.
+        $sql = "SELECT TOP $bigint ROW_NUMBER() OVER(ORDER BY $orderby) AS sqlsrvrownumber, $columnnames FROM ($sql) AS q";
+        // Build the outer most query.
+        $sql = "SELECT $columnnames FROM ($sql) AS q WHERE q.sqlsrvrownumber > $offset AND q.sqlsrvrownumber <= $limit";
+
+        // Return the now mangled query for use.
+        return $sql;
     }
 
     /**
index 8dd0fde..ab9e438 100644 (file)
@@ -284,6 +284,7 @@ function setup_DB() {
                 $content = @fread($fp, 24);
                 @fclose($fp);
                 if((time() - (int)$content) > 600){
+                    //email directly rather than using messaging
                     @mail($CFG->emailconnectionerrorsto,
                         'WARNING: Database connection error: '.$CFG->wwwroot,
                         'Connection error: '.$CFG->wwwroot);
@@ -291,6 +292,7 @@ function setup_DB() {
                     @fwrite($fp, time());
                 }
             } else {
+               //email directly rather than using messaging
                @mail($CFG->emailconnectionerrorsto,
                     'WARNING: Database connection error: '.$CFG->wwwroot,
                     'Connection error: '.$CFG->wwwroot);
index 6f4ba06..08859f5 100644 (file)
@@ -184,20 +184,22 @@ abstract class grade_object {
         }
 
         global $DB;
-        if ($datas = $DB->get_records_select($table, $wheresql, $newparams)) {
-
-            $result = array();
-            foreach($datas as $data) {
-                $instance = new $classname();
-                grade_object::set_properties($instance, $data);
-                $result[$instance->id] = $instance;
-            }
-            return $result;
-
-        } else {
-
+        $rs = $DB->get_recordset_select($table, $wheresql, $newparams);
+        //returning false rather than empty array if nothing found
+        if (!$rs->valid()) {
+            $rs->close();
             return false;
         }
+
+        $result = array();
+        foreach($rs as $data) {
+            $instance = new $classname();
+            grade_object::set_properties($instance, $data);
+            $result[$instance->id] = $instance;
+        }
+        $rs->close();
+
+        return $result;
     }
 
     /**
index 1e9bdf4..975b6f7 100644 (file)
@@ -5024,6 +5024,7 @@ function setnew_password_and_mail($user) {
 
     $subject = format_string($site->fullname) .': '. get_string('newusernewpasswordsubj');
 
+    //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);
 
 }
@@ -5066,6 +5067,7 @@ function reset_password_and_mail($user) {
 
     $subject  = format_string($site->fullname) .': '. get_string('changedpassword');
 
+    //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);
 
 }
@@ -5096,6 +5098,7 @@ function reset_password_and_mail($user) {
 
     $user->mailformat = 1;  // Always send HTML version as well
 
+    //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, $messagehtml);
 
 }
@@ -5123,6 +5126,7 @@ function send_password_change_confirmation_email($user) {
     $message = get_string('emailpasswordconfirmation', '', $data);
     $subject = get_string('emailpasswordconfirmationsubject', '', format_string($site->fullname));
 
+    //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);
 
 }
@@ -5152,6 +5156,7 @@ function send_password_change_info($user) {
     if (!is_enabled_auth($user->auth) or $user->auth == 'nologin') {
         $message = get_string('emailpasswordchangeinfodisabled', '', $data);
         $subject = get_string('emailpasswordchangeinfosubject', '', format_string($site->fullname));
+        //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);
     }
 
@@ -5172,6 +5177,7 @@ function send_password_change_info($user) {
         $subject = get_string('emailpasswordchangeinfosubject', '', format_string($site->fullname));
     }
 
+    //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);
 
 }
@@ -8029,6 +8035,7 @@ function notify_login_failures() {
     /// For each destination, send mail
         mtrace('Emailing admins about '. $count .' failed login attempts');
         foreach ($recip as $admin) {
+            //emailing the admins directly rather than putting these through the messaging system
             email_to_user($admin,get_admin(), $subject, $body);
         }
 
index 807999b..d8f8ab9 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 require_once($CFG->dirroot . '/mod/data/lib.php');
+require_once($CFG->libdir . '/portfolio/caller.php');
 
 /**
  * The class to handle entry exports of a database module
index c5417e0..0cdead1 100644 (file)
@@ -18,7 +18,7 @@
 /**
  * Defines message providers (types of messages being sent)
  *
- * @package mod-assignment
+ * @package mod-feedback
  * @copyright  2010 onwards  Aparup Banerjee  http://moodle.com
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
index 01e1c5c..c5b5bcc 100644 (file)
@@ -920,6 +920,7 @@ function forum_cron() {
 
                 $attachment = $attachname='';
                 $usetrueaddress = true;
+                //directly email forum digests rather than sending them via messaging
                 $mailresult = email_to_user($userto, $site->shortname, $postsubject, $posttext, $posthtml, $attachment, $attachname, $usetrueaddress, $CFG->forum_replytouser);
 
                 if (!$mailresult) {
diff --git a/mod/lesson/db/messages.php b/mod/lesson/db/messages.php
new file mode 100644 (file)
index 0000000..ceb444f
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Defines message providers (types of messages being sent)
+ *
+ * @package mod-lesson
+ * @copyright 2010 Andrew Davis
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+$messageproviders = array (
+
+    // essay graded notification
+    'graded_essay' => array (
+    )
+
+);
+
+
+
index 2e79be0..0ec7cbf 100644 (file)
@@ -242,6 +242,7 @@ $string['mediafile_help'] = 'To include a pop-up window at the beginning of a le
 $string['mediafilepopup'] = 'Click here to view';
 $string['mediaheight'] = 'Popup window height:';
 $string['mediawidth'] = 'Popup window width:';
+$string['messageprovider:graded_essay'] = 'Essay graded notification';
 $string['minimumnumberofquestions'] = 'Minimum number of questions';
 $string['minimumnumberofquestions_help'] = 'This setting specifies the minimum number of questions that will be used to calculate a grade for the activity. If the lesson contains one or more content pages, the minimum number of questions should be set to zero.
 
index ceba7c2..8a193e7 100644 (file)
@@ -27,7 +27,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$module->version  = 2010121400;  // The current module version (Date: YYYYMMDDXX)
+$module->version  = 2010122200;  // The current module version (Date: YYYYMMDDXX)
 $module->requires = 2010080300;  // Requires this Moodle version
 $module->cron     = 0;           // Period for cron to check this module (secs)
 
index 5974b2c..eaf5e8e 100644 (file)
@@ -112,7 +112,7 @@ form.popupform div {display: inline;}
  */
 /*Accessibility: text 'seen' by screen readers but not visual users. */
 .accesshide {position:absolute;left:-10000px;font-weight:normal;font-size:1em;}
-.dir-rtl .accesshide {right:-10000px;left:auto;}
+.dir-rtl .accesshide {top:-30000px;left:auto;}
 span.hide,
 div.hide {display:none;}
 .invisiblefieldset {display:inline;border-width:0;padding:0;margin:0;}
index a295fc5..379fa42 100644 (file)
@@ -228,6 +228,7 @@ if ($usernew = $userform->get_data()) {
         $emailupdatemessage = get_string('auth_emailupdatemessage', 'auth_email', $a);
         $emailupdatetitle = get_string('auth_emailupdatetitle', 'auth_email', $a);
 
+        //email confirmation directly rather than using messaging so they will definitely get an email
         if (!$mail_results = email_to_user($temp_user, get_admin(), $emailupdatetitle, $emailupdatemessage)) {
             die("could not send email!");
         }
index 84bf00f..99b129e 100644 (file)
@@ -29,7 +29,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$version = 2010121401;  // YYYYMMDD   = date of the last version bump
+$version = 2010122500.02;  // YYYYMMDD   = date of the last version bump
                         //         XX = daily increments
 
-$release = '2.0 (Build: 20101222)';  // Human-friendly version name
+$release = '2.0.1+ (Build: 20101227)';  // Human-friendly version name