/** * 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(); }
/** * 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; }
/** * 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); } } } } } }
/** * 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()); }