From dfa77b2b2f8fde6209021fd7ddd610b010b1676a Mon Sep 17 00:00:00 2001 From: Markus Frosch Date: Tue, 28 Jun 2016 16:16:29 +0200 Subject: [PATCH] IniRepository: Avoid using iterator_to_array with ArrayDatasource While iterating ConfigObject/ArrayDatasource will not rewrite the section header into a row value as keycolumn. In addition we now properly use the filter. refs #12065 --- library/Icinga/Repository/IniRepository.php | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/library/Icinga/Repository/IniRepository.php b/library/Icinga/Repository/IniRepository.php index f19763138..18ae80f47 100644 --- a/library/Icinga/Repository/IniRepository.php +++ b/library/Icinga/Repository/IniRepository.php @@ -98,11 +98,11 @@ abstract class IniRepository extends Repository implements Extensible, Updatable } $newSection = null; - foreach (iterator_to_array($this->ds) as $section => $config) { - if ($filter !== null && !$filter->matches($config)) { - continue; - } + $query = $this->ds->select(); + $query->addFilter($filter); + + foreach ($query as $section => $config) { if ($newSection !== null) { throw new StatementException( t('Cannot update. Column "%s" holds a section\'s name which must be unique'), @@ -150,12 +150,13 @@ abstract class IniRepository extends Repository implements Extensible, Updatable $filter = $this->requireFilter($target, $filter); } - foreach (iterator_to_array($this->ds) as $section => $config) { - if ($filter === null || $filter->matches($config)) { - $this->ds->removeSection($section); - } - } + $query = $this->ds->select(); + $query->addFilter($filter); + foreach ($query as $section => $config) { + $this->ds->removeSection($section); + } + try { $this->ds->saveIni(); } catch (Exception $e) {