<?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
*/
/**
  Gestion du menu , prend en charge la liste des fichier et repertoire present. verifie avec la table d'index, les element a ffiché et leur options
  Prend aussi en charge le traitement des menu force via table

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

*/


class menu extends page{

  /**
    List des alerte
  */
  var $alert;

  function menu(){
  }

  /**
    @param
      @a array

      @p array s_printH
      @p numeric profondeur, autorisé en recusivité
      @p string format
  */
  /*public*/ function init($opt){
    global $page_fixe;

    $this->s_printH=(isset($opt['s_printH'])) ? $opt['s_printH'] : $page_fixe ;
    $this->profondeur=(isset($opt['profondeur']))?$opt['profondeur']:1;
    $this->format=(isset($opt['format'])) ? $opt['format'] : "<li class=\"%1\$s %8\$s\" %6\$s><a href=\"%2\$s%3\$s\" title=\"%5\$s\"  %7\$s >%4\$s</a> %9\$s </li>\n" ;
    $this->debug=(isset($opt['debug'])) ? $opt['debug'] : DEBUG ;
    $this->blok_ss_rub=(isset($opt['blok_ss_rub'])) ? $opt['blok_ss_rub'] :"<ul id=\"%1\$s\"> {rub}</ul>" ;
    $this->menu_specifique=(isset($opt['menu_specifique'])) ? $opt['menu_specifique'] : false ;
    $this->sepration=(isset($opt['sepration'])) ? $opt['sepration'] :'' ;

    $config_menu=$this->add_tbl_php(TBL_MODULE_CONFIG_MENU_INC,'config_menu');
    if (!defined('LONG_DES_LIENS')) define('LONG_DES_LIENS',$config_menu['long_des_liens']);

    $this->calc_menu();
    $this->draw();
  }

  /**
    Calcul du menu

    Si image dans /img/lang/ avce des non d'image (jpg) portant la le href(/ remplacé par _) alors image dominante par rapport au texte.
    Si image _s alors considere comme survol
   @return tableau
  */
  /*private*/ function calc_menu(){
      $menu_auto=array();
      /* OPTION liste primaire du menu auto ou files */
      if ($this->menu_specifique !=false){
        if (!file_exists(REP_MENU_SUPLL.$this->menu_specifique.".inc") ) return false;
        $table=REP_MENU_SUPLL.$this->menu_specifique.".inc";
        $query=" SELECT * FROM ".$table." WHERE etat = 'true' ";
        $menu_auto= exe_sql('',$table,'menu_auto',$query,'');
      }else {
        if (/* !defined('CONFIG_MENU_PRIMAIRE') ||*/ strtoupper(CONFIG_MENU_PRIMAIRE) == strtoupper('auto')) {

          $nom=NewFct('cstr_liste',REP_DATA.LANG_POST,"");
          $config_menu=$this->add_tbl_php(TBL_MODULE_CONFIG_MENU_INC,'config_menu');
          $rubrique=$this->add_tbl_php(TBL_MODULE_RUBRIQUE_INC,'rubrique');
          $i_links=$this->add_tbl_php(TBL_INDEX_LINKS_INC,'i_links');
          $cpt_tri=0;
          if(is_array($nom))
          while ($row =each($nom)){
            $row['value']=( is_string($row['value']) )?trim($row['value']): $row['value'];

            if ( isset($rubrique[$row['value']]) && ($rubrique[$row['value']]['base']=='auto') && is_dir(REP_DATA.LANG_POST.trim($rubrique[$row['value']]['path'])) )  {
              $key=eregi_replace("(^(.*/)*)|(\.[a-z]{3}$)",'',$row['value']);
              $fils['id']=$key;
              $fils['etat']= "true";
              $fils['rub']= $config_menu['rubrique'];
              $fils['rub_selected']= $config_menu['menu_rubrique'];
              $fils['href']= (isset($rubrique[$row['value']]['path']))? substr($rubrique[$row['value']]['path'], 1) :$row['value'] ;
              $fils['title_'.LANG_POST]= (isset($rubrique[$row['value']]['titre_'.LANG_POST]))? $rubrique[$row['value']]['titre_'.LANG_POST] :$row['value'] ;
              $fils['txt_'.LANG_POST]= (isset($rubrique[$row['value']]['titre_'.LANG_POST]))? $rubrique[$row['value']]['titre_'.LANG_POST] :$row['value'] ;
              if(file_exists(REP_IMG.LANG_POST.'/'.str_replace('/','_',$rubrique[$row['value']]['path']).'.jpg'))$fils['img_'.LANG_POST]= REP_IMG.LANG_POST.'/'.str_replace('/','_',$rubrique[$row['value']]['path']).'.jpg';
              if(file_exists(REP_IMG.LANG_POST.'/'.str_replace('/','_',$rubrique[$row['value']]['path']).'_s.jpg'))$fils['img_s_'.LANG_POST.'']= REP_IMG.LANG_POST.'/'.str_replace('/','_',$rubrique[$row['value']]['path']).'_s.jpg';
              $fils['html']= "";
              $fils['tri']=$cpt_tri;
            }
            elseif(tep_not_null($row['value']) && substr($row['value'],0,3) !='bak'){
              $y=NewFct('extract_nom_dater_evoluer',LANG_POST."/".$row['value']);
              $key=md5($y['nom_ss_ext']);
              $post=(isset( $i_links[$key]))? $i_links[$key] : array();
              if (test_file_name_dater($y['rub'].$y['nom_ss_ext']) && test_bool(@$post['etat']) && $y['nom_ss_ext'] !='accueil') {
                $fils['id']= $y['nom_ss_ext'];
                $fils['etat']= (isset($i_links[$key]['etat'])) ? $i_links[$key]['etat']: 'false';
                $fils['rub']= "false";
                $fils['rub_selected']= "true";
                $fils['href']= $y['nom_ss_ext'];
                $fils['title_'.LANG_POST]= (isset($i_links[$key]['title_'.LANG_POST]))? $i_links[$key]['title_'.LANG_POST]:$y['nom_ss_ext'];
                $fils['txt_'.LANG_POST]= (isset($i_links[$key]['title_'.LANG_POST]))? $i_links[$key]['title_'.LANG_POST]:$y['nom_ss_ext'];
                if(file_exists(REP_IMG.LANG_POST.'/'.$y['nom_ss_ext'].'.jpg'))$fils['img_'.LANG_POST]= REP_IMG.LANG_POST.'/'.$y['nom_ss_ext'].'.jpg';
                $fils['img_s_'.LANG_POST.'']= REP_IMG.LANG_POST.'/'.$y['nom_ss_ext'].'_s.jpg';
                $fils['html']= "";
                $fils['tri']=(($c=substr($y['nom_ss_ext'],0,2)) && is_numeric($c) )?$c : $cpt_tri;
              }
            }
            if (isset($fils) && is_array($fils)) $menu_auto[$row['value']]=$fils;
            unset($fils);
            $cpt_tri++;
          }
          else $menu_auto=array();
        }else {
          $query=" SELECT * FROM ".TBL_MODULE_MENU_INC." WHERE etat = 'true' ";
          $menu_auto= exe_sql('',TBL_MODULE_MENU_INC,'menu_auto',$query,'');
        }
      }

      $this->menu=$menu_auto;
    if(count($menu_auto)>0){
      foreach($this->menu as $m)
        $msort[$m['tri']]=$m;

      ksort($msort);
      $this->menu=$msort;
    }
  }

  /**
    Recup sous cat

  */
  /*private*/ function sous_cat($menu_auto_list){
    if (!test_const('PX_CONFIG_MODULE_RUBRIQUE')) return false;
    // rechecher de la key de rub, si numeric utilise id (mode auto/file)
    $key= (!is_numeric($menu_auto_list['key'])) ? $menu_auto_list['key']: (!is_numeric($menu_auto_list['value']['id'])? $menu_auto_list['value']['id']: $menu_auto_list['value']['href']);

    $this->_add_class('rubrique',"include/lib/class/class.rubrique.php");
    $rub= $this->_call('rubrique', 'init',$key,array('s_printH'=>$this->s_printH, 'profondeur'=>$this->profondeur));
    $rub= $this->_call('rubrique', 'list_cat',$this->format);

      $Resul=$R='';
      if (is_array($rub))  {
        while ($rs=each($rub))
          $Resul.=nett_acen($rs['value']['format'])."\n";

          $Resul=trim($Resul);
          if (!empty($Resul)&& $Resul!='')
            $R=str_replace('{rub}',$Resul,sprintf($this->blok_ss_rub,$key, (isset($menu_auto_list['value']['txt_'.LANG_POST])? $menu_auto_list['value']['txt_'.LANG_POST] :$menu_auto_list['value']['txt_'.LANG_CODE_DEFAUT]) ));

        return $R;

      }
  }


  /**
    Sortie du menu
    @return print
  */
  /*public*/ function draw(){

    /* Construtions des menus  listage menu.inc fichier primaire */
    $max=count($this->menu);
    $compteur=0;
    $config_menu=$this->add_tbl_php(TBL_MODULE_CONFIG_MENU_INC,'config_menu');

    if (is_array($this->menu))
    while ( $menu_auto_list =each($this->menu)){

      $liens_href=$liens_title=$liens_txt=$liens_html=$liens_img=$R=''; $compteur++;
      /* option separateur d'entree de menu, uniquement si pas ke dernier */
      if ($max ==$compteur) $sepration='';
      // rechecher de la key de rub, si numeric utilise id (mode auto/file)
      $key= (!is_numeric($menu_auto_list['key'])) ? $menu_auto_list['key']: (!is_numeric($menu_auto_list['value']['id'])? $menu_auto_list['value']['id']: $menu_auto_list['value']['href']);


      $liens_href= (!@eregi("(^http:|mailto|.(zip|tar|gz|pdf|ps|png|jpg|gif)$)",$menu_auto_list['value']['href']))? LANG_POST."/".$menu_auto_list['value']['href']:$menu_auto_list['value']['href'];

      $txt=$txt_select=str_replace("&apos;","\'",unhtmlentities(@$menu_auto_list['value']['txt_'.LANG_POST]));
      if (strlen($txt)>LONG_DES_LIENS) $txt=substr($txt,0,LONG_DES_LIENS);
//       if (isset($menu_auto_list['value']['img_'.LANG_POST])) $liens_img='<img src="'.URL_DU_SITE.$menu_auto_list['value']['img_'.LANG_POST].'" alt="'.$liens_txt.'" />';
      if (isset($menu_auto_list['value']['img_s_'.LANG_POST])) {
        $liens_img='<img src="'.URL_DU_SITE.@$menu_auto_list['value']['img_'.LANG_POST].'" alt="'.$liens_txt.'"  onmouseover=\'this.src="'.URL_DU_SITE.@$menu_auto_list['value']['img_s_'.LANG_POST].'"\' onmouseout=\'this.src="'.URL_DU_SITE.@$menu_auto_list['value']['img_'.LANG_POST].'"\' />';
        $liens_img_select='<img src="'.URL_DU_SITE.@$menu_auto_list['value']['img_s_'.LANG_POST].'" alt="'.$liens_txt.'"  onmouseover=\'this.src="'.URL_DU_SITE.@$menu_auto_list['value']['img_'.LANG_POST].'"\' onmouseout=\'this.src="'.URL_DU_SITE.@$menu_auto_list['value']['img_s_'.LANG_POST].'"\' />';
        $txt=$liens_img;
        $txt_select=$liens_img_select;
      }
      $class=(isset($menu_auto_list['value']['class'])) ?' '.$menu_auto_list['value']['class'].' ' : $key;
      $liens_html=( isset($menu_auto_list['value']['html']) &&( $menu_auto_list['value']['html'] !='html supplémentaire' ||  $menu_auto_list['value']['html'] !='')) ? $menu_auto_list['value']['html'] : '';

        if ((test_const('PX_CONFIG_MODULE_RUBRIQUE')) AND (test_bool($menu_auto_list['value']['rub'])) ) $R=$this->sous_cat($menu_auto_list);


          if (menu_selected($this->s_printH,$menu_auto_list['value']['href'])) $R =sprintf ($this->format,"primaire select".$class,"",tep_url_link($liens_href),$txt_select,''," " , $liens_html, $key,$this->sepration.@$R);
          else $R =sprintf ($this->format,"primaire ".$class,"",tep_url_link($liens_href),$txt,'',"",$liens_html, $key,$this->sepration.@$R);

        /*Trie des rub de la liste */
        reset($menu_auto_list);
        $tab=array('');

        $menu_res[$menu_auto_list['value']['id']]=$R;
        $tri[(isset($menu_auto_list['value']['tri']))? $menu_auto_list['value']['tri'] : '0']=$menu_auto_list['value']['id'] ;
      }

      if (!isset($menu_res) || count($menu_res)<1)  return null;
      if ($config_menu['tri']=='ASC') krsort($tri);
      else ksort($tri);

      while ($q=each($tri))
        print $menu_res[$q['value']];
  }

}
?>