/** * Return data on a group view (this will be some form of HTML) * * @param object $group Current group * @param string $option Name of the component * @param string $authorized User's authorization level * @param integer $limit Number of records to pull * @param integer $limitstart Start of records to pull * @param string $action Action to perform * @param array $access What can be accessed * @param array $areas Active area(s) * @return array */ public function onGroup($group, $option, $authorized, $limit = 0, $limitstart = 0, $action = '', $access, $areas = null) { $returnhtml = true; $active = 'members'; // The output array we're returning $arr = array('html' => '', 'metadata' => ''); //get this area details $this_area = $this->onGroupAreas(); // Check if our area is in the array of areas we want to return results for if (is_array($areas) && $limit) { if (!in_array($this_area['name'], $areas)) { $returnhtml = false; } } // Set some variables so other functions have access $this->authorized = $authorized; $this->action = $action; $this->_option = $option; $this->group = $group; $this->name = substr($option, 4, strlen($option)); // Only perform the following if this is the active tab/plugin if ($returnhtml) { //set group members plugin access level $group_plugin_acl = $access[$active]; //get the group members $members = $group->get('members'); //if set to nobody make sure cant access if ($group_plugin_acl == 'nobody') { $arr['html'] = '<p class="info">' . Lang::txt('GROUPS_PLUGIN_OFF', ucfirst($active)) . '</p>'; return $arr; } //check if guest and force login if plugin access is registered or members if (User::isGuest() && ($group_plugin_acl == 'registered' || $group_plugin_acl == 'members')) { $url = Route::url('index.php?option=com_groups&cn=' . $group->get('cn') . '&active=' . $active, false, true); App::redirect(Route::url('index.php?option=com_users&view=login&return=' . base64_encode($url)), Lang::txt('GROUPS_PLUGIN_REGISTERED', ucfirst($active)), 'warning'); return; } //check to see if user is member and plugin access requires members if (!in_array(User::get('id'), $members) && $group_plugin_acl == 'members' && $authorized != 'admin') { $arr['html'] = '<p class="info">' . Lang::txt('GROUPS_PLUGIN_REQUIRES_MEMBER', ucfirst($active)) . '</p>'; return $arr; } // Set the page title //Document::setTitle(Lang::txt(strtoupper($this->_option)).': '.$this->group->description.': '.Lang::txt('PLG_GROUPS_MEMBERS')); $this->css('members.css')->js('members.js'); $gparams = new \Hubzero\Config\Registry($group->get('params')); $this->membership_control = $gparams->get('membership_control', 1); $oparams = Component::params($this->_option); $this->display_system_users = $oparams->get('display_system_users', 'no'); switch ($gparams->get('display_system_users', "global")) { case 'yes': $this->display_system_users = 'yes'; break; case 'no': $this->display_system_users = 'no'; break; case 'global': $this->display_system_users = $this->display_system_users; break; } // Do we need to perform any actions? if ($action) { if (is_numeric($action)) { Request::setVar('member', $action); $action = 'profile'; } $action = strtolower(trim($action)); if (!method_exists($this, $action)) { App::abort(404, Lang::txt('PLG_GROUPS_MESSAGES_ERROR_ACTION_NOTFOUND')); } // Perform the action $this->{$action}(); // Did the action return anything? (HTML) if (isset($this->_output) && $this->_output != '') { $arr['html'] = $this->_output; } } if (!$arr['html']) { // Get group members based on their status // Note: this needs to happen *after* any potential actions ar performed above $view = $this->view('default', 'browse'); $view->membership_control = $this->membership_control; $view->option = $option; $view->group = $group; $view->authorized = $authorized; $this->database = App::get('db'); $view->q = Request::getVar('q', ''); $view->filter = Request::getVar('filter', ''); if (!in_array($view->filter, array('members', 'managers', 'invitees', 'pending'))) { $view->filter = ''; } $view->role_filter = Request::getVar('role_filter', ''); if ($view->authorized != 'manager' && $view->authorized != 'admin') { $view->filter = $view->filter == 'managers' ? $view->filter : 'members'; } try { // Get messages plugin access level $view->messages_acl = \Hubzero\User\Group\Helper::getPluginAccess($group, 'messages'); } catch (Exception $e) { // Plugin is not enabled. $view->messages_acl = 'nobody'; } //get all member roles $db = App::get('db'); $sql = "SELECT * FROM `#__xgroups_roles` WHERE gidNumber=" . $db->quote($group->get('gidNumber')); $db->setQuery($sql); $view->member_roles = $db->loadAssocList(); $group_inviteemails = new \Hubzero\User\Group\InviteEmail(); $view->current_inviteemails = $group_inviteemails->getInviteEmails($this->group->get('gidNumber'), true); switch ($view->filter) { case 'invitees': $view->groupusers = $view->q ? $group->search('invitees', $view->q) : $group->get('invitees'); foreach ($view->current_inviteemails as $ie) { $view->groupusers[] = $ie; } $view->managers = array(); break; case 'pending': $view->groupusers = $view->q ? $group->search('applicants', $view->q) : $group->get('applicants'); $view->managers = array(); break; case 'managers': $view->groupusers = $view->q ? $group->search('managers', $view->q) : $group->get('managers'); $view->groupusers = $view->role_filter ? \Hubzero\User\Group\Helper::search_roles($group, $view->role_filter) : $view->groupusers; $view->managers = $group->get('managers'); break; case 'members': default: $view->groupusers = $view->q ? $group->search('members', $view->q) : $group->get('members'); $view->groupusers = $view->role_filter ? \Hubzero\User\Group\Helper::search_roles($group, $view->role_filter) : $view->groupusers; $view->managers = $group->get('managers'); break; } //if we dont want to display system users //filter values through callback above and then reset array keys if ($this->display_system_users == 'no' && is_array($view->groupusers)) { $view->groupusers = array_map(array($this, "isSystemUser"), $view->groupusers); $view->groupusers = array_values(array_filter($view->groupusers)); } // sort users before display $view->groupusers = $this->sortAlphabetically($view->groupusers); $view->limit = Request::getInt('limit', $this->params->get('display_limit', 50)); $view->start = Request::getInt('limitstart', 0); $view->start = $view->limit == 0 ? 0 : $view->start; $view->no_html = Request::getInt('no_html', 0); $view->params = $this->params; if ($this->getError()) { $view->setError($this->getError()); } $arr['html'] = $view->loadTemplate(); } } //return metadata $arr['metadata']['count'] = count($group->get('members')); //do we have any pending requests $pending = $group->get("applicants"); if (count($pending) > 0 && in_array(User::get('id'), $group->get("managers"))) { $title = Lang::txt('PLG_GROUPS_MEMBERS_GROUP_HAS_REQUESTS', $group->get('description'), count($pending)); $link = Route::url('index.php?option=com_groups&cn=' . $this->group->get('cn') . '&active=members&filter=pending'); $arr['metadata']['alert'] = '<a class="alrt" href="' . $link . '"><span><h5>' . Lang::txt('PLG_GROUPS_MEMBERS_ALERT') . '</h5>' . $title . '</span></a>'; } // Return the output return $arr; }