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
This commit is contained in:
Markus Frosch 2016-06-28 16:16:29 +02:00
parent cefdc496ef
commit dfa77b2b2f
1 changed files with 10 additions and 9 deletions

View File

@ -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) {