]> 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 c508e05943c50382cb6f9d966a0b7bb31418381a..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); }
-
-require_once(INSTALLDIR.'/lib/profilelist.php');
-
-class PeopletagAction extends Action {
-       
-       function handle($args) {
-
-               parent::handle($args);
-
-               $tag = $this->trimmed('tag');
-               
-               if (!common_valid_profile_tag($tag)) {
-                       $this->client_error(sprintf(_('Not a valid people tag: %s'), $tag));
-                       return;
-               }
-
-               $page = $this->trimmed('page');
-               
-               if (!$page) {
-                       $page = 1;
-               }
-               
-               # Looks like we're good; show the header
-
-               common_show_header(sprintf(_('Users self-tagged with %s - page %d'), $tag, $page),
-                                                  NULL, $tag, array($this, 'show_top'));
-
-               $this->show_people($tag, $page);
-
-               common_show_footer();
-       }
-
-       function show_people($tag, $page) {
-               
-               $profile = new Profile();
-
-               $offset = ($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,
-                                                 $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);
-               common_element_start('div', 'instructions');
-               common_element_start('p');
-               common_text($instr);
-               common_element_end('p');
-               common_element_end('div');
-       }
-
-       function get_title() {
-               return NULL;
-       }
-
-       function show_header($arr) {
-               return;
-       }
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+    exit(1);
+}
+
+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
+{
+
+    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);
+
+        $this->tag = $this->trimmed('tag');
+
+        if (!common_valid_profile_tag($this->tag)) {
+            $this->clientError(sprintf(_('Not a valid people tag: %s'),
+                $this->tag));
+            return;
+        }
+
+        $this->page = ($this->arg('page')) ? $this->arg('page') : 1;
+
+        common_set_returnto($this->selfUrl());
+
+        return true;
+    }
+
+    /**
+     * 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();
+    }
+
+    /**
+     * 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 = ($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
+
+        $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,
+                          $this->page,
+                          'peopletag',
+                          array('tag' => $this->tag));
+    }
+
+    /**
+     * Returns the page title
+     *
+     * @return string page title
+     */
+    function title()
+    {
+        return sprintf(_('Users self-tagged with %s - page %d'),
+            $this->tag, $this->page);
+    }
+
 }