[fusion-commits] r2658 - trunk/widgets/Redline/classes
svn_fusion at osgeo.org
svn_fusion at osgeo.org
Fri Mar 8 04:33:01 PST 2013
Author: jng
Date: 2013-03-08 04:33:00 -0800 (Fri, 08 Mar 2013)
New Revision: 2658
Modified:
trunk/widgets/Redline/classes/markupmanager.php
Log:
#551: Add support for downloading SHP-based redlines. Due to the multi-part nature of SHP files (and the deceptive name!), we have to zip the contents of the SHP file up first before serving it out for download.
Modified: trunk/widgets/Redline/classes/markupmanager.php
===================================================================
--- trunk/widgets/Redline/classes/markupmanager.php 2013-03-08 11:49:35 UTC (rev 2657)
+++ trunk/widgets/Redline/classes/markupmanager.php 2013-03-08 12:33:00 UTC (rev 2658)
@@ -131,6 +131,8 @@
return ".sdf";
else if (strcmp("OSGeo.SQLite", $fdoProvider) == 0)
return ".sqlite";
+ else if (strcmp("OSGeo.SHP", $fdoProvider) == 0)
+ return ".zip"; //Need to zip up the SHP file and its associates
else
return "";
}
@@ -486,25 +488,76 @@
function DownloadMarkup()
{
$resourceService = $this->site->CreateService(MgServiceType::ResourceService);
+ $featureService = $this->site->CreateService(MgServiceType::FeatureService);
$markupLayerResId = new MgResourceIdentifier($this->args['MARKUPLAYER']);
$markupFsId = new MgResourceIdentifier($this->GetResourceIdPrefix() . $markupLayerResId->GetName() . '.FeatureSource');
- $dataName = $markupLayerResId->GetName().$this->GetFileExtension($markupLayerResId->ToString());
- $byteReader = $resourceService->GetResourceData($markupFsId, $dataName);
- $len = $byteReader->GetLength();
+ $extension = $this->GetFileExtension($markupLayerResId->ToString());
+ if (strcmp($extension, ".zip") == 0) {
+ $dataList = $resourceService->EnumerateResourceData($markupFsId);
+ $doc = DOMDocument::LoadXML($dataList->ToString());
+ $dataItems = $doc->getElementsByTagName("Name");
+ $tmpFiles = array();
+ //Copy out all data files to a temp location
+ for ($i = 0; $i < $dataItems->length; $i++) {
+ $dataName = $dataItems->item($i)->nodeValue;
+ $byteReader = $resourceService->GetResourceData($markupFsId, $dataName);
+ //Sink to temp file
+ $tmpSink = new MgByteSink($byteReader);
+ $fileName = tempnam(sys_get_temp_dir(), $dataName);
+ $tmpSink->ToFile($fileName);
+ $tmpFiles[$dataName] = $fileName;
+ }
+ //Zip them up.
+ $zipName = $markupLayerResId->GetName().$extension;
+ $zipPath = tempnam(sys_get_temp_dir(), $zipName);
+ $zip = new ZipArchive();
+ $zip->open($zipPath, ZIPARCHIVE::CREATE);
+ foreach ($tmpFiles as $dataName => $filePath) {
+ $zip->addFile($filePath, $dataName);
+ }
+ $zip->close();
- $outputBuffer = '';
- $buffer = '';
- while ($byteReader->Read($buffer, 50000) != 0)
- {
- $outputBuffer .= $buffer;
+ //Serve it up for download
+ $bs = new MgByteSource($zipPath);
+ $br = $bs->GetReader();
+
+ $len = $br->GetLength();
+
+ $outputBuffer = '';
+ $buffer = '';
+ while ($br->Read($buffer, 50000) != 0)
+ {
+ $outputBuffer .= $buffer;
+ }
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename=$zipName");
+ header("Content-Length: " . strlen($outputBuffer));
+ echo $outputBuffer;
+ //Let's be nice and clean up after ourselves
+ unlink($zipPath);
+ foreach ($tmpFiles as $dataName => $filePath) {
+ unlink($filePath);
+ }
+ } else { //Single file, make things easier!
+ $dataName = $markupLayerResId->GetName().$extension;
+ $byteReader = $resourceService->GetResourceData($markupFsId, $zipName);
+ $len = $byteReader->GetLength();
+
+ $outputBuffer = '';
+ $buffer = '';
+ while ($byteReader->Read($buffer, 50000) != 0)
+ {
+ $outputBuffer .= $buffer;
+ }
+
+ header("Content-Type: " . $byteReader->GetMimeType());
+ header("Content-Disposition: attachment; filename=$dataName");
+ header("Content-Length: " . strlen($outputBuffer));
+ echo $outputBuffer;
}
-
- header("Content-Type: " . $byteReader->GetMimeType());
- header("Content-Disposition: attachment; filename=$dataName");
- header("Content-Length: " . strlen($outputBuffer));
- echo $outputBuffer;
}
function GetProviderFromExtension($ext)
More information about the fusion-commits
mailing list