summaryrefslogtreecommitdiff
path: root/actions
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2009-12-08 17:02:48 -0500
committerEvan Prodromou <evan@status.net>2009-12-08 17:02:48 -0500
commitc899e4a84ee45b65950980ccb87e52129871d58e (patch)
treeaccaf30a40abf51b6a76f2671e717097c5791a4a /actions
parent72c82a2e293549c10b60ca9e295f2f430224e814 (diff)
show forwards in the inbox
Diffstat (limited to 'actions')
-rw-r--r--actions/all.php85
1 files changed, 84 insertions, 1 deletions
diff --git a/actions/all.php b/actions/all.php
index 5a9d97dd7..2c96298fa 100644
--- a/actions/all.php
+++ b/actions/all.php
@@ -144,7 +144,7 @@ class AllAction extends ProfileAction
function showContent()
{
- $nl = new NoticeList($this->notice, $this);
+ $nl = new InboxNoticeList($this->notice, $this->user, $this);
$cnt = $nl->show();
@@ -167,5 +167,88 @@ class AllAction extends ProfileAction
$this->element('h1', null, sprintf(_('%s and friends'), $this->user->nickname));
}
}
+}
+
+class InboxNoticeList extends NoticeList
+{
+ var $owner = null;
+
+ function __construct($notice, $owner, $out=null)
+ {
+ parent::__construct($notice, $out);
+ $this->owner = $owner;
+ }
+
+ function newListItem($notice)
+ {
+ return new InboxNoticeListItem($notice, $this->owner, $this->out);
+ }
+}
+class InboxNoticeListItem extends NoticeListItem
+{
+ var $owner = null;
+ var $ib = null;
+
+ function __construct($notice, $owner, $out=null)
+ {
+ parent::__construct($notice, $out);
+ $this->owner = $owner;
+
+ $this->ib = Notice_inbox::pkeyGet(array('user_id' => $owner->id,
+ 'notice_id' => $notice->id));
+ }
+
+ function showAuthor()
+ {
+ parent::showAuthor();
+ if ($this->ib->source == NOTICE_INBOX_SOURCE_FORWARD) {
+ $this->out->element('span', 'forward', _('Fwd'));
+ }
+ }
+
+ function showEnd()
+ {
+ if ($this->ib->source == NOTICE_INBOX_SOURCE_FORWARD) {
+
+ $forward = new Forward();
+
+ // FIXME: scary join!
+
+ $forward->query('SELECT profile_id '.
+ 'FROM forward JOIN subscription ON forward.profile_id = subscription.subscribed '.
+ 'WHERE subscription.subscriber = ' . $this->owner->id . ' '.
+ 'AND forward.notice_id = ' . $this->notice->id . ' '.
+ 'ORDER BY forward.created ');
+
+ $n = 0;
+
+ $firstForwarder = null;
+
+ while ($forward->fetch()) {
+ if (empty($firstForwarder)) {
+ $firstForwarder = Profile::staticGet('id', $forward->profile_id);
+ }
+ $n++;
+ }
+
+ $forward->free();
+ unset($forward);
+
+ $this->out->elementStart('span', 'forwards');
+
+ $link = XMLStringer::estring('a', array('href' => $firstForwarder->profileurl),
+ $firstForwarder->nickname);
+
+ if ($n == 1) {
+ $this->out->raw(sprintf(_('Forwarded by %s'), $link));
+ } else {
+ // XXX: use that cool ngettext thing
+ $this->out->raw(sprintf(_('Forwarded by %s and %d other(s)'), $link, $n - 1));
+ }
+
+ $this->out->elementEnd('span');
+ }
+ parent::showEnd();
+ }
}