function fetchNoticeListArray($noticelist, $recordCharset, $includeLinks, $includeItems)
 {
     //Je filtre les notices en fonction des droits
     $noticelist = $this->filter_tabl_notices($noticelist);
     if (!count($noticelist)) {
         return array();
     }
     $converter = new external_services_converter_notices(1, 600);
     $converter->set_params(array("include_links" => $includeLinks, "include_items" => $includeItems, "include_authorite_ids" => true));
     $keyed_results = $converter->convert_batch($noticelist, "raw_array", $recordCharset);
     $array_results = array_values($keyed_results);
     return $array_results;
 }
    function convert_batch_to_oairecords($notices_to_convert, $format, $target_charset)
    {
        global $dbh;
        if (!$notices_to_convert) {
            //Rien à faire? On fait rien
            return;
        }
        //Allons chercher les dates et les statuts des notices
        $notice_datestamps = array();
        $notice_statuts = array();
        $notice_ids = $notices_to_convert;
        //Par paquets de 100 pour ne pas brusquer mysql
        $notice_idsz = array_chunk($notice_ids, 100);
        $iso8601 = new iso8601("YYYY-MM-DDThh:mm:ssZ");
        foreach ($notice_idsz as $anotice_ids) {
            $sql = "SELECT notice_id, UNIX_TIMESTAMP(update_date) AS datestamp, statut FROM notices WHERE notice_id IN (" . implode(",", $anotice_ids) . ")";
            $res = pmb_mysql_query($sql, $dbh);
            while ($row = pmb_mysql_fetch_assoc($res)) {
                $notice_datestamps[$row["notice_id"]] = $iso8601->unixtime_to_iso8601($row["datestamp"]);
                $notice_statuts[$row["notice_id"]] = $row["statut"];
            }
        }
        //Si il existe un status correspondant à la suppression, on génère ces enregistrements et on les supprime de la liste à générer.
        if ($this->deleted_record_statut) {
            $deleted_records = array();
            foreach ($notice_statuts as $notice_id => $anotice_statut) {
                if ($anotice_statut == $this->deleted_record_statut) {
                    $notice_sets = connector_out_set_noticecaddie::get_notice_setlist($notice_id);
                    $notice_sets = array_intersect($notice_sets, $this->source_set_ids);
                    $deleted_records = array('datestamp' => $datestamps[$notice_id], 'sets' => $notice_sets);
                    unset($notices_to_convert[array_search($notice_id, $notices_to_convert)]);
                }
            }
        } else {
            if ($this->deletion_management) {
                $deleted_records = $this->get_deleted_records($this->source_set_ids, $notices_to_convert, $iso8601);
            }
        }
        // On génère les enregistrements supprimés
        foreach ($deleted_records as $notice_id => $deleted_record) {
            $oai_record = "";
            $oai_record .= "<record>";
            $oai_record .= '<header status="deleted">
							<identifier>oai:' . XMLEntities($this->repository_identifier) . ':' . $notice_id . '</identifier>
									<datestamp>' . $deleted_record['datestamp'] . '</datestamp>';
            foreach ($deleted_record['sets'] as $aset_id) {
                $oai_record .= "<setSpec>set_" . $aset_id . "</setSpec>";
            }
            $oai_record .= '</header>';
            $oai_record .= "</record>";
            $this->results[$notice_id] = $oai_record;
        }
        //Convertissons les notices au format demandé si on ne souhaite pas uniquement les entêtes
        $only_identifier = $format == "__oai_identifier";
        if (!$only_identifier) {
            $converter = new external_services_converter_notices(1, $this->set_life_duration);
            $converter->params["include_items"] = $this->include_items;
            $converter->params["include_links"] = $this->include_links;
            $metadatas = $converter->convert_batch($notices_to_convert, $format, $target_charset, $this->xslt);
        }
        //Fabriquons les enregistrements
        foreach ($notices_to_convert as $notice_id) {
            $notice_sets = connector_out_set_noticecaddie::get_notice_setlist($notice_id);
            $notice_sets = array_intersect($notice_sets, $this->source_set_ids);
            $oai_record = "";
            if (!$only_identifier) {
                $oai_record .= "<record>";
            }
            $oai_record .= '<header>
					<identifier>oai:' . XMLEntities($this->repository_identifier) . ':' . $notice_id . '</identifier>
							<datestamp>' . $notice_datestamps[$notice_id] . '</datestamp>';
            foreach ($notice_sets as $aset_id) {
                $oai_record .= "<setSpec>set_" . $aset_id . "</setSpec>";
            }
            $oai_record .= '</header>';
            if (!$only_identifier) {
                $oai_record .= "<metadata>";
                $oai_record .= $metadatas[$notice_id];
                $oai_record .= "</metadata>";
            }
            if (!$only_identifier) {
                $oai_record .= "</record>";
            }
            $this->results[$notice_id] = $oai_record;
        }
    }
Exemple #3
0
 function noticeids_to_recordformats($noticesids, $record_format, $recordcharset = 'iso-8859-1', $includeLinks = true, $includeItems = false)
 {
     $converter = new external_services_converter_notices(1, 600);
     $converter->set_params(array("include_links" => $includeLinks, "include_items" => $includeItems, "include_authorite_ids" => true));
     return $converter->convert_batch($noticesids, $record_format, $recordcharset);
 }