/**
  * Génération de la structure de données representant les items d'entrepôts
  * @return array
  */
 protected function get_items_datas($items)
 {
     global $dbh, $pmb_opac_url;
     $records = array();
     if (count($items)) {
         foreach ($items as $item) {
             $infos = entrepot_to_unimarc($item);
             if ($infos['notice']) {
                 $z = new z3950_notice("unimarc", $infos['notice'], $infos['source_id']);
                 $record = array();
                 $record["num_notice"] = $item;
                 $record["type"] = "repository";
                 $record["title"] = $z->titles[0];
                 $record["summary"] = $z->abstract_note;
                 $record["content"] = $z->content_note;
                 $record["url"] = $z->link_url;
                 $record["logo_url"] = $z->thumbnail_url;
                 $query = "select distinct date_import from entrepot_source_" . $z->source_id . " where recid=" . $item;
                 $result = pmb_mysql_query($query, $dbh);
                 if ($result) {
                     $row = pmb_mysql_fetch_object($result);
                     $record["publication_date"] = $row->date_import;
                 }
                 $record["descriptors"] = array();
                 $record["tags"] = array();
                 $records[] = $record;
             }
         }
     }
     return $records;
 }
//Recherche de la fonction auxiliaire d'integration
if ($z3950_import_modele) {
    if (file_exists($base_path . "/catalog/z3950/" . $z3950_import_modele)) {
        require_once $base_path . "/catalog/z3950/" . $z3950_import_modele;
    } else {
        error_message("", sprintf($msg["admin_error_file_import_modele_z3950"], $z3950_import_modele), 1, "./admin.php?categ=param");
        exit;
    }
} else {
    require_once $base_path . "/catalog/z3950/func_other.inc.php";
}
print "<form class='form-{$current_module}' name='back' method=\"post\" action=\"catalog.php?categ=search&mode=7&sub=launch\">\n\t<input type='hidden' name='serialized_search' value='" . htmlentities(stripslashes($serialized_search), ENT_QUOTES, $charset) . "'/>\n\t<input type='submit' name='ok' class='bouton' value='" . $msg["connecteurs_back_to_list"] . "' />&nbsp;\n</form>\n<script type='text/javascript'>\n\tfunction force_integer(ext_id){\n\t\tvar ajax = new http_request();\n\t\tajax.request('" . $base_path . "/ajax.php?module=catalog&categ=force_integer&item='+ext_id,true,'&serialized_search=" . $sc->serialize_search() . "&page=" . $page . "',true,integer_callback);\n\t}\n\t\n\tfunction integer_callback(response){\n\t\tdata = eval('('+response+')');\n\t\tvar div = document.createElement('div');\n\t\tdiv.setAttribute('id','notice_externe_'+data.id);\n\t\tdiv.innerHTML = data.html;\n\t\tdocument.getElementById('notice_externe_'+data.id).parentNode.replaceChild(div,document.getElementById('notice_externe_'+data.id));\n\t}\n</script>\n";
if (is_array($external_notice_to_integer) && count($external_notice_to_integer)) {
    foreach ($external_notice_to_integer as $external_notice) {
        //Construction de la notice UNIMARC
        $infos = entrepot_to_unimarc($external_notice);
        $biblio_notice = "";
        if ($infos['notice']) {
            $z = new z3950_notice("unimarc", $infos['notice'], $infos['source_id']);
            if ($z->bibliographic_level == "a" && $z->hierarchic_level == "2") {
                $biblio_notice = "art";
            }
            if ($pmb_notice_controle_doublons != 0) {
                $sign = new notice_doublon(true, $infos['source_id']);
                $signature = $sign->gen_signature($external_notice);
                $requete = "select signature, niveau_biblio ,niveau_hierar ,notice_id from notices where signature='{$signature}'";
                $result = mysql_query($requete);
                if ($dbls = mysql_num_rows($result)) {
                    //affichage de l'erreur, en passant tous les param postes (serialise) pour l'eventuel forcage
                    require_once "{$class_path}/mono_display.class.php";
                    print "\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<div id='notice_externe_" . $external_notice . "'>\n\t\t\t\t\t\t<div class='erreur'>{$msg['540']}</div>\n\t\t\t\t\t\t<script type='text/javascript' src='./javascript/tablist.js'></script>\n\t\t\t\t\t\t<div class='row'>\n\t\t\t\t\t\t\t<div class='colonne10'>\n\t\t\t\t\t\t\t\t<img src='./images/error.gif' align='left' />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class='colonne80'>\n\t\t\t\t\t\t\t\t<strong>" . $msg["gen_signature_erreur_similaire"] . "</strong>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class='row'>\n\t\t\t\t\t\t\t<input type='button' class='bouton' onclick='force_integer(" . $external_notice . ")' value=' " . htmlentities($msg["gen_signature_forcage"], ENT_QUOTES, $charset) . " '/>\n\t\t\t\t\t\t</div>";
Exemple #3
0
 function doSync($id_connector, $id_source, $auto_import = false, $id_tache = '', $callback_listen_command = NULL, $callback_deals_command = NULL)
 {
     global $base_path, $dbh, $PMBuserid, $PMBusername, $msg, $charset;
     if (!$id_connector || !$id_source) {
         return array();
     }
     if (SESSrights & ADMINISTRATION_AUTH) {
         $this->callback_listen_command = $callback_listen_command;
         $this->callback_deals_command = $callback_deals_command;
         $result = array();
         $this->id_source = $id_source;
         $this->id_tache = $id_tache;
         $contrs = new connecteurs();
         require_once $base_path . "/admin/connecteurs/in/" . $contrs->catalog[$id_connector]["PATH"] . "/" . $contrs->catalog[$id_connector]["NAME"] . ".class.php";
         eval("\$conn=new " . $contrs->catalog[$id_connector]["NAME"] . "(\"" . $base_path . "/admin/connecteurs/in/" . $contrs->catalog[$id_connector]["PATH"] . "\");");
         //Vérification qu'il n'y a pas de synchronisation en cours...
         $is_already_sync = false;
         $recover_env = "";
         $recover = false;
         $requete = "select * from source_sync where source_id={$id_source}";
         $resultat = mysql_query($requete, $dbh);
         if (mysql_num_rows($resultat)) {
             $rs_s = mysql_fetch_object($resultat);
             if (!$rs_s->cancel) {
                 $result[] = $conn->msg["connecteurs_sync_currentexists"];
                 $is_already_sync = true;
             } else {
                 $recover = true;
                 $recover_env = $rs_s->env;
                 $env = array();
             }
         } else {
             $env = $conn->get_maj_environnement($id_source);
         }
         if (!$is_already_sync) {
             if (!$recover) {
                 $requete = "insert into source_sync (source_id,nrecu,ntotal,date_sync) values({$id_source},0,0,now())";
                 $r = mysql_query($requete, $dbh);
             } else {
                 $requete = "update source_sync set cancel=0 where source_id={$id_source}";
                 $r = mysql_query($requete, $dbh);
             }
             if ($r) {
                 $n_maj = $conn->maj_entrepot($id_source, array(&$this, "callback_progress"), $recover, $recover_env);
                 $result[] = sprintf($msg["connecteurs_count_notices"], $n_maj);
                 $result[] = $conn->error_message;
                 if (!$conn->error) {
                     $this->callback_progress(1, $n_maj, $n_maj);
                     $percent = 1;
                     $requete = "update source_sync set percent=" . round($percent * 100) . " where source_id={$id_source}";
                     $r = mysql_query($requete, $dbh);
                     $requete = "delete from source_sync where source_id=" . $id_source;
                     mysql_query($requete);
                     $requete = "update connectors_sources set last_sync_date=now() where source_id=" . $id_source;
                     mysql_query($requete, $dbh);
                 } else {
                     if ($conn->break_maj($id_source)) {
                         $requete = "delete from source_sync where source_id=" . $id_source;
                     } else {
                         $requete = "update source_sync set cancel=2 where source_id=" . $id_source;
                     }
                     mysql_query($requete, $dbh);
                     $result[] = $conn->error_message;
                 }
             } else {
                 $result[] = mysql_error();
             }
         } else {
             $result[] = $msg["connecteurs_sync_currentexists"];
         }
         //si l'import automatique est activé
         if ($auto_import) {
             //on va chercher les notices non intégrées
             $query = "select distinct entrepot_source_" . $id_source . ".recid from entrepot_source_" . $id_source . " left join notices_externes on notices_externes.recid = concat(connector_id,' " . $id_source . " ',ref) where num_notice is null";
             $result = mysql_query($query);
             if (mysql_num_rows($result)) {
                 while ($row = mysql_fetch_object($result)) {
                     $infos = entrepot_to_unimarc($row->recid);
                     if ($infos['notice']) {
                         $z = new z3950_notice("unimarc", $infos['notice'], $infos['source_id']);
                         if ($pmb_notice_controle_doublons != 0) {
                             $sign = new notice_doublon(true, $infos['source_id']);
                             $signature = $sign->gen_signature($row->recid);
                         } else {
                             $signature = "";
                         }
                         $z->signature = $signature;
                         if ($infos['notice']) {
                             $z->notice = $infos['notice'];
                         }
                         if ($infos['source_id']) {
                             $z->source_id = $infos['source_id'];
                         }
                         $z->var_to_post();
                         $ret = $z->insert_in_database(false);
                         $id_notice = $ret[1];
                         $rqt = "select recid from external_count where rid = '{$row->recid}'";
                         $res = mysql_query($rqt);
                         if (mysql_num_rows($res)) {
                             $recid = mysql_result($res, 0, 0);
                         }
                         $req = "insert into notices_externes set num_notice = '" . $id_notice . "', recid = '" . $recid . "'";
                         mysql_query($req);
                     }
                 }
             }
         }
         return $result;
     } else {
         return array();
     }
 }
// +-------------------------------------------------+
// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
// +-------------------------------------------------+
// $Id: ajax_integer.inc.php,v 1.5 2015-06-23 11:31:29 jpermanne Exp $
if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) {
    die("no access");
}
require_once $class_path . "/search.class.php";
require_once $class_path . "/searcher.class.php";
require_once $class_path . "/mono_display_unimarc.class.php";
require_once $include_path . "/external.inc.php";
require_once $class_path . "/z3950_notice.class.php";
require_once $class_path . "/notice_doublon.class.php";
if ($item) {
    $infos = entrepot_to_unimarc($item);
}
//on regarde si la signature existe déjà..;
$signature = "";
$z = new z3950_notice("unimarc", $infos['notice'], $infos['source_id']);
//on reporte la signature de la notice calculée ou non...
if ($pmb_notice_controle_doublons != 0) {
    $sign = new notice_doublon(true, $infos['source_id']);
    $signature = $sign->gen_signature($item);
}
$z->signature = $signature;
if ($infos['notice']) {
    $z->notice = $infos['notice'];
}
if ($infos['source_id']) {
    $z->source_id = $infos['source_id'];