Merge branch 'w50_MDL-30528_m23_enrolroleid' of git://github.com/skodak/moodle
authorSam Hemelryk <sam@moodle.com>
Thu, 8 Dec 2011 02:50:42 +0000 (15:50 +1300)
committerSam Hemelryk <sam@moodle.com>
Thu, 8 Dec 2011 02:50:42 +0000 (15:50 +1300)
14 files changed:
enrol/guest/db/upgrade.php [new file with mode: 0644]
enrol/guest/lib.php
enrol/guest/version.php
enrol/imsenterprise/lib.php
grade/report/user/index.php
index.php
lib/navigationlib.php
mod/choice/mod_form.php
mod/forum/discuss.php
mod/forum/lang/en/forum.php
mod/quiz/report/attemptsreport.php
mod/scorm/report/basic/report.php
mod/scorm/report/interactions/report.php
webservice/rest/locallib.php

diff --git a/enrol/guest/db/upgrade.php b/enrol/guest/db/upgrade.php
new file mode 100644 (file)
index 0000000..d04b36e
--- /dev/null
@@ -0,0 +1,43 @@
+<?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 guest enrolment plugin
+ *
+ * @package    enrol
+ * @subpackage guest
+ * @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_guest_upgrade($oldversion) {
+    global $CFG, $DB, $OUTPUT;
+
+    $dbman = $DB->get_manager();
+
+    if ($oldversion < 2011112901) {
+        // convert all null passwords to empty strings
+        $DB->set_field('enrol', 'password', '', array('enrol'=>'guest', 'password'=>null));
+
+        upgrade_plugin_savepoint(true, 2011112901, 'enrol', 'guest');
+    }
+
+    return true;
+}
+
+
index ac4a5cf..da1d2f1 100644 (file)
@@ -327,6 +327,22 @@ class enrol_guest_plugin extends enrol_plugin {
         }
     }
 
+    /**
+     * Add new instance of enrol plugin.
+     * @param object $course
+     * @param array instance fields
+     * @return int id of new instance, null if can not be created
+     */
+    public function add_instance($course, array $fields = NULL) {
+        $fields = (array)$fields;
+
+        if (!isset($fields['password'])) {
+            $fields['password'] = '';
+        }
+
+        return parent::add_instance($course, $fields);
+    }
+
     /**
      * Add new instance of enrol plugin with default settings.
      * @param object $course
index 0f235c6..125592f 100644 (file)
@@ -25,6 +25,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2011112900;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->version   = 2011112901;        // The current plugin version (Date: YYYYMMDDXX)
 $plugin->requires  = 2011112900;        // Requires this Moodle version
 $plugin->component = 'enrol_guest';     // Full name of the plugin (used for diagnostics)
index 2dec772..e9e90fa 100644 (file)
@@ -403,6 +403,10 @@ function process_group_tag($tagcontents) {
 
                     $courseid = $DB->insert_record('course', $course);
 
+                    // Setup default enrolment plugins
+                    $course->id = $courseid;
+                    enrol_course_updated(true, $course, null);
+
                     // Setup the blocks
                     $course = $DB->get_record('course', array('id' => $courseid));
                     blocks_add_default_course_blocks($course);
index a452a33..2802c9d 100644 (file)
@@ -103,7 +103,7 @@ if (has_capability('moodle/grade:viewall', $context)) { //Teachers will see all
 
         if ($user_selector) {
             $renderer = $PAGE->get_renderer('gradereport_user');
-            echo $renderer->graded_users_selector('user', $course, $userid, $currentgroup, false);
+            echo $renderer->graded_users_selector('user', $course, $userid, $currentgroup, true);
         }
 
         while ($userdata = $gui->next_user()) {
index d6424a5..232abdc 100644 (file)
--- a/index.php
+++ b/index.php
@@ -58,7 +58,7 @@
         // Redirect logged-in users to My Moodle overview if required
         if (optional_param('setdefaulthome', false, PARAM_BOOL)) {
             set_user_preference('user_home_page_preference', HOMEPAGE_SITE);
-        } else if ($CFG->defaulthomepage == HOMEPAGE_MY && (optional_param('redirect', true, PARAM_BOOL) || !$hassiteconfig)) {
+        } else if ($CFG->defaulthomepage == HOMEPAGE_MY && optional_param('redirect', 1, PARAM_BOOL) === 1) {
             redirect($CFG->wwwroot .'/my/');
         } else if (!empty($CFG->defaulthomepage) && $CFG->defaulthomepage == HOMEPAGE_USER) {
             $PAGE->settingsnav->get('usercurrentsettings')->add(get_string('makethismyhome'), new moodle_url('/', array('setdefaulthome'=>true)), navigation_node::TYPE_SETTING);
index 6d67cce..8645e27 100644 (file)
@@ -1240,6 +1240,16 @@ class global_navigation extends navigation_node {
                     $sections = $this->load_course_sections($course, $coursenode);
                     break;
             }
+        } else {
+            // We need to check if the user is viewing a front page module.
+            // If so then there is potentially more content to load yet for that
+            // module.
+            if ($this->page->context->contextlevel == CONTEXT_MODULE) {
+                $activitynode = $this->rootnodes['site']->get($this->page->cm->id, navigation_node::TYPE_ACTIVITY);
+                if ($activitynode) {
+                    $this->load_activity($this->page->cm, $this->page->course, $activitynode);
+                }
+            }
         }
 
         $limit = 20;
index 1a7ef12..afacc4a 100644 (file)
@@ -50,7 +50,6 @@ class mod_choice_mod_form extends moodleform_mod {
         $repeateloptions['limit']['default'] = 0;
         $repeateloptions['limit']['disabledif'] = array('limitanswers', 'eq', 0);
         $repeateloptions['limit']['rule'] = 'numeric';
-        $mform->setType('limit', PARAM_INT);
 
         $repeateloptions['option']['helpbutton'] = array('choiceoptions', 'choice');
         $mform->setType('option', PARAM_CLEANHTML);
index 0e42828..c4c5316 100644 (file)
             print_error('cannotmovetonotexist', 'forum', $return);
         }
 
+        if ($forumto->type == 'single') {
+            print_error('cannotmovetosingleforum', 'forum', $return);
+        }
+
         if (!$cmto = get_coursemodule_from_instance('forum', $forumto->id, $course->id)) {
             print_error('cannotmovetonotfound', 'forum', $return);
         }
         if (isset($modinfo->instances['forum'])) {
             $forummenu = array();
             $sections = get_all_sections($course->id);
+            // Check forum types and eliminate simple discussions.
+            $forumcheck = $DB->get_records('forum', array('course' => $course->id),'', 'id, type');
             foreach ($modinfo->instances['forum'] as $forumcm) {
                 if (!$forumcm->uservisible || !has_capability('mod/forum:startdiscussion',
                     get_context_instance(CONTEXT_MODULE,$forumcm->id))) {
                     continue;
                 }
-
                 $section = $forumcm->sectionnum;
                 $sectionname = get_section_name($course, $sections[$section]);
                 if (empty($forummenu[$section])) {
                     $forummenu[$section] = array($sectionname => array());
                 }
-                if ($forumcm->instance != $forum->id) {
+                $forumidcompare = $forumcm->instance != $forum->id;
+                $forumtypecheck = $forumcheck[$forumcm->instance]->type !== 'single';
+                if ($forumidcompare and $forumtypecheck) {
                     $url = "/mod/forum/discuss.php?d=$discussion->id&move=$forumcm->instance&sesskey=".sesskey();
                     $forummenu[$section][$sectionname][$url] = format_string($forumcm->name);
                 }
index a23be0e..88ab2a8 100644 (file)
@@ -64,6 +64,7 @@ $string['cannotmovefromsingleforum'] = 'Cannot move discussion from a simple sin
 $string['cannotmovenotvisible'] = 'Forum not visible';
 $string['cannotmovetonotexist'] = 'You can\'t move to that forum - it doesn\'t exist!';
 $string['cannotmovetonotfound'] = 'Target forum not found in this course.';
+$string['cannotmovetosingleforum'] = 'Cannot move discussion to a simple single discussion forum';
 $string['cannotpurgecachedrss'] = 'Could not purge the cached RSS feeds for the source and/or destination forum(s) - check your file permissionsforums';
 $string['cannotremovesubscriber'] = 'Could not remove subscriber with id {$a} from this forum!';
 $string['cannotreply'] = 'You cannot reply to this post';
index f26b2ec..6c7ab35 100644 (file)
@@ -360,7 +360,7 @@ abstract class quiz_attempt_report extends quiz_default_report {
                 // Ensure the attempt exists, and belongs to this quiz. If not skip.
                 continue;
             }
-            if ($allowed && !array_key_exists($attempt->userid, $allowed)) {
+            if ($allowed && !in_array($attempt->userid, $allowed)) {
                 // Ensure the attempt belongs to a student included in the report. If not skip.
                 continue;
             }
index 5cd4c1b..30fcc78 100644 (file)
@@ -43,6 +43,8 @@ class scorm_basic_report extends scorm_default_report {
                 echo $OUTPUT->notification(get_string('scormresponsedeleted', 'scorm'), 'notifysuccess');
             }
         }
+        // find out current groups mode
+        $currentgroup = groups_get_activity_group($cm, true);
 
         // detailed report
         $mform = new mod_scorm_report_settings($PAGE->url, compact('currentgroup'));
@@ -84,7 +86,7 @@ class scorm_basic_report extends scorm_default_report {
                 $nostudents = true;
                 $allowedlist = '';
             } else {
-                $allowedlist = join(',', array_keys($students));
+                $allowedlist = array_keys($students);
             }
         } else {
             // all users who can attempt scoes and who are in the currently selected group
@@ -93,7 +95,7 @@ class scorm_basic_report extends scorm_default_report {
                 $nostudents = true;
                 $groupstudents = array();
             }
-            $allowedlist = join(',', array_keys($groupstudents));
+            $allowedlist = array_keys($groupstudents);
         }
 
         if ( !$nostudents ) {
@@ -269,7 +271,8 @@ class scorm_basic_report extends scorm_default_report {
                 header("Pragma: public");
                 echo implode("\t", $headers)." \n";
             }
-
+            $params = array();
+            list($usql, $params) = $DB->get_in_or_equal($allowedlist, SQL_PARAMS_NAMED);
                             // Construct the SQL
             $select = 'SELECT DISTINCT '.$DB->sql_concat('u.id', '\'#\'', 'COALESCE(st.attempt, 0)').' AS uniqueid, ';
             $select .= 'st.scormid AS scormid, st.attempt AS attempt, ' .
@@ -282,15 +285,15 @@ class scorm_basic_report extends scorm_default_report {
             switch ($attemptsmode) {
                 case SCORM_REPORT_ATTEMPTS_STUDENTS_WITH:
                     // Show only students with attempts
-                    $where = ' WHERE u.id IN (' .$allowedlist. ') AND st.userid IS NOT NULL';
+                    $where = ' WHERE u.id ' .$usql. ' AND st.userid IS NOT NULL';
                     break;
                 case SCORM_REPORT_ATTEMPTS_STUDENTS_WITH_NO:
                     // Show only students without attempts
-                    $where = ' WHERE u.id IN (' .$allowedlist. ') AND st.userid IS NULL';
+                    $where = ' WHERE u.id ' .$usql. ' AND st.userid IS NULL';
                     break;
                 case SCORM_REPORT_ATTEMPTS_ALL_STUDENTS:
                     // Show all students with or without attempts
-                    $where = ' WHERE u.id IN (' .$allowedlist. ') AND (st.userid IS NOT NULL OR st.userid IS NULL)';
+                    $where = ' WHERE u.id ' .$usql. ' AND (st.userid IS NOT NULL OR st.userid IS NULL)';
                     break;
             }
 
@@ -298,7 +301,6 @@ class scorm_basic_report extends scorm_default_report {
             $countsql .= 'COUNT(DISTINCT('.$DB->sql_concat('u.id', '\'#\'', 'st.attempt').')) AS nbattempts, ';
             $countsql .= 'COUNT(DISTINCT(u.id)) AS nbusers ';
             $countsql .= $from.$where;
-            $params = array();
 
             if (!$download) {
                 $sort = $table->get_sql_sort();
@@ -321,7 +323,7 @@ class scorm_basic_report extends scorm_default_report {
                 }
 
                 if (!empty($countsql)) {
-                    $count = $DB->get_record_sql($countsql);
+                    $count = $DB->get_record_sql($countsql, $params);
                     $totalinitials = $count->nbresults;
                     if ($twhere) {
                         $countsql .= ' AND '.$twhere;
index 96e1ff2..54d0bf7 100644 (file)
@@ -45,6 +45,8 @@ class scorm_interactions_report extends scorm_default_report {
                 echo $OUTPUT->notification(get_string('scormresponsedeleted', 'scorm'), 'notifysuccess');
             }
         }
+        // find out current groups mode
+        $currentgroup = groups_get_activity_group($cm, true);
 
         // detailed report
         $mform = new mod_scorm_report_interactions_settings($PAGE->url, compact('currentgroup'));
@@ -107,7 +109,7 @@ class scorm_interactions_report extends scorm_default_report {
                 $nostudents = true;
                 $groupstudents = array();
             }
-            $allowedlist = ($groupstudents);
+            $allowedlist = array_keys($groupstudents);
         }
         if ( !$nostudents ) {
             // Now check if asked download of data
index 3fe38ea..179a85b 100644 (file)
@@ -138,9 +138,9 @@ class webservice_rest_server extends webservice_base_server {
         } else {
             $error = '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
             $error .= '<EXCEPTION class="'.get_class($ex).'">'."\n";
-            $error .= '<MESSAGE>'.htmlentities($ex->getMessage(), ENT_COMPAT, 'UTF-8').'</MESSAGE>'."\n";
+            $error .= '<MESSAGE>'.htmlspecialchars($ex->getMessage(), ENT_COMPAT, 'UTF-8').'</MESSAGE>'."\n";
             if (debugging() and isset($ex->debuginfo)) {
-                $error .= '<DEBUGINFO>'.htmlentities($ex->debuginfo, ENT_COMPAT, 'UTF-8').'</DEBUGINFO>'."\n";
+                $error .= '<DEBUGINFO>'.htmlspecialchars($ex->debuginfo, ENT_COMPAT, 'UTF-8').'</DEBUGINFO>'."\n";
             }
             $error .= '</EXCEPTION>'."\n";
         }
@@ -182,7 +182,7 @@ class webservice_rest_server extends webservice_base_server {
             if (is_null($returns)) {
                 return '<VALUE null="null"/>'."\n";
             } else {
-                return '<VALUE>'.htmlentities($returns, ENT_COMPAT, 'UTF-8').'</VALUE>'."\n";
+                return '<VALUE>'.htmlspecialchars($returns, ENT_COMPAT, 'UTF-8').'</VALUE>'."\n";
             }
 
         } else if ($desc instanceof external_multiple_structure) {