id)) { // The idea is, you should only need to download a list of modules in a course once
$mods = get_course_mods($course->id);
$currentcourse = $course->id;
}
if ($module->delay and $module->delay !== "0:0:0") { //module has a time delay
$locks['time'] = "closed";
if ($student = get_record("user_students", "userid", $USER->id, "course", $course->id)) { //user has enrolled
list($delayday, $delayhour, $delaymin) = explode(":", $module->delay);
$delay = ($delaymin*60) + ($delayhour*60*60) + ($delayday*24*60*60);
if (time() > ($student->time + $delay)) { //student waited long enough
$locks['time'] = "open";
}
}
}
if ($modlocks = get_records("course_module_locks", "moduleid", $module->id)) { // Module has locks
foreach($modlocks as $modlock) { //6
$lockid = $modlock->lockid;
echo "lockid: $lockid
"; ///debug
$instance = get_record($mods[$lockid]->modname, "id", $mods[$lockid]->instance);
echo "instance:
"; ///debug
print_r($instance); ///debug
echo "
"; ///debug
if (record_exists("log", "userid", $USER->id, "module", $mods[$lockid]->modname , "info" , $mods[$lockid]->instance)) { //5
$locks[$modlock->lockid] = "open";
$libfile = $CFG->dirroot."/mod/".$mods[$lockid]->modname."/lib.php";
echo "libfile: $libfile
"; ///debug
if (file_exists($libfile)) { //4
require_once($libfile);
$gradefunction = $mods[$lockid]->modname."_grades";
if (function_exists($gradefunction)) { // Modules with grade function //3
if ($modgrades = $gradefunction($mods[$lockid]->instance)) { //2
echo "modgrades:
"; ///debug
print_r($modgrades); ///debug
echo "
"; ///debug
if (isset($modgrades->grades[$USER->id]) and $modgrades->grades[$USER->id] >= $modlock->requirement) { //1
$locks[$modlock->lockid] = "open";
} else {
$locks[$modlock->lockid] = "closed";
} //1
} //2
} //3
} //4
} else {
$locks[$modlock->lockid] = "closed";
} //5
} //6 damn this nesting!
}
if (isset($locks)) {
return $locks;
} else { // No locks on module
return false;
}
}
function activity_complete($mod) {
global $USER, $CFG;
$requiredgrade = get_records("course_module_locks", "lockid", $mod->id, "requirement DESC LIMIT 1");
if (is_array($requiredgrade)) {$requiredgrade = current($requiredgrade);};
$instance = get_record($mod->modname, "id", $mod->instance);
if (record_exists("log", "userid", $USER->id, "module", $mod->modname , "info" , $mod->instance)) {
$complete = true;
$libfile = $CFG->dirroot."/mod/".$mod->modname."/lib.php";
if (file_exists($libfile)) {
require_once($libfile);
$gradefunction = $mod->modname."_grades";
if (function_exists($gradefunction)) { // Modules with grade function
if ($modgrades = $gradefunction($mod->instance)) {
if (isset($modgrades->grades[$USER->id]) and $modgrades->grades[$USER->id] >= $requiredgrade->requirement) {
$complete = true;
} else {
$complete = false;
}
}
}
}
} else {
$complete = false;
}
return $complete;
}
function check_locks($module, $showbutton=1) {
global $USER, $CFG, $course;
if (!isteacher($course->id)) {
if ($locks = islocked($module)) {
if (array_search("closed", $locks)) {
ksort($locks);
reset($locks);
return print_lock_notice($locks, $showbutton);
}
}
}
return false;
}
function print_lock_notice($locks, $showbutton) {
global $USER, $CFG, $course; //It there an alternative to global $course?
require_once($CFG->dirroot.'/course/lib.php');
get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
$locklist = "";
print_header("$course->shortname", "$course->fullname",
"wwwroot/course/view.php?id=$course->id\">$course->shortname");
foreach ($locks as $lock => $status) {
if (is_numeric($lock) and $status == "closed") {
$instance = get_record($mods[$lock]->modname, "id", $mods[$lock]->instance);
$locklist .= "$instance->name
";
} else {
if ($status == "closed") {
$locklist .= get_string("timedelay", "lock")."
";
}
}
}
switch ($showbutton) {
case 0:
print_simple_box("
$locklist
'.$locklist.'
'); break; case 2: print_simple_box("$locklist