table;
}
if (!count($langue_doc)) {
$langue_doc = new marc_list('lang');
$langue_doc = $langue_doc->table;
}
if (!count($icon_doc)) {
$icon_doc = new marc_list('icondoc');
$icon_doc = $icon_doc->table;
}
if(!count($biblio_doc)) {
$biblio_doc = new marc_list('nivbiblio');
$biblio_doc = $biblio_doc->table;
}
// propriétés pour le selecteur de panier
$selector_prop = "toolbar=no, dependent=yes, resizable=yes, scrollbars=yes";
$cart_click = "onClick=\"openPopUp('./cart.php?object_type=NOTI&item=!!id!!&unq=!!unique!!', 'cart', 600, 700, -2, -2, '$selector_prop')\"";
// définition de la classe d'affichage des monographies en liste
class mono_display {
var $notice_id = 0; // id de la notice à afficher
var $isbn = 0; // isbn ou code EAN de la notice à afficher
var $notice; // objet notice (tel que fetché dans la table 'notices'
var $langues = array();
var $languesorg = array();
var $action = ''; // URL à associer au header
var $header = ''; // chaine accueillant le chapeau de notice (peut-être cliquable)
var $tit_serie = ''; // titre de série si applicable
var $tit1 = ''; // valeur du titre 1
var $result = ''; // affichage final
var $level = 1; // niveau d'affichage
var $isbd = ''; // isbd de la notice en fonction du level défini
var $simple_isbd = ""; // isbd de la notice en fonction du level défini, sans l'image
var $expl = 0; // flag indiquant si on affiche les infos d'exemplaire
var $nb_expl = 0; //nombre d'exemplaires
var $link_expl = ''; // lien associé à un exemplaire
var $responsabilites = array("responsabilites" => array(),"auteurs" => array()); // les auteurs
var $categories = array();// les categories
var $show_resa = 0; // flag indiquant si on affiche les infos de resa
var $show_planning = 0; // flag indiquant si on affiche les infos de prévision
var $p_perso;
var $print_mode=0; // 0 affichage normal
// 1 affichage impression sans liens
// 2 affichage impression avec liens sur documents numeriques
var $show_explnum=1;
var $show_statut=0;
var $aff_statut='' ; // carré de couleur pour signaler le statut de la notice
var $tit_serie_lien_gestion ;
var $childs=array(); //Filles de la notice
var $anti_loop="";
var $drag=""; //Notice draggable ?
var $no_link;
var $show_opac_hidden_fields=true;
var $ajax_mode=0;
// constructeur------------------------------------------------------------
function mono_display( $id, // $id = id de la notice à afficher
$level=1, // $level :
// 0 : juste le header (titre / auteur principal avec le lien si applicable)
// 1 : ISBD seul, pas de note, bouton modif, expl, explnum et résas
// 6 : cas général détaillé avec notes, categ, langues, indexation... + boutons
$action='', // $action = URL associée au header
$expl=1, // $expl -> affiche ou non les exemplaires associés
$expl_link='', // $expl_link -> lien associé à l'exemplaire avec !!expl_id!!, !!notice_id!! et !!expl_cb!! à mettre à jour
$lien_suppr_cart="", // $lien_suppr_cart -> lien de suppression de la notice d'un caddie
$explnum_link='',
$show_resa=0, // $show_resa = affichage des resa ou pas
$print=0, // $print = 0 affichage normal
// 1 affichage impression sans liens
// 2 affichage impression avec liens sur documents numeriques
$show_explnum=1,
$show_statut=0,
$anti_loop='',
$draggable=0,
$no_link=false,
$show_opac_hidden_fields=true,
$ajax_mode=0,
$show_planning=0 // $show_planning = affichage des prévisions ou pas
) {
global $pmb_recherche_ajax_mode;
global $categ;
global $id_empr;
if($pmb_recherche_ajax_mode){
$this->ajax_mode=$ajax_mode;
if($this->ajax_mode) {
if (is_object($id)){
$param['id']=$id->notice_id;
} else {
$param['id']=$id;
}
$param['function_to_call']="mono_display";
//if($level)$param['level']=$level; // à 6
if($action)$param['action']=$action;
if($expl)$param['expl']=$expl;
if($expl_link)$param['expl_link']=$expl_link;
// if($lien_suppr_cart)$param['lien_suppr_cart']=$lien_suppr_cart;
if($explnum_link)$param['explnum_link']=$explnum_link;
//if($show_resa)$param['show_resa']=$show_resa;
if($print)$param['print']=$print;
//if($show_explnum)$param['show_explnum']=$show_explnum;
//if($show_statut)$param['show_statut']=$show_statut;
//if($anti_loop)$param['anti_loop']=$anti_loop;
//if($draggable)$param['draggable']=$draggable;
if($no_link)$param['no_link']=$no_link;
if($categ)$param['categ']=$categ;
if($id_empr)$param['id_empr']=$id_empr;
//if($show_opac_hidden_fields)$param['show_opac_hidden_fields']=$show_opac_hidden_fields;
$this->mono_display_cmd=serialize($param);
}
}
if(!$id)
return;
else {
if (is_object($id)){
$this->notice_id = $id->notice_id;
$this->notice = $id;
$this->langues = get_notice_langues($this->notice_id, 0) ; // langues de la publication
$this->languesorg = get_notice_langues($this->notice_id, 1) ; // langues originales
$this->isbn = $id->code ;
} else {
$this->notice_id = $id;
$this->mono_display_fetch_data();
}
if(!$this->ajax_mode || !$level) {
$this->childs=array();
$requete="select num_notice as notice_id,relation_type from notices_relations,notices where linked_notice=".$this->notice_id." and num_notice=notice_id order by relation_type, rank,create_date";
$resultat=mysql_query($requete);
if (mysql_num_rows($resultat)) {
while ($r=mysql_fetch_object($resultat)) {
$this->childs[$r->relation_type][]=$r->notice_id;
}
}
}
}
global $memo_p_perso_notice;
if(!$this->ajax_mode || !$level) {
if(!$memo_p_perso_notice) {
$memo_p_perso_notice=new parametres_perso("notices");
}
$this->p_perso=$memo_p_perso_notice;
}
$this->level = $level;
$this->expl = $expl;
$this->show_resa = $show_resa;
$this->link_expl = $expl_link;
$this->link_explnum = $explnum_link;
$this->lien_suppr_cart = $lien_suppr_cart;
// mise à jour des liens
$this->action = $action;
$this->drag=$draggable;
$this->print_mode=$print;
$this->show_explnum=$show_explnum;
$this->show_statut=$show_statut;
$this->no_link=$no_link;
$this->anti_loop=$anti_loop;
//affichage ou pas des champs persos OPAC masqués
$this->show_opac_hidden_fields=$show_opac_hidden_fields;
$this->action = str_replace('!!id!!', $this->notice_id, $this->action);
$this->responsabilites = get_notice_authors($this->notice_id) ;
// mise à jour des catégories
if(!$this->ajax_mode || !$level) $this->categories = get_notice_categories($this->notice_id) ;
$this->show_planning = $show_planning;
$this->do_header();
switch($level) {
case 0:
// là, c'est le niveau 0 : juste le header
$this->result = $this->header;
break;
default:
// niveau 1 et plus : header + isbd à générer
$this->init_javascript();
if(!$this->ajax_mode) $this->do_isbd();
$this->finalize();
break;
}
return;
}
// finalisation du résultat (écriture de l'isbd)
function finalize() {
$this->result = str_replace('!!ISBD!!', $this->isbd, $this->result);
}
// génération du template javascript---------------------------------------
function init_javascript() {
global $msg, $base_path, $pmb_recherche_ajax_mode;
// propriétés pour le selecteur de panier
$selector_prop = "toolbar=no, dependent=yes, width=500, height=400, resizable=yes, scrollbars=yes";
$cart_click = "onClick=\"openPopUp('".$base_path."/cart.php?object_type=NOTI&item=!!notice_id!!', 'cart', 600, 700, -2, -2, '$selector_prop')\"";
$current=$_SESSION["CURRENT"];
if ($current!==false) {
$print_action = " ";
}
if($pmb_recherche_ajax_mode && $this->ajax_mode){
$javascript_template ="
$attributs_drag
!!heada!!
";
if($this->is_child)
$javascript_template .= "";
} else{
$javascript_template ="
$attributs_drag
!!heada!!
";
if(SESSrights & CATALOGAGE_AUTH){
$javascript_template.="
".$print_action;
}else{
$javascript_template.=$print_action;
}
$javascript_template .=" !!ISBD!!
";
if($this->is_child)
$javascript_template .= "";
}
$this->result = str_replace('!!id!!', $this->notice_id.($this->anti_loop?"_p".implode("_",$this->anti_loop):""), $javascript_template);
$this->result = str_replace('!!notice_id!!', $this->notice_id, $this->result);
$this->result = str_replace('!!heada!!', $this->lien_suppr_cart.$this->header, $this->result);
}
// génération de l'isbd----------------------------------------------------
function do_isbd() {
global $dbh, $base_path;
global $langue_doc;
global $msg;
global $tdoc;
global $fonction_auteur;
global $charset;
global $thesaurus_mode_pmb, $thesaurus_categories_categ_in_line, $pmb_keyword_sep, $thesaurus_categories_affichage_ordre;
global $load_tablist_js;
global $lang;
global $categories_memo,$libelle_thesaurus_memo;
global $categories_top,$use_opac_url_base,$opac_url_base,$thesaurus_categories_show_only_last;
global $categ;
global $id_empr;
global $pmb_show_notice_id,$pmb_opac_url,$pmb_show_permalink;
global $sort_children;
global $pmb_resa_planning;
// constitution de la mention de titre
if($this->tit_serie) {
if ($this->print_mode) $this->isbd = $this->tit_serie;
else $this->isbd = $this->tit_serie_lien_gestion;
if($this->notice->tnvol)
$this->isbd .= ', '.$this->notice->tnvol;
}
$this->isbd ? $this->isbd .= '. '.$this->notice->tit1 : $this->isbd = $this->notice->tit1;
$tit2 = $this->notice->tit2;
$tit3 = $this->notice->tit3;
$tit4 = $this->notice->tit4;
if($tit3) $this->isbd .= " = $tit3";
if($tit4) $this->isbd .= " : $tit4";
if($tit2) $this->isbd .= " ; $tit2";
$this->isbd .= ' ['.$tdoc->table[$this->notice->typdoc].']';
$mention_resp = array() ;
// constitution de la mention de responsabilité
//$this->responsabilites
$as = array_search ("0", $this->responsabilites["responsabilites"]) ;
if ($as!== FALSE && $as!== NULL) {
$auteur_0 = $this->responsabilites["auteurs"][$as] ;
$auteur = new auteur($auteur_0["id"]);
if ($this->print_mode) $mention_resp_lib = $auteur->isbd_entry;
else $mention_resp_lib = $auteur->isbd_entry_lien_gestion;
if (!$this->print_mode) $mention_resp_lib .= $auteur->author_web_link ;
if ($auteur_0["fonction"]) $mention_resp_lib .= ", ".$fonction_auteur[$auteur_0["fonction"]];
$mention_resp[] = $mention_resp_lib ;
}
$as = array_keys ($this->responsabilites["responsabilites"], "1" ) ;
for ($i = 0 ; $i < count($as) ; $i++) {
$indice = $as[$i] ;
$auteur_1 = $this->responsabilites["auteurs"][$indice] ;
$auteur = new auteur($auteur_1["id"]);
if ($this->print_mode) $mention_resp_lib = $auteur->isbd_entry;
else $mention_resp_lib = $auteur->isbd_entry_lien_gestion;
if (!$this->print_mode) $mention_resp_lib .= $auteur->author_web_link ;
if ($auteur_1["fonction"]) $mention_resp_lib .= ", ".$fonction_auteur[$auteur_1["fonction"]];
$mention_resp[] = $mention_resp_lib ;
}
$as = array_keys ($this->responsabilites["responsabilites"], "2" ) ;
for ($i = 0 ; $i < count($as) ; $i++) {
$indice = $as[$i] ;
$auteur_2 = $this->responsabilites["auteurs"][$indice] ;
$auteur = new auteur($auteur_2["id"]);
if ($this->print_mode) $mention_resp_lib = $auteur->isbd_entry;
else $mention_resp_lib = $auteur->isbd_entry_lien_gestion;
if (!$this->print_mode) $mention_resp_lib .= $auteur->author_web_link ;
if ($auteur_2["fonction"]) $mention_resp_lib .= ", ".$fonction_auteur[$auteur_2["fonction"]];
$mention_resp[] = $mention_resp_lib ;
}
$libelle_mention_resp = implode ("; ",$mention_resp) ;
if($libelle_mention_resp) $this->isbd .= " / $libelle_mention_resp" ;
// mention d'édition
if($this->notice->mention_edition) $this->isbd .= ". - ".$this->notice->mention_edition;
// zone de l'adresse
// on récupère la collection au passage, si besoin est
if($this->notice->subcoll_id) {
$collection = new subcollection($this->notice->subcoll_id);
$ed_obj = new editeur($collection->editeur) ;
if ($this->print_mode) {
$editeurs .= $ed_obj->isbd_entry;
$collections = $collection->isbd_entry;
} else {
$editeurs .= $ed_obj->isbd_entry_lien_gestion;
$collections = $collection->isbd_entry_lien_gestion;
}
} elseif ($this->notice->coll_id) {
$collection = new collection($this->notice->coll_id);
$ed_obj = new editeur($collection->parent) ;
if ($this->print_mode) {
$editeurs .= $ed_obj->isbd_entry;
$collections = $collection->isbd_entry;
} else {
$editeurs .= $ed_obj->isbd_entry_lien_gestion;
$collections = $collection->isbd_entry_lien_gestion;
}
} elseif ($this->notice->ed1_id) {
$editeur = new editeur($this->notice->ed1_id);
if ($this->print_mode) $editeurs .= $editeur->isbd_entry;
else $editeurs .= $editeur->isbd_entry_lien_gestion;
}
if($this->notice->ed2_id) {
$editeur = new editeur($this->notice->ed2_id);
if ($this->print_mode) $ed_isbd=$editeur->isbd_entry;
else $ed_isbd=$editeur->isbd_entry_lien_gestion;
$editeurs ? $editeurs .= ' ; '.$ed_isbd : $editeurs = $ed_isbd;
}
if($this->notice->year) $editeurs ? $editeurs .= ', '.$this->notice->year : $editeurs = $this->notice->year;
elseif ($this->notice->niveau_biblio!='b') $editeurs ? $editeurs .= ', [s.d.]' : $editeurs = "[s.d.]";
if ($editeurs) $this->isbd .= ". - $editeurs";
// zone de la collation (ne concerne que a2)
if($this->notice->npages)
$collation = $this->notice->npages;
if($this->notice->ill)
$collation .= ': '.$this->notice->ill;
if($this->notice->size)
$collation .= '; '.$this->notice->size;
if($this->notice->accomp)
$collation .= '+ '.$this->notice->accomp;
if($collation)
$this->isbd .= ". - $collation";
if($collections) {
if($this->notice->nocoll) $collections .= '; '.$this->notice->nocoll;
$this->isbd .= ". - ($collections)".' ';
}
if(substr(trim($this->isbd), -1) != "."){
$this->isbd .= '.';
}
// note générale
if($this->notice->n_gen)
$zoneNote = nl2br(htmlentities($this->notice->n_gen,ENT_QUOTES, $charset)).' ';
// ISBN ou NO. commercial
if($this->notice->code) {
if(isISBN($this->notice->code)) {
if ($zoneNote) {
$zoneNote .= '. - ISBN ';
} else {
$zoneNote = 'ISBN ';
}
} else {
if($zoneNote) $zoneNote .= '. - ';
}
$zoneNote .= $this->notice->code;
}
if($this->notice->prix) {
if($this->notice->code) {$zoneNote .= ' : '.$this->notice->prix;}
else {
if ($zoneNote) { $zoneNote .= ' '.$this->notice->prix;}
else { $zoneNote = $this->notice->prix;}
}
}
if($zoneNote) $this->isbd .= "
$zoneNote.";
//In
//Recherche des notices parentes
if (!$this->no_link) {
$requete="select linked_notice, relation_type, rank, l.niveau_biblio as lnb, l.niveau_hierar as lnh from notices_relations, notices as l where num_notice=".$this->notice_id." and linked_notice=l.notice_id order by relation_type,rank";
$result_linked=mysql_query($requete) or die(mysql_error());
//Si il y en a, on prépare l'affichage
if (mysql_num_rows($result_linked)) {
global $relation_listup ;
if (!$relation_listup) $relation_listup=new marc_list("relationtypeup");
}
$r_type=array();
$ul_opened=false;
$r_type_local="";
//Pour toutes les notices liées
while ($r_rel=mysql_fetch_object($result_linked)) {
//Pour avoir le lien par défaut
if (!$this->print_mode && (SESSrights & CATALOGAGE_AUTH)) $link_parent=$base_path.'/catalog.php?categ=isbd&id=!!id!!'; else $link_parent="";
if ($r_rel->lnb=='s' && $r_rel->lnh=='1') {
// c'est une notice chapeau
global $link_serial,$link_analysis, $link_bulletin, $link_explnum_serial ;
$link_serial_sub = $base_path."/catalog.php?categ=serials&sub=view&serial_id=".$r_rel->linked_notice;
// function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true, $draggable=0 ) {
$serial = new serial_display($r_rel->linked_notice, 0, $link_serial_sub, $link_analysis, $link_bulletin, "", "", 0, $this->print_mode, $this->show_explnum, $this->show_statut, $this->show_opac_hidden_fields, 1, true);
$aff = $serial->header;
}
else if ($r_rel->lnb=='a' && $r_rel->lnh=='2') {
// c'est un dépouillement de bulletin
global $link_serial, $link_analysis, $link_bulletin, $link_explnum_serial ;
if(!$link_analysis){
$link_analysis=$base_path."/catalog.php?categ=serials&sub=bulletinage&action=view&bul_id=!!bul_id!!&art_to_show=!!id!!";
}
$serial = new serial_display($r_rel->linked_notice, 0, $link_serial, $link_analysis, $link_bulletin, "", "", 0, $this->print_mode, $this->show_explnum, $this->show_statut, $this->show_opac_hidden_fields, 1, true);
$aff = $serial->result;
}
else {
if($link_parent && $r_rel->lnb=='b' && $r_rel->lnh=='2'){
$requete="SELECT bulletin_id FROM bulletins WHERE num_notice='".$r_rel->linked_notice."'";
$res=mysql_query($requete);
if(mysql_num_rows($res)){
$link_parent=$base_path."/catalog.php?categ=serials&sub=bulletinage&action=view&bul_id=".mysql_result($res,0,0);
}
}
// dans les autres cas
$parent_notice=new mono_display($r_rel->linked_notice,0,$link_parent, 1, '', "", '', 0, $this->print_mode, $this->show_explnum, $this->show_statut, '', 1, true, $this->show_opac_hidden_fields, 0);
$aff = $parent_notice->header ;
$this->nb_expl+=$parent_notice->nb_expl;
}
//$parent_notice=new mono_display($r_rel->linked_notice,0,$link_parent);
//Présentation différente si il y en a un ou plusieurs
if (mysql_num_rows($result_linked)==1) {
$this->isbd.="
".$relation_listup->table[$r_rel->relation_type]." ".$aff."
";
} else {
if ($r_rel->relation_type!=$r_type_local) {
$r_type_local=$r_rel->relation_type;
if ($ul_opened) {
$this->isbd.="";
$this->isbd.="\n".$relation_listup->table[$r_rel->relation_type]."";
$this->isbd.="\n