|
<?php |
|
|
|
namespace Kanboard\Controller; |
|
|
|
use Kanboard\Core\ObjectStorage\ObjectStorageException; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FileViewerController extends BaseController |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function getFileContent(array $file) |
|
{ |
|
$content = ''; |
|
|
|
try { |
|
if ($file['is_image'] == 0) { |
|
$content = $this->objectStorage->get($file['path']); |
|
} |
|
} catch (ObjectStorageException $e) { |
|
$this->logger->error($e->getMessage()); |
|
} |
|
|
|
return $content; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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()); |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function show() |
|
{ |
|
$file = $this->getFile(); |
|
$type = $this->helper->file->getPreviewType($file['name']); |
|
$params = array('file_id' => $file['id'], 'project_id' => $this->request->getIntegerParam('project_id')); |
|
|
|
if ($file['model'] === 'taskFileModel') { |
|
$params['task_id'] = $file['task_id']; |
|
} |
|
|
|
$this->response->html($this->template->render('file_viewer/show', array( |
|
'file' => $file, |
|
'params' => $params, |
|
'type' => $type, |
|
'content' => $this->getFileContent($file), |
|
))); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function image() |
|
{ |
|
$file = $this->getFile(); |
|
$this->renderFileWithCache($file, $this->helper->file->getImageMimeType($file['name'])); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function browser() |
|
{ |
|
$file = $this->getFile(); |
|
$this->renderFileWithCache($file, $this->helper->file->getBrowserViewType($file['name'])); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function thumbnail() |
|
{ |
|
$file = $this->getFile(); |
|
$model = $file['model']; |
|
$filename = $this->$model->getThumbnailPath($file['path']); |
|
$etag = md5($filename); |
|
|
|
$this->response->withCache(5 * 86400, $etag); |
|
$this->response->withContentType('image/png'); |
|
|
|
if ($this->request->getHeader('If-None-Match') === '"'.$etag.'"') { |
|
$this->response->status(304); |
|
} else { |
|
|
|
$this->response->send(); |
|
|
|
try { |
|
|
|
$this->objectStorage->output($filename); |
|
} catch (ObjectStorageException $e) { |
|
$this->logger->error($e->getMessage()); |
|
|
|
|
|
$data = $this->objectStorage->get($file['path']); |
|
$this->$model->generateThumbnailFromData($file['path'], $data); |
|
$this->objectStorage->output($this->$model->getThumbnailPath($file['path'])); |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function download() |
|
{ |
|
try { |
|
$file = $this->getFile(); |
|
$this->response->withFileDownload($file['name']); |
|
$this->response->send(); |
|
$this->objectStorage->output($file['path']); |
|
} catch (ObjectStorageException $e) { |
|
$this->logger->error($e->getMessage()); |
|
} |
|
} |
|
} |
|
|