s_id = $id+0;
$this->getData();
}
// ---------------------------------------------------------------
// getData() : récupération infos du titre
// ---------------------------------------------------------------
public function getData() {
$this->name = '';
$this->index = '';
$this->num_statut = 1;
if($this->s_id) {
$requete = "SELECT * FROM series WHERE serie_id='".$this->s_id."' " ;
$result = pmb_mysql_query($requete);
if(pmb_mysql_num_rows($result)) {
$row = pmb_mysql_fetch_object($result);
$this->s_id = $row->serie_id;
$this->name = $row->serie_name;
$this->index = $row->serie_index;
$authority = new authority(0, $this->s_id, AUT_TABLE_SERIES);
$this->num_statut = $authority->get_num_statut();
// Ajoute un lien sur la fiche série si l'utilisateur à accès aux autorités
if (SESSrights & AUTORITES_AUTH){
$this->isbd_entry_lien_gestion = "".$this->name."";
}else{
$this->isbd_entry_lien_gestion = $this->name;
}
}
}
}
public function build_header_to_export() {
global $msg;
$data = array(
$msg[67],
$msg[4019],
);
return $data;
}
public function build_data_to_export() {
$data = array(
$this->name,
$this->num_statut,
);
return $data;
}
// ---------------------------------------------------------------
// show_form : affichage du formulaire de saisie
// ---------------------------------------------------------------
public function show_form($duplicate = false) {
global $msg;
global $charset;
global $serie_form;
global $pmb_type_audit;
global $thesaurus_concepts_active;
if($this->s_id && !$duplicate) {
$action = static::format_url("&sub=update&id=".$this->s_id);
$libelle = $msg[337];
$button_remplace = "s_id)."\"'>";
$button_delete = "";
$button_voir = "s_id\"'>";
} else {
$action = static::format_url('&sub=update&id=');
$libelle = $msg[336];
$button_remplace = '';
$button_delete ='';
$button_voir="" ;
}
$aut_link= new aut_link(AUT_TABLE_SERIES,$this->s_id);
$serie_form = str_replace('', $aut_link->get_form('saisie_serie') , $serie_form);
$aut_pperso= new aut_pperso("serie",$this->s_id);
$serie_form = str_replace('!!aut_pperso!!', $aut_pperso->get_form(), $serie_form);
/**
* Gestion du selecteur de statut d'autorité
*/
$serie_form = str_replace('!!auth_statut_selector!!', authorities_statuts::get_form_for(AUT_TABLE_SERIES, $this->num_statut), $serie_form);
$serie_form = str_replace('!!id!!', $this->s_id, $serie_form);
$serie_form = str_replace('!!libelle!!', $libelle, $serie_form);
$serie_form = str_replace('!!action!!', $action, $serie_form);
$serie_form = str_replace('!!cancel_action!!', static::format_back_url(), $serie_form);
$serie_form = str_replace('!!id!!', $this->s_id, $serie_form);
$serie_form = str_replace('!!serie_nom!!', htmlentities($this->name,ENT_QUOTES, $charset), $serie_form);
$serie_form = str_replace('!!remplace!!', $button_remplace, $serie_form);
$serie_form = str_replace('!!voir_notices!!', $button_voir, $serie_form);
$serie_form = str_replace('!!delete!!', $button_delete, $serie_form);
$serie_form = str_replace('!!delete_action!!', static::format_delete_url("&id=".$this->s_id), $serie_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 ;
$serie_form = str_replace('!!user_input!!', htmlentities($user_input,ENT_QUOTES, $charset), $serie_form);
$serie_form = str_replace('!!nbr_lignes!!', $nbr_lignes, $serie_form);
$serie_form = str_replace('!!page!!', $page, $serie_form);
if($thesaurus_concepts_active == 1){
$index_concept = new index_concept($this->s_id, TYPE_SERIE);
$serie_form = str_replace('!!concept_form!!', $index_concept->get_form('saisie_serie'), $serie_form);
}else{
$serie_form = str_replace('!!concept_form!!', "", $serie_form);
}
if ($this->name) {
$serie_form = str_replace('!!document_title!!', addslashes($this->name.' - '.$libelle), $serie_form);
} else {
$serie_form = str_replace('!!document_title!!', addslashes($libelle), $serie_form);
}
$authority = new authority(0, $this->s_id, AUT_TABLE_SERIES);
$serie_form = str_replace('!!thumbnail_url_form!!', thumbnail::get_form('authority', $authority->get_thumbnail_url()), $serie_form);
if ($pmb_type_audit && $this->s_id && !$duplicate) {
$bouton_audit= audit::get_dialog_button($this->s_id, AUDIT_SERIE);
} else {
$bouton_audit= "";
}
$serie_form = str_replace('!!audit_bt!!', $bouton_audit, $serie_form);
$serie_form = str_replace('!!controller_url_base!!', static::format_url(), $serie_form);
print $serie_form;
}
// ---------------------------------------------------------------
// replace_form : affichage du formulaire de remplacement
// ---------------------------------------------------------------
public function replace_form() {
global $serie_replace;
global $msg;
global $include_path;
if(!$this->s_id || !$this->name) {
require_once("$include_path/user_error.inc.php");
error_message($msg[161], $msg[162], 1, static::format_url('&sub=&id='));
return false;
}
$serie_replace=str_replace('!!id!!', $this->s_id, $serie_replace);
$serie_replace=str_replace('!!serie_name!!', $this->name, $serie_replace);
$serie_replace=str_replace('!!controller_url_base!!', static::format_url(), $serie_replace);
$serie_replace=str_replace('!!cancel_action!!', static::format_back_url(), $serie_replace);
print $serie_replace;
}
// ---------------------------------------------------------------
// delete() : suppression du titre de série
// ---------------------------------------------------------------
public function delete() {
global $dbh;
global $msg;
if(!$this->s_id)
// impossible d'accéder à cette notice de titre de série
return $msg[409];
if(($usage=aut_pperso::delete_pperso(AUT_TABLE_SERIES, $this->s_id,0) )){
// Cette autorité est utilisée dans des champs perso, impossible de supprimer
return ''.$this->display.' '.$msg['autority_delete_error'].'
'.$usage['display'];
}
// récupération du nombre de notices affectées
$requete = "SELECT COUNT(1) AS qte FROM notices WHERE tparent_id=".$this->s_id;
$res = pmb_mysql_query($requete, $dbh);
$nbr_lignes = pmb_mysql_result($res, 0, 0);
if(!$nbr_lignes) {
// On regarde si l'autorité est utilisée dans des vedettes composées
$attached_vedettes = vedette_composee::get_vedettes_built_with_element($this->s_id, TYPE_SERIE);
if (count($attached_vedettes)) {
// Cette autorité est utilisée dans des vedettes composées, impossible de la supprimer
return ''.$this->name." ".$msg["vedette_dont_del_autority"].' '.vedette_composee::get_vedettes_display($attached_vedettes);
}
// titre de série non-utilisé dans des notices : Suppression OK
// effacement dans la table des titres de série
$requete = "DELETE FROM series WHERE serie_id=".$this->s_id;
$result = pmb_mysql_query($requete, $dbh);
// liens entre autorités
$aut_link= new aut_link(AUT_TABLE_SERIES,$this->s_id);
$aut_link->delete();
$aut_pperso= new aut_pperso("serie",$this->s_id);
$aut_pperso->delete();
// nettoyage indexation concepts
$index_concept = new index_concept($this->s_id, TYPE_SERIE);
$index_concept->delete();
// nettoyage indexation
indexation_authority::delete_all_index($this->s_id, "authorities", "id_authority", AUT_TABLE_SERIES);
// effacement de l'identifiant unique d'autorité
$authority = new authority(0, $this->s_id, AUT_TABLE_SERIES);
$authority->delete();
audit::delete_audit(AUDIT_SERIE,$this->s_id);
return false;
} else {
// Ce titre de série est utilisé dans des notices, impossible de le supprimer
return ''.$this->name." ${msg[410]}";
}
}
// ---------------------------------------------------------------
// replace($by) : remplacement du titre
// ---------------------------------------------------------------
public function replace($by,$link_save=0) {
// à compléter
global $msg;
global $dbh;
if(!$by) {
// pas de valeur de remplacement !!!
return "serious error occured, please contact admin...";
}
if (($this->s_id == $by) || (!$this->s_id)) {
// impossible de remplacer une autorité par elle-même
return $msg[411];
}
$aut_link= new aut_link(AUT_TABLE_SERIES,$this->s_id);
// "Conserver les liens entre autorités" est demandé
if($link_save) {
// liens entre autorités
$aut_link->add_link_to(AUT_TABLE_SERIES,$by);
}
$aut_link->delete();
// a) remplacement dans les notices
$requete = "UPDATE notices SET tparent_id=$by WHERE tparent_id=".$this->s_id;
$res = pmb_mysql_query($requete, $dbh);
$rqt_notice="select notice_id,tit1,tit2,tit3,tit4 from notices where tparent_id=".$by;
$r_notice=pmb_mysql_query($rqt_notice);
while ($r=pmb_mysql_fetch_object($r_notice)) {
$rq_serie="update notices, series set notices.index_serie=serie_index, notices.index_wew=concat(serie_name,' ',tit1,' ',tit2,' ',tit3,' ',tit4),notices.index_sew=concat(' ',serie_index,' ','".addslashes(strip_empty_words($r->tit1." ".$r->tit2." ".$r->tit3." ".$r->tit4))."',' ') where notice_id=".$r->notice_id." and serie_id=tparent_id";
pmb_mysql_query($rq_serie);
}
// nettoyage indexation concepts
$index_concept = new index_concept($this->s_id, TYPE_SERIE);
$index_concept->delete();
// effacement de l'identifiant unique d'autorité
$authority = new authority(0, $this->s_id, AUT_TABLE_SERIES);
$authority->delete();
// b) suppression du titre de série à remplacer
$requete = "DELETE FROM series WHERE serie_id=".$this->s_id;
$res = pmb_mysql_query($requete, $dbh);
//Remplacement dans les champs persos sélecteur d'autorité
aut_pperso::replace_pperso(AUT_TABLE_SERIES, $this->s_id, $by);
audit::delete_audit (AUDIT_SERIE, $this->s_id);
// nettoyage indexation
indexation_authority::delete_all_index($this->s_id, "authorities", "id_authority", AUT_TABLE_SERIES);
serie::update_index($by);
return FALSE;
}
// ---------------------------------------------------------------
// update($value) : mise à jour du titre de série
// ---------------------------------------------------------------
public function update($value) {
global $dbh;
global $msg;
global $include_path;
global $thesaurus_concepts_active;
global $authority_statut;
global $authority_thumbnail_url;
if(!$value)
return false;
// nettoyage de la chaîne en entrée
$value = clean_string($value);
$requete = 'SET serie_name="'.$value.'", ';
$requete .= 'serie_index=" '.strip_empty_words($value).' "';
if($this->s_id) {
// update
$requete = 'UPDATE series '.$requete;
$requete .= ' WHERE serie_id='.$this->s_id.' LIMIT 1;';
if(pmb_mysql_query($requete, $dbh)) {
$rqt_notice="select notice_id,tit1,tit2,tit3,tit4 from notices where tparent_id=".$this->s_id;
$r_notice=pmb_mysql_query($rqt_notice);
while ($r=pmb_mysql_fetch_object($r_notice)) {
$rq_serie="update notices, series set notices.update_date = notices.update_date, notices.index_serie=serie_index, notices.index_wew=concat(serie_name,' ',tit1,' ',tit2,' ',tit3,' ',tit4),notices.index_sew=concat(' ',serie_index,' ','".addslashes(strip_empty_words($r->tit1." ".$r->tit2." ".$r->tit3." ".$r->tit4))."',' ') where notice_id=".$r->notice_id." and serie_id=tparent_id";
pmb_mysql_query($rq_serie);
}
audit::insert_modif (AUDIT_SERIE, $this->s_id) ;
$aut_link= new aut_link(AUT_TABLE_SERIES,$this->s_id);
$aut_link->save_form();
$aut_pperso= new aut_pperso("serie",$this->s_id);
if($aut_pperso->save_form()){
$this->cp_error_message = $aut_pperso->error_message;
return false;
}
} else {
require_once("$include_path/user_error.inc.php");
warning($msg[337], $msg[341]);
return FALSE;
}
} else {
// création : s'assurer que le titre n'existe pas déjà
$dummy = "SELECT * FROM series WHERE serie_name REGEXP '^$value$' LIMIT 1 ";
$check = pmb_mysql_query($dummy, $dbh);
if(pmb_mysql_num_rows($check)) {
require_once("$include_path/user_error.inc.php");
print $this->warning_already_exist($msg[336], $msg[340]);
return FALSE;
}
$requete = 'INSERT INTO series '.$requete.';';
if(pmb_mysql_query($requete, $dbh)) {
$this->s_id=pmb_mysql_insert_id();
audit::insert_creation(AUDIT_SERIE, $this->s_id) ;
$aut_link= new aut_link(AUT_TABLE_SERIES,$this->s_id);
$aut_link->save_form();
$aut_pperso= new aut_pperso("serie",$this->s_id);
if($aut_pperso->save_form()){
$this->cp_error_message = $aut_pperso->error_message;
return false;
}
} else {
require_once("$include_path/user_error.inc.php");
warning($msg[336], $msg[342]);
return FALSE;
}
}
//update authority informations
$authority = new authority(0, $this->s_id, AUT_TABLE_SERIES);
$authority->set_num_statut($authority_statut);
$authority->set_thumbnail_url($authority_thumbnail_url);
$authority->update();
// Indexation concepts
if($thesaurus_concepts_active == 1){
$index_concept = new index_concept($this->s_id, TYPE_SERIE);
$index_concept->save();
}
// Mise à jour des vedettes composées contenant cette autorité
vedette_composee::update_vedettes_built_with_element($this->s_id, TYPE_SERIE);
serie::update_index($this->s_id);
return TRUE;
}
// ---------------------------------------------------------------
// import() : import d'un titre de série
// ---------------------------------------------------------------
// fonction d'import de notice auteur (membre de la classe 'author');
public static function import($title, $statut=1, $thumbnail_url='') {
global $dbh;
// check sur la variable passée en paramètre
if(!$title) {
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
$key = addslashes($title);
$query = "SELECT serie_id FROM series WHERE serie_name='".rtrim(substr($key,0,255))."' LIMIT 1 ";
$result = @pmb_mysql_query($query, $dbh);
if(!$result) die("can't SELECT series ".$query);
// résultat
// récupération du résultat de la recherche
$tserie = pmb_mysql_fetch_object($result);
// du résultat et récupération éventuelle de l'id
if($tserie->serie_id)
return $tserie->serie_id;
// id non-récupérée, il faut créer la forme.
$index = addslashes(strip_empty_words($title));
$query = 'INSERT INTO series SET serie_name="'.$key.'", serie_index=" '.$index.' "';
$result = @pmb_mysql_query($query, $dbh);
if(!$result) die("can't INSERT into series".$query);
$id=pmb_mysql_insert_id($dbh);
audit::insert_creation (AUDIT_SERIE, $id) ;
//update authority informations
$authority = new authority(0, $id, AUT_TABLE_SERIES);
$authority->set_num_statut($statut);
$authority->set_thumbnail_url($thumbnail_url);
$authority->update();
serie::update_index($id);
return $id;
}
// ---------------------------------------------------------------
// search_form() : affichage du form de recherche
// ---------------------------------------------------------------
public static function search_form() {
global $user_query, $user_input;
global $msg, $charset;
global $authority_statut;
$user_query = str_replace ('!!user_query_title!!', $msg[357]." : ".$msg[333] , $user_query);
$user_query = str_replace ('!!action!!', static::format_url('&sub=reach&id='), $user_query);
$user_query = str_replace ('!!add_auth_msg!!', $msg[339] , $user_query);
$user_query = str_replace ('!!add_auth_act!!', static::format_url('&sub=serie_form'), $user_query);
$user_query = str_replace ('', "$msg[1314]", $user_query);
$user_query = str_replace('', authorities_statuts::get_form_for(AUT_TABLE_SERIES, $authority_statut, true), $user_query);
$user_query = str_replace("!!user_input!!",htmlentities(stripslashes($user_input),ENT_QUOTES, $charset),$user_query);
print pmb_bidi($user_query) ;
// print "
//
// ";
}
//---------------------------------------------------------------
// update_index($id) : maj des index
//---------------------------------------------------------------
public static function update_index($id, $datatype = 'all') {
indexation_stack::push($id, TYPE_SERIE, $datatype);
//-----------------------INI 13/04/2022 LLIUREX Temp solution to fix bug in indexation-----------------------
$indexation_authority = indexations_collection::get_indexation(AUT_TABLE_SERIES);
$indexation_authority->maj($id, $datatype);
//-----------------------FIN 13/04/2022-------------------------------------------------------------------------------------------
// On cherche tous les n-uplet de la table notice correspondant à cette série.
$query = "select distinct(notice_id) from notices where tparent_id='".$id."'";
authority::update_records_index($query, 'serie');
}
public function get_header() {
return $this->name;
}
public function get_cp_error_message(){
return $this->cp_error_message;
}
public function get_gestion_link(){
return './autorites.php?categ=see&sub=serie&id='.$this->s_id;
}
public function get_isbd() {
return $this->name;
}
public static function get_format_data_structure($antiloop = false) {
global $msg;
$main_fields = array();
$main_fields[] = array(
'var' => "name",
'desc' => $msg['233']
);
$authority = new authority(0, 0, AUT_TABLE_SERIES);
$main_fields = array_merge($authority->get_format_data_structure(), $main_fields);
return $main_fields;
}
public function format_datas($antiloop = false){
$formatted_data = array(
'name' => $this->name
);
$authority = new authority(0, $this->s_id, AUT_TABLE_SERIES);
$formatted_data = array_merge($authority->format_datas(), $formatted_data);
return $formatted_data;
}
public static function set_controller($controller) {
static::$controller = $controller;
}
protected static function format_url($url='') {
global $base_path;
if(isset(static::$controller) && is_object(static::$controller)) {
return static::$controller->get_url_base().$url;
} else {
return $base_path.'/autorites.php?categ=series'.$url;
}
}
protected static function format_back_url() {
if(isset(static::$controller) && is_object(static::$controller)) {
return static::$controller->get_back_url();
} else {
return "history.go(-1)";
}
}
protected static function format_delete_url($url='') {
global $base_path;
if(isset(static::$controller) && is_object(static::$controller)) {
return static::$controller->get_delete_url();
} else {
return static::format_url("&sub=delete".$url);
}
}
protected function warning_already_exist($error_title, $error_message, $values=array()) {
$authority = new authority(0, $this->s_id, AUT_TABLE_SERIES);
$display = $authority->get_display_authority_already_exist($error_title, $error_message, $values);
$display = str_replace("!!action!!", static::format_url(), $display);
$display = str_replace("!!forcing_button!!", '', $display);
$hidden_specific_values = $authority->put_global_in_hidden_field("serie_nom");
$hidden_specific_values .= $authority->put_global_in_hidden_field("authority_statut");
$hidden_specific_values .= $authority->put_global_in_hidden_field("authority_thumbnail_url");
$display = str_replace('!!hidden_specific_values!!', $hidden_specific_values, $display);
return $display;
}
} # fin de définition de la classe serie
} # fin de délaration