filename = $opac_notices_display_modes; $this->filename=str_replace(array(".xml",".XML"), "", $this->filename); $this->analyse(); } /** * On parse le fichier xml des modes d'affichage. */ private function analyse(){ global $include_path; if( !is_array($this->modes) || !count($this->modes)){ if(file_exists($include_path."/records/".$this->filename."_subst.xml")){ $filepath = $include_path."/records/".$this->filename."_subst.xml"; }else if (file_exists($include_path."/records/".$this->filename.".xml")){ $filepath = $include_path."/records/".$this->filename.".xml"; }else{ $filepath = $include_path."/records/display_modes.xml"; } $fp = fopen($filepath,"r"); $xml=fread($fp,filesize($filepath)); fclose($fp); $this->modes =_parser_text_no_function_($xml, "MODES"); } } /** * Retourne un mode en fonction de son ID * * @param int $mode_id l'identifiant d'un mode * @return array le tableau correspondant au mode recherché */ public function get_mode($mode_id){ if(sizeof($this->modes['MODE'])){ foreach($this->modes['MODE'] as $mode_offset=>$mode){ if($mode['ID']==$mode_id){ return $this->modes['MODE'][$mode_offset]; } } } return false; } /** * Compare les types de doc autorisés dans le mode avec les types de doc dans le résultat. * * @param int $mode_id l'identifiant du mode à comparer * @return boolean comparaison vrai ou fausse */ private function compare_typdoc($mode_id){ global $l_typdoc; $tab_typdoc_result=explode(",",$l_typdoc); $mode=$this->get_mode($mode_id); $return=false; if($mode['DOCTYPES'][0]['value'] && $tab_typdoc_mode=explode(",",$mode['DOCTYPES'][0]['value'])){ $return=true; foreach($tab_typdoc_result as $typdoc_result){ if(!in_array($typdoc_result, $tab_typdoc_mode)){ $return=false; } } }elseif(!sizeof($mode['DOCTYPES'])){ $return=true; } return $return; } /** * Retourne le mode courrant à utiliser pour un resultat de recherche * en fonction de la sesson, et du paramètrage dans le fichier xml * * @return int $mode_id l'identifiant du mode à utiliser */ public function get_current_mode(){ $mode_id=0; $mode_id_selected=0; $mode_id_auto=0; $mode_id_default=0; if(($_SESSION['user_current_mode'] && $this->compare_typdoc($_SESSION['user_current_mode'])) || $_SESSION['user_current_mode']==="0"){ $mode_id_selected=$_SESSION['user_current_mode']; } if(sizeof($this->modes['MODE'])){ foreach($this->modes['MODE'] as $mode){ if($mode['DOCTYPES'][0]['AUTO']=='yes' && $this->compare_typdoc($mode['ID'])){ //Mode auto $mode_id_auto= $mode['ID']; } if($mode['DEFAULT']=='yes'){ //mode par défaut $mode_id_default= $mode['ID']; } } } if($mode_id_selected || $mode_id_selected==="0"){ $mode_id=$mode_id_selected; }elseif($mode_id_auto){ $mode_id=$mode_id_auto; }elseif($mode_id_default){ $mode_id=$mode_id_default; } return $mode_id; } /** * Retourne la bonne fonction en fonction du mode $mode_id * * @param int $mode_id le mode courrant * @return unknown|boolean */ public function get_aff_function($mode_id){ global $class_path,$include_path; $mode=$this->get_mode($mode_id); if($aff_notice_fonction=$mode['FUNCTION'][0]['SRC']){ if(file_exists($include_path."/".$aff_notice_fonction.".inc.php")){ require_once($include_path."/".$aff_notice_fonction.".inc.php"); return $aff_notice_fonction; }else{ return false; } }else{ return false; } } /** * Retourne l'identifiant du template pour l'objet mode passé en param * * @param unknown $mode * @return unknown|number */ public function get_template_id($mode_id){ $mode=$this->get_mode($mode_id); $template_id=$mode['TEMPLATE'][0]['TEMPLATE_ID']; if($template_id){ return $template_id; }else { return 0; } } /** * Retourne le code du template si il est saisi dans le fichier xml * * @param unknown $mode * @return unknown|number */ public function get_template_code($mode_id){ $mode=$this->get_mode($mode_id); $code=$mode['TEMPLATE'][0]; if(sizeof($code)){ return $code; }else { return 0; } } /** * Retourne le répertoire de template à utiliser dans le cas du type django * @param int $mode_id * @return string */ public function get_template_directory($mode_id){ $mode = $this->get_mode($mode_id); $template_mode = $mode['TEMPLATE'][0]['DIRECTORY']; if ($template_mode) { return $template_mode; } else { return ""; } } /** * Retourne les informations du layout * * @param unknown $mode_id * @return Ambigous |number */ public function get_layout($mode_id){ $mode=$this->get_mode($mode_id); $layout=$mode['LAYOUT'][0]; if($layout){ return $layout; }else { return 0; } } /** * Enregistre le mode choisi par l'utilisateur en session * * @param int $user_current_mode le mode choisi par l'utilisateur */ public function set_user_current_mode($user_current_mode){ $_SESSION['user_current_mode']=$user_current_mode; } /** * On affiche le menu d'affichage * * @return string */ public function show_mode_selector(){ $current_mode=$this->get_current_mode(); $nb_modes = 0; $html = ""; $html.=" "; return $html; } /** * retourne l'url de l'icone à afficher dans la liste de choix * * @param string $name le nom de l'icone * @return string le path de l'icone */ private function get_icon_url($name){ global $css; global $base_path; $src=''; if(file_exists($base_path.'/styles/'.$css.'/images/'.$name)){ $src=$base_path.'/styles/'.$css.'/images/'.$name; }elseif(file_exists($base_path.'/styles/common/images/'.$name)){ $src=$base_path.'/styles/common/images/'.$name; }elseif(file_exists($base_path.'/images/'.$name)){ $src=$base_path.'/images/'.$name; } return $src; } /** * renseigne l'affichage ou non de la navigation * @param int $mode_id */ public function is_nav_displayed($mode_id) { $mode=$this->get_mode($mode_id); $layout=$mode['LAYOUT'][0]; if($layout['NAV'] == 'no'){ return false; } return true; } }