refactoaaar
[mdref/mdref] / mdref / Action.php
1 <?php
2
3 namespace mdref;
4
5 use http\Controller\Observer;
6
7 class Action extends Observer
8 {
9 private function serveReference(\http\Controller $ctl) {
10 $payload = $ctl->getPayload();
11 $finder = new Finder($this->baseUrl, REFS);
12 $path = $finder->find(new \http\Url($ctl->getRequest()->getRequestUrl()));
13 $payload->listing = new RefListing($path,
14 $finder->glob($path, "/[_a-zA-Z]*.md"));
15 $payload->title = $payload->listing->getSelf()->formatLink();
16 $payload->refs = $finder;
17 if ($path->isFile()) {
18 $payload->html = new Markdown($path);
19 $payload->sublisting = new RefListing($path,
20 $finder->glob($path, "/[_a-z]*.md"));
21 return true;
22 }
23 }
24
25 private function serveInternal(\http\Controller $ctl) {
26 $payload = $ctl->getPayload();
27 $finder = new Finder($this->baseUrl, ROOT);
28 $url = new \http\Url($ctl->getRequest()->getRequestUrl());
29 $path = $finder->find($url, "");
30 if ($path->isFile("")) {
31 $payload->html = $path->toHtml();
32 } else if (strcmp($url, $this->baseUrl)) {
33 throw new \http\Controller\Exception(404, "Could not find '$path'");
34 }
35 }
36
37 function update(\SplSubject $ctl) {
38 /* @var \http\Controller $ctl */
39 try {
40 $ctl->getPayload()->baseUrl = $this->baseUrl;
41
42 if (!$this->serveReference($ctl)) {
43 $this->serveInternal($ctl);
44 }
45 } catch (\Exception $e) {
46 $ctl->getPayload()->exception = $e;
47 }
48 }
49 }