Added a workaround to convert pgsql arrays into php arrays

Affected controllers: Dokument and Dokumentstudiengang
This commit is contained in:
bison-paolo
2016-10-10 16:14:48 +02:00
parent 3588047989
commit 0465c1639f
3 changed files with 56 additions and 2 deletions
@@ -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
@@ -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
+50
View File
@@ -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*)(,|(?<!^\{)(?=\}$))/i',
$string,
$matches,
PREG_SET_ORDER
);
foreach ($matches as $match)
{
$result[] = $match[3] != '' ? stripcslashes($match[3]) : (strtolower($match[2]) == 'null' ? null : $match[2]);
}
}
return $result;
}
// --------------------------------------------------------------------------------------------------------------------------------------------
}