Bitrix-D7  20.5.0
Класс UserTable
Граф наследования:UserTable:

Открытые статические члены

static getTableName ()
 
static getUfId ()
 
static getMap ()
 
static getSecondsForLimitOnline ()
 
static getActiveUsersCount ()
 
static getUserGroupIds ($userId)
 
static getExternalUserTypes ()
 
static indexRecord ($id)
 
static indexRecordSelector ($id, array $record=[])
 
static deleteIndexRecord ($id)
 
static add (array $data)
 
static update ($primary, array $data)
 
static delete ($primary)
 
static onAfterAdd (Entity\Event $event)
 
static onAfterUpdate (Entity\Event $event)
 
static onAfterDelete (Entity\Event $event)
 
static postInitialize (\Bitrix\Main\ORM\Entity $entity)
 

Подробное описание

См. определение в файле main/lib/user.php строка 21

Методы

◆ add()

static add ( array  $data)
static

См. определение в файле main/lib/user.php строка 683

684  {
685  throw new NotImplementedException("Use CUser class.");
686  }

◆ delete()

static delete (   $primary)
static

См. определение в файле main/lib/user.php строка 693

694  {
695  throw new NotImplementedException("Use CUser class.");
696  }

◆ deleteIndexRecord()

static deleteIndexRecord (   $id)
static

См. определение в файле main/lib/user.php строка 534

◆ getActiveUsersCount()

static getActiveUsersCount ( )
static

См. определение в файле main/lib/user.php строка 284

285  {
286  if (ModuleManager::isModuleInstalled("intranet"))
287  {
288  $sql = "SELECT COUNT(U.ID) ".
289  "FROM b_user U ".
290  "WHERE U.ACTIVE = 'Y' ".
291  " AND U.LAST_LOGIN IS NOT NULL ".
292  " AND EXISTS(".
293  " SELECT 'x' ".
294  " FROM b_utm_user UF, b_user_field F ".
295  " WHERE F.ENTITY_ID = 'USER' ".
296  " AND F.FIELD_NAME = 'UF_DEPARTMENT' ".
297  " AND UF.FIELD_ID = F.ID ".
298  " AND UF.VALUE_ID = U.ID ".
299  " AND UF.VALUE_INT IS NOT NULL ".
300  " AND UF.VALUE_INT <> 0".
301  " )";
302  }
303  else
304  {
305  $sql = "SELECT COUNT(ID) ".
306  "FROM b_user ".
307  "WHERE ACTIVE = 'Y' ".
308  " AND LAST_LOGIN IS NOT NULL";
309  }
310 
311  $connection = Application::getConnection();
312  return $connection->queryScalar($sql);
313  }
static getConnection($name="")
Static method returns database connection for the specified name.
static isModuleInstalled($moduleName)

◆ getExternalUserTypes()

static getExternalUserTypes ( )
static

См. определение в файле main/lib/user.php строка 377

378  {
379  static $types = array("bot", "email", "__controller", "replica", "imconnector", "sale", "saleanonymous", "shop", "call");
380  return $types;
381  }

◆ getMap()

static getMap ( )
static

См. определение в файле main/lib/user.php строка 33

34  {
35  $connection = Application::getConnection();
36  $helper = $connection->getSqlHelper();
37 
38  return array(
39  'ID' => array(
40  'data_type' => 'integer',
41  'primary' => true,
42  'autocomplete' => true,
43  ),
44  'LOGIN' => array(
45  'data_type' => 'string'
46  ),
47  'PASSWORD' => array(
48  'data_type' => 'string'
49  ),
50  'EMAIL' => array(
51  'data_type' => 'string'
52  ),
53  'ACTIVE' => array(
54  'data_type' => 'boolean',
55  'values' => array('N','Y')
56  ),
57  'BLOCKED' => array(
58  'data_type' => 'boolean',
59  'values' => array('N','Y')
60  ),
61  'DATE_REGISTER' => array(
62  'data_type' => 'datetime'
63  ),
64  'DATE_REG_SHORT' => array(
65  'data_type' => 'datetime',
66  'expression' => array(
67  $helper->getDatetimeToDateFunction('%s'), 'DATE_REGISTER'
68  )
69  ),
70  'LAST_LOGIN' => array(
71  'data_type' => 'datetime'
72  ),
73  'LAST_LOGIN_SHORT' => array(
74  'data_type' => 'datetime',
75  'expression' => array(
76  $helper->getDatetimeToDateFunction('%s'), 'LAST_LOGIN'
77  )
78  ),
79  'LAST_ACTIVITY_DATE' => array(
80  'data_type' => 'datetime'
81  ),
82  'TIMESTAMP_X' => array(
83  'data_type' => 'datetime'
84  ),
85  'NAME' => array(
86  'data_type' => 'string'
87  ),
88  'SECOND_NAME' => array(
89  'data_type' => 'string'
90  ),
91  'LAST_NAME' => array(
92  'data_type' => 'string'
93  ),
94  'TITLE' => array(
95  'data_type' => 'string'
96  ),
97  'EXTERNAL_AUTH_ID' => array(
98  'data_type' => 'string'
99  ),
100  'XML_ID' => array(
101  'data_type' => 'string'
102  ),
103  'BX_USER_ID' => array(
104  'data_type' => 'string'
105  ),
106  'CONFIRM_CODE' => array(
107  'data_type' => 'string'
108  ),
109  'LID' => array(
110  'data_type' => 'string'
111  ),
112  'LANGUAGE_ID' => array(
113  'data_type' => 'string'
114  ),
115  'TIME_ZONE_OFFSET' => array(
116  'data_type' => 'integer'
117  ),
118  'PERSONAL_PROFESSION' => array(
119  'data_type' => 'string'
120  ),
121  'PERSONAL_PHONE' => array(
122  'data_type' => 'string'
123  ),
124  'PERSONAL_MOBILE' => array(
125  'data_type' => 'string'
126  ),
127  'PERSONAL_WWW' => array(
128  'data_type' => 'string'
129  ),
130  'PERSONAL_ICQ' => array(
131  'data_type' => 'string'
132  ),
133  'PERSONAL_FAX' => array(
134  'data_type' => 'string'
135  ),
136  'PERSONAL_PAGER' => array(
137  'data_type' => 'string'
138  ),
139  'PERSONAL_STREET' => array(
140  'data_type' => 'text'
141  ),
142  'PERSONAL_MAILBOX' => array(
143  'data_type' => 'string'
144  ),
145  'PERSONAL_CITY' => array(
146  'data_type' => 'string'
147  ),
148  'PERSONAL_STATE' => array(
149  'data_type' => 'string'
150  ),
151  'PERSONAL_ZIP' => array(
152  'data_type' => 'string'
153  ),
154  'PERSONAL_COUNTRY' => array(
155  'data_type' => 'string'
156  ),
157  'PERSONAL_BIRTHDAY' => array(
158  'data_type' => 'date'
159  ),
160  'PERSONAL_GENDER' => array(
161  'data_type' => 'string'
162  ),
163  'PERSONAL_PHOTO' => array(
164  'data_type' => 'integer'
165  ),
166  'PERSONAL_NOTES' => array(
167  'data_type' => 'text'
168  ),
169  'WORK_COMPANY' => array(
170  'data_type' => 'string'
171  ),
172  'WORK_DEPARTMENT' => array(
173  'data_type' => 'string'
174  ),
175  'WORK_PHONE' => array(
176  'data_type' => 'string'
177  ),
178  'WORK_POSITION' => array(
179  'data_type' => 'string'
180  ),
181  'WORK_WWW' => array(
182  'data_type' => 'string'
183  ),
184  'WORK_FAX' => array(
185  'data_type' => 'string'
186  ),
187  'WORK_PAGER' => array(
188  'data_type' => 'string'
189  ),
190  'WORK_STREET' => array(
191  'data_type' => 'text'
192  ),
193  'WORK_MAILBOX' => array(
194  'data_type' => 'string'
195  ),
196  'WORK_CITY' => array(
197  'data_type' => 'string'
198  ),
199  'WORK_STATE' => array(
200  'data_type' => 'string'
201  ),
202  'WORK_ZIP' => array(
203  'data_type' => 'string'
204  ),
205  'WORK_COUNTRY' => array(
206  'data_type' => 'string'
207  ),
208  'WORK_PROFILE' => array(
209  'data_type' => 'text'
210  ),
211  'WORK_LOGO' => array(
212  'data_type' => 'integer'
213  ),
214  'WORK_NOTES' => array(
215  'data_type' => 'text'
216  ),
217  'ADMIN_NOTES' => array(
218  'data_type' => 'text'
219  ),
220  'SHORT_NAME' => array(
221  'data_type' => 'string',
222  'expression' => array(
223  $helper->getConcatFunction("%s","' '", "UPPER(".$helper->getSubstrFunction("%s", 1, 1).")", "'.'"),
224  'LAST_NAME', 'NAME'
225  )
226  ),
227  'IS_ONLINE' => array(
228  'data_type' => 'boolean',
229  'values' => array('N', 'Y'),
230  'expression' => array(
231  'CASE WHEN %s > '.$helper->addSecondsToDateTime('(-'.self::getSecondsForLimitOnline().')').' THEN \'Y\' ELSE \'N\' END',
232  'LAST_ACTIVITY_DATE',
233  )
234  ),
235  'IS_REAL_USER' => array(
236  'data_type' => 'boolean',
237  'values' => array('N', 'Y'),
238  'expression' => array(
239  'CASE WHEN %s IN ("'.join('", "', static::getExternalUserTypes()).'") THEN \'N\' ELSE \'Y\' END',
240  'EXTERNAL_AUTH_ID',
241  )
242  ),
243  'INDEX' => array(
244  'data_type' => 'Bitrix\Main\UserIndex',
245  'reference' => array('=this.ID' => 'ref.USER_ID'),
246  'join_type' => 'INNER',
247  ),
248  'INDEX_SELECTOR' => array(
249  'data_type' => 'Bitrix\Main\UserIndexSelector',
250  'reference' => array('=this.ID' => 'ref.USER_ID'),
251  'join_type' => 'INNER',
252  ),
253  (new Entity\ReferenceField(
254  'COUNTER',
255  \Bitrix\Main\UserCounterTable::class,
256  Entity\Query\Join::on('this.ID', 'ref.USER_ID')->where('ref.CODE', 'tasks_effective')
257  )),
258  (new Reference(
259  'PHONE_AUTH',
260  UserPhoneAuthTable::class,
261  Join::on('this.ID', 'ref.USER_ID')
262  )),
263  (new OneToMany('GROUPS', UserGroupTable::class, 'USER'))
264  ->configureJoinType(Entity\Query\Join::TYPE_INNER),
265  );
266  }
static on()
Short alias to init filter with whereColumn.
Definition: join.php:34

◆ getSecondsForLimitOnline()

static getSecondsForLimitOnline ( )
static

См. определение в файле main/lib/user.php строка 268

269  {
270  $seconds = intval(ini_get("session.gc_maxlifetime"));
271 
272  if ($seconds == 0)
273  {
274  $seconds = 1440;
275  }
276  else if ($seconds < 120)
277  {
278  $seconds = 120;
279  }
280 
281  return intval($seconds);
282  }

◆ getTableName()

static getTableName ( )
static

См. определение в файле main/lib/user.php строка 23

24  {
25  return 'b_user';
26  }

◆ getUfId()

static getUfId ( )
static

См. определение в файле main/lib/user.php строка 28

29  {
30  return 'USER';
31  }

◆ getUserGroupIds()

static getUserGroupIds (   $userId)
static

См. определение в файле main/lib/user.php строка 315

316  {
317  $groups = array();
318 
319  // anonymous groups
320  $result = GroupTable::getList(array(
321  'select' => array('ID'),
322  'filter' => array(
323  '=ANONYMOUS' => 'Y',
324  '=ACTIVE' => 'Y'
325  )
326  ));
327 
328  while ($row = $result->fetch())
329  {
330  $groups[] = $row['ID'];
331  }
332 
333  if(!in_array(2, $groups))
334  $groups[] = 2;
335 
336  if($userId > 0)
337  {
338  // private groups
339  $nowTimeExpression = new SqlExpression(
340  static::getEntity()->getConnection()->getSqlHelper()->getCurrentDateTimeFunction()
341  );
342 
343  $result = GroupTable::getList(array(
344  'select' => array('ID'),
345  'filter' => array(
346  '=UserGroup:GROUP.USER_ID' => $userId,
347  '=ACTIVE' => 'Y',
348  array(
349  'LOGIC' => 'OR',
350  '=UserGroup:GROUP.DATE_ACTIVE_FROM' => null,
351  '<=UserGroup:GROUP.DATE_ACTIVE_FROM' => $nowTimeExpression,
352  ),
353  array(
354  'LOGIC' => 'OR',
355  '=UserGroup:GROUP.DATE_ACTIVE_TO' => null,
356  '>=UserGroup:GROUP.DATE_ACTIVE_TO' => $nowTimeExpression,
357  ),
358  array(
359  'LOGIC' => 'OR',
360  '!=ANONYMOUS' => 'Y',
361  '=ANONYMOUS' => null
362  )
363  )
364  ));
365 
366  while ($row = $result->fetch())
367  {
368  $groups[] = $row['ID'];
369  }
370  }
371 
372  sort($groups);
373 
374  return $groups;
375  }

◆ indexRecord()

static indexRecord (   $id)
static

См. определение в файле main/lib/user.php строка 417

418  {
419  $id = intval($id);
420  if($id == 0)
421  {
422  return false;
423  }
424 
425  $intranetInstalled = ModuleManager::isModuleInstalled('intranet');
426 
427  $select = [
428  'ID',
429  'NAME',
430  'SECOND_NAME',
431  'LAST_NAME',
432  'WORK_POSITION',
433  'PERSONAL_PROFESSION',
434  'PERSONAL_WWW',
435  'LOGIN',
436  'EMAIL',
437  'PERSONAL_MOBILE',
438  'PERSONAL_PHONE',
439  'PERSONAL_CITY',
440  'PERSONAL_STREET',
441  'PERSONAL_STATE',
442  'PERSONAL_COUNTRY',
443  'PERSONAL_ZIP',
444  'PERSONAL_MAILBOX',
445  'WORK_CITY',
446  'WORK_STREET',
447  'WORK_STATE',
448  'WORK_ZIP',
449  'WORK_COUNTRY',
450  'WORK_MAILBOX',
451  'WORK_PHONE',
452  'WORK_COMPANY'
453  ];
454 
455  if ($intranetInstalled)
456  {
457  $select[] = 'UF_DEPARTMENT';
458  }
459 
460  $userSelectorContentFields = self::getUserSelectorContentFields();
461 
462  $record = parent::getList(array(
463  'select' => array_unique(array_merge($select, $userSelectorContentFields)),
464  'filter' => array('=ID' => $id)
465  ))->fetch();
466 
467  if(!is_array($record))
468  {
469  return false;
470  }
471 
472  $record['UF_DEPARTMENT_NAMES'] = array();
473  if ($intranetInstalled)
474  {
475  $departmentNames = UserUtils::getDepartmentNames($record['UF_DEPARTMENT']);
476  foreach ($departmentNames as $departmentName)
477  {
478  $record['UF_DEPARTMENT_NAMES'][] = $departmentName['NAME'];
479  }
480  }
481 
482  $departmentName = isset($record['UF_DEPARTMENT_NAMES'][0])? $record['UF_DEPARTMENT_NAMES'][0]: '';
483  $searchDepartmentContent = implode(' ', $record['UF_DEPARTMENT_NAMES']);
484 
485  UserIndexTable::merge(array(
486  'USER_ID' => $id,
487  'NAME' => (string)$record['NAME'],
488  'SECOND_NAME' => (string)$record['SECOND_NAME'],
489  'LAST_NAME' => (string)$record['LAST_NAME'],
490  'WORK_POSITION' => (string)$record['WORK_POSITION'],
491  'UF_DEPARTMENT_NAME' => (string)$departmentName,
492  'SEARCH_USER_CONTENT' => self::generateSearchUserContent($record),
493  'SEARCH_ADMIN_CONTENT' => self::generateSearchAdminContent($record),
494  'SEARCH_DEPARTMENT_CONTENT' => MapBuilder::create()->addText($searchDepartmentContent)->build()
495  ));
496 
497  self::indexRecordSelector($id, $record);
498 
499  return true;
500  }
static create()
Creates instance of the StringBuilder.
Definition: mapbuilder.php:25
static merge(array $data)
Definition: userindex.php:79
static indexRecordSelector($id, array $record=[])
static getDepartmentNames($departmentIds)
Definition: userutils.php:283

◆ indexRecordSelector()

static indexRecordSelector (   $id,
array  $record = [] 
)
static

См. определение в файле main/lib/user.php строка 502

503  {
504  $id = intval($id);
505  if($id == 0)
506  {
507  return false;
508  }
509 
510  if (empty($record))
511  {
512  $select = array('ID', 'NAME', 'LAST_NAME');
513  $userSelectorContentFields = self::getUserSelectorContentFields();
514 
515  $record = parent::getList(array(
516  'select' => array_unique(array_merge($select, $userSelectorContentFields)),
517  'filter' => array('=ID' => $id)
518  ))->fetch();
519  }
520 
521  if(!is_array($record))
522  {
523  return false;
524  }
525 
527  'USER_ID' => $id,
528  'SEARCH_SELECTOR_CONTENT' => self::generateSearchSelectorContent($record),
529  ));
530 
531  return true;
532  }

◆ onAfterAdd()

static onAfterAdd ( Entity\Event  $event)
static

См. определение в файле main/lib/user.php строка 698

699  {
700  $id = $event->getParameter("id");
701  static::indexRecord($id);
702  return new Entity\EventResult();
703  }

◆ onAfterDelete()

static onAfterDelete ( Entity\Event  $event)
static

См. определение в файле main/lib/user.php строка 713

714  {
715  $primary = $event->getParameter("id");
716  $id = $primary["ID"];
717  static::deleteIndexRecord($id);
718  return new Entity\EventResult();
719  }

◆ onAfterUpdate()

static onAfterUpdate ( Entity\Event  $event)
static

См. определение в файле main/lib/user.php строка 705

706  {
707  $primary = $event->getParameter("id");
708  $id = $primary["ID"];
709  static::indexRecord($id);
710  return new Entity\EventResult();
711  }

◆ postInitialize()

static postInitialize ( \Bitrix\Main\ORM\Entity  $entity)
static

См. определение в файле main/lib/user.php строка 721

722  {
723  // add uts inner reference
724 
725  if ($entity->hasField('UTS_OBJECT'))
726  {
727  /** @var Reference $leftUtsRef */
728  $leftUtsRef = $entity->getField('UTS_OBJECT');
729 
730  $entity->addField((
731  new Reference(
732  'UTS_OBJECT_INNER', $leftUtsRef->getRefEntity(), $leftUtsRef->getReference()
733  ))
734  ->configureJoinType('inner')
735  );
736  }
737  }

◆ update()

static update (   $primary,
array  $data 
)
static

См. определение в файле main/lib/user.php строка 688

689  {
690  throw new NotImplementedException("Use CUser class.");
691  }

Объявления и описания членов класса находятся в файле: