403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/ilovecveti.ru/bitrix/activities/bitrix/listenactivity/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/activities/bitrix/listenactivity/listenactivity.php
<?php

use Bitrix\Main\Localization\Loc;

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
	die();
}

class CBPListenActivity extends CBPCompositeActivity implements IBPActivityEventListener
{
	public $isListenTrigerred = false;
	public $arActivityState = [];

	public function __construct($name)
	{
		parent::__construct($name);
		$this->arProperties = ['Title' => ''];
	}

	protected function reInitialize()
	{
		parent::reInitialize();

		$this->isListenTrigerred = false;
		$this->arActivityState = [];
	}

	public function ToString()
	{
		return $this->name.
			" [".get_class($this)."] (status=".
			CBPActivityExecutionStatus::Out($this->executionStatus).
			", count(arActivityState)=".
			count($this->arActivityState).
			")";
	}

	public function execute()
	{
		for ($i = 0, $s = count($this->arActivities); $i < $s; $i++)
		{
			/** @var CBPEventDrivenActivity $eventDriven */
			$eventDriven = $this->arActivities[$i];

			$activity = $eventDriven->getEventActivity();
			if ($activity === null)
			{
				continue;
			}

			$l = new CBPListenEventActivitySubscriber($eventDriven);
			$this->arActivityState[] = $l;

			$activity->Subscribe($l);
		}

		return CBPActivityExecutionStatus::Executing;
	}

	public function onEvent(CBPActivity $sender, $arEventParameters = [])
	{
		$sender->removeStatusChangeHandler(self::ClosedEvent, $this);
		$this->workflow->closeActivity($this);
	}

	public function cancel()
	{
		if (count($this->arActivityState) > 0)
		{
			if ($this->isListenTrigerred)
			{
				for ($i = 0, $s = count($this->arActivities); $i < $s; $i++)
				{
					$activity = $this->arActivities[$i];
					if ($activity->executionStatus == CBPActivityExecutionStatus::Executing)
					{
						$this->workflow->cancelActivity($activity);

						return CBPActivityExecutionStatus::Canceling;
					}
					if ($activity->executionStatus == CBPActivityExecutionStatus::Faulting)
					{
						return CBPActivityExecutionStatus::Canceling;
					}
				}
			}
			else
			{
				for ($i = 0, $s = count($this->arActivities); $i < $s; $i++)
				{
					$activity = $this->arActivities[$i];
					$eventHandler = $this->arActivityState[$i];

					$activity2 = $activity->GetEventActivity();
					if ($activity2 && $eventHandler)
					{
						$activity2->Unsubscribe($eventHandler);
					}
				}
			}
			$this->arActivityState = [];
		}

		return CBPActivityExecutionStatus::Closed;
	}

	public static function validateChild($childActivity, $bFirstChild = false)
	{
		$arErrors = [];

		$child = 'CBP' . $childActivity;

		$bCorrect = false;
		while ($child != '')
		{
			if ($child == 'CBPEventDrivenActivity')
			{
				$bCorrect = true;
				break;
			}
			$child = get_parent_class($child);
		}

		if (!$bCorrect)
		{
			$arErrors[] = ['code' => 'WrongChildType', 'message' => Loc::getMessage('BPLA_INVALID_ACTIVITY_1')];
		}

		return array_merge($arErrors, parent::validateChild($childActivity, $bFirstChild));
	}

	public static function GetPropertiesDialog(
		$documentType,
		$activityName,
		$arWorkflowTemplate,
		$arWorkflowParameters,
		$arWorkflowVariables,
		$arCurrentValues = null,
		$formName = ''
	)
	{
	}

	public static function GetPropertiesDialogValues(
		$documentType,
		$activityName,
		&$arWorkflowTemplate,
		&$arWorkflowParameters,
		&$arWorkflowVariables,
		$arCurrentValues,
		&$arErrors
	)
	{
		return true;
	}
}

final class CBPListenEventActivitySubscriber implements IBPActivityExternalEventListener
{
	private $eventDrivenActivity;

	public function __construct(CBPEventDrivenActivity $eventDriven)
	{
		$this->eventDrivenActivity = $eventDriven;
	}

	public function ToString()
	{
		return 'eventDrivenActivity = ' . $this->eventDrivenActivity->ToString();
	}

	public function onExternalEvent($arEventParameters = array())
	{
		$listenActivity = $this->eventDrivenActivity->parent;

		$firedActivity = $this->eventDrivenActivity->GetEventActivity();

		if (
			method_exists($firedActivity, 'OnExternalDrivenEvent')
			&&
			$firedActivity->OnExternalDrivenEvent($arEventParameters) !== true
		)
		{
			return;
		}

		if (
			!$listenActivity->isListenTrigerred
			&& ($listenActivity->executionStatus != CBPActivityExecutionStatus::Canceling)
			&& ($listenActivity->executionStatus != CBPActivityExecutionStatus::Closed)
		)
		{
			$listenActivity->isListenTrigerred = true;

			$arActivities = $listenActivity->CollectNestedActivities();
			for ($i = 0, $s = count($arActivities); $i < $s; $i++)
			{
				$activity2 = $arActivities[$i];
				$parentEventHandler = $listenActivity->arActivityState[$i];

				$activity3 = $activity2->GetEventActivity();
				if ($activity3 && $parentEventHandler)
				{
					$activity3->Unsubscribe($parentEventHandler);
				}
			}

			$this->eventDrivenActivity->addStatusChangeHandler(CBPListenActivity::ClosedEvent, $listenActivity);
			$listenActivity->workflow->ExecuteActivity($this->eventDrivenActivity);
		}
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit