Christopher Johnson (WMDE) has uploaded a new change for review.
https://gerrit.wikimedia.org/r/177235
Change subject: Change SprintBuildStats logic
......................................................................
Change SprintBuildStats logic
Add sorting to EventsTable
Change-Id: Ifd3c975ce2508cedf5216acd940b44e6d8fd0e2d
---
M src/storage/SprintBuildStats.php
M src/storage/SprintTransaction.php
M src/util/BurndownDataDate.php
M src/view/BurndownDataView.php
M src/view/EventTableView.php
5 files changed, 170 insertions(+), 85 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/phabricator/extensions/Sprint
refs/changes/35/177235/1
diff --git a/src/storage/SprintBuildStats.php b/src/storage/SprintBuildStats.php
index 77f15c5..d01c4d7 100644
--- a/src/storage/SprintBuildStats.php
+++ b/src/storage/SprintBuildStats.php
@@ -2,7 +2,9 @@
final class SprintBuildStats {
private $timezone;
+ private $total_tasks_added;
private $tasks_remaining;
+ private $total_points_added;
private $points_remaining;
public function setTimezone ($viewer) {
@@ -51,13 +53,15 @@
$first = true;
$previous = new BurndownDataDate($date=null);
foreach ($dates as $date) {
- $tasks_added = $date->getTasksAddedToday();
+ $this->total_tasks_added += $date->getTasksAddedToday();
if ($first) {
- $date->setTasksTotal($tasks_added);
+ $date->setTasksTotal($this->total_tasks_added);
+ $tasks_total = $this->total_tasks_added;
} else {
$tasks_total = $date->sumTasksTotal($date, $previous);
$date->setTasksTotal($tasks_total);
}
+ $this->total_tasks_added += $tasks_total;
$previous = $date;
$first = false;
}
@@ -68,15 +72,15 @@
$first = true;
$previous = new BurndownDataDate($date=null);
foreach ($dates as $date) {
- $points_added = $date->getPointsAddedToday();
+ $this->total_points_added += $date->getPointsAddedToday();
if ($first) {
- $points_before = $this->getPointsBefore();
- $points_total = $points_added + $points_before;
- $date->setPointsTotal($points_total);
+ $date->setPointsTotal($this->total_points_added);
+ $points_total = $this->total_points_added;
} else {
$points_total = $date->sumPointsTotal($date, $previous);
$date->setPointsTotal($points_total);
}
+ $this->total_points_added += $points_total;
$previous = $date;
$first = false;
}
@@ -90,17 +94,23 @@
$points_closed = $date->getPointsClosedToday();
$points_reopened = $date->getPointsReopenedToday();
$points_removed = $date->getPointsRemovedToday();
+
if ($first) {
- $points_total = ($points_added + $points_reopened) - ($points_removed
+ $points_closed);
- $net_change = 0;
+ $points_total = $points_added + $points_reopened - $points_removed -
$points_closed;
+ $net_change =0;
} else {
$points_total = $this->points_remaining;
- $net_change = ($points_added + $points_reopened) - ($points_removed +
$points_closed);
+ $net_change = $points_added + $points_reopened - $points_removed -
$points_closed;
}
- $points_diff = abs($net_change);
- $points_remaining = $points_total - $points_diff;
+
+ $points_diff = $net_change;
+ $points_remaining = $points_total + $points_diff;
+ if ($points_remaining < 0) {
+ $points_remaining = 0;
+ }
$date->setPointsRemaining($points_remaining);
$this->points_remaining = $points_remaining;
+
$first = false;
}
return $dates;
@@ -114,14 +124,14 @@
$tasks_reopened = $date->getTasksReopenedToday();
$tasks_removed = $date->getTasksRemovedToday();
if ($first) {
- $tasks_total = ($tasks_added + $tasks_reopened) - ($tasks_removed +
$tasks_closed);
+ $tasks_total = $tasks_added + $tasks_reopened - $tasks_removed -
$tasks_closed;
$net_change = 0;
} else {
$tasks_total = $this->tasks_remaining;
- $net_change = ($tasks_added + $tasks_reopened) - ($tasks_removed +
$tasks_closed);
+ $net_change = $tasks_added + $tasks_reopened - $tasks_removed -
$tasks_closed;
}
- $tasks_diff = abs($net_change);
- $tasks_remaining = $tasks_total - $tasks_diff;
+ $tasks_diff = $net_change;
+ $tasks_remaining = $tasks_total + $tasks_diff;
$date->setTasksRemaining($tasks_remaining);
$this->tasks_remaining = $tasks_remaining;
$first = false;
diff --git a/src/storage/SprintTransaction.php
b/src/storage/SprintTransaction.php
index 834956f..2cc5932 100644
--- a/src/storage/SprintTransaction.php
+++ b/src/storage/SprintTransaction.php
@@ -35,9 +35,14 @@
case "points":
// Points were changed
$old_point_value = $xaction->getOldValue();
- $this->SetPointsBefore($sprint_start, $task_phid, $points,
$old_point_value, $dates);
+ $this->SetPointsBefore($sprint_start, $points, $old_point_value,
$dates);
+ $this->closePoints($date, $task_phid, $points, $old_point_value,
$dates);
break;
}
+ }
+
+ if ( $xaction_date > $end ) {
+ continue;
}
// Determine which date to attach this data to
@@ -75,9 +80,11 @@
break;
case "points":
// Points were changed
- $old_point_value = $xaction->getOldValue();
- $this->changePoints($date, $task_phid, $points,
$old_point_value, $dates);
- $this->closePoints($date, $task_phid, $points, $old_point_value,
$dates);
+ if ($this->task_in_sprint[$task_phid]) {
+ $old_point_value = $xaction->getOldValue();
+ $this->changePoints($date, $task_phid, $points,
$old_point_value, $dates);
+ $this->closePoints($date, $task_phid, $points,
$old_point_value, $dates);
+ }
break;
}
}
@@ -155,11 +162,9 @@
return $this->task_statuses[$task_phid];
}
- private function SetPointsBefore($points, $old_point_value, $dates) {
- foreach ($dates as $date) {
- $before = $points - $old_point_value;
- $this->setPointsBefore = $before;
- }
+ private function SetPointsBefore($sprint_start, $points, $old_point_value,
$dates) {
+ $points = $points - $old_point_value;
+ $dates[$sprint_start]->setPointsAddedToday($points);
}
private function SumTasksBefore($sprint_start, $dates) {
diff --git a/src/util/BurndownDataDate.php b/src/util/BurndownDataDate.php
index 30dd899..453711a 100644
--- a/src/util/BurndownDataDate.php
+++ b/src/util/BurndownDataDate.php
@@ -19,7 +19,6 @@
// Totals over time
private $tasks_total;
private $tasks_remaining;
- private $points_before;
private $points_total;
private $points_remaining;
private $points_ideal_remaining;
@@ -32,7 +31,6 @@
public function setTasksAddedToday () {
return $this->tasks_added_today = $this->tasks_added_today +1;
- return $this;
}
public function getTasksAddedToday () {
@@ -41,12 +39,14 @@
public function setTasksRemovedToday () {
return $this->tasks_removed_today = $this->tasks_removed_today + 1;
- return $this;
}
- public function setTasksClosedToday () {
+ public function getTasksRemovedToday () {
+ return $this->tasks_removed_today;
+ }
+
+ public function setTasksClosedToday () {
return $this->tasks_closed_today = $this->tasks_closed_today + 1;
- return $this;
}
public function getTasksClosedToday () {
@@ -55,14 +55,9 @@
public function setTasksReopenedToday () {
return $this->tasks_reopened_today = $this->tasks_reopened_today + 1;
- return $this;
}
public function getTasksReopenedToday () {
- return $this->tasks_reopened_today;
- }
-
- public function getTasksRemovedToday () {
return $this->tasks_reopened_today;
}
@@ -83,7 +78,7 @@
}
public function setPointsAddedToday ($points) {
- $this->points_added_today = $points;
+ $this->points_added_today = $this->points_added_today + $points;
}
public function getPointsAddedToday () {
@@ -91,7 +86,7 @@
}
public function setPointsClosedToday ($points) {
- $this->points_closed_today = $points;
+ $this->points_closed_today = $this->points_closed_today + $points;
}
public function getPointsClosedToday () {
@@ -99,7 +94,7 @@
}
public function setPointsRemovedToday ($points) {
- $this->points_removed_today = $points;
+ $this->points_removed_today = $this->points_removed_today + $points;
}
public function getPointsRemovedToday () {
@@ -107,7 +102,7 @@
}
public function setPointsReopenedToday ($points) {
- $this->points_reopened_today = $points;
+ $this->points_reopened_today = $this->points_reopened_today + $points;
}
public function getPointsReopenedToday () {
@@ -116,14 +111,6 @@
public function getDate() {
return $this->date;
- }
-
- public function setPointsBefore($points) {
- $this->points_before = $this->points_before + $points;
- }
-
- public function getPointsBefore() {
- return $this->points_before;
}
public function setPointsTotal($points_total) {
diff --git a/src/view/BurndownDataView.php b/src/view/BurndownDataView.php
index 440af96..df3959d 100644
--- a/src/view/BurndownDataView.php
+++ b/src/view/BurndownDataView.php
@@ -40,8 +40,11 @@
$pie = $this->buildC3Pie();
$sprint_table = new SprintTableView();
$burndown_table = $sprint_table->buildBurnDownTable($this->sprint_data);
- $event_table = new EventTableView();
- $event_table = $event_table->buildEventTable($this->project,
$this->viewer);
+ $event_table = id(new EventTableView())
+ ->setProject($this->project)
+ ->setViewer($this->viewer)
+ ->setRequest($this->request);
+ $event_table = $event_table->buildEventTable();
return array($chart, $tasks_table, $pie, $burndown_table, $event_table);
}
diff --git a/src/view/EventTableView.php b/src/view/EventTableView.php
index a122142..f7dbd0b 100644
--- a/src/view/EventTableView.php
+++ b/src/view/EventTableView.php
@@ -1,15 +1,75 @@
<?php
final class EventTableView {
- /**
- * Format the Event data for display on the page.
- *
- * @returns PHUIObjectBoxView
- */
- public function buildEventTable($project, $viewer) {
+ private $project;
+ private $viewer;
+ private $request;
+
+ public function setProject ($project) {
+ $this->project = $project;
+ return $this;
+ }
+
+ public function setViewer ($viewer) {
+ $this->viewer = $viewer;
+ return $this;
+ }
+
+ public function setRequest ($request) {
+ $this->request = $request;
+ return $this;
+ }
+
+ public function buildEventTable() {
+ $order = $this->request->getStr('ord', 'name');
+ list($order, $reverse) = AphrontTableView::parseSort($order);
+ $rows = $this->buildEventsTree($order, $reverse);
+ $table = id(new AphrontTableView($rows))
+ ->setHeaders(
+ array(
+ pht('Stamp'),
+ pht('When'),
+ pht('Task'),
+ pht('Action'),
+ ))
+ ->setColumnClasses(
+ array(
+ '',
+ '',
+ '',
+ 'wide',
+ ));
+ $table->setColumnVisibility(
+ array(
+ false,
+ true,
+ true,
+ true,
+ ));
+ $table->makeSortable(
+ $this->request->getRequestURI(),
+ 'ord',
+ $order,
+ $reverse,
+ array(
+ 'When',
+ 'Date',
+ 'Task',
+ 'Action',
+ )
+ );
+
+ $box = id(new PHUIObjectBoxView())
+ ->setHeaderText(pht('Events related to this sprint'))
+ ->appendChild($table);
+
+ return $box;
+ }
+
+ private function buildEventsTree ($order, $reverse) {
$query = id(new SprintQuery())
- ->setProject($project)
- ->setViewer($viewer);
+ ->setProject($this->project)
+ ->setViewer($this->viewer);
$aux_fields = $query->getAuxFields();
$start = $query->getStartDate($aux_fields);
$end = $query->getEndDate($aux_fields);
@@ -24,38 +84,58 @@
foreach ($events as $event) {
$task_phid = $xactions[$event['transactionPHID']]->getObjectPHID();
$task = $tasks[$task_phid];
+ $row = $this->buildTableRow($event, $task);
+ list ($stamp, $when, $task, $action) = $row[0];
+ $row['sort'] = $this->setSortOrder($row, $order, $stamp, $when, $task,
$action);
+ $rows[] = $row;
+ }
+ $rows = isort($rows, 'sort');
- $rows[] = array(
- phabricator_datetime($event['epoch'], $viewer),
- phutil_tag(
- 'a',
- array(
- 'href' => '/' . $task->getMonogram(),
- ),
- $task->getMonogram() . ': ' . $task->getTitle()),
- $event['title'],
- );
+ foreach ($rows as $k => $row) {
+ unset($rows[$k]['sort']);
}
- $table = id(new AphrontTableView($rows))
- ->setHeaders(
- array(
- pht('When'),
- pht('Task'),
- pht('Action'),
- ))
- ->setColumnClasses(
- array(
- '',
- '',
- 'wide',
- ));
-
- $box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Events related to this sprint'))
- ->appendChild($table);
-
- return $box;
+ if ($reverse) {
+ $rows = array_reverse($rows);
+ }
+ $rows = array_map( function( $a ) { return $a['0']; }, $rows );
+ return $rows;
}
+ private function buildTableRow($event, $task) {
+ $row[] = array(
+ $event['epoch'],
+ phabricator_datetime($event['epoch'], $this->viewer),
+ phutil_tag(
+ 'a',
+ array(
+ 'href' => '/' . $task->getMonogram(),
+ ),
+ $task->getMonogram() . ': ' . $task->getTitle()),
+ $event['title'],
+ );
+ return $row;
+ }
+
+ private function setSortOrder ($row, $order, $stamp, $when, $task, $action) {
+ switch ($order) {
+ case 'Date':
+ default:
+ $row['sort'] = -$stamp;
+ break;
+ case 'When':
+ $row['sort'] = $when;
+ break;
+ case 'Task':
+ $row['sort'] = $task;
+ break;
+ case 'Action':
+ $row['sort'] = $action;
+ break;
+ }
+ return $row['sort'];
+ }
+
+
+
}
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/177235
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifd3c975ce2508cedf5216acd940b44e6d8fd0e2d
Gerrit-PatchSet: 1
Gerrit-Project: phabricator/extensions/Sprint
Gerrit-Branch: master
Gerrit-Owner: Christopher Johnson (WMDE) <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits