Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Pub/Controller/WhatsNew.php
<?php

namespace XF\Pub\Controller;

use
XF\Mvc\Entity\ArrayCollection;

class
WhatsNew extends AbstractController
{
    public function
actionIndex()
    {
       
$this->assertNotEmbeddedImageRequest();

       
$this->assertCanonicalUrl($this->buildLink('whats-new'));

       
$viewParams = [];
        return
$this->view('XF:WhatsNew\Overview', 'whats_new', $viewParams);
    }

    public function
actionLatestActivity()
    {
       
$this->assertNotEmbeddedImageRequest();

        if (!
$this->options()->enableNewsFeed)
        {
            throw
$this->exception($this->error(\XF::phrase('news_feed_disabled'), $this->app->config('serviceUnavailableCode')));
        }

       
$this->assertCanonicalUrl($this->buildLink('whats-new/latest-activity'));

       
$newsFeedRepo = $this->repository('XF:NewsFeed');
       
$maxItems = $this->options()->newsFeedMaxItems;

       
$beforeId = $this->filter('before_id', 'uint');

       
$newsFeedFinder = $newsFeedRepo->findNewsFeed()
            ->
beforeFeedId($beforeId);

       
$items = $newsFeedFinder->fetch($maxItems * 2);
       
$newsFeedRepo->addContentToNewsFeedItems($items);
       
$items = $items->filterViewable();

       
/** @var ArrayCollection $items */
       
$items = $items->slice(0, $maxItems);

       
$lastItem = $items->last();
       
$oldestItemId = $lastItem ? $lastItem->news_feed_id : 0;

       
$viewParams = [
           
'newsFeedItems' => $items,
           
'oldestItemId' => $oldestItemId,
           
'beforeId' => $beforeId
       
];
        return
$this->view('XF:WhatsNew\LatestActivity', 'latest_activity', $viewParams);
    }

    public function
actionNewsFeed()
    {
        if (!
$this->options()->enableNewsFeed)
        {
            throw
$this->exception($this->error(\XF::phrase('news_feed_disabled'), $this->app->config('serviceUnavailableCode')));
        }

       
$visitor = \XF::visitor();
        if (!
$visitor->user_id)
        {
            return
$this->redirect(
               
$this->buildLink('whats-new/latest-activity')
            );
        }

       
$newsFeed = [];
       
$oldestItemId = 0;
       
$beforeId = 0;

        if (
$visitor->Profile->following)
        {
           
$maxItems = $this->options()->newsFeedMaxItems;

           
/** @var \XF\Repository\NewsFeed $newsFeedRepo */
           
$newsFeedRepo = $this->repository('XF:NewsFeed');

           
$beforeId = $this->filter('before_id', 'uint');

           
$newsFeedFinder = $newsFeedRepo->findNewsFeed();
           
$newsFeedFinder
               
->beforeFeedId($beforeId)
                ->
forUser($visitor);

           
$newsFeed = $newsFeedFinder->fetch($maxItems * 2);
           
$newsFeedRepo->addContentToNewsFeedItems($newsFeed);
           
$newsFeed = $newsFeed->filterViewable();
           
$newsFeed = $newsFeed->slice(0, $maxItems);

            if (
$newsFeed->count())
            {
               
$oldestItemId = min(array_keys($newsFeed->toArray()));
            }
        }

       
$viewParams = [
           
'newsFeedItems' => $newsFeed,
           
'oldestItemId' => $oldestItemId,
           
'beforeId' => $beforeId
       
];
        return
$this->view('XF:WhatsNew\NewsFeed', 'news_feed', $viewParams);
    }

    public function
actionPosts()
    {
        return
$this->redirectPermanently(
           
$this->buildLink('whats-new/posts')
        );
    }

    public function
actionProfilePosts()
    {
        return
$this->redirectPermanently(
           
$this->buildLink('whats-new/profile-posts')
        );
    }

    public static function
getActivityDetails(array $activities)
    {
        return \
XF::phrase('viewing_latest_content');
    }
}