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; $i < count($valeur); $i++) { //Recherche de la source $source = $conn->get_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; $i < count($valeur); $i++) { $tvaleur[] = $valeur[$i]; } $selected_sources = implode(",", $tvaleur); $t_table = "t_sources_" . $this->n_ligne; $requete = "create temporary table " . $t_table . " (notice_id integer unsigned not null)"; mysql_query($requete); return $t_table; }
function getEnrichment($notice_id, $tnoti, $tdoc) { global $base_path; $infos = array(); if ($this->active[$tnoti . $tdoc]) { $type = $tnoti . $tdoc; } else { $type = $tnoti; } if ($this->active[$type]) { foreach ($this->active[$type] as $source_id) { //on récupère les infos de la source nécessaires pour l'instancier $name = connecteurs::get_class_name($source_id); foreach ($this->catalog as $connector) { if ($connector['NAME'] == $name) { if (is_file($base_path . "/admin/connecteurs/in/" . $connector['PATH'] . "/" . $name . ".class.php")) { require_once $base_path . "/admin/connecteurs/in/" . $connector['PATH'] . "/" . $name . ".class.php"; $conn = new $name($base_path . "/admin/connecteurs/in/" . $connector['PATH']); $infos[] = $conn->getEnrichment($notice_id); } } } } } return $infos; }
} } show_connectors(); break; case "cancel_sync": $sql = "DELETE FROM source_sync WHERE source_id = {$source_id} AND cancel > 0"; pmb_mysql_query($sql); show_connectors(); break; case "abort_sync": $sql = "DELETE FROM source_sync WHERE source_id = {$source_id} "; pmb_mysql_query($sql); show_connectors(); break; case "add_source": $contrs = new connecteurs(); print $contrs->show_source_form($id, $source_id); break; case "update_source": if ($id) { $contrs = new connecteurs(); require_once $base_path . "/admin/connecteurs/in/" . $contrs->catalog[$id]["PATH"] . "/" . $contrs->catalog[$id]["NAME"] . ".class.php"; eval("\$conn=new " . $contrs->catalog[$id]["NAME"] . "(\"" . $base_path . "/admin/connecteurs/in/" . $contrs->catalog[$id]["PATH"] . "\");"); if (!$source_id) { $source_id = 0; } if ($conn) { $conn->sources[$source_id]["TIMEOUT"] = $timeout; $conn->sources[$source_id]["RETRY"] = $retry; $conn->sources[$source_id]["TTL"] = $ttl; $conn->sources[$source_id]["REPOSITORY"] = $repository;
function make_search() { global $selected_sources; global $search; global $msg; $error_messages = array(); //On modifie l'operateur suivant !! $inter_next = "inter_" . ($this->n_ligne + 1) . "_" . $search[$this->n_ligne + 1]; global ${$inter_next}; if (${$inter_next}) { ${$inter_next} = "or"; } //Recuperation 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; $i < count($valeur); $i++) { //Recherche de la source $source = $conn->get_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]; $source_name_sql = "SELECT name FROM connectors_sources WHERE source_id = " . addslashes($source_id); $source_name = mysql_result(mysql_query($source_name_sql), 0, 0); $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) { //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; $error_messages[$source_name][] = $src->error_message; /*print $src->error_message."<br />"*/ } } //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)"); $error_messages[$source_name][] = sprintf($msg["externalsource_isblocked"], date("H:i", time() + 5 * 60)); } } } } } if ($error_messages) { echo '<div class="external_error_messages">' . $msg["externalsource_error"] . ": "; foreach ($error_messages as $aname => $aerror_messages) { $aerror_messages = array_unique($aerror_messages); print '<span style="border-bottom: 1px dotted" title="' . implode($aerror_messages, ", ") . '">' . $aname . '</span>'; print " "; } echo '</div>'; } //Sources $tvaleur = array(); for ($i = 0; $i < count($valeur); $i++) { $tvaleur[] = $valeur[$i]; } $selected_sources = implode(",", $tvaleur); $t_table = "t_sources_" . $this->n_ligne; //$requete="create temporary table ".$t_table." select distinct recid as notice_id from entrepots where source_id in (".implode(",",$valeur).")"; $requete = "create temporary table " . $t_table . " (notice_id integer unsigned not null)"; mysql_query($requete); return $t_table; }
function make_human_query() { global $search; global $source; global $base_path, $charset; //Récupération de la valeur de saisie $serial_ = "field_" . $this->n_ligne . "_s_" . $this->id; $issues_ = "fieldvar_" . $this->n_ligne . "_s_" . $this->id; global ${$serial_}; global ${$issues_}; $serial = ${$serial_}; $issues = ${$issues_}; if (!$this->is_empty($serial)) { $source_id = 0; $issue_id = array(); foreach ($issues as $value) { $t = explode('_', $value[0]); $source_id = $t[0]; $issue_id[] = $t[2]; } $contrs = new connecteurs(); $connector_id = 0; foreach ($contrs->catalog as $k => $contr) { if ($contr['NAME'] == 'pmb') { $connector_id = $k; break; } } $connector_name = $contrs->get_class_name($source_id); $conn = false; if ($connector_name == 'pmb') { require_once $base_path . "/admin/connecteurs/in/" . $contrs->catalog[$connector_id]["PATH"] . "/" . $contrs->catalog[$connector_id]["NAME"] . ".class.php"; eval("\$conn=new " . $contrs->catalog[$connector_id]["NAME"] . "(\"" . $base_path . "/admin/connecteurs/in/" . $contrs->catalog[$connector_id]["PATH"] . "\");"); } $issues_infos = ""; if ($conn) { $issue_list = $conn->fetch_bulletin_list_full($source_id, $issue_id); if (count($issue_list)) { foreach ($issue_list as $value) { $elem = array(); $elem[0] = $value['bulletin_bulletin']['bulletin_numero']; $elem[1] = $value['bulletin_bulletin']['bulletin_date']; $elem[2] = $value['bulletin_bulletin']['serial_title']; if ($charset != 'utf-8') { foreach ($elem as $k => $v) { $elem[$k] = utf8_decode($v); } } if ($issues_infos == "") { $issues_infos = $elem[2] . " (" . $elem[0] . ($elem[0] && $elem[1] ? " - " : "") . format_date($elem[1]) . ")"; } else { $issues_infos .= " / (" . $elem[0] . ($elem[0] && $elem[1] ? " - " : "") . format_date($elem[1]) . ")"; } } } } $litteral = array($issues_infos); return $litteral; } }
function getEnrichment($notice_id, $enrichmentType = "", $enrich_params = array(), $enrichPage = 1) { global $base_path; $infos = array(); if ($this->active[$this->typnotice . $this->typdoc]) { $type = $this->typnotice . $this->typdoc; } else { $type = $this->typnotice; } if ($this->active[$type]) { foreach ($this->active[$type] as $source_id) { //on récupère les infos de la source nécessaires pour l'instancier $name = connecteurs::get_class_name($source_id); foreach ($this->catalog as $connector) { if ($connector['NAME'] == $name) { if (is_file($base_path . "/admin/connecteurs/in/" . $connector['PATH'] . "/" . $name . ".class.php")) { require_once $base_path . "/admin/connecteurs/in/" . $connector['PATH'] . "/" . $name . ".class.php"; $conn = new $name($base_path . "/admin/connecteurs/in/" . $connector['PATH']); $eTypes = $conn->getTypeOfEnrichment($notice_id, $source_id); if ($enrichmentType) { $bool = false; for ($i = 0; $i < count($eTypes['type']); $i++) { if (is_array($eTypes['type'][$i])) { if ($enrichmentType == $eTypes['type'][$i]['code']) { $bool = true; } } else { if ($enrichmentType == $eTypes['type'][$i]) { $bool = true; } } } if (!$enrichmentType || $bool) { $infos[] = $conn->getEnrichment($notice_id, $source_id, $enrichmentType, $enrich_params, $enrichPage); } } } } } } } return $infos; }