%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/activities/bitrix/foreachactivity/ |
Current File : //home/bitrix/www/bitrix/activities/bitrix/foreachactivity/foreachactivity.php |
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); class CBPForEachActivity extends CBPCompositeActivity implements IBPActivityEventListener { private $values; private $valuesKeys; public function __construct($name) { parent::__construct($name); $this->arProperties = [ 'Title' => '', 'Variable' => null, //return 'Key' => null, 'Value' => null ]; } public function Execute() { if ($this->TryNextIteration()) { return CBPActivityExecutionStatus::Executing; } return CBPActivityExecutionStatus::Closed; } public function Cancel() { if (count($this->arActivities) == 0) return CBPActivityExecutionStatus::Closed; $activity = $this->arActivities[0]; if ($activity->executionStatus == CBPActivityExecutionStatus::Executing) $this->workflow->CancelActivity($activity); return CBPActivityExecutionStatus::Canceling; } public function OnEvent(CBPActivity $sender, $arEventParameters = array()) { if ($sender == null) throw new Exception("sender"); $sender->RemoveStatusChangeHandler(self::ClosedEvent, $this); if (!$this->TryNextIteration()) $this->workflow->CloseActivity($this); } private function TryNextIteration() { if (($this->executionStatus == CBPActivityExecutionStatus::Canceling) || ($this->executionStatus == CBPActivityExecutionStatus::Faulting)) { return false; } if ($this->values === null) { $this->values = []; $variableValues = $this->GetVariable($this->Variable); if ($variableValues) { $this->values = (array) $variableValues; $this->valuesKeys = array_keys($this->values); $varType = $this->getVariableType($this->Variable); if ($varType && isset($varType['Type'])) { $this->SetPropertiesTypes(['Value' => ['Type' => $varType['Type']]]); } } } if (!count($this->values)) { return false; } $this->Key = array_shift($this->valuesKeys);; $this->Value = array_shift($this->values); if (count($this->arActivities) > 0) { $activity = $this->arActivities[0]; $activity->ReInitialize(); $activity->AddStatusChangeHandler(self::ClosedEvent, $this); $this->workflow->ExecuteActivity($activity); } return true; } protected function ReInitialize() { parent::ReInitialize(); $this->values = null; $this->Key = null; $this->Value = null; } public static function GetPropertiesDialog($documentType, $activityName, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues = null, $formName = "") { if (!is_array($arWorkflowVariables)) $arWorkflowVariables = array(); $runtime = CBPRuntime::GetRuntime(); if (!is_array($arCurrentValues)) { $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName); if (is_array($arCurrentActivity["Properties"])) { $arCurrentValues = [ 'variable' => $arCurrentActivity["Properties"]['Variable'] ]; } } if (!is_array($arCurrentValues)) { $arCurrentValues = ['variable' => null]; } return $runtime->ExecuteResourceFile( __FILE__, "properties_dialog.php", array( "arCurrentValues" => $arCurrentValues, 'workflowVariables' => $arWorkflowVariables ) ); } public static function ValidateProperties($arTestProperties = array(), CBPWorkflowTemplateUser $user = null) { $errors = []; if (strlen($arTestProperties["Variable"]) <= 0) { $errors[] = array( "code" => "emptyVariable", "message" => GetMessage("BPFEA_NO_VARIABLE"), ); } return array_merge($errors, parent::ValidateProperties($arTestProperties, $user)); } public static function GetPropertiesDialogValues($documentType, $activityName, &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables, $arCurrentValues, &$arErrors) { if (!is_array($arWorkflowVariables)) { $arWorkflowVariables = []; } $properties = array( "Variable" => $arCurrentValues["variable"] && array_key_exists($arCurrentValues["variable"], $arWorkflowVariables) ? $arCurrentValues["variable"] : null ); if ($arErrors = self::ValidateProperties($properties, new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser))) { return false; } $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName); $arCurrentActivity["Properties"] = $properties; return true; } }