public function dispatchLoopShutdown()
 {
     //
     // Force output to be sent - we need the client to have the page before
     // we start flushing progress bar updates
     //
     $app = AppController::getInstance();
     $req = $app->getRequest();
     $resp = $app->getResponse();
     $resp->sendResponse();
     $resp->clearContent();
     //
     // Do export
     //
     if (!$req->isLoggedIn()) {
         return;
     }
     set_time_limit(3600 * 24);
     // if it takes more than 24 hours we're in trouble
     $vn_id = $req->getParameter('exporter_id', pInteger);
     $t_exporter = new ca_data_exporters($vn_id);
     $vs_file = tempnam(__CA_APP_DIR__ . DIRECTORY_SEPARATOR . 'tmp', 'dataExport');
     // we have 3 different sources for batch exports: search/browse result, sets and search expressions (deprecated)
     // they all operate on different parameters and on different static functions in ca_data_exporters
     if ($req->getParameter('caIsExportFromSearchOrBrowseResult', pInteger)) {
         // batch export from search or browse result
         $vs_find_type = $req->getParameter('find_type', pString);
         $vo_result_context = new ResultContext($req, $t_exporter->getTargetTableName(), $vs_find_type);
         $t_instance = $t_exporter->getTargetTableInstance();
         $o_result = $t_instance->makeSearchResult($t_instance->tableName(), $vo_result_context->getResultList());
         ca_data_exporters::exportRecordsFromSearchResult($t_exporter->get('exporter_code'), $o_result, $vs_file, array('request' => $req, 'progressCallback' => 'caIncrementBatchMetadataExportProgress'));
     } else {
         if ($vn_set_id = $req->getParameter('set_id', pInteger)) {
             // batch export from set
             ca_data_exporters::exportRecordsFromSet($t_exporter->get('exporter_code'), $vn_set_id, $vs_file, array('request' => $req, 'progressCallback' => 'caIncrementBatchMetadataExportProgress'));
         } else {
             // batch export from search expression (deprecated)
             $vs_search = $req->getParameter('search', pString);
             ca_data_exporters::exportRecordsFromSearchExpression($t_exporter->get('exporter_code'), $vs_search, $vs_file, array('request' => $req, 'progressCallback' => 'caIncrementBatchMetadataExportProgress'));
         }
     }
     // export done, record it in session for later usage in download/destination action
     if (filesize($vs_file)) {
         $o_session = $req->getSession();
         $o_session->setVar('export_file', $vs_file);
         $o_session->setVar('export_content_type', $t_exporter->getContentType());
         $o_session->setVar('exporter_id', $t_exporter->getPrimaryKey());
         caExportAddDownloadLink($req);
     }
 }
Exemplo n.º 2
0
 protected function _genExportWithMapping($po_result, $pn_exporter_id)
 {
     // Can user batch export?
     if (!$this->request->user->canDoAction('can_batch_export_metadata')) {
         $this->response->setRedirect($this->request->config->get('error_display_url') . '/n/3440?r=' . urlencode($this->request->getFullUrlPath()));
         return;
     }
     // Can user export records of this type?
     if (!$this->request->user->canDoAction('can_export_' . $this->ops_tablename)) {
         $this->response->setRedirect($this->request->config->get('error_display_url') . '/n/3430?r=' . urlencode($this->request->getFullUrlPath()));
         return;
     }
     $t_exporter = new ca_data_exporters($pn_exporter_id);
     if (!($t_exporter->getPrimaryKey() > 0)) {
         $this->postError(3420, _t("Could not load export mapping"), "BaseFindController->_genExportWithMapping()");
         return;
     }
     if (substr(get_class($this), 0, 6) == 'Browse') {
         $vs_export_filename = Configuration::load()->get($this->ops_tablename . '_batch_export_filename');
     } else {
         $vs_export_filename = preg_replace("/[^\\p{L}\\p{N}\\-]/", '_', $this->opo_result_context->getSearchExpression());
         $vs_export_filename = preg_replace("/[\\_]+/", '_', $vs_export_filename);
     }
     $vs_tmp_file = tempnam(caGetTempDirPath(), 'export');
     ca_data_exporters::exportRecordsFromSearchResult($t_exporter->get('exporter_code'), $po_result, $vs_tmp_file);
     header('Content-Type: ' . $t_exporter->getContentType() . '; charset=UTF-8');
     header('Content-Disposition: attachment; filename="' . $vs_export_filename . '.' . $t_exporter->getFileExtension() . '"');
     header('Content-Transfer-Encoding: binary');
     readfile($vs_tmp_file);
     @unlink($vs_tmp_file);
     exit;
 }