comment = $comment; return $this; } public function setHandles(array $handles) { $this->handles = $handles; return $this; } public function setMarkupEngine($markup_engine) { $this->markupEngine = $markup_engine; return $this; } public function setPreview($preview) { $this->preview = $preview; return $this; } public function setInlineComments(array $inline_comments) { $this->inlines = $inline_comments; return $this; } public function setChangesets(array $changesets) { // Ship these in sorted by getSortKey() and keyed by ID... or else! $this->changesets = $changesets; return $this; } public function render() { require_celerity_resource('phabricator-remarkup-css'); require_celerity_resource('differential-revision-comment-css'); $comment = $this->comment; $action = $comment->getAction(); $action_class = 'differential-comment-action-'.phutil_escape_html($action); if ($this->preview) { $date = 'COMMENT PREVIEW'; } else { $date = date('F jS, Y g:i:s A', $comment->getDateCreated()); } $author = $this->handles[$comment->getAuthorPHID()]; $author_link = $author->renderLink(); $verb = DifferentialAction::getActionPastTenseVerb($comment->getAction()); $verb = phutil_escape_html($verb); $content = $comment->getContent(); if (strlen(rtrim($content))) { $title = "{$author_link} {$verb} this revision:"; $cache = $comment->getCache(); if (strlen($cache)) { $content = $cache; } else { $content = $this->markupEngine->markupText($content); if ($comment->getID()) { $comment->setCache($content); $comment->save(); } } $content = '
'. $content. '
'; } else { $title = null; $content = '
'. "

{$author_link} {$verb} this revision.

". '
'; } if ($this->inlines) { $inline_render = array(); $inlines = $this->inlines; $changesets = $this->changesets; $inlines_by_changeset = mgroup($inlines, 'getChangesetID'); $inlines_by_changeset = array_select_keys( $inlines_by_changeset, array_keys($this->changesets)); $inline_render[] = ''; foreach ($inlines_by_changeset as $changeset_id => $inlines) { $changeset = $changesets[$changeset_id]; $inlines = msort($inlines, 'getLineNumber'); $inline_render[] = ''. ''. ''; foreach ($inlines as $inline) { if (!$inline->getLineLength()) { $lines = $inline->getLineNumber(); } else { $lines = $inline->getLineNumber()."\xE2\x80\x93". ($inline->getLineNumber() + $inline->getLineLength()); } $lines = phutil_render_tag( 'a', array( 'href' => '#inline-'.$inline->getID(), 'class' => 'num', ), $lines); $content = $inline->getCache(); if (!strlen($content)) { $content = $this->markupEngine->markupText($content); if ($inline->getID()) { $inline->setCache($content); $inline->save(); } } $inline_render[] = ''. ''. ''. ''; } } $inline_render[] = '
'. $changeset->getFileName(). '
'.$lines.''.$content.'
'; $inline_render = implode("\n", $inline_render); $inline_render = '
'. 'Inline Comments'. '
'. $inline_render; } else { $inline_render = null; } $background = null; $uri = $author->getImageURI(); if ($uri) { $background = "background-image: url('{$uri}');"; } return '
'. '
'. '
'.$date.'
'. '
'.$title.'
'. '
'. '
'. '
'. '
'. $content. '
'. $inline_render. '
'. '
'. '
'; } }