- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/update/callbackgroundfolderrights.php
- Класс: BitrixImUpdateCallBackgroundFolderRights
- Вызов: CallBackgroundFolderRights::execute
public function execute(array &$option)
{
$stepResult = Stepper::FINISH_EXECUTION;
if (!BitrixMainLoader::includeModule('disk'))
{
return $stepResult;
}
$storageId = (int)Option::get('im', 'disk_storage_id', 0);
if ($storageId <= 0)
{
return $stepResult;
}
$topFolder = BitrixDiskInternalsFolderTable::getRow([
'select' => ['ID'],
'filter' => [
'=STORAGE_ID' => $storageId,
'=TYPE' => BitrixDiskInternalsFolderTable::TYPE_FOLDER,
'=CODE' => 'CALL_BACKGROUND',
]
]);
if (!$topFolder || (int)$topFolder['ID'] <= 0)
{
return $stepResult;
}
$topFolderId = (int)$topFolder['ID'];
$stepVars = Option::get(self::$moduleId, self::OPTION_NAME, '');
$stepVars = ($stepVars !== "" ? @unserialize($stepVars, ['allowed_classes' => false]) : []);
$stepVars = (is_array($stepVars) ? $stepVars : []);
$filter = [
'=STORAGE_ID' => $storageId,
'=TYPE' => BitrixDiskInternalsFolderTable::TYPE_FOLDER,
'=PARENT_ID' => $topFolderId,
'CODE' => 'CALL_BACKGROUND_%',
];
if (empty($stepVars))
{
$stepVars = [
'lastId' => 0,
'number' => 0,
'count' => (int)BitrixDiskInternalsFolderTable::getCount($filter),
];
}
if ($stepVars['count'] > 0)
{
$option['progress'] = 1;
$option['steps'] = '';
$option['count'] = $stepVars['count'];
$filter['>ID'] = $stepVars['lastId'];
$diskRightsManager = BitrixDiskDriver::getInstance()->getRightsManager();
$accessTaskFull = $diskRightsManager->getTaskIdByName(BitrixDiskRightsManager::TASK_FULL);
$cursor = BitrixDiskFolder::getList([
'select' => ['ID', 'CREATED_BY'],
'filter' => $filter,
'order' => ['ID' => 'ASC'],
'limit' => self::LIMIT,
]);
$found = false;
foreach ($cursor as $row)
{
$folder = BitrixDiskFolder::loadById((int)$row['ID']);
if ($folder instanceof BitrixDiskFolder)
{
$diskRightsManager->append(
$folder,
[
[
'ACCESS_CODE' => 'U'. (int)$row['CREATED_BY'],
'TASK_ID' => $accessTaskFull,
]
]
);
}
$stepVars['number'] ++;
$stepVars['lastId'] = (int)$row['ID'];
$found = true;
}
if ($found)
{
Option::set(self::$moduleId, self::OPTION_NAME, serialize($stepVars));
$stepResult = Stepper::CONTINUE_EXECUTION;
}
else
{
Option::delete(self::$moduleId, ["name" => self::OPTION_NAME]);
}
$option['progress'] = round($stepVars['number'] * 100 / $stepVars['count']);
$option['steps'] = $stepVars['number'];
}
elseif ($stepVars['count'] == 0)
{
Option::delete(self::$moduleId, ["name" => self::OPTION_NAME]);
}
return $stepResult;
}