File::delete

  1. Bitrix24 API (v. 23.675.0)
  2. disk
  3. File
  4. delete
  • Модуль: 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;
}

Добавить комментарий