- Модуль: highloadblock
- Путь к файлу: ~/bitrix/modules/highloadblock/lib/datamanager.php
- Класс: BitrixHighloadblockDataManager
- Вызов: DataManager::delete
static function delete($primary)
{
global $USER_FIELD_MANAGER;
// check primary
static::normalizePrimary($primary);
static::validatePrimary($primary);
$entity = static::getEntity();
$result = new EntityDeleteResult();
$hlblock = static::getHighloadBlock();
// get old data
$oldData = static::getByPrimary($primary)->fetch();
try
{
//event before delete
static::callOnBeforeDeleteEvent($primary, $entity, $result, $oldData);
// return if any error
if (!$result->isSuccess(true))
{
return $result;
}
//event on delete
static::callOnDeleteEvent($primary, $entity, $oldData);
// remove row
$connection = MainApplication::getConnection();
$helper = $connection->getSqlHelper();
$tableName = $entity->getDBTableName();
$id = array();
foreach ($primary as $k => $v)
{
$id[] = $k." = '".$helper->forSql($v)."'";
}
$where = implode(' AND ', $id);
$sql = "DELETE FROM ".$helper->quote($tableName)." WHERE ".$where;
$connection->queryExecute($sql);
$fields = $USER_FIELD_MANAGER->getUserFields('HLBLOCK_'.$hlblock['ID']);
foreach ($oldData as $k => $v)
{
$userfield = $fields[$k];
// remove multi values
if ($userfield['MULTIPLE'] == 'Y')
{
$utmTableName = HighloadBlockTable::getMultipleValueTableName($hlblock, $userfield);
$connection->query(sprintf(
'DELETE FROM %s WHERE %s = %d',
$helper->quote($utmTableName), $helper->quote('ID'), $primary['ID']
));
}
// remove files
if ($userfield["USER_TYPE"]["BASE_TYPE"]=="file")
{
if(is_array($oldData[$k]))
{
foreach($oldData[$k] as $value)
{
CFile::delete($value);
}
}
else
{
CFile::delete($oldData[$k]);
}
}
}
$entity->cleanCache();
//event after delete
static::callOnAfterDeleteEvent($primary, $entity, $oldData);
}
catch (Exception $e)
{
// check result to avoid warning
$result->isSuccess();
throw $e;
}
return $result;
}