• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/volume/cleaner.php
  • Класс: BitrixDiskVolumeCleaner
  • Вызов: Cleaner::addWorker
static function addWorker(array $params = []): bool
{
	$ownerId = (int)($params['ownerId'] ?? 0);

	if (!empty($params))
	{
		$filterId = (int)($params['filterId'] ?? 0);

		$task = new VolumeTask();
		if ($filterId > 0)
		{
			if (!$task->loadTaskById($filterId, $ownerId))
			{
				return false;
			}
			$ownerId = $task->getOwnerId();
		}

		$task->setStatus(VolumeTask::TASK_STATUS_WAIT);

		$subTaskCommands = [
			VolumeTask::DROP_UNNECESSARY_VERSION,
			VolumeTask::DROP_TRASHCAN,
			VolumeTask::DROP_FOLDER,
			VolumeTask::EMPTY_FOLDER,
		];
		foreach ($subTaskCommands as $command)
		{
			if (isset($params[$command]))
			{
				$task->setStatusSubTask(
					$command,
					(($params[$command] === true) ? VolumeTask::TASK_STATUS_WAIT : VolumeTask::TASK_STATUS_NONE)
				);
			}
		}

		if ($filterId > 0)
		{
			if (isset($params['manual']))
			{
				$task->resetFail();
			}
		}
		else
		{
			$task->setIndicatorType(VolumeStorageStorage::className());
			$task->setParam('STORAGE_ID', (int)$params['storageId']);
			$task->setOwnerId($ownerId);
		}
		$task->fixState();
	}

	if ($ownerId > 0)
	{
		// count statistic for progress bar
		self::countWorker($ownerId);
	}

	$nextExecutionTime = '';
	if (!empty($params['delay']) && (int)$params['delay'] > 0)
	{
		$nextExecutionTime = ConvertTimeStamp(time() + CTimeZone::getOffset() + (int)$params['delay'], "FULL");
	}

	$agentAdded = true;
	$agents = CAgent::getList(
		['ID' => 'DESC'],
		['=NAME' => static::agentName()]
	);
	if (!$agents->fetch())
	{
		$agentAdded = (bool)(CAgent::addAgent(
			static::agentName(),
			'disk',
			(self::canAgentUseCrontab() ? 'N' : 'Y'),
			self::AGENT_INTERVAL,
			'',
			'Y',
			$nextExecutionTime
		) !== false);
	}

	return $agentAdded;
}