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'
];
}