ImportSource: use target_property for transforms

This commit is contained in:
Thomas Gelf 2016-07-20 15:21:07 +02:00
parent f12e4b2033
commit 9a6320c2f4
3 changed files with 33 additions and 5 deletions

View File

@ -21,7 +21,12 @@ class ImportsourceHookTable extends QuickTable
public function getColumns()
{
if ($this->columnCache === null) {
$this->columnCache = $this->sourceHook()->listColumns();
$this->columnCache = array_merge(
$this->sourceHook()->listColumns(),
$this->source->listModifierTargetProperties()
);
sort($this->columnCache);
}
return $this->columnCache;

View File

@ -39,8 +39,12 @@ abstract class PropertyModifierHook
return $this->targetProperty !== null;
}
public function getTargetProperty()
public function getTargetProperty($default = null)
{
if ($this->targetProperty === null) {
return $default;
}
return $this->targetProperty;
}

View File

@ -99,12 +99,17 @@ class ImportSource extends DbObjectWithSettings
if (! property_exists($row, $key)) {
continue;
}
$target = $mod->getTargetProperty($key);
if (is_array($row->$key)) {
foreach ($row->$key as & $k) {
$k = $mod->transform($k);
$new = array();
foreach ($row->$key as $k => $v) {
$new[$k] = $mod->transform($v);
}
$row->$target = $new;
} else {
$row->$key = $mod->transform($row->$key);
$row->$target = $mod->transform($row->$key);
}
}
}
@ -153,6 +158,20 @@ class ImportSource extends DbObjectWithSettings
$this->rowModifiers = $modifiers;
}
public function listModifierTargetProperties()
{
$list = array();
foreach ($this->getRowModifiers() as $rowMods) {
foreach ($rowMods as $mod) {
if ($mod->hasTargetProperty()) {
$list[$mod->getTargetProperty()] = true;
}
}
}
return array_keys($list);
}
public function checkForChanges($runImport = false)
{
$hadChanges = false;