* @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
* @see NoticeListItem
* @see ProfileNoticeList
*/
-
class NoticeList extends Widget
{
/** the current stream of notices being displayed. */
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];
+ }
+ }
}
/**
* "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->element('h2', null, _('Notices'));
$this->out->elementStart('ol', array('class' => 'notices xoxo'));
- $cnt = 0;
-
- while ($this->notice->fetch() && $cnt <= NOTICES_PER_PAGE) {
- $cnt++;
-
- if ($cnt > NOTICES_PER_PAGE) {
- break;
- }
+ $notices = $this->notice->fetchAll();
+ $total = count($notices);
+ $notices = array_slice($notices, 0, $this->show_n);
+
+ self::prefill($notices);
+
+ foreach ($notices as $notice) {
try {
- $item = $this->newListItem($this->notice);
+ $item = $this->newListItem($notice);
$item->show();
} catch (Exception $e) {
// we log exceptions and continue
}
$this->out->elementEnd('ol');
- $this->out->elementEnd('div');
-
- return $cnt;
+ return $total;
}
/**
*
* @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(array &$notices)
+ {
+ $scoped = Profile::current();
+ $notice_ids = Notice::_idsOf($notices);
+
+ if (Event::handle('StartNoticeListPrefill', array(&$notices, $notice_ids, $scoped))) {
+
+ // Prefill attachments
+ Notice::fillAttachments($notices);
+ // Prefill the profiles
+ $profiles = Notice::fillProfiles($notices);
+ Event::handle('EndNoticeListPrefill', array(&$notices, &$profiles, $notice_ids, $scoped));
+ }
+ }
+}