X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fnoticelist.php;h=c9d43c097a20437de1aa5e4dfeedc5fc6aef51bc;hb=746e658f3e398948fe8c3f047e2b35ef6aa7ebd5;hp=7f38cf005b29469dddca30197946a0cc78da5b4d;hpb=4ea9a0a7e862b50c56616e6c88160dfe152f3a3c;p=quix0rs-gnu-social.git diff --git a/lib/noticelist.php b/lib/noticelist.php index 7f38cf005b..c9d43c097a 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -28,13 +28,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once INSTALLDIR.'/lib/favorform.php'; -require_once INSTALLDIR.'/lib/disfavorform.php'; -require_once INSTALLDIR.'/lib/attachmentlist.php'; +if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); } /** * widget for displaying a list of notices @@ -59,15 +53,41 @@ class NoticeList extends Widget var $notice = null; + protected $addressees = true; + protected $attachments = true; + protected $id_prefix = null; + protected $maxchars = 0; + protected $options = true; + protected $show_n = NOTICES_PER_PAGE; + /** * constructor * * @param Notice $notice stream of notices from DB_DataObject */ - function __construct($notice, $out=null) + function __construct(Notice $notice, $out=null, array $prefs=array()) { parent::__construct($out); $this->notice = $notice; + + // integer preferences + foreach(array('show_n', 'maxchars') as $key) { + if (array_key_exists($key, $prefs)) { + $this->$key = (int)$prefs[$key]; + } + } + // boolean preferences + foreach(array('addressees', 'attachments', 'options') as $key) { + if (array_key_exists($key, $prefs)) { + $this->$key = (bool)$prefs[$key]; + } + } + // string preferences + foreach(array('id_prefix') as $key) { + if (array_key_exists($key, $prefs)) { + $this->$key = $prefs[$key]; + } + } } /** @@ -76,16 +96,17 @@ class NoticeList extends Widget * "Uses up" the stream by looping through it. So, probably can't * be called twice on the same list. * - * @return int count of notices listed. + * @param integer $n The amount of notices to show. + * + * @return int Total amount of notices actually available. */ - function show() + public function show() { - $this->out->elementStart('div', array('id' =>'notices_primary')); $this->out->elementStart('ol', array('class' => 'notices xoxo')); $notices = $this->notice->fetchAll(); $total = count($notices); - $notices = array_slice($notices, 0, NOTICES_PER_PAGE); + $notices = array_slice($notices, 0, $this->show_n); self::prefill($notices); @@ -102,8 +123,6 @@ class NoticeList extends Widget } $this->out->elementEnd('ol'); - $this->out->elementEnd('div'); - return $total; } @@ -117,41 +136,35 @@ class NoticeList extends Widget * * @return NoticeListItem a list item for displaying the notice */ - function newListItem($notice) + function newListItem(Notice $notice) { - return new NoticeListItem($notice, $this->out); + $prefs = array('addressees' => $this->addressees, + 'attachments' => $this->attachments, + 'id_prefix' => $this->id_prefix, + 'maxchars' => $this->maxchars, + 'options' => $this->options); + return new NoticeListItem($notice, $this->out, $prefs); } - static function prefill(&$notices, $avatarSize=AVATAR_STREAM_SIZE) + static function prefill(array &$notices) { - if (Event::handle('StartNoticeListPrefill', array(&$notices, $avatarSize))) { + $scoped = Profile::current(); + $notice_ids = Notice::_idsOf($notices); + + if (Event::handle('StartNoticeListPrefill', array(&$notices, $notice_ids, $scoped))) { // Prefill attachments Notice::fillAttachments($notices); - // Prefill attachments - Notice::fillFaves($notices); // Prefill repeat data Notice::fillRepeats($notices); // Prefill the profiles $profiles = Notice::fillProfiles($notices); - // Prefill the avatars - Profile::fillAvatars($profiles, $avatarSize); - - $p = Profile::current(); - - if (!empty($p)) { - $ids = array(); - - foreach ($notices as $notice) { - $ids[] = $notice->id; - } - - Memcached_DataObject::pivotGet('Fave', 'notice_id', $ids, array('user_id' => $p->id)); - Memcached_DataObject::pivotGet('Notice', 'repeat_of', $ids, array('profile_id' => $p->id)); + if ($scoped instanceof Profile) { + Notice::pivotGet('repeat_of', $notice_ids, array('profile_id' => $scoped->id)); } - Event::handle('EndNoticeListPrefill', array(&$notices, &$profiles, $avatarSize)); + Event::handle('EndNoticeListPrefill', array(&$notices, &$profiles, $notice_ids, $scoped)); } } }