• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/userprofilehistory.php
  • Класс: BitrixMainUserProfileHistoryTable
  • Вызов: UserProfileHistoryTable::addHistory
static function addHistory($userId, $type, array $before = null, array $after = null)
{
	global $USER;

	$server = Context::getCurrent()->getServer();
	$request = Context::getCurrent()->getRequest();

	$url = preg_replace("/(&?sessid=[0-9a-z]+)/", "", $request->getDecodedUri());
	$remoteAddr = $server->get("REMOTE_ADDR");
	$userAgent = $server->get("HTTP_USER_AGENT");
	$updatedBy = (is_object($USER) && ($USER->GetID() > 0)? $USER->GetID() : null);

	$changedFields = array();
	if(is_array($before) && is_array($after))
	{
		//we shouldn't display some values
		static $hiddenFields = array("PASSWORD" => 1, "CHECKWORD" => 1, "CONFIRM_CODE" => 1);
		static $ignoredFields = array("TIMESTAMP_X" => 1);

		foreach($after as $field => $value)
		{
			if(isset($ignoredFields[$field]))
			{
				continue;
			}

			if($before[$field] <> $value)
			{
				$data = array(
					"before" => (isset($hiddenFields[$field])? "***" : $before[$field]),
					"after" => (isset($hiddenFields[$field])? "***" : $value)
				);

				$changedFields[] = array(
					"FIELD" => $field,
					"DATA" => $data,
				);
			}
		}
	}

	$result = null;

	if(!empty($changedFields) || $type <> self::TYPE_UPDATE)
	{
		$result = static::add(array(
			"USER_ID" => $userId,
			"EVENT_TYPE" => $type,
			"REMOTE_ADDR" => $remoteAddr,
			"USER_AGENT" => $userAgent,
			"REQUEST_URI" => $url,
			"UPDATED_BY_ID" => $updatedBy,
		));
	}

	if(!empty($changedFields) && $result->isSuccess())
	{
		foreach($changedFields as $value)
		{
			UserProfileRecordTable::add(array(
				"HISTORY_ID" => $result->getId(),
				"FIELD" => $value["FIELD"],
				"DATA" => $value["DATA"],
			));
		}
	}

	return $result;
}