mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-26 16:52:41 +01:00
82 lines
1.9 KiB
PHP
82 lines
1.9 KiB
PHP
|
<?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']);
|
||
|
}
|