public static function export_data($po_opts = null) { require_once __CA_MODELS_DIR__ . "/ca_data_exporters.php"; $vs_search = $po_opts->getOption('search'); $vs_id = $po_opts->getOption('id'); $vb_rdf = (bool) $po_opts->getOption('rdf'); if (!$vb_rdf && !$vs_search && !$vs_id) { print _t('You must specify either an idno or a search expression to select a record or record set for export or activate RDF mode.') . "\n"; return false; } if (!($vs_filename = $po_opts->getOption('file'))) { print _t('You must specify a file to write export output to.') . "\n"; return false; } if (@file_put_contents($vs_filename, "") === false) { // probably a permission error print _t("Can't write to file %1. Check the permissions.", $vs_filename) . "\n"; return false; } // RDF mode if ($vb_rdf) { if (!($vs_config = $po_opts->getOption('config'))) { print _t('You must specify a configuration file that contains the export definition for the RDF mode.') . "\n"; return false; } // test config syntax if (!Configuration::load($vs_config)) { print _t('Syntax error in configuration file %s.', $vs_config) . "\n"; return false; } if (ca_data_exporters::exportRDFMode($vs_config, $vs_filename, array('showCLIProgressBar' => true))) { print _t("Exported data to %1", CLIUtils::textWithColor($vs_filename, 'yellow')); return true; } else { print _t("Could not run RDF mode export") . "\n"; return false; } } // Search or ID mode if (!($vs_mapping = $po_opts->getOption('mapping'))) { print _t('You must specify a mapping for export.') . "\n"; return false; } if (!ca_data_exporters::loadExporterByCode($vs_mapping)) { print _t('Mapping %1 does not exist', $vs_mapping) . "\n"; return false; } if (sizeof($va_errors = ca_data_exporters::checkMapping($vs_mapping)) > 0) { print _t("Mapping %1 has errors: %2", $vs_mapping, join("; ", $va_errors)) . "\n"; return false; } if ($vs_search) { if (!ca_data_exporters::exportRecordsFromSearchExpression($vs_mapping, $vs_search, $vs_filename, array('showCLIProgressBar' => true, 'useNcurses' => true))) { print _t("Could not export mapping %1", $vs_mapping) . "\n"; return false; } else { print _t("Exported data to %1", $vs_filename) . "\n"; } } else { if ($vs_id) { if ($vs_export = ca_data_exporters::exportRecord($vs_mapping, $vs_id, $pa_options = array('singleRecord' => true))) { file_put_contents($vs_filename, $vs_export); print _t("Exported data to %1", CLIUtils::textWithColor($vs_filename, 'yellow')); } else { print _t("Could not export mapping %1", $vs_mapping) . "\n"; return false; } } } }
/** * Export set of records from a given SearchResult object to an array of strings with the individual exports, keyed by primary key. * The behavior is tailored towards the needs of the OAIPMHService. * * @param string $ps_exporter_code defines the exporter to use * @param SearchResult $po_result search result as object * @param array $pa_options * 'start' = * 'limit' = * @return array exported data */ public static function exportRecordsFromSearchResultToArray($ps_exporter_code, $po_result, $pa_options = null) { $vn_start = isset($pa_options['start']) ? (int) $pa_options['start'] : 0; $vn_limit = isset($pa_options['limit']) ? (int) $pa_options['limit'] : 0; ca_data_exporters::$s_exporter_cache = array(); ca_data_exporters::$s_exporter_item_cache = array(); require_once __CA_LIB_DIR__ . '/core/Search/SearchResult.php'; if (!$po_result instanceof SearchResult) { return false; } if (!($t_mapping = ca_data_exporters::loadExporterByCode($ps_exporter_code))) { return false; } if (sizeof(ca_data_exporters::checkMapping($ps_exporter_code)) > 0) { return false; } $t_instance = $t_mapping->getAppDatamodel()->getInstanceByTableNum($t_mapping->get('table_num')); if ($vn_start > 0 && $vn_start < $po_result->numHits()) { $po_result->seek($vn_start); } $va_return = array(); $vn_i = 0; while ($po_result->nextHit()) { if ($vn_limit && $vn_i >= $vn_limit) { break; } $vn_pk_val = $po_result->get($t_instance->primaryKey()); $va_return[$vn_pk_val] = ca_data_exporters::exportRecord($ps_exporter_code, $vn_pk_val); $vn_i++; } return $va_return; }
/** * Responds to GetRecord OAI verb */ private function getRecord($oaiData) { if ($ps_identifier = $this->opo_request->getParameter('identifier', pString)) { if (!($vs_item_id = OaiIdentifier::oaiIdToItem($ps_identifier))) { $this->throwError(self::OAI_ERR_ID_DOES_NOT_EXIST, _t('Identifier is empty')); return false; } } $getRecord = $oaiData->createElement('GetRecord'); $oaiData->documentElement->appendChild($getRecord); $o_dm = Datamodel::load(); $t_item = $o_dm->getInstanceByTableName($this->table, true); if (!$t_item->load($vs_item_id)) { // error - identifier invalid $this->throwError(self::OAI_ERR_ID_DOES_NOT_EXIST, _t('Identifier is invalid')); return; } $va_access_values = caGetUserAccessValues($this->opo_request, array_merge($this->opa_provider_info, array('ignoreProvidence' => true))); $vb_show_deleted = (bool) $this->opa_provider_info['show_deleted']; $vb_dont_enforce_access_settings = (bool) $this->opa_provider_info['dont_enforce_access_settings']; if (!$vb_dont_enforce_access_settings && $t_item->hasField('access')) { if (!in_array($t_item->get('access'), $va_access_values)) { $this->throwError(self::OAI_ERR_ID_DOES_NOT_EXIST, _t('Identifier is invalid')); return; } } if ($t_item->hasField('deleted')) { if (!$vb_show_deleted && (bool) $t_item->get('deleted')) { $this->throwError(self::OAI_ERR_ID_DOES_NOT_EXIST, _t('Identifier is deleted')); return; } } $va_last_change = $t_item->getLastChangeTimestamp(); $vs_export = ca_data_exporters::exportRecord($this->getMappingCode(), $t_item->getPrimaryKey()); $headerData = array('identifier' => OaiIdentifier::itemToOaiId($vs_item_id), 'datestamp' => self::unixToUtc((int) $va_last_change['timestamp'])); $exportFragment = $oaiData->createDocumentFragment(); $exportFragment->appendXML($vs_export); $recordElement = $getRecord->appendChild($oaiData->createElement('record')); $this->createElementWithChildren($oaiData, $recordElement, 'header', $headerData); $metadataElement = $oaiData->createElement('metadata'); $metadataElement->appendChild($exportFragment); $recordElement->appendChild($metadataElement); }
function caExportMediaMetadataForRecord($ps_table, $ps_type_code, $pn_id) { $o_app_config = Configuration::load(); if (!($vs_media_metadata_config = $o_app_config->get('media_metadata'))) { return false; } $o_metadata_config = Configuration::load($vs_media_metadata_config); $va_mappings = $o_metadata_config->getAssoc('export_mappings'); if (!isset($va_mappings[$ps_table])) { return false; } if (isset($va_mappings[$ps_table][$ps_type_code])) { $vs_export_mapping = $va_mappings[$ps_table][$ps_type_code]; } elseif (isset($va_mappings[$ps_table]['__default__'])) { $vs_export_mapping = $va_mappings[$ps_table]['__default__']; } else { $vs_export_mapping = false; } if ($vs_export_mapping) { return ca_data_exporters::exportRecord($vs_export_mapping, $pn_id); } return false; }
/** * Responds to GetRecord OAI verb */ private function getRecord($oaiData) { if ($ps_identifier = $this->opo_request->getParameter('identifier', pString)) { if (!($vs_item_id = OaiIdentifier::oaiIdToItem($ps_identifier))) { $this->throwError(self::OAI_ERR_ID_DOES_NOT_EXIST, _t('Identifier is empty')); return false; } } $getRecord = $oaiData->createElement('GetRecord'); $oaiData->documentElement->appendChild($getRecord); $o_dm = Datamodel::load(); $t_item = $o_dm->getInstanceByTableName($this->table, true); if (!$t_item->load($vs_item_id)) { // error - identifier invalid $this->throwError(self::OAI_ERR_ID_DOES_NOT_EXIST, _t('Identifier is invalid')); return; } $vs_export = ca_data_exporters::exportRecord($this->getMappingCode(), $t_item->getPrimaryKey()); $headerData = array('identifier' => OaiIdentifier::itemToOaiId($ps_identifier), 'datestamp' => self::unixToUtc(time())); $exportFragment = $oaiData->createDocumentFragment(); $exportFragment->appendXML($vs_export); $recordElement = $getRecord->appendChild($oaiData->createElement('record')); $this->createElementWithChildren($oaiData, $recordElement, 'header', $headerData); $metadataElement = $oaiData->createElement('metadata'); $metadataElement->appendChild($exportFragment); $recordElement->appendChild($metadataElement); }
/** * Export single record (usually via inspector) */ public function ExportSingleData() { $t_exporter = $this->getExporterInstance(); if (!$t_exporter->getPrimaryKey()) { $this->getResponse()->setRedirect($this->getRequest()->config->get('error_display_url') . '/n/3420?r=' . urlencode($this->getRequest()->getFullUrlPath())); return; } $t_subject = $t_exporter->getAppDatamodel()->getInstanceByTableNum($t_exporter->get('table_num'), true); // Can user export records of this type? if (!$this->getRequest()->user->canDoAction('can_export_' . $t_subject->tableName())) { $this->getResponse()->setRedirect($this->getRequest()->config->get('error_display_url') . '/n/3430?r=' . urlencode($this->getRequest()->getFullUrlPath())); return; } $va_errors = ca_data_exporters::checkMapping($t_exporter->get('exporter_code')); if (is_array($va_errors) && sizeof($va_errors) > 0) { $this->getView()->setVar("errors", $va_errors); $this->render('export/export_errors_html.php'); } else { set_time_limit(3600); $o_config = $t_subject->getAppConfig(); $vn_id = $this->getRequest()->getParameter('item_id', pInteger); $this->getView()->setVar("t_subject", $t_subject); // alternate destinations $va_alt_dest = $o_config->getAssoc('exporter_alternate_destinations'); $this->getView()->setVar('exporter_alternate_destinations', $va_alt_dest); // filename set via request wins $vs_filename = $this->getRequest()->getParameter('file_name', pString); // else run template from config if (!$vs_filename && ($vs_export_filename_template = $o_config->get($t_subject->tableName() . "_single_item_export_filename"))) { if ($vs_filename = caProcessTemplateForIDs($vs_export_filename_template, $t_subject->tableNum(), array($vn_id))) { // processed template comes without file extension $vs_filename = $vs_filename . '.' . $t_exporter->getFileExtension(); } } // still no filename? use hardcoded default if (!$vs_filename) { $vs_filename = $vn_id . '.' . $t_exporter->getFileExtension(); } // pass to view as default value for form field $this->getView()->setVar('file_name', $vs_filename); // Can user read this particular item? if (!caCanRead($this->getRequest()->getUserID(), $t_exporter->get('table_num'), $vn_id)) { $this->getResponse()->setRedirect($this->getRequest()->config->get('error_display_url') . '/n/2320?r=' . urlencode($this->getRequest()->getFullUrlPath())); return; } $this->getView()->setVar('item_id', $vn_id); // do item export and dump into tmp file $vs_export = ca_data_exporters::exportRecord($t_exporter->get('exporter_code'), $vn_id, array('singleRecord' => true)); $this->getView()->setVar("export", $vs_export); $vs_tmp_file = tempnam(__CA_APP_DIR__ . DIRECTORY_SEPARATOR . 'tmp', 'dataExport'); file_put_contents($vs_tmp_file, $vs_export); // Store file name and exporter data in session for later retrieval. We don't want to have to pass that on through a bunch of requests. $o_session = $this->getRequest()->getSession(); $o_session->setVar('export_file', $vs_tmp_file); $o_session->setVar('export_content_type', $t_exporter->getContentType()); $o_session->setVar('exporter_id', $t_exporter->getPrimaryKey()); $this->render('export/export_destination_html.php'); } }