/** * Unshare the given navigation item * * @param string $name * @param string $parent * * @return Config The new config of the given navigation item * * @throws NotFoundError In case no navigation item with the given name is found * @throws IcingaException In case the navigation item has a parent assigned to it */ public function unshare($name, $parent = null) { $config = $this->getShareConfig(); if (!$config->hasSection($name)) { throw new NotFoundError('No navigation item called "%s" found', $name); } $itemConfig = $config->getSection($name); if ($parent === null) { $parent = $itemConfig->parent; } if ($parent && $this->hasBeenShared($parent)) { throw new IcingaException($this->translate('Unable to unshare navigation item "%s". It is dependent from item "%s".' . ' Dependent items can only be unshared by unsharing their parent'), $name, $parent); } $children = $this->getFlattenedChildren($name); $config->removeSection($name); $this->secondaryConfig = $config; if (!$itemConfig->owner || $itemConfig->owner === $this->getUser()->getUsername()) { $config = $this->getUserConfig(); } else { $config = Config::navigation($itemConfig->type, $itemConfig->owner); } foreach ($children as $child) { $childConfig = $this->secondaryConfig->getSection($child); unset($childConfig->owner); $this->secondaryConfig->removeSection($child); $config->setSection($child, $childConfig); } unset($itemConfig->owner); unset($itemConfig->users); unset($itemConfig->groups); $config->setSection($name, $itemConfig); $this->setIniConfig($config); return $config; }
/** * Delete entries in the given target, optionally limiting the affected entries by using a filter * * @param string $target * @param Filter $filter * * @throws StatementException In case the operation has failed */ public function delete($target, Filter $filter = null) { if ($filter !== null) { $filter = $this->requireFilter($target, $filter); } foreach (iterator_to_array($this->ds) as $section => $config) { if ($filter === null || $filter->matches($config)) { $this->ds->removeSection($section); } } try { $this->ds->saveIni(); } catch (Exception $e) { throw new StatementException(t('Failed to delete. An error occurred: %s'), $e->getMessage()); } }