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 ; $iname." ".$oeuvre->tonalite." ".$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