/**
  * Find users who have completed this criteria and mark them accordingly
  */
 public function cron()
 {
     global $DB;
     // Get all users who meet this criteria
     $sql = '
         SELECT DISTINCT
             c.id AS course,
             cr.id AS criteriaid,
             ra.userid AS userid,
             mc.timemodified AS timecompleted
         FROM
             {course_completion_criteria} cr
         INNER JOIN
             {course} c
          ON cr.course = c.id
         INNER JOIN
             {context} con
          ON con.instanceid = c.id
         INNER JOIN
             {role_assignments} ra
           ON ra.contextid = con.id
         INNER JOIN
             {course_modules_completion} mc
          ON mc.coursemoduleid = cr.moduleinstance
         AND mc.userid = ra.userid
         LEFT JOIN
             {course_completion_crit_compl} cc
          ON cc.criteriaid = cr.id
         AND cc.userid = ra.userid
         WHERE
             cr.criteriatype = ' . COMPLETION_CRITERIA_TYPE_ACTIVITY . '
         AND con.contextlevel = ' . CONTEXT_COURSE . '
         AND c.enablecompletion = 1
         AND cc.id IS NULL
         AND (
             mc.completionstate = ' . COMPLETION_COMPLETE . '
          OR mc.completionstate = ' . COMPLETION_COMPLETE_PASS . '
             )
     ';
     // Loop through completions, and mark as complete
     $rs = $DB->get_recordset_sql($sql);
     foreach ($rs as $record) {
         $completion = new completion_criteria_completion((array) $record, DATA_OBJECT_FETCH_BY_KEY);
         $completion->mark_complete($record->timecompleted);
     }
     $rs->close();
 }
 /**
  * Find user's who have completed this criteria
  * @access  public
  * @return  void
  */
 public function cron()
 {
     global $DB;
     // Get all users who meet this criteria
     $sql = "\n            SELECT DISTINCT\n                c.id AS course,\n                cr.id AS criteriaid,\n                ra.userid AS userid,\n                cc.timecompleted AS timecompleted\n            FROM\n                {course_completion_criteria} cr\n            INNER JOIN\n                {course} c\n             ON cr.course = c.id\n            INNER JOIN\n                {context} con\n             ON con.instanceid = c.id\n            INNER JOIN\n                {role_assignments} ra\n              ON ra.contextid = con.id\n            INNER JOIN\n                {course_completions} cc\n             ON cc.course = cr.courseinstance\n            AND cc.userid = ra.userid\n            LEFT JOIN\n                {course_completion_crit_compl} ccc\n             ON ccc.criteriaid = cr.id\n            AND ccc.userid = ra.userid\n            WHERE\n                cr.criteriatype = " . COMPLETION_CRITERIA_TYPE_COURSE . "\n            AND con.contextlevel = " . CONTEXT_COURSE . "\n            AND c.enablecompletion = 1\n            AND ccc.id IS NULL\n            AND cc.timecompleted IS NOT NULL\n        ";
     // Loop through completions, and mark as complete
     $rs = $DB->get_recordset_sql($sql);
     foreach ($rs as $record) {
         $completion = new completion_criteria_completion((array) $record);
         $completion->mark_complete($record->timecompleted);
     }
     $rs->close();
 }
 /**
  * Find user's who have completed this criteria
  */
 public function cron()
 {
     global $DB;
     /*
      * Get all users who match meet this criteria
      *
      * We can safely ignore duplicate enrolments for
      * a user in a course here as we only care if
      * one of the enrolments has passed the set
      * duration.
      */
     $sql = '
         SELECT
             c.id AS course,
             cr.id AS criteriaid,
             u.id AS userid,
             ue.timestart AS otimestart,
             (ue.timestart + cr.enrolperiod) AS ctimestart,
             ue.timecreated AS otimeenrolled,
             (ue.timecreated + cr.enrolperiod) AS ctimeenrolled
         FROM
             {user} u
         INNER JOIN
             {user_enrolments} ue
          ON ue.userid = u.id
         INNER JOIN
             {enrol} e
          ON e.id = ue.enrolid
         INNER JOIN
             {course} c
          ON c.id = e.courseid
         INNER JOIN
             {course_completion_criteria} cr
          ON c.id = cr.course
         LEFT JOIN
             {course_completion_crit_compl} cc
          ON cc.criteriaid = cr.id
         AND cc.userid = u.id
         WHERE
             cr.criteriatype = ' . COMPLETION_CRITERIA_TYPE_DURATION . '
         AND c.enablecompletion = 1
         AND cc.id IS NULL
         AND
         (
             ue.timestart > 0 AND ue.timestart + cr.enrolperiod < ?
          OR ue.timecreated > 0 AND ue.timecreated + cr.enrolperiod < ?
         )
     ';
     // Loop through completions, and mark as complete
     $now = time();
     $rs = $DB->get_recordset_sql($sql, array($now, $now));
     foreach ($rs as $record) {
         $completion = new completion_criteria_completion((array) $record, DATA_OBJECT_FETCH_BY_KEY);
         // Use time start if not 0, otherwise use timeenrolled
         if ($record->otimestart) {
             $completion->mark_complete($record->ctimestart);
         } else {
             $completion->mark_complete($record->ctimeenrolled);
         }
     }
     $rs->close();
 }
Пример #4
0
 /**
  * Find user's who have completed this criteria
  */
 public function cron()
 {
     global $DB;
     // Get all users who match meet this criteria
     $sql = '
         SELECT DISTINCT
             c.id AS course,
             cr.timeend AS timeend,
             cr.id AS criteriaid,
             ra.userid AS userid
         FROM
             {course_completion_criteria} cr
         INNER JOIN
             {course} c
          ON cr.course = c.id
         INNER JOIN
             {context} con
          ON con.instanceid = c.id
         INNER JOIN
             {role_assignments} ra
          ON ra.contextid = con.id
         LEFT JOIN
             {course_completion_crit_compl} cc
          ON cc.criteriaid = cr.id
         AND cc.userid = ra.userid
         WHERE
             cr.criteriatype = ' . COMPLETION_CRITERIA_TYPE_DATE . '
         AND con.contextlevel = ' . CONTEXT_COURSE . '
         AND c.enablecompletion = 1
         AND cc.id IS NULL
         AND cr.timeend < ?
     ';
     // Loop through completions, and mark as complete
     $rs = $DB->get_recordset_sql($sql, array(time()));
     foreach ($rs as $record) {
         $completion = new completion_criteria_completion((array) $record);
         $completion->mark_complete($record->timeend);
     }
     $rs->close();
 }
Пример #5
0
 /**
  * Find user's who have completed this criteria
  */
 public function cron()
 {
     global $DB;
     // Get all users who meet this criteria
     $sql = '
         SELECT DISTINCT
             c.id AS course,
             cr.id AS criteriaid,
             ra.userid AS userid,
             gg.finalgrade AS gradefinal,
             gg.timemodified AS timecompleted
         FROM
             {course_completion_criteria} cr
         INNER JOIN
             {course} c
          ON cr.course = c.id
         INNER JOIN
             {context} con
          ON con.instanceid = c.id
         INNER JOIN
             {role_assignments} ra
           ON ra.contextid = con.id
         INNER JOIN
             {grade_items} gi
          ON gi.courseid = c.id
         AND gi.itemtype = \'course\'
         INNER JOIN
             {grade_grades} gg
          ON gg.itemid = gi.id
         AND gg.userid = ra.userid
         LEFT JOIN
             {course_completion_crit_compl} cc
          ON cc.criteriaid = cr.id
         AND cc.userid = ra.userid
         WHERE
             cr.criteriatype = ' . COMPLETION_CRITERIA_TYPE_GRADE . '
         AND con.contextlevel = ' . CONTEXT_COURSE . '
         AND c.enablecompletion = 1
         AND cc.id IS NULL
         AND gg.finalgrade >= cr.gradepass
     ';
     // Loop through completions, and mark as complete
     $rs = $DB->get_recordset_sql($sql);
     foreach ($rs as $record) {
         $completion = new completion_criteria_completion((array) $record, DATA_OBJECT_FETCH_BY_KEY);
         $completion->mark_complete($record->timecompleted);
     }
     $rs->close();
 }