VoteTable::checkFields

  1. Bitrix24 API (v. 23.675.0)
  2. vote
  3. VoteTable
  4. checkFields
  • Модуль: vote
  • Путь к файлу: ~/bitrix/modules/vote/lib/vote.php
  • Класс: BitrixVoteVoteTable
  • Вызов: VoteTable::checkFields
static function checkFields(Result $result, $primary, array $data)
{
	parent::checkFields($result, $primary, $data);
	if ($result->isSuccess())
	{
		try
		{
			$vote = null;
			//region check activity dates
			/**@var $date["start"] BitrixMainTypeDateTime */
			/**@var $date["end"] BitrixMainTypeDateTime */
			$params = null;
			if ($result instanceof AddResult)
			{
				$params = [
					"ID" => null,
					"ACTIVE" => (array_key_exists("ACTIVE", $data) ? $data["ACTIVE"] : "Y"),
					"CHANNEL_ID" => $data["CHANNEL_ID"],
					"DATE_START" => $data["DATE_START"],
					"DATE_END" => $data["DATE_END"]
				];
			}
			else if (array_key_exists("CHANNEL_ID", $data) ||
				array_key_exists("ACTIVE", $data) && $data["ACTIVE"] == "Y" ||
				array_key_exists("DATE_START", $data) ||
				array_key_exists("DATE_END", $data)
			)
			{
				// if it is need to move to other channel or activate or change the dates
				$vote = Vote::loadFromId($primary["ID"]);
				$params = [
					"ID" => $primary["ID"],
					"ACTIVE" => (array_key_exists("ACTIVE", $data) ? $data["ACTIVE"] : $vote["ACTIVE"]),
					"CHANNEL_ID" => (array_key_exists("CHANNEL_ID", $data) ? $data["CHANNEL_ID"] : $vote["CHANNEL_ID"]),
					"DATE_START" => (array_key_exists("DATE_START", $data) ? $data["DATE_START"] : $vote["DATE_START"]),
					"DATE_END" => (array_key_exists("DATE_END", $data) ? $data["DATE_END"] : $vote["DATE_END"])
				];
			}
			if (!is_null($params))
			{
				$params["DATE_START"] = static::getEntity()->getField("DATE_START")->cast($params["DATE_START"]);
				$params["DATE_END"] = static::getEntity()->getField("DATE_END")->cast($params["DATE_END"]);
				if (array_key_exists("DATE_END", $data))
					$data["DATE_END"] = $params["DATE_END"];
				if (!($params["DATE_START"] instanceof DateTime) || !($params["DATE_END"] instanceof DateTime))
					$result->addError(new FieldError(
						static::getEntity()->getField("DATE_START"),
						Loc::getMessage("VOTE_ERROR_DATE_VOTE_IS_WRONG")
					));
				else if ($params["DATE_START"]->getTimestamp() > $params["DATE_END"]->getTimeStamp())
				{
					$result->addError(new FieldError(
						static::getEntity()->getField("DATE_START"),
						Loc::getMessage("VOTE_ERROR_DATE_START_LATER_THAN_END")
					));
				}
				else if ($params["ACTIVE"] == "Y")
				{
					/**@var $channel Channel */
					$channel = Channel::loadFromId($params["CHANNEL_ID"]);
					if ($channel["VOTE_SINGLE"] == "Y")
					{
						$dbRes = VoteTable::getList([
							"select" => ["ID", "TITLE", "DATE_START", "DATE_END"],
							"filter" => (is_null($params["ID"]) ? [] : [
									"!ID" => $params["ID"]]) + [
									"CHANNEL_ID" => $channel["ID"],
									[
										"LOGIC" => "OR",
										">  [$params["DATE_START"], $params["DATE_END"]],
										">  [$params["DATE_START"], $params["DATE_END"]],
										[
											"<=DATE_START" =>  $params["DATE_START"],
											">=DATE_END" => $params["DATE_END"]
										]
									]
								]
						]);
						if ($res = $dbRes->fetch())
						{
							$field = static::getEntity()->getField("DATE_START");
							$result->addError(new FieldError(
								$field,
								Loc::getMessage("VOTE_ERROR_SAME_DATE_VOTE_IS_ALREADY_EXISTS", ["#VOTE#" => $res["TITLE"]." [".$res["ID"]."]"])
							));
						}
					}
				}
			}
			//endregion
		}
		catch (Exception $e)
		{
			$result->addError(new Error(
				$e->getMessage()
			));
		}
	}
}

Добавить комментарий