private function renderServer(PhabricatorConfigServerSchema $comp, PhabricatorConfigServerSchema $expect, PhabricatorConfigServerSchema $actual) { $charset_issue = PhabricatorConfigStorageSchema::ISSUE_CHARSET; $collation_issue = PhabricatorConfigStorageSchema::ISSUE_COLLATION; $rows = array(); foreach ($comp->getDatabases() as $database_name => $database) { $actual_database = $actual->getDatabase($database_name); if ($actual_database) { $charset = $actual_database->getCharacterSet(); $collation = $actual_database->getCollation(); } else { $charset = null; $collation = null; } $status = $database->getStatus(); $issues = $database->getIssues(); $rows[] = array($this->renderIcon($status), phutil_tag('a', array('href' => $this->getApplicationURI('/database/' . $database_name . '/')), $database_name), $this->renderAttr($charset, $database->hasIssue($charset_issue)), $this->renderAttr($collation, $database->hasIssue($collation_issue))); } $table = id(new AphrontTableView($rows))->setHeaders(array(null, pht('Database'), pht('Charset'), pht('Collation')))->setColumnClasses(array(null, 'wide pri', null, null)); $title = pht('Database Status'); $properties = $this->buildProperties(array(), $comp->getIssues()); $prop_box = id(new PHUIObjectBoxView())->setHeader($this->buildHeaderWithDocumentationLink($title))->addPropertyList($properties); $table_box = id(new PHUIObjectBoxView())->setHeaderText(pht('Databases'))->setTable($table); return $this->buildResponse($title, array($prop_box, $table_box)); }