From 6d5dcea3ba0f6caeac24b98332ad312f42846af6 Mon Sep 17 00:00:00 2001 From: vrana Date: Wed, 16 May 2012 14:38:16 -0700 Subject: [PATCH] Inform about disabled and away users in Differential fields Summary: I've tried colors, italics, strike-through and this is a compromise between me and @leebyron. NOTE: I don't want to disturb @epriestley from playing Diablo 3. Test Plan: {F11439, size=full} Reviewers: btrahan Reviewed By: btrahan CC: aran, epriestley, leebyron Differential Revision: https://secure.phabricator.com/D2481 --- .../DifferentialAuthorFieldSpecification.php | 5 +-- .../base/DifferentialFieldSpecification.php | 39 +++++++++++++++++++ .../field/specification/base/__init__.php | 2 + .../ccs/DifferentialCCsFieldSpecification.php | 12 +----- ...ifferentialReviewersFieldSpecification.php | 12 +----- 5 files changed, 44 insertions(+), 26 deletions(-) diff --git a/src/applications/differential/field/specification/author/DifferentialAuthorFieldSpecification.php b/src/applications/differential/field/specification/author/DifferentialAuthorFieldSpecification.php index 54a9405ef2..1e0a666575 100644 --- a/src/applications/differential/field/specification/author/DifferentialAuthorFieldSpecification.php +++ b/src/applications/differential/field/specification/author/DifferentialAuthorFieldSpecification.php @@ -32,10 +32,7 @@ final class DifferentialAuthorFieldSpecification } public function renderValueForRevisionView() { - $author_phid = $this->getAuthorPHID(); - $handle = $this->getHandle($author_phid); - - return $handle->renderLink(); + return $this->renderUserList(array($this->getAuthorPHID())); } private function getAuthorPHID() { diff --git a/src/applications/differential/field/specification/base/DifferentialFieldSpecification.php b/src/applications/differential/field/specification/base/DifferentialFieldSpecification.php index 91f8b8e34b..6ed0b16eec 100644 --- a/src/applications/differential/field/specification/base/DifferentialFieldSpecification.php +++ b/src/applications/differential/field/specification/base/DifferentialFieldSpecification.php @@ -265,6 +265,45 @@ abstract class DifferentialFieldSpecification { } + /** + * Load users, their current statuses and return a markup with links to the + * user profiles and information about their current status. + * + * @return string Display markup. + * @task view + */ + public function renderUserList(array $user_phids) { + if (!$user_phids) { + return 'None'; + } + + $statuses = id(new PhabricatorUserStatus())->loadAllWhere( + 'userPHID IN (%Ls) AND UNIX_TIMESTAMP() BETWEEN dateFrom AND dateTo', + $user_phids); + $statuses = mpull($statuses, null, 'getUserPHID'); + + $links = array(); + foreach ($user_phids as $user_phid) { + $handle = $this->getHandle($user_phid); + $extra = null; + $status = idx($statuses, $handle->getPHID()); + if ($handle->isDisabled()) { + $extra = ' (disabled)'; + } else if ($status) { + $until = phabricator_date($status->getDateTo(), $this->getUser()); + if ($status->getStatus() == PhabricatorUserStatus::STATUS_SPORADIC) { + $extra = ' (sporadic)'; + } else { + $extra = ' (away)'; + } + } + $links[] = $handle->renderLink().$extra; + } + + return implode(', ', $links); + } + + /** * Return a markup block representing a warning to display with the comment * box when preparing to accept a diff. A return value of null indicates no diff --git a/src/applications/differential/field/specification/base/__init__.php b/src/applications/differential/field/specification/base/__init__.php index db188c4711..d6c462156f 100644 --- a/src/applications/differential/field/specification/base/__init__.php +++ b/src/applications/differential/field/specification/base/__init__.php @@ -11,6 +11,8 @@ phutil_require_module('phabricator', 'applications/differential/field/exception/ phutil_require_module('phabricator', 'applications/differential/field/exception/parse'); phutil_require_module('phabricator', 'applications/metamta/storage/mailinglist'); phutil_require_module('phabricator', 'applications/people/storage/user'); +phutil_require_module('phabricator', 'applications/people/storage/userstatus'); +phutil_require_module('phabricator', 'view/utils'); phutil_require_module('phutil', 'utils'); diff --git a/src/applications/differential/field/specification/ccs/DifferentialCCsFieldSpecification.php b/src/applications/differential/field/specification/ccs/DifferentialCCsFieldSpecification.php index 44c3000345..41dabae4cb 100644 --- a/src/applications/differential/field/specification/ccs/DifferentialCCsFieldSpecification.php +++ b/src/applications/differential/field/specification/ccs/DifferentialCCsFieldSpecification.php @@ -34,17 +34,7 @@ final class DifferentialCCsFieldSpecification } public function renderValueForRevisionView() { - $cc_phids = $this->getCCPHIDs(); - if (!$cc_phids) { - return 'None'; - } - - $links = array(); - foreach ($cc_phids as $cc_phid) { - $links[] = $this->getHandle($cc_phid)->renderLink(); - } - - return implode(', ', $links); + return $this->renderUserList($this->getCCPHIDs()); } private function getCCPHIDs() { diff --git a/src/applications/differential/field/specification/reviewers/DifferentialReviewersFieldSpecification.php b/src/applications/differential/field/specification/reviewers/DifferentialReviewersFieldSpecification.php index a4f7ad2144..1d6546cd05 100644 --- a/src/applications/differential/field/specification/reviewers/DifferentialReviewersFieldSpecification.php +++ b/src/applications/differential/field/specification/reviewers/DifferentialReviewersFieldSpecification.php @@ -35,17 +35,7 @@ final class DifferentialReviewersFieldSpecification } public function renderValueForRevisionView() { - $reviewer_phids = $this->getReviewerPHIDs(); - if (!$reviewer_phids) { - return 'None'; - } - - $links = array(); - foreach ($reviewer_phids as $reviewer_phid) { - $links[] = $this->getHandle($reviewer_phid)->renderLink(); - } - - return implode(', ', $links); + return $this->renderUserList($this->getReviewerPHIDs()); } private function getReviewerPHIDs() {