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