View file MMO-Hide-2.3.4/upload/src/addons/MMO/Hide/BbCode/Traits/HasReactionTrait.php

File size: 1.9Kb
<?php

namespace MMO\Hide\BbCode\Traits;

use XF\Finder\ReactionContentFinder;
use XF\Mvc\Entity\Entity;

trait HasReactionTrait
{
    /**
     * @param array $options
     * @param int $userId
     * @param array $reactionId
     * @return Entity|null
     */
    protected function hasReaction(array $options, int $userId, array $reactionId): ?Entity
    {
        return $this->finder(ReactionContentFinder::class)->where([
            'reaction_id' => $reactionId,
            'content_type' => $options['entity']->getEntityContentType(),
            'content_id' => $options['entity']->getEntityId(),
            'reaction_user_id' => $userId,
        ])->fetchOne();
    }

    /**
     * @param array $options
     * @return bool|Entity|null
     */
    protected function checkLike(array $options)
    {
        if ($this->options()->mhHideUseCachingReactions)
        {
            return $this->canReactionView($options);
        }

        if(isset($options['entity']))
        {
            return $this->hasReaction($options, $this->visitor()->user_id, [1]);
        }

        return false;
    }

    /**
     * @param array $options
     * @return bool
     */
    protected function canReactionView(array $options): bool
    {
        if (isset($options['likes']))
        {
            $reactionIds = \array_map(function ($v)
            {
                return $v['user_id'];
            }, $options['likes']);
        }
        elseif (isset($options['entity']['reaction_users']))
        {
            $reactionIds = \array_map(function ($v)
            {
                return $v['user_id'];
            }, $options['entity']['reaction_users']);
        }

        if (isset($reactionIds))
        {
            return \in_array(\XF::visitor()->user_id, $reactionIds);
        }
        else
        {
            return false;
        }
    }
}