summaryrefslogtreecommitdiff
path: root/actions/peopletag.php
diff options
context:
space:
mode:
Diffstat (limited to 'actions/peopletag.php')
-rw-r--r--actions/peopletag.php167
1 files changed, 103 insertions, 64 deletions
diff --git a/actions/peopletag.php b/actions/peopletag.php
index 7bcfcb93e..6b1e34f1a 100644
--- a/actions/peopletag.php
+++ b/actions/peopletag.php
@@ -1,9 +1,12 @@
<?php
-/*
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, Controlez-Vous, Inc.
+/**
+ * Laconica, 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.
@@ -15,95 +18,131 @@
*
* 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 Laconica
+ * @author Evan Prodromou <evan@controlyourself.ca>
+ * @author Zach Copley <zach@controlyourself.ca>
+ * @copyright 2009 Control Yourself, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://laconi.ca/
*/
-if (!defined('LACONICA')) { exit(1); }
+if (!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 Laconica
+ * @author Evan Prodromou <evan@controlyourself.ca>
+ * @author Zach Copley <zach@controlyourself.ca>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://laconi.ca/
+ *
+ * @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, null, $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;
- }
}