...Человеческий поиск в разработке...
- Модуль: 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() )); } } }