Пример #1
0
 /**
  * Test badge awarded event.
  */
 public function test_badge_awarded()
 {
     $systemcontext = context_system::instance();
     $sink = $this->redirectEvents();
     $badge = new badge($this->badgeid);
     $badge->issue($this->user->id, true);
     $badge->is_issued($this->user->id);
     $events = $sink->get_events();
     $this->assertCount(1, $events);
     $event = reset($events);
     $this->assertInstanceOf('\\core\\event\\badge_awarded', $event);
     $this->assertEquals($this->badgeid, $event->objectid);
     $this->assertEquals($this->user->id, $event->relateduserid);
     $this->assertEquals($systemcontext, $event->get_context());
     $sink->close();
 }
Пример #2
0
/**
 * Triggered when badge is manually awarded.
 *
 * @param   object      $data
 * @return  boolean
 */
function badges_award_handle_manual_criteria_review(stdClass $data)
{
    $criteria = $data->crit;
    $userid = $data->userid;
    $badge = new badge($criteria->badgeid);
    if (!$badge->is_active() || $badge->is_issued($userid)) {
        return true;
    }
    if ($criteria->review($userid)) {
        $criteria->mark_complete($userid);
        if ($badge->criteria[BADGE_CRITERIA_TYPE_OVERALL]->review($userid)) {
            $badge->criteria[BADGE_CRITERIA_TYPE_OVERALL]->mark_complete($userid);
            $badge->issue($userid);
        }
    }
    return true;
}
Пример #3
0
 /**
  * Triggered when 'user_updated' event happens.
  *
  * @param \core\event\user_updated $event event generated when user profile is updated.
  */
 public static function profile_criteria_review(\core\event\user_updated $event)
 {
     global $DB, $CFG;
     if (!empty($CFG->enablebadges)) {
         require_once $CFG->dirroot . '/lib/badgeslib.php';
         $userid = $event->objectid;
         if ($rs = $DB->get_records('badge_criteria', array('criteriatype' => BADGE_CRITERIA_TYPE_PROFILE))) {
             foreach ($rs as $r) {
                 $badge = new badge($r->badgeid);
                 if (!$badge->is_active() || $badge->is_issued($userid)) {
                     continue;
                 }
                 if ($badge->criteria[BADGE_CRITERIA_TYPE_PROFILE]->review($userid)) {
                     $badge->criteria[BADGE_CRITERIA_TYPE_PROFILE]->mark_complete($userid);
                     if ($badge->criteria[BADGE_CRITERIA_TYPE_OVERALL]->review($userid)) {
                         $badge->criteria[BADGE_CRITERIA_TYPE_OVERALL]->mark_complete($userid);
                         $badge->issue($userid);
                     }
                 }
             }
         }
     }
 }
Пример #4
0
 /**
  * Test badges assertion generated when a badge is issued.
  */
 public function test_badges_assertion()
 {
     $this->preventResetByRollback();
     // Messaging is not compatible with transactions.
     $badge = new badge($this->coursebadge);
     $this->assertFalse($badge->is_issued($this->user->id));
     $criteria_overall = award_criteria::build(array('criteriatype' => BADGE_CRITERIA_TYPE_OVERALL, 'badgeid' => $badge->id));
     $criteria_overall->save(array('agg' => BADGE_CRITERIA_AGGREGATION_ANY));
     $criteria_overall1 = award_criteria::build(array('criteriatype' => BADGE_CRITERIA_TYPE_PROFILE, 'badgeid' => $badge->id));
     $criteria_overall1->save(array('agg' => BADGE_CRITERIA_AGGREGATION_ALL, 'field_address' => 'address'));
     $this->user->address = 'Test address';
     $sink = $this->redirectEmails();
     user_update_user($this->user, false);
     $this->assertCount(1, $sink->get_messages());
     $sink->close();
     // Check if badge is awarded.
     $this->assertDebuggingCalled('Error baking badge image!');
     $awards = $badge->get_awards();
     $this->assertCount(1, $awards);
     // Get assertion.
     $award = reset($awards);
     $assertion = new core_badges_assertion($award->uniquehash);
     $testassertion = $this->assertion;
     // Make sure JSON strings have the same structure.
     $this->assertStringMatchesFormat($testassertion->badge, json_encode($assertion->get_badge_assertion()));
     $this->assertStringMatchesFormat($testassertion->class, json_encode($assertion->get_badge_class()));
     $this->assertStringMatchesFormat($testassertion->issuer, json_encode($assertion->get_issuer()));
 }
 public function test_badge_awards()
 {
     $badge = new badge($this->badgeid);
     $user1 = $this->getDataGenerator()->create_user();
     $badge->issue($user1->id, true);
     $this->assertTrue($badge->is_issued($user1->id));
     $user2 = $this->getDataGenerator()->create_user();
     $badge->issue($user2->id, true);
     $this->assertTrue($badge->is_issued($user2->id));
     $this->assertCount(2, $badge->get_awards());
 }