- Модуль: clouds
- Путь к файлу: ~/bitrix/modules/clouds/classes/general/filehash.php
- Класс: CCloudFileHash
- Вызов: CCloudFileHash::setFileHashAgent
static function setFileHashAgent($bucket_id, $last_file_id, $step_size = 1000)
{
global $DB;
$bucket_id = intval($bucket_id);
$last_file_id = intval($last_file_id);
$step_size = intval($step_size);
if ($step_size <= 0)
{
$step_size = 1000;
}
$rs = $DB->Query("
select f.ID, concat(f.SUBDIR, '/', f.FILE_NAME) FILE_PATH, f.FILE_SIZE
from b_file f
LEFT JOIN b_file_hash h on h.FILE_ID = f.ID
where f.HANDLER_ID = $bucket_id
and h.FILE_ID is null
and f.ID > $last_file_id
ORDER BY f.ID
limit $step_size
");
$files = array();
while ($ar = $rs->Fetch())
{
$files[$ar["FILE_PATH"]] = $ar["ID"];
$last_file_id = $ar["ID"];
}
if (!$files)
{
return '';
}
$rs = BitrixCloudsFileHashTable::getList(array(
"filter" => array(
"=BUCKET_ID" => $bucket_id,
"=FILE_PATH" => array_keys($files),
),
));
$values = array();
while ($ar = $rs->fetch())
{
if (isset($files[$ar["FILE_PATH"]]))
{
$file_id = intval($files[$ar["FILE_PATH"]]);
$file_size = intval($ar["FILE_SIZE"]);
$file_hash = $DB->ForSql($ar["FILE_HASH"]);
$values[] = "($file_id,$file_size,'$file_hash')";
}
}
if ($values)
{
$DB->Query("
INSERT INTO b_file_hash
(FILE_ID, FILE_SIZE, FILE_HASH)
values
".implode(",n", $values)."
ON DUPLICATE KEY UPDATE
FILE_SIZE=values(FILE_SIZE), FILE_HASH=values(FILE_HASH)
");
}
return "CCloudFileHash::setFileHashAgent($bucket_id, $last_file_id, $step_size);";
}