From 8621e3cfdddf5e2b8b8576c4fc216d7e9ecac7af Mon Sep 17 00:00:00 2001 From: Stefan Scheungrab Date: Thu, 23 Jul 2015 11:43:41 +0200 Subject: [PATCH] SyncProperty: initial setup for synchronising the properties --- application/forms/SyncPropertyForm.php | 69 +++++++++++ library/Director/Objects/SyncProperty.php | 140 ++++++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 application/forms/SyncPropertyForm.php create mode 100644 library/Director/Objects/SyncProperty.php diff --git a/application/forms/SyncPropertyForm.php b/application/forms/SyncPropertyForm.php new file mode 100644 index 00000000..b6bef0e9 --- /dev/null +++ b/application/forms/SyncPropertyForm.php @@ -0,0 +1,69 @@ +addElement('text', 'source_name', array( + 'label' => $this->translate('Source name'), + 'required' => true, + )); + + $this->addElement('text', 'source_field', array( + 'label' => $this->translate('Source field'), + 'description' => $this->translate('This must be a column from the source'), + 'required' => true, + )); + + $this->addElement('text', 'destination_field', array( + 'label' => $this->translate('Destination field'), + 'description' => $this->translate('The value of the source will be transformed to the given attribute'), + 'required' => true, + )); + + $this->addElement('text', 'priority', array( + 'label' => $this->translate('Priority'), + 'description' => $this->translate('This allows to prioritize the import of a field, synced from different sources for the same object'), + 'required' => true, + )); + + $this->addElement('text', 'filter', array( + 'label' => $this->translate('Filter Expression'), + 'description' => $this->translate('This allows to filter for specific parts within the given source field'), + 'required' => true, + )); + + $this->addElement('select', 'merge', array( + 'label' => $this->translate('Source Type'), + 'required' => true, + 'multiOptions' => array( + 'null' => '- please choose -', + 'merge' => 'merge', + 'override' => 'override' + ) + )); + + } + + public function loadObject($id) + { + + parent::loadObject($id); + return $this; + } + + public function onSuccess() + { +/* + $this->getElement('owner')->setValue( + self::username() + ); +*/ + parent::onSuccess(); + } +} diff --git a/library/Director/Objects/SyncProperty.php b/library/Director/Objects/SyncProperty.php new file mode 100644 index 00000000..c1bcac37 --- /dev/null +++ b/library/Director/Objects/SyncProperty.php @@ -0,0 +1,140 @@ + null, + 'rule_id' => null, + 'source_id' => null, + 'source_expression' => null, + 'destination_field' => null, + 'priority' => null, + 'filter_expression' => null, + 'merge_policy' => null + ); + + /* + protected $properties = array(); + + public function set($key, $value) + { + if ($this->hasProperty($key)) { + return parent::set($key, $value); + } + + if (! array_key_exists($key, $this->propterties) || $value !== $this->propterties[$key]) { + $this->hasBeenModified = true; + } + $this->properties[$key] = $value; + return $this; + } + + public function get($key) + { + if ($this->hasProperty($key)) { + return parent::get($key); + } + + if (array_key_exists($key, $this->properties)) { + return $this->properties[$key]; + } + + return parent::get($key); + } + + public function getProperties() + { + return $this->properties; + } + + protected function onStore() + { + $old = $this->fetchSettingsFromDb(); + $oldKeys = array_keys($old); + $newKeys = array_keys($this->properties); + $add = array(); + $mod = array(); + $del = array(); + + foreach ($this->properties as $key => $val) { + if (array_key_exists($key, $old)) { + if ($old[$key] !== $this->properties[$key]) { + $mod[$key] = $this->properties[$key]; + } + } else { + $add[$key] = $this->properties[$key]; + } + } + + foreach (array_diff(array_keys($old), array_keys($this->settings)) as $key) { + $del[$key] = $key; + } + + $modifier = $db->fetchRow( + $db->select()->from( + 'sync_modifier', + array('id') + )->where('property_id = ?', $property_id) + ) + + $where = sprintf('modifier_id = %d AND param_key = ?', $modifier->id); + $db = $this->getDb(); + foreach ($mod as $key => $val) { + $db->update( + 'sync_modifier_param', + array('param_value' => $val), + $db->quoteInto($where, $key) + ); + } + + foreach ($add as $key => $val) { + $db->insert( + 'sync_modifier', + array( + 'property_id' => $this->id, + ' + ) + $db->insert( + 'sync_modifier_param', + array( + 'source_id' => $this->id, + 'setting_name' => $key, + 'setting_value' => $val + ) + ); + } + + foreach ($del as $key) { + $db->update( + 'import_source_setting', + $db->quoteInto($where, $key) + ); + } + } + + protected function fetchSettingsFromDb() + { + $db = $this->getDb(); + return $db->fetchPairs( + $db->select() + ->from('sync_modifier_param', array('param_name', 'param_value')) + ->where('modifier_id = ?', $this->id) + ); + + } + + protected function onLoadFromDb() + { + $this->settings = $this->fetchSettingsFromDb(); + } */ +}