- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/file.php
- Класс: Bitrix\Disk\File
- Вызов: File::delete
public function delete($deletedBy)
{
$this->errorCollection->clear();
if(Configuration::isEnabledObjectLock())
{
$objectLock = $this->getLock();
if($objectLock && $objectLock->isExclusive() && !$objectLock->canUnlock($deletedBy))
{
$this->errorCollection[] = new Error(
Loc::getMessage('DISK_FILE_MODEL_ERROR_EXCLUSIVE_LOCK'), self::ERROR_EXCLUSIVE_LOCK
);
return false;
}
}
$this->currentState = static::STATE_DELETE_PROCESS;
$success = EditSessionTable::deleteByFilter(array(
'OBJECT_ID' => $this->id,
));
if(!$success)
{
return false;
}
Document\OnlyOffice\Models\DocumentSessionTable::deleteBatch([
'OBJECT_ID' => $this->id,
]);
TrackedObjectTable::deleteBatch([
'REAL_OBJECT_ID' => $this->id,
]);
$success = ExternalLinkTable::deleteByFilter(array(
'OBJECT_ID' => $this->id,
));
if(!$success)
{
return false;
}
foreach($this->getSharingsAsReal() as $sharing)
{
$sharing->delete($deletedBy);
}
//with status unreplied, declined (not approved)
$success = SharingTable::deleteByFilter(array(
'REAL_OBJECT_ID' => $this->id,
));
if(!$success)
{
return false;
}
foreach($this->getAttachedObjects() as $attached)
{
$attached->delete();
}
unset($attached);
if(Integration\BizProcManager::isAvailable())
{
BizProcDocument::deleteWorkflowsFile($this->id);
}
SimpleRightTable::deleteBatch(array('OBJECT_ID' => $this->id));
$success = RightTable::deleteByFilter(array(
'OBJECT_ID' => $this->id,
));
if(!$success)
{
return false;
}
$versionQuery = Version::getList(array('filter' => array(
'OBJECT_ID' => $this->id,
)));
while($versionData = $versionQuery->fetch())
{
$version = Version::buildFromArray($versionData);
$version->setAttributes(array('OBJECT' => $this));
$version->delete($deletedBy);
}
unset($version, $versionQuery);
$success = VersionTable::deleteByFilter(array(
'OBJECT_ID' => $this->id,
));
if(!$success)
{
return false;
}
if($this->getLock())
{
$this->getLock()->delete($deletedBy);
}
//it's possible, that object was already deleted. And we don't have to add it to deleted log. It's unnecessary.
//we add only directly destroyed objects.
if(!$this->isDeleted())
{
Driver::getInstance()->getDeletedLogManager()->mark($this, $deletedBy);
}
\CFile::delete($this->fileId);
$deleteResult = FileTable::delete($this->id);
if(!$deleteResult->isSuccess())
{
return false;
}
Driver::getInstance()->getIndexManager()->dropIndex($this);
Application::getInstance()->getTaggedCache()->clearByTag("disk_file_{$this->id}");
if(!$this->isLink())
{
//todo potential - very hard operation.
foreach(File::getModelList(array('filter' => array('REAL_OBJECT_ID' => $this->id))) as $link)
{
$link->delete($deletedBy);
}
}
$event = new Event(Driver::INTERNAL_MODULE_ID, "onAfterDeleteFile", array($this->getId(), $deletedBy, array(
'STORAGE_ID' => $this->getStorageId(),
)));
$event->send();
return true;
}