AdSvS has uploaded a new change for review.
https://gerrit.wikimedia.org/r/201211
Change subject: Added Excel export format
......................................................................
Added Excel export format
Change-Id: I0b053d5ef0decbf0b3b70a5e50c8780a8eb06e41
---
M Cargo.php
M CargoQueryDisplayer.php
A formats/CargoExcelFormat.php
M i18n/en.json
M i18n/nl.json
M specials/CargoExport.php
6 files changed, 73 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Cargo
refs/changes/11/201211/1
diff --git a/Cargo.php b/Cargo.php
index 7f36145..73944e5 100644
--- a/Cargo.php
+++ b/Cargo.php
@@ -100,6 +100,7 @@
$wgAutoloadClasses['CargoTreeFormatTree'] = $dir .
'/formats/CargoTreeFormat.php';
$wgAutoloadClasses['CargoEmbeddedFormat'] = $dir .
'/formats/CargoEmbeddedFormat.php';
$wgAutoloadClasses['CargoCSVFormat'] = $dir . '/formats/CargoCSVFormat.php';
+$wgAutoloadClasses['CargoExcelFormat'] = $dir .
'/formats/CargoExcelFormat.php';
$wgAutoloadClasses['CargoJSONFormat'] = $dir . '/formats/CargoJSONFormat.php';
$wgAutoloadClasses['CargoTableFormat'] = $dir .
'/formats/CargoTableFormat.php';
$wgAutoloadClasses['CargoDynamicTableFormat'] = $dir .
'/formats/CargoDynamicTableFormat.php';
diff --git a/CargoQueryDisplayer.php b/CargoQueryDisplayer.php
index d5d5fa0..460dd8e 100644
--- a/CargoQueryDisplayer.php
+++ b/CargoQueryDisplayer.php
@@ -35,6 +35,7 @@
'template' => 'CargoTemplateFormat',
'embedded' => 'CargoEmbeddedFormat',
'csv' => 'CargoCSVFormat',
+ 'excel' => 'CargoExcelFormat',
'json' => 'CargoJSONFormat',
'outline' => 'CargoOutlineFormat',
'tree' => 'CargoTreeFormat',
diff --git a/formats/CargoExcelFormat.php b/formats/CargoExcelFormat.php
new file mode 100644
index 0000000..16064d3
--- /dev/null
+++ b/formats/CargoExcelFormat.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @author Yaron Koren
+ * @ingroup Cargo
+ */
+
+class CargoExcelFormat extends CargoDeferredFormat {
+
+ function allowedParameters() {
+ return array( 'filename' );
+ }
+
+ /**
+ *
+ * @param array $sqlQueries
+ * @param array $displayParams Unused
+ * @param array $querySpecificParams Unused
+ * @return string
+ */
+ function queryAndDisplay( $sqlQueries, $displayParams,
$querySpecificParams = null ) {
+ $ce = SpecialPage::getTitleFor( 'CargoExport' );
+ $queryParams = $this->sqlQueriesToQueryParams( $sqlQueries );
+ $queryParams['format'] = 'excel';
+ if ( array_key_exists( 'filename', $displayParams ) ) {
+ $queryParams['filename'] = $displayParams['filename'];
+ }
+ if ( array_key_exists( 'link text', $displayParams ) ) {
+ $linkText = $displayParams['link text'];
+ } else {
+ $linkText = wfMessage( 'results.xls' )->text();
+ }
+ $linkAttrs = array(
+ 'href' => $ce->getFullURL( $queryParams ),
+ );
+ $text = Html::rawElement( 'a', $linkAttrs, $linkText );
+
+ return $text;
+ }
+
+}
diff --git a/i18n/en.json b/i18n/en.json
index 308664e..b7c0fc8 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -38,6 +38,7 @@
"cargo-drilldown-novalues": "There are no values for this filter",
"cargo-drilldown-toomanyvalues": "Too many values; not displaying.",
"cargo-viewcsv": "View CSV",
+ "cargo-viewxls": "View XLS",
"cargo-viewjson": "View JSON",
"cargo-purgecache": "Purge cache",
"specialpages-group-cargo": "Cargo",
diff --git a/i18n/nl.json b/i18n/nl.json
index 8758974..5451e5b 100644
--- a/i18n/nl.json
+++ b/i18n/nl.json
@@ -9,5 +9,6 @@
"cargo-pagevalues-tablevalues": "\"$1\" waarden",
"cargo-drilldown-or": "of",
"cargo-viewcsv": "CSV bekijken",
+ "cargo-viewxls": "XLS bekijken",
"cargo-viewjson": "JSON bekijken"
}
diff --git a/specials/CargoExport.php b/specials/CargoExport.php
index 43aa0de..5356553 100644
--- a/specials/CargoExport.php
+++ b/specials/CargoExport.php
@@ -56,6 +56,12 @@
$filename = 'results.csv';
}
$this->displayCSVData( $sqlQueries, $delimiter,
$filename );
+ } elseif ( $format == 'excel' ) {
+ $filename = $req->getVal( 'filename' );
+ if ( $filename == '' ) {
+ $filename = 'results.xls';
+ }
+ $this->displayExcelData( $sqlQueries, $filename );
} elseif ( $format == 'json' ) {
$this->displayJSONData( $sqlQueries );
}
@@ -247,6 +253,29 @@
fclose( $out );
}
+ function displayExcelData( $sqlQueries, $filename ) {
+
+ // We'll only use the first query, if there's more than one.
+ $sqlQuery = $sqlQueries[0];
+ $queryResults = $sqlQuery->run();
+
+ $file = new PHPExcel();
+ $file->setActiveSheetIndex(0);
+
+ // Create array with header row and query results.
+ $header[] = array_keys( reset( $queryResults ) );
+ $rows = array_merge($header, $queryResults);
+
+ $file->getActiveSheet()->fromArray($rows, null, 'A1');
+ header("Content-Type:
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ header("Content-Disposition: attachment;filename=$filename");
+ header("Cache-Control: max-age=0");
+
+ $writer = PHPExcel_IOFactory::createWriter($file, 'Excel5');
+
+ $writer->save('php://output');
+ }
+
function displayJSONData( $sqlQueries ) {
header( "Content-Type: application/json" );
--
To view, visit https://gerrit.wikimedia.org/r/201211
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0b053d5ef0decbf0b3b70a5e50c8780a8eb06e41
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Cargo
Gerrit-Branch: master
Gerrit-Owner: AdSvS <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits