/** Zwraca tablicę zmienionych kolumn rekordu wraz ze starą wartością pola jak i zmienioną, lub tylko zmienione * zwraca dane tylko z kolumn które zwracane są przez metodę getBussinessFields() * kolumny które posiadają mapowanie słowników zostaną odpowiednio przetłumaczone * UWAGA, metodę należy wykonywać przez uruchomieniem save()!!!! * @param boolean $onlyNew - ustawienie tego parametru na true spowoduje zwrócenie tablicy zawierajacej jedynie dane zmienione, opis poniżej * @return array - tablica w zależności od podanego parametru $onlyNew: * -- W przypadku gdy $onlyNew = false: * tablica której elementami są tablice asocjacyjne (przedstawiajace zmiany w poszczególnych polach rekordu) * zawierające klucze: * field_name - nazwa pola * old - poprzednia wartość pola * new - zmieniona wartość pola * vresource - nazwa visrtualresorce reprezentującego ten zasób * * -- W przypadku gdy $onlyNew = true: * tablica której elementami są tablice asocjacyjne (przedstawiajace zmiany w poszczególnych polach rekordu) * zawierające klucze: * field_name - nazwa pola * value - zmieniona wartość pola * vresource - nazwa visrtualresorce reprezentującego ten zasób */ protected function _getUpdatedFields($onlyNew = false) { $returnAll = array(); $returnOnlyNew = array(); $bussinessFields = $this->getBussinessFields(); foreach (array_keys($this->_modifiedFields) as $key) { // jeżeli kolumna nie jest istotną daną biznesową pomiń ją if (!array_key_exists($key, $bussinessFields)) { continue; } // jeżeli nie istnieje stara wartość i nowa nie jest nulem lub wartość zmieniła się if (!isset($this->_oldData[$key]) && $this[$key] != '' || (string) $this->_oldData[$key] != (string) $this[$key]) { // jeżeli jedna z kolumn jest typu boolean porównaj je jako boolean if ((is_bool($this->_oldData[$key]) || is_bool($this[$key])) && getBoolean($this->_oldData[$key]) === getBoolean($this[$key])) { // wartości jednak są takie same, mają tylko inne typy (błąd rzutowania php) } else { $tmp = array(); // OnlyNew = false $tmp2 = array(); // OnlyNew = true $fieldName = $bussinessFields[$key]; $tmp['field_name'] = $fieldName; $tmp2['field_name'] = $fieldName; // jeżeli kolumna ma zdefiniowanego virtualresource zapisz go if (isset($this->headerMappings) && is_array($this->headerMappings[$key]) && array_key_exists('vresource', $this->headerMappings[$key])) { $vresource = $this->headerMappings[$key]['vresource']; $tmp['vresource'] = $vresource; $tmp2['vresource'] = $vresource; } // jeżeli kolumna jest mapowana przez słowniki if (array_key_exists($key, $this->dictMappings)) { $dict = $this->getDictMapping($key, $this); $tmp['old'] = array_key_exists($key, $this->_oldData) ? $dict[$this->_oldData[$key]] : null; $tmp['new'] = $dict[$this->__get($key)]; } else { $tmp['old'] = array_key_exists($key, $this->_oldData) ? $this->_oldData[$key] : null; $tmp['new'] = $this->__get($key); } $tmp2['value'] = $tmp['new']; $returnAll[] = $tmp; $returnOnlyNew[] = $tmp2; } } } return $onlyNew ? $returnOnlyNew : $returnAll; }
$created = $data['created']; $query = "INSERT INTO poll VALUES(NULL, {$owner}, '{$title}', '{$question}', '{$is_open}', {$created})"; mysql_query($query) or die(mysql_error()); $query = "SELECT id, owner as ownerId, title, question, is_open as isOpen, created FROM poll WHERE title like '{$title}'"; $ret = queryArray($query, Flight::get('pollCols')); echo Flight::json($ret[0]); }); //--------- // UPDATE //--------- // ! PUT does not work for unknown reasons here. So we circumvent this problem by using a post to a different url instead Flight::route('POST /api/poll/put', function () { $json = Flight::request()->data->json; $data = json_decode($json, true); $id = $data['id']; $owner = $data['ownerId']; $title = $data['title']; $question = $data['question']; $is_open = getBoolean($data['isOpen']); $created = $data['created']; $query = "UPDATE poll SET owner={$owner}, title='{$title}', question='{$question}', is_open='{$is_open}', created={$created} WHERE id={$id}"; mysql_query($query) or die(mysql_error()); $query = "SELECT id, owner as ownerId, title, question, is_open as isOpen, created FROM poll WHERE title like '{$title}'"; $ret = queryArray($query, Flight::get('pollCols')); echo Flight::json($ret[0]); }); Flight::route('*', function () { echo 'Invalid path requested!'; }); Flight::set('dbConn', getDBconn()); Flight::start();