- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/manager/task/projectdependence.php
- Класс: Bitrix\Tasks\Manager\Task\should
- Вызов: should::manageSet
static function manageSet($userId, $taskId, array $items = array(), array $parameters = array('PUBLIC_MODE' => false, 'MODE' => self::MODE_ADD))
{
$errors = static::ensureHaveErrorCollection($parameters);
$result = array(
'DATA' => array(),
'CAN' => array(),
'ERRORS' => $errors
);
if(!static::checkSetPassed($items, $parameters['MODE']))
{
return $result;
}
$task = static::getTask($userId, $taskId);
$data = array();
$currentItems = array('DATA' => array());
if($parameters['MODE'] == static::MODE_UPDATE) // update existing
{
$parameters['TYPE'] = self::INGOING;
$parameters['DIRECT'] = true;
$currentItems = static::getListByParentEntity($userId, $taskId, $parameters);
}
$items = static::indexItemSets($items);
$currentItems = static::indexItemSets($currentItems['DATA']);
list($toAdd, $toUpdate, $toDelete) = static::makeDeltaSets($items, $currentItems);
if(empty($toAdd) && empty($toUpdate) && empty($toDelete))
{
return $result;
}
foreach($toDelete as $index)
{
$item = $currentItems[$index];
$task->deleteProjectDependence($item['DEPENDS_ON_ID']);
}
$toAdd = array_flip($toAdd);
$toUpdate = array_flip($toUpdate);
try
{
foreach($items as $index => $item)
{
if(isset($toAdd[$index]))
{
$task->addProjectDependence($item['DEPENDS_ON_ID'], $item['TYPE']);
}
if(isset($toUpdate[$index]))
{
$task->updateProjectDependence($item['DEPENDS_ON_ID'], $item['TYPE']);
}
}
}
catch(\Bitrix\Tasks\DB\Tree\LinkExistsException $e)
{
// todo: PROJECTDEPENDENCE: more clever error code here
$errors->add('PROJECTDEPENDENCE', $e->getMessageFriendly());
}
$result['DATA'] = $data;
return $result;
}