1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
status.php
См. документацию.
1<?
2
14 Bitrix\Main\Entity\Result,
17
18Loc::loadMessages(__FILE__);
19
22{
23 public static function GetByID($statusId, $languageId = LANGUAGE_ID, $type = null)
24 {
25 $allowTypes = array(
28 );
29
30 $filter = array(
31 'select' => array(
32 'ID',
33 'SORT',
34 'NOTIFY',
35 'TYPE',
36 'LID' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.LID',
37 'NAME' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME',
38 'DESCRIPTION' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.DESCRIPTION'
39 ),
40 'filter' => array(
41 '=ID' => $statusId,
42 '=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID' => $languageId,
43 ),
44 'limit' => 1,
45 );
46
47 if ($type !== null && in_array($type, $allowTypes))
48 {
49 $filter['filter']['=TYPE'] = $type;
50 }
51
52 return StatusTable::getList($filter)->fetch();
53 }
54
55 public static function GetLangByID($statusId, $languageId = LANGUAGE_ID)
56 {
57 return StatusLangTable::getList(array(
58 'select' => array('*'),
59 'filter' => array('=STATUS_ID' => $statusId, '=LID' => $languageId),
60 'limit' => 1,
61 ))->fetch();
62 }
63
72 public static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
73 {
74 if (!is_array($arOrder) && !is_array($arFilter))
75 {
76 $arOrder = strval($arOrder);
77 $arFilter = strval($arFilter);
78 if ('' != $arOrder && '' != $arFilter)
79 $arOrder = array($arOrder => $arFilter);
80 else
81 $arOrder = array();
82
83 $arFilter = array();
84 $arFilter["LID"] = LANGUAGE_ID;
85 if ($arGroupBy)
86 {
87 $arGroupBy = strval($arGroupBy);
88 if ('' != $arGroupBy)
89 $arFilter["LID"] = $arGroupBy;
90 }
91 $arGroupBy = false;
92
93 $arSelectFields = array("ID", "SORT", "LID", "NAME", "DESCRIPTION");
94 }
95
96 if (! in_array('TYPE', $arSelectFields))
97 $arFilter['TYPE'] = 'O';
98
99 $query = new Compatible\OrderQuery(StatusTable::getEntity());
100 $query->addAliases(array(
101 'LID' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.LID',
102 'NAME' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME',
103 'DESCRIPTION' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.DESCRIPTION',
104 'GROUP_ID' => 'Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.GROUP_ID',
105 ));
106
107 $taskIdName = 'Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.TASK_ID';
109
110 $query->prepare($arOrder, $arFilter, $arGroupBy, $arSelectFields);
111
112 if ($query->counted())
113 {
114 return $query->exec()->getSelectedRowsCount();
115 }
116 else
117 {
120 return $query->compatibleExec($result, $arNavStartParams);
121 }
122 }
123
124 /*
125 * For modern api see: Bitrix\Sale\OrderStatus and Bitrix\Sale\DeliveryStatus
126 */
127 public static function GetPermissionsList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
128 {
129 $query = new Compatible\OrderQuery(StatusGroupTaskTable::getEntity());
130
131 $taskIdName = 'TASK_ID';
133
134 $query->prepare($arOrder, $arFilter, $arGroupBy, $arSelectFields);
135
136 if ($query->counted())
137 {
138 return $query->exec()->getSelectedRowsCount();
139 }
140 else
141 {
143 return $query->compatibleExec($result, $arNavStartParams);
144 }
145 }
146
147 private static $statusFields, $langFields, $taskFields;
148
149 public static function CheckFields($ACTION, &$arFields, $statusId = '')
150 {
151 if ((is_set($arFields, "SORT") || $ACTION=="ADD") && intval($arFields["SORT"])<= 0)
152 $arFields["SORT"] = 100;
153
154 if ((is_set($arFields, "ID") || $ACTION=="ADD") && $arFields["ID"] == '')
155 return false;
156
157 if (is_set($arFields, "ID") && $statusId <> '' && $statusId!=$arFields["ID"])
158 return false;
159
160 if((is_set($arFields, "ID") && !preg_match("#[A-Za-z]#i", $arFields["ID"])) || ($statusId <> '' && !preg_match("#[A-Za-z]#i", $statusId)))
161 {
162 $GLOBALS["APPLICATION"]->ThrowException(Loc::getMessage("SKGS_ID_NOT_SYMBOL"), "ERROR_ID_NOT_SYMBOL");
163 return false;
164 }
165
166 $result = new Result;
167
168 if (! self::$statusFields)
169 {
170 self::$statusFields = StatusTable::getEntity()->getScalarFields();
171 self::$langFields = StatusLangTable::getEntity()->getScalarFields();
172 self::$taskFields = StatusGroupTaskTable::getEntity()->getScalarFields();
173 }
174
175 switch ($ACTION)
176 {
177 case 'ADD':
178
179 $statusId = $arFields['ID'];
180 StatusTable::checkFields($result, null, array_intersect_key($arFields, self::$statusFields));
181
182 break;
183
184 case 'UPDATE':
185
186 StatusTable::checkFields($result, $statusId, array_intersect_key(array_diff_key($arFields, array('ID'=>1)), self::$statusFields));
187
188 break;
189
190 default: throw new SystemException('Invalid action: '.$ACTION, 0, __FILE__, __LINE__);
191 }
192
193 if (isset($arFields['LANG']) && is_array($arFields['LANG']) && ! empty($arFields['LANG']))
194 {
195 $availableLanguages = array_map('current', LanguageTable::getList(array(
196 'select' => array('LID'),
197 'filter' => array('=ACTIVE' => 'Y')
198 ))->fetchAll());
199
200 foreach ($arFields['LANG'] as $data)
201 {
202 if ($data['NAME'] && in_array($data['LID'], $availableLanguages))
203 StatusLangTable::checkFields($result, null, array('STATUS_ID' => $statusId) + array_intersect_key($data, self::$langFields));
204 else
205 return false;
206 }
207 }
208
209 return $result->isSuccess();
210 }
211
212 private static function addLanguagesBy($statusId, array $rows)
213 {
214 foreach ($rows as $row)
215 StatusLangTable::add(array('STATUS_ID' => $statusId) + array_intersect_key($row, self::$langFields));
216 }
217
218 private static function addTasksBy($statusId, array $rows)
219 {
220 foreach ($rows as $row)
221 StatusGroupTaskTable::add(array(
222 'STATUS_ID' => $statusId,
225 ) + array_intersect_key($row, self::$taskFields));
226 }
227
228 public static function Add($arFields)
229 {
230 if (! self::CheckFields('ADD', $arFields))
231 return false;
232
233 $statusId = $arFields['ID'];
234
235 foreach (GetModuleEvents("sale", "OnBeforeStatusAdd", true) as $arEvent)
236 if (ExecuteModuleEventEx($arEvent, array($statusId, &$arFields))===false)
237 return false;
238
239 StatusTable::add(array_intersect_key($arFields, self::$statusFields));
240
241 if (isset($arFields['LANG']) && is_array($arFields['LANG']) && ! empty($arFields['LANG']))
242 self::addLanguagesBy($statusId, $arFields['LANG']);
243
244 if (isset($arFields['PERMS']) && is_array($arFields['PERMS']) && ! empty($arFields['PERMS']))
245 self::addTasksBy($statusId, $arFields['PERMS']);
246
247 if (\Bitrix\Main\Config\Option::get('sale', 'expiration_processing_events', 'N') === 'N')
248 {
249 foreach (GetModuleEvents("sale", "OnStatusAdd", true) as $arEvent)
250 ExecuteModuleEventEx($arEvent, array($statusId, $arFields));
251 }
252
253 return $statusId;
254 }
255
256 public static function Update($statusId, $arFields)
257 {
258 if (! self::CheckFields('UPDATE', $arFields, $statusId))
259 return false;
260
261 foreach (GetModuleEvents("sale", "OnBeforeStatusUpdate", true) as $arEvent)
262 if (ExecuteModuleEventEx($arEvent, array($statusId, &$arFields))===false)
263 return false;
264
265 StatusTable::update($statusId, array_intersect_key($arFields, self::$statusFields));
266
267 if (isset($arFields['LANG']) && is_array($arFields['LANG']) && ! empty($arFields['LANG']))
268 {
270 self::addLanguagesBy($statusId, $arFields['LANG']);
271 }
272
273 if (isset($arFields['PERMS']) && is_array($arFields['PERMS']) && ! empty($arFields['PERMS']))
274 {
276 self::addTasksBy($statusId, $arFields['PERMS']);
277 }
278
279 if (\Bitrix\Main\Config\Option::get('sale', 'expiration_processing_events', 'N') === 'N')
280 {
281 foreach (GetModuleEvents("sale", "OnStatusUpdate", true) as $arEvent)
282 ExecuteModuleEventEx($arEvent, array($statusId, $arFields));
283 }
284
285 return $statusId;
286 }
287
288 public static function Delete($statusId)
289 {
290 if (! $statusId)
291 return false;
292
293 global $DB, $APPLICATION;
294 $statusId = $DB->ForSql($statusId, 2);
295
296 if (OrderTable::getList(array(
297 'filter' => array('=STATUS_ID' => $statusId),
298 'limit' => 1
299 ))->fetch())
300 {
301 $APPLICATION->ThrowException(Loc::getMessage("SKGS_ERROR_DELETE"), "ERROR_DELETE_STATUS_TO_ORDER");
302 return false;
303 }
304
305 if (OrderArchiveTable::getList(array(
306 'filter' => array('=STATUS_ID' => $statusId),
307 'limit' => 1
308 ))->fetch())
309 {
310 $APPLICATION->ThrowException(Loc::getMessage("SKGS_ERROR_ARCHIVED_DELETE"), "ERROR_DELETE_STATUS_TO_ARCHIVED_ORDER");
311 return false;
312 }
313
314 foreach (GetModuleEvents("sale", "OnBeforeStatusDelete", true) as $arEvent)
315 if (ExecuteModuleEventEx($arEvent, array($statusId))===false)
316 return false;
317
318 foreach (GetModuleEvents("sale", "OnStatusDelete", true) as $arEvent)
319 ExecuteModuleEventEx($arEvent, array($statusId));
320
323 return StatusTable::delete($statusId)->isSuccess();
324 }
325
326 public static function CreateMailTemplate($ID)
327 {
328 $ID = trim($ID);
329
330 if ($ID == '')
331 return false;
332
333 $eventType = new CEventType();
334 $eventMessage = new CEventMessage();
335
336 if ( $statusData = self::GetByID($ID, LANGUAGE_ID))
337 {
338 $eventType->Delete("SALE_STATUS_CHANGED_".$ID);
339 }
340
341 $dbSiteList = CSite::GetList();
342 while ($arSiteList = $dbSiteList->Fetch())
343 {
344 \Bitrix\Main\Localization\Loc::loadLanguageFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/general/status.php", $arSiteList["LANGUAGE_ID"]);
345 $arStatusLang = self::GetLangByID($ID, $arSiteList["LANGUAGE_ID"]);
346
347 $dbEventType = $eventType->GetList(
348 array(
349 "EVENT_NAME" => "SALE_STATUS_CHANGED_".$ID,
350 "LID" => $arSiteList["LANGUAGE_ID"]
351 )
352 );
353 if (!($arEventType = $dbEventType->Fetch()))
354 {
355 $str = "";
356 $str .= "#ORDER_ID# - ".Loc::getMessage("SKGS_ORDER_ID", null, $arSiteList["LANGUAGE_ID"])."\n";
357 $str .= "#ORDER_DATE# - ".Loc::getMessage("SKGS_ORDER_DATE", null, $arSiteList["LANGUAGE_ID"])."\n";
358 $str .= "#ORDER_STATUS# - ".Loc::getMessage("SKGS_ORDER_STATUS", null, $arSiteList["LANGUAGE_ID"])."\n";
359
360 $eventTypeName = Loc::getMessage("SKGS_CHANGING_STATUS_TO", null, $arSiteList["LANGUAGE_ID"])." \"".$arStatusLang["NAME"]."\"";
361
362 if ($statusData['TYPE'] == \Bitrix\Sale\DeliveryStatus::TYPE)
363 {
364 $eventTypeName = Loc::getMessage("SKGS_CHANGING_SHIPMENT_STATUS_TO", null, $arSiteList["LANGUAGE_ID"])." \"".$arStatusLang["NAME"]."\"";
365
366 $str .= "#SHIPMENT_ID# - ".\Bitrix\Main\Localization\Loc::getMessage("SKGS_SHIPMENT_ID", null, $arSiteList["LANGUAGE_ID"])."\n";
367 $str .= "#SHIPMENT_DATE# - ".\Bitrix\Main\Localization\Loc::getMessage("SKGS_SHIPMENT_DATE", null, $arSiteList["LANGUAGE_ID"])."\n";
368 $str .= "#SHIPMENT_STATUS# - ".\Bitrix\Main\Localization\Loc::getMessage("SKGS_SHIPMENT_STATUS", null, $arSiteList["LANGUAGE_ID"])."\n";
369 }
370
371 $str .= "#EMAIL# - ".Loc::getMessage("SKGS_ORDER_EMAIL", null, $arSiteList["LANGUAGE_ID"])."\n";
372 $str .= "#ORDER_DESCRIPTION# - ".Loc::getMessage("SKGS_STATUS_DESCR", null, $arSiteList["LANGUAGE_ID"])."\n";
373 $str .= "#TEXT# - ".Loc::getMessage("SKGS_STATUS_TEXT", null, $arSiteList["LANGUAGE_ID"])."\n";
374 $str .= "#SALE_EMAIL# - ".Loc::getMessage("SKGS_SALE_EMAIL", null, $arSiteList["LANGUAGE_ID"])."\n";
375 $str .= "#ORDER_PUBLIC_URL# - ".Loc::getMessage("SKGS_ORDER_PUBLIC_LINK", null, $arSiteList["LANGUAGE_ID"])."\n";
376
377 $eventTypeID = $eventType->Add(
378 array(
379 "LID" => $arSiteList["LANGUAGE_ID"],
380 "EVENT_NAME" => "SALE_STATUS_CHANGED_".$ID,
381 "NAME" => $eventTypeName,
382 "DESCRIPTION" => $str
383 )
384 );
385 }
386
387 $dbEventMessage = $eventMessage->GetList(
388 '',
389 '',
390 array(
391 "EVENT_NAME" => "SALE_STATUS_CHANGED_".$ID,
392 "SITE_ID" => $arSiteList["LID"]
393 )
394 );
395 if (!($arEventMessage = $dbEventMessage->Fetch()))
396 {
397 if ($statusData['TYPE'] == \Bitrix\Sale\DeliveryStatus::TYPE)
398 {
399 $subject = Loc::getMessage("SKGS_SHIPMENT_STATUS_MAIL_SUBJ", null, $arSiteList["LANGUAGE_ID"]);
400
401 $message = Loc::getMessage("SKGS_SHIPMENT_STATUS_MAIL_BODY1", null, $arSiteList["LANGUAGE_ID"]);
402 $message .= "------------------------------------------\n\n";
403 $message .= Loc::getMessage("SKGS_SHIPMENT_STATUS_MAIL_BODY2", null, $arSiteList["LANGUAGE_ID"]);
404 $message .= Loc::getMessage("SKGS_SHIPMENT_STATUS_MAIL_BODY3", null, $arSiteList["LANGUAGE_ID"]);
405 $message .= "#SHIPMENT_STATUS#\n";
406 }
407 else
408 {
409 $subject = Loc::getMessage("SKGS_STATUS_MAIL_SUBJ", null, $arSiteList["LANGUAGE_ID"]);
410
411 $message = Loc::getMessage("SKGS_STATUS_MAIL_BODY1", null, $arSiteList["LANGUAGE_ID"]);
412 $message .= "------------------------------------------\n\n";
413 $message .= Loc::getMessage("SKGS_STATUS_MAIL_BODY2", null, $arSiteList["LANGUAGE_ID"]);
414 $message .= Loc::getMessage("SKGS_STATUS_MAIL_BODY3", null, $arSiteList["LANGUAGE_ID"]);
415 $message .= "#ORDER_STATUS#\n";
416 $message .= "#ORDER_DESCRIPTION#\n";
417 }
418
419 $message .= "#TEXT#\n\n";
420 $message .= "#SITE_NAME#\n";
421
422 $arFields = Array(
423 "ACTIVE" => "Y",
424 "EVENT_NAME" => "SALE_STATUS_CHANGED_".$ID,
425 "LID" => $arSiteList["LID"],
426 "EMAIL_FROM" => "#SALE_EMAIL#",
427 "EMAIL_TO" => "#EMAIL#",
428 "SUBJECT" => $subject,
429 "MESSAGE" => $message,
430 "BODY_TYPE" => "text"
431 );
432 $eventMessageID = $eventMessage->Add($arFields);
433 }
434 }
435
436 return true;
437 }
438}
439
441final class CSaleStatusAdapter implements Compatible\FetchAdapter
442{
443 // M I G R A T I O N ///////////////////////////////////////////////////////////////////////////////////////////////
444
445 public static function perms2opers()
446 {
447 static $lazy = array(
448 'PERM_VIEW' => 'sale_status_view',
449 'PERM_CANCEL' => 'sale_status_cancel',
450 'PERM_MARK' => 'sale_status_mark',
451 'PERM_DELIVERY' => 'sale_status_delivery',
452 'PERM_DEDUCTION' => 'sale_status_deduction',
453 'PERM_PAYMENT' => 'sale_status_payment',
454 'PERM_STATUS' => 'sale_status_to',
455 'PERM_UPDATE' => 'sale_status_update',
456 'PERM_DELETE' => 'sale_status_delete',
457 'PERM_STATUS_FROM' => 'sale_status_from',
458 );
459 return $lazy;
460 }
461
462 private static function field($name, array $field)
463 {
464 $field['NAME'] = $name;
465 $field['MODULE_ID'] = 'sale';
466 $field['BINDING'] = 'status';
467 return $field;
468 }
469
470 public static function migrate()
471 {
472 $errors = '';
473
474 // install all permissions as operations
475 $permissions = array(/* permission name => operation id */);
476 foreach (self::perms2opers() as $perm => $oper)
477 {
478 $result = OperationTable::add(self::field($oper, array()));
479 if ($result->isSuccess())
480 $permissions[$perm] = $result->getId();
481 else
482 $errors .= 'cannot add operation: '.$oper."\n".implode("\n", $result->getErrorMessages())."\n\n";
483 }
484 asort($permissions);
485
486 // install system tasks
487 $tasks = array(/* task id => array of operations ids */);
488 try
489 {
490 $tasks[self::addTask(self::field('sale_status_none', array('SYS' => 'Y', 'LETTER' => 'D')), array())] = array();
491 }
492 catch (SystemException $e)
493 {
494 $errors .= $e->getMessage();
495 }
496 try
497 {
498 $tasks[self::addTask(self::field('sale_status_all', array('SYS' => 'Y', 'LETTER' => 'X')), $permissions)] = array_values($permissions);
499 }
500 catch (SystemException $e)
501 {
502 $errors .= $e->getMessage();
503 }
504
505 // migrate permissions to tasks
506 $result = Application::getConnection()->query('SELECT * FROM b_sale_status2group');
507 while ($row = $result->fetch())
508 {
509 try
510 {
511 $taskId = self::getTaskId($row, $permissions, $tasks);
512 $res = StatusGroupTaskTable::add(array(
513 'STATUS_ID' => $row['STATUS_ID'],
514 'GROUP_ID' => $row['GROUP_ID'],
515 'TASK_ID' => $taskId,
516 ));
517 if (! $res->isSuccess())
518 $errors .= 'cannot add status: '.$row['STATUS_ID'].', group: '.$row['GROUP_ID'].', task: '.$taskId."\n".implode("\n", $res->getErrorMessages())."\n\n";
519 }
520 catch (SystemException $e)
521 {
522 $errors .= $e->getMessage();
523 }
524 }
525
526 if ($errors)
527 throw new SystemException($errors, 0, __FILE__, __LINE__);
528 }
529
530 public static function getTaskId(array $data, array $permissions, array &$tasks)
531 {
532 $permissions = array_values(array_intersect_key($permissions, array_intersect($data, array('Y'))));
533 if (! $taskId = array_search($permissions, $tasks))
534 {
535 $taskId = self::addTask(self::field('sale_status_custom'.(count($tasks) + 1), array('SYS' => 'N')), $permissions);
536 $tasks[$taskId] = $permissions;
537 }
538 return $taskId;
539 }
540
541 public static function addTask(array $field, array $permissions)
542 {
543 // add task
544 $result = TaskTable::add($field);
545 if (! $result->isSuccess())
546 throw new SystemException('cannot add task: '.$field['NAME']."\n".implode("\n", $result->getErrorMessages())."\n\n", 0, __FILE__, __LINE__);
547
548 // add task-operations
549 $errors = '';
550 $taskId = $result->getId();
551 foreach ($permissions as $operId)
552 {
553 $result = TaskOperationTable::add(array(
554 'TASK_ID' => $taskId,
555 'OPERATION_ID' => $operId,
556 ));
557 if (! $result->isSuccess())
558 $errors .= 'cannot add task: '.$taskId.', operation: '.$operId."\n".implode("\n", $result->getErrorMessages())."\n\n";
559 }
560 if ($errors)
561 throw new SystemException($errors, 0, __FILE__, __LINE__);
562
563 return $taskId;
564 }
565
566 // A D A P T E R ///////////////////////////////////////////////////////////////////////////////////////////////////
567
568 public static function permissions()
569 {
570 static $lazy = array();
571 if (! $lazy)
572 {
573 $result = OperationTable::getList(array(
574 'select' => array('ID', 'NAME'),
575 'filter' => array('=MODULE_ID' => 'sale', '=BINDING' => 'status'),
576 ));
577
578 $operations = array();
579 while ($row = $result->fetch())
580 $operations[$row['NAME']] = $row['ID'];
581
582 foreach (self::perms2opers() as $perm => $oper)
583 $lazy[$perm] = $operations[$oper];
584
585 asort($lazy);
586 }
587 return $lazy; // permission name => operation id
588 }
589
590 public static function addFieldsTo(array &$fields, $statusIdName, $prefix)
591 {
592 $fields[$prefix.'GROUP_ID'] = array(
593 'TYPE' => 'int',
594 'FIELD' => 'SSGT.GROUP_ID',
595 'FROM' => 'INNER JOIN b_sale_status_group_task SSGT ON (SSGT.STATUS_ID = '.$statusIdName.')',
596 );
597 foreach (self::permissions() as $name => $id)
598 $fields[$prefix.$name] = array(
599 'TYPE' => 'char',
600 'FIELD' => self::permExpression('SSGT.TASK_ID', $id),
601 'FROM' => 'INNER JOIN b_sale_status_group_task SSGT ON (SSGT.STATUS_ID = '.$statusIdName.')'
602 );
603 }
604
605 public static function permExpression($taskIdName, $operationId)
606 {
607 return 'CASE WHEN EXISTS('.
608 'SELECT 1 FROM b_task_operation SSTO WHERE SSTO.TASK_ID = '.$taskIdName.' AND SSTO.OPERATION_ID = '.$operationId.
609 ') THEN "Y" ELSE "N" END';
610 }
611
612 public static function addAliasesTo(Compatible\AliasedQuery $query, $taskIdName)
613 {
614 foreach (self::permissions() as $name => $id)
615 $query->addAlias($name, array(
616 'expression' => array(self::permExpression('%s', $id), $taskIdName),
617 ));
618 }
619
620 public static function adaptResult(Compatible\CDBResult $result, Compatible\OrderQuery $query, $taskIdName)
621 {
622 if (! ($query->grouped() || $query->aggregated()))
623 {
624 $select = $query->allSelected()
626 : array_intersect_key(self::permissions(), $query->getSelect());
627
628 if ($select)
629 {
630 $query->setSelect(array_diff_key($query->getSelect(), $select));
631 $query->addAlias('TASK_ID', $taskIdName);
632 $query->addAliasSelect('TASK_ID');
633 $result->addFetchAdapter(new self($select));
634 }
635 }
636 }
637
640 public static function getTasksOperations()
641 {
642 $result = TaskTable::getList(array(
643 'select' => array(
644 'TASK' => 'ID',
645 'OPERATION' => 'Bitrix\Main\TaskOperationTable:TASK.OPERATION_ID',
646 ),
647 'filter' => array(
648 '=MODULE_ID' => 'sale',
649 '=BINDING' => 'status',
650 ),
651 'order' => array(
652 'Bitrix\Main\TaskOperationTable:TASK.OPERATION_ID' => 'ASC',
653 ),
654 ));
655
656 $tasks = array();
657
658 while ($row = $result->fetch())
659 {
660 if (!isset($tasks[$row['TASK']]))
661 {
662 $tasks[$row['TASK']] = [];
663 }
664 if ($row['OPERATION'])
665 {
666 $tasks[$row['TASK']][] = $row['OPERATION'];
667 }
668 }
669
670 return $tasks;
671 }
672
673 // I N S T A N C E /////////////////////////////////////////////////////////////////////////////////////////////////
674
675 private $select, $tasks;
676
677 private function __construct(array $select)
678 {
679 $this->select = $select;
680 $this->tasks = self::getTasksOperations();
681 }
682
683 public function adapt(array $row)
684 {
685 $tasks = $this->tasks;
686 $taskId = $row['TASK_ID'];
687
688 $operations = $tasks[$taskId] ?? [];
689 if (!is_array($operations))
690 {
691 $operations = [];
692 }
693
694 foreach ($this->select as $perm => $operId)
695 {
696 $row[$perm] = $taskId
697 ? (in_array($operId, $operations) ? 'Y' : 'N')
698 : '';
699 }
700
701 unset($row['TASK_ID']);
702
703 return $row;
704 }
705}
return select
Определения access_edit.php:440
$type
Определения options.php:106
global $APPLICATION
Определения include.php:80
static getConnection($name="")
Определения application.php:638
static get($moduleId, $name, $default="", $siteId=false)
Определения option.php:30
static loadLanguageFile($file, $language=null, $normalize=true)
Определения loc.php:225
static getMessage($code, $replace=null, $language=null)
Определения loc.php:30
static getList(array $parameters=array())
Определения datamanager.php:431
Определения task.php:24
static deleteByStatus($statusId)
Определения status_grouptask.php:77
static deleteByStatus($statusId)
Определения status_lang.php:84
static add(array $data)
Определения status.php:121
static update($primary, array $data)
Определения status.php:99
const TYPE
Определения orderstatus.php:14
Определения eventmessage.php:586
Определения eventmessage.php:590
Определения status.php:442
static perms2opers()
Определения status.php:445
static addTask(array $field, array $permissions)
Определения status.php:541
static getTaskId(array $data, array $permissions, array &$tasks)
Определения status.php:530
static addFieldsTo(array &$fields, $statusIdName, $prefix)
Определения status.php:590
static addAliasesTo(Compatible\AliasedQuery $query, $taskIdName)
Определения status.php:612
static permissions()
Определения status.php:568
static getTasksOperations()
Определения status.php:640
static permExpression($taskIdName, $operationId)
Определения status.php:605
adapt(array $row)
Определения status.php:683
static migrate()
Определения status.php:470
static adaptResult(Compatible\CDBResult $result, Compatible\OrderQuery $query, $taskIdName)
Определения status.php:620
Определения status.php:22
static Delete($statusId)
Определения status.php:288
static Update($statusId, $arFields)
Определения status.php:256
static GetLangByID($statusId, $languageId=LANGUAGE_ID)
Определения status.php:55
static Add($arFields)
Определения status.php:228
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения status.php:72
static GetPermissionsList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения status.php:127
static GetByID($statusId, $languageId=LANGUAGE_ID, $type=null)
Определения status.php:23
static CheckFields($ACTION, &$arFields, $statusId='')
Определения status.php:149
static CreateMailTemplate($ID)
Определения status.php:326
$str
Определения commerceml2.php:63
$arFields
Определения dblapprove.php:5
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$perm
Определения options.php:169
$result
Определения get_property_values.php:14
$query
Определения get_search.php:11
if($ajaxMode) $ID
Определения get_user.php:27
$errors
Определения iblock_catalog_edit.php:74
$select
Определения iblock_catalog_list.php:194
$filter
Определения iblock_catalog_list.php:54
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
$ACTION
Определения csv_new_setup.php:27
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
is_set($a, $k=false)
Определения tools.php:2133
$name
Определения menu_edit.php:35
$GLOBALS['____1690880296']
Определения license.php:1
$message
Определения payment.php:8
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$arSiteList
Определения options.php:18
$rows
Определения options.php:264
$arFilter
Определения user_search.php:106
$fields
Определения yandex_run.php:501