private function lookupQuery($query) { // Build the lookup array. if (!$this->lookup) { $this->makeLookup(); } if (!isset($query['view'])) { return null; } // View matches. if (isset($this->lookup[$query['view']])) { // More complex view. if (is_array($this->lookup[$query['view']])) { $key = isset($query['id']) ? $query['id'] : (isset($query['project_id']) ? $query['project_id'] : '_'); // Use "new" as layout for view=issue&project_id=* and view=comment&issue_id=* if ($query['layout'] === 'edit') { if ($query['view'] === 'issue' && isset($query['project_id']) || $query['view'] === 'comment' && isset($query['issue_id'])) { $query['layout'] = 'new'; } } // View and ID match. if (isset($this->lookup[$query['view']][$key])) { if (is_array($this->lookup[$query['view']][$key])) { if (isset($query['layout'])) { // View, ID and layout match. if (isset($this->lookup[$query['view']][$key][$query['layout']])) { return $this->lookup[$query['view']][$key][$query['layout']]; } elseif ($query['layout'] === 'default' && isset($this->lookup[$query['view']][$key]['edit'])) { return $this->lookup[$query['view']][$key]['edit']; } elseif ($query['layout'] === 'default' && isset($this->lookup[$query['view']][$key]['new'])) { return $this->lookup[$query['view']][$key]['new']; } } } else { return $this->lookup[$query['view']][$key]; } } } else { return $this->lookup[$query['view']]; } } // View doesn't match. // Menu: Project, URL: Issues for the same project. if ($query['view'] === 'issues' && isset($query['project_id'])) { if (isset($this->lookup['project']) && isset($this->lookup['project'][$query['project_id']])) { return $this->lookup['project'][$query['project_id']]; } } elseif ($query['view'] === 'issue') { if (isset($query['id'])) { $projectId = $this->modelIssue->getIssueProject($query['id']); if ($projectId) { // Found menu item for the same project. if (isset($this->lookup['project']) && isset($this->lookup['project'][$projectId])) { return $this->lookup['project'][$projectId]; } elseif (isset($this->lookup['issues']) && isset($this->lookup['issues'][$projectId])) { return $this->lookup['issues'][$projectId]; } } } } elseif ($query['view'] === 'project') { if (isset($this->lookup['projects'])) { return $this->lookup['projects']; } } return null; }