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 /> <i>" . htmlentities($this->config['feuille_xslt_name'], ENT_QUOTES, $charset) . "</i> <input type='checkbox' name='suppr_feuille_xslt' value='1' /> " . $this->msg['suppr_feuille_xslt'] . "</div>"; } $result .= "</div><div class='row'> </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'] . ' ' . $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' : '') . '/> <label class="etiquette" for="deletion_management_none">' . $this->msg['deletion_management_none'] . '</label> '; $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' : '') . '/> <label class="etiquette" for="deletion_management_transient">' . $this->msg['deletion_management_transient'] . '</label>, '; $result .= '<label class="etiquette" for="deletion_management_transient_duration">' . $this->msg['deletion_management_transient_duration'] . '</label> <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"/> '; $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' : '') . '/> <label class="etiquette" for="deletion_management_persistent">' . $this->msg['deletion_management_persistent'] . '</label> '; $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; } }