- Модуль: vote
- Путь к файлу: ~/bitrix/modules/vote/lib/uf/voteusertype.php
- Класс: BitrixVoteUfVoteUserType
- Вызов: VoteUserType::onBeforeSave
static function onBeforeSave($userField, $value, $userId = false)
{
/* if (empty($value))
{
$alreadyExistsValues = $userField['VALUE'];
if (!is_array($alreadyExistsValues))
{
$alreadyExistsValues = array($userField['VALUE']);
}
Attach::detachByFilter(array('ID' => $alreadyExistsValues));
}*/
try
{
$userId = self::getOrCheckUserId($userId);
global ${$userField["FIELD_NAME"] . "_" . $value . "_DATA"};
$data = ${$userField["FIELD_NAME"] . "_" . $value . "_DATA"} ?: false;
$userFieldManager = Manager::getInstance($userField);
[$type, $realValue] = self::detectType($value);
if ($type == self::TYPE_SAVED_ATTACH && (!is_array($data) || empty($data)))
{
return $value;
}
if (!is_array($data) || empty($data))
return "";
/*@var BitrixVoteAttach $attach*/
try
{
if ($type == self::TYPE_SAVED_ATTACH)
{
$attach = $userFieldManager->loadFromAttachId($realValue);
if ($attach->getStorage()->getId() != $userField["SETTINGS"]["CHANNEL_ID"] &&
$userFieldManager->belongsToEntity($attach, $userField["ENTITY_ID"], $userField["ENTITY_VALUE_ID"])
)
{
$attach->delete();
$attach = $userFieldManager->loadEmptyObject();
unset($data["ID"]);
}
}
else
{
$attach = ($data["ID"] > 0 ? $userFieldManager->loadFromVoteId($data["ID"]) : $userFieldManager->loadEmptyObject());
}
}
catch (BitrixMainObjectNotFoundException $exception)
{
$attach = $userFieldManager->loadEmptyObject();
unset($data["ID"]);
}
$data["OPTIONS"] = !empty($data["OPTIONS"]) ? (is_array($data["OPTIONS"]) ? array_sum($data["OPTIONS"]) : (int) $data["OPTIONS"]) : 0;
$data["UNIQUE_TYPE"] = intval($userField["SETTINGS"]["UNIQUE"] & BitrixVoteVoteEventLimits::BY_USER_AUTH ? $userField["SETTINGS"]["UNIQUE"] | BitrixVoteVoteEventLimits::BY_USER_ID : $userField["SETTINGS"]["UNIQUE"]);
$interval = intval($userField["SETTINGS"]["UNIQUE_IP_DELAY"]["DELAY"]);
$interval = in_array($userField["SETTINGS"]["UNIQUE_IP_DELAY"]["DELAY_TYPE"], array("S", "M", "H")) ? "PT".$interval.$userField["SETTINGS"]["UNIQUE_IP_DELAY"]["DELAY_TYPE"] : "P".$interval."D";
$data["KEEP_IP_SEC"] = (new DateTime("@0"))->add(new DateInterval($interval))->getTimestamp();
$data["NOTIFY"] = $userField["SETTINGS"]["NOTIFY"];
$attach->save($data, $userId);
return $attach->getAttachId();
}
catch (Exception $e)
{
throw $e;
}
}