table;
}
// propriétés pour le selecteur de panier (kinda template)
$cart_click = "onClick=\"openPopUp('./cart.php?object_type=NOTI&item=!!item!!&unq=!!unique!!', 'cart')\"";
// définition de la classe d'affichage des périodiques
class serial_display extends record_display {
public $bul_id = 0 ; // id de bulletin récupéré pour l'ISBD
public $action_serial_org = ''; // lien à activer si la notice est s1 (notice chapeau)
public $action_analysis_org = ''; // lien à activer si la notice est a2 (dépouillment)
public $action_serial = ''; // lien modifié pour le header
public $action_analysis = ''; // lien modifié pour le header (nécessite !!bul_id!!)
public $action_bulletin = ''; // action pour la notion de bulletin
public $parent_id = 0; // id de la notice parent
public $parent_title = ''; // titre de la notice parent si a2
public $parent_numero = ''; // mention de numérotation dans le bulletinage associé
public $parent_date = ''; // mention de date (txt) dans le bulletinage associé
public $parent_date_date = ''; // mention de date (date) dans le bulletinage associé
public $parent_aff_date_date = ''; // mention de date (date) dans le bulletinage associé au format correct pour affichage
public $lien_explnum = ''; // Lien de gestion des documents numériques associés
public $bouton_explnum = 0 ; // bouton ou pas d'ajout de doc numérique
public $drag = 0;
public $no_link = false;
public $serial_nb_bulletins = 0;
public $serial_nb_exemplaires = 0;
public $serial_nb_articles = 0;
public $serial_nb_etats_collection = 0;
public $serial_nb_abo_actif = 0;
public $show_abo_actif = 0;
public $icon_abo_actif = '';
// constructeur
public function __construct( $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
// 4 affichage email : sans lien sauf url associée
$show_explnum=1,
$show_statut=0,
$show_opac_hidden_fields=true,
$draggable=0,
$ajax_mode=0 ,
$anti_loop = array(),
$no_link=false,
$show_map=1, // $show_map = affichage de la map
$context_dsi_id_bannette=0, // $context_dsi_id_bannette = dans le contexte de la dsi
$show_abo_actif = 0,
$expl=0, // $expl -> affiche ou non les exemplaires associé
$context_parameters = array() // Elements de contexte (ex : in_search, in_selector)
) {
global $pmb_recherche_ajax_mode;
if (!is_array($anti_loop)) {
$anti_loop = array();
}
$this->show_map=$show_map;
$this->context_dsi_id_bannette=$context_dsi_id_bannette;
$this->context_parameters=$context_parameters;
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->show_abo_actif=$show_abo_actif;
$this->expl=$expl;
$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->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) ;
$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';
$this->notice_relations = notice_relations_collection::get_object_instance($this->notice_id);
if(!$this->ajax_mode) {
$this->childs = $this->notice_relations->get_childs();
}
switch($level) {
case 0:
// là, c'est le niveau 0 : juste le header
//$this->do_header();
$this->result = $this->header;
break;
default:
global $pmb_map_activate;
$this->map=array();
if($pmb_map_activate){
$ids[]=$this->notice_id;
$this->map=new map_objects_controler(TYPE_RECORD,$ids);
$this->map_info=new map_info($this->notice_id);
}
// 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)
public 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 = pmb_mysql_query($requete, $dbh);
if (pmb_mysql_num_rows($myQuery)) {
$parent = pmb_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)
public 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);
}
parent::finalize();
}
protected function get_display_open_tag() {
global $art_to_show;
$display = '';
if($art_to_show && ($art_to_show == $this->notice_id)){
$display .= "startOpen=\"Yes\"";
}
return $display;
}
protected function get_display_anchor() {
global $art_to_show;
$display = '';
if($art_to_show && ($art_to_show == $this->notice_id)){
$display .= "";
}
return $display;
}
// génération de l'isbd
public function do_isbd() {
global $msg, $dbh, $base_path;
global $tdoc;
global $charset;
global $pmb_etat_collections_localise,$pmb_droits_explr_localises,$explr_visible_mod;
global $pmb_show_notice_id,$pmb_opac_url,$pmb_show_permalink;
global $sort_children;
global $thesaurus_concepts_active;
global $pmb_map_activate;
global $pmb_scan_request_activate;
global $lang;
global $pmb_use_uniform_title;
global $pmb_type_audit;
global $pmb_show_exemplaires_analysis;
$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";
$this->isbd .= ' ['.$tdoc->table[$this->notice->typdoc].']';
// constitution de la mention de responsabilité
if($libelle_mention_resp = gen_authors_isbd($this->responsabilites, $this->print_mode)) {
$this->isbd .= " / ". $libelle_mention_resp ." " ;
}
if($pmb_map_activate){
if($mapisbd=$this->map_info->get_isbd()) $this->isbd .=$mapisbd;
}
// zone de l'adresse (ne concerne que s1)
if ($this->notice->niveau_biblio == 's' && $this->notice->niveau_hierar == 1) {
$editeurs = "";
if($this->notice->ed1_id) {
$editeur = authorities_collection::get_authority(AUT_TABLE_PUBLISHERS, $this->notice->ed1_id);
if ($this->print_mode) {
$editeurs .= $editeur->get_isbd();
} else {
$editeurs .= $editeur->isbd_entry_lien_gestion;
}
}
if($this->notice->ed2_id) {
$editeur = authorities_collection::get_authority(AUT_TABLE_PUBLISHERS, $this->notice->ed2_id);
if ($this->print_mode) {
$ed_isbd=$editeur->get_isbd();
} else {
$ed_isbd=$editeur->isbd_entry_lien_gestion;
}
if($editeurs) {
$editeurs .= ' ; '.$ed_isbd;
} else {
$editeurs .= $ed_isbd;
}
}
if($this->notice->year) {
if ($editeurs) {
$editeurs .= ', '.$this->notice->year;
} else {
$editeurs = $this->notice->year;
}
}
if($editeurs) {
$this->isbd .= ". - $editeurs";
}
}
// 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
$mention_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) {
$this->isbd .= $this->notice_relations->get_display_links('parents', $this->print_mode, $this->show_explnum, $this->show_statut, $this->show_opac_hidden_fields);
}
if($pmb_show_notice_id || $pmb_show_permalink) $this->isbd .= " ";
if($pmb_show_notice_id){
$prefixe = explode(",",$pmb_show_notice_id);
$this->isbd .= "".$msg['notice_id_libelle']." ".(isset($prefixe[1]) ? $prefixe[1] : '').$this->notice_id." ";
}
// Permalink OPAC
if ($pmb_show_permalink) {
$this->isbd .= "".$msg["notice_permalink_opac"]." ".$pmb_opac_url."index.php?lvl=notice_display&id=".$this->notice_id." ";
}
// fin du niveau 1
if($this->level == 1) {
if ($this->show_explnum) {
$this->isbd .= '
$event = new event_record('record', 'display');
$event->set_record_id($this->notice_id);
$event_handler = events_handler::get_instance();
$event_handler->send($event);
if ($event->get_result()) {
$this->isbd .= $event->get_result();
}
// fin du niveau 5
if($this->level == 5)
return;
// début du niveau 6
if($this->notice->niveau_biblio=="s") {
// Si notice-mère alors on compte le nombre de numéros (bulletins)
$this->isbd.=$this->get_etat_periodique();
$this->isbd.=$this->print_etat_periodique();
//état des collections
$collstate = new collstate(0,$this->notice_id);
//$this->isbd.= $collstate->get_callstate_isbd();
if($pmb_etat_collections_localise)
$collstate->get_display_list("",0,0,0,1,0,true);
else
$collstate->get_display_list("",0,0,0,0,0,true);
if($collstate->nbr) {
$this->isbd .= " ".$msg["abts_onglet_collstate"]." ";
$this->isbd.=$collstate->liste;
}
}
//Ajout de l'upload de documents numérique en lot
$this->isbd.= "";
// fin du niveau 6
return;
}
public function get_etat_periodique() {
global $dbh;
$bulletins=0;
$nb_expl=0;
$nb_notices=0;
if($this->notice->niveau_biblio=="s") {
$requete = "SELECT * FROM bulletins WHERE bulletin_notice=".$this->notice_id;
$Query = pmb_mysql_query($requete, $dbh);
$bulletins=pmb_mysql_num_rows($Query);
while (($row = pmb_mysql_fetch_array($Query))) {
$requete2 = "SELECT count( * ) AS nb_notices FROM analysis WHERE analysis_bulletin =".$row['bulletin_id'];
$Query2 = pmb_mysql_query($requete2, $dbh);
$analysis_array=pmb_mysql_fetch_array($Query2);
$nb_notices+=$analysis_array['nb_notices'];
$requete3 = "SELECT count( expL_id ) AS nb_expl FROM exemplaires WHERE expl_bulletin =".$row['bulletin_id'];
$Query3 = pmb_mysql_query($requete3, $dbh);
$expl_array=pmb_mysql_fetch_array($Query3);
$nb_expl+=$expl_array['nb_expl'];
};
$requete="SELECT COUNT(collstate_id) FROM collections_state WHERE id_serial='".$this->notice_id."'";
$Query=pmb_mysql_query($requete, $dbh);
if($Query && pmb_mysql_num_rows($Query)){
$this->serial_nb_etats_collection=pmb_mysql_result($Query,0,0);
}
$requete="SELECT COUNT(abt_id) FROM abts_abts WHERE num_notice='".$this->notice_id."' AND date_fin > CURDATE()";
$Query=pmb_mysql_query($requete, $dbh);
if($Query && pmb_mysql_num_rows($Query)){
$this->serial_nb_abo_actif=pmb_mysql_result($Query,0,0);
}
$this->serial_nb_bulletins=$bulletins;
$this->serial_nb_exemplaires=$nb_expl;
$this->serial_nb_articles=$nb_notices;
}
}
public function print_etat_periodique() {
global $msg;
$affichage = '';
if($this->notice->niveau_biblio=="s") {
// Cas général : au moins un bulletin
if ($this->serial_nb_bulletins > 0)
{$affichage .=" \n
".$msg["serial_bulletinage_etat"]."