• Модуль: 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;
}