<?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
*/
/**
  Class de gestion coordination des enregsitrement liée au posts

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


Object
  [post] => Array
      (
          [nom_complet] => tmp.xml
          [nom_simplifie] => tmp.xml
          [nom_ss_ext] => tmp
          [chemin] => ../xml/fr/
          [rub] =>
          [keyrub] =>
          [titre] => tmp
          [ext] => xml
          [lang] => fr
          [type] =>
          [date_created] => 09-20-2009
          [date_revision] => -- #
          [c_date_revision] =>
          [etat] =>true
          [title_fr] => tmp
          [date_modified] => 09-20-2009
          [author] => admin
*/

error_reporting(E_ALL);
class db_posts extends db{

  /**
    Tableau des fichier présents
  */
  var $post;


  /**
    Init
  @param
    @a string path/name du fichier a traiter ou vide, travail alors sur la liste des posts
  */
  function db_posts($file=''){
    $this->db_links =$this->add_tbl_php(ADD_PATH_ADMIN.TBL_INDEX_LINKS_INC,'i_links');

    if (!empty($file)) $this->init_post($file);
    else $this->posts = $this->browse_folder();

    //! cf db_i_link
    $this->modele_db=array( );

    return $this->the_post();
  }


  /**
    Init du post , recup
  @param
      @a string path/name  sans racine ni lang
  */
  /*public*/ function init_post($file){
    error_reporting(E_ALL);
    global $cstr;
    if (empty($file)) return false;
    //! force rechargeme,t du tableau
    $this->db_links =$this->add_tbl_php(ADD_PATH_ADMIN.TBL_INDEX_LINKS_INC,'i_links', true);

    $n=NewFct('extract_nom_dater_evoluer',$file,"");

    $this->post=array_merge((array)$n,(array)$this->this_posts($n['rub'].$n['nom_ss_ext']) );

    return $this->the_post();
  }


  /**
    Function recursive de recupération des pages présente
    @param
      @a string repertoire a listé
    @return $this->file :: array
  */
  /*private*/ function  browse_folder($dir='', $recursive=false){
    $di = (empty($dir)) ? ADD_PATH_ADMIN.REP_DATA : $dir ;
    $di= str_replace("\.\./".REP_DATA,'',$di);
    $s='';
    if(!$recursive) $this->files=array();
    $nom=NewFct('cstr_liste',$di,"") ;
    if (is_array($nom))
      while ( $rows =each($nom)){
        if  (is_dir($di."/".$rows['value'])) {
          if ($rows['value'] !='bak') $this->browse_folder($di."/".$rows['value'],true);
        }
        else {
          $n=NewFct('extract_nom_dater_evoluer',$di."/".$rows['value'],"");
          $this->files[]=array_merge((array)$n,(array)$this->this_posts($n['rub'].$n['nom_ss_ext']));
          unset($n);
        }
      }
//       print_r($this->files);
     return $this->files;
  }


  /**
    Recup titre et element dans index_link
    @param
      @a string rub/name sans ext
    @return array / boolean(false)
  */
  /*private*/ function this_posts($r){
     $key=md5(trim($r));
    if (isset($this->db_links[$key]) && is_array($this->db_links[$key])) return $this->db_links[$key];
    else return false;
  }


  /**
    @return  contenu du post
  */
  /*public*/ function the_post(){
    error_reporting(E_ALL);
    return $this->post;
  }


  /**
    Suppression d'un article
    @p string path+nom du fichier a supprimer
  */
  function supp_article($file) {
    if (@unlink($file)) return true;
    else return false;
  }


  /**
    Add post vide, nommé bak_tmp
  */
  /*public*/ function add_post(){
  error_reporting(E_ALL);
    global $cstr;

    $doc_name=$cstr->_call('doc_name','the_new_obj');

    $bak_path_file=$doc_name->bak_chemin.$doc_name->bak_name.'.'.$doc_name->ext;

    //! force le modele_db
        $modele_db=array(
                'href'=> 'text' ,
                'date_modified'=> 'date' ,
//                 'date_publi'=> 'date' ,
//                 'date_retrait'=> 'date' ,
            /** Colonne utiliser suffixer par la lang titre_fr ne preciser que le prefix */
                'lang'=> array(
                      'title' => 'text'
                       )
               );
    //! i_links
    $array['href']=$doc_name->new_rub.$doc_name->new_name;
    $array['etat']=$doc_name->etat;
    $array['lang']=array( LANG_POST => array('title' =>'page brouillon') );
    $array['date_created']=date("m-d-Y");
    array( LANG_POST => array('title' =>'') );

    $cstr->_call('i_db_link','_c_db_synch',$doc_name->bak_key,$doc_name->bak_key,$array,$modele_db);


    Newfct('op_files',$bak_path_file,'',"ADD",
            entete_xml('',date("d/m/Y"),
            _USER_PERSO__LOGIN,'','',''),$bak_path_file,'','' );


  }

  /**
    Action groupé sur les posts
    Re-index des posts (Force)
    @a array tableau de retour des _POST et _GET
  */
  /*public*/ function reindex_posts_multi(){
    error_reporting(E_ALL);
    global $cstr;
    //! force le modele_db
        $modele_db=array(
                'href'=> 'text' ,
                'etat'=> 'boolean',
                'date_modified'=> 'date' ,
                'date_publi'=> 'date' ,
                'date_retrait'=> 'date' ,
            /** Colonne utiliser suffixer par la lang titre_fr ne preciser que le prefix */
                'lang'=> array(
                      'title' => 'text'
                       )
               );
    for ($i=0, $n=sizeof($this->files); $i<$n; $i++) {
      $key=md5($this->files[$i]['rub'].$this->files[$i]['nom_ss_ext']);
      if (!isset($this->db_links[$key])) {
        $array['href']=$this->files[$i]['rub'].$this->files[$i]['nom_ss_ext'];
        $array['etat']='false';
        $array['date_created']=$this->files[$i]['date_created'];
        $array['lang']=array( LANG_POST => array('title' =>$this->files[$i]['nom_ss_ext']) ); /**  revoir pour reindex global de toutes les langues*/
        $cstr->_call('i_db_link','_c_db_synch',$key,$key,$array,$modele_db);
      }
    }
  }

  /**
    Action groupé sur les posts
    Gére les action groupé
    @a array tableau de retour des _POST et _GET
  */
  /*public*/ function up_posts_multi($post){
    global $cstr;
    $ct=array();
    //! force le modele_db
        $modele_db=array(
                'etat'=> 'boolean',
               );
    if (!isset($post['exe_grp']) || empty($post['exe_grp'])) return false;
    $etat=(isset($post['exe_grp']) && strtoupper($post['exe_grp']) =='P') ? 'true' : 'false';
    foreach( $post['act_g'] as $k=>$v ){
      if (strlen($v) ==32) {
        $array['etat']="$etat";
        $ct[]=$cstr->_call('i_db_link','_c_db_synch',$v,$v,$array,$modele_db);
      }
    }
    if (in_array(false,$ct)) return false;
    else return true;

  }


  /**
    Enregsitrement du post
    @param
      @a array tableau ds var post et get
    @return true or new name si reload necessaire
  */
  /*public*/ function up_post($post){
    global $cstr;
    $doc_name=$cstr->_call('doc_name','the_new_obj');

    $titre_page=addslashes($doc_name->new_titre);
    $new_path_file=$doc_name->lang.'/'.$doc_name->new_rub.$doc_name->new_name.'.'.$doc_name->ext;
    $bak_path_file=$doc_name->lang.'/'.$doc_name->bak_rub.$doc_name->bak_name.'.'.$doc_name->ext;
    $desc_page = clean_accents($post['desc_page']);
    $tag_page = clean_accents($post['tag_page']);
    $key=$doc_name->new_key;

    ## GESTION INDEX CENTRAL DES ARTICLES
    $array['href']=$doc_name->new_rub.$doc_name->new_name;
    $array['etat']=$doc_name->etat;
    $array['title_'.$doc_name->lang]=$titre_page;
    $array['date_publi']=($doc_name->d_publi !=false)? $doc_name->d_publi: '00-00-0000' ;
    $array['date_retrait']=($doc_name->d_retrait !=false) ? $doc_name->d_retrait : '00-00-0000' ;

    $cstr->_call('i_db_link','_c_db_synch',$doc_name->new_key,$doc_name->bak_key,$array,'',$doc_name->lang);

    Newfct('op_files',$bak_path_file,'',"ADD",
          entete_xml($post['message'],date("d/m/Y"),
          _USER_PERSO__LOGIN,$titre_page,$desc_page,$tag_page),$new_path_file,$titre_page,$desc_page );

    if ($new_path_file <> $bak_path_file) {
//       echo "up  name file";
      Newfct('op_files',$bak_path_file ,'',"COPY","",$new_path_file,$titre_page,$desc_page);
      return $new_path_file;
    }
    return $new_path_file;
//     return true;
  }


  /**
    Suppression du post en cours
    @param
      @p object  doc_name
      @p object  i_db_link
      @a string path/fichier
  */
  /*public*/ function del_post($file){
    global $cstr;

    $doc_name=$cstr->_call('doc_name','the_new_obj');
    $cstr->_call('i_db_link','c_db_del',$doc_name->bak_key);
    if($this->supp_article($file)) $cstr->_call('message_stack','add_session',WRITE_MODIF_OK,'ok');
    else $cstr->_call('message_stack','add_session',WRITE_NOT_POSSIBLE,'error');
  }


}

?>