classes/bfw/mvc/view/View.php
changeset 0 4869aea77e21
new file mode 100644
--- /dev/null
+++ b/classes/bfw/mvc/view/View.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace bfw\mvc\view {
+
+    use bfw\mvc\controller\Controller;
+    use bfw\mvc\model\Model;
+    use bfw\mvc\model\TGroup;
+    use bfw\mvc\model\TStatus;
+    use bfw\mvc\model\TUser;
+
+    require_once 'library/smarty/libs/Smarty.class.php';
+
+    class View extends \Smarty {
+        /**
+         * @var Model
+         */
+        private $model;
+
+        /**
+         * @var Controller
+         */
+        private $controller;
+
+        /**
+         * Statische Referenz auf die reale Template Engine, hier Smarty
+         *
+         * @var Smarty
+         */
+        private static $tpl = null;
+
+        /**
+         * View constructor.
+         *
+         * @param Controller $controller
+         * @param Model $model
+         */
+        public function __construct(Controller $controller, Model $model) {
+            $this->controller = $controller;
+            $this->model = $model;
+
+            self::$tpl = self::getTemplateEngine();
+        }
+
+        /**
+         * <b>Liefert ein statisches Handle auf die aktuelle Template Engine zurück</b>
+         *
+         * Das Singleton Pattern garantiert genau eine Instanz der Template Engine im Speicher.
+         *
+         *  <b>Verschiedene Skripte können so nacheinander Variablen zuweisen und diese bei Bedarf auslesen</b>
+         *
+         * @return Smarty
+         */
+        private static function getTemplateEngine() {
+            if (self::$tpl == null) {
+                self::$tpl = new \Smarty();
+
+                $tpl = self::$tpl;
+
+                $tpl->setCompileDir('./data/templates_c/');
+                $tpl->setTemplateDir('./templates/');
+            }
+
+            return self::$tpl;
+        }
+
+        public function assign($key, $value) {
+            self::$tpl->assign($key, $value);
+        }
+
+        /**
+         * weisst automatisch eine user-instanz zu: Seiten-Effekte beachten
+         *
+         * TODO: Namensschema festlegen, damit dieser Effekt nicht auftritt
+         */
+        public function display() {
+            $tUser = new TUser();
+            $tGroup = new TGroup();
+            $tStatus = new TStatus();
+
+            $request = $this->controller->getRequest();
+
+            if ($request->getKey('isLoggedIn')) {
+                $tUser->find($request->getKey('user_id'));
+            }
+
+            $controller = $this->controller;
+
+            $response = $controller->getResponse();
+            $this->assign('response', $response);
+
+            $this->assign('tUser', $tUser);
+            $this->assign('tGroup', $tGroup);
+            $this->assign('tStatus', $tStatus);
+            $this->assign('request', $request);
+
+            try {
+                self::$tpl->display('layout.tpl');
+            } catch (SmartyException $se) {
+                $response->setStatusCode(404);
+
+                $page = 'error/error';
+                self::$tpl->assign('page', $page);
+
+                self::$tpl->display('layout.tpl');
+            }
+
+            // Msg wieder auf Null setzen...
+            $request->setKey('msg', '');
+
+            // Fehler wieder auf Null setzen...
+            $request->setKey('fehler', '');
+        }
+
+    }
+}