Пример #1
0
 /**
  * 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;
     }
 }
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 /**
  * 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();
 }
Пример #4
0
 /**
  * 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();
     }
 }
Пример #5
0
 /**
  * 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;
 }
Пример #6
0
 /**
  * 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];
 }
Пример #7
0
 /**
  * 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();
 }