/** * Initialize the controller. * * @return $this Method allows chaining * * @since 1.0 */ public function initialize() { parent::initialize(); /* @type Application $application */ $application = $this->getContainer()->get('app'); $limit = $application->getUserStateFromRequest('list.limit', 'list_limit', 20, 'int'); $page = $application->input->getInt('page'); $value = $page ? ($page - 1) * $limit : 0; $limitStart = $limit != 0 ? floor($value / $limit) * $limit : 0; $state = $this->model->getState(); $state->set('list.start', $limitStart); $state->set('list.limit', $limit); $this->model->setState($state); $this->model->setPagination(new TrackerPagination(new Uri($this->getContainer()->get('app')->get('uri.request')))); return $this; }
/** * Setting model state that will be used for filtering. * * @param \App\Tracker\Model\IssuesModel $model The issues model * * @return \Joomla\Registry\Registry * * @since 1.0 */ private function setModelState(IssuesModel $model) { /* @type \JTracker\Application $application */ $application = $this->getContainer()->get('app'); $state = $model->getState(); $projectId = $application->getProject()->project_id; // Set up pagination values $limit = $application->getUserStateFromRequest('list.limit', 'limit', 20, 'int'); $page = $application->getUserStateFromRequest('project_' . $projectId . '.page', 'page', 1, 'uint'); $projectIdFromState = $application->getUserState('projectId', 0); // Reset page on project change if ($projectId != $projectIdFromState) { $application->setUserState('projectId', $projectId); $page = 1; } $value = $page ? ($page - 1) * $limit : 0; $limitStart = $limit != 0 ? floor($value / $limit) * $limit : 0; $state->set('list.start', $limitStart); $state->set('list.limit', $limit); // Get sort and direction $sort = $application->getUserStateFromRequest('project_' . $projectId . '.filter.sort', 'sort', 0, 'uint'); switch ($sort) { case 1: $state->set('list.ordering', 'a.issue_number'); $state->set('list.direction', 'ASC'); break; case 2: $state->set('list.ordering', 'a.modified_date'); $state->set('list.direction', 'DESC'); break; case 3: $state->set('list.ordering', 'a.modified_date'); $state->set('list.direction', 'ASC'); break; default: $state->set('list.ordering', 'a.issue_number'); $state->set('list.direction', 'DESC'); } $state->set('filter.sort', $sort); $state->set('filter.priority', $application->getUserStateFromRequest('project_' . $projectId . '.filter.priority', 'priority', 0, 'uint')); $state->set('filter.state', $application->getUserStateFromRequest('project_' . $projectId . '.filter.state', 'state', 0, 'uint')); $state->set('filter.status', $application->getUserStateFromRequest('project_' . $projectId . '.filter.status', 'status', 0, 'uint')); $state->set('filter.search', $application->getUserStateFromRequest('project_' . $projectId . '.filter.search', 'search', '', 'string')); $state->set('filter.user', $application->getUserStateFromRequest('project_' . $projectId . '.filter.user', 'user', 0, 'uint')); $state->set('filter.category', $application->getUserStateFromRequest('project_' . $projectId . '.filter.category', 'category', 0, 'uint')); $state->set('filter.tests', $application->getUserStateFromRequest('project_' . $projectId . '.filter.tests', 'tests', 0, 'uint')); $state->set('filter.easytest', $application->getUserStateFromRequest('project_' . $projectId . '.filter.easytest', 'easytest', 0, 'uint')); $state->set('stools-active', $application->input->get('stools-active', 0, 'uint')); if ($application->getUser()->username) { $state->set('username', $application->getUser()->username); } $model->setState($state); }