/** * 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; } }
/** * Store changes to this offering * * @param boolean $check Perform data validation check? * @return boolean False if error, True on success */ public function delete() { // Remove associated date data $sd = new Tables\SectionDate($this->_db); if (!$sd->deleteBySection($this->get('id'))) { $this->setError($sd->getError()); return false; } // Remove associated member data $sm = new Tables\Member($this->_db); if (!$sm->deleteBySection($this->get('id'))) { $this->setError($sm->getError()); return false; } $value = parent::delete(); $this->importPlugin('courses')->trigger('onAfterDeleteSection', array($this)); return $value; }
/** * Remove one or more users from the course manager list * * @return void */ public function updateTask() { // Check for request forgeries Request::checkToken(); // Incoming member ID $id = Request::getInt('id', 0); if (!$id) { $this->setError(Lang::txt('COM_COURSES_ERROR_MISSING_COURSE')); $this->displayTask(); return; } $model = Course::getInstance($id); $entries = Request::getVar('entries', array(0), 'post'); require_once dirname(dirname(__DIR__)) . DS . 'tables' . DS . 'member.php'; foreach ($entries as $key => $data) { // Retrieve user's account info $tbl = new Tables\Member($this->database); $tbl->load($data['user_id'], $data['course_id'], $data['offering_id'], $data['section_id'], 0); if ($tbl->role_id == $data['role_id']) { continue; } $tbl->role_id = $data['role_id']; if (!$tbl->store()) { $this->setError($tbl->getError()); } } // Push through to the hosts view $this->displayTask(); }
/** * Add one or more user IDs or usernames to the managers list * * @param array $value List of IDs or usernames * @return void */ public function add($data = null, $role_id = 0) { $user_ids = $this->_userIds($data); $tbl = new Tables\Member($this->_db); $filters = array('course_id' => (int) $this->get('id')); foreach ($user_ids as $user_id) { $filters['user_id'] = $user_id; if ($data = $tbl->find($filters)) { $this->_managers[$user_id] = new Manager(array_shift($data), $this->get('id')); if (count($data) > 0) { foreach ($data as $key => $result) { $tbl->delete($result->id); //$data[$key] = new Manager($result, $this->get('id')); //$data[$key]->delete(); } } } if (!isset($this->_managers[$user_id])) { $this->_managers[$user_id] = new Manager($user_id, $this->get('id')); } $this->_managers[$user_id]->set('user_id', $user_id); $this->_managers[$user_id]->set('course_id', $this->get('id')); $this->_managers[$user_id]->set('role_id', $role_id); $this->_managers[$user_id]->set('section_id', 0); $this->_managers[$user_id]->set('student', 0); $this->_managers[$user_id]->set('offering_id', 0); $this->_managers[$user_id]->store(); } }
/** * Get a list of students * * @param array $filters Filters to build query from * @param boolean $clear Force a new dataset? * @return mixed */ public function students($filters = array(), $clear = false) { if (!isset($filters['course_id'])) { $filters['course_id'] = (int) $this->get('course_id'); } if (!isset($filters['offering_id'])) { $filters['offering_id'] = (int) $this->get('offering_id'); } if (!isset($filters['section_id'])) { $filters['section_id'] = (int) $this->get('section_id'); } $filters['student'] = 1; if (isset($filters['count']) && $filters['count']) { $tbl = new Tables\Member($this->_db); return $tbl->count($filters); } if (!isset($this->_students) || !is_array($this->_students) || $clear) { $tbl = new Tables\Member($this->_db); $results = array(); if ($data = $tbl->find($filters)) { foreach ($data as $key => $result) { $results[$result->user_id] = new \Components\Courses\Models\Student($result, $this->get('id')); } } $this->_students = $results; //new \Components\Courses\Models\Iterator($results); } return $this->_students; }
/** * Get a list of memerships for a user * * @param array $filters Filters to build query from * @return mixed */ public function membership($user_id = 0) { $filters = array(); if (!isset($filters['course_id'])) { $filters['course_id'] = (int) $this->get('course_id'); } /*if (!isset($filters['offering_id'])) { $filters['offering_id'] = (int) $this->get('id'); }*/ if (!$user_id) { $user_id = User::get('id'); } $filters['user_id'] = (int) $user_id; $filters['sort'] = 'offering_id ASC, student'; $filters['sort_Dir'] = 'ASC'; if (isset($filters['count']) && $filters['count']) { $tbl = new Tables\Member($this->_db); return $tbl->count($filters); } if (!isset($this->_membership[$user_id]) || !is_array($this->_membership[$user_id])) { $tbl = new Tables\Member($this->_db); $results = array(); if ($results = $tbl->find($filters)) { foreach ($results as $key => $result) { $mdl = '\\Components\\Courses\\Models\\Member'; if ($result->student) { $mdl = '\\Components\\Courses\\Models\\Student'; } else { $mdl = '\\Components\\Courses\\Models\\Manager'; } $results[$key] = new $mdl($result); } } $this->_membership[$user_id] = $results; } return $this->_membership[$user_id]; }
/** * Save students info as CSV file * * @return void */ public function csvTask() { $this->view->filters = array('offering' => Request::getState($this->_option . '.' . $this->_controller . '.offering', 'offering', 0), 'section_id' => Request::getState($this->_option . '.' . $this->_controller . '.section', 'section', 0)); $this->view->offering = \Components\Courses\Models\Offering::getInstance($this->view->filters['offering']); $this->view->filters['offering_id'] = $this->view->filters['offering']; $this->view->course = \Components\Courses\Models\Course::getInstance($this->view->offering->get('course_id')); if (!$this->view->filters['offering_id']) { $this->view->filters['offering_id'] = null; } if (!$this->view->filters['section_id']) { $this->view->filters['section_id'] = null; } $this->view->filters['student'] = 1; $tbl = new Tables\Member($this->database); $this->view->rows = $tbl->find($this->view->filters); //$this->view->offering->students($this->view->filters); if ($this->view->rows) { foreach ($this->view->rows as $key => $row) { $this->view->rows[$key] = new \Components\Courses\Models\Student($row); } } // Output the CSV $this->view->display(); }