classes/bfw/core/View.php
author Markus Broeker<broeker.markus@googlemail.com>
Sun, 14 Feb 2016 22:24:29 +0100
changeset 45 a56e7f9a0463
parent 39 8b4f9c6136f4
permissions -rw-r--r--
Umstellung auf Composer
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
39
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
     1
<?php
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
     2
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
     3
/**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
     4
 * Copyright(C) 2015 Markus Bröker<broeker.markus@googlemail.com>
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
     5
 *
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
     6
 */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
     7
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
     8
namespace bfw\core;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
     9
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    10
use Smarty;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    11
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    12
/**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    13
 * Class View
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    14
 */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    15
class View {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    16
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    17
    /**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    18
     * Statische Referenz auf die reale Template Engine, hier Smarty
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    19
     *
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    20
     * @var Smarty
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    21
     */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    22
    private static $tpl = null;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    23
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    24
    /**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    25
     * @var Model
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    26
     */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    27
    private $model;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    28
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    29
    /**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    30
     * @var Controller
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    31
     */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    32
    private $controller;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    33
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    34
    /**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    35
     * View constructor.
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    36
     *
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    37
     * @param Controller $controller
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    38
     * @param Model $model
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    39
     */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    40
    public function __construct(Controller $controller, Model $model) {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    41
        $this->controller = $controller;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    42
        $this->model = $model;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    43
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    44
        self::$tpl = self::getTemplateEngine();
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    45
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    46
        $request = $controller->getRequest();
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    47
        $this->assign('controller', $request->get('controller', 'home'));
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    48
        $this->assign('action', $request->get('action', 'index'));
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    49
    }
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    50
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    51
    /**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    52
     * <b>Liefert ein statisches Handle auf die aktuelle Template Engine zurück</b>
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    53
     *
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    54
     * Das Singleton Pattern garantiert genau eine Instanz der Template Engine im Speicher.
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    55
     *
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    56
     *  <b>Verschiedene Skripte können so nacheinander Variablen zuweisen und diese bei Bedarf auslesen</b>
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    57
     *
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    58
     * @return Smarty
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    59
     */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    60
    private static function getTemplateEngine() {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    61
        if (self::$tpl == null) {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    62
            self::$tpl = new Smarty();
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    63
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    64
            $tpl = self::$tpl;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    65
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    66
            $tpl->setCompileDir('./data/templates_c/');
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    67
            $tpl->setTemplateDir('./classes/bfw/mvc/view/');
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    68
        }
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    69
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    70
        return self::$tpl;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    71
    }
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    72
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    73
    /**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    74
     * @param $template
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    75
     * @return string
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    76
     */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    77
    public function fetch($template) {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    78
        return self::$tpl->fetch($template);
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    79
    }
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    80
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    81
    /**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    82
     * <b>Anzeige der komplett gerenderten Seite mit dem Layout $layout</b>
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    83
     *
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    84
     * @param string $layout
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    85
     * @return int
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    86
     */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    87
    public function display($layout = 'layout.tpl') {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    88
        $request = $this->controller->getRequest();
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    89
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    90
        $controller = $this->controller;
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    91
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    92
        $response = $controller->getResponse();
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    93
        $this->assign('response', $response);
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    94
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    95
        $this->assign('request', $request);
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    96
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    97
        $model = $controller->getModel();
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    98
        $user = $model->getUser();
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
    99
        $group = $model->getGroup();
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   100
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   101
        if ($request->getKey('isLoggedIn')) {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   102
            $user->find($request->getKey('user_id'));
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   103
        }
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   104
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   105
        $this->assign('user', $user);
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   106
        $this->assign('group', $group);
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   107
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   108
        try {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   109
            self::$tpl->display($layout);
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   110
        } catch (SmartyException $se) {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   111
            $response->setStatusCode(404);
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   112
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   113
            self::$tpl->display('layout.tpl');
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   114
        }
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   115
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   116
        // Msg wieder auf Null setzen...
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   117
        $request->setKey('msg', '');
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   118
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   119
        // Fehler wieder auf Null setzen...
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   120
        $request->setKey('error', '');
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   121
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   122
        return http_response_code();
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   123
    }
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   124
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   125
    public function assign($key, $value) {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   126
        self::$tpl->assign($key, $value);
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   127
    }
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   128
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   129
    /**
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   130
     * @param string $key
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   131
     * @return string
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   132
     */
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   133
    public function get($key) {
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   134
        return self::$tpl->getTemplateVars($key);
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   135
    }
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   136
8b4f9c6136f4 Umstellung auf LF
Markus Broeker<broeker.markus@googlemail.com>
parents: 31
diff changeset
   137
}