• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/integration/recyclebin/task.php
  • Класс: BitrixTasksIntegrationRecyclebinTask
  • Вызов: Task::restoreAdditionalData
static function restoreAdditionalData($taskId, $value)
	{
		$data = unserialize($value['DATA'], ['allowed_classes' => ['BitrixTasksUtilTypeDateTime', 'BitrixMainTypeDateTime', 'DateTime']]);
		$action = $value['ACTION'];

		$result = new Result();

		try
		{
			$map = [
				'MEMBERS' => [
					'VALUE' => 'TASK_ID',
					'CLASS' => CTaskMembers::class
				],
				'DEPENDENCE_TASK' => [
					'VALUE' => 'TASK_ID',
					'CLASS' => CTaskDependence::class
				],
				'DEPENDENCE_ON' => [
					'VALUE' => 'DEPENDS_ON_ID',
					'CLASS' => CTaskDependence::class
				],
				'REMINDERS' => [
					'VALUE' => '',
					'CLASS' => CTaskReminders::class
				]
			];

			switch ($action)
			{
				case 'TASK':
					TaskTable::insert($data);
					break;
				case 'STAGES':
					foreach ($data as $value)
					{
						if (StagesTable::getById($value['STAGE_ID'])->fetch())
						{
							StagesTable::pinInTheStage($taskId, $value['STAGE_ID']);
						}
						else
						{
							StagesTable::pinInStage($taskId);
						}
					}
					break;

				case 'MEMBERS':
				case 'REMINDERS':
				case 'DEPENDENCE_ON':
				case 'DEPENDENCE_TASK':
					foreach ($data as $value)
					{
						$currentMap = $map[$action];

						if ($currentMap['VALUE'])
						{
							$value[$currentMap['VALUE']] = $taskId;
						}

						$class = new $currentMap['CLASS'];
						$class->Add($value);
					}
					break;

				case 'ACTIVITIES':
					if (CModule::IncludeModule('crm'))
					{
						foreach ($data as $value)
						{
							CCrmActivity::Add($value);
						}
					}
					break;

				case 'TEMPLATES':
					$connection = Application::getConnection();

					foreach ($data as $templateId)
					{
						$connection->queryExecute('UPDATE b_tasks_template SET TASK_ID = ' . $taskId . ' WHERE ID = ' . $templateId);
					}

					break;

				case 'PARENT_DEPENDENCIES':
					$parentId = $data['PARENT_ID'];
					$connection = Application::getConnection();

					foreach ($data['SUBTASKS'] as $subTaskId)
					{
						$filter = [
							'ID' => $subTaskId,
							'PARENT_ID' => $parentId
						];

						if (CTasks::GetList([], $filter, ['ID'])->Fetch())
						{
							$connection->queryExecute('UPDATE b_tasks SET PARENT_ID = ' . $taskId . ' WHERE ID = ' . $subTaskId);
							Dependence::attach($subTaskId, $taskId);
						}
					}

					if ($parentId && CTasks::GetList([], ['ID' => $parentId], ['ID'])->Fetch())
					{
						Dependence::attach($taskId, $parentId);
					}
					break;

				case 'TAGS':
					$tagService = new Tag(CurrentUser::get()->getId());
					$tagService->linkTags($taskId, $data);
					break;

				case 'SCENARIO':
					ScenarioTable::insertIgnore($taskId, $data);
					break;

				case 'SUBTASK_IDS':
					$subtaskIds = array_map('intval', $data);

					if (empty($subtaskIds))
					{
						break;
					}

					$registry = TaskRegistry::getInstance();
					$registry->load($subtaskIds);

					foreach ($subtaskIds as $subtaskId)
					{
						$task = $registry->get($subtaskId);
						if (is_null($task))
						{
							continue;
						}

						$result = Dependence::attach($subtaskId, $taskId);
						if (!$result->isSuccess())
						{
							continue;
						}

						TaskTable::update($subtaskId, [
							'PARENT_ID' => $taskId,
						]);
					}
					break;
			}
		}
		catch (Exception $e)
		{
			$result->addError(new Error($e->getMessage(), $e->getCode()));
		}

		return $result;
	}