summaryrefslogtreecommitdiff
path: root/app/Controller/Doc.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Controller/Doc.php')
-rw-r--r--app/Controller/Doc.php51
1 files changed, 51 insertions, 0 deletions
diff --git a/app/Controller/Doc.php b/app/Controller/Doc.php
new file mode 100644
index 00000000..19644b84
--- /dev/null
+++ b/app/Controller/Doc.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Controller;
+
+use Parsedown;
+
+/**
+ * Documentation controller
+ *
+ * @package controller
+ * @author Frederic Guillot
+ */
+class Doc extends Base
+{
+ private function readFile($filename)
+ {
+ $url = $this->helper->url;
+ $data = file_get_contents($filename);
+ list($title,, $content) = explode("\n", $data, 3);
+
+ $replaceUrl = function (array $matches) use ($url) {
+ return '('.$url->to('doc', 'show', array('file' => str_replace('.markdown', '', $matches[1]))).')';
+ };
+
+ $content = preg_replace_callback('/\((.*.markdown)\)/', $replaceUrl, $data);
+
+ return array(
+ 'content' => Parsedown::instance()->text($content),
+ 'title' => $title !== 'Documentation' ? t('Documentation: %s', $title) : $title,
+ );
+ }
+
+ public function show()
+ {
+ $filename = $this->request->getStringParam('file', 'index');
+
+ if (! preg_match('/^[a-z0-9\-]+/', $filename)) {
+ $filename = 'index';
+ }
+
+ $filename = __DIR__.'/../../doc/'.$filename.'.markdown';
+
+ if (! file_exists($filename)) {
+ $filename = __DIR__.'/../../doc/index.markdown';
+ }
+
+ $this->response->html($this->template->layout('doc/show', $this->readFile($filename) + array(
+ 'board_selector' => $this->projectPermission->getAllowedProjects($this->userSession->getId()),
+ )));
+ }
+}