, 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;
$sQueryStringDelimiter = strlen($sQueryString) > 0 ? (strstr($sTargetPage, "?") ? "&" : "?") : "";
$sLink = "http" . ($default->sslEnabled ? "s" : "") . "://" . $default->serverName .
((substr($sTargetPage, 0, strlen($default->rootUrl)) != $default->rootUrl) ? $default->rootUrl : "") .
(substr($sTargetPage, 0, 1) == "/" ? "" : "/") .
$sTargetPage . $sQueryStringDelimiter . $sQueryString;
return (strlen($sLinkText) > 0) ? "$sLinkText" : $sLink;
}
/**
* Generates a link used when setting up template documents for document linking in folder
* collaboration. Formatted to send document name and id back to parent window
*
* @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 generateLinkForTemplateDocumentBrowse($sTargetPage, $sQueryString, $sLinkText = "", $sDocumentName, $iDocumentID) {
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) ? "$sLinkText" : $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 = "", $bReturnLink = true) {
global $default;
$qs = "";
if (!empty($sQueryString)) {
$qs = 'qs=' . urlencode($sQueryString);
}
if (strlen($sAction) > 0) {
if ($bReturnLink) {
return generateLink("/control.php?action=$sAction", $qs);
} else {
if (empty($qs)) {
return $default->rootUrl . "/control.php?action=$sAction";
} else {
return $default->rootUrl . "/control.php?action=$sAction&$qs";
}
}
} 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 = "") {
$qs = "";
if (!empty($sQueryString)) {
$qs = 'qs=' . urlencode($sQueryString);
}
return generateLink("/control.php?action=$sAction", $qs, $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
* @param boolean optional parameter set if we're downloading a file
*/
function checkSessionAndRedirect($bRedirect, $bDownload = false) {
global $default;
$session = new Session();
$sessionStatus = $session->verify($bDownload);
if ($sessionStatus != 1) {
// verification failed
$default->log->debug("checkSession:: session check failed");
if ($bRedirect) {
// redirect to login with error message
if ($sessionStatus == 2) {
// session timed out
$url = generateControllerUrl("loginForm", "errorMessage=" . urlencode("Session timed out"));
} else {
$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
* @param boolean optional parameter set if we're downloading a file
*/
function checkSession($bDownload = false, $bHandleNoAccess = true) {
global $default;
if (checkSessionAndRedirect(true, $bDownload)) {
$default->log->debug("control.inc: print the session variables: " . arrayToString($_SESSION));
// the session is cool, now check if we access to this page
$pageName = KTUtil::getRequestScriptName($_SERVER);
$default->log->debug("control.inc: page=" . $pageName . " ? " . $_SESSION["pageAccess"][$pageName]);
if ($_SESSION["pageAccess"][$pageName]) {
return true;
} else {
if ($bHandleNoAccess === true) {
print "Access restricted\n";
exit(0);
}
return false;
}
}
// if the check session fails, we'll be redirected to the login page
}