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);
|
$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
|
// Prefill attachments
|
||||||
Notice::fillAttachments($notices);
|
Notice::fillAttachments($notices);
|
||||||
// Prefill repeat data
|
|
||||||
Notice::fillRepeats($notices);
|
|
||||||
// Prefill the profiles
|
// Prefill the profiles
|
||||||
$profiles = Notice::fillProfiles($notices);
|
$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));
|
Event::handle('EndNoticeListPrefill', array(&$notices, &$profiles, $notice_ids, $scoped));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); }
|
if (!defined('GNUSOCIAL')) { exit(1); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* widget for displaying a list of notices
|
* widget for displaying a list of notices
|
||||||
@ -229,13 +229,7 @@ class ThreadedNoticeListItem extends NoticeListItem
|
|||||||
$this->out->elementStart('ul', 'notices threaded-replies xoxo');
|
$this->out->elementStart('ul', 'notices threaded-replies xoxo');
|
||||||
|
|
||||||
if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
|
if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
|
||||||
|
// Repeats and Faves/Likes are handled in plugins.
|
||||||
// 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;
|
|
||||||
|
|
||||||
Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive));
|
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?
|
$threadActive = null; // unused here for now, but maybe in the future?
|
||||||
if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
|
if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
|
||||||
$item = new ThreadedNoticeListInlineRepeatsItem($this->notice, $this->out);
|
// Repeats and Faves/Likes are handled in plugins.
|
||||||
$hasRepeats = $item->show();
|
|
||||||
Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive));
|
Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive));
|
||||||
}
|
}
|
||||||
parent::showEnd();
|
parent::showEnd();
|
||||||
@ -374,80 +367,3 @@ class ThreadedNoticeListMoreItem extends NoticeListItem
|
|||||||
$this->out->element('a', array('href' => $url), $msg);
|
$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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onStartShowThreadedNoticeTailItems(NoticeListItem $nli, Notice $notice, &$threadActive)
|
public function onEndShowThreadedNoticeTailItems(NoticeListItem $nli, Notice $notice, &$threadActive)
|
||||||
{
|
{
|
||||||
if ($nli instanceof ThreadedNoticeListSubItem) {
|
if ($nli instanceof ThreadedNoticeListSubItem) {
|
||||||
// The sub-items are replies to a conversation, thus we use different HTML elements etc.
|
// 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;
|
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
|
* 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