View file MMO-Hide-2.3.4/upload/src/addons/MMO/Hide/XF/Service/Message/PreparerService.php

File size: 4.08Kb
<?php

namespace MMO\Hide\XF\Service\Message;

use MMO\CoreLib\Util\Plural;
use MMO\Hide\Data\HideTags;

class PreparerService extends XFCP_PreparerService
{
    /**
     * @param $message
     *
     * @return bool
     */
    public function checkValidity($message)
    {
        parent::checkValidity($message);

        /** @var \XF\BbCode\ProcessorAction\AnalyzeUsage $usage */
        $usage = $this->bbCodeProcessor->getAnalyzer('usage');

        /** @var HideTags $hideTags */
        $hideTags = $this->app->data(HideTags::class);
        foreach ($hideTags->getHideTags() as $tag)
        {
            if ($usage->getTagCount($tag) && !\XF::visitor()->canUseHideTag(ucfirst($tag)))
            {
                $this->errors[] = \XF::phraseDeferred("mh_tag_{$tag}_no_permission");
            }
        }

        /** @var \MMO\Hide\BbCode\ProcessorAction\AnalyzeHideBbCodeUsage $hideUsage */
        $hideUsage = $this->bbCodeProcessor->getAnalyzer('mhHideBbCodeUsage');
        $hideOption = $hideUsage->option;
        if($hideOption && $this->app->options()->mhHideEnableCheckCond) // and check option in xenforo for check user count in hide
        {
            $tag = strtolower($hideUsage->tag);
            switch ($tag)
            {
                case 'posts':
                    $messageCount = \XF::visitor()->message_count;
                    if($messageCount < $hideOption)
                    {
                        $this->errors[] = \XF::phraseDeferred('mh_tag_posts_value_of_cond_can_not_be_higher', [
                            'option_value' => $hideOption,
                            'posts' => $messageCount,
                            'now_posts' => Plural::choice('mh_tag_posts_now_posts', $messageCount),
                        ]);
                    }
                    break;
                case 'likes':
                    $reactionCount = \XF::visitor()->reaction_score;
                    if($reactionCount < $hideOption)
                    {
                        $this->errors[] = \XF::phraseDeferred('mh_tag_likes_value_of_cond_can_not_be_higher', [
                            'option_value' => $hideOption,
                            'reactions' => $reactionCount,
                            'now_reactions' => Plural::choice('mh_tag_likes_now_reactions', $reactionCount),
                        ]);
                    }
                    break;
                case 'days':
                    $days = \intval((\XF::$time - \XF::visitor()->register_date) / 86400);
                    if($days < $hideOption)
                    {
                        $this->errors[] = \XF::phraseDeferred('mh_tag_days_value_of_cond_can_not_be_higher', [
                            'option_value' => $hideOption,
                            'days' => $days,
                            'now_days' => Plural::choice('mh_tag_days_now_days', $days)
                        ]);
                    }
                    break;
                case 'trophies':
                    $trophies = \XF::visitor()->trophy_points;
                    if($trophies < $hideOption)
                    {
                        $this->errors[] = \XF::phraseDeferred('mh_tag_trophies_value_of_cond_can_not_be_higher', [
                            'option_value' => $hideOption,
                            'trophies' => $trophies,
                            'now_trophies' => Plural::choice('mh_tag_trophies_now_trophies', $trophies)
                        ]);
                    }
                    break;
            }

            $this->app->fire('mh_hide_check_condition', [$tag, $hideOption, &$this->errors]);
        }

        $this->isValid = (\count($this->errors) == 0);
        return $this->isValid;
    }

    protected function getBbCodeProcessor()
    {
        $processor = parent::getBbCodeProcessor();
        $bbCodeContainer = $this->app->bbCode();

        $processor->addProcessorAction('mhHideBbCodeUsage', $bbCodeContainer->processorAction('mhHideBbCodeUsage'));

        return $processor;
    }
}