- Модуль: 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()
));
}
}
}