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']); | |||||
| } | |||||