mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-18 12:52:42 +01:00
Add comments to internal Phame Posts
Summary: Adds commenting to Phame Posts, also testing a new "document comment style". Unsure about it but Phame is a prototype so good place to explore. Test Plan: Leave some comments, see some comments, test show/hide. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T9746 Differential Revision: https://secure.phabricator.com/D14451
This commit is contained in:
parent
c589af51e8
commit
b315f61f49
10 changed files with 198 additions and 2 deletions
|
@ -126,7 +126,7 @@ return array(
|
||||||
'rsrc/css/phui/phui-box.css' => 'a5bb366d',
|
'rsrc/css/phui/phui-box.css' => 'a5bb366d',
|
||||||
'rsrc/css/phui/phui-button.css' => '16020a60',
|
'rsrc/css/phui/phui-button.css' => '16020a60',
|
||||||
'rsrc/css/phui/phui-crumbs-view.css' => '414406b5',
|
'rsrc/css/phui/phui-crumbs-view.css' => '414406b5',
|
||||||
'rsrc/css/phui/phui-document-pro.css' => '4f2b42e3',
|
'rsrc/css/phui/phui-document-pro.css' => '7f3009ce',
|
||||||
'rsrc/css/phui/phui-document.css' => 'f841ad0a',
|
'rsrc/css/phui/phui-document.css' => 'f841ad0a',
|
||||||
'rsrc/css/phui/phui-feed-story.css' => 'b7b26d23',
|
'rsrc/css/phui/phui-feed-story.css' => 'b7b26d23',
|
||||||
'rsrc/css/phui/phui-fontkit.css' => 'c9d63950',
|
'rsrc/css/phui/phui-fontkit.css' => 'c9d63950',
|
||||||
|
@ -781,7 +781,7 @@ return array(
|
||||||
'phui-calendar-month-css' => '476be7e0',
|
'phui-calendar-month-css' => '476be7e0',
|
||||||
'phui-crumbs-view-css' => '414406b5',
|
'phui-crumbs-view-css' => '414406b5',
|
||||||
'phui-document-view-css' => 'f841ad0a',
|
'phui-document-view-css' => 'f841ad0a',
|
||||||
'phui-document-view-pro-css' => '4f2b42e3',
|
'phui-document-view-pro-css' => '7f3009ce',
|
||||||
'phui-feed-story-css' => 'b7b26d23',
|
'phui-feed-story-css' => 'b7b26d23',
|
||||||
'phui-font-icon-base-css' => 'ecbbb4c2',
|
'phui-font-icon-base-css' => 'ecbbb4c2',
|
||||||
'phui-fontkit-css' => 'c9d63950',
|
'phui-fontkit-css' => 'c9d63950',
|
||||||
|
|
18
resources/sql/autopatches/20151109.phame.post.comments.1.sql
Normal file
18
resources/sql/autopatches/20151109.phame.post.comments.1.sql
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
CREATE TABLE {$NAMESPACE}_phame.phame_posttransaction_comment (
|
||||||
|
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
phid VARCHAR(64) NOT NULL,
|
||||||
|
transactionPHID VARCHAR(64),
|
||||||
|
authorPHID VARCHAR(64) NOT NULL,
|
||||||
|
viewPolicy VARCHAR(64) NOT NULL,
|
||||||
|
editPolicy VARCHAR(64) NOT NULL,
|
||||||
|
commentVersion INT UNSIGNED NOT NULL,
|
||||||
|
content LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT},
|
||||||
|
contentSource LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT},
|
||||||
|
isDeleted BOOL NOT NULL,
|
||||||
|
dateCreated INT UNSIGNED NOT NULL,
|
||||||
|
dateModified INT UNSIGNED NOT NULL,
|
||||||
|
|
||||||
|
UNIQUE KEY `key_phid` (phid),
|
||||||
|
UNIQUE KEY `key_version` (transactionPHID, commentVersion)
|
||||||
|
|
||||||
|
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -3273,6 +3273,7 @@ phutil_register_library_map(array(
|
||||||
'PhameCreatePostConduitAPIMethod' => 'applications/phame/conduit/PhameCreatePostConduitAPIMethod.php',
|
'PhameCreatePostConduitAPIMethod' => 'applications/phame/conduit/PhameCreatePostConduitAPIMethod.php',
|
||||||
'PhameDAO' => 'applications/phame/storage/PhameDAO.php',
|
'PhameDAO' => 'applications/phame/storage/PhameDAO.php',
|
||||||
'PhamePost' => 'applications/phame/storage/PhamePost.php',
|
'PhamePost' => 'applications/phame/storage/PhamePost.php',
|
||||||
|
'PhamePostCommentController' => 'applications/phame/controller/post/PhamePostCommentController.php',
|
||||||
'PhamePostController' => 'applications/phame/controller/post/PhamePostController.php',
|
'PhamePostController' => 'applications/phame/controller/post/PhamePostController.php',
|
||||||
'PhamePostDeleteController' => 'applications/phame/controller/post/PhamePostDeleteController.php',
|
'PhamePostDeleteController' => 'applications/phame/controller/post/PhamePostDeleteController.php',
|
||||||
'PhamePostEditController' => 'applications/phame/controller/post/PhamePostEditController.php',
|
'PhamePostEditController' => 'applications/phame/controller/post/PhamePostEditController.php',
|
||||||
|
@ -3287,6 +3288,7 @@ phutil_register_library_map(array(
|
||||||
'PhamePostReplyHandler' => 'applications/phame/mail/PhamePostReplyHandler.php',
|
'PhamePostReplyHandler' => 'applications/phame/mail/PhamePostReplyHandler.php',
|
||||||
'PhamePostSearchEngine' => 'applications/phame/query/PhamePostSearchEngine.php',
|
'PhamePostSearchEngine' => 'applications/phame/query/PhamePostSearchEngine.php',
|
||||||
'PhamePostTransaction' => 'applications/phame/storage/PhamePostTransaction.php',
|
'PhamePostTransaction' => 'applications/phame/storage/PhamePostTransaction.php',
|
||||||
|
'PhamePostTransactionComment' => 'applications/phame/storage/PhamePostTransactionComment.php',
|
||||||
'PhamePostTransactionQuery' => 'applications/phame/query/PhamePostTransactionQuery.php',
|
'PhamePostTransactionQuery' => 'applications/phame/query/PhamePostTransactionQuery.php',
|
||||||
'PhamePostUnpublishController' => 'applications/phame/controller/post/PhamePostUnpublishController.php',
|
'PhamePostUnpublishController' => 'applications/phame/controller/post/PhamePostUnpublishController.php',
|
||||||
'PhamePostView' => 'applications/phame/view/PhamePostView.php',
|
'PhamePostView' => 'applications/phame/view/PhamePostView.php',
|
||||||
|
@ -7552,6 +7554,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorSubscribableInterface',
|
'PhabricatorSubscribableInterface',
|
||||||
'PhabricatorTokenReceiverInterface',
|
'PhabricatorTokenReceiverInterface',
|
||||||
),
|
),
|
||||||
|
'PhamePostCommentController' => 'PhamePostController',
|
||||||
'PhamePostController' => 'PhameController',
|
'PhamePostController' => 'PhameController',
|
||||||
'PhamePostDeleteController' => 'PhamePostController',
|
'PhamePostDeleteController' => 'PhamePostController',
|
||||||
'PhamePostEditController' => 'PhamePostController',
|
'PhamePostEditController' => 'PhamePostController',
|
||||||
|
@ -7566,6 +7569,7 @@ phutil_register_library_map(array(
|
||||||
'PhamePostReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
|
'PhamePostReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
|
||||||
'PhamePostSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
'PhamePostSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
||||||
'PhamePostTransaction' => 'PhabricatorApplicationTransaction',
|
'PhamePostTransaction' => 'PhabricatorApplicationTransaction',
|
||||||
|
'PhamePostTransactionComment' => 'PhabricatorApplicationTransactionComment',
|
||||||
'PhamePostTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
|
'PhamePostTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
|
||||||
'PhamePostUnpublishController' => 'PhamePostController',
|
'PhamePostUnpublishController' => 'PhamePostController',
|
||||||
'PhamePostView' => 'AphrontView',
|
'PhamePostView' => 'AphrontView',
|
||||||
|
|
|
@ -54,6 +54,7 @@ final class PhabricatorPhameApplication extends PhabricatorApplication {
|
||||||
'framed/(?P<id>\d+)/' => 'PhamePostFramedController',
|
'framed/(?P<id>\d+)/' => 'PhamePostFramedController',
|
||||||
'new/' => 'PhamePostNewController',
|
'new/' => 'PhamePostNewController',
|
||||||
'move/(?P<id>\d+)/' => 'PhamePostNewController',
|
'move/(?P<id>\d+)/' => 'PhamePostNewController',
|
||||||
|
'comment/(?P<id>[1-9]\d*)/' => 'PhamePostCommentController',
|
||||||
),
|
),
|
||||||
'blog/' => array(
|
'blog/' => array(
|
||||||
'(?:(?P<filter>user|all)/)?' => 'PhameBlogListController',
|
'(?:(?P<filter>user|all)/)?' => 'PhameBlogListController',
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhamePostCommentController
|
||||||
|
extends PhamePostController {
|
||||||
|
|
||||||
|
public function handleRequest(AphrontRequest $request) {
|
||||||
|
$viewer = $request->getViewer();
|
||||||
|
$id = $request->getURIData('id');
|
||||||
|
|
||||||
|
if (!$request->isFormPost()) {
|
||||||
|
return new Aphront400Response();
|
||||||
|
}
|
||||||
|
|
||||||
|
$post = id(new PhamePostQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withIDs(array($id))
|
||||||
|
->executeOne();
|
||||||
|
if (!$post) {
|
||||||
|
return new Aphront404Response();
|
||||||
|
}
|
||||||
|
|
||||||
|
$is_preview = $request->isPreviewRequest();
|
||||||
|
$draft = PhabricatorDraft::buildFromRequest($request);
|
||||||
|
|
||||||
|
$view_uri = $this->getApplicationURI('post/view/'.$post->getID().'/');
|
||||||
|
|
||||||
|
$xactions = array();
|
||||||
|
$xactions[] = id(new PhamePostTransaction())
|
||||||
|
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
|
||||||
|
->attachComment(
|
||||||
|
id(new PhamePostTransactionComment())
|
||||||
|
->setContent($request->getStr('comment')));
|
||||||
|
|
||||||
|
$editor = id(new PhamePostEditor())
|
||||||
|
->setActor($viewer)
|
||||||
|
->setContinueOnNoEffect($request->isContinueRequest())
|
||||||
|
->setContentSourceFromRequest($request)
|
||||||
|
->setIsPreview($is_preview);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$xactions = $editor->applyTransactions($post, $xactions);
|
||||||
|
} catch (PhabricatorApplicationTransactionNoEffectException $ex) {
|
||||||
|
return id(new PhabricatorApplicationTransactionNoEffectResponse())
|
||||||
|
->setCancelURI($view_uri)
|
||||||
|
->setException($ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($draft) {
|
||||||
|
$draft->replaceOrDelete();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($request->isAjax() && $is_preview) {
|
||||||
|
return id(new PhabricatorApplicationTransactionResponse())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->setTransactions($xactions)
|
||||||
|
->setIsPreview($is_preview);
|
||||||
|
} else {
|
||||||
|
return id(new AphrontRedirectResponse())
|
||||||
|
->setURI($view_uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -81,13 +81,24 @@ final class PhamePostViewController extends PhamePostController {
|
||||||
),
|
),
|
||||||
$engine->getOutput($post, PhamePost::MARKUP_FIELD_BODY)));
|
$engine->getOutput($post, PhamePost::MARKUP_FIELD_BODY)));
|
||||||
|
|
||||||
|
$timeline = $this->buildTransactionTimeline(
|
||||||
|
$post,
|
||||||
|
id(new PhamePostTransactionQuery())
|
||||||
|
->withTransactionTypes(array(PhabricatorTransactions::TYPE_COMMENT)));
|
||||||
|
$timeline = phutil_tag_div('phui-document-view-pro-box', $timeline);
|
||||||
|
|
||||||
|
$add_comment = $this->buildCommentForm($post);
|
||||||
|
|
||||||
return $this->newPage()
|
return $this->newPage()
|
||||||
->setTitle($post->getTitle())
|
->setTitle($post->getTitle())
|
||||||
->addClass('pro-white-background')
|
->addClass('pro-white-background')
|
||||||
|
->setPageObjectPHIDs(array($post->getPHID()))
|
||||||
->setCrumbs($crumbs)
|
->setCrumbs($crumbs)
|
||||||
->appendChild(
|
->appendChild(
|
||||||
array(
|
array(
|
||||||
$document,
|
$document,
|
||||||
|
$timeline,
|
||||||
|
$add_comment,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,4 +208,27 @@ final class PhamePostViewController extends PhamePostController {
|
||||||
return $properties;
|
return $properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function buildCommentForm(PhamePost $post) {
|
||||||
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
|
$is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
|
||||||
|
|
||||||
|
$add_comment_header = $is_serious
|
||||||
|
? pht('Add Comment')
|
||||||
|
: pht('Derp Text');
|
||||||
|
|
||||||
|
$draft = PhabricatorDraft::newFromUserAndKey(
|
||||||
|
$viewer, $post->getPHID());
|
||||||
|
|
||||||
|
$box = id(new PhabricatorApplicationTransactionCommentView())
|
||||||
|
->setUser($viewer)
|
||||||
|
->setObjectPHID($post->getPHID())
|
||||||
|
->setDraft($draft)
|
||||||
|
->setHeaderText($add_comment_header)
|
||||||
|
->setAction($this->getApplicationURI('post/comment/'.$post->getID().'/'))
|
||||||
|
->setSubmitButtonName(pht('Add Comment'));
|
||||||
|
|
||||||
|
return phutil_tag_div('phui-document-view-pro-box', $box);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ final class PhamePostEditor
|
||||||
$types[] = PhamePostTransaction::TYPE_PHAME_TITLE;
|
$types[] = PhamePostTransaction::TYPE_PHAME_TITLE;
|
||||||
$types[] = PhamePostTransaction::TYPE_BODY;
|
$types[] = PhamePostTransaction::TYPE_BODY;
|
||||||
$types[] = PhamePostTransaction::TYPE_VISIBILITY;
|
$types[] = PhamePostTransaction::TYPE_VISIBILITY;
|
||||||
|
$types[] = PhabricatorTransactions::TYPE_COMMENT;
|
||||||
|
|
||||||
return $types;
|
return $types;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,10 @@ final class PhamePostTransaction
|
||||||
return PhabricatorPhamePostPHIDType::TYPECONST;
|
return PhabricatorPhamePostPHIDType::TYPECONST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getApplicationTransactionCommentObject() {
|
||||||
|
return new PhamePostTransactionComment();
|
||||||
|
}
|
||||||
|
|
||||||
public function getRemarkupBlocks() {
|
public function getRemarkupBlocks() {
|
||||||
$blocks = parent::getRemarkupBlocks();
|
$blocks = parent::getRemarkupBlocks();
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhamePostTransactionComment
|
||||||
|
extends PhabricatorApplicationTransactionComment {
|
||||||
|
|
||||||
|
public function getApplicationTransactionObject() {
|
||||||
|
return new PhamePostTransaction();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -112,3 +112,64 @@ a.button.phui-document-toc {
|
||||||
.phui-document-view-pro .phui-info-view {
|
.phui-document-view-pro .phui-info-view {
|
||||||
margin: 16px 0 0 0;
|
margin: 16px 0 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-timeline-view {
|
||||||
|
padding: 0;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-timeline-image {
|
||||||
|
border-radius: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-timeline-wedge {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-timeline-major-event .phui-timeline-group {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-timeline-major-event .phui-timeline-content {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phui-document-view-pro-box
|
||||||
|
.phui-timeline-event-view.phui-timeline-minor-event {
|
||||||
|
margin-left: 62px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-timeline-title {
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: {$lightgreybackground};
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-timeline-title-with-icon {
|
||||||
|
padding-left: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-timeline-icon-fill {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-timeline-major-event .phui-timeline-content
|
||||||
|
.phui-timeline-core-content {
|
||||||
|
padding-bottom: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-object-box {
|
||||||
|
background-color: {$lightgreybackground};
|
||||||
|
border: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-object-box .phui-form-view {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phui-document-view-pro-box .phui-object-box .remarkup-assist-textarea {
|
||||||
|
height: 9em;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue