]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Directory/actions/userdirectory.php
Merge remote-tracking branch 'upstream/master' into social-master
[quix0rs-gnu-social.git] / plugins / Directory / actions / userdirectory.php
index b12d1171eaf22df83500fc86485e7d22bec12e65..55ce0de42086cbc4b80e33ca2d3deeab93594f3e 100644 (file)
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET'))
-{
-    exit(1);
-}
-
-require_once INSTALLDIR . '/lib/publicgroupnav.php';
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * User directory
@@ -43,7 +38,7 @@ require_once INSTALLDIR . '/lib/publicgroupnav.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-class UserdirectoryAction extends Action
+class UserdirectoryAction extends ManagedAction
 {
     /**
      * The page we're on
@@ -87,21 +82,26 @@ class UserdirectoryAction extends Action
      */
     function title()
     {
-        // @fixme: This looks kinda gross
+        // @todo fixme: This looks kinda gross
 
         if ($this->filter == 'all') {
             if ($this->page != 1) {
+                // TRANS: Page title for user directory. %d is a page number.
                 return(sprintf(_m('User Directory, page %d'), $this->page));
             }
+            // TRANS: Page title for user directory.
             return _m('User directory');
         } else if ($this->page == 1) {
             return sprintf(
+                // TRANS: Page title for user directory. %s is the applied filter.
                 _m('User directory - %s'),
                 strtoupper($this->filter)
             );
         } else {
             return sprintf(
-                _m('User directory - %s, page %d'),
+                // TRANS: Page title for user directory.
+                // TRANS: %1$s is the applied filter, %2$d is a page number.
+                _m('User directory - %1$s, page %2$d'),
                 strtoupper($this->filter),
                 $this->page
             );
@@ -116,8 +116,7 @@ class UserdirectoryAction extends Action
     function getInstructions()
     {
         // TRANS: %%site.name%% is the name of the StatusNet site.
-        return _m(
-            'Search for people on %%site.name%% by their name, '
+        return _m('Search for people on %%site.name%% by their name, '
             . 'location, or interests. Separate the terms by spaces; '
             . ' they must be 3 characters or more.'
         );
@@ -128,22 +127,13 @@ class UserdirectoryAction extends Action
      *
      * @return boolean true
      */
-    function isReadOnly($args)
+    function isReadOnly(array $args=array())
     {
         return true;
     }
 
-    /**
-     * Take arguments for running
-     *
-     * @param array $args $_REQUEST args
-     *
-     * @return boolean success flag
-     */
-    function prepare($args)
+    protected function doPreparation()
     {
-        parent::prepare($args);
-
         $this->page    = ($this->arg('page')) ? ($this->arg('page') + 0) : 1;
         $this->filter  = $this->arg('filter', 'all');
         $this->reverse = $this->boolean('reverse');
@@ -151,23 +141,6 @@ class UserdirectoryAction extends Action
         $this->sort    = $this->arg('sort', 'nickname');
 
         common_set_returnto($this->selfUrl());
-
-        return true;
-    }
-
-    /**
-     * Handle request
-     *
-     * Shows the page
-     *
-     * @param array $args $_REQUEST args; handled in prepare()
-     *
-     * @return void
-     */
-    function handle($args)
-    {
-        parent::handle($args);
-        $this->showPage();
     }
 
     /**
@@ -226,9 +199,16 @@ class UserdirectoryAction extends Action
         $args = array();
         if (isset($this->q)) {
             $args['q'] = $this->q;
-        } else {
+        } elseif (isset($this->filter) && $this->filter != 'all') {
             $args['filter'] = $this->filter;
         }
+        
+        if (isset($this->sort)) {
+            $args['sort'] = $this->sort;
+        }        
+        if (!empty($this->reverse)) {
+            $args['reverse'] = $this->reverse;
+        }
 
         $this->pagination(
             $this->page > 1,
@@ -256,12 +236,15 @@ class UserdirectoryAction extends Action
 
         $this->elementStart('fieldset');
 
+        // TRANS: Fieldset legend.
         $this->element('legend', null, _m('Search site'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
 
+        // TRANS: Field label for user directory filter.
         $this->input('q', _m('Keyword(s)'), $this->q);
 
+        // TRANS: Button text.
         $this->submit('search', _m('BUTTON','Search'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
@@ -277,10 +260,13 @@ class UserdirectoryAction extends Action
     {
         $profile = new Profile();
 
+        // Comment this out or disable to get global profile searches
+        $profile->joinAdd(array('id', 'user:id'));
+
         $offset = ($this->page - 1) * PROFILES_PER_PAGE;
         $limit  = PROFILES_PER_PAGE + 1;
 
-        if (isset($this->q)) {
+        if (!empty($this->q)) {
              // User is searching via query
              $search_engine = $profile->getSearchEngine('profile');
 
@@ -305,34 +291,34 @@ class UserdirectoryAction extends Action
              $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)
-            {
+            switch ($this->filter) {
             case 'all':
                 // NOOP
                 break;
             case '0-9':
-                $sql .=
-                    '  AND LEFT(profile.nickname, 1) BETWEEN \'0\' AND \'9\'';
+                $profile->whereAdd(sprintf('LEFT(%1$s.%2$s, 1) BETWEEN %3$s AND %4$s',
+                                            $profile->escapedTableName(),
+                                            'nickname',
+                                            $profile->_quote("0"),
+                                            $profile->_quote("9")));
                 break;
             default:
-                $sql .= sprintf(
-                    ' AND LEFT(LOWER(profile.nickname), 1) = \'%s\'',
-                    $this->filter
-                );
+                $profile->whereAdd(sprintf('LEFT(LOWER(%1$s.%2$s), 1) = %3$s',
+                                            $profile->escapedTableName(),
+                                            'nickname',
+                                            $profile->_quote($this->filter)));
             }
 
-            $sql .= sprintf(
-                ' ORDER BY profile.%s %s, profile.nickname ASC LIMIT %d, %d',
-                $sort,
-                $this->reverse ? 'DESC' : 'ASC',
-                $offset,
-                $limit
-            );
+            $order = sprintf('%1$s.%2$s %3$s, %1$s.%4$s ASC',
+                            $profile->escapedTableName(),
+                            $this->getSortKey('nickname'),
+                            $this->reverse ? 'DESC' : 'ASC',
+                            'nickname');
+            $profile->orderBy($order);
+            $profile->limit($offset, $limit);
 
-            $profile->query($sql);
+            $profile->find();
         }
 
         return $profile;
@@ -343,15 +329,12 @@ class UserdirectoryAction extends Action
      *
      * @return string   a column name for sorting
      */
-    function getSortKey()
+    function getSortKey($def='nickname')
     {
         switch ($this->sort) {
         case 'nickname':
-            return $this->sort;
-            break;
         case 'created':
             return $this->sort;
-            break;
         default:
             return 'nickname';
         }
@@ -367,23 +350,24 @@ class UserdirectoryAction extends Action
                 'p',
                 'error',
                 sprintf(
+                    // TRANS: Empty list message for user directory.
                     _m('No users starting with %s'),
                     $this->filter
                 )
             );
         } else {
+            // TRANS: Empty list message for user directory.
             $this->element('p', 'error', _m('No results.'));
-            $message = _m(<<<E_O_T
-* Make sure all words are spelled correctly.
+            // TRANS: Standard search suggestions shown when a search does not give any results.
+            $message = _m("* Make sure all words are spelled correctly.
 * Try different keywords.
 * Try more general keywords.
-* Try fewer keywords.
-E_O_T
-);
+* Try fewer keywords.");
+            $message .= "\n";
+
             $this->elementStart('div', 'help instructions');
             $this->raw(common_markup_to_html($message));
             $this->elementEnd('div');
         }
     }
-
 }