/**
  * Return list of available data exporters
  *
  * @param int $pn_table_num
  * @param array $pa_options
  *		countOnly = return number of exporters available rather than a list of exporters
  *
  * @return mixed List of exporters, or integer count of exporters if countOnly option is set
  */
 public static function getExporters($pn_table_num = null, $pa_options = null)
 {
     $o_db = new Db();
     $t_exporter = new ca_data_exporters();
     $vo_dm = $t_exporter->getAppDatamodel();
     $va_sql_params = array();
     if ((int) $pn_table_num) {
         $va_sql_wheres[] = "(de.table_num = ?)";
         $va_sql_params[] = (int) $pn_table_num;
     }
     $vs_sql_wheres = sizeof($va_sql_wheres) ? " WHERE " . join(" AND ", $va_sql_wheres) : "";
     $qr_res = $o_db->query("\n\t\t\tSELECT *\n\t\t\tFROM ca_data_exporters de\n\t\t\t{$vs_sql_wheres}\n\t\t", $va_sql_params);
     $va_exporters = array();
     $va_ids = array();
     if (isset($pa_options['countOnly']) && $pa_options['countOnly']) {
         return (int) $qr_res->numRows();
     }
     while ($qr_res->nextRow()) {
         $va_row = $qr_res->getRow();
         $va_ids[] = $vn_id = $va_row['exporter_id'];
         $va_exporters[$vn_id] = $va_row;
         $t_instance = $vo_dm->getInstanceByTableNum($va_row['table_num'], true);
         $va_exporters[$vn_id]['exporter_type'] = $t_instance->getProperty('NAME_PLURAL');
         $va_exporters[$vn_id]['exporter_type_singular'] = $t_instance->getProperty('NAME_SINGULAR');
         $va_exporters[$vn_id]['settings'] = caUnserializeForDatabase($va_row['settings']);
         $va_exporters[$vn_id]['last_modified_on'] = $t_exporter->getLastChangeTimestamp($vn_id, array('timestampOnly' => true));
     }
     $va_labels = $t_exporter->getPreferredDisplayLabelsForIDs($va_ids);
     foreach ($va_labels as $vn_id => $vs_label) {
         $va_exporters[$vn_id]['label'] = $vs_label;
     }
     return $va_exporters;
 }
 /**
  * Prepare export generated by ExportData action
  */
 public function SetupBatchExport()
 {
     $o_conf = Configuration::load();
     $o_session = $this->getRequest()->getSession();
     if (!($vn_exporter_id = $o_session->getVar('exporter_id'))) {
         $this->getResponse()->setRedirect($this->getRequest()->config->get('error_display_url') . '/n/3420?r=' . urlencode($this->getRequest()->getFullUrlPath()));
         return;
     }
     $t_exporter = new ca_data_exporters($vn_exporter_id);
     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);
     // alternate destinations
     $va_alt_dest = $o_conf->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);
     // otherwise get from config file
     if (!$vs_filename) {
         if ($vs_filename = $o_conf->get($t_subject->tableName() . "_batch_export_filename")) {
             // config setting comes without file extension
             $vs_filename = $vs_filename . '.' . $t_exporter->getFileExtension();
         }
     }
     // still no filename? -> go for hardcoded default
     if (!$vs_filename) {
         $vs_filename = 'batch_export.' . $t_exporter->getFileExtension();
     }
     // pass to view
     $this->getView()->setVar('file_name', $vs_filename);
     $this->render('export/export_destination_html.php');
 }