Bitrix-D7  20.0.0
Класс StatusBase
Граф наследования:StatusBase:
DeliveryStatus OrderStatus

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

static getList (array $parameters=array())
 
static canGroupDoOperations ($groupId, $fromStatus, array $operations)
 
static getAllowedUserStatuses ($userId, $fromStatus)
 Get statuses that user can switch to. Подробнее...
 
static getAllStatuses ()
 Get all statuses for current class type. Подробнее...
 
static getAllStatusesNames ($lang=null)
 Get all statuses names for current class type. Подробнее...
 
static getStatusesUserCanDoOperations ($userId, array $operations)
 Get statuses user can do operations within. Подробнее...
 
static getStatusesGroupCanDoOperations ($groupId, array $operations)
 
static getInitialStatus ()
 
static getFinalStatus ()
 
static install (array $data)
 

Поля данных

const TYPE = ''
 

Защищенные статические члены

static getUserGroups ($userId)
 
static getAllowedGroupStatuses ($groupId, $fromStatus)
 

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

См. определение в файле statusbase.php строка 18

Методы

◆ canGroupDoOperations()

static canGroupDoOperations (   $groupId,
  $fromStatus,
array  $operations 
)
static
Аргументы
$groupId
$fromStatus
array$operations
Возвращает
bool
Исключения
Main

См. определение в файле statusbase.php строка 98

99  {
100  if (!$operations)
101  {
102  throw new SystemException('provide at least one operation', 0, __FILE__, __LINE__);
103  }
104 
105  if (!is_array($groupId))
106  {
107  $groupId = array($groupId);
108  }
109 
110  if (in_array('1', $groupId, true) || \CMain::GetUserRight('sale', $groupId) >= 'W') // Admin
111  {
112  return true;
113  }
114 
115  $operations = static::convertNamesToOperations($operations);
116 
117  $result = static::getList(array(
118  'select' => array(
119  'NAME' => 'Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.TASK.Bitrix\Main\TaskOperation:TASK.OPERATION.NAME',
120  ),
121  'filter' => array(
122  '=ID' => $fromStatus,
123  '=Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.GROUP_ID' => $groupId,
124  '=Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.TASK.Bitrix\Main\TaskOperation:TASK.OPERATION.NAME' => $operations,
125  ),
126  ));
127 
128  while ($row = $result->fetch())
129  {
130  if (($key = array_search($row['NAME'], $operations)) !== false)
131  {
132  unset($operations[$key]);
133  }
134  }
135 
136  return !$operations;
137  }

◆ getAllowedGroupStatuses()

static getAllowedGroupStatuses (   $groupId,
  $fromStatus 
)
staticprotected
Аргументы
$groupId
$fromStatus
Возвращает
array
Исключения
Main

См. определение в файле statusbase.php строка 160

161  {
162  static $cacheAllowStatuses = array();
163 
164  if (! is_array($groupId))
165  $groupId = array($groupId);
166 
167  $cacheKey = md5($groupId."_".(is_array($fromStatus) ? join('|', $fromStatus) : $fromStatus));
168 
169  if (in_array('1', $groupId, true) || \CMain::GetUserRight('sale', $groupId) >= 'W') // Admin
170  {
171  if (!array_key_exists($cacheKey, $cacheAllowStatuses))
172  {
173  $result = static::getList(array(
174  'select' => array(
175  'ID',
176  'NAME' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME'
177  ),
178  'filter' => array(
179  '=TYPE' => static::TYPE,
180  '=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID' => LANGUAGE_ID),
181  'order' => array(
182  'SORT'
183  ),
184  ));
185 
186  while ($row = $result->fetch())
187  {
188  $cacheAllowStatuses[$cacheKey][$row['ID']] = $row['NAME'];
189  }
190  }
191  }
192  else
193  {
194  if (!array_key_exists($cacheKey, $cacheAllowStatuses))
195  {
196  $cacheAllowStatuses[$cacheKey] = array();
197 
198  $dbRes = static::getList(array( // check if group can change from status
199  'select' => array('ID'),
200  'filter' => array(
201  '=ID' => $fromStatus,
202  '=TYPE' => static::TYPE,
203  '=Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.GROUP_ID' => $groupId,
204  '=Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.TASK.Bitrix\Main\TaskOperation:TASK.OPERATION.NAME' => 'sale_status_from',
205  ),
206  'limit' => 1,
207  ));
208 
209  if ($dbRes->fetch())
210  {
211  $result = static::getList(array(
212  'select' => array('ID', 'NAME' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME'),
213  'filter' => array(
214  '=TYPE' => static::TYPE,
215  '=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID' => LANGUAGE_ID,
216  '=Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.GROUP_ID' => $groupId,
217  '=Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.TASK.Bitrix\Main\TaskOperation:TASK.OPERATION.NAME' => 'sale_status_to',
218  ),
219  'order' => array('SORT'),
220  ));
221 
222  while ($row = $result->fetch())
223  {
224  $cacheAllowStatuses[$cacheKey][$row['ID']] = $row['NAME'];
225  }
226  }
227  }
228  }
229 
230  return $cacheAllowStatuses[$cacheKey];
231  }

◆ getAllowedUserStatuses()

static getAllowedUserStatuses (   $userId,
  $fromStatus 
)
static

Get statuses that user can switch to.

Аргументы
$userId
$fromStatus
Возвращает
array
Исключения
Main

См. определение в файле statusbase.php строка 148

149  {
150  return static::getAllowedGroupStatuses(static::getUserGroups($userId), $fromStatus);
151  }

◆ getAllStatuses()

static getAllStatuses ( )
static

Get all statuses for current class type.

Возвращает
mixed
Исключения
Main

См. определение в файле statusbase.php строка 255

256  {
257  static $statusList = array();
258 
259  if (!$statusList)
260  {
261  $result = static::getList(array(
262  'select' => array('ID'),
263  'filter' => array('=TYPE' => static::TYPE),
264  'order' => array('SORT' => 'ASC')
265  ));
266 
267  while ($row = $result->fetch())
268  {
269  $statusList[$row['ID']] = $row['ID'];
270  }
271  }
272 
273  return $statusList;
274  }

◆ getAllStatusesNames()

static getAllStatusesNames (   $lang = null)
static

Get all statuses names for current class type.

Аргументы
null$lang
Возвращает
mixed
Исключения
Main

См. определение в файле statusbase.php строка 283

284  {
285  $parameters = array(
286  'select' => array("ID", "NAME" => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME'),
287  'filter' => array(
288  '=TYPE' => static::TYPE,
289  ),
290  'order' => array('SORT' => 'ASC')
291  );
292 
293  if ($lang !== null)
294  {
295  $parameters['filter']['=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID'] = $lang;
296  }
297  elseif (defined("LANGUAGE_ID"))
298  {
299  $parameters['filter']['=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID'] = LANGUAGE_ID;
300  }
301 
302  static $allStatusesNames = array();
303 
304  if (!$allStatusesNames)
305  {
306  $result = static::getList($parameters);
307  while ($row = $result->fetch())
308  {
309  $allStatusesNames[$row['ID']] = $row['NAME'];
310  }
311  }
312 
313  return $allStatusesNames;
314  }

◆ getFinalStatus()

static getFinalStatus ( )
static
Исключения
Main

Переопределяется в OrderStatus и DeliveryStatus.

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

418  {
419  throw new Main\NotImplementedException();
420  }

◆ getInitialStatus()

static getInitialStatus ( )
static
Исключения
Main

Переопределяется в OrderStatus и DeliveryStatus.

См. определение в файле statusbase.php строка 409

410  {
411  throw new Main\NotImplementedException();
412  }

◆ getList()

static getList ( array  $parameters = array())
static
Аргументы
array$parameters
Возвращает
Main\DB\Result
Исключения
Main

См. определение в файле statusbase.php строка 29

30  {
31  if (static::TYPE !== '')
32  {
33  if (!isset($parameters['filter']))
34  {
35  $parameters['filter'] = ['=TYPE' => static::TYPE];
36  }
37  else
38  {
39  $parameters['filter'] = [
40  '=TYPE' => static::TYPE,
41  $parameters['filter']
42  ];
43  }
44  }
45 
46  return StatusTable::getList($parameters);
47  }

◆ getStatusesGroupCanDoOperations()

static getStatusesGroupCanDoOperations (   $groupId,
array  $operations 
)
static
Аргументы
$groupId
array$operations
Возвращает
array|mixed
Исключения
Main

См. определение в файле statusbase.php строка 336

337  {
338  static $cacheStatuses = array();
339 
340  if (!is_array($groupId))
341  $groupId = array($groupId);
342 
343  $cacheHash = md5(static::TYPE."|".join($groupId, '_')."|".join($operations, '_'));
344 
345  if (!empty($cacheStatuses[$cacheHash]))
346  {
347  return $cacheStatuses[$cacheHash];
348  }
349 
350  if (in_array('1', $groupId, true) || \CMain::GetUserRight('sale', $groupId) >= 'W') // Admin
351  {
352  $statuses = static::getAllStatuses();
353  }
354  else
355  {
356  $statuses = static::getStatusesByGroupId($groupId, $operations);
357  }
358 
359  $cacheStatuses[$cacheHash] = $statuses;
360 
361  return $statuses;
362  }

◆ getStatusesUserCanDoOperations()

static getStatusesUserCanDoOperations (   $userId,
array  $operations 
)
static

Get statuses user can do operations within.

Аргументы
$userId
array$operations
Возвращает
array|mixed
Исключения
Main

См. определение в файле statusbase.php строка 325

326  {
327  return static::getStatusesGroupCanDoOperations(static::getUserGroups($userId), $operations);
328  }

◆ getUserGroups()

static getUserGroups (   $userId)
staticprotected
Аргументы
$userId
Возвращает
array
Исключения

См. определение в файле statusbase.php строка 55

56  {
57  global $USER;
58 
59  if ($userId == $USER->GetID())
60  {
61  $groups = $USER->GetUserGroupArray();
62  }
63  else
64  {
65  static $cacheGroups;
66 
67  if (isset($cacheGroups[$userId]))
68  {
69  $groups = $cacheGroups[$userId];
70  }
71  else
72  {
73  // TODO: DATE_ACTIVE_FROM >=< DATE_ACTIVE_TO
74  $result = UserGroupTable::getList(array(
75  'select' => array('GROUP_ID'),
76  'filter' => array('USER_ID' => $userId)
77  ));
78 
79  $groups = array();
80  while ($row = $result->fetch())
81  $groups []= $row['GROUP_ID'];
82 
83  $cacheGroups[$userId] = $groups;
84  }
85  }
86 
87  return $groups;
88  }

◆ install()

static install ( array  $data)
static
Аргументы
array$data
Исключения
Main

См. определение в файле statusbase.php строка 428

429  {
430  if (! ($statusId = $data['ID']) || ! is_string($statusId))
431  {
432  throw new SystemException('invalid status ID', 0, __FILE__, __LINE__);
433  }
434 
435  if ($languages = $data['LANG'])
436  {
437  unset($data['LANG']);
438 
439  if (! is_array($languages))
440  throw new SystemException('invalid status LANG', 0, __FILE__, __LINE__);
441  }
442 
443  $data['TYPE'] = static::TYPE;
444 
445  // install status if it is not installed
446 
447  if (! StatusTable::getById($statusId)->fetch())
448  {
449  StatusTable::add($data);
450  }
451 
452  // install status languages if they are not installed
453 
454  if ($languages)
455  {
456  $installedLanguages = array();
457 
458  $result = StatusLangTable::getList(array(
459  'select' => array('LID'),
460  'filter' => array('=STATUS_ID' => $statusId),
461  ));
462 
463  while ($row = $result->fetch())
464  {
465  $installedLanguages[$row['LID']] = true;
466  }
467 
468  foreach ($languages as $language)
469  {
470  if (! is_array($language))
471  throw new SystemException('invalid status language', 0, __FILE__, __LINE__);
472 
473  if (! $installedLanguages[$language['LID']])
474  {
475  $language['STATUS_ID'] = $statusId;
476 
477  StatusLangTable::add($language);
478  }
479  }
480  }
481  }

Поля

◆ TYPE

const TYPE = ''

См. определение в файле statusbase.php строка 20


Объявления и описания членов класса находятся в файле:
Bitrix\Forum\Internals\getById
static getById(int $id)
Definition: forum/lib/internals/entityfabric.php:11
Bitrix\Sale\Internals\StatusTable\add
static add(array $data)
Definition: sale/lib/internals/status.php:109