[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorConfigDatabaseIssueController 4 extends PhabricatorConfigDatabaseController { 5 6 public function processRequest() { 7 $request = $this->getRequest(); 8 $viewer = $request->getUser(); 9 10 $query = $this->buildSchemaQuery(); 11 12 $actual = $query->loadActualSchema(); 13 $expect = $query->loadExpectedSchema(); 14 $comp = $query->buildComparisonSchema($expect, $actual); 15 16 $crumbs = $this->buildApplicationCrumbs(); 17 $crumbs->addTextCrumb(pht('Database Issues')); 18 19 // Collect all open issues. 20 $issues = array(); 21 foreach ($comp->getDatabases() as $database_name => $database) { 22 foreach ($database->getLocalIssues() as $issue) { 23 $issues[] = array( 24 $database_name, 25 null, 26 null, 27 null, 28 $issue, 29 ); 30 } 31 foreach ($database->getTables() as $table_name => $table) { 32 foreach ($table->getLocalIssues() as $issue) { 33 $issues[] = array( 34 $database_name, 35 $table_name, 36 null, 37 null, 38 $issue, 39 ); 40 } 41 foreach ($table->getColumns() as $column_name => $column) { 42 foreach ($column->getLocalIssues() as $issue) { 43 $issues[] = array( 44 $database_name, 45 $table_name, 46 'column', 47 $column_name, 48 $issue, 49 ); 50 } 51 } 52 foreach ($table->getKeys() as $key_name => $key) { 53 foreach ($key->getLocalIssues() as $issue) { 54 $issues[] = array( 55 $database_name, 56 $table_name, 57 'key', 58 $key_name, 59 $issue, 60 ); 61 } 62 } 63 } 64 } 65 66 67 // Sort all open issues so that the most severe issues appear first. 68 $order = array(); 69 $counts = array(); 70 foreach ($issues as $key => $issue) { 71 $const = $issue[4]; 72 $status = PhabricatorConfigStorageSchema::getIssueStatus($const); 73 $severity = PhabricatorConfigStorageSchema::getStatusSeverity($status); 74 $order[$key] = sprintf( 75 '~%d~%s%s%s', 76 9 - $severity, 77 $issue[0], 78 $issue[1], 79 $issue[3]); 80 81 if (empty($counts[$status])) { 82 $counts[$status] = 0; 83 } 84 85 $counts[$status]++; 86 } 87 asort($order); 88 $issues = array_select_keys($issues, array_keys($order)); 89 90 91 // Render the issues. 92 $rows = array(); 93 foreach ($issues as $issue) { 94 $const = $issue[4]; 95 96 $database_link = phutil_tag( 97 'a', 98 array( 99 'href' => $this->getApplicationURI('/database/'.$issue[0].'/'), 100 ), 101 $issue[0]); 102 103 $rows[] = array( 104 $this->renderIcon( 105 PhabricatorConfigStorageSchema::getIssueStatus($const)), 106 $database_link, 107 $issue[1], 108 $issue[2], 109 $issue[3], 110 PhabricatorConfigStorageSchema::getIssueDescription($const), 111 ); 112 } 113 114 $table = id(new AphrontTableView($rows)) 115 ->setHeaders( 116 array( 117 null, 118 pht('Database'), 119 pht('Table'), 120 pht('Type'), 121 pht('Column/Key'), 122 pht('Issue'), 123 )) 124 ->setColumnClasses( 125 array( 126 null, 127 null, 128 null, 129 null, 130 null, 131 'wide', 132 )); 133 134 $errors = array(); 135 136 if (isset($counts[PhabricatorConfigStorageSchema::STATUS_FAIL])) { 137 $errors[] = pht( 138 'Detected %s serious issue(s) with the schemata.', 139 new PhutilNumber($counts[PhabricatorConfigStorageSchema::STATUS_FAIL])); 140 } 141 142 if (isset($counts[PhabricatorConfigStorageSchema::STATUS_WARN])) { 143 $errors[] = pht( 144 'Detected %s warning(s) with the schemata.', 145 new PhutilNumber($counts[PhabricatorConfigStorageSchema::STATUS_WARN])); 146 } 147 148 $title = pht('Database Issues'); 149 150 $table_box = id(new PHUIObjectBoxView()) 151 ->setHeader($this->buildHeaderWithDocumentationLink($title)) 152 ->setFormErrors($errors) 153 ->appendChild($table); 154 155 $nav = $this->buildSideNavView(); 156 $nav->selectFilter('dbissue/'); 157 $nav->appendChild( 158 array( 159 $crumbs, 160 $table_box, 161 )); 162 163 return $this->buildApplicationPage( 164 $nav, 165 array( 166 'title' => $title, 167 )); 168 } 169 170 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |