static function getMap()
{
$now = Application::getInstance()->getConnection()->getSqlHelper()->getCurrentDateTimeFunction();
return array(
(new IntegerField("ID", ["primary" => true, "autocomplete" => true])),
(new IntegerField("CHANNEL_ID", ["required" => true])),
(new IntegerField("C_SORT", ["default_value" => 100])),
(new BooleanField("ACTIVE", ["values" => ["N", "Y"], "default_value" => "Y"])),
(new IntegerField("ANONYMITY", ["default_value" => Anonymity::PUBLICLY])),
(new EnumField("NOTIFY", ["values" => ["N", "Y", "I"], "default_value" => "N"])),
(new IntegerField("AUTHOR_ID")),
(new Reference("AUTHOR", BitrixMainUserTable::class, Join::on("this.AUTHOR_ID", "ref.ID"))),
(new DatetimeField("TIMESTAMP_X", ["default_value" => function(){return new DateTime();}])),
(new DatetimeField("DATE_START", ["default_value" => function(){return new DateTime();}, "required" => true, "validation" => function() {
return [
new DateValidator,
[__CLASS__, "validateActivityDate"]
];
}])),
(new DatetimeField("DATE_END", ["default_value" => function(){
$time = new DateTime();
$time->add("1D");
return $time;
}, "required" => true, "validation" => function() {
return [
new DateValidator,
[__CLASS__, "validateActivityDate"]
];
}])),
(new StringField("URL", ["size" => 255])),
(new IntegerField("COUNTER")),
(new StringField("TITLE", ["size" => 255])),
(new TextField("DESCRIPTION")),
(new EnumField("DESCRIPTION_TYPE", ["values" => ["text", "html"], "default_value" => "text"])),
(new IntegerField("IMAGE_ID")),
(new Reference("IMAGE", FileTable::class, Join::on("this.IMAGE_ID", "ref.ID"))),
(new StringField("EVENT1", ["size" => 255])),
(new StringField("EVENT2", ["size" => 255])),
(new StringField("EVENT3", ["size" => 255])),
(new IntegerField("UNIQUE_TYPE", ["default_value" => EventLimits::BY_IP|EventLimits::BY_USER_ID])),
(new IntegerField("KEEP_IP_SEC", ["default_value" => 604800])), // one week
(new IntegerField("OPTIONS", ["default_value" => Option::ALLOW_REVOTE])),
(new ExpressionField("LAMP",
"CASE ".
"WHEN (%s='Y' AND %s='Y' AND %s <= {$now} AND {$now} <= %s AND %s='Y') THEN 'yellow' ".
"WHEN (%s='Y' AND %s='Y' AND %s <= {$now} AND {$now} <= %s AND %s!='Y') THEN 'green' ".
"ELSE 'red' ".
"END",
["CHANNEL.ACTIVE", "ACTIVE", "DATE_START", "DATE_END", "CHANNEL.VOTE_SINGLE",
"CHANNEL.ACTIVE", "ACTIVE", "DATE_START", "DATE_END", "CHANNEL.VOTE_SINGLE"])),
(new Reference("CHANNEL", ChannelTable::class, Join::on("this.CHANNEL_ID", "ref.ID"))),
(new Reference("QUESTION", QuestionTable::class, Join::on("this.ID", "ref.VOTE_ID"))),
(new Reference("USER", BitrixMainUserTable::class, Join::on("this.AUTHOR_ID", "ref.ID"))),
);
}