/** * Export a Trinity(alpha) user's vocab/sentence flashcards. * * Request parameters: * * mode 'vocab' to export the user's vocab flashcards * 'sentences' to export the user's sentence flashcards * * @date 2009-10-30 */ public function executeExportTrinity($request) { $exportMode = $this->getRequestParameter('mode'); if (!in_array($exportMode, array('vocab', 'sentences'))) { throw new coreException("error"); } $throttler = new RequestThrottler($this->getUser(), 'trinity.export'); if (!$throttler->isValid()) { return $this->renderPartial('misc/requestThrottleError'); } $db = $this->getContext()->getDatabase(); $csv = new ExportCSV($db); // We build the select here, Trinity is no longer supported, no need for extra peer classes. if ($exportMode === 'vocab') { $select = $db->select(array('compound', 'reading', 'glossary', 'itemid', 'dateadded', 'lastreview', 'leitnerbox', 'failurecount', 'successcount'))->from(array('r' => 'vocabreviews'))->join(array('d' => 'jdict'), 'r.itemid = d.dictid')->where('userid = ?', $this->getUser()->getUserId()); $csvText = $csv->export($select, array('compound', 'reading', 'definition', 'dictid', 'dateadded', 'lastreview', 'leitnerbox', 'failcount', 'passcount'), array('col_escape' => array(1, 1, 1, 0, 0, 0, 0, 0, 0), 'column_heads' => false)); $downloadName = 'trinity_vocab.csv'; } else { if ($exportMode === 'sentences') { $select = $db->select(array('question', 'answer', 'sn.spakid', 'sp.title', 'sn.lastedited', 'sn.dateadded', 'lastreview', 'leitnerbox', 'failurecount', 'successcount'))->from(array('sr' => 'sentencereviews'))->join(array('sn' => 'sentences'), 'sr.itemid = sn.sentenceid AND sr.userid = sn.userid')->join(array('sp' => 'sentencepacks'), 'sn.spakid = sp.spakid AND sn.userid = sp.userid')->where('sr.userid = ?', $this->getUser()->getUserId()); $csvText = $csv->export($select, array('question', 'answer', 'sp_id', 'sp_title', 'lastedited', 'dateadded', 'lastreview', 'leitnerbox', 'failcount', 'passcount'), array('col_escape' => array(1, 1, 0, 1, 0, 0, 0, 0, 0, 0), 'column_heads' => false)); $downloadName = 'trinity_sentences.csv'; } } $throttler->setTimeout(); $this->getResponse()->setFileAttachmentHeaders($downloadName); $this->setLayout(false); return $this->renderText($csvText); }
public function __construct($id_service, $filename = false) { $this->name = 'CSV'; $this->extension = 'csv'; parent::__construct($id_service, $filename); self::$_delimiter = trim(self::$_serviceData['delimiter']) == '' ? Configuration::get('EXPORTFREE_DELIMITER') : self::$_serviceData['delimiter']; self::$_enclosure = trim(self::$_serviceData['enclosure']) == '' ? Configuration::get('EXPORTFREE_ENCLOSURE') : self::$_serviceData['enclosure']; self::$_delimiter = ExportTools::delimiterByKeyWord(self::$_delimiter); self::$_enclosure = ExportTools::getEnclosureFromId(self::$_enclosure); }
static function types() { $type = array(); $details = ExportCSV::getType(); $type[$details['type']] = $details; $details = ExportDSML::getType(); $type[$details['type']] = $details; $details = ExportLDIF::getType(); $type[$details['type']] = $details; $details = ExportVCARD::getType(); $type[$details['type']] = $details; return $type; }
/** * Get content type for downloadable file */ public function getContentType() { // TODO: we may wanna auto-load this switch ($this->getSetting('exporter_format')) { case 'XML': $o_export = new ExportXML(); break; case 'MARC': $o_export = new ExportMARC(); break; case 'CSV': $o_export = new ExportCSV(); break; default: return; } return $o_export->getContentType($this->getSettings()); }
/** * Export user's stories to CSV. * * Note! 'col_escape' option must match the select from StoriesPeer::getSelectForExport() * */ public function executeExport($request) { $response = $this->getResponse(); $response->setContentType('text/plain; charset=utf-8'); $throttler = new RequestThrottler($this->getUser(), 'study.export'); if (!$throttler->isValid()) { // $response->setContentType('text/plain; charset=utf-8'); $response->setContentType('html'); return $this->renderPartial('misc/requestThrottleError'); } $csv = new ExportCSV($this->getContext()->getDatabase()); $select = StoriesPeer::getSelectForExport($this->getUser()->getUserId()); $csvText = $csv->export($select, array('framenum', 'kanji', 'keyword', 'public', 'last_edited', 'story'), array('col_escape' => array(0, 0, 1, 0, 0, 1))); $throttler->setTimeout(); $response->setHttpHeader('Cache-Control', 'no-cache, must-revalidate'); $response->setHttpHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT'); $response->setHttpHeader('Content-Disposition', 'attachment; filename="my_stories.csv"'); $this->setLayout(false); return $this->renderText($csvText); }
/** * Export a single record using the mapping defined by this exporter and return as string * @param string $ps_exporter_code defines the exporter to use * @param int $pn_record_id Primary key of the record to export. Record type is determined by the table_num field for this exporter. * @param array $pa_options * singleRecord = Gives a signal to the export format implementation that this is a single record export. For certain formats * this might trigger different behavior, for instance the XML export format prepends the item-level output with <?xml ... ?> * in those cases. * rdfMode = Signals the implementation that this is an RDF mode export * logDirectory = path to directory where logs should be written * logLevel = KLogger constant for minimum log level to record. Default is KLogger::INFO. Constants are, in descending order of shrillness: * KLogger::EMERG = Emergency messages (system is unusable) * KLogger::ALERT = Alert messages (action must be taken immediately) * KLogger::CRIT = Critical conditions * KLogger::ERR = Error conditions * KLogger::WARN = Warnings * KLogger::NOTICE = Notices (normal but significant conditions) * KLogger::INFO = Informational messages * KLogger::DEBUG = Debugging messages * logger = Optional ready-to-use instance of KLogger to use for logging/debugging * @return string Exported record as string */ public static function exportRecord($ps_exporter_code, $pn_record_id, $pa_options = array()) { // The variable cache is valid for the whole record export. // It's being modified in ca_data_exporters::processExporterItem // and then reset here if we move on to the next record. ca_data_exporters::$s_variables = array(); $o_log = caGetOption('logger', $pa_options); // only set up new logging facilities if no existing one has been passed down if (!$o_log || !$o_log instanceof KLogger) { $vs_log_dir = caGetOption('logDirectory', $pa_options); if (!file_exists($vs_log_dir) || !is_writable($vs_log_dir)) { $vs_log_dir = caGetTempDirPath(); } if (!($vn_log_level = caGetOption('logLevel', $pa_options))) { $vn_log_level = KLogger::INFO; } $o_log = new KLogger($vs_log_dir, $vn_log_level); } // make sure we pass logger to item processor $pa_options['logger'] = $o_log; ca_data_exporters::$s_instance_cache = array(); $t_exporter = ca_data_exporters::loadExporterByCode($ps_exporter_code); if (!$t_exporter) { $o_log->logError(_t("Failed to load exporter with code '%1' for item with ID %2", $ps_exporter_code, $pn_record_id)); return false; } $o_log->logInfo(_t("Successfully loaded exporter with code '%1' for item with ID %2", $ps_exporter_code, $pn_record_id)); $va_export = array(); foreach ($t_exporter->getTopLevelItems() as $va_item) { $va_export = array_merge($va_export, $t_exporter->processExporterItem($va_item['item_id'], $t_exporter->get('table_num'), $pn_record_id, $pa_options)); } $o_log->logInfo(_t("The export tree for exporter code '%1' and item with ID %2 is now ready to be processed by the export format (i.e. transformed to XML, for example).", $ps_exporter_code, $pn_record_id)); $o_log->logDebug(print_r($va_export, true)); // we may wanna auto-load this? switch ($t_exporter->getSetting('exporter_format')) { case 'XML': $o_export = new ExportXML(); break; case 'MARC': $o_export = new ExportMARC(); break; case 'CSV': $o_export = new ExportCSV(); break; default: return; } $o_export->setLogger($o_log); // if someone wants to mangle the whole tree ... well, go right ahead $o_manager = new ApplicationPluginManager(); $o_manager->hookExportRecord(array('exporter_instance' => $t_exporter, 'record_id' => $pn_record_id, 'export' => &$va_export)); $pa_options['settings'] = $t_exporter->getSettings(); $vs_wrap_before = $t_exporter->getSetting('wrap_before_record'); $vs_wrap_after = $t_exporter->getSetting('wrap_after_record'); if ($vs_wrap_before || $vs_wrap_after) { $pa_options['singleRecord'] = false; } $vs_export = $o_export->processExport($va_export, $pa_options); if (strlen($vs_wrap_before) > 0) { $vs_export = $vs_wrap_before . "\n" . $vs_export; } if (strlen($vs_wrap_after) > 0) { $vs_export = $vs_export . "\n" . $vs_wrap_after; } return $vs_export; }
public function executeExportflashcards() { $throttler = new RequestThrottler($this->getUser(), 'export'); if (!$throttler->isValid()) { return $this->renderPartial('misc/requestThrottleError'); } $csv = new ExportCSV($this->getContext()->getDatabase()); $select = ReviewsPeer::getSelectForExport($this->getUser()->getUserId()); $csvText = $csv->export($select, array('FrameNumber', 'Kanji', 'Keyword', 'LastReview', 'ExpireDate', 'LeitnerBox', 'FailCount', 'PassCount'), array('col_escape' => array(0, 1, 1, 0, 0, 0, 0, 0))); $throttler->setTimeout(); $this->getResponse()->setFileAttachmentHeaders('rtk_flashcards.csv'); $this->setLayout(false); return $this->renderText($csvText); }
/** * Export a single record using the mapping defined by this exporter and return as string * @param string $ps_exporter_code defines the exporter to use * @param int $pn_record_id Primary key of the record to export. Record type is determined by the table_num field for this exporter. * @param array $pa_options * singleRecord = Gives a signal to the export format implementation that this is a single record export. For certain formats * this might trigger different behavior, for instance the XML export format prepends the item-level output with <?xml ... ?> * in those cases. * @return string Exported record as string */ public static function exportRecord($ps_exporter_code, $pn_record_id, $pa_options = array()) { ca_data_exporters::$s_instance_cache = array(); $t_exporter = ca_data_exporters::loadExporterByCode($ps_exporter_code); if (!$t_exporter) { return false; } $va_export = array(); foreach ($t_exporter->getTopLevelItems() as $va_item) { $va_export = array_merge($va_export, $t_exporter->processExporterItem($va_item['item_id'], $t_exporter->get('table_num'), $pn_record_id, $pa_options)); } // TODO: we may wanna auto-load this switch ($t_exporter->getSetting('exporter_format')) { case 'XML': $o_export = new ExportXML(); break; case 'MARC': $o_export = new ExportMARC(); break; case 'CSV': $o_export = new ExportCSV(); break; default: return; } // if someone wants to mangle the whole tree ... well, go right ahead $o_manager = new ApplicationPluginManager(); //caDebug($va_export, "Export before tree plugin hook"); if (is_null($va_plugin_export = $o_manager->hookExportRecord(array('exporter_instance' => $t_exporter, 'record_id' => $pn_record_id, 'export' => $va_export)))) { return; // skip this record if plugin returns null } else { $va_export = $va_plugin_export['export']; } //caDebug($va_export,"Export after tree plugin hook"); $pa_options['settings'] = $t_exporter->getSettings(); return $o_export->processExport($va_export, $pa_options); }