• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/integration/recyclebin/task.php
  • Класс: BitrixTasksIntegrationRecyclebinTask
  • Вызов: Task::removeFromRecyclebin
static function removeFromRecyclebin(Entity $entity, array $params = [])
	{
		global $USER_FIELD_MANAGER;

		$result = new Result;

		$taskData = null;
		foreach ($entity->getData() as $data)
		{
			if (
				is_array($data)
				&& array_key_exists('ACTION', $data)
				&& $data['ACTION'] === 'TASK'
			)
			{
				$taskData = unserialize($data['DATA'], ['allowed_classes' => ['BitrixTasksUtilTypeDateTime', 'BitrixMainTypeDateTime', 'DateTime']]);
			}
		}

		try
		{
			$taskId = $entity->getEntityId();
			$tablesToClear = [
				ViewedTable::class => ['TASK_ID', 'USER_ID'],
				ParameterTable::class => ['ID'],
				SearchIndexTable::class => ['ID']
			];

			CTaskFiles::DeleteByTaskID($taskId);
			CTaskTags::DeleteByTaskID($taskId);
			CTaskReminders::DeleteByTaskID($taskId);
			FavoriteTable::deleteByTaskId($taskId, ['LOW_LEVEL' => true]);
			SortingTable::deleteByTaskId($taskId);
			UserOption::deleteByTaskId($taskId);
			TaskStageTable::clearTask($taskId);
			TaskCheckListFacade::deleteByEntityIdOnLowLevel($taskId);

			foreach ($tablesToClear as $table => $select)
			{
				/** @var BitrixMainORMQueryResult $tableResult */
				$tableResult = $table::getList([
					"select" => $select,
					"filter" => [
						"=TASK_ID" => $taskId,
					],
				]);

				while ($item = $tableResult->fetch())
				{
					$table::delete($item);
				}
			}

			if ($taskData)
			{
				IntegrationForumTaskTopic::delete($taskData["FORUM_TOPIC_ID"]);
			}

			IntegrationIMInternalsLinkTask::delete($taskId);

			$USER_FIELD_MANAGER->Delete('TASKS_TASK', $taskId);

			ItemTable::deleteBySourceId($taskId);

			TaskTable::delete($taskId);
		}
		catch (Exception $e)
		{
			$result->addError(new Error($e->getMessage(), $e->getCode()));
		}

		IntegrationSocialNetworkLog::deleteLogByTaskId($taskId);

		return $result;
	}