public function __construct()
{
$this->db = ConnectionManager::getConnection();
// Modal?
if (Request::$headers->has('X-Modal')) {
$this->isModal = Request::$headers->get('X-Modal') == true;
}
// Get current project.
if (Request::$properties->has('pslug')) {
$this->currentProject = Project::find('slug', Request::$properties->get('pslug')) ?: null;
$GLOBALS['current_project'] = $this->currentProject;
$this->before('*', function () {
if (!$this->hasPermission('view', $this->currentProject)) {
return $this->show404();
}
});
} else {
$GLOBALS['current_project'] = null;
}
// Get current user.
if ($sessionHash = Request::$cookies->get('traq')) {
if ($this->currentProject) {
$user = User::select('u.*')->addSelect('pur.project_role_id')->leftJoin('u', UserRole::tableName(), 'pur', 'pur.project_id = :project_id AND pur.user_id = u.id');
$user->where('u.session_hash = :session_hash');
$user->setParameter('project_id', $this->currentProject['id']);
$user->setParameter('session_hash', $sessionHash);
$this->currentUser = $user->fetch() ?: null;
} else {
$this->currentUser = User::find('session_hash', $sessionHash) ?: null;
}
$GLOBALS['current_user'] = $this->currentUser;
} else {
$GLOBALS['current_user'] = null;
}
$GLOBALS['permissions'] = Permission::getPermissions($this->currentUser, $this->currentProject);
// Add Traq as first breadcrumb.
$this->addCrumb(setting('title'), $this->generateUrl('root'));
// Check if the user has permission to view the current project
if (isset($this->currentProject)) {
$this->before('*', function () {
if (!$this->hasPermission('view')) {
return $this->show403();
}
});
}
// If the user has a `sha1` hashed password, require them to change it because
// as of Traq 4.1, only mcrypt passwords will work.
if ($this->currentUser['password_ver'] == 'sha1') {
$this->before('*', function () {
if (Request::$properties['controller'] != 'Traq\\Controllers\\UserCP' && Request::$properties['controller'] != 'Traq\\Controllers\\Sessions') {
return $this->redirectTo('usercp_password');
}
});
}
}