- Модуль: 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;
}