Fixed conflicts & merge branch 'MDL-17201_index' of git://github.com/andyjdavis/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 31 Jan 2011 14:34:40 +0000 (15:34 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 31 Jan 2011 14:34:40 +0000 (15:34 +0100)
162 files changed:
admin/multilangupgrade.php
admin/settings/subsystems.php
admin/settings/users.php
admin/user/lib.php
admin/user/user_bulk_confirm.php
admin/user/user_bulk_delete.php
admin/user/user_bulk_forcepasswordchange.php
admin/user/user_bulk_message.php
auth/shibboleth/logout.php
backup/lib.php
backup/restorelib.php
blocks/course_summary/block_course_summary.php
blocks/html/block_html.php
blocks/online_users/block_online_users.php
blog/locallib.php
brokenfile.php [new file with mode: 0644]
calendar/lib.php
course/lib.php
course/report/completion/mod.php
course/report/progress/index.php
course/resources.php
course/user.php
enrol/authorize/localfuncs.php
enrol/category/locallib.php
enrol/database/lib.php
enrol/imsenterprise/db/install.php [new file with mode: 0644]
enrol/imsenterprise/db/upgrade.php [new file with mode: 0644]
enrol/imsenterprise/version.php
enrol/self/lib.php
filter/activitynames/lang/en/filter_activitynames.php
filter/algebra/lang/en/filter_algebra.php
filter/censor/lang/en/filter_censor.php
filter/emailprotect/lang/en/filter_emailprotect.php
filter/mediaplugin/filter.php
filter/mediaplugin/lang/en/filter_mediaplugin.php
filter/tex/lang/en/filter_tex.php
grade/report/user/lib.php
group/members.php
group/overview.php
install/lang/ca/admin.php
install/lang/da/error.php
install/lang/da/install.php
install/lang/he/install.php
install/lang/nn/langconfig.php
install/lang/pl/admin.php
install/lang/pl/install.php
install/lang/pt/error.php
install/lang/sl/admin.php
lang/en/admin.php
lang/en/completion.php
lib/accesslib.php
lib/completion/completion_criteria_activity.php
lib/completion/completion_criteria_course.php
lib/completion/completion_criteria_date.php
lib/completion/completion_criteria_duration.php
lib/completion/completion_criteria_grade.php
lib/completion/cron.php
lib/completionlib.php
lib/datalib.php
lib/db/install.xml
lib/db/upgrade.php
lib/db/upgradelib.php
lib/dml/moodle_database.php
lib/dml/oci_native_moodle_database.php
lib/dml/pdo_moodle_database.php
lib/eventslib.php
lib/filelib.php
lib/filestorage/file_storage.php
lib/grade/grade_category.php
lib/grade/grade_grade.php
lib/grade/grade_item.php
lib/grade/grade_outcome.php
lib/grade/grade_scale.php
lib/gradelib.php
lib/grouplib.php
lib/moodlelib.php
lib/navigationlib.php
lib/setuplib.php
lib/upgradelib.php
lib/weblib.php
message/lib.php
message/search.html
message/search_advanced.html
mnet/service/enrol/index.php
mnet/service/enrol/lang/en/mnetservice_enrol.php
mnet/service/enrol/locallib.php
mod/assignment/db/upgrade.php
mod/assignment/lib.php
mod/assignment/type/online/assignment.class.php
mod/data/db/upgrade.php
mod/data/lib.php
mod/feedback/item/info/lib.php
mod/feedback/item/label/lib.php
mod/feedback/item/multichoice/lib.php
mod/feedback/item/multichoicerated/lib.php
mod/feedback/item/textarea/lib.php
mod/feedback/item/textfield/lib.php
mod/folder/db/upgradelib.php
mod/forum/db/upgrade.php
mod/forum/lib.php
mod/glossary/db/upgrade.php
mod/glossary/import.php
mod/glossary/lib.php
mod/glossary/showentry_ajax.php
mod/imscp/db/upgradelib.php
mod/label/lib.php
mod/lesson/importppt.php
mod/lesson/lib.php
mod/lesson/locallib.php
mod/page/db/upgradelib.php
mod/quiz/attemptlib.php
mod/quiz/index.php
mod/quiz/lib.php
mod/quiz/locallib.php
mod/quiz/report/overview/lang/en/quiz_overview.php
mod/quiz/report/reportlib.php
mod/quiz/report/responses/lang/en/quiz_responses.php
mod/quiz/report/statistics/lang/en/quiz_statistics.php
mod/quiz/view.php
mod/resource/db/upgrade.php
mod/resource/db/upgradelib.php
mod/scorm/datamodels/aicclib.php
mod/scorm/datamodels/scorm_12lib.php
mod/scorm/datamodels/scorm_13lib.php
mod/scorm/db/upgrade.php
mod/scorm/lang/en/scorm.php
mod/scorm/lib.php
mod/scorm/locallib.php
mod/scorm/player.php
mod/scorm/prereqs.php
mod/scorm/report.php
mod/survey/lib.php
mod/url/db/upgradelib.php
mod/wiki/diff/difflib.php
mod/wiki/locallib.php
mod/wiki/parser/markups/nwiki.php
mod/workshop/locallib.php
question/format/blackboard_six/format.php
question/format/gift/format.php
question/format/gift/simpletest/testgiftformat.php
question/format/multianswer/lang/en/qformat_multianswer.php
question/type/calculated/lang/en/qtype_calculated.php
question/type/calculatedmulti/lang/en/qtype_calculatedmulti.php
question/type/calculatedsimple/edit_calculatedsimple_form.php
question/type/calculatedsimple/lang/en/qtype_calculatedsimple.php
question/type/multianswer/edit_multianswer_form.php
question/type/multianswer/lang/en/qtype_multianswer.php
question/type/multianswer/questiontype.php
question/type/multichoice/lang/en/qtype_multichoice.php
repository/repository_ajax.php
tag/lib.php
theme/arialist/style/core.css
theme/base/style/course.css
theme/binarius/style/core.css
theme/magazine/style/core.css
theme/nonzero/style/pagelayout.css
theme/overlay/style/core.css
user/index.php
user/profile/lib.php
user/selector/lib.php
user/view.php
version.php

index d25c709..77c2219 100644 (file)
@@ -56,35 +56,34 @@ foreach ($tables as $table) {
             if (in_array($data->type, array('text','mediumtext','longtext','varchar'))) {  // Text stuff only
                 // first find candidate records
                 $sql = "SELECT id, $column FROM $fulltable WHERE $column LIKE '%</lang>%' OR $column LIKE '%<span lang=%'";
-                if ($rs = $DB->get_recordset_sql($sql)) {
-                    foreach ($rs as $data) {
-                        $text = $data->$column;
-                        $id   = $data->id;
-                        if ($i % 600 == 0) {
-                            echo '<br />';
-                        }
-                        if ($i % 10 == 0) {
-                            echo '.';
-                        }
-                        $i++;
-
-                        if (empty($text) or is_numeric($text)) {
-                            continue; // nothing to do
-                        }
-
-                        $search = '/(<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)(\s*<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)+/is';
-                        $newtext = preg_replace_callback($search, 'multilangupgrade_impl', $text);
-
-                        if (is_null($newtext)) {
-                            continue; // regex error
-                        }
-
-                        if ($newtext != $text) {
-                            $DB->execute("UPDATE $fulltable SET $column=? WHERE id=?", array($newtext, $id));
-                        }
+                $rs = $DB->get_recordset_sql($sql);
+                foreach ($rs as $data) {
+                    $text = $data->$column;
+                    $id   = $data->id;
+                    if ($i % 600 == 0) {
+                        echo '<br />';
+                    }
+                    if ($i % 10 == 0) {
+                        echo '.';
+                    }
+                    $i++;
+
+                    if (empty($text) or is_numeric($text)) {
+                        continue; // nothing to do
+                    }
+
+                    $search = '/(<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)(\s*<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)+/is';
+                    $newtext = preg_replace_callback($search, 'multilangupgrade_impl', $text);
+
+                    if (is_null($newtext)) {
+                        continue; // regex error
+                    }
+
+                    if ($newtext != $text) {
+                        $DB->execute("UPDATE $fulltable SET $column=? WHERE id=?", array($newtext, $id));
                     }
-                    $rs->close();
                 }
+                $rs->close();
             }
         }
     }
index ceccfe5..c7735e6 100644 (file)
@@ -37,10 +37,6 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $optionalsubsystems->add(new admin_setting_configcheckbox('enablecompletion',
         get_string('enablecompletion','completion'),
         get_string('configenablecompletion','completion'), 0));
-    $optionalsubsystems->add(new admin_setting_pickroles('progresstrackedroles',
-        get_string('progresstrackedroles','completion'),
-        get_string('configprogresstrackedroles', 'completion'),
-        array('student')));
     $optionalsubsystems->add(new admin_setting_configcheckbox('enableavailability',
         get_string('enableavailability','condition'),
         get_string('configenableavailability','condition'), 0));
index 01ef71c..1e94aa5 100644 (file)
@@ -107,7 +107,7 @@ if ($hassiteconfig
 
         if (!during_initial_install()) {
             $temp->add(new admin_setting_configselect('creatornewroleid', get_string('creatornewroleid', 'admin'),
-                          get_string('configcreatornewroleid', 'admin'), $defaultteacherid, $creatornewroles));
+                          get_string('creatornewroleid_help', 'admin'), $defaultteacherid, $creatornewroles));
         }
 
         $temp->add(new admin_setting_configcheckbox('autologinguests', get_string('autologinguests', 'admin'), get_string('configautologinguests', 'admin'), 0));
index 3f21653..25775cb 100644 (file)
@@ -11,14 +11,13 @@ function add_selection_all($ufiltering) {
 
     list($sqlwhere, $params) = $ufiltering->get_sql_filter("id<>:exguest AND deleted <> 1", array('exguest'=>$CFG->siteguest));
 
-    if ($rs = $DB->get_recordset_select('user', $sqlwhere, $params, 'fullname', 'id,'.$DB->sql_fullname().' AS fullname')) {
-        foreach ($rs as $user) {
-            if (!isset($SESSION->bulk_users[$user->id])) {
-                $SESSION->bulk_users[$user->id] = $user->id;
-            }
+    $rs = $DB->get_recordset_select('user', $sqlwhere, $params, 'fullname', 'id,'.$DB->sql_fullname().' AS fullname');
+    foreach ($rs as $user) {
+        if (!isset($SESSION->bulk_users[$user->id])) {
+            $SESSION->bulk_users[$user->id] = $user->id;
         }
-        $rs->close();
     }
+    $rs->close();
 }
 
 function get_selection_data($ufiltering) {
index 7f10341..c7ba604 100755 (executable)
@@ -24,19 +24,18 @@ echo $OUTPUT->header();
 
 if ($confirm and confirm_sesskey()) {
     list($in, $params) = $DB->get_in_or_equal($SESSION->bulk_users);
-    if ($rs = $DB->get_recordset_select('user', "id $in", $params, '', 'id, username, secret, confirmed, auth, firstname, lastname')) {
-        foreach ($rs as $user) {
-            if ($user->confirmed) {
-                continue;
-            }
-            $auth = get_auth_plugin($user->auth);
-            $result = $auth->user_confirm($user->username, $user->secret);
-            if ($result != AUTH_CONFIRM_OK && $result != AUTH_CONFIRM_ALREADY) {
-                echo $OUTPUT->notification(get_string('usernotconfirmed', '', fullname($user, true)));
-            }
+    $rs = $DB->get_recordset_select('user', "id $in", $params, '', 'id, username, secret, confirmed, auth, firstname, lastname');
+    foreach ($rs as $user) {
+        if ($user->confirmed) {
+            continue;
+        }
+        $auth = get_auth_plugin($user->auth);
+        $result = $auth->user_confirm($user->username, $user->secret);
+        if ($result != AUTH_CONFIRM_OK && $result != AUTH_CONFIRM_ALREADY) {
+            echo $OUTPUT->notification(get_string('usernotconfirmed', '', fullname($user, true)));
         }
-        $rs->close();
     }
+    $rs->close();
     redirect($return, get_string('changessaved'));
 
 } else {
index 26e11f0..a8b6705 100755 (executable)
@@ -25,16 +25,15 @@ echo $OUTPUT->header();
 if ($confirm and confirm_sesskey()) {
 
     list($in, $params) = $DB->get_in_or_equal($SESSION->bulk_users);
-    if ($rs = $DB->get_recordset_select('user', "id $in", $params)) {
-        foreach ($rs as $user) {
-            if (!is_siteadmin($user) and $USER->id != $user->id and delete_user($user)) {
-                unset($SESSION->bulk_users[$user->id]);
-            } else {
-                echo $OUTPUT->notification(get_string('deletednot', '', fullname($user, true)));
-            }
+    $rs = $DB->get_recordset_select('user', "id $in", $params);
+    foreach ($rs as $user) {
+        if (!is_siteadmin($user) and $USER->id != $user->id and delete_user($user)) {
+            unset($SESSION->bulk_users[$user->id]);
+        } else {
+            echo $OUTPUT->notification(get_string('deletednot', '', fullname($user, true)));
         }
-        $rs->close();
     }
+    $rs->close();
     session_gc(); // remove stale sessions
     redirect($return, get_string('changessaved'));
 
index 6988c74..d67c942 100644 (file)
@@ -38,17 +38,16 @@ if ($confirm and confirm_sesskey()) {
     $parts = array_chunk($SESSION->bulk_users, 300);
     foreach ($parts as $users) {
         list($in, $params) = $DB->get_in_or_equal($users);
-        if ($rs = $DB->get_recordset_select('user', "id $in", $params)) {
-            foreach ($rs as $user) {
-                if (!empty($changeable[$user->auth])) {
-                    set_user_preference('auth_forcepasswordchange', 1, $user->id);
-                    unset($SESSION->bulk_users[$user->id]);
-                } else {
-                    echo $OUTPUT->notification(get_string('forcepasswordchangenot', '', fullname($user, true)));
-                }
+        $rs = $DB->get_recordset_select('user', "id $in", $params);
+        foreach ($rs as $user) {
+            if (!empty($changeable[$user->auth])) {
+                set_user_preference('auth_forcepasswordchange', 1, $user->id);
+                unset($SESSION->bulk_users[$user->id]);
+            } else {
+                echo $OUTPUT->notification(get_string('forcepasswordchangenot', '', fullname($user, true)));
             }
-            $rs->close();
         }
+        $rs->close();
     }
     echo $OUTPUT->notification(get_string('changessaved'), 'notifysuccess');
     echo $OUTPUT->continue_button($return);
index 52127fd..ceb5bcd 100755 (executable)
@@ -25,15 +25,14 @@ if (empty($CFG->messaging)) {
 
 if ($confirm and !empty($msg) and confirm_sesskey()) {
     list($in, $params) = $DB->get_in_or_equal($SESSION->bulk_users);
-    if ($rs = $DB->get_recordset_select('user', "id $in", $params)) {
-        foreach ($rs as $user) {
-            //TODO we should probably support all text formats here or only FORMAT_MOODLE
-            //For now bulk messaging is still using the html editor and its supplying html
-            //so we have to use html format for it to be displayed correctly
-            message_post_message($USER, $user, $msg, FORMAT_HTML, 'direct');
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_select('user', "id $in", $params);
+    foreach ($rs as $user) {
+        //TODO we should probably support all text formats here or only FORMAT_MOODLE
+        //For now bulk messaging is still using the html editor and its supplying html
+        //so we have to use html format for it to be displayed correctly
+        message_post_message($USER, $user, $msg, FORMAT_HTML, 'direct');
     }
+    $rs->close();
     redirect($return);
 }
 
index b451720..c5c5410 100644 (file)
@@ -12,7 +12,7 @@ require_once($CFG->dirroot."/auth/shibboleth/auth.php");
 // Find out whether host supports https
 $protocol = 'http://';
 if ( isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){
-       $protocol = 'https://';
+    $protocol = 'https://';
 }
 
 // Front channel logout
@@ -197,11 +197,12 @@ function LogoutNotification($SessionID){
 /*****************************************************************************/
 
 // Same function as in adodb, but cannot be used for file session for some reason...
-function unserializesession( $serialized_string ){
-    $variables = array( );
-    $a = preg_split( "/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
-    for( $i = 0; $i < count( $a ); $i = $i+2 ) {
-            $variables[$a[$i]] = unserialize( $a[$i+1] );
+function unserializesession($serialized_string) {
+    $variables = array();
+    $a = preg_split("/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
+    $counta = count($a);
+    for ($i = 0; $i < $counta; $i = $i+2) {
+            $variables[$a[$i]] = unserialize($a[$i+1]);
     }
-    return( $variables );
+    return $variables;
 }
index 865430b..3a4e5da 100644 (file)
         }
 
         // Loop through all directory entries, and construct two temporary arrays containing files and sub directories
-        while(false !== ($entry = readdir($handle))) {
+        while (false !== ($entry = readdir($handle))) {
             if (is_dir($dir. $slash .$entry) && $entry != ".." && $entry != "." && $entry != $excludeddir) {
                 $dir_subdirs[] = $dir. $slash .$entry;
             }
         }
 
         // Delete all files in the curent directory return false and halt if a file cannot be removed
-        for($i=0; $i<count($dir_files); $i++) {
+        $countdirfiles = count($dir_files);
+        for ($i=0; $i<$countdirfiles; $i++) {
             chmod($dir_files[$i], $CFG->directorypermissions);
             if (((unlink($dir_files[$i]))) == FALSE) {
                 return false;
         }
 
         // Empty sub directories and then remove the directory
-        for($i=0; $i<count($dir_subdirs); $i++) {
+        $countdirsubdirs = count($dir_subdirs);
+        for($i=0; $i<$countdirsubdirs; $i++) {
             chmod($dir_subdirs[$i], $CFG->directorypermissions);
             if (delete_dir_contents($dir_subdirs[$i]) == FALSE) {
                 return false;
index d9ad84b..654a87f 100644 (file)
                                                 $tagsarr = $info['BLOG']['#']['BLOG_TAGS']['0']['#']['BLOG_TAG'];
                                                 //Iterate over tags
                                                 $tags = array();
-                                                for($i = 0; $i < sizeof($tagsarr); $i++) {
+                                                $sizetagsarr = sizeof($tagsarr);
+                                                for ($i = 0; $i < $sizetagsarr; $i++) {
                                                     $tag_info = $tagsarr[$i];
                                                     ///traverse_xmlize($tag_info);                        //Debug
                                                     ///print_object ($GLOBALS['traverse_array']);         //Debug
index 7905822..35ed7b5 100644 (file)
@@ -14,6 +14,8 @@ class block_course_summary extends block_base {
     function get_content() {
         global $CFG, $OUTPUT;
 
+        require_once($CFG->libdir . '/filelib.php');
+
         if($this->content !== NULL) {
             return $this->content;
         }
index de484a5..cab89ac 100755 (executable)
@@ -42,6 +42,10 @@ class block_html extends block_base {
     }
 
     function get_content() {
+        global $CFG;
+
+        require_once($CFG->libdir . '/filelib.php');
+
         if ($this->content !== NULL) {
             return $this->content;
         }
index 70ddd2b..4fb8972 100644 (file)
@@ -43,8 +43,6 @@ class block_online_users extends block_base {
 
         $groupmembers = "";
         $groupselect  = "";
-        $rafrom       = "";
-        $rawhere      = "";
         $params = array();
 
         //Add this to the SQL to show only group users
@@ -78,22 +76,22 @@ class block_online_users extends block_base {
             $params = array_merge($params, $eparams);
 
             $sql = "SELECT $userfields, MAX(ul.timeaccess) AS lastaccess
-                      FROM {user_lastaccess} ul, {user} u $groupmembers $rafrom
+                      FROM {user_lastaccess} ul $groupmembers, {user} u
                       JOIN ($esqljoin) euj ON euj.id = u.id
                      WHERE ul.timeaccess > $timefrom
                            AND u.id = ul.userid
                            AND ul.courseid = :courseid
-                           $groupselect $rawhere
+                           $groupselect
                   GROUP BY $userfields
                   ORDER BY lastaccess DESC";
 
            $csql = "SELECT u.id
-                      FROM {user_lastaccess} ul, {user} u $groupmembers $rafrom
+                      FROM {user_lastaccess} ul $groupmembers, {user} u
                       JOIN ($esqljoin) euj ON euj.id = u.id
                      WHERE ul.timeaccess > $timefrom
                            AND u.id = ul.userid
                            AND ul.courseid = :courseid
-                           $groupselect $rawhere
+                           $groupselect
                   GROUP BY u.id";
 
             $params['courseid'] = $this->page->course->id;
index e28cee9..52ff8c3 100644 (file)
@@ -26,6 +26,8 @@
 
 defined('MOODLE_INTERNAL') || die();
 
+require_once($CFG->libdir . '/filelib.php');
+
 /**
  * Blog_entry class. Represents an entry in a user's blog. Contains all methods for managing this entry.
  * This class does not contain any HTML-generating code. See blog_listing sub-classes for such code.
diff --git a/brokenfile.php b/brokenfile.php
new file mode 100644 (file)
index 0000000..3153ade
--- /dev/null
@@ -0,0 +1,31 @@
+<?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/>.
+
+/**
+ * This is an empty file which is used in order to prevent
+ * error logs in the serverlog.
+ *
+ * Sometimes developer forgets to postprocess files when saving
+ * submitted form data or forget to replace the file placeholders
+ * with the current area information.
+ *
+ * @package    core
+ * @subpackage file
+ * @copyright  2011 Petr Skoda (http://skodak.org)
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+@header('HTTP/1.0 404 not found');
index 3b6693f..4917100 100644 (file)
@@ -1874,7 +1874,10 @@ class calendar_event {
      * @return string
      */
     protected function get_description() {
-       global $USER;
+        global $USER, $CFG;
+
+        require_once($CFG->libdir . '/filelib.php');
+
         if ($this->_description === null) {
             // Check if we have already resolved the context for this event
             if ($this->editorcontext === null) {
index 28983a9..d5a5ba5 100644 (file)
@@ -1757,17 +1757,16 @@ function rebuild_course_cache($courseid=0, $clearonly=false) {
         @set_time_limit(0);  // this could take a while!   MDL-10954
     }
 
-    if ($rs = $DB->get_recordset("course", $select,'','id,fullname')) {
-        foreach ($rs as $course) {
-            $modinfo = serialize(get_array_of_activities($course->id));
-            $DB->set_field("course", "modinfo", $modinfo, array("id"=>$course->id));
-            // update cached global COURSE too ;-)
-            if ($course->id == $COURSE->id) {
-                $COURSE->modinfo = $modinfo;
-            }
+    $rs = $DB->get_recordset("course", $select,'','id,fullname');
+    foreach ($rs as $course) {
+        $modinfo = serialize(get_array_of_activities($course->id));
+        $DB->set_field("course", "modinfo", $modinfo, array("id"=>$course->id));
+        // update cached global COURSE too ;-)
+        if ($course->id == $COURSE->id) {
+            $COURSE->modinfo = $modinfo;
         }
-        $rs->close();
     }
+    $rs->close();
     // reset the fast modinfo cache
     $reset = 'reset';
     get_fast_modinfo($reset);
index 38a1cfa..44cca9a 100644 (file)
@@ -10,7 +10,7 @@
         $completion = new completion_info($course);
         if ($completion->is_enabled() && $completion->has_criteria()) {
             echo '<p>';
-            echo '<a href="'.$CFG->wwwroot.'/course/report/completion/index.php?coursetest='.$course->id.'">'.get_string('coursecompletion').'</a>';
+            echo '<a href="'.$CFG->wwwroot.'/course/report/completion/index.php?course='.$course->id.'">'.get_string('coursecompletion').'</a>';
             echo '</p>';
         }
     }
index c68c571..d246139 100644 (file)
@@ -72,9 +72,6 @@ if($group===0 && $course->groupmode==SEPARATEGROUPS) {
 $reportsurl=$CFG->wwwroot.'/course/report.php?id='.$course->id;
 $completion=new completion_info($course);
 $activities=$completion->get_activities();
-if(count($activities)==0) {
-    print_error('err_noactivities','completion',$reportsurl);
-}
 
 // Generate where clause
 $where = array();
@@ -96,16 +93,6 @@ $total = $completion->get_num_tracked_users(implode(' AND ', $where), $where_par
 // Total user count
 $grandtotal = $completion->get_num_tracked_users('', array(), $group);
 
-// If no users in this course what-so-ever
-if (!$grandtotal) {
-    echo $OUTPUT->box_start('errorbox errorboxcontent boxaligncenter boxwidthnormal');
-    echo '<p class="nousers">'.get_string('err_nousers','completion').'</p>';
-    echo '<p><a href="'.$CFG->wwwroot.'/course/report.php?id='.$course->id.'">'.get_string('continue').'</a></p>';
-    echo $OUTPUT->box_end();
-    echo $OUTPUT->footer();
-    exit;
-}
-
 // Get user data
 $progress = array();
 
@@ -120,7 +107,7 @@ if ($total) {
     );
 }
 
-if($csv) {
+if($csv && $grandtotal && count($activities)>0) { // Only show CSV if there are some users/actvs
     header('Content-Disposition: attachment; filename=progress.'.
         preg_replace('/[^a-z0-9-]/','_',strtolower($course->shortname)).'.csv');
     // Unicode byte-order mark for Excel
@@ -155,6 +142,19 @@ if($csv) {
     groups_print_course_menu($course,$CFG->wwwroot.'/course/report/progress/?course='.$course->id);
 }
 
+if(count($activities)==0) {
+    echo $OUTPUT->container(get_string('err_noactivities', 'completion'), 'errorbox errorboxcontent');
+    echo $OUTPUT->footer();
+    exit;
+}
+
+// If no users in this course what-so-ever
+if (!$grandtotal) {
+    echo $OUTPUT->container(get_string('err_nousers', 'completion'), 'errorbox errorboxcontent');
+    echo $OUTPUT->footer();
+    exit;
+}
+
 // Build link for paging
 $link = $CFG->wwwroot.'/course/report/progress/?course='.$course->id;
 if (strlen($sort)) {
index 57abd08..b98ced9 100644 (file)
@@ -37,6 +37,9 @@ $allmodules = $DB->get_records('modules', array('visible'=>1));
 $modules = array();
 foreach ($allmodules as $key=>$module) {
     $modname = $module->name;
+    if ($modname === 'label') {
+        continue;
+    }
     $libfile = "$CFG->dirroot/mod/$modname/lib.php";
     if (!file_exists($libfile)) {
         continue;
index 15acd53..b5ab6cd 100644 (file)
@@ -369,11 +369,17 @@ switch ($mode) {
             INNER JOIN
                 {role_assignments} ra
              ON ra.contextid = con.id
+            INNER JOIN
+                {enrol} e
+             ON c.id = e.courseid
+            INNER JOIN
+                {user_enrolments} ue
+             ON e.id = ue.enrolid AND ra.userid = ue.userid
             AND ra.userid = {$user->id}
         ";
 
         // Get roles that are tracked by course completion
-        if ($roles = $CFG->progresstrackedroles) {
+        if ($roles = $CFG->gradebookroles) {
             $sql .= '
                 AND ra.roleid IN ('.$roles.')
             ';
@@ -394,7 +400,8 @@ switch ($mode) {
         }
 
         // Check if result is empty
-        if (!$rs = $DB->get_recordset_sql($sql)) {
+        $rs = $DB->get_recordset_sql($sql);
+        if (!$rs->valid()) {
 
             if ($course->id != 1) {
                 $error = get_string('nocompletions', 'coursereport_completion');
@@ -403,6 +410,7 @@ switch ($mode) {
             }
 
             echo $OUTPUT->notification($error);
+            $rs->close(); // not going to loop (but break), close rs
             break;
         }
 
@@ -431,8 +439,7 @@ switch ($mode) {
                 $courses['unstarted'][] = $c_info;
             }
         }
-
-        $rs->close();
+        $rs->close(); // after loop, close rs
 
         // Loop through course status groups
         foreach ($courses as $type => $infos) {
index a1f946f..a05c20e 100644 (file)
@@ -194,7 +194,9 @@ function send_welcome_messages($orderdata) {
              WHERE e.id IN(" . implode(',', $orderdata) . ")
           ORDER BY e.userid";
 
-    if (!$rs = $DB->get_recordset_sql($sql)) {
+    $rs = $DB->get_recordset_sql($sql);
+    if (!$rs->valid()) {
+        $rs->close(); // Not going to iterate (but exit), close rs
         return;
     }
 
@@ -247,7 +249,7 @@ function send_welcome_messages($orderdata) {
         }
         while ($ei);
 
-        $rs->close();
+        $rs->close(); // end of iteration, close rs
     }
 }
 
index 6924eaa..060e733 100644 (file)
@@ -254,6 +254,7 @@ function enrol_category_sync_full() {
                 $plugin->delete_instance($instance);
             }
         }
+        return;
     }
 
     list($roleids, $params) = $DB->get_in_or_equal(array_keys($roles), SQL_PARAMS_NAMED, 'r000');
index 50f2571..818b05e 100644 (file)
@@ -74,7 +74,7 @@ class enrol_database_plugin extends enrol_plugin {
 
         $localrolefield   = $this->get_config('localrolefield');
         $localuserfield   = $this->get_config('localuserfield');
-        $localcoursefiled = $this->get_config('localcoursefield');
+        $localcoursefield = $this->get_config('localcoursefield');
 
         $unenrolaction    = $this->get_config('unenrolaction');
         $defaultrole      = $this->get_config('defaultrole');
@@ -117,7 +117,7 @@ class enrol_database_plugin extends enrol_plugin {
                         // missing course info
                         continue;
                     }
-                    if (!$course = $DB->get_record('course', array($localcoursefiled=>$fields[$coursefield]), 'id,visible')) {
+                    if (!$course = $DB->get_record('course', array($localcoursefield=>$fields[$coursefield]), 'id,visible')) {
                         continue;
                     }
                     if (!$course->visible and $ignorehidden) {
@@ -265,7 +265,7 @@ class enrol_database_plugin extends enrol_plugin {
 
         $localrolefield   = $this->get_config('localrolefield');
         $localuserfield   = $this->get_config('localuserfield');
-        $localcoursefiled = $this->get_config('localcoursefield');
+        $localcoursefield = $this->get_config('localcoursefield');
 
         $unenrolaction    = $this->get_config('unenrolaction');
         $defaultrole      = $this->get_config('defaultrole');
@@ -308,7 +308,7 @@ class enrol_database_plugin extends enrol_plugin {
 
         // first find all existing courses with enrol instance
         $existing = array();
-        $sql = "SELECT c.id, c.visible, c.$localcoursefiled AS mapping, e.id AS enrolid
+        $sql = "SELECT c.id, c.visible, c.$localcoursefield AS mapping, e.id AS enrolid
                   FROM {course} c
                   JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'database')";
         $rs = $DB->get_recordset_sql($sql); // watch out for idnumber duplicates
@@ -321,11 +321,17 @@ class enrol_database_plugin extends enrol_plugin {
         $rs->close();
 
         // add necessary enrol instances that are not present yet
-        $sql = "SELECT c.id, c.visible, c.$localcoursefiled AS mapping
+        $params = array();
+        $localnotempty = "";
+        if ($localcoursefield !== 'id') {
+            $localnotempty =  "AND c.$localcoursefield <> :lcfe";
+            $params['lcfe'] = $DB->sql_empty();
+        }
+        $sql = "SELECT c.id, c.visible, c.$localcoursefield AS mapping
                   FROM {course} c
              LEFT JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'database')
-                 WHERE e.id IS NULL AND c.$localcoursefiled <> ?";
-        $rs = $DB->get_recordset_sql($sql, array($DB->sql_empty()));
+                 WHERE e.id IS NULL $localnotempty";
+        $rs = $DB->get_recordset_sql($sql, $params);
         foreach ($rs as $course) {
             if (empty($course->mapping)) {
                 continue;
diff --git a/enrol/imsenterprise/db/install.php b/enrol/imsenterprise/db/install.php
new file mode 100644 (file)
index 0000000..0180d16
--- /dev/null
@@ -0,0 +1,78 @@
+<?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/>.
+
+/**
+ * imsenterprise enrolment plugin installation.
+ *
+ * @package    enrol
+ * @subpackage imsenterprise
+ * @copyright  2011 Petr Skoda {@link http://skodak.org}
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+function xmldb_enrol_imsenterprise_install() {
+    global $CFG, $DB;
+
+    // NOTE: this file is executed during upgrade from 1.9.x!
+
+
+    // this plugin does not use the new file api - lets undo the migration
+    $fs = get_file_storage();
+
+    if ($DB->record_exists('course', array('id'=>1))) { //course 1 is hardcoded here intentionally!
+        if ($context = get_context_instance(CONTEXT_COURSE, 1)) {
+            if ($file = $fs->get_file($context->id, 'course', 'legacy', 0, '/', 'imsenterprise-enrol.xml')) {
+                if (!file_exists("$CFG->dataroot/1/imsenterprise-enrol.xml")) {
+                    check_dir_exists($CFG->dataroot.'/');
+                    $file->copy_content_to("$CFG->dataroot/1/imsenterprise-enrol.xml");
+                }
+                $file->delete();
+            }
+        }
+    }
+
+    if (!empty($CFG->enrol_imsfilelocation)) {
+        if (strpos($CFG->enrol_imsfilelocation, "$CFG->dataroot/") === 0) {
+            $location = str_replace("$CFG->dataroot/", '', $CFG->enrol_imsfilelocation);
+            $location = str_replace('\\', '/', $location);
+            $parts = explode('/', $location);
+            $courseid = array_shift($parts);
+            if (is_number($courseid) and $DB->record_exists('course', array('id'=>$courseid))) {
+                if ($context = get_context_instance(CONTEXT_COURSE, $courseid)) {
+                    $file = array_pop($parts);
+                    if ($parts) {
+                        $dir = '/'.implode('/', $parts).'/';
+                    } else {
+                        $dir = '/';
+                    }
+                    if ($file = $fs->get_file($context->id, 'course', 'legacy', 0, $dir, $file)) {
+                        if (!file_exists($CFG->enrol_imsfilelocation)) {
+                            check_dir_exists($CFG->dataroot.'/'.$courseid.$dir);
+                            $file->copy_content_to($CFG->enrol_imsfilelocation);
+                        }
+                        $file->delete();
+                    }
+                }
+            }
+        }
+    }
+
+
+    // TODO: migrate old config settings
+
+}
diff --git a/enrol/imsenterprise/db/upgrade.php b/enrol/imsenterprise/db/upgrade.php
new file mode 100644 (file)
index 0000000..a7d9841
--- /dev/null
@@ -0,0 +1,87 @@
+<?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/>.
+
+/**
+ * This file keeps track of upgrades to the imsenterprise enrolment plugin
+ *
+ * @package    enrol
+ * @subpackage imsenterprise
+ * @copyright  2011 Petr Skoda {@link http://skodak.org
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+function xmldb_enrol_imsenterprise_upgrade($oldversion) {
+    global $CFG, $DB, $OUTPUT;
+
+    $dbman = $DB->get_manager();
+
+
+    //NOTE: this file is not executed during upgrade from 1.9.x!
+
+
+    if ($oldversion < 2011013000) {
+        // this plugin does not use the new file api - lets undo the migration
+
+        $fs = get_file_storage();
+
+        if ($DB->record_exists('course', array('id'=>1))) { //course 1 is hardcoded here intentionally!
+            if ($context = get_context_instance(CONTEXT_COURSE, 1)) {
+                if ($file = $fs->get_file($context->id, 'course', 'legacy', 0, '/', 'imsenterprise-enrol.xml')) {
+                    if (!file_exists("$CFG->dataroot/1/imsenterprise-enrol.xml")) {
+                        check_dir_exists($CFG->dataroot.'/');
+                        $file->copy_content_to("$CFG->dataroot/1/imsenterprise-enrol.xml");
+                    }
+                    $file->delete();
+                }
+            }
+        }
+
+        if (!empty($CFG->enrol_imsfilelocation)) {
+            if (strpos($CFG->enrol_imsfilelocation, "$CFG->dataroot/") === 0) {
+                $location = str_replace("$CFG->dataroot/", '', $CFG->enrol_imsfilelocation);
+                $location = str_replace('\\', '/', $location);
+                $parts = explode('/', $location);
+                $courseid = array_shift($parts);
+                if (is_number($courseid) and $DB->record_exists('course', array('id'=>$courseid))) {
+                    if ($context = get_context_instance(CONTEXT_COURSE, $courseid)) {
+                        $file = array_pop($parts);
+                        if ($parts) {
+                            $dir = '/'.implode('/', $parts).'/';
+                        } else {
+                            $dir = '/';
+                        }
+                        if ($file = $fs->get_file($context->id, 'course', 'legacy', 0, $dir, $file)) {
+                            if (!file_exists($CFG->enrol_imsfilelocation)) {
+                                check_dir_exists($CFG->dataroot.'/'.$courseid.$dir);
+                                $file->copy_content_to($CFG->enrol_imsfilelocation);
+                            }
+                            $file->delete();
+                        }
+                    }
+                }
+            }
+        }
+
+        upgrade_plugin_savepoint(true, 2011013000, 'enrol', 'imsenterprise');
+    }
+
+
+    return true;
+}
+
+
index e0be8af..a955872 100644 (file)
@@ -26,5 +26,5 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version = 2010071200;
+$plugin->version = 2011013000;
 $plugin->cron = 60;
index c977fcf..99f4779 100644 (file)
@@ -179,12 +179,12 @@ class enrol_self_plugin extends enrol_plugin {
             return null;
         }
 
-        if ($instance->enrolstartdate != 0 and $instance->enrolstartdate < time()) {
+        if ($instance->enrolstartdate != 0 and $instance->enrolstartdate > time()) {
             //TODO: inform that we can not enrol yet
             return null;
         }
 
-        if ($instance->enrolenddate != 0 and $instance->enrolenddate > time()) {
+        if ($instance->enrolenddate != 0 and $instance->enrolenddate < time()) {
             //TODO: inform that enrolment is not possible any more
             return null;
         }
index 345d6e5..6ffcaf9 100644 (file)
@@ -23,4 +23,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$string['filtername'] = 'Activity Names Auto-linking';
+$string['filtername'] = 'Activity names auto-linking';
index 711539e..5435f7f 100644 (file)
@@ -23,4 +23,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$string['filtername'] = 'Algebra Notation';
+$string['filtername'] = 'Algebra notation';
index 36c86db..5669366 100644 (file)
@@ -23,5 +23,5 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$string['badwords'] = 'shit,fucked,fucker,fuck,dickhead, dick,cockhead,cock,cunt,asshole,arsehole,prick,bitch, jism,whore,slut,wanker, wank,bastard,dildo,masturbate, orgasm,penis,nigger, pussy,vagina';
-$string['filtername'] = 'Word Censorship';
+$string['badwords'] = 'shit,fucked,fucker,fuck,dickhead,dick,cockhead,cock,cunt,asshole,arsehole,prick,bitch,jism,whore,slut,wanker,wank,bastard,dildo,masturbate,orgasm,penis,nigger,pussy,vagina';
+$string['filtername'] = 'Word censorship';
index 26a3fec..7c86187 100644 (file)
@@ -23,4 +23,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$string['filtername'] = 'Email Protection';
+$string['filtername'] = 'Email protection';
index 59d8151..6a9ec85 100644 (file)
@@ -125,6 +125,9 @@ class filter_mediaplugin extends moodle_text_filter {
 
             $search = '/<a[^>]*href="([^<]*)youtube.com\/v\/([^"]*)"[^>]*>(.*?)<\/a>/is';
             $newtext = preg_replace_callback($search, 'filter_mediaplugin_youtube_callback', $newtext);
+
+            $search = '/<a(\s+[^>]+?)?\s+href="((([^"]+)youtube\.com)\/view_play_list\?p=([^"]*))"[^>]*>(.*?)<\/a>/is';
+            $newtext = preg_replace_callback($search, 'filter_mediaplugin_youtube_playlist_callback', $newtext);
         }
 
         if (!empty($CFG->filter_mediaplugin_enable_img)) {
@@ -349,6 +352,25 @@ function filter_mediaplugin_youtube_callback($link, $autostart=false) {
            '</object>';
 }
 
+/**
+ * Change Youtube playlist into embedded Youtube playlist videos
+ */
+function filter_mediaplugin_youtube_playlist_callback($link, $autostart=false) {
+
+    $site = s($link[4]);
+    $param = s($link[5]);
+    $info = s($link[6]);
+
+    return '<object title="'.$info.'"
+                    class="mediaplugin mediaplugin_youtube" type="application/x-shockwave-flash"
+                    data="'.$site.'youtube.com/p/'.$param.'&amp;fs=1&amp;rel=0" width="400" height="320">'.
+           '<param name="movie" value="'.$site.'youtube.com/p/'.$param.'&amp;fs=1&amp;rel=0" />'.
+           '<param name="FlashVars" value="playerMode=embedded" />'.
+           '<param name="wmode" value="transparent" />'.
+           '<param name="allowFullScreen" value="true" />'.
+           '</object>';
+}
+
 /**
  * Change links to images into embedded images
  */
index fadff70..7ec6bae 100644 (file)
@@ -23,7 +23,7 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$string['filtername'] = 'Multimedia Plugins';
+$string['filtername'] = 'Multimedia plugins';
 $string['flashanimation'] = 'Flash animation';
 $string['flashvideo'] = 'Flash video';
 $string['mp3audio'] = 'MP3 audio';
index 434bab3..f7166ed 100644 (file)
@@ -23,4 +23,4 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$string['filtername'] = 'TeX Notation';
+$string['filtername'] = 'TeX notation';
index 6d66a6e..7a84094 100644 (file)
@@ -634,12 +634,11 @@ class grade_report_user extends grade_report {
                   GROUP BY gg.itemid";
 
             $sum_array = array();
-            if ($sums = $DB->get_recordset_sql($sql, $params)) {
-                foreach ($sums as $itemid => $csum) {
-                    $sum_array[$itemid] = $csum->sum;
-                }
-                $sums->close();
+            $sums = $DB->get_recordset_sql($sql, $params);
+            foreach ($sums as $itemid => $csum) {
+                $sum_array[$itemid] = $csum->sum;
             }
+            $sums->close();
 
             $columncount=0;
 
index c871c79..92e4f9a 100644 (file)
@@ -12,6 +12,7 @@ require_once(dirname(__FILE__) . '/../config.php');
 require_once(dirname(__FILE__) . '/lib.php');
 require_once($CFG->dirroot . '/user/selector/lib.php');
 require_once($CFG->dirroot . '/course/lib.php');
+require_once($CFG->libdir . '/filelib.php');
 
 $groupid = required_param('group', PARAM_INT);
 $cancel  = optional_param('cancel', false, PARAM_BOOL);
index 449ef14..88d348c 100644 (file)
@@ -9,6 +9,7 @@
  */
 
 require_once('../config.php');
+require_once($CFG->libdir . '/filelib.php');
 
 $courseid   = required_param('id', PARAM_INT);
 $groupid    = optional_param('group', 0, PARAM_INT);
@@ -79,26 +80,25 @@ $sql = "SELECT g.id AS groupid, gg.groupingid, u.id AS userid, u.firstname, u.la
          WHERE g.courseid = :courseid $groupwhere $groupingwhere
       ORDER BY g.name, u.lastname, u.firstname";
 
-if ($rs = $DB->get_recordset_sql($sql, $params)) {
-    foreach ($rs as $row) {
-        $user = new stdClass();
-        $user->id        = $row->userid;
-        $user->firstname = $row->firstname;
-        $user->lastname  = $row->lastname;
-        $user->username  = $row->username;
-        $user->idnumber  = $row->idnumber;
-        if (!$row->groupingid) {
-            $row->groupingid = -1;
-        }
-        if (!array_key_exists($row->groupid, $members[$row->groupingid])) {
-            $members[$row->groupingid][$row->groupid] = array();
-        }
-        if(isset($user->id)){
-           $members[$row->groupingid][$row->groupid][] = $user;
-        }
+$rs = $DB->get_recordset_sql($sql, $params);
+foreach ($rs as $row) {
+    $user = new stdClass();
+    $user->id        = $row->userid;
+    $user->firstname = $row->firstname;
+    $user->lastname  = $row->lastname;
+    $user->username  = $row->username;
+    $user->idnumber  = $row->idnumber;
+    if (!$row->groupingid) {
+        $row->groupingid = -1;
+    }
+    if (!array_key_exists($row->groupid, $members[$row->groupingid])) {
+        $members[$row->groupingid][$row->groupid] = array();
+    }
+    if(isset($user->id)){
+        $members[$row->groupingid][$row->groupid][] = $user;
     }
-    $rs->close();
 }
+$rs->close();
 
 navigation_node::override_active_url(new moodle_url('/group/index.php', array('id'=>$courseid)));
 $PAGE->navbar->add(get_string('overview', 'group'));
index 239eb85..ad2e8e4 100644 (file)
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+$string['cliincorrectvalueerror'] = 'Error, valor incorrecte "{$a->value}" per a "{$a->option}"';
+$string['cliincorrectvalueretry'] = 'Valor incorrecte, si us plau, torneu-ho a provar.';
+$string['clitypevalue'] = 'Valor de tipus';
+$string['clitypevaluedefault'] = 'valor de tipus, premeu Intro per fer servir un valor per defecte ({$a})';
+$string['cliunknowoption'] = 'Opcions invàlides: 
+ {$a}
+L\'opció --help us orientarà.';
 $string['environmentrequireinstall'] = 'es requereix instal·lar/habilitar';
 $string['environmentrequireversion'] = 'esteu executant la versió {$a->current} i es requereix la {$a->needed}';
index 3523a68..9635987 100644 (file)
@@ -35,11 +35,11 @@ $string['cannotdownloadzipfile'] = 'Kan ikke downloade zip-fil';
 $string['cannotfindcomponent'] = 'Kan ikke finde komponent';
 $string['cannotsavemd5file'] = 'Kan ikke gemme md5-fil';
 $string['cannotsavezipfile'] = 'Kan ikke gemme zip-fil';
-$string['cannotunzipfile'] = 'Kan ikke unzippe filen';
+$string['cannotunzipfile'] = 'Kan ikke pakke filen ud';
 $string['componentisuptodate'] = 'Komponenten er ajour';
 $string['downloadedfilecheckfailed'] = 'Downloadet fil-tjek fejlede';
-$string['invalidmd5'] = 'Ugyldig md5';
+$string['invalidmd5'] = 'Tjekvariablen var forkert - prøv igen';
 $string['missingrequiredfield'] = 'Der mangler nogle obligatoriske felter';
 $string['wrongdestpath'] = 'Forkert destinationssti';
 $string['wrongsourcebase'] = 'Forkert kilde-URL';
-$string['wrongzipfilename'] = 'Forkert zip-filnavn.';
+$string['wrongzipfilename'] = 'Forkert zip-filnavn';
index 3475113..214d968 100644 (file)
@@ -72,7 +72,7 @@ $string['pathssubdataroot'] = 'Du har brug for et sted, hvor Moodle kan gemme up
 $string['pathssubdirroot'] = 'Den fulde sti til Moodleinstallationen.';
 $string['pathssubwwwroot'] = 'Moodles fulde web-adresse. 
 Det er ikke muligt at komme ind på Moodle fra mere end en adresse.
-Hvis dit websted har flere offentlige adresser skal du opsætte permanent viderestilling på dem alle undtagen fra denne.
+Hvis dit websted har flere offentlige adresser skal du opsætte permanent viderestilling til dem alle undtagen denne.
 Hvis dit websted er tilgængeligt fra både internet og intranet skal du bruge internetadressen her og opsætte din DNS sådan at intranet-brugerne kan bruge den offentlige adresse også.
 Hvis ikke adressen er korrekt må du ændre URL\'en i din browser og genstarte installationen med den rigtige adresse.
 ';
index 11739b9..8f5a3c5 100644 (file)
@@ -32,12 +32,19 @@ $string['admindirname'] = 'ספריית מנהל המערכת';
 $string['availablelangs'] = 'חבילות שפה זמינות';
 $string['chooselanguagehead'] = 'בחר שפה';
 $string['chooselanguagesub'] = 'אנא בחר שפה עבור ההתקנה בלבד. תוכל לבחור בשפה שונה לאתר ולמשתמש באחד מהמסכים הבאים.';
+$string['clialreadyinstalled'] = 'קובץ ה-config.php קיים כבר, אנא השתמש ב- admin/cli/upgrade.php
+אם ברצונך לשדרג את האתר שלך.';
+$string['cliinstallheader'] = 'תוכנית התקנת Moodle {$a} בשורת הפקודה';
 $string['databasehost'] = 'מסד הנתונים המארח (host)';
 $string['databasename'] = 'שם מסד הנתונים';
+$string['databasetypehead'] = 'בחר התקן מסד הנתונים';
 $string['dataroot'] = 'ספריית הנתונים';
 $string['dbprefix'] = 'Tables prefix';
 $string['dirroot'] = 'ספריית ה-Moodle';
 $string['environmenthead'] = 'בודק את הסביבה שלך...';
+$string['environmentsub2'] = 'לכל התקנת Moodle יש דרישות מינימליות לגרסת ה-PHP ומספר הרחבות הכרחי של ה-PHP.
+בדיקת הסביבה הושלמה לפני התקנת כל אחד ושדרוגו.אם הינך מתקשה, אנא פנה למנהל המערכת בכדי להתקין גרסת PHP חדשה או לאפשר הרחבות PHP.';
+$string['errorsinenvironment'] = 'בדיקת הסביבה נכשלה!';
 $string['installation'] = 'התקנה';
 $string['langdownloaderror'] = 'לצערינו השפה "{$a}" לא הותקנה. תהליך ההתקנה ימשיך באנגלית.';
 $string['memorylimithelp'] = '<p>
@@ -62,6 +69,16 @@ $string['memorylimithelp'] = '<p>
 </ol>
 
 </p>';
+$string['paths'] = 'נתיבים';
+$string['pathserrcreatedataroot'] = 'ספריית המידע (Data Directory) - ({$a->dataroot}) לא יכולה להיווצר על-ידי המתקין.';
+$string['pathshead'] = 'נתיבים מאושרים';
+$string['pathsrodataroot'] = 'ספריית המידע (Data Directory) לא ניתנת לכתיבה.';
+$string['pathsroparentdataroot'] = 'ספריית האב - ({$a->parent}) לא ניתנת לכתיבה. 
+ספריית המידע (Data Directory) - ({$a->dataroot}) לא יכולה להיווצר על-ידי המתקין. ';
+$string['pathssubdirroot'] = 'הנתיב המלא לספריית ההתקנה של Moodle';
+$string['pathsunsecuredataroot'] = 'ספריית המידע (Data Directory) לא מאובטחת';
+$string['pathswrongadmindir'] = 'ספריית ה-admin לא קיימת';
+$string['phpextension'] = 'הרחבת PHP {$a}';
 $string['phpversion'] = 'גירסת PHP';
 $string['phpversionhelp'] = '<p>גירסת PHP חייבת להיות לפחות 4.3.0 או 5.1.0 (בגירסאות 5.0.x קיימות מספר בעיות ידועות) </p>
 <p> במערכת שלך פועלת כרגע גירסת {$a} </p>
index 353f2f2..83f4f9f 100644 (file)
@@ -28,5 +28,6 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+$string['parentlanguage'] = 'no';
 $string['thisdirection'] = 'ltr';
 $string['thislanguage'] = 'Norsk - nynorsk';
index 26bd66d..499fe84 100644 (file)
@@ -28,5 +28,9 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+$string['cliincorrectvalueerror'] = 'Błąd, niepoprawna wartość "{$a->value}" dla "{$a->option}"';
+$string['clitypevalue'] = 'typ wartości';
+$string['clitypevaluedefault'] = 'typ wartości, naciśnij Enter, aby użyć wartości domyślnej ({$a})';
+$string['cliyesnoprompt'] = 'wpisz y (czyli tak) lub n (czyli nie)';
 $string['environmentrequireinstall'] = 'jest niezbędnę, żeby było zainstalowane/włączone';
 $string['environmentrequireversion'] = 'wersja {$a->needed} jest niezbędna a ty używasz wersji {$a->current}';
index 8e7cc6c..6c1aa02 100644 (file)
@@ -32,6 +32,8 @@ $string['admindirname'] = 'Katalog admin';
 $string['availablelangs'] = 'Dostępne paczki językowe';
 $string['chooselanguagehead'] = 'Wybierz język';
 $string['chooselanguagesub'] = 'Proszę wybrać język TYLKO do instalacji. Stronę i języki dla użytkowników będzie można wybrać na następnym ekranie.';
+$string['databasehost'] = 'Host bazy danych';
+$string['databasename'] = 'Nazwa bazy danych';
 $string['dataroot'] = 'Katalog z danymi';
 $string['dbprefix'] = 'prefiksy tabel';
 $string['dirroot'] = 'Katalog Moodle';
index 854f87e..73691ec 100644 (file)
@@ -29,7 +29,7 @@
  */
 
 $string['cannotcreatelangdir'] = 'Não é possível criar o directório para pacotes linguísticos';
-$string['cannotcreatetempdir'] = 'Não é possível criar o directório temporal';
+$string['cannotcreatetempdir'] = 'Não é possível criar o directório temporário';
 $string['cannotdownloadcomponents'] = 'Não é possível descarregar a cópia dos componentes';
 $string['cannotdownloadzipfile'] = 'Não é possível descarregar a cópia do ficheiro ZIP';
 $string['cannotfindcomponent'] = 'Não foi encontrado um componente';
index ce40a1a..0d44e8f 100644 (file)
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+$string['clianswerno'] = 'n';
+$string['cliansweryes'] = 'd';
+$string['cliincorrectvalueerror'] = 'Napaka, nepravilna vrednost "{$a->value}" za "{$a->option}"';
+$string['cliincorrectvalueretry'] = 'Nepravilna vrednost, prosimo poskusite znova.';
+$string['clitypevalue'] = 'tip vrednosti';
+$string['clitypevaluedefault'] = 'tip vrednosti, kliknite Enter za uporabo privzete vrednosti ({$a})';
+$string['cliunknowoption'] = 'Neprepoznane možnosti:
+{$a}
+Uporabite --help opcijo.';
+$string['cliyesnoprompt'] = 'pritisnite d (pomeni da) ali n (pomeni ne)';
 $string['environmentrequireinstall'] = 'namestitev oz. omogočanje je zahtevano.';
 $string['environmentrequireversion'] = 'različica {$a->needed} je zahtevana, vi uporabljate {$a->current}';
index b1d59ec..ce096ce 100644 (file)
@@ -155,7 +155,6 @@ $string['configcountry'] = 'If you set a country here, then this country will be
 $string['configcourserequestnotify'] = 'Type username of user to be notified when new course requested.';
 $string['configcourserequestnotify2'] = 'Users who will be notified when a course is requested. Only users who can approve course requests are listed here.';
 $string['configcoursesperpage'] = 'Enter the number of courses to be display per page in a course listing.';
-$string['configcreatornewroleid'] = 'This role is automatically assigned to creators in new courses they created. This role is not assigned if creator already has needed capabilities in parent context.';
 $string['configcronclionly'] = 'If this is set, then the cron script can only be run from the command line instead of via the web.  This overrides the cron password setting below.';
 $string['configcronremotepassword'] = 'This means that the cron.php script cannot be run from a web browser without supplying the password using the following form of URL:<pre>
     http://site.example.com/admin/cron.php?password=opensesame
@@ -386,6 +385,7 @@ $string['courserequestspending'] = 'Pending course requests';
 $string['courses'] = 'Courses';
 $string['coursesperpage'] = 'Courses per page';
 $string['creatornewroleid'] = 'Creators\' role in new courses';
+$string['creatornewroleid_help'] = 'If the user does not already have the permission to manage the new course, the user is automatically enrolled using this role.';
 $string['cron'] = 'Cron';
 $string['cron_help'] = 'The cron.php maintenance script assists some of Moodle\'s modules to perform tasks on a scheduled basis, such as mailing out copies of new forum posts. A mechanism is required to run the script regularly e.g. every 5 minutes.';
 $string['cron_link'] = 'admin/cron';
index 0d88675..00b6a9d 100644 (file)
@@ -62,7 +62,6 @@ $string['completionusegrade_desc'] = 'Student must receive a grade to complete t
 $string['completionview'] = 'Require view';
 $string['completionview_desc'] = 'Student must view this activity to complete it';
 $string['configenablecompletion'] = 'When enabled, this lets you turn on completion tracking (progress) features at course level.';
-$string['configprogresstrackedroles'] = 'Roles that are displayed in the progress-tracking screen. (Usually includes just students and equivalent roles.)';
 $string['csvdownload'] = 'Download in spreadsheet format (UTF-8 .csv)';
 $string['deletecoursecompletiondata'] = 'Delete course completion data';
 $string['enablecompletion'] = 'Enable completion tracking';
@@ -130,7 +129,6 @@ $string['pending']='Pending';
 $string['periodpostenrolment']='Period post enrolment';
 $string['prerequisites']='Prerequisites';
 $string['prerequisitescompleted']='Prerequisites completed';
-$string['progresstrackedroles']='Progress-tracked roles';
 $string['recognitionofpriorlearning']='Recognition of prior learning';
 $string['remainingenroledfortime']='Remaining enrolled for a specified period of time';
 $string['remainingenroleduntildate']='Remaining enrolled until a specified date';
index 87a8287..3322f4e 100755 (executable)
@@ -425,12 +425,11 @@ function get_role_access($roleid, $accessdata = null) {
 
         if (!isset($ACCESSLIB_PRIVATE->croncache[$roleid])) {
             $ACCESSLIB_PRIVATE->croncache[$roleid] = array();
-            if ($rs = $DB->get_recordset_sql($sql, $params)) {
-                foreach ($rs as $rd) {
-                    $ACCESSLIB_PRIVATE->croncache[$roleid][] = $rd;
-                }
-                $rs->close();
+            $rs = $DB->get_recordset_sql($sql, $params);
+            foreach ($rs as $rd) {
+                $ACCESSLIB_PRIVATE->croncache[$roleid][] = $rd;
             }
+            $rs->close();
         }
 
         foreach ($ACCESSLIB_PRIVATE->croncache[$roleid] as $rd) {
@@ -439,14 +438,15 @@ function get_role_access($roleid, $accessdata = null) {
         }
 
     } else {
-        if ($rs = $DB->get_recordset_sql($sql, $params)) {
+        $rs = $DB->get_recordset_sql($sql, $params);
+        if ($rs->valid()) {
             foreach ($rs as $rd) {
                 $k = "{$rd->path}:{$roleid}";
                 $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
             }
             unset($rd);
-            $rs->close();
         }
+        $rs->close();
     }
 
     return $accessdata;
@@ -480,14 +480,15 @@ function get_default_frontpage_role_access($roleid, $accessdata = null) {
           ORDER BY ctx.depth, ctx.path";
     $params = array($roleid, "$base/%");
 
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
+    $rs = $DB->get_recordset_sql($sql, $params);
+    if ($rs->valid()) {
         foreach ($rs as $rd) {
             $k = "{$rd->path}:{$roleid}";
             $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
         }
         unset($rd);
-        $rs->close();
     }
+    $rs->close();
 
     return $accessdata;
 }
@@ -1315,18 +1316,15 @@ function load_subcontext($userid, $context, &$accessdata) {
     $params = array($context->id, $context->path."/%");
 
     $newrdefs = array();
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        foreach ($rs as $rd) {
-            $k = "{$rd->path}:{$rd->roleid}";
-            if (!array_key_exists($k, $newrdefs)) {
-                $newrdefs[$k] = array();
-            }
-            $newrdefs[$k][$rd->capability] = $rd->permission;
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach ($rs as $rd) {
+        $k = "{$rd->path}:{$rd->roleid}";
+        if (!array_key_exists($k, $newrdefs)) {
+            $newrdefs[$k] = array();
         }
-        $rs->close();
-    } else {
-        debugging('Bad SQL encountered!');
+        $newrdefs[$k][$rd->capability] = $rd->permission;
     }
+    $rs->close();
 
     compact_rdefs($newrdefs);
     foreach ($newrdefs as $key=>$value) {
@@ -1389,13 +1387,12 @@ function get_role_access_bycontext($roleid, $context, $accessdata = null) {
           ORDER BY ctx.depth ASC, ctx.path DESC, rc.roleid ASC ";
     $params = array($roleid, $context->path."/%");
 
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        foreach ($rs as $rd) {
-            $k = "{$rd->path}:{$roleid}";
-            $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach ($rs as $rd) {
+        $k = "{$rd->path}:{$roleid}";
+        $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
     }
+    $rs->close();
 
     return $accessdata;
 }
@@ -1615,13 +1612,12 @@ function load_temp_role($context, $roleid, array $accessdata) {
                    AND rc.roleid = ?
           ORDER BY ctx.depth, ctx.path";
     $params = array($context->path."/%", $roleid);
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        foreach ($rs as $rd) {
-            $k = "{$rd->path}:{$roleid}";
-            $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach ($rs as $rd) {
+        $k = "{$rd->path}:{$roleid}";
+        $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
     }
+    $rs->close();
 
     //
     // Say we loaded everything for the course context
@@ -2132,12 +2128,11 @@ function cleanup_contexts() {
     // transactions used only for performance reasons here
     $transaction = $DB->start_delegated_transaction();
 
-    if ($rs = $DB->get_recordset_sql($sql)) {
-        foreach ($rs as $ctx) {
-            delete_context($ctx->contextlevel, $ctx->instanceid);
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql);
+    foreach ($rs as $ctx) {
+        delete_context($ctx->contextlevel, $ctx->instanceid);
     }
+    $rs->close();
 
     $transaction->allow_commit();
     return true;
@@ -5335,16 +5330,13 @@ function get_user_capability_course($capability, $userid = null, $doanything = t
     // Note the result can be used directly as a context (we are going to), the course
     // fields are just appended.
 
-    if (!$rs = $DB->get_recordset_sql("SELECT x.*, c.id AS courseid $fieldlist
-                                         FROM {course} c
-                                        INNER JOIN {context} x
-                                              ON (c.id=x.instanceid AND x.contextlevel=".CONTEXT_COURSE.")
-                                     $orderby")) {
-         return false;
-    }
-
-    // Check capability for each course in turn
     $courses = array();
+    $rs = $DB->get_recordset_sql("SELECT x.*, c.id AS courseid $fieldlist
+                                    FROM {course} c
+                                   INNER JOIN {context} x
+                                         ON (c.id=x.instanceid AND x.contextlevel=".CONTEXT_COURSE.")
+                                $orderby");
+    // Check capability for each course in turn
     foreach ($rs as $coursecontext) {
         if (has_capability($capability, $coursecontext, $userid, $doanything)) {
             // We've got the capability. Make the record look like a course record
@@ -5357,7 +5349,7 @@ function get_user_capability_course($capability, $userid = null, $doanything = t
         }
     }
     $rs->close();
-    return $courses;
+    return empty($courses) ? false : $courses;
 }
 
 /**
index feb5aa6..803dd94 100644 (file)
@@ -228,15 +228,13 @@ class completion_criteria_activity extends completion_criteria {
         ';
 
         // Loop through completions, and mark as complete
-        if ($rs = $DB->get_recordset_sql($sql)) {
-            foreach ($rs as $record) {
+        $rs = $DB->get_recordset_sql($sql);
+        foreach ($rs as $record) {
 
-                $completion = new completion_criteria_completion((array)$record);
-                $completion->mark_complete($record->timecompleted);
-            }
-
-            $rs->close();
+            $completion = new completion_criteria_completion((array)$record);
+            $completion->mark_complete($record->timecompleted);
         }
+        $rs->close();
     }
 
     /**
index afafeb5..2107c21 100644 (file)
@@ -185,14 +185,12 @@ class completion_criteria_course extends completion_criteria {
         ";
 
         // Loop through completions, and mark as complete
-        if ($rs = $DB->get_recordset_sql($sql)) {
-            foreach ($rs as $record) {
-                $completion = new completion_criteria_completion((array)$record);
-                $completion->mark_complete($record->timecompleted);
-            }
-
-            $rs->close();
+        $rs = $DB->get_recordset_sql($sql);
+        foreach ($rs as $record) {
+            $completion = new completion_criteria_completion((array)$record);
+            $completion->mark_complete($record->timecompleted);
         }
+        $rs->close();
     }
 
     /**
index 9551a88..9bd66a2 100644 (file)
@@ -178,15 +178,12 @@ class completion_criteria_date extends completion_criteria {
         ';
 
         // Loop through completions, and mark as complete
-        if ($rs = $DB->get_recordset_sql($sql, array(time()))) {
-            foreach ($rs as $record) {
-
-                $completion = new completion_criteria_completion((array)$record);
-                $completion->mark_complete($record->timeend);
-            }
-
-            $rs->close();
+        $rs = $DB->get_recordset_sql($sql, array(time()));
+        foreach ($rs as $record) {
+            $completion = new completion_criteria_completion((array)$record);
+            $completion->mark_complete($record->timeend);
         }
+        $rs->close();
     }
 
     /**
index 96847ec..bb4ab66 100644 (file)
@@ -219,22 +219,19 @@ class completion_criteria_duration extends completion_criteria {
 
         // Loop through completions, and mark as complete
         $now = time();
-        if ($rs = $DB->get_recordset_sql($sql, array($now, $now))) {
-            foreach ($rs as $record) {
+        $rs = $DB->get_recordset_sql($sql, array($now, $now));
+        foreach ($rs as $record) {
 
-                $completion = new completion_criteria_completion((array)$record);
+            $completion = new completion_criteria_completion((array)$record);
 
-                // Use time start if not 0, otherwise use timeenrolled
-                if ($record->otimestart) {
-                    $completion->mark_complete($record->ctimestart);
-                }
-                else {
-                    $completion->mark_complete($record->ctimeenrolled);
-                }
+            // Use time start if not 0, otherwise use timeenrolled
+            if ($record->otimestart) {
+                $completion->mark_complete($record->ctimestart);
+            } else {
+                $completion->mark_complete($record->ctimeenrolled);
             }
-
-            $rs->close();
         }
+        $rs->close();
     }
 
     /**
index 985942a..00e75ab 100644 (file)
@@ -214,15 +214,12 @@ class completion_criteria_grade extends completion_criteria {
         ';
 
         // Loop through completions, and mark as complete
-        if ($rs = $DB->get_recordset_sql($sql)) {
-            foreach ($rs as $record) {
-
-                $completion = new completion_criteria_completion((array)$record);
-                $completion->mark_complete($record->timecompleted);
-            }
-
-            $rs->close();
+        $rs = $DB->get_recordset_sql($sql);
+        foreach ($rs as $record) {
+            $completion = new completion_criteria_completion((array)$record);
+            $completion->mark_complete($record->timecompleted);
         }
+        $rs->close();
     }
 
     /**
index 0a5ee7f..281a9d7 100644 (file)
@@ -57,8 +57,8 @@ function completion_cron_mark_started() {
         mtrace('Marking users as started');
     }
 
-    if (!empty($CFG->progresstrackedroles)) {
-        $roles = ' AND ra.roleid IN ('.$CFG->progresstrackedroles.')';
+    if (!empty($CFG->gradebookroles)) {
+        $roles = ' AND ra.roleid IN ('.$CFG->gradebookroles.')';
     } else {
         // This causes it to default to everyone (if there is no student role)
         $roles = '';
@@ -118,9 +118,12 @@ function completion_cron_mark_started() {
             userid
     ";
 
-    // Check if result is empty
     $now = time();
-    if (!$rs = $DB->get_recordset_sql($sql, array($now, $now, $now, $now))) {
+    $rs = $DB->get_recordset_sql($sql, array($now, $now, $now, $now));
+
+    // Check if result is empty
+    if (!$rs->valid()) {
+        $rs->close(); // Not going to iterate (but exit), close rs
         return;
     }
 
@@ -267,8 +270,11 @@ function completion_cron_completions() {
             userid
     ';
 
+    $rs = $DB->get_recordset_sql($sql, array('timestarted' => $timestarted));
+
     // Check if result is empty
-    if (!$rs = $DB->get_recordset_sql($sql, array('timestarted' => $timestarted))) {
+    if (!$rs->valid()) {
+        $rs->close(); // Not going to iterate (but exit), close rs
         return;
     }
 
index b020d32..2dcf40f 100644 (file)
@@ -1085,8 +1085,8 @@ class completion_info {
         $return->sql = '';
         $return->data = array();
 
-        if (!empty($CFG->progresstrackedroles)) {
-            $roles = ' AND ra.roleid IN ('.$CFG->progresstrackedroles.')';
+        if (!empty($CFG->gradebookroles)) {
+            $roles = ' AND ra.roleid IN ('.$CFG->gradebookroles.')';
         } else {
             // This causes it to default to everyone (if there is no student role)
             $roles = '';
@@ -1154,7 +1154,7 @@ class completion_info {
      * for all users in a specific group. Intended for use when displaying progress.
      *
      * This includes only users who, in course context, have one of the roles for
-     * which progress is tracked (the progresstrackedroles admin option).
+     * which progress is tracked (the gradebookroles admin option) and are enrolled in course.
      *
      * Users are included (in the first array) even if they do not have
      * completion progress for any course-module.
index cb3d926..79a69e4 100644 (file)
@@ -438,6 +438,12 @@ function get_courses_page($categoryid="all", $sort="c.sortorder ASC", $fields="c
 
     list($ccselect, $ccjoin) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx');
 
+    $totalcount = 0;
+    if (!$limitfrom) {
+        $limitfrom = 0;
+    }
+    $visiblecourses = array();
+
     $sql = "SELECT $fields $ccselect
               FROM {course} c
               $ccjoin
@@ -445,17 +451,8 @@ function get_courses_page($categoryid="all", $sort="c.sortorder ASC", $fields="c
           ORDER BY $sort";
 
     // pull out all course matching the cat
-    if (!$rs = $DB->get_recordset_sql($sql, $params)) {
-        return array();
-    }
-    $totalcount = 0;
-
-    if (!$limitfrom) {
-        $limitfrom = 0;
-    }
-
+    $rs = $DB->get_recordset_sql($sql, $params);
     // iteration will have to be done inside loop to keep track of the limitfrom and limitnum
-    $visiblecourses = array();
     foreach($rs as $course) {
         context_instance_preload($course);
         if ($course->visible <= 0) {
@@ -764,35 +761,35 @@ function get_courses_search($searchterms, $sort='fullname ASC', $page=0, $record
 
     $searchcond = implode(" AND ", $searchcond);
 
+    $courses = array();
+    $c = 0; // counts how many visible courses we've seen
+
+    // Tiki pagination
+    $limitfrom = $page * $recordsperpage;
+    $limitto   = $limitfrom + $recordsperpage;
+
     list($ccselect, $ccjoin) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx');
     $sql = "SELECT c.* $ccselect
               FROM {course} c
            $ccjoin
              WHERE $searchcond AND c.id <> ".SITEID."
           ORDER BY $sort";
-    $courses = array();
-    $c = 0; // counts how many visible courses we've seen
-
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        // Tiki pagination
-        $limitfrom = $page * $recordsperpage;
-        $limitto   = $limitfrom + $recordsperpage;
 
-        foreach($rs as $course) {
-            context_instance_preload($course);
-            $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
-            if ($course->visible || has_capability('moodle/course:viewhiddencourses', $coursecontext)) {
-                // Don't exit this loop till the end
-                // we need to count all the visible courses
-                // to update $totalcount
-                if ($c >= $limitfrom && $c < $limitto) {
-                    $courses[$course->id] = $course;
-                }
-                $c++;
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach($rs as $course) {
+        context_instance_preload($course);
+        $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
+        if ($course->visible || has_capability('moodle/course:viewhiddencourses', $coursecontext)) {
+            // Don't exit this loop till the end
+            // we need to count all the visible courses
+            // to update $totalcount
+            if ($c >= $limitfrom && $c < $limitto) {
+                $courses[$course->id] = $course;
             }
+            $c++;
         }
-        $rs->close();
     }
+    $rs->close();
 
     // our caller expects 2 bits of data - our return
     // array, and an updated $totalcount
@@ -857,16 +854,15 @@ function get_categories($parent='none', $sort=NULL, $shallow=true) {
     }
     $categories = array();
 
-    if( $rs = $DB->get_recordset_sql($sql, $params) ){
-        foreach($rs as $cat) {
-            context_instance_preload($cat);
-            $catcontext = get_context_instance(CONTEXT_COURSECAT, $cat->id);
-            if ($cat->visible || has_capability('moodle/category:viewhiddencategories', $catcontext)) {
-                $categories[$cat->id] = $cat;
-            }
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach($rs as $cat) {
+        context_instance_preload($cat);
+        $catcontext = get_context_instance(CONTEXT_COURSECAT, $cat->id);
+        if ($cat->visible || has_capability('moodle/category:viewhiddencategories', $catcontext)) {
+            $categories[$cat->id] = $cat;
         }
-        $rs->close();
     }
+    $rs->close();
     return $categories;
 }
 
index 7802f23..2088df6 100644 (file)
         <FIELD NAME="tagid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" PREVIOUS="id" NEXT="itemtype"/>
         <FIELD NAME="itemtype" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="tagid" NEXT="itemid"/>
         <FIELD NAME="itemid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" PREVIOUS="itemtype" NEXT="tiuserid"/>
-        <FIELD NAME="tiuserid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" PREVIOUS="itemid" NEXT="ordering"/>
+        <FIELD NAME="tiuserid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="itemid" NEXT="ordering"/>
         <FIELD NAME="ordering" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" COMMENT="Maintains the order of the tag instances of an item" PREVIOUS="tiuserid" NEXT="timemodified"/>
         <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="timemodified" PREVIOUS="ordering"/>
       </FIELDS>
       </KEYS>
     </TABLE>
   </TABLES>
-</XMLDB>
\ No newline at end of file
+</XMLDB>
index efeaf32..ca4b775 100644 (file)
@@ -239,7 +239,7 @@ function xmldb_main_upgrade($oldversion) {
         // add field
         $field = new xmldb_field('tiuserid');
         if (!$dbman->field_exists($table, $field)) {
-            $field->set_attributes(XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, 'itemid');
+            $field->set_attributes(XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, 0, 'itemid');
             $dbman->add_field($table, $field);
         }
         // modify index
@@ -2825,10 +2825,10 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
 
     if ($oldversion < 2010033102.00) {
         // rename course view capability to participate
-        $params = array('view'=>'moodle/course:view', 'participate'=>'moodle/course:participate');
-        $sql = "UPDATE {role_capabilities} SET capability = :participate WHERE capability = :view";
+        $params = array('viewcap'=>'moodle/course:view', 'participatecap'=>'moodle/course:participate');
+        $sql = "UPDATE {role_capabilities} SET capability = :participatecap WHERE capability = :viewcap";
         $DB->execute($sql, $params);
-        $sql = "UPDATE {capabilities} SET name = :participate WHERE name = :view";
+        $sql = "UPDATE {capabilities} SET name = :participatecap WHERE name = :viewcap";
         $DB->execute($sql, $params);
         // note: the view capability is readded again at the end of upgrade, but with different meaning
         upgrade_main_savepoint(true, 2010033102.00);
@@ -5793,8 +5793,8 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
 
         // Check if we need to fix default grade
         if (array_key_exists('defaultgrade', $columns) && (
-                empty($columns['defaultgrade']->unsigned) || 
-                empty($columns['defaultgrade']->not_null) || 
+                empty($columns['defaultgrade']->unsigned) ||
+                empty($columns['defaultgrade']->not_null) ||
                 $columns['defaultgrade']->default_value !== '1.0000000')) {
             // defaultgrade should be unsigned NOT NULL DEFAULT '1.0000000'
             // Fixed in earlier upgrade code
@@ -5899,7 +5899,7 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
         if (array_key_exists('tiuserid', $columns) && !empty($columns['tiuserid']->has_default)) {
             // tiuserid should have no default
             // Fixed in earlier upgrade code
-            $field = new xmldb_field('tiuserid', XMLDB_TYPE_INTEGER, 10, XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, 'itemid');
+            $field = new xmldb_field('tiuserid', XMLDB_TYPE_INTEGER, 10, XMLDB_UNSIGNED, XMLDB_NOTNULL, null, 0, 'itemid');
             $index = new xmldb_index('itemtype-itemid-tagid-tiuserid', XMLDB_INDEX_UNIQUE, array('itemtype', 'itemid', 'tagid', 'tiuserid'));
             if ($dbman->index_exists($table, $index)) {
                 $dbman->drop_index($table, $index);
@@ -5937,35 +5937,72 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
 
         upgrade_main_savepoint(true, 2011011414);
     }
-    
+
     if ($oldversion < 2011011415) {
         //create the rating table indexes if required
         $table = new xmldb_table('rating');
-        
+
         $index = new xmldb_index('itemid', XMLDB_INDEX_NOTUNIQUE, array('itemid'));
         if (!$dbman->index_exists($table, $index)) {
             $dbman->add_index($table, $index);
-            
+
             $key = new xmldb_key('contextid', XMLDB_KEY_FOREIGN, array('contextid'), 'context', array('id'));
             $dbman->add_key($table, $key);
-            
+
             $key = new xmldb_key('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
             $dbman->add_key($table, $key);
         }
-        
+
         upgrade_main_savepoint(true, 2011011415);
     }
 
+    if ($oldversion < 2011012400) {
+        // Clean up the old progress tracked roles setting, no longer used (replaced by enrolment)
+        unset_config('progresstrackedroles');
+        upgrade_main_savepoint(true, 2011012400);
+    }
+
     if ($oldversion < 2011012500) {
+        $columns = $DB->get_columns('tag_instance');
+        $table = new xmldb_table('tag_instance');
+
+        // Drop and recreate index if tiuserid doesn't have default value
+        if (array_key_exists('tiuserid', $columns) && empty($columns['tiuserid']->has_default)) {
+            // Define index itemtype-itemid-tagid-tiuserid (unique) to be dropped form tag_instance
+            $index = new xmldb_index('itemtype-itemid-tagid-tiuserid', XMLDB_INDEX_UNIQUE, array('itemtype', 'itemid', 'tagid', 'tiuserid'));
+            // Conditionally launch drop index itemtype-itemid-tagid-tiuserid
+            if ($dbman->index_exists($table, $index)) {
+                $dbman->drop_index($table, $index);
+            }
+
+            // Changing the default of field tiuserid on table tag_instance to 0
+            $field = new xmldb_field('tiuserid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'itemid');
+
+            // Launch change of default for field tiuserid
+            $dbman->change_field_default($table, $field);
+
+            $index = new xmldb_index('itemtype-itemid-tagid-tiuserid', XMLDB_INDEX_UNIQUE, array('itemtype', 'itemid', 'tagid', 'tiuserid'));
+
+            // Conditionally launch add index itemtype-itemid-tagid-tiuserid
+            if (!$dbman->index_exists($table, $index)) {
+                $dbman->add_index($table, $index);
+            }
+        }
+
+        // Main savepoint reached
+        upgrade_main_savepoint(true, 2011012500);
+    }
+
+    if ($oldversion < 2011012501) {
         //add the index userfieldidx (not unique) to user_info_data
         $table = new xmldb_table('user_info_data');
         $index = new xmldb_index('userfieldidx', XMLDB_INDEX_NOTUNIQUE, array('userid', 'fieldid'));
-        
+
         if (!$dbman->index_exists($table, $index)) {
             $dbman->add_index($table, $index);
         }
 
-        upgrade_main_savepoint(true, 2011012500);
+        upgrade_main_savepoint(true, 2011012501);
     }
 
     return true;
index 0653ef7..27e797f 100644 (file)
@@ -38,15 +38,14 @@ function upgrade_fix_category_depths() {
     $sql = "SELECT c.id
               FROM {course_categories} c
              WHERE c.parent > 0 AND c.parent NOT IN (SELECT pc.id FROM {course_categories} pc)";
-    if ($rs = $DB->get_recordset_sql($sql)) {
-        foreach ($rs as $cat) {
-            $cat->depth  = 1;
-            $cat->path   = '/'.$cat->id;
-            $cat->parent = 0;
-            $DB->update_record('course_categories', $cat);
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql);
+    foreach ($rs as $cat) {
+        $cat->depth  = 1;
+        $cat->path   = '/'.$cat->id;
+        $cat->parent = 0;
+        $DB->update_record('course_categories', $cat);
     }
+    $rs->close();
 
     // now add path and depth to top level categories
     $sql = "UPDATE {course_categories}
@@ -60,14 +59,13 @@ function upgrade_fix_category_depths() {
         $sql = "SELECT c.id, pc.path
                   FROM {course_categories} c, {course_categories} pc
                  WHERE c.parent=pc.id AND c.depth=0 AND pc.depth=?";
-        if ($rs = $DB->get_recordset_sql($sql, array($parentdepth))) {
-            foreach ($rs as $cat) {
-                $cat->depth = $parentdepth+1;
-                $cat->path  = $cat->path.'/'.$cat->id;
-                $DB->update_record('course_categories', $cat);
-            }
-            $rs->close();
+        $rs = $DB->get_recordset_sql($sql, array($parentdepth));
+        foreach ($rs as $cat) {
+            $cat->depth = $parentdepth+1;
+            $cat->path  = $cat->path.'/'.$cat->id;
+            $DB->update_record('course_categories', $cat);
         }
+        $rs->close();
         $parentdepth++;
         if ($parentdepth > 100) {
             //something must have gone wrong - nobody can have more than 100 levels of categories, right?
@@ -246,7 +244,10 @@ function upgrade_migrate_group_icons() {
         upgrade_set_timeout(60); /// Give upgrade at least 60 more seconds
         $pbar->update($i, $count, "Migrated group icons  $i/$count.");
 
-        $context = get_context_instance(CONTEXT_COURSE, $group->courseid);
+        if (!$context = get_context_instance(CONTEXT_COURSE, $group->courseid)) {
+            debugging('Invalid group record (id=' . $group->id . ') found.');
+            continue;
+        }
 
         if ($fs->file_exists($context->id, 'group', 'icon', $group->id, '/', 'f1.jpg')) {
             // already converted!
@@ -378,7 +379,9 @@ function upgrade_migrate_files_blog() {
 
     $count = $DB->count_records_select('post', "module='blog' AND attachment IS NOT NULL AND attachment <> '1'");
 
-    if ($rs = $DB->get_recordset_select('post', "module='blog' AND attachment IS NOT NULL AND attachment <> '1'")) {
+    $rs = $DB->get_recordset_select('post', "module='blog' AND attachment IS NOT NULL AND attachment <> '1'");
+
+    if ($rs->valid()) {
 
         upgrade_set_timeout(60*20); // set up timeout, may also abort execution
 
@@ -419,8 +422,8 @@ function upgrade_migrate_files_blog() {
             $DB->update_record('post', $entry);
             $pbar->update($i, $count, "Migrated blog attachments - $i/$count.");
         }
-        $rs->close();
     }
+    $rs->close();
 
     @rmdir("$CFG->dataroot/blog/attachments/");
     @rmdir("$CFG->dataroot/blog/");
@@ -539,13 +542,12 @@ function upgrade_fix_incorrect_mnethostids() {
 
     $params = array_merge($in_params, array($current_mnet_localhost_host->id));
 
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        foreach ($rs as $rec) {
-            $DB->set_field('user', 'mnethostid', $current_mnet_localhost_host->id, array('id' => $rec->id));
-            upgrade_set_timeout(60); /// Give upgrade at least 60 more seconds
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach ($rs as $rec) {
+        $DB->set_field('user', 'mnethostid', $current_mnet_localhost_host->id, array('id' => $rec->id));
+        upgrade_set_timeout(60); /// Give upgrade at least 60 more seconds
     }
+    $rs->close();
 
     // fix up any host records that have incorrect ids
     $DB->set_field_select('mnet_host', 'applicationid', $moodleapplicationid, 'id = ? or id = ?', array($current_mnet_localhost_host->id, $current_mnet_all_hosts_host->id));
@@ -642,4 +644,4 @@ function update_fix_automated_backup_config() {
 
     unset_config('backup_sche_gradebook_history');
     unset_config('disablescheduleddbackups');
-}
\ No newline at end of file
+}
index 3fa9b29..b21edf1 100644 (file)
@@ -1550,12 +1550,10 @@ abstract class moodle_database {
      * @throws dml_exception if error
      */
     public function record_exists_sql($sql, array $params=null) {
-        if ($mrs = $this->get_recordset_sql($sql, $params, 0, 1)) {
-            $return = $mrs->valid();
-            $mrs->close();
-            return $return;
-        }
-        return false;
+        $mrs = $this->get_recordset_sql($sql, $params, 0, 1);
+        $return = $mrs->valid();
+        $mrs->close();
+        return $return;
     }
 
     /**
index 7da5810..1ab255f 100644 (file)
@@ -968,15 +968,14 @@ class oci_native_moodle_database extends moodle_database {
         $strictness = (int)$strictness;
         if ($strictness == IGNORE_MULTIPLE) {
             // do not limit here - ORA does not like that
-            if (!$rs = $this->get_recordset_sql($sql, $params)) {
-                return false;
-            }
-            foreach ($rs as $result) {
-                $rs->close();
-                return $result;
+            $rs = $this->get_recordset_sql($sql, $params);
+            $result = false;
+            foreach ($rs as $rec) {
+                $result = $rec;
+                break;
             }
             $rs->close();
-            return false;
+            return $result;
         }
         return parent::get_record_sql($sql, $params, $strictness);
     }
index 9af6193..2cc8770 100644 (file)
@@ -287,7 +287,9 @@ abstract class pdo_moodle_database extends moodle_database {
      * @return array of values
      */
     public function get_fieldset_sql($sql, array $params=null) {
-        if(!$rs = $this->get_recordset_sql($sql, $params)) {
+        $rs = $this->get_recordset_sql($sql, $params);
+        if (!$rs->valid()) {
+            $rs->close(); // Not going to iterate (but exit), close rs
             return false;
         }
         $result = array();
@@ -312,7 +314,9 @@ abstract class pdo_moodle_database extends moodle_database {
      * @return array of objects, or empty array if no records were found, or false if an error occurred.
      */
     public function get_records_sql($sql, array $params=null, $limitfrom=0, $limitnum=0) {
-        if(!$rs = $this->get_recordset_sql($sql, $params, $limitfrom, $limitnum)) {
+        $rs = $this->get_recordset_sql($sql, $params, $limitfrom, $limitnum);
+        if (!$rs->valid()) {
+            $rs->close(); // Not going to iterate (but exit), close rs
             return false;
         }
         $objects = array();
index d5f3045..9cc2938 100755 (executable)
@@ -435,25 +435,24 @@ function events_cron($eventname='') {
         $params = array();
     }
 
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        foreach ($rs as $qhandler) {
-            if (isset($failed[$qhandler->handlerid])) {
-                // do not try to dispatch any later events when one already asked for retry or ended with exception
-                continue;
-            }
-            $status = events_process_queued_handler($qhandler);
-            if ($status === false) {
-                // handler is asking for retry, do not send other events to this handler now
-                $failed[$qhandler->handlerid] = $qhandler->handlerid;
-            } else if ($status === NULL) {
-                // means completely broken handler, event data was purged
-                $failed[$qhandler->handlerid] = $qhandler->handlerid;
-            } else {
-                $processed++;
-            }
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach ($rs as $qhandler) {
+        if (isset($failed[$qhandler->handlerid])) {
+            // do not try to dispatch any later events when one already asked for retry or ended with exception
+            continue;
+        }
+        $status = events_process_queued_handler($qhandler);
+        if ($status === false) {
+            // handler is asking for retry, do not send other events to this handler now
+            $failed[$qhandler->handlerid] = $qhandler->handlerid;
+        } else if ($status === NULL) {
+            // means completely broken handler, event data was purged
+            $failed[$qhandler->handlerid] = $qhandler->handlerid;
+        } else {
+            $processed++;
         }
-        $rs->close();
     }
+    $rs->close();
 
     // remove events that do not have any handlers waiting
     $sql = "SELECT eq.id
index 05bc057..adaaedc 100644 (file)
@@ -321,7 +321,7 @@ function file_get_unused_draft_itemid() {
  * @return string if $text was passed in, the rewritten $text is returned. Otherwise NULL.
  */
 function file_prepare_draft_area(&$draftitemid, $contextid, $component, $filearea, $itemid, array $options=null, $text=null) {
-    global $CFG, $USER;
+    global $CFG, $USER, $CFG;
 
     $options = (array)$options;
     if (!isset($options['subdirs'])) {
@@ -351,6 +351,12 @@ function file_prepare_draft_area(&$draftitemid, $contextid, $component, $fileare
                 $fs->create_file_from_storedfile($file_record, $file);
             }
         }
+        if (!is_null($text)) {
+            // at this point there should not be any draftfile links yet,
+            // because this is a new text from database that should still contain the @@pluginfile@@ links
+            // this happens when developers forget to post process the text
+            $text = str_replace("\"$CFG->httpswwwroot/draftfile.php", "\"$CFG->httpswwwroot/brokenfile.php#", $text);
+        }
     } else {
         // nothing to do
     }
index 679cac1..383da52 100644 (file)
@@ -1214,6 +1214,7 @@ class file_storage {
         foreach ($rs as $dir) {
             $this->delete_area_files($dir->contextid, $dir->component, $dir->filearea, $dir->itemid);
         }
+        $rs->close();
         mtrace('done.');
 
         // remove trash pool files once a day
@@ -1226,12 +1227,14 @@ class file_storage {
                     FROM {files} f
                     LEFT OUTER JOIN {context} c ON f.contextid = c.id
                     WHERE c.id IS NULL";
-            if ($rs = $DB->get_recordset_sql($sql)) {
+            $rs = $DB->get_recordset_sql($sql);
+            if ($rs->valid()) {
                 $fs = get_file_storage();
                 foreach ($rs as $ctx) {
                     $fs->delete_area_files($ctx->contextid);
                 }
             }
+            $rs->close();
             mtrace('done.');
 
             mtrace('Deleting trash files... ', '');
index 98cbb6c..abe6120 100644 (file)
@@ -481,7 +481,8 @@ class grade_category extends grade_object {
               ORDER BY g.userid";
 
         // group the results by userid and aggregate the grades for this user
-        if ($rs = $DB->get_recordset_sql($sql, $params)) {
+        $rs = $DB->get_recordset_sql($sql, $params);
+        if ($rs->valid()) {
             $prevuser = 0;
             $grade_values = array();
             $excluded     = array();
@@ -506,9 +507,9 @@ class grade_category extends grade_object {
                     $oldgrade = $used;
                 }
             }
-            $rs->close();
             $this->aggregate_grades($prevuser, $items, $grade_values, $oldgrade, $excluded);//the last one
         }
+        $rs->close();
 
         return true;
     }
index 1b710ae..97c4233 100644 (file)
@@ -390,14 +390,13 @@ class grade_grade extends grade_object {
         $now = time(); // no rounding needed, this is not supposed to be called every 10 seconds
         list($usql, $params) = $DB->get_in_or_equal($items);
         $params[] = $now;
-        if ($rs = $DB->get_recordset_select('grade_grades', "itemid $usql AND locked = 0 AND locktime > 0 AND locktime < ?", $params)) {
-            foreach ($rs as $grade) {
-                $grade_grade = new grade_grade($grade, false);
-                $grade_grade->locked = time();
-                $grade_grade->update('locktime');
-            }
-            $rs->close();
+        $rs = $DB->get_recordset_select('grade_grades', "itemid $usql AND locked = 0 AND locktime > 0 AND locktime < ?", $params);
+        foreach ($rs as $grade) {
+            $grade_grade = new grade_grade($grade, false);
+            $grade_grade->locked = time();
+            $grade_grade->update('locktime');
         }
+        $rs->close();
     }
 
     /**
index f4301ec..630e915 100644 (file)
@@ -1722,7 +1722,8 @@ class grade_item extends grade_object {
         $return = true;
 
         // group the grades by userid and use formula on the group
-        if ($rs = $DB->get_recordset_sql($sql, $params)) {
+        $rs = $DB->get_recordset_sql($sql, $params);
+        if ($rs->valid()) {
             $prevuser = 0;
             $grade_records   = array();
             $oldgrade    = null;
@@ -1740,11 +1741,11 @@ class grade_item extends grade_object {
                 }
                 $grade_records['gi'.$used->itemid] = $used->finalgrade;
             }
-            $rs->close();
             if (!$this->use_formula($prevuser, $grade_records, $useditems, $oldgrade)) {
                 $return = false;
             }
         }
+        $rs->close();
 
         return $return;
     }
index 2f964e2..47e538e 100644 (file)
@@ -276,6 +276,9 @@ class grade_outcome extends grade_object {
      * @return string
      */
     public function get_description() {
+        global $CFG;
+        require_once($CFG->libdir . '/filelib.php');
+
         $options = new stdClass;
         $options->noclean = true;
         $systemcontext = get_context_instance(CONTEXT_SYSTEM);
index 390c288..d9b5fb8 100644 (file)
@@ -313,6 +313,9 @@ class grade_scale extends grade_object {
      * @return string
      */
     public function get_description() {
+        global $CFG;
+        require_once($CFG->libdir . '/filelib.php');
+
         $systemcontext = get_context_instance(CONTEXT_SYSTEM);
         $options = new stdClass;
         $options->noclean = true;
index c0dad20..1fd916f 100644 (file)
@@ -1206,13 +1206,12 @@ function grade_uninstalled_module($modname) {
              WHERE itemtype='mod' AND itemmodule=?";
 
     // go all items for this module and delete them including the grades
-    if ($rs = $DB->get_recordset_sql($sql, array($modname))) {
-        foreach ($rs as $item) {
-            $grade_item = new grade_item($item, false);
-            $grade_item->delete('moduninstall');
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql, array($modname));
+    foreach ($rs as $item) {
+        $grade_item = new grade_item($item, false);
+        $grade_item->delete('moduninstall');
     }
+    $rs->close();
 }
 
 /**
@@ -1260,14 +1259,13 @@ function grade_cron() {
                 SELECT 'x' FROM {grade_items} c WHERE c.itemtype='course' AND c.needsupdate=0 AND c.courseid=i.courseid)";
 
     // go through all courses that have proper final grades and lock them if needed
-    if ($rs = $DB->get_recordset_sql($sql, array($now))) {
-        foreach ($rs as $item) {
-            $grade_item = new grade_item($item, false);
-            $grade_item->locked = $now;
-            $grade_item->update('locktime');
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql, array($now));
+    foreach ($rs as $item) {
+        $grade_item = new grade_item($item, false);
+        $grade_item->locked = $now;
+        $grade_item->update('locktime');
     }
+    $rs->close();
 
     $grade_inst = new grade_grade();
     $fields = 'g.'.implode(',g.', $grade_inst->required_fields);
@@ -1278,14 +1276,13 @@ function grade_cron() {
                 SELECT 'x' FROM {grade_items} c WHERE c.itemtype='course' AND c.needsupdate=0 AND c.courseid=i.courseid)";
 
     // go through all courses that have proper final grades and lock them if needed
-    if ($rs = $DB->get_recordset_sql($sql, array($now))) {
-        foreach ($rs as $grade) {
-            $grade_grade = new grade_grade($grade, false);
-            $grade_grade->locked = $now;
-            $grade_grade->update('locktime');
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql, array($now));
+    foreach ($rs as $grade) {
+        $grade_grade = new grade_grade($grade, false);
+        $grade_grade->locked = $now;
+        $grade_grade->update('locktime');
     }
+    $rs->close();
 
     //TODO: do not run this cleanup every cron invocation
     // cleanup history tables
index 5eaf108..17cba03 100644 (file)
@@ -199,7 +199,10 @@ function groups_get_user_groups($courseid, $userid=0) {
              WHERE gm.userid = ? AND g.courseid = ?";
     $params = array($userid, $courseid);
 
-    if (!$rs = $DB->get_recordset_sql($sql, $params)) {
+    $rs = $DB->get_recordset_sql($sql, $params);
+
+    if (!$rs->valid()) {
+        $rs->close(); // Not going to iterate (but exit), close rs
         return array('0' => array());
     }
 
index dd9bbef..e7fe450 100644 (file)
@@ -8012,14 +8012,13 @@ function notify_login_failures() {
           GROUP BY ip
             HAVING COUNT(*) >= ?";
     $params = array($CFG->lastnotifyfailure, $CFG->notifyloginthreshold);
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        foreach ($rs as $iprec) {
-            if (!empty($iprec->ip)) {
-                set_cache_flag('login_failure_by_ip', $iprec->ip, '1', 0);
-            }
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach ($rs as $iprec) {
+        if (!empty($iprec->ip)) {
+            set_cache_flag('login_failure_by_ip', $iprec->ip, '1', 0);
         }
-        $rs->close();
     }
+    $rs->close();
 
 /// Get all the INFOs with more than notifyloginthreshold failures since lastnotifyfailure
 /// and insert them into the cache_flags temp table
@@ -8030,14 +8029,13 @@ function notify_login_failures() {
           GROUP BY info
             HAVING count(*) >= ?";
     $params = array($CFG->lastnotifyfailure, $CFG->notifyloginthreshold);
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        foreach ($rs as $inforec) {
-            if (!empty($inforec->info)) {
-                set_cache_flag('login_failure_by_info', $inforec->info, '1', 0);
-            }
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach ($rs as $inforec) {
+        if (!empty($inforec->info)) {
+            set_cache_flag('login_failure_by_info', $inforec->info, '1', 0);
         }
-        $rs->close();
     }
+    $rs->close();
 
 /// Now, select all the login error logged records belonging to the ips and infos
 /// since lastnotifyfailure, that we have stored in the cache_flags table
@@ -8063,14 +8061,13 @@ function notify_login_failures() {
     $count = 0;
     $messages = '';
 /// Iterate over the logs recordset
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        foreach ($rs as $log) {
-            $log->time = userdate($log->time);
-            $messages .= get_string('notifyloginfailuresmessage','',$log)."\n";
-            $count++;
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach ($rs as $log) {
+        $log->time = userdate($log->time);
+        $messages .= get_string('notifyloginfailuresmessage','',$log)."\n";
+        $count++;
     }
+    $rs->close();
 
 /// If we haven't run in the last hour and
 /// we have something useful to report and we
index 3a62e6a..795246f 100644 (file)
@@ -2537,7 +2537,7 @@ class settings_navigation extends navigation_node {
      *
      */
     public function initialise() {
-        global $DB;
+        global $DB, $SESSION;
 
         if (during_initial_install()) {
             return false;
@@ -2581,7 +2581,13 @@ class settings_navigation extends navigation_node {
         }
 
         $settings = $this->load_user_settings($this->page->course->id);
-        $admin = $this->load_administration_settings();
+
+        if (isloggedin() && !isguestuser() && (!property_exists($SESSION, 'load_navigation_admin') || $SESSION->load_navigation_admin)) {
+            $admin = $this->load_administration_settings();
+            $SESSION->load_navigation_admin = ($admin->has_children());
+        } else {
+            $admin = false;
+        }
 
         if ($context->contextlevel == CONTEXT_SYSTEM && $admin) {
             $admin->force_open();
@@ -2598,8 +2604,6 @@ class settings_navigation extends navigation_node {
             $this->add(get_string('returntooriginaluser', 'moodle', fullname($realuser, true)), $url, self::TYPE_SETTING, null, null, new pix_icon('t/left', ''));
         }
 
-        // Make sure the first child doesnt have proceed with hr set to true
-
         foreach ($this->children as $key=>$node) {
             if ($node->nodetype != self::NODETYPE_BRANCH || $node->children->count()===0) {
                 $node->remove();
index cbf6ffd..46028a7 100644 (file)
@@ -750,6 +750,9 @@ function setup_get_remote_url() {
 
     } else if (stripos($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false) {
         //nginx - not officially supported
+        if (!isset($_SERVER['SCRIPT_NAME'])) {
+            die('Invalid server configuration detected, please try to add "fastcgi_param SCRIPT_NAME $fastcgi_script_name;" to the nginx server configuration.');
+        }
         $rurl['scheme']   = empty($_SERVER['HTTPS']) ? 'http' : 'https';
         $rurl['fullpath'] = $_SERVER['REQUEST_URI']; // TODO: verify this is always properly encoded
 
index 903c53a..1ec90fa 100644 (file)
@@ -272,6 +272,14 @@ function upgrade_plugins($type, $startcallback, $endcallback, $verbose) {
     foreach ($plugs as $plug=>$fullplug) {
         $component = $type.'_'.$plug; // standardised plugin name
 
+        // check plugin dir is valid name
+        $cplug = strtolower($plug);
+        $cplug = clean_param($cplug, PARAM_SAFEDIR);
+        $cplug = str_replace('-', '', $cplug);
+        if ($plug !== $cplug) {
+            throw new plugin_defective_exception($component, 'Invalid plugin directory name.');
+        }
+
         if (!is_readable($fullplug.'/version.php')) {
             continue;
         }
@@ -279,6 +287,13 @@ function upgrade_plugins($type, $startcallback, $endcallback, $verbose) {
         $plugin = new stdClass();
         require($fullplug.'/version.php');  // defines $plugin with version etc
 
+        // if plugin tells us it's full name we may check the location
+        if (isset($plugin->component)) {
+            if ($plugin->component !== $component) {
+                throw new plugin_defective_exception($component, 'Plugin installed in wrong folder.');
+            }
+        }
+
         if (empty($plugin->version)) {
             throw new plugin_defective_exception($component, 'Missing version value in version.php');
         }
@@ -396,12 +411,21 @@ function upgrade_plugins_modules($startcallback, $endcallback, $verbose) {
 
     foreach ($mods as $mod=>$fullmod) {
 
-        if ($mod == 'NEWMODULE') {   // Someone has unzipped the template, ignore it
+        if ($mod === 'NEWMODULE') {   // Someone has unzipped the template, ignore it
             continue;
         }
 
         $component = 'mod_'.$mod;
 
+        // check module dir is valid name
+        $cmod = strtolower($mod);
+        $cmod = clean_param($cmod, PARAM_SAFEDIR);
+        $cmod = str_replace('-', '', $cmod);
+        $cmod = str_replace('_', '', $cmod); // modules MUST not have '_' in name and never will, sorry
+        if ($mod !== $cmod) {
+            throw new plugin_defective_exception($component, 'Invalid plugin directory name.');
+        }
+
         if (!is_readable($fullmod.'/version.php')) {
             throw new plugin_defective_exception($component, 'Missing version.php');
         }
@@ -409,6 +433,13 @@ function upgrade_plugins_modules($startcallback, $endcallback, $verbose) {
         $module = new stdClass();
         require($fullmod .'/version.php');  // defines $module with version etc
 
+        // if plugin tells us it's full name we may check the location
+        if (isset($module->component)) {
+            if ($module->component !== $component) {
+                throw new plugin_defective_exception($component, 'Plugin installed in wrong folder.');
+            }
+        }
+
         if (empty($module->version)) {
             if (isset($module->version)) {
                 // Version is empty but is set - it means its value is 0 or ''. Let us skip such module.
@@ -426,6 +457,11 @@ function upgrade_plugins_modules($startcallback, $endcallback, $verbose) {
             }
         }
 
+        // all modules must have en lang pack
+        if (!is_readable("$fullmod/lang/en/$mod.php")) {
+            throw new plugin_defective_exception($component, 'Missing mandatory en language pack.');
+        }
+
         $module->name = $mod;   // The name MUST match the directory
 
         $currmodule = $DB->get_record('modules', array('name'=>$module->name));
@@ -548,6 +584,14 @@ function upgrade_plugins_blocks($startcallback, $endcallback, $verbose) {
 
         $component = 'block_'.$blockname;
 
+        // check block dir is valid name
+        $cblockname = strtolower($blockname);
+        $cblockname = clean_param($cblockname, PARAM_SAFEDIR);
+        $cblockname = str_replace('-', '', $cblockname);
+        if ($blockname !== $cblockname) {
+            throw new plugin_defective_exception($component, 'Invalid plugin directory name.');
+        }
+
         if (!is_readable($fullblock.'/version.php')) {
             throw new plugin_defective_exception('block/'.$blockname, 'Missing version.php file.');
         }
@@ -557,6 +601,13 @@ function upgrade_plugins_blocks($startcallback, $endcallback, $verbose) {
         include($fullblock.'/version.php');
         $block = $plugin;
 
+        // if plugin tells us it's full name we may check the location
+        if (isset($block->component)) {
+            if ($block->component !== $component) {
+                throw new plugin_defective_exception($component, 'Plugin installed in wrong folder.');
+            }
+        }
+
         if (!empty($plugin->requires)) {
             if ($plugin->requires > $CFG->version) {
                 throw new upgrade_requires_exception($component, $plugin->version, $CFG->version, $plugin->requires);
index a2470dd..7d2ddc3 100644 (file)
@@ -389,11 +389,13 @@ class moodle_url {
             if (is_int($key)) {
                 throw new coding_exception('Url parameters can not have numeric keys!');
             }
-            if (is_array($value)) {
-                throw new coding_exception('Url parameters values can not be arrays!');
-            }
-            if (is_object($value) and !method_exists($value, '__toString')) {
-                throw new coding_exception('Url parameters values can not be objects, unless __toString() is defined!');
+            if (!is_string($value)) {
+                if (is_array($value)) {
+                    throw new coding_exception('Url parameters values can not be arrays!');
+                }
+                if (is_object($value) and !method_exists($value, '__toString')) {
+                    throw new coding_exception('Url parameters values can not be objects, unless __toString() is defined!');
+                }
             }
             $this->params[$key] = (string)$value;
         }
@@ -486,7 +488,11 @@ class moodle_url {
      */
     public function get_query_string($escaped = true, array $overrideparams = null) {
         $arr = array();
-        $params = $this->merge_overrideparams($overrideparams);
+        if ($overrideparams !== null) {
+            $params = $this->merge_overrideparams($overrideparams);
+        } else {
+            $params = $this->params;
+        }
         foreach ($params as $key => $val) {
            $arr[] = rawurlencode($key)."=".rawurlencode($val);
         }
@@ -1100,6 +1106,13 @@ function format_text($text, $format = FORMAT_MOODLE, $options = NULL, $courseid_
             $text = $filtermanager->filter_text($text, $context, array('originalformat' => $format));
             break;
     }
+    if ($options['filter']) {
+        // at this point there should not be any draftfile links any more,
+        // this happens when developers forget to post process the text.
+        // The only potential problem is that somebody might try to format
+        // the text before storing into database which would be itself big bug.
+        $text = str_replace("\"$CFG->httpswwwroot/draftfile.php", "\"$CFG->httpswwwroot/brokenfile.php#", $text);
+    }
 
     // Warn people that we have removed this old mechanism, just in case they
     // were stupid enough to rely on it.
index 4409bf9..bbb4a93 100644 (file)
@@ -140,7 +140,7 @@ function message_print_participants($context, $courseid, $contactselecturl=null,
 
     $countparticipants = count_enrolled_users($context);
     $participants = get_enrolled_users($context, '', 0, 'u.*', '', $page*MESSAGE_CONTACTS_PER_PAGE, MESSAGE_CONTACTS_PER_PAGE);
-    
+
     $pagingbar = new paging_bar($countparticipants, $page, MESSAGE_CONTACTS_PER_PAGE, $PAGE->url, 'page');
     echo $OUTPUT->render($pagingbar);
 
@@ -269,24 +269,21 @@ function message_get_contacts($user1=null, &$user2=null) {
                  GROUP BY $userfields
                  ORDER BY u.firstname ASC";
 
-    if ($rs = $DB->get_recordset_sql($contactsql, array($user1->id, $user1->id))){
-        foreach($rs as $rd){
-
-            if($rd->lastaccess >= $timefrom){
-                // they have been active recently, so are counted online
-                $onlinecontacts[] = $rd;
+    $rs = $DB->get_recordset_sql($contactsql, array($user1->id, $user1->id));
+    foreach ($rs as $rd) {
+        if ($rd->lastaccess >= $timefrom) {
+            // they have been active recently, so are counted online
+            $onlinecontacts[] = $rd;
 
-            }else{
-                $offlinecontacts[] = $rd;
-            }
+        } else {
+            $offlinecontacts[] = $rd;
+        }
 
-            if (!empty($user2) && $user2->id==$rd->id) {
-                $user2->iscontact = true;
-            }
+        if (!empty($user2) && $user2->id==$rd->id) {
+            $user2->iscontact = true;
         }
-        unset($rd);
-        $rs->close();
     }
+    $rs->close();
 
     // get messages from anyone who isn't in our contact list and count the number
     // of messages we have from each of them
@@ -298,13 +295,11 @@ function message_get_contacts($user1=null, &$user2=null) {
                   GROUP BY $userfields
                   ORDER BY u.firstname ASC";
 
-    if($rs = $DB->get_recordset_sql($strangersql, array($USER->id))){
-        foreach($rs as $rd){
-            $strangers[] = $rd;
-        }
-        unset($rd);
-        $rs->close();
+    $rs = $DB->get_recordset_sql($strangersql, array($USER->id));
+    foreach ($rs as $rd) {
+        $strangers[] = $rd;
     }
+    $rs->close();
 
     return array($onlinecontacts, $offlinecontacts, $strangers);
 }
@@ -527,7 +522,11 @@ function message_print_search($advancedsearch = false, $user1=null) {
 
     $doingsearch = false;
     if ($frm) {
-        $doingsearch = !empty($frm->combinedsubmit) || !empty($frm->keywords) || (!empty($frm->personsubmit) and !empty($frm->name));
+        if (confirm_sesskey()) {
+            $doingsearch = !empty($frm->combinedsubmit) || !empty($frm->keywords) || (!empty($frm->personsubmit) and !empty($frm->name));
+        } else {
+            $frm = false;
+        }
     }
 
     if (!empty($frm->combinedsearch)) {
@@ -1568,7 +1567,7 @@ function message_post_message($userfrom, $userto, $message, $format, $messagetyp
         $eventdata->fullmessage      = $message;
         $eventdata->fullmessagehtml  = '';
     }
-    
+
     $eventdata->fullmessageformat = $format;
     $eventdata->smallmessage     = strip_tags($message);//strip just in case there are is any html that would break the popup notification
 
@@ -1583,7 +1582,7 @@ function message_post_message($userfrom, $userto, $message, $format, $messagetyp
     if (!empty($eventdata->fullmessagehtml)) {
         $eventdata->fullmessagehtml .= "<br /><br />---------------------------------------------------------------------<br />".$emailtagline;
     }
-    
+
     $eventdata->timecreated     = time();
     return message_send($eventdata);
 }
@@ -1769,7 +1768,7 @@ function message_mark_messages_read($touserid, $fromuserid){
 */
 function message_mark_message_read($message, $timeread, $messageworkingempty=false) {
     global $DB;
-    
+
     $message->timeread = $timeread;
 
     $messageid = $message->id;
index e1e6120..edbe055 100644 (file)
@@ -3,7 +3,8 @@
 <table cellpadding="5" class="message_form">
     <tr>
         <td colspan="3" class="message_heading mdl-left">
-            <input type="text" name="combinedsearch" size="40" id="combinedsearch" value="<?php echo $combinedsearchstring; ?>" />
+            <input type="hidden" name="sesskey" value="<?php p(sesskey()); ?>" />
+            <input type="text" name="combinedsearch" size="40" id="combinedsearch" value="<?php p($combinedsearchstring); ?>" />
             <input type="submit" name="combinedsubmit" value="<?php print_string('searchcombined','message') ?>" />
             <a href="index.php?usergroup=<?php echo VIEW_SEARCH ?>&advanced=1" id="advancedcontactsearchlink"><?php print_string('advanced') ?></a>
         </td>
index 48fce17..e6fffc8 100644 (file)
@@ -9,13 +9,15 @@
     </tr>
     <tr>
         <td><label for="name"><?php print_string('name') ?></label></td>
-        <td><input type="text" name="name" size="40" id="name" value="<? echo $personsearch ?>" /></td>
+        <td><input type="text" name="name" size="40" id="name" value="<?php p($personsearch) ?>" /></td>
         <td><input type="submit" name="personsubmit" value="<?php print_string('searchforperson','message') ?>" /></td>
     </tr>
     <tr>
         <td>&nbsp;</td>
         <td colspan="2">
-            <input type="checkbox" name="mycourses" id="mycourses" /><label for="mycourses"><?php print_string('onlymycourses', 'message') ?></label></td>
+            <input type="checkbox" name="mycourses" id="mycourses" /><label for="mycourses"><?php print_string('onlymycourses', 'message') ?></label>
+            <input type="hidden" name="sesskey" value="<?php p(sesskey()); ?>" />
+        </td>
     </tr>
 
     <tr><td colspan="3"></td></tr>
@@ -26,7 +28,7 @@
     </tr>
     <tr>
         <td><label for="keywords"><?php print_string('keywords', 'message') ?></label></td>
-        <td><input type="text" name="keywords" id="keywords" size="40" value="<? echo $messagesearch ?>" /></td>
+        <td><input type="text" name="keywords" id="keywords" size="40" value="<?php p($messagesearch) ?>" /></td>
         <td><input type="submit" name="keywordssubmit" value="<?php print_string('searchmessages','message') ?>" /></td>
     </tr>
 
     <tr><td>&nbsp;</td><td colspan="2"><input type="radio" name="keywordsoption" id="keywordsoption4" value="allusers" /><label for="keywordsoption4"><?php print_string('allusers', 'message') ?></label></td></tr>
     <?php } ?>
 
-<?php
-/* Potential abuse problems - temporarily disabled
-    echo '<tr><td colspan="3"><input type="radio" name="keywordsoption" alt="'.get_string('allstudents', 'message').'" value="courseusers" />'.get_string('allstudents', 'message').'<br />&nbsp;&nbsp;&nbsp;'.$cs.'; </td></tr>';
-
-*/
-
-?>
-
 </table>
 </div>
 
index 53e18c4..221a28f 100644 (file)
@@ -40,6 +40,14 @@ if (!$service->is_available()) {
     die();
 }
 
+$roamingusers = get_users_by_capability(get_system_context(), 'moodle/site:mnetlogintoremote', 'u.id');
+if (empty($roamingusers)) {
+    $capname = get_string('site:mnetlogintoremote', 'role');
+    $url = new moodle_url('/admin/roles/manage.php');
+    echo notice(get_string('noroamingusers', 'mnetservice_enrol', $capname), $url);
+}
+unset($roamingusers);
+
 // remote hosts that may publish remote enrolment service and we are subscribed to it
 $hosts = $service->get_remote_publishers();
 
index 461f777..c39d3c6 100644 (file)
@@ -33,6 +33,7 @@ $string['hostappname'] = 'Application';
 $string['hostname'] = 'Host name';
 $string['hosturl'] = 'Remote host URL';
 $string['nopublishers'] = 'No remote peers available.';
+$string['noroamingusers'] = 'Users require the capability \'{$a}\' in the system context to be enrolled to remote courses, however there are currently no users with this capability. Click the continue button to assign the required capability to one or more roles on your site.';
 $string['otherenrolledusers'] = 'Other enrolled users';
 $string['pluginname'] = 'Remote enrolment service';
 $string['refetch'] = 'Re-fetch up to date state from remote hosts';
index b0c260a..ffe7e6d 100644 (file)
@@ -552,6 +552,10 @@ class mnetservice_enrol_potential_users_selector extends user_selector_base {
         $systemcontext = get_system_context();
         $userids = get_users_by_capability($systemcontext, 'moodle/site:mnetlogintoremote', 'u.id');
 
+        if (empty($userids)) {
+            return array();
+        }
+
         list($usql, $uparams) = $DB->get_in_or_equal(array_keys($userids), SQL_PARAMS_NAMED, 'uid0000');
 
         list($wherecondition, $params) = $this->search_sql($search, 'u');
index d5e891c..2841111 100644 (file)
@@ -49,10 +49,10 @@ function xmldb_assignment_upgrade($oldversion) {
 
         $count = $DB->count_records_sql("SELECT COUNT('x') $sqlfrom");
 
-        if ($rs = $DB->get_recordset_sql("SELECT s.id, s.userid, s.teacher, s.assignment, a.course, cm.id AS cmid $sqlfrom ORDER BY a.course, s.assignment")) {
+        $rs = $DB->get_recordset_sql("SELECT s.id, s.userid, s.teacher, s.assignment, a.course, cm.id AS cmid $sqlfrom ORDER BY a.course, s.assignment");
 
+        if ($rs->valid()) {
             $pbar = new progress_bar('migrateassignmentfiles', 500, true);
-
             $i = 0;
             foreach ($rs as $submission) {
                 $i++;
@@ -122,9 +122,8 @@ function xmldb_assignment_upgrade($oldversion) {
                 @rmdir("$CFG->dataroot/$submission->course/$CFG->moddata/assignment/$submission->assignment");
                 @rmdir("$CFG->dataroot/$submission->course/$CFG->moddata/assignment");
             }
-            $rs->close();
-
         }
+        $rs->close();
 
         upgrade_mod_savepoint(true, 2008081900, 'assignment');
     }
index 634f663..9c51c09 100644 (file)
@@ -2688,7 +2688,8 @@ function assignment_upgrade_grades() {
     $sql = "SELECT a.*, cm.idnumber AS cmidnumber, a.course AS courseid
               FROM {assignment} a, {course_modules} cm, {modules} m
              WHERE m.name='assignment' AND m.id=cm.module AND cm.instance=a.id";
-    if ($rs = $DB->get_recordset_sql($sql)) {
+    $rs = $DB->get_recordset_sql($sql);
+    if ($rs->valid()) {
         // too much debug output
         $pbar = new progress_bar('assignmentupgradegrades', 500, true);
         $i=0;
@@ -2698,9 +2699,9 @@ function assignment_upgrade_grades() {
             assignment_update_grades($assignment);
             $pbar->update($i, $count, "Updating Assignment grades ($i/$count).");
         }
-        $rs->close();
         upgrade_set_timeout(); // reset to default timeout
     }
+    $rs->close();
 }
 
 /**
index c153584..54532f7 100644 (file)
@@ -2,6 +2,8 @@
 require_once($CFG->libdir.'/formslib.php');
 require_once($CFG->libdir . '/portfoliolib.php');
 require_once($CFG->dirroot . '/mod/assignment/lib.php');
+require_once($CFG->libdir . '/filelib.php');
+
 /**
  * Extend the base assignment class for assignments where you upload a single file
  *
index 1d85846..371da31 100644 (file)
@@ -55,16 +55,16 @@ function xmldb_data_upgrade($oldversion) {
     }
 
     if ($oldversion < 2008081400) {
-        if ($rs = $DB->get_recordset('data')) {
-            $pattern = '/\#\#delete\#\#(\s+)\#\#approve\#\#/';
-            $replacement = '##delete##$1##approve##$1##export##';
-            foreach ($rs as $data) {
-                $data->listtemplate = preg_replace($pattern, $replacement, $data->listtemplate);
-                $data->singletemplate = preg_replace($pattern, $replacement, $data->singletemplate);
-                $DB->update_record('data', $data);
-            }
-            $rs->close();
+        $pattern = '/\#\#delete\#\#(\s+)\#\#approve\#\#/';
+        $replacement = '##delete##$1##approve##$1##export##';
+        $rs = $DB->get_recordset('data');
+        foreach ($rs as $data) {
+            $data->listtemplate = preg_replace($pattern, $replacement, $data->listtemplate);
+            $data->singletemplate = preg_replace($pattern, $replacement, $data->singletemplate);
+            $DB->update_record('data', $data);
         }
+        $rs->close();
+
         upgrade_mod_savepoint(true, 2008081400, 'data');
     }
 
@@ -89,8 +89,9 @@ function xmldb_data_upgrade($oldversion) {
 
         $count = $DB->count_records_sql("SELECT COUNT('x') $sqlfrom");
 
-        if ($rs = $DB->get_recordset_sql("SELECT c.id, f.type, r.dataid, c.recordid, f.id AS fieldid, r.userid, c.content, c.content1, d.course, r.userid, cm.id AS cmid $sqlfrom ORDER BY d.course, d.id")) {
+        $rs = $DB->get_recordset_sql("SELECT c.id, f.type, r.dataid, c.recordid, f.id AS fieldid, r.userid, c.content, c.content1, d.course, r.userid, cm.id AS cmid $sqlfrom ORDER BY d.course, d.id");
 
+        if ($rs->valid()) {
             $pbar = new progress_bar('migratedatafiles', 500, true);
 
             $i = 0;
@@ -142,8 +143,9 @@ function xmldb_data_upgrade($oldversion) {
                 @rmdir("$CFG->dataroot/$content->course/$CFG->moddata/data");
                 @rmdir("$CFG->dataroot/$content->course/$CFG->moddata");
             }
-            $rs->close();
         }
+        $rs->close();
+
         upgrade_mod_savepoint(true, 2008091400, 'data');
     }
 
@@ -218,31 +220,31 @@ function xmldb_data_upgrade($oldversion) {
             $lastdataid = null;
             $lastcourseid = null;
             $modcontext = null;
-            if ($rs = $DB->get_recordset_sql($sql)) {
-                foreach($rs as $res) {
-                    if ($res->dataid != $lastdataid || $res->courseid != $lastcourseid) {
-                        $cm = get_coursemodule_from_instance('data', $res->dataid, $res->courseid);
-                        if ($cm) {
-                            $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
-                        }
-                        $lastdataid = $res->dataid;
-                        $lastcourseid = $res->courseid;
-                    }
-                    $cmt = new stdClass();
-                    $cmt->contextid   = $modcontext->id;
-                    $cmt->commentarea = 'database_entry';
-                    $cmt->itemid      = $res->itemid;
-                    $cmt->content     = $res->commentcontent;
-                    $cmt->format      = $res->format;
-                    $cmt->userid      = $res->userid;
-                    $cmt->timecreated = $res->timecreated;
-                    // comments class will throw an exception if error occurs
-                    $cmt_id = $DB->insert_record('comments', $cmt);
-                    if (!empty($cmt_id)) {
-                        $DB->delete_records('data_comments', array('id'=>$res->commentid));
+            $rs = $DB->get_recordset_sql($sql);
+            foreach($rs as $res) {
+                if ($res->dataid != $lastdataid || $res->courseid != $lastcourseid) {
+                    $cm = get_coursemodule_from_instance('data', $res->dataid, $res->courseid);
+                    if ($cm) {
+                        $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
                     }
+                    $lastdataid = $res->dataid;
+                    $lastcourseid = $res->courseid;
+                }
+                $cmt = new stdClass();
+                $cmt->contextid   = $modcontext->id;
+                $cmt->commentarea = 'database_entry';
+                $cmt->itemid      = $res->itemid;
+                $cmt->content     = $res->commentcontent;
+                $cmt->format      = $res->format;
+                $cmt->userid      = $res->userid;
+                $cmt->timecreated = $res->timecreated;
+                // comments class will throw an exception if error occurs
+                $cmt_id = $DB->insert_record('comments', $cmt);
+                if (!empty($cmt_id)) {
+                    $DB->delete_records('data_comments', array('id'=>$res->commentid));
                 }
             }
+            $rs->close();
             // the default exception handler will stop the script if error occurs before
             $dbman->drop_table($table);
         }
index a22aa6b..534e424 100755 (executable)
@@ -361,13 +361,14 @@ class data_field_base {     // Base class for Database Field Types (see field/*/
             $conditions = array('fieldid'=>$this->field->id);
         }
 
-        if ($rs = $DB->get_recordset('data_content', $conditions)) {
+        $rs = $DB->get_recordset('data_content', $conditions);
+        if ($rs->valid()) {
             $fs = get_file_storage();
             foreach ($rs as $content) {
                 $fs->delete_area_files($this->context->id, 'mod_data', 'content', $content->id);
             }
-            $rs->close();
         }
+        $rs->close();
 
         return $DB->delete_records('data_content', $conditions);
     }
@@ -1071,7 +1072,8 @@ function data_upgrade_grades() {
     $sql = "SELECT d.*, cm.idnumber AS cmidnumber, d.course AS courseid
               FROM {data} d, {course_modules} cm, {modules} m
              WHERE m.name='data' AND m.id=cm.module AND cm.instance=d.id";
-    if ($rs = $DB->get_recordset_sql($sql)) {
+    $rs = $DB->get_recordset_sql($sql);
+    if ($rs->valid()) {
         // too much debug output
         $pbar = new progress_bar('dataupgradegrades', 500, true);
         $i=0;
@@ -1081,8 +1083,8 @@ function data_upgrade_grades() {
             data_update_grades($data, 0, false);
             $pbar->update($i, $count, "Updating Database grades ($i/$count).");
         }
-        $rs->close();
     }
+    $rs->close();
 }
 
 /**
@@ -2448,39 +2450,38 @@ function data_reset_userdata($data) {
         $course_context = get_context_instance(CONTEXT_COURSE, $data->courseid);
         $notenrolled = array();
         $fields = array();
-        if ($rs = $DB->get_recordset_sql($recordssql, array($data->courseid))) {
-            foreach ($rs as $record) {
-                if (array_key_exists($record->userid, $notenrolled) or !$record->userexists or $record->userdeleted
-                  or !is_enrolled($course_context, $record->userid)) {
-                    //delete ratings
-                    if (!$cm = get_coursemodule_from_instance('data', $record->dataid)) {
-                        continue;
-                    }
-                    $datacontext = get_context_instance(CONTEXT_MODULE, $cm->id);
-                    $ratingdeloptions->contextid = $datacontext->id;
-                    $ratingdeloptions->itemid = $record->id;
-                    $rm->delete_ratings($ratingdeloptions);
-
-                    $DB->delete_records('comments', array('itemid'=>$record->id, 'commentarea'=>'database_entry'));
-                    $DB->delete_records('data_content', array('recordid'=>$record->id));
-                    $DB->delete_records('data_records', array('id'=>$record->id));
-                    // HACK: this is ugly - the recordid should be before the fieldid!
-                    if (!array_key_exists($record->dataid, $fields)) {
-                        if ($fs = $DB->get_records('data_fields', array('dataid'=>$record->dataid))) {
-                            $fields[$record->dataid] = array_keys($fs);
-                        } else {
-                            $fields[$record->dataid] = array();
-                        }
-                    }
-                    foreach($fields[$record->dataid] as $fieldid) {
-                        fulldelete("$CFG->dataroot/$data->courseid/moddata/data/$record->dataid/$fieldid/$record->id");
+        $rs = $DB->get_recordset_sql($recordssql, array($data->courseid));
+        foreach ($rs as $record) {
+            if (array_key_exists($record->userid, $notenrolled) or !$record->userexists or $record->userdeleted
+              or !is_enrolled($course_context, $record->userid)) {
+                //delete ratings
+                if (!$cm = get_coursemodule_from_instance('data', $record->dataid)) {
+                    continue;
+                }
+                $datacontext = get_context_instance(CONTEXT_MODULE, $cm->id);
+                $ratingdeloptions->contextid = $datacontext->id;
+                $ratingdeloptions->itemid = $record->id;
+                $rm->delete_ratings($ratingdeloptions);
+
+                $DB->delete_records('comments', array('itemid'=>$record->id, 'commentarea'=>'database_entry'));
+                $DB->delete_records('data_content', array('recordid'=>$record->id));
+                $DB->delete_records('data_records', array('id'=>$record->id));
+                // HACK: this is ugly - the recordid should be before the fieldid!
+                if (!array_key_exists($record->dataid, $fields)) {
+                    if ($fs = $DB->get_records('data_fields', array('dataid'=>$record->dataid))) {
+                        $fields[$record->dataid] = array_keys($fs);
+                    } else {
+                        $fields[$record->dataid] = array();
                     }
-                    $notenrolled[$record->userid] = true;
                 }
+                foreach($fields[$record->dataid] as $fieldid) {
+                    fulldelete("$CFG->dataroot/$data->courseid/moddata/data/$record->dataid/$fieldid/$record->id");
+                }
+                $notenrolled[$record->userid] = true;
             }
-            $rs->close();
-            $status[] = array('component'=>$componentstr, 'item'=>get_string('deletenotenrolled', 'data'), 'error'=>false);
         }
+        $rs->close();
+        $status[] = array('component'=>$componentstr, 'item'=>get_string('deletenotenrolled', 'data'), 'error'=>false);
     }
 
     // remove all ratings
index c6ce954..b6311a8 100644 (file)
@@ -128,9 +128,10 @@ class feedback_item_info extends feedback_item_base {
     function print_analysed($item, $itemnr = '', $groupid = false, $courseid = false) {
         $analysed_item = $this->get_analysed($item, $groupid, $courseid);
         $data = $analysed_item->data;
-        if(is_array($data)) {
+        if (is_array($data)) {
             echo '<tr><th colspan="2" align="left">'. $itemnr . '&nbsp;('. $item->label .') ' . $item->name .'</th></tr>';
-            for($i = 0; $i < sizeof($data); $i++) {
+            $sizeofdata = sizeof($data);
+            for ($i = 0; $i < $sizeofdata; $i++) {
                 echo '<tr><td colspan="2" valign="top" align="left">-&nbsp;&nbsp;' . str_replace("\n", '<br />', $data[$i]->show) . '</td></tr>';
             }
         }
@@ -144,11 +145,12 @@ class feedback_item_info extends feedback_item_base {
         $worksheet->write_string($rowOffset, 0, $item->label, $xlsFormats->head2);
         $worksheet->write_string($rowOffset, 1, $item->name, $xlsFormats->head2);
         $data = $analysed_item->data;
-        if(is_array($data)) {
+        if (is_array($data)) {
             // $worksheet->setFormat("<l><ro2><vo>");
             $worksheet->write_string($rowOffset, 2, $data[0]->show, $xlsFormats->value_bold);
             $rowOffset++;
-            for($i = 1; $i < sizeof($data); $i++) {
+            $sizeofdata = sizeof($data);
+            for ($i = 1; $i < $sizeofdata; $i++) {
                 // $worksheet->setFormat("<l><vo>");
                 $worksheet->write_string($rowOffset, 2, $data[$i]->show, $xlsFormats->default);
                 $rowOffset++;
index 5f446b9..ce9b399 100644 (file)
@@ -112,7 +112,9 @@ class feedback_item_label extends feedback_item_base {
     }
 
     function print_item($item){
-        global $DB;
+        global $DB, $CFG;
+
+        require_once($CFG->libdir . '/filelib.php');
 
         //is the item a template?
         if(!$item->feedback AND $item->template) {
index a663c97..ec7102d 100644 (file)
@@ -119,14 +119,15 @@ class feedback_item_multichoice extends feedback_item_base {
 
         $analysedAnswer = array();
         if($info->subtype == 'c') {
-            for($i = 1; $i <= sizeof($answers); $i++) {
+            $sizeofanswers = sizeof($answers);
+            for ($i = 1; $i <= $sizeofanswers; $i++) {
                 $ans = null;
                 $ans->answertext = $answers[$i-1];
                 $ans->answercount = 0;
-                foreach($values as $value) {
+                foreach ($values as $value) {
                     //ist die Antwort gleich dem index der Antworten + 1?
                     $vallist = explode(FEEDBACK_MULTICHOICE_LINE_SEP, $value->value);
-                    foreach($vallist as $val) {
+                    foreach ($vallist as $val) {
                         if ($val == $i) {
                            $ans->answercount++;
                         }
@@ -136,11 +137,12 @@ class feedback_item_multichoice extends feedback_item_base {
                 $analysedAnswer[] = $ans;
             }
         }else {
-            for($i = 1; $i <= sizeof($answers); $i++) {
+            $sizeofanswers = sizeof($answers);
+            for ($i = 1; $i <= $sizeofanswers; $i++) {
                 $ans = null;
                 $ans->answertext = $answers[$i-1];
                 $ans->answercount = 0;
-                foreach($values as $value) {
+                foreach ($values as $value) {
                     //ist die Antwort gleich dem index der Antworten + 1?
                     if ($value->value == $i) {
                         $ans->answercount++;
@@ -159,26 +161,30 @@ class feedback_item_multichoice extends feedback_item_base {
 
         $printval = '';
 
-        if(!isset($value->value)) return $printval;
+        if (!isset($value->value)) {
+            return $printval;
+        }
 
         // @list($presentation) = explode(FEEDBACK_RADIO_ADJUST_SEP, $item->presentation); //remove the adjustment-info
 
         $presentation = explode (FEEDBACK_MULTICHOICE_LINE_SEP, $info->presentation);
 
-        if($info->subtype == 'c') {
+        if ($info->subtype == 'c') {
             $vallist = array_values(explode (FEEDBACK_MULTICHOICE_LINE_SEP, $value->value));
-            for($i = 0; $i < sizeof($vallist); $i++) {
-                for($k = 0; $k < sizeof($presentation); $k++) {
-                    if($vallist[$i] == ($k + 1)) {//Die Werte beginnen bei 1, das Array aber mit 0
+            $sizeofvallist = sizeof($vallist);
+            $sizeofpresentation = sizeof($presentation);
+            for ($i = 0; $i < $sizeofvallist; $i++) {
+                for ($k = 0; $k < $sizeofpresentation; $k++) {
+                    if ($vallist[$i] == ($k + 1)) {//Die Werte beginnen bei 1, das Array aber mit 0
                         $printval .= trim($presentation[$k]) . chr(10);
                         break;
                     }
                 }
             }
-        }else {
+        } else {
             $index = 1;
             foreach($presentation as $pres){
-                if($value->value == $index){
+                if ($value->value == $index){
                     $printval = $pres;
                     break;
                 }
@@ -231,8 +237,9 @@ class feedback_item_multichoice extends feedback_item_base {
         //frage schreiben
         $worksheet->write_string($rowOffset, 0, $item->label, $xlsFormats->head2_green);
         $worksheet->write_string($rowOffset, 1, $analysed_item[1], $xlsFormats->head2_green);
-        if(is_array($data)) {
-            for($i = 0; $i < sizeof($data); $i++) {
+        if (is_array($data)) {
+            $sizeofdata = sizeof($data);
+            for ($i = 0; $i < $sizeofdata; $i++) {
                 $aData = $data[$i];
 
                 // $worksheet->setFormat("<l><f><ro2><vo><c:blue>");
@@ -244,7 +251,7 @@ class feedback_item_multichoice extends feedback_item_base {
                 $worksheet->write_number($rowOffset + 2, $i + 2, $aData->quotient, $xlsFormats->procent);
             }
         }
-        $rowOffset +=;
+        $rowOffset += 3;
         return $rowOffset;
     }
 
@@ -560,14 +567,15 @@ class feedback_item_multichoice extends feedback_item_base {
     }
 
     function item_arrayToString($value) {
-        if(!is_array($value)) {
+        if (!is_array($value)) {
             return $value;
         }
         $retval = '';
         $arrvals = array_values($value);
         $arrvals = clean_param($arrvals, PARAM_INT);  //prevent sql-injection
         $retval = $arrvals[0];
-        for($i = 1; $i < sizeof($arrvals); $i++) {
+        $sizeofarrvals = sizeof($arrvals);
+        for ($i = 1; $i < $sizeofarrvals; $i++) {
             $retval .= FEEDBACK_MULTICHOICE_LINE_SEP.$arrvals[$i];
         }
         return $retval;
index af4cf02..77a2b04 100644 (file)
@@ -120,8 +120,8 @@ class feedback_item_multichoicerated extends feedback_item_base {
         //schleife ueber den Werten und ueber die Antwortmoeglichkeiten
 
         $analysedAnswer = array();
-
-        for($i = 1; $i <= sizeof($lines); $i++) {
+        $sizeoflines = sizeof($lines);
+        for($i = 1; $i <= $sizeoflines; $i++) {
             $item_values = explode(FEEDBACK_MULTICHOICERATED_VALUE_SEP, $lines[$i-1]);
             $ans = null;
             $ans->answertext = $item_values[1];
@@ -215,7 +215,8 @@ class feedback_item_multichoicerated extends feedback_item_base {
         $worksheet->write_string($rowOffset, 1, $analysed_item[1], $xlsFormats->head2);
         if(is_array($data)) {
             $avg = 0.0;
-            for($i = 0; $i < sizeof($data); $i++) {
+            $sizeofdata = sizeof($data);
+            for($i = 0; $i < $sizeofdata; $i++) {
                 $aData = $data[$i];
 
                 // $worksheet->setFormat("<l><f><ro2><vo><c:blue>");
index 161b482..1b4cd13 100644 (file)
@@ -142,7 +142,8 @@ class feedback_item_textarea extends feedback_item_base {
                 $worksheet->write_string($rowOffset, 2, $data[0], $xlsFormats->value_bold);
             }
             $rowOffset++;
-            for($i = 1; $i < sizeof($data); $i++) {
+            $sizeofdata = sizeof($data);
+            for($i = 1; $i < $sizeofdata; $i++) {
                 // $worksheet->setFormat("<l><vo>");
                 $worksheet->write_string($rowOffset, 2, $data[$i], $xlsFormats->default);
                 $rowOffset++;
index e4cb6d2..74f9b88 100644 (file)
@@ -139,7 +139,8 @@ class feedback_item_textfield extends feedback_item_base {
             // $worksheet->setFormat("<l><ro2><vo>");
             $worksheet->write_string($rowOffset, 2, $data[0], $xlsFormats->value_bold);
             $rowOffset++;
-            for($i = 1; $i < sizeof($data); $i++) {
+            $sizeofdata = sizeof($data);
+            for($i = 1; $i < $sizeofdata; $i++) {
                 // $worksheet->setFormat("<l><vo>");
                 $worksheet->write_string($rowOffset, 2, $data[$i], $xlsFormats->default);
                 $rowOffset++;
index 016f079..0be56e1 100644 (file)
@@ -48,7 +48,10 @@ function folder_20_migrate() {
         return;
     }
 
-    if (!$candidates = $DB->get_recordset('resource_old', array('type'=>'directory', 'migrated'=>0))) {
+    $candidates = $DB->get_recordset('resource_old', array('type'=>'directory', 'migrated'=>0));
+
+    if (!$candidates->valid()) {
+        $candidates->close(); // Not going to iterate (but exit), close rs
         return;
     }
 
@@ -101,4 +104,4 @@ function folder_20_migrate() {
 
     // clear all course modinfo caches
     rebuild_course_cache(0, true);
-}
\ No newline at end of file
+}
index a4f3106..3a56755 100644 (file)
@@ -104,7 +104,8 @@ function xmldb_forum_upgrade($oldversion) {
 
         $count = $DB->count_records_sql("SELECT COUNT('x') $sqlfrom");
 
-        if ($rs = $DB->get_recordset_sql("SELECT p.id, p.attachment, p.userid, d.forum, f.course, cm.id AS cmid $sqlfrom ORDER BY f.course, f.id, d.id")) {
+        $rs = $DB->get_recordset_sql("SELECT p.id, p.attachment, p.userid, d.forum, f.course, cm.id AS cmid $sqlfrom ORDER BY f.course, f.id, d.id");
+        if ($rs->valid()) {
 
             $pbar = new progress_bar('migrateforumfiles', 500, true);
 
@@ -146,8 +147,8 @@ function xmldb_forum_upgrade($oldversion) {
                 @rmdir("$CFG->dataroot/$post->course/$CFG->moddata/forum/$post->forum");
                 @rmdir("$CFG->dataroot/$post->course/$CFG->moddata/forum");
             }
-            $rs->close();
         }
+        $rs->close();
 
         upgrade_mod_savepoint(true, 2008081900, 'forum');
     }
index 443bd8c..8d74f63 100644 (file)
@@ -1504,7 +1504,8 @@ function forum_upgrade_grades() {
     $sql = "SELECT f.*, cm.idnumber AS cmidnumber, f.course AS courseid
               FROM {forum} f, {course_modules} cm, {modules} m
              WHERE m.name='forum' AND m.id=cm.module AND cm.instance=f.id";
-    if ($rs = $DB->get_recordset_sql($sql)) {
+    $rs = $DB->get_recordset_sql($sql);
+    if ($rs->valid()) {
         $pbar = new progress_bar('forumupgradegrades', 500, true);
         $i=0;
         foreach ($rs as $forum) {
@@ -1513,8 +1514,8 @@ function forum_upgrade_grades() {
             forum_update_grades($forum, 0, false);
             $pbar->update($i, $count, "Updating Forum grades ($i/$count).");
         }
-        $rs->close();
     }
+    $rs->close();
 }
 
 /**
@@ -3110,6 +3111,8 @@ function forum_print_post($post, $discussion, $forum, &$cm, $course, $ownpost=fa
                           $footer="", $highlight="", $postisread=null, $dummyifcantsee=true, $istracked=null, $return=false) {
     global $USER, $CFG, $OUTPUT;
 
+    require_once($CFG->libdir . '/filelib.php');
+
     // String cache
     static $str;
 
index f6507cf..722bdf1 100644 (file)
@@ -45,7 +45,8 @@ function xmldb_glossary_upgrade($oldversion) {
 
         $count = $DB->count_records_sql("SELECT COUNT('x') $sqlfrom");
 
-        if ($rs = $DB->get_recordset_sql("SELECT ge.id, ge.userid, ge.attachment, ge.glossaryid, ge.sourceglossaryid, g.course, cm.id AS cmid $sqlfrom ORDER BY g.course, g.id")) {
+        $rs = $DB->get_recordset_sql("SELECT ge.id, ge.userid, ge.attachment, ge.glossaryid, ge.sourceglossaryid, g.course, cm.id AS cmid $sqlfrom ORDER BY g.course, g.id");
+        if ($rs->valid()) {
 
             $pbar = new progress_bar('migrateglossaryfiles', 500, true);
 
@@ -92,8 +93,8 @@ function xmldb_glossary_upgrade($oldversion) {
                 @rmdir("$CFG->dataroot/$entry->course/$CFG->moddata/glossary/$entry->glossaryid");
                 @rmdir("$CFG->dataroot/$entry->course/$CFG->moddata/glossary");
             }
-            $rs->close();
         }
+        $rs->close();
 
         upgrade_mod_savepoint(true, 2008081900, 'glossary');
     }
@@ -240,30 +241,30 @@ function xmldb_glossary_upgrade($oldversion) {
             $modcontext     = null;
 
         /// move glossary comments to comments table
-            if ($rs = $DB->get_recordset_sql($sql)) {
-                foreach($rs as $res) {
-                    if ($res->glossaryid != $lastglossaryid || $res->courseid != $lastcourseid) {
-                        $cm = get_coursemodule_from_instance('glossary', $res->glossaryid, $res->courseid);
-                        if ($cm) {
-                            $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
-                        }
-                        $lastglossaryid = $res->glossaryid;
-                        $lastcourseid   = $res->courseid;
-                    }
-                    $cmt = new stdClass();
-                    $cmt->contextid     = $modcontext->id;
-                    $cmt->commentarea   = 'glossary_entry';
-                    $cmt->itemid        = $res->itemid;
-                    $cmt->content       = $res->commentcontent;
-                    $cmt->format        = $res->format;
-                    $cmt->userid        = $res->userid;
-                    $cmt->timecreated    = $res->timemodified;
-                    $cmt_id = $DB->insert_record('comments', $cmt);
-                    if (!empty($cmt_id)) {
-                        $DB->delete_records('glossary_comments', array('id'=>$res->old_id));
+            $rs = $DB->get_recordset_sql($sql);
+            foreach($rs as $res) {
+                if ($res->glossaryid != $lastglossaryid || $res->courseid != $lastcourseid) {
+                    $cm = get_coursemodule_from_instance('glossary', $res->glossaryid, $res->courseid);
+                    if ($cm) {
+                        $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
                     }
+                    $lastglossaryid = $res->glossaryid;
+                    $lastcourseid   = $res->courseid;
+                }
+                $cmt = new stdClass();
+                $cmt->contextid     = $modcontext->id;
+                $cmt->commentarea   = 'glossary_entry';
+                $cmt->itemid        = $res->itemid;
+                $cmt->content       = $res->commentcontent;
+                $cmt->format        = $res->format;
+                $cmt->userid        = $res->userid;
+                $cmt->timecreated    = $res->timemodified;
+                $cmt_id = $DB->insert_record('comments', $cmt);
+                if (!empty($cmt_id)) {
+                    $DB->delete_records('glossary_comments', array('id'=>$res->old_id));
                 }
             }
+            $rs->close();
             $dbman->drop_table($table);
         }
 
index 5b458d4..9a20c88 100644 (file)
@@ -187,7 +187,8 @@ if ($xml = glossary_read_imported_file($result)) {
     }
 
     $xmlentries = $xml['GLOSSARY']['#']['INFO'][0]['#']['ENTRIES'][0]['#']['ENTRY'];
-    for($i = 0; $i < sizeof($xmlentries); $i++) {
+    $sizeofxmlentries = sizeof($xmlentries);
+    for($i = 0; $i < $sizeofxmlentries; $i++) {
         // Inserting the entries
         $xmlentry = $xmlentries[$i];
         unset($newentry);
@@ -247,7 +248,8 @@ if ($xml = glossary_read_imported_file($result)) {
             $importedentries++;
 
             $xmlaliases = @$xmlentry['#']['ALIASES'][0]['#']['ALIAS']; // ignore missing ALIASES
-            for($k = 0; $k < sizeof($xmlaliases); $k++) {
+            $sizeofxmlaliases = sizeof($xmlaliases);
+            for($k = 0; $k < $sizeofxmlaliases; $k++) {
             /// Importing aliases
                 $xmlalias = $xmlaliases[$k];
                 $aliasname = $xmlalias['#']['NAME'][0]['#'];
@@ -263,7 +265,8 @@ if ($xml = glossary_read_imported_file($result)) {
             if (!empty($data->catsincl)) {
                 // If the categories must be imported...
                 $xmlcats = @$xmlentry['#']['CATEGORIES'][0]['#']['CATEGORY']; // ignore missing CATEGORIES
-                for($k = 0; $k < sizeof($xmlcats); $k++) {
+                $sizeofxmlcats = sizeof($xmlcats);
+                for($k = 0; $k < $sizeofxmlcats; $k++) {
                     $xmlcat = $xmlcats[$k];
 
                     $newcat = new stdClass();
index 0f58ef0..498036b 100644 (file)
@@ -506,7 +506,8 @@ function glossary_upgrade_grades() {
     $sql = "SELECT g.*, cm.idnumber AS cmidnumber, g.course AS courseid
               FROM {glossary} g, {course_modules} cm, {modules} m
              WHERE m.name='glossary' AND m.id=cm.module AND cm.instance=g.id";
-    if ($rs = $DB->get_recordset_sql($sql)) {
+    $rs = $DB->get_recordset_sql($sql);
+    if ($rs->valid()) {
         $pbar = new progress_bar('glossaryupgradegrades', 500, true);
         $i=0;
         foreach ($rs as $glossary) {
@@ -515,8 +516,8 @@ function glossary_upgrade_grades() {
             glossary_update_grades($glossary, 0, false);
             $pbar->update($i, $count, "Updating Glossary grades ($i/$count).");
         }
-        $rs->close();
     }
+    $rs->close();
 }
 
 /**
@@ -821,6 +822,10 @@ function glossary_print_entry($course, $cm, $glossary, $entry, $mode='',$hook=''
  * @return void Output is echo'd
  */
 function glossary_print_entry_default ($entry, $glossary, $cm) {
+    global $CFG;
+
+    require_once($CFG->libdir . '/filelib.php');
+
     echo '<h3>'. strip_tags($entry->concept) . ': </h3>';
 
     $definition = $entry->definition;
@@ -2458,7 +2463,8 @@ function glossary_reset_userdata($data) {
 
         $course_context = get_context_instance(CONTEXT_COURSE, $data->courseid);
         $notenrolled = array();
-        if ($rs = $DB->get_recordset_sql($entriessql, $params)) {
+        $rs = $DB->get_recordset_sql($entriessql, $params);
+        if ($rs->valid()) {
             foreach ($rs as $entry) {
                 if (array_key_exists($entry->userid, $notenrolled) or !$entry->userexists or $entry->userdeleted
                   or !is_enrolled($course_context , $entry->userid)) {
@@ -2475,9 +2481,9 @@ function glossary_reset_userdata($data) {
                     }
                 }
             }
-            $rs->close();
             $status[] = array('component'=>$componentstr, 'item'=>get_string('deletenotenrolled', 'glossary'), 'error'=>false);
         }
+        $rs->close();
     }
 
     // remove all ratings
index 8dac644..9703a06 100644 (file)
@@ -3,6 +3,7 @@ define('AJAX_SCRIPT', true);
 
 require_once('../../config.php');
 require_once('lib.php');
+require_once($CFG->libdir . '/filelib.php');
 
 $concept  = optional_param('concept', '', PARAM_CLEAN);
 $courseid = optional_param('courseid', 0, PARAM_INT);
@@ -66,7 +67,7 @@ if ($entries) {
         $options = new stdClass();
         $options->para = false;
         $options->trusted = $entry->definitiontrust;
-        $options->context = $context; 
+        $options->context = $context;
         $entries[$key]->definition = format_text($definition, $entry->definitionformat, $options);
 
         $entries[$key]->footer = "<p style=\"text-align:right\">&raquo;&nbsp;<a href=\"$CFG->wwwroot/mod/glossary/view.php?g=$entry->glossaryid\">".format_string($entry->glossaryname,true)."</a></p>";
index e905f39..5138318 100644 (file)
@@ -49,7 +49,9 @@ function imscp_20_migrate() {
         return;
     }
 
-    if (!$candidates = $DB->get_recordset('resource_old', array('type'=>'ims', 'migrated'=>0))) {
+    $candidates = $DB->get_recordset('resource_old', array('type'=>'ims', 'migrated'=>0));
+    if (!$candidates->valid()) {
+        $candidates->close(); // Not going to iterate (but exit), close rs
         return;
     }
 
@@ -133,7 +135,6 @@ function imscp_20_migrate() {
             fulldelete($root);
         }
     }
-
     $candidates->close();
 
     // clear all course modinfo caches
index a80a08d..1f77822 100644 (file)
@@ -181,7 +181,7 @@ function label_reset_userdata($data) {
  *
  * @return array
  */
-function lable_get_extra_capabilities() {
+function label_get_extra_capabilities() {
     return array('moodle/site:accessallgroups');
 }
 
index 982ee40..243ff3d 100644 (file)
@@ -110,7 +110,8 @@ if ($data = $mform->get_data()) {
             // want to allow <b><i>(maybe more) tags but when we do that
             // the preg_match messes up.
             preg_match_all("/(<([\w]+)[^>]*>)([^<\\2>]*)(<\/\\2>)/", $string, $matches);
-            for($i = 0; $i < count($matches[1]); $i++) { // go through all of our div matches
+            $countmatches = count($matches[1]);
+            for($i = 0; $i < $countmatches; $i++) { // go through all of our div matches
 
                 $class = lesson_importppt_isolate_class($matches[1][$i]); // first step in isolating the class
 
@@ -207,4 +208,4 @@ echo $OUTPUT->heading_with_help($strimportppt, 'importppt', 'lesson');
 echo $OUTPUT->box_start('generalbox boxaligncenter');
 $mform->display();
 echo $OUTPUT->box_end();
-echo $OUTPUT->footer();
\ No newline at end of file
+echo $OUTPUT->footer();
index 3bfaa41..ed5a0a0 100644 (file)
@@ -429,7 +429,8 @@ function lesson_upgrade_grades() {
     $sql = "SELECT l.*, cm.idnumber AS cmidnumber, l.course AS courseid
               FROM {lesson} l, {course_modules} cm, {modules} m
              WHERE m.name='lesson' AND m.id=cm.module AND cm.instance=l.id";
-    if ($rs = $DB->get_recordset_sql($sql)) {
+    $rs = $DB->get_recordset_sql($sql);
+    if ($rs->valid()) {
         $pbar = new progress_bar('lessonupgradegrades', 500, true);
         $i=0;
         foreach ($rs as $lesson) {
@@ -438,8 +439,8 @@ function lesson_upgrade_grades() {
             lesson_update_grades($lesson, 0, false);
             $pbar->update($i, $count, "Updating Lesson grades ($i/$count).");
         }
-        $rs->close();
     }
+    $rs->close();
 }
 
 /**
index 0f7881c..f521330 100644 (file)
@@ -31,6 +31,7 @@ defined('MOODLE_INTERNAL') || die();
 /** Include the files that are required by this module */
 require_once($CFG->dirroot.'/course/moodleform_mod.php');
 require_once($CFG->dirroot . '/mod/lesson/lib.php');
+require_once($CFG->libdir . '/filelib.php');
 
 /** This page */
 define('LESSON_THISPAGE', 0);
index 3a159b6..3ffeb7a 100644 (file)
@@ -51,24 +51,22 @@ function page_20_migrate() {
 
     $fs = get_file_storage();
 
-    if ($candidates = $DB->get_recordset('resource_old', array('type'=>'html', 'migrated'=>0))) {
-        foreach ($candidates as $candidate) {
-            page_20_migrate_candidate($candidate, $fs, FORMAT_HTML);
-        }
-        $candidates->close();
+    $candidates = $DB->get_recordset('resource_old', array('type'=>'html', 'migrated'=>0));
+    foreach ($candidates as $candidate) {
+        page_20_migrate_candidate($candidate, $fs, FORMAT_HTML);
     }
-
-    if ($candidates = $DB->get_recordset('resource_old', array('type'=>'text', 'migrated'=>0))) {
-        foreach ($candidates as $candidate) {
-            //there might be some rubbish instead of format int value
-            $format = (int)$candidate->reference;
-            if ($format < 0 or $format > 4) {
-                $format = FORMAT_MOODLE;
-            }
-            page_20_migrate_candidate($candidate, $fs, $format);
+    $candidates->close();
+
+    $candidates = $DB->get_recordset('resource_old', array('type'=>'text', 'migrated'=>0));
+    foreach ($candidates as $candidate) {
+        //there might be some rubbish instead of format int value
+        $format = (int)$candidate->reference;
+        if ($format < 0 or $format > 4) {
+            $format = FORMAT_MOODLE;
         }
-        $candidates->close();
+        page_20_migrate_candidate($candidate, $fs, $format);
     }
+    $candidates->close();
 
     // clear all course modinfo caches
     rebuild_course_cache(0, true);
index 7580482..adf3a44 100644 (file)
@@ -375,14 +375,14 @@ class quiz {
         $this->pagequestionids = array();
 
         // Get the appropriate layout string (from quiz or attempt).
-        $layout = $this->get_layout_string();
+        $layout = quiz_clean_layout($this->get_layout_string(), true);
         if (empty($layout)) {
             // Nothing to do.
             return;
         }
 
         // Break up the layout string into pages.
-        $pagelayouts = explode(',0', quiz_clean_layout($layout, true));
+        $pagelayouts = explode(',0', $layout);
 
         // Strip off any empty last page (normally there is one).
         if (end($pagelayouts) == '') {
index 631f95b..22e1229 100644 (file)
@@ -92,8 +92,8 @@
                 SELECT qg.quiz, qg.grade
                 FROM {quiz_grades} qg
                 JOIN {quiz} q ON q.id = qg.quiz
-                WHERE q.course = ?',
-                $course->id);
+                WHERE q.course = ? AND qg.userid = ?',
+                array($course->id, $USER->id));
     }
 
     $table = new html_table();
index a3078e5..0030c2a 100644 (file)
@@ -604,7 +604,8 @@ function quiz_upgrade_grades() {
     $sql = "SELECT a.*, cm.idnumber AS cmidnumber, a.course AS courseid
               FROM {quiz} a, {course_modules} cm, {modules} m
              WHERE m.name='quiz' AND m.id=cm.module AND cm.instance=a.id";
-    if ($rs = $DB->get_recordset_sql($sql)) {
+    $rs = $DB->get_recordset_sql($sql);
+    if ($rs->valid()) {
         $pbar = new progress_bar('quizupgradegrades', 500, true);
         $i=0;
         foreach ($rs as $quiz) {
@@ -613,8 +614,8 @@ function quiz_upgrade_grades() {
             quiz_update_grades($quiz, 0, false);
             $pbar->update($i, $count, "Updating Quiz grades ($i/$count).");
         }
-        $rs->close();
     }
+    $rs->close();
 }
 
 /**
index db4f1f0..c11641d 100644 (file)
@@ -48,6 +48,7 @@ require_once($CFG->dirroot . '/mod/quiz/accessrules.php');
 require_once($CFG->dirroot . '/mod/quiz/attemptlib.php');
 require_once($CFG->dirroot . '/question/editlib.php');
 require_once($CFG->libdir  . '/eventslib.php');
+require_once($CFG->libdir . '/filelib.php');
 
 /// Constants ///////////////////////////////////////////////////////////////////
 
@@ -1031,7 +1032,7 @@ function quiz_send_confirmation($a) {
     $eventdata->smallmessage      = get_string('emailconfirmsmall', 'quiz', $a);
     $eventdata->contexturl        = $a->quizurl;
     $eventdata->contexturlname    = $a->quizname;
-    
+
     return message_send($eventdata);
 }
 
index 2e7e543..acb9bd9 100644 (file)
@@ -48,8 +48,8 @@ $string['optonlyregradedattempts'] = 'that have been regraded / are marked as ne
 $string['overview'] = 'Grades';
 $string['overviewdownload'] = 'Overview download';
 $string['overviewreport'] = 'Grades report';
-$string['overviewreportgraph'] = 'Overall Number of Students Achieving Grade Ranges';
-$string['overviewreportgraphgroup'] = 'Number of Students in Group \'{$a}\' Achieving Grade Ranges';
+$string['overviewreportgraph'] = 'Overall number of students achieving grade ranges';
+$string['overviewreportgraphgroup'] = 'Number of students in group \'{$a}\' achieving grade ranges';
 $string['pagesize'] = 'Page size';
 $string['preferencespage'] = 'Preferences just for this page';
 $string['preferencessave'] = 'Show report';
index 74a0ef5..b016a2a 100644 (file)
@@ -310,7 +310,10 @@ function quiz_report_highlighting_grading_method($quiz, $qmsubselect, $qmfilter)
  * @return string the comment that corresponds to this grade (empty string if there is not one.
  */
 function quiz_report_feedback_for_grade($grade, $quizid, $context) {
-    global $DB;
+    global $DB, $CFG;
+
+    require_once($CFG->libdir . '/filelib.php');
+
     static $feedbackcache = array();
     if (!isset($feedbackcache[$quizid])){
         $feedbackcache[$quizid] = $DB->get_records('quiz_feedback', array('quizid' => $quizid));
index e8d60bc..45dc6b7 100644 (file)
@@ -24,7 +24,7 @@
  */
 
 $string['cannotloadoptions'] = 'Could not load question options';
-$string['pagesize'] = 'Page Size';
+$string['pagesize'] = 'Page size';
 $string['reportresponses'] = 'Responses';
 $string['responses'] = 'Responses';
 $string['responsesdownload'] = 'Responses download';
index 05bb69d..c64e535 100644 (file)
@@ -37,8 +37,8 @@ $string['cic'] = 'Coefficient of internal consistency (for {$a})';
 $string['count'] = 'Count';
 $string['coursename'] = 'Course name';
 $string['detailedanalysis'] = 'More detailed analysis of the responses to this question';
-$string['discrimination_index'] = 'Discrimination Index';
-$string['discriminative_efficiency'] = 'Discriminative Efficiency';
+$string['discrimination_index'] = 'Discrimination index';
+$string['discriminative_efficiency'] = 'Discriminative efficiency';
 $string['downloadeverything'] = 'Download full report as';
 $string['duration'] = 'Open for';
 $string['effective_weight'] = 'Effective weight';
@@ -70,10 +70,10 @@ $string['optiongrade'] = 'Partial credit';
 $string['position'] = 'Position';
 $string['positions'] = 'Position(s)';
 $string['questioninformation'] = 'Question information';
-$string['questionname'] = 'Question Name';
+$string['questionname'] = 'Question name';
 $string['questionnumber'] = 'Q#';
 $string['questionstatistics'] = 'Question statistics';
-$string['questiontype'] = 'Question Type';
+$string['questiontype'] = 'Question type';
 $string['quizinformation'] = 'Quiz information';
 $string['quizname'] = 'Quiz name';
 $string['quizoverallstatistics'] = 'Quiz overall statistics';
@@ -90,4 +90,4 @@ $string['statistics:componentname'] = 'Quiz statistics report';
 $string['statisticsreport'] = 'Statistics report';
 $string['statisticsreportgraph'] = 'Statistics for question positions';
 $string['statistics:view'] = 'View statistics report';
-$string['statsfor'] = 'Quiz Statistics (for {$a})';
+$string['statsfor'] = 'Quiz statistics (for {$a})';
index 36e1d94..7b816bc 100644 (file)
 /// or a button to go back to the course page.
     echo $OUTPUT->box_start('quizattempt');
     $buttontext = ''; // This will be set something if as start/continue attempt button should appear.
-    if (!$quiz->questions) {
+    if (!quiz_clean_layout($quiz->questions, true)) {
         echo $OUTPUT->heading(get_string("noquestions", "quiz"));
     } else {
         if ($unfinished) {
index dc29825..f5478ba 100644 (file)
@@ -226,17 +226,17 @@ function xmldb_resource_upgrade($oldversion) {
                   JOIN {modules} m ON m.name='resource'
                   JOIN {course_modules} cm ON (cm.module = m.id AND cm.instance = r.id)";
 
-        if ($instances = $DB->get_recordset_sql($sql)) {
-            foreach ($instances as $instance) {
-                $context  = get_context_instance(CONTEXT_MODULE, $instance->cmid);
-                $component = 'mod_resource';
-                $filearea = 'content';
-                $itemid   = 0;
-                $filepath = file_correct_filepath(dirname($instance->mainfile));
-                $filename = basename($instance->mainfile);
-                file_set_sortorder($context->id, $component, $filearea, $itemid, $filepath, $filename, 1);
-            }
+        $instances = $DB->get_recordset_sql($sql);
+        foreach ($instances as $instance) {
+            $context  = get_context_instance(CONTEXT_MODULE, $instance->cmid);
+            $component = 'mod_resource';
+            $filearea = 'content';
+            $itemid   = 0;
+            $filepath = file_correct_filepath(dirname($instance->mainfile));
+            $filename = basename($instance->mainfile);
+            file_set_sortorder($context->id, $component, $filearea, $itemid, $filepath, $filename, 1);
         }
+        $instances->close();
 
      /// Define field mainfile to be dropped from resource
         $table = new xmldb_table('resource');
index df04b0c..b8ec4e1 100644 (file)
@@ -42,7 +42,9 @@ function resource_20_migrate() {
     $withrelativelinks = array('text/html', 'text/xml', 'application/xhtml+xml', 'application/x-shockwave-flash');
     // note: pdf doc and other types may contain links too, but we do not support relative links there
 
-    if (!$candidates = $DB->get_recordset('resource_old', array('type'=>'file', 'migrated'=>0))) {
+    $candidates = $DB->get_recordset('resource_old', array('type'=>'file', 'migrated'=>0));
+    if (!$candidates->valid()) {
+        $candidates->close(); // Not going to iterate (but exit), close rs
         return;
     }
 
@@ -53,7 +55,11 @@ function resource_20_migrate() {
         $siteid = get_site()->id;
         $fs = get_file_storage();
 
-        if (strpos($path, 'LOCALPATH') === 0) {
+        if (empty($candidate->cmid)) {
+            // skip borked records
+            continue;
+
+        } else if (strpos($path, 'LOCALPATH') === 0) {
             // ignore not maintained local files - sorry
             continue;
 
index e5d633e..0badfef 100644 (file)
@@ -330,17 +330,15 @@ function scorm_parse_aicc($scorm) {
     return true;
 }
 
-function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='normal',$attempt='',$play=false, $tocheader=false) {
+function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$scoid='',$mode='normal',$attempt='',$play=false, $tocheader=false) {
     global $CFG, $DB, $PAGE, $OUTPUT;
 
-    $strexpand = get_string('expcoll','scorm');
     $modestr = '';
     if ($mode == 'browse') {
         $modestr = '&amp;mode='.$mode;
     }
 
     $result = new stdClass();
-    //$result->toc = "<ul id='s0' class='$liststyle'>\n";
     if ($tocheader) {
         $result->toc = '<div id="scorm_layout">';
         $result->toc .= '<div id="scorm_toc">';
@@ -418,11 +416,6 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         $i--;
                     }
                     if (($i == 0) && ($sco->parent != $currentorg)) {
-                        $style = '';
-                        if (isset($_COOKIE['hide:SCORMitem'.$sco->id])) {
-                            $style = ' style="display: none;"';
-                        }
-                        //$result->toc .= "\t\t<li><ul id='s$sublist' class='$liststyle'$style>\n";
                         $result->toc .= "\t\t<ul>\n";
                         $level++;
                     } else {
@@ -446,21 +439,12 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
             }
             if ($nextisvisible && ($nextsco !== false) && ($sco->parent != $nextsco->parent) && (($level==0) || (($level>0) && ($nextsco->parent == $sco->identifier)))) {
                 $sublist++;
-                $icon = 'minus';
-                if (isset($_COOKIE['hide:SCORMitem'.$nextsco->id])) {
-                    $icon = 'plus';
-                }
-                //$result->toc .= '<a href="javascript:expandCollide(\'img'.$sublist.'\',\'s'.$sublist.'\','.$nextsco->id.');"><img id="img'.$sublist.'" src="'.$OUTPUT->pix_url($icon, 'scorm').'" alt="'.$strexpand.'" title="'.$strexpand.'"/></a>';
-            } else if ($isvisible) {
-                //$result->toc .= '<img src="'.$OUTPUT->pix_url('spacer', 'scorm').'" alt="" />';
             }
             if (empty($sco->title)) {
                 $sco->title = $sco->identifier;
             }
             if (!empty($sco->launch)) {
                 if ($isvisible) {
-                    $startbold = '';
-                    $endbold = '';
                     $score = '';
                     if (empty($scoid) && ($mode != 'normal')) {
                         $scoid = $sco->id;
@@ -480,7 +464,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                                 $scoid = $sco->id;
                             }
                         }
-                        if ($usertrack->score_raw != '') {
+                        if ($usertrack->score_raw != '' && has_capability('mod/scorm:viewscores', get_context_instance(CONTEXT_MODULE,$cmid))) {
                             $score = '('.get_string('score','scorm').':&nbsp;'.$usertrack->score_raw.')';
                         }
                         $strsuspended = get_string('suspended','scorm');
@@ -499,11 +483,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         }
                     }
                     if ($sco->id == $scoid) {
-                        $startbold = '<b>';
-                        $endbold = '</b>';
                         $findnext = true;
-                        $shownext = isset($sco->next) ? $sco->next : 0;
-                        $showprev = isset($sco->previous) ? $sco->previous : 0;
                     }
 
                     if (($nextid == 0) && (scorm_count_launchable($scorm->id,$currentorg) > 1) && ($nextsco!==false) && (!$findnext)) {
@@ -515,17 +495,19 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         if ($sco->id == $scoid) {
                             $result->prerequisites = true;
                         }
-                        $url = $CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&amp;currentorg='.$currentorg.$modestr.'&amp;scoid='.$sco->id;
+
                         $thisscoidstr = '&scoid='.$sco->id;
-                        //$link = $CFG->wwwroot.'/mod/scorm/loadSCO.php?a='.$scorm->id.$thisscoidstr.$modestr;
                         $link = 'a='.$scorm->id.$thisscoidstr.'&currentorg='.$currentorg.$modestr.'&attempt='.$attempt;
-                        //$result->toc .= $statusicon.'&nbsp;'.$startbold.'<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score.$endbold."</li>\n";
-                        //$result->toc .= '<a title="'.$link.'">'.$statusicon.'&nbsp;'.format_string($sco->title).'&nbsp;'.$score.'</a>';
-                        if ($sco->launch) {
-                            $result->toc .= '<a title="'.$link.'">'.$statusicon.'&nbsp;'.format_string($sco->title).'&nbsp;'.$score.'</a>';
-                        }
-                        else {
-                            $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
+
+                        if ($toclink == TOCFULLURL) { //display toc with urls for structure page
+                            $url = $CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&amp;currentorg='.$currentorg.$modestr.'&amp;scoid='.$sco->id;
+                            $result->toc .= $statusicon.'&nbsp;<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score."\n";
+                        } else {
+                            if ($sco->launch) {
+                                $result->toc .= '<a title="'.$link.'">'.$statusicon.'&nbsp;'.format_string($sco->title).'&nbsp;'.$score.'</a>';
+                            } else {
+                                $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
+                            }
                         }
                         $tocmenus[$sco->id] = scorm_repeater('&minus;',$level) . '&gt;' . format_string($sco->title);
                     } else {
@@ -535,8 +517,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         if ($play) {
                             // should be disabled
                             $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
-                        }
-                        else {
+                        } else {
                             $result->toc .= $statusicon.'&nbsp;'.format_string($sco->title)."\n";
                         }
                     }
@@ -589,5 +570,3 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
 
     return $result;
 }
-
-
index 7944f4e..4319dca 100644 (file)
@@ -106,17 +106,15 @@ function scorm_eval_prerequisites($prerequisites, $usertracks) {
     return eval('return '.implode($stack).';');
 }
 
-function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='normal',$attempt='',$play=false, $tocheader=false) {
+function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$scoid='',$mode='normal',$attempt='',$play=false, $tocheader=false) {
     global $CFG, $DB, $PAGE, $OUTPUT;
 
-    $strexpand = get_string('expcoll','scorm');
     $modestr = '';
     if ($mode == 'browse') {
         $modestr = '&amp;mode='.$mode;
     }
 
     $result = new stdClass();
-    //$result->toc = "<ul id='s0' class='$liststyle'>\n";
     if ($tocheader) {
         $result->toc = '<div id="scorm_layout">';
         $result->toc .= '<div id="scorm_toc">';
@@ -193,15 +191,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         $i--;
                     }
                     if (($i == 0) && ($sco->parent != $currentorg)) {
-                        $style = '';
-                        if (isset($_COOKIE['hide:SCORMitem'.$sco->id])) {
-                            $style = ' style="display: none;"';
-                        }
-                        //$result->toc .= "\t\t<li><ul id='s$sublist' class='$liststyle'$style>\n";
                         $result->toc .= "\t\t<ul>\n";
-
-
-
                         $level++;
                     } else {
                         $result->toc .= $closelist;
@@ -224,21 +214,12 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
             }
             if ($nextisvisible && ($nextsco !== false) && ($sco->parent != $nextsco->parent) && (($level==0) || (($level>0) && ($nextsco->parent == $sco->identifier)))) {
                 $sublist++;
-                $icon = 'minus';
-                if (isset($_COOKIE['hide:SCORMitem'.$nextsco->id])) {
-                    $icon = 'plus';
-                }
-                //$result->toc .= '<a href="javascript:expandCollide(\'img'.$sublist.'\',\'s'.$sublist.'\','.$nextsco->id.');"><img id="img'.$sublist.'" src="'.$OUTPUT->pix_url($icon, 'scorm').'" alt="'.$strexpand.'" title="'.$strexpand.'"/></a>';
-            } else if ($isvisible) {
-                //$result->toc .= '<img src="'.$OUTPUT->pix_url('spacer', 'scorm').'" alt="" />';
             }
             if (empty($sco->title)) {
                 $sco->title = $sco->identifier;
             }
             if (!empty($sco->launch)) {
                 if ($isvisible) {
-                    $startbold = '';
-                    $endbold = '';
                     $score = '';
                     if (empty($scoid) && ($mode != 'normal')) {
                         $scoid = $sco->id;
@@ -258,7 +239,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                                 $scoid = $sco->id;
                             }
                         }
-                        if ($usertrack->score_raw != '') {
+                        if ($usertrack->score_raw != '' && has_capability('mod/scorm:viewscores', get_context_instance(CONTEXT_MODULE,$cmid))) {
                             $score = '('.get_string('score','scorm').':&nbsp;'.$usertrack->score_raw.')';
                         }
                         $strsuspended = get_string('suspended','scorm');
@@ -277,11 +258,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         }
                     }
                     if ($sco->id == $scoid) {
-                        $startbold = '<b>';
-                        $endbold = '</b>';
                         $findnext = true;
-                        $shownext = isset($sco->next) ? $sco->next : 0;
-                        $showprev = isset($sco->previous) ? $sco->previous : 0;
                     }
 
                     if (($nextid == 0) && (scorm_count_launchable($scorm->id,$currentorg) > 1) && ($nextsco!==false) && (!$findnext)) {
@@ -293,18 +270,18 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         if ($sco->id == $scoid) {
                             $result->prerequisites = true;
                         }
-                       // $url = $CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&amp;currentorg='.$currentorg.$modestr.'&amp;scoid='.$sco->id;
                         $thisscoidstr = '&scoid='.$sco->id;
-                        //$link = $CFG->wwwroot.'/mod/scorm/loadSCO.php?a='.$scorm->id.$thisscoidstr.$modestr;
                         $link = 'a='.$scorm->id.$thisscoidstr.'&currentorg='.$currentorg.$modestr.'&attempt='.$attempt;
 
-                        //$result->toc .= $statusicon.'&nbsp;'.$startbold.'<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score.$endbold."\n";
-                        //$result->toc .= $startbold.'<a title="'.$link.'">'.$statusicon.'&nbsp;'.format_string($sco->title).'&nbsp;'.$score.'</a>'.$endbold."\n";
-                        if ($sco->launch) {
-                            $result->toc .= '<a title="'.$link.'">'.$statusicon.'&nbsp;'.format_string($sco->title).'&nbsp;'.$score.'</a>';
-                        }
-                        else {
-                            $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
+                        if ($toclink == TOCFULLURL) { //display toc with urls for structure page
+                            $url = $CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&amp;currentorg='.$currentorg.$modestr.'&amp;scoid='.$sco->id;
+                            $result->toc .= $statusicon.'&nbsp;<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score."\n";
+                        } else { //display toc for inside scorm player
+                            if ($sco->launch) {
+                                $result->toc .= '<a title="'.$link.'">'.$statusicon.'&nbsp;'.format_string($sco->title).'&nbsp;'.$score.'</a>';
+                            } else {
+                                $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
+                            }
                         }
                         $tocmenus[$sco->id] = scorm_repeater('&minus;',$level) . '&gt;' . format_string($sco->title);
                     } else {
@@ -314,8 +291,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         if ($play) {
                             // should be disabled
                             $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
-                        }
-                        else {
+                        } else {
                             $result->toc .= $statusicon.'&nbsp;'.format_string($sco->title)."\n";
                         }
                     }
@@ -358,7 +334,6 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
     }
 
 
-
     if ($scorm->hidetoc == 0) {
         $PAGE->requires->data_for_js('scormdata', array(
                 'plusicon' => $OUTPUT->pix_url('plus', 'scorm'),
@@ -372,5 +347,3 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
 
     return $result;
 }
-
-
index bf43267..3630285 100644 (file)
@@ -1,9 +1,8 @@
 <?php
 
-function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='normal',$attempt='',$play=false, $tocheader=false) {
+function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$scoid='',$mode='normal',$attempt='',$play=false, $tocheader=false) {
     global $CFG, $DB, $PAGE, $OUTPUT;
 
-    $strexpand = get_string('expcoll','scorm');
     $modestr = '';
     if ($mode == 'browse') {
         $modestr = '&amp;mode='.$mode;
@@ -84,11 +83,6 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         $i--;
                     }
                     if (($i == 0) && ($sco->parent != $currentorg)) {
-                        $style = '';
-                        if (isset($_COOKIE['hide:SCORMitem'.$sco->id])) {
-                            $style = ' style="display: none;"';
-                        }
-                        //$result->toc .= "\t\t<li><ul id='s$sublist' class='$liststyle'$style>\n";
                         $result->toc .= "\t\t><ul>\n";
                         $level++;
                     } else {
@@ -113,22 +107,12 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
             if ($nextisvisible && ($nextsco !== false) && ($sco->parent != $nextsco->parent) &&
                (($level==0) || (($level>0) && ($nextsco->parent == $sco->identifier)))) {
                 $sublist++;
-                $icon = 'minus';
-                if (isset($_COOKIE['hide:SCORMitem'.$nextsco->id])) {
-                    $icon = 'plus';
-                }
-//                $result->toc .= "\t\t".'<li><a href="javascript:expandCollide(\'img'.$sublist.'\',\'s'.$sublist.'\','.$nextsco->id.');">'.
-//                                '<img id="img'.$sublist.'" src="'.$OUTPUT->pix_url($icon, 'scorm').'" alt="'.$strexpand.'" title="'.$strexpand.'"/></a>';
-            } else if ($isvisible) {
-//                $result->toc .= "\t\t".'<li><img src="'.$OUTPUT->pix_url('spacer', 'scorm').'" alt="" />';
             }
             if (empty($sco->title)) {
                 $sco->title = $sco->identifier;
             }
             if (!empty($sco->launch)) {
                 if ($isvisible) {
-                    $startbold = '';
-                    $endbold = '';
                     $score = '';
                     if (empty($scoid) && ($mode != 'normal')) {
                         $scoid = $sco->id;
@@ -148,7 +132,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                                 $scoid = $sco->id;
                             }
                         }
-                        if ($usertrack->score_raw != '') {
+                        if ($usertrack->score_raw != '' && has_capability('mod/scorm:viewscores', get_context_instance(CONTEXT_MODULE,$cmid))) {
                             $score = '('.get_string('score','scorm').':&nbsp;'.$usertrack->score_raw.')';
                         }
                         $strsuspended = get_string('suspended','scorm');
@@ -168,11 +152,7 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                     }
 
                     if ($sco->id == $scoid) {
-                        $startbold = '<b>';
-                        $endbold = '</b>';
                         $findnext = true;
-                        $shownext = isset($sco->next) ? $sco->next : 0;
-                        $showprev = isset($sco->prev) ? $sco->prev : 0;
                     }
 
                     if (($nextid == 0) && (scorm_count_launchable($scorm->id,$currentorg) > 1) && ($nextsco!==false) && (!$findnext)) {
@@ -185,29 +165,27 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
                         if ($sco->id == $scoid) {
                             $result->prerequisites = true;
                         }
+
+                        if ($toclink == TOCFULLURL) { //display toc with urls for structure page
                             $url = $CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&amp;currentorg='.$currentorg.$modestr.'&amp;scoid='.$sco->id;
-                            $thisscoidstr = '&scoid='.$sco->id;
-                            //$link = $CFG->wwwroot.'/mod/scorm/loadSCO.php?a='.$scorm->id.$thisscoidstr.$modestr;
-                            $link = 'a='.$scorm->id.$thisscoidstr.'&currentorg='.$currentorg.$modestr.'&attempt='.$attempt;
-                            //$result->toc .= $statusicon.'&nbsp;'.$startbold.'<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score.$endbold."</li>\n";
-                            //$result->toc .= '<li><a title="'.$link.'">'.$statusicon.'&nbsp;'.format_string($sco->title).'&nbsp;'.$score.'</a>'."</li>\n";
+                            $result->toc .= $statusicon.'&nbsp;<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score."\n";
+                        } else {
                             if ($sco->launch) {
+                                $link = 'a='.$scorm->id.'&scoid='.$sco->id.'&currentorg='.$currentorg.$modestr.'&attempt='.$attempt;
                                 $result->toc .= '<a title="'.$link.'">'.$statusicon.'&nbsp;'.format_string($sco->title).'&nbsp;'.$score.'</a>';
-                            }
-                            else {
+                            } else {
                                 $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
                             }
-                            $tocmenus[$sco->id] = scorm_repeater('&minus;',$level) . '&gt;' . format_string($sco->title);
+                        }
+                        $tocmenus[$sco->id] = scorm_repeater('&minus;',$level) . '&gt;' . format_string($sco->title);
                     } else {
                         if ($sco->id == $scoid) {
                             $result->prerequisites = false;
                         }
-                        //$result->toc .= $statusicon.'&nbsp;'.format_string($sco->title)."\n";
                         if ($play) {
                             // should be disabled
                             $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
-                        }
-                        else {
+                        } else {
                             $result->toc .= $statusicon.'&nbsp;'.format_string($sco->title)."\n";
                         }
                     }
@@ -261,5 +239,3 @@ function scorm_get_toc($user,$scorm,$liststyle,$currentorg='',$scoid='',$mode='n
 
     return $result;
 }
-
-
index ba04865..445799f 100644 (file)
@@ -140,7 +140,8 @@ function xmldb_scorm_upgrade($oldversion) {
 
         $count = $DB->count_records_sql("SELECT COUNT('x') $sqlfrom");
 
-        if ($rs = $DB->get_recordset_sql("SELECT s.id, s.scormtype, s.reference, s.course, cm.id AS cmid $sqlfrom ORDER BY s.course, s.id")) {
+        $rs = $DB->get_recordset_sql("SELECT s.id, s.scormtype, s.reference, s.course, cm.id AS cmid $sqlfrom ORDER BY s.course, s.id");
+        if ($rs->valid()) {
 
             $pbar = new progress_bar('migratescormfiles', 500, true);
 
@@ -213,8 +214,8 @@ function xmldb_scorm_upgrade($oldversion) {
                 @rmdir("$CFG->dataroot/$scorm->course/$CFG->moddata/scorm/");
                 @rmdir("$CFG->dataroot/$scorm->course/$CFG->moddata/");
             }
-            $rs->close();
         }
+        $rs->close();
 
     /// scorm savepoint reached
         upgrade_mod_savepoint(true, 2008090304, 'scorm');
index e019b42..b58e102 100644 (file)
@@ -84,7 +84,6 @@ $string['everytime'] = 'Every time it\'s used';
 $string['exceededmaxattempts'] = 'You have reached the maximum number of attempts.';
 $string['exit'] = 'Exit course';
 $string['exitactivity'] = 'Exit activity';
-$string['expcoll'] = 'Expand/Collide';
 $string['expired'] = 'Sorry, this activity closed on {$a} and is no longer available';
 $string['external'] = 'Update external packages timing';
 $string['failed'] = 'Failed';
index 6c985f8..88ecd28 100755 (executable)
@@ -575,7 +575,8 @@ function scorm_upgrade_grades() {
     $sql = "SELECT s.*, cm.idnumber AS cmidnumber, s.course AS courseid
               FROM {scorm} s, {course_modules} cm, {modules} m
              WHERE m.name='scorm' AND m.id=cm.module AND cm.instance=s.id";
-    if ($rs = $DB->get_recordset_sql($sql)) {
+    $rs = $DB->get_recordset_sql($sql);
+    if ($rs->valid()) {
         $pbar = new progress_bar('scormupgradegrades', 500, true);
         $i=0;
         foreach ($rs as $scorm) {
@@ -584,8 +585,8 @@ function scorm_upgrade_grades() {
             scorm_update_grades($scorm, 0, false);
             $pbar->update($i, $count, "Updating Scorm grades ($i/$count).");
         }
-        $rs->close();
     }
+    $rs->close();
 }
 
 /**
index 115f466..f56005a 100755 (executable)
@@ -23,6 +23,9 @@ define('AVERAGEATTEMPT', '1');
 define('FIRSTATTEMPT', '2');
 define('LASTATTEMPT', '3');
 
+define('TOCJSLINK', 1);
+define('TOCFULLURL', 2);
+
 /// Local Library of functions for module scorm
 
 /**
@@ -585,7 +588,6 @@ function scorm_grade_user($scorm, $userid) {
         break;
         case HIGHESTATTEMPT:
             $maxscore = 0;
-            $attempttime = 0;
             for ($attempt = 1; $attempt <= $lastattempt; $attempt++) {
                 $attemptscore = scorm_grade_user_attempt($scorm, $userid, $attempt);
                 $maxscore = $attemptscore > $maxscore ? $attemptscore: $maxscore;
@@ -658,7 +660,6 @@ function scorm_course_format_display($user,$course) {
     global $CFG, $DB, $PAGE, $OUTPUT;
 
     $strupdate = get_string('update');
-    $strmodule = get_string('modulename','scorm');
     $context = get_context_instance(CONTEXT_COURSE,$course->id);
 
     echo '<div class="mod-scorm">';
@@ -690,10 +691,9 @@ function scorm_course_format_display($user,$course) {
             }
             $colspan = ' colspan="2"';
         }
-        $options = (object)array('noclean'=>true);
         $headertext .= '</td></tr><tr><td'.$colspan.'>'.get_string('summary').':<br />'.format_module_intro('scorm', $scorm, $scorm->coursemodule).'</td></tr></table>';
         echo $OUTPUT->box($headertext,'generalbox boxwidthwide');
-        scorm_view_display($user, $scorm, 'view.php?id='.$course->id, $cm, '100%');
+        scorm_view_display($user, $scorm, 'view.php?id='.$course->id, $cm);
     } else {
         if (has_capability('moodle/course:update', $context)) {
             // Create a new activity
@@ -705,7 +705,7 @@ function scorm_course_format_display($user,$course) {
     echo '</div>';
 }
 
-function scorm_view_display ($user, $scorm, $action, $cm, $boxwidth='') {
+function scorm_view_display ($user, $scorm, $action, $cm) {
     global $CFG, $DB, $PAGE, $OUTPUT;
 
     if ($scorm->updatefreq == UPDATE_EVERYTIME) {
@@ -743,23 +743,13 @@ function scorm_view_display ($user, $scorm, $action, $cm, $boxwidth='') {
         }
     }
 
-/*
- $orgidentifier = '';
-    if ($org = $DB->get_record('scorm_scoes', array('id'=>$organization))) {
-        if (($org->organization == '') && ($org->launch == '')) {
-            $orgidentifier = $org->identifier;
-        } else {
-            $orgidentifier = $org->organization;
-        }
-    }*/
-
     $scorm->version = strtolower(clean_param($scorm->version, PARAM_SAFEDIR));   // Just to be safe
     if (!file_exists($CFG->dirroot.'/mod/scorm/datamodels/'.$scorm->version.'lib.php')) {
         $scorm->version = 'scorm_12';
     }
     require_once($CFG->dirroot.'/mod/scorm/datamodels/'.$scorm->version.'lib.php');
 
-    $result = scorm_get_toc($user,$scorm,'structlist',$orgidentifier);
+    $result = scorm_get_toc($user,$scorm,$cm->id,TOCFULLURL,$orgidentifier);
     $incomplete = $result->incomplete;
 
     // do we want the TOC to be displayed?
@@ -1025,8 +1015,6 @@ function scorm_get_attempt_status($user, $scorm) {
     }
     $result .= get_string('noattemptsmade', 'scorm').': ' . $attemptcount . '<BR>';
 
-    $gradereported = 0;
-    $gradesum = 0;
     if ($scorm->maxattempt == 1) {
         switch ($scorm->grademethod) {
             case GRADEHIGHEST:
@@ -1216,8 +1204,6 @@ function scorm_format_duration($duration) {
         // then convert in the same way as SCORM 2004
         $pattern = array( '#T0+H#', '#([A-Z])0+M#', '#([A-Z])[0.]+S#', '#\.0+S#', '#0*(\d+)H#', '#0*(\d+)M#', '#0+\.(\d+)S#', '#0*([\d.]+)S#', '#T#' );
         $replace = array( 'T', '$1', '$1', 'S', '$1 '.$strhours.' ', '$1 '.$strminutes.' ', '0.$1 '.$strseconds, '$1 '.$strseconds, '' );
-        //$pattern = '##';
-        //$replace = '';
     }
 
     $result = preg_replace($pattern, $replace, $duration);
index 3e1e02f..ef16ea9 100755 (executable)
     }
     $attemptstr = '&amp;attempt=' . $attempt;
 
-    $result = scorm_get_toc($USER, $scorm, 'structurelist', $currentorg, $scoid, $mode, $attempt, true, true);
+    $result = scorm_get_toc($USER, $scorm, $cm->id, TOCJSLINK, $currentorg, $scoid, $mode, $attempt, true, true);
     $sco = $result->sco;
 
     if (($mode == 'browse') && ($scorm->hidebrowse == 1)) {
index e1cddd5..be5c0ca 100644 (file)
@@ -52,7 +52,7 @@
         $result = true;
         $request = null;
         if (has_capability('mod/scorm:savetrack', get_context_instance(CONTEXT_MODULE,$cm->id))) {
-            $result = scorm_get_toc($USER,$scorm,'structurelist',$currentorg,$scoid,$mode,$attempt,true, false);
+            $result = scorm_get_toc($USER,$scorm,$cm->id,TOCJSLINK,$currentorg,$scoid,$mode,$attempt,true, false);
             echo $result->toc;
         }
     }
index 7d30bba..9648e60 100755 (executable)
                     }
                 } else {
                     // all users who can attempt scoes and who are in the currently selected group
-                    if (!$groupstudents = get_users_by_capability($context, 'mod/scorm:savetrack','','','','',$currentgroup,'',false)){
+                    if (!$groupstudents = get_users_by_capability($contextmodule, 'mod/scorm:savetrack','','','','',$currentgroup,'',false)){
                         echo $OUTPUT->notification(get_string('nostudentsingroup'));
                         $nostudents = true;
                         $groupstudents = array();
index fce3534..fa51e16 100644 (file)
@@ -232,13 +232,15 @@ function survey_print_recent_activity($course, $viewfullnames, $timestart) {
 
     $slist = implode(',', $ids); // there should not be hundreds of glossaries in one course, right?
 
-    if (!$rs = $DB->get_recordset_sql("SELECT sa.userid, sa.survey, MAX(sa.time) AS time,
-                                              u.firstname, u.lastname, u.email, u.picture
-                                         FROM {survey_answers} sa
-                                         JOIN {user} u ON u.id = sa.userid
-                                        WHERE sa.survey IN ($slist) AND sa.time > ?
-                                     GROUP BY sa.userid, sa.survey, u.firstname, u.lastname, u.email, u.picture
-                                     ORDER BY time ASC", array($timestart))) {
+    $rs = $DB->get_recordset_sql("SELECT sa.userid, sa.survey, MAX(sa.time) AS time,
+                                         u.firstname, u.lastname, u.email, u.picture
+                                    FROM {survey_answers} sa
+                                    JOIN {user} u ON u.id = sa.userid
+                                   WHERE sa.survey IN ($slist) AND sa.time > ?
+                                GROUP BY sa.userid, sa.survey, u.firstname, u.lastname, u.email, u.picture
+                                ORDER BY time ASC", array($timestart));
+    if (!$rs->valid()) {
+        $rs->close(); // Not going to iterate (but exit), close rs
         return false;
     }
 
index 8ff7adc..8478faf 100644 (file)
@@ -50,7 +50,9 @@ function url_20_migrate() {
         return;
     }
 
-    if (!$candidates = $DB->get_recordset('resource_old', array('type'=>'file', 'migrated'=>0))) {
+    $candidates = $DB->get_recordset('resource_old', array('type'=>'file', 'migrated'=>0));
+    if (!$candidates->valid()) {
+        $candidates->close(); // Not going to iterate (but exit), close rs
         return;
     }
 
@@ -135,4 +137,4 @@ function url_20_migrate() {
 
     // clear all course modinfo caches
     rebuild_course_cache(0, true);
-}
\ No newline at end of file
+}
index d7389ed..61315e6 100644 (file)
@@ -300,8 +300,9 @@ class ouwiki_line {
         $pos=0;
         while(true) {
             // Find a non-space
-            for(;$pos < strlen($data) && substr($data,$pos,1)===' ';$pos++) ;
-            if($pos==strlen($data)) {
+            $strlendata = strlen($data);
+            for(;$pos < $strlendata && substr($data,$pos,1)===' ';$pos++) ;
+            if($pos==$strlendata) {
                 // No more content
                 break;
             }
@@ -527,7 +528,8 @@ class ouwiki_changes {
         //    resulting array will be -,-,3,3,3,-,0
         $squidges=array();
         $lowest=0;
-        for($index1=count($diff);$index1>=1;$index1--) {
+        $countdiff = count($diff);
+        for($index1=$countdiff;$index1>=1;$index1--) {
             $index2=$diff[$index1];
             if($index2===0) {
                 $squidges[$index1]=$lowest;
index 6f07795..e411f97 100644 (file)
@@ -34,6 +34,7 @@
 
 require_once($CFG->dirroot . '/mod/wiki/lib.php');
 require_once($CFG->dirroot . '/mod/wiki/parser/parser.php');
+require_once($CFG->libdir . '/filelib.php');
 
 define('WIKI_REFRESH_CACHE_TIME', 30); // @TODO: To be deleted.
 define('FORMAT_CREOLE', '37');
index 29d4bef..fd1324e 100644 (file)
@@ -142,7 +142,8 @@ class nwiki_parser extends wiki_markup_parser {
         $cells = array();
         foreach($normalcells as $nc) {
             $headercells = explode("!!", $nc);
-            for($i = 0; $i < count($headercells); $i++) {
+            $countheadercells = count($headercells);
+            for($i = 0; $i < $countheadercells; $i++) {
                 $cells[] = array($type, $headercells[$i]);
                 $type = 'header';
             }
index c3ecbc5..0f943af 100644 (file)
@@ -33,6 +33,7 @@ defined('MOODLE_INTERNAL') || die();
 
 require_once(dirname(__FILE__).'/lib.php');     // we extend this library here
 require_once($CFG->libdir . '/gradelib.php');   // we use some rounding and comparing routines here
+require_once($CFG->libdir . '/filelib.php');
 
 /**
  * Full-featured workshop API
index da05ba1..300a0e7 100644 (file)
@@ -73,7 +73,8 @@ class qformat_blackboard_six extends qformat_default {
         }
 
         // Delete all files in the curent directory return false and halt if a file cannot be removed
-        for($i=0; $i<count($dir_files); $i++) {
+        $countdir_files = count($dir_files);
+        for($i=0; $i<$countdir_files; $i++) {
             chmod($dir_files[$i], $CFG->directorypermissions);
             if (((unlink($dir_files[$i]))) == FALSE) {
                 return false;
@@ -81,7 +82,8 @@ class qformat_blackboard_six extends qformat_default {
         }
 
         // Empty sub directories and then remove the directory
-        for($i=0; $i<count($dir_subdirs); $i++) {
+        $countdir_subdirs = count($dir_subdirs);
+        for($i=0; $i<$countdir_subdirs; $i++) {
             chmod($dir_subdirs[$i], $CFG->directorypermissions);
             if ($this->clean_temp_dir($dir_subdirs[$i]) == FALSE) {
                 return false;
index 29780e8..e086691 100755 (executable)
@@ -392,7 +392,7 @@ class qformat_gift extends qformat_default {
                 list($answer, $wrongfeedback, $rightfeedback) =
                         $this->split_truefalse_comment($answertext, $question->questiontextformat);
 
-                if ($answer == "T" OR $answer == "TRUE") {
+                if ($answer['text'] == "T" OR $answer['text'] == "TRUE") {
                     $question->correctanswer = 1;
                     $question->feedbacktrue = $rightfeedback;
                     $question->feedbackfalse = $wrongfeedback;
index da66ac7..113329a 100644 (file)
@@ -659,6 +659,74 @@ FALSE#42 is the Ultimate Answer.#You gave the right answer.}";
         $this->assert(new CheckSpecifiedFieldsExpectation($expectedq), $q);
     }
 
+    public function test_import_truefalse_true_answer1() {
+        $gift = "// name 0-11
+::2-08 TSL::TSL is blablabla.{T}";
+        $lines = preg_split('/[\\n\\r]/', str_replace("\r\n", "\n", $gift));
+
+        $importer = new qformat_gift();
+        $q = $importer->readquestion($lines);
+
+        $expectedq = (object) array(
+            'name' => '2-08 TSL',
+            'questiontext' => "TSL is blablabla.",
+            'questiontextformat' => FORMAT_MOODLE,
+            'generalfeedback' => '',
+            'generalfeedbackformat' => FORMAT_MOODLE,
+            'qtype' => 'truefalse',
+            'defaultgrade' => 1,
+            'penalty' => 1,
+            'length' => 1,
+            'correctanswer' => 1,
+            'feedbacktrue' => array(
+                'text' => '',
+                'format' => FORMAT_MOODLE,
+                'files' => array(),
+            ),
+            'feedbackfalse' => array(
+                'text' => '',
+                'format' => FORMAT_MOODLE,
+                'files' => array(),
+            ),
+        );
+
+        $this->assert(new CheckSpecifiedFieldsExpectation($expectedq), $q);
+    }
+
+    public function test_import_truefalse_true_answer2() {
+        $gift = "// name 0-11
+::2-08 TSL::TSL is blablabla.{TRUE}";
+        $lines = preg_split('/[\\n\\r]/', str_replace("\r\n", "\n", $gift));
+
+        $importer = new qformat_gift();
+        $q = $importer->readquestion($lines);
+
+        $expectedq = (object) array(
+            'name' => '2-08 TSL',
+            'questiontext' => "TSL is blablabla.",
+            'questiontextformat' => FORMAT_MOODLE,
+            'generalfeedback' => '',
+            'generalfeedbackformat' => FORMAT_MOODLE,
+            'qtype' => 'truefalse',
+            'defaultgrade' => 1,
+            'penalty' => 1,
+            'length' => 1,
+            'correctanswer' => 1,
+            'feedbacktrue' => array(
+                'text' => '',
+                'format' => FORMAT_MOODLE,
+                'files' => array(),
+            ),
+            'feedbackfalse' => array(
+                'text' => '',
+                'format' => FORMAT_MOODLE,
+                'files' => array(),
+            ),
+        );
+
+        $this->assert(new CheckSpecifiedFieldsExpectation($expectedq), $q);
+    }
+
     public function test_export_truefalse() {
         $qdata = (object) array(
             'id' => 666 ,
index f39dfea..9e74fcb 100644 (file)
@@ -23,6 +23,6 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$string['multianswer'] = 'Embedded Answers (Cloze)';
-$string['multianswer_help'] = 'Embedded Answers (Cloze) format enables the import of a passage of text with questions such as multiple-choice and short answer embedded within it.';
+$string['multianswer'] = 'Embedded answers (Cloze)';
+$string['multianswer_help'] = 'Embedded answers (Cloze) format enables the import of a passage of text with questions such as multiple-choice and short answer embedded within it.';
 $string['multianswer_link'] = 'question/type/multianswer';
index bd895b1..5f23265 100644 (file)
  */
 
 $string['addingcalculated'] = 'Adding a calculated question';
-$string['additem'] = 'Add Item';
+$string['additem'] = 'Add item';
 $string['addmoreanswerblanks'] = 'Add another answer blank.';
-$string['addmoreunitblanks'] = 'Blanks for {$a} More Units';
-$string['addsets'] = 'Add Set(s)';
+$string['addmoreunitblanks'] = 'Blanks for {$a} more units';
+$string['addsets'] = 'Add set(s)';
 $string['answerhdr'] = 'Answer';
 $string['answerstoleranceparam'] = 'Answers tolerance parameters';
 $string['atleastoneanswer'] = 'You need to provide at least one answer.';
@@ -48,8 +48,8 @@ $string['correctanswershowsformat'] = 'Format';
 $string['correctfeedback'] = 'For any correct response';
 $string['dataitemdefined']='with {$a} numerical values already defined is available';
 $string['datasetrole']= ' The wild cards <strong>{x..}</strong> will be substituted by a numerical value from their dataset';
-$string['deleteitem'] = 'Delete Item';
-$string['deletelastitem'] = 'Delete Last Item';
+$string['deleteitem'] = 'Delete item';
+$string['deletelastitem'] = 'Delete last item';
 $string['editingcalculated'] = 'Editing a Calculated question';
 $string['editdatasets'] = 'Edit the wildcards datasets';
 $string['editdatasets_help'] = 'Wildcard values may be created by entering a number in each wild card field then clicking the add button. To automatically generate 10 or more values, select the number of values required before clicking the add button. A uniform distribution means any value between the limits is equally likely to be generated; a loguniform distribution means that values towards the lower limit are more likely.';
@@ -60,13 +60,13 @@ $string['existingcategory3'] = 'a link from an already existing set of links tha
 $string['forceregeneration'] = 'force regeneration';
 $string['forceregenerationall'] = 'forceregeneration of all wildcards';
 $string['forceregenerationshared'] = 'forceregeneration of only non-shared wildcards';