5 use http\Controller\Observer
;
7 class Action
extends Observer
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"));
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'");
37 function update(\SplSubject
$ctl) {
38 /* @var \http\Controller $ctl */
40 $ctl->getPayload()->baseUrl
= $this->baseUrl
;
42 if (!$this->serveReference($ctl)) {
43 $this->serveInternal($ctl);
45 } catch (\Exception
$e) {
46 $ctl->getPayload()->exception
= $e;