SHOW:
|
|
- or go back to the newest paste.
1 | <?php | |
2 | ||
3 | /** | |
4 | * | |
5 | * | |
6 | * @author Sebastian Büttner <sebastian.buettner@powerserverplus.net> | |
7 | * @package void | |
8 | * @version 1.0.0 | |
9 | * @copyright (c) 2013, powerserverplus.net | |
10 | */ | |
11 | ||
12 | - | class FileNotFoundException extends Exception {} |
12 | + | |
13 | * Show the login view | |
14 | - | class Template |
14 | + | |
15 | function admin_auth() | |
16 | - | /** |
16 | + | |
17 | - | * Whether to use debugging or not |
17 | + | $tpl = new Template('admin/auth', 'admin/index'); |
18 | - | */ |
18 | + | |
19 | - | const DEBUG = true; |
19 | + | $tpl->display(); |
20 | } | |
21 | - | /** |
21 | + | |
22 | - | * @var String Path to tempalte dir |
22 | + | |
23 | - | */ |
23 | + | * Do a login try |
24 | - | const template_dir = 'templates'; |
24 | + | |
25 | function admin_auth_do() | |
26 | - | /** |
26 | + | |
27 | - | * @var String (sub)template filename |
27 | + | if (isset($_POST['login']) && isset($_POST['password'])) |
28 | - | */ |
28 | + | |
29 | - | protected $template = ''; |
29 | + | $login = $_POST['login']; |
30 | $password = $_POST['password']; | |
31 | - | /** |
31 | + | |
32 | - | * @var Array data to be used within the template |
32 | + | if (Admin::auth($login, $password)) |
33 | - | */ |
33 | + | |
34 | - | protected $data; |
34 | + | Redirect::to('admin/start', array('flash_notice' => 'Erfolgreich angemeldet!')); |
35 | } | |
36 | - | /** |
36 | + | |
37 | - | * Template constructor |
37 | + | |
38 | - | * |
38 | + | Redirect::to('admin/auth', array('flash_error' => 'Login fehlerhaft!')); |
39 | - | * @param String $templ name of the template |
39 | + | |
40 | - | */ |
40 | + | |
41 | - | public function __construct($templ, $layout = 'index') |
41 | + | |
42 | * Show the overview | |
43 | - | $this->load($layout); |
43 | + | |
44 | function admin_start() | |
45 | - | $this->data = array(); |
45 | + | |
46 | - | $this->assign('subtemplate', $templ); |
46 | + | $tpl = new Template('admin/home', 'admin/index'); |
47 | ||
48 | $games = Game::all(); | |
49 | - | /** |
49 | + | |
50 | - | * Save a passed variable for later use in template |
50 | + | $tpl->assign('games', $games); |
51 | - | * |
51 | + | |
52 | - | * @param String $name name of the varaible used to identify |
52 | + | $tracks = Place::getTracks(); |
53 | - | * @param Mixed $value value to be assigned to the variable |
53 | + | |
54 | - | */ |
54 | + | foreach ($tracks as &$track) { |
55 | - | public function assign($name, $value) |
55 | + | $hole = Track::getTrackInfo($track['number']); |
56 | ||
57 | - | /* Separate name by dot */ |
57 | + | $holeInOnes = Track::getHoleInOnes($track['id']); |
58 | - | $path = explode('.', $name); |
58 | + | $overEleven = Track::getOverEleven($track['id']); |
59 | ||
60 | - | /* Take the last element of the array, as this is our final identifier */ |
60 | + | $track['avg_tries'] = $hole['average_tries']; |
61 | - | $lastKey = array_pop($path); |
61 | + | $track['description'] = $hole['description']; |
62 | $track['hinone'] = $holeInOnes; | |
63 | - | /* Create / fill array structure, start with the template`s data base array */ |
63 | + | $track['overelev'] = $overEleven; |
64 | - | $parent = &$this->data; |
64 | + | $track['allhits'] = $hole['allhits']; |
65 | } | |
66 | - | /* Iterate through the given name structure... */ |
66 | + | |
67 | - | foreach ($path as $key) |
67 | + | $tpl->assign('tracks', $tracks); |
68 | ||
69 | - | /* ...And create substructres where needed */ |
69 | + | $tpl->display(); |
70 | - | if (!isset($parent[$key])) |
70 | + | |
71 | - | $parent[$key] = array(); |
71 | + | |
72 | /** | |
73 | - | /* Move the parent `pointer` deeper within the structure */ |
73 | + | * Reset a game by given gameId |
74 | - | $parent = &$parent[$key]; |
74 | + | |
75 | function admin_delete_game($gameId) | |
76 | { | |
77 | - | /* Finally assign the value to the deepest element in structure */ |
77 | + | $result = Game::delete($gameId); |
78 | - | $parent[$lastKey] = $value; |
78 | + | |
79 | if ($result) | |
80 | Redirect::to('admin/start', array('flash_notice' => 'Das Spiel mit der Id '. (int)$gameId .' wurde gelöscht.')); | |
81 | - | /* |
81 | + | else |
82 | - | * |
82 | + | Redirect::to('admin/start', array('flash_error' => 'Fehler beim Löschen des Spiels.')); |
83 | - | */ |
83 | + | |
84 | - | public function phpize_var($var, $intend = false) |
84 | + | |
85 | /** | |
86 | - | $php = ''; |
86 | + | |
87 | */ | |
88 | - | switch ( gettype($var) ) |
88 | + | function admin_game($gameId) |
89 | { | |
90 | - | case 'boolean': |
90 | + | $tpl = new Template('admin/game', 'admin/index'); |
91 | - | $php .= $var === true ? 'true' : 'false'; |
91 | + | |
92 | $game = Game::get2($gameId); | |
93 | - | break; |
93 | + | $tpl->assign('game', $game); |
94 | ||
95 | - | case 'integer': |
95 | + | $players = Game::getPlayers($gameId); |
96 | - | case 'double': |
96 | + | $tpl->assign('players', $players); |
97 | - | $php .= $var; |
97 | + | |
98 | $scores = Game::getScores($gameId); | |
99 | - | break; |
99 | + | $tpl->assign('scores', $scores); |
100 | ||
101 | - | case 'string': |
101 | + | $tracks = Place::getTracks(); |
102 | - | $php .= "'" . |
102 | + | $tpl->assign('tracks', $tracks); |
103 | - | str_replace("'", "\\'", $var) . |
103 | + | |
104 | - | "'"; |
104 | + | $tpl->display(); |
105 | } | |
106 | - | break; |
106 | + | |
107 | /** | |
108 | - | case 'object': |
108 | + | |
109 | - | $php .= '(object)'; |
109 | + | |
110 | - | case 'array': |
110 | + | function admin_game_do($gameId) |
111 | - | $php .= 'array(' . ($intend ? "\n" : '') ; |
111 | + | |
112 | $game = Game::get($gameId); | |
113 | - | foreach ($var as $key => $value) |
113 | + | |
114 | - | { |
114 | + | $game['player_count'] = (int)$_POST['player_max']; |
115 | - | $php .= $this->phpize_var($key, $intend) . |
115 | + | |
116 | - | ' => ' . |
116 | + | $game['valid_from'] = $_POST['valid_from']; |
117 | - | $this->phpize_var($value, $intend) . |
117 | + | |
118 | - | ', '; |
118 | + | $game['valid_to'] = $_POST['valid_to']; |
119 | ||
120 | - | if ($intend) |
120 | + | Game::save($game); |
121 | - | $php .= "\n"; |
121 | + | |
122 | - | } |
122 | + | $message = 'Spiel mit der Id ' . (int)$gameId . ' erfolgreich bearbeitet.'; |
123 | Redirect::to('admin/start', array('flash_notice' => $message)); | |
124 | - | $php .= ')'; |
124 | + | |
125 | ||
126 | - | break; |
126 | + | |
127 | * | |
128 | - | case 'NULL': |
128 | + | |
129 | - | $php .= 'NULL'; |
129 | + | function admin_create_game() |
130 | { | |
131 | - | break; |
131 | + | $gameId = Game::create(); |
132 | ||
133 | - | case 'resource': |
133 | + | Redirect::to('admin/game/' . $gameId); |
134 | - | default: |
134 | + | |
135 | ||
136 | /** | |
137 | * | |
138 | - | if ($intend) |
138 | + | |
139 | - | $php = str_replace("\n", "\n ", $php); |
139 | + | function admin_track($trackId) |
140 | { | |
141 | - | return $php; |
141 | + | $tpl = new Template('admin/track', 'admin/index'); |
142 | ||
143 | $hole = Track::getHoleByTrackId($trackId); | |
144 | - | /** |
144 | + | |
145 | - | * Prepare and display the tempalte |
145 | + | /* Get Track-Statistics */ |
146 | - | * |
146 | + | $track = Track::getTrackInfo($hole); |
147 | - | */ |
147 | + | |
148 | - | public function display() |
148 | + | if (!$track) { |
149 | echo 'Track not found'; | |
150 | - | /* We start with no code */ |
150 | + | return; |
151 | - | $template_code = ''; |
151 | + | |
152 | ||
153 | - | /* Merge template data with session-flash data */ |
153 | + | /* More stats */ |
154 | - | $data = $this->data; |
154 | + | $holeInOnes = Track::getHoleInOnes($track['id']); |
155 | $overEleven = Track::getOverEleven($track['id']); | |
156 | - | if (isset($_SESSION['appends']) && is_array($_SESSION['appends']) && !empty($_SESSION['appends'])) |
156 | + | |
157 | - | $data = array_merge($data, $_SESSION['appends']); |
157 | + | |
158 | $tpl = new Template('admin/track', 'admin/index'); | |
159 | - | $_SESSION['appends'] = array(); |
159 | + | |
160 | $tpl->assign('hole', array( | |
161 | - | /* And iterate then over all passed variables, making them executable code again */ |
161 | + | 'id' => $track['id'], |
162 | - | foreach ($data as $key => $value) |
162 | + | 'path' => $track['path'], |
163 | 'max_trys' => $track['max_trys'], | |
164 | - | /* Secure that variables are valid for php */ |
164 | + | 'number' => $track['number'], |
165 | - | if (! preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/ims', $key) ) |
165 | + | 'avg_tries' => $track['average_tries'], |
166 | - | continue; |
166 | + | 'difficulty' => $track['difficulty'], |
167 | 'description' => $track['description'], | |
168 | - | /* Add a new line to the template code */ |
168 | + | 'rating' => $track['rating'], |
169 | - | $template_code .= |
169 | + | 'hinone' => $holeInOnes, |
170 | - | /* Write varaible name */ |
170 | + | 'overelev' => $overEleven, |
171 | - | '$' . $key . ' = ' . $this->phpize_var($value, true) . ';' . "\n"; |
171 | + | 'allhits' => $track['allhits'] |
172 | ) | |
173 | ); | |
174 | ||
175 | - | $template_vars = $template_code; |
175 | + | $tpl->assign('diffuculty_levels', array('<Unbewertet>', 'Einfach', 'Fortgeschritten', 'Mittel', 'Hart', 'Schwer')); |
176 | ||
177 | - | /* Put a php close tag, as we are continuing with out html-code-template */ |
177 | + | $tpl->display(); |
178 | - | $template_code .= '?>'; |
178 | + | |
179 | ||
180 | - | /* Append the template */ |
180 | + | |
181 | - | $template_code .= file_get_contents($this->template); |
181 | + | |
182 | */ | |
183 | - | /* Execute the build string as PHP-Code */ |
183 | + | function admin_track_do($trackId) |
184 | - | eval($template_code); |
184 | + | |
185 | $track = Track::get($trackId); | |
186 | - | /* Debug */ |
186 | + | |
187 | $track['number'] = (int)$_POST['number']; | |
188 | - | if (self::DEBUG) |
188 | + | |
189 | $track['difficulty'] = (int)$_POST['difficulty']; | |
190 | - | echo "<div style='display: none; width: 80%; position: absolute; top: 50px; left: 50%; margin-left: -45%; background: url(/images/bg.png); z-index: 1001; border-radius: 8px; border: 4px solid #E6572C; padding: 30px; color: #555; text-shadow: 0 1px 1px #fff ' id='debug'>\n"; |
190 | + | |
191 | - | echo "<h3 style='font-style: normal; color: #E6572C; border-bottom: 2px solid #bbb; margin-bottom: 20px;'>Template vars:</h3><pre style='background: #ffffff; border-radius: 2px; border: 1px solid #aaa; padding: 5px; margin: 10px 0;'>" . ($template_vars) . "</pre>"; |
191 | + | //$track['path'] = $_POST['path']; |
192 | - | echo "</div>"; |
192 | + | |
193 | $track['description'] = $_POST['description']; | |
194 | - | echo "<script type='text/javascript'>$(document).ready( function(){ $(document).keypress( function(e){ if (e.keyCode == 100) $('#debug').slideToggle() } ) } );</script>\n"; |
194 | + | |
195 | $track['max_trys'] = (int)$_POST['max_trys']; | |
196 | ||
197 | - | /** |
197 | + | Track::save($track); |
198 | - | * Includes a given template by name |
198 | + | |
199 | - | * |
199 | + | $message = 'Bahn mit der Id ' . (int)$trackId . ' erfolgreich bearbeitet.'; |
200 | - | * @param String $templ the name of the tempalte file to be included |
200 | + | Redirect::to('admin/start', array('flash_notice' => $message)); |
201 | - | */ |
201 | + | |
202 | - | static function getInclude($templ) |
202 | + | |
203 | /** | |
204 | - | /* Build the full path of the file to load */ |
204 | + | |
205 | - | $filename = Template::template_dir . '/' . $templ . '.template.php'; |
205 | + | |
206 | function admin_create_track() | |
207 | - | /* Check whether the requested file does exist, if not throw exception */ |
207 | + | |
208 | - | if ( ! file_exists($filename) ) |
208 | + | $trackId = Track::create(); |
209 | - | throw new FileNotFoundException('Template file ' . $filename . ' not found.'); |
209 | + | |
210 | Redirect::to('admin/track/' . $trackId); | |
211 | - | /* return the filename to include */ |
211 | + | |
212 | - | return $filename; |
212 | + | |
213 | /** | |
214 | * Reset a game by given trackId | |
215 | - | /** |
215 | + | |
216 | - | * Helper function, gives $default back when $var is unset |
216 | + | function admin_delete_track($trackId) |
217 | - | * |
217 | + | |
218 | - | * @param Mixed $var |
218 | + | $result = Track::delete($trackId); |
219 | - | * @param Mixed $default |
219 | + | |
220 | - | * |
220 | + | if ($result) |
221 | - | */ |
221 | + | Redirect::to('admin/start', array('flash_notice' => 'Die Bahn mit der Id '. (int)$trackId .' wurde gelöscht.')); |
222 | - | static function withDefault(&$var, $default) |
222 | + | else |
223 | Redirect::to('admin/start', array('flash_error' => 'Fehler beim Löschen der Bahn.')); | |
224 | - | if (!isset($var)) |
224 | + | |
225 | - | return $default; |
225 | + | |
226 | /** | |
227 | - | return $var; |
227 | + | |
228 | */ | |
229 | function admin_grant_player($playerId) | |
230 | - | /** |
230 | + | |
231 | - | * Try to load template by name, can throw FileNotFoundException |
231 | + | Player::grant($playerId); |
232 | - | * |
232 | + | |
233 | - | * @param String $templ template name |
233 | + | $gameId = Player::getGameId($playerId); |
234 | - | */ |
234 | + | |
235 | - | private function load($templ) |
235 | + | Redirect::to('admin/game/' . $gameId); |
236 | } | |
237 | - | /* Build the full path of the file to load */ |
237 | + | |
238 | - | $filename = Template::template_dir . '/' . $templ . '.template.php'; |
238 | + | |
239 | * | |
240 | - | /* Check whether the requested file does exist, if not throw exception */ |
240 | + | |
241 | - | if ( ! file_exists($filename) ) |
241 | + | function admin_remove_player($playerId) |
242 | - | throw new FileNotFoundException('Template file ' . $filename . ' not found.'); |
242 | + | |
243 | $gameId = Player::getGameId($playerId); | |
244 | - | /* Set the filename of the template */ |
244 | + | |
245 | - | $this->template = $filename; |
245 | + | Player::removeFromGame($playerId); |
246 | ||
247 | Redirect::to('admin/game/' . $gameId); | |
248 | } | |
249 | ||
250 | /* ---------------------------------------------------- */ | |
251 | - | ?> |
251 | + | |
252 | ||
253 | if ( ! Admin::is_auth() && $_GET['subpage'] != 'auth' ) | |
254 | Redirect::to('admin/auth'); | |
255 | ||
256 | $action = preg_replace('/\W/', '', $_GET['subpage']); | |
257 | ||
258 | $method = $_SERVER['REQUEST_METHOD'] == 'GET' ? '' : '_do'; | |
259 | ||
260 | $func = 'admin_' . $action . $method; | |
261 | ||
262 | if (function_exists($func)) | |
263 | { | |
264 | $params = array(); | |
265 | ||
266 | if (isset($_GET['id'])) | |
267 | { | |
268 | $params[] = (int)$_GET['id']; | |
269 | } | |
270 | ||
271 | call_user_func_array($func, $params); | |
272 | } | |
273 | else | |
274 | Redirect::to('admin/start'); |