]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
add peopletag action for tagged people
authorEvan Prodromou <evan@prodromou.name>
Thu, 20 Nov 2008 22:42:07 +0000 (17:42 -0500)
committerEvan Prodromou <evan@prodromou.name>
Thu, 20 Nov 2008 22:42:07 +0000 (17:42 -0500)
darcs-hash:20081120224207-84dde-3fe1c8936ca93fc8c65e9a9b4680e8a7b3dd38b8.gz

actions/peopletag.php [new file with mode: 0644]
htaccess.sample
lib/util.php

diff --git a/actions/peopletag.php b/actions/peopletag.php
new file mode 100644 (file)
index 0000000..7dede38
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+/*
+ * Laconica - a distributed open-source microblogging tool
+ * Copyright (C) 2008, Controlez-Vous, Inc.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * 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/>.
+ */
+
+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);
+
+               common_show_footer();
+       }
+
+       function show_people($tag) {
+               
+               $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.created 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 = $this->get_instructions();
+               $output = common_markup_to_html($instr);
+               common_element_start('div', 'instructions');
+               common_raw($output);
+               common_element_end('div');
+       }
+
+       function get_instructions($tag) {
+               return sprintf(_('These are %%site.name%% users who have tagged themselves "%s" ' .
+                                                'to show a common interest, characteristic, hobby or job.'), $tag);
+       }
+       
+       function get_title() {
+               return NULL;
+       }
+
+       function show_header($arr) {
+               return;
+       }
+}
index 3ef108c2b88219f66ba6c0959e4bdebd8efe3a8b..702894e2e317eb783fcbfeb90e2d3590db8eae2f 100644 (file)
@@ -68,6 +68,8 @@ RewriteRule ^tags/?$ index.php?action=tag [L,QSA]
 RewriteRule ^tag/([a-zA-Z0-9]+)/rss$ index.php?action=tagrss&tag=$1 [L,QSA]
 RewriteRule ^tag(/(.*))?$ index.php?action=tag&tag=$2 [L,QSA]
 
+RewriteRule ^peopletag/([a-zA-Z0-9]+)$ index.php?action=peopletag&tag=$1 [L,QSA]
+
 RewriteRule ^featured/?$ index.php?action=featured [L,QSA]
 RewriteRule ^favorited/?$ index.php?action=favorited [L,QSA]
 
index 13fcfcc70ad56f4f241b650d823c71bb641f9575..2f64ea599109a75753074ed7092a72e37db5bce9 100644 (file)
@@ -1092,6 +1092,10 @@ function common_fancy_url($action, $args=NULL) {
                        $path = 'tags';
                }
                return common_path($path . (($args) ? ('?' . http_build_query($args)) : ''));
+        case 'peopletag':
+               $path = 'peopletag/' . $args['tag'];
+               unset($args['tag']);
+               return common_path($path . (($args) ? ('?' . http_build_query($args)) : ''));
         case 'tags':
                return common_path('tags' . (($args) ? ('?' . http_build_query($args)) : ''));
         case 'favor':