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