- Модуль: bizproc
- Путь к файлу: ~/bitrix/modules/bizproc/classes/general/stateservice.php
- Класс: CBPStateService
- Вызов: CBPStateService::getDocumentStates
static function getDocumentStates($documentId, $workflowId = "")
{
global $DB;
[$moduleId, $entity, $ids] = $documentId;
$idsCondition = [];
foreach ((array)$ids as $id)
{
$idsCondition[] = 'WS.DOCUMENT_ID = ''.$DB->ForSql($id).''';
}
if (empty($idsCondition))
{
return [];
}
$sqlAdditionalFilter = "";
if (is_array($workflowId) && count($workflowId) > 0)
{
$workflowId = array_map(function ($id) use ($DB)
{
return '''.$DB->ForSql((string)$id).''';
}, $workflowId);
$sqlAdditionalFilter = " AND WS.ID IN (".implode(',', $workflowId).")";
}
elseif (is_string($workflowId) && $workflowId)
{
$sqlAdditionalFilter = " AND WS.ID = '".$DB->ForSql(trim($workflowId))."' ";
}
$dbResult = $DB->Query(
"SELECT WS.ID, WS.WORKFLOW_TEMPLATE_ID, WS.STATE, WS.STATE_TITLE, WS.STATE_PARAMETERS, ".
" ".$DB->DateToCharFunction("WS.MODIFIED", "FULL")." as MODIFIED, ".
" WS.MODULE_ID, WS.ENTITY, WS.DOCUMENT_ID, ".
" WT.NAME, WT.DESCRIPTION, WP.OBJECT_ID, WP.PERMISSION, WI.STATUS, ".
" WS.STARTED, ". $DB->DateToCharFunction("WS.STARTED", "FULL")
. " as STARTED_FORMATTED, WS.STARTED_BY ".
"FROM b_bp_workflow_state WS ".
" LEFT JOIN b_bp_workflow_permissions WP ON (WS.ID = WP.WORKFLOW_ID) ".
" LEFT JOIN b_bp_workflow_template WT ON (WS.WORKFLOW_TEMPLATE_ID = WT.ID) ".
" LEFT JOIN b_bp_workflow_instance WI ON (WS.ID = WI.ID) ".
"WHERE (".implode(' OR ', $idsCondition).") ".
" AND WS.ENTITY = '" . $DB->ForSql($entity) . "' " .
" AND WS.MODULE_ID " . ($moduleId ? "= '" . $DB->ForSql($moduleId) . "'" : "IS NULL") . " ".
$sqlAdditionalFilter
);
$arStates = array();
while ($arResult = $dbResult->Fetch())
self::__ExtractState($arStates, $arResult);
return $arStates;
}