• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/baseobject.php
  • Класс: BitrixDiskBaseObject
  • Вызов: BaseObject::markDeletedInternal
protected function markDeletedInternal($deletedBy, $deletedType = ObjectTable::DELETED_TYPE_ROOT)
{
	if ($this->deletedType == $deletedType)
	{
		return true;
	}

	$this->errorCollection->clear();

	$subscriberManager = Driver::getInstance()->getSubscriberManager();
	foreach($subscriberManager->getSharingsByObject($this) as $sharing)
	{
		$sharing->delete($deletedBy);
	}

	//with status unreplied, declined (not approved)
	SharingTable::deleteByFilter(array(
		'REAL_OBJECT_ID' => $this->id,
	));

	if ($deletedType == ObjectTable::DELETED_TYPE_CHILD)
	{
		$nameAfterDelete = $this->getNameWithoutTrashCanSuffix();
	}
	elseif ($deletedType == ObjectTable::DELETED_TYPE_ROOT)
	{
		//we want to delete object as root. It means it has to have unique name. In this way we clean the name,
		//and after we make it unique.
		$nameAfterDelete = UiText::appendTrashCanSuffix($this->getNameWithoutTrashCanSuffix());
	}
	else
	{
		$nameAfterDelete = $this->getNameWithoutTrashCanSuffix();
	}

	if (!static::isUniqueName($nameAfterDelete, $this->getParentId(), $this->getId()))
	{
		$nameAfterDelete = static::generateUniqueName($nameAfterDelete, $this->getParentId());
	}

	$data = [
		'CODE' => null,
		'NAME' => $nameAfterDelete,
		'DELETED_TYPE' => $deletedType,
	];

	$alreadyDeleted = $this->isDeleted();
	if (!$alreadyDeleted)
	{
		$data['DELETE_TIME'] = new DateTime();
		$data['DELETED_BY'] = $deletedBy;
	}

	$status = $this->update($data);
	if ($status)
	{
		$driver = Driver::getInstance();
		$driver->getDeletionNotifyManager()->put($this, $deletedBy);
		$driver->getIndexManager()->dropIndexByModuleSearch($this);

		$event = new Event(Driver::INTERNAL_MODULE_ID, "onAfterMarkDeletedObject", array($this, $deletedBy, $deletedType));
		$event->send();
	}

	if ($deletedType == ObjectTable::DELETED_TYPE_ROOT)
	{
		$this->createLinkInTrashcan($deletedBy);
	}

	return $status;
}