recursif=$recursif;
$this->id = $id;
$this->getData();
} else {
// la notice n'existe pas
$this->id = 0;
$this->getData();
}
}
// ---------------------------------------------------------------
// getData() : récupération infos titre_uniforme
// ---------------------------------------------------------------
function getData() {
global $dbh,$msg;
$this->name = '';
$this->tonalite = '';
$this->tonalite_marclist = '';
$this->comment ='';
$this->distrib=array();
$this->ref=array();
$this->subdiv=array();
$this->libelle="";
$this->import_denied=0;
$this->form = '';
$this->form_marclist = '';
$this->date ='';
$this->date_date ='';
$this->characteristic = '';
$this->intended_termination = '';
$this->intended_audience = '';
$this->context = '';
$this->coordinates = '';
$this->equinox = '';
$this->subject = '';
$this->place = '';
$this->history = '';
$this->num_author = '';
$this->display = '';
$this->responsabilites["responsabilites"]=array();
if($this->id) {
$requete = "SELECT * FROM titres_uniformes WHERE tu_id=$this->id LIMIT 1 ";
$result = @pmb_mysql_query($requete, $dbh);
if(pmb_mysql_num_rows($result)) {
$temp = pmb_mysql_fetch_object($result);
$this->id = $temp->tu_id;
$this->name = $temp->tu_name;
$this->tonalite = $temp->tu_tonalite;
$this->tonalite_marclist = $temp->tu_tonalite_marclist;
$this->comment = $temp->tu_comment ;
$this->import_denied = $temp->tu_import_denied;
$this->form = $temp->tu_forme;
$this->form_marclist = $temp->tu_forme_marclist;
$this->date = $temp->tu_date;
$this->date_date = $temp->tu_date_date;
$this->characteristic = $temp->tu_caracteristique;
$this->intended_termination = $temp->tu_completude;
$this->intended_audience = $temp->tu_public;
$this->context = $temp->tu_contexte;
$this->coordinates = $temp->tu_coordonnees;
$this->equinox = $temp->tu_equinoxe;
$this->subject = $temp->tu_sujet;
$this->place = $temp->tu_lieu;
$this->history = $temp->tu_histoire;
$this->num_author = $temp->tu_num_author;
$libelle[]=$this->name;
if($this->tonalite)$libelle[]=$this->tonalite;
$requete = "SELECT * FROM tu_distrib WHERE distrib_num_tu='$this->id' order by distrib_ordre";
$result = pmb_mysql_query($requete, $dbh);
if(pmb_mysql_num_rows($result)) {
while(($param=pmb_mysql_fetch_object($result))) {
$this->distrib[]["label"]=$param->distrib_name;
$libelle[]=$param->distrib_name;
}
}
$requete = "SELECT * FROM tu_ref WHERE ref_num_tu='$this->id' order by ref_ordre";
$result = pmb_mysql_query($requete, $dbh);
if(pmb_mysql_num_rows($result)) {
while(($param=pmb_mysql_fetch_object($result))) {
$this->ref[]["label"]=$param->ref_name;
$libelle[]=$param->ref_name;
}
}
$requete = "SELECT * FROM tu_subdiv WHERE subdiv_num_tu='$this->id' order by subdiv_ordre";
$result = pmb_mysql_query($requete, $dbh);
if(pmb_mysql_num_rows($result)) {
while(($param=pmb_mysql_fetch_object($result))) {
$this->subdiv[]["label"]=$param->subdiv_name;
$libelle[]=$param->subdiv_name;
}
}
$this->display = $this->name;
if($this->date){
$this->display.=" (".$this->date.")";
}/*
if($this->num_author){
$tu_auteur = new auteur($this->num_author);
$libelle[] = $tu_auteur->display;
$this->display.=" / ".$tu_auteur->rejete." ".$tu_auteur->name;
}*/
$this->responsabilites = $this->get_authors($this->id) ;
$as = array_keys ($this->responsabilites["responsabilites"], "0" ) ;
if(count($as))$this->display.= ", ";
for ($i = 0 ; $i < count($as) ; $i++) {
$indice = $as[$i] ;
$auteur_0 = $this->responsabilites["auteurs"][$indice] ;
$auteur = new auteur($auteur_0["id"]);
if($i>0)$this->display.= " / "; // entre auteurs
$libelle[] = $auteur->display;
$this->display.= $auteur->rejete." ".$auteur->name;
}
$this->libelle=implode("; ",$libelle);
} else {
// pas trouvé avec cette clé
$this->id = 0;
}
}
}
function get_authors($id=0) {
global $dbh;
$responsabilites = array() ;
$auteurs = array() ;
$res["responsabilites"] = array() ;
$res["auteurs"] = array() ;
$rqt = "select author_id, responsability_tu_fonction, responsability_tu_type ";
$rqt.= "from responsability_tu, authors where responsability_tu_num='$id' and responsability_tu_author_num=author_id order by responsability_tu_type, responsability_tu_ordre " ;
$res_sql = pmb_mysql_query($rqt, $dbh);
while ($resp_tu=pmb_mysql_fetch_object($res_sql)) {
$responsabilites[] = $resp_tu->responsability_tu_type ;
$auteurs[] = array(
'id' => $resp_tu->author_id,
'fonction' => $resp_tu->responsability_tu_fonction,
'responsability' => $resp_tu->responsability_tu_type
) ;
}
$res["responsabilites"] = $responsabilites ;
$res["auteurs"] = $auteurs ;
return $res;
}
function gen_input_selection($label,$form_name,$item,$values,$what_sel,$class='saisie-80em' ) {
global $msg;
$select_prop = "scrollbars=yes, toolbar=no, dependent=yes, resizable=yes";
$link="'./select.php?what=$what_sel&caller=$form_name&p1=f_".$item."_code!!num!!&p2=f_".$item."!!num!!&deb_rech='+".pmb_escape()."(this.form.f_".$item."!!num!!.value), '$what_sel', 400, 400, -2, -2, '$select_prop'";
$size_item=strlen($item)+2;
$script_js="
";
//template de zone de texte pour chaque valeur
$aff="
!!bouton_parcourir!!";
// 1 seul auteur pour 1 oeuvre
if($item=="author"){
$aff.="
\n";
} else {
$aff.="!!bouton_ajouter!!
\n";
}
if($what_sel)$bouton_parcourir="";
else $bouton_parcourir="";
$aff= str_replace('!!bouton_parcourir!!', $bouton_parcourir, $aff);
$template=$script_js."";
$template.="
";
$num=0;
if(!$values[0]) $values[0] = array("id"=>"","label"=>"");
foreach($values as $value) {
$label_element=$value["label"];
$id_element=$value["id"];
$temp= str_replace('!!id_element!!', $id_element, $aff);
$temp= str_replace('!!label_element!!', $label_element, $temp);
$temp= str_replace('!!num!!', $num, $temp);
if(!$num) $temp= str_replace('!!bouton_ajouter!!', "
", $temp);
else $temp= str_replace('!!bouton_ajouter!!', "", $temp);
$template.=$temp;
$num++;
}
$template.="
";
$template.="
";
return $template;
}
// ---------------------------------------------------------------
// show_form : affichage du formulaire de saisie
// ---------------------------------------------------------------
function show_form() {
global $msg;
global $titre_uniforme_form;
global $charset;
global $user_input, $nbr_lignes, $page ;
global $pmb_type_audit;
global $thesaurus_concepts_active;
global $value_deflt_fonction;
global $tu_authors_tpl,$tu_authors_all_tpl;
$fonction = new marc_list('function');
$aut_key_list = new marc_select("music_key", "form_tonalite_selector", $this->tonalite_marclist,'', "0", " ");
$aut_form_list = new marc_select("music_form", "form_form_selector", $this->form_marclist, '', "0", " ");
if($this->id) {
$action = "./autorites.php?categ=titres_uniformes&sub=update&id=$this->id";
$libelle = $msg["aut_titre_uniforme_modifier"];
$button_remplace = "id\"'>";
$button_voir = "id\"'>";
$button_delete = "";
} else {
$action = './autorites.php?categ=titres_uniformes&sub=update&id=';
$libelle = $msg["aut_titre_uniforme_ajouter"];
$button_remplace = '';
$button_delete ='';
}
if($this->import_denied == 1){
$import_denied_checked = "checked='checked'";
}else{
$import_denied_checked = "";
}
// remplacement de tous les champs du formulaire par les données
$as = array_keys ($this->responsabilites["responsabilites"], "0" ) ;
$max_aut0 = (count($as)) ;
if ($max_aut0==0) $max_aut0=1;
for ($i = 0 ; $i < $max_aut0 ; $i++) {
$indice = $as[$i] ;
$auteur_0 = $this->responsabilites["auteurs"][$indice] ;
$auteur = new auteur($auteur_0["id"]);
if ($value_deflt_fonction && $auteur_0["id"]==0 && $i==0) $auteur_0["fonction"] = $value_deflt_fonction;
$ptab_aut_tu = str_replace('!!iaut!!', $i, $tu_authors_tpl) ;
$ptab_aut_tu = str_replace('!!aut0_id!!', $auteur_0["id"], $ptab_aut_tu);
$ptab_aut_tu = str_replace('!!aut0!!', htmlentities($auteur->isbd_entry,ENT_QUOTES, $charset), $ptab_aut_tu);
$ptab_aut_tu = str_replace('!!f0_code!!', $auteur_0["fonction"], $ptab_aut_tu);
$ptab_aut_tu = str_replace('!!f0!!', $fonction->table[$auteur_0["fonction"]], $ptab_aut_tu);
$tu_auteurs .= $ptab_aut_tu ;
}
$tu_authors_all_tpl = str_replace('!!max_aut0!!', $max_aut0, $tu_authors_all_tpl);
$tu_authors_all_tpl = str_replace('!!authors_list!!', $tu_auteurs, $tu_authors_all_tpl);
$aut_link= new aut_link(AUT_TABLE_TITRES_UNIFORMES,$this->id);
$titre_uniforme_form = str_replace('', $aut_link->get_form('saisie_titre_uniforme') , $titre_uniforme_form);
$aut_pperso= new aut_pperso("tu",$this->id);
$titre_uniforme_form = str_replace('!!aut_pperso!!', $aut_pperso->get_form(), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!id!!', $this->id, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!action!!', $action, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!libelle!!', $libelle, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!nom!!', htmlentities($this->name,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!authors!!', $tu_authors_all_tpl, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!aut_id!!', htmlentities($this->num_author,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!form!!', htmlentities($this->form,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!form_selector!!', $aut_form_list->display, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!date!!', htmlentities($this->date,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!subject!!', htmlentities($this->subject,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!place!!', htmlentities($this->place,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!history!!', htmlentities($this->history,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!intended_audience!!', htmlentities($this->intended_audience,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!context!!', htmlentities($this->context,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!tonalite!!', htmlentities($this->tonalite,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!tonalite_selector!!', $aut_key_list->display, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!coordinates!!', htmlentities($this->coordinates,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!equinox!!', htmlentities($this->equinox,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!characteristic!!', htmlentities($this->characteristic,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!comment!!', htmlentities($this->comment,ENT_QUOTES, $charset), $titre_uniforme_form);
// auteur
$tu_auteur_id = $this->num_author;
if($tu_auteur_id){
$tu_auteur = new auteur($tu_auteur_id);
}
$titre_uniforme_form = str_replace('!!aut_name!!',htmlentities($tu_auteur->display,ENT_QUOTES, $charset), $titre_uniforme_form);
// complétude
$intended_termination_id = $this->intended_termination;
$select_0=""; $select_1=""; $select_2="";
if($intended_termination_id == 1){
$select_1 = "selected";
} elseif($intended_termination_id == 2){
$select_2 = "selected";
} else {
$select_0 = "selected";
}
$titre_uniforme_form = str_replace('!!intended_termination_0!!', htmlentities($select_0,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!intended_termination_1!!', htmlentities($select_1,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!intended_termination_2!!', htmlentities($select_2,ENT_QUOTES, $charset), $titre_uniforme_form);
// distribution
$distribution_form=$this->gen_input_selection($msg["aut_titre_uniforme_form_distribution"],"saisie_titre_uniforme","distrib",$this->distrib,"","saisie-80em");
$titre_uniforme_form = str_replace("",$distribution_form, $titre_uniforme_form);
// reference
$ref_num_form=$this->gen_input_selection($msg["aut_titre_uniforme_form_ref_numerique"],"saisie_titre_uniforme","ref",$this->ref,"","saisie-80em");
$titre_uniforme_form = str_replace("",$ref_num_form, $titre_uniforme_form);
// subdivision
$sub_form=$this->gen_input_selection($msg["aut_titre_uniforme_form_subdivision_forme"],"saisie_titre_uniforme","subdiv",$this->subdiv,"","saisie-80em");
$titre_uniforme_form = str_replace('', $sub_form, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!remplace!!', $button_remplace, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!voir_notices!!', $button_voir, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!delete!!', $button_delete, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!user_input_url!!', rawurlencode(stripslashes($user_input)), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!user_input!!', htmlentities($user_input,ENT_QUOTES, $charset), $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!nbr_lignes!!', $nbr_lignes, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!page!!', $page, $titre_uniforme_form);
$titre_uniforme_form = str_replace('!!tu_import_denied!!', $import_denied_checked, $titre_uniforme_form);
if($thesaurus_concepts_active == 1 ){
$index_concept = new index_concept($this->id, TYPE_TITRE_UNIFORME);
$titre_uniforme_form = str_replace('!!concept_form!!', $index_concept->get_form('saisie_titre_uniforme'), $titre_uniforme_form);
}else{
$titre_uniforme_form = str_replace('!!concept_form!!', "", $titre_uniforme_form);
}
if ($pmb_type_audit && $this->id)
$bouton_audit= " id."', 'audit_popup', 700, 500, -2, -2, 'scrollbars=yes, toolbar=no, dependent=yes, resizable=yes')\" title=\"".$msg['audit_button']."\" value=\"".$msg['audit_button']."\" /> ";
$titre_uniforme_form = str_replace('!!audit_bt!!', $bouton_audit, $titre_uniforme_form);
print $titre_uniforme_form;
}
// ---------------------------------------------------------------
// replace_form : affichage du formulaire de remplacement
// ---------------------------------------------------------------
function replace_form() {
global $titre_uniforme_replace;
global $msg;
global $include_path;
if(!$this->id || !$this->name) {
require_once("$include_path/user_error.inc.php");
error_message($msg[161], $msg[162], 1, './autorites.php?categ=titres_uniformes&sub=&id=');
return false;
}
$titre_uniforme_replace=str_replace('!!old_titre_uniforme_libelle!!', $this->display, $titre_uniforme_replace);
$titre_uniforme_replace=str_replace('!!id!!', $this->id, $titre_uniforme_replace);
print $titre_uniforme_replace;
return true;
}
// ---------------------------------------------------------------
// delete() : suppression
// ---------------------------------------------------------------
function delete() {
global $dbh;
global $msg;
if(!$this->id) // impossible d'accéder à cette notice titre uniforme
return $msg[403];
// effacement dans les notices
// récupération du nombre de notices affectées
$requete = "SELECT count(1) FROM notices_titres_uniformes WHERE ntu_num_tu='$this->id' ";
$res = pmb_mysql_query($requete, $dbh);
$nbr_lignes = pmb_mysql_result($res, 0, 0);
if($nbr_lignes) {
// Ce titre uniforme est utilisé dans des notices, impossible de le supprimer
return ''.$this->display."
${msg['titre_uniforme_delete']}";
}
// On regarde si l'autorité est utilisée dans des vedettes composées
$attached_vedettes = vedette_composee::get_vedettes_built_with_element($this->id, "titre_uniforme");
if (count($attached_vedettes)) {
// Cette autorité est utilisée dans des vedettes composées, impossible de la supprimer
return ''.$this->display."
".$msg["vedette_dont_del_autority"];
}
// effacement dans la table des titres_uniformes
$requete = "DELETE FROM titres_uniformes WHERE tu_id='$this->id' ";
pmb_mysql_query($requete, $dbh);
// delete les champs répétables
$requete = "DELETE FROM tu_distrib WHERE distrib_num_tu='$this->id' ";
pmb_mysql_query($requete, $dbh);
$requete = "DELETE FROM tu_ref WHERE ref_num_tu='$this->id' ";
pmb_mysql_query($requete, $dbh);
$requete = "DELETE FROM tu_subdiv WHERE subdiv_num_tu='$this->id' ";
pmb_mysql_query($requete, $dbh);
//suppression dans la table de stockage des numéros d'autorités...
titre_uniforme::delete_autority_sources($this->id);
// suppression des auteurs
$rqt_del = "delete from responsability_tu where responsability_tu_num='".$this->id."' ";
pmb_mysql_query($rqt_del);
// liens entre autorités
$aut_link= new aut_link(AUT_TABLE_TITRES_UNIFORMES,$this->id);
$aut_link->delete();
$aut_pperso= new aut_pperso("tu",$this->id);
$aut_pperso->delete();
// nettoyage indexation concepts
$index_concept = new index_concept($this->id, TYPE_TITRE_UNIFORME);
$index_concept->delete();
audit::delete_audit(AUDIT_TITRE_UNIFORME,$this->id);
return false;
}
// ---------------------------------------------------------------
// delete_autority_sources($idcol=0) : Suppression des informations d'import d'autorité
// ---------------------------------------------------------------
static function delete_autority_sources($idtu=0){
$tabl_id=array();
if(!$idtu){
$requete="SELECT DISTINCT num_authority FROM authorities_sources LEFT JOIN titres_uniformes ON num_authority=tu_id WHERE authority_type = 'uniform_title' AND tu_id IS NULL";
$res=pmb_mysql_query($requete);
if(pmb_mysql_num_rows($res)){
while ($ligne = pmb_mysql_fetch_object($res)) {
$tabl_id[]=$ligne->num_authority;
}
}
}else{
$tabl_id[]=$idtu;
}
foreach ( $tabl_id as $value ) {
//suppression dans la table de stockage des numéros d'autorités...
$query = "select id_authority_source from authorities_sources where num_authority = ".$value." and authority_type = 'uniform_title'";
$result = pmb_mysql_query($query);
if(pmb_mysql_num_rows($result)){
while ($ligne = pmb_mysql_fetch_object($result)) {
$query = "delete from notices_authorities_sources where num_authority_source = ".$ligne->id_authority_source;
pmb_mysql_query($query);
}
}
$query = "delete from authorities_sources where num_authority = ".$value." and authority_type = 'uniform_title'";
pmb_mysql_query($query);
}
}
// ---------------------------------------------------------------
// replace($by) : remplacement
// ---------------------------------------------------------------
function replace($by,$link_save) {
global $msg;
global $dbh;
global $pmb_synchro_rdf;
if (($this->id == $by) || (!$this->id)) {
return $msg[223];
}
$aut_link= new aut_link(AUT_TABLE_TITRES_UNIFORMES,$this->id);
// "Conserver les liens entre autorités" est demandé
if($link_save) {
// liens entre autorités
$aut_link->add_link_to(AUT_TABLE_TITRES_UNIFORMES,$by);
}
$aut_link->delete();
// remplacement dans les responsabilités
$requete = "UPDATE notices_titres_uniformes SET ntu_num_tu='$by' WHERE ntu_num_tu='$this->id' ";
@pmb_mysql_query($requete, $dbh);
$requete = "UPDATE responsability_tu set responsability_tu_num ='$by' where responsability_tu_num='".$this->id."' ";
@pmb_mysql_query($requete);
// effacement dans la table des titres_uniformes
$requete = "DELETE FROM titres_uniformes WHERE tu_id='$this->id' ";
pmb_mysql_query($requete, $dbh);
// delete les champs répétables
$requete = "DELETE FROM tu_distrib WHERE distrib_num_tu='$this->id' ";
pmb_mysql_query($requete, $dbh);
$requete = "DELETE FROM tu_ref WHERE ref_num_tu='$this->id' ";
pmb_mysql_query($requete, $dbh);
$requete = "DELETE FROM tu_subdiv WHERE subdiv_num_tu='$this->id' ";
pmb_mysql_query($requete, $dbh);
//nettoyage d'autorities_sources
$query = "select * from authorities_sources where num_authority = ".$this->id." and authority_type = 'uniform_title'";
$result = pmb_mysql_query($query);
if(pmb_mysql_num_rows($result)){
while($row = pmb_mysql_fetch_object($result)){
if($row->authority_favorite == 1){
//on suprime les références si l'autorité a été importée...
$query = "delete from notices_authorities_sources where num_authority_source = ".$row->id_authority_source;
pmb_mysql_result($query);
$query = "delete from authorities_sources where id_authority_source = ".$row->id_authority_source;
pmb_mysql_result($query);
}else{
//on fait suivre le reste
$query = "update authorities_sources set num_authority = ".$by." where num_authority_source = ".$row->id_authority_source;
pmb_mysql_query($query);
}
}
}
audit::delete_audit(AUDIT_TITRE_UNIFORME,$this->id);
titre_uniforme::update_index($by);
//mise à jour de l'oeuvre rdf
if($pmb_synchro_rdf){
$synchro_rdf = new synchro_rdf();
$synchro_rdf->replaceAuthority($this->id,$by,'oeuvre');
}
return FALSE;
}
// ---------------------------------------------------------------
// update($value) : mise à jour
// ---------------------------------------------------------------
function update($value) {
global $dbh;
global $msg;
global $include_path;
global $pmb_synchro_rdf;
global $thesaurus_concepts_active,$max_aut0;
if(!$value['name']) return false;
// nettoyage des chaînes en entrée
$value['name'] = clean_string($value['name']);
$value['num_author'] = clean_string($value['num_author']);
$value['form'] = clean_string($value['form']);
$value['form_selector'] = clean_string($value['form_selector']);
$value['date'] = clean_string($value['date']);
$value['subject'] = clean_string($value['subject']);
$value['place'] = clean_string($value['place']);
$value['history'] = clean_string($value['history']);
$value['characteristic'] = clean_string($value['characteristic']);
$value['intended_termination'] = clean_string($value['intended_termination']);
$value['intended_audience'] = clean_string($value['intended_audience']);
$value['context'] = clean_string($value['context']);
$value['equinox'] = clean_string($value['equinox']);
$value['coordinates'] = clean_string($value['coordinates']);
$value['tonalite'] = clean_string($value['tonalite']);
$value['tonalite_selector'] = clean_string($value['tonalite_selector']);
$value['comment'] = clean_string($value['comment']);
$titre=titre_uniforme::import_tu_exist($value,1,$this->id);
if($titre){
require_once("$include_path/user_error.inc.php");
warning($msg["aut_titre_uniforme_creation"], $msg["aut_titre_uniforme_doublon_erreur"]);
return FALSE;
}
$tu_auteur = new auteur($value['num_author']);
if(!$tu_auteur->id){
$value['num_author']=0;
} else {
$value['num_author']=$tu_auteur->id;
}
$flag_index=0;
$requete = "SET ";
$requete .= "tu_name='".$value["name"]."', ";
$requete .= "tu_num_author='".$value['num_author']."', ";
$requete .= "tu_forme='".$value["form"]."', ";
$requete .= "tu_forme_marclist='".$value["form_selector"]."', ";
$requete .= "tu_date='".$value["date"]."', ";
$requete .= "tu_sujet='".$value["subject"]."', ";
$requete .= "tu_lieu='".$value["place"]."', ";
$requete .= "tu_histoire='".$value["history"]."', ";
$requete .= "tu_caracteristique='".$value["characteristic"]."', ";
$requete .= "tu_completude='".$value["intended_termination"]."', ";
$requete .= "tu_public='".$value["intended_audience"]."', ";
$requete .= "tu_contexte='".$value["context"]."', ";
$requete .= "tu_equinoxe='".$value["equinox"]."', ";
$requete .= "tu_coordonnees='".$value["coordinates"]."', ";
$requete .= "tu_tonalite='".$value["tonalite"]."', ";
$requete .= "tu_tonalite_marclist='".$value["tonalite_selector"]."', ";
$requete .= "tu_comment='".$value["comment"]."', ";
$requete .= "tu_import_denied='".$value["import_denied"]."'";
if($this->id) {
// update
$requete = 'UPDATE titres_uniformes '.$requete;
$requete .= ' WHERE tu_id='.$this->id.' ;';
if(pmb_mysql_query($requete, $dbh)) {
$flag_index=1;
} else {
require_once("$include_path/user_error.inc.php");
warning($msg["aut_titre_uniforme_creation"], $msg["aut_titre_uniforme_modif_erreur"]);
return FALSE;
}
audit::insert_modif (AUDIT_TITRE_UNIFORME, $this->id) ;
} else {
// creation
$requete = 'INSERT INTO titres_uniformes '.$requete.' ';
$result = pmb_mysql_query($requete,$dbh);
if($result) {
$this->id=pmb_mysql_insert_id();
} else {
require_once("$include_path/user_error.inc.php");
warning($msg["aut_titre_uniforme_creation"], $msg["aut_titre_uniforme_creation_erreur"]);
return FALSE;
}
audit::insert_creation(AUDIT_TITRE_UNIFORME, $this->id) ;
}
// auteurs
for ($i=0; $i<$max_aut0; $i++) {
eval("global \$f_aut0_id$i; \$var_autid=\$f_aut0_id$i;");
eval("global \$f_f0_code$i; \$var_autfonc=\$f_f0_code$i;");
$f_aut[] = array (
'id' => $var_autid,
'fonction' => $var_autfonc,
'type' => '0',
'ordre' => $i );
}
// traitement des auteurs
$rqt_del = "delete from responsability_tu where responsability_tu_num='".$this->id."' ";
$res_del = pmb_mysql_query($rqt_del);
$rqt_ins = "INSERT INTO responsability_tu (responsability_tu_author_num, responsability_tu_num, responsability_tu_fonction, responsability_tu_type, responsability_tu_ordre) VALUES ";
$i=0;
while ($i<=count ($f_aut)-1) {
$id_aut=$f_aut[$i]['id'];
if ($id_aut) {
$fonc_aut = $f_aut[$i]['fonction'];
$type_aut = $f_aut[$i]['type'];
$ordre_aut = $f_aut[$i]['ordre'];
$rqt = $rqt_ins . " ('$id_aut','".$this->id."','$fonc_aut','$type_aut', $ordre_aut) " ;
$res_ins = @pmb_mysql_query($rqt);
}
$i++;
}
$aut_link= new aut_link(AUT_TABLE_TITRES_UNIFORMES,$this->id);
$aut_link->save_form();
$aut_pperso= new aut_pperso("tu",$this->id);
$aut_pperso->save_form();
// Indexation concepts
if($thesaurus_concepts_active == 1 ){
$index_concept = new index_concept($this->id, TYPE_TITRE_UNIFORME);
$index_concept->save();
}
// Mise à jour des vedettes composées contenant cette autorité
vedette_composee::update_vedettes_built_with_element($this->id, "titre_uniforme");
// Gestion des champ répétables
$requete = "DELETE FROM tu_distrib WHERE distrib_num_tu='$this->id' ";
pmb_mysql_query($requete, $dbh);
$requete = "DELETE FROM tu_ref WHERE ref_num_tu='$this->id' ";
pmb_mysql_query($requete, $dbh);
$requete = "DELETE FROM tu_subdiv WHERE subdiv_num_tu='$this->id' ";
pmb_mysql_query($requete, $dbh);
// Distribution instrumentale et vocale (pour la musique)
for($i=0;$iid)titre_uniforme::update_index_tu($this->id);
// réindexation de la notice
if($flag_index)titre_uniforme::update_index($this->id);
//Enrichissement
if ($this->id && $opac_enrichment_bnf_sparql) {
titre_uniforme::tu_enrichment($this->id);
}
//mise à jour de l'oeuvre rdf
if($flag_index && $pmb_synchro_rdf){
$synchro_rdf = new synchro_rdf();
$synchro_rdf->updateAuthority($this->id,'oeuvre');
}
return TRUE;
}
// ---------------------------------------------------------------
// import() : import d'un titre_uniforme
// ---------------------------------------------------------------
// fonction d'import de notice titre_uniforme
function import($value,$from_form=0) {
global $dbh;
// Si vide on sort
if(trim($value['name']) == '') return FALSE;
if(!$from_form) {
$value['name'] = addslashes($value['name']);
$value['num_author'] = addslashes($value['num_author']);
$value['form'] = addslashes($value['form']);
$value['date'] = addslashes($value['date']);
$value['subject'] = addslashes($value['subject']);
$value['place'] = addslashes($value['place']);
$value['history'] = addslashes($value['history']);
$value['characteristic'] = addslashes($value['characteristic']);
$value['intended_termination'] = addslashes($value['intended_termination']);
$value['intended_audience'] = addslashes($value['intended_audience']);
$value['context'] = addslashes($value['context']);
$value['equinox'] = addslashes($value['equinox']);
$value['coordinates'] = addslashes($value['coordinates']);
$value['tonalite'] = addslashes($value['tonalite']);
$value['comment'] = addslashes($value['comment']);
$value['databnf_uri'] = addslashes($value['databnf_uri']);
for($i=0;$itable as $value_form=>$libelle_form){
if($value_form == $value['form']){
$flag_form = true;
}
}
foreach ($marc_key->table as $value_key=>$libelle_key){
if($value_key == $value['tonalite']){
$flag_key = true;
}
}
if(count($value['authors'])){
for($i=0;$iid){
// id non valide
$value['authors'][$i]['id']=0;
}
}
if(!$value['authors'][$i]['id']){
// création ou déjà existant. auteur::import addslashes les champs
$value['authors'][$i]['id']=auteur::import($value['authors'][$i]);
}
}
}
// $value déjà addslashes plus haut -> 1
$titre=titre_uniforme::import_tu_exist($value,1);
if($titre){
return $titre;
}
$requete = "INSERT INTO titres_uniformes SET ";
$requete .= "tu_name='".$value["name"]."', ";
$requete .= "tu_num_author='".$value["num_author"]."', ";
$requete .= ((!$flag_form)?"tu_forme='":"tu_forme_marclist='").$value['form']."', ";
$requete .= "tu_date='".$value["date"]."', ";
$requete .= "tu_sujet='".$value["subject"]."', ";
$requete .= "tu_lieu='".$value["place"]."', ";
$requete .= "tu_histoire='".$value["history"]."', ";
$requete .= "tu_caracteristique='".$value["characteristic"]."', ";
$requete .= "tu_completude='".$value["intended_termination"]."', ";
$requete .= "tu_public='".$value["intended_audience"]."', ";
$requete .= "tu_contexte='".$value["context"]."', ";
$requete .= "tu_equinoxe='".$value["equinox"]."', ";
$requete .= "tu_coordonnees='".$value["coordinates"]."', ";
$requete .= ((!$flag_key)?"tu_tonalite='":"tu_tonalite_marclist='").$value['tonalite']."', ";
$requete .= "tu_comment='".$value["comment"]."', ";
$requete .= "tu_databnf_uri='".$value["databnf_uri"]."'";
// insertion du titre uniforme et mise à jour de l'index tu
if(pmb_mysql_query($requete, $dbh)) {
$tu_id=pmb_mysql_insert_id();
} else {
return FALSE;
}
if(count($value['authors'])){
$ordre=0;
$rqt_ins = "INSERT INTO responsability_tu (responsability_tu_author_num, responsability_tu_num, responsability_tu_fonction, responsability_tu_type, responsability_tu_ordre) VALUES ";
foreach($value['authors'] as $author){
if($author['id']){
$rqt = $rqt_ins . " ('".$author['id']."','".$tu_id."','".$author['fonction']."','".$author['type']."', $ordre) " ;
$res_ins = @pmb_mysql_query($rqt);
$ordre++;
}
}
}
// Distribution instrumentale et vocale (pour la musique)
for($i=0;$itable as $key=>$form_value){
if($key == $value['form']){
$flag_form = true;
}
}
}
//Si une valeur est présente pour la tonalité, on vérifie si la valeur est existante dans la marclist, si oui, on set le champs marclist en base (flag)
if($value['tonalite']){
foreach ($marc_key->table as $key=>$tonalite_value){
if($key == $value['tonalite']){
$flag_key = true;
}
}
}
$dummy = "SELECT * FROM titres_uniformes WHERE tu_name='".$value['name']."' ";
$dummy.= ((!$flag_key)?"AND tu_tonalite='":"AND tu_tonalite_marclist='").$value['tonalite']."' ";
$dummy.= ((!$flag_form)?"AND tu_forme='":"AND tu_forme_marclist='").$value['form']."' AND tu_date='".$value['date']."' AND tu_sujet='".$value['subject']."' AND tu_lieu='".$value['place']."' ";
$dummy.= "AND tu_histoire='".$value['history']."' AND tu_caracteristique='".$value['characteristic']."' AND tu_completude='".$value['intended_termination']."' ";
$dummy.= "AND tu_public='".$value['intended_audience']."' AND tu_contexte='".$value['context']."' AND tu_coordonnees='".$value['coordinates']."' ";
$dummy.= "AND tu_equinoxe='".$value['equinox']."'";
if($tu_id) $dummy = $dummy."and tu_id!='".$tu_id."'"; // Pour la création ou la mise à jour par l'interface
$check = pmb_mysql_query($dummy, $dbh);
if (pmb_mysql_error()=="" && pmb_mysql_num_rows($check)) {
while($row = pmb_mysql_fetch_object($check)){
$tu_id=$row->tu_id;
$different=false;
//Test si les titres de même nom ont aussi la (ou les) même distribution
if(count($value['distrib']) == 0){ //Si le titre que je veux ajouter n'a pas de distribution je regarde si celui qui existe en a une
$requete = "select distrib_num_tu from tu_distrib where
distrib_num_tu='$tu_id' ";
$test = pmb_mysql_query($requete, $dbh);
if (pmb_mysql_num_rows($test)) {
$different = true; //S'il a une distribution, le titre que je veux ajouter est différent
}
}else{
//On teste s'il y a autant de distribution
$requete = "select distrib_num_tu from tu_distrib where distrib_num_tu='$tu_id' ";
$nb=pmb_mysql_num_rows(pmb_mysql_query($requete, $dbh));
if($nb != count($value['distrib'])){ //Si il y en a pas autant c'est un titre différent
$different = true;
}else{ //Sinon on regarde si ce sont les mêmes
$nb_occurence=array_count_values($value['distrib']);//avoir le nombre d'occurence de chaque terme
for($i=0;$iauthor_id && $author['fonction'] == $resp_tu->responsability_tu_fonction){
$found++;
}
}
}
if($found != count($value['authors'])) $different = true;
}
if($different == false){ //Si le titre n'est pas différent on retourne l'id du titre identique
return $tu_id;
}
}
}
// Subdivision de forme
for($i=0;$i', "".$msg["aut_titre_uniforme_derniers_crees"]."", $user_query);
$user_query = str_replace("!!user_input!!",htmlentities(stripslashes($user_input),ENT_QUOTES, $charset),$user_query);
print pmb_bidi($user_query) ;
}
//---------------------------------------------------------------
// update_index($id) : maj des n-uplets la table notice_global_index en rapport avec ce titre uniforme
//---------------------------------------------------------------
static function update_index($id) {
global $dbh;
// On cherche tous les n-uplet de la table notice correspondant à ce titre_uniforme.
$found = pmb_mysql_query("select ntu_num_notice from notices_titres_uniformes where ntu_num_tu = ".$id,$dbh);
// Pour chaque n-uplet trouvés on met a jour la table notice_global_index avec l'auteur modifié :
while(($mesNotices = pmb_mysql_fetch_object($found))) {
$notice_id = $mesNotices->ntu_num_notice;
notice::majNoticesGlobalIndex($notice_id);
notice::majNoticesMotsGlobalIndex($notice_id,'uniformtitle'); //TODO preciser le datatype avant d'appeler cette fonction
}
}
//---------------------------------------------------------------
// get_informations_from_unimarc : ressort les infos d'un titre uniforme depuis une notice unimarc
//---------------------------------------------------------------
static function get_informations_from_unimarc($fields,$zone){
$data = array();
if($zone == "2"){
$data['name'] = $fields[$zone.'30'][0]['a'][0];
$data['tonalite']= $fields[$zone.'30'][0]['u'][0];
$data['date']= $fields[$zone.'30'][0]['k'][0];
$data['distrib'] = array();
for($i=0 ; $itonalite." ".$oeuvre->subject." ".$oeuvre->place." ".$oeuvre->history." ";
$index.= $oeuvre->date." ".$oeuvre->context." ".$oeuvre->equinox." ".$oeuvre->coordinates." ";
$as = array_keys ($oeuvre->responsabilites["responsabilites"], "0" ) ;
for ($i = 0 ; $i < count($as) ; $i++) {
$indice = $as[$i] ;
$auteur_0 = $oeuvre->responsabilites["auteurs"][$indice] ;
$auteur = new auteur($auteur_0["id"]);
$index.= $auteur->name." ".$auteur->rejete." ";;
}
$req = "SELECT distrib_name FROM tu_distrib WHERE distrib_num_tu='$tu_id' ";
$res = pmb_mysql_query($req, $dbh);
if($distrib=pmb_mysql_fetch_object($res)){
$index.= $distrib->distrib_name." ";
}
$req = "SELECT ref_name FROM tu_ref WHERE ref_num_tu='$tu_id' ";
$res = pmb_mysql_query($req, $dbh);
if($ref=pmb_mysql_fetch_object($res)){
$index.= $ref->ref_name." ";
}
$requete .= "' ".addslashes(strip_empty_chars($index))." ' WHERE tu_id=".$tu_id;
$result = pmb_mysql_query($requete,$dbh);
}
return ;
}
// ---------------------------------------------------------------
// do_isbd() : génération de l'isbd du titre uniforme (AFNOR Z 44-061 de 1986)
// ---------------------------------------------------------------
function do_isbd() {
global $msg;
$this->tu_isbd="";
if(!$this->id) return;
$as = array_keys ($this->responsabilites["responsabilites"], "0" ) ;
for ($i = 0 ; $i < count($as) ; $i++) {
$indice = $as[$i] ;
$auteur_0 = $this->responsabilites["auteurs"][$indice] ;
$auteur = new auteur($auteur_0["id"]);
if($i>0)$this->tu_isbd.= " / ";
$this->tu_isbd.= $auteur->display.". ";
}
if($i)$this->tu_isbd.= ". ";
/*
if($this->num_author){
$tu_auteur = new auteur ($this->num_author);
$this->tu_isbd. = $tu_auteur->display.". ";
}*/
if($this->name){
$this->tu_isbd.= $this->name;
}
return $this->tu_isbd;
}
static function get_data_bnf_uri($isbn) {
global $dbh,$charset;
$isbn13=formatISBN($isbn,13);
$isbn10=formatISBN($isbn,10);
//Récupération de l'URI data.bnf.fr à partir d'un isbn
// definition des endpoints databnf et dbpedia
$configbnf = array(
'remote_store_endpoint' => 'http://data.bnf.fr/sparql'
);
$storebnf = ARC2::getRemoteStore($configbnf);
$sparql = "
PREFIX bnf-onto:
prefix rdarelationships:
SELECT ?oeuvre WHERE {
?manifestation bnf-onto:isbn \"".$isbn13."\".
?manifestation rdarelationships:workManifested ?oeuvre.
}";
$ret=false;
$rows = $storebnf->query($sparql, 'rows');
// On vérifie qu'il n'y a pas d'erreur sinon on stoppe le programme et on renvoi une chaine vide
$err = $storebnf->getErrors();
if (!$err) {
print $rows[0]['oeuvre'];
if (!$rows[0]['oeuvre']) {
$sparql = "
PREFIX bnf-onto:
prefix rdarelationships:
SELECT ?oeuvre WHERE {
?manifestation bnf-onto:isbn \"".$isbn10."\".
?manifestation rdarelationships:workManifested ?oeuvre.
}";
$rows = $storebnf->query($sparql, 'rows');
$err = $storebnf->getErrors();
if (!$err) {
if ($rows[0]['oeuvre']) {
$ret=$rows[0]['oeuvre'];
}
}
} else $ret=$rows[0]['oeuvre'];
}
return $ret;
}
static function get_manifestation_list($uri) {
$isbns=array();
$configbnf = array(
'remote_store_endpoint' => 'http://data.bnf.fr/sparql'
);
$storebnf = ARC2::getRemoteStore($configbnf);
$sparql = "
PREFIX bnf-onto:
prefix rdarelationships:
SELECT ?isbn WHERE {
?manifestation bnf-onto:isbn ?isbn.
?manifestation rdarelationships:workManifested <$uri>.
}";
$ret=false;
$rows = $storebnf->query($sparql, 'rows');
// On vérifie qu'il n'y a pas d'erreur sinon on stoppe le programme et on renvoi une chaine vide
$err = $storebnf->getErrors();
if (!$err) {
for($i=0;$i 'http://data.bnf.fr/sparql'
);
$storebnf = ARC2::getRemoteStore($configbnf);
$sparql= "
PREFIX dc:
PREFIX rdarelationships:
SELECT min(?gallica) as ?gallica2 ?title ?date ?editeur WHERE {
?manifestation rdarelationships:workManifested <".$uri.">.
?manifestation rdarelationships:electronicReproduction ?gallica.
?manifestation dc:title ?title.
OPTIONAL { ?manifestation dc:date ?date.}
OPTIONAL { ?manifestation dc:publisher ?editeur.}
} group by ?title ?date ?editeur";
$ret=false;
$rows = $storebnf->query($sparql, 'rows');
// On vérifie qu'il n'y a pas d'erreur sinon on stoppe le programme et on renvoi une chaine vide
$err = $storebnf->getErrors();
$tr=array();
if (!$err) {
foreach($rows as $row) {
$t=array();
$t["uri_gallica"]=$row["gallica2"];
$t["titre"]=$row["title"];
$t["date"]=$row["date"];
$t["editeur"]=$row["editeur"];
$t["uri_gallica"]=$row["gallica2"];
$tr[]=$t;
}
}
$tr=encoding_normalize::charset_normalize($tr,"utf-8");
//Stockage du tableau
$requete="update titres_uniformes set tu_enrichment='".addslashes(serialize($tr))."', tu_enrichment_last_update=now() where tu_id=$id";
pmb_mysql_query($requete,$dbh);
}
}
} // class titre uniforme