id=$id; $this->n_ligne=$n_ligne; $this->params=$params; $this->search=&$search; } //fonction de récupération des opérateurs disponibles pour ce champ spécial (renvoie un tableau d'opérateurs) function get_op() { $operators = array(); $operators["EQ"]="="; return $operators; } function get_input_box() { global $msg,$charset; //R�cup�ration de la valeur de saisie $valeur_="field_".$this->n_ligne."_s_".$this->id; global $$valeur_; $valeur=$$valeur_; if ((!$valeur)&&($_SESSION["checked_sources"])) $valeur=$_SESSION["checked_sources"]; if (!is_array($valeur)) $valeur=array(); //Recherche des sources $requete="SELECT connectors_categ_sources.num_categ, connectors_sources.source_id, connectors_categ.connectors_categ_name as categ_name, connectors_sources.name, connectors_sources.comment, connectors_sources.repository, connectors_sources.opac_allowed, source_sync.cancel FROM connectors_sources LEFT JOIN connectors_categ_sources ON (connectors_categ_sources.num_source = connectors_sources.source_id) LEFT JOIN connectors_categ ON (connectors_categ.connectors_categ_id = connectors_categ_sources.num_categ) LEFT JOIN source_sync ON (connectors_sources.source_id = source_sync.source_id AND connectors_sources.repository=2) WHERE connectors_sources.opac_allowed=1 ORDER BY connectors_categ_sources.num_categ DESC, connectors_sources.name"; $resultat=mysql_query($requete); $r=""; return $r; } //fonction de conversion de la saisie en quelque chose de compatible avec l'environnement function transform_input() { } //fonction de création de la requête (retourne une table temporaire) function make_search() { global $search; global $selected_sources; //On modifie l'opérateur suivant !! $inter_next="inter_".($this->n_ligne+1)."_".$search[$this->n_ligne+1]; global $$inter_next; if ($$inter_next) $$inter_next="or"; //Récupération de la valeur de saisie $valeur_="field_".$this->n_ligne."_s_".$this->id; global $$valeur_; $valeur=$$valeur_; global $charset, $class_path,$include_path,$base_path; //Override le timeout du serveur mysql, pour être sûr que le socket dure assez longtemps pour aller jusqu'aux ajouts des résultats dans la base. $sql = "set wait_timeout = 300"; mysql_query($sql); $conn=new connecteurs(); for ($i=0; $iget_class_name($valeur[$i]); require_once($base_path."/admin/connecteurs/in/$source/$source.class.php"); eval("\$src=new $source(\"".$base_path."/admin/connecteurs/in/".$source."\");"); $params=$src->get_source_params($valeur[$i]); if ($params["REPOSITORY"]==2) { $source_id=$valeur[$i]; $unimarc_query=$this->search->make_unimarc_query(); $search_id=md5(serialize($unimarc_query)); //Suppression des vieilles notices //Vérification du ttl $ttl=$params["TTL"]; $requete="delete from entrepot_source_$source_id where unix_timestamp(now())-unix_timestamp(date_import)>".$ttl.';'; mysql_query($requete); $requete="select count(1) from entrepot_source_$source_id where search_id='".addslashes($search_id)."'"; $resultat=mysql_query($requete); $search_exists=mysql_result($resultat,0,0); $requete="select count(1) from entrepot_source_$source_id where search_id='".addslashes($search_id)."' and unix_timestamp(now())-unix_timestamp(date_import)>".$ttl; $resultat=mysql_query($requete); if ((mysql_result($resultat,0,0))||((!mysql_result($resultat,0,0))&&(!$search_exists))) { if (mysql_result($resultat,0,0)) { //Suppression des notices $requete="delete from entrepot_source_$source_id where search_id='".addslashes($search_id)."'"; mysql_query($requete); } //Recherche si on a le droit $flag_search=true; $requete="select (unix_timestamp(now())-unix_timestamp(date_sync)) as sec from source_sync where source_id=$source_id"; $res_sync=mysql_query($requete); if (mysql_num_rows($res_sync)) { $rsync=mysql_fetch_object($res_sync); if ($rsync->sec>300) { mysql_query("delete from source_sync where source_id=".$source_id); } else $flag_search=false; } if ($flag_search) { $flag_error=false; for ($j=0; $j<$params["RETRY"]; $j++) { $src->search($valeur[$i],$unimarc_query,$search_id); if (!$src->error) break; else $flag_error=true; } //Il y a eu trois essais infructueux, on désactive pendant 5 min !! if ($flag_error) { mysql_query("insert into source_sync (source_id,date_sync,cancel) values($source_id,now(),2)"); } } } } } //Sources $tvaleur=array(); for ($i=0; $in_ligne; $requete="create temporary table ".$t_table." (notice_id integer unsigned not null)"; mysql_query($requete); return $t_table; } //fonction de traduction littérale de la requête effectuée (renvoie un tableau des termes saisis) function make_human_query() { global $msg; global $include_path; $litteral=array(); //Récupération de la valeur de saisie $valeur_="field_".$this->n_ligne."_s_".$this->id; global $$valeur_; $valeur=$$valeur_; if(isset($valeur) && is_array($valeur) && count($valeur)){ $requete="select name from connectors_sources where source_id in (".implode(",",$valeur).") and opac_allowed=1"; $resultat=mysql_query($requete); while ($r=mysql_fetch_object($resultat)) { $litteral[]=$r->name; } } return $litteral; } function make_unimarc_query() { return array(); } //fonction de vérification du champ saisi ou sélectionné function is_empty($valeur) { if (count($valeur)) return false; else return true; } } ?>