Index: lib/datalib.php =================================================================== RCS file: /cvsroot/moodle/moodle/lib/datalib.php,v retrieving revision 1.439.2.8 diff -u -r1.439.2.8 datalib.php --- lib/datalib.php 6 Jan 2008 23:17:42 -0000 1.439.2.8 +++ lib/datalib.php 24 Jan 2008 16:59:56 -0000 @@ -1643,23 +1643,30 @@ } /** - * Returns an array of all the active instances of a particular module in given courses, sorted in the order they are defined + * Returns an array of all the active instances of a particular module in given courses + * sorted in the order they are defined. * * Returns an array of all the active instances of a particular * module in given courses, sorted in the order they are defined - * in the course. Returns false on any errors. + * in the course. Returns an empty array on any errors. + * + * The returned objects includle the columns cw.section, cm.visible, + * cm.groupmode and cm.groupingid, and are indexed by cm.id. * * @uses $CFG - * @param string $modulename The name of the module to get instances for - * @param array $courses This depends on an accurate $course->modinfo - * @return array of instances + * @param string $modulename The name of the module to get instances for + * @param array $courses an array of course objects. The course obect. ->modinfo must be up to date. + * @return array of module instance objects, including some extra fields from the course_modules + * and course_sections tables, or an empty array if an error occurred. */ function get_all_instances_in_courses($modulename, $courses, $userid=NULL, $includeinvisible=false) { global $CFG; + if (empty($courses) || !is_array($courses) || count($courses) == 0) { return array(); } - if (!$rawmods = get_records_sql("SELECT cm.id as coursemodule, m.*,cw.section,cm.visible as visible,cm.groupmode, cm.course + + if (!$rawmods = get_records_sql("SELECT cm.id as coursemodule, m.*,cw.section,cm.visible as visible,cm.groupmode,cm.groupingid,cm.course FROM {$CFG->prefix}course_modules cm, {$CFG->prefix}course_sections cw, {$CFG->prefix}modules md, @@ -1677,18 +1684,24 @@ foreach ($courses as $course) { if ($includeinvisible) { $invisible = -1; - } else if (has_capability('moodle/course:viewhiddencourses', get_context_instance(CONTEXT_COURSE, $course->id), $userid)) { + } else if (has_capability('moodle/course:viewhiddenactivities', get_context_instance(CONTEXT_COURSE, $course->id), $userid)) { // Usually hide non-visible instances from students $invisible = -1; } else { $invisible = 0; } - /// Casting $course->modinfo to string prevents one notice when the field is null + /// Casting $course->modinfo to string prevents one notice when the field is null if (!$modinfo = unserialize((string)$course->modinfo)) { continue; } + foreach ($modinfo as $mod) { + $mod->id = $mod->cm; + $mod->course = $course->id; + if (!groups_course_module_visible($mod)) { + continue; + } if ($mod->mod == $modulename and $mod->visible > $invisible) { $instance = $rawmods[$mod->cm]; if (!empty($mod->extra)) { @@ -1700,7 +1713,6 @@ } return $outputarray; - } /** @@ -1716,63 +1728,18 @@ * * @uses $CFG * @param string $modulename The name of the module to get instances for - * @param object $course This depends on an accurate $course->modinfo + * @param object $course The course obect. $course->modinfo must be up to date. * @return array of module instance objects, including some extra fields from the course_modules * and course_sections tables, or an empty array if an error occurred. */ function get_all_instances_in_course($modulename, $course, $userid=NULL, $includeinvisible=false) { - global $CFG; if (empty($course->modinfo)) { return array(); } - if (!$modinfo = unserialize((string)$course->modinfo)) { - return array(); - } - - if (!$rawmods = get_records_sql("SELECT cm.id as coursemodule, m.*,cw.section,cm.visible as visible,cm.groupmode,cm.groupingid - FROM {$CFG->prefix}course_modules cm, - {$CFG->prefix}course_sections cw, - {$CFG->prefix}modules md, - {$CFG->prefix}$modulename m - WHERE cm.course = '$course->id' AND - cm.instance = m.id AND - cm.section = cw.id AND - md.name = '$modulename' AND - md.id = cm.module")) { - return array(); - } - - if ($includeinvisible) { - $invisible = -1; - } else if (has_capability('moodle/course:viewhiddenactivities', get_context_instance(CONTEXT_COURSE, $course->id), $userid)) { - // Usually hide non-visible instances from students - $invisible = -1; - } else { - $invisible = 0; - } - - $outputarray = array(); - - foreach ($modinfo as $mod) { - $mod->id = $mod->cm; - $mod->course = $course->id; - if (!groups_course_module_visible($mod)) { - continue; - } - if ($mod->mod == $modulename and $mod->visible > $invisible) { - $instance = $rawmods[$mod->cm]; - if (!empty($mod->extra)) { - $instance->extra = $mod->extra; - } - $outputarray[] = $instance; - } - } - - return $outputarray; - + return get_all_instances_in_courses($modulename, array($course->id => $course), $userid, $includeinvisible); }