From 0465c1639f1d00996f6e9b0086a497279acba679 Mon Sep 17 00:00:00 2001 From: bison-paolo Date: Mon, 10 Oct 2016 16:14:48 +0200 Subject: [PATCH] Added a workaround to convert pgsql arrays into php arrays Affected controllers: Dokument and Dokumentstudiengang --- .../controllers/api/v1/crm/Dokument.php | 5 +- .../api/v1/crm/Dokumentstudiengang.php | 3 ++ application/core/APIv1_Controller.php | 50 +++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/application/controllers/api/v1/crm/Dokument.php b/application/controllers/api/v1/crm/Dokument.php index ff852f139..cff810916 100644 --- a/application/controllers/api/v1/crm/Dokument.php +++ b/application/controllers/api/v1/crm/Dokument.php @@ -24,8 +24,6 @@ class Dokument extends APIv1_Controller parent::__construct(); // Load model DokumentModel $this->load->model('crm/dokument_model', 'DokumentModel'); - - } /** @@ -39,6 +37,9 @@ class Dokument extends APIv1_Controller { $result = $this->DokumentModel->load($dokument_kurzbz); + // Workaround + $result = $this->escapeArrays($result, array('bezeichnung_mehrsprachig', 'dokumentbeschreibung_mehrsprachig')); + $this->response($result, REST_Controller::HTTP_OK); } else diff --git a/application/controllers/api/v1/crm/Dokumentstudiengang.php b/application/controllers/api/v1/crm/Dokumentstudiengang.php index 2d90c44e7..3582e0714 100644 --- a/application/controllers/api/v1/crm/Dokumentstudiengang.php +++ b/application/controllers/api/v1/crm/Dokumentstudiengang.php @@ -38,6 +38,9 @@ class Dokumentstudiengang extends APIv1_Controller { $result = $this->DokumentstudiengangModel->load(array($studiengang_kz, $dokument_kurzbz)); + // Workaround + $result = $this->escapeArrays($result, array('beschreibung_mehrsprachig')); + $this->response($result, REST_Controller::HTTP_OK); } else diff --git a/application/core/APIv1_Controller.php b/application/core/APIv1_Controller.php index fe2bbe212..83375f2dc 100644 --- a/application/core/APIv1_Controller.php +++ b/application/core/APIv1_Controller.php @@ -61,4 +61,54 @@ class APIv1_Controller extends REST_Controller } } } + + /** ---------------------------------------------------------------------------------------------------------------------------------- + * Workaround for converting a pgsql array to a php array + * To be dropped as soon as possible :D + */ + protected function escapeArrays($result, $fields_names) + { + if (is_object($result) && isset($result->retval) && is_array($result->retval)) + { + for ($i = 0; $i < count($result->retval); $i++) + { + foreach($fields_names as $field_name) + { + if (isset($result->retval[$i]->{$field_name})) + { + $result->retval[$i]->{$field_name} = $this->_pgsqlArrayToPhpArray($result->retval[$i]->{$field_name}); + } + } + } + } + + return $result; + } + + /** + * To be moved to DB_model + */ + private function _pgsqlArrayToPhpArray($string) + { + $result = array(); + + if (!empty($string)) + { + preg_match_all( + '/(?<=^\{|,)(([^,"{]*)|\s*"((?:[^"\\\\]|\\\\(?:.|[0-9]+|x[0-9a-f]+))*)"\s*)(,|(?