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; $instance = get_record($mods[$lockid]->modname, "id", $mods[$lockid]->instance); if (record_exists("log", "userid", $USER->id, "module", $mods[$lockid]->modname , "info" , $mods[$lockid]->instance) or $mods[$lockid]->modname == "feedback") { //5 $locks[$modlock->lockid] = "open"; $libfile = $CFG->dirroot."/mod/".$mods[$lockid]->modname."/lib.php"; 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 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("
".get_string("activitycurrentlylocked", "lock")."

$locklist

", "CENTER"); die; case 1: notice(get_string("activitycurrentlylocked", "lock").'

'.$locklist.'

'); break; case 2: print_simple_box("
".get_string("activitycurrentlylocked", "lock")."

$locklist

", "CENTER"); close_window_button(); die; } } function write_locks_to_db($passmarks, $delay, $moduleid) { global $USER, $CFG, $course; $lock->id = $moduleid; $lock->delay = $delay; update_record("course_modules", $lock); unset($lock); delete_records("course_module_locks", "moduleid", $moduleid); while(list($predecessor, $passmark) = each($passmarks)){ if (is_numeric($predecessor)) { if ($passmark) { $lock->moduleid = $moduleid; $lock->courseid = $course->id; $lock->lockid = $predecessor; $lock->requirement = $passmark; insert_record("course_module_locks", $lock); unset($lock); } } } } ?>