• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/item.php
  • Класс: BitrixTasksItem
  • Вызов: Item::delete
public function delete($parameters = null)
{
	if($this->id)
	{
		if($this->isImmutable())
		{
			$result = new Result();
			$result->getErrors()->add('IS_IMMUTABLE', 'Item is read-only');

			return $result;
		}

		$dc = static::getDataSourceClass();

		$state = $this->getTransitionState();
		if($state->isInProgress())
		{
			$result = new Result();
			$result->getErrors()->add('IN_TRANSITION', 'Item is in transition state, no overlapping operations available');

			return $result;
		}

		$accessResult = new Result();

		// first - check access
		$canPerform = $this->canDelete($accessResult);

		if($canPerform)
		{
			$state->enter(array(), State::MODE_DELETE, $parameters);
			$result = $state->getResult();

			if($this->doPreActions($state) && $this->executeHooksBefore($state))
			{
				$map = $this->getMap();

				// remove all related entities
				/** @var FieldScalar $field */
				foreach($map as $field)
				{
					if($field->isSourceCustom())
					{
						$name = $field->getName();
						$subSaveResult = $field->saveValueToDataBase(null, $name, $this);

						$result->adoptErrors($subSaveResult, array(
							'CODE' => $name.'.#CODE#',
							'MESSAGE' => Loc::getMessage('TASKS_ITEM_SUBITEM_DELETE_ERROR', array(
								'#ENTITY_NAME#' => $field->getTitle()
							)).': #MESSAGE#',
						));
					}
				}

				// remove item itself
				$dbResult = $dc::delete($this->id);
				if($dbResult->isSuccess())
				{
					$this->executeHooksAfter($state);
					$this->doPostActions($state);

					$this->setId(0);
				}
				else
				{
					$result->adoptErrors($dbResult);
				}
			}

			$result->setInstance($this);
			$state->leave();
		}
		else
		{
			$result = new Result();
		}

		$result->adoptErrors($accessResult);
	}
	else
	{
		$result = new Result();
		$result->getErrors()->add('NO_PRIMARY', 'Attempting to delete virtual item');
	}

	return $result;
}