Avoid code duplication in PR #2891

This commit is contained in:
Frederic Guillot
2016-12-19 22:27:13 -05:00
parent eed51aef63
commit 07c44d2113
7 changed files with 60 additions and 50 deletions

View File

@@ -15,11 +15,11 @@ class FileViewerController extends BaseController
/**
* Get file content from object storage
*
* @access private
* @access protected
* @param array $file
* @return string
*/
private function getFileContent(array $file)
protected function getFileContent(array $file)
{
$content = '';
@@ -34,6 +34,30 @@ class FileViewerController extends BaseController
return $content;
}
/**
* Output file with cache
*
* @param array $file
* @param $mimetype
*/
protected function renderFileWithCache(array $file, $mimetype)
{
$etag = md5($file['path']);
if ($this->request->getHeader('If-None-Match') === '"'.$etag.'"') {
$this->response->status(304);
} else {
try {
$this->response->withContentType($mimetype);
$this->response->withCache(5 * 86400, $etag);
$this->response->send();
$this->objectStorage->output($file['path']);
} catch (ObjectStorageException $e) {
$this->logger->error($e->getMessage());
}
}
}
/**
* Show file content in a popover
*
@@ -65,21 +89,7 @@ class FileViewerController extends BaseController
public function image()
{
$file = $this->getFile();
$etag = md5($file['path']);
$this->response->withContentType($this->helper->file->getImageMimeType($file['name']));
$this->response->withCache(5 * 86400, $etag);
if ($this->request->getHeader('If-None-Match') === '"'.$etag.'"') {
$this->response->status(304);
} else {
try {
$this->response->send();
$this->objectStorage->output($file['path']);
} catch (ObjectStorageException $e) {
$this->logger->error($e->getMessage());
}
}
$this->renderFileWithCache($file, $this->helper->file->getImageMimeType($file['name']));
}
/**
@@ -90,21 +100,7 @@ class FileViewerController extends BaseController
public function browser()
{
$file = $this->getFile();
$etag = md5($file['path']);
$this->response->withContentType($this->helper->file->getBrowserViewType($file['name']));
$this->response->withCache(5 * 86400, $etag);
if ($this->request->getHeader('If-None-Match') === '"'.$etag.'"') {
$this->response->status(304);
} else {
try {
$this->response->send();
$this->objectStorage->output($file['path']);
} catch (ObjectStorageException $e) {
$this->logger->error($e->getMessage());
}
}
$this->renderFileWithCache($file, $this->helper->file->getBrowserViewType($file['name']));
}
/**