From 2b696dbee5e59c1f0d2f980722493f86a8f05d67 Mon Sep 17 00:00:00 2001 From: drigato Date: Tue, 18 Mar 2014 13:04:06 -0400 Subject: [PATCH] CC-5741: Create a download action for the File API --- .../application/modules/rest/Bootstrap.php | 13 ++++++++++ .../rest/controllers/MediaController.php | 26 +++++++++++++++++++ .../rest/views/scripts/media/download.phtml | 0 3 files changed, 39 insertions(+) create mode 100644 airtime_mvc/application/modules/rest/views/scripts/media/download.phtml diff --git a/airtime_mvc/application/modules/rest/Bootstrap.php b/airtime_mvc/application/modules/rest/Bootstrap.php index 904d05e4c..e7017ba16 100644 --- a/airtime_mvc/application/modules/rest/Bootstrap.php +++ b/airtime_mvc/application/modules/rest/Bootstrap.php @@ -10,5 +10,18 @@ class Rest_Bootstrap extends Zend_Application_Module_Bootstrap $restRoute = new Zend_Rest_Route($front, array(), array( 'rest'=> array('media'))); assert($router->addRoute('rest', $restRoute)); + + $downloadRoute = new Zend_Controller_Router_Route( + 'rest/media/:id/download', + array( + 'controller' => 'media', + 'action' => 'download', + 'module' => 'rest' + ), + array( + 'id' => '\d+' + ) + ); + $router->addRoute('download', $downloadRoute); } } \ No newline at end of file diff --git a/airtime_mvc/application/modules/rest/controllers/MediaController.php b/airtime_mvc/application/modules/rest/controllers/MediaController.php index ae10c6792..7cd269c28 100644 --- a/airtime_mvc/application/modules/rest/controllers/MediaController.php +++ b/airtime_mvc/application/modules/rest/controllers/MediaController.php @@ -51,6 +51,32 @@ class Rest_MediaController extends Zend_Rest_Controller ->appendBody(json_encode(CcFilesQuery::create()->find()->toArray(BasePeer::TYPE_FIELDNAME))); */ } + + public function downloadAction() + { + if (!$this->verifyAuth(true, true)) + { + return; + } + + $id = $this->getId(); + if (!$id) { + return; + } + + $file = CcFilesQuery::create()->findPk($id); + if ($file) { + $con = Propel::getConnection(); + $storedFile = new Application_Model_StoredFile($file, $con); + $baseUrl = Application_Common_OsPath::getBaseDir(); + + $this->getResponse() + ->setHttpResponseCode(200) + ->appendBody($this->_redirect($storedFile->getRelativeFileUrl($baseUrl).'/download/true')); + } else { + $this->fileNotFoundResponse(); + } + } public function getAction() { diff --git a/airtime_mvc/application/modules/rest/views/scripts/media/download.phtml b/airtime_mvc/application/modules/rest/views/scripts/media/download.phtml new file mode 100644 index 000000000..e69de29bb