• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/user.php
  • Класс: BitrixMainUserTable
  • Вызов: UserTable::getMap
static function getMap()
{
	$connection = Application::getConnection();
	$helper = $connection->getSqlHelper();

	return array(
		(new IntegerField('ID'))
			->configurePrimary()
			->configureAutocomplete(),

		new StringField('LOGIN'),

		(new StringField('PASSWORD'))
			->configurePrivate(),

		new StringField('EMAIL'),

		(new BooleanField('ACTIVE'))
			->configureValues('N','Y'),

		(new BooleanField('BLOCKED'))
			->configureValues('N','Y'),

		new DatetimeField('DATE_REGISTER'),

		(new ExpressionField(
			'DATE_REG_SHORT',
			$helper->getDatetimeToDateFunction('%s'),
			'DATE_REGISTER')
		)->configureValueType(DatetimeField::class),


		new DatetimeField('LAST_LOGIN'),

		(new ExpressionField(
			'LAST_LOGIN_SHORT',
			$helper->getDatetimeToDateFunction('%s'),
			'LAST_LOGIN')
		)->configureValueType(DatetimeField::class),

		new DatetimeField('LAST_ACTIVITY_DATE'),

		new DatetimeField('TIMESTAMP_X'),

		new StringField('NAME'),
		new StringField('SECOND_NAME'),
		new StringField('LAST_NAME'),
		new StringField('TITLE'),
		new StringField('EXTERNAL_AUTH_ID'),
		new StringField('XML_ID'),
		new StringField('BX_USER_ID'),
		new StringField('CONFIRM_CODE'),
		new StringField('LID'),
		(new StringField('LANGUAGE_ID'))
			->addValidator(new ORMFieldsValidatorsRegExpValidator('/^[a-z0-9]{2}$/')),
		new StringField('TIME_ZONE'),
		new IntegerField('TIME_ZONE_OFFSET'),
		new StringField('PERSONAL_PROFESSION'),
		new StringField('PERSONAL_PHONE'),
		new StringField('PERSONAL_MOBILE'),
		new StringField('PERSONAL_WWW'),
		new StringField('PERSONAL_ICQ'),
		new StringField('PERSONAL_FAX'),
		new StringField('PERSONAL_PAGER'),
		new TextField('PERSONAL_STREET'),
		new StringField('PERSONAL_MAILBOX'),
		new StringField('PERSONAL_CITY'),
		new StringField('PERSONAL_STATE'),
		new StringField('PERSONAL_ZIP'),
		new StringField('PERSONAL_COUNTRY'),
		new DateField('PERSONAL_BIRTHDAY'),
		new StringField('PERSONAL_GENDER'),
		new IntegerField('PERSONAL_PHOTO'),
		new TextField('PERSONAL_NOTES'),
		new StringField('WORK_COMPANY'),
		new StringField('WORK_DEPARTMENT'),
		new StringField('WORK_PHONE'),
		new StringField('WORK_POSITION'),
		new StringField('WORK_WWW'),
		new StringField('WORK_FAX'),
		new StringField('WORK_PAGER'),
		new TextField('WORK_STREET'),
		new StringField('WORK_MAILBOX'),
		new StringField('WORK_CITY'),
		new StringField('WORK_STATE'),
		new StringField('WORK_ZIP'),
		new StringField('WORK_COUNTRY'),
		new TextField('WORK_PROFILE'),
		new IntegerField('WORK_LOGO'),
		new TextField('WORK_NOTES'),
		new TextField('ADMIN_NOTES'),

		new ExpressionField(
			'SHORT_NAME',
			$helper->getConcatFunction(
				"%s",
				"' '",
				"UPPER(" . $helper->getSubstrFunction("%s", 1, 1) . ")", "'.'"
			),
			['LAST_NAME', 'NAME']
		),

		(new ExpressionField(
			'IS_ONLINE',
			'CASE WHEN %s > '
				. $helper->addSecondsToDateTime('(-' . self::getSecondsForLimitOnline() . ')')
				. ' THEN 'Y' ELSE 'N' END',
			'LAST_ACTIVITY_DATE',
			['values' => ['N', 'Y']]
		))->configureValueType(BooleanField::class),

		(new ExpressionField(
			'IS_REAL_USER',
			'CASE WHEN %s IN (''
				. join('', '', static::getExternalUserTypes())
				. '') THEN 'N' ELSE 'Y' END',
			'EXTERNAL_AUTH_ID',
			['values' => ['N', 'Y']]
		))->configureValueType(BooleanField::class),

		(new Reference(
			'INDEX',
			UserIndexTable::class,
			Join::on('this.ID', 'ref.USER_ID')
		))->configureJoinType(Join::TYPE_INNER),

		(new Reference(
			'COUNTER',
			UserCounterTable::class,
			Join::on('this.ID', 'ref.USER_ID')->where('ref.CODE', 'tasks_effective')
		)),
		(new Reference(
			'PHONE_AUTH',
			UserPhoneAuthTable::class,
			Join::on('this.ID', 'ref.USER_ID')
		)),
		(new OneToMany('GROUPS', UserGroupTable::class, 'USER'))
			->configureJoinType(Join::TYPE_INNER),

		(new Reference(
			'ACTIVE_LANGUAGE',
			BitrixMainLocalizationLanguageTable::class,
			Join::on('this.LANGUAGE_ID', 'ref.LID')->where('ref.ACTIVE', 'Y')
		)),
		(new ExpressionField(
			'NOTIFICATION_LANGUAGE_ID',
				'CASE WHEN (%s IS NOT NULL AND %s = %s) THEN %s ELSE %s END',
			['LANGUAGE_ID', 'LANGUAGE_ID', 'ACTIVE_LANGUAGE.LID', 'LANGUAGE_ID',
				function() {
					return new SqlExpression("'".(($site = CSite::GetList('', '', array('DEF' => 'Y', 'ACTIVE' => 'Y'))->fetch())
						? $site['LANGUAGE_ID'] : LANGUAGE_ID)."'");
				},
			],
		))->configureValueType(StringField::class),
	);
}