- Модуль: highloadblock
- Путь к файлу: ~/bitrix/modules/highloadblock/lib/highloadblocktable.php
- Класс: BitrixHighloadblockHighloadBlockTable
- Вызов: HighloadBlockTable::delete
static function delete($primary)
{
global $USER_FIELD_MANAGER;
// get old data
$hlblock = static::getByPrimary($primary)->fetch();
// remove row
$result = parent::delete($primary);
if (!$result->isSuccess(true))
{
return $result;
}
// get file fields
$file_fields = array();
/** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */
$fields = $USER_FIELD_MANAGER->getUserFields(static::compileEntityId($hlblock['ID']));
foreach ($fields as $name => $field)
{
if ($field['USER_TYPE']['BASE_TYPE'] === 'file')
{
$file_fields[] = $name;
}
}
// delete files
if (!empty($file_fields))
{
$oldEntity = static::compileEntity($hlblock);
$query = new EntityQuery($oldEntity);
// select file ids
$query->setSelect($file_fields);
// if they are not empty
$filter = array('LOGIC' => 'OR');
foreach ($file_fields as $file_field)
{
$filter['!'.$file_field] = false;
}
$query->setFilter($filter);
// go
$iterator = $query->exec();
while ($row = $iterator->fetch())
{
foreach ($file_fields as $file_field)
{
if (!empty($row[$file_field]))
{
if (is_array($row[$file_field]))
{
foreach ($row[$file_field] as $value)
{
CFile::delete($value);
}
}
else
{
CFile::delete($row[$file_field]);
}
}
}
}
unset($row, $iterator);
}
$connection = Application::getConnection();
foreach ($fields as $field)
{
// delete from uf registry
if ($field['USER_TYPE']['BASE_TYPE'] === 'enum')
{
$enumField = new CUserFieldEnum;
$enumField->DeleteFieldEnum($field['ID']);
}
$connection->query("DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = ".$field['ID']);
$connection->query("DELETE FROM b_user_field WHERE ID = ".$field['ID']);
// if multiple - drop utm table
if ($field['MULTIPLE'] == 'Y')
{
$utmTableName = static::getMultipleValueTableName($hlblock, $field);
$connection->dropTable($utmTableName);
}
}
// clear uf cache
$managedCache = Application::getInstance()->getManagedCache();
if(CACHED_b_user_field !== false)
{
$managedCache->cleanDir("b_user_field");
}
// clear langs
$res = HighloadBlockLangTable::getList(array(
'filter' => array('ID' => $primary)
));
while ($row = $res->fetch())
{
HighloadBlockLangTable::delete([
'ID' => $row['ID'],
'LID' => $row['LID'],
]);
}
// clear rights
$res = HighloadBlockRightsTable::getList(array(
'filter' => array('HL_ID' => $primary)
));
while ($row = $res->fetch())
{
HighloadBlockRightsTable::delete($row['ID']);
}
// drop hl table
$connection->dropTable($hlblock['TABLE_NAME']);
return $result;
}