CBPAllStateService::GetDocumentStates: Bitrix method

      
<?php 
//  CBPAllStateService :: GetDocumentStates()
//  /dist/bitrix/modules/bizproc/classes/general/stateservice.php:230

    
public static function GetDocumentStates($documentId$workflowId "")
    {
        global 
$DB;

        
$arDocumentId CBPHelper::ParseDocumentId($documentId);

        
$ids = (array) $arDocumentId[2];
        
$idsCondition = array();
        foreach (
$ids as $id)
        {
            
$idsCondition[] = 'WS.DOCUMENT_ID = \''.$DB->ForSql($id).'\'';
        }

        
$sqlAdditionalFilter "";
        
$workflowId trim($workflowId);
        if (
strlen($workflowId) > 0)
            
$sqlAdditionalFilter " AND WS.ID = '".$DB->ForSql($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, 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($arDocumentId[1])."' ".
            
"    AND WS.MODULE_ID ".((strlen($arDocumentId[0]) > 0) ? "= '".$DB->ForSql($arDocumentId[0])."'" "IS NULL")." ".
            
$sqlAdditionalFilter
        
);

        
$arStates = array();
        while (
$arResult $dbResult->Fetch())
            
self::__ExtractState($arStates$arResult);

        return 
$arStates;
    }