forked from GNUsocial/gnu-social
Repeats shown in threaded noticelist now handled by plugin
This commit is contained in:
parent
940737a958
commit
20f8dd6565
@ -2901,31 +2901,4 @@ class Notice extends Managed_DataObject
|
||||
$notice->_setReplies($ids);
|
||||
}
|
||||
}
|
||||
|
||||
protected $_repeats = array();
|
||||
|
||||
function getRepeats()
|
||||
{
|
||||
if (isset($this->_repeats[$this->id])) {
|
||||
return $this->_repeats[$this->id];
|
||||
}
|
||||
$repeatMap = Notice::listGet('repeat_of', array($this->id));
|
||||
$this->_repeats[$this->id] = $repeatMap[$this->id];
|
||||
return $this->_repeats[$this->id];
|
||||
}
|
||||
|
||||
function _setRepeats($repeats)
|
||||
{
|
||||
$this->_repeats[$this->id] = $repeats;
|
||||
}
|
||||
|
||||
static function fillRepeats(&$notices)
|
||||
{
|
||||
$ids = self::_idsOf($notices);
|
||||
$repeatMap = Notice::listGet('repeat_of', $ids);
|
||||
foreach ($notices as $notice) {
|
||||
$repeats = $repeatMap[$notice->id];
|
||||
$notice->_setRepeats($repeats);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -155,15 +155,9 @@ class NoticeList extends Widget
|
||||
|
||||
// Prefill attachments
|
||||
Notice::fillAttachments($notices);
|
||||
// Prefill repeat data
|
||||
Notice::fillRepeats($notices);
|
||||
// Prefill the profiles
|
||||
$profiles = Notice::fillProfiles($notices);
|
||||
|
||||
if ($scoped instanceof Profile) {
|
||||
Notice::pivotGet('repeat_of', $notice_ids, array('profile_id' => $scoped->id));
|
||||
}
|
||||
|
||||
Event::handle('EndNoticeListPrefill', array(&$notices, &$profiles, $notice_ids, $scoped));
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,7 @@
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); }
|
||||
if (!defined('GNUSOCIAL')) { exit(1); }
|
||||
|
||||
/**
|
||||
* widget for displaying a list of notices
|
||||
@ -229,13 +229,7 @@ class ThreadedNoticeListItem extends NoticeListItem
|
||||
$this->out->elementStart('ul', 'notices threaded-replies xoxo');
|
||||
|
||||
if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
|
||||
|
||||
// Show the repeats-button for this notice. If there are repeats,
|
||||
// the show() function will return true, definitely setting our
|
||||
// $threadActive flag, which will be used later to show a reply box.
|
||||
$item = new ThreadedNoticeListRepeatsItem($this->notice, $this->out);
|
||||
$threadActive = $item->show() || $threadActive;
|
||||
|
||||
// Repeats and Faves/Likes are handled in plugins.
|
||||
Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive));
|
||||
}
|
||||
|
||||
@ -309,8 +303,7 @@ class ThreadedNoticeListSubItem extends NoticeListItem
|
||||
{
|
||||
$threadActive = null; // unused here for now, but maybe in the future?
|
||||
if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
|
||||
$item = new ThreadedNoticeListInlineRepeatsItem($this->notice, $this->out);
|
||||
$hasRepeats = $item->show();
|
||||
// Repeats and Faves/Likes are handled in plugins.
|
||||
Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive));
|
||||
}
|
||||
parent::showEnd();
|
||||
@ -374,80 +367,3 @@ class ThreadedNoticeListMoreItem extends NoticeListItem
|
||||
$this->out->element('a', array('href' => $url), $msg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Placeholder for showing repeats...
|
||||
*/
|
||||
class ThreadedNoticeListRepeatsItem extends NoticeListActorsItem
|
||||
{
|
||||
function getProfiles()
|
||||
{
|
||||
$repeats = $this->notice->getRepeats();
|
||||
|
||||
$profiles = array();
|
||||
|
||||
foreach ($repeats as $rep) {
|
||||
$profiles[] = $rep->profile_id;
|
||||
}
|
||||
|
||||
return $profiles;
|
||||
}
|
||||
|
||||
function magicList($items)
|
||||
{
|
||||
if (count($items) > 4) {
|
||||
return parent::magicList(array_slice($items, 0, 3));
|
||||
} else {
|
||||
return parent::magicList($items);
|
||||
}
|
||||
}
|
||||
|
||||
function getListMessage($count, $you)
|
||||
{
|
||||
if ($count == 1 && $you) {
|
||||
// darn first person being different from third person!
|
||||
// TRANS: List message for notice repeated by logged in user.
|
||||
return _m('REPEATLIST', 'You repeated this.');
|
||||
} else if ($count > 4) {
|
||||
// TRANS: List message for when more than 4 people repeat something.
|
||||
// TRANS: %%s is a list of users liking a notice, %d is the number over 4 that like the notice.
|
||||
// TRANS: Plural is decided on the total number of users liking the notice (count of %%s + %d).
|
||||
return sprintf(_m('%%s and %d other repeated this.',
|
||||
'%%s and %d others repeated this.',
|
||||
$count - 3),
|
||||
$count - 3);
|
||||
} else {
|
||||
// TRANS: List message for repeated notices.
|
||||
// TRANS: %%s is a list of users who have repeated a notice.
|
||||
// TRANS: Plural is based on the number of of users that have repeated a notice.
|
||||
return sprintf(_m('%%s repeated this.',
|
||||
'%%s repeated this.',
|
||||
$count),
|
||||
$count);
|
||||
}
|
||||
}
|
||||
|
||||
function showStart()
|
||||
{
|
||||
$this->out->elementStart('li', array('class' => 'notice-data notice-repeats'));
|
||||
}
|
||||
|
||||
function showEnd()
|
||||
{
|
||||
$this->out->elementEnd('li');
|
||||
}
|
||||
}
|
||||
|
||||
// @todo FIXME: needs documentation.
|
||||
class ThreadedNoticeListInlineRepeatsItem extends ThreadedNoticeListRepeatsItem
|
||||
{
|
||||
function showStart()
|
||||
{
|
||||
$this->out->elementStart('div', array('class' => 'notice-repeats'));
|
||||
}
|
||||
|
||||
function showEnd()
|
||||
{
|
||||
$this->out->elementEnd('div');
|
||||
}
|
||||
}
|
||||
|
@ -361,7 +361,7 @@ class FavoritePlugin extends ActivityVerbHandlerPlugin
|
||||
return true;
|
||||
}
|
||||
|
||||
public function onStartShowThreadedNoticeTailItems(NoticeListItem $nli, Notice $notice, &$threadActive)
|
||||
public function onEndShowThreadedNoticeTailItems(NoticeListItem $nli, Notice $notice, &$threadActive)
|
||||
{
|
||||
if ($nli instanceof ThreadedNoticeListSubItem) {
|
||||
// The sub-items are replies to a conversation, thus we use different HTML elements etc.
|
||||
|
@ -174,7 +174,19 @@ class SharePlugin extends ActivityVerbHandlerPlugin
|
||||
return true;
|
||||
}
|
||||
|
||||
// API stuff
|
||||
// Layout stuff
|
||||
|
||||
public function onEndShowThreadedNoticeTailItems(NoticeListItem $nli, Notice $notice, &$threadActive)
|
||||
{
|
||||
if ($nli instanceof ThreadedNoticeListSubItem) {
|
||||
// The sub-items are replies to a conversation, thus we use different HTML elements etc.
|
||||
$item = new ThreadedNoticeListInlineRepeatsItem($notice, $nli->out);
|
||||
} else {
|
||||
$item = new ThreadedNoticeListRepeatsItem($notice, $nli->out);
|
||||
}
|
||||
$threadActive = $item->show() || $threadActive;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* show the "repeat" form in the notice options element
|
||||
|
16
plugins/Share/lib/threadednoticelistinlinerepeatsitem.php
Normal file
16
plugins/Share/lib/threadednoticelistinlinerepeatsitem.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
if (!defined('GNUSOCIAL')) { exit(1); }
|
||||
|
||||
class ThreadedNoticeListInlineRepeatsItem extends ThreadedNoticeListRepeatsItem
|
||||
{
|
||||
function showStart()
|
||||
{
|
||||
$this->out->elementStart('div', array('class' => 'notice-repeats'));
|
||||
}
|
||||
|
||||
function showEnd()
|
||||
{
|
||||
$this->out->elementEnd('div');
|
||||
}
|
||||
}
|
65
plugins/Share/lib/threadednoticelistrepeatsitem.php
Normal file
65
plugins/Share/lib/threadednoticelistrepeatsitem.php
Normal file
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
if (!defined('GNUSOCIAL')) { exit(1); }
|
||||
|
||||
/**
|
||||
* Placeholder for showing repeats...
|
||||
*/
|
||||
class ThreadedNoticeListRepeatsItem extends NoticeListActorsItem
|
||||
{
|
||||
function getProfiles()
|
||||
{
|
||||
$repeats = Notice::listGet('repeat_of', array($this->notice->getID()));
|
||||
|
||||
$profiles = array();
|
||||
foreach ($repeats[$this->notice->getID()] as $rep) {
|
||||
$profiles[] = $rep->profile_id;
|
||||
}
|
||||
|
||||
return $profiles;
|
||||
}
|
||||
|
||||
function magicList($items)
|
||||
{
|
||||
if (count($items) > 4) {
|
||||
return parent::magicList(array_slice($items, 0, 3));
|
||||
} else {
|
||||
return parent::magicList($items);
|
||||
}
|
||||
}
|
||||
|
||||
function getListMessage($count, $you)
|
||||
{
|
||||
if ($count == 1 && $you) {
|
||||
// darn first person being different from third person!
|
||||
// TRANS: List message for notice repeated by logged in user.
|
||||
return _m('REPEATLIST', 'You repeated this.');
|
||||
} else if ($count > 4) {
|
||||
// TRANS: List message for when more than 4 people repeat something.
|
||||
// TRANS: %%s is a list of users liking a notice, %d is the number over 4 that like the notice.
|
||||
// TRANS: Plural is decided on the total number of users liking the notice (count of %%s + %d).
|
||||
return sprintf(_m('%%s and %d other repeated this.',
|
||||
'%%s and %d others repeated this.',
|
||||
$count - 3),
|
||||
$count - 3);
|
||||
} else {
|
||||
// TRANS: List message for repeated notices.
|
||||
// TRANS: %%s is a list of users who have repeated a notice.
|
||||
// TRANS: Plural is based on the number of of users that have repeated a notice.
|
||||
return sprintf(_m('%%s repeated this.',
|
||||
'%%s repeated this.',
|
||||
$count),
|
||||
$count);
|
||||
}
|
||||
}
|
||||
|
||||
function showStart()
|
||||
{
|
||||
$this->out->elementStart('li', array('class' => 'notice-data notice-repeats'));
|
||||
}
|
||||
|
||||
function showEnd()
|
||||
{
|
||||
$this->out->elementEnd('li');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user