]> git.nbdom.net Git - nb.git/commitdiff
Bed
authorNicolas Boisselier <nicolas.boisselier@gmail.com>
Tue, 31 Jan 2017 00:27:36 +0000 (00:27 +0000)
committerNicolas Boisselier <nicolas.boisselier@gmail.com>
Tue, 31 Jan 2017 00:27:36 +0000 (00:27 +0000)
lib/php/db/table.php
lib/php/db/types/sqlite.php

index 3a1a5f18598a7a92719d12d86f18c900b3577010..f5a49c1d7144688a9e1b10be23dbc81a08ce0059 100644 (file)
@@ -31,6 +31,7 @@ Class Table extends nb {
   public $engine;
   public $created;
   public static $is_admin = true;
+  public static $key_preff = '_key_';
 
   public $fields = [];
   public $indexes;
@@ -383,7 +384,7 @@ Class Table extends nb {
 
         }
 
-        if (isset($conf['fct'])) $conf['fct']($row) ;
+        if (isset($conf['fct'])) $conf['fct']($row);
 
         $field = [
           'table'         => $this,
@@ -478,10 +479,15 @@ Class Table extends nb {
     return $h;
   }
 
+  public function html_add($values = null,$form_action='?') {
+     return html_edit($values,$form_action,true);
+  }
+
   public function html_edit($values = null,$form_action='?',$add=false) {
     if ($values === null) $values = $this->p();
     if (!is_array($values)) $values = [$values];
     $fields = array_filter($this->fields(),function($v){return empty($v->extra);});
+    $keys = $this->fields_keys(); #$fields); $fields = array_merge($keys,$fields);
 
     $where = $this->where($fields,$values);
     if (empty($where)) {
@@ -511,10 +517,19 @@ Class Table extends nb {
       $count ++;
 
       foreach ($fields as $name => $field) {
-        if ($add and !preg_match('/^(null)?$/',$field->default)) $row[$name] = $field->default;
-        elseif(!isset($row[$name])) $row[$name] = '';
-        echo $field->html_edit($row[$name]
-        );
+
+        if ($add and !preg_match('/^(null)?$/',$field->default)) {
+          $row[$name] = $field->default;
+
+        } elseif(!isset($row[$name])) {
+          $row[$name] = '';
+
+        }
+
+        if (!$add and $field->key) {
+          echo '<input name="'.self::$key_preff.$name.'" value="'.$row[$name].'" type="hidden" />'.NB_EOL;
+        }
+        echo $field->html_edit($row[$name]);
       }
 
     }
@@ -1529,24 +1544,56 @@ Class Table extends nb {
     return $this->db()->sql_name($value === null ? $this->name : $value);
   }
 
+  public function _TODEL_fields_extract_keys_values($post) {
+    foreach ($this->fields() as $name => $field) {
+
+      if (!isset($post[$name])) {
+        if ($field->key) $this->bye("Missing `$name`!");
+        continue;
+      }
+
+      $value = $post[$name];
+
+      if ($field->key) {
+        $keys[] = $name;
+        if (isset($post[self::$key_preff.$name])) {
+          $value = $post[self::$key_preff.$name];
+        }
+        $keys_values[] = $value;
+
+      } else {
+        $fields[] = $name;
+        $fields_values[] = $value;
+      }
+
+    }
+
+    return [
+      $key,
+      $keys_values,
+      $fields,
+      $fields_values,
+    ];
+  }
+
   public function replace($hvalues,&$info=[]) {
     return $this->insert($hvalues,$info,'REPLACE');
   }
 
-  public function insert($hvalues,&$info=[],$insert_word='INSERT') {
+  public function insert($post,&$info=[],$insert_word='INSERT') {
     if (empty($info['values'])) $info['values'] = [];
-    if (empty($hvalues)) $this->bye('insert(): No values');
-    $info['values'] = $hvalues;
+    if (empty($post)) $this->bye('insert(): No values');
+    $info['values'] = $post;
 
     $sql_names = $fields = $values = [];
 
     foreach ($this->fields() as $name => $field) {
-      if (!isset($hvalues[$name])) continue;
+      if (!isset($post[$name])) continue;
       if ($field->key and $field->autoincrement()) continue;
       #$fields[$field->sql_name()] = $field;
       $fields[$name] = $field;
       $sql_names[$name] = $field->sql_name();
-      $values[] = $hvalues[$name];
+      $values[] = $post[$name];
     }
     if (empty($fields)) $this->bye('insert(): No fields for table');
 
@@ -1563,7 +1610,7 @@ Class Table extends nb {
     }
 
     foreach ($fields as $name => $field) {
-      $row = [ $name => $hvalues[$name] ];
+      $row = [ $name => $post[$name] ];
       $this->db()->table_row_encrypt($this,$row);
       $field->bindParam($query,$row[$name],":$name");
     }
@@ -1588,9 +1635,8 @@ Class Table extends nb {
   }
 
   # dbq t=nb.mime_type a=table.update type=application/rss+xml name='RSS - Really Simple Syndication' ext=rss debug=2
-  public function update($hvalues,&$info=[]) {
-    if (empty($info['values'])) $info['values'] = [];
-    $info['values'] = $hvalues;
+  public function update($post,&$info=[]) {
+# NB 30.01.17     if (empty($info['values'])) $info['values'] = [];
 
     $keys = [];
     $keys_values = [];
@@ -1602,16 +1648,26 @@ Class Table extends nb {
 
     foreach ($this->fields() as $name => $field) {
 
-      if (!isset($hvalues[$name])) {
+      if (!isset($post[$name])) {
         if ($field->key) $this->bye("Missing `$name`!");
         continue;
       }
 
-      $value = $hvalues[$name];
+      $value = $post[$name];
 
       if ($field->key) {
         $keys[] = $name;
-        $keys_values[] = $value;
+
+        $_value = isset($post[self::$key_preff.$name]) ? $post[self::$key_preff.$name] : null;
+
+        if ($_value) {# and $_value !== $value) {
+          $fields[] = $name;
+          $fields_values[] = $value;
+          $keys_values[] = $_value;
+
+        } else {
+          $keys_values[] = $value;
+        }
 
       } else {
         $fields[] = $name;
@@ -1622,8 +1678,16 @@ Class Table extends nb {
     }
 
     $info['keys'] = array_combine($keys,$keys_values);
+    $info['fields'] = array_combine($fields,$fields_values);
+    $info['post'] = $post;
 
-    if (empty($fields)) $this->bye("Missing keys!");
+#bye([$keys,$keys_values]);
+#debug([$post,$this->fields()]);
+#    if (empty($fields)) {
+#      $fields = $keys;
+#      $fields_values = $keys_values;
+#    }
+    if (empty($fields)) $this->bye("Missing fields!");
 
     if (empty($keys)) {
       $this->bye("Missing keys!");
@@ -1636,7 +1700,8 @@ Class Table extends nb {
       .' SET '   . join(',',$this->ar_map('"$a=:$a"',$fields))
       .' WHERE ' . join(' AND ',$this->ar_map('"$a=:key_$a"',$keys))
     ;
-    $info['sql'] = $sql;
+    #$info['sql'] = $sql;
+    $info = [ 'sql' => $sql ] + $info;
 
     if (!($query = $this->db()->conn->prepare($sql))) {
       err('PDO::errorInfo(): ' .join(' ', $this->db()->conn->errorInfo()) .NB_EOL);
@@ -1644,16 +1709,16 @@ Class Table extends nb {
     }
 
     foreach ($fields as $name) {
-      #debug("$name: ".$hvalues[$name]);
-      $row = [ $name => $hvalues[$name] ];
+      #debug("$name: ".$post[$name]);
+      $row = [ $name => $post[$name] ];
       $this->db()->table_row_encrypt($this,$row);
       #debug($this->db()->status());
       $field->bindParam($query,$row[$name],":$name");
     }
 
     foreach ($keys as $name) {
-      #debug("$name: ".$hvalues[$name]);
-      $field->bindParam($query,$hvalues[$name],":key_$name");
+      #debug("$name: ".$post[$name]);
+      $field->bindParam($query,$post[$name],":key_$name");
     }
 
     #return $sql;
@@ -1668,7 +1733,8 @@ Class Table extends nb {
       return false;
     }
 
-    $info['rowCount'] = $query->rowCount();
+    #$info['rowCount'] = $query->rowCount();
+    $info = [ 'rowCount' => $query->rowCount()] + $info;
     #bye($this->db()->row("SELECT value FROM crypt WHERE id='zaza'"));
     #bye($info);
     #return true;
@@ -1677,16 +1743,16 @@ Class Table extends nb {
 
   }
 
-  public function delete($hvalues,&$info=[]) {
+  public function delete($post,&$info=[]) {
     if (empty($info['values'])) $info['values'] = [];
-    $info['values'] = $hvalues;
+    $info['values'] = $post;
 
     $keys = $this->fields_keys();
 
     // If no primary keys, we use all field
     if (empty($keys)) $keys = $this->fields();
 
-    if (!($where = $this->where($keys,$hvalues,self::$is_admin ? false : true))) {
+    if (!($where = $this->where($keys,$post,self::$is_admin ? false : true))) {
       err('Db.delete(): Missing keys values');
       return null;
     }
index 12b2e27180498141c71a68741079bf7c3203637c..b8cef144e899af8f1e03ba6b51d7299af67f2449 100644 (file)
@@ -90,11 +90,14 @@ $DB_TYPES['sqlite'] = array (
 'table.fields' => array (
   'sql' => 'PRAGMA table_info(\'<T.NAME>\')',
   'fct' => function(&$r) {
-    $r["key"] = $r["pk"] == "0" ? 0 : 1;
+    $r["key"] = ( $r["pk"] == "0" ? 0 : 1 );
+    unset($r["pk"]);
 
     if (!empty($r["dflt_value"])) $r["default"] = trim($r["dflt_value"],"'");
+    unset($r["dflt_value"]);
 
     $r["null"] = $r["notnull"] == "0" ? 1 : 0;
+    unset($r["notnull"]);
 
     $sql = $r["this"]->sql();
     $name_exp = preg_quote($r["name"]);