Пример #1
0
 /**
  * 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;
 }