예제 #1
0
 /**
  * Check for registered users without quota entries and add them
  *
  * @return  void
  */
 public function importMissingTask()
 {
     // Query for all members in the CMS
     $results = Member::all()->select('id')->rows();
     if ($results->count() > 0) {
         $updates = 0;
         $class = Category::defaultEntry();
         if (!$class->get('id')) {
             // Output message and redirect
             App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&task=import', false), Lang::txt('COM_MEMBERS_QUOTA_MISSING_DEFAULT_CLASS'), 'error');
         }
         foreach ($results as $r) {
             $quota = Quota::all()->whereEquals('user_id', $r->get('id'))->row();
             if ($quota->get('id')) {
                 continue;
             }
             $quota->set('user_id', $r->get('id'));
             $quota->set('class_id', $class->get('id'));
             $quota->set('soft_blocks', $class->get('soft_blocks'));
             $quota->set('hard_blocks', $class->get('hard_blocks'));
             $quota->set('soft_files', $class->get('soft_files'));
             $quota->set('hard_files', $class->get('hard_files'));
             $quota->save();
             $updates++;
         }
     }
     // Output message and redirect
     Notify::success(Lang::txt('COM_MEMBERS_QUOTA_MISSING_USERS_IMPORT_SUCCESSFUL', $updates));
     $this->cancelTask();
 }
예제 #2
0
 /**
  * Display a list of members
  *
  * @apiMethod GET
  * @apiUri    /members/list
  * @apiParameter {
  * 		"name":          "limit",
  * 		"description":   "Number of result to return.",
  * 		"type":          "integer",
  * 		"required":      false,
  * 		"default":       25
  * }
  * @apiParameter {
  * 		"name":          "start",
  * 		"description":   "Number of where to start returning results.",
  * 		"type":          "integer",
  * 		"required":      false,
  * 		"default":       0
  * }
  * @apiParameter {
  * 		"name":          "search",
  * 		"description":   "A word or phrase to search for.",
  * 		"type":          "string",
  * 		"required":      false,
  * 		"default":       ""
  * }
  * @apiParameter {
  * 		"name":          "sort",
  * 		"description":   "Field to sort results by.",
  * 		"type":          "string",
  * 		"required":      false,
  *      "default":       "name",
  * 		"allowedValues": "name, id"
  * }
  * @apiParameter {
  * 		"name":          "sort_Dir",
  * 		"description":   "Direction to sort results by.",
  * 		"type":          "string",
  * 		"required":      false,
  * 		"default":       "desc",
  * 		"allowedValues": "asc, desc"
  * }
  * @return  void
  */
 public function listTask()
 {
     $filters = array('limit' => Request::getInt('limit', 25), 'start' => Request::getInt('limitstart', 0), 'search' => Request::getVar('search', ''), 'sortby' => Request::getWord('sort', 'name'), 'sort_Dir' => strtoupper(Request::getWord('sortDir', 'DESC')), 'activation' => 1, 'access' => User::getAuthorisedViewLevels());
     // Build query
     $entries = Member::all()->whereEquals('block', 0)->whereEquals('activation', 1)->where('approved', '>', 0);
     if ($filters['search']) {
         $entries->whereLike('name', strtolower((string) $filters['search']), 1)->orWhereLike('username', strtolower((string) $filters['search']), 1)->orWhereLike('email', strtolower((string) $filters['search']), 1)->resetDepth();
     }
     if (!empty($filters['access'])) {
         $entries->whereIn('access', $filters['access']);
     }
     switch ($filters['sortby']) {
         case 'organization':
             $filters['sort'] = 'surname';
             $filters['sort_Dir'] = 'asc';
             break;
         case 'id':
             $filters['sort'] = 'id';
             $filters['sort_Dir'] = 'asc';
             break;
         case 'name':
         default:
             $filters['sort'] = 'surname';
             $filters['sort_Dir'] = 'asc';
             break;
     }
     $rows = $entries->order($filters['sort'], $filters['sort_Dir'])->paginated('limitstart', 'limit')->rows();
     $response = new stdClass();
     $response->members = array();
     $response->total = $rows->pagination->total;
     if ($response->total) {
         $base = rtrim(Request::base(), '/');
         foreach ($rows as $entry) {
             $obj = new stdClass();
             $obj->id = $entry->get('id');
             $obj->username = $entry->get('username');
             $obj->name = $entry->get('name');
             $obj->givenName = $entry->get('givenName');
             $obj->middleName = $entry->get('middleName');
             $obj->surname = $entry->get('surname');
             $obj->organization = $entry->get('organization');
             $obj->uri = str_replace('/api', '', $base . '/' . ltrim(Route::url('index.php?option=' . $this->_option . '&id=' . $entry->get('id')), '/'));
             $response->members[] = $obj;
         }
     }
     $response->success = true;
     $this->send($response);
 }
예제 #3
0
 /**
  * Get module contents
  *
  * @return  void
  */
 public function run()
 {
     include_once Component::path('com_resources') . DS . 'tables' . DS . 'resource.php';
     include_once Component::path('com_members') . DS . 'models' . DS . 'member.php';
     include_once Component::path('com_answers') . DS . 'models' . DS . 'question.php';
     include_once Component::path('com_blog') . DS . 'models' . DS . 'archive.php';
     $this->database = \App::get('db');
     // Get the admin configured settings
     $filters = array();
     $filters['limit'] = 5;
     $filters['start'] = 0;
     // featured items
     $tbls = array('resources', 'profiles');
     $spots = array();
     $spots[0] = trim($this->params->get('spotone'));
     $spots[1] = trim($this->params->get('spottwo'));
     $spots[2] = trim($this->params->get('spotthree'));
     $spots[3] = trim($this->params->get('spotfour'));
     $spots[4] = trim($this->params->get('spotfive'));
     $spots[5] = trim($this->params->get('spotsix'));
     $spots[6] = trim($this->params->get('spotseven'));
     $numspots = $this->params->get('numspots', 3);
     // some collectors
     $activespots = array();
     $rows = array();
     // styling
     $cls = trim($this->params->get('moduleclass_sfx'));
     $txtLength = trim($this->params->get('txt_length'));
     $start = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d'), date('Y'))) . ' 00:00:00';
     $end = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d'), date('Y'))) . ' 23:59:59';
     $this->html = '';
     $k = 1;
     $out = '';
     for ($i = 0, $n = $numspots; $i < $numspots; $i++) {
         $spot = $spots[$i];
         if ($spot == '') {
             continue;
         }
         $row = null;
         $out = '';
         $tbl = '';
         $tbl = $spot == 'tools' || $spot == 'nontools' ? 'resources' : '';
         $tbl = $spot == 'members' ? 'profiles' : $tbl;
         $tbl = $spot == 'topics' ? 'topics' : $tbl;
         $tbl = $spot == 'itunes' ? 'itunes' : $tbl;
         $tbl = $spot == 'answers' ? 'answers' : $tbl;
         $tbl = $spot == 'blog' ? 'blog' : $tbl;
         $tbl = !$tbl ? array_rand($tbls, 1) : $tbl;
         // we need to randomly choose one
         switch ($tbl) {
             case 'resources':
                 // Initiate a resource object
                 $rr = new \Components\Resources\Tables\Resource($this->database);
                 $filters['start'] = 0;
                 $filters['type'] = $spot;
                 $filters['sortby'] = 'random';
                 $filters['minranking'] = trim($this->params->get('minranking'));
                 $filters['tag'] = $spot == 'tools' ? trim($this->params->get('tag')) : '';
                 // tag is set for tools only
                 // Get records
                 $rows[$spot] = isset($rows[$spot]) ? $rows[$spot] : $rr->getRecords($filters, false);
                 break;
             case 'profiles':
                 // Get records
                 if (!isset($rows[$spot])) {
                     $last = \Components\Members\Models\Member::all()->select('id')->whereEquals('block', 0)->whereEquals('activation', 1)->where('approved', '>', 0)->order('id', 'desc')->row();
                     $r = mt_rand(0, $last->get('id'));
                     $rows[$spot] = \Components\Members\Models\Member::all()->whereEquals('block', 0)->whereEquals('activation', 1)->where('approved', '>', 0)->where('id', '>=', $r)->row();
                 }
                 break;
             case 'topics':
                 // No - so we need to randomly choose one
                 $topics_tag = trim($this->params->get('topics_tag'));
                 $query = "SELECT DISTINCT w.id, w.pagename, w.title ";
                 $query .= " FROM #__wiki_page AS w ";
                 if ($topics_tag) {
                     $query .= " JOIN #__tags_object AS RTA ON RTA.objectid=w.id AND RTA.tbl='wiki' ";
                     $query .= " INNER JOIN #__tags AS TA ON TA.id=RTA.tagid ";
                 } else {
                     $query .= ", #__wiki_version AS v ";
                 }
                 $query .= " WHERE w.access!=1 AND w.scope = ''  ";
                 if ($topics_tag) {
                     $query .= " AND (TA.tag='" . $topics_tag . "' OR TA.raw_tag='" . $topics_tag . "') ";
                 } else {
                     $query .= " AND v.pageid=w.id AND v.approved = 1 AND v.pagetext != '' ";
                 }
                 $query .= " ORDER BY RAND() ";
                 $this->database->setQuery($query);
                 $rows[$spot] = isset($rows[$spot]) ? $rows[$spot] : $this->database->loadObjectList();
                 break;
             case 'itunes':
                 // Initiate a resource object
                 $rr = new \Components\Resources\Tables\Resource($this->database);
                 $filters['start'] = 0;
                 $filters['sortby'] = 'random';
                 $filters['tag'] = trim($this->params->get('itunes_tag'));
                 // Get records
                 $rows[$spot] = isset($rows[$spot]) ? $rows[$spot] : $rr->getRecords($filters, false);
                 break;
             case 'answers':
                 $query = "SELECT C.id, C.subject, C.question, C.created, C.created_by, C.anonymous  ";
                 $query .= ", (SELECT COUNT(*) FROM #__answers_responses AS a WHERE a.state!=2 AND a.question_id=C.id) AS rcount ";
                 $query .= " FROM #__answers_questions AS C ";
                 $query .= " WHERE C.state=0 ";
                 $query .= " AND (C.reward > 0 OR C.helpful > 0) ";
                 $query .= " ORDER BY RAND() ";
                 $this->database->setQuery($query);
                 $rows[$spot] = isset($rows[$spot]) ? $rows[$spot] : $this->database->loadObjectList();
                 break;
             case 'blog':
                 $filters = array();
                 $filters['limit'] = 1;
                 $filters['start'] = 0;
                 $filters['state'] = 'public';
                 $filters['order'] = "RAND()";
                 $filters['search'] = '';
                 $filters['scope'] = 'member';
                 $filters['group_id'] = 0;
                 $filters['authorized'] = false;
                 $filters['sql'] = '';
                 $entry = \Components\Blog\Models\Entry::all()->whereEquals('scope', 'member')->whereEquals('state', 1)->whereIn('access', User::getAuthorisedViewLevels())->row();
                 $rows[$spot] = isset($rows[$spot]) ? $rows[$spot] : $entry;
                 break;
         }
         if ($rows && count($rows[$spot]) > 0) {
             $row = $rows[$spot][0];
         }
         // make sure we aren't pulling the same item
         if ($k != 1 && in_array($spot, $activespots) && $rows && count($rows[$spot]) > 1) {
             $row = count($rows[$spot]) < $k ? $rows[$spot][$k - 1] : $rows[$spot][1];
             // get the next one
         }
         // pull info
         if ($row) {
             $out = $this->_composeEntry($row, $tbl, $txtLength);
             $itemid = $this->_composeEntry($row, $tbl, 0, 1);
             $activespots[] = $spot;
         }
         // Did we get any results?
         if ($out) {
             $this->html .= '<li class="spot_' . $k . '">' . $out . '</li>' . "\n";
             $k++;
         }
     }
     // Output HTML
     require $this->getLayoutPath();
 }
예제 #4
0
 /**
  * Return results for autocompleter
  *
  * @return  void
  */
 public function autocompleteTask()
 {
     if (User::isGuest()) {
         return;
     }
     $filters = array('limit' => 20, 'start' => 0, 'search' => strtolower(trim(Request::getString('value', ''))));
     // Fetch results
     $entries = Member::all()->whereEquals('block', 0);
     if ($filters['search']) {
         $entries->whereLike('name', strtolower((string) $filters['search']), 1)->orWhereLike('username', strtolower((string) $filters['search']), 1)->orWhereLike('email', strtolower((string) $filters['search']), 1)->resetDepth();
     }
     $rows = $entries->order('name', 'asc')->limit($filters['limit'])->rows();
     // Output search results in JSON format
     $json = array();
     foreach ($rows as $row) {
         $obj = array();
         $obj['id'] = $row->get('id');
         $obj['name'] = str_replace(array("\n", "\r", '\\'), '', $row->get('name'));
         $obj['picture'] = $row->picture();
         $json[] = $obj;
     }
     echo json_encode($json);
 }
예제 #5
0
 /**
  * Calculate stats
  *
  * @return  object
  */
 public function stats()
 {
     $stats = new \stdClass();
     // Get record count of all members
     $stats->total_members = Member::all()->whereEquals('block', 0)->where('activation', '>', 0)->where('approved', '>', 0)->total();
     $stats->total_public_members = Member::all()->whereEquals('block', 0)->where('activation', '>', 0)->where('approved', '>', 0)->whereEquals('access', 1)->total();
     // Get record count of new members in the past day
     $stats->past_day_members = Member::all()->where('registerDate', '>', Date::of(strtotime('-1 DAY'))->toSql())->total();
     // Get record count of new members in the past month
     $stats->past_month_members = Member::all()->where('registerDate', '>', Date::of(strtotime('-1 MONTH'))->toSql())->total();
     return $stats;
 }