- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/agent.php
- Класс: BitrixLandingAgent
- Вызов: Agent::checkFileExists
static function checkFileExists(int $fileId): string
{
$file = CFile::getFileArray($fileId);
if (!$file)
{
return '';
}
if (!$file['SRC'] || !preg_match('#^(https?://)#', $file['SRC']))
{
return '';
}
$request = new HttpClient(["redirect" => false,]);
$request->query(HttpClient::HTTP_HEAD, $file['SRC']);
if ($request->getStatus() !== 200)
{
$filesToDelete = [$fileId];
// find duplicates of file
$originals = FileDuplicateTable::getList([
'select' => ['ORIGINAL_ID'],
'filter' => [
'DUPLICATE_ID' => $fileId,
],
]);
while ($original = $originals->fetch())
{
$filesToDelete[] = (int)$original['ORIGINAL_ID'];
}
$duplicates = FileDuplicateTable::getList([
'select' => ['DUPLICATE_ID'],
'filter' => [
'ORIGINAL_ID' => $filesToDelete,
],
]);
while ($duplicate = $duplicates->fetch())
{
$filesToDelete[] = (int)$duplicate['DUPLICATE_ID'];
}
$filesToDelete = array_unique($filesToDelete);
// clear LandingFile table
$landingFiles = FileTable::getList([
'select' => ['ID', 'ENTITY_ID'],
'filter' => [
'ENTITY_TYPE' => File::ENTITY_TYPE_ASSET,
'=FILE_ID' => $filesToDelete,
],
]);
$landingsToUpdate = [];
while ($landingFile = $landingFiles->fetch())
{
FileTable::delete((int)$landingFile['ID']);
$landingsToUpdate[] = (int)$landingFile['ENTITY_ID'];
}
$landingsToUpdate = array_unique($landingsToUpdate);
// find landings for drop public cache
if (Manager::isB24())
{
$sites = Landing::getList([
'select' => ['SITE_ID'],
'filter' => [
'=ID' => $landingsToUpdate,
],
]);
while ($site = $sites->fetch())
{
Site::update((int)$site['SITE_ID'], []);
}
}
foreach ($filesToDelete as $fileToDelete)
{
CFile::delete($fileToDelete);
}
}
return '';
}