summaryrefslogtreecommitdiff
path: root/actions
diff options
context:
space:
mode:
authormatthew.gregg <matthew.gregg@gmail.com>2008-06-22 23:08:37 -0400
committermatthew.gregg <matthew.gregg@gmail.com>2008-06-22 23:08:37 -0400
commit0b21ac3dd79d2bf39341a4f0ff3566def8282eae (patch)
tree61ed08b832cda8e104dee168b300133c90540231 /actions
parent6dbf7beb0bfce429f1c39b64e85cdac8229cb72d (diff)
First pass at replies support http://laconi.ca/PITS/00080
Doesn't handle a reply to a user that has never updated. darcs-hash:20080623030837-982e4-532ccd8899fd8be00575f8840da0defb44cd56f8.gz
Diffstat (limited to 'actions')
-rw-r--r--actions/newnotice.php8
-rw-r--r--actions/replies.php103
2 files changed, 110 insertions, 1 deletions
diff --git a/actions/newnotice.php b/actions/newnotice.php
index 64fe2494b..9aaf4b4d3 100644
--- a/actions/newnotice.php
+++ b/actions/newnotice.php
@@ -36,6 +36,12 @@ class NewnoticeAction extends Action {
function save_new_notice() {
+ #remember the current notice
+ $current_notice = DB_DataObject::factory('notice');
+ $current_notice->limit(1);
+ $current_notice->orderBy('created DESC');
+ $current_notice->find(1);
+
$user = common_current_user();
assert($user); # XXX: maybe an error instead...
$notice = DB_DataObject::factory('notice');
@@ -67,7 +73,7 @@ class NewnoticeAction extends Action {
common_server_error(_t('Problem saving notice.'));
return;
}
-
+
common_broadcast_notice($notice);
$returnto = $this->trimmed('returnto');
if ($returnto) {
diff --git a/actions/replies.php b/actions/replies.php
new file mode 100644
index 000000000..14f19cd76
--- /dev/null
+++ b/actions/replies.php
@@ -0,0 +1,103 @@
+<?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.'/actions/showstream.php');
+
+class RepliesAction extends StreamAction {
+
+ function handle($args) {
+
+ parent::handle($args);
+
+ $nickname = common_canonical_nickname($this->arg('nickname'));
+ $user = User::staticGet('nickname', $nickname);
+
+ if (!$user) {
+ $this->no_such_user();
+ return;
+ }
+
+ $profile = $user->getProfile();
+
+ if (!$profile) {
+ common_server_error(_t('User record exists without profile.'));
+ return;
+ }
+
+ # Looks like we're good; show the header
+
+ common_show_header($profile->nickname . _t(" and friends"),
+ array($this, 'show_header'), $user,
+ array($this, 'show_top'));
+
+ $this->show_replies($profile);
+
+ common_show_footer();
+ }
+
+ function show_header($user) {
+ common_element('link', array('rel' => 'alternate',
+ 'href' => common_local_url('allrss', array('nickname' =>
+ $user->nickname)),
+ 'type' => 'application/rss+xml',
+ 'title' => _t('Feed for friends of ') . $user->nickname));
+ }
+
+ function show_top($user) {
+ $cur = common_current_user();
+
+ $this->views_menu();
+ }
+
+ function show_replies($profile) {
+
+ $reply = DB_DataObject::factory('reply');
+
+ $reply->user_id = $profile->id;
+
+ $reply->orderBy('created DESC');
+
+ $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
+
+ $reply->limit((($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1);
+
+ $cnt = $reply->find();
+
+ if ($cnt > 0) {
+ common_element_start('ul', array('id' => 'replies'));
+ for ($i = 0; $i < min($cnt, REPLIES_PER_PAGE); $i++) {
+ if ($reply->fetch()) {
+ $notice = DB_DataObject::factory('notice');
+ $notice->id = $reply->notice_id;
+ $notice->find(1);
+ $this->show_reply($notice, $reply->replied_id);
+ } else {
+ // shouldn't happen!
+ break;
+ }
+ }
+ common_element_end('ul');
+ }
+
+ common_pagination($page > 1, $cnt > REPLIES_PER_PAGE,
+ $page, 'all', array('nickname' => $profile->nickname));
+ }
+}