public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $nav = $this->buildSideNavView();
     $nav->selectFilter('issue/');
     $issues = PhabricatorSetupCheck::runAllChecks();
     PhabricatorSetupCheck::setOpenSetupIssueKeys(PhabricatorSetupCheck::getUnignoredIssueKeys($issues));
     $important = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_IMPORTANT);
     $php = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_PHP);
     $mysql = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_MYSQL);
     $other = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_OTHER);
     $setup_issues = array();
     if ($important) {
         $setup_issues[] = id(new PHUIObjectBoxView())->setHeaderText(pht('Important Setup Issues'))->appendChild($important);
     }
     if ($php) {
         $setup_issues[] = id(new PHUIObjectBoxView())->setHeaderText(pht('PHP Setup Issues'))->appendChild($php);
     }
     if ($mysql) {
         $setup_issues[] = id(new PHUIObjectBoxView())->setHeaderText(pht('MySQL Setup Issues'))->appendChild($mysql);
     }
     if ($other) {
         $setup_issues[] = id(new PHUIObjectBoxView())->setHeaderText(pht('Other Setup Issues'))->appendChild($other);
     }
     if (empty($setup_issues)) {
         $setup_issues[] = id(new PHUIInfoView())->setTitle(pht('No Issues'))->appendChild(pht('Your install has no current setup issues to resolve.'))->setSeverity(PHUIInfoView::SEVERITY_NOTICE);
     }
     $nav->appendChild($setup_issues);
     $title = pht('Setup Issues');
     $crumbs = $this->buildApplicationCrumbs($nav)->addTextCrumb(pht('Setup'), $this->getApplicationURI('issue/'));
     $nav->setCrumbs($crumbs);
     return $this->buildApplicationPage($nav, array('title' => $title));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $nav = $this->buildSideNavView();
     $nav->selectFilter('issue/');
     $issues = PhabricatorSetupCheck::runAllChecks();
     PhabricatorSetupCheck::setOpenSetupIssueKeys(PhabricatorSetupCheck::getUnignoredIssueKeys($issues), $update_database = true);
     $important = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_IMPORTANT);
     $php = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_PHP);
     $mysql = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_MYSQL);
     $other = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_OTHER);
     $setup_issues = array();
     if ($important) {
         $setup_issues[] = id(new PHUIObjectBoxView())->setHeaderText(pht('Important Setup Issues'))->setColor(PHUIObjectBoxView::COLOR_RED)->setObjectList($important);
     }
     if ($php) {
         $setup_issues[] = id(new PHUIObjectBoxView())->setHeaderText(pht('PHP Setup Issues'))->setObjectList($php);
     }
     if ($mysql) {
         $setup_issues[] = id(new PHUIObjectBoxView())->setHeaderText(pht('MySQL Setup Issues'))->setObjectList($mysql);
     }
     if ($other) {
         $setup_issues[] = id(new PHUIObjectBoxView())->setHeaderText(pht('Other Setup Issues'))->setObjectList($other);
     }
     if (empty($setup_issues)) {
         $setup_issues[] = id(new PHUIInfoView())->setTitle(pht('No Issues'))->appendChild(pht('Your install has no current setup issues to resolve.'))->setSeverity(PHUIInfoView::SEVERITY_NOTICE);
     }
     $title = pht('Setup Issues');
     $crumbs = $this->buildApplicationCrumbs($nav)->addTextCrumb(pht('Setup'), $this->getApplicationURI('issue/'));
     $view = id(new PHUITwoColumnView())->setNavigation($nav)->setMainColumn(array($setup_issues));
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($view);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $open_items = PhabricatorSetupCheck::getOpenSetupIssueKeys();
     $issues = PhabricatorSetupCheck::runNormalChecks();
     PhabricatorSetupCheck::setOpenSetupIssueKeys(PhabricatorSetupCheck::getUnignoredIssueKeys($issues), $update_database = true);
     if ($issues) {
         require_celerity_resource('phabricator-notification-menu-css');
         $items = array();
         foreach ($issues as $issue) {
             $classes = array();
             $classes[] = 'phabricator-notification';
             if ($issue->getIsIgnored()) {
                 $classes[] = 'phabricator-notification-read';
             } else {
                 $classes[] = 'phabricator-notification-unread';
             }
             $uri = '/config/issue/' . $issue->getIssueKey() . '/';
             $title = $issue->getName();
             $summary = $issue->getSummary();
             $items[] = javelin_tag('div', array('class' => implode(' ', $classes), 'sigil' => 'notification', 'meta' => array('href' => $uri)), $title);
         }
         $content = phutil_tag_div('setup-issue-menu', $items);
     } else {
         $content = phutil_tag_div('phabricator-notification no-notifications', pht('You have no unresolved setup issues.'));
     }
     $content = hsprintf('<div class="phabricator-notification-header">%s</div>' . '%s', phutil_tag('a', array('href' => '/config/issue/'), pht('Unresolved Setup Issues')), $content);
     $unresolved_count = count($open_items);
     $json = array('content' => $content, 'number' => (int) $unresolved_count);
     return id(new AphrontAjaxResponse())->setContent($json);
 }
 public function execute()
 {
     $issues = PhabricatorSetupCheck::runNormalChecks();
     $fatal_issue = null;
     foreach ($issues as $issue) {
         if ($issue->getIsFatal()) {
             $fatal_issue = $issue;
             break;
         }
     }
     if ($fatal_issue) {
         // If we've discovered a fatal, we reset any in-flight state to push
         // web hosts out of service.
         // This can happen if Phabricator starts during a disaster and some
         // databases can not be reached. We allow Phabricator to start up in
         // this situation, since it may still be able to usefully serve requests
         // without risk to data.
         // However, if databases later become reachable and we learn that they
         // are fatally misconfigured, we want to tear the world down again
         // because data may be at risk.
         PhabricatorSetupCheck::resetSetupState();
         return PhabricatorSetupCheck::newIssueResponse($issue);
     }
     $issue_keys = PhabricatorSetupCheck::getUnignoredIssueKeys($issues);
     PhabricatorSetupCheck::setOpenSetupIssueKeys($issue_keys, $update_database = true);
     $this->issues = $issues;
     return null;
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $issue_key = $request->getURIData('key');
     $issues = PhabricatorSetupCheck::runAllChecks();
     PhabricatorSetupCheck::setOpenSetupIssueKeys(PhabricatorSetupCheck::getUnignoredIssueKeys($issues), $update_database = true);
     if (empty($issues[$issue_key])) {
         $content = id(new PHUIInfoView())->setSeverity(PHUIInfoView::SEVERITY_NOTICE)->setTitle(pht('Issue Resolved'))->appendChild(pht('This setup issue has been resolved. '))->appendChild(phutil_tag('a', array('href' => $this->getApplicationURI('issue/')), pht('Return to Open Issue List')));
         $title = pht('Resolved Issue');
     } else {
         $issue = $issues[$issue_key];
         $content = $this->renderIssue($issue);
         $title = $issue->getShortName();
     }
     $crumbs = $this->buildApplicationCrumbs()->setBorder(true)->addTextCrumb(pht('Setup Issues'), $this->getApplicationURI('issue/'))->addTextCrumb($title, $request->getRequestURI());
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($content);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $nav = $this->buildSideNavView();
     $nav->selectFilter('issue/');
     $issues = PhabricatorSetupCheck::runNormalChecks();
     PhabricatorSetupCheck::setOpenSetupIssueKeys(PhabricatorSetupCheck::getUnignoredIssueKeys($issues), $update_database = true);
     $important = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_IMPORTANT, 'fa-warning');
     $php = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_PHP, 'fa-code');
     $mysql = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_MYSQL, 'fa-database');
     $other = $this->buildIssueList($issues, PhabricatorSetupCheck::GROUP_OTHER, 'fa-question-circle');
     $no_issues = null;
     if (empty($issues)) {
         $no_issues = id(new PHUIInfoView())->setTitle(pht('No Issues'))->appendChild(pht('Your install has no current setup issues to resolve.'))->setSeverity(PHUIInfoView::SEVERITY_NOTICE);
     }
     $title = pht('Setup Issues');
     $header = id(new PHUIHeaderView())->setHeader($title)->setProfileHeader(true);
     $crumbs = $this->buildApplicationCrumbs($nav)->addTextCrumb(pht('Setup Issues'))->setBorder(true);
     $page = array($no_issues, $important, $php, $mysql, $other);
     $content = id(new PhabricatorConfigPageView())->setHeader($header)->setContent($page);
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->setNavigation($nav)->appendChild($content)->addClass('white-background');
 }