]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
start conversation action
authorEvan Prodromou <evan@controlyourself.ca>
Sat, 28 Feb 2009 23:12:31 +0000 (15:12 -0800)
committerEvan Prodromou <evan@controlyourself.ca>
Sat, 28 Feb 2009 23:12:31 +0000 (15:12 -0800)
actions/conversation.php [new file with mode: 0644]
lib/router.php

diff --git a/actions/conversation.php b/actions/conversation.php
new file mode 100644 (file)
index 0000000..0c22fe1
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+/**
+ * Display a conversation in the browser
+ *
+ * PHP version 5
+ *
+ * @category Action
+ * @package  Laconica
+ * @author   Evan Prodromou <evan@controlyourself.ca>
+ * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link     http://laconi.ca/
+ *
+ * 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);
+}
+
+/**
+ * Conversation tree in the browser
+ *
+ * @category Action
+ * @package  Laconica
+ * @author   Evan Prodromou <evan@controlyourself.ca>
+ * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link     http://laconi.ca/
+ */
+class ConversationAction extends Action
+{
+    var $id = null;
+    var $notices = null;
+    var $page = null;
+
+    /**
+     * Initialization.
+     *
+     * @param array $args Web and URL arguments
+     *
+     * @return boolean false if id not passed in
+     */
+
+    function prepare($args)
+    {
+        parent::prepare($args);
+        $this->id = $this->trimmed('id');
+        if (!$this->id) {
+            return false;
+        }
+        $this->notices = $this->getNotices();
+        $this->page = $this->trimmed('page');
+        if (empty($this->page)) {
+            $this->page = 1;
+        }
+        return true;
+    }
+
+    /**
+     * Get notices
+     *
+     * @param integer $limit max number of notices to return
+     *
+     * @return array notices
+     */
+
+    function getNotices($limit=0)
+    {
+        $qry = 'SELECT notice.*, '.
+          'FROM notice WHERE conversation = %d '.
+          'ORDER BY created ';
+
+        $offset = 0;
+        $limit  = NOTICES_PER_PAGE + 1;
+
+        if (common_config('db', 'type') == 'pgsql') {
+            $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
+        } else {
+            $qry .= ' LIMIT ' . $offset . ', ' . $limit;
+        }
+
+        return Notice::getStream(sprintf($qry, $this->id),
+                                 'notice:conversation:'.$this->id,
+                                 $offset, $limit);
+    }
+
+    function handle($args)
+    {
+        $this->showPage();
+    }
+
+    function title()
+    {
+        return _("Conversation");
+    }
+
+    function showContent()
+    {
+        // FIXME this needs to be a tree, not a list
+
+        $nl = new NoticeList($this->notices, $this);
+
+        $cnt = $nl->show();
+
+        $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
+                          $this->page, 'conversation', array('id' => $this->id));
+    }
+
+}
+
index b18a5523e97a0806ec65093225d44517168ebff8..4c036e7b245803550b71de5fa245fbb2141c238c 100644 (file)
@@ -143,6 +143,12 @@ class Router
                     array('action' => 'deletenotice'),
                     array('notice' => '[0-9]+'));
 
+        // conversation
+
+        $m->connect('conversation/:id',
+                    array('action' => 'conversation'),
+                    array('id' => '[0-9]+'));
+
         $m->connect('message/new', array('action' => 'newmessage'));
         $m->connect('message/:message',
                     array('action' => 'showmessage'),
@@ -265,21 +271,20 @@ class Router
                           'apiaction' => 'friendships'),
                     array('method' => 'exists(\.(xml|json|rss|atom))'));
 
-
         // Social graph
 
         $m->connect('api/friends/ids/:argument',
                     array('action' => 'api',
                           'apiaction' => 'statuses',
                           'method' => 'friendsIDs'));
-                                                   
+
         foreach (array('xml', 'json') as $e) {
             $m->connect('api/friends/ids.'.$e,
                         array('action' => 'api',
                               'apiaction' => 'statuses',
                               'method' => 'friendsIDs.'.$e));
         }
-                                                    
+
         $m->connect('api/followers/ids/:argument',
                     array('action' => 'api',
                           'apiaction' => 'statuses',