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