diff options
author | Philip Häusler <msquare@notrademark.de> | 2013-10-13 00:52:44 +0200 |
---|---|---|
committer | Philip Häusler <msquare@notrademark.de> | 2013-10-13 00:52:44 +0200 |
commit | 3c4321ff76accb98ec3c99316766234ebcafae90 (patch) | |
tree | 7461bf942302ec3344a5006f3d40c49963ac28dc | |
parent | bfb0cacd541cc20129a3c0ac77130370741dca18 (diff) |
30c3 theme
34 files changed, 574 insertions, 1263 deletions
diff --git a/db/install.sql b/db/install.sql index 0be9b891..a03d6e50 100644 --- a/db/install.sql +++ b/db/install.sql @@ -1230,7 +1230,7 @@ CREATE TABLE IF NOT EXISTS `User` ( -- INSERT INTO `User` (`UID`, `Nick`, `Name`, `Vorname`, `Alter`, `Telefon`, `DECT`, `Handy`, `email`, `ICQ`, `jabber`, `Size`, `Passwort`, `Gekommen`, `Aktiv`, `Tshirt`, `color`, `Sprache`, `Avatar`, `Menu`, `lastLogIn`, `CreateDate`, `Art`, `kommentar`, `Hometown`, `api_key`) VALUES -(1, 'admin', 'Gates', 'Bill', 42, '', '', '', '', '', '', '', '$23PstrXfk7Nw', 1, 1, 0, 10, 'DE', 115, 'L', 1371899094, '0000-00-00 00:00:00', '', '', '', ''); +(1, 'admin', 'Gates', 'Bill', 42, '', '', '', '', '', '', '', '$23PstrXfk7Nw', 1, 1, 0, 1, 'DE', 115, 'L', 1371899094, '0000-00-00 00:00:00', '', '', '', ''); -- -------------------------------------------------------- diff --git a/includes/controller/shifts_controller.php b/includes/controller/shifts_controller.php index 1cd7b5d6..0ffc3c75 100644 --- a/includes/controller/shifts_controller.php +++ b/includes/controller/shifts_controller.php @@ -1,25 +1,26 @@ <?php /** - * Export filtered shifts via JSON. (Like iCal Export or shifts view) + * Export filtered shifts via JSON. + * (Like iCal Export or shifts view) */ function shifts_json_export_controller() { global $ical_shifts, $user; - if (isset ($_REQUEST['key']) && preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) + if (isset($_REQUEST['key']) && preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) $key = $_REQUEST['key']; else die("Missing key."); $user = User_by_api_key($key); - if($user === false) + if ($user === false) die("Unable to find user."); - if($user == null) + if ($user == null) die("Key invalid."); - if(!in_array('shifts_json_export', privileges_for_user($user['UID']))) + if (! in_array('shifts_json_export', privileges_for_user($user['UID']))) die("No privilege for shifts_json_export."); - if (isset ($_REQUEST['export']) && $_REQUEST['export'] == 'user_shifts') { + if (isset($_REQUEST['export']) && $_REQUEST['export'] == 'user_shifts') { require_once ('includes/pages/user_shifts.php'); view_user_shifts(); } else { diff --git a/includes/helper/error_helper.php b/includes/helper/error_helper.php index d26485d6..b4b4f248 100644 --- a/includes/helper/error_helper.php +++ b/includes/helper/error_helper.php @@ -2,6 +2,7 @@ /** * Displays a fatal message and stops execution. + * * @param string $message */ function engelsystem_error($message) { diff --git a/includes/helper/message_helper.php b/includes/helper/message_helper.php index c582c5b1..9bb78a05 100644 --- a/includes/helper/message_helper.php +++ b/includes/helper/message_helper.php @@ -4,7 +4,7 @@ * Gibt zwischengespeicherte Fehlermeldungen zurück und löscht den Zwischenspeicher */ function msg() { - if (!isset ($_SESSION['msg'])) + if (! isset($_SESSION['msg'])) return ""; $msg = $_SESSION['msg']; $_SESSION['msg'] = ""; @@ -20,7 +20,7 @@ function info($msg, $immediatly = false) { return ""; return '<p class="info">' . $msg . '</p>'; } else { - if (!isset ($_SESSION['msg'])) + if (! isset($_SESSION['msg'])) $_SESSION['msg'] = ""; $_SESSION['msg'] .= info($msg, true); } @@ -35,7 +35,7 @@ function error($msg, $immediatly = false) { return ""; return '<p class="error">' . $msg . '</p>'; } else { - if (!isset ($_SESSION['msg'])) + if (! isset($_SESSION['msg'])) $_SESSION['msg'] = ""; $_SESSION['msg'] .= error($msg, true); } @@ -50,7 +50,7 @@ function success($msg, $immediatly = false) { return ""; return '<p class="success">' . $msg . '</p>'; } else { - if (!isset ($_SESSION['msg'])) + if (! isset($_SESSION['msg'])) $_SESSION['msg'] = ""; $_SESSION['msg'] .= success($msg, true); } diff --git a/includes/model/LogEntries_model.php b/includes/model/LogEntries_model.php index 1fa97356..30e2b58c 100644 --- a/includes/model/LogEntries_model.php +++ b/includes/model/LogEntries_model.php @@ -2,8 +2,10 @@ /** * Creates a log entry. + * * @param $nick Username - * @param $message Log Message + * @param $message Log + * Message */ function LogEntry_create($nick, $message) { return sql_query("INSERT INTO `LogEntries` SET `timestamp`=" . sql_escape(time()) . ", `nick`='" . sql_escape($nick) . "', `message`='" . sql_escape($message) . "'"); @@ -13,8 +15,7 @@ function LogEntry_create($nick, $message) { * Returns log entries of the last 24 hours with maximum count of 1000. */ function LogEntries() { - return sql_select("SELECT * FROM `LogEntries` WHERE `timestamp` > " . (time() - 24*60*60) . " ORDER BY `timestamp` DESC LIMIT 1000"); + return sql_select("SELECT * FROM `LogEntries` WHERE `timestamp` > " . (time() - 24 * 60 * 60) . " ORDER BY `timestamp` DESC LIMIT 1000"); } - ?>
\ No newline at end of file diff --git a/includes/model/Sprache_model.php b/includes/model/Sprache_model.php index 55683411..0b18dbca 100644 --- a/includes/model/Sprache_model.php +++ b/includes/model/Sprache_model.php @@ -2,17 +2,23 @@ /** * Load a string by key. + * * @param string $textid * @param string $sprache */ function Sprache($textid, $sprache) { - $sprache_source = sql_select("SELECT * FROM `Sprache` WHERE `TextID`='" . sql_escape($textid) . "' AND `Sprache`='" . sql_escape($sprache) . "' LIMIT 1"); - if($sprache_source === false) + $sprache_source = sql_select(" + SELECT * + FROM `Sprache` + WHERE `TextID`='" . sql_escape($textid) . "' + AND `Sprache`='" . sql_escape($sprache) . "' + LIMIT 1 + "); + if ($sprache_source === false) return false; - if(count($sprache_source) == 1) + if (count($sprache_source) == 1) return $sprache_source[0]; return null; } - ?>
\ No newline at end of file diff --git a/includes/model/User_model.php b/includes/model/User_model.php index 7eb31e8e..884aeae8 100644 --- a/includes/model/User_model.php +++ b/includes/model/User_model.php @@ -1,25 +1,29 @@ <?php + /** * Returns user by id. + * * @param $id UID */ function User($id) { $user_source = sql_select("SELECT * FROM `User` WHERE `UID`=" . sql_escape($id) . " LIMIT 1"); - if($user_source === false) + if ($user_source === false) return false; - if(count($user_source) > 0) + if (count($user_source) > 0) return $user_source[0]; return null; } /** * Returns User by api_key. - * @param string $api_key User api key + * + * @param string $api_key + * User api key * @return Matching user, null or false on error */ function User_by_api_key($api_key) { $user = sql_select("SELECT * FROM `User` WHERE `api_key`='" . sql_escape($api_key) . "' LIMIT 1"); - if($user === false) + if ($user === false) return false; if (count($user) == 0) return null; @@ -28,12 +32,13 @@ function User_by_api_key($api_key) { /** * Generates a new api key for given user. + * * @param User $user */ function User_reset_api_key(&$user) { $user['api_key'] = md5($user['Nick'] . time() . rand()); $result = sql_query("UPDATE `User` SET `api_key`='" . sql_escape($user['api_key']) . "' WHERE `UID`='" . sql_escape($user['UID']) . "' LIMIT 1"); - if($result === false) + if ($result === false) return false; engelsystem_log("API key resetted."); } diff --git a/includes/mysql_provider.php b/includes/mysql_provider.php index d9e78fb4..9f901a40 100644 --- a/includes/mysql_provider.php +++ b/includes/mysql_provider.php @@ -15,7 +15,7 @@ function sql_close() { function sql_transaction_start() { global $sql_nested_transaction_level; - if($sql_nested_transaction_level++ == 0) + if ($sql_nested_transaction_level ++ == 0) return sql_query("BEGIN"); else return true; @@ -27,7 +27,7 @@ function sql_transaction_start() { function sql_transaction_commit() { global $sql_nested_transaction_level; - if(--$sql_nested_transaction_level == 0) + if (-- $sql_nested_transaction_level == 0) return sql_query("COMMIT"); else return true; @@ -39,7 +39,7 @@ function sql_transaction_commit() { function sql_transaction_rollback() { global $sql_nested_transaction_level; - if(--$sql_nested_transaction_level == 0) + if (-- $sql_nested_transaction_level == 0) return sql_query("ROLLBACK"); else return true; @@ -47,6 +47,7 @@ function sql_transaction_rollback() { /** * Logs an sql error. + * * @param string $message * @return false */ @@ -63,10 +64,15 @@ function sql_error($message) { /** * Connect to mysql server. - * @param string $host Host - * @param string $user Username - * @param string $pass Password - * @param string $db DB to select + * + * @param string $host + * Host + * @param string $user + * Username + * @param string $pass + * Password + * @param string $db + * DB to select * @return mysqli The connection handler */ function sql_connect($host, $user, $pass, $db) { @@ -89,18 +95,21 @@ function sql_connect($host, $user, $pass, $db) { /** * Change the selected db in current mysql-connection. - * @param $db_name + * + * @param + * $db_name * @return bool true on success, false on error */ function sql_select_db($db_name) { global $sql_connection; - if (!$sql_connection->select_db($db_name)) + if (! $sql_connection->select_db($db_name)) return sql_error("No database selected."); return true; } /** * MySQL SELECT query + * * @param string $query * @return Result array or false on error */ @@ -119,8 +128,9 @@ function sql_select($query) { /** * MySQL execute a query + * * @param string $query - * @return mysqli_result|boolean Result resource or false on error + * @return mysqli_result boolean resource or false on error */ function sql_query($query) { global $sql_connection; @@ -129,7 +139,7 @@ function sql_query($query) { if ($result) { return $result; } else - usr_error("MySQL-query error: " . $query . " (" . $sql_connection->errno . ") " . $sql_connection->error); + return sql_error("MySQL-query error: " . $query . " (" . $sql_connection->errno . ") " . $sql_connection->error); } /** @@ -165,12 +175,12 @@ function sql_num_query($query) { } function sql_select_single_col($query) { - $result = sql_select($query); - return array_map('array_shift', $result); + $result = sql_select($query); + return array_map('array_shift', $result); } function sql_select_single_cell($query) { - return array_shift(array_shift(sql_select($query))); + return array_shift(array_shift(sql_select($query))); } ?> diff --git a/includes/sys_auth.php b/includes/sys_auth.php index a2fd98d8..9718f0c0 100644 --- a/includes/sys_auth.php +++ b/includes/sys_auth.php @@ -1,110 +1,109 @@ <?php - // Testet ob ein User eingeloggt ist und lädt die entsprechenden Privilegien function load_auth() { - global $user, $privileges; - - $user = null; - if (isset ($_SESSION['uid'])) { - $user = sql_select("SELECT * FROM `User` WHERE `UID`=" . sql_escape($_SESSION['uid']) . " LIMIT 1"); - if (count($user) > 0) { - // User ist eingeloggt, Datensatz zur Verfügung stellen und Timestamp updaten - list ($user) = $user; - sql_query("UPDATE `User` SET " . "`lastLogIn` = '" . time() . "'" . " WHERE `UID` = '" . sql_escape($_SESSION['uid']) . "' LIMIT 1;"); - } else - unset ($_SESSION['uid']); - } - - $privileges = isset ($user) ? privileges_for_user($user['UID']) : privileges_for_group(-1); + global $user, $privileges; + + $user = null; + if (isset($_SESSION['uid'])) { + $user = sql_select("SELECT * FROM `User` WHERE `UID`=" . sql_escape($_SESSION['uid']) . " LIMIT 1"); + if (count($user) > 0) { + // User ist eingeloggt, Datensatz zur Verfügung stellen und Timestamp updaten + list ($user) = $user; + sql_query("UPDATE `User` SET " . "`lastLogIn` = '" . time() . "'" . " WHERE `UID` = '" . sql_escape($_SESSION['uid']) . "' LIMIT 1;"); + } else + unset($_SESSION['uid']); + } + + $privileges = isset($user) ? privileges_for_user($user['UID']) : privileges_for_group(- 1); } // generate a salt (random string) of arbitrary length suitable for the use with crypt() function generate_salt($length = 16) { - $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - $salt = ""; - for ($i = 0; $i < $length; $i++) { - $salt .= $alphabet[rand(0, strlen($alphabet)-1)]; - } - return $salt; + $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + $salt = ""; + for($i = 0; $i < $length; $i ++) { + $salt .= $alphabet[rand(0, strlen($alphabet) - 1)]; + } + return $salt; } // set the password of a user function set_password($uid, $password) { - return sql_query("UPDATE `User` SET `Passwort` = '" . sql_escape(crypt($password, CRYPT_ALG . '$' . generate_salt(16) . '$')) . "' WHERE `UID` = " . intval($uid) . " LIMIT 1"); + return sql_query("UPDATE `User` SET `Passwort` = '" . sql_escape(crypt($password, CRYPT_ALG . '$' . generate_salt(16) . '$')) . "' WHERE `UID` = " . intval($uid) . " LIMIT 1"); } // verify a password given a precomputed salt. // if $uid is given and $salt is an old-style salt (plain md5), we convert it automatically function verify_password($password, $salt, $uid = false) { - $correct = false; - if (substr($salt, 0, 1) == '$') // new-style crypt() - $correct = crypt($password, $salt) == $salt; - elseif (substr($salt, 0, 7) == '{crypt}') // old-style crypt() with DES and static salt - not used anymore - $correct = crypt($password, '77') == $salt; - elseif (strlen($salt) == 32) // old-style md5 without salt - not used anymore - $correct = md5($password) == $salt; - - if($correct && substr($salt, 0, strlen(CRYPT_ALG)) != CRYPT_ALG && $uid) { - // this password is stored in another format than we want it to be. - // let's update it! - // we duplicate the query from the above set_password() function to have the extra safety of checking the old hash - sql_query("UPDATE `User` SET `Passwort` = '" . sql_escape(crypt($password, CRYPT_ALG . '$' . generate_salt() . '$')) . "' WHERE `UID` = " . intval($uid) . " AND `Passwort` = '" . sql_escape($salt) . "' LIMIT 1"); - } - return $correct; + $correct = false; + if (substr($salt, 0, 1) == '$') // new-style crypt() + $correct = crypt($password, $salt) == $salt; + elseif (substr($salt, 0, 7) == '{crypt}') // old-style crypt() with DES and static salt - not used anymore + $correct = crypt($password, '77') == $salt; + elseif (strlen($salt) == 32) // old-style md5 without salt - not used anymore + $correct = md5($password) == $salt; + + if ($correct && substr($salt, 0, strlen(CRYPT_ALG)) != CRYPT_ALG && $uid) { + // this password is stored in another format than we want it to be. + // let's update it! + // we duplicate the query from the above set_password() function to have the extra safety of checking the old hash + sql_query("UPDATE `User` SET `Passwort` = '" . sql_escape(crypt($password, CRYPT_ALG . '$' . generate_salt() . '$')) . "' WHERE `UID` = " . intval($uid) . " AND `Passwort` = '" . sql_escape($salt) . "' LIMIT 1"); + } + return $correct; } // JSON Authorisierungs-Schnittstelle function json_auth_service() { - global $CurrentExternAuthPass; - - header("Content-Type: application/json"); - - $User = $_REQUEST['user']; - $Pass = $_REQUEST['pw']; - $SourceOuth = $_REQUEST['so']; - - if (isset ($CurrentExternAuthPass) && $SourceOuth == $CurrentExternAuthPass) { - $sql = "SELECT `UID`, `Passwort` FROM `User` WHERE `Nick`='" . sql_escape($User) . "'"; - $Erg = sql_select($sql); - - if (count($Erg) == 1) { - $Erg = $Erg[0]; - if (verify_password($Pass, $Erg["Passwort"], $Erg["UID"])) { - $user_privs = sql_select("SELECT `Privileges`.`name` FROM `User` JOIN `UserGroups` ON (`User`.`UID` = `UserGroups`.`uid`) JOIN `GroupPrivileges` ON (`UserGroups`.`group_id` = `GroupPrivileges`.`group_id`) JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) WHERE `User`.`UID`=" . sql_escape($UID) . ";"); - foreach ($user_privs as $user_priv) - $privileges[] = $user_priv['name']; - - $msg = array ( - 'status' => 'success', - 'rights' => $privileges - ); - echo json_encode($msg); - die(); - } - } - } - - echo json_encode(array ( - 'status' => 'failed', - 'error' => "JSON Service GET syntax: https://engelsystem.de/?auth&user=<user>&pw=<password>&so=<key>, POST is possible too" - )); - die(); + global $CurrentExternAuthPass; + + header("Content-Type: application/json"); + + $User = $_REQUEST['user']; + $Pass = $_REQUEST['pw']; + $SourceOuth = $_REQUEST['so']; + + if (isset($CurrentExternAuthPass) && $SourceOuth == $CurrentExternAuthPass) { + $sql = "SELECT `UID`, `Passwort` FROM `User` WHERE `Nick`='" . sql_escape($User) . "'"; + $Erg = sql_select($sql); + + if (count($Erg) == 1) { + $Erg = $Erg[0]; + if (verify_password($Pass, $Erg["Passwort"], $Erg["UID"])) { + $user_privs = sql_select("SELECT `Privileges`.`name` FROM `User` JOIN `UserGroups` ON (`User`.`UID` = `UserGroups`.`uid`) JOIN `GroupPrivileges` ON (`UserGroups`.`group_id` = `GroupPrivileges`.`group_id`) JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) WHERE `User`.`UID`=" . sql_escape($UID) . ";"); + foreach ($user_privs as $user_priv) + $privileges[] = $user_priv['name']; + + $msg = array ( + 'status' => 'success', + 'rights' => $privileges + ); + echo json_encode($msg); + die(); + } + } + } + + echo json_encode(array ( + 'status' => 'failed', + 'error' => "JSON Service GET syntax: https://engelsystem.de/?auth&user=<user>&pw=<password>&so=<key>, POST is possible too" + )); + die(); } function privileges_for_user($user_id) { - $privileges = array (); - $user_privs = sql_select("SELECT `Privileges`.`name` FROM `User` JOIN `UserGroups` ON (`User`.`UID` = `UserGroups`.`uid`) JOIN `GroupPrivileges` ON (`UserGroups`.`group_id` = `GroupPrivileges`.`group_id`) JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) WHERE `User`.`UID`=" . sql_escape($user_id) . ";"); - foreach ($user_privs as $user_priv) - $privileges[] = $user_priv['name']; - return $privileges; + $privileges = array (); + $user_privs = sql_select("SELECT `Privileges`.`name` FROM `User` JOIN `UserGroups` ON (`User`.`UID` = `UserGroups`.`uid`) JOIN `GroupPrivileges` ON (`UserGroups`.`group_id` = `GroupPrivileges`.`group_id`) JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) WHERE `User`.`UID`=" . sql_escape($user_id) . ";"); + foreach ($user_privs as $user_priv) + $privileges[] = $user_priv['name']; + return $privileges; } function privileges_for_group($group_id) { - $privileges = array (); - $groups_privs = sql_select("SELECT * FROM `GroupPrivileges` JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) WHERE `group_id`=" . sql_escape($group_id)); - foreach ($groups_privs as $guest_priv) - $privileges[] = $guest_priv['name']; - return $privileges; + $privileges = array (); + $groups_privs = sql_select("SELECT * FROM `GroupPrivileges` JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) WHERE `group_id`=" . sql_escape($group_id)); + foreach ($groups_privs as $guest_priv) + $privileges[] = $guest_priv['name']; + return $privileges; } ?> diff --git a/includes/sys_counter.php b/includes/sys_counter.php index abcb652b..40110165 100644 --- a/includes/sys_counter.php +++ b/includes/sys_counter.php @@ -1,10 +1,11 @@ <?php + function counter() { - global $p; + global $p; - if (sql_num_query("SELECT `Anz` FROM `Counter` WHERE `URL`='" . sql_escape($p) . "'") == 0) - sql_query("INSERT INTO `Counter` ( `URL` , `Anz` ) VALUES ('" . sql_escape($p) . "', '1');"); - else - sql_query("UPDATE `Counter` SET `Anz` = `Anz` + 1 WHERE `URL` = '" . sql_escape($p) . "' LIMIT 1 ;"); + if (sql_num_query("SELECT `Anz` FROM `Counter` WHERE `URL`='" . sql_escape($p) . "'") == 0) + sql_query("INSERT INTO `Counter` ( `URL` , `Anz` ) VALUES ('" . sql_escape($p) . "', '1');"); + else + sql_query("UPDATE `Counter` SET `Anz` = `Anz` + 1 WHERE `URL` = '" . sql_escape($p) . "' LIMIT 1 ;"); } ?> diff --git a/includes/sys_log.php b/includes/sys_log.php index 65c0aa41..60c765c0 100644 --- a/includes/sys_log.php +++ b/includes/sys_log.php @@ -1,13 +1,16 @@ <?php /** - * Write a log entry. This should be used to log user's activity. - * @param $message + * Write a log entry. + * This should be used to log user's activity. + * + * @param + * $message */ function engelsystem_log($message) { global $user; - if(isset($user)) { + if (isset($user)) { $nick = $user['Nick']; } else { $nick = "Guest"; @@ -16,4 +19,23 @@ function engelsystem_log($message) { LogEntry_create($nick, $message); } +/** + * Generates a PHP Stacktrace. + */ +function debug_string_backtrace() { + ob_start(); + debug_print_backtrace(); + $trace = ob_get_contents(); + ob_end_clean(); + + // Remove first item from backtrace as it's this function which + // is redundant. + $trace = preg_replace('/^#0\s+' . __FUNCTION__ . "[^\n]*\n/", '', $trace, 1); + + // Renumber backtrace items. + $trace = preg_replace('/^#(\d+)/me', '\'#\' . ($1 - 1)', $trace); + + return $trace; +} + ?>
\ No newline at end of file diff --git a/includes/sys_menu.php b/includes/sys_menu.php index 5c69be39..f2611397 100644 --- a/includes/sys_menu.php +++ b/includes/sys_menu.php @@ -1,89 +1,109 @@ <?php + function page_link_to($page) { - return '?p=' . $page; + return '?p=' . $page; } function page_link_to_absolute($page) { - return (isset ($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . preg_replace("/\?.*$/", '', $_SERVER['REQUEST_URI']) . page_link_to($page); + return (isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . preg_replace("/\?.*$/", '', $_SERVER['REQUEST_URI']) . page_link_to($page); +} + +/** + * Renders the header toolbar containing search, login/logout, user and settings links. + */ +function header_toolbar() { + global $p, $privileges, $user; + + $toolbar_items = array(); + + if(in_array('register', $privileges)) + $toolbar_items[] = toolbar_item_link(page_link_to('register'), 'register', "Register", $p == 'register'); + + if(in_array('user_myshifts', $privileges)) + $toolbar_items[] = toolbar_item_link(page_link_to('user_myshifts'), 'engel', $user['Nick'], $p == 'user_myshifts'); + + if(in_array('user_settings', $privileges)) + $toolbar_items[] = toolbar_item_link(page_link_to('user_settings'), 'settings', "Settings", $p == 'user_settings'); + + if(in_array('login', $privileges)) + $toolbar_items[] = toolbar_item_link(page_link_to('login'), 'login', "Login", $p == 'login'); + + if(in_array('logout', $privileges)) + $toolbar_items[] = toolbar_item_link(page_link_to('logout'), 'logout', "Logout", $p == 'logout'); + + return toolbar($toolbar_items); } function make_navigation() { - global $p; - global $privileges; - $menu_items = $privileges; - $menu_items[] = "faq"; - $menu = ""; - - // Standard Navigation - $menu .= make_navigation_for(Get_Text('/'), array ( - "login", - "logout", - "register", - "faq" - )); - - // Engel Navigation - $menu .= make_navigation_for(Get_Text('inc_schicht_engel'), array ( - "news", - "user_meetings", - "user_myshifts", - "user_shifts", - "user_messages", - "user_questions", - "user_wakeup", - "user_settings" - )); - - // Admin Navigation - $menu .= make_navigation_for(Get_Text('admin/'), array ( - "admin_arrive", - "admin_active", - "admin_user", - "admin_free", - "admin_usershifts", - "admin_questions", - "admin_angel_types", - "admin_user_angeltypes", - "admin_shifts", - "admin_rooms", - "admin_groups", - "admin_faq", - "admin_language", - "admin_import", - "admin_log" - )); - return $menu; + global $p; + global $privileges; + $menu = ""; + + $specials = array( + "faq" + ); + + $pages = array( + "news", + "user_meetings", + "user_myshifts", + "user_shifts", + "user_messages", + "user_questions", + "user_wakeup", + "admin_arrive", + "admin_active", + "admin_user", + "admin_free", + "admin_usershifts", + "admin_questions", + "admin_angel_types", + "admin_user_angeltypes", + "admin_shifts", + "admin_rooms", + "admin_groups", + "admin_faq", + "admin_language", + "admin_import", + "admin_log" + ); + + foreach ($pages as $page) + if (in_array($page, $privileges) || in_array($page, $specials)) + $menu .= '<li' . ($page == $p ? ' class="selected"' : '') . '><a href="' . page_link_to($page) . '">' . Get_Text($page) . '</a></li>'; + + return '<nav><ul>' . $menu . '</ul></nav>'; } function make_navigation_for($name, $pages) { - global $privileges, $p; + global $privileges, $p; - $specials = array ( - "faq" - ); + $specials = array( + "faq" + ); - $menu = ""; - foreach ($pages as $page) - if (in_array($page, $privileges) || in_array($page, $specials)) - $menu .= '<li' . ($page == $p ? ' class="selected"' : '') . '><a href="' . page_link_to($page) . '">' . Get_Text($page) . '</a></li>'; + $menu = ""; + foreach ($pages as $page) + if (in_array($page, $privileges) || in_array($page, $specials)) + $menu .= '<li' . ($page == $p ? ' class="selected"' : '') . '><a href="' . page_link_to($page) . '">' . Get_Text($page) . '</a></li>'; - if ($menu != "") - $menu = '<nav class="container"><h4>' . $name . '</h4><ul class="content">' . $menu . '</ul></nav>'; - return $menu; + if ($menu != "") + $menu = '<nav class="container"><h4>' . $name . '</h4><ul class="content">' . $menu . '</ul></nav>'; + return $menu; } function make_menu() { - return make_navigation() . make_langselect(); + return make_navigation() . make_langselect(); } function make_langselect() { - if (strpos($_SERVER["REQUEST_URI"], "?") > 0) - $URL = $_SERVER["REQUEST_URI"] . "&SetLanguage="; - else - $URL = $_SERVER["REQUEST_URI"] . "?SetLanguage="; - - $html = '<p class="content"><a class="sprache" href="' . htmlspecialchars($URL) . 'DE"><img src="pic/flag/de.png" alt="DE" title="Deutsch"></a>'; - $html .= '<a class="sprache" href="' . htmlspecialchars($URL) . 'EN"><img src="pic/flag/en.png" alt="EN" title="English"></a></p>'; - return '<nav class="container"><h4>' . Get_Text("Sprache") . '</h4>' . $html . '</nav>'; + if (strpos($_SERVER["REQUEST_URI"], "?") > 0) + $URL = $_SERVER["REQUEST_URI"] . "&SetLanguage="; + else + $URL = $_SERVER["REQUEST_URI"] . "?SetLanguage="; + + $html = '<p class="content"><a class="sprache" href="' . htmlspecialchars($URL) . 'DE"><img src="pic/flag/de.png" alt="DE" title="Deutsch"></a>'; + $html .= '<a class="sprache" href="' . htmlspecialchars($URL) . 'EN"><img src="pic/flag/en.png" alt="EN" title="English"></a></p>'; + return '<nav class="container"><h4>' . Get_Text("Sprache") . '</h4>' . $html . '</nav>'; } ?> diff --git a/includes/sys_page.php b/includes/sys_page.php index a49e76cb..f9ee0ea6 100644 --- a/includes/sys_page.php +++ b/includes/sys_page.php @@ -1,49 +1,49 @@ <?php - /** * Leitet den Browser an die übergebene URL weiter und hält das Script an. */ function redirect($to) { - header("Location: " . $to, true, 302); - die(); + header("Location: " . $to, true, 302); + die(); } /** * Gibt den gefilterten REQUEST Wert ohne Zeilenumbrüche zurück */ function strip_request_item($name) { - return strip_item($_REQUEST[$name]); + return strip_item($_REQUEST[$name]); } /** - * Testet, ob der angegebene REQUEST Wert ein Integer ist, bzw. eine ID sein könnte. + * Testet, ob der angegebene REQUEST Wert ein Integer ist, bzw. + * eine ID sein könnte. */ function test_request_int($name) { - if (isset ($_REQUEST[$name])) - return preg_match("/^[0-9]*$/", $_REQUEST[$name]); - return false; + if (isset($_REQUEST[$name])) + return preg_match("/^[0-9]*$/", $_REQUEST[$name]); + return false; } /** * Gibt den gefilterten REQUEST Wert mit Zeilenumbrüchen zurück */ function strip_request_item_nl($name) { - return preg_replace("/([^\p{L}\p{S}\p{P}\p{Z}\p{N}+\n]{1,})/ui", '', strip_tags($_REQUEST[$name])); + return preg_replace("/([^\p{L}\p{S}\p{P}\p{Z}\p{N}+\n]{1,})/ui", '', strip_tags($_REQUEST[$name])); } /** * Entfernt unerwünschte Zeichen */ function strip_item($item) { - return preg_replace("/([^\p{L}\p{S}\p{P}\p{Z}\p{N}+]{1,})/ui", '', strip_tags($item)); + return preg_replace("/([^\p{L}\p{S}\p{P}\p{Z}\p{N}+]{1,})/ui", '', strip_tags($item)); } /** * Überprüft eine E-Mail-Adresse. */ function check_email($email) { - return (bool) preg_match("#^([a-zA-Z0-9_+\-])+(\.([a-zA-Z0-9_+\-])+)*@((\[(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))\]))|((([\p{L}0-9])+(([\-])+([\p{L}0-9])+)*\.)+([\p{L}])+(([\-])+([\p{L}0-9])+)*))$#u", $email); + return (bool) preg_match("#^([a-zA-Z0-9_+\-])+(\.([a-zA-Z0-9_+\-])+)*@((\[(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))\]))|((([\p{L}0-9])+(([\-])+([\p{L}0-9])+)*\.)+([\p{L}])+(([\-])+([\p{L}0-9])+)*))$#u", $email); } ?> diff --git a/includes/sys_template.php b/includes/sys_template.php index e15af7f8..a7662e84 100644 --- a/includes/sys_template.php +++ b/includes/sys_template.php @@ -1,29 +1,46 @@ <?php - /** * Liste der verfügbaren Themes */ -$themes = array ( - "1" => "Standard-Style", - "2" => "ot/Gelber Style", - "3" => "Club-Mate Style", - "5" => "Debian Style", - "6" => "c-base Style", - "7" => "Blau/Gelber Style", - "8" => "Pastel Style", - "4" => "Test Style", - "9" => "Test Style 21c3", - "10" => "Engelsystem 2.0", - "11" => "msquare (29c3)" +$themes = array( + "1" => "30C3 light", + "2" => "30C3 dark" ); /** + * Render a toolbar. + * + * @param array $items + * @return string + */ +function toolbar($items = array()) { + return '<div class="toolbar">' . join("\n", $items) . '</div>'; +} + +/** + * Render a link for a toolbar. + * @param string $href + * @param string $class + * @param string $label + * @param bool $selected + * @return string + */ +function toolbar_item_link($href, $class, $label, $selected = false) { + return '<a href="' . $href . '" class="' . ($selected ? 'selected ' : '') . '' . $class . '">' . $label . '</a>'; +} + +/** * Rendert eine Liste von Checkboxen für ein Formular - * @param name Die Namen der Checkboxen werden aus name_key gebildet - * @param label Die Beschriftung der Liste - * @param items Array mit den einzelnen Checkboxen - * @param selected Array mit den Keys, die ausgewählt sind + * + * @param + * name Die Namen der Checkboxen werden aus name_key gebildet + * @param + * label Die Beschriftung der Liste + * @param + * items Array mit den einzelnen Checkboxen + * @param + * selected Array mit den Keys, die ausgewählt sind */ function form_checkboxes($name, $label, $items, $selected) { $html = "<ul>"; @@ -38,11 +55,17 @@ function form_checkboxes($name, $label, $items, $selected) { /** * Rendert eine Tabelle von Checkboxen für ein Formular - * @param names Assoziatives Array mit Namen der Checkboxen als Keys und Überschriften als Values - * @param label Die Beschriftung der gesamten Tabelle - * @param items Array mit den Beschriftungen der Zeilen - * @param selected Mehrdimensionales Array, wobei $selected[foo] ein Array der in der Datenreihe foo markierten Checkboxen ist - * @param disabled Wie selected, nur dass die entsprechenden Checkboxen deaktiviert statt markiert sind + * + * @param + * names Assoziatives Array mit Namen der Checkboxen als Keys und Überschriften als Values + * @param + * label Die Beschriftung der gesamten Tabelle + * @param + * items Array mit den Beschriftungen der Zeilen + * @param + * selected Mehrdimensionales Array, wobei $selected[foo] ein Array der in der Datenreihe foo markierten Checkboxen ist + * @param + * disabled Wie selected, nur dass die entsprechenden Checkboxen deaktiviert statt markiert sind */ function form_multi_checkboxes($names, $label, $items, $selected, $disabled = array()) { $html = "<table><thead><tr>"; @@ -54,7 +77,7 @@ function form_multi_checkboxes($names, $label, $items, $selected, $disabled = ar foreach ($names as $name => $title) { $id = $name . '_' . $key; $sel = array_search($key, $selected[$name]) !== false ? ' checked="checked"' : ""; - if (!empty($disabled) && !empty($disabled[$name]) && array_search($key, $disabled[$name]) !== false) + if (! empty($disabled) && ! empty($disabled[$name]) && array_search($key, $disabled[$name]) !== false) $sel .= ' disabled="disabled"'; $html .= '<td style="text-align: center;"><input type="checkbox" id="' . $id . '" name="' . $name . '[]" value="' . $key . '"' . $sel . ' /></td>'; } @@ -131,7 +154,8 @@ function form($elements, $action = "") { } /** - * Generiert HTML Code für eine "Seite". Fügt dazu die übergebenen Elemente zusammen. + * Generiert HTML Code für eine "Seite". + * Fügt dazu die übergebenen Elemente zusammen. */ function page($elements) { return join($elements); @@ -153,10 +177,10 @@ function table($columns, $rows, $data = true) { foreach ($rows as $row) { $html .= '<tr>'; foreach ($columns as $key => $column) - if (isset ($row[$key])) - $html .= '<td class="' . $key . '">' . $row[$key] . '</td>'; - else - $html .= '<td class="' . $key . '"> </td>'; + if (isset($row[$key])) + $html .= '<td class="' . $key . '">' . $row[$key] . '</td>'; + else + $html .= '<td class="' . $key . '"> </td>'; $html .= '</tr>'; } $html .= '</tbody>'; @@ -184,8 +208,8 @@ function template_render($file, $data) { $template = file_get_contents($file); if (is_array($data)) foreach ($data as $name => $content) { - $template = str_replace("%" . $name . "%", $content, $template); - } + $template = str_replace("%" . $name . "%", $content, $template); + } return $template; } else { die('Cannot find template file «' . $file . '».'); @@ -235,11 +259,10 @@ function html_select_key($id, $name, $rows, $selected) { } function img_button($link, $icon, $text, $extra_text = '') { - $translation = empty($text)? '' : Get_Text($text); - return '<a href="' . htmlspecialchars($link) . '"><img src="pic/icons/' . htmlspecialchars($icon) . '.png" alt="' . $translation . '" ' . (empty($translation)? '' : 'title="' . $translation . '"') . '>' . (empty($extra_text)? '' : ' ' . $extra_text) . '</a>'; + $translation = empty($text) ? '' : Get_Text($text); + return '<a href="' . htmlspecialchars($link) . '"><img src="pic/icons/' . htmlspecialchars($icon) . '.png" alt="' . $translation . '" ' . (empty($translation) ? '' : 'title="' . $translation . '"') . '>' . (empty($extra_text) ? '' : ' ' . $extra_text) . '</a>'; } - function ReplaceSmilies($neueckig) { $neueckig = str_replace(";o))", "<img src=\"pic/smiles/icon_redface.gif\">", $neueckig); $neueckig = str_replace(":-))", "<img src=\"pic/smiles/icon_redface.gif\">", $neueckig); diff --git a/public/css/base.css b/public/css/base.css index 8576f074..a08042fd 100644 --- a/public/css/base.css +++ b/public/css/base.css @@ -1,116 +1,160 @@ * { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } body { - font-family: Arial, sans-serif; - font-size: 14px; + background: #fff; + font-family: Arial, sans-serif; + font-size: 14px; } header { - display: block; - width: 100%; + background: #f0f0f0; + border-bottom: 1px solid #000; + display: block; + padding: 5px; +} + +header .toolbar { + position: absolute; + right: 17px; + top: 17px; +} + +.toolbar a { + padding: 0 10px 0 0; } -article, details { - clear: none; - display: block; - float: none; +article,details { + clear: none; + display: block; + float: none; } .small { - font-size: 12px; + font-size: 12px; } #logo { - background: url('../pic/himmel.png') top left no-repeat; - display: block; - height: 32px; - margin: 10px auto; - width: 380px; + background: url('../pic/engelsystem_logo_30c3.png') top left no-repeat; + display: block; + float: left; + height: 42px; + margin: 0; + width: 202px; } -#body { - margin: 0 20px 20px 20px; +#menu { + float: left; + padding: 10px; + width: 180px; } -#menu { - float: left; - width: 200px; +#menu p { + padding: 4px; +} + +#menu h4 { + font-size: 14px; + padding: 3px; + text-transform: capitalize; +} + +#menu ul { + list-style: none; + margin: 0; + padding: 0; +} + +#menu li a { + display: block; + padding: 3px; +} + +#menu li a:hover, .toolbar a:hover { + color: #900; +} + +#menu li.selected a, .toolbar a.selected { + color: #900; + font-weight: bold; } #content { - margin-left: 200px; + margin-left: 200px; + padding: 10px; } a { - color: #000; + color: #000; } -th, td, dt, dd { - padding: 4px; +th,td,dt,dd { + padding: 4px; vertical-align: top; } dt { - font-weight: bold; + font-weight: bold; } dd { - margin-left: 20px; + margin-left: 20px; } -h1, h2, h3, h4 { - font-size: 16px; +h1,h2,h3,h4 { + font-size: 16px; + padding: 3px; } -h1, h4 { - padding: 0 4px; +h1 { + font-size: 18px; + margin-bottom: 10px; } hr { - margin: 10px 0; + margin: 10px 0; } ul { - padding: 5px 0 5px 20px; + padding: 5px 0 5px 20px; } nav { - margin: 0 10px 10px 0; + margin: 0 0 20px 0; } -#content > article { - padding: 10px; +#content>article { + padding: 3px; } #content h2 { - margin-top: 15px; + margin-top: 15px; } #content h2:first-child { - margin-top: 0; + margin-top: 0; } p { - padding: 0 0 10px 0; -} - -#menu p { - padding: 4px; + padding: 0 0 10px 0; } a.sprache img { - margin-right: 5px; + margin-right: 5px; } table { - border-collapse: collapse; + border-collapse: collapse; margin-top: 5px; display: block; } +tr:hover > td { + background-color: #f0f0f0; +} + #shifts { background-color: #fff; } @@ -175,14 +219,15 @@ fieldset p label input { } th { - background: #f0f0f0; + background: #f0f0f0; } + thead th { - vertical-align: bottom; + vertical-align: bottom; } -td, th { - border: 1px solid #888; +td,th { + border: 1px solid #888; } th.Gekommen { @@ -202,9 +247,9 @@ div.rotate { textarea { font-family: inherit; font-size: inherit; - height: 200px; + height: 200px; padding: 2px; - width: 300px; + width: 300px; } .hidden { @@ -224,26 +269,14 @@ tr:hover .hidden { } .clear { - clear: both; + clear: both; } .pagination { - text-align: center; -} - -.background { - background: #f0f0f0; -} - -.container { - border: 1px solid #888; -} - -.content { - background: #fff; + text-align: center; } -.error, .info, .success { +.error,.info,.success { background: #f0f0f0; border: 1px solid #888; border-radius: 2px; @@ -253,46 +286,50 @@ tr:hover .hidden { } .error { - background: #f99; - border-color: #900; + background: #fff; + border-color: #ed1a3b; + color: #ed1a3b; + font-weight: bold; } .success { - background: #9f9; - border-color: #090; + background: #fff; + border-color: rgb(0, 178, 107); + color: rgb(0, 178, 107); + font-weight: bold; } .new_message { - font-weight: bold; + font-weight: bold; } -.news_comment, .news { - border: 1px solid #888; - margin: 10px 0; +.news_comment,.news { + border: 1px solid #888; + margin: 10px 0; } -.news_comment details, .news details { - background: #f0f0f0; - padding: 4px; +.news_comment details,.news details { + background: #f0f0f0; + padding: 4px; } -.news_comment p, .news p, h3 { - padding: 4px; +.news_comment p,.news p,h3 { + padding: 4px; } -.news_comment p, .news_comment details { - margin-left: 72px; +.news_comment p,.news_comment details { + margin-left: 72px; } .avatar { - float: left; - margin: 4px; - max-width: 64px; + float: left; + margin: 4px; + max-width: 64px; } .news.meeting { - border: 1px solid #000; - box-shadow: 1px 1px 5px #888; + border: 1px solid #000; + box-shadow: 1px 1px 5px #888; } .done { @@ -320,7 +357,7 @@ tr:hover .hidden { margin: 0 0 10px 0; } -.button { +a.button { background: #f0f0f0; border: 1px solid #888; border-radius: 4px; @@ -340,18 +377,38 @@ tr:hover .hidden { background: #fff; } +.button.add { + background: url('../pic/icons/add.png') 2px 2px no-repeat; + padding-left: 20px; +} + .button.edit { background: url('../pic/icons/pencil.png') 2px 2px no-repeat; padding-left: 20px; } .button.ok { - background: url('../pic/icons/tick.png') 2px 2px no-repeat; - padding-left: 20px; + background: url('../pic/icons/tick.png') 2px 2px no-repeat; + padding-left: 20px; } .button.cancel { - background: url('../pic/icons/cross.png') 2px 2px no-repeat; + background: url('../pic/icons/cross.png') 2px 2px no-repeat; + padding-left: 20px; +} + +a.engel { + background: url('../pic/icons/engel.png') no-repeat; + padding-left: 20px; +} + +a.logout { + background: url('../pic/icons/door_in.png') no-repeat; + padding-left: 20px; +} + +a.settings { + background: url('../pic/icons/application_form_edit.png') no-repeat; padding-left: 20px; } @@ -378,7 +435,7 @@ tr:hover .hidden { margin-left: 250px; } -.form input[type="text"], .form input[type="password"], .form textarea { +.form input[type="text"],.form input[type="password"],.form textarea { background: #fff; border: 1px solid #888; color: inherit; @@ -412,15 +469,21 @@ tr:hover .hidden { padding: 0; } -.selection.rooms, -.selection.days, -.selection.types, -.selection.filled { +.selection.rooms,.selection.days,.selection.types,.selection.filled { display: inline-block; vertical-align: top; margin-right: 15px; } +.selection ul li.heading { + text-align: center; + font-weight: bold; +} + +.selection ul li:nth-child(even) { + background: #f0f0f0; +} + #filter { padding: 10px; } @@ -435,4 +498,4 @@ td .entries img { td.time { text-align: right; -} +}
\ No newline at end of file diff --git a/public/css/grossbild.js b/public/css/grossbild.js deleted file mode 100644 index 618ecc1f..00000000 --- a/public/css/grossbild.js +++ /dev/null @@ -1,62 +0,0 @@ - function isClass(object, className) { - return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1); - } - - var grossbild_an = 0 - - function grossbild_over(e) { - if(grossbild_an) return - grossbild_an = 1 - if(!e) e = window.event; - body = document.getElementsByTagName("body")[0] - i = document.createElement("img") - i.src = e.target.src; - i.style.position = "absolute" - /*a = "" - for(b in e) a += b + " " - alert(a)*/ - i.style.top = e.clientY + window.scrollY - i.style.left = e.clientX + window.scrollX - i.id = "mouseoverphoto" - i.onmouseover = grossbild_over - i.onmouseout = grossbild_out - //i.onmousemove = grossbild_move - body.appendChild(i); - } - - function grossbild_out(e) { - if(!grossbild_an) return - grossbild_an = 0 - if(!e) e = window.event; - body = document.getElementsByTagName("body")[0] - i = document.getElementById("mouseoverphoto") - body.removeChild(i) - } - - function grossbild_move(e) { - if(!e) e = window.event; - i = document.getElementById("mouseoverphoto") - i.style.top = e.clientY + window.scrollY - i.style.left = e.clientX + window.scrollX -} - - function grossbild_register(objekt) { - objekt.onmouseover = grossbild_over - objekt.onmouseout = grossbild_out - objekt.onmousemove = grossbild_move - } - - function grossbild_registrieren() { - if(grossbild_altonload) - grossbild_altonload() - - objekte = document.getElementsByTagName("img"); - for(var i = 0; i < objekte.length; i++) { - if(isClass(objekte[i], "photo")) { - grossbild_register(objekte[i]) - } - } - } - - var grossbild_altonload = window.onload - window.onload = grossbild_registrieren diff --git a/public/css/style1.css b/public/css/style1.css index fd8426f1..738a3e36 100644 --- a/public/css/style1.css +++ b/public/css/style1.css @@ -1,83 +1,3 @@ - -body, .background { - background-color: #131313; - color: #424242; - line-height: 150%; - font-family: Trebuchet MS, Lucida Grande, Arial, sans-serif; -} - -a { - text-decoration: none; - color: #424242 -} - -td { - font-size: small -} - -a:active, a:hover { - font-weight: bold -} - -li { - font-size: small -} - -.content { - background-color: #131313; - color: #424242; -} - -.contenttopic, h1 { - font-weight: bold; - font-size: small; - color: #000000; - background-color: #333333 -} - -.border, .container { - background-color: #333333; - border: 1px solid #424242; -} - -.menu { - background-color: #131313; - color: #424242; - font-size: small -} - -h4 { - background-color: #333333; - font-weight: bold; - font-size: small; - color: #000000 -} - -.linkbox { - background-color: #ffffff -} - -.linkboxtitle { - font-weight: bold; - background-color: #000000; - color: #ffffff -} - -.question { - font-weight: bold; - font-size: 9pt -} - -.engeltreffen { - font-weight: bold; - font-size: 9pt; - color: #ff0000; -} - -.answer { - font-size: 9pt; -} - -.comment { - font-size: 6pt; +#logo { + background-image: url('../pic/engelsystem_logo_30c3.png'); } diff --git a/public/css/style10.css b/public/css/style10.css deleted file mode 100644 index 38de4a13..00000000 --- a/public/css/style10.css +++ /dev/null @@ -1,11 +0,0 @@ -#logo { - background: url('../pic/engelsystem_logo_cccamp2011.png') top left no-repeat; - display: block; - height: 69px; - margin: 10px auto; - width: 523px; -} - -tr:hover > td { - background: #f0f0f0; -}
\ No newline at end of file diff --git a/public/css/style11.css b/public/css/style11.css deleted file mode 100644 index c69d4b8d..00000000 --- a/public/css/style11.css +++ /dev/null @@ -1,53 +0,0 @@ -body.background { - background: #000532; -} - -footer, footer a { - color: #fff; -} - -#body { - background: #fff; - border: 1px solid #fff; - border-radius: 2px; - padding: 20px; -} - -.content { - background: transparent; -} - -#logo { - background: url('../pic/engelsystem_logo_29c3.png') top left no-repeat #fff; - display: block; - height: 100px; - margin: 10px; - width: 900px; -} - -tr:hover > td { - background-color: #f0f0f0; -} - -.selection ul li.heading { - text-align: center; - font-weight: bold; -} - -.selection ul li:nth-child(even) { - background: #f0f0f0; -} - -.error { - background: #fff; - border-color: #ed1a3b; - color: #ed1a3b; - font-weight: bold; -} - -.success { - background: #fff; - border-color: rgb(0, 178, 107); - color: rgb(0, 178, 107); - font-weight: bold; -} diff --git a/public/css/style2.css b/public/css/style2.css index e8510809..aac84188 100644 --- a/public/css/style2.css +++ b/public/css/style2.css @@ -1,117 +1,65 @@ body { - font-size : small; - font-family : Arial; - background-color : #f3b115; - color : navy; -} -a { - font-family : Arial; - font-size : small; - text-decoration : none; - color : #0000a0; + background-color: #222; + color: #bbb; } -td { - font-size : small; +header, details,.news_comment details, .news details { + background-color: #333; } -A:Visited { - font-family : Arial; - font-size : small; - color : #0000a0; - text-decoration : none; +#logo { + background-image: url('../pic/engelsystem_logo_30c3.png'); } -A:Active { - text-decoration : none; - font-family : Arial; - font-size : small; +a { + color: #fff; } -A:Hover { - font-family : Arial; - font-size : small; - color : #0000a0; - text-decoration : underline; - font-weight : bold; -} - -li { - font-size: small +#menu li.selected a,.toolbar a.selected,#menu li a:hover,.toolbar a:hover + { + color: #090; } - -H4 { - font-family : Arial,Verdana; +.form input[type="text"],.form input[type="password"],.form textarea { + background-color: #333; } - -B { - font-weight : bold; - font-family : Arial; - font-size : small; -} - -.content { - background-color: #aa8822; -<!-- #ffeba2 --> - color: #000000 +.error,.success,.info { + background-color: #333; } -.contenttopic { - font-weight: bold; - font-size: small; - color: #ffffff; - background-color: #ff1111 +th,.hidden { + background-color: #333; } -<!-- #157cc1 --> - -a.title { - color:#ffa000; -} -.border { - background-color: #050509 - } - -.menu { - background-color: #bdd9ef; - color: #000022; - font-size: small +tr:hover>td { + background-color: #333; } -h4.menu { - font-weight: bold; - font-size: small; - color: #3e9fef +.selection ul li:nth-child(2n) { + background-color: #333; } -.linkbox { - background-color: #ffffff +#shifts { + background-color: #222; } -.linkboxtitle { - font-weight: bold; - background-color: #000000; - color: #bdd9ef +#shifts td.free { + background-color: #322; } -.question { - font-weight: bold; - font-size: 9pt +#shifts td.occupied { + background-color: #232; } -.engeltreffen { - font-weight: bold; - font-size: 9pt; - color: #ff0000; +#shifts td.own { + background-color: #223; } -.answer { - font-size: 9pt; +#shifts td.collides { + background-color: #333; } -.comment { - font-size : 6pt; -} - +a.button { + background-color: #000; +}
\ No newline at end of file diff --git a/public/css/style3.css b/public/css/style3.css deleted file mode 100644 index ca45d73c..00000000 --- a/public/css/style3.css +++ /dev/null @@ -1,105 +0,0 @@ -body { - font-size : small; - font-family : Arial; - background-color : #f3b115; - color : navy; -} -a { - font-family : Arial; - font-size : small; - text-decoration : none; - color : #0000a0; -} - -td { - font-size : small; -} - -A:Visited { - font-family : Arial; - font-size : small; - color : #0000a0; - text-decoration : none; -} - -A:Active { - text-decoration : none; - font-family : Arial; - font-size : small; -} - -A:Hover { - font-family : Arial; - font-size : small; - color : #0000a0; - text-decoration : underline; - font-weight : bold; -} - -li { - font-size: small -} - - -H4 { - font-family : Arial,Verdana; -} - - -B { - font-weight : bold; - font-family : Arial; - font-size : small; -} - -.content { - background-color: #ffeba2; - color: #000000 -} - -.contenttopic { - font-weight: bold; - font-size: small; - color: #ffa000; - background-color: navy -} - - - -a.title { - color:#ffa000; -} -.border { - background-color: #050509 - } - -.menu { - background-color: #ffeba2; - color: navy; - font-size: small -} - -h4.menu { - font-weight: bold; - font-size: small; -} - -.question { - font-weight: bold; - font-size: 9pt -} - -.engeltreffen { - font-weight: bold; - font-size: 9pt; - color: #ff0000; -} - -.answer { - font-size: 9pt; -} - -.comment { - font-size : 6pt; -} - diff --git a/public/css/style4.css b/public/css/style4.css deleted file mode 100644 index b818c9c9..00000000 --- a/public/css/style4.css +++ /dev/null @@ -1,70 +0,0 @@ - -body { - font-family: Arial; - background-color: #00009f; - color: #e0a09f; - font-size: small -} - -a { - text-decoration: none; - color: #e0ffff -} - -td { - font-size: small; - color: #e0a09f - -} - -a:active, a:hover { - font-weight: bold -} - -li { - font-size: small -} - -.content { - background-color: #90009f; - color: #e0a09f -} - -.contenttopic { - font-weight: bold; - font-size: small; - color: #e0e09f; - background-color: #740057 -} - -.border { - background-color: #0000FF -} - -.menu { - background-color: #5f0043; - color: #e0ff9f; - font-size: small -} -h4.menu { - font-weight: bold; - font-size: small; - color: #e0ff9f -} -.question { - font-weight: bold; - font-size: 9pt -} - -.engeltreffen { - font-weight: bold; - font-size: 9pt; - color: #ff0000; -} - -.answer { - font-size: 9pt; -} -.comment { - font-size : 6pt; -} diff --git a/public/css/style5.css b/public/css/style5.css deleted file mode 100644 index 4a8f7bcc..00000000 --- a/public/css/style5.css +++ /dev/null @@ -1,79 +0,0 @@ - -body { - font-family: Verdana,Helvetica,Arial; - background-color: #e1d6d6; - color: #8a0000; - font-size: small -} - -a { - text-decoration: none; - color: #583a3a -} - -td { - font-size: small -} - -a:active, a:hover { - font-weight: bold -} - -li { - font-size: small -} - -.content { - background-color: #e7e2e2; - color: #8a0000 -} - -.contenttopic { - font-weight: bold; - font-size: small; - color: #ffeded; - background-color: #8a0000 -} - -.border { - background-color: #8a0000 -} - -.menu { - background-color: #e7e2e2; - color: #8a0000; - font-size: small -} -h4.menu { - font-weight: bold; - font-size: small; - color: #8a0000 -} - -.linkbox { - background-color: #e7e2e2 -} - -.linkboxtitle { - font-weight: bold; - background-color: #e7e2e2; - color: #8a0000 -} - -.question { - font-weight: bold; - font-size: 9pt -} - -.engeltreffen { - font-weight: bold; - font-size: 9pt; - color: #ff0000; -} - -.answer { - font-size: 9pt; -} -.comment { - font-size : 6pt; -} diff --git a/public/css/style6.css b/public/css/style6.css deleted file mode 100644 index 8dc008e7..00000000 --- a/public/css/style6.css +++ /dev/null @@ -1,76 +0,0 @@ - -body, .background { - font-family: Arial, Helvetica, sans-serif; - background-color: #121327; - color: #FFFFFF; - font-size: small -} - -#logo { - background-image: url('../pic/himmel_w.png'); -} - -a { - text-decoration: none; - color: #ff9900 -} - -td { - font-size: small -} - -a:active, a:hover { - font-weight: bold -} - -li { - font-size: small -} - -.content { - background-color: #636e77; - color: #FFFFFF -} - -.contenttopic { - font-weight: bold; - font-size: small; - color: #FF9900; - background-color: #333e47 -} - -.border, .container { - background-color: #000000 -} - -.menu { - background-color: #1f203f; - color: #fff3bf; - font-size: small -} -h4.menu { - font-weight: bold; - font-size: small; - color: #fff3bf -} -.question { - font-weight: bold; - font-size: 9pt -} - -.engeltreffen { - font-weight: bold; - font-size: 9pt; - color: #FF0000; -} - -.answer { - font-size: 9pt; -} -.comment { - font-size : 6pt; -} - -h4, h1, th { - background: #333E47; -} diff --git a/public/css/style7.css b/public/css/style7.css deleted file mode 100644 index 297f1d0c..00000000 --- a/public/css/style7.css +++ /dev/null @@ -1,70 +0,0 @@ - -body { - font-family: Arial; - background-color: #353d87; - color: #FFFFFF; - font-size: small -} - -a { - text-decoration: none; - color: #832fb8 -} - -td { - font-size: small; - color: #353d87 - -} - -a:active, a:hover { - font-weight: bold -} - -li { - font-size: small -} - -.content { - background-color: #fff3bf; - color: #353d87 -} - -.contenttopic { - font-weight: bold; - font-size: small; - color: #fff3bf; - background-color: #353daa -} - -.border { - background-color: #0000FF -} - -.menu { - background-color: #c5bfff; - color: #973cff; - font-size: small -} -h4.menu { - font-weight: bold; - font-size: small; - color: #973cff -} -.question { - font-weight: bold; - font-size: 9pt -} - -.engeltreffen { - font-weight: bold; - font-size: 9pt; - color: #ff0000; -} - -.answer { - font-size: 9pt; -} -.comment { - font-size : 6pt; -} diff --git a/public/css/style8.css b/public/css/style8.css deleted file mode 100644 index 91d3b325..00000000 --- a/public/css/style8.css +++ /dev/null @@ -1,70 +0,0 @@ - -body { - font-family: Arial; - background-color: #a4ffff; - color: #f7ff00; - font-size: small -} - -a { - text-decoration: none; - color: #a45f9f -} - -td { - font-size: small; - color: #f7ff00 - -} - -a:active, a:hover { - font-weight: bold -} - -li { - font-size: small -} - -.content { - background-color: #bd9bff; - color: #f7ff00 -} - -.contenttopic { - font-weight: bold; - font-size: small; - color: #f7ff00; - background-color: #ffb2ff -} - -.border { - background-color: #0000FF -} - -.menu { - background-color: #ffb2ff; - color: #f7ff00; - font-size: small -} -h4.menu { - font-weight: bold; - font-size: small; - color: #f7ff00 -} -.question { - font-weight: bold; - font-size: 9pt -} - -.engeltreffen { - font-weight: bold; - font-size: 9pt; - color: #ff0000; -} - -.answer { - font-size: 9pt; -} -.comment { - font-size : 6pt; -} diff --git a/public/css/style9.css b/public/css/style9.css deleted file mode 100644 index 4310ca8c..00000000 --- a/public/css/style9.css +++ /dev/null @@ -1,84 +0,0 @@ - -body { - background-color: #ffffff; - - color: black; - - line-height: 150%; - font-family: Trebuchet MS, Lucida Grande, Arial, sans-serif; - - margin-bottom: 20px; -} - -a { - text-decoration: none; - color: #304930 -} - -td { - font-size: small -} - -a:active, a:hover { - font-weight: bold -} - -li { - font-size: small -} - -.content { - background-color: #ffffff; - color: #000000 -} - -.contenttopic { - font-weight: bold; - font-size: small; - color: #000000; - background-color: #A4C93C -} - -.border { - background-color: #A4C93C -} - -.menu { - background-color: #ffffff; - color: #000000; - font-size: small -} -h4.menu { - background-color: #A4C93C; - font-weight: bold; - font-size: small; - color: #000000 -} - -.linkbox { - background-color: #ffffff -} - -.linkboxtitle { - font-weight: bold; - background-color: #000000; - color: #ffffff -} - -.question { - font-weight: bold; - font-size: 9pt -} - -.engeltreffen { - font-weight: bold; - font-size: 9pt; - color: #ff0000; -} - -.answer { - font-size: 9pt; -} -.comment { - font-size : 6pt; -} diff --git a/public/index.php b/public/index.php index c742a2c6..fb4c3c7f 100644 --- a/public/index.php +++ b/public/index.php @@ -35,12 +35,12 @@ sql_connect($config['host'], $config['user'], $config['pw'], $config['db']); load_auth(); // JSON Authorisierung gewünscht? -if (isset ($_REQUEST['auth'])) +if (isset($_REQUEST['auth'])) json_auth_service(); -// Gewünschte Seite/Funktion -$p = isset ($user) ? "news" : "login"; -if (isset ($_REQUEST['p']) && preg_match("/^[a-z0-9_]*$/i", $_REQUEST['p']) && ($_REQUEST['p'] == 'stats' || (sql_num_query("SELECT * FROM `Privileges` WHERE `name`='" . sql_escape($_REQUEST['p']) . "' LIMIT 1") > 0))) + // Gewünschte Seite/Funktion +$p = isset($user) ? "news" : "login"; +if (isset($_REQUEST['p']) && preg_match("/^[a-z0-9_]*$/i", $_REQUEST['p']) && ($_REQUEST['p'] == 'stats' || (sql_num_query("SELECT * FROM `Privileges` WHERE `name`='" . sql_escape($_REQUEST['p']) . "' LIMIT 1") > 0))) $p = $_REQUEST['p']; $title = Get_Text($p); @@ -49,141 +49,109 @@ $content = ""; if ($p == "ical") { require_once ('includes/pages/user_ical.php'); user_ical(); -} -elseif ($p == "atom") { +} elseif ($p == "atom") { require_once ('includes/pages/user_atom.php'); user_atom(); -} -elseif ($p == "shifts_json_export") { +} elseif ($p == "shifts_json_export") { require_once ('includes/controller/shifts_controller.php'); shifts_json_export_controller(); -} -elseif ($p == "stats") { +} elseif ($p == "stats") { require_once ('includes/pages/guest_stats.php'); guest_stats(); -} -// Recht dafür vorhanden? +} // Recht dafür vorhanden? elseif (in_array($p, $privileges)) { if ($p == "news") { require_once ('includes/pages/user_news.php'); $content = user_news(); - } - elseif ($p == "news_comments") { + } elseif ($p == "news_comments") { require_once ('includes/pages/user_news.php'); $content = user_news_comments(); - } - elseif ($p == "user_meetings") { + } elseif ($p == "user_meetings") { require_once ('includes/pages/user_news.php'); $content = user_meetings(); - } - elseif ($p == "user_myshifts") { + } elseif ($p == "user_myshifts") { require_once ('includes/pages/user_myshifts.php'); $content = user_myshifts(); - } - elseif ($p == "user_shifts") { + } elseif ($p == "user_shifts") { require_once ('includes/pages/user_shifts.php'); $content = user_shifts(); - } - elseif ($p == "user_messages") { + } elseif ($p == "user_messages") { $content = user_messages(); - } - elseif ($p == "user_questions") { + } elseif ($p == "user_questions") { require_once ('includes/pages/user_questions.php'); $content = user_questions(); - } - elseif ($p == "user_wakeup") { + } elseif ($p == "user_wakeup") { require_once ('includes/pages/user_wakeup.php'); $content = user_wakeup(); - } - elseif ($p == "user_settings") { + } elseif ($p == "user_settings") { require_once ('includes/pages/user_settings.php'); $content = user_settings(); - } - elseif ($p == "login") { + } elseif ($p == "login") { require_once ('includes/pages/guest_login.php'); $content = guest_login(); - } - elseif ($p == "register") { + } elseif ($p == "register") { require_once ('includes/pages/guest_login.php'); $content = guest_register(); - } - elseif ($p == "logout") { + } elseif ($p == "logout") { require_once ('includes/pages/guest_login.php'); $content = guest_logout(); - } - elseif ($p == "admin_questions") { + } elseif ($p == "admin_questions") { $content = admin_questions(); - } - elseif ($p == "admin_user") { + } elseif ($p == "admin_user") { require_once ('includes/pages/admin_user.php'); $content = admin_user(); - } - elseif ($p == "admin_user_angeltypes") { + } elseif ($p == "admin_user_angeltypes") { require_once ('includes/pages/admin_user_angeltypes.php'); $content = admin_user_angeltypes(); - } - elseif ($p == "admin_arrive") { + } elseif ($p == "admin_arrive") { require_once ('includes/pages/admin_arrive.php'); $content = admin_arrive(); - } - elseif ($p == "admin_active") { + } elseif ($p == "admin_active") { require_once ('includes/pages/admin_active.php'); $content = admin_active(); - } - elseif ($p == "admin_free") { + } elseif ($p == "admin_free") { require_once ('includes/pages/admin_free.php'); $content = admin_free(); - } - elseif ($p == "admin_news") { + } elseif ($p == "admin_news") { require_once ('includes/pages/admin_news.php'); $content = admin_news(); - } - elseif ($p == "admin_angel_types") { + } elseif ($p == "admin_angel_types") { require_once ('includes/pages/admin_angel_types.php'); $content = admin_angel_types(); - } - elseif ($p == "admin_rooms") { + } elseif ($p == "admin_rooms") { require_once ('includes/pages/admin_rooms.php'); $content = admin_rooms(); - } - elseif ($p == "admin_groups") { + } elseif ($p == "admin_groups") { require_once ('includes/pages/admin_groups.php'); $content = admin_groups(); - } - elseif ($p == "admin_faq") { + } elseif ($p == "admin_faq") { require_once ('includes/pages/admin_faq.php'); $content = admin_faq(); - } - elseif ($p == "admin_language") { + } elseif ($p == "admin_language") { require_once ('includes/pages/admin_language.php'); $content = admin_language(); - } - elseif ($p == "admin_import") { + } elseif ($p == "admin_import") { require_once ('includes/pages/admin_import.php'); $content = admin_import(); - } - elseif ($p == "admin_shifts") { + } elseif ($p == "admin_shifts") { require_once ('includes/pages/admin_shifts.php'); $content = admin_shifts(); - } - elseif ($p == "admin_log") { + } elseif ($p == "admin_log") { require_once ('includes/pages/admin_log.php'); $content = admin_log(); } else { require_once ('includes/pages/guest_start.php'); $content = guest_start(); } -} -elseif ($p == "credits") { +} elseif ($p == "credits") { require_once ('includes/pages/guest_credits.php'); $content = guest_credits(); -} -elseif ($p == "faq") { +} elseif ($p == "faq") { require_once ('includes/pages/guest_faq.php'); $content = guest_faq(); } else { // Wenn schon eingeloggt, keine-Berechtigung-Seite anzeigen - if (isset ($user)) { + if (isset($user)) { $title = Get_Text("no_access_title"); $content = Get_Text("no_access_text"); } else { @@ -193,27 +161,28 @@ elseif ($p == "faq") { } // Hinweis für ungelesene Nachrichten -if (isset ($user) && $p != "user_messages") +if (isset($user) && $p != "user_messages") $content = user_unread_messages() . $content; -// Hinweis für Engel, die noch nicht angekommen sind -if(isset($user) && $user['Gekommen'] == 0) + // Hinweis für Engel, die noch nicht angekommen sind +if (isset($user) && $user['Gekommen'] == 0) $content = error("You are not marked as arrived. Please go to heaven's desk, get your angel badge and/or tell them that you arrived already.", true) . $content; -// Erzengel Hinweis für unbeantwortete Fragen -if (isset ($user) && $p != "admin_questions") + // Erzengel Hinweis für unbeantwortete Fragen +if (isset($user) && $p != "admin_questions") $content = admin_new_questions() . $content; -// Erzengel Hinweis für freizuschaltende Engeltypen -if (isset ($user) && $p != "admin_user_angeltypes") + // Erzengel Hinweis für freizuschaltende Engeltypen +if (isset($user) && $p != "admin_user_angeltypes") $content = admin_new_user_angeltypes() . $content; echo template_render('../templates/layout.html', array ( - 'theme' => isset ($user) ? $user['color'] : $default_theme, - 'title' => $title, - 'atom_link' => ($p == 'news' || $p == 'user_meetings')? '<link href="' . page_link_to('atom') . (($p == 'user_meetings')? '&meetings=1' : '') . '&key=' . $user['api_key'] . '" type="application/atom+xml" rel="alternate" title="Atom Feed">' : '', - 'menu' => make_menu(), - 'content' => $content + 'theme' => isset($user) ? $user['color'] : $default_theme, + 'title' => $title, + 'atom_link' => ($p == 'news' || $p == 'user_meetings') ? '<link href="' . page_link_to('atom') . (($p == 'user_meetings') ? '&meetings=1' : '') . '&key=' . $user['api_key'] . '" type="application/atom+xml" rel="alternate" title="Atom Feed">' : '', + 'menu' => make_menu(), + 'content' => $content, + 'header_toolbar' => header_toolbar() )); counter(); diff --git a/public/pic/engelsystem_logo_30c3.png b/public/pic/engelsystem_logo_30c3.png Binary files differnew file mode 100644 index 00000000..b51296e3 --- /dev/null +++ b/public/pic/engelsystem_logo_30c3.png diff --git a/public/pic/icons/add.png b/public/pic/icons/add.png Binary files differnew file mode 100755 index 00000000..6332fefe --- /dev/null +++ b/public/pic/icons/add.png diff --git a/public/pic/icons/application_form_edit.png b/public/pic/icons/application_form_edit.png Binary files differnew file mode 100755 index 00000000..af486c94 --- /dev/null +++ b/public/pic/icons/application_form_edit.png diff --git a/public/pic/icons/door_in.png b/public/pic/icons/door_in.png Binary files differnew file mode 100755 index 00000000..41676a0a --- /dev/null +++ b/public/pic/icons/door_in.png diff --git a/public/pic/icons/engel.png b/public/pic/icons/engel.png Binary files differnew file mode 100644 index 00000000..ea6cc942 --- /dev/null +++ b/public/pic/icons/engel.png diff --git a/templates/layout.html b/templates/layout.html index f2bf73f1..e1ecd9b9 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -10,7 +10,6 @@ <meta http-equiv="expires" content="0" /> <meta name="robots" content="index" /> <meta name="revisit-after" content="1 days" /> - <script type="text/javascript" src="css/grossbild.js"></script> <script type="text/javascript" src="css/forms.js"></script> <link rel="stylesheet" type="text/css" href="css/base.css" /> <link rel="stylesheet" type="text/css" href="css/style%theme%.css" /> @@ -19,12 +18,15 @@ <body class="background"> <header> <a href="?" id="logo"></a> + %header_toolbar% + <div class="clear"></div> </header> <div id="body"> <div id="menu"> %menu% <nav class="container small"> <ul> + <li><a href="?p=faq">FAQ</a></li> <li><a href="mailto:erzengel@lists.ccc.de">Contact <img src="pic/icons/email.png" alt="E-Mail"></a></li> <li><a href="mailto:bugs@engelsystem.de">Bugs / Features <img src="pic/icons/email.png" alt="E-Mail"></a></li> <li><a href="https://vcs.wybt.net/engelsystem/trac/">Development Platform</a></li> |