Esempio n. 1
0
 function get_config_form()
 {
     global $charset, $dbh;
     $result = parent::get_config_form();
     //Repository Name
     $result .= '<div class="row"><label class="etiquette" for="repo_name">' . $this->msg["repository_name"] . '</label><br />';
     $result .= '<input id="repo_name" name="repo_name" type="text" value="' . htmlentities($this->repository_name, ENT_QUOTES, $charset) . '" class="saisie-80em" /></div>';
     //Admin Email
     $result .= '<div class="row"><label class="etiquette" for="admin_email">' . $this->msg["admin_email"] . '</label><br />';
     $result .= '<input id="admin_email" name="admin_email" type="text" value="' . htmlentities($this->admin_email, ENT_QUOTES, $charset) . '" class="saisie-80em" /></div>';
     //repositoryIdentifier
     $result .= '<div class="row"><label class="etiquette" for="repositoryIdentifier">' . $this->msg["repositoryIdentifier"] . '</label><br />';
     $result .= '<input id="repositoryIdentifier" name="repositoryIdentifier" type="text" value="' . htmlentities($this->repositoryIdentifier, ENT_QUOTES, $charset) . '" class="saisie-80em" /></div>';
     //baseURL
     $disable_baseurl_fields = $this->id ? "" : "DISABLED";
     $default_base_url = curPageBaseURL();
     $default_base_url = substr($default_base_url, 0, strrpos($default_base_url, '/') + 1);
     $default_base_url .= 'ws/connector_out.php?source_id=' . $this->id;
     if (!$this->baseURL) {
         $basee = $default_base_url;
     } else {
         $basee = $this->baseURL;
     }
     $result .= '<div class="row"><label class="etiquette" for="baseURL">' . $this->msg["baseURL"] . '</label><br />';
     if (!$this->id) {
         $result .= $this->msg['baseURL_sourceadd'] . '<br />';
     }
     $result .= '<input ' . $disable_baseurl_fields . ' id="baseURL" name="baseURL" type="text" value="' . htmlentities($basee, ENT_QUOTES, $charset) . '" class="saisie-80em" />';
     if ($this->id) {
         $result .= '<input ' . $disable_baseurl_fields . ' type="button" value="' . $this->msg["baseURL_default"] . '" class="bouton" onclick="document.getElementById(\'baseURL\').value=\'' . htmlentities($default_base_url, ENT_QUOTES, $charset) . '\'" />';
     }
     $result .= '</div>';
     //Included sets
     $included_sets = '<select MULTIPLE name="included_sets[]">';
     $included_sets .= '<option value="">' . htmlentities($this->msg["set_none"], ENT_QUOTES, $charset) . '</option>';
     $sets = new connector_out_sets();
     foreach ($sets->sets as &$aset) {
         if (!in_array($aset->type, $this->allowed_set_types)) {
             continue;
         }
         $included_sets .= '<option ' . (in_array($aset->id, $this->included_sets) ? 'selected' : '') . ' value="' . $aset->id . '">' . htmlentities($aset->caption, ENT_QUOTES, $charset) . '</option>';
     }
     $included_sets .= '</select>';
     $result .= '<div class="row"><label class="etiquette" for="included_sets">' . $this->msg["included_sets"] . '</label><br />';
     $result .= $included_sets;
     $result .= '</div>';
     //Nombre de résultats par requete
     $result .= '<div class="row"><label class="etiquette" for="chunksize">' . $this->msg["chunksize"] . '</label><br />';
     $result .= '<input id="chunksize" name="chunksize" type="text" value="' . htmlentities($this->chunksize, ENT_QUOTES, $charset) . '" class="saisie-40em" /></div>';
     //Nombre de résultats par requete
     $result .= '<div class="row"><label class="etiquette">' . $this->msg["builtin_formats"] . '</label><br />';
     $result .= 'Dublin Core, PMB XML Unimarc</div>';
     //Formats de conversion admin/convert autorisé
     $admin_convert_catalog = external_services_converter_notices::get_export_possibilities();
     $admin_convert_select = '<select id="allowed_admin_convert_paths" multiple name="allowed_admin_convert_paths[]">';
     foreach ($admin_convert_catalog as $aconversion) {
         $admin_convert_select .= '<option ' . (in_array($aconversion["path"], $this->allowed_admin_convert_paths) ? 'selected' : '') . ' value="' . $aconversion["path"] . '">' . htmlentities($aconversion["caption"], ENT_QUOTES, $charset) . '</option>';
     }
     $admin_convert_select .= '</select>';
     $result .= '<div class="row"><label class="etiquette" for="allowed_admin_convert_paths">' . $this->msg["allowed_admin_convert_paths"] . '</label><br />';
     $result .= $admin_convert_select;
     $result .= '</div>';
     //feuille XSLT personnalisée
     $result .= "<div class='row'><label for='feuille_xslt'>" . $this->msg['feuille_xslt'] . "</label><br />";
     $result .= "<input type='file' name='feuille_xslt'/>";
     if ($this->config['feuille_xslt']) {
         $result .= "<div class='row'><br />&nbsp;<i>" . htmlentities($this->config['feuille_xslt_name'], ENT_QUOTES, $charset) . "</i>&nbsp;<input type='checkbox' name='suppr_feuille_xslt' value='1' />&nbsp;" . $this->msg['suppr_feuille_xslt'] . "</div>";
     }
     $result .= "</div><div class='row'>&nbsp;</div>";
     //Token life duration
     $result .= '<div class="row"><label class="etiquette" for="token_lifeduration">' . $this->msg["token_lifeduration"] . '</label><br />';
     $result .= '<input id="token_lifeduration" name="token_lifeduration" type="text" value="' . htmlentities($this->token_lifeduration, ENT_QUOTES, $charset) . '" class="saisie-40em" /></div>';
     //Allow GZIP Compression
     $result .= '<div class=row><input id="allow_gzip_compression" ' . ($this->allow_gzip_compression ? 'checked' : '') . ' name="allow_gzip_compression" type="checkbox" />' . '<label class="etiquette" for="allow_gzip_compression">' . $this->msg["allow_gzip_compression"] . '</label><br />';
     $result .= '</div>';
     //Cache complete records
     $result .= '<div class="row"><input onchange="document.getElementById(\'cache_complete_records_seconds\').disabled = !document.getElementById(\'cache_complete_records\').checked;" id="cache_complete_records" ' . ($this->cache_complete_records ? 'checked' : '') . ' name="cache_complete_records" type="checkbox" />' . '<label class="etiquette" for="cache_complete_records">' . $this->msg["cache_complete_records"] . '</label><br />';
     $result .= '</div>';
     //Record cache duration (seconds)
     $result .= '<blockquote><div class="row"><label class="etiquette" for="cache_complete_records_seconds">' . $this->msg["cache_complete_records_seconds"] . '</label><br />';
     $result .= '<input ' . ($this->cache_complete_records ? '' : 'disabled') . ' id="cache_complete_records_seconds" name="cache_complete_records_seconds" type="text" value="' . htmlentities($this->cache_complete_records_seconds, ENT_QUOTES, $charset) . '" class="saisie-40em" /></div></blockquote><br />';
     //Link Status to deletion
     $result .= '<div class="row"><input onchange="document.getElementById(\'linked_status_to_deletion\').disabled = !document.getElementById(\'link_status_to_deletion\').checked;" id="link_status_to_deletion" ' . ($this->link_status_to_deletion ? 'checked' : '') . ' name="link_status_to_deletion" type="checkbox" />' . '<label class="etiquette" for="link_status_to_deletion">' . $this->msg["link_status_to_deletion"] . '</label><br />';
     $result .= '</div>';
     //Linked Status to deletion
     $notice_statut_select = '<select ' . ($this->link_status_to_deletion ? '' : 'disabled') . ' id="linked_status_to_deletion" name="linked_status_to_deletion">';
     $sql = "SELECT id_notice_statut, gestion_libelle FROM notice_statut";
     $res = pmb_mysql_query($sql, $dbh);
     while ($row = pmb_mysql_fetch_assoc($res)) {
         $notice_statut_select .= '<option ' . ($this->linked_status_to_deletion == $row["id_notice_statut"] ? "selected" : '') . ' value="' . $row["id_notice_statut"] . '">' . htmlentities($row["gestion_libelle"], ENT_QUOTES, $charset) . '</option>';
     }
     $notice_statut_select .= '</select>';
     $result .= '<blockquote><div class="row"><label class="etiquette" for="linked_status_to_deletion">' . $this->msg["linked_status_to_deletion"] . '</label><br />';
     $result .= $notice_statut_select;
     $result .= '</div></blockquote><br/>';
     // Deletion management
     $result .= '<div class="row"><label class="etiquette">' . $this->msg['deletion_management'] . '&nbsp;' . $this->msg['if_none_status_to_deletion'] . '</label><br/>';
     $result .= '<input type="radio" id="deletion_management_none" value="0" name="deletion_management" onChange="document.getElementById(\'deletion_management_transient_duration\').disabled = !document.getElementById(\'deletion_management_transient\').checked" ' . ($this->deletion_management == 0 ? 'checked' : '') . '/>&nbsp;<label class="etiquette" for="deletion_management_none">' . $this->msg['deletion_management_none'] . '</label>&nbsp;';
     $result .= '<input type="radio" id="deletion_management_transient" value="1" name="deletion_management" onChange="document.getElementById(\'deletion_management_transient_duration\').disabled = !document.getElementById(\'deletion_management_transient\').checked" ' . ($this->deletion_management == 1 ? 'checked' : '') . '/>&nbsp;<label class="etiquette" for="deletion_management_transient">' . $this->msg['deletion_management_transient'] . '</label>,&nbsp;';
     $result .= '<label class="etiquette" for="deletion_management_transient_duration">' . $this->msg['deletion_management_transient_duration'] . '</label>&nbsp;<input ' . ($this->deletion_management != 1 ? 'disabled' : '') . ' type="text" id="deletion_management_transient_duration" value="' . htmlentities($this->deletion_management_transient_duration, ENT_QUOTES, $charset) . '" name="deletion_management_transient_duration"/>&nbsp;';
     $result .= '<input type="radio" id="deletion_management_persistent" value="2" name="deletion_management" onChange="document.getElementById(\'deletion_management_transient_duration\').disabled = !document.getElementById(\'deletion_management_transient\').checked" ' . ($this->deletion_management == 2 ? 'checked' : '') . '/>&nbsp;<label class="etiquette" for="deletion_management_persistent">' . $this->msg['deletion_management_persistent'] . '</label>&nbsp;';
     $result .= '<div><br/>';
     //Include items
     $result .= '<div class="row"><input id="include_items" ' . ($this->include_items ? 'checked=checked' : '') . ' name="include_items" type="checkbox" />' . '<label class="etiquette" for="include_items">' . $this->msg["include_items"] . '</label><br />';
     $result .= '</div>';
     //Include links
     global $include_path, $class_path, $msg, $form_param, $include_links;
     require_once $class_path . '/export_param.class.php';
     $include_links = $this->include_links;
     $e_param = new export_param(EXP_OAI_CONTEXT);
     $result .= $e_param->check_default_param();
     return $result;
 }
 function process()
 {
     global $verb;
     //Pour ne pas avoir les entêtes définissant le fichier comme du xml, placer un &nx dans l'url (pour pouvoir utiliser le debugger zend par exemple)
     global $nx;
     if (!isset($nx)) {
         header('Content-Type: text/xml');
     }
     $outsets = new connector_out_sets();
     foreach ($outsets->sets as &$aset) {
         if (in_array($aset->id, $this->oai_source_object->included_sets)) {
             $this->sets[] = array("id" => $aset->id, "caption" => $aset->caption);
         }
     }
     //Créons l'object que le serveur va utiliser pour récupérer les enregistrements
     $get_records_objects = new oai_out_get_records_notice($this->msg, $this->oai_source_object->config['feuille_xslt']);
     $get_records_objects->oai_cache_duration = $this->oai_source_object->cache_complete_records_seconds;
     $get_records_objects->source_set_ids = $this->oai_source_object->included_sets;
     $get_records_objects->repository_identifier = $this->oai_source_object->repositoryIdentifier;
     $get_records_objects->notice_statut_deletion = $this->oai_source_object->link_status_to_deletion ? $this->oai_source_object->linked_status_to_deletion : 0;
     $get_records_objects->include_items = $this->oai_source_object->include_items ? $this->oai_source_object->include_items : 0;
     $get_records_objects->include_links = $this->oai_source_object->include_links ? $this->oai_source_object->include_links : 0;
     $get_records_objects->deletion_management = $this->oai_source_object->deletion_management ? $this->oai_source_object->deletion_management : 0;
     $get_records_objects->deletion_management_transient_duration = $this->oai_source_object->deletion_management_transient_duration ? $this->oai_source_object->deletion_management_transient_duration : 0;
     $additional_metadataformat = array();
     foreach ($this->oai_source_object->allowed_admin_convert_paths as $convert_path) {
         $additional_metadataformat["convert:" . $convert_path] = array("metadataPrefix" => "convert:" . $convert_path, "metadataNamespace" => "http://sigb.net/pmb/es/oai/" . "convert:" . $convert_path, "schema" => "http://sigb.net/pmb/es/oai/unknown.xsd");
     }
     //Créons l'objet protocol
     if ($this->oai_source_object->link_status_to_deletion) {
         $deletion = "transient";
     } else {
         switch ($this->oai_source_object->deletion_management) {
             case 0:
                 $deletion = "no";
                 break;
             case 1:
                 $deletion = "transient";
                 $deletion_transient_duration = $this->oai_source_object->deletion_management_transient_duration;
                 break;
             case 2:
                 $deletion = "persistent";
                 break;
             default:
                 $deletion = "none";
                 break;
         }
     }
     $base_url = $this->oai_source_object->baseURL;
     if (!$base_url) {
         $base_url = curPageBaseURL();
         $base_url = substr($default_base_url, 0, strrpos($default_base_url, '/') + 1);
         $base_url .= 'ws/connector_out.php?source_id=' . $this->oai_source_object->id;
     }
     $oai_out_protocol = new oai_out_protocol($get_records_objects, $this->msg, $this->oai_source_object->repository_name, $this->oai_source_object->admin_email, $this->sets, $this->oai_source_object->repositoryIdentifier, $this->oai_source_object->chunksize, $this->oai_source_object->token_lifeduration, $this->oai_source_object->allow_gzip_compression, $deletion, $additional_metadataformat, $base_url, $deletion_transient_duration);
     //Si on peut compresser, on compresse
     if ($this->oai_source_object->allow_gzip_compression) {
         $test = ob_start("ob_gzhandler");
     }
     $response = "";
     //Si la source n'est pas bien configurée
     if (!$this->oai_source_object->repository_name || !$this->oai_source_object->admin_email || !$this->oai_source_object->repositoryIdentifier) {
         echo $oai_out_protocol->oai_header();
         echo $oai_out_protocol->oai_error('unconfigured', $this->msg["unconfigured_source"]);
         echo $oai_out_protocol->oai_footer();
         return;
     } else {
         //on regarde si un des sets manipulés n'est en cours de rafraississement, si oui, on bloque tout et fait patienter le client
         if ($oai_out_protocol->sets_being_refreshed()) {
             header('HTTP/1.1 503 Service Temporarily Unavailable', true, 503);
             header('Status: 503 Service Temporarily Unavailable');
             header('Retry-After: 10');
         } else {
             switch ($verb) {
                 case 'Identify':
                     $response .= $oai_out_protocol->oai_identify();
                     break;
                 case 'ListRecords':
                     $response .= $oai_out_protocol->oai_list_records();
                     break;
                 case 'GetRecord':
                     $response .= $oai_out_protocol->oai_get_record();
                     break;
                 case 'ListSets':
                     $response .= $oai_out_protocol->oai_list_sets();
                     break;
                 case 'ListIdentifiers':
                     $response .= $oai_out_protocol->oai_list_identifier();
                     break;
                 case 'ListMetadataFormats':
                     $response .= $oai_out_protocol->oai_list_metadata_formats();
                     break;
                 default:
                     $response .= $oai_out_protocol->oai_error('badVerb', $this->msg["illegal_verb"]);
                     break;
             }
         }
         //Header
         $response = $oai_out_protocol->oai_header() . $response;
         //Footer
         $response .= $oai_out_protocol->oai_footer();
         echo $response;
     }
 }