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