View file upload/src/addons/BS/Contests/XF/Entity/Thread.php

File size: 1.91Kb
<?php

namespace BS\Contests\XF\Entity;

use XF\Mvc\Entity\Structure;

class Thread extends XFCP_Thread
{
    public function canReply(&$error = null)
    {
        if ($this->Contest)
        {
            return false;
        }

        return parent::canReply($error);
    }

    public function canParticipate(\XF\Entity\User $user = null, &$error = null)
    {
        $user = $user ?: \XF::visitor();

        if (!$this->Contest)
        {
            $error = \XF::phrase('this_thread_is_not_contest');
            return false;
        }

        return $this->Contest->canParticipate($user, $error);
    }

    protected function _postDelete()
    {
        if ($this->Contest)
        {
            $this->Contest->delete();
        }

        parent::_postDelete();
    }

    protected function threadMadeVisible()
    {
        $this->adjustUserContestCountIfNeeded(1);

        return parent::threadMadeVisible();
    }

    protected function threadHidden($hardDelete = false)
    {
        $this->adjustUserContestCountIfNeeded(-1);

        return parent::threadHidden($hardDelete);
    }

    protected function adjustUserContestCountIfNeeded($amount)
    {
        if ($this->user_id && $this->Contest)
        {
            $this->db()->query("
                UPDATE xf_user
                SET bs_contest_count = GREATEST(0, bs_contest_count + ?)
                WHERE user_id = ?
            ", [$amount, $this->user_id]);
        }
    }

	public static function getStructure(Structure $structure)
    {
        $structure = parent::getStructure($structure);

        $structure->relations += [
        	'Contest' => [
                'entity' => 'BS\Contests:Contest',
                'type' => self::TO_ONE,
                'conditions' => 'thread_id',
                'primary' => false
            ]
        ];

        return $structure;
    }
}