fix serving presets
[mdref/mdref] / mdref / Action.php
index e35b3f5f43bf5f2b9d59141e8cbcb70835cf2011..19cf9106f363c9edb6e89e1b83a9cd6fa6aa5ac0 100644 (file)
@@ -38,6 +38,7 @@ class Action {
                $this->request = $req;
                $this->response = $res;
                $this->baseUrl = $baseUrl;
+               ob_start($res);
        }
 
        function esc($txt) {
@@ -72,6 +73,7 @@ class Action {
        private function serveCanonical($cnn) {
                $this->response->setHeader("Location", $this->baseUrl->mod(["path" => $cnn]));
                $this->response->setResponseCode(301);
+               $this->response->send();
        }
        
        /**
@@ -79,7 +81,8 @@ class Action {
         */
        private function serveStylesheet() {
                $this->response->setHeader("Content-Type", "text/css");
-               $this->esponse->setBody(new \http\Message\Body(fopen(ROOT."/public/index.css", "r")));
+               $this->response->setBody(new \http\Message\Body(fopen(ROOT."/public/index.css", "r")));
+               $this->response->send();
        }
        
        /**
@@ -88,11 +91,13 @@ class Action {
        private function serveJavascript() {
                $this->response->setHeader("Content-Type", "application/javascript");
                $this->response->setBody(new \http\Message\Body(fopen(ROOT."/public/index.js", "r")));
+               $this->response->send();
        }
        
        /**
         * Serve a preset
         * @param \stdClass $pld
+        * @return true to continue serving the payload
         * @throws Exception
         */
        private function servePreset($pld) {
@@ -101,21 +106,23 @@ class Action {
                case "LICENSE":
                case "VERSION":
                        $pld->text = file_get_contents(ROOT."/$pld->ref");
-                       break;
+                       return true;
                case "index.css":
-                       $this->serveStylesheet($ctl);
+                       $this->serveStylesheet();
                        break;
                case "index.js":
-                       $this->serveJavascript($ctl);
+                       $this->serveJavascript();
                        break;
                default:
                        throw new Exception(404, "$pld->ref not found");
                }
+               return false;
        }
 
        private function serve() {
                extract((array) func_get_arg(0));
                include ROOT."/views/layout.phtml";
+               $this->response->send();
        }
        
        public function handle() {
@@ -133,8 +140,8 @@ class Action {
                                                /* direct match */
                                                $pld->entry = $repo->getEntry($pld->ref);
                                        }
-                               } else {
-                                       return $this->servePreset($pld);
+                               } elseif (!$this->servePreset($pld)) {
+                                       return;
                                }
                        }