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)
* @return array
*/
public function get_op() {
$operators = array();
$operators["EQ"]="=";
return $operators;
}
public 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)&&(isset($_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=pmb_mysql_query($requete);
$r="";
return $r;
}
/**
* fonction de conversion de la saisie en quelque chose de compatible avec l'environnement
*/
public function transform_input() {
}
/**
* Fonction de création de la requête (retourne une table temporaire)
* @return string
*/
public function make_search()
{
global $search;
global $selected_sources;
global $search_dont_check;
//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_};
if(is_array($valeur)) {
$_SESSION["checked_sources"] = $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";
pmb_mysql_query($sql);
$tsearched_sources=[];
$tselected_sources=[];
for ($i=0; $iget_source_params($valeur[$i]);
/**
* On vérifie si le connecteur est asynchrone ou synchrone
*/
if ($params["REPOSITORY"] == self::REPOSITORY_SYNC) {
$tsearched_sources[] = $valeur[$i];
$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;
if (empty($search_dont_check)) {
$requete="select count(1) from entrepot_source_$source_id where search_id='".addslashes($search_id)."'";
$resultat=pmb_mysql_query($requete);
$search_exists=pmb_mysql_result($resultat,0,0);
} else $search_exists=false;
$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=pmb_mysql_query($requete);
if ((pmb_mysql_result($resultat,0,0))||((!pmb_mysql_result($resultat,0,0))&&(!$search_exists))) {
if (pmb_mysql_result($resultat,0,0)) {
//Suppression des notices
$requete="delete from entrepot_source_$source_id where search_id='".addslashes($search_id)."'";
pmb_mysql_query($requete);
}
//Recherche si on a le droit
$flag_search=true;
$now=time();
if(isset($_SESSION["source_".$source_id."_last_cancel"])){
if($now-$_SESSION["source_".$source_id."_last_cancel"]>300){
unset($_SESSION["source_".$source_id."_last_cancel"]);
unset($_SESSION["source_".$source_id."_cancel"]);
} 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) {
$_SESSION["source_".$source_id."_last_cancel"]=$now;
$_SESSION["source_".$source_id."_cancel"]=2;
}
}
}
}
else {
$tselected_sources[]=$valeur[$i];
}
}
//Sources
$tvaleur=array();
for ($i=0; $in_ligne;
$requete="create temporary table ".$t_table." (notice_id integer unsigned not null)";
pmb_mysql_query($requete);
global $search_previous_table;
$search_previous_table=$t_table."_save";
$requete="create temporary table ".$search_previous_table." (notice_id integer unsigned not null, i_value varchar(255), idiot int(1), pert decimal(16,1) default 1)";
pmb_mysql_query($requete);
for ($i=0; $in_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=pmb_mysql_query($requete);
while ($r=pmb_mysql_fetch_object($resultat)) {
$litteral[]=$r->name;
}
}
return $litteral;
}
public function make_unimarc_query() {
return array();
}
/**
* Fonction de vérification du champ saisi ou sélectionné
* @param array|object $valeur
* @return boolean
*/
public function is_empty($valeur) {
if (count($valeur)) return false; else return true;
}
}
?>