| <?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()); |
| } |
| } |
| } |
|
|