Changeset View
Changeset View
Standalone View
Standalone View
resources/sql/autopatches/20190412.dashboard.01.panels.php
- This file was added.
<?php | |||||
// Convert dashboards to a new storage format. The old storage format looks | |||||
// like this: | |||||
// { | |||||
// "0": ["PHID-DSHP-A", ...], | |||||
// "1": ["PHID-DSHP-B", ...] | |||||
// } | |||||
// The new storage format looks like this: | |||||
// [ | |||||
// { | |||||
// "panelKey": "abcdefgh", | |||||
// "panelPHID": "PHID-DSHP-A", | |||||
// "columnKey": "left" | |||||
// }, | |||||
// ... | |||||
// ] | |||||
// One major issue with the old storage format is that when multiple copies of | |||||
// a single dashboard panel appeared on the same dashboard, the UI had a lot | |||||
// of difficulty acting on a particular copy because copies were identified | |||||
// only by PHID and all copies of the same panel have the same panel PHID. | |||||
$dashboard_table = new PhabricatorDashboard(); | |||||
$conn = $dashboard_table->establishConnection('r'); | |||||
$table_name = $dashboard_table->getTableName(); | |||||
$rows = new LiskRawMigrationIterator($conn, $table_name); | |||||
foreach ($rows as $row) { | |||||
$config = $row['layoutConfig']; | |||||
try { | |||||
$config = phutil_json_decode($config); | |||||
} catch (Exception $ex) { | |||||
$config = array(); | |||||
} | |||||
if (!is_array($config)) { | |||||
$config = array(); | |||||
} | |||||
$panels = idx($config, 'panelLocations'); | |||||
if (!is_array($panels)) { | |||||
$panels = array(); | |||||
} | |||||
if (idx($config, 'layoutMode') === 'layout-mode-full') { | |||||
$column_map = array( | |||||
0 => 'main', | |||||
); | |||||
} else { | |||||
$column_map = array( | |||||
0 => 'left', | |||||
1 => 'right', | |||||
); | |||||
} | |||||
$panel_list = array(); | |||||
foreach ($panels as $column_idx => $panel_phids) { | |||||
$column_key = idx($column_map, $column_idx, 'unknown'); | |||||
foreach ($panel_phids as $panel_phid) { | |||||
$panel_list[] = array( | |||||
'panelKey' => Filesystem::readRandomCharacters(8), | |||||
'columnKey' => $column_key, | |||||
'panelPHID' => $panel_phid, | |||||
); | |||||
} | |||||
} | |||||
unset($config['panelLocations']); | |||||
$config['panels'] = $panel_list; | |||||
queryfx( | |||||
$conn, | |||||
'UPDATE %R SET layoutConfig = %s WHERE id = %d', | |||||
$dashboard_table, | |||||
phutil_json_encode($config), | |||||
$row['id']); | |||||
} |