Page MenuHomePhorge

D25828.1730021475.diff
No OneTemporary

D25828.1730021475.diff

diff --git a/src/applications/maniphest/controller/ManiphestReportController.php b/src/applications/maniphest/controller/ManiphestReportController.php
--- a/src/applications/maniphest/controller/ManiphestReportController.php
+++ b/src/applications/maniphest/controller/ManiphestReportController.php
@@ -71,6 +71,9 @@
}
+ /**
+ * @return array<AphrontListFilterView, PHUIObjectBoxView>
+ */
public function renderBurn() {
$request = $this->getRequest();
$viewer = $request->getUser();
@@ -84,11 +87,13 @@
$handle = $handles[$project_phid];
}
- $table = new ManiphestTransaction();
- $conn = $table->establishConnection('r');
+ $xtable = new ManiphestTransaction();
+ $conn = $xtable->establishConnection('r');
+ // Get legacy data: Querying the task transaction table is only needed for
+ // code before rPd321cc81 got merged on 2017-11-22.
if ($project_phid) {
- $joins = qsprintf(
+ $legacy_joins = qsprintf(
$conn,
'JOIN %T t ON x.objectPHID = t.phid
JOIN %T p ON p.src = t.phid AND p.type = %d AND p.dst = %s',
@@ -96,59 +101,26 @@
PhabricatorEdgeConfig::TABLE_NAME_EDGE,
PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,
$project_phid);
- $create_joins = qsprintf(
- $conn,
- 'JOIN %T p ON p.src = t.phid AND p.type = %d AND p.dst = %s',
- PhabricatorEdgeConfig::TABLE_NAME_EDGE,
- PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,
- $project_phid);
} else {
- $joins = qsprintf($conn, '');
- $create_joins = qsprintf($conn, '');
+ $legacy_joins = qsprintf($conn, '');
}
- $data = queryfx_all(
+ $legacy_data = queryfx_all(
$conn,
'SELECT x.transactionType, x.oldValue, x.newValue, x.dateCreated
FROM %T x %Q
WHERE transactionType IN (%Ls)
ORDER BY x.dateCreated ASC',
- $table->getTableName(),
- $joins,
+ $xtable->getTableName(),
+ $legacy_joins,
array(
ManiphestTaskStatusTransaction::TRANSACTIONTYPE,
ManiphestTaskMergedIntoTransaction::TRANSACTIONTYPE,
));
- // See PHI273. After the move to EditEngine, we no longer create a
- // "status" transaction if a task is created directly into the default
- // status. This likely impacted API/email tasks after 2016 and all other
- // tasks after late 2017. Until Facts can fix this properly, use the
- // task creation dates to generate synthetic transactions which look like
- // the older transactions that this page expects.
-
- $default_status = ManiphestTaskStatus::getDefaultStatus();
- $duplicate_status = ManiphestTaskStatus::getDuplicateStatus();
-
- // Build synthetic transactions which take status from `null` to the
- // default value.
- $create_rows = queryfx_all(
- $conn,
- 'SELECT t.dateCreated FROM %T t %Q',
- id(new ManiphestTask())->getTableName(),
- $create_joins);
- foreach ($create_rows as $key => $create_row) {
- $create_rows[$key] = array(
- 'transactionType' => 'status',
- 'oldValue' => null,
- 'newValue' => $default_status,
- 'dateCreated' => $create_row['dateCreated'],
- );
- }
-
// Remove any actual legacy status transactions which take status from
// `null` to any open status.
- foreach ($data as $key => $row) {
+ foreach ($legacy_data as $key => $row) {
if ($row['transactionType'] != 'status') {
continue;
}
@@ -168,12 +140,50 @@
}
// If this is a legacy "create" transaction, discard it in favor of the
- // synthetic one.
- unset($data[$key]);
+ // synthetic transaction to be created below.
+ unset($legacy_data[$key]);
}
- // Merge the synthetic rows into the real transactions.
- $data = array_merge($create_rows, $data);
+ // Since rPd321cc81, after the move to EditEngine, we no longer create a
+ // "status" transaction if a task is created directly into the default
+ // status. This likely impacted API/email tasks after 2016 and all other
+ // tasks after deploying the Phorge codebase from 2017-11-22.
+ // Until Facts can fix this properly, use the task creation dates to
+ // generate synthetic transactions which look like the older transactions
+ // that this page expects.
+
+ $default_status = ManiphestTaskStatus::getDefaultStatus();
+ $duplicate_status = ManiphestTaskStatus::getDuplicateStatus();
+
+ if ($project_phid) {
+ $synth_joins = qsprintf(
+ $conn,
+ 'JOIN %T p ON p.src = t.phid AND p.type = %d AND p.dst = %s',
+ PhabricatorEdgeConfig::TABLE_NAME_EDGE,
+ PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,
+ $project_phid);
+ } else {
+ $synth_joins = qsprintf($conn, '');
+ }
+
+ // Build synthetic transactions which take status from `null` to the
+ // default value.
+ $synth_data = queryfx_all(
+ $conn,
+ 'SELECT t.dateCreated FROM %T t %Q',
+ id(new ManiphestTask())->getTableName(),
+ $synth_joins);
+ foreach ($synth_data as $key => $synth_row) {
+ $synth_data[$key] = array(
+ 'transactionType' => 'status',
+ 'oldValue' => null,
+ 'newValue' => $default_status,
+ 'dateCreated' => $synth_row['dateCreated'],
+ );
+ }
+
+ // Merge the synthetic transactions into the legacy transactions.
+ $data = array_merge($synth_data, $legacy_data);
$data = array_values($data);
$data = isort($data, 'dateCreated');
@@ -412,6 +422,11 @@
return array($filter, $chart_view);
}
+ /**
+ * @param array $tokens
+ * @param bool $has_window
+ * @return AphrontListFilterView
+ */
private function renderReportFilters(array $tokens, $has_window) {
$request = $this->getRequest();
$viewer = $request->getUser();

File Metadata

Mime Type
text/plain
Expires
Sun, Oct 27, 09:31 (22 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
950583
Default Alt Text
D25828.1730021475.diff (5 KB)

Event Timeline