]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/public.php
Cosmetic changes to common_redirect, clientError, serverError
[quix0rs-gnu-social.git] / actions / public.php
index d2b0373dc69382aad8951b88cc9f664117e90164..6ecdf2e50ab337bdcabd7364dbca35a09a2558d4 100644 (file)
@@ -59,6 +59,7 @@ class PublicAction extends Action
 
     var $page = null;
     var $notice;
+    var $userProfile = null;
 
     function isReadOnly($args)
     {
@@ -85,13 +86,22 @@ class PublicAction extends Action
 
         common_set_returnto($this->selfUrl());
 
-        $this->notice = Notice::publicStream(($this->page-1)*NOTICES_PER_PAGE,
-                                       NOTICES_PER_PAGE + 1);
+        $this->userProfile = Profile::current();
+
+        $user = common_current_user();
+
+        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,
+                                            NOTICES_PER_PAGE + 1);
 
         if (!$this->notice) {
             // TRANS: Server error displayed when a public timeline cannot be retrieved.
-            $this->serverError(_('Could not retrieve public stream.'));
-            return;
+            $this->serverError(_('Could not retrieve public timeline.'));
         }
 
         if($this->page > 1 && $this->notice->N == 0){
@@ -148,6 +158,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')));
+        }
     }
 
     /**
@@ -157,19 +172,24 @@ class PublicAction extends Action
      */
     function getFeeds()
     {
-        return array(new Feed(Feed::RSS1, common_local_url('publicrss'),
+        return array(new Feed(Feed::JSON,
+                              common_local_url('ApiTimelinePublic',
+                                               array('format' => 'as')),
+                              // TRANS: Link description for public timeline feed.
+                              _('Public Timeline Feed (Activity Streams JSON)')),
+                    new Feed(Feed::RSS1, common_local_url('publicrss'),
                               // TRANS: Link description for public timeline feed.
-                              _('Public Stream Feed (RSS 1.0)')),
+                              _('Public Timeline Feed (RSS 1.0)')),
                      new Feed(Feed::RSS2,
                               common_local_url('ApiTimelinePublic',
                                                array('format' => 'rss')),
                               // TRANS: Link description for public timeline feed.
-                              _('Public Stream Feed (RSS 2.0)')),
+                              _('Public Timeline Feed (RSS 2.0)')),
                      new Feed(Feed::ATOM,
                               common_local_url('ApiTimelinePublic',
                                                array('format' => 'atom')),
                               // TRANS: Link description for public timeline feed.
-                              _('Public Stream Feed (Atom)')));
+                              _('Public Timeline Feed (Atom)')));
     }
 
     function showEmptyList()
@@ -203,7 +223,13 @@ class PublicAction extends Action
      */
     function showContent()
     {
-        $nl = new ThreadedNoticeList($this->notice, $this);
+        $user = common_current_user();
+
+        if (!empty($user) && $user->streamModeOnly()) {
+            $nl = new NoticeList($this->notice, $this);
+        } else {
+            $nl = new ThreadedNoticeList($this->notice, $this, $this->userProfile);
+        }
 
         $cnt = $nl->show();
 
@@ -217,14 +243,30 @@ class PublicAction extends Action
 
     function showSections()
     {
-        // $top = new TopPostersSection($this);
-        // $top->show();
-        $pop = new PopularNoticeSection($this);
+        // Show invite button, as long as site isn't closed, and
+        // we have a logged in user.
+        if (common_config('invite', 'enabled') && !common_config('site', 'closed') && common_logged_in()) {
+            if (!common_config('site', 'private')) {
+                $ibs = new InviteButtonSection(
+                    $this,
+                    // TRANS: Button text for inviting more users to the StatusNet instance.
+                    // TRANS: Less business/enterprise-oriented language for public sites.
+                    _m('BUTTON', 'Send invite')
+                );
+            } else {
+                $ibs = new InviteButtonSection($this);
+            }
+            $ibs->show();
+        }
+
+        $p = Profile::current();
+
+        $pop = new PopularNoticeSection($this, $p);
         $pop->show();
-        $gbp = new GroupsByMembersSection($this);
-        $gbp->show();
-        $ptp = new PeopletagsBySubsSection($this);
-        $ptp->show();
+        if (!common_config('performance', 'high')) {
+            $cloud = new PublicTagCloudSection($this);
+            $cloud->show();
+        }
         $feat = new FeaturedUsersSection($this);
         $feat->show();
     }
@@ -249,3 +291,11 @@ class PublicAction extends Action
         $this->elementEnd('div');
     }
 }
+
+class ThreadingPublicNoticeStream extends ThreadingNoticeStream
+{
+    function __construct($profile)
+    {
+        parent::__construct(new PublicNoticeStream($profile));
+    }
+}