- Модуль: 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;
}