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;
}
}