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