Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/ControllerPlugin/Like.php
<?php

namespace XF\ControllerPlugin;

use
XF\Mvc\Entity\Entity;

use function
count, is_array;

class
Like extends AbstractPlugin
{
    public function
actionToggleLike(Entity $entity, $confirmUrl, $returnUrl, $likesUrl, $contentTitle = null)
    {
       
$visitor = \XF::visitor();

       
$contentType = $entity->getEntityContentType();
       
$contentId = $entity->getEntityId();

        if (!
$contentType)
        {
            throw new \
InvalidArgumentException("Provided entity {$entity->structure()->shortName} must define a content type in its structure");
        }

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

       
$likeHandler = $likeRepo->getLikeHandler($contentType, true);

        if (
$this->isPost())
        {
           
$isLiked = $likeRepo->toggleLike($contentType, $contentId, $visitor);
           
$cache = $likeHandler->getContentLikeCaches($entity);

            if (
$this->filter('_xfWithData', 'bool'))
            {
               
$viewParams = [
                   
'isLiked' => $isLiked,
                   
'count' => $cache['count'] ?? null,
                   
'likes' => $cache['recent'] ?? null,
                   
'listUrl' => $likesUrl
               
];
                return
$this->view('XF:Like\Like', '', $viewParams);
            }
            else
            {
                return
$this->redirect($returnUrl);
            }
        }
        else
        {
           
$isLiked = (bool)$likeRepo->getLikeByContentAndLiker($contentType, $contentId, $visitor->user_id);

           
$viewParams = [
               
'confirmUrl' => $confirmUrl,
               
'contentTitle' => $contentTitle,
               
'isLiked' => $isLiked
           
];
            return
$this->view('XF:Like\Confirm', 'like_confirm', $viewParams);
        }
    }

    public function
actionLikes(Entity $entity, array $likeLinkData, $title = null, array $breadcrumbs = [])
    {
       
$contentType = $entity->getEntityContentType();
       
$contentId = $entity->getEntityId();

        if (!
$contentType)
        {
            throw new \
InvalidArgumentException("Provided entity must defined a content type in its structure");
        }

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

       
$page = $this->filterPage();
       
$perPage = 50;

       
$likes = $likeRepo->findContentLikes($contentType, $contentId)
            ->
with('Liker')
            ->
limitByPage($page, $perPage, 1)
            ->
fetch();

        if (!
count($likes))
        {
            return
$this->message(\XF::phrase('no_one_has_liked_this_content_yet'));
        }

       
$hasNext = count($likes) > $perPage;
       
$likes = $likes->slice(0, $perPage);

       
$viewParams = [
           
'type' => $contentType,
           
'id' => $contentId,

           
'linkRoute' => $likeLinkData[0] ?? '',
           
'linkData' => $likeLinkData[1] ?? null,
           
'linkParams' => (isset($likeLinkData[2]) && is_array($likeLinkData[2])) ? $likeLinkData[2] : [],

           
'likes' => $likes,
           
'hasNext' => $hasNext,
           
'page' => $page,

           
'title' => $title,
           
'breadcrumbs' => $breadcrumbs
       
];
        return
$this->view('XF:Like\Listing', 'like_list', $viewParams);
    }
}