diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index 7c73c57ed0..b044341f69 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -82,7 +82,7 @@ celerity_register_resource_map(array( ), 'phabricator-standard-page-view' => array( - 'uri' => '/res/1f93ada7/rsrc/css/application/base/standard-page-view.css', + 'uri' => '/res/fb02fb0e/rsrc/css/application/base/standard-page-view.css', 'type' => 'css', 'requires' => array( @@ -107,6 +107,24 @@ celerity_register_resource_map(array( ), 'disk' => '/rsrc/css/application/differential/core.css', ), + 'differential-revision-comment-list-css' => + array( + 'uri' => '/res/a1c117db/rsrc/css/application/differential/revision-comment-list.css', + 'type' => 'css', + 'requires' => + array( + ), + 'disk' => '/rsrc/css/application/differential/revision-comment-list.css', + ), + 'differential-revision-comment-css' => + array( + 'uri' => '/res/d9924857/rsrc/css/application/differential/revision-comment.css', + 'type' => 'css', + 'requires' => + array( + ), + 'disk' => '/rsrc/css/application/differential/revision-comment.css', + ), 'differential-revision-detail-css' => array( 'uri' => '/res/230a67c6/rsrc/css/application/differential/revision-detail.css', @@ -247,7 +265,7 @@ celerity_register_resource_map(array( ), array ( 'packages' => array ( - '4efe7b58' => + '364a306c' => array ( 'name' => 'core.pkg.css', 'symbols' => @@ -264,7 +282,7 @@ celerity_register_resource_map(array( 9 => 'aphront-typeahead-control-css', 10 => 'phabricator-directory-css', ), - 'uri' => '/res/pkg/4efe7b58/core.pkg.css', + 'uri' => '/res/pkg/364a306c/core.pkg.css', 'type' => 'css', ), '69b11588' => @@ -284,17 +302,17 @@ celerity_register_resource_map(array( ), 'reverse' => array ( - 'phabricator-core-css' => '4efe7b58', - 'phabricator-core-buttons-css' => '4efe7b58', - 'phabricator-standard-page-view' => '4efe7b58', - 'aphront-dialog-view-css' => '4efe7b58', - 'aphront-form-view-css' => '4efe7b58', - 'aphront-panel-view-css' => '4efe7b58', - 'aphront-side-nav-view-css' => '4efe7b58', - 'aphront-table-view-css' => '4efe7b58', - 'aphront-tokenizer-control-css' => '4efe7b58', - 'aphront-typeahead-control-css' => '4efe7b58', - 'phabricator-directory-css' => '4efe7b58', + 'phabricator-core-css' => '364a306c', + 'phabricator-core-buttons-css' => '364a306c', + 'phabricator-standard-page-view' => '364a306c', + 'aphront-dialog-view-css' => '364a306c', + 'aphront-form-view-css' => '364a306c', + 'aphront-panel-view-css' => '364a306c', + 'aphront-side-nav-view-css' => '364a306c', + 'aphront-table-view-css' => '364a306c', + 'aphront-tokenizer-control-css' => '364a306c', + 'aphront-typeahead-control-css' => '364a306c', + 'phabricator-directory-css' => '364a306c', 'differential-core-view-css' => '69b11588', 'differential-changeset-view-css' => '69b11588', 'differential-revision-detail-css' => '69b11588', diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index d7dc179c5a..cd8722d518 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -72,6 +72,7 @@ phutil_register_library_map(array( 'DifferentialChangesetListView' => 'applications/differential/view/changesetlistview', 'DifferentialChangesetParser' => 'applications/differential/parser/changeset', 'DifferentialChangesetViewController' => 'applications/differential/controller/changesetview', + 'DifferentialComment' => 'applications/differential/storage/comment', 'DifferentialController' => 'applications/differential/controller/base', 'DifferentialDAO' => 'applications/differential/storage/base', 'DifferentialDiff' => 'applications/differential/storage/diff', @@ -86,6 +87,8 @@ phutil_register_library_map(array( 'DifferentialNewDiffMail' => 'applications/differential/mail/newdiff', 'DifferentialReviewRequestMail' => 'applications/differential/mail/reviewrequest', 'DifferentialRevision' => 'applications/differential/storage/revision', + 'DifferentialRevisionCommentListView' => 'applications/differential/view/revisioncommentlist', + 'DifferentialRevisionCommentView' => 'applications/differential/view/revisioncomment', 'DifferentialRevisionControlSystem' => 'applications/differential/constants/revisioncontrolsystem', 'DifferentialRevisionDetailView' => 'applications/differential/view/revisiondetail', 'DifferentialRevisionEditController' => 'applications/differential/controller/revisionedit', @@ -226,6 +229,7 @@ phutil_register_library_map(array( 'DifferentialChangesetDetailView' => 'AphrontView', 'DifferentialChangesetListView' => 'AphrontView', 'DifferentialChangesetViewController' => 'DifferentialController', + 'DifferentialComment' => 'DifferentialDAO', 'DifferentialController' => 'PhabricatorController', 'DifferentialDAO' => 'PhabricatorLiskDAO', 'DifferentialDiff' => 'DifferentialDAO', @@ -238,6 +242,8 @@ phutil_register_library_map(array( 'DifferentialNewDiffMail' => 'DifferentialReviewRequestMail', 'DifferentialReviewRequestMail' => 'DifferentialMail', 'DifferentialRevision' => 'DifferentialDAO', + 'DifferentialRevisionCommentListView' => 'AphrontView', + 'DifferentialRevisionCommentView' => 'AphrontView', 'DifferentialRevisionDetailView' => 'AphrontView', 'DifferentialRevisionEditController' => 'DifferentialController', 'DifferentialRevisionListController' => 'DifferentialController', diff --git a/src/applications/conduit/method/differential/creatediff/ConduitAPI_differential_creatediff_Method.php b/src/applications/conduit/method/differential/creatediff/ConduitAPI_differential_creatediff_Method.php index b2ff481224..0d5f877c1f 100644 --- a/src/applications/conduit/method/differential/creatediff/ConduitAPI_differential_creatediff_Method.php +++ b/src/applications/conduit/method/differential/creatediff/ConduitAPI_differential_creatediff_Method.php @@ -33,7 +33,7 @@ class ConduitAPI_differential_creatediff_Method extends ConduitAPIMethod { 'sourceControlBaseRevision' => 'required string', 'parentRevisionID' => 'optional revisionid', 'creationMethod' => 'optional string', - 'ownerPHID' => 'optional phid', + 'authorPHID' => 'optional phid', 'arcanistProject' => 'optional string', 'lintStatus' => 'required enum', @@ -65,7 +65,7 @@ class ConduitAPI_differential_creatediff_Method extends ConduitAPIMethod { $diff->setBranch($request->getValue('branch')); $diff->setCreationMethod($request->getValue('creationMethod')); - $diff->setOwnerPHID($request->getValue('ownerPHID')); + $diff->setAuthorPHID($request->getValue('authorPHID')); $parent_id = $request->getValue('parentRevisionID'); if ($parent_id) { diff --git a/src/applications/differential/constants/action/DifferentialAction.php b/src/applications/differential/constants/action/DifferentialAction.php index 431b456210..d89ba6d2bb 100755 --- a/src/applications/differential/constants/action/DifferentialAction.php +++ b/src/applications/differential/constants/action/DifferentialAction.php @@ -49,7 +49,7 @@ final class DifferentialAction { self::ACTION_ADDREVIEWERS => 'added reviewers to', ); - if (empty($verbs[$action])) { + if (!empty($verbs[$action])) { return $verbs[$action]; } else { return 'brazenly "'.$action.'ed"'; diff --git a/src/applications/differential/controller/revisionlist/DifferentialRevisionListController.php b/src/applications/differential/controller/revisionlist/DifferentialRevisionListController.php index 60ad7d3143..956b1f5a16 100644 --- a/src/applications/differential/controller/revisionlist/DifferentialRevisionListController.php +++ b/src/applications/differential/controller/revisionlist/DifferentialRevisionListController.php @@ -145,7 +145,7 @@ class DifferentialRevisionListController extends DifferentialController { phutil_escape_html($revision->getTitle())), phutil_escape_html($status), number_format($revision->getLineCount()), - $revision->getOwnerPHID(), + $revision->getAuthorPHID(), 'TODO', $revision->getDateModified(), $revision->getDateCreated(), diff --git a/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php b/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php index cb1bcdff7c..1b39d3fd43 100644 --- a/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php +++ b/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php @@ -41,26 +41,23 @@ class DifferentialRevisionViewController extends DifferentialController { $changesets = $target->loadChangesets(); + $comments = $revision->loadComments(); + $comments = array_merge( + $this->getImplicitComments($revision), + $comments); + $object_phids = array_merge( $revision->getReviewers(), $revision->getCCPHIDs(), array( - $revision->getOwnerPHID(), + $revision->getAuthorPHID(), $request->getUser()->getPHID(), - )); + ), + mpull($comments, 'getAuthorPHID')); $handles = id(new PhabricatorObjectHandleData($object_phids)) ->loadHandles(); - $diff_history = new DifferentialRevisionUpdateHistoryView(); - $diff_history->setDiffs($diffs); - - $toc_view = new DifferentialDiffTableOfContentsView(); - $toc_view->setChangesets($changesets); - - $changeset_view = new DifferentialChangesetListView(); - $changeset_view->setChangesets($changesets); - $revision_detail = new DifferentialRevisionDetailView(); $revision_detail->setRevision($revision); @@ -70,9 +67,23 @@ class DifferentialRevisionViewController extends DifferentialController { $actions = $this->getRevisionActions($revision); $revision_detail->setActions($actions); + $comment_view = new DifferentialRevisionCommentListView(); + $comment_view->setComments($comments); + $comment_view->setHandles($handles); + + $diff_history = new DifferentialRevisionUpdateHistoryView(); + $diff_history->setDiffs($diffs); + + $toc_view = new DifferentialDiffTableOfContentsView(); + $toc_view->setChangesets($changesets); + + $changeset_view = new DifferentialChangesetListView(); + $changeset_view->setChangesets($changesets); + return $this->buildStandardPageResponse( '
'. $revision_detail->render(). + $comment_view->render(). $diff_history->render(). $toc_view->render(). $changeset_view->render(). @@ -82,6 +93,32 @@ class DifferentialRevisionViewController extends DifferentialController { )); } + private function getImplicitComments(DifferentialRevision $revision) { + + $template = new DifferentialComment(); + $template->setAuthorPHID($revision->getAuthorPHID()); + $template->setRevisionID($revision->getID()); + $template->setDateCreated($revision->getDateCreated()); + + $comments = array(); + + if (strlen($revision->getSummary())) { + $summary_comment = clone $template; + $summary_comment->setContent($revision->getSummary()); + $summary_comment->setAction(DifferentialAction::ACTION_SUMMARIZE); + $comments[] = $summary_comment; + } + + if (strlen($revision->getTestPlan())) { + $testplan_comment = clone $template; + $testplan_comment->setContent($revision->getTestPlan()); + $testplan_comment->setAction(DifferentialAction::ACTION_TESTPLAN); + $comments[] = $testplan_comment; + } + + return $comments; + } + private function getRevisionProperties( DifferentialRevision $revision, DifferentialDiff $diff, @@ -93,7 +130,7 @@ class DifferentialRevisionViewController extends DifferentialController { $status = DifferentialRevisionStatus::getNameForRevisionStatus($status); $properties['Revision Status'] = ''.$status.''; - $author = $handles[$revision->getOwnerPHID()]; + $author = $handles[$revision->getAuthorPHID()]; $properties['Author'] = $author->renderLink(); $properties['Reviewers'] = $this->renderHandleLinkList( @@ -125,7 +162,7 @@ class DifferentialRevisionViewController extends DifferentialController { private function getRevisionActions(DifferentialRevision $revision) { $viewer_phid = $this->getRequest()->getUser()->getPHID(); - $viewer_is_owner = ($revision->getOwnerPHID() == $viewer_phid); + $viewer_is_owner = ($revision->getAuthorPHID() == $viewer_phid); $viewer_is_reviewer = in_array($viewer_phid, $revision->getReviewers()); $viewer_is_cc = in_array($viewer_phid, $revision->getCCPHIDs()); $status = $revision->getStatus(); diff --git a/src/applications/differential/controller/revisionview/__init__.php b/src/applications/differential/controller/revisionview/__init__.php index d724343cd1..b8360feeee 100644 --- a/src/applications/differential/controller/revisionview/__init__.php +++ b/src/applications/differential/controller/revisionview/__init__.php @@ -7,11 +7,14 @@ phutil_require_module('phabricator', 'aphront/response/404'); +phutil_require_module('phabricator', 'applications/differential/constants/action'); phutil_require_module('phabricator', 'applications/differential/constants/revisionstatus'); phutil_require_module('phabricator', 'applications/differential/controller/base'); +phutil_require_module('phabricator', 'applications/differential/storage/comment'); phutil_require_module('phabricator', 'applications/differential/storage/revision'); phutil_require_module('phabricator', 'applications/differential/view/changesetlistview'); phutil_require_module('phabricator', 'applications/differential/view/difftableofcontents'); +phutil_require_module('phabricator', 'applications/differential/view/revisioncommentlist'); phutil_require_module('phabricator', 'applications/differential/view/revisiondetail'); phutil_require_module('phabricator', 'applications/differential/view/revisionupdatehistory'); phutil_require_module('phabricator', 'applications/phid/handle/data'); diff --git a/src/applications/differential/data/revisionlist/DifferentialRevisionListData.php b/src/applications/differential/data/revisionlist/DifferentialRevisionListData.php index 5589f6c6b4..ded367bfee 100755 --- a/src/applications/differential/data/revisionlist/DifferentialRevisionListData.php +++ b/src/applications/differential/data/revisionlist/DifferentialRevisionListData.php @@ -60,13 +60,13 @@ class DifferentialRevisionListData { break; case self::QUERY_OPEN_OWNED: $this->revisions = $this->loadAllWhere( - 'revision.status in (%Ld) AND revision.ownerPHID in (%Ls)', + 'revision.status in (%Ld) AND revision.authorPHID in (%Ls)', $this->getOpenStatuses(), $this->ids); break; case self::QUERY_COMMITTABLE: $this->revisions = $this->loadAllWhere( - 'revision.status in (%Ld) AND revision.ownerPHID in (%Ls)', + 'revision.status in (%Ld) AND revision.authorPHID in (%Ls)', array( DifferentialRevisionStatus::ACCEPTED, ), @@ -85,12 +85,12 @@ class DifferentialRevisionListData { break; case self::QUERY_OWNED: $this->revisions = $this->loadAllWhere( - 'revision.ownerPHID in (%Ls)', + 'revision.authorPHID in (%Ls)', $this->ids); break; case self::QUERY_OWNED_OR_REVIEWER: $this->revisions = $this->loadAllWhereJoinReview( - 'revision.ownerPHID in (%Ls) OR relationship.objectPHID in (%Ls)', + 'revision.authorPHID in (%Ls) OR relationship.objectPHID in (%Ls)', $this->ids, $this->ids); break; @@ -99,7 +99,7 @@ class DifferentialRevisionListData { $data = queryfx_all( $rev->establishConnection('r'), 'SELECT revision.* FROM %T revision - WHERE revision.ownerPHID in (%Ls) + WHERE revision.authorPHID in (%Ls) AND revision.status in (%Ld) UNION ALL @@ -135,7 +135,7 @@ class DifferentialRevisionListData { $data = queryfx_all( $rev->establishConnection('r'), 'SELECT revision.* FROM %T revision - WHERE revision.ownerPHID in (%Ls) + WHERE revision.authorPHID in (%Ls) AND revision.status IN (%Ld) UNION ALL diff --git a/src/applications/differential/editor/revision/DifferentialRevisionEditor.php b/src/applications/differential/editor/revision/DifferentialRevisionEditor.php index 822c641031..69c9707cfc 100644 --- a/src/applications/differential/editor/revision/DifferentialRevisionEditor.php +++ b/src/applications/differential/editor/revision/DifferentialRevisionEditor.php @@ -204,8 +204,8 @@ class DifferentialRevisionEditor { if ($revision->getTitle() === null) { $revision->setTitle('Untitled Revision'); } - if ($revision->getOwnerPHID() === null) { - $revision->setOwnerPHID($this->getActorPHID()); + if ($revision->getAuthorPHID() === null) { + $revision->setAuthorPHID($this->getActorPHID()); } $revision->save(); @@ -315,7 +315,7 @@ class DifferentialRevisionEditor { array_keys($add['rev']), $this->actorPHID); - // Add the owner to the relevant set of users so they get a copy of the + // Add the author to the relevant set of users so they get a copy of the // email. if (!$this->silentUpdate) { if ($is_new) { diff --git a/src/applications/differential/storage/comment/DifferentialComment.php b/src/applications/differential/storage/comment/DifferentialComment.php new file mode 100755 index 0000000000..fa4eb2fc40 --- /dev/null +++ b/src/applications/differential/storage/comment/DifferentialComment.php @@ -0,0 +1,26 @@ +getID()); } + public function loadComments() { + if (!$this->getID()) { + return array(); + } + return id(new DifferentialComment())->loadAllWhere( + 'revisionID = %d', + $this->getID()); + } + public function loadRelationships() { if (!$this->getID()) { $this->relationships = array(); diff --git a/src/applications/differential/storage/revision/__init__.php b/src/applications/differential/storage/revision/__init__.php index 651e976961..9a227dd210 100644 --- a/src/applications/differential/storage/revision/__init__.php +++ b/src/applications/differential/storage/revision/__init__.php @@ -7,6 +7,7 @@ phutil_require_module('phabricator', 'applications/differential/storage/base'); +phutil_require_module('phabricator', 'applications/differential/storage/comment'); phutil_require_module('phabricator', 'applications/differential/storage/diff'); phutil_require_module('phabricator', 'applications/phid/storage/phid'); phutil_require_module('phabricator', 'storage/qsprintf'); diff --git a/src/applications/differential/view/revisioncomment/DifferentialRevisionCommentView.php b/src/applications/differential/view/revisioncomment/DifferentialRevisionCommentView.php new file mode 100644 index 0000000000..430f6dc77d --- /dev/null +++ b/src/applications/differential/view/revisioncomment/DifferentialRevisionCommentView.php @@ -0,0 +1,80 @@ +comment = $comment; + return $this; + } + + public function setHandles(array $handles) { + $this->handles = $handles; + return $this; + } + + public function render() { + + require_celerity_resource('differential-revision-comment-css'); + + $comment = $this->comment; + + $action = $comment->getAction(); + + $action_class = 'differential-comment-action-'.phutil_escape_html($action); + + $date = date('F jS, Y g:i:s A', $comment->getDateCreated()); + + $author = $comment->getAuthorPHID(); + $author = $this->handles[$author]->renderLink(); + + $verb = DifferentialAction::getActionVerb($comment->getAction()); + $verb = phutil_escape_html($verb); + + $content = $comment->getContent(); + if (strlen(rtrim($content))) { + $title = "{$author} {$verb} this revision:"; + $content = phutil_escape_html($content); + } else { + $title = null; + $content = + '
'. + "

{$author} {$verb} this revision.

". + '
'; + } + + return + '
'. + '
'. + '
'.$date.'
'. + '
'.$title.'
'. + '
'. + '
'. + '
'. + '
'. + $content. + '
'. + '
'. + '
'. + '
'; + } + +} diff --git a/src/applications/differential/view/revisioncomment/__init__.php b/src/applications/differential/view/revisioncomment/__init__.php new file mode 100644 index 0000000000..9542bcce85 --- /dev/null +++ b/src/applications/differential/view/revisioncomment/__init__.php @@ -0,0 +1,16 @@ +comments = $comments; + return $this; + } + + public function setHandles(array $handles) { + $this->handles = $handles; + return $this; + } + + public function render() { + + require_celerity_resource('differential-revision-comment-list-css'); + + $comments = array(); + foreach ($this->comments as $comment) { + $view = new DifferentialRevisionCommentView(); + $view->setComment($comment); + $view->setHandles($this->handles); + + $comments[] = $view->render(); + } + + return + '
'. + implode("\n", $comments). + '
'; + } +} diff --git a/src/applications/differential/view/revisioncommentlist/__init__.php b/src/applications/differential/view/revisioncommentlist/__init__.php new file mode 100644 index 0000000000..26f89871ad --- /dev/null +++ b/src/applications/differential/view/revisioncommentlist/__init__.php @@ -0,0 +1,14 @@ +'. '
'. diff --git a/src/view/page/failure/__init__.php b/src/view/page/failure/__init__.php index e753355fdb..2129a18212 100644 --- a/src/view/page/failure/__init__.php +++ b/src/view/page/failure/__init__.php @@ -6,6 +6,7 @@ +phutil_require_module('phabricator', 'infratructure/celerity/api'); phutil_require_module('phabricator', 'view/base'); phutil_require_module('phutil', 'markup'); diff --git a/webroot/rsrc/css/application/base/standard-page-view.css b/webroot/rsrc/css/application/base/standard-page-view.css index 164b6da120..befde48900 100644 --- a/webroot/rsrc/css/application/base/standard-page-view.css +++ b/webroot/rsrc/css/application/base/standard-page-view.css @@ -6,7 +6,6 @@ .phabricator-standard-page { background: #ffffff; border-bottom: 1px solid #888888; - font-size: 14px; -webkit-box-shadow: 0 0 6px #000; -mox-box-shadow: 0 0 6px #000; diff --git a/webroot/rsrc/css/application/differential/revision-comment-list.css b/webroot/rsrc/css/application/differential/revision-comment-list.css new file mode 100644 index 0000000000..14a9a2ac18 --- /dev/null +++ b/webroot/rsrc/css/application/differential/revision-comment-list.css @@ -0,0 +1,4 @@ +/** + * @provides differential-revision-comment-list-css + */ + diff --git a/webroot/rsrc/css/application/differential/revision-comment.css b/webroot/rsrc/css/application/differential/revision-comment.css new file mode 100644 index 0000000000..82b068d736 --- /dev/null +++ b/webroot/rsrc/css/application/differential/revision-comment.css @@ -0,0 +1,39 @@ +/** + * @provides differential-revision-comment-css + */ + + +.differential-comment-date { + color: #666666; + float: right; + font-size: 11px; + margin: 0em; + padding-top: 6px; +} + +.differential-comment-title { + font-weight: bold; + height: 16px; + margin: 4px 0em 0em 0em; + padding: 4px 0em; + position: relative; +} + +.differential-comment-body { + min-height: 56px; + padding-left: 62px; + background-repeat: no-repeat; + background-position: 6px 0px; + margin-bottom: 14px; +} + +.differential-comment-content { + background: #fbfbfb; + border-color: #c3c3c3; + border-style: solid; + border-width: 1px 10px 1px 10px; + clear: both; + line-height: 1.4em; + margin: 0em; + padding: .3em 5px .4em 1.25em; +}