Example #1
0
 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;
 }