Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
         }
     }
     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;
Ejemplo n.º 4
0
 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 "&nbsp;";
         }
         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;
 }
Ejemplo n.º 5
0
 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;
     }
 }
Ejemplo n.º 6
0
 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;
 }