• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/component/userprofile.php
  • Класс: BitrixIntranetComponentUserProfile
  • Вызов: UserProfile::saveAction
public function saveAction(array $data)
{
	global $USER, $USER_FIELD_MANAGER;

	if (empty($data))
	{
		$this->errorCollection[] = new Error(Loc::getMessage('INTRANET_USER_PROFILE_NOTHING_TO_SAVE'));
		return null;
	}

	$this->arResult['Permissions'] = $this->getPermissions();
	if (!$this->arResult['Permissions']['edit'])
	{
		$this->errorCollection[] = new Error(Loc::getMessage('INTRANET_USER_PROFILE_ACCESS_DENIED'));
		return null;
	}

	if (isset($data["UF_DEPARTMENT"]))
	{
		if (
			empty($data["UF_DEPARTMENT"][0])
			|| !$this->isCurrentUserAdmin()
		)
		{
			unset($data["UF_DEPARTMENT"]);
		}
	}



	$fields = [
		'NAME', 'LAST_NAME', 'SECOND_NAME', 'PERSONAL_GENDER', 'PERSONAL_BIRTHDAY',
		'EMAIL', 'PERSONAL_MOBILE', 'PERSONAL_WWW',  'PERSONAL_COUNTRY', 'PERSONAL_CITY', 'PERSONAL_STATE',
		'WORK_PHONE', 'WORK_POSITION', 'AUTO_TIME_ZONE', 'TIME_ZONE',
		'LOGIN', 'PASSWORD', 'CONFIRM_PASSWORD',
		'PERSONAL_FAX',  'PERSONAL_MAILBOX', 'PERSONAL_PHONE', 'PERSONAL_STATE', 'PERSONAL_STREET', 'PERSONAL_ZIP',
		'WORK_CITY', 'WORK_COUNTRY', 'WORK_COMPANY', 'WORK_DEPARTMENT',
		'PERSONAL_PROFESSION', 'WORK_NOTES', 'WORK_PROFILE', 'LANGUAGE_ID',
	];

	$newFields = [];
	foreach ($fields as $key)
	{
		if ($key === 'PASSWORD' && isset($data['PASSWORD']) && $data['PASSWORD'] == '')
		{
			unset($data['PASSWORD']);
			unset($data['CONFIRM_PASSWORD']);
		}

		if (isset($data[$key]))
		{
			if (in_array($key, [ 'NAME', 'LAST_NAME', 'SECOND_NAME' ]))
			{
				$data[$key] = trim($data[$key]);
			}

			$newFields[$key] = $data[$key];
		}
	}

	$ufReserved = $this->getFormInstance()->getReservedUfFields();
	foreach ($data as $fieldName => $fieldValue)
	{
		if (in_array($fieldName, $ufReserved))
		{
			unset($data[$fieldName]);
		}
	}
	$USER_FIELD_MANAGER->EditFormAddFields('USER', $newFields, [ 'FORM' => $data ]);
	if (!$USER->Update($this->arParams['ID'], $newFields))
	{
		$this->errorCollection[] = new Error($USER->LAST_ERROR);
		return null;
	}

	if (
		isset($newFields['UF_DEPARTMENT']) &&
		is_array($newFields['UF_DEPARTMENT']) &&
		(int)$this->arParams['ID'] > 0
	)
	{
		$iblockID = COption::GetOptionInt("intranet", "iblock_structure");
		$rsDepartments = CIBlockSection::GetList(
			[],
			[
				'UF_HEAD' => (int)$this->arParams['ID'],
				'IBLOCK_ID' => $iblockID],
			false,
			[
				'UF_HEAD',
				'ID',
				'IBLOCK_ID'
			]
		);
		while ($arDepartment = $rsDepartments->Fetch())
		{
			if (in_array($arDepartment['ID'], $newFields['UF_DEPARTMENT']))
			{
				continue;
			}
			$depFields = [
				"UF_HEAD" => false
			];
			$section = new CIBlockSection;
			$section->Update($arDepartment['ID'], $depFields);
		}
	}

	if (defined('BX_COMP_MANAGED_CACHE'))
	{
		global $CACHE_MANAGER;
		$CACHE_MANAGER->ClearByTag('USER_CARD_'.(int)($this->arParams['ID'] / TAGGED_user_card_size));
	}

	if (Loader::includeModule('intranet'))
	{
		BitrixIntranetCompositeCacheProvider::deleteUserCache();
	}

	$this->arResult['User'] = $this->getUserData();
	return [
		'ENTITY_DATA' => $this->getFormInstance()->getData($this->arResult),
		'SUCCESS' => 'Y'
	];
}