control.inc
4.64 KB
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
<?php
/**
* $Id$
*
* Contains the controller helper functions
*
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
* @version $Revision$
* @author Michael Joseph <michael@jamwarehouse.com>, Jam Warehouse (Pty) Ltd, South Africa
* @package lib.session
*/
/**
* Redirects to the specified URL
*
* @param string the URL to forward to
*/
function redirect($url) {
header("Location: $url");
}
/**
* Performs a redirect through the controller.
* Takes a controller action and queryString and builds url.
*
* @param string the controller action
* @param string additional querystring vars
*/
function controllerRedirect($sAction, $sQueryString) {
global $default;
// generate url
$url = generateControllerUrl($sAction, $sQueryString);
// now redirect
$default->log->debug("controllerRedirect: redirect to $url");
redirect($url);
}
/**
* Generates a link
*
* @param string the url to link to
* @param string the querystring
* @param string the link text (optional)
* @return string the html link if the link text is specified, otherwise just the url
*/
function generateLink($sTargetPage, $sQueryString, $sLinkText = "") {
global $default;
if (strlen($sQueryString) > 0) {
$sQueryStringDelimiter = (strstr($sTargetPage, "?") ? "&" : "?");
}
$sLink = "http" . ($default->sslEnabled ? "s" : "") . "://" . $default->serverName .
((substr($sTargetPage, 0, strlen($default->rootUrl)) != $default->rootUrl) ? $default->rootUrl : "") .
$sTargetPage . $sQueryStringDelimiter . $sQueryString;
return (strlen($sLinkText) > 0) ? "<a href=\"$sLink\">$sLinkText</a>" : $sLink;
}
/**
* Returns a controller url.
*
* @param string the controller action to generate a url for
* @param string additional querystring parameters (optional)
* @return string the controller url, empty string if no action is supplied
*/
function generateControllerUrl($sAction, $sQueryString = "") {
if (strlen($sAction) > 0) {
return generateLink("/control.php?action=$sAction", $sQueryString);
} else {
return "";
}
}
/**
* Generates a link via the control page, with the passed action
*
* @param string the controller action to generate a link for
* @param string the text of the link
* @param string the querystring (optional)
* @return string the generated href
*/
function generateControllerLink($sAction, $sQueryString, $sLinkText = "") {
return generateLink("/control.php?action=$sAction", $sQueryString, $sLinkText);
}
/**
* Checks the current session and redirects to the login page
* if the redirect parameter is true.
*
* @param boolean whether to automatically redirect to the login page on session verification failure
*/
function checkSessionAndRedirect($bRedirect) {
global $default;
$session = new Session();
$sessionStatus = $session->verify();
if ($sessionStatus != 1) {
// verification failed
$default->log->debug("checkSession:: session check failed");
if ($bRedirect) {
// redirect to login with error message
$url = generateControllerUrl("loginForm");
$redirect = urlencode($_SERVER[PHP_SELF] . "?" . $_SERVER["QUERY_STRING"]);
if ((strlen($redirect) > 1)) {
$default->log->debug("checkSession:: redirect url=$redirect");
// this session verification failure represents either the first visit to
// the site OR a session timeout etc. (in which case we still want to bounce
// the user to the login page, and then back to whatever page they're on now)
$url = $url . "&redirect=" . $redirect;
}
$default->log->debug("checkSession:: about to redirect to $url");
redirect($url);
exit;
} else {
return false;
}
} else {
$default->log->debug("checkSession:: returning true");
return true;
}
}
/**
* Verifies the current session
* Automatically redirects to the login page on session verification failure
*/
function checkSession() {
global $default;
if (checkSessionAndRedirect(true)) {
$default->log->debug("control.inc: print the session variables: " . arrayToString($_SESSION));
// the session is cool, now check if we access to this page
$default->log->debug("control.inc: page=" . $_SERVER['PHP_SELF'] . " ? " . $_SESSION["pageAccess"][$_SERVER['PHP_SELF']]);
if ($_SESSION["pageAccess"][$_SERVER['PHP_SELF']]) {
return true;
} else {
return false;
}
}
// if the check session fails, we'll be redirected to the login page
}