init query builder into db

This commit is contained in:
Alexis Algoud
2016-12-14 16:54:05 +01:00
parent 565bcf2332
commit a463759ba3
2 changed files with 203 additions and 3 deletions

View File

@@ -150,7 +150,7 @@ class CoreObject extends CommonObject {
foreach ($this->__fields as $field=>$info) {
if($this->_is_date($info)){
if($this->is_date($info)){
if(empty($this->{$field})){
$query[$field] = $this->date_0;
}
@@ -166,11 +166,11 @@ class CoreObject extends CommonObject {
$query[$field] = (int)price2num($this->{$field});
}
else if($this->_is_float($info)){
else if($this->is_float($info)){
$query[$field] = (double)price2num($this->{$field});
}
elseif($this->_is_null($info)) {
elseif($this->is_null($info)) {
$query[$field] = (is_null($this->{$field}) || (empty($this->{$field}) && $this->{$field}!==0 && $this->{$field}!=='0')?null:$this->{$field});
}
else{
@@ -264,6 +264,20 @@ class CoreObject extends CommonObject {
return $k;
}
public function removeChild($tabName, $id, $key='id') {
foreach($this->{$tabName} as &$object) {
if($object->{$key} == $id) {
$object->to_delete = true;
return true;
}
}
return false;
}
public function fetchChild() {
if($this->withChild && !empty($this->childtables) && !empty($this->fk_element)) {
@@ -295,18 +309,96 @@ class CoreObject extends CommonObject {
}
public function saveChild(User &$user) {
if($this->withChild && !empty($this->childtables) && !empty($this->fk_element)) {
foreach($this->childtables as &$childTable) {
$className = ucfirst($childTable);
foreach($this->{$className} as $i => &$object) {
$object->{$this->fk_element} = $this->id;
$object->update($user);
if($this->unsetChildDeleted && isset($object->to_delete) && $object->to_delete==true) unset($this->{$className}[$i]);
}
}
}
}
public function update(User &$user) {
if(empty($this->id )) return $this->create($user);
if(isset($this->to_delete) && $this->to_delete==true) {
$this->delete();
}
else {
$query = array();
$query['id']=$this->id;
if(!isset($this->no_dt_maj))$query['tms'] = date('Y-m-d H:i:s');
$this->set_save_query($query);
$this->db->update($this->table_element,$query,array('id'));
$this->id = $this->db->last_insert_id($this->table_element);
$result = $this->call_trigger(strtoupper($this->element). '_UPDATE', $user);
$this->saveChild($user);
}
return $this->id;
}
public function create(User &$user) {
if($this->id>0) return $this->update($user);
$query = array();
$query['datec'] = date("Y-m-d H:i:s",$this->datec);
if(!isset($this->no_dt_maj))$query['tms'] = date('Y-m-d H:i:s');
$this->set_save_query($query);
$this->db->insert($this->table_element,$query);
$this->id = $this->db->last_insert_id($this->table_element);
$result = $this->call_trigger(strtoupper($this->element). '_CREATE', $user);
$this->saveChild($user);
return $this->id;
}
public function delete(){
if($this->id>0){
$this->call_trigger(strtoupper($this->element). '_DELETE', $user);
$this->db->delete($this->table_element,array('id'=>$this->id),array(0=>'id'));
if($this->withChild) {
foreach($this->childtables as &$childTable) {
$className = ucfirst($childTable);
foreach($this->{$className} as &$object) {
$object->delete();
}
}
}
}
}
public function get_date($field,$format='') {
if(empty($this->{$field})) return '';
elseif($this->{$field}<=strtotime('1000-01-01 00:00:00')) return '';

View File

@@ -288,5 +288,113 @@ abstract class DoliDB implements Database
{
return $this->lastqueryerror;
}
/**
* Generate and execute Update SQL commande
*
* @param string $table table to update
* @param array $values array of values to update
* @param int|string|array $key key of value to select row to update
* @return bool|result false or boolean
*/
function update($table,$values,$key){
foreach ($value as $k => $v) {
if(is_string($v)) $v=stripslashes($v);
if (is_array($key)){
$i=array_search($k , $key );
if ( $i !== false) {
$where[] = $key[$i]."=" . $this->escape( $v ) ;
continue;
}
} else {
if ( $k == $key) {
$where[] = "$k=" .$this->escape( $v ) ;
continue;
}
}
if(is_null($v)) $val = 'NULL';
else if(is_int($v) || is_double($v)) $val=$v;
else $val = $this->escape( $v );
$tmp[] = "$k=$val";
}
$sql = sprintf( "UPDATE $table SET %s WHERE %s" , implode( ",", $tmp ) , implode(" AND ",$where) );
$res = $this->query( $sql );
if($res===false) {
//error
return false;
}
return true;
}
/**
* Generate and execute Insert SQL commande
*
* @param string $table table to update
* @param array $values array of values to update
* @return bool|result false or boolean
*/
function insert($table,$values){
foreach ($values as $k => $v) {
$fields[] = $k;
if(is_null($v)){
$values[] = 'NULL';
}else{
$v=stripslashes($v);
$values[] =$this->escape( $v );
}
}
$sql = sprintf( 'INSERT INTO '.$table.' ( %s ) values( %s ) ', implode( ",", $fields ) , implode( ",", $values ) );
$res = $this->query($sql);
if($res===false) {
return false;
}
return true;
}
/**
* Generate and execute Delete SQL commande
*
* @param string $table table for the delete
* @param array $values array of values to delete
* @param int|string|array $key key of value to select row to update
* @return bool|result false or boolean
*/
function delete($table,$values,$key){
foreach ($values as $k => $v) {
if(is_string($v)) $v=stripslashes($v);
if (is_array($key)){
$i=array_search($k , $key );
if ( $i !== false) {
$where[] = $key[$i]."=" . $this->escape( $v ) ;
continue;
}
} else {
if ( $k == $key) {
$where[] = "$k=" .$this->escape( $v ) ;
continue;
}
}
}
$sql = sprintf( 'DELETE FROM '.$table.' WHERE '.implode(" AND ",$where));
return $this->query( $sql );
}
}