Пример #1
0
 /**
  * Used in course/lib.php because we need to disable the completion JS if
  * a completion value affects a conditional activity.
  *
  * @param \stdClass $course Moodle course object
  * @param int $cmid Course-module id
  * @return bool True if this is used in a condition, false otherwise
  */
 public static function completion_value_used($course, $cmid)
 {
     // Have we already worked out a list of required completion values
     // for this course? If so just use that.
     if (!array_key_exists($course->id, self::$modsusedincondition)) {
         // We don't have data for this course, build it.
         $modinfo = get_fast_modinfo($course);
         self::$modsusedincondition[$course->id] = array();
         // Activities.
         foreach ($modinfo->cms as $othercm) {
             if (is_null($othercm->availability)) {
                 continue;
             }
             $ci = new \core_availability\info_module($othercm);
             $tree = $ci->get_availability_tree();
             foreach ($tree->get_all_children('availability_completion\\condition') as $cond) {
                 self::$modsusedincondition[$course->id][$cond->cmid] = true;
             }
         }
         // Sections.
         foreach ($modinfo->get_section_info_all() as $section) {
             if (is_null($section->availability)) {
                 continue;
             }
             $ci = new \core_availability\info_section($section);
             $tree = $ci->get_availability_tree();
             foreach ($tree->get_all_children('availability_completion\\condition') as $cond) {
                 self::$modsusedincondition[$course->id][$cond->cmid] = true;
             }
         }
     }
     return array_key_exists($cmid, self::$modsusedincondition[$course->id]);
 }
Пример #2
0
 /**
  * Changes all date restrictions on a course by the specified shift amount.
  * Used by the course reset feature.
  *
  * @param int $courseid Course id
  * @param int $timeshift Offset in seconds
  */
 public static function update_all_dates($courseid, $timeshift)
 {
     global $DB;
     $modinfo = get_fast_modinfo($courseid);
     $anychanged = false;
     // Adjust dates from all course modules.
     foreach ($modinfo->cms as $cm) {
         if (!$cm->availability) {
             continue;
         }
         $info = new \core_availability\info_module($cm);
         $tree = $info->get_availability_tree();
         $dates = $tree->get_all_children('availability_date\\condition');
         $changed = false;
         foreach ($dates as $date) {
             $date->time += $timeshift;
             $changed = true;
         }
         // Save the updated course module.
         if ($changed) {
             $DB->set_field('course_modules', 'availability', json_encode($tree->save()), array('id' => $cm->id));
             $anychanged = true;
         }
     }
     // Adjust dates from all course sections.
     foreach ($modinfo->get_section_info_all() as $section) {
         if (!$section->availability) {
             continue;
         }
         $info = new \core_availability\info_section($section);
         $tree = $info->get_availability_tree();
         $dates = $tree->get_all_children('availability_date\\condition');
         $changed = false;
         foreach ($dates as $date) {
             $date->time += $timeshift;
             $changed = true;
         }
         // Save the updated course module.
         if ($changed) {
             $DB->set_field('course_sections', 'availability', json_encode($tree->save()), array('id' => $section->id));
             $anychanged = true;
         }
     }
     // Ensure course cache is cleared if required.
     if ($anychanged) {
         rebuild_course_cache($courseid, true);
     }
 }