...Человеческий поиск в разработке...
- Модуль: 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; }