public static function ValidateProperties($testProperties = array(), CBPWorkflowTemplateUser $user = null)
 {
     $errors = array();
     try {
         CBPHelper::ParseDocumentId($testProperties['DocumentType']);
     } catch (Exception $e) {
         $errors[] = array("code" => "NotExist", "parameter" => "DocumentType", "message" => GetMessage("BPCLDA_ERROR_DT"));
     }
     return array_merge($errors, parent::ValidateProperties($testProperties, $user));
 }
Example #2
0
 public function Initialize(CBPActivity $rootActivity, $documentId, $workflowParameters = array(), $workflowVariablesTypes = array(), $workflowParametersTypes = array())
 {
     $this->rootActivity = $rootActivity;
     $rootActivity->SetWorkflow($this);
     $arDocumentId = CBPHelper::ParseDocumentId($documentId);
     $rootActivity->SetDocumentId($arDocumentId);
     $documentService = $this->GetService("DocumentService");
     $documentType = $documentService->GetDocumentType($arDocumentId);
     if ($documentType !== null) {
         $rootActivity->SetDocumentType($documentType);
         $rootActivity->SetFieldTypes($documentService->GetDocumentFieldTypes($documentType));
     }
     $rootActivity->SetProperties($workflowParameters);
     $rootActivity->SetVariablesTypes($workflowVariablesTypes);
     if (is_array($workflowVariablesTypes)) {
         foreach ($workflowVariablesTypes as $k => $v) {
             $rootActivity->SetVariable($k, $v["Default"]);
         }
     }
     $rootActivity->SetPropertiesTypes($workflowParametersTypes);
 }
Example #3
0
 /**
  * Creates new workflow instance from the specified template.
  *
  * @param int $workflowTemplateId - ID of the workflow template
  * @param string $documentId - ID of the document
  * @param mixed $workflowParameters - Optional parameters of the created workflow instance
  * @param array|null $parentWorkflow - Parent Workflow information.
  * @return CBPWorkflow
  * @throws CBPArgumentNullException
  * @throws CBPArgumentOutOfRangeException
  * @throws Exception
  * @throws \Bitrix\Main\ArgumentNullException
  */
 public function CreateWorkflow($workflowTemplateId, $documentId, $workflowParameters = array(), $parentWorkflow = null)
 {
     $workflowTemplateId = intval($workflowTemplateId);
     if ($workflowTemplateId <= 0) {
         throw new Exception("workflowTemplateId");
     }
     $arDocumentId = CBPHelper::ParseDocumentId($documentId);
     $limit = \Bitrix\Main\Config\Option::get("bizproc", "limit_simultaneous_processes", "0");
     if (intval($limit) > 0) {
         if (CBPStateService::CountDocumentWorkflows($documentId) >= $limit) {
             throw new Exception(GetMessage("BPCGDOC_LIMIT_SIMULTANEOUS_PROCESSES", array("#NUM#" => $limit)));
         }
     }
     if (!$this->isStarted) {
         $this->StartRuntime();
     }
     $workflowId = uniqid("", true);
     if ($parentWorkflow) {
         $this->addWorkflowToChain($workflowId, $parentWorkflow);
         if ($this->checkWorkflowRecursion($workflowId, $workflowTemplateId)) {
             throw new Exception(GetMessage("BPCGDOC_WORKFLOW_RECURSION_LOCK"));
         }
     }
     $workflow = new CBPWorkflow($workflowId, $this);
     $loader = CBPWorkflowTemplateLoader::GetLoader();
     list($rootActivity, $workflowVariablesTypes, $workflowParametersTypes) = $loader->LoadWorkflow($workflowTemplateId);
     if ($rootActivity == null) {
         throw new Exception("EmptyRootActivity");
     }
     //if (!is_a($rootActivity, "IBPRootActivity"))
     //	throw new Exception("RootActivityIsNotAIBPRootActivity");
     foreach (GetModuleEvents("bizproc", "OnCreateWorkflow", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($workflowTemplateId, $documentId, &$workflowParameters));
     }
     $workflow->Initialize($rootActivity, $arDocumentId, $workflowParameters, $workflowVariablesTypes, $workflowParametersTypes, $workflowTemplateId);
     $starterUserId = 0;
     if (isset($workflowParameters[CBPDocument::PARAM_TAGRET_USER])) {
         $starterUserId = intval(substr($workflowParameters[CBPDocument::PARAM_TAGRET_USER], strlen("user_")));
     }
     $this->arServices["StateService"]->AddWorkflow($workflowId, $workflowTemplateId, $arDocumentId, $starterUserId);
     $this->arWorkflows[$workflowId] = $workflow;
     return $workflow;
 }
 protected function ParseFields(&$arFields, $id = 0, $systemImport = false)
 {
     $id = intval($id);
     $updateMode = $id > 0 ? true : false;
     $addMode = !$updateMode;
     if ($addMode && !is_set($arFields, "DOCUMENT_TYPE")) {
         throw new CBPArgumentNullException("DOCUMENT_TYPE");
     }
     if (is_set($arFields, "DOCUMENT_TYPE")) {
         $arDocumentType = CBPHelper::ParseDocumentId($arFields["DOCUMENT_TYPE"]);
         $arFields["MODULE_ID"] = $arDocumentType[0];
         $arFields["ENTITY"] = $arDocumentType[1];
         $arFields["DOCUMENT_TYPE"] = $arDocumentType[2];
     } else {
         unset($arFields["MODULE_ID"]);
         unset($arFields["ENTITY"]);
         unset($arFields["DOCUMENT_TYPE"]);
     }
     if (is_set($arFields, "NAME") || $addMode) {
         $arFields["NAME"] = trim($arFields["NAME"]);
         if (strlen($arFields["NAME"]) <= 0) {
             throw new CBPArgumentNullException("NAME");
         }
     }
     if ($addMode && !is_set($arFields, "TEMPLATE")) {
         throw new CBPArgumentNullException("TEMPLATE");
     }
     if (is_set($arFields, "TEMPLATE")) {
         if (!is_array($arFields["TEMPLATE"])) {
             throw new CBPArgumentTypeException("TEMPLATE", "array");
         } else {
             $userTmp = null;
             if (!$systemImport) {
                 if (array_key_exists("MODIFIER_USER", $arFields)) {
                     if (is_object($arFields["MODIFIER_USER"]) && is_a($arFields["MODIFIER_USER"], "CBPWorkflowTemplateUser")) {
                         $userTmp = $arFields["MODIFIER_USER"];
                     } else {
                         $userTmp = new CBPWorkflowTemplateUser($arFields["MODIFIER_USER"]);
                     }
                 } else {
                     $userTmp = new CBPWorkflowTemplateUser();
                 }
                 $err = array();
                 foreach ($arFields["TEMPLATE"] as $v) {
                     $err = $err + $this->ValidateTemplate($v, $userTmp);
                 }
                 if (count($err) > 0) {
                     $m = "";
                     foreach ($err as $v) {
                         $m = trim($v["message"]);
                         if (substr($m, -1) != ".") {
                             $m .= ".";
                         }
                     }
                     throw new Exception($m);
                 }
             }
             $arFields["TEMPLATE"] = $this->GetSerializedForm($arFields["TEMPLATE"]);
         }
     }
     foreach (array('PARAMETERS', 'VARIABLES', 'CONSTANTS') as $field) {
         if (is_set($arFields, $field)) {
             if ($arFields[$field] == null) {
                 $arFields[$field] = false;
             } elseif (is_array($arFields[$field])) {
                 if (count($arFields[$field]) > 0) {
                     $arFields[$field] = $this->GetSerializedForm($arFields[$field]);
                 } else {
                     $arFields[$field] = false;
                 }
             } else {
                 throw new CBPArgumentTypeException($field);
             }
         }
     }
     if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != 'N') {
         $arFields["ACTIVE"] = 'Y';
     }
     if (is_set($arFields, "IS_MODIFIED") && $arFields["IS_MODIFIED"] != 'N') {
         $arFields["IS_MODIFIED"] = 'Y';
     }
     unset($arFields["MODIFIED"]);
 }
Example #5
0
 public static function SetPermissions($parameterDocumentId, $workflowId, $arPermissions, $bRewrite = true)
 {
     list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId);
     if (strlen($moduleId) > 0) {
         CModule::IncludeModule($moduleId);
     }
     if (class_exists($entity) && method_exists($entity, "SetPermissions")) {
         return call_user_func_array(array($entity, "SetPermissions"), array($documentId, $workflowId, $arPermissions, $bRewrite));
     }
     return false;
 }
Example #6
0
 public function onWorkflowStatusChange($parameterDocumentId, $workflowId, $status)
 {
     list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId);
     if (strlen($moduleId) > 0) {
         CModule::IncludeModule($moduleId);
     }
     if (class_exists($entity) && method_exists($entity, "onWorkflowStatusChange")) {
         return call_user_func_array(array($entity, "onWorkflowStatusChange"), array($documentId, $workflowId, $status));
     }
     return false;
 }
Example #7
0
 public static function MigrateDocumentType($oldType, $newType, $workflowTemplateIds)
 {
     global $DB;
     $arOldType = CBPHelper::ParseDocumentId($oldType);
     $arNewType = CBPHelper::ParseDocumentId($newType);
     $DB->Query("UPDATE b_bp_workflow_state SET " . "\tENTITY = '" . $DB->ForSql($arNewType[1]) . "', " . "\tMODULE_ID = '" . $DB->ForSql($arNewType[0]) . "' " . "WHERE ENTITY = '" . $DB->ForSql($arOldType[1]) . "' " . "\tAND MODULE_ID = '" . $DB->ForSql($arOldType[0]) . "' " . "\tAND WORKFLOW_TEMPLATE_ID IN (" . implode(",", $workflowTemplateIds) . ") ");
 }
Example #8
0
 public function GetHistoryList($arOrder = array("ID" => "DESC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
 {
     global $DB;
     if (count($arSelectFields) <= 0) {
         $arSelectFields = array("ID", "MODULE_ID", "ENTITY", "DOCUMENT_ID", "NAME", "DOCUMENT", "MODIFIED", "USER_ID");
     }
     if (count(array_intersect($arSelectFields, array("MODULE_ID", "ENTITY", "DOCUMENT_ID"))) > 0) {
         if (!in_array("MODULE_ID", $arSelectFields)) {
             $arSelectFields[] = "MODULE_ID";
         }
         if (!in_array("ENTITY", $arSelectFields)) {
             $arSelectFields[] = "ENTITY";
         }
         if (!in_array("DOCUMENT_ID", $arSelectFields)) {
             $arSelectFields[] = "DOCUMENT_ID";
         }
     }
     if (array_key_exists("DOCUMENT_ID", $arFilter)) {
         $d = CBPHelper::ParseDocumentId($arFilter["DOCUMENT_ID"]);
         $arFilter["MODULE_ID"] = $d[0];
         $arFilter["ENTITY"] = $d[1];
         $arFilter["DOCUMENT_ID"] = $d[2];
     }
     static $arFields = array("ID" => array("FIELD" => "H.ID", "TYPE" => "int"), "MODULE_ID" => array("FIELD" => "H.MODULE_ID", "TYPE" => "string"), "ENTITY" => array("FIELD" => "H.ENTITY", "TYPE" => "string"), "DOCUMENT_ID" => array("FIELD" => "H.DOCUMENT_ID", "TYPE" => "string"), "NAME" => array("FIELD" => "H.NAME", "TYPE" => "string"), "DOCUMENT" => array("FIELD" => "H.DOCUMENT", "TYPE" => "string"), "MODIFIED" => array("FIELD" => "H.MODIFIED", "TYPE" => "datetime"), "USER_ID" => array("FIELD" => "H.USER_ID", "TYPE" => "int"), "USER_NAME" => array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (H.USER_ID = U.ID)"), "USER_LAST_NAME" => array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (H.USER_ID = U.ID)"), "USER_SECOND_NAME" => array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (H.USER_ID = U.ID)"), "USER_LOGIN" => array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (H.USER_ID = U.ID)"));
     $arSqls = CBPHelper::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
     $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
     if (is_array($arGroupBy) && count($arGroupBy) == 0) {
         $strSql = "SELECT " . $arSqls["SELECT"] . " " . "FROM b_bp_history H " . "\t" . $arSqls["FROM"] . " ";
         if (strlen($arSqls["WHERE"]) > 0) {
             $strSql .= "WHERE " . $arSqls["WHERE"] . " ";
         }
         if (strlen($arSqls["GROUPBY"]) > 0) {
             $strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
         }
         //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($arRes = $dbRes->Fetch()) {
             return $arRes["CNT"];
         } else {
             return False;
         }
     }
     $strSql = "SELECT " . $arSqls["SELECT"] . " " . "FROM b_bp_history H " . "\t" . $arSqls["FROM"] . " ";
     if (strlen($arSqls["WHERE"]) > 0) {
         $strSql .= "WHERE " . $arSqls["WHERE"] . " ";
     }
     if (strlen($arSqls["GROUPBY"]) > 0) {
         $strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
     }
     if (strlen($arSqls["ORDERBY"]) > 0) {
         $strSql .= "ORDER BY " . $arSqls["ORDERBY"] . " ";
     }
     if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) <= 0) {
         $strSql_tmp = "SELECT COUNT('x') as CNT " . "FROM b_bp_history H " . "\t" . $arSqls["FROM"] . " ";
         if (strlen($arSqls["WHERE"]) > 0) {
             $strSql_tmp .= "WHERE " . $arSqls["WHERE"] . " ";
         }
         if (strlen($arSqls["GROUPBY"]) > 0) {
             $strSql_tmp .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
         }
         //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
         $dbRes = $DB->Query($strSql_tmp, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         $cnt = 0;
         if (strlen($arSqls["GROUPBY"]) <= 0) {
             if ($arRes = $dbRes->Fetch()) {
                 $cnt = $arRes["CNT"];
             }
         } else {
             // рнкэйн дкъ MYSQL!!! дкъ ORACLE дпсцни йнд
             $cnt = $dbRes->SelectedRowsCount();
         }
         $dbRes = new CDBResult();
         //echo "!2.3!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
     } else {
         if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) > 0) {
             $strSql .= "LIMIT " . intval($arNavStartParams["nTopCount"]);
         }
         //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     $dbRes = new CBPHistoryResult($dbRes, $this->useGZipCompression);
     return $dbRes;
 }
Example #9
0
 /**
  * Creates new workflow instance from the specified template.
  * 
  * @param int $workflowTemplateId - ID of the workflow template
  * @param string $documentId - ID of the document
  * @param mixed $workflowParameters - Optional parameters of the created workflow instance
  * @return CBPWorkflow
  */
 public function CreateWorkflow($workflowTemplateId, $documentId, $workflowParameters = array())
 {
     $workflowTemplateId = intval($workflowTemplateId);
     if ($workflowTemplateId <= 0) {
         throw new Exception("workflowTemplateId");
     }
     $arDocumentId = CBPHelper::ParseDocumentId($documentId);
     if (!$this->isStarted) {
         $this->StartRuntime();
     }
     $workflowId = uniqid("", true);
     $workflow = new CBPWorkflow($workflowId, $this);
     $loader = CBPWorkflowTemplateLoader::GetLoader();
     list($rootActivity, $workflowVariablesTypes, $workflowParametersTypes) = $loader->LoadWorkflow($workflowTemplateId);
     if ($rootActivity == null) {
         throw new Exception("EmptyRootActivity");
     }
     //if (!is_a($rootActivity, "IBPRootActivity"))
     //	throw new Exception("RootActivityIsNotAIBPRootActivity");
     $events = GetModuleEvents("bizproc", "OnCreateWorkflow");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array($workflowTemplateId, $documentId, &$workflowParameters));
     }
     $workflow->Initialize($rootActivity, $arDocumentId, $workflowParameters, $workflowVariablesTypes, $workflowParametersTypes);
     $starterUserId = 0;
     if (array_key_exists("TargetUser", $workflowParameters)) {
         $starterUserId = intval(substr($workflowParameters["TargetUser"], strlen("user_")));
     }
     $this->arServices["StateService"]->AddWorkflow($workflowId, $workflowTemplateId, $arDocumentId, $starterUserId);
     $this->arWorkflows[$workflowId] = $workflow;
     return $workflow;
 }
 public function GetTemplatesList($arOrder = array("ID" => "DESC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
 {
     global $DB;
     if (count($arSelectFields) <= 0) {
         $arSelectFields = array("ID", "MODULE_ID", "ENTITY", "DOCUMENT_TYPE", "AUTO_EXECUTE", "NAME", "DESCRIPTION", "TEMPLATE", "PARAMETERS", "VARIABLES", "CONSTANTS", "MODIFIED", "USER_ID", "ACTIVE", "IS_MODIFIED");
     }
     if (count(array_intersect($arSelectFields, array("MODULE_ID", "ENTITY", "DOCUMENT_TYPE"))) > 0) {
         if (!in_array("MODULE_ID", $arSelectFields)) {
             $arSelectFields[] = "MODULE_ID";
         }
         if (!in_array("ENTITY", $arSelectFields)) {
             $arSelectFields[] = "ENTITY";
         }
         if (!in_array("DOCUMENT_TYPE", $arSelectFields)) {
             $arSelectFields[] = "DOCUMENT_TYPE";
         }
     }
     if (array_key_exists("DOCUMENT_TYPE", $arFilter)) {
         $d = CBPHelper::ParseDocumentId($arFilter["DOCUMENT_TYPE"]);
         $arFilter["MODULE_ID"] = $d[0];
         $arFilter["ENTITY"] = $d[1];
         $arFilter["DOCUMENT_TYPE"] = $d[2];
     }
     if (array_key_exists("AUTO_EXECUTE", $arFilter)) {
         $arFilter["AUTO_EXECUTE"] = intval($arFilter["AUTO_EXECUTE"]);
         if ($arFilter["AUTO_EXECUTE"] == CBPDocumentEventType::None) {
             $arFilter["AUTO_EXECUTE"] = 0;
         } elseif ($arFilter["AUTO_EXECUTE"] == CBPDocumentEventType::Create) {
             $arFilter["AUTO_EXECUTE"] = array(1, 3, 5, 7);
         } elseif ($arFilter["AUTO_EXECUTE"] == CBPDocumentEventType::Edit) {
             $arFilter["AUTO_EXECUTE"] = array(2, 3, 6, 7);
         } elseif ($arFilter["AUTO_EXECUTE"] == CBPDocumentEventType::Delete) {
             $arFilter["AUTO_EXECUTE"] = array(4, 5, 6, 7);
         } else {
             $arFilter["AUTO_EXECUTE"] = array(-1);
         }
     }
     static $arFields = array("ID" => array("FIELD" => "T.ID", "TYPE" => "int"), "MODULE_ID" => array("FIELD" => "T.MODULE_ID", "TYPE" => "string"), "ENTITY" => array("FIELD" => "T.ENTITY", "TYPE" => "string"), "DOCUMENT_TYPE" => array("FIELD" => "T.DOCUMENT_TYPE", "TYPE" => "string"), "AUTO_EXECUTE" => array("FIELD" => "T.AUTO_EXECUTE", "TYPE" => "int"), "NAME" => array("FIELD" => "T.NAME", "TYPE" => "string"), "DESCRIPTION" => array("FIELD" => "T.DESCRIPTION", "TYPE" => "string"), "TEMPLATE" => array("FIELD" => "T.TEMPLATE", "TYPE" => "string"), "PARAMETERS" => array("FIELD" => "T.PARAMETERS", "TYPE" => "string"), "VARIABLES" => array("FIELD" => "T.VARIABLES", "TYPE" => "string"), "CONSTANTS" => array("FIELD" => "T.CONSTANTS", "TYPE" => "string"), "MODIFIED" => array("FIELD" => "T.MODIFIED", "TYPE" => "datetime"), "USER_ID" => array("FIELD" => "T.USER_ID", "TYPE" => "int"), "SYSTEM_CODE" => array("FIELD" => "T.SYSTEM_CODE", "TYPE" => "string"), "ACTIVE" => array("FIELD" => "T.ACTIVE", "TYPE" => "string"), "IS_MODIFIED" => array("FIELD" => "T.IS_MODIFIED", "TYPE" => "string"), "USER_NAME" => array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (T.USER_ID = U.ID)"), "USER_LAST_NAME" => array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (T.USER_ID = U.ID)"), "USER_SECOND_NAME" => array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (T.USER_ID = U.ID)"), "USER_LOGIN" => array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (T.USER_ID = U.ID)"));
     $arSqls = CBPHelper::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
     $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
     if (is_array($arGroupBy) && count($arGroupBy) == 0) {
         $strSql = "SELECT " . $arSqls["SELECT"] . " " . "FROM b_bp_workflow_template T " . "\t" . $arSqls["FROM"] . " ";
         if (strlen($arSqls["WHERE"]) > 0) {
             $strSql .= "WHERE " . $arSqls["WHERE"] . " ";
         }
         if (strlen($arSqls["GROUPBY"]) > 0) {
             $strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
         }
         //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($arRes = $dbRes->Fetch()) {
             return $arRes["CNT"];
         } else {
             return False;
         }
     }
     $strSql = "SELECT " . $arSqls["SELECT"] . " " . "FROM b_bp_workflow_template T " . "\t" . $arSqls["FROM"] . " ";
     if (strlen($arSqls["WHERE"]) > 0) {
         $strSql .= "WHERE " . $arSqls["WHERE"] . " ";
     }
     if (strlen($arSqls["GROUPBY"]) > 0) {
         $strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
     }
     if (strlen($arSqls["ORDERBY"]) > 0) {
         $strSql .= "ORDER BY " . $arSqls["ORDERBY"] . " ";
     }
     if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) <= 0) {
         $strSql_tmp = "SELECT COUNT('x') as CNT " . "FROM b_bp_workflow_template T " . "\t" . $arSqls["FROM"] . " ";
         if (strlen($arSqls["WHERE"]) > 0) {
             $strSql_tmp .= "WHERE " . $arSqls["WHERE"] . " ";
         }
         if (strlen($arSqls["GROUPBY"]) > 0) {
             $strSql_tmp .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
         }
         //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
         $dbRes = $DB->Query($strSql_tmp, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         $cnt = 0;
         if (strlen($arSqls["GROUPBY"]) <= 0) {
             if ($arRes = $dbRes->Fetch()) {
                 $cnt = $arRes["CNT"];
             }
         } else {
             // not for Oracle!
             $cnt = $dbRes->SelectedRowsCount();
         }
         $dbRes = new CDBResult();
         $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
     } else {
         if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) > 0) {
             $strSql .= "LIMIT " . intval($arNavStartParams["nTopCount"]);
         }
         //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     $dbRes = new CBPWorkflowTemplateResult($dbRes, $this->useGZipCompression);
     return $dbRes;
 }
Example #11
0
 public static function MergeStates($firstDocumentId, $secondDocumentId)
 {
     global $DB;
     $arFirstDocumentId = CBPHelper::ParseDocumentId($firstDocumentId);
     $arSecondDocumentId = CBPHelper::ParseDocumentId($secondDocumentId);
     $DB->Query("UPDATE b_bp_workflow_state SET " . "\tDOCUMENT_ID = '" . $DB->ForSql($arFirstDocumentId[2]) . "', " . "\tDOCUMENT_ID_INT = " . intval($arFirstDocumentId[2]) . ", " . "\tENTITY = '" . $DB->ForSql($arFirstDocumentId[1]) . "', " . "\tMODULE_ID = '" . $DB->ForSql($arFirstDocumentId[0]) . "' " . "WHERE DOCUMENT_ID = '" . $DB->ForSql($arSecondDocumentId[2]) . "' " . "\tAND ENTITY = '" . $DB->ForSql($arSecondDocumentId[1]) . "' " . "\tAND MODULE_ID = '" . $DB->ForSql($arSecondDocumentId[0]) . "' ");
 }
Example #12
0
 public static function MergeHistory($firstDocumentId, $secondDocumentId)
 {
     global $DB;
     $arFirstDocumentId = CBPHelper::ParseDocumentId($firstDocumentId);
     $arSecondDocumentId = CBPHelper::ParseDocumentId($secondDocumentId);
     $DB->Query("UPDATE b_bp_history SET " . "\tDOCUMENT_ID = '" . $DB->ForSql($arFirstDocumentId[2]) . "', " . "\tENTITY = '" . $DB->ForSql($arFirstDocumentId[1]) . "', " . "\tMODULE_ID = '" . $DB->ForSql($arFirstDocumentId[0]) . "' " . "WHERE DOCUMENT_ID = '" . $DB->ForSql($arSecondDocumentId[2]) . "' " . "\tAND ENTITY = '" . $DB->ForSql($arSecondDocumentId[1]) . "' " . "\tAND MODULE_ID = '" . $DB->ForSql($arSecondDocumentId[0]) . "' ");
 }
Example #13
0
	public static function GetAllowableUserGroups($parameterDocumentType)
	{
		list($moduleId, $entity, $documentType) = CBPHelper::ParseDocumentId($parameterDocumentType);

		if (strlen($moduleId) > 0)
			CModule::IncludeModule($moduleId);

		if (class_exists($entity))
		{
			$result = call_user_func_array(array($entity, "GetAllowableUserGroups"), array($documentType));
			$result1 = array();
			foreach ($result as $key => $value)
				$result1[strtolower($key)] = $value;
			return $result1;
		}

		return array();
	}
Example #14
0
 public static function MigrateDocumentType($oldType, $newType, $workflowTemplateIds)
 {
     global $DB;
     $arOldType = CBPHelper::ParseDocumentId($oldType);
     $arNewType = CBPHelper::ParseDocumentId($newType);
     $DB->Query("UPDATE b_bp_history SET " . "\tENTITY = '" . $DB->ForSql($arNewType[1]) . "', " . "\tMODULE_ID = '" . $DB->ForSql($arNewType[0]) . "' " . "WHERE ENTITY = '" . $DB->ForSql($arOldType[1]) . "' " . "\tAND MODULE_ID = '" . $DB->ForSql($arOldType[0]) . "' " . "\tAND DOCUMENT_ID IN (SELECT t.DOCUMENT_ID FROM b_bp_workflow_state t WHERE t.WORKFLOW_TEMPLATE_ID in (" . implode(",", $workflowTemplateIds) . ") and t.MODULE_ID='" . $DB->ForSql($arOldType[0]) . "' and t.ENTITY='" . $DB->ForSql($arOldType[1]) . "') ");
 }
 public function UpdateDocumentHistory($parameterDocumentId, $historyId)
 {
     $historyService = self::GetHistoryService();
     list($moduleId, $entity, $documentId) = CBPHelper::ParseDocumentId($parameterDocumentId);
     $result = false;
     if ($moduleId == 'webdav' && class_exists($entity)) {
         $doc = call_user_func_array(array($entity, "GetDocumentForHistory"), array($documentId, $historyId, true));
         $result = $historyService->UpdateHistory($historyId, array('DOCUMENT' => $doc));
     }
     return $result;
 }
Example #16
0
    }
    if ($processes) {
        if (isset($arVariables["mode"])) {
            switch ($arVariables["mode"]) {
                case "catalog":
                    if ($processes) {
                        $componentPage = "catalog_processes";
                    }
                    break;
            }
        }
    }
    $arResult = array("FOLDER" => "", "URL_TEMPLATES" => array("list_field_edit" => $APPLICATION->GetCurPage() . "?mode=field" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["field_id"] . "=#field_id#", "list_fields" => $APPLICATION->GetCurPage() . "?mode=fields" . "&" . $arVariableAliases["list_id"] . "=#list_id#", "list_edit" => $APPLICATION->GetCurPage() . "?mode=edit" . "&" . $arVariableAliases["list_id"] . "=#list_id#", "list_element_edit" => $APPLICATION->GetCurPage() . "?mode=edit" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#", "list_sections" => $APPLICATION->GetCurPage() . "?mode=edit" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#", "bizproc_log" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["document_state_id"] . "=#document_state_id#", "bizproc_task" => $APPLICATION->GetCurPage() . "?mode=bp&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["task_id"] . "=#task_id#", "bizproc_workflow_start" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#", "bizproc_workflow_delete" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#", "bizproc_workflow_admin" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#", "bizproc_workflow_edit" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["ID"] . "=#ID#", "bizproc_workflow_vars" => $APPLICATION->GetCurPage() . "?mode=bp_vars" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["ID"] . "=#ID#", "bizproc_workflow_constants" => $APPLICATION->GetCurPage() . "?mode=bp_constants" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["ID"] . "=#ID#", "list_file" => $APPLICATION->GetCurPage() . "?mode=view" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#" . "&" . $arVariableAliases["field_id"] . "=#field_id#" . "&" . $arVariableAliases["file_id"] . "=#file_id#", "list" => $APPLICATION->GetCurPage() . "?mode=view" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#", "lists" => $APPLICATION->GetCurPage()), "VARIABLES" => $arVariables, "ALIASES" => $arVariableAliases);
    if ($processes) {
        $arResult["URL_TEMPLATES"]["catalog_processes"] = $APPLICATION->GetCurPage() . "?mode=catalog";
    }
}
$p = strpos($arResult["URL_TEMPLATES"]["bizproc_workflow_delete"], "?");
if ($p === false) {
    $ch = "?";
} else {
    $ch = "&";
}
$arResult["URL_TEMPLATES"]["bizproc_workflow_delete"] .= $ch . "action=del_bizproc";
if (isset($arVariables["document_state_id"]) && !isset($arVariables["element_id"]) && CModule::IncludeModule("bizproc")) {
    $arWorkflowState = CBPStateService::GetWorkflowState($arVariables["document_state_id"]);
    if (is_array($arWorkflowState) && is_array($arWorkflowState["DOCUMENT_ID"])) {
        list(, , $arResult["VARIABLES"]["element_id"]) = CBPHelper::ParseDocumentId($arWorkflowState["DOCUMENT_ID"]);
    }
}
$this->IncludeComponentTemplate($componentPage);