/** * 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(); }
/** * 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); }
/** * 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(); }
/** * 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); }
/** * 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; }