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;
// 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 = " ";
}
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
";
} elseif ($r_rel->lnb=='b' && $r_rel->lnh=='2') {
// c'est une notice de bulletin, on n'affiche rien en aff de notice chapeau
//On décrémente pour neutraliser l'incrément ultérieur : on ne compte pas les liens vers notices de bulletin dans la limite de liens affichés
$n_childs--;
$aff = "";
} elseif ($r_rel->lnb=='s' && $r_rel->lnh=='1') {
// c'est une notice de pério
global $link_serial, $link_analysis, $link_bulletin, $link_explnum_serial ;
$link_serial_sub = $base_path."/catalog.php?categ=serials&sub=view&serial_id=".$child_notices[$i];
$serial = new serial_display($child_notices[$i], $level_fille, $link_serial_sub, $link_analysis, $link_bulletin, "", $link_explnum_serial, 0, $this->print_mode, 1, 1 ,1,0,0,$anti_loop);
if((count($serial->anti_loop) == 1) && $sort_children){
//Drag pour trier les notices filles
$id_elt = $serial->notice_id.($serial->anti_loop?"_p".implode("_",$serial->anti_loop):"");
$drag_fille = "