mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-13 15:28:35 +01:00
Summary: Ref T10537. For Nuance, I want to introduce new sources (like "GitHub" or "GitHub via Nuance" or something) but this needs to modularize eventually. Split ContentSource apart so applications can add new content sources. Test Plan: This change has huge surface area, so I'll hold it until post-release. I think it's fairly safe (and if it does break anything, the breaks should be fatals, not anything subtle or difficult to fix), there's just no reason not to hold it for a few hours. - Viewed new module page. - Grepped for all removed functions/constants. - Viewed some transactions. - Hovered over timestamps to get content source details. - Added a comment via Conduit. - Added a comment via web. - Ran `bin/storage upgrade --namespace XXXXX --no-quickstart -f` to re-run all historic migrations. - Generated some objects with `bin/lipsum`. - Ran a bulk job on some tasks. - Ran unit tests. {F1190182} Reviewers: chad Reviewed By: chad Maniphest Tasks: T10537 Differential Revision: https://secure.phabricator.com/D15521
284 lines
6.3 KiB
PHP
284 lines
6.3 KiB
PHP
<?php
|
|
|
|
final class DifferentialInlineComment
|
|
extends Phobject
|
|
implements PhabricatorInlineCommentInterface {
|
|
|
|
private $proxy;
|
|
private $syntheticAuthor;
|
|
private $isGhost;
|
|
|
|
public function __construct() {
|
|
$this->proxy = new DifferentialTransactionComment();
|
|
}
|
|
|
|
public function __clone() {
|
|
$this->proxy = clone $this->proxy;
|
|
}
|
|
|
|
public function getTransactionCommentForSave() {
|
|
$content_source = PhabricatorContentSource::newForSource(
|
|
PhabricatorOldWorldContentSource::SOURCECONST);
|
|
|
|
$this->proxy
|
|
->setViewPolicy('public')
|
|
->setEditPolicy($this->getAuthorPHID())
|
|
->setContentSource($content_source)
|
|
->attachIsHidden(false)
|
|
->setCommentVersion(1);
|
|
|
|
return $this->proxy;
|
|
}
|
|
|
|
public function openTransaction() {
|
|
$this->proxy->openTransaction();
|
|
}
|
|
|
|
public function saveTransaction() {
|
|
$this->proxy->saveTransaction();
|
|
}
|
|
|
|
public function save() {
|
|
$this->getTransactionCommentForSave()->save();
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function delete() {
|
|
$this->proxy->delete();
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function supportsHiding() {
|
|
if ($this->getSyntheticAuthor()) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function isHidden() {
|
|
if (!$this->supportsHiding()) {
|
|
return false;
|
|
}
|
|
return $this->proxy->getIsHidden();
|
|
}
|
|
|
|
public function getID() {
|
|
return $this->proxy->getID();
|
|
}
|
|
|
|
public function getPHID() {
|
|
return $this->proxy->getPHID();
|
|
}
|
|
|
|
public static function newFromModernComment(
|
|
DifferentialTransactionComment $comment) {
|
|
|
|
$obj = new DifferentialInlineComment();
|
|
$obj->proxy = $comment;
|
|
|
|
return $obj;
|
|
}
|
|
|
|
public function setSyntheticAuthor($synthetic_author) {
|
|
$this->syntheticAuthor = $synthetic_author;
|
|
return $this;
|
|
}
|
|
|
|
public function getSyntheticAuthor() {
|
|
return $this->syntheticAuthor;
|
|
}
|
|
|
|
public function isCompatible(PhabricatorInlineCommentInterface $comment) {
|
|
return
|
|
($this->getAuthorPHID() === $comment->getAuthorPHID()) &&
|
|
($this->getSyntheticAuthor() === $comment->getSyntheticAuthor()) &&
|
|
($this->getContent() === $comment->getContent());
|
|
}
|
|
|
|
public function setContent($content) {
|
|
$this->proxy->setContent($content);
|
|
return $this;
|
|
}
|
|
|
|
public function getContent() {
|
|
return $this->proxy->getContent();
|
|
}
|
|
|
|
public function isDraft() {
|
|
return !$this->proxy->getTransactionPHID();
|
|
}
|
|
|
|
public function setChangesetID($id) {
|
|
$this->proxy->setChangesetID($id);
|
|
return $this;
|
|
}
|
|
|
|
public function getChangesetID() {
|
|
return $this->proxy->getChangesetID();
|
|
}
|
|
|
|
public function setIsNewFile($is_new) {
|
|
$this->proxy->setIsNewFile($is_new);
|
|
return $this;
|
|
}
|
|
|
|
public function getIsNewFile() {
|
|
return $this->proxy->getIsNewFile();
|
|
}
|
|
|
|
public function setLineNumber($number) {
|
|
$this->proxy->setLineNumber($number);
|
|
return $this;
|
|
}
|
|
|
|
public function getLineNumber() {
|
|
return $this->proxy->getLineNumber();
|
|
}
|
|
|
|
public function setLineLength($length) {
|
|
$this->proxy->setLineLength($length);
|
|
return $this;
|
|
}
|
|
|
|
public function getLineLength() {
|
|
return $this->proxy->getLineLength();
|
|
}
|
|
|
|
public function setCache($cache) {
|
|
return $this;
|
|
}
|
|
|
|
public function getCache() {
|
|
return null;
|
|
}
|
|
|
|
public function setAuthorPHID($phid) {
|
|
$this->proxy->setAuthorPHID($phid);
|
|
return $this;
|
|
}
|
|
|
|
public function getAuthorPHID() {
|
|
return $this->proxy->getAuthorPHID();
|
|
}
|
|
|
|
public function setRevision(DifferentialRevision $revision) {
|
|
$this->proxy->setRevisionPHID($revision->getPHID());
|
|
return $this;
|
|
}
|
|
|
|
public function getRevisionPHID() {
|
|
return $this->proxy->getRevisionPHID();
|
|
}
|
|
|
|
// Although these are purely transitional, they're also *extra* dumb.
|
|
|
|
public function setRevisionID($revision_id) {
|
|
$revision = id(new DifferentialRevision())->load($revision_id);
|
|
return $this->setRevision($revision);
|
|
}
|
|
|
|
public function getRevisionID() {
|
|
$phid = $this->proxy->getRevisionPHID();
|
|
if (!$phid) {
|
|
return null;
|
|
}
|
|
|
|
$revision = id(new DifferentialRevision())->loadOneWhere(
|
|
'phid = %s',
|
|
$phid);
|
|
if (!$revision) {
|
|
return null;
|
|
}
|
|
return $revision->getID();
|
|
}
|
|
|
|
// When setting a comment ID, we also generate a phantom transaction PHID for
|
|
// the future transaction.
|
|
|
|
public function setCommentID($id) {
|
|
$this->proxy->setTransactionPHID(
|
|
PhabricatorPHID::generateNewPHID(
|
|
PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST,
|
|
DifferentialRevisionPHIDType::TYPECONST));
|
|
return $this;
|
|
}
|
|
|
|
public function setReplyToCommentPHID($phid) {
|
|
$this->proxy->setReplyToCommentPHID($phid);
|
|
return $this;
|
|
}
|
|
|
|
public function getReplyToCommentPHID() {
|
|
return $this->proxy->getReplyToCommentPHID();
|
|
}
|
|
|
|
public function setHasReplies($has_replies) {
|
|
$this->proxy->setHasReplies($has_replies);
|
|
return $this;
|
|
}
|
|
|
|
public function getHasReplies() {
|
|
return $this->proxy->getHasReplies();
|
|
}
|
|
|
|
public function setIsDeleted($is_deleted) {
|
|
$this->proxy->setIsDeleted($is_deleted);
|
|
return $this;
|
|
}
|
|
|
|
public function getIsDeleted() {
|
|
return $this->proxy->getIsDeleted();
|
|
}
|
|
|
|
public function setFixedState($state) {
|
|
$this->proxy->setFixedState($state);
|
|
return $this;
|
|
}
|
|
|
|
public function getFixedState() {
|
|
return $this->proxy->getFixedState();
|
|
}
|
|
|
|
public function setIsGhost($is_ghost) {
|
|
$this->isGhost = $is_ghost;
|
|
return $this;
|
|
}
|
|
|
|
public function getIsGhost() {
|
|
return $this->isGhost;
|
|
}
|
|
|
|
public function makeEphemeral() {
|
|
$this->proxy->makeEphemeral();
|
|
return $this;
|
|
}
|
|
|
|
|
|
/* -( PhabricatorMarkupInterface Implementation )-------------------------- */
|
|
|
|
|
|
public function getMarkupFieldKey($field) {
|
|
// We can't use ID because synthetic comments don't have it.
|
|
return 'DI:'.PhabricatorHash::digest($this->getContent());
|
|
}
|
|
|
|
public function newMarkupEngine($field) {
|
|
return PhabricatorMarkupEngine::newDifferentialMarkupEngine();
|
|
}
|
|
|
|
public function getMarkupText($field) {
|
|
return $this->getContent();
|
|
}
|
|
|
|
public function didMarkupText($field, $output, PhutilMarkupEngine $engine) {
|
|
return $output;
|
|
}
|
|
|
|
public function shouldUseMarkupCache($field) {
|
|
// Only cache submitted comments.
|
|
return ($this->getID() && !$this->isDraft());
|
|
}
|
|
|
|
}
|