Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15473996
D20405.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Referenced Files
None
Subscribers
None
D20405.id.diff
View Options
diff --git a/resources/sql/autopatches/20190412.dashboard.01.panels.php b/resources/sql/autopatches/20190412.dashboard.01.panels.php
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20190412.dashboard.01.panels.php
@@ -0,0 +1,81 @@
+<?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']);
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 7, 3:50 AM (1 w, 13 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7299537
Default Alt Text
D20405.id.diff (2 KB)
Attached To
Mode
D20405: Convert dashboard panel storage to a format which can handle duplicates
Attached
Detach File
Event Timeline
Log In to Comment