MDL-16226 get_coursemodule_xx() improvements

This commit is contained in:
skodak
2008-08-27 11:31:37 +00:00
parent 8de7c5e4bc
commit a1b892ccec
+64 -36
View File
@@ -11,7 +11,7 @@
* @package moodlecore
*/
define('MAX_COURSES_IN_CATEGORY', 10000); // MAX_COURSES_IN_CATEGORY * MAX_COURSE_CATEGORIES must not be more than max integer!
define('MAX_COURSES_IN_CATEGORY', 10000); // MAX_COURSES_IN_CATEGORY * MAX_COURSE_CATEGORIES must not be more than max integer!
define('MAX_COURSE_CATEGORIES', 10000);
/**
@@ -82,15 +82,15 @@ function setup_DB() {
$content = fread($fp, 24);
fclose($fp);
if((time() - (int)$content) > 600){
@mail($CFG->emailconnectionerrorsto,
'WARNING: Database connection error: '.$CFG->wwwroot,
@mail($CFG->emailconnectionerrorsto,
'WARNING: Database connection error: '.$CFG->wwwroot,
'Connection error: '.$CFG->wwwroot);
$fp = fopen($CFG->dataroot.'/emailcount', 'w');
fwrite($fp, time());
}
} else {
@mail($CFG->emailconnectionerrorsto,
'WARNING: Database connection error: '.$CFG->wwwroot,
@mail($CFG->emailconnectionerrorsto,
'WARNING: Database connection error: '.$CFG->wwwroot,
'Connection error: '.$CFG->wwwroot);
$fp = fopen($CFG->dataroot.'/emailcount', 'w');
fwrite($fp, time());
@@ -1325,7 +1325,7 @@ function get_course_category($catid=0) {
/**
* Fixes course category and course sortorder, also verifies category and course parents and paths.
* (circular references are not fixed)
* (circular references are not fixed)
*/
function fix_course_sortorder() {
global $DB, $SITE;
@@ -1368,7 +1368,7 @@ function fix_course_sortorder() {
$defaultcat = reset($topcats);
foreach ($brokencats as $cat) {
$topcats[] = $cat;
}
}
}
// now walk recursively the tree and fix any problems found
@@ -1423,7 +1423,7 @@ function fix_course_sortorder() {
$cat->coursecount = $cat->newcount;
unset($cat->newcount);
$DB->update_record_raw('course_categories', $cat, true);
}
}
}
// now make sure that sortorders in course table are withing the category sortorder ranges
@@ -1483,7 +1483,7 @@ function fix_course_sortorder() {
foreach ($courses as $course) {
if ($course->sortorder != $cat->sortorder + $i) {
$course->sortorder = $cat->sortorder + $i;
$DB->update_record_raw('course', $course, true);
$DB->update_record_raw('course', $course, true);
}
$i++;
}
@@ -1691,31 +1691,51 @@ function get_course_mods($courseid) {
/**
* Given an id of a course module, finds the coursemodule description
*
* @param string $modulename name of module type, eg. resource, assignment,...
* @param string $modulename name of module type, eg. resource, assignment,... (optional, slower and less safe if not specified)
* @param int $cmid course module id (id in course_modules table)
* @param int $courseid optional course id for extra validation
* @param bool $sectionnum include relative section number (0,1,2 ...)
* @return object course module instance with instance and module name
*/
function get_coursemodule_from_id($modulename, $cmid, $courseid=0) {
function get_coursemodule_from_id($modulename, $cmid, $courseid=0, $sectionnum=false) {
global $DB;
$params = array();
$courseselect = "";
$params = array('cmid'=>$cmid);
if ($courseid) {
$courseselect = "cm.course = :courseid AND ";
$params['courseid'] = $courseid;
if (!$modulename) {
if (!$modulename = $DB->get_field_sql("SELECT md.name
FROM {modules} md
JOIN {course_modules} cm ON cm.module = md.id
WHERE cm.id = :cmid", $params)) {
return false;
}
}
$params['cmid'] = $cmid;
$params['modulename'] = $modulename;
return $DB->get_record_sql("SELECT cm.*, m.name, md.name as modname
FROM {course_modules} cm, {modules} md, {".$modulename."} m
WHERE $courseselect
cm.id = :cmid AND
cm.instance = m.id AND
md.name = :modulename AND
md.id = cm.module", $params);
$courseselect = "";
$sectionfield = "";
$sectionjoin = "";
if ($courseid) {
$courseselect = "AND cm.course = :courseid";
$params['courseid'] = $courseid;
}
if ($sectionnum) {
$sectionfield = ", cw.section AS sectionnum";
$sectionjoin = "LEFT JOIN {course_sections} cw ON cw.id = cm.section";
}
$sql = "SELECT cm.*, m.name, md.name AS modname $sectionfield
FROM {course_modules} cm
JOIN {modules} md ON md.id = cm.module
JOIN {".$modulename."} m ON m.id = cm.instance
$sectionjoin
WHERE cm.id = :cmid AND md.name = :modulename
$courseselect";
return $DB->get_record_sql($sql, $params);
}
/**
@@ -1724,29 +1744,37 @@ function get_coursemodule_from_id($modulename, $cmid, $courseid=0) {
* @param string $modulename name of module type, eg. resource, assignment,...
* @param int $instance module instance number (id in resource, assignment etc. table)
* @param int $courseid optional course id for extra validation
* @param bool $sectionnum include relative section number (0,1,2 ...)
* @return object course module instance with instance and module name
*/
function get_coursemodule_from_instance($modulename, $instance, $courseid=0) {
function get_coursemodule_from_instance($modulename, $instance, $courseid=0, $sectionnum=false) {
global $DB;
$params = array();
$params = array('instance'=>$instance, 'modulename'=>$modulename);
$courseselect = "";
$sectionfield = "";
$sectionjoin = "";
if ($courseid) {
$courseselect = "cm.course = :courseid AND ";
$courseselect = "AND cm.course = :courseid";
$params['courseid'] = $courseid;
}
$params['instance'] = $instance;
$params['modulename'] = $modulename;
return $DB->get_record_sql("SELECT cm.*, m.name, md.name as modname
FROM {course_modules} cm, {modules} md, {".$modulename."} m
WHERE $courseselect
cm.instance = m.id AND
md.name = :modulename AND
md.id = cm.module AND
m.id = :instance", $params);
if ($sectionnum) {
$sectionfield = ", cw.section AS sectionnum";
$sectionjoin = "LEFT JOIN {course_sections} cw ON cw.id = cm.section";
}
$sql = "SELECT cm.*, m.name, md.name AS modname $sectionfield
FROM {course_modules} cm
JOIN {modules} md ON md.id = cm.module
JOIN {".$modulename."} m ON m.id = cm.instance
$sectionjoin
WHERE m.id = :instance AND md.name = :modulename
$courseselect";
return $DB->get_record_sql($sql, $params);
}
/**