]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/peopletag.php
Remove unnecessary require lines and definitions
[quix0rs-gnu-social.git] / actions / peopletag.php
index c7e4630261d6b81b3db80fc04ab4849c747f123a..b0a6e2635deb72b94a2cb63b2de2ebe2e72418f9 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
+ * Lists by a user
+ *
+ * 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.
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Affero General Public License for more details.
  *
+ * PHP version 5
+ *
  * 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  Personal
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @author    Zach Copley <zach@status.net>
+ * @author    Shashi Gowda <connect2shashi@gmail.com>
+ * @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/peopletaglist.php';
+// cache 3 pages
+define('PEOPLETAG_CACHE_WINDOW', PEOPLETAGS_PER_PAGE*3 + 1);
 
-class PeopletagAction extends Action {
-    
-    function handle($args)
-    {
+class PeopletagAction extends Action
+{
+    var $page = null;
+    var $tag = null;
 
-        parent::handle($args);
+    function isReadOnly($args)
+    {
+        return true;
+    }
 
-        $tag = $this->trimmed('tag');
-        
-        if (!common_valid_profile_tag($tag)) {
-            $this->client_error(sprintf(_('Not a valid people tag: %s'), $tag));
-            return;
+    function title()
+    {
+        if ($this->page == 1) {
+            // TRANS: Title for list page.
+            // TRANS: %s is a list.
+            return sprintf(_('Public list %s'), $this->tag);
+        } else {
+            // TRANS: Title for list page.
+            // TRANS: %1$s is a list, %2$d is a page number.
+            return sprintf(_('Public list %1$s, page %2$d'), $this->tag, $this->page);
         }
+    }
 
-        $page = $this->trimmed('page');
-        
-        if (!$page) {
-            $page = 1;
-        }
-        
-        # Looks like we're good; show the header
+    function prepare($args)
+    {
+        parent::prepare($args);
+        $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
 
-        common_show_header(sprintf(_('Users self-tagged with %s - page %d'), $tag, $page),
-                           null, $tag, array($this, 'show_top'));
+        $tag_arg = $this->arg('tag');
+        $tag = common_canonical_tag($tag_arg);
 
-        $this->show_people($tag, $page);
+        // Permanent redirect on non-canonical nickname
+
+        if ($tag_arg != $tag) {
+            $args = array('tag' => $nickname);
+            if ($this->page && $this->page != 1) {
+                $args['page'] = $this->page;
+            }
+            common_redirect(common_local_url('peopletag', $args), 301);
+        }
+        $this->tag = $tag;
 
-        common_show_footer();
+        return true;
     }
 
-    function show_people($tag, $page)
+    function handle($args)
     {
-        
-        $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;
-        }
+        parent::handle($args);
+        $this->showPage();
+    }
 
-        # 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 showLocalNav()
+    {
+        $nav = new PublicGroupNav($this);
+        $nav->show();
     }
-    
-    function show_top($tag)
+
+    function showAnonymousMessage()
     {
-        $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');
+        $notice =
+          // TRANS: Message for anonymous users on list page.
+          // TRANS: This message contains Markdown links in the form [description](link).
+          _('Lists are how you sort similar ' .
+            'people on %%site.name%%, a [micro-blogging]' .
+            '(http://en.wikipedia.org/wiki/Micro-blogging) service ' .
+            'based on the Free Software [StatusNet](http://status.net/) tool. ' .
+            'You can then easily keep track of what they ' .
+            'are doing by subscribing to the list\'s timeline.' );
+        $this->elementStart('div', array('id' => 'anon_notice'));
+        $this->raw(common_markup_to_html($notice));
+        $this->elementEnd('div');
     }
 
-    function get_title()
+    function showContent()
     {
-        return null;
+        $offset = ($this->page-1) * PEOPLETAGS_PER_PAGE;
+        $limit  = PEOPLETAGS_PER_PAGE + 1;
+
+        $ptags = new Profile_list();
+        $ptags->tag = $this->tag;
+
+        $user = common_current_user();
+
+        if (empty($user)) {
+            $ckey = sprintf('profile_list:tag:%s', $this->tag);
+            $ptags->private = false;
+            $ptags->orderBy('profile_list.modified DESC');
+
+            $c = Cache::instance();
+            if ($offset+$limit <= PEOPLETAG_CACHE_WINDOW && !empty($c)) {
+                $cached_ptags = Profile_list::getCached($ckey, $offset, $limit);
+                if ($cached_ptags === false) {
+                    $ptags->limit(0, PEOPLETAG_CACHE_WINDOW);
+                    $ptags->find();
+
+                    Profile_list::setCache($ckey, $ptags, $offset, $limit);
+                } else {
+                    $ptags = clone($cached_ptags);
+                }
+            } else {
+                $ptags->limit($offset, $limit);
+                $ptags->find();
+            }
+        } else {
+            $ptags->whereAdd('(profile_list.private = false OR (' .
+                             ' profile_list.tagger =' . $user->id .
+                             ' AND profile_list.private = true) )');
+
+            $ptags->orderBy('profile_list.modified DESC');
+            $ptags->find();
+        }
+
+        $pl = new PeopletagList($ptags, $this);
+        $cnt = $pl->show();
+
+        $this->pagination($this->page > 1, $cnt > PEOPLETAGS_PER_PAGE,
+                          $this->page, 'peopletag', array('tag' => $this->tag));
     }
 
-    function show_header($arr)
+    function showSections()
     {
-        return;
     }
 }