From daa1c36e2660bd141c5752159a238b874369ea31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20B=C3=B6hmer?= <daniel.boehmer@jtl-software.com> Date: Thu, 16 Jul 2015 15:55:47 +0200 Subject: [PATCH] alpha 1 --- src/Controller/GlobalData.php | 22 +++++++++++++++++++++- src/Mapper/DataMapper.php | 19 +++++++++++++++++-- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/Controller/GlobalData.php b/src/Controller/GlobalData.php index 966bfb3..da33f76 100644 --- a/src/Controller/GlobalData.php +++ b/src/Controller/GlobalData.php @@ -7,6 +7,7 @@ namespace jtl\Connector\Example\Controller; use jtl\Connector\Core\Logger\Logger; +use jtl\Connector\Core\Model\DataModel; use jtl\Connector\Core\Model\QueryFilter; use jtl\Connector\Core\Rpc\Error; use jtl\Connector\Example\Utility\Mmc; @@ -18,7 +19,6 @@ use jtl\Connector\Model\Identity; use jtl\Connector\Model\Language; use jtl\Connector\Model\TaxRate; use jtl\Connector\Result\Action; -use jtl\Connector\Serializer\JMS\SerializerBuilder; class GlobalData extends DataController { @@ -90,4 +90,24 @@ class GlobalData extends DataController return $action; } + + /** + * Insert or update + * + * @param \jtl\Connector\Core\Model\DataModel $model + * @return \jtl\Connector\Result\Action + */ + public function push(DataModel $model) + { + $action = new Action(); + $action->setHandled(true); + + try { + $action->setResult(new GlobalData()); + } catch (\Exception $exc) { + $action->setError($this->handleException($exc)); + } + + return $action; + } } diff --git a/src/Mapper/DataMapper.php b/src/Mapper/DataMapper.php index 8f98c42..da38604 100644 --- a/src/Mapper/DataMapper.php +++ b/src/Mapper/DataMapper.php @@ -58,9 +58,24 @@ abstract class DataMapper extends Singleton { $json = $model->toJson(); $type = strtolower(ClassName::getFromNS(get_called_class())); - $id = $this->db->insert(sprintf('INSERT INTO %s (id, data) VALUES (null, %s)', $type, $json)); - $model->getId()->setEndpoint($id); + if ($model->getId()->getEndpoint() > 0) { + $stmt = $this->db->prepare(sprintf('UPDATE %s SET data = :data WHERE id = :id', $type)); + $stmt->bindValue(':table', $type, SQLITE3_TEXT); + $stmt->bindValue(':data', $json, SQLITE3_TEXT); + $stmt->bindValue(':id', $model->getId()->getEndpoint(), SQLITE3_INTEGER); + + $stmt->execute(); + } else { + $stmt = $this->db->prepare(sprintf('INSERT INTO %s (id, data) VALUES (null, :data)', $type)); + $stmt->bindValue(':table', $type, SQLITE3_TEXT); + $stmt->bindValue(':data', $json, SQLITE3_TEXT); + + $result = $stmt->execute(); + if ($result) { + $model->getId()->setEndpoint($this->db->getLastInsertRowId()); + } + } } public function remove($id) -- GitLab