/** * Reviews criteria and awards badges * * First find all badges that can be earned, then reviews each badge. * (Not sure how efficient this is timewise). */ function badge_review_cron() { global $DB, $CFG; $total = 0; $courseparams = array(); if (empty($CFG->badges_allowcoursebadges)) { $coursesql = ''; } else { $coursesql = ' OR EXISTS (SELECT id FROM {course} WHERE visible = :visible AND startdate < :current) '; $courseparams = array('visible' => true, 'current' => time()); } $sql = 'SELECT id FROM {badge} WHERE (status = :active OR status = :activelocked) AND (type = :site ' . $coursesql . ')'; $badgeparams = array('active' => BADGE_STATUS_ACTIVE, 'activelocked' => BADGE_STATUS_ACTIVE_LOCKED, 'site' => BADGE_TYPE_SITE); $params = array_merge($badgeparams, $courseparams); $badges = $DB->get_fieldset_sql($sql, $params); mtrace('Started reviewing available badges.'); foreach ($badges as $bid) { $badge = new badge($bid); if ($badge->has_criteria()) { if (debugging()) { mtrace('Processing badge "' . $badge->name . '"...'); } $issued = $badge->review_all_criteria(); if (debugging()) { mtrace('...badge was issued to ' . $issued . ' users.'); } $total += $issued; } } mtrace('Badges were issued ' . $total . ' time(s).'); }
/** * Prints badge status box. * @return Either the status box html as a string or null */ public function print_badge_status_box(badge $badge) { if (has_capability('moodle/badges:configurecriteria', $badge->get_context())) { $table = new html_table(); $table->attributes['class'] = 'boxaligncenter statustable'; if (!$badge->has_criteria()) { $criteriaurl = new moodle_url('/badges/criteria.php', array('id' => $badge->id)); $status = get_string('nocriteria', 'badges'); if ($this->page->url != $criteriaurl) { $action = $this->output->single_button($criteriaurl, get_string('addcriteria', 'badges'), 'POST', array('class' => 'activatebadge')); } else { $action = ''; } $row = array($status, $action); } else { $status = get_string('statusmessage_' . $badge->status, 'badges'); if ($badge->is_active()) { $action = $this->output->single_button(new moodle_url('/badges/action.php', array('id' => $badge->id, 'lock' => 1, 'sesskey' => sesskey(), 'return' => $this->page->url->out_as_local_url(false))), get_string('deactivate', 'badges'), 'POST', array('class' => 'activatebadge')); } else { $action = $this->output->single_button(new moodle_url('/badges/action.php', array('id' => $badge->id, 'activate' => 1, 'sesskey' => sesskey(), 'return' => $this->page->url->out_as_local_url(false))), get_string('activate', 'badges'), 'POST', array('class' => 'activatebadge')); } $row = array($status . $this->output->help_icon('status', 'badges'), $action); } $table->data[] = $row; $style = $badge->is_active() ? 'generalbox statusbox active' : 'generalbox statusbox inactive'; return $this->output->box(html_writer::table($table), $style); } return null; }
if ($delete && has_capability('moodle/badges:deletebadge', $PAGE->context)) { $badge = new badge($delete); if (!$confirm) { echo $output->header(); echo $output->confirm(get_string('delconfirm', 'badges', $badge->name), new moodle_url($PAGE->url, array('delete' => $badge->id, 'confirm' => 1)), $returnurl); echo $output->footer(); die; } else { require_sesskey(); $badge->delete(); redirect($returnurl); } } if ($activate && has_capability('moodle/badges:configuredetails', $PAGE->context)) { $badge = new badge($activate); if (!$badge->has_criteria()) { $err = get_string('error:cannotact', 'badges') . get_string('nocriteria', 'badges'); } else { if ($badge->is_locked()) { $badge->set_status(BADGE_STATUS_ACTIVE_LOCKED); $msg = get_string('activatesuccess', 'badges'); } else { require_sesskey(); $badge->set_status(BADGE_STATUS_ACTIVE); $msg = get_string('activatesuccess', 'badges'); } $returnurl->param('msg', $msg); redirect($returnurl); } } else { if ($deactivate && has_capability('moodle/badges:configuredetails', $PAGE->context)) {