View file upload/src/addons/BS/Contests/XF/Pub/Controller/Forum.php

File size: 1.54Kb
<?php

namespace BS\Contests\XF\Pub\Controller;

use XF\Mvc\ParameterBag;

class Forum extends XFCP_Forum
{
	protected function setupThreadCreate(\XF\Entity\Forum $forum)
	{
		$creator = parent::setupThreadCreate($forum);

		if ($forum->isContestForum())
		{
			$contest = $this->getContestFromInput();
			$creator->setContest($contest);
		}

		return $creator;
	}

	protected function getContestFromInput()
	{
		$input = $this->request->filter([
			'contest.type' => 'str',
			'contest.end_date' => 'datetime',
			'contest.count_members' => 'uint',
			'contest.count_winners' => 'uint',
			'contest.criteria.reaction_score' => 'uint',
			'contest.criteria.message_count' => 'uint',
			'contest.criteria.register_days' => 'uint',
			'contest.auto_give_prize' => 'bool',
			'contest.prizes' => 'array-str'
		]);

		$prizes = array_values(array_filter($input['contest.prizes']));

		$contest = $this->em()->create('BS\Contests:Contest');
		$contest->bulkSet([
			'user_id' => \XF::visitor()->user_id,
			'type' => $input['contest.type'],
			'end_date' => $input['contest.end_date'],
			'count_members' => $input['contest.count_members'],
			'count_winners' => $input['contest.count_winners'],
			'criteria' => [
				'reaction_score' => $input['contest.criteria.reaction_score'],
				'message_count' => $input['contest.criteria.message_count'],
				'register_days' => $input['contest.criteria.register_days']
			],
			'auto_give_prize' => $input['contest.auto_give_prize'],
			'prizes' => $prizes
		]);

		return $contest;
	}
}