Improve Board::Index() and avoid useless HTTP redirects
This commit is contained in:
parent
a7f3cd87fb
commit
12a688347c
|
|
@ -280,11 +280,12 @@ abstract class Base
|
|||
* Common method to get a project
|
||||
*
|
||||
* @access protected
|
||||
* @param integer $project_id Default project id
|
||||
* @return array
|
||||
*/
|
||||
protected function getProject()
|
||||
protected function getProject($project_id = 0)
|
||||
{
|
||||
$project_id = $this->request->getIntegerParam('project_id');
|
||||
$project_id = $this->request->getIntegerParam('project_id', $project_id);
|
||||
$project = $this->project->getById($project_id);
|
||||
|
||||
if (! $project) {
|
||||
|
|
|
|||
|
|
@ -188,71 +188,54 @@ class Board extends Base
|
|||
*/
|
||||
public function index()
|
||||
{
|
||||
$projects = $this->project->getListByStatus(ProjectModel::ACTIVE);
|
||||
$project_id = 0;
|
||||
$project_name = '';
|
||||
$last_seen_project_id = $this->user->getLastSeenProject();
|
||||
$favorite_project_id = $this->user->getFavoriteProjectId();
|
||||
$project_id = $last_seen_project_id ?: $favorite_project_id;
|
||||
|
||||
if ($this->acl->isRegularUser()) {
|
||||
$projects = $this->project->filterListByAccess($projects, $this->acl->getUserId());
|
||||
}
|
||||
if (! $project_id) {
|
||||
$projects = $this->project->getAvailableList($this->acl->getUserId());
|
||||
|
||||
if (empty($projects)) {
|
||||
if (empty($projects)) {
|
||||
|
||||
if ($this->acl->isAdminUser()) {
|
||||
$this->redirectNoProject();
|
||||
if ($this->acl->isAdminUser()) {
|
||||
$this->redirectNoProject();
|
||||
}
|
||||
|
||||
$this->forbidden();
|
||||
}
|
||||
else {
|
||||
$this->response->redirect('?controller=project&action=forbidden');
|
||||
}
|
||||
}
|
||||
else if (! empty($_SESSION['user']['last_show_project_id']) && isset($projects[$_SESSION['user']['last_show_project_id']])) {
|
||||
$project_id = $_SESSION['user']['last_show_project_id'];
|
||||
$project_name = $projects[$_SESSION['user']['last_show_project_id']];
|
||||
}
|
||||
else if (! empty($_SESSION['user']['default_project_id']) && isset($projects[$_SESSION['user']['default_project_id']])) {
|
||||
$project_id = $_SESSION['user']['default_project_id'];
|
||||
$project_name = $projects[$_SESSION['user']['default_project_id']];
|
||||
}
|
||||
else {
|
||||
list($project_id, $project_name) = each($projects);
|
||||
|
||||
$project_id = key($projects);
|
||||
}
|
||||
|
||||
$this->response->redirect('?controller=board&action=show&project_id='.$project_id);
|
||||
$this->show($project_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a board for a given project
|
||||
*
|
||||
* @access public
|
||||
* @param integer $project_id Default project id
|
||||
*/
|
||||
public function show()
|
||||
public function show($project_id = 0)
|
||||
{
|
||||
$project_id = $this->request->getIntegerParam('project_id');
|
||||
$user_id = $this->request->getIntegerParam('user_id', UserModel::EVERYBODY_ID);
|
||||
|
||||
// Stored last seen in the project dashboard
|
||||
$_SESSION['user']['last_show_project_id'] = $project_id ;
|
||||
|
||||
$this->checkProjectPermissions($project_id);
|
||||
$project = $this->getProject($project_id);
|
||||
$projects = $this->project->getAvailableList($this->acl->getUserId());
|
||||
|
||||
if (! isset($projects[$project_id])) {
|
||||
$this->notfound();
|
||||
}
|
||||
|
||||
$board_selector = $projects;
|
||||
unset($board_selector[$project_id]);
|
||||
unset($board_selector[$project['id']]);
|
||||
|
||||
$this->user->storeLastSeenProject($project['id']);
|
||||
|
||||
$this->response->html($this->template->layout('board_index', array(
|
||||
'users' => $this->project->getUsersList($project_id, true, true),
|
||||
'filters' => array('user_id' => $user_id),
|
||||
'users' => $this->project->getUsersList($project['id'], true, true),
|
||||
'filters' => array('user_id' => UserModel::EVERYBODY_ID),
|
||||
'projects' => $projects,
|
||||
'current_project_id' => $project_id,
|
||||
'current_project_name' => $projects[$project_id],
|
||||
'board' => $this->board->get($project_id),
|
||||
'categories' => $this->category->getList($project_id, true, true),
|
||||
'current_project_id' => $project['id'],
|
||||
'current_project_name' => $projects[$project['id']],
|
||||
'board' => $this->board->get($project['id']),
|
||||
'categories' => $this->category->getList($project['id'], true, true),
|
||||
'menu' => 'boards',
|
||||
'title' => $projects[$project_id],
|
||||
'title' => $projects[$project['id']],
|
||||
'board_selector' => $board_selector,
|
||||
)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ class User extends Base
|
|||
list($valid, $errors) = $this->authentication->validateForm($values);
|
||||
|
||||
if ($valid) {
|
||||
$this->response->redirect('?controller=app');
|
||||
$this->response->redirect('?controller=board');
|
||||
}
|
||||
|
||||
$this->response->html($this->template->layout('user_login', array(
|
||||
|
|
|
|||
|
|
@ -27,6 +27,39 @@ class User extends Base
|
|||
*/
|
||||
const EVERYBODY_ID = -1;
|
||||
|
||||
/**
|
||||
* Get the default project from the session
|
||||
*
|
||||
* @access public
|
||||
* @return integer
|
||||
*/
|
||||
public function getFavoriteProjectId()
|
||||
{
|
||||
return isset($_SESSION['user']['default_project_id']) ? $_SESSION['user']['default_project_id'] : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the last seen project from the session
|
||||
*
|
||||
* @access public
|
||||
* @return integer
|
||||
*/
|
||||
public function getLastSeenProject()
|
||||
{
|
||||
return empty($_SESSION['user']['last_show_project_id']) ? 0 : $_SESSION['user']['last_show_project_id'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the last seen project from the session
|
||||
*
|
||||
* @access public
|
||||
* @@param integer $project_id Project id
|
||||
*/
|
||||
public function storeLastSeenProject($project_id)
|
||||
{
|
||||
$_SESSION['user']['last_show_project_id'] = (int) $project_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a specific user by id
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue