summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Controller/FileViewerController.php25
-rw-r--r--app/Helper/FileHelper.php19
-rw-r--r--app/Template/project_overview/files.php5
3 files changed, 49 insertions, 0 deletions
diff --git a/app/Controller/FileViewerController.php b/app/Controller/FileViewerController.php
index 518f5b0b..3e0182ba 100644
--- a/app/Controller/FileViewerController.php
+++ b/app/Controller/FileViewerController.php
@@ -83,6 +83,31 @@ class FileViewerController extends BaseController
}
/**
+ * Display file in browser
+ *
+ * @access public
+ */
+ 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());
+ }
+ }
+ }
+
+ /**
* Display image thumbnail
*
* @access public
diff --git a/app/Helper/FileHelper.php b/app/Helper/FileHelper.php
index cabf371c..82b444d0 100644
--- a/app/Helper/FileHelper.php
+++ b/app/Helper/FileHelper.php
@@ -106,4 +106,23 @@ class FileHelper extends Base
return null;
}
+
+ /**
+ * Return the browser view mimetype based on the file extension.
+ *
+ * @param $filename
+ *
+ * @return string
+ */
+ public function getBrowserViewType($filename)
+ {
+ $extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
+
+ switch ($extension) {
+ case 'pdf':
+ return 'application/pdf';
+ }
+
+ return null;
+ }
}
diff --git a/app/Template/project_overview/files.php b/app/Template/project_overview/files.php
index 826e6325..1326a7d1 100644
--- a/app/Template/project_overview/files.php
+++ b/app/Template/project_overview/files.php
@@ -18,6 +18,11 @@
<i class="fa fa-eye fa-fw"></i>
<?= $this->url->link(t('View file'), 'FileViewerController', 'show', array('project_id' => $project['id'], 'file_id' => $file['id']), false, 'popover') ?>
</li>
+ <?php elseif ($this->file->getBrowserViewType($file['name']) !== null): ?>
+ <li>
+ <i class="fa fa-eye fa-fw"></i>
+ <?= $this->url->link(t('View file'), 'FileViewerController', 'browser', array('project_id' => $project['id'], 'file_id' => $file['id']), false, '', '', true) ?>
+ </li>
<?php endif ?>
<li>
<i class="fa fa-download fa-fw"></i>