<?php
/*
Copyright (C) 2008 by oscim   Project lossim  [ 15.09.2009, 09:17:59] @oscim
// kate: replace-trailing-space-save true; space-indent on; indent-width 2; mixedindent off; indent-mode cstyle; word-wrap-marker-color #41C2A4
ENCODE UTF-8
*/
/**

  @package lossim <web http://www.lossim.org>
  @author oscim <mail dom@oscim.fr > <web http://www.oscim.fr>
  @class db

*/

error_reporting(E_ALL);
class db extends constructeur{

  /**
    Tableau
  */
  var $item;
  /**
    Fournit pas la class fils.
    Defini le tableau modele pour l'insertion dans la table
  */
  var $modele_db;
  /**
    Fournit pas la class fils.
    Defini le tableau modele pour l'insertion dans la table
  */
  var $modele;
  /**
    Nom de variable du tableau php
  */
  var $key_tbl_php;


  function db(){
  }

  /**
    Add idem pour enreg
  */
  function add_item($k,$v){
    $this->item[$k]=$v;
  }

  /**
    Add idem pour enreg
    @param array key
  */
  function add_array($darr){
    reset($darr);
    foreach($darr as $k=>$v){
      $this->add_item($k,$v);
    }
  }

  /**
    traite retour form de langeu multiple
    taleau des posts
    [lang] => Array
      (
          [fr] => Array
              (
                  [titre] => cvbcvbbvcb
                  [descri] =>
                  [tag] =>
              )

      )
    Les nom de colonne sont titre _ lang soit titre_fr
    @param
      @a array
    @return array key reel / value
  */
  /*public*/ function prepa_lang($tabl){
     $lg=$this->add_tbl_php(ADD_PATH_ADMIN.TBL_LANG_INC,'lg'); $sarr=array();

     while ($r=each($lg)){
       if (isset($tabl[$r['key']]) && is_array($tabl[$r['key']]))
       foreach($tabl[$r['key']] as $k=>$v ){
        $sarr[$k.'_'.$r['key']]=$v;
       }
     }
    return  $sarr;
  }


  /**
    prepa du tablea de refernce pour db
    Reconstruit le modele final
  */
  /*private*/ function trait_modele($lang){
    $lg=appel_lang();  reset($lg);
    if (!is_array($this->modele_db)) die('modele absent pour db');
    foreach($this->modele_db as $k=>$v){
      if ($k=='lang'){
         while ($r=each($lg)){
            foreach($v as $key=>$val )
             if ($lang == $r['key'])  $this->modele[$key.'_'.$r['key']] = $val;
         }
      }
    //       elseif((string)$v =='text') = $v;
      else $this->modele[$k] = $v;
    }
  }
  /**
    synchro du fichier en cours

  @param
    @p array this item
    @a string key  nouvelle key
    @a string key  avant modif key
    @a boolean insert (false) update
    @a array tab_actu donnée actuel key/value
    @a path path/name du file
    @a string lang le code de lang en cours editions
  */
  /*public*/ function sync_db($new_key,$bak_key,$action,$tab_actu, $table,$lang){
    global $cstr;
    $lesk=$lesv=$lesv_up='';
    $action = (!$action) ? 'INSERT' : "UPDATE";
    $this->key_tbl_php;
    $this->trait_modele($lang);

//     print_r($this->modele);
    foreach($this->modele as $k=>$v){
      $type=$v;
      $act=(!isset($tab_actu[$k]))? 'insert':'update';

      if (tep_not_null($new_key))
        switch ($act){
          case 'insert':
            if (!empty($k)/* && isset($this->item[$k])*/) {
              $lesk .= $k.' ,';
              $lesv .= ' \''.str_replace(array('"',"'"),array('&quot;','&apos;'),stripslashes($this->item[$k])).'\' ,';
              $insert[]=true;
            }
          break;
          case 'update':
            if (!empty($k) /*&& isset($this->item[$k])*/) {
              $lesv_up .= ' '.$k.' = \''.str_replace(array('"',"'"),array('&quot;','&apos;'),stripslashes($this->item[$k])).'\' ,';
              $insert[]=false;
            }
          break;
          default:
            echo 'action null';
        }
    }
    switch ($action){
      case 'INSERT':
        $query =" INSERT INTO ".$table.' ( '.substr($lesk,0,-1).'  )'." VALUES  ( ".substr($lesv,0,-1)." ) ";
      break;
      case 'UPDATE':
       $query ='UPDATE SET '.substr($lesv_up,0,-1).' WHERE id = \''.$new_key.'\'';
      if (in_array(true,$insert)) {
       $query =" INSERT INTO ".$table.' ( '.substr($lesk,0,-1).'  )'." VALUES  ( ".substr($lesv,0,-1)." ) ";
        if( ( $c=sql ('INSERT',ADD_PATH_ADMIN.$table,$this->key_tbl_php,$query,$new_key) ) ==false) $cstr->_call('message_stack','add_session',REQUETE_NOT_OK,'erreur');
      }
      break;
    }

    if( ( $c=sql ($action,ADD_PATH_ADMIN.$table,$this->key_tbl_php,$query,$new_key) ) ==false) $cstr->_call('message_stack','add_session',REQUETE_NOT_OK,'erreur');

    /**
      Purge index
    */
    if ($new_key<>$bak_key) {
      $this->del_item_db($bak_key);
    }

  }
}

?>