]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/peopletag.php
Merge branch 'locshunt' into 0.9.x
[quix0rs-gnu-social.git] / actions / peopletag.php
index 7bcfcb93e36581e202afd205ebd04facc873b928..6dbbc926161c87b9c31b5b9d9d51d2764965fc9f 100644 (file)
@@ -1,9 +1,12 @@
 <?php
-/*
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, Controlez-Vous, Inc.
+/**
+ * StatusNet, the distributed open-source microblogging tool
  *
- * This program is free software: you can redistribute it and/or modify
+ * Action for showing profiles self-tagged with a given tag
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Action
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @author    Zach Copley <zach@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
  */
 
-if (!defined('LACONICA')) { exit(1); }
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+    exit(1);
+}
+
+require_once INSTALLDIR.'/lib/profilelist.php';
 
-require_once(INSTALLDIR.'/lib/profilelist.php');
+/**
+ * This class outputs a paginated list of profiles self-tagged with a given tag
+ *
+ * @category Output
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @author   Zach Copley <zach@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ *
+ * @see      Action
+ */
 
 class PeopletagAction extends Action
 {
-    
-    function handle($args)
+
+    var $tag  = null;
+    var $page = null;
+
+    /**
+     * For initializing members of the class.
+     *
+     * @param array $argarray misc. arguments
+     *
+     * @return boolean true
+     */
+    function prepare($argarray)
     {
+        parent::prepare($argarray);
 
-        parent::handle($args);
+        $this->tag = $this->trimmed('tag');
 
-        $tag = $this->trimmed('tag');
-        
-        if (!common_valid_profile_tag($tag)) {
-            $this->clientError(sprintf(_('Not a valid people tag: %s'), $tag));
+        if (!common_valid_profile_tag($this->tag)) {
+            $this->clientError(sprintf(_('Not a valid people tag: %s'),
+                $this->tag));
             return;
         }
 
-        $page = $this->trimmed('page');
-        
-        if (!$page) {
-            $page = 1;
-        }
-        
-        # Looks like we're good; show the header
+        $this->page = ($this->arg('page')) ? $this->arg('page') : 1;
 
-        common_show_header(sprintf(_('Users self-tagged with %s - page %d'), $tag, $page),
-                           null, $tag, array($this, 'show_top'));
+        common_set_returnto($this->selfUrl());
 
-        $this->show_people($tag, $page);
+        return true;
+    }
 
-        common_show_footer();
+    /**
+     * Handler method
+     *
+     * @param array $argarray is ignored since it's now passed in in prepare()
+     *
+     * @return boolean is read only action?
+     */
+    function handle($argarray)
+    {
+        parent::handle($argarray);
+        $this->showPage();
     }
 
-    function show_people($tag, $page)
+    /**
+     * Whips up a query to get a list of profiles based on the provided
+     * people tag and page, initalizes a ProfileList widget, and displays
+     * it to the user.
+     *
+     * @return nothing
+     */
+    function showContent()
     {
-        
+
         $profile = new Profile();
 
-        $offset = ($page-1)*PROFILES_PER_PAGE;
-        $limit = PROFILES_PER_PAGE + 1;
-        
-        if (common_config('db','type') == 'pgsql') {
+        $offset = ($this->page - 1) * PROFILES_PER_PAGE;
+        $limit  = PROFILES_PER_PAGE + 1;
+
+        if (common_config('db', 'type') == 'pgsql') {
             $lim = ' LIMIT ' . $limit . ' OFFSET ' . $offset;
         } else {
             $lim = ' LIMIT ' . $offset . ', ' . $limit;
         }
 
-        # XXX: memcached this
-        
-        $profile->query(sprintf('SELECT profile.* ' .
-                                'FROM profile JOIN profile_tag ' .
-                                'ON profile.id = profile_tag.tagger ' .
-                                'WHERE profile_tag.tagger = profile_tag.tagged ' .
-                                'AND tag = "%s" ' .
-                                'ORDER BY profile_tag.modified DESC ' . 
-                                $lim, $tag));
-
-        $pl = new ProfileList($profile);
-        $cnt = $pl->show_list();
-        
-        common_pagination($page > 1,
+        // XXX: memcached this
+
+        $qry =  'SELECT profile.* ' .
+                'FROM profile JOIN profile_tag ' .
+                'ON profile.id = profile_tag.tagger ' .
+                'WHERE profile_tag.tagger = profile_tag.tagged ' .
+                "AND tag = '%s' " .
+                'ORDER BY profile_tag.modified DESC%s';
+
+        $profile->query(sprintf($qry, $this->tag, $lim));
+
+        $pl  = new ProfileList($profile, $this);
+        $cnt = $pl->show();
+
+        $this->pagination($this->page > 1,
                           $cnt > PROFILES_PER_PAGE,
-                          $page,
-                          $this->trimmed('action'),
-                          array('tag' => $tag));
-    }
-    
-    function show_top($tag)
-    {
-        $instr = sprintf(_('These are users who have tagged themselves "%s" ' .
-                           'to show a common interest, characteristic, hobby or job.'), $tag);
-        $this->elementStart('div', 'instructions');
-        $this->elementStart('p');
-        $this->text($instr);
-        $this->elementEnd('p');
-        $this->elementEnd('div');
+                          $this->page,
+                          'peopletag',
+                          array('tag' => $this->tag));
     }
 
-    function get_title()
+    /**
+     * Returns the page title
+     *
+     * @return string page title
+     */
+    function title()
     {
-        return null;
+        return sprintf(_('Users self-tagged with %s - page %d'),
+            $this->tag, $this->page);
     }
 
-    function show_header($arr)
-    {
-        return;
-    }
 }