コード例 #1
0
ファイル: lib.php プロジェクト: evltuma/moodle
/**
 * Add nodes to myprofile page.
 *
 * @param \core_user\output\myprofile\tree $tree Tree object
 * @param stdClass $user user object
 * @param bool $iscurrentuser
 * @param stdClass $course Course object
 *
 * @return bool
 */
function core_badges_myprofile_navigation(\core_user\output\myprofile\tree $tree, $user, $iscurrentuser, $course)
{
    global $CFG, $PAGE, $USER, $SITE;
    require_once $CFG->dirroot . '/badges/renderer.php';
    if (empty($CFG->enablebadges) || !empty($course) && empty($CFG->badges_allowcoursebadges)) {
        // Y U NO LIKE BADGES ?
        return true;
    }
    // Add category. This node should appear after 'contact' so that administration block appears towards the end. Refer MDL-49928.
    $category = new core_user\output\myprofile\category('badges', get_string('badges', 'badges'), 'contact');
    $tree->add_category($category);
    $context = context_user::instance($user->id);
    $courseid = empty($course) ? 0 : $course->id;
    if ($USER->id == $user->id || has_capability('moodle/badges:viewotherbadges', $context)) {
        $records = badges_get_user_badges($user->id, $courseid, null, null, null, true);
        $renderer = new core_badges_renderer($PAGE, '');
        // Local badges.
        if ($records) {
            $title = get_string('localbadgesp', 'badges', format_string($SITE->fullname));
            $content = $renderer->print_badges_list($records, $user->id, true);
            $localnode = $mybadges = new core_user\output\myprofile\node('badges', 'localbadges', $title, null, null, $content);
            $tree->add_node($localnode);
        }
        // External badges.
        if ($courseid == 0 && !empty($CFG->badges_allowexternalbackpack)) {
            $backpack = get_backpack_settings($user->id);
            if (isset($backpack->totalbadges) && $backpack->totalbadges !== 0) {
                $title = get_string('externalbadgesp', 'badges');
                $content = $renderer->print_badges_list($backpack->badges, $user->id, true, true);
                $externalnode = $mybadges = new core_user\output\myprofile\node('badges', 'externalbadges', $title, null, null, $content);
                $tree->add_node($externalnode);
            }
        }
    }
}
コード例 #2
0
 public function get_content()
 {
     global $USER, $PAGE, $CFG;
     if ($this->content !== null) {
         return $this->content;
     }
     if (empty($this->config)) {
         $this->config = new stdClass();
     }
     // Number of badges to display.
     if (empty($this->config->numberofbadges)) {
         $this->config->numberofbadges = 10;
     }
     // Create empty content.
     $this->content = new stdClass();
     $this->content->text = '';
     if (empty($CFG->enablebadges)) {
         $this->content->text .= get_string('badgesdisabled', 'badges');
         return $this->content;
     }
     $courseid = $this->page->course->id;
     if ($courseid == SITEID) {
         $courseid = null;
     }
     if ($badges = badges_get_user_badges($USER->id, $courseid, 0, $this->config->numberofbadges)) {
         $output = $this->page->get_renderer('core', 'badges');
         $this->content->text = $output->print_badges_list($badges, $USER->id, true);
     } else {
         $this->content->text .= get_string('nothingtodisplay', 'block_badges');
     }
     return $this->content;
 }
コード例 #3
0
ファイル: mybadges.php プロジェクト: grug/moodle
        } else {
            if ($downloadall) {
                require_sesskey();
                badges_download($USER->id);
            }
        }
    }
}
$context = context_user::instance($USER->id);
require_capability('moodle/badges:manageownbadges', $context);
$PAGE->set_context($context);
$title = get_string('mybadges', 'badges');
$PAGE->set_title($title);
$PAGE->set_heading(fullname($USER));
$PAGE->set_pagelayout('mydashboard');
// Include JS files for backpack support.
badges_setup_backpack_js();
$output = $PAGE->get_renderer('core', 'badges');
$badges = badges_get_user_badges($USER->id);
echo $OUTPUT->header();
$totalcount = count($badges);
$records = badges_get_user_badges($USER->id, null, $page, BADGE_PERPAGE, $search);
$userbadges = new badge_user_collection($records, $USER->id);
$userbadges->sort = 'dateissued';
$userbadges->dir = 'DESC';
$userbadges->page = $page;
$userbadges->perpage = BADGE_PERPAGE;
$userbadges->totalcount = $totalcount;
$userbadges->search = $search;
echo $output->render($userbadges);
echo $OUTPUT->footer();
コード例 #4
0
ファイル: auth.php プロジェクト: anawu2006/PeerLearning
 function my_badges($username, $n = 10)
 {
     global $CFG;
     require_once $CFG->libdir . "/badgeslib.php";
     $username = utf8_decode($username);
     $username = strtolower($username);
     $user = get_complete_user_data('username', $username);
     if (!$user) {
         return array();
     }
     $badges = badges_get_user_badges($user->id, NULL, 0, $n);
     $bs = array();
     foreach ($badges as $badge) {
         $b = array();
         $b['name'] = $badge->name;
         $b['hash'] = $badge->uniquehash;
         $context = $badge->type == BADGE_TYPE_SITE ? context_system::instance() : context_course::instance($badge->courseid);
         $image_url = moodle_url::make_pluginfile_url($context->id, 'badges', 'badgeimage', $badge->id, '/', 'f1', false);
         $b['image_url'] = (string) $image_url;
         $bs[] = $b;
     }
     return $bs;
 }
コード例 #5
0
ファイル: externallib.php プロジェクト: kevtufc/leap
 /**
  * Get user information
  *
  * @param string $username EBS username, could be 8-digit int or string.
  * @return array An array describing targets (and metadata) for that user for all leapcore_* courses.
  */
 public static function get_badges_by_username($username)
 {
     global $CFG, $DB;
     $params = self::validate_parameters(self::get_badges_by_username_parameters(), array('username' => $username));
     if ($params['username'] == '') {
         header($_SERVER["SERVER_PROTOCOL"] . ' 422 Unprocessable Entity ($params[\'username\'] empty.)', true, 422);
         exit(1);
     }
     // Could do with knowing what this user's {user}.id is.
     $sql = "SELECT id from {user} WHERE username LIKE ?;";
     if (!($user = $DB->get_record_sql($sql, array($params['username'] . '%')))) {
         header($_SERVER["SERVER_PROTOCOL"] . ' 422 Unprocessable Entity ($params[\'username\'] could not be matched against a valid user.)', true, 422);
         exit(1);
     }
     require_once $CFG->libdir . '/badgeslib.php';
     // Get the user's badges.
     $userbadges = badges_get_user_badges($user->id);
     $output = array();
     if (!$userbadges) {
         return $output;
     } else {
         $output = array();
         $count = 0;
         foreach ($userbadges as $hash => $ubadge) {
             $count++;
             $output[$count]['course_id'] = $ubadge->courseid;
             $output[$count]['date_issued'] = $ubadge->dateissued;
             $output[$count]['description'] = $ubadge->description;
             $output[$count]['details_link'] = (string) new moodle_url('/badges/badge.php', array('hash' => $hash));
             $output[$count]['image_url'] = (string) badges_bake($hash, $ubadge->id);
             $output[$count]['name'] = $ubadge->name;
         }
     }
     return $output;
 }
コード例 #6
0
ファイル: deprecatedlib.php プロジェクト: speciwoman/moodle
/**
 * Print badges on user profile page.
 *
 * @deprecated since Moodle 2.9 MDL-45898 - please do not use this function any more.
 * @param int $userid User ID.
 * @param int $courseid Course if we need to filter badges (optional).
 */
function profile_display_badges($userid, $courseid = 0)
{
    global $CFG, $PAGE, $USER, $SITE;
    require_once $CFG->dirroot . '/badges/renderer.php';
    debugging('profile_display_badges() is deprecated.', DEBUG_DEVELOPER);
    // Determine context.
    if (isloggedin()) {
        $context = context_user::instance($USER->id);
    } else {
        $context = context_system::instance();
    }
    if ($USER->id == $userid || has_capability('moodle/badges:viewotherbadges', $context)) {
        $records = badges_get_user_badges($userid, $courseid, null, null, null, true);
        $renderer = new core_badges_renderer($PAGE, '');
        // Print local badges.
        if ($records) {
            $left = get_string('localbadgesp', 'badges', format_string($SITE->fullname));
            $right = $renderer->print_badges_list($records, $userid, true);
            echo html_writer::tag('dt', $left);
            echo html_writer::tag('dd', $right);
        }
        // Print external badges.
        if ($courseid == 0 && !empty($CFG->badges_allowexternalbackpack)) {
            $backpack = get_backpack_settings($userid);
            if (isset($backpack->totalbadges) && $backpack->totalbadges !== 0) {
                $left = get_string('externalbadgesp', 'badges');
                $right = $renderer->print_badges_list($backpack->badges, $userid, true, true);
                echo html_writer::tag('dt', $left);
                echo html_writer::tag('dd', $right);
            }
        }
    }
}
コード例 #7
0
ファイル: badgeslib_test.php プロジェクト: lucaboesch/moodle
 /**
  * Test the {@link badges_get_user_badges()} function in lib/badgeslib.php
  */
 public function test_badges_get_user_badges()
 {
     global $DB;
     // Messaging is not compatible with transactions.
     $this->preventResetByRollback();
     $badges = array();
     $user1 = $this->getDataGenerator()->create_user();
     $user2 = $this->getDataGenerator()->create_user();
     // Record the current time, we need to be precise about a couple of things.
     $now = time();
     // Create 11 badges with which to test.
     for ($i = 1; $i <= 11; $i++) {
         // Mock up a badge.
         $badge = new stdClass();
         $badge->id = null;
         $badge->name = "Test badge {$i}";
         $badge->description = "Testing badges {$i}";
         $badge->timecreated = $now - 12;
         $badge->timemodified = $now - 12;
         $badge->usercreated = $user1->id;
         $badge->usermodified = $user1->id;
         $badge->issuername = "Test issuer";
         $badge->issuerurl = "http://issuer-url.domain.co.nz";
         $badge->issuercontact = "*****@*****.**";
         $badge->expiredate = null;
         $badge->expireperiod = null;
         $badge->type = BADGE_TYPE_SITE;
         $badge->courseid = null;
         $badge->messagesubject = "Test message subject for badge {$i}";
         $badge->message = "Test message body for badge {$i}";
         $badge->attachment = 1;
         $badge->notification = 0;
         $badge->status = BADGE_STATUS_INACTIVE;
         $badgeid = $DB->insert_record('badge', $badge, true);
         $badges[$badgeid] = new badge($badgeid);
         $badges[$badgeid]->issue($user2->id, true);
         // Check it all actually worked.
         $this->assertCount(1, $badges[$badgeid]->get_awards());
         // Hack the database to adjust the time each badge was issued.
         // The alternative to this is sleep which is a no-no in unit tests.
         $DB->set_field('badge_issued', 'dateissued', $now - 11 + $i, array('userid' => $user2->id, 'badgeid' => $badgeid));
     }
     // Make sure the first user has no badges.
     $result = badges_get_user_badges($user1->id);
     $this->assertInternalType('array', $result);
     $this->assertCount(0, $result);
     // Check that the second user has the expected 11 badges.
     $result = badges_get_user_badges($user2->id);
     $this->assertCount(11, $result);
     // Test pagination.
     // Ordering is by time issued desc, so things will come out with the last awarded badge first.
     $result = badges_get_user_badges($user2->id, 0, 0, 4);
     $this->assertCount(4, $result);
     $lastbadgeissued = reset($result);
     $this->assertSame('Test badge 11', $lastbadgeissued->name);
     // Page 2. Expecting 4 results again.
     $result = badges_get_user_badges($user2->id, 0, 1, 4);
     $this->assertCount(4, $result);
     $lastbadgeissued = reset($result);
     $this->assertSame('Test badge 7', $lastbadgeissued->name);
     // Page 3. Expecting just three results here.
     $result = badges_get_user_badges($user2->id, 0, 2, 4);
     $this->assertCount(3, $result);
     $lastbadgeissued = reset($result);
     $this->assertSame('Test badge 3', $lastbadgeissued->name);
     // Page 4.... there is no page 4.
     $result = badges_get_user_badges($user2->id, 0, 3, 4);
     $this->assertCount(0, $result);
     // Test search.
     $result = badges_get_user_badges($user2->id, 0, 0, 0, 'badge 1');
     $this->assertCount(3, $result);
     $lastbadgeissued = reset($result);
     $this->assertSame('Test badge 11', $lastbadgeissued->name);
     // The term Totara doesn't appear anywhere in the badges.
     $result = badges_get_user_badges($user2->id, 0, 0, 0, 'Totara');
     $this->assertCount(0, $result);
     // Issue a user with a course badge and verify its returned based on if
     // coursebadges are enabled or disabled.
     $sitebadgeid = key($badges);
     $badges[$sitebadgeid]->issue($this->user->id, true);
     $badge = new stdClass();
     $badge->id = null;
     $badge->name = "Test course badge";
     $badge->description = "Testing course badge";
     $badge->timecreated = $now;
     $badge->timemodified = $now;
     $badge->usercreated = $user1->id;
     $badge->usermodified = $user1->id;
     $badge->issuername = "Test issuer";
     $badge->issuerurl = "http://issuer-url.domain.co.nz";
     $badge->issuercontact = "*****@*****.**";
     $badge->expiredate = null;
     $badge->expireperiod = null;
     $badge->type = BADGE_TYPE_COURSE;
     $badge->courseid = $this->course->id;
     $badge->messagesubject = "Test message subject for course badge";
     $badge->message = "Test message body for course badge";
     $badge->attachment = 1;
     $badge->notification = 0;
     $badge->status = BADGE_STATUS_ACTIVE;
     $badgeid = $DB->insert_record('badge', $badge, true);
     $badges[$badgeid] = new badge($badgeid);
     $badges[$badgeid]->issue($this->user->id, true);
     // With coursebadges off, we should only get the site badge.
     set_config('badges_allowcoursebadges', false);
     $result = badges_get_user_badges($this->user->id);
     $this->assertCount(1, $result);
     // With it on, we should get both.
     set_config('badges_allowcoursebadges', true);
     $result = badges_get_user_badges($this->user->id);
     $this->assertCount(2, $result);
 }
コード例 #8
0
ファイル: external.php プロジェクト: evltuma/moodle
 /**
  * Returns the list of badges awarded to a user.
  *
  * @param int $userid       user id
  * @param int $courseid     course id
  * @param int $page         page of records to return
  * @param int $perpage      number of records to return per page
  * @param string  $search   a simple string to search for
  * @param bool $onlypublic  whether to return only public badges
  * @return array array containing warnings and the awarded badges
  * @since  Moodle 3.1
  * @throws moodle_exception
  */
 public static function get_user_badges($userid = 0, $courseid = 0, $page = 0, $perpage = 0, $search = '', $onlypublic = false)
 {
     global $CFG, $USER;
     $warnings = array();
     $params = array('userid' => $userid, 'courseid' => $courseid, 'page' => $page, 'perpage' => $perpage, 'search' => $search, 'onlypublic' => $onlypublic);
     $params = self::validate_parameters(self::get_user_badges_parameters(), $params);
     if (empty($CFG->enablebadges)) {
         throw new moodle_exception('badgesdisabled', 'badges');
     }
     if (empty($CFG->badges_allowcoursebadges) && $params['courseid'] != 0) {
         throw new moodle_exception('coursebadgesdisabled', 'badges');
     }
     // Default value for userid.
     if (empty($params['userid'])) {
         $params['userid'] = $USER->id;
     }
     // Validate the user.
     $user = core_user::get_user($params['userid'], '*', MUST_EXIST);
     core_user::require_active_user($user);
     $usercontext = context_user::instance($user->id);
     self::validate_context($usercontext);
     if ($USER->id != $user->id) {
         require_capability('moodle/badges:viewotherbadges', $usercontext);
         // We are looking other user's badges, we must retrieve only public badges.
         $params['onlypublic'] = true;
     }
     $userbadges = badges_get_user_badges($user->id, $params['courseid'], $params['page'], $params['perpage'], $params['search'], $params['onlypublic']);
     $result = array();
     $result['badges'] = array();
     $result['warnings'] = $warnings;
     foreach ($userbadges as $badge) {
         $context = $badge->type == BADGE_TYPE_SITE ? context_system::instance() : context_course::instance($badge->courseid);
         $badge->badgeurl = moodle_url::make_webservice_pluginfile_url($context->id, 'badges', 'badgeimage', $badge->id, '/', 'f1')->out(false);
         // Return all the information if we are requesting our own badges.
         // Or, if we have permissions for configuring badges in the badge context.
         if ($USER->id == $user->id or has_capability('moodle/badges:configuredetails', $context)) {
             $result['badges'][] = (array) $badge;
         } else {
             $result['badges'][] = array('name' => $badge->name, 'description' => $badge->description, 'badgeurl' => $badge->badgeurl, 'issuername' => $badge->issuername, 'issuerurl' => $badge->issuerurl, 'issuercontact' => $badge->issuercontact, 'uniquehash' => $badge->uniquehash, 'dateissued' => $badge->dateissued, 'dateexpire' => $badge->dateexpire);
         }
     }
     return $result;
 }
コード例 #9
0
function get_badges_list($userid, $courseid = 0)
{
    global $CFG, $USER;
    require_once $CFG->dirroot . '/badges/renderer.php';
    if ($courseid == 0) {
        $context = context_system::instance();
    } else {
        $context = context_course::instance($courseid);
    }
    if ($USER->id == $userid || has_capability('moodle/badges:viewotherbadges', $context)) {
        if ($courseid == 0) {
            $records = get_global_user_badges($userid);
        } else {
            $records = badges_get_user_badges($userid, $courseid, null, null, null, true);
        }
        // Print local badges.
        if ($records) {
            $out = '';
            foreach ($records as $record) {
                $imageurl = moodle_url::make_pluginfile_url($context->id, 'badges', 'badgeimage', $record->id, '/', 'f1', false);
                $image = html_writer::empty_tag('img', array('src' => $imageurl, 'class' => 'badge-image', 'style' => 'width: 30px; height: 30px;'));
                $url = new moodle_url('/badges/badge.php', array('hash' => $record->uniquehash));
                $link = html_writer::link($url, $image, array('title' => $record->name));
                $out .= $link;
            }
            return $out;
        }
    }
}