-
Notifications
You must be signed in to change notification settings - Fork 8
/
Controller.php
482 lines (432 loc) · 10.7 KB
/
Controller.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
<?php
/**
* @author Paul Dragoonis <dragoonis@php.net>
* @license http://opensource.org/licenses/mit-license.php MIT
* @package Controller
* @link www.ppiframework.com
*/
class PPI_Controller {
/**
* The PPI_View object
*
* @var PPI_View
*/
protected $_view = null;
/**
* The constructor
*/
function __construct () {
$this->_view = PPI_Helper::getView();
$this->_request = PPI_Helper::getRequest();
$this->_response = PPI_Helper::getResponse();
}
/**
* Perform redirect to internal framework url. Optionally redirect to external host
*
* @todo Make this auto-detect the first X chars starting with http:// and remove the prependbase char
* @param string $p_sURL Optional param for where to redirect to
* @param boolean $p_bPrependBase Default is true. If true will prepend the framework's base Url.
* If false will redirect to absolute external url.
* @throws PPI_Exception
* @return boolean
*/
protected function redirect($p_sURL = '', $p_bPrependBase = true) {
$sUrl = ($p_bPrependBase === true) ? $this->getConfig()->system->base_url . $p_sURL : $p_sURL;
if(!headers_sent()) {
header("Location: $sUrl");
exit;
} else {
throw new PPI_Exception('Unable to redirect to '.$sUrl.'. Headers already sent');
}
}
/**
* Load a view
*
* @param string $p_tplFile The view filename. File extensions are optional.
* @param array $p_tplParams Optional parameters to the view file.
* @return void
*/
protected function load($p_tplFile, $p_tplParams = array()) {
if(!isset($p_tplParams['isAjax']) && $this->is('ajax')) {
$p_tplParams['isAjax'] = true;
}
return $this->render($p_tplFile, $p_tplParams);
}
/**
* Override the current set theme name
*
* @param string $p_sThemeName
* @return void
*/
protected function theme($p_sThemeName) {
$this->_view->theme($p_sThemeName);
}
/**
* Set a view variable or a list of view variables.
*
* @param mixed $p_mKeys
* @param mixed $p_mValue
* @return void
*/
protected function set($p_mKeys, $p_mValue = null) {
if(is_scalar($p_mKeys)) {
$p_mKeys = array($p_mKeys => $p_mValue);
}
foreach($p_mKeys as $key => $val) {
$this->_view->set($key, $val);
}
}
/**
* Load a view, but override the renderer to smarty
*
* @param string $p_tplFile The view filename. File extensions are optional.
* @param array $p_tplParams Optional parameters to the view file.
* @return void
*
*/
protected function loadSmarty($p_tplFile, $p_tplParams = array()) {
$this->_view->loadsmarty($p_tplFile, $p_tplParams);
}
/**
* Append to the list of stylesheets to be included
*
* @param mixed $p_mStylesheet This can be an existing array of stylesheets or a string.
* @return void
*/
protected function addStylesheet($p_mStylesheet) {
$this->_response->addCSS(func_get_args());
}
protected function addCSS() {
$this->_response->addCSS(func_get_args());
}
/**
* Clear all set stylesheets
*
* @return void
*/
protected function clearCSS() {
$this->_response->clearCSS();
}
/**
* Append to the list of javascript files to be included
*
* @return void
*/
protected function addJavascript() {
$this->_response->addJS(func_get_args());
}
/**
* Add a javascript file
*
* @return void
*/
protected function addJS() {
$this->_response->addJS(func_get_args());
}
/**
* Override the default template file, with optional include for the .php or .tpl extension
*
* @todo have this lookup the template engines default extension and remove the smarty param
* @param string $p_sNewTemplateFile New Template Filename
* @return void
*/
protected function setTemplateFile($p_sNewTemplateFile) {
$this->_view->setTemplateFile($p_sNewTemplateFile);
}
/**
* Check if a template exists
*
* @param string $templateName The template Name
* @return bool
*/
protected function templateExists($templateName) {
return $this->_view->templateExists($templateName);
}
/**
* Setter for setting the flash message to appear on next page load.
*
* @param string $message
* @param boolean $success
* @return void
*/
protected function setFlashMessage($message, $success = true) {
$this->_response->setFlash($message, $success);
}
/**
* Setter for setting the flash message to appear on next page load.
*
* @param string $message
* @param boolean $success
* @return void
*/
protected function setFlash($message, $success = true) {
$this->_response->setFlash($message, $success);
}
/**
* Getter for the flash message.
*
* @return string
*/
protected function getFlashMessage() {
$this->_response->getFlash();
}
/**
* Clear the flash message from the session
*
* @return void
*/
protected function clearFlashMessage() {
$this->_response->clearFlash();
}
/**
* Get the full current URI
*
* @todo Maybe just strip off baseUrl from the URL and that's our URI
* @return string
*/
protected function getCurrUrl() {
throw new PPI_Exception('Deprecated function - use getUri() instead');
}
/**
* Get the full URL
*
* @return string
*/
protected function getFullUrl() {
return $this->getUrl();
}
/**
* Get the current URL
*
* @return string
*/
protected function getUrl() {
return $this->_request->getUrl();
}
/**
* Get the current protocol in use
*
* @return string
*/
protected function getProtocol() {
return $this->_request->getProtocol();
}
/**
* Get the current URI
*
* @return string
*/
protected function getUri() {
return $this->_request->getUri();
}
/**
* Get the base url set in the config
*
* @return string
*/
protected function getBaseUrl() {
return $this->getConfig()->system->base_url;
}
/**
* PPI_Controller::getConfig()
* Returns the PPI_Config object
*
* @return object
*/
protected function getConfig() {
return PPI_Helper::getConfig();
}
/**
* Returns the session object
*
* @param mixed $p_mOptions
* @return object PPI_Model_Session
*/
protected function getSession($p_mOptions = null) {
return PPI_Helper::getSession($p_mOptions);
}
/**
* Returns the session object
*
* @return object PPI_Model_Session
*/
protected function getRegistry() {
return PPI_Helper::getRegistry();
}
/**
* Get the dispatcher object
*
* @return object
*/
protected function getDispatcher() {
return PPI_Helper::getDispatcher();
}
/**
* Get the cache object from PPI_Helper
*
* @param mixed $p_mOptions
* @return object
*/
protected function getCache($p_mOptions = null) {
return PPI_Helper::getCache($p_mOptions);
}
/**
* Checks if the current user is logged in
*
* @return boolean
*/
protected function isLoggedIn() {
$aAuthData = $this->getAuthData();
return !empty($aAuthData);
}
/**
* Gets the current logged in users authentication data
*
* @param boolean $p_bUseArray Default is true. If false then will return an object instead
* @return array|object
*/
protected function getAuthData($p_bUseArray = true) {
$authData = $this->getSession()->getAuthData();
return $p_bUseArray ? $authData : (object) $authData;
}
/**
* Get a parameter from the URI
*
* @param string $p_sVar The key name
* @param mixed $p_mDefault The default value returned if the key doesn't exist
* @return mixed
*/
protected function get($p_sVar, $p_mDefault = null) {
return $this->_request->get($p_sVar, $p_mDefault);
}
/**
* Get a parametere from the query string aka $_GET
*
* @param string $key The Key
* @param null $default The default value is $key doesn't exist
* @return mixed
*/
protected function getQuery($key, $default = null) {
return $this->_request->getQuery($key, $default);
}
/**
* Access the HTTP POST variables
*
* @param string $p_sVar The variable name to access
* @param mixed $p_mDefault The default value if the key defined doesn't exist
* @return mixed
*/
protected function post($p_sVar = null, $p_mDefault = null) {
return $this->_request->post($p_sVar, $p_mDefault);
}
/**
* Does a particular post variable exist
*
* @param string $p_sKey The post variable
* @return boolean
*/
protected function hasPost($p_sKey) {
return $this->_request->hasPost($p_sKey);
}
/**
* Has the form been submitted ?
*
* @return boolean
*/
protected function isPost() {
return $this->_request->is('post');
}
/**
* Obtain strippost from the input object
* Will give all HTTP POST variables that match a specific prefix
*
* @param unknown_type $p_sPrefix
* @return unknown
*/
protected function stripPost($p_sPrefix) {
return $this->_request->stripPost($p_sPrefix);
}
/**
* Remove a value from HTTP POST
*
* @param string $p_sKey
* @return void
*/
protected function removePost($p_sKey) {
$this->_request->removePost($p_sKey);
}
/**
* Empty the entire HTTP POST
*
* @return void
*/
protected function emptyPost() {
$this->_request->emptyPost();
}
/**
* Return a boolean values on this 'is' check
*
* @param string $var
* @return bool
*/
protected function is($var) {
switch($var) {
case 'ajax':
case 'post':
case 'get':
case 'head':
case 'put':
case 'mobile':
case 'ssl':
case 'https':
return $this->_request->is($var);
break;
}
return false;
}
/**
* Get a remote variable from the request object
*
* @param string $var
* @return null
*/
protected function getRemote($var) {
switch($var) {
case 'ip':
case 'browser':
case 'browserAndVersion':
case 'browserVersion':
case 'userAgent':
return $this->_request->getRemote($var);
break;
}
return null;
}
/**
* The main render function that pull in data from all framework components to render this page.
*
* @param string $template
* @param array $options
* @return mixed
*/
public function render($template, array $params = array(), $options = array()) {
$core = array();
$core['charset'] = $this->_response->getCharset();
$core['url'] = $this->_request->getUrl();
$core['uri'] = $this->_request->getUri();
$core['flash'] = $this->_response->getFlashAndClear();
$core['is'] = array(
'ajax' => $this->_request->is('ajax'),
'https' => $this->_request->is('https'),
'post' => $this->_request->is('post'),
'get' => $this->_request->is('get'),
'put' => $this->_request->is('put'),
'delete' => $this->_request->is('delete'),
'head' => $this->_request->is('head')
);
$core['files']['css'] = $this->_response->getCSSFiles();
$core['files']['js'] = $this->_response->getJSFiles();
$params['core'] = $core;
return $this->_view->render($template, $params, $options);
}
}