Beispiel #1
0
/**
 * 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).');
}
Beispiel #2
0
 /**
  * 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;
 }
Beispiel #3
0
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)) {