public function handleRequest(AphrontRequest $request)
 {
     $viewer = $this->getViewer();
     $this->view = $request->getURIData('view');
     if ($request->isFormPost()) {
         $uri = $request->getRequestURI();
         $project = head($request->getArr('set_project'));
         $project = nonempty($project, null);
         $uri = $uri->alter('project', $project);
         $window = $request->getStr('set_window');
         $uri = $uri->alter('window', $window);
         return id(new AphrontRedirectResponse())->setURI($uri);
     }
     $nav = new AphrontSideNavFilterView();
     $nav->setBaseURI(new PhutilURI('/maniphest/report/'));
     $nav->addLabel(pht('Open Tasks'));
     $nav->addFilter('user', pht('By User'));
     $nav->addFilter('project', pht('By Project'));
     $nav->addLabel(pht('Burnup'));
     $nav->addFilter('burn', pht('Burnup Rate'));
     $this->view = $nav->selectFilter($this->view, 'user');
     require_celerity_resource('maniphest-report-css');
     switch ($this->view) {
         case 'burn':
             $core = $this->renderBurn();
             break;
         case 'user':
         case 'project':
             $core = $this->renderOpenTasks();
             break;
         default:
             return new Aphront404Response();
     }
     $nav->appendChild($core);
     $nav->setCrumbs($this->buildApplicationCrumbs()->addTextCrumb(pht('Reports')));
     return $this->buildApplicationPage($nav, array('title' => pht('Maniphest Reports'), 'device' => false));
 }