# HG changeset patch # User Markus Bröker # Date 1447361958 -3600 # Node ID 56e0dbd5c243d763b01893b738e0a43c099e2b05 # Parent 4869aea77e21ede7724acc3334097197305a5c9b Aktualisierung des Frameworks * find, store und delete beziehen sich auf den aktuellen Datensatz * namespaces werden effizienter genutzt diff --git a/classes/bfw/Dispatcher.php b/classes/bfw/Dispatcher.php --- a/classes/bfw/Dispatcher.php +++ b/classes/bfw/Dispatcher.php @@ -1,81 +1,86 @@ + * + */ + +use bfw\mvc\common\Controller; +use bfw\mvc\common\View; +use ReflectionClass; + +class Dispatcher { + private $request; + + public function __construct() { + $this->request = new Request(); + } /** - * Copyright(C) 2015 Markus Bröker + * @param $url + */ + public static function route($url) { + header(sprintf("Location: %s", $url)); + exit(0); + } + + /** + * Standard Request Handler für das Projekt + * + * Diese Instanz kümmert sich selbständig um die GET- und POST Werte und + * speichert diese in der Session. + * + * Einfach zu nutzende Methoden(Schnittstelle zur Session) komplettieren diesen Handler + * + * @return Request + */ + public function getRequest() { + return $this->request; + } + + /** + * Führt den jeweiligen Controller aus und liefert ein View zurück * */ - - use bfw\mvc\controller\Controller as Controller; - use bfw\mvc\view\View as View; - - class Dispatcher { - private $request; - - public function __construct() { - $this->request = new Request(); - } + public function getView() { + $controllerName = $this->request->get('controller'); + $action = $this->request->get('action'); - /** - * Standard Request Handler für das Projekt - * - * Diese Instanz kümmert sich selbständig um die GET- und POST Werte und - * speichert diese in der Session. - * - * Einfach zu nutzende Methoden(Schnittstelle zur Session) komplettieren diesen Handler - * - * @return Request - */ - public function getRequest() { - return $this->request; + $this->request->keepRequestData(); + + if ($controllerName == '') { + $controllerName = 'home'; } - /** - * Führt den jeweiligen Controller aus und liefert ein View zurück - * - */ - public function getView() { - $page = $this->request->get('page'); - $this->request->keepRequestData(); - - if ($page == '') { - $page = 'home'; - } - - try { - $class = Controller::mapControllerName($page); - $args = Controller::getArgsForController($class); - - $reflection = new \ReflectionClass($class); - $controller = $reflection->newInstanceArgs($args); - - $prefix = str_replace('bfw\mvc\controller\\', '', strtolower($class)); - $controller->setPrefix(str_replace('controller', '', $prefix)); - - // Mapping vom GET-Parameter 'page' auf Controller::$page() - if ($reflection->hasMethod($page)) { - $controller->$page(); - } else { - $controller->index(); - } - } catch (Exception $e) { - $controller = new ErrorController(new TView('NON_EXISTENT'), $this->request); - } - - $view = new View($controller, $controller->getModel()); - $view->assign('page', sprintf('%s/%s', $controller->getPrefix(), $page)); - - return $view; + if ($action == '') { + $action = 'index'; } - /** - * @param $url - */ - public static function route($url) { - header(sprintf("Location: %s", $url)); - exit(0); + try { + $class = Controller::mapControllerName($controllerName); + + $reflection = new ReflectionClass($class); + $controller = $reflection->newInstance(); + + $prefix = str_replace('bfw\mvc\controller\\', '', strtolower($class)); + $controller->setPrefix(str_replace('controller', '', $prefix)); + + // Mapping vom GET-Parameter 'action' auf Controller::$action() + if ($reflection->hasMethod($action)) { + $controller->$action(); + } else { + $controller->index(); + } + } catch (Exception $e) { + $controller = new ErrorController(new TView('NON_EXISTENT'), $this->request); } + $view = new View($controller, $controller->getModel()); + $view->assign('action', sprintf('%s/%s', $controller->getPrefix(), $action)); + + return $view; } + } \ No newline at end of file diff --git a/classes/bfw/Request.php b/classes/bfw/Request.php --- a/classes/bfw/Request.php +++ b/classes/bfw/Request.php @@ -1,249 +1,249 @@ initSession(); + } /** - * Class Request + * Initialisiert die Session für das jeweilige Projekt + * + * */ - class Request { - private static $logger = null; - - public function __construct() { - self::$logger = \Logger::getLogger('__CLASS__'); - - $this->initSession(); - } - - /** - * Liefert die Basis-URL des jeweiligen Projekts - * - * @return string - */ - public static function getBaseUrl() { - return sprintf("%s://%s", - isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', - $_SERVER['SERVER_NAME'] + public function initSession() { + if (!isset($_SESSION['prefix'])) { + $_SESSION['prefix'] = array( + 'get' => array(), + 'session' => array(), + 'isLoggedIn' => false, + 'user_id' => TUser::SYSTEM, + 'group_id' => TGroup::GUEST, + 'fehler' => 'Tickets for Free!', + 'msg' => 'Tickets for Free!', + 'lastpage' => 'home', ); } + } - /** - * Liefert die komplette URL des jeweiligen Requests - * - * @return string - */ - public static function getUrl() { - return sprintf("%s%s", self::getBaseUrl(), $_SERVER['REQUEST_URI']); - } + /** + * Liefert die komplette URL des jeweiligen Requests + * + * @return string + */ + public static function getUrl() { + return sprintf("%s%s", self::getBaseUrl(), $_SERVER['REQUEST_URI']); + } - /** - * Keine Warnung, keine Gnade - */ - public function destroySession() { - unset($_SESSION['prefix']); - @session_destroy(); + /** + * Liefert die Basis-URL des jeweiligen Projekts + * + * @return string + */ + public static function getBaseUrl() { + return sprintf("%s://%s", + isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', + $_SERVER['SERVER_NAME'] + ); + } - $this->initSession(); + /** + * Liefert einen gefilterten 'session' Wert + * + * Hierbei handelt es sich um einen zuvor gespeicherten POST-Wert, + * der in ['prefix']['session'] geladet ist... + * + * @param $param + * @param string $default + * @return string + */ + public static function session($param, $default = '') { + if (isset($_SESSION['prefix']['session'][$param])) { + return $_SESSION['prefix']['session'][$param]; } - /** - * Initialisiert die Session für das jeweilige Projekt - * - * - */ - public function initSession() { - if (!isset($_SESSION['prefix'])) { - $_SESSION['prefix'] = array( - 'get' => array(), - 'session' => array(), - 'isLoggedIn' => false, - 'user_id' => TUser::SYSTEM, - 'group_id' => TGroup::GUEST, - 'fehler' => 'Tickets for Free!', - 'msg' => 'Tickets for Free!', - 'lastpage' => 'home', - ); - } + return $default; + } + + /** + * Liefert einen gefilterten 'get' Wert + * + * Hierbei handelt es sich um einen zuvor gespeicherten POST-Wert, + * der in ['prefix']['session'] geladet ist... + * + * @param $param + * @param string $default + * @return string + */ + public static function getParameter($param, $default = '') { + if (isset($_SESSION['prefix']['get'][$param])) { + return $_SESSION['prefix']['get'][$param]; } - /** - * Bei jedem Seitenaufruf werden die GET/Post Anfragen in der Session separiert gespeichert - * - * Struktur: - * GET Sachen ins 'get' array - * POST Sachen ins 'session' array - */ - public function keepRequestData() { - foreach ($_GET as $key => $value) { - $filteredKey = $this->filter($key); - $filteredValue = $this->filter($value); + return $default; + } - $_SESSION['prefix']['get'][$filteredKey] = $filteredValue; - } - - foreach ($_POST as $key => $value) { - $filteredKey = $this->filter($key); - $filteredValue = $this->filter($value); - - $_SESSION['prefix']['session'][$filteredKey] = $filteredValue; - } + /** + * Holt einen Session Wert aus dem jeweiligen Prefix + * + * @param $key + * @param string $default + * @param null $storage + * @return string + */ + public static function getKey($key, $default = '', $storage = null) { + if ($storage != null) { + return $_SESSION['prefix'][$storage][$key]; } - /** - * Statische Filtermethode für beliebige Strings/Array of Strings - * - * filter_input kann nur mit GET/POST umgehen, diese Methode mit Allem. - * - * @param string $param - * @return string|array - */ - public static function filter($param) { - if (is_array($param)) { - $filtered = array(); - foreach ($param as $key => $value) { - $filtered[self::filter($key)] = self::filter($value); - } - - return $filtered; - } - - return htmlspecialchars($param, ENT_QUOTES, 'utf-8'); - } - - /** - * Liefert einen gefilterten GET-Wert - * - * @param $param - * @return string - */ - public function get($param) { - return filter_input(INPUT_GET, $param); + if (isset($_SESSION['prefix'][$key])) { + return $_SESSION['prefix'][$key]; } - /** - * Liefert einen gefilterten POST-Wert - * - * @param $param - * @return mixed|string - */ - public function post($param) { - return filter_input(INPUT_POST, $param); - } + return $default; + } - /** - * Liefert einen gefilterten 'session' Wert - * - * Hierbei handelt es sich um einen zuvor gespeicherten POST-Wert, - * der in ['prefix']['session'] geladet ist... - * - * @param $param - * @param string $default - * @return string - */ - public static function session($param, $default = '') { - if (isset($_SESSION['prefix']['session'][$param])) { - return $_SESSION['prefix']['session'][$param]; - } + /** + * Löscht einen Get-Wert aus dem jeweiligen Prefix + * + * @param $key + */ + public static function deleteParameterKey($key) { + unset($_SESSION['prefix']['get'][$key]); + } - return $default; - } + /** + * Löscht einen Session Wert aus dem jeweiligen Prefix + * + * @param $key + */ + public static function deleteKey($key) { + unset($_SESSION['prefix'][$key]); + } - /** - * Liefert einen gefilterten 'get' Wert - * - * Hierbei handelt es sich um einen zuvor gespeicherten POST-Wert, - * der in ['prefix']['session'] geladet ist... - * - * @param $param - * @param string $default - * @return string - */ - public static function getParameter($param, $default = '') { - if (isset($_SESSION['prefix']['get'][$param])) { - return $_SESSION['prefix']['get'][$param]; - } + /** + * Prüft, ob der aktuelle Request einen POST enthält + * + * @return bool + */ + public static function hasPost() { + return (isset($_POST)); + } + + /** + * Keine Warnung, keine Gnade + */ + public function destroySession() { + unset($_SESSION['prefix']); + @session_destroy(); - return $default; - } + $this->initSession(); + } - /** - * Setzt einen neuen Session Wert ins jeweilige Prefix - * - * @param $key - * @param $value - */ - public function setKey($key, $value, $storage = null) { - if ($storage != null) { - $_SESSION['prefix'][$storage][self::filter($key)] = self::filter($value); - } else { - $_SESSION['prefix'][self::filter($key)] = self::filter($value); - } + /** + * Bei jedem Seitenaufruf werden die GET/Post Anfragen in der Session separiert gespeichert + * + * Struktur: + * GET Sachen ins 'get' array + * POST Sachen ins 'session' array + */ + public function keepRequestData() { + foreach ($_GET as $key => $value) { + $filteredKey = $this->filter($key); + $filteredValue = $this->filter($value); + + $_SESSION['prefix']['get'][$filteredKey] = $filteredValue; } - /** - * Holt einen Session Wert aus dem jeweiligen Prefix - * - * @param $key - * @param string $default - * @param null $storage - * @return string - */ - public static function getKey($key, $default = '', $storage = null) { - if ($storage != null) { - return $_SESSION['prefix'][$storage][$key]; + foreach ($_POST as $key => $value) { + $filteredKey = $this->filter($key); + $filteredValue = $this->filter($value); + + $_SESSION['prefix']['session'][$filteredKey] = $filteredValue; + } + } + + /** + * Statische Filtermethode für beliebige Strings/Array of Strings + * + * filter_input kann nur mit GET/POST umgehen, diese Methode mit Allem. + * + * @param string $param + * @return string|array + */ + public static function filter($param) { + if (is_array($param)) { + $filtered = array(); + foreach ($param as $key => $value) { + $filtered[self::filter($key)] = self::filter($value); } - if (isset($_SESSION['prefix'][$key])) { - return $_SESSION['prefix'][$key]; - } - - return $default; - } - - /** - * Löscht einen Get-Wert aus dem jeweiligen Prefix - * - * @param $key - */ - public static function deleteParameterKey($key) { - unset($_SESSION['prefix']['get'][$key]); + return $filtered; } - /** - * Löscht einen Session Wert aus dem jeweiligen Prefix - * - * @param $key - */ - public static function deleteKey($key) { - unset($_SESSION['prefix'][$key]); + return htmlspecialchars($param, ENT_QUOTES, 'utf-8'); + } + + /** + * Liefert einen gefilterten POST-Wert + * + * @param $param + * @return mixed|string + */ + public function post($param) { + return filter_input(INPUT_POST, $param); + } + + /** + * Setzt einen neuen Session Wert ins jeweilige Prefix + * + * @param $key + * @param $value + */ + public function setKey($key, $value, $storage = null) { + if ($storage != null) { + $_SESSION['prefix'][$storage][self::filter($key)] = self::filter($value); + } else { + $_SESSION['prefix'][self::filter($key)] = self::filter($value); } + } - /** - * Prüft, ob der aktuelle Request einen POST enthält - * - * @return bool - */ - public static function hasPost() { - return (isset($_POST)); + /** + * Interne Debug-Funktion zum Anzeigen der Session Struktur + * + * Beliebige URL mit ?debug=1 aufrufen und der Debug Mechanismus ist aktiviert. + * + * @return string + */ + public function printSession() { + self::$logger->info(sprintf('SESSION: %s', print_r($_SESSION['prefix'], true))); + + if ($this->get('debug') == '') { + return ''; } - /** - * Interne Debug-Funktion zum Anzeigen der Session Struktur - * - * Beliebige URL mit ?debug=1 aufrufen und der Debug Mechanismus ist aktiviert. - * - * @return string - */ - public function printSession() { - self::$logger->info(sprintf('SESSION: %s', print_r($_SESSION['prefix'], true))); + return "
" . print_r($_SESSION['prefix'], true) . "
"; + } - if ($this->get('debug') == '') { - return ''; - } - - return "
" . print_r($_SESSION['prefix'], true) . "
"; - } + /** + * Liefert einen gefilterten GET-Wert + * + * @param $param + * @return string + */ + public function get($param) { + return filter_input(INPUT_GET, $param); } } \ No newline at end of file diff --git a/classes/bfw/Response.php b/classes/bfw/Response.php --- a/classes/bfw/Response.php +++ b/classes/bfw/Response.php @@ -1,43 +1,42 @@ headers = headers_list(); + $this->statusCode = http_response_code(); + } + + public function getHeaders() { + return $this->headers; + } + + public function getStatusCode() { + return $this->statusCode; + } + + public function setStatusCode($statusCode) { + $this->statusCode = $statusCode; + + return $this; + } + /** - * Response Headers sind kompliziert - * + * @return string */ - class Response { - private $headers; - private $statusCode; - - public function __construct() { - $this->headers = headers_list(); - $this->statusCode = http_response_code(); - } - - public function getHeaders() { - return $this->headers; + public function get($key) { + if (array_key_exists($key, $this->headers)) { + return $this->headers[$key]; } - public function setStatusCode($statusCode) { - $this->statusCode = $statusCode; - - return $this; - } - - public function getStatusCode() { - return $this->statusCode; - } + return ''; + } - /** - * @return string - */ - public function get($key) { - if (array_key_exists($key, $this->headers)) { - return $this->headers[$key]; - } - - return ''; - } - - } } \ No newline at end of file diff --git a/classes/bfw/DBInterface.php b/classes/bfw/database/DBInterface.php rename from classes/bfw/DBInterface.php rename to classes/bfw/database/DBInterface.php --- a/classes/bfw/DBInterface.php +++ b/classes/bfw/database/DBInterface.php @@ -1,33 +1,33 @@ + * + */ +class Database implements DBInterface { + private static $logger = null; + private static $handle = null; /** - * Copyright(C) 2015 Markus Bröker - * + * @var PDO */ - class Database implements DBInterface { - private static $logger = null; + private $pdo; - private $link; - private static $handle = null; + private function __construct() { + self::$logger = Logger::getLogger('__CLASS__'); - private function __construct() { - self::$logger = \Logger::getLogger('__CLASS__'); - - $this->link = mysqli_connect($host = 'localhost', $user = 'ticketsystem', $password = 'ticketsystem', $database = 'ticketsystem'); - mysqli_set_charset($this->link, 'utf8'); - } + $dsn = 'mysql:host=localhost;dbname=ticketsystem'; + $config = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); + $this->pdo = new PDO($dsn, 'ticketsystem', 'ticketsystem', $config); + } - /** - * Liefert das Singleton-Pattern der Datenbank-Schicht - * - * Es existiert in einem Lauf, einem Scope, immer nur ein DB-Handle zur gleichen Zeit. - * - * Damit das ganze vernünftig flutscht, muss man natürlich berücksichtigen, dass ein SP state-lastig ist! - * - * Definition des States: Ein Abfrageergebnis stellt solange den State des SP da, bis eine neue Abfrage - * einen neuen State erzeugt. - * - * @return Database|null - */ - public static function getInstance() { - if (self::$handle == null) { - self::$handle = new Database(); - } - - return self::$handle; + /** + * Liefert das Singleton-Pattern der Datenbank-Schicht + * + * Es existiert in einem Lauf, einem Scope, immer nur ein DB-Handle zur gleichen Zeit. + * + * Damit das ganze vernünftig flutscht, muss man natürlich berücksichtigen, dass ein SP state-lastig ist! + * + * Definition des States: Ein Abfrageergebnis stellt solange den State des SP da, bis eine neue Abfrage + * einen neuen State erzeugt. + * + * @return Database + */ + public static function getInstance() { + if (self::$handle == null) { + self::$handle = new Database(); } - /** - * Std-Abfrage Methode der DB-Klasse - * - * Das übergebene SQL-Statement wird als assoziatives, ein-oder mehrdimensionales Array zurück geliefert. - * - * array = ( - * 'id' => 1, - * 'name' => 'Ticket', - * ); - * - * @param $sql - * @return array|null - */ - public function query($sql) { - self::$logger->info(sprintf('%s(%s) ', __METHOD__, $sql)); + return self::$handle; + } - $result = mysqli_query($this->link, $sql); - - if ($result == false) { - return null; - } - - if ($result->num_rows == 0) { - return null; - } - - $rows = array(); - while (($row = $result->fetch_assoc())) { - $rows[] = $row; - } - - - return $rows; + /** + * Diese Methode löscht alle Tickets, History und Benutzer weg + * + * Diese Methode sollte dann aufgerufen werden, wenn die Anwendung deployed wird + * + * Auf Deutsch: "Vor der Präsi alles weglöschen." + * + * @return bool + */ + public function cleanup() { + try { + $status = $this->pdo->exec("DELETE FROM `t_ticket` WHERE `id` > 1;"); + $status = $this->pdo->exec("DELETE FROM `t_history` WHERE `id` > 1;"); + $status = $this->pdo->exec("DELETE FROM `t_user` WHERE `id` > 2;"); + $status = $this->pdo->exec("ALTER TABLE `t_history` AUTO_INCREMENT = 1;"); + $status = $this->pdo->exec("ALTER TABLE `t_ticket` AUTO_INCREMENT = 1;"); + $status = $this->pdo->exec("ALTER TABLE `t_user` AUTO_INCREMENT = 2;"); + } catch (PDOException $pdoe) { + return false; } - /** - * Abfragen, die kein ResultSet zurück liefern - * - * SQL-Statements, die nur TRUE oder FALSE zurück liefern, - * müssen per EXECUTE ausgeführt werden. - * - * @param $sql - * @return bool|mysqli_result - */ - public function execute($sql) { - self::$logger->info(sprintf('%s(%s) ', __METHOD__, $sql)); + return true; + } - $result = mysqli_query($this->link, $sql); + /** + * + * @param string $table + * @param array $fields + * @param string $filename + * @param string $seperator + * + * @throws InvalidArgumentException + */ + public function csvExport($table, $fields, $filename, $seperator = ';') { + $handle = fopen($filename, "w+"); - return $result; + if ($handle == FALSE) { + throw new InvalidArgumentException("Datei nicht gefunden: " . $filename); } - /** - * Die einfache Fetch-Methode für das Table-Row-Pattern - * - * Es wird ein SQL Statement bezogen auf die aktuelle Tabelle zusammen - * gebaut. Dieses kann optional eine WHERE clause beinhalten. - * - * @param $table - * @param string $cond - * @return array|null - */ - public function fetch($table, $cond = 'id > 1') { - self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $table, $cond)); + $rows = $this->fetchAll(sprintf("SELECT %s FROM `%s` ORDER BY `id`", implode(", ", $fields), $table)); + + fwrite($handle, sprintf("%s\n", implode($seperator, $fields))); + foreach ($rows as $row) { + fwrite($handle, sprintf("%s\n", implode($seperator, $row))); + } + + fclose($handle); + } - $sql = " + public function fetchAll($table, $cond) { + return $this->fetch($table, $cond); + } + + /** + * @param $table + * @param $cond + * @return array|null + */ + public function fetch($table, $cond) { + $stmt = $this->pdo->prepare(sprintf(' SELECT * FROM - $table - WHERE - $cond - "; - - $result = mysqli_query($this->link, $sql); - - if ($result == false) { - return null; - } - - return $result->fetch_assoc(); - } - - /** - * Die multiple Fetch-Methode für das Table-Row-Pattern - * - * Der Rückgabewert ist ein Array mit allen Zeilen als assoziatives Array - * - * @param $table - * @param string $cond - * @return array|null - */ - public function fetchAll($table, $cond = 'id > 0') { - self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $table, $cond)); - - $sql = sprintf(" - SELECT - * - FROM `%s` WHERE %s - ", $table, $cond); + ', $table, $cond + )); + + if ($stmt->execute()) { + return $stmt->fetch(); + } + + return null; + } - return $this->query($sql); + /** + * + * @param string $table + * @param string $filename + * @param string $seperator + * + * @throws InvalidArgumentException + */ + public function csvImport($table, $filename, $seperator = ';') { + $handle = fopen($filename, "r"); + + if ($handle == FALSE) { + throw new InvalidArgumentException("Datei nicht gefunden: " . $filename); } - /** - * Die einfache Find-Methode für das Table-Row-Pattern - * - * Der Rückgabewert ist entweder die Tabellenzeile 'id' oder null - * im assoziativen Array. - * - * @param $table - * @param $id - * @return array|null - */ - public function find($table, $id) { - self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $table, $id)); + $firstLine = trim(fgets($handle, 1024)); + $firstExplodedLine = explode($seperator, $firstLine); + $firstImplodedLine = implode(", ", $firstExplodedLine); - $sql = sprintf(" - SELECT - * - FROM - `%s` - WHERE - `id` = %d - ", $table, $id); - - $result = mysqli_query($this->link, $sql); - - if ($result == false) { - return null; + while (($line = fgets($handle, 1024)) != NULL) { + $explodedLine = explode($seperator, trim($line)); + $row = array(); + foreach ($explodedLine as $explodedField) { + $row[] = "'$explodedField'"; } - return $result->fetch_assoc(); + $implodedLine = implode(", ", $row); + $this->pdo->exec(sprintf("INSERT INTO %s(id, %s) VALUES(NULL, %s);\n", $table, $firstImplodedLine, $implodedLine)); } - /** - * Die multiple Find-Methode für das Table-Row-Pattern - * - * Es liefert alle Reihen als assoziatives Array zurück. - * - * @param $table - * @return array|null - */ - public function findAll($table, $sys_id = 1) { - self::$logger->info(sprintf('%s(%s) ', __METHOD__, $table)); + fclose($handle); + } - $sql = sprintf(" - SELECT - * - FROM - `%s` - WHERE - `id` > %d - ", $table, $sys_id); + public function find($table, $id) { + $stmt = $this->pdo->prepare( + sprintf(' + SELECT + * + FROM + `%s` + WHERE + `id` = :id + ', $table + )); - return $this->query($sql); + $stmt->bindParam(':id', $id); + + $status = $stmt->execute(); + if ($status) { + return $stmt->fetch(PDO::FETCH_ASSOC); } - /** - * Liefert ein Resultset bezogen auf ein bestimmtes Feld zurück - * - * @param $table - * @param $field - * @param $value - * @return array|null - */ - public function findByField($table, $field, $value) { - self::$logger->info(sprintf('%s(%s, %s, %s) ', __METHOD__, $table, $field, $value)); + return null; + } + + public function findAll($table, $sys) { + $stmt = $this->pdo->prepare( + sprintf(' + SELECT + * + FROM + `%s` + WHERE + `id` > :id + ', $table + )); + + $id = ($sys ? 0 : 1); + $stmt->bindParam(':id', $id); - $sql = sprintf(" - SELECT - * - FROM - `%s` - WHERE - `%s` = '%s' - ", $table, $field, $value); + if ($stmt->execute()) { + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } + + return null; + } - $result = mysqli_query($this->link, $sql); + public function findByField($table, $field, $value) { + $stmt = $this->pdo->prepare( + sprintf(' + SELECT + * + FROM + `%s` + WHERE + `%s` = :value + ', $table, $field + )); - if ($result == false) { - return null; - } + $stmt->bindParam(':value', $value); - return $result->fetch_assoc(); + if ($stmt->execute()) { + return $stmt->fetch(PDO::FETCH_ASSOC); } - /** - * Liefert mehrere Resultsets bezogen auf ein bestimmtes Feld zurück - * - * @param $table - * @param $field - * @param $value - * @return array|null - */ - public function findAllByField($table, $field, $value) { - self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $table, $field)); + return null; + } - $sql = sprintf(" - SELECT - * - FROM - `%s` - WHERE - `%s` = '%s' - ", $table, $field, $value); + function findAllByField($table, $field, $value) { + $stmt = $this->pdo->prepare( + sprintf(' + SELECT + * + FROM + `%s` + WHERE + `%s` = :value + ', $table, $field + )); - return $this->query($sql); + $stmt->bindParam(':value', $value); + + if ($stmt->execute()) { + return $stmt->fetchAll(PDO::FETCH_ASSOC); } - /** - * Die Standard Persist Methode erstellt einen neuen DB-Eintrag in der angegebenen Tabelle - * - * @param $table - * @param $array - * @return bool|mysqli_result - */ - public function persist($table, $array) { - self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $table, print_r($array, true))); + return null; + } + + public function query($sql) { + $stmt = $this->pdo->query($sql); + + if ($stmt) { + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } + + return null; + } + + public function persist($table, $array) { + self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $table, print_r($array, true))); - $keys = array(); - foreach (array_keys($array) as $key) { - if ($key != 'id') { - $keys[] = sprintf("`%s`", $key); - } + $keys = array(); + foreach (array_keys($array) as $key) { + if ($key != 'id') { + $keys[] = sprintf("`%s`", $key); } + } - $fieldList = implode(", ", $keys); + $fieldList = implode(", ", $keys); - $values = array(); - foreach ($array as $key => $value) { - if ($key != 'id') { - $values[] = sprintf("'%s'", $value); - } + $values = array(); + foreach ($array as $key => $value) { + if ($key != 'id') { + $values[] = sprintf("'%s'", $value); } + } - $fields = implode(",", $values); + $fields = implode(",", $values); - $sql = sprintf(" + $sql = sprintf(" INSERT INTO `%s` (`id`, %s) VALUES (NULL, %s) ", $table, $fieldList, $fields); - return $this->execute($sql); + return $this->pdo->exec($sql); + } + + public function store($table, $id, $array) { + self::$logger->info(sprintf('%s(%s, %d, %s) ', __METHOD__, $table, $id, print_r($array, true))); + + $list = array(); + foreach ($array as $key => $value) { + if ($key != 'id') { + $list[] = sprintf("`%s` = '%s'", $key, $value); + } } - /** - * Die Standard store Methode aktualisiert einen DB-Eintrag in der angegebenen Tabelle - * - * @param $table - * @param $id - * @param $array - * @return bool - */ - public function store($table, $id, $array) { - self::$logger->info(sprintf('%s(%s, %d, %s) ', __METHOD__, $table, $id, print_r($array, true))); + $listItems = implode(", ", $list); - $list = array(); - foreach ($array as $key => $value) { - if ($key != 'id') { - $list[] = sprintf("`%s` = '%s'", $key, $value); - } - } - - $listItems = implode(", ", $list); - - $sql = sprintf(" + $sql = sprintf(" UPDATE `%s` SET %s WHERE `id` = %d ", $table, $listItems, $id); - - return $this->execute($sql); - } + return $this->pdo->exec($sql); + } - /** - * Die Standard Delete Methode löscht einen bestehenden DB-Eintrag aus der angegebenen Tabelle - * - * @param $table - * @param $id - * @return bool - */ - public function delete($table, $id) { - self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $table, $id)); + public function delete($table, $id) { + self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $table, $id)); - $sql = sprintf(" + $sql = sprintf(" DELETE FROM `%s` WHERE `id` = %d; ", $table, $id); - return $this->execute($sql); - } - - /** - * Liefert die letzte, verwendete ID, die eingefügt wurde. - * - * Es gilt zu beachten, dass es sich hierbei um eine state-behaftete Methode handelt. - * - * Nach 3 Inserts liefert diese Methode definitiv nur den PK des letzten INSERTS. - * - * @return int|string - */ - public function getLastInsertedId() { - $lastInsertedId = mysqli_insert_id($this->link); - - self::$logger->info(sprintf('%s(): %d', __METHOD__, $lastInsertedId)); - - return $lastInsertedId; - } - - /** - * Diese Methode löscht alle Tickets, History und Benutzer weg - * - * Diese Methode sollte dann aufgerufen werden, wenn die Anwendung deployed wird - * - * Auf Deutsch: "Vor der Präsi alles weglöschen." - * - * @return bool - */ - public function cleanup() { - $status = $this->execute("DELETE FROM `t_ticket` WHERE `id` > 1;"); - $status &= $this->execute("DELETE FROM `t_history` WHERE `id` > 1;"); - $status &= $this->execute("DELETE FROM `t_user` WHERE `id` > 2;"); - - $status &= $this->execute("ALTER TABLE `t_history` AUTO_INCREMENT = 1;"); - $status &= $this->execute("ALTER TABLE `t_ticket` AUTO_INCREMENT = 1;"); - $status &= $this->execute("ALTER TABLE `t_user` AUTO_INCREMENT = 2;"); - - return $status; - } + return $this->pdo->exec($sql); + } - /** - * Import von Datensätzen im CSV-Format(besser gesagt SSV-Format) - * - * Die Tabelle 'table' wird automatisiert mit den Werten aus der SSV-Datei befüllt. - * - * @param $table - * @param $filename - * @return bool - */ - public function csvImport($table, $filename) { - $db = Database::getInstance(); - - $handle = fopen($filename, 'r'); - - $lines = array(); - while (!feof($handle)) { - $lines[] = trim(fgets($handle), "[\r\n\t]"); - } - - fclose($handle); - - if (count($lines) < 2) { - return false; - } - - $spaltenKoepfeArray = explode(';', $lines[0]); - for ($i = 0; $i < count($spaltenKoepfeArray); $i++) { - $spaltenKoepfeArray[$i] = sprintf("`%s`", $spaltenKoepfeArray[$i]); - } - - $spaltenInhaltArray = array(); - for ($i = 1; $i < count($lines); $i++) { - $spaltenInhaltArray[] = explode(';', $lines[$i]); - } - - $spaltenKoepfe = implode(', ', $spaltenKoepfeArray); - - foreach ($spaltenInhaltArray as $sia) { - for ($i = 0; $i < count($sia); $i++) { - - if ($spaltenKoepfeArray[$i] == '`last_access`') { - $sia[$i] = sprintf("'%s'", date("Y-m-d H:i:s")); - } else { - $sia[$i] = sprintf("'%s'", $sia[$i]); - } - } - - $spaltenInhalt = implode(', ', $sia); - if (count($spaltenKoepfeArray) == count($sia)) { - $sql = sprintf("INSERT INTO %s(id, %s) VALUES(NULL, %s);", $table, $spaltenKoepfe, $spaltenInhalt); - if (!$db->execute($sql)) { - - return false; - } - } - } - - return true; - } - + public function getLastInsertedId() { + return $this->pdo->lastInsertId(); } } \ No newline at end of file diff --git a/classes/bfw/mvc/controller/Controller.php b/classes/bfw/mvc/common/Controller.php rename from classes/bfw/mvc/controller/Controller.php rename to classes/bfw/mvc/common/Controller.php --- a/classes/bfw/mvc/controller/Controller.php +++ b/classes/bfw/mvc/common/Controller.php @@ -1,186 +1,135 @@ + * + */ + +use bfw\Request; +use bfw\Response; + +/** + * + */ +abstract class Controller { + /** + * @var Model + */ + private $model; + + /** + * @var Request + */ + private $request; + + /** + * @var Response + */ + private $response; + + /** + * @var View + */ + private $view; + + /** + * @var + */ + private $prefix; + + /** + * Controller constructor. + * + * @param Model $model + * @param Request $request + */ + public function __construct(Model $model) { + $this->request = new Request(); + $this->response = new Response(); + + $this->model = $model; + $this->view = new View($this, $model); + + $this->prefix = ''; + } /** - * Copyright(C) 2015 Markus Bröker - * + * @param $controller + * @return string */ + public static function mapControllerName($controller) { + return sprintf('bfw\mvc\controller\%sController', ucfirst($controller)); + } + + public function getView() { + return $this->view; + } + + public function setView($view) { + $this->view = $view; + + return $this; + } + + public function getResponse() { + return $this->response; + } + + public function setResponse($response) { + $this->response = $response; + + return $this; + } + + /** + * @return Model + */ + public function getModel() { + return $this->model; + } - use bfw\mvc\model\Model; - use bfw\mvc\model\THistory; - use bfw\mvc\model\TTicket; - use bfw\mvc\model\TUser; - use bfw\mvc\view\View; - use bfw\Request; - use bfw\Response; + /** + * @param $model + * @return $this + */ + public function setModel($model) { + $this->model = $model; + + return $this; + } + + /** + * @return Request + */ + public function getRequest() { + return $this->request; + } - interface ActionInterface { - public function index(); + /** + * @return string + */ + public function getPage() { + if ($this->getPrefix() != '') { + return sprintf('%s/%s', $this->prefix, $this->request->get('action')); + } + + return $this->request->get('action'); + } + + public function getPrefix() { + return $this->prefix; + } + + public function setPrefix($prefix) { + $this->prefix = $prefix; + + return $this; } /** * */ - abstract class Controller implements ActionInterface { - /** - * @var Model - */ - private $model; - - /** - * @var Request - */ - private $request; - - /** - * @var Response - */ - private $response; - - /** - * @var View - */ - private $view; - - /** - * @var - */ - private $prefix; - - /** - * Controller constructor. - * - * @param Model $model - * @param Request $request - */ - public function __construct(Model $model, Request $request) { - $this->request = $request; - $this->response = new Response(); - - $this->model = $model; - $this->view = new View($this, $model); - - $this->prefix = ''; - } - - public function getPrefix() { - return $this->prefix; - } - - public function setPrefix($prefix) { - $this->prefix = $prefix; - - return $this; - } - - public function getView() { - return $this->view; - } - - public function setView($view) { - $this->view = $view; - - return $this; - } - - public function getResponse() { - return $this->response; - } - - public function setResponse($response) { - $this->response = $response; - - return $this; - } - - /** - * @return Model - */ - public function getModel() { - return $this->model; - } - - /** - * @param $model - * @return $this - */ - public function setModel($model) { - $this->model = $model; - - return $this; - } - - /** - * @return Request - */ - public function getRequest() { - return $this->request; - } - - /** - * @return string - */ - public function getPage() { - if ($this->getPrefix() != '') { - return sprintf('%s/%s', $this->prefix, $this->request->get('page')); - } - - return $this->request->get('page'); - } - - /** - * @param $page - * @return string - */ - public static function mapControllerName($page) { - switch ($page) { - case 'benutzerverwaltung': - case 'meinprofil': - case 'resetpasswort': - case 'registrieren': - case 'anmelden': - case 'abmelden': - return 'bfw\mvc\controller\BenutzerverwaltungsController'; - case 'home': - return 'bfw\mvc\controller\HomeController'; - case 'tickets': - case 'ticketanlegen': - return 'bfw\mvc\controller\TicketsController'; - case 'historie': - return 'bfw\mvc\controller\HistoryController'; - - default: - return 'bfw\mvc\controller\ErrorController'; - } - } - - public static function getArgsForController($controllerName) { - switch ($controllerName) { - case 'bfw\mvc\controller\BenutzerverwaltungsController': - $model = new TUser(); - - return array($model, new Request()); - case 'bfw\mvc\controller\HistoryController': - $model = new THistory(); - - return array($model, new Request()); - case 'bfw\mvc\controller\HomeController': - $model = new TUser(); - - return array($model, new Request()); - case 'bfw\mvc\controller\TicketsController': - $model = new TTicket(); - - return array($model, new Request()); - default: - $model = new TUser(); - - return array($model, new Request()); - } - - throw new InvalidArgumentException(sprintf('Unbekannter Controller für %s', $controllerName)); - } - - } + abstract public function index(); } \ No newline at end of file diff --git a/classes/bfw/mvc/model/Model.php b/classes/bfw/mvc/common/Model.php rename from classes/bfw/mvc/model/Model.php rename to classes/bfw/mvc/common/Model.php --- a/classes/bfw/mvc/model/Model.php +++ b/classes/bfw/mvc/common/Model.php @@ -1,217 +1,226 @@ db = Database::getInstance(); - public function getData() { - return $this->data; - } + $this->table = $table; + $this->data = array(); + } - /** - * Herzstück des Persistence-Frameworks - * - * Dynamische Erzeugung von Getttern- und Settern - * - * Anstatt diese explizit zu pflegen und zu warten, - * werden Diese dynamisch, on, the fly, erzeugt. - * - * Der Vorteil: Nicht Konfigurieren, nicht Erzeugen. Einfach Nutzen... - * - * @param $methodName - * @param null $params - * @return $this - */ - public function __call($methodName, $params = null) { - $prefix = substr($methodName, 0, 3); - $key = strtolower(substr($methodName, 3)); + /** + * Herzstück des Persistence-Frameworks + * + * Dynamische Erzeugung von Getttern- und Settern + * + * Anstatt diese explizit zu pflegen und zu warten, + * werden Diese dynamisch, on, the fly, erzeugt. + * + * Der Vorteil: Nicht Konfigurieren, nicht Erzeugen. Einfach Nutzen... + * + * @param $methodName + * @param null $params + * @return $this + */ + public function __call($methodName, $params = null) { + $prefix = substr($methodName, 0, 3); + $key = strtolower(substr($methodName, 3)); - if ($prefix == 'set') { - $value = $params[0]; - - $this->data[$key] = $value; + if ($prefix == 'set') { + $value = $params[0]; - // fluent please! - return $this; - - } else if ($prefix == 'get') { - if (array_key_exists($key, $this->data)) { - return $this->data[$key]; - } + // no data, no state, null + if (!is_array($this->data)) { + return null; } - exit(sprintf('Unbekannte Methode %s::%s(%s, %s) wurde aufgerufen.', get_class($this), $methodName, $key, $prefix)); - } + $this->data[$key] = $value; - /** - * @param $table - */ - public function __construct($table) { - self::$logger = \Logger::getLogger('__CLASS__'); + // fluent please! + return $this; - $this->db = Database::getInstance(); - $this->table = $table; - $this->data = array(); - } + } else if ($prefix == 'get') { - /** - * Vereinfachte Find Methode bezogen auf die jeweilige Instanz - * - * @param $id - * @return Model - */ - public function find($id) { - self::$logger->info(sprintf('%s(%d) ', __METHOD__, $id)); - - if (($this->data = $this->db->find($this->table, $id)) == null) { + // no data, no state, null + if (!is_array($this->data)) { return null; } - return $this; + if (array_key_exists($key, $this->data)) { + return $this->data[$key]; + } + } + + exit(sprintf('Unbekannte Methode %s::%s(%s, %s) wurde aufgerufen.', get_class($this), $methodName, $key, $prefix)); + } + + /** + * Vereinfachte Find Methode bezogen auf die jeweilige Instanz + * + * @param $id + * @return Model + */ + public function find($id) { + self::$logger->info(sprintf('%s(%d) ', __METHOD__, $id)); + + if (($this->data = $this->db->find($this->table, $id)) == null) { + return null; } - /** - * Die Findall Methode erzeugt typsicher den Supertyp - * - * @param bool|false $sys - * @return Model[] - */ - public function findAll($sys = false) { - self::$logger->info(sprintf('%s() ', __METHOD__)); - - $initial_id = ($sys) ? 0 : 1; - $rows = $this->db->findAll($this->table, $initial_id); + return $this; + } - if (count($rows) == 0) { - return array(); - } + /** + * Die Findall Methode erzeugt typsicher den Supertyp + * + * @param bool|false $sys + * @return Model[] + */ + public function findAll($sys = false) { + self::$logger->info(sprintf('%s() ', __METHOD__)); - $list = array(); - foreach ($rows as $row) { - $item = new static(); - $item->data = $row; + $initial_id = ($sys) ? 0 : 1; + $rows = $this->db->findAll($this->table, $initial_id); - $list[] = $item; - } - - self::$logger->info(sprintf('%s(): %d', __METHOD__, count($list))); - - return $list; + if (count($rows) == 0) { + return array(); } - /** - * Vereinfachte FindByField Methode - * - * @param $field - * @param $value - * @return Model - */ - public function findByField($field, $value) { - self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $field, $value)); + $list = array(); + foreach ($rows as $row) { + $item = new static(); + $item->data = $row; + + $list[] = $item; + } + + self::$logger->info(sprintf('%s(): %d', __METHOD__, count($list))); + + return $list; + } - $this->data = $this->db->findByField($this->table, $field, $value); + /** + * Vereinfachte FindByField Methode + * + * @param $field + * @param $value + * @return Model + */ + public function findByField($field, $value) { + self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $field, $value)); - // Keine Daten, keine Instanz - if ($this->data == null) { - return null; - } + $this->data = $this->db->findByField($this->table, $field, $value); - return $this; + // Keine Daten, keine Instanz + if ($this->data == null) { + return null; } - /** - * Vereinfachte FindAllByField Methode - * - * Erzeugt on the fly ein array mit dem Supertyp der Klasseninstanz - * @param $field - * @param $value - * @return Model[] - */ - public function findAllByField($field, $value) { - self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $field, $value)); - - $rows = $this->db->findAllByField($this->table, $field, $value); + return $this; + } - if ($rows == null) { - return null; - } + /** + * Vereinfachte FindAllByField Methode + * + * Erzeugt on the fly ein array mit dem Supertyp der Klasseninstanz + * @param $field + * @param $value + * @return Model[] + */ + public function findAllByField($field, $value) { + self::$logger->info(sprintf('%s(%s, %s) ', __METHOD__, $field, $value)); - $list = array(); - foreach ($rows as $row) { - $item = new static(); - $item->data = $row; + $rows = $this->db->findAllByField($this->table, $field, $value); + + if ($rows == null) { + return null; + } - $list[] = $item; - } + $list = array(); + foreach ($rows as $row) { + $item = new static(); + $item->data = $row; - return $list; + $list[] = $item; } - /** - * Vereinfachte persist Methode - * - * Der Logger loggt nur die Nutzdaten, deswegen sieht das im Log identisch aus. - * - * Es handelt sich allerdings einmal um ein Objekt und einmal nur um ein Array. - * - * @param $object - * @return bool - */ - public function persist($object) { - self::$logger->info(sprintf('%s(%s)', __METHOD__, print_r($object->getData(), true))); + return $list; + } + + /** + * Vereinfachte persist Methode + * + * Der Logger loggt nur die Nutzdaten, deswegen sieht das im Log identisch aus. + * + * Es handelt sich allerdings einmal um ein Objekt und einmal nur um ein Array. + * + * @return bool + */ + public function persist() { + self::$logger->info(sprintf('%s(%s)', __METHOD__, print_r($this->getData(), true))); - return $this->db->persist($this->table, $object->getData()); + return $this->db->persist($this->table, $this->getData()); + } + + public function getData() { + return $this->data; + } + + /** + * Vereinfachte store Methode + * + * @return bool + */ + public function store() { + self::$logger->info(sprintf('%s(%d, %s)', __METHOD__, $this->getId(), print_r($this->getData(), true))); + + if ($this->getId() > 1) { + return $this->db->store($this->table, $this->getId(), $this->getData()); } - /** - * Vereinfachte store Methode - * - * @param $id - * @param $object - * @return bool - */ - public function store($id, $object) { - self::$logger->info(sprintf('%s(%d, %s)', __METHOD__, $id, print_r($object->getData(), true))); + return false; + } - if ($id > 1) { - return $this->db->store($this->table, $id, $object->getData()); - } + /** + * Vereinfachte delete Methode + * + * @param $id + * @return bool + */ + public function delete() { + self::$logger->info(sprintf('%s(%d) ', __METHOD__, $this->getId())); - return false; + if ($this->getId() > 1) { + return $this->db->delete($this->table, $this->getId()); } - /** - * Vereinfachte delete Methode - * - * @param $id - * @return bool - */ - public function delete($id) { - self::$logger->info(sprintf('%s(%d) ', __METHOD__, $id)); + return false; + } - if ($id > 1) { - return $this->db->delete($this->table, $id); - } - - return false; - } - - } } \ No newline at end of file diff --git a/classes/bfw/mvc/view/View.php b/classes/bfw/mvc/common/View.php rename from classes/bfw/mvc/view/View.php rename to classes/bfw/mvc/common/View.php --- a/classes/bfw/mvc/view/View.php +++ b/classes/bfw/mvc/common/View.php @@ -1,115 +1,111 @@ controller = $controller; + $this->model = $model; - /** - * Statische Referenz auf die reale Template Engine, hier Smarty - * - * @var Smarty - */ - private static $tpl = null; + self::$tpl = self::getTemplateEngine(); + } - /** - * View constructor. - * - * @param Controller $controller - * @param Model $model - */ - public function __construct(Controller $controller, Model $model) { - $this->controller = $controller; - $this->model = $model; + /** + * Liefert ein statisches Handle auf die aktuelle Template Engine zurück + * + * Das Singleton Pattern garantiert genau eine Instanz der Template Engine im Speicher. + * + * Verschiedene Skripte können so nacheinander Variablen zuweisen und diese bei Bedarf auslesen + * + * @return Smarty + */ + private static function getTemplateEngine() { + if (self::$tpl == null) { + self::$tpl = new Smarty(); - self::$tpl = self::getTemplateEngine(); + $tpl = self::$tpl; + + $tpl->setCompileDir('./data/templates_c/'); + $tpl->setTemplateDir('./templates/'); } - /** - * Liefert ein statisches Handle auf die aktuelle Template Engine zurück - * - * Das Singleton Pattern garantiert genau eine Instanz der Template Engine im Speicher. - * - * Verschiedene Skripte können so nacheinander Variablen zuweisen und diese bei Bedarf auslesen - * - * @return Smarty - */ - private static function getTemplateEngine() { - if (self::$tpl == null) { - self::$tpl = new \Smarty(); + return self::$tpl; + } - $tpl = self::$tpl; - - $tpl->setCompileDir('./data/templates_c/'); - $tpl->setTemplateDir('./templates/'); - } + /** + * 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(); - return self::$tpl; - } + $request = $this->controller->getRequest(); - public function assign($key, $value) { - self::$tpl->assign($key, $value); + if ($request->getKey('isLoggedIn')) { + $tUser->find($request->getKey('user_id')); } - /** - * 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(); + $controller = $this->controller; + + $response = $controller->getResponse(); + $this->assign('response', $response); - $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); - $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); + 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'); - } + $page = 'error/error'; + self::$tpl->assign('page', $page); - // Msg wieder auf Null setzen... - $request->setKey('msg', ''); - - // Fehler wieder auf Null setzen... - $request->setKey('fehler', ''); + self::$tpl->display('layout.tpl'); } + // Msg wieder auf Null setzen... + $request->setKey('msg', ''); + + // Fehler wieder auf Null setzen... + $request->setKey('fehler', ''); } + + public function assign($key, $value) { + self::$tpl->assign($key, $value); + } + } diff --git a/classes/bfw/mvc/controller/BenutzerverwaltungsController.php b/classes/bfw/mvc/controller/BenutzerverwaltungController.php rename from classes/bfw/mvc/controller/BenutzerverwaltungsController.php rename to classes/bfw/mvc/controller/BenutzerverwaltungController.php --- a/classes/bfw/mvc/controller/BenutzerverwaltungsController.php +++ b/classes/bfw/mvc/controller/BenutzerverwaltungController.php @@ -1,314 +1,312 @@ + * + */ + +use bfw\Dispatcher; +use bfw\mvc\common\Controller; +use bfw\mvc\model\TGroup; +use bfw\mvc\model\TUser; + +class BenutzerverwaltungController extends Controller { + private static $logger = null; /** - * Copyright(C) 2015 Markus Bröker + * BenutzerverwaltungsController constructor. * */ - - use bfw\Dispatcher; - use bfw\mvc\model\Model; - use bfw\mvc\model\TGroup; - use bfw\mvc\model\TUser; - - class BenutzerverwaltungsController extends Controller { - private static $logger = null; - - /** - * BenutzerverwaltungsController constructor. - * - * @param Model $model - * @param Request $request - */ - public function __construct($model, $request) { - - parent::__construct($model, $request); - } + public function __construct() { - /** - * - */ - public function loeschenFunc() { - $tUser = $this->getModel(); - $request = $this->getRequest(); - - $uid = $request->session('uid'); - - if (!$tUser->delete($uid)) { - $request->setKey('fehler', 'Der Benutzer konnte nicht gelöscht werden.'); - Dispatcher::route('/home/'); - } else { - $request->setKey('msg', 'Der Benutzer wurde gelöscht.'); - } - } - - /** - * - */ - public function aendernFunc() { - $request = $this->getRequest(); + $model = new TUser(); + parent::__construct($model); + } - $uid = $request->session('uid'); - $username = $request->session('username'); - $password = $request->session('password'); - $group_id = $request->session('groupbox'); - - $tUser = $this->getModel(); - $user = $tUser->find($uid); - - $user->setUsername($username); - if ($password != '') { - $user->setPassword(md5($password)); - } - - if ($group_id != '') { - $user->setGroup_id($group_id); - } + /** + * + */ + public function meinProfil() { + $request = $this->getRequest(); + $engine = $this->getView(); - if ($tUser->store($user->getId(), $user)) { - $request->setKey('msg', 'Der Benutzer wurde erfolgreich aktualisiert.'); - } else { - $request->setKey('fehler', 'Der Benutzer konnte nicht aktualisiert werden.'); - } - } - - /** - * - * @param $currentUser - * @return mixed - */ - public function registrierenFunc($currentUser) { - $request = $this->getRequest(); + $username = $request->session('username'); - $password1 = $request->session('password1'); - $password2 = $request->session('password2'); - - if (strlen($password1) == 0) { - return $currentUser; - } + $tUser = $this->getModel(); + $user = $tUser->find($request->getKey('user_id')); - // Validierung - if ($password1 != $password2) { - $request->setKey('fehler', 'Die Passwörter sind verschieden.'); - return $currentUser; - } - - $username = $request->session('username'); + if ($request->post('aendern') != '') { $firstname = $request->session('firstname'); $lastname = $request->session('lastname'); - $currentUser->setUsername($username); - $currentUser->setPassword(md5($password1)); - $currentUser->setFirstname($firstname); - $currentUser->setLastname($lastname); - $currentUser->setGroup_Id(TGroup::SUPPORTER); + $tUser->setUsername($username); + $tUser->setFirstname($firstname); + $tUser->setLastname($lastname); + + $password = $request->session('password'); + if ($password != '') { + $tUser->setPassword(md5($password)); + } + + if ($tUser->store()) { + $request->setKey('msg', 'Der Nutzer wurde aktualisiert.'); + $tUser->findByField('username', $tUser->getUsername()); + } else { + $request->setKey('fehler', 'Der Nutzer konnte nicht aktualisiert werden.'); + } + } + } + + /** + * + */ + public function abmelden() { + $request = $this->getRequest(); + $engine = $this->getView(); + + $request->deleteKey('username'); + $request->deleteKey('group_id'); + $request->destroySession(); - if ($username == '' || $firstname == '' || $lastname == '') { - $request->setKey('fehler', 'Sie müssen die Pflichtfelder ausfüllen.'); - return $currentUser; + Dispatcher::route('/'); + } + + /** + * + */ + public function anmelden() { + $request = $this->getRequest(); + $engine = $this->getView(); + + $username = $request->session('username'); + $password = md5($request->session('password')); + + $tUser = $this->getModel(); + $user = $tUser->findByUsername($username); + + if ($user == null) { + return; + } + + if (($username == $user->getUsername()) && ($password == $user->getPassword())) { + $request->setKey('isLoggedIn', true); + $request->setKey('user_id', $user->getId()); + $request->setKey('group_id', $user->getGroup_id()); + + $tGroup = new TGroup(); + if (($group = $tGroup->find($user->getGroup_Id())) == null) { + $request->setKey('fehler', "DB-Inkonsistenz: Prüfen Sie die exisitierenden Gruppen."); } - if ($currentUser->persist($currentUser)) { - $request->setKey('msg', 'Der Nutzer wurde angelegt.'); + $msg = sprintf('Sie gehören der Gruppe %s an.', $group->getName()); + $request->setKey('msg', $msg); - if ($currentUser->findByUsername($currentUser->getUsername())) { - $request->setKey('isLoggedIn', true); - $request->setKey('user_id', $currentUser->getId()); - $request->setKey('group_id', $currentUser->getGroup_id()); - - Dispatcher::route('/meinprofil/'); - } - } else { - $request->setKey('fehler', 'Der Nutzer konnte nicht angelegt werden.'); + $lastpage = $request->getKey('lastpage'); + if ($lastpage == 'benutzerverwaltung/anmelden') { + $lastpage = 'tickets/index'; } + $request->setKey('lastpage', $lastpage); + + // Routing ist final + Dispatcher::route(sprintf('/%s/', $lastpage)); + } + + } + + /** + * + */ + public function registrieren() { + $request = $this->getRequest(); + $engine = $this->getView(); + + $currentUser = new TUser(); + if ($request->post('registrieren') != '') { + $currentUser = $this->registrierenFunc($currentUser); + } + + $engine->assign('currentUser', $currentUser); + } + + /** + * + * @param $currentUser + * @return mixed + */ + public function registrierenFunc($currentUser) { + $request = $this->getRequest(); + + $password1 = $request->session('password1'); + $password2 = $request->session('password2'); + + if (strlen($password1) == 0) { + return $currentUser; + } + + // Validierung + if ($password1 != $password2) { + $request->setKey('fehler', 'Die Passwörter sind verschieden.'); + return $currentUser; + } + + $username = $request->session('username'); + $firstname = $request->session('firstname'); + $lastname = $request->session('lastname'); + + $currentUser->setUsername($username); + $currentUser->setPassword(md5($password1)); + $currentUser->setFirstname($firstname); + $currentUser->setLastname($lastname); + $currentUser->setGroup_Id(TGroup::SUPPORTER); + + if ($username == '' || $firstname == '' || $lastname == '') { + $request->setKey('fehler', 'Sie müssen die Pflichtfelder ausfüllen.'); return $currentUser; } - /** - * - * @return bool - */ - public function resetPasswordFunc() { - $request = $this->getRequest(); - $engine = $this->getView(); + if ($currentUser->persist()) { + $request->setKey('msg', 'Der Nutzer wurde angelegt.'); + + if ($currentUser->findByUsername($currentUser->getUsername())) { + $request->setKey('isLoggedIn', true); + $request->setKey('user_id', $currentUser->getId()); + $request->setKey('group_id', $currentUser->getGroup_id()); + + Dispatcher::route('/benutzerverwaltung/meinprofil/'); + } + } else { + $request->setKey('fehler', 'Der Nutzer konnte nicht angelegt werden.'); + } + + return $currentUser; + } + + /** + * + */ + public function index() { + $request = $this->getRequest(); + $engine = $this->getView(); + + $tUser = $this->getModel(); + $tGroup = new TGroup(); + + if ($request->post('loeschen') != '') { + $this->loeschenFunc(); + } - $username = $request->session('username'); + if ($request->post('aendern') != '') { + $this->aendernFunc(); + } + + $group_id = $request->getKey('group_id', TGroup::GUEST); + + switch ($group_id) { + case TGroup::ADMIN: + $users = $tUser->findAll(); + $groups = $tGroup->findAll(); + break; + case TGroup::MANAGER: + $users = $tUser->findAllManagersAndBelow(); + $groups = $tGroup->findAllManagersAndBelow(); + break; + default: + Dispatcher::route('/benutzerverwaltung/home/'); + } + + $engine->assign('users', $users); + $engine->assign('groups', $groups); + } + + /** + * + */ + public function loeschenFunc() { + $tUser = new TUser(); + $request = $this->getRequest(); + + $uid = $request->session('uid'); - if (!$request->hasPost()) { - return false; - } + $tUser->find($uid); + if (!$tUser->delete()) { + $request->setKey('fehler', 'Der Benutzer konnte nicht gelöscht werden.'); + Dispatcher::route('/home/'); + } else { + $request->setKey('msg', 'Der Benutzer wurde gelöscht.'); + } + } + + /** + * + */ + public function aendernFunc() { + $request = $this->getRequest(); - $tUser = $this->getModel(); + $uid = $request->session('uid'); + $username = $request->session('username'); + $password = $request->session('password'); + $group_id = $request->session('groupbox'); + + $tUser = $this->getModel(); + $user = $tUser->find($uid); + + $user->setUsername($username); + if ($password != '') { + $user->setPassword(md5($password)); + } + + if ($group_id != '') { + $user->setGroup_id($group_id); + } - if ($tUser->findByUsername($username)) { - $tUser->setPassword(md5($tUser->getUsername())); + if ($tUser->store()) { + $request->setKey('msg', 'Der Benutzer wurde erfolgreich aktualisiert.'); + } else { + $request->setKey('fehler', 'Der Benutzer konnte nicht aktualisiert werden.'); + } + } + + /** + * + */ + public function resetpasswort() { + $request = $this->getRequest(); + $engine = $this->getView(); - return $tUser->store($tUser->getId(), $tUser); + if ($request->post('pw-reset')) { + if ($this->resetPasswordFunc()) { + Dispatcher::route('/benutzerverwaltung/anmelden/'); } + } + } - $engine->assign('request', $request); + /** + * + * @return bool + */ + public function resetPasswordFunc() { + $request = $this->getRequest(); + $engine = $this->getView(); + + $username = $request->session('username'); + + if (!$request->hasPost()) { return false; } - /** - * - */ - public function meinProfil() { - $request = $this->getRequest(); - $engine = $this->getView(); - - $username = $request->session('username'); - - $tUser = $this->getModel(); - $user = $tUser->find($request->getKey('user_id')); - - if ($request->post('aendern') != '') { - $firstname = $request->session('firstname'); - $lastname = $request->session('lastname'); - - $tUser = new TUser(); - $tUser->setUsername($username); - $tUser->setFirstname($firstname); - $tUser->setLastname($lastname); + $tUser = $this->getModel(); - $password = $request->session('password'); - if ($password != '') { - $tUser->setPassword(md5($password)); - } + if ($tUser->findByUsername($username)) { + $tUser->setPassword(md5($tUser->getUsername())); - if ($tUser->store($user->getId(), $tUser)) { - $request->setKey('msg', 'Der Nutzer wurde aktualisiert.'); - $tUser->findByField('username', $tUser->getUsername()); - } else { - $request->setKey('fehler', 'Der Nutzer konnte nicht aktualisiert werden.'); - } - } - } - - /** - * - */ - public function abmelden() { - $request = $this->getRequest(); - $engine = $this->getView(); - - $request->deleteKey('username'); - $request->deleteKey('group_id'); - $request->destroySession(); - - Dispatcher::route('/'); + return $tUser->store(); } - /** - * - */ - public function anmelden() { - $request = $this->getRequest(); - $engine = $this->getView(); - - $username = $request->session('username'); - $password = md5($request->session('password')); - - $tUser = $this->getModel(); - $user = $tUser->findByUsername($username); - - if ($user == null) { - return; - } - - if (($username == $user->getUsername()) && ($password == $user->getPassword())) { - $request->setKey('isLoggedIn', true); - $request->setKey('user_id', $user->getId()); - $request->setKey('group_id', $user->getGroup_id()); - - $tGroup = new TGroup(); - if (($group = $tGroup->find($user->getGroup_Id())) == null) { - $request->setKey('fehler', "DB-Inkonsistenz: Prüfen Sie die exisitierenden Gruppen."); - } - - $msg = sprintf('Sie gehören der Gruppe %s an.', $group->getName()); - $request->setKey('msg', $msg); - - $lastpage = $request->getKey('lastpage'); - if ($lastpage == 'anmelden') { - $lastpage = 'tickets'; - } - - $request->setKey('lastpage', $lastpage); - - // Routing ist final - Dispatcher::route(sprintf('/%s/', $lastpage)); - } - - } - - /** - * - */ - public function registrieren() { - $request = $this->getRequest(); - $engine = $this->getView(); - - $currentUser = new TUser(); - if ($request->post('registrieren') != '') { - $currentUser = $this->registrierenFunc($currentUser); - } + $engine->assign('request', $request); + return false; + } - $engine->assign('currentUser', $currentUser); - } - - /** - * - */ - public function index() { - $request = $this->getRequest(); - $engine = $this->getView(); - - $tUser = $this->getModel(); - $tGroup = new TGroup(); - - if ($request->post('loeschen') != '') { - $this->loeschenFunc(); - } - - if ($request->post('aendern') != '') { - $this->aendernFunc(); - } - - $group_id = $request->getKey('group_id', TGroup::GUEST); - - switch ($group_id) { - case TGroup::ADMIN: - $users = $tUser->findAll(); - $groups = $tGroup->findAll(); - break; - case TGroup::MANAGER: - $users = $tUser->findAllManagersAndBelow(); - $groups = $tGroup->findAllManagersAndBelow(); - break; - default: - Dispatcher::route('/home/'); - } - - $engine->assign('users', $users); - $engine->assign('groups', $groups); - } - - /** - * - */ - public function resetpasswort() { - $request = $this->getRequest(); - $engine = $this->getView(); - - if ($request->post('pw-reset')) { - if ($this->resetPasswordFunc()) { - Dispatcher::route('/anmelden/'); - } - } - } - - } } \ No newline at end of file diff --git a/classes/bfw/mvc/controller/ErrorController.php b/classes/bfw/mvc/controller/ErrorController.php --- a/classes/bfw/mvc/controller/ErrorController.php +++ b/classes/bfw/mvc/controller/ErrorController.php @@ -1,21 +1,22 @@ - * - */ - class ErrorController extends Controller { +/** + * Copyright(C) 2015 Markus Bröker + * + */ +class ErrorController extends Controller { - public function __construct($model, $request) { - parent::__construct($model, $request); - } + public function __construct($model, $request) { + parent::__construct($model, $request); + } - public function index() { - $request = $this->getRequest(); - $engine = $this->getView(); - } + public function index() { + $request = $this->getRequest(); + $engine = $this->getView(); + } - } } diff --git a/classes/bfw/mvc/controller/HistoryController.php b/classes/bfw/mvc/controller/HistoryController.php --- a/classes/bfw/mvc/controller/HistoryController.php +++ b/classes/bfw/mvc/controller/HistoryController.php @@ -1,54 +1,55 @@ + * + */ - /** - * Copyright(C) 2015 Markus Bröker - * - */ +use bfw\mvc\common\Controller; +use bfw\mvc\model\TGroup; +use bfw\mvc\model\THistory; +use bfw\mvc\model\TTicket; +use bfw\mvc\model\TUser; - use bfw\mvc\model\TGroup; - use bfw\mvc\model\TTicket; - use bfw\mvc\model\TUser; +class HistoryController extends Controller { + + private $user_id; + private $group_id; + private $currentTicket; - class HistoryController extends Controller { + public function __construct() { + $model = new THistory(); + parent::__construct($model); - private $user_id; - private $group_id; - private $currentTicket; + $this->currentTicket = null; + + $request = $this->getRequest(); - public function __construct($model, $request) { - parent::__construct($model, $request); + $this->user_id = $request->getKey('user_id', TUser::SYSTEM); + $this->group_id = $request->getKey('group_id', TGroup::GUEST); + } - $this->currentTicket = null; + public function index() { + $request = $this->getRequest(); + $engine = $this->getView(); - $this->user_id = $request->getKey('user_id', TUser::SYSTEM); - $this->group_id = $request->getKey('group_id', TGroup::GUEST); + $tid = $request->session('tid'); + $ticket = new TTicket(); + + if ($ticket->find($tid) == null) { + $request->setKey('fehler', 'Datensatz nicht gefunden.'); } - public function index() { - $request = $this->getRequest(); - $engine = $this->getView(); - - $tid = $request->session('tid'); - $ticket = new TTicket(); - - $user_id = $request->session('user_id'); - - if ($ticket->find($tid, $user_id) == null) { - $request->setKey('fehler', 'Datensatz nicht gefunden.'); - $ticket = new TTicket(); - } - - $history = $this->getModel(); - $histories = $history->findAllByField('ticket_id', $tid); - if ($histories == null) { - $request->setKey('fehler', 'Die Daten sind nicht aktuell.'); - } - - $engine->assign('ticket', $ticket); - $engine->assign('histories', $histories); + $history = $this->getModel(); + $histories = $history->findAllByField('ticket_id', $tid); + if ($histories == null) { + $request->setKey('fehler', 'Die Daten sind nicht aktuell.'); } + $engine->assign('ticket', $ticket); + $engine->assign('histories', $histories); } + } \ No newline at end of file diff --git a/classes/bfw/mvc/controller/HomeController.php b/classes/bfw/mvc/controller/HomeController.php --- a/classes/bfw/mvc/controller/HomeController.php +++ b/classes/bfw/mvc/controller/HomeController.php @@ -1,124 +1,122 @@ + * + */ +class HomeController extends Controller { + const TEXT_ID = 2; /** - * Copyright(C) 2015 Markus Bröker + * HomeController constructor. * */ + public function __construct() { + $model = new TUser(); + parent::__construct($model); + } - use bfw\Database; - use bfw\Dispatcher; - use bfw\mvc\model\Model; - use bfw\mvc\model\TGroup; - use bfw\mvc\model\TText; - - class HomeController extends Controller { - const TEXT_ID = 2; + /** + * Default Index Action + * + * Zu berücksichtigen ist hier: + * + * Sowohl GET-Actions als auch POST Actions werden berücksichtigt + */ + public function index() { + $request = $this->getRequest(); + $engine = $this->getView(); /** - * HomeController constructor. - * - * @param Model $model - * @param Request $request - */ - public function __construct($model, $request) { - parent::__construct($model, $request); - } - - /** - * + * Reset mit Redirect */ - public function eintragen() { - $request = $this->getRequest(); - - $tText = new TText(); - $text = $tText->find(self::TEXT_ID); + if ($request->getParameter('reset') == '1') { + $this->reset($engine, $request); - $text->setHeadline($request->session('headline')); - $text->setText($request->session('text')); - - if ($tText->store(self::TEXT_ID, $text)) { - $request->setKey('msg', 'Der CMS-Text wurde aktualisiert.'); - } else { - $request->setKey('fehler', 'Der CMS-Text kontne nicht aktualisiert werden.'); - } + return; } /** - * + * Eintragen mit Redirect */ - public function reset() { - $request = $this->getRequest(); - $db = Database::getInstance(); + if ($request->get('unit') == '1') { + $this->unit(); - if (!$db->cleanup()) { - $request->deleteParameterKey('reset'); - $request->setKey('fehler', 'Fehler beim Aufräumen'); - Dispatcher::route('/'); - } + return; + } - $request->deleteParameterKey('reset'); - $request->destroySession(); - - Dispatcher::route('/'); + if ($request->post('eintragen') != '') { + $this->eintragen(); } - /** - * - */ - public function unit() { - $request = $this->getRequest(); + $tText = new TText(); + $group_id = $request->getKey('group_id', TGroup::GUEST); + + $text = $tText->find(self::TEXT_ID); + $engine->assign('text', $text); + $engine->assign('group_id', $group_id); + } - $db = Database::getInstance(); - $db->csvImport('t_user', 'data/import/test_users.csv'); - $db->csvImport('t_ticket', 'data/import/test_tickets.csv'); + /** + * + */ + public function reset() { + $request = $this->getRequest(); + $db = Database::getInstance(); - $request->deleteParameterKey('unit'); - + if (!$db->cleanup()) { + $request->deleteParameterKey('reset'); + $request->setKey('fehler', 'Fehler beim Aufräumen'); Dispatcher::route('/'); } - /** - * Default Index Action - * - * Zu berücksichtigen ist hier: - * - * Sowohl GET-Actions als auch POST Actions werden berücksichtigt - */ - public function index() { - $request = $this->getRequest(); - $engine = $this->getView(); + $request->deleteParameterKey('reset'); + $request->destroySession(); + + Dispatcher::route('/'); + } - /** - * Reset mit Redirect - */ - if ($request->getParameter('reset') == '1') { - $this->reset($engine, $request); + /** + * + */ + public function unit() { + $request = $this->getRequest(); - return; - } + $db = Database::getInstance(); + $db->csvImport('t_user', 'data/import/test_users.csv'); + $db->csvImport('t_ticket', 'data/import/test_tickets.csv'); + + $request->deleteParameterKey('unit'); + + Dispatcher::route('/'); + } - /** - * Eintragen mit Redirect - */ - if ($request->get('unit') == '1') { - $this->unit(); + /** + * + */ + public function eintragen() { + $request = $this->getRequest(); - return; - } + $tText = new TText(); + $text = $tText->find(self::TEXT_ID); - if ($request->post('eintragen') != '') { - $this->eintragen(); - } - - $tText = new TText(); - $group_id = $request->getKey('group_id', TGroup::GUEST); + $text->setHeadline($request->session('headline')); + $text->setText($request->session('text')); - $text = $tText->find(self::TEXT_ID); - $engine->assign('text', $text); - $engine->assign('group_id', $group_id); + if ($tText->store()) { + $request->setKey('msg', 'Der CMS-Text wurde aktualisiert.'); + } else { + $request->setKey('fehler', 'Der CMS-Text kontne nicht aktualisiert werden.'); } + } - } } \ No newline at end of file diff --git a/classes/bfw/mvc/controller/TicketsController.php b/classes/bfw/mvc/controller/TicketsController.php --- a/classes/bfw/mvc/controller/TicketsController.php +++ b/classes/bfw/mvc/controller/TicketsController.php @@ -1,351 +1,353 @@ + * + */ + +use bfw\Dispatcher; +use bfw\mvc\common\Controller; +use bfw\mvc\common\Model; +use bfw\mvc\model\TGroup; +use bfw\mvc\model\TStatus; +use bfw\mvc\model\TTicket; +use bfw\mvc\model\TUser; +use Logger; + +class TicketsController extends Controller { + private $user_id; + private $group_id; + private $currentTicket; /** - * Copyright(C) 2015 Markus Bröker + * TicketsController constructor. * */ + public function __construct() { + $model = new TTicket(); + parent::__construct($model); - use bfw\Dispatcher; - use bfw\mvc\model\Model; - use bfw\mvc\model\TGroup; - use bfw\mvc\model\TStatus; - use bfw\mvc\model\TTicket; - use bfw\mvc\model\TUser; + $this->currentTicket = null; + + $request = $this->getRequest(); + + $this->user_id = $request->getKey('user_id', TUser::SYSTEM); + $this->group_id = $request->getKey('group_id', TGroup::GUEST); + } + + /** + * Default Index Action + */ + public function index() { + $request = $this->getRequest(); + $engine = $this->getView(); + + $user_id = $this->user_id; + $group_id = $this->group_id; + + $engine = $this->getView(); + $currentTicket = $this->currentTicket; - class TicketsController extends Controller { - private $user_id; - private $group_id; - private $currentTicket; + // Umleiten zur Historie + if ($request->post('historie') != '') { + Dispatcher::route("/history/"); + } + + // finde das aktuelle Ticket, welches per GET live angegeben wurde. + if ($request->get('tid') != '') { + $currentTicket = $this->processTickedId($user_id); + $this->handleRequest($currentTicket, $user_id, $group_id); + + return; + } + + // lade das ausgewählte Ticket, Supporter nehmen es automatisch an. + if ($request->post('laden') != '') { + $currentTicket = $this->processLaden($user_id); + $this->handleRequest($currentTicket, $user_id, $group_id); + + return; + } + + // erstelle oder aktualisiere das aktuelle Ticket. + if ($request->post('eintragen') != '') { + $currentTicket = $this->processEintragen($user_id, $group_id); + $this->handleRequest($currentTicket, $user_id, $group_id); + + return; + } - /** - * TicketsController constructor. - * - * @param Model $model - * @param Request $request - */ - public function __construct($model, $request) { - parent::__construct($model, $request); + // lösche das aktuelle Ticket. + if ($request->post('loeschen') != '') { + $this->processLoeschen($user_id); + $this->handleRequest($currentTicket, $user_id, $group_id); + + return; + } + + $this->handleRequest($this->currentTicket, $this->user_id, $this->group_id); + } + + /** + * @param $user_id + * @return null|TTicket + */ + public function processTickedId($user_id) { + $request = $this->getRequest(); + $engine = $this->getView(); + + $tUser = new TUser(); + $user = $tUser->find($user_id); + + if ($user == null) { + $request->setKey('fehler', sprintf('Benutzer(%d) konnte nicht mehr gefunden werden.', $user_id)); + Dispatcher::route('/'); + } + + $tid = $request->get('tid'); - $this->currentTicket = null; + $tTicket = $this->getModel(); + $currentTicket = $tTicket->find($tid); + + if ($currentTicket == null) { + $request->setKey('fehler', sprintf('Ticket Nr. %d konnte nicht gefunden werden.', $tid)); + + return null; + } + + if (!$currentTicket->hasPrivilege($currentTicket, $user, false)) { + $request->setKey('fehler', sprintf('Ihnen fehlen die Berechtigungen für das Ticket Nr. %d.', $tid)); - $this->user_id = $request->getKey('user_id', TUser::SYSTEM); - $this->group_id = $request->getKey('group_id', TGroup::GUEST); + return null; } + return $currentTicket; + } + + /** + * Diese Funktion kümmert sich um die Anfragen dieses Ticket-Controllers + * + * @param $currentTicket + * @param $user_id + * @param $group_id + */ + public function handleRequest($currentTicket, $user_id, $group_id) { + $request = $this->getRequest(); + $engine = $this->getView(); + /** - * Diese Funktion kümmert sich um die Anfragen dieses Ticket-Controllers - * - * @param $currentTicket - * @param $user_id - * @param $group_id + * @var TTIcket */ - public function handleRequest($currentTicket, $user_id, $group_id) { - $request = $this->getRequest(); - $engine = $this->getView(); + $tTicket = $this->getModel(); + + $tUser = new TUser(); + $user = $tUser->find($user_id); - /** - * @var Model - */ - $tTicket = $this->getModel(); - - $tUser = new TUser(); - $user = $tUser->find($user_id); - - /** - * 'Cron-Job' ohne 'Cron': Alle Tickets werden bei jedem Zugriff geprüft - * - * Gibt es Tickets, die derzeit gesperrt sind? Befreie Sie! Free Tickets!!! - * Falls Tickets frei sind, weise diese korrekt und fair wieder zu. - */ - $tTicket->unlockTickets($tTicket); - $tTicket->reassignFreeTickets(); + /** + * 'Cron-Job' ohne 'Cron': Alle Tickets werden bei jedem Zugriff geprüft + * + * Gibt es Tickets, die derzeit gesperrt sind? Befreie Sie! Free Tickets!!! + * Falls Tickets frei sind, weise diese korrekt und fair wieder zu. + */ + $tTicket->unlockTickets(); + $tTicket->reassignFreeTickets(); - switch ($group_id) { - case TGroup::SUPPORTER: - $tickets = $tTicket->findAllTicketsByUserid($user_id); - if ($tickets == null) { - $request->setKey('fehler', 'Es existieren derzeit keine Tickets für Sie!'); - } + switch ($group_id) { + case TGroup::SUPPORTER: + $tickets = $tTicket->findAllTicketsByUserid($user_id); + if ($tickets == null) { + $request->setKey('fehler', 'Es existieren derzeit keine Tickets für Sie!'); + } - $users = array($tUser->findByUsername($user->getUsername())); - break; - case TGroup::ADMIN: - case TGroup::MANAGER: - $tickets = $tTicket->findAll(); - $users = $tUser->findAll(false); - break; - default: - $tickets = $tTicket->findAll(); - $users = $tUser->findAll(); - } + $users = array($tUser->findByUsername($user->getUsername())); + break; + case TGroup::ADMIN: + case TGroup::MANAGER: + $tickets = $tTicket->findAll(); + $users = $tUser->findAll(false); + break; + default: + $tickets = $tTicket->findAll(); + $users = $tUser->findAll(); + } - $tStatus = new TStatus(); - $statusItems = $tStatus->findAll(); + $tStatus = new TStatus(); + $statusItems = $tStatus->findAll(); - // erstelle eine neue Ticket-Instanz, falls es keine instanzierte gibt. - if ($currentTicket == null) { - $currentTicket = new TTicket(); - } - - $engine->assign('users', $users); - $engine->assign('tStatus', $tStatus); - $engine->assign('tickets', $tickets); - $engine->assign('statusItems', $statusItems); - $engine->assign('currentTicket', $currentTicket); - $engine->assign('group_id', $group_id); + // erstelle eine neue Ticket-Instanz, falls es keine instanzierte gibt. + if ($currentTicket == null) { + $currentTicket = new TTicket(); } - /** - * @param $user_id - * @return null|TTicket - */ - public function processTickedId($user_id) { - $request = $this->getRequest(); - $engine = $this->getView(); + $engine->assign('users', $users); + $engine->assign('tStatus', $tStatus); + $engine->assign('tickets', $tickets); + $engine->assign('statusItems', $statusItems); + $engine->assign('currentTicket', $currentTicket); + $engine->assign('group_id', $group_id); + } + + /** + * Ticket nach TID laden + * + * @param $user_id + * + * @return null|TTicket + */ + public function processLaden($user_id) { + $request = $this->getRequest(); + $engine = $this->getView(); + + $tid = $request->session('tid'); + + $tTicket = $this->getModel(); + $currentTicket = $tTicket->find($tid); - $tUser = new TUser(); - $user = $tUser->find($user_id); + if ($currentTicket == null) { + $request->setKey('fehler', sprintf('Ticket Nr. %d konnte nicht gefunden werden.', $tid)); + + return null; + } + + $tUser = new TUser(); + $user = $tUser->find($user_id); + + if ($user == null) { + $request->setKey('fehler', sprintf('Benutzer(%d) konnte nicht mehr gefunden werden.', $user_id)); + + return null; + } + + $tTicket->lockTicket($currentTicket, $user); + + if (!$currentTicket->hasPrivilege($currentTicket, $user, true)) { + $request->setKey('fehler', sprintf('Ihnen fehlen die Berechtigungen für das Ticket Nr. %d.', $tid)); + + return null; + } + + return $currentTicket; + } - if ($user == null) { - $request->setKey('fehler', sprintf('Benutzer(%d) konnte nicht mehr gefunden werden.', $user_id)); - Dispatcher::route('/'); - } + /** + * @param $user_id + * @param $group_id + * @return Model|null + */ + public function processEintragen($user_id, $group_id) { + $request = $this->getRequest(); + $engine = $this->getView(); + + $logger = Logger::getLogger('main'); + + $tid = $request->session('tid'); + $status_id = $request->session('status', TStatus::OFFEN); + + $tTicket = $this->getModel(); + + if ($tid != '') { + $tTicket->find($tid, $user_id); + } - $tid = $request->get('tid'); + $tUser = new TUser(); + $user = $tUser->find($user_id); + if ($user == null) { + return null; + } + + $theHolyUserId = $tTicket->getUser_Id(); + if ($group_id == TGroup::ADMIN || $group_id == TGroup::MANAGER) { + $theHolyUserId = $request->session('user_id'); + } + + $subject = $request->session('subject'); + $message = $request->session('message'); - $tTicket = $this->getModel(); - $currentTicket = $tTicket->find($tid); + if (($subject == '') && ($message == '')) { + $request->setKey('fehler', sprintf('Füllen Sie die Pflichtfelder aus.')); + + return null; + } - if ($currentTicket == null) { - $request->setKey('fehler', sprintf('Ticket Nr. %d konnte nicht gefunden werden.', $tid)); + $tTicket->setUser_Id($theHolyUserId); + $tTicket->setStatus_Id($status_id); + $tTicket->setSubject($subject); + $tTicket->setMessage($message); + $tTicket->setLast_Access(date("Y-m-d H:i:s")); + + if ($tid == '') { + if ($tTicket->persist()) { + $request->setKey('msg', sprintf('Ein neues Ticket wurde erfolgreich eingetragen.')); + $logger->info(sprintf('Ticket wurde eingetragen: (%s)', print_r($tTicket->getData(), true))); return null; } - - if (!$currentTicket->hasPrivilege($currentTicket, $user, false)) { - $request->setKey('fehler', sprintf('Ihnen fehlen die Berechtigungen für das Ticket Nr. %d.', $tid)); - - return null; - } - - return $currentTicket; - } - - /** - * Ticket nach TID laden - * - * @param $user_id - * - * @return null|TTicket - */ - public function processLaden($user_id) { - $request = $this->getRequest(); - $engine = $this->getView(); - - $tid = $request->session('tid'); - - $tTicket = $this->getModel(); - $currentTicket = $tTicket->find($tid); - - if ($currentTicket == null) { - $request->setKey('fehler', sprintf('Ticket Nr. %d konnte nicht gefunden werden.', $tid)); - - return null; - } - - $tUser = new TUser(); - $user = $tUser->find($user_id); - - if ($user == null) { - $request->setKey('fehler', sprintf('Benutzer(%d) konnte nicht mehr gefunden werden.', $user_id)); - - return null; - } - - $tTicket->lockTicket($currentTicket, $user); - - if (!$currentTicket->hasPrivilege($currentTicket, $user, true)) { + } else { + if (!$tTicket->hasPrivilege($tTicket, $user, true)) { $request->setKey('fehler', sprintf('Ihnen fehlen die Berechtigungen für das Ticket Nr. %d.', $tid)); return null; } - return $currentTicket; + if ($tTicket->getId() != 1) { + if ($tTicket->store()) { + $request->setKey('msg', 'Das Ticket wurde erfolgreich aktualisiert.'); + $logger->info(sprintf('Ticket wurde aktualisiert: (%s)', print_r($tTicket->getData(), true))); + } + + return $tTicket; + } } - /** - * Löschen von Tickets - * - * @return bool - */ - public function processLoeschen($user_id) { - $request = $this->getRequest(); - $engine = $this->getView(); - - $tid = $request->session('tid'); - - $tTicket = $this->getModel(); - $currentTicket = $tTicket->find($tid); - - if ($currentTicket == null) { - $request->setKey('fehler', sprintf('Nicht existierende Tickets(%d) können nicht gelöscht werden.', $tid)); - - return false; - } + return null; + } - $tUser = new TUser(); - $user = $tUser->find($user_id); - - if ($user == null) { - $request->setKey('fehler', sprintf('Benutzer(%d) konnte nicht mehr gefunden werden.', $user_id)); - - return false; - } + /** + * Löschen von Tickets + * + * @return bool + */ + public function processLoeschen($user_id) { + $request = $this->getRequest(); + $engine = $this->getView(); - if (!$currentTicket->hasPrivilege($currentTicket, $user, true)) { - $request->setKey('fehler', sprintf('Ihnen fehlen die Berechtigungen für das Ticket Nr. %d.', $tid)); - - return false; - } + $tid = $request->session('tid'); - if ($currentTicket->delete($tid)) { - $request->setKey('msg', sprintf('Das Ticket mit der Nummer %d wurde gelöscht.', $tid)); + $tTicket = $this->getModel(); + $currentTicket = $tTicket->find($tid); - return true; - } - - $request->setKey('fehler', sprintf('Das Ticket mit der Nummer %d konnte nicht gelöscht werden.', $tid)); + if ($currentTicket == null) { + $request->setKey('fehler', sprintf('Nicht existierende Tickets(%d) können nicht gelöscht werden.', $tid)); return false; } - /** - * @param $user_id - * @param $group_id - * @return Model|null - */ - public function processEintragen($user_id, $group_id) { - $request = $this->getRequest(); - $engine = $this->getView(); - - $logger = Logger::getLogger('main'); - - $tid = $request->session('tid'); - $status_id = $request->session('status', TStatus::OFFEN); - - $tTicket = $this->getModel(); - - if ($tid != '') { - $tTicket->find($tid, $user_id); - } - - $tUser = new TUser(); - $user = $tUser->find($user_id); - if ($user == null) { - return null; - } - - $theHolyUserId = $tTicket->getUser_Id(); - if ($group_id == TGroup::ADMIN || $group_id == TGroup::MANAGER) { - $theHolyUserId = $request->session('user_id'); - } - - $subject = $request->session('subject'); - $message = $request->session('message'); + $tUser = new TUser(); + $user = $tUser->find($user_id); - if (($subject == '') && ($message == '')) { - $request->setKey('fehler', sprintf('Füllen Sie die Pflichtfelder aus.')); - - return null; - } - - $tTicket->setUser_Id($theHolyUserId); - $tTicket->setStatus_Id($status_id); - $tTicket->setSubject($subject); - $tTicket->setMessage($message); - $tTicket->setLast_Access(date("Y-m-d H:i:s")); - - if ($tid == '') { - if ($tTicket->persist($tTicket)) { - $request->setKey('msg', sprintf('Ein neues Ticket wurde erfolgreich eingetragen.')); - $logger->info(sprintf('Ticket wurde eingetragen: (%s)', print_r($tTicket->getData(), true))); + if ($user == null) { + $request->setKey('fehler', sprintf('Benutzer(%d) konnte nicht mehr gefunden werden.', $user_id)); - return null; - } - } else { - if (!$tTicket->hasPrivilege($tTicket, $user, true)) { - $request->setKey('fehler', sprintf('Ihnen fehlen die Berechtigungen für das Ticket Nr. %d.', $tid)); - - return null; - } - - if ($tTicket->getId() != 1) { - if ($tTicket->store($tid, $tTicket)) { - $request->setKey('msg', 'Das Ticket wurde erfolgreich aktualisiert.'); - $logger->info(sprintf('Ticket wurde aktualisiert: (%s)', print_r($tTicket->getData(), true))); - } - - return $tTicket; - } - } - - return null; + return false; } - /** - * Default Index Action - */ - public function index() { - $request = $this->getRequest(); - $engine = $this->getView(); - - $user_id = $this->user_id; - $group_id = $this->group_id; - - $engine = $this->getView(); - $currentTicket = $this->currentTicket; - - // Umleiten zur Historie - if ($request->post('historie') != '') { - Dispatcher::route("/historie/"); - } - - // finde das aktuelle Ticket, welches per GET live angegeben wurde. - if ($request->get('tid') != '') { - $currentTicket = $this->processTickedId($user_id); - $this->handleRequest($currentTicket, $user_id, $group_id); - - return; - } + if (!$currentTicket->hasPrivilege($currentTicket, $user, true)) { + $request->setKey('fehler', sprintf('Ihnen fehlen die Berechtigungen für das Ticket Nr. %d.', $tid)); - // lade das ausgewählte Ticket, Supporter nehmen es automatisch an. - if ($request->post('laden') != '') { - $currentTicket = $this->processLaden($user_id); - $this->handleRequest($currentTicket, $user_id, $group_id); - - return; - } - - // erstelle oder aktualisiere das aktuelle Ticket. - if ($request->post('eintragen') != '') { - $currentTicket = $this->processEintragen($user_id, $group_id); - $this->handleRequest($currentTicket, $user_id, $group_id); - - return; - } - - // lösche das aktuelle Ticket. - if ($request->post('loeschen') != '') { - $this->processLoeschen($user_id); - $this->handleRequest($currentTicket, $user_id, $group_id); - - return; - } - - $this->handleRequest($this->currentTicket, $this->user_id, $this->group_id); + return false; } + if ($currentTicket->delete($tid)) { + $request->setKey('msg', sprintf('Das Ticket mit der Nummer %d wurde gelöscht.', $tid)); + + return true; + } + + $request->setKey('fehler', sprintf('Das Ticket mit der Nummer %d konnte nicht gelöscht werden.', $tid)); + + return false; } + } \ No newline at end of file diff --git a/classes/bfw/mvc/model/TAction.php b/classes/bfw/mvc/model/TAction.php --- a/classes/bfw/mvc/model/TAction.php +++ b/classes/bfw/mvc/model/TAction.php @@ -1,26 +1,27 @@ data = array( - 'id' => NULL, - 'name' => '', - ); - } + $this->data = array( + 'id' => NULL, + 'name' => '', + ); + } - } } \ No newline at end of file diff --git a/classes/bfw/mvc/model/TGroup.php b/classes/bfw/mvc/model/TGroup.php --- a/classes/bfw/mvc/model/TGroup.php +++ b/classes/bfw/mvc/model/TGroup.php @@ -1,60 +1,61 @@ data = array( + 'id' => NULL, + 'name' => '', + ); + } /** - * Class TGroup + * @param $name + * @return array|null + */ + public function findByName($name) { + return $this->db->findByField('t_group', 'name', $name); + } + + /** + * Besorgt ein Array mit der Liste der Manager und Darunter * - * @method string getName() - * @mthod setName($param) + * @return array|null */ - class TGroup extends Model { - const GUEST = 5; - const SUPPORTER = 4; - const MANAGER = 3; - const ADMIN = 2; - const SYSTEM = 1; + public function findAllManagersAndBelow() { + /** + * SYSTEM = 1 + * ADMIN = 2 + * [MANAGER = 3, SUPPORTER = 4] + * GUEST = 5 + */ + $groups = $this->db->fetchAll($this->table, 'id > 2 and id < 5'); - public function __construct() { - parent::__construct('t_group'); + $list = array(); + foreach ($groups as $group) { + $item = new static(); + $item->data = $group; - $this->data = array( - 'id' => NULL, - 'name' => '', - ); + $list[] = $item; } - /** - * @param $name - * @return array|null - */ - public function findByName($name) { - return $this->db->findByField('t_group', 'name', $name); - } - - /** - * Besorgt ein Array mit der Liste der Manager und Darunter - * - * @return array|null - */ - public function findAllManagersAndBelow() { - /** - * SYSTEM = 1 - * ADMIN = 2 - * [MANAGER = 3, SUPPORTER = 4] - * GUEST = 5 - */ - $groups = $this->db->fetchAll($this->table, 'id > 2 and id < 5'); - - $list = array(); - foreach ($groups as $group) { - $item = new static(); - $item->data = $group; - - $list[] = $item; - } - - return $list; - } + return $list; } } \ No newline at end of file diff --git a/classes/bfw/mvc/model/THistory.php b/classes/bfw/mvc/model/THistory.php --- a/classes/bfw/mvc/model/THistory.php +++ b/classes/bfw/mvc/model/THistory.php @@ -1,84 +1,85 @@ data = array( + 'id' => NULL, + 'ticked_id' => 1, + 'action_id' => 1, + 'user_id' => 1, + 'status_id' => 1, + 'subject' => '', + 'message' => '', + 'locked' => false, + 'last_access' => 'now()', + ); + } /** - * Class THistory - * - * @method getTicket_Id() - * @method getAction_Id() - * @method getUser_Id() - * @method getStatus_Id() - * - * @method getSubject() - * @method getMessage() - * - * @method getLocked() - * @method getLast_Access() + * Liefert das Name-Attribut der jeweiligen Action * - * @method setTicket_Id($param) - * @method setAction_Id($param) - * @method setUser_Id($param) - * @method setStatus_Id($param) - * - * @method setSubject($param) - * @method setMessage($param) - * - * @method setLocked($locked) - * @method setLast_Access($lastAccess) - * + * @return string */ - class THistory extends Model { + public function getActionName() { + $action = new TAction(); + $action->find($this->getAction_Id()); - public function __construct() { - parent::__construct('t_history'); + return $action->getName(); + } - $this->data = array( - 'id' => NULL, - 'ticked_id' => 1, - 'action_id' => 1, - 'user_id' => 1, - 'status_id' => 1, - 'subject' => '', - 'message' => '', - 'locked' => false, - 'last_access' => 'now()', - ); - } - - /** - * Liefert das Name-Attribut der jeweiligen Action - * - * @return string - */ - public function getActionName() { - $action = new TAction(); - $action->find($this->getAction_Id()); + /** + * Liefert das Name-Attribut des jeweiligen Status + * + * @return string|null + */ + public function getStatusName() { + $status = new TStatus(); + $status->find($this->getStatus_Id()); - return $action->getName(); - } - - /** - * Liefert das Name-Attribut des jeweiligen Status - * - * @return string|null - */ - public function getStatusName() { - $status = new TStatus(); - $status->find($this->getStatus_Id()); + return $status->getName(); + } - return $status->getName(); - } + /** + * Liefert das jeweilige Username Attribut des angebenen Benutzers + * + * @return string + */ + public function getUsername() { + $user = new TUser(); - /** - * Liefert das jeweilige Username Attribut des angebenen Benutzers - * - * @return string - */ - public function getUsername() { - $user = new TUser(); - - return $user->getFormattedUsername($this->getUser_Id()); - } + return $user->getFormattedUsername($this->getUser_Id()); } } \ No newline at end of file diff --git a/classes/bfw/mvc/model/TStatus.php b/classes/bfw/mvc/model/TStatus.php --- a/classes/bfw/mvc/model/TStatus.php +++ b/classes/bfw/mvc/model/TStatus.php @@ -1,36 +1,37 @@ data = array( + 'id' => NULL, + 'name' => '', + ); + + } /** - * Class TStatus + * Liefert den Bezeichner des angegebenen PKs der Status-Instanz< * - * @method getName() + * @param $id + * @return mixed */ - class TStatus extends Model { - const OFFEN = 2; - const GESCHLOSSEN = 3; - - public function __construct() { - parent::__construct('t_status'); + public function getFormattedStatus($id) { + $status = $this->find($id); - $this->data = array( - 'id' => NULL, - 'name' => '', - ); - - } - - /** - * Liefert den Bezeichner des angegebenen PKs der Status-Instanz< - * - * @param $id - * @return mixed - */ - public function getFormattedStatus($id) { - $status = $this->find($id); - - return $status->getName(); - } + return $status->getName(); } } \ No newline at end of file diff --git a/classes/bfw/mvc/model/TText.php b/classes/bfw/mvc/model/TText.php --- a/classes/bfw/mvc/model/TText.php +++ b/classes/bfw/mvc/model/TText.php @@ -1,28 +1,29 @@ data = array( - 'id' => NULL, - 'user_id' => 1, - 'headline' => '', - 'text' => '', - ); + $this->data = array( + 'id' => NULL, + 'user_id' => 1, + 'headline' => '', + 'text' => '', + ); - } } } \ No newline at end of file diff --git a/classes/bfw/mvc/model/TTicket.php b/classes/bfw/mvc/model/TTicket.php --- a/classes/bfw/mvc/model/TTicket.php +++ b/classes/bfw/mvc/model/TTicket.php @@ -1,196 +1,201 @@ data = array( + 'id' => NULL, + 'user_id' => 1, + 'status_id' => 1, + 'subject' => '', + 'message' => '', + 'locked' => 0, + 'last_access' => 'now()', + ); + } /** - * Class TTicket + * Findet alle Tickets des angegebenen Nutzers + * * - * @method int getUser_Id() - * @method int getStatus_Id() - * @method string getSubject() - * @method string getMessage() - * @method bool getLocked() - * @method timestamp getLast_Access() - * - * @method setStatus_Id($param) - * @method setSubject($param) - * @method setMessage($param) - * @method setLocked($param) - * @method setLast_Access($param) - * + * @param SERIAL $uid + * @return array|null */ - class TTicket extends Model { - private static $logger = null; - - public function __construct() { - parent::__construct('t_ticket'); - - self::$logger = \Logger::getLogger('__CLASS__'); + public function findAllTicketsByUserid($uid) { + return $this->findAllByField('user_id', $uid); + } - $this->data = array( - 'id' => NULL, - 'user_id' => 1, - 'status_id' => 1, - 'subject' => '', - 'message' => '', - 'locked' => 0, - 'last_access' => 'now()', - ); + /** + * Weisst frei gewordenen Tickets automatisiert zu. + */ + public function reassignFreeTickets() { + $tickets = $this->findAllByField('user_id', 1); + + if (!is_object($tickets)) { + return; } - /** - * Findet alle Tickets des angegebenen Nutzers - * - * - * @param SERIAL $uid - * @return array|null - */ - public function findAllTicketsByUserid($uid) { - return $this->findAllByField('user_id', $uid); - } + $tUser = new TUser(); + foreach ($tickets as $ticket) { + $freeSupporterId = $tUser->getFreeSupporterId(); - /** - * Weisst frei gewordenen Tickets automatisiert zu. - */ - public function reassignFreeTickets() { - $tickets = $this->findAllByField('user_id', 1); - - $tUser = new TUser(); - foreach ($tickets as $ticket) { - $freeSupporterId = $tUser->getFreeSupporterId(); + /** + * Niemals vergessen: Nur aktualisieren, wenn auch + * aktualisiert werden muss. + * + */ + if ($freeSupporterId > 1) { + $ticket->setUser_Id($freeSupporterId); + if ($ticket->store()) { + self::$logger->info(sprintf("TICKET %d wurde neu zugewiesen.", $ticket->getId())); + } + } + } + } - /** - * Niemals vergessen: Nur aktualisieren, wenn auch - * aktualisiert werden muss. - * - */ - if ($freeSupporterId > 1) { - $ticket->setUser_Id($freeSupporterId); - if ($ticket->store($ticket->getId(), $ticket)) { - self::$logger->info(sprintf("TICKET %d wurde neu zugewiesen.", $ticket->getId())); - } + public function lockTicket($ticket, $user) { + if ($user->getGroup_id() == TGroup::SUPPORTER) { + if ($ticket->getLocked() == false) { + $ticket->setLocked(1); + $ticket->setLast_Access(date('Y-m-d H:i:s')); + + if ($ticket->store()) { + self::$logger->info(sprintf("TICKET %d wurde gesperrt", $ticket->getId())); + return true; } } } - public function lockTicket($ticket, $user) { - if ($user->getGroup_id() == TGroup::SUPPORTER) { - if ($ticket->getLocked() == false) { - $ticket->setLocked(1); - $ticket->setLast_Access(date('Y-m-d H:i:s')); + return false; + } + + /** + * Das Ticket wird automatisch entsperrt nach 2 Stunden + * + * @return bool + */ + public function unlockTickets() { + $tickets = $this->findAll(false); + $user = new TUser(); + + foreach ($tickets as $ticket) { + if ($ticket->getStatus_Id() == TStatus::GESCHLOSSEN) { + continue; + } + + // Ticketalter + $ticketAge = time() - strtotime($ticket->getLast_Access()); - if ($this->store($ticket->getId(), $ticket)) { - self::$logger->info(sprintf("TICKET %d wurde gesperrt", $ticket->getId())); - return true; + // Die Bearbeitungszeit beträgt 2 Stunden pro Supporter + $deadLine = 3600 * 2; + + self::$logger->info('Ticket-Alter: ' . $ticketAge); + self::$logger->info('Deadline: ' . $deadLine); + + if ($ticketAge > $deadLine) { + self::$logger->info('Time is up: Daten werden geändert.'); + $freeSupporterId = $user->getFreeSupporterId(); + + if ($freeSupporterId > 1) { + $ticket->setUser_Id($freeSupporterId); + $ticket->setLocked(0); + + if (!$ticket->store()) { + self::$logger->info(sprintf('Fehler beim Schreiben: %s', print_r($ticket->getData(), true))); } + } else { + // Es existieren keine Supporter + self::$logger->info(sprintf("%s(): Es existieren keine Supporter!", __METHOD__)); } } - - return false; } - /** - * Das Ticket wird automatisch entsperrt nach 2 Stunden - * - * @param $tTicket - * @return bool - */ - public function unlockTickets($tTicket) { - $tickets = $tTicket->findAll(false); - $user = new TUser(); - - foreach ($tickets as $ticket) { - if ($ticket->getStatus_Id() == TStatus::GESCHLOSSEN) { - continue; - } - - // Ticketalter - $ticketAge = time() - strtotime($ticket->getLast_Access()); - - // Die Bearbeitungszeit beträgt 2 Stunden pro Supporter - $deadLine = 3600 * 2; + return false; + } - self::$logger->info('Ticket-Alter: ' . $ticketAge); - self::$logger->info('Deadline: ' . $deadLine); - - if ($ticketAge > $deadLine) { - self::$logger->info('Time is up: Daten werden geändert.'); - $freeSupporterId = $user->getFreeSupporterId(); - - if ($freeSupporterId > 1) { - $ticket->setUser_Id($freeSupporterId); - $ticket->setLocked(0); + /** + * Überladene find Methode + * + * In früheren Versionen wurde hier das Ticket 'on the fly' modifiziert. + * Da das aber nicht Sinn und Zweck einer 'find' Methode ist, wurde das + * wieder entfernt und die Modifizierung erfolgt außerhalb... + * + * Sinn und Zweck dieser Methode ist: 'Ticket-ID: nnn' ins Log zu schreiben... + * + * @param $id + * + * @return array|null + */ + public function find($id) { + self::$logger->info(sprintf("Ticket-ID: %d", $id)); - if ($this->store($ticket->getId(), $ticket)) { - continue; - } - } else { - // Es existieren keine Supporter - self::$logger->info(sprintf("%s(): Es existieren keine Supporter!", __METHOD__)); - } - } - } + return parent::find($id); + } + /** + * Prüft, ob der übergebene Nutzer überhaupt die Berechtigung für das übergebene Ticket besitzt. + * + * @param $ticket + * @param $user + * @return bool + */ + public function hasPrivilege($ticket, $user, $write = true) { + + // NULL Tickets: Kein Zugriff + if (!is_object($ticket)) { + self::$logger->warn(sprintf("%s(): Ticket wurde nicht initialisiert!", __METHOD__)); return false; } - /** - * Überladene find Methode - * - * In früheren Versionen wurde hier das Ticket 'on the fly' modifiziert. - * Da das aber nicht Sinn und Zweck einer 'find' Methode ist, wurde das - * wieder entfernt und die Modifizierung erfolgt außerhalb... - * - * Sinn und Zweck dieser Methode ist: 'Ticket-ID: nnn' ins Log zu schreiben... - * - * @param $id - * - * @return array|null - */ - public function find($id) { - self::$logger->info(sprintf("Ticket-ID: %d", $id)); + // NULL User: Kein Zugriff + if (!is_object($user)) { + self::$logger->warn(sprintf("%s(): Benutzer wurde nicht initialisiert!", __METHOD__)); + return false; + } - return parent::find($id); + // ADMIN UND MANAGER: Zugriff per Default + switch ($user->getGroup_Id()) { + case TGroup::ADMIN: + case TGroup::MANAGER: + return true; } - /** - * Prüft, ob der übergebene Nutzer überhaupt die Berechtigung für das übergebene Ticket besitzt. - * - * @param $ticket - * @param $user - * @return bool - */ - public function hasPrivilege($ticket, $user, $write = true) { - - // NULL Tickets: Kein Zugriff - if (!is_object($ticket)) { - self::$logger->warn(sprintf("%s(): Ticket wurde nicht initialisiert!", __METHOD__)); - return false; + if ($write == false) { + // System-Datensatz herausfiltern + if ($ticket->getId() > 1) { + return true; } - - // NULL User: Kein Zugriff - if (!is_object($user)) { - self::$logger->warn(sprintf("%s(): Benutzer wurde nicht initialisiert!", __METHOD__)); - return false; - } - - // ADMIN UND MANAGER: Zugriff per Default - switch ($user->getGroup_Id()) { - case TGroup::ADMIN: - case TGroup::MANAGER: - return true; - } - - if ($write == false) { - // System-Datensatz herausfiltern - if ($ticket->getId() > 1) { - return true; - } - } - - // Ticketbasierter Zugriff: Ticket-Owner == Angemeldeter Benutzer? - return ($ticket->getUser_Id() == $user->getId()); } + // Ticketbasierter Zugriff: Ticket-Owner == Angemeldeter Benutzer? + return ($ticket->getUser_Id() == $user->getId()); } + } \ No newline at end of file diff --git a/classes/bfw/mvc/model/TUser.php b/classes/bfw/mvc/model/TUser.php --- a/classes/bfw/mvc/model/TUser.php +++ b/classes/bfw/mvc/model/TUser.php @@ -1,103 +1,110 @@ data = array( + 'id' => NULL, + 'group_id' => TGroup::SYSTEM, + 'username' => '', + 'firstname' => '', + 'lastname' => '', + 'password' => '', + ); + } /** - * Class TUser + * Liefert eine User-Instanz für den per Parameter übergebenen Nutzernamen. * - * @method string getUsername() - * @method int getGroup_Id() - * @method string getPassword() - * @method string getFirstname() - * @method string getLastname() - * @method setUsername() - * @method setGroup_Id() - * @method setPassword() - * @method setFirstname() - * @method setLastname() + * @param $username + * @return array|null */ - class TUser extends Model { - private static $logger = null; + public function findByUsername($username) { + $this->data = $this->db->findByField($this->table, 'username', $username); - const SYSTEM = 1; - - public function __construct() { - parent::__construct('t_user'); - - self::$logger = \Logger::getLogger('__CLASS__'); - - $this->data = array( - 'id' => NULL, - 'group_id' => TUser::SYSTEM, - 'username' => '', - 'firstname' => '', - 'lastname' => '', - 'password' => '', - ); + if ($this->data == null) { + return null; } - /** - * Liefert eine User-Instanz für den per Parameter übergebenen Nutzernamen. - * - * @param $username - * @return array|null - */ - public function findByUsername($username) { - $this->data = $this->db->findByField($this->table, 'username', $username); + return $this; + } - if ($this->data == null) { - return null; - } + /** + * Liefert den formatierten Nutzernamen zur übergebenen Nutzer-Id + * + * @param $user_id + * @return string + */ + public function getFormattedUsername($user_id) { + $user = $this->find($user_id); - return $this; + if (!is_object($user)) { + return 'Unbekannt, Unbekannt'; } - /** - * Liefert den formatierten Nutzernamen zur übergebenen Nutzer-Id - * - * @param $user_id - * @return string - */ - public function getFormattedUsername($user_id) { - $user = $this->find($user_id); - return sprintf("%s, %s", $user->getLastname(), $user->getFirstname()); - } + return sprintf("%s, %s", $user->getLastname(), $user->getFirstname()); + } - /** - * FindMethode für alle Manager und Darunter - * - * @return array|null - */ - public function findAllManagersAndBelow() { - $managers = $this->db->query(sprintf(" + /** + * FindMethode für alle Manager und Darunter + * + * @return array|null + */ + public function findAllManagersAndBelow() { + $managers = $this->db->query(sprintf(" SELECT * FROM `%s` WHERE `group_id` in (3,4,5)", - $this->table)); + $this->table)); - $list = array(); - foreach ($managers as $manager) { - $item = new static(); - $item->data = $manager; + $list = array(); + foreach ($managers as $manager) { + $item = new static(); + $item->data = $manager; - $list[] = $item; - } - - return $list; + $list[] = $item; } - /** - * liefert den PK des nächst freien Supporters oder - * im Falle von nicht vorhandenen Supportern den System-Datensatz - * - * @return int - */ - public function getFreeSupporterId() { + return $list; + } - $sql = sprintf(" + /** + * liefert den PK des nächst freien Supporters oder + * im Falle von nicht vorhandenen Supportern den System-Datensatz + * + * @return int + */ + public function getFreeSupporterId() { + + $sql = sprintf(" SELECT u.id, COUNT(t.user_id) AS `count` @@ -113,25 +120,25 @@ `count` ASC "); - $data = $this->db->query($sql); + $data = $this->db->query($sql); - if ($data == null) { - // Ich will hier definitiv immer eine gültige ID haben, also einen PK - return 1; - } - - self::$logger->info(sprintf("Data: %s", print_r($data, true))); - - return $data[0]['id']; + if ($data == null) { + // Ich will hier definitiv immer eine gültige ID haben, also einen PK + return 1; } - /** - * Anzahl der Tickets eines Benutzers - * - * @return mixed - */ - public function getTicketCount() { - $sql = sprintf(" + self::$logger->info(sprintf("Data: %s", print_r($data, true))); + + return $data[0]['id']; + } + + /** + * Anzahl der Tickets eines Benutzers + * + * @return mixed + */ + public function getTicketCount() { + $sql = sprintf(" SELECT count(*) as anzahl FROM @@ -140,10 +147,9 @@ user_id = %d ", $this->getId()); - $data = $this->db->query($sql); + $data = $this->db->query($sql); - return $data[0]['anzahl']; - } + return $data[0]['anzahl']; + } - } } \ No newline at end of file diff --git a/classes/bfw/mvc/model/TView.php b/classes/bfw/mvc/model/TView.php --- a/classes/bfw/mvc/model/TView.php +++ b/classes/bfw/mvc/model/TView.php @@ -1,58 +1,54 @@ data)) { - return $this->data[$key]; - } + if ($prefix == 'get') { + if (array_key_exists($key, $this->data)) { + return $this->data[$key]; } - - exit(sprintf('Unbekannte Methode %s(%s, %s) wurde aufgerufen.', $methodName, $key, $prefix)); } - /** - * @param $id - * @param $object - * @return bool - */ - public function store($id, $object) { - return false; - } + exit(sprintf('Unbekannte Methode %s(%s, %s) wurde aufgerufen.', $methodName, $key, $prefix)); + } + + /** + * @return bool + */ + public function store() { + return false; + } - /** - * @param $id - * @return bool - */ - public function delete($id) { - return false; - } + /** + * @return bool + */ + public function delete() { + return false; + } - /** - * @param $id - * @param $object - * @return bool - */ - public function persist($id, $object) { - return false; - } + /** + * @return bool + */ + public function persist() { + return false; } } \ No newline at end of file