Merge branch 'saas-dev' into saas-showbuilder

This commit is contained in:
Duncan Sommerville 2015-07-15 18:54:55 -04:00
commit 8609934861
8 changed files with 23 additions and 20 deletions

View File

@ -42,12 +42,12 @@ class Amazon_S3StorageBackend extends StorageBackend
} }
/** Returns a signed download URL from Amazon S3, expiring in 60 minutes */ /** Returns a signed download URL from Amazon S3, expiring in 60 minutes */
public function getDownloadURLs($resourceId) public function getDownloadURLs($resourceId, $contentDispositionFilename)
{ {
$urls = array(); $urls = array();
$signedS3Url = $this->s3Client->getObjectUrl($this->getBucket(), $resourceId, '+60 minutes'); $s3args = array('ResponseContentDisposition' => 'attachment; filename="' . $contentDispositionFilename. '"');
$signedS3Url = $this->s3Client->getObjectUrl($this->getBucket(), $resourceId, '+60 minutes', $s3args);
//If we're using the proxy cache, we need to modify the request URL after it has //If we're using the proxy cache, we need to modify the request URL after it has
//been generated by the above. (The request signature must be for the amazonaws.com, //been generated by the above. (The request signature must be for the amazonaws.com,

View File

@ -13,7 +13,7 @@ class FileStorageBackend extends StorageBackend
return $resourceId; return $resourceId;
} }
public function getDownloadURLs($resourceId) public function getDownloadURLs($resourceId, $contentDispositionFilename)
{ {
return ""; return "";
} }

View File

@ -38,9 +38,9 @@ class ProxyStorageBackend extends StorageBackend
return $this->storageBackend->getAbsoluteFilePath($resourceId); return $this->storageBackend->getAbsoluteFilePath($resourceId);
} }
public function getDownloadURLs($resourceId) public function getDownloadURLs($resourceId, $contentDispositionFilename)
{ {
return $this->storageBackend->getDownloadURLs($resourceId); return $this->storageBackend->getDownloadURLs($resourceId, $contentDispositionFilename);
} }
public function deletePhysicalFile($resourceId) public function deletePhysicalFile($resourceId)

View File

@ -15,7 +15,7 @@ abstract class StorageBackend
/** Returns the file object's signed URL. The URL must be signed since they /** Returns the file object's signed URL. The URL must be signed since they
* privately stored on the storage backend. */ * privately stored on the storage backend. */
abstract public function getDownloadURLs($resourceId); abstract public function getDownloadURLs($resourceId, $contentDispositionFilename);
/** Deletes the file from the storage backend. */ /** Deletes the file from the storage backend. */
abstract public function deletePhysicalFile($resourceId); abstract public function deletePhysicalFile($resourceId);

View File

@ -107,8 +107,7 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm
)); ));
$third_party_api->setValue(Application_Model_Preference::GetAllow3rdPartyApi()); $third_party_api->setValue(Application_Model_Preference::GetAllow3rdPartyApi());
$third_party_api->setDescription(_('Enabling this feature will allow Airtime to provide schedule data $third_party_api->setDescription(_('Enabling this feature will allow Airtime to provide schedule data
to external widgets that can be embedded in your website. Enable this to external widgets that can be embedded in your website.'));
feature to reveal the embeddable code.'));
$third_party_api->setSeparator(' '); //No <br> between radio buttons $third_party_api->setSeparator(' '); //No <br> between radio buttons
//$third_party_api->addDecorator(new Zend_Form_Decorator_Label(array('tag' => 'dd', 'class' => 'radio-inline-list'))); //$third_party_api->addDecorator(new Zend_Form_Decorator_Label(array('tag' => 'dd', 'class' => 'radio-inline-list')));
$third_party_api->addDecorator('HtmlTag', array('tag' => 'dd', $third_party_api->addDecorator('HtmlTag', array('tag' => 'dd',

View File

@ -363,14 +363,6 @@ class CcFiles extends BaseCcFiles {
unset($response[$key]); unset($response[$key]);
} }
$mime = $file->getDbMime();
if (!empty($mime)) {
// Get an extension based on the file's mime type and change the path to use this extension
$path = pathinfo($file->getDbFilepath());
$ext = FileDataHelper::getFileExtensionFromMime($mime);
$response["filepath"] = ($path["dirname"] . '/' . $path["filename"] . $ext);
}
return $response; return $response;
} }
@ -385,8 +377,12 @@ class CcFiles extends BaseCcFiles {
public function getFilename() public function getFilename()
{ {
$info = pathinfo($this->getAbsoluteFilePath()); $info = pathinfo($this->getAbsoluteFilePath());
//filename doesn't contain the extension because PHP is awful //filename doesn't contain the extension because PHP is awful
return $info['filename'].".".$info['extension']; $mime = $this->getDbMime();
$extension = FileDataHelper::getFileExtensionFromMime($mime);
return $info['filename'] . $extension;
} }
/** /**

View File

@ -32,7 +32,7 @@ class CloudFile extends BaseCloudFile
if ($this->proxyStorageBackend == null) { if ($this->proxyStorageBackend == null) {
$this->proxyStorageBackend = new ProxyStorageBackend($this->getStorageBackend()); $this->proxyStorageBackend = new ProxyStorageBackend($this->getStorageBackend());
} }
return $this->proxyStorageBackend->getDownloadURLs($this->getResourceId()); return $this->proxyStorageBackend->getDownloadURLs($this->getResourceId(), $this->getFilename());
} }
/** /**
@ -49,7 +49,14 @@ class CloudFile extends BaseCloudFile
public function getFilename() public function getFilename()
{ {
return $this->getDbFilepath(); $filename = $this->getDbFilepath();
$info = pathinfo($filename);
//Add the correct file extension based on the MIME type, for files that were uploaded with the wrong extension.
$mime = $this->getDbMime();
$extension = FileDataHelper::getFileExtensionFromMime($mime);
return $info['filename'] . $extension;
} }
/** /**

View File

@ -62,6 +62,7 @@ class Application_Service_MediaService
if ($media->getPropelOrm()->isValidPhysicalFile()) { if ($media->getPropelOrm()->isValidPhysicalFile()) {
$filename = $media->getPropelOrm()->getFilename(); $filename = $media->getPropelOrm()->getFilename();
//Download user left clicks a track and selects Download. //Download user left clicks a track and selects Download.
if (!$inline) { if (!$inline) {
//We are using Content-Disposition to specify //We are using Content-Disposition to specify