示例#1
0
 /**
  * Display member quotas
  *
  * @return  void
  */
 public function displayTask()
 {
     // Incoming
     $filters = array('search' => urldecode(Request::getState($this->_option . '.quotas.search', 'search', '')), 'search_field' => urldecode(Request::getState($this->_option . '.quotas.search_field', 'search_field', 'name')), 'sort' => Request::getState($this->_option . '.quotas.sort', 'filter_order', 'user_id'), 'sort_Dir' => Request::getState($this->_option . '.quotas.sortdir', 'filter_order_Dir', 'ASC'), 'class_alias' => Request::getState($this->_option . '.quotas.class_alias', 'class_alias', ''));
     $cats = Category::blank()->getTableName();
     $users = Member::blank()->getTableName();
     $entries = Quota::all();
     $entries->select($entries->getTableName() . '.*')->select($cats . '.alias', 'class_alias')->select($users . '.name')->select($users . '.username')->join($cats, $cats . '.id', $entries->getTableName() . '.class_id', 'left')->join($users, $users . '.id', $entries->getTableName() . '.user_id', 'left');
     if ($filters['search']) {
         $entries->whereLike($users . '.name', strtolower((string) $filters['search']), 1)->orWhereLike($users . '.username', strtolower((string) $filters['search']), 1)->resetDepth();
     }
     if ($filters['class_alias']) {
         $entries->whereEquals('class_alias', $filters['class_alias']);
     }
     // Get records
     $rows = $entries->order($filters['sort'], $filters['sort_Dir'])->paginated('limitstart', 'limit')->rows();
     $classes = Category::all()->ordered()->rows();
     // Output the HTML
     $this->view->set('rows', $rows)->set('classes', $classes)->set('filters', $filters)->display();
 }
示例#2
0
 /**
  * Run Export
  *
  * @return  void
  */
 public function runTask()
 {
     $skip = array('password', 'params', 'usertype');
     $keys = array();
     $tags = array();
     $members = Member::blank();
     $attribs = $members->getStructure()->getTableColumns($members->getTableName());
     foreach ($attribs as $key => $desc) {
         if (in_array(strtolower($key), $skip)) {
             continue;
         }
         $keys[$key] = $key;
         //array_push($keys, $key);
     }
     $attribs = Field::all()->ordered()->rows();
     foreach ($attribs as $attrib) {
         if ($attrib->get('type') == 'tags') {
             array_push($tags, $attrib->get('name'));
         }
         if ($attrib->get('type') == 'address') {
             $keys[$attrib->get('name')] = $attrib->get('name') . ' Street 1';
             $keys['_' . $attrib->get('name') . '_address2'] = $attrib->get('name') . ' Street 2';
             $keys['_' . $attrib->get('name') . '_city'] = $attrib->get('name') . ' City';
             $keys['_' . $attrib->get('name') . '_postal'] = $attrib->get('name') . ' Post Code';
             $keys['_' . $attrib->get('name') . '_region'] = $attrib->get('name') . ' Region';
             $keys['_' . $attrib->get('name') . '_country'] = $attrib->get('name') . ' Country';
             $keys['_' . $attrib->get('name') . '_latitude'] = $attrib->get('name') . ' Latitude';
             $keys['_' . $attrib->get('name') . '_longitude'] = $attrib->get('name') . ' Longitude';
             continue;
         }
         $keys[$attrib->get('name')] = $attrib->get('name');
         //array_push($keys, $attrib->get('name'));
     }
     // Get request vars
     $delimiter = Request::getVar('delimiter', ',');
     $csv = array();
     $rows = $members->ordered()->rows();
     // Convert to array and bind to object below
     // This may seem counter-intuitive but it's for
     // performance reasons. Otherwise, all the circular
     // references eat up memery.
     $rows = $rows->toArray();
     // Gather up member information
     foreach ($rows as $row) {
         $member = Member::blank()->set($row);
         $tmp = array();
         foreach ($keys as $key => $label) {
             if (substr($key, 0, 1) == '_') {
                 if (!isset($tmp[$key])) {
                     $tmp[$key] = '';
                 }
                 continue;
             }
             if (in_array($key, $tags)) {
                 $val = $member->tags('string');
             } else {
                 $val = $member->get($key);
             }
             if (is_array($val)) {
                 $val = implode(';', $val);
             } else {
                 if (strstr($val, '{')) {
                     $v = json_decode((string) $val, true);
                     if (!$v || json_last_error() !== JSON_ERROR_NONE) {
                         // Nothing else to do
                     } else {
                         $i = 0;
                         foreach ($v as $nm => $vl) {
                             $k = '_' . $key . '_' . $nm;
                             if ($i == 0) {
                                 $k = $key;
                             }
                             $tmp[$k] = $vl;
                             $i++;
                         }
                         continue;
                     }
                 }
             }
             $tmp[$key] = $val;
         }
         unset($member);
         array_push($csv, $tmp);
     }
     //output csv directly as a download
     @ob_end_clean();
     header("Pragma: public");
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
     header("Expires: 0");
     header("Content-Transfer-Encoding: binary");
     header('Content-type: text/comma-separated-values');
     header('Content-disposition: attachment; filename="members.csv"');
     $out = fopen('php://output', 'w');
     fputcsv($out, $keys);
     foreach ($csv as $row) {
         fputcsv($out, $row, $delimiter);
     }
     exit;
 }
示例#3
0
 /**
  * Serve up an example CSV file
  *
  * @return  void
  */
 public function sampleTask()
 {
     $skip = array('gid', 'gidnumber', 'regIP', 'regHost', 'modifiedDate', 'proxypassword', 'loginshell', 'ftpshell', 'shadowexpire', 'params', 'proxyuidnumber');
     $fields = array();
     $row = array();
     $member = Member::blank();
     $attribs = $member->getStructure()->getTableColumns($member->getTableName());
     foreach ($attribs as $key => $desc) {
         if (in_array(strtolower($key), $skip)) {
             continue;
         }
         $example = 'Example';
         $desc = preg_replace('/\\(.*\\)/', '', $desc);
         if (in_array($desc, array('int', 'tinyint', 'float'))) {
             $example = '1';
         }
         array_push($row, $example);
         array_push($fields, $key);
     }
     $attribs = Field::all()->including(['options', function ($option) {
         $option->select('*');
     }])->ordered()->rows();
     foreach ($attribs as $field) {
         $key = $field->get('name');
         if (in_array(strtolower($key), $skip)) {
             continue;
         }
         $example = 'Example';
         if ($field->options->count() || in_array($field->get('type'), array('select', 'dropdown', 'list', 'radio', 'radios', 'checkbox', 'checkboxes'))) {
             $example = 'example;example;example';
         }
         array_push($row, $example);
         array_push($fields, $key);
     }
     // Output header
     @ob_end_clean();
     header("Pragma: public");
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
     header("Expires: 0");
     header("Content-Transfer-Encoding: binary");
     header('Content-type: text/comma-separated-values');
     header('Content-disposition: attachment; filename="members.csv"');
     echo $this->quoteCsvRow($fields);
     //array_map('ucfirst', $fields));
     echo $this->quoteCsvRow($row);
     exit;
 }
示例#4
0
 /**
  * Return results for autocompleter
  *
  * @return  void
  */
 public function autocompleteTask()
 {
     if (User::isGuest()) {
         return;
     }
     $restrict = '';
     $referrer = Request::getVar('HTTP_REFERER', NULL, 'server');
     if ($referrer && preg_match('/members\\/\\d+\\/messages/i', $referrer)) {
         if (!User::authorise('core.admin', $this->_option) && !User::authorise('core.manage', $this->_option)) {
             switch ($this->config->get('user_messaging')) {
                 case 2:
                     $restrict = " AND u.access=1";
                     break;
                 case 1:
                 default:
                     $profile = User::groups();
                     $usersgroups = array();
                     if (!empty($xgroups)) {
                         foreach ($xgroups as $group) {
                             if ($group->regconfirmed) {
                                 $usersgroups[] = $group->gidNumber;
                             }
                         }
                     }
                     $members = null;
                     if (!empty($usersgroups)) {
                         $query = "SELECT DISTINCT uidNumber\n\t\t\t\t\t\t\t\t\tFROM `#__xgroups_members`\n\t\t\t\t\t\t\t\t\tWHERE gidNumber IN (" . implode(',', $usersgroups) . ")";
                         $this->database->setQuery($query);
                         $members = $this->database->loadColumn();
                     }
                     if (!$members || empty($members)) {
                         $members = array(User::get('id'));
                     }
                     $restrict = " AND u.id IN (" . implode(',', $members) . ")";
                     break;
             }
         }
     }
     $filters = array();
     $filters['limit'] = 20;
     $filters['start'] = 0;
     $filters['search'] = strtolower(trim(Request::getString('value', '')));
     $originalQuery = $filters['search'];
     // match against orcid id
     if (preg_match('/\\d{4}-\\d{4}-\\d{4}-\\d{4}/', $filters['search'])) {
         $query = "SELECT u.id, u.name, u.username, u.access\n\t\t\t\t\tFROM `#__users` AS u\n\t\t\t\t\tWHERE u.block = 0 AND orcid= " . $this->database->quote($filters['search']) . " AND u.activation>0 {$restrict}\n\t\t\t\t\tORDER BY u.name ASC\n\t\t\t\t\tLIMIT " . $filters['start'] . "," . $filters['limit'];
     } else {
         // add trailing wildcard
         //$filters['search'] = $filters['search'] . '*';
         // match member names on all three name parts
         //$match = "MATCH(u.givenName,u.middleName,u.surname) AGAINST(" . $this->database->quote($filters['search']) . " IN BOOLEAN MODE)";
         $match = "LOWER(u.name) LIKE " . $this->database->quote('%' . strtolower($filters['search']) . '%');
         $query = "SELECT u.id, u.name, u.username, u.access, {$match} as rel\n\t\t\t\t\tFROM `#__users` AS u\n\t\t\t\t\tWHERE {$match} AND u.block=0 AND u.activation>0 AND u.email NOT LIKE '%@invalid' {$restrict}\n\t\t\t\t\tORDER BY rel DESC, u.name ASC\n\t\t\t\t\tLIMIT " . $filters['start'] . "," . $filters['limit'];
     }
     $this->database->setQuery($query);
     $rows = $this->database->loadObjectList();
     // Output search results in JSON format
     $json = array();
     if (count($rows) > 0) {
         foreach ($rows as $row) {
             $user = Member::blank()->set($row);
             $obj = array();
             $obj['id'] = $user->get('id');
             $obj['name'] = $user->name;
             $obj['org'] = in_array($user->get('access'), User::getAuthorisedViewLevels()) ? $user->get('organization', '') : '';
             $obj['picture'] = $user->picture();
             $json[] = $obj;
         }
     }
     // formats names in the autocompleter
     if (!\Hubzero\Utility\Validate::email($originalQuery) && str_word_count($originalQuery) >= 2) {
         $originalQuery = ucwords($originalQuery);
     }
     //original query
     $obj = array();
     $obj['name'] = $originalQuery;
     $obj['id'] = $originalQuery;
     $obj['org'] = '';
     $obj['picture'] = '';
     $obj['orig'] = true;
     //add back original query
     // [!] Removing. Seems to confuse people.
     //array_unshift($json, $obj);
     echo json_encode($json);
 }