From: Mikael Nordfeldth Date: Thu, 12 Mar 2015 21:56:25 +0000 (+0100) Subject: Moving some more repeat stuff into the Share plugin X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=a647a4f6b3531d3f8e6003d32403b5f30599e952;p=quix0rs-gnu-social.git Moving some more repeat stuff into the Share plugin --- diff --git a/lib/activityhandlerplugin.php b/lib/activityhandlerplugin.php index 19e4dc27b0..529749cc1d 100644 --- a/lib/activityhandlerplugin.php +++ b/lib/activityhandlerplugin.php @@ -602,7 +602,6 @@ abstract class ActivityHandlerPlugin extends Plugin $nli->showNoticeSource(); $nli->showNoticeLocation(); $nli->showPermalink(); - $nli->showRepeat(); $nli->showNoticeOptions(); } diff --git a/lib/apiaction.php b/lib/apiaction.php index 062e6d0774..0eea08bed6 100755 --- a/lib/apiaction.php +++ b/lib/apiaction.php @@ -303,6 +303,7 @@ class ApiAction extends Action { $base = $this->twitterSimpleStatusArray($notice, $include_user); + // FIXME: MOVE TO SHARE PLUGIN if (!empty($notice->repeat_of)) { $original = Notice::getKV('id', $notice->repeat_of); if ($original instanceof Notice) { @@ -374,12 +375,6 @@ class ApiAction extends Action $twitter_status['geo'] = null; } - if (!is_null($this->scoped)) { - $twitter_status['repeated'] = $this->scoped->hasRepeated($notice); - } else { - $twitter_status['repeated'] = false; - } - // Enclosures $attachments = $notice->attachments(); @@ -646,6 +641,7 @@ class ApiAction extends Action $this->showGeoXML($value); break; case 'retweeted_status': + // FIXME: MOVE TO SHARE PLUGIN $this->showTwitterXmlStatus($value, 'retweeted_status'); break; default: diff --git a/lib/noticelistitem.php b/lib/noticelistitem.php index bb1eb17eb3..f25613b9a9 100644 --- a/lib/noticelistitem.php +++ b/lib/noticelistitem.php @@ -180,7 +180,6 @@ class NoticeListItem extends Widget $this->showNoticeSource(); $this->showNoticeLocation(); $this->showPermalink(); - $this->showRepeat(); Event::handle('EndShowNoticeInfo', array($this)); } } @@ -527,32 +526,6 @@ class NoticeListItem extends Widget } } - /** - * show a link to the author of repeat - * - * @return void - */ - function showRepeat() - { - if (!empty($this->repeat)) { - - $repeater = Profile::getKV('id', $this->repeat->profile_id); - - $attrs = array('href' => $repeater->profileurl, - 'class' => 'h-card p-author', - 'title' => $repeater->getFancyName()); - - $this->out->elementStart('span', 'repeat h-entry'); - - // TRANS: Addition in notice list item if notice was repeated. Followed by a span with a nickname. - $this->out->raw(_('Repeated by').' '); - - $this->out->element('a', $attrs, $repeater->getNickname()); - - $this->out->elementEnd('span'); - } - } - /** * show a link to reply to the current notice * diff --git a/lib/repeatedbymenoticestream.php b/lib/repeatedbymenoticestream.php deleted file mode 100644 index 4e3e34162b..0000000000 --- a/lib/repeatedbymenoticestream.php +++ /dev/null @@ -1,113 +0,0 @@ -. - * - * @category Stream - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - -if (!defined('STATUSNET')) { - // This check helps protect against security problems; - // your code file can't be executed directly from the web. - exit(1); -} - -/** - * Stream of notices repeated by me - * - * @category General - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - -class RepeatedByMeNoticeStream extends ScopingNoticeStream -{ - function __construct($user, $profile = -1) - { - if (is_int($profile) && $profile == -1) { - $profile = Profile::current(); - } - parent::__construct(new CachingNoticeStream(new RawRepeatedByMeNoticeStream($user), - 'user:repeated_by_me:'.$user->id), - $profile); - } -} - -/** - * Raw stream of notices repeated by me - * - * @category General - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - -class RawRepeatedByMeNoticeStream extends NoticeStream -{ - protected $user; - - function __construct($user) - { - $this->user = $user; - } - - function getNoticeIds($offset, $limit, $since_id, $max_id) - { - $notice = new Notice(); - - $notice->selectAdd(); // clears it - $notice->selectAdd('id'); - - $notice->profile_id = $this->user->id; - $notice->whereAdd('repeat_of IS NOT NULL'); - - $notice->orderBy('created DESC, id DESC'); - - if (!is_null($offset)) { - $notice->limit($offset, $limit); - } - - Notice::addWhereSinceId($notice, $since_id); - Notice::addWhereMaxId($notice, $max_id); - - $ids = array(); - - if ($notice->find()) { - while ($notice->fetch()) { - $ids[] = $notice->id; - } - } - - $notice->free(); - $notice = NULL; - - return $ids; - } -} \ No newline at end of file diff --git a/lib/repeatsofmenoticestream.php b/lib/repeatsofmenoticestream.php deleted file mode 100644 index ec80d84314..0000000000 --- a/lib/repeatsofmenoticestream.php +++ /dev/null @@ -1,118 +0,0 @@ -. - * - * @category Stream - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - -if (!defined('STATUSNET')) { - // This check helps protect against security problems; - // your code file can't be executed directly from the web. - exit(1); -} - -/** - * Stream of notices that are repeats of mine - * - * @category Stream - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - -class RepeatsOfMeNoticeStream extends ScopingNoticeStream -{ - function __construct($user, $profile=-1) - { - if (is_int($profile) && $profile == -1) { - $profile = Profile::current(); - } - parent::__construct(new CachingNoticeStream(new RawRepeatsOfMeNoticeStream($user), - 'user:repeats_of_me:'.$user->id), - $profile); - } -} - -/** - * Raw stream of notices that are repeats of mine - * - * @category Stream - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ -class RawRepeatsOfMeNoticeStream extends NoticeStream -{ - protected $user; - - function __construct($user) - { - $this->user = $user; - } - - function getNoticeIds($offset, $limit, $since_id, $max_id) - { - $qry = - 'SELECT DISTINCT original.id AS id ' . - 'FROM notice original JOIN notice rept ON original.id = rept.repeat_of ' . - 'WHERE original.profile_id = ' . $this->user->id . ' '; - - $since = Notice::whereSinceId($since_id, 'original.id', 'original.created'); - if ($since) { - $qry .= "AND ($since) "; - } - - $max = Notice::whereMaxId($max_id, 'original.id', 'original.created'); - if ($max) { - $qry .= "AND ($max) "; - } - - $qry .= 'ORDER BY original.created, original.id DESC '; - - if (!is_null($offset)) { - $qry .= "LIMIT $limit OFFSET $offset"; - } - - $ids = array(); - - $notice = new Notice(); - - $notice->query($qry); - - while ($notice->fetch()) { - $ids[] = $notice->id; - } - - $notice->free(); - $notice = NULL; - - return $ids; - } -} diff --git a/plugins/QnA/QnAPlugin.php b/plugins/QnA/QnAPlugin.php index bdd54afd2e..a476c2af56 100644 --- a/plugins/QnA/QnAPlugin.php +++ b/plugins/QnA/QnAPlugin.php @@ -340,7 +340,6 @@ class QnAPlugin extends MicroAppPlugin $nli->showNoticeSource(); $nli->showNoticeLocation(); $nli->showPermalink(); - $nli->showRepeat(); $nli->showNoticeOptions(); diff --git a/plugins/Share/SharePlugin.php b/plugins/Share/SharePlugin.php index 671214b1d6..69761a5f3d 100644 --- a/plugins/Share/SharePlugin.php +++ b/plugins/Share/SharePlugin.php @@ -190,6 +190,31 @@ class SharePlugin extends ActivityVerbHandlerPlugin // Layout stuff + /** + * show a link to the author of repeat + * + * FIXME: Some repeat stuff still in lib/noticelistitem.php! ($nli->repeat etc.) + */ + public function onEndShowNoticeInfo(NoticeListItem $nli) + { + if (!empty($nli->repeat)) { + $repeater = $nli->repeat->getProfile(); + + $attrs = array('href' => $repeater->getUrl(), + 'class' => 'h-card p-author', + 'title' => $repeater->getFancyName()); + + $nli->out->elementStart('span', 'repeat h-entry'); + + // TRANS: Addition in notice list item if notice was repeated. Followed by a span with a nickname. + $nli->out->raw(_('Repeated by').' '); + + $nli->out->element('a', $attrs, $repeater->getNickname()); + + $nli->out->elementEnd('span'); + } + } + public function onEndShowThreadedNoticeTailItems(NoticeListItem $nli, Notice $notice, &$threadActive) { if ($nli instanceof ThreadedNoticeListSubItem) { @@ -244,6 +269,29 @@ class SharePlugin extends ActivityVerbHandlerPlugin // pass } + // API stuff + + /** + * Typically just used to fill out Twitter-compatible API status data. + * + * FIXME: Make all the calls before this end up with a Notice instead of ArrayWrapper please... + */ + public function onNoticeSimpleStatusArray($notice, array &$status, Profile $scoped=null, array $args=array()) + { + if ($scoped instanceof Profile) { + $status['repeated'] = $scoped->hasRepeated($notice); + } else { + $status['repeated'] = false; + } + } + + public function onTwitterUserArray(Profile $profile, array &$userdata, Profile $scoped=null, array $args=array()) + { + $userdata['favourites_count'] = Fave::countByProfile($profile); + } + + // Command stuff + /** * EndInterpretCommand for RepeatPlugin will handle the 'repeat' command * using the class RepeatCommand. diff --git a/plugins/Share/lib/repeatedbymenoticestream.php b/plugins/Share/lib/repeatedbymenoticestream.php new file mode 100644 index 0000000000..4e3e34162b --- /dev/null +++ b/plugins/Share/lib/repeatedbymenoticestream.php @@ -0,0 +1,113 @@ +. + * + * @category Stream + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Stream of notices repeated by me + * + * @category General + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class RepeatedByMeNoticeStream extends ScopingNoticeStream +{ + function __construct($user, $profile = -1) + { + if (is_int($profile) && $profile == -1) { + $profile = Profile::current(); + } + parent::__construct(new CachingNoticeStream(new RawRepeatedByMeNoticeStream($user), + 'user:repeated_by_me:'.$user->id), + $profile); + } +} + +/** + * Raw stream of notices repeated by me + * + * @category General + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class RawRepeatedByMeNoticeStream extends NoticeStream +{ + protected $user; + + function __construct($user) + { + $this->user = $user; + } + + function getNoticeIds($offset, $limit, $since_id, $max_id) + { + $notice = new Notice(); + + $notice->selectAdd(); // clears it + $notice->selectAdd('id'); + + $notice->profile_id = $this->user->id; + $notice->whereAdd('repeat_of IS NOT NULL'); + + $notice->orderBy('created DESC, id DESC'); + + if (!is_null($offset)) { + $notice->limit($offset, $limit); + } + + Notice::addWhereSinceId($notice, $since_id); + Notice::addWhereMaxId($notice, $max_id); + + $ids = array(); + + if ($notice->find()) { + while ($notice->fetch()) { + $ids[] = $notice->id; + } + } + + $notice->free(); + $notice = NULL; + + return $ids; + } +} \ No newline at end of file diff --git a/plugins/Share/lib/repeatsofmenoticestream.php b/plugins/Share/lib/repeatsofmenoticestream.php new file mode 100644 index 0000000000..ec80d84314 --- /dev/null +++ b/plugins/Share/lib/repeatsofmenoticestream.php @@ -0,0 +1,118 @@ +. + * + * @category Stream + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Stream of notices that are repeats of mine + * + * @category Stream + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class RepeatsOfMeNoticeStream extends ScopingNoticeStream +{ + function __construct($user, $profile=-1) + { + if (is_int($profile) && $profile == -1) { + $profile = Profile::current(); + } + parent::__construct(new CachingNoticeStream(new RawRepeatsOfMeNoticeStream($user), + 'user:repeats_of_me:'.$user->id), + $profile); + } +} + +/** + * Raw stream of notices that are repeats of mine + * + * @category Stream + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ +class RawRepeatsOfMeNoticeStream extends NoticeStream +{ + protected $user; + + function __construct($user) + { + $this->user = $user; + } + + function getNoticeIds($offset, $limit, $since_id, $max_id) + { + $qry = + 'SELECT DISTINCT original.id AS id ' . + 'FROM notice original JOIN notice rept ON original.id = rept.repeat_of ' . + 'WHERE original.profile_id = ' . $this->user->id . ' '; + + $since = Notice::whereSinceId($since_id, 'original.id', 'original.created'); + if ($since) { + $qry .= "AND ($since) "; + } + + $max = Notice::whereMaxId($max_id, 'original.id', 'original.created'); + if ($max) { + $qry .= "AND ($max) "; + } + + $qry .= 'ORDER BY original.created, original.id DESC '; + + if (!is_null($offset)) { + $qry .= "LIMIT $limit OFFSET $offset"; + } + + $ids = array(); + + $notice = new Notice(); + + $notice->query($qry); + + while ($notice->fetch()) { + $ids[] = $notice->id; + } + + $notice->free(); + $notice = NULL; + + return $ids; + } +}