예제 #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
 public function test_badge_awards()
 {
     $this->preventResetByRollback();
     // Messaging is not compatible with transactions.
     $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());
 }
예제 #4
0
 /**
  * Tests the core_badges_myprofile_navigation() function with a course badge.
  */
 public function test_core_badges_myprofile_navigation_with_course_badge()
 {
     // Set up the test.
     $tree = new \core_user\output\myprofile\tree();
     $this->setAdminUser();
     $badge = new badge($this->coursebadge);
     $badge->issue($this->user->id, true);
     $iscurrentuser = false;
     // Check the node tree is correct.
     core_badges_myprofile_navigation($tree, $this->user, $iscurrentuser, $this->course);
     $reflector = new ReflectionObject($tree);
     $nodes = $reflector->getProperty('nodes');
     $nodes->setAccessible(true);
     $this->assertArrayHasKey('localbadges', $nodes->getValue($tree));
 }
 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());
 }
예제 #6
0
파일: observer.php 프로젝트: evltuma/moodle
 /**
  * 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);
                     }
                 }
             }
         }
     }
 }