• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/component/userprofile/form.php
  • Класс: BitrixIntranetComponentUserProfileForm
  • Вызов: Form::getFieldInfo
public function getFieldInfo($user, $availableFields = [], $componentParams = [])
{
	global $USER;

	$isAdminRights = (
		Loader::includeModule("bitrix24") && CBitrix24::IsPortalAdmin($USER->GetID())
		|| $USER->IsAdmin()
	)
		? true : false;

	$isExtranetUser = empty($user["UF_DEPARTMENT"]) ? true : false;

	$departmentList = array();
	if (Loader::includeModule("iblock"))
	{
		$departments = CIBlockSection::GetTreeList(array(
			"IBLOCK_ID"=>intval(COption::GetOptionInt('intranet', 'iblock_structure', false)),
		));
		while($department = $departments->Fetch())
		{
			$departmentList[] = array(
				'NAME' => /*str_repeat(" . ", $department["DEPTH_LEVEL"]).*/$department["NAME"],
				'VALUE' => $department["ID"]
			);
		}
	}

	$personalCountryItems = array(
		array(
			"NAME" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_EMPTY"),
			"VALUE" => ""
		)
	);
	$countryList = GetCountryArray();
	foreach ($countryList["reference_id"] as $key => $id)
	{
		$personalCountryItems[] = array(
			"NAME" => $countryList["reference"][$key],
			"VALUE" => $id
		);
	}

	$culture = BitrixMainContext::getCurrent()->getCulture();
	$personalBirthdayFormat = $culture->getLongDateFormat();
	$dateTimeFormat = $culture->getLongDateFormat().' '.$culture->getShortTimeFormat();

	if (ModuleManager::isModuleInstalled('bitrix24'))
	{
		if (BitrixMainConfigOption::get("intranet", "show_year_for_female", "N") === "N")
		{
			$personalBirthdayFormat = $culture->getDayMonthFormat();
		}
	}
	elseif (isset($componentParams['SHOW_YEAR']))
	{
		if (
			$componentParams['SHOW_YEAR'] === 'N'
			|| (
				$componentParams['SHOW_YEAR'] === 'M'
				&& $user["PERSONAL_GENDER"] !== "M"
			)
		)
		{
			$personalBirthdayFormat = $culture->getDayMonthFormat();
		}
	}

	$fields = array(
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_NAME"),
			"name" => "NAME",
			"type" => "text",
			"editable" => true,
			"showAlways" => true
		),
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_LAST_NAME"),
			"name" => "LAST_NAME",
			"type" => "text",
			"editable" => true,
			"showAlways" => true
		),
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_SECOND_NAME"),
			"name" => "SECOND_NAME",
			"type" => "text",
			"editable" => true,
			"showAlways" => true
		),
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_EMAIL"),
			"name" => "EMAIL",
			"type" => "link",
			"data" => array(
				"link_template" => "mailto:#LINK#"
			),
			"editable" => true
		),
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_WORK_POSITION"),
			"name" => "WORK_POSITION",
			"type" => "text",
			"editable" => true
		),
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_BIRTHDAY"),
			"name" => "PERSONAL_BIRTHDAY",
			"type" => "datetime",
			"editable" => true,
			"data" =>  array(
				"enableTime" => false,
				"dateViewFormat" => $personalBirthdayFormat
			)
		),
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_GENDER"),
			"name" => "PERSONAL_GENDER",
			"type" => "list",
			'data' => array(
				'items'=> array(
					array("NAME" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_EMPTY"), "VALUE" => ""),
					array('NAME' => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_GENDER_MALE"), 'VALUE' => "M"),
					array('NAME' => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_GENDER_FEMALE"), 'VALUE' => "F"),
				),
				"class" => "ui-ctl-w50"
			),
			"editable" => true
		),
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_WWW"),
			"name" => "PERSONAL_WWW",
			"type" => "link",
			"data" => array(
				"target" => "_blank"
			),
			"editable" => true
		),

		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_MOBILE"),
			"name" => "PERSONAL_MOBILE",
			"type" => "phone",
			"editable" => true,
		),
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_WORK_PHONE"),
			"name" => "WORK_PHONE",
			"type" => "text",
			"editable" => true
		),
		/*
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_UF_PHONE_INNER"),
			"name" => "UF_PHONE_INNER",
			"type" => "text",
			"editable" => true
		),
		*/
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_CITY"),
			"name" => "PERSONAL_CITY",
			"type" => "text",
			"editable" => true
		),
		/*
		array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_UF_SKYPE"),
			"name" => "UF_SKYPE",
			"type" => "link",
			"data" => array(
				"link_template" => "callto:#LINK#"
			),
			"editable" => true
		),
		*/
	);

	if(CTimeZone::Enabled())
	{
		$timeZoneItems = array();

		$timeZoneList = CTimeZone::GetZones();
		foreach ($timeZoneList as $value => $name)
		{
			$timeZoneItems[] = array(
				"NAME" => $name,
				"VALUE" => $value
			);
		}

		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_TIME_ZONE"),
			"name" => "TIME_ZONE",
			"type" => "timezone",
			'data' => array(
				'auto_timezone_items'=>  array(
					array('NAME' => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_AUTO_TIME_ZONE_DEF"), 'VALUE' => ""),
					array('NAME' => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_AUTO_TIME_ZONE_YES"), 'VALUE' => "Y"),
					array('NAME' => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_AUTO_TIME_ZONE_NO"), 'VALUE' => "N"),
				),
				'timezone_items'=> $timeZoneItems
			),
			"visibilityPolicy" => "edit",
			"editable" => true
		);
	}

	$languages = MainLocalizationLanguageTable::getList([
		'select' => ['VALUE' => 'ID', 'NAME'],
		'filter'=> ['ACTIVE'=>'Y'],
		'order'=> ['SORT'=>'ASC'],
	])->fetchAll();
	if (count($languages) > 1)
	{
		$fields[] = array(
			'title' => Loc::getMessage('INTRANET_USER_PROFILE_FIELD_LANGUAGE_ID'),
			'name' => 'LANGUAGE_ID',
			'type' => 'list',
			'data' => array(
				'items'=> $languages,
				'class' => 'ui-ctl-w50'
			),
			'editable' => true
		);
	}


	if (!$isExtranetUser)
	{
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_UF_DEPARTMENT"),
			"name" => "UF_DEPARTMENT",
			"type" => "multilist",
			'data' => array(
				'items'=> $departmentList,
				'class' => "ui-ctl-lg"
			),
			"editable" => $isAdminRights ? true : false
		);
	}

	$fields[] = array(
		"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_DATE_REGISTER"),
		"name" => "DATE_REGISTER",
		"type" => "datetime",
		"editable" => false,
		"data" =>  array(
			"enableTime" => true,
			"dateViewFormat" => $dateTimeFormat
		)
	);

	$fields[] = array(
		"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_LAST_ACTIVITY_DATE"),
		"name" => "LAST_ACTIVITY_DATE",
		"type" => "datetime",
		"editable" => false,
		"data" =>  array(
			"enableTime" => true,
			"dateViewFormat" => $dateTimeFormat
		)
	);

	if (!ModuleManager::isModuleInstalled("bitrix24"))
	{
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_LOGIN"),
			"name" => "LOGIN",
			"type" => "text",
			"editable" => true,
			"visibilityPolicy" => "edit",
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_COUNTRY"),
			"name" => "PERSONAL_COUNTRY",
			"type" => "list",
			"editable" => true,
			'data' => array(
				'items'=> $personalCountryItems,
				"class" => "ui-ctl-w50"
			),
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_FAX"),
			"name" => "PERSONAL_FAX",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_MAILBOX"),
			"name" => "PERSONAL_MAILBOX",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_PHONE"),
			"name" => "PERSONAL_PHONE",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_STATE"),
			"name" => "PERSONAL_STATE",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_STREET"),
			"name" => "PERSONAL_STREET",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_ZIP"),
			"name" => "PERSONAL_ZIP",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_PERSONAL_PROFESSION"),
			"name" => "PERSONAL_PROFESSION",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_WORK_CITY"),
			"name" => "WORK_CITY",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_WORK_COUNTRY"),
			"name" => "WORK_COUNTRY",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_WORK_COMPANY"),
			"name" => "WORK_COMPANY",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_WORK_DEPARTMENT"),
			"name" => "WORK_DEPARTMENT",
			"type" => "text",
			"editable" => true
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_WORK_NOTES"),
			"name" => "WORK_NOTES",
			"type" => "text",
			"editable" => true,
			"data" => [
				"lineCount" => 3
			]
		);
		$fields[] = array(
			"title" => Loc::getMessage("INTRANET_USER_PROFILE_FIELD_WORK_PROFILE"),
			"name" => "WORK_PROFILE",
			"type" => "text",
			"editable" => true
		);
	}

	$result = array_merge($fields, array_values($this->getUserFieldInfos()));

	if (
		!empty($availableFields)
		&& is_array($availableFields)
	)
	{
		foreach ($result as $key => $field)
		{
			if (
				isset($field['name'])
				&& !in_array($field['name'], [ 'TIME_ZONE', 'UF_DEPARTMENT' ])
				&& !in_array($field['name'], $availableFields)
			)
			{
				unset($result[$key]);
			}
		}
		$result = array_values($result);
	}

	return $result;
}