/** * Check whether or not the student(s) have earned a badge * * @param int $member_id * @return bool **/ public function hasEarnedBadge($member_id = null) { // Check whether or not they're eligable for a badge at this point // First, does this course even offers a badge if ($this->course->offering()->section()->badge()->isAvailable()) { $members = $this->isEligibleForRecognition($member_id); if ($members && count($members) > 0) { foreach ($members as $m) { // Mark student as having earned badge $badge = MemberBadge::loadByMemberId($m); $sb = Section\Badge::loadBySectionId($this->course->offering()->section()->get('id')); if (is_object($badge) && !$badge->hasEarned()) { $badge->set('member_id', $m); $badge->set('section_badge_id', $sb->get('id')); $badge->set('earned', 1); $badge->set('earned_on', \Date::toSql()); $badge->set('criteria_id', $sb->get('criteria_id')); $badge->store(); // Get courses config $cconfig = \Component::params('com_courses'); // Tell the badge provider that they've earned the badge $request_type = $cconfig->get('badges_request_type', 'oauth'); $badgesHandler = new \Hubzero\Badges\Wallet(strtoupper($sb->get('provider_name')), $request_type); $badgesProvider = $badgesHandler->getProvider(); $credentials = new \stdClass(); $credentials->consumer_key = $this->config()->get($sb->get('provider_name') . '_consumer_key'); $credentials->consumer_secret = $this->config()->get($sb->get('provider_name') . '_consumer_secret'); $credentials->clientId = $this->config()->get($sb->get('provider_name') . '_client_id'); $badgesProvider->setCredentials($credentials); $dbo = \App::get('db'); $memberTbl = new Tables\Member($dbo); $memberTbl->loadByMemberId($m); $user_id = $memberTbl->get('user_id'); $data = new \stdClass(); $data->id = $sb->get('provider_badge_id'); $data->evidenceUrl = rtrim(\Request::root(), '/') . '/courses/badge/' . $sb->get('id') . '/validation/' . $badge->get('validation_token'); $users = array(); $users[] = \User::getInstance($user_id)->get('email'); // Publish assertion $badgesProvider->grantBadge($data, $users); } } } } else { return false; } }
/** * Get section badge * * @return obj */ public function badge() { if (!isset($this->_badge)) { $this->_badge = Section\Badge::loadBySectionId($this->get('id')); } return $this->_badge; }
/** * Displays an edit form * * @return void */ public function editTask($model = null) { Request::setVar('hidemainmenu', 1); if (!is_object($model)) { // Incoming $id = Request::getVar('id', array(0)); // Get the single ID we're working with if (is_array($id)) { $id = !empty($id) ? $id[0] : 0; } $model = \Components\Courses\Models\Section::getInstance($id); } $this->view->row = $model; if (!$this->view->row->get('offering_id')) { $this->view->row->set('offering_id', Request::getInt('offering', 0)); } $this->view->offering = \Components\Courses\Models\Offering::getInstance($this->view->row->get('offering_id')); $this->view->course = \Components\Courses\Models\Course::getInstance($this->view->offering->get('course_id')); $this->view->badge = \Components\Courses\Models\Section\Badge::loadBySectionId($this->view->row->get('id')); // Set any errors foreach ($this->getErrors() as $error) { \Notify::error($error); } // Output the HTML $this->view->setLayout('edit')->display(); }