X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Fpublic.php;h=06ee75b8d1c5fa9b72b52393b0554c90f1669f3a;hb=0a2c51510ca785b5e3564fc0830518527929dc38;hp=cf732fe464ef85766c2c83d248c08af671610d98;hpb=a18d3facf8767419e699adefcfea2081c220185f;p=quix0rs-gnu-social.git diff --git a/actions/public.php b/actions/public.php index cf732fe464..06ee75b8d1 100644 --- a/actions/public.php +++ b/actions/public.php @@ -27,13 +27,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once INSTALLDIR.'/lib/publicgroupnav.php'; -require_once INSTALLDIR.'/lib/noticelist.php'; -require_once INSTALLDIR.'/lib/feedlist.php'; +if (!defined('GNUSOCIAL')) { exit(1); } // Farther than any human will go @@ -51,7 +45,7 @@ define('MAX_PUBLIC_PAGE', 100); * @see PublicrssAction * @see PublicxrdsAction */ -class PublicAction extends Action +class PublicAction extends ManagedAction { /** * page of the stream we're on; default = 1 @@ -59,23 +53,16 @@ class PublicAction extends Action var $page = null; var $notice; - var $userProfile = null; + + protected $stream = null; function isReadOnly($args) { return true; } - /** - * Read and validate arguments - * - * @param array $args URL parameters - * - * @return boolean success value - */ - function prepare($args) + protected function doPreparation() { - parent::prepare($args); $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; if ($this->page > MAX_PUBLIC_PAGE) { @@ -86,47 +73,31 @@ class PublicAction extends Action common_set_returnto($this->selfUrl()); - $this->userProfile = Profile::current(); - - $user = common_current_user(); + $this->streamPrepare(); - if (!empty($user) && $user->streamModeOnly()) { - $stream = new PublicNoticeStream($this->userProfile); - } else { - $stream = new ThreadingPublicNoticeStream($this->userProfile); - } - - $this->notice = $stream->getNotices(($this->page-1)*NOTICES_PER_PAGE, + $this->notice = $this->stream->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); if (!$this->notice) { // TRANS: Server error displayed when a public timeline cannot be retrieved. $this->serverError(_('Could not retrieve public timeline.')); - return; } - if($this->page > 1 && $this->notice->N == 0){ - // TRANS: Server error when page not found (404). - $this->serverError(_('No such page.'),$code=404); + if ($this->page > 1 && $this->notice->N == 0){ + // TRANS: Client error when page not found (404). + $this->clientError(_('No such page.'), 404); } return true; } - /** - * handle request - * - * Show the public stream, using recipe method showPage() - * - * @param array $args arguments, mostly unused - * - * @return void - */ - function handle($args) + protected function streamPrepare() { - parent::handle($args); - - $this->showPage(); + if ($this->scoped instanceof Profile && $this->scoped->isLocal() && $this->scoped->getUser()->streamModeOnly()) { + $this->stream = new PublicNoticeStream($this->scoped); + } else { + $this->stream = new ThreadingPublicNoticeStream($this->scoped); + } } /** @@ -159,6 +130,11 @@ class PublicAction extends Action $this->element('link', array('rel' => 'EditURI', 'type' => 'application/rsd+xml', 'href' => $rsd)); + + if ($this->page != 1) { + $this->element('link', array('rel' => 'canonical', + 'href' => common_local_url('public'))); + } } /** @@ -219,12 +195,10 @@ class PublicAction extends Action */ function showContent() { - $user = common_current_user(); - - if (!empty($user) && $user->streamModeOnly()) { - $nl = new NoticeList($this->notice, $this); + if ($this->scoped instanceof Profile && $this->scoped->isLocal() && $this->scoped->getUser()->streamModeOnly()) { + $nl = new PrimaryNoticeList($this->notice, $this, array('show_n'=>NOTICES_PER_PAGE)); } else { - $nl = new ThreadedNoticeList($this->notice, $this, $this->userProfile); + $nl = new ThreadedNoticeList($this->notice, $this, $this->scoped); } $cnt = $nl->show(); @@ -234,14 +208,14 @@ class PublicAction extends Action } $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE, - $this->page, 'public'); + $this->page, $this->action); } function showSections() { // Show invite button, as long as site isn't closed, and // we have a logged in user. - if (!common_config('site', 'closed') && common_logged_in()) { + if (common_config('invite', 'enabled') && !common_config('site', 'closed') && common_logged_in()) { if (!common_config('site', 'private')) { $ibs = new InviteButtonSection( $this, @@ -255,8 +229,8 @@ class PublicAction extends Action $ibs->show(); } - $pop = new PopularNoticeSection($this); - $pop->show(); + $p = Profile::current(); + if (!common_config('performance', 'high')) { $cloud = new PublicTagCloudSection($this); $cloud->show(); @@ -285,11 +259,3 @@ class PublicAction extends Action $this->elementEnd('div'); } } - -class ThreadingPublicNoticeStream extends ThreadingNoticeStream -{ - function __construct($profile) - { - parent::__construct(new PublicNoticeStream($profile)); - } -}