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