/**
  * 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;
 }
Example #2
0
 /**
  * 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());
     }
 }