1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/kanboard_ynh.git synced 2024-09-03 19:36:17 +02:00
kanboard_ynh/sources/app/Controller/FileViewerController.php
2016-07-23 14:11:39 +02:00

136 lines
3.6 KiB
PHP

<?php
namespace Kanboard\Controller;
use Kanboard\Core\ObjectStorage\ObjectStorageException;
/**
* File Viewer Controller
*
* @package Kanbaord\Controller
* @author Frederic Guillot
*/
class FileViewerController extends BaseController
{
/**
* Get file content from object storage
*
* @access private
* @param array $file
* @return string
*/
private 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;
}
/**
* Show file content in a popover
*
* @access public
*/
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),
)));
}
/**
* Display image
*
* @access public
*/
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());
}
}
}
/**
* Display image thumbnail
*
* @access public
*/
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/jpeg');
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());
// Try to generate thumbnail on the fly for images uploaded before Kanboard < 1.0.19
$data = $this->objectStorage->get($file['path']);
$this->$model->generateThumbnailFromData($file['path'], $data);
$this->objectStorage->output($this->$model->getThumbnailPath($file['path']));
}
}
}
/**
* File download
*
* @access public
*/
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());
}
}
}