Your IP : 18.191.251.36


Current Path : /var/www/axolotl/data/www/arhangelsk.axolotls.ru/a537b/
Upload File :
Current File : /var/www/axolotl/data/www/arhangelsk.axolotls.ru/a537b/whileactivity.tar

whileactivity.php000064400000013072147735110370010155 0ustar00<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

class CBPWhileActivity
	extends CBPCompositeActivity
	implements IBPActivityEventListener
{
	public function __construct($name)
	{
		parent::__construct($name);
		$this->arProperties = array("Title" => "", "Condition" => null);
	}

	protected function GetACNames()
	{
		$ar = parent::GetACNames();
		if ($this->arProperties["Condition"] != null)
			$ar[] = substr(get_class($this->arProperties["Condition"]), 3);
		return $ar;
	}

	public function InitializeFromArray($arParams)
	{
		if (is_array($arParams))
		{
			foreach ($arParams as $key => $value)
			{
				$this->arProperties["Condition"] = $this->CreateCondition($key, $value);
				if ($this->arProperties["Condition"] != null)
					break;
			}
			if ($this->arProperties["Condition"] == null)
				throw new Exception(GetMessage("BPWA_NO_CONDITION"));
		}
	}

	private function CreateCondition($conditionCode, $data)
	{
		$runtime = CBPRuntime::GetRuntime();
		if ($runtime->IncludeActivityFile($conditionCode))
			return CBPActivityCondition::CreateInstance($conditionCode, $data);
		else
			return 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->Condition->Evaluate($this))
			return false;

		if (count($this->arActivities) > 0)
		{
			$activity = $this->arActivities[0];
			$activity->ReInitialize();
			$activity->AddStatusChangeHandler(self::ClosedEvent, $this);
			$this->workflow->ExecuteActivity($activity);
		}
		return true;
	}

	public static function GetPropertiesDialog($documentType, $activityName, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues = null, $formName = "")
	{
		if (!is_array($arWorkflowParameters))
			$arWorkflowParameters = array();
		if (!is_array($arWorkflowVariables))
			$arWorkflowVariables = array();

		$runtime = CBPRuntime::GetRuntime();
		$arActivities = $runtime->SearchActivitiesByType("condition");

		$defaultCondition = "";
		$defaultConditionValue = null;
		if (!is_array($arCurrentValues))
		{
			$arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
			if (is_array($arCurrentActivity["Properties"]))
			{
				foreach ($arCurrentActivity["Properties"] as $key => $value)
				{
					if (array_key_exists($key, $arActivities))
					{
						$defaultCondition = $key;
						$defaultConditionValue = $value;
						break;
					}
				}
			}
		}

		$firstConditionType = "";
		$arActivityKeys = array_keys($arActivities);
		foreach ($arActivityKeys as $activityKey)
		{
			$runtime->IncludeActivityFile($activityKey);
			$v = CBPActivityCondition::CallStaticMethod(
				$activityKey,
				"GetPropertiesDialog",
				array($documentType, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, (($defaultCondition == $activityKey) ? $defaultConditionValue : null), $arCurrentValues, $formName)
			);
			if ($v == null)
			{
				unset($arActivities[$activityKey]);
				continue;
			}

			$arActivities[$activityKey]["PROPERTIES_DIALOG"] = $v;
			if (strlen($firstConditionType) <= 0)
				$firstConditionType = $activityKey;
		}

		if (!is_array($arCurrentValues))
			$arCurrentValues = array("condition_type" => $defaultCondition);

		return $runtime->ExecuteResourceFile(
			__FILE__,
			"properties_dialog.php",
			array(
				"arActivities" => $arActivities,
				"arCurrentValues" => $arCurrentValues,
				"firstConditionType" => $firstConditionType
			)
		);
	}

	public static function GetPropertiesDialogValues($documentType, $activityName, &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables, $arCurrentValues, &$arErrors)
	{
		$runtime = CBPRuntime::GetRuntime();
		$arActivities = $runtime->SearchActivitiesByType("condition");

		if (!array_key_exists($arCurrentValues["condition_type"], $arActivities))
		{
			$arErrors[] = array(
				"code" => "",
				"message" => GetMessage("BPWA_INVALID_CONDITION_TYPE"),
			);
			return false;
		}

		$condition = CBPActivityCondition::CallStaticMethod(
			$arCurrentValues["condition_type"],
			"GetPropertiesDialogValues",
			array($documentType, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues, &$arErrors)
		);

		if ($condition != null)
		{
			$arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
			if (!is_array($arCurrentActivity["Properties"]))
				$arCurrentActivity["Properties"] = array();

			$arCurrentActivity["Properties"][$arCurrentValues["condition_type"]] = $condition;

			return true;
		}

		return false;
	}
}
?>lang/en/whileactivity.php000064400000000214147735110370011472 0ustar00<?
$MESS ['BPWA_NO_CONDITION'] = "The condition is missing.";
$MESS ['BPWA_INVALID_CONDITION_TYPE'] = "The condition type is not found.";
?>lang/en/properties_dialog.php000064400000000060147735110370012317 0ustar00<?
$MESS ['BPWA_PD_TYPE'] = "Condition Type";
?>lang/en/.description.php000064400000000202147735110370011203 0ustar00<?
$MESS ['BPWA_DESCR_DESCR'] = "Executes subactivities until the condition is true";
$MESS ['BPWA_DESCR_NAME'] = "While Loop";
?>lang/ru/whileactivity.php000064400000000234147735110370011520 0ustar00<?
$MESS ['BPWA_NO_CONDITION'] = "Условие не найдено";
$MESS ['BPWA_INVALID_CONDITION_TYPE'] = "Тип условия не найден";
?>lang/ru/properties_dialog.php000064400000000067147735110370012352 0ustar00<?
$MESS ['BPWA_PD_TYPE'] = "Тип условия";
?>lang/ru/.description.php000064400000000324147735110370011234 0ustar00<?
$MESS ['BPWA_DESCR_DESCR'] = "Выполняет свои поддействия до тех пор, пока выполняется заданное условие";
$MESS ['BPWA_DESCR_NAME'] = "Цикл";
?>lang/de/whileactivity.php000064400000000234147735110370011462 0ustar00<?
$MESS ['BPWA_NO_CONDITION'] = "Die Bedingung ist nicht vorhanden.";
$MESS ['BPWA_INVALID_CONDITION_TYPE'] = "Der Bedingungstyp wurde nicht gefunden.";
?>lang/de/properties_dialog.php000064400000000057147735110370012313 0ustar00<?
$MESS ['BPWA_PD_TYPE'] = "Bedingungstyp";
?>lang/de/.description.php000064400000000220147735110370011171 0ustar00<?
$MESS ['BPWA_DESCR_DESCR'] = "Führt untergeordnete Aktivitäten aus, bis die Bedingung zutrifft";
$MESS ['BPWA_DESCR_NAME'] = "Schleife";
?>