- if ($this->filter != 'All') {
- $profile->whereAdd(
- sprintf('LEFT(UPPER(nickname), 1) = \'%s\'', $this->filter)
+ $offset = ($this->page - 1) * PROFILES_PER_PAGE;
+ $limit = PROFILES_PER_PAGE + 1;
+
+ if (isset($this->q)) {
+ // User is searching via query
+ $search_engine = $profile->getSearchEngine('profile');
+
+ $mode = 'reverse_chron';
+
+ if ($this->sort == 'nickname') {
+ if ($this->reverse) {
+ $mode = 'nickname_desc';
+ } else {
+ $mode = 'nickname_asc';
+ }
+ } else {
+ if ($this->reverse) {
+ $mode = 'chron';
+ }
+ }
+
+ $search_engine->set_sort_mode($mode);
+ $search_engine->limit($offset, $limit);
+ $search_engine->query($this->q);
+
+ $profile->find();
+ } else {
+ // User is browsing via AlphaNav
+ $sort = $this->getSortKey();
+ $sql = 'SELECT profile.* FROM profile, user WHERE profile.id = user.id';
+
+ switch($this->filter)
+ {
+ case 'all':
+ // NOOP
+ break;
+ case '0-9':
+ $sql .=
+ ' AND LEFT(profile.nickname, 1) BETWEEN \'0\' AND \'9\'';
+ break;
+ default:
+ $sql .= sprintf(
+ ' AND LEFT(LOWER(profile.nickname), 1) = \'%s\'',
+ $this->filter
+ );
+ }
+
+ $sql .= sprintf(
+ ' ORDER BY profile.%s %s, profile.nickname ASC LIMIT %d, %d',
+ $sort,
+ $this->reverse ? 'DESC' : 'ASC',
+ $offset,
+ $limit