protected function newNavigationMenuItems(PhabricatorProfilePanelConfiguration $config) { $viewer = $this->getViewer(); $project = $config->getProfileObject(); $limit = 250; $tasks = id(new ManiphestTaskQuery())->setViewer($viewer)->withEdgeLogicPHIDs(PhabricatorProjectObjectHasProjectEdgeType::EDGECONST, PhabricatorQueryConstraint::OPERATOR_AND, array($project->getPHID()))->setLimit($limit + 1)->execute(); if (count($tasks) > $limit) { return $this->renderError(pht('Too many tasks to compute statistics for (more than %s).', new PhutilNumber($limit))); } if (!$tasks) { return $this->renderError(pht('This milestone has no tasks yet.')); } $statuses = array(); $points_done = 0; $points_total = 0; $no_points = 0; foreach ($tasks as $task) { $points = $task->getPoints(); if ($points === null) { $no_points++; continue; } if (!$points) { continue; } $status = $task->getStatus(); if (empty($statuses[$status])) { $statuses[$status] = 0; } $statuses[$status] += $points; if (ManiphestTaskStatus::isClosedStatus($status)) { $points_done += $points; } $points_total += $points; } if ($no_points == count($tasks)) { return $this->renderError(pht('No tasks have assigned point values.')); } if (!$points_total) { return $this->renderError(pht('All tasks with assigned point values are worth zero points.')); } $label = pht('%s of %s %s', new PhutilNumber($points_done), new PhutilNumber($points_total), ManiphestTaskPoints::getPointsLabel()); $bar = id(new PHUISegmentBarView())->setLabel($label); $map = ManiphestTaskStatus::getTaskStatusMap(); $statuses = array_select_keys($statuses, array_keys($map)); foreach ($statuses as $status => $points) { if (!$points) { continue; } if (!ManiphestTaskStatus::isClosedStatus($status)) { continue; } $color = ManiphestTaskStatus::getStatusColor($status); if (!$color) { $color = 'sky'; } $tooltip = pht('%s %s', new PhutilNumber($points), ManiphestTaskStatus::getTaskStatusName($status)); $bar->newSegment()->setWidth($points / $points_total)->setColor($color)->setTooltip($tooltip); } $bar = phutil_tag('div', array('class' => 'phui-profile-segment-bar'), $bar); $item = $this->newItem()->appendChild($bar); return array($item); }
public function getColor() { $old = $this->getOldValue(); $new = $this->getNewValue(); switch ($this->getTransactionType()) { case self::TYPE_OWNER: if ($this->getAuthorPHID() == $new) { return 'green'; } else { if (!$new) { return 'black'; } else { if (!$old) { return 'green'; } else { return 'green'; } } } case self::TYPE_STATUS: $color = ManiphestTaskStatus::getStatusColor($new); if ($color !== null) { return $color; } if (ManiphestTaskStatus::isOpenStatus($new)) { return 'green'; } else { return 'black'; } case self::TYPE_PRIORITY: if ($old == ManiphestTaskPriority::getDefaultPriority()) { return 'green'; } else { if ($old > $new) { return 'grey'; } else { return 'yellow'; } } } return parent::getColor(); }
public function getFieldValuesForConduit() { $status_value = $this->getStatus(); $status_info = array('value' => $status_value, 'name' => ManiphestTaskStatus::getTaskStatusName($status_value), 'color' => ManiphestTaskStatus::getStatusColor($status_value)); $priority_value = (int) $this->getPriority(); $priority_info = array('value' => $priority_value, 'subpriority' => (double) $this->getSubpriority(), 'name' => ManiphestTaskPriority::getTaskPriorityName($priority_value), 'color' => ManiphestTaskPriority::getTaskPriorityColor($priority_value)); return array('name' => $this->getTitle(), 'authorPHID' => $this->getAuthorPHID(), 'ownerPHID' => $this->getOwnerPHID(), 'status' => $status_info, 'priority' => $priority_info); }