/**
* Process a regular request
*
* @param string $module The requested module.
* @param string $action The requested action.
* @param string $language The requested language.
*/
private function processRegularRequest($module, $action, $language)
{
// the person isn't logged in? or the module doesn't require authentication
if (!Authentication::isLoggedIn() && !Authentication::isAllowedModule($module)) {
// redirect to login
$this->redirect('/' . NAMED_APPLICATION . '/' . $language . '/authentication?querystring=' . rawurlencode('/' . $this->getQueryString()));
} elseif (Authentication::isLoggedIn() && !Authentication::isAllowedModule($module)) {
// the person is logged in, but doesn't have access to our action
// if the module is the dashboard redirect to the first allowed module
if ($module == 'Dashboard') {
// require navigation-file
require_once Navigation::getCacheDirectory() . 'navigation.php';
// loop the navigation to find the first allowed module
foreach ($navigation as $value) {
// split up chunks
list($module, $action) = explode('/', $value['url']);
// user allowed?
if (Authentication::isAllowedModule($module)) {
// redirect to the page
$this->redirect('/' . NAMED_APPLICATION . '/' . $language . '/' . $value['url']);
} else {
if (array_key_exists('children', $value)) {
foreach ($value['children'] as $subItem) {
// split up chunks
list($module, $action) = explode('/', $subItem['url']);
// user allowed?
if (Authentication::isAllowedModule($module)) {
$finder = new Finder();
$files = $finder->files()->name('*.php')->in(BACKEND_MODULES_PATH . '/' . \SpoonFilter::toCamelCase($module) . '/Actions');
foreach ($files as $file) {
$moduleAction = mb_substr($file->getFilename(), 0, -4);
if (Authentication::isAllowedAction($moduleAction, $module)) {
$this->redirect('/' . NAMED_APPLICATION . '/' . $language . '/' . $module . '/' . $moduleAction);
}
}
}
}
}
}
}
}
// the user doesn't have access, redirect to error page
$this->redirect('/' . NAMED_APPLICATION . '/' . $language . '/error?type=module-not-allowed&querystring=' . rawurlencode('/' . $this->getQueryString()), 307);
} elseif (!Authentication::isAllowedAction($action, $module)) {
// the user hasn't access, redirect to error page
$this->redirect('/' . NAMED_APPLICATION . '/' . $language . '/error?type=action-not-allowed&querystring=' . rawurlencode('/' . $this->getQueryString()), 307);
} else {
// set the working language, this is not the interface language
BackendLanguage::setWorkingLanguage($language);
$this->setLocale();
$this->setModule($module);
$this->setAction($action);
}
}