Example #1
0
 /** 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;
 }
Example #2
0
    $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();