" ;
if($id) {
// on cherche à atteindre une notice existante
$this->recursif=$recursif;
$this->id = $id;
$this->getData();
} else {
// la notice n'existe pas
$this->id = 0;
$this->getData();
}
}
// ---------------------------------------------------------------
// getData() : récupération infos auteur
// ---------------------------------------------------------------
function getData() {
global $dbh,$msg;
if(!$this->id) {
// pas d'identifiant.
$this->id = 0;
$this->type = '';
$this->name = '';
$this->rejete = '';
$this->date = '';
$this->author_web = '';
$this->see = '';
$this->see_libelle = '';
$this->display = '';
$this->isbd_entry = '';
$this->author_comment = '';
$this->subdivision = '';
$this->lieu = '';
$this->ville = '';
$this->pays = '';
$this->numero = '';
$this->import_denied = 0;
} else {
$requete = "SELECT * FROM authors WHERE author_id=$this->id LIMIT 1 ";
$result = @mysql_query($requete, $dbh);
if(mysql_num_rows($result)) {
$temp = mysql_fetch_object($result);
mysql_free_result($result);
$this->id = $temp->author_id;
$this->type = $temp->author_type;
$this->name = $temp->author_name;
$this->rejete = $temp->author_rejete;
$this->date = $temp->author_date;
$this->author_web = $temp->author_web;
$this->see = $temp->author_see;
$this->author_comment = $temp->author_comment ;
//Ajout pour les congrès
$this->subdivision = $temp->author_subdivision ;
$this->lieu = $temp->author_lieu ;
$this->ville = $temp->author_ville ;
$this->pays = $temp->author_pays ;
$this->numero = $temp->author_numero ;
$this->import_denied = $temp->author_import_denied;
if($this->type==71 ) {
// C'est une collectivité
$this->isbd_entry = $temp->author_name;
$this->display = $temp->author_name;
if( $temp->author_subdivision ) {
$this->isbd_entry .= ". ".$temp->author_subdivision;
$this->display .= ". ".$temp->author_subdivision;
}
if($temp->author_rejete ) {
$this->isbd_entry .= ", ".$temp->author_rejete;
$this->display .= ", ".$temp->author_rejete;
//$this->info_bulle=$temp->author_rejete;
}
$liste_field=$liste_lieu=array();
if($temp->author_numero) {
$liste_field[]= $temp->author_numero;
}
if($temp->author_date) {
$liste_field[]= $temp->author_date;
}
if($temp->author_lieu) {
$liste_lieu[]= $temp->author_lieu;
}
if($temp->author_ville) {
$liste_lieu[]= $temp->author_ville;
}
if($temp->author_pays) {
$liste_lieu[]= $temp->author_pays;
}
if(count($liste_lieu)) $liste_field[]= implode(", ",$liste_lieu);
if(count($liste_field)) {
$liste_field=implode("; ",$liste_field);
$this->isbd_entry .= ' ('.$liste_field.')';
$this->display .= ' ('.$liste_field.')';
}
} elseif( $this->type==72 ) {
// C'est un congrès
$libelle=$msg["congres_libelle"].": ";
if($temp->author_rejete ) {
$this->isbd_entry = $temp->author_name.", ".$temp->author_rejete;
$this->display = $libelle.$temp->author_name.", ".$temp->author_rejete;
} else {
$this->isbd_entry = $temp->author_name;
$this->display = $libelle.$temp->author_name;
}
$liste_field=$liste_lieu=array();
if($temp->author_subdivision) {
$liste_field[]= $temp->author_subdivision;
}
if($temp->author_numero) {
$liste_field[]= $temp->author_numero;
}
if($temp->author_date) {
$liste_field[]= $temp->author_date;
}
if($temp->author_lieu) {
$liste_lieu[]= $temp->author_lieu;
}
if($temp->author_ville) {
$liste_lieu[]= $temp->author_ville;
}
if($temp->author_pays) {
$liste_lieu[]= $temp->author_pays;
}
if(count($liste_lieu)) $liste_field[]= implode(", ",$liste_lieu);
if(count($liste_field)) {
$liste_field=implode("; ",$liste_field);
$this->isbd_entry .= ' ('.$liste_field.')';
$this->display .= ' ('.$liste_field.')';
}
} else {
// auteur physique
if($temp->author_rejete) {
$this->isbd_entry = "$temp->author_name, $temp->author_rejete";
$this->display = "$temp->author_name, $temp->author_rejete";
} else {
$this->isbd_entry = $temp->author_name;
$this->display = $temp->author_name;
}
if($temp->author_date) {
$this->isbd_entry .= ' ('.$temp->author_date.')';
}
}
// Ajoute un lien sur la fiche auteur si l'utilisateur à accès aux autorités
if (SESSrights & AUTORITES_AUTH) $this->isbd_entry_lien_gestion = "".$this->display."";
else $this->isbd_entry_lien_gestion = $this->display;
if($temp->author_web) $this->author_web_link = " ";
else $this->author_web_link = "" ;
if($temp->author_see && !$this->recursif) {
$see = new auteur($temp->author_see,1);
$this->see_libelle = $see->display;
} else {
$this->see_libelle = '';
}
} else {
// pas d'auteur avec cette clé
$this->id = 0;
$this->type = '';
$this->name = '';
$this->rejete = '';
$this->date = '';
$this->author_web = '';
$this->see = '';
$this->see_libelle = '';
$this->display = '';
$this->isbd_entry = '';
$this->author_web_link = "" ;
$this->author_comment = '';
$this->subdivision = '';
$this->lieu = '';
$this->ville = '';
$this->pays = '';
$this->numero = '';
$this->import_denied = 0;
}
}
}
// ---------------------------------------------------------------
// show_form : affichage du formulaire de saisie
// ---------------------------------------------------------------
function show_form($type_autorite=70) {
global $msg;
global $author_form;
global $dbh;
global $charset;
global $pmb_type_audit;
$liste_renvoyes = "";
if($this->id) {
$action = "./autorites.php?categ=auteurs&sub=update&id=$this->id";
$libelle = $msg[199];
$button_remplace = "id\"'>";
$button_voir = "id\"'>";
$button_delete = "";
$requete = "SELECT * FROM authors WHERE ";
$requete .= "author_see = '$this->id' ";
$requete .= "ORDER BY author_name, author_rejete ";
$res = @mysql_query($requete, $dbh);
$nbr_lignes = mysql_num_rows($res);
if ($nbr_lignes) {
$liste_renvoyes = "
$msg[aut_list_renv_titre]
" ;
$parity=1;
while(($author_renvoyes=mysql_fetch_object($res))) {
$author_renvoyes->author_name = $author_renvoyes->author_name;
$author_renvoyes->author_rejete = $author_renvoyes->author_rejete;
if($author_renvoyes->author_rejete) $author_entry = $author_renvoyes->author_name.', '.$author_renvoyes->author_rejete;
else $author_entry = $author_renvoyes->author_name;
if($author_renvoyes->author_date)
$author_entry .= " ($author_renvoyes->author_date)";
$link_auteur = "./autorites.php?categ=auteurs&sub=author_form&id=$author_renvoyes->author_id";
if ($parity % 2) {
$pair_impair = "even";
} else {
$pair_impair = "odd";
}
$parity += 1;
$tr_javascript=" onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='$pair_impair'\" onmousedown=\"document.location='$link_auteur';\" ";
$liste_renvoyes .= "
$author_entry
|
";
} // fin while
$liste_renvoyes .= "
";
}
} else {
$action = './autorites.php?categ=auteurs&sub=update&id=';
$libelle = $msg[207];
$button_remplace = '';
$button_delete ='';
}
//Si on est en modif ou non
if(!$this->id){
$this->type = $type_autorite;
$author_form = str_replace('!!dupliquer!!',"",$author_form);
}
// mise à jour de la zone type
switch($this->type) {
case 71:
$sel_coll = " SELECTED";
//Si on est en modif ou non
if($this->id) {
$libelle = $msg["aut_modifier_coll"];
$bouton_dupliquer = "";
$author_form = str_replace('!!dupliquer!!',$bouton_dupliquer,$author_form);
} else $libelle = $msg["aut_ajout_collectivite"];
$completion_name="collectivite_name";
break;
case 72:
//Si on est en modif ou non
if($this->id) {
$libelle = $msg["aut_modifier_congres"];
$bouton_dupliquer = "";
$author_form = str_replace('!!dupliquer!!',$bouton_dupliquer,$author_form);
} else $libelle = $msg["aut_ajout_congres"];
$sel_congres = " SELECTED";
$completion_name="congres_name";
break;
default:
$author_form = str_replace('!!display!!',"display:none",$author_form);
$author_form = str_replace('!!dupliquer!!',"",$author_form);
$sel_pp = " SELECTED";
$completion_name=" ";
break;
}
if($this->import_denied == 1){
$import_denied_checked = "checked='checked'";
}else{
$import_denied_checked = "";
}
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']."\" /> ";
$aut_link= new aut_link(AUT_TABLE_AUTHORS,$this->id);
$author_form = str_replace('', $aut_link->get_form('saisie_auteur') , $author_form);
$aut_pperso= new aut_pperso("author",$this->id);
$author_form = str_replace('!!aut_pperso!!', $aut_pperso->get_form(), $author_form);
$author_form = str_replace('!!id!!', $this->id, $author_form);
$author_form = str_replace('!!action!!', $action, $author_form);
$author_form = str_replace('!!libelle!!', $libelle, $author_form);
$author_form = str_replace('!!author_nom!!', htmlentities($this->name,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!author_rejete!!', htmlentities($this->rejete,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!voir_id!!', $this->see, $author_form);
$author_form = str_replace('!!voir_libelle!!', htmlentities($this->see_libelle,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!date!!', htmlentities($this->date,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!lieu!!', htmlentities($this->lieu,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!ville!!', htmlentities($this->ville,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!pays!!', htmlentities($this->pays,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!subdivision!!', htmlentities($this->subdivision,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!numero!!', htmlentities($this->numero,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!author_web!!', htmlentities($this->author_web,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!sel_pp!!', $sel_pp, $author_form);
$author_form = str_replace('!!sel_coll!!', $sel_coll, $author_form);
$author_form = str_replace('!!sel_congres!!', $sel_congres, $author_form);
$author_form = str_replace('!!remplace!!', $button_remplace, $author_form);
$author_form = str_replace('!!voir_notices!!', $button_voir, $author_form);
$author_form = str_replace('!!delete!!', $button_delete, $author_form);
$author_form = str_replace('!!liste_des_renvoyes_vers!!', $liste_renvoyes, $author_form);
$author_form = str_replace('!!completion_name!!', $completion_name, $author_form);
$author_form = str_replace('!!type_autorite!!', $this->type, $author_form);
// pour retour à la bonne page en gestion d'autorités
// &user_input=".rawurlencode(stripslashes($user_input))."&nbr_lignes=$nbr_lignes&page=$page
global $user_input, $nbr_lignes, $page ;
$author_form = str_replace('!!user_input_url!!', rawurlencode(stripslashes($user_input)), $author_form);
$author_form = str_replace('!!user_input!!', htmlentities($user_input,ENT_QUOTES, $charset), $author_form);
$author_form = str_replace('!!nbr_lignes!!', "", $author_form);
$author_form = str_replace('!!page!!', $page, $author_form);
$author_form = str_replace('!!author_comment!!', $this->author_comment, $author_form);
$author_form = str_replace('!!author_import_denied!!', $import_denied_checked, $author_form);
$author_form = str_replace('!!aut_pperso!!', $aut_pperso->get_form(), $author_form);
$author_form = str_replace('!!audit_bt!!', $bouton_audit, $author_form);
print $author_form;
}
// ---------------------------------------------------------------
// replace_form : affichage du formulaire de remplacement
// ---------------------------------------------------------------
function replace_form() {
global $author_replace;
global $msg;
global $include_path;
// a compléter
if(!$this->id || !$this->name) {
require_once("$include_path/user_error.inc.php");
error_message($msg[161], $msg[162], 1, './autorites.php?categ=auteurs&sub=&id=');
return false;
}
$author_replace=str_replace('!!old_author_libelle!!', $this->display, $author_replace);
$author_replace=str_replace('!!id!!', $this->id, $author_replace);
print $author_replace;
return true;
}
// ---------------------------------------------------------------
// delete() : suppression de l'auteur
// ---------------------------------------------------------------
function delete() {
global $dbh;
global $msg;
if(!$this->id) // impossible d'accéder à cette notice auteur
return $msg[403];
// effacement dans les notices
// récupération du nombre de notices affectées
$requete = "SELECT count(1) FROM responsability WHERE ";
$requete .= "responsability_author='$this->id' ";
$res = mysql_query($requete, $dbh);
$nbr_lignes = mysql_result($res, 0, 0);
if($nbr_lignes) {
// Cet auteur est utilisé dans des notices, impossible de le supprimer
return ''.$this->display."
${msg[402]}";
}
// effacement dans les titres uniformes
// récupération du nombre de titres affectées
$requete = "SELECT count(1) FROM titres_uniformes WHERE ";
$requete .= "tu_num_author='$this->id' ";
$res = mysql_query($requete, $dbh);
$nbr_lignes = mysql_result($res, 0, 0);
if($nbr_lignes) {
// Cet auteur est utilisé dans des notices, impossible de le supprimer
return ''.$this->display."
${msg[tu_dont_del_author]}";
}
// liens entre autorités
$aut_link= new aut_link(AUT_TABLE_AUTHORS,$this->id);
$aut_link->delete();
$aut_pperso= new aut_pperso("author",$this->id);
$aut_pperso->delete();
//suppression dans la table de stockage des numéros d'autorités...
$this->delete_autority_sources($this->id);
// on supprime automatiquement les formes rejetes
$query = "select author_id from authors where author_see = ".$this->id;
$result = mysql_query($query);
if(mysql_num_rows($result)){
while($row = mysql_fetch_object($result)){
//on regarde si cette forme est utilisée...
$query2 = "select count(responsability_author) from responsability where responsability_author =".$row->author_id;
$result2 = mysql_query($query2);
$rejete = new auteur($row->author_id);
//elle est utilisée donc on nettoie juste la référence
if(mysql_num_rows($result2)){
mysql_query("update authors set author_see= 0 where author_id = ".$row->author_id);
}else{
//sinon, on supprime...
$rejete->delete();
}
}
}
audit::delete_audit(AUDIT_AUTHOR,$this->id);
// effacement dans la table des auteurs
$requete = "DELETE FROM authors WHERE author_id='$this->id' ";
mysql_query($requete, $dbh);
return false;
}
// ---------------------------------------------------------------
// delete_autority_sources($idcol=0) : Suppression des informations d'import d'autorité
// ---------------------------------------------------------------
function delete_autority_sources($idaut=0){
$tabl_id=array();
if(!$idaut){
$requete="SELECT DISTINCT num_authority FROM authorities_sources LEFT JOIN authors ON num_authority=author_id WHERE authority_type = 'author' AND author_id IS NULL";
$res=mysql_query($requete);
if(mysql_num_rows($res)){
while ($ligne = mysql_fetch_object($res)) {
$tabl_id[]=$ligne->num_authority;
}
}
}else{
$tabl_id[]=$idaut;
}
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 = 'author'";
$result = mysql_query($query);
if(mysql_num_rows($result)){
while ($ligne = mysql_fetch_object($result)) {
$query = "delete from notices_authorities_sources where num_authority_source = ".$ligne->id_authority_source;
mysql_query($query);
}
}
$query = "delete from authorities_sources where num_authority = ".$value." and authority_type = 'author'";
mysql_query($query);
}
}
// ---------------------------------------------------------------
// replace($by) : remplacement de l'auteur
// ---------------------------------------------------------------
function replace($by,$link_save=0) {
global $msg;
global $dbh;
global $pmb_synchro_rdf;
if (($this->id == $by) || (!$this->id)) {
return $msg[223];
}
$aut_link= new aut_link(AUT_TABLE_AUTHORS,$this->id);
// "Conserver les liens entre autorités" est demandé
if($link_save) {
// liens entre autorités
$aut_link->add_link_to(AUT_TABLE_AUTHORS,$by);
// Voir aussi
if($this->see){
$requete = "UPDATE authors SET author_see='".$this->see."' WHERE author_id='$by' ";
@mysql_query($requete, $dbh);
}
}
$aut_link->delete();
// remplacement dans les responsabilités
$requete = "UPDATE responsability SET responsability_author='$by' WHERE responsability_author='$this->id' ";
@mysql_query($requete, $dbh);
// effacement dans les responsabilités
$requete = "DELETE FROM responsability WHERE responsability_author='$this->id' ";
@mysql_query($requete, $dbh);
// remplacement dans les titres uniformes
$requete = "UPDATE titres_uniformes SET tu_num_author='$by' WHERE tu_num_author='$this->id' ";
@mysql_query($requete, $dbh);
// effacement dans la table des auteurs
$requete = "DELETE FROM authors WHERE author_id='$this->id' ";
mysql_query($requete, $dbh);
//nettoyage d'autorities_sources
$query = "select * from authorities_sources where num_authority = ".$this->id." and authority_type = 'author'";
$result = mysql_query($query);
if(mysql_num_rows($result)){
while($row = 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;
mysql_result($query);
$query = "delete from authorities_sources where id_authority_source = ".$row->id_authority_source;
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;
mysql_query($query);
}
}
}
audit::delete_audit(AUDIT_AUTHOR,$this->id);
auteur::update_index($by);
//mise à jour de l'oeuvre rdf
if($pmb_synchro_rdf){
$synchro_rdf = new synchro_rdf();
$synchro_rdf->replaceAuthority($this->id,$by,'auteur');
}
return FALSE;
}
// ---------------------------------------------------------------
// update($value) : mise à jour de l'auteur
// ---------------------------------------------------------------
function update($value,$force = false) {
global $dbh;
global $msg,$charset;
global $include_path;
global $pmb_synchro_rdf;
if(!$value['name'])
return false;
// nettoyage des chaînes en entrée
$value['name'] = clean_string($value['name']);
$value['rejete'] = clean_string($value['rejete']);
$value['date'] = clean_string($value['date']);
$value['lieu'] = clean_string($value['lieu']);
$value['ville'] = clean_string($value['ville']);
$value['pays'] = clean_string($value['pays']);
$value['subdivision'] = clean_string($value['subdivision']);
$value['numero'] = clean_string($value['numero']);
if(!$force){
if ($this->id) {
// s'assurer que l'auteur n'existe pas déjà
switch($value['type']) {
case 71: // Collectivité
$and_dedoublonnage=" and author_subdivision ='".$value['subdivision']."' and author_lieu='".$value['lieu']."' and author_ville = '".$value['ville']."' and author_pays = '".$value['pays']."' and author_numero ='".$value['numero']."' ";
break;
case 72: // Congrès
$and_dedoublonnage=" and author_subdivision ='".$value['subdivision']."' and author_lieu='".$value['lieu']."' and author_ville = '".$value['ville']."' and author_pays = '".$value['pays']."' and author_numero ='".$value['numero']."' ";
break;
default:
$and_dedoublonnage='';
break;
}
$dummy = "SELECT * FROM authors WHERE author_type='".$value['type']."' AND author_name='".$value['name']."'";
$dummy .= " AND author_rejete='".$value['rejete']."' ";
$dummy .= "AND author_date='".$value[date]."' and author_id!='".$this->id."' $and_dedoublonnage ";
$check = mysql_query($dummy, $dbh);
if (mysql_num_rows($check)) {
require_once("$include_path/user_error.inc.php");
warning($msg[200],htmlentities($msg[220]." -> ".$this->display,ENT_QUOTES, $charset));
return FALSE;
}
} else {
// s'assurer que l'auteur n'existe pas déjà
if ($id_auteur_exists = auteur::check_if_exists($value)) {
$auteur_exists = new auteur($id_auteur_exists);
require_once("$include_path/user_error.inc.php");
warning($msg[200],htmlentities($msg[220]." -> ".$auteur_exists->display,ENT_QUOTES, $charset));
return FALSE;
}
}
// s'assurer que la forme_retenue ne pointe pas dans les deux sens
if ($this->id) {
$dummy = "SELECT * FROM authors WHERE author_id='".$value[voir_id]."' and author_see='".$this->id."'";
$check = mysql_query($dummy, $dbh);
if (mysql_num_rows($check)) {
require_once("$include_path/user_error.inc.php");
warning($msg[200],htmlentities($msg['author_forme_retenue_error']." -> ".$this->display,ENT_QUOTES, $charset));
return FALSE;
}
}
}
$requete = "SET author_type='$value[type]', ";
$requete .= "author_name='$value[name]', ";
$requete .= "author_rejete='$value[rejete]', ";
$requete .= "author_date='$value[date]', ";
$requete .= "author_lieu='".$value["lieu"]."', ";
$requete .= "author_ville='".$value["ville"]."', ";
$requete .= "author_pays='".$value["pays"]."', ";
$requete .= "author_subdivision='".$value["subdivision"]."', ";
$requete .= "author_numero='".$value["numero"]."', ";
$requete .= "author_web='$value[author_web]', ";
$requete .= "author_see='$value[voir_id]', ";
$requete .= "author_comment='$value[author_comment]', ";
$word_to_index = $value["name"]." ".$value["rejete"]." ".$value["lieu"]." ".$value["ville"]." ".$value["pays"]." ".$value["numero"]." ".$value["subdivision"];
if($value['type'] == 72) $word_to_index.= " ".$value["date"];
$requete .= "index_author=' ".strip_empty_chars($word_to_index)." ',";
$requete .= "author_import_denied= ".($value['import_denied'] ? 1 : 0);
if($this->id) {
audit::insert_modif (AUDIT_AUTHOR, $this->id) ;
// update
// on checke s'il n'y a pas un renvoi circulaire
if($this->id == $value['voir_id']) {
require_once("$include_path/user_error.inc.php");
warning($msg[199],htmlentities($msg[222]." -> ".$this->display,ENT_QUOTES, $charset));
return FALSE;
}
$requete = 'UPDATE authors '.$requete;
$requete .= ' WHERE author_id='.$this->id.' ;';
if(mysql_query($requete, $dbh)) {
// liens entre autorités
$aut_link= new aut_link(AUT_TABLE_AUTHORS,$this->id);
$aut_link->save_form();
$aut_pperso= new aut_pperso("author",$this->id);
$aut_pperso->save_form();
auteur::update_index($this->id);
//mise à jour de l'auteur dans la base rdf
if($pmb_synchro_rdf){
$synchro_rdf = new synchro_rdf();
$synchro_rdf->updateAuthority($this->id,'auteur');
}
return TRUE;
} else {
require_once("$include_path/user_error.inc.php");
warning($msg[199],htmlentities($msg[208]." -> ".$this->display,ENT_QUOTES, $charset));
return FALSE;
}
} else {
// creation
$requete = 'INSERT INTO authors '.$requete.' ';
if(mysql_query($requete, $dbh)) {
$this->id=mysql_insert_id();
// liens entre autorités
$aut_link= new aut_link(AUT_TABLE_AUTHORS,$this->id);
$aut_link->save_form();
$aut_pperso= new aut_pperso("author",$this->id);
$aut_pperso->save_form();
audit::insert_creation (AUDIT_AUTHOR, $this->id);
return TRUE;
} else {
require_once("$include_path/user_error.inc.php");
warning($msg[200],htmlentities($msg[221]." -> ".$requete,ENT_QUOTES, $charset));
return FALSE;
}
}
}
// ---------------------------------------------------------------
// import() : import d'un auteur
// ---------------------------------------------------------------
// fonction d'import de notice auteur (membre de la classe 'author');
function import($data) {
// cette méthode prend en entrée un tableau constitué des informations éditeurs suivantes :
// $data['type'] type de l'autorité (70 , 71 ou 72)
// $data['name'] élément d'entrée de l'autorité
// $data['rejete'] élément rejeté
// $data['date'] dates de l'autorité
// $data['lieu'] lieu du congrès 210$e
// $data['ville'] ville du congrès
// $data['pays'] pays du congrès
// $data['subdivision'] 210$b
// $data['numero'] numero du congrès 210$d
// $data['voir_id'] id de la forme retenue (sans objet pour l'import de notices)
// $data['author_comment'] commentaire
// $data['authority_number'] Numéro d'autortité
//TODO gestion du dédoublonnage !
global $dbh;
// check sur le type de la variable passée en paramètre
if(!sizeof($data) || !is_array($data)) {
// si ce n'est pas un tableau ou un tableau vide, on retourne 0
return 0;
}
// check sur les éléments du tableau (data['name'] ou data['rejete'] est requis).
$long_maxi_name = mysql_field_len(mysql_query("SELECT author_name FROM authors limit 1"),0);
$long_maxi_rejete = mysql_field_len(mysql_query("SELECT author_rejete FROM authors limit 1"),0);
$data['name'] = rtrim(substr(preg_replace('/\[|\]/', '', rtrim(ltrim($data['name']))),0,$long_maxi_name));
$data['rejete'] = rtrim(substr(preg_replace('/\[|\]/', '', rtrim(ltrim($data['rejete']))),0,$long_maxi_rejete));
if(!$data['name'] && !$data['rejete']){
return 0;
}
// check sur le type d'autorité
if(!$data['type']==70 && !$data['type']==71 && !$data['type']==72){
return 0;
}
// tentative de récupérer l'id associée dans la base (implique que l'autorité existe)
// préparation de la requête
$key0 = $data['type'];
$key1 = addslashes($data['name']);
$key2 = addslashes($data['rejete']);
$key3 = addslashes($data['date']);
$key4 = addslashes($data['subdivision']);
$key5 = addslashes($data['lieu']);
$key6 = addslashes($data['ville']);
$key7 = addslashes($data['pays']);
$key8 = addslashes($data['numero']);
$data['lieu'] = addslashes($data['lieu']);
$data['ville'] = addslashes($data['ville']);
$data['pays'] = addslashes($data['pays']);
$data['subdivision'] = addslashes($data['subdivision']);
$data['numero'] = addslashes($data['numero']);
$data['author_comment'] = addslashes($data['author_comment']);
$data['author_web'] = addslashes($data['author_web']);
$query = "SELECT author_id FROM authors WHERE author_type='${key0}' AND author_name='${key1}' AND author_rejete='${key2}' AND author_date='${key3}'";
if ($data["type"]>70) {
$query .= " and author_subdivision='${key4}' and author_lieu='${key5}' and author_ville='${key6}' and author_pays='${key7}' and author_numero='${key8}'";
}
$query .= " LIMIT 1";
$result = @mysql_query($query, $dbh);
if(!$result) die("can't SELECT in database");
// résultat
// récupération du résultat de la recherche
$aut = mysql_fetch_object($result);
// du résultat et récupération éventuelle de l'id
if($aut->author_id)
return $aut->author_id;
// id non-récupérée, il faut créer l'auteur
$query = "INSERT INTO authors SET author_type='$key0', ";
$query .= "author_name='$key1', ";
$query .= "author_rejete='$key2', ";
$query .= "author_date='$key3', ";
$query .= "author_lieu='".$data['lieu']."', ";
$query .= "author_ville='".$data['ville']."', ";
$query .= "author_pays='".$data['pays']."', ";
$query .= "author_subdivision='".$data['subdivision']."', ";
$query .= "author_numero='".$data['numero']."', ";
$query .= "author_web='".$data['author_web']."', ";
$query .= "author_comment='".$data['author_comment']."', ";
$word_to_index = $key1." ".$key2." ".$data['lieu']." ".$data['ville']." ".$data['pays']." ".$data['numero']." ".$data["subdivision"];
if($key0 == "72") $word_to_index.= " ".$key3;
$query .= "index_author=' ".strip_empty_chars($word_to_index)." ' ";
$result = @mysql_query($query, $dbh);
if(!$result) die("can't INSERT into table authors :
$query ");
$id=mysql_insert_id($dbh);
audit::insert_creation (AUDIT_AUTHOR, $id);
return $id;
}
// ---------------------------------------------------------------
// search_form() : affichage du form de recherche
// ---------------------------------------------------------------
static function search_form($type_autorite=7) {
global $user_query;
global $msg;
global $user_input,$charset;
$sel_tout = ($type_autorite==7) ? 'selected': " ";
$sel_pp = ($type_autorite==70) ? 'selected': " ";
$sel_coll = ($type_autorite==71) ? 'selected' :" ";
$sel_congres = ($type_autorite==72) ? 'selected' :" ";
$libelleBtn=$msg[207];
if($type_autorite==7 || $type_autorite==70) $libelleBtn=$msg[207];
elseif ($type_autorite==71) $libelleBtn=$msg["aut_ajout_collectivite"];
elseif ($type_autorite==72) $libelleBtn=$msg["aut_ajout_congres"];
$libelleRech=$msg[133];
if($type_autorite==7 || $type_autorite==70) $libelleRech=$msg[133];
elseif ($type_autorite==71) $libelleRech=$msg[204];
elseif ($type_autorite==72) $libelleRech=$msg["congres_libelle"];
$url= "\"document.location = './autorites.php?categ=auteurs&sub=reach&id=&type_autorite='+this.value\"";
$sel_autorite_auteur.= "";
$user_query = str_replace("", $sel_autorite_auteur, $user_query);
$user_query = str_replace ('!!user_query_title!!', $msg[357]." : ".$libelleRech , $user_query);
$user_query = str_replace ('!!action!!', './autorites.php?categ=auteurs&sub=reach&id=', $user_query);
$user_query = str_replace ('!!add_auth_msg!!', $libelleBtn , $user_query);
$user_query = str_replace ('!!add_auth_act!!', './autorites.php?categ=auteurs&sub=author_form&type_autorite='.$type_autorite, $user_query);
$user_query = str_replace ('', "$msg[1310]", $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 cet author
//---------------------------------------------------------------
function update_index($id) {
global $dbh;
// On cherche tous les n-uplet de la table notice correspondant à cet auteur.
$found = mysql_query("select distinct responsability_notice from responsability where responsability_author='".$id."'",$dbh);
// Pour chaque n-uplet trouvés on met a jour la table notice_global_index avec l'auteur modifié :
while(($mesNotices = mysql_fetch_object($found))) {
$notice_id = $mesNotices->responsability_notice;
notice::majNoticesGlobalIndex($notice_id);
notice::majNoticesMotsGlobalIndex($notice_id,'author');
}
//On met à jour les titres uniformes correspondant à cet auteur
$found = mysql_query("select distinct tu_id from titres_uniformes WHERE tu_num_author='".$id."'",$dbh);
// Pour chaque n-uplet trouvés on met a jour la table notice_global_index avec l'auteur modifié sur le titre uniforme :
while(($mesTu = mysql_fetch_object($found))) {
titre_uniforme::update_index_tu($mesTu->tu_id);
titre_uniforme::update_index($mesTu->tu_id);
}
}
function get_informations_from_unimarc($fields,$zone,$type,$field=""){
$data = array();
//zone 200
if($zone == "2"){
switch($type){
case 70 :
if(!$field)$field = $zone."00";
$data['type'] = 70;
$data['name'] = $fields[$field][0]['a'][0];
$data['rejete'] = $fields[$field][0]['b'][0];
$data['date'] = $fields[$field][0]['f'][0];
$data['subdivision'] = "";
$data['lieu'] = "";
$data['ville'] = "";
$data['pays'] = "";
$data['numero'] = "";
break;
case 71 :
if(!$field)$field = $zone."10";
if(substr($fields[$field][0]['IND'],0,1) == 1){
$data['type'] = 72;
}else{
$data['type'] = 71;
}
$data['name'] = $fields[$field][0]['a'][0].((count($fields[$field][0]['c']) != 0)?" (".implode(", ",$fields[$field][0]['c']).")":"");
$data['rejete'] = $fields[$field][0]['g'][0];
$data['date'] = $fields[$field][0]['f'][0];
if(count($fields[$field][0]['b'])){
$data['subdivision'] = implode(". ",$fields[$field][0]['b']);
}else{
$data['subdivision'] = "";
}
$data['lieu'] = $fields[$field][0]['e'][0];
$data['ville'] = "";
$data['pays'] = "";
$data['numero'] = $fields[$field][0]['d'][0];
break;
}
$data['author_comment'] = "";
for ($i=0 ; $i70) {
$query .= " and author_subdivision='${key4}' and author_lieu='${key5}' and author_ville='${key6}' and author_pays='${key7}' and author_numero='${key8}'";
}
$query .= " LIMIT 1";
$result = mysql_query($query, $dbh);
if(!$result) die("can't SELECT in database");
// résultat
// récupération du résultat de la recherche
$aut = mysql_fetch_object($result);
// du résultat et récupération éventuelle de l'id
if($aut->author_id)
return $aut->author_id;
else return 0;
}
}
} // class auteur