table; } // récupération des codes langues if (!count($langue_doc)) { $f_lang = new marc_list('lang'); $langue_doc = $f_lang->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 (kinda template) $selector_prop = "toolbar=no, dependent=yes, width=500, height=400, resizable=yes, scrollbars=yes"; $cart_click = "onClick=\"openPopUp('./cart.php?object_type=NOTI&item=!!item!!&unq=!!unique!!', 'cart', 600, 700, -2, -2, '$selector_prop')\""; // définition de la classe d'affichage des périodiques class serial_display { var $notice_id = 0; // id de la notice à afficher var $notice; // objet notice (tel que fetché dans la table 'notices' var $bul_id = 0 ; // id de bulletin récupéré pour l'ISBD var $action_serial_org = ''; // lien à activer si la notice est s1 (notice chapeau) var $action_analysis_org = ''; // lien à activer si la notice est a2 (dépouillment) var $action_serial = ''; // lien modifié pour le header var $action_analysis = ''; // lien modifié pour le header (nécessite !!bul_id!!) var $action_bulletin = ''; // action pour la notion de bulletin var $header = ''; // chaine accueillant le chapeau de notice (peut-être cliquable) var $tit1 = ''; // valeur du titre 1 var $parent_id = 0; // id de la notice parent var $parent_title = ''; // titre de la notice parent si a2 var $parent_numero = ''; // mention de numérotation dans le bulletinage associé var $parent_date = ''; // mention de date (txt) dans le bulletinage associé var $parent_date_date = ''; // mention de date (date) dans le bulletinage associé var $parent_aff_date_date = ''; // mention de date (date) dans le bulletinage associé au format correct pour affichage var $result = ''; // affichage final var $level = 1; // niveau d'affichage var $isbd = ''; // isbd de la notice en fonction du level défini var $responsabilites = array("responsabilites" => array(),"auteurs" => array()); // les auteurs var $categories = array(); // les categories var $lien_explnum = ''; // Lien de gestion des documents numériques associés var $bouton_explnum = 0 ; // bouton ou pas d'ajout de doc numérique var $p_perso; var $show_explnum = 1; var $show_statut = 0; var $childs= array(); //Filles de la notice var $print_mode = 0; // 0 affichage normal // 1 affichage impression sans liens // 2 affichage impression avec liens sur documents numeriques var $langues = array(); var $languesorg = array(); var $aff_statut = '' ; // carré de couleur pour signaler le statut de la notice var $show_opac_hidden_fields = true; var $drag = 0; var $anti_loop = ""; var $no_link = false; var $serial_nb_bulletins = 0; var $serial_nb_exemplaires = 0; var $serial_nb_articles = 0; var $serial_nb_etats_collection = 0; var $serial_nb_abo_actif = 0; // constructeur function serial_display ( $id, // $id = id de la notice à afficher $level='1', // $level : // 0 : juste le header (titre / auteur principal avec le lien si applicable) // 6 : cas général détaillé avec notes, categ, langues, indexation... + boutons $action_serial='', // $action_serial = URL à atteindre si la notice est une notice chapeau $action_analysis='', // $action_analysis = URL à atteindre si la notice est un dépouillement // note dans ces deux variable, '!!id!!' sera remplacé par l'id de cette notice // les deux liens s'excluent mutuellement, bien sur. $action_bulletin='', $lien_suppr_cart="", // $lien_suppr_cart = lien de suppression de la notice d'un caddie $lien_explnum="", $bouton_explnum=1, $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, $show_opac_hidden_fields=true, $draggable=0, $ajax_mode=0 , $anti_loop='', $no_link=false ) { global $pmb_recherche_ajax_mode; 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']="serial_display"; //if($level)$param['level']=$level; //6 if($action_serial)$param['action_serial']=$action_serial; if($action_analysis)$param['action_analysis']=$action_analysis; if($action_bulletin)$param['action_bulletin']=$action_bulletin; // if($lien_suppr_cart)$param['lien_suppr_cart']=$lien_suppr_cart; if($lien_explnum)$param['lien_explnum']=$lien_explnum; if($bouton_explnum)$param['bouton_explnum']=$bouton_explnum; if($print)$param['print']=$print; // if($show_explnum)$param['show_explnum']=$show_explnum; //if($show_statut)$param['show_statut']=$show_statut; //if($show_opac_hidden_fields)$param['show_opac_hidden_fields']=$show_opac_hidden_fields; //if($draggable)$param['draggable']=$draggable;//1 $this->mono_display_cmd=serialize($param); } } $this->lien_explnum = $lien_explnum ; $this->bouton_explnum = $bouton_explnum ; $this->print_mode=$print; $this->show_explnum=$show_explnum; $this->show_statut=$show_statut; $this->anti_loop=$anti_loop; $this->no_link=$no_link; if(!$id) return; else { if (is_object($id)){ $this->notice_id = $id->notice_id; $this->notice = $id; } else { $this->notice_id = $id; $this->serial_display_fetch_data(); } } $this->show_opac_hidden_fields=$show_opac_hidden_fields; if(!$this->ajax_mode)$this->p_perso=new parametres_perso("notices"); $this->responsabilites = get_notice_authors($this->notice_id) ; // mise à jour des catégories if(!$this->ajax_mode)$this->categories = get_notice_categories($this->notice_id) ; //récupération des langues $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->level = $level; $this->lien_suppr_cart = $lien_suppr_cart; // si la notice est a2 (dépouillement), on récupère les données du bulletinage if($this->notice->niveau_biblio == 'a' && $this->notice->niveau_hierar == 2) { $this->get_bul_info(); } // mise à jour des liens if (SESSrights & CATALOGAGE_AUTH){ $this->action_serial_org = $action_serial; $this->action_analysis = $action_analysis; $this->action_bulletin = $action_bulletin; if ($action_serial && $this->notice->niveau_biblio == 's' && $this->notice->niveau_hierar == '1') $this->action_serial = str_replace('!!id!!', $this->notice_id, $action_serial); if ($action_analysis && $this->notice->niveau_biblio == 'a' && $this->notice->niveau_hierar == '2') { $this->action_analysis = str_replace('!!id!!', $this->notice_id, $this->action_analysis); $this->action_analysis = str_replace('!!bul_id!!', $this->bul_id, $this->action_analysis); } $this->lien_explnum = str_replace('!!serial_id!!', $this->notice_id, $this->lien_explnum); $this->lien_explnum = str_replace('!!analysis_id!!', $this->notice_id, $this->lien_explnum); $this->lien_explnum = str_replace('!!bul_id!!', $this->bul_id, $this->lien_explnum); $this->drag=$draggable; }else{ $this->action_serial_org = ""; $this->action_analysis = ""; $this->action_bulletin = ""; $this->action_serial = ""; $this->lien_explnum = ""; $this->drag=""; } $this->do_header(); if($level) $this->init_javascript(); $this->isbd = 'ISBD'; if(!$this->ajax_mode) { $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; } } } switch($level) { case 0: // là, c'est le niveau 0 : juste le header //$this->do_header(); $this->result = $this->header; break; default: // niveau 1 et plus : header + isbd à générer //$this->do_header(); if(!$this->ajax_mode) $this->do_isbd(); if(!$this->ajax_mode) $this->finalize(); break; } return; } // récupération des info de bulletinage (si applicable) function get_bul_info() { global $dbh; global $msg ; // récupération des données du bulletin et de la notice apparentée $requete = "SELECT b.tit1,b.notice_id,b.code,a.*,c.*, date_format(date_date, '".$msg["format_date"]."') as aff_date_date "; $requete .= "from analysis a, notices b, bulletins c"; $requete .= " WHERE a.analysis_notice=".$this->notice_id; $requete .= " AND c.bulletin_id=a.analysis_bulletin"; $requete .= " AND c.bulletin_notice=b.notice_id"; $requete .= " LIMIT 1"; $myQuery = mysql_query($requete, $dbh); if (mysql_num_rows($myQuery)) { $parent = mysql_fetch_object($myQuery); $this->parent_title = $parent->tit1; $this->parent_id = $parent->notice_id; $this->code=$parent->code; $this->bul_id = $parent->bulletin_id; $this->parent_numero = $parent->bulletin_numero; $this->parent_date = $parent->mention_date; $this->parent_date_date = $parent->date_date; $this->parent_aff_date_date = $parent->aff_date_date; } } // finalisation du résultat (écriture de l'isbd) function finalize() { global $msg, $base_path ; // Différence avec les monographies on affiche [périodique] et [article] devant l'ISBD if ($this->notice->niveau_biblio =='s') { $this->result = str_replace('!!serial_type!!', "[".$msg['isbd_type_perio']."]", $this->result); } else { $this->result = str_replace('!!serial_type!!', "[".$msg['isbd_type_art']."]", $this->result); } $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, $art_to_show; // 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 = " \"".$msg["histo_print"]."\""; } if(($art_to_show == $this->notice_id) && $art_to_show){ $open_tag = "startOpen=\"Yes\""; $anchor = ""; } else { $open_tag = ""; $anchor = ""; } if($pmb_recherche_ajax_mode && $this->ajax_mode){ $javascript_template ="$anchor
!!heada!!
"; } else{ if(SESSrights & CATALOGAGE_AUTH){ $caddie="basket"; }else{ $caddie=""; } $javascript_template ="$anchor
!!heada!!
"; } $this->result = str_replace('!!id!!', $this->notice_id.($this->anti_loop?"_p".implode("_",$this->anti_loop):""), $javascript_template); $this->result = str_replace('!!item!!', $this->notice_id, $this->result); $this->result = str_replace('!!unique!!', md5(microtime()), $this->result); $this->result = str_replace('!!heada!!', $this->lien_suppr_cart.$this->header, $this->result); $this->result = str_replace('!!notice_id!!', $this->notice_id, $this->result); } // génération de l'isbd function do_isbd() { global $msg, $dbh, $base_path; global $fonction_auteur; global $langue_doc; global $charset; global $thesaurus_mode_pmb, $thesaurus_categories_categ_in_line, $pmb_keyword_sep ; global $pmb_etat_collections_localise,$pmb_droits_explr_localises,$explr_visible_mod, $thesaurus_categories_affichage_ordre; global $categories_memo,$libelle_thesaurus_memo; global $categories_top,$use_opac_url_base,$thesaurus_categories_show_only_last; global $load_tablist_js; global $pmb_show_notice_id,$pmb_opac_url,$pmb_show_permalink; global $sort_children; $this->isbd = $this->notice->tit1; // constitution de la mention de titre $tit3 = $this->notice->tit3; $tit4 = $this->notice->tit4; if($tit3) $this->isbd .= " = $tit3"; if($tit4) $this->isbd .= " : $tit4"; // constitution de la mention de responsabilité $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 ." " ; // zone de l'adresse (ne concerne que s1) if ($this->notice->niveau_biblio == 's' && $this->notice->niveau_hierar == 1) { if($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; if($editeurs) $editeurs .= ' ; '.$ed_isbd; else $editeurs .= $ed_isbd; } if($this->notice->year) $editeurs ? $editeurs .= ', '.$this->notice->year : $editeurs = $this->notice->year; //else //$editeurs ? $editeurs .= ', [s.d.]' : $editeurs = "[s.d.]"; if($editeurs) $this->isbd .= ". - $editeurs"; // code ici pour la gestion des éditeurs } // zone de la collation (ne concerne que a2, mention de pagination) // pour les périodiques, on rebascule en zone de note // avec la mention du périodique parent if($this->notice->niveau_biblio == 'a' && $this->notice->niveau_hierar == 2) { $bulletin = $this->parent_title; if($this->parent_numero) { $bulletin .= ' '.$this->parent_numero; } // affichage de la mention de date utile : mention_date si existe, sinon date_date if ($this->parent_date) $date_affichee = " (".$this->parent_date.")"; else if ($this->parent_date_date) $date_affichee .= " [".formatdate($this->parent_date_date)."]"; else $date_affichee="" ; $bulletin .= $date_affichee; if($this->action_bulletin) { $this->action_bulletin = str_replace('!!id!!', $this->bul_id, $this->action_bulletin); $bulletin = "action_bulletin."\">".htmlentities($bulletin,ENT_QUOTES, $charset).""; } $mention_parent = "in $bulletin"; } if($mention_parent) { $this->isbd .= "
$mention_parent"; $pagination = htmlentities($this->notice->npages,ENT_QUOTES, $charset); if($pagination) $this->isbd .= ". - $pagination"; } //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_analysis ; 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 //function mono_display($id, $level=1, $action='', $expl=1, $expl_link='', $lien_suppr_cart="", $explnum_link='', $show_resa=0, $print=0, $show_explnum=1, $show_statut=0, $anti_loop='', $draggable=0, $no_link=false, $show_opac_hidden_fields=true,$ajax_mode=0) { $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; } //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