idlocation."\" style=\"display:block\">\r\n";
else $selector .= "
idlocation."\" style=\"display:none\">\r\n";
$selector .= "";
if ($reset_add_idem) {
if(!$selected) {
$selector.= "".$msg["reset_same_section"]." ";
}else {
$selector.= "".$msg["reset_same_section"]." ";
}
}
while (($line = pmb_mysql_fetch_row($result))) {
$selector .= "section_id ? ' SELECTED' : '');
}else{
$selector.= ($line[0] == $selected ? ' SELECTED' : '');
}
$selector.= '>'.htmlentities($line[1],ENT_QUOTES, $charset).' ';
}
$selector.= '
';
$this->ajax_cote_fields .= ($this->ajax_cote_fields != '' ? ",f_ex_section".$loc->idlocation : "f_ex_section".$loc->idlocation);
}
}
return $selector;
}
// ---------------------------------------------------------------
// import() : import d'un exemplaire
// ---------------------------------------------------------------
// fonction d'import d'exemplaire (membre de la classe 'exemplaire');
public function import($data) {
global $msg;
// cette méthode prend en entrée un tableau constitué des informations exemplaires suivantes :
// $data['cb']
// $data['notice']
// $data['bulletin']
// $data['typdoc']
// $data['cote']
// $data['section']
// $data['statut']
// $data['location']
// $data['codestat']
// $data['creation']
// $data['modif']
// $data['note']
// $data['prix']
// $data['expl_owner']
// $data['cote_mandatory'] cote obligatoire = 1, non obligatoire = 0
// $data['quoi_faire'] que faire de cet exemplaire :
// 0 : supprimer, 1 ou vide : Mettre à jour ou ajouter, 2 : ajouter si possible, sinon rien.
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
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[544]."') ") ;
return 0;
}
if ($data['quoi_faire']=="") $data['quoi_faire']="2" ;
if ((string)$data['quoi_faire']=="0") {
$sql_del = "delete from exemplaires where expl_cb='".addslashes($data['cb'])."' " ;
pmb_mysql_query($sql_del) ;
return -1 ;
}
// check sur les éléments du tableau (cb, cote, notice, typdoc, section, statut, location, codestat, owner sont requis).
if(!isset(static::$long_maxi_cb)) {
static::$long_maxi_cb = pmb_mysql_field_len(pmb_mysql_query("SELECT expl_cb FROM exemplaires limit 1"),0);
}
$data['cb'] = rtrim(substr(trim($data['cb']),0,static::$long_maxi_cb));
if(!isset(static::$long_maxi_cote)) {
static::$long_maxi_cote = pmb_mysql_field_len(pmb_mysql_query("SELECT expl_cote FROM exemplaires limit 1"),0);
}
$data['cote'] = rtrim(substr(trim($data['cote']),0,static::$long_maxi_cote));
if(!isset(static::$long_maxi_prix)) {
static::$long_maxi_prix = pmb_mysql_field_len(pmb_mysql_query("SELECT expl_prix FROM exemplaires limit 1"),0);
}
$data['prix'] = rtrim(substr(trim($data['prix']),0,static::$long_maxi_prix));
if ($data['expl_owner']=="") {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', 'No lender given') ") ;
return 0;
}
if($data['cb']=="") {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[545]."') ") ;
return 0;
}
if ($data['cote']=="") {
if ($data['cote_mandatory']==1) {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[546]."') ") ;
return 0;
} else {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[567]."') ") ;
}
}
if($data['notice']==0) {
if ($data['bulletin']==0) {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[547]."') ") ;
return 0;
}
}
if($data['typdoc']==0) {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[548]."') ") ;
return 0;
}
if($data['section']==0) {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[549]."') ") ;
return 0;
}
if($data['statut']==0) {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[550]."') ") ;
return 0;
}
if($data['location']==0) {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[551]."') ") ;
return 0;
}
if($data['codestat']==0) {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[552]."') ") ;
return 0;
}
if($data['type_antivol']=="") {
$data['type_antivol']="1";
}
// préparation de la requête
$key0 = addslashes($data['cb']);
$key1 = addslashes($data['cote']);
/* vérification que l'exemplaire existe ou pas */
$exe = new stdClass();
$query = "SELECT expl_id FROM exemplaires WHERE expl_cb='${key0}' LIMIT 1 ";
$result = @pmb_mysql_query($query, $dbh);
if(!$result) die("can't SELECT exemplaires ".$query);
if(pmb_mysql_num_rows($result)) $exe = pmb_mysql_fetch_object($result);
if (!$data['date_depot']) $data['date_depot']="sysdate()" ; else $data['date_depot']="'".$data['date_depot']."'" ;
if (!$data['date_retour']) $data['date_retour']="sysdate()" ; else $data['date_retour']="'".$data['date_retour']."'" ;
// l'exemplaire existe et on ne pouvait que l'ajouter, on retourne l'ID
if ($exe->expl_id!="" && $data['quoi_faire']=="2") {
$sql_log = pmb_mysql_query("insert into error_log (error_origin, error_text) values ('expl_".addslashes(SESSid).".class', '".$msg[553].$data['cb']."') ") ;
return $exe->expl_id;
}
// l'exemplaire existe et on doit le mettre à jour
if ($exe->expl_id!="" && $data['quoi_faire']=="1") {
$sql_a_faire = "update exemplaires SET " ;
$sql_a_faire_suite = " where expl_cb='".addslashes($data['cb'])."' " ;
}
// l'exemplaire n'existe pas : on doit le créer
if ($exe->expl_id=="") {
$sql_a_faire = "insert into exemplaires SET " ;
$sql_a_faire_suite = "" ;
}
$query = $sql_a_faire ;
$query .= "expl_cb='".$key0."', ";
$query .= "expl_notice='".$data['notice']."', ";
$query .= "expl_bulletin='".$data['bulletin']."', ";
$query .= "expl_typdoc='".$data['typdoc']."', ";
$query .= "expl_cote=trim('".$key1."'), ";
$query .= "expl_section='".$data['section']."', ";
$query .= "expl_statut='".$data['statut']."', ";
$query .= "expl_location='".$data['location']."', ";
$query .= "expl_codestat='".$data['codestat']."', ";
$query .= "expl_note='".addslashes($data['note'])."', ";
$query .= "expl_comment='".addslashes($data['comment'])."', ";
$query .= "expl_prix='".addslashes($data['prix'])."', ";
$query .= "expl_owner='".$data['expl_owner']."', ";
$query .= "expl_date_depot=".$data['date_depot'].", ";
$query .= "expl_date_retour=".$data['date_retour'].", ";
$query .= "transfert_location_origine = ".$data['location'].", ";
$query .= "transfert_statut_origine=".$data['statut'].", ";
$query .= "transfert_section_origine=".$data['section'].", ";
//$query .= "type_antivol=".$data['type_antivol'].", ";
if($data['creation']){
$query .= "create_date='".$data['creation']."'";
}else{
$query .= "create_date=sysdate() ";
}
$query .= $sql_a_faire_suite ;
$result = @pmb_mysql_query($query, $dbh);
if(!$result) die("can't INSERT into exemplaires ".$query);
if ($exe->expl_id="") {
audit::insert_creation(AUDIT_EXPL,pmb_mysql_insert_id($dbh));
return pmb_mysql_insert_id($dbh);
} else {
$sql_id = pmb_mysql_query("select expl_id from exemplaires where expl_cb='".addslashes($data['cb'])."' ") ;
$exe = pmb_mysql_fetch_object($sql_id);
audit::insert_modif(AUDIT_EXPL,$exe->expl_id);
return $exe->expl_id;
}
} /* fin méthode import */
// Suppression
public static function del_expl($id=0) {
global $dbh;
global $explr_invisible, $explr_visible_unmod, $explr_visible_mod, $pmb_droits_explr_localises;
$sql_pret = pmb_mysql_query("select 1 from pret where pret_idexpl ='$id' ") ;
if (pmb_mysql_num_rows($sql_pret)) return 0 ;
// visibilite de l'exemplaire
if ($pmb_droits_explr_localises) {
$query = "select expl_location from exemplaires where expl_id='".$id."'";
$result = pmb_mysql_query($query,$dbh);
$location_id = pmb_mysql_result($result,0,0);
$tab_mod=explode(",",$explr_visible_mod);
$as_modif = array_search($location_id,$tab_mod);
if ($as_modif===false) return 0 ;
}
$requete = "select idcaddie FROM caddie where type='EXPL' ";
$result = pmb_mysql_query($requete, $dbh);
for($i=0;$i
delete_values($id);
// nettoyage transfert
$requete_suppr = "delete from transferts_demande where num_expl='$id'";
$result_suppr = pmb_mysql_query($requete_suppr);
// nettoyage circulation des périodiques
serialcirc::delete_expl($id);
// nettoyage doc. à ranger
$requete_suppr = "delete from resa_ranger where resa_cb in (select expl_cb from exemplaires where expl_id='".$id."') ";
$result_suppr = pmb_mysql_query($requete_suppr, $dbh);
// nettoyage indexation concepts
$index_concept = new index_concept($id, TYPE_EXPL);
$index_concept->delete();
$sql_del = pmb_mysql_query("delete from exemplaires where expl_id='$id' ") ;
return 1 ;
}
//sauvegarde un ensemble de notices dans un entrepot agnostique a partir d'un tableau d'ids d'exemplaires
public static function save_to_agnostic_warehouse($expl_ids=array(),$source_id=0,$keep_expl=1) {
global $base_path,$class_path,$include_path,$dbh;
if (is_array($expl_ids) && count($expl_ids) && $source_id*1) {
$export_params=array(
'genere_lien'=>1,
'notice_mere'=>1,
'notice_fille'=>1,
'mere'=>0,
'fille'=>0,
'bull_link'=>1,
'perio_link'=>1,
'art_link'=>0,
'bulletinage'=>0,
'notice_perio'=>0,
'notice_art'=>0,
'export_only_expl_ids'=> $expl_ids
);
$notice_ids=array();
$bulletin_ids=array();
$perio_ids=array();
$q='select expl_notice,expl_bulletin,bulletin_notice from exemplaires left join bulletins on expl_bulletin=bulletin_id and expl_bulletin!=0 where expl_id in ('.implode(',',$expl_ids).')';
$r=pmb_mysql_query($q,$dbh);
if (pmb_mysql_num_rows($r)) {
while($row=pmb_mysql_fetch_object($r)){
if($row->expl_notice) $notice_ids[]=$row->expl_notice;
if($row->expl_bulletin) $bulletin_ids[]=$row->expl_bulletin;
if($row->bulletin_notice) $perio_ids[]=$row->bulletin_notice;
}
}
if (count($notice_ids) || count($bulletin_ids)) {
require_once($base_path."/admin/connecteurs/in/agnostic/agnostic.class.php");
$conn=new agnostic($base_path.'/admin/connecteurs/in/agnostic');
$source_params = $conn->get_source_params($source_id);
$export_params['docnum']=1;
$export_params['docnum_rep']=$source_params['REP_UPLOAD'];
}
if (count($notice_ids)) {
$notice_ids=array_unique($notice_ids);
$e=new export($notice_ids);
$records=array();
do{
$nn = $e->get_next_notice('',array(),array(),$keep_expl,$export_params);
if ($e->notice) $records[] = $e->xml_array;
} while($nn);
$conn->rec_records_from_xml_array($records,$source_id);
}
if (count($bulletin_ids)) {
$bulletin_ids=array_unique($bulletin_ids);
$perio_ids=array_unique($perio_ids);
$e=new export($perio_ids);
$e->expl_bulletin_a_exporter=$bulletin_ids;
$records=array();
do{
$nn = $e->get_next_bulletin('',array(),array(),$keep_expl,$export_params);
if ($e->notice) $records[] = $e->xml_array;
} while($nn);
$conn->rec_records_from_xml_array($records,$source_id);
}
}
}
/**
* Fonction de purge des exemplaires fantomes (appelée en fin de transfert)
* @param int $expl_id Id de l'exemplaire à tester
* @return boolean
*/
public static function purge_ghost($expl_id){
global $dbh;
$rqt = "select expl_ref_num from exemplaires where expl_id = ".$expl_id." ;";
$result = pmb_mysql_query($rqt, $dbh);
if($result){
$parent_id = pmb_mysql_fetch_object($result);
//Il s'agit d'un exemplaire fantome
if($parent_id->expl_ref_num != 0){
self::del_expl($expl_id);
return true;
}
return false;
}
return false;
}
/**
* Fonction de mise à jour du code-barres de l'exemplaire (avec tests)
* @param string $old_cb Ancien code-barres
* @param string $new_cb Nouveau code-barres
* @return int Retourne un entier correspondant aux différents cas d'erreurs/réussite
*/
public static function update_cb($old_cb, $new_cb){
global $dbh;
if(SESSrights & (CATALOGAGE_AUTH + CATAL_MODIF_CB_EXPL_AUTH)){
$requete="select expl_cb from exemplaires WHERE expl_cb='".$new_cb."'";
$result = pmb_mysql_query($requete,$dbh);
$requete="select cb from exemplaires_temp WHERE cb='".$new_cb."' AND sess <>'".SESSid."'";
$result_tempo = pmb_mysql_query($requete,$dbh);
if(!pmb_mysql_num_rows($result) && !pmb_mysql_num_rows($result_tempo)){//Code-barres non existant en base
$requete = "update exemplaires set expl_cb = '".$new_cb."' where expl_cb='".$old_cb."'";
$result = pmb_mysql_query($requete, $dbh);
if($result){ //La requete de mise à jour a réussi
return 1;
}
return 2;
}
//Le code-barres existe déjà en base
return 0;
}
return 3;
}
} # fin de la classe exemplaire
} # fin de définition