mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-27 09:12:41 +01:00
Integrate Audit into feed
Summary: When a user posts an action in the audit tool, publish it to feed. Test Plan: Made some comments, saw them show up in feed. Reviewers: btrahan, jungejason Reviewed By: jungejason CC: aran, epriestley Maniphest Tasks: T904 Differential Revision: https://secure.phabricator.com/D1695
This commit is contained in:
parent
26599e6192
commit
053d576ad6
8 changed files with 127 additions and 2 deletions
|
@ -526,6 +526,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorFeedPublicStreamController' => 'applications/feed/controller/publicstream',
|
'PhabricatorFeedPublicStreamController' => 'applications/feed/controller/publicstream',
|
||||||
'PhabricatorFeedQuery' => 'applications/feed/query',
|
'PhabricatorFeedQuery' => 'applications/feed/query',
|
||||||
'PhabricatorFeedStory' => 'applications/feed/story/base',
|
'PhabricatorFeedStory' => 'applications/feed/story/base',
|
||||||
|
'PhabricatorFeedStoryAudit' => 'applications/feed/story/audit',
|
||||||
'PhabricatorFeedStoryData' => 'applications/feed/storage/story',
|
'PhabricatorFeedStoryData' => 'applications/feed/storage/story',
|
||||||
'PhabricatorFeedStoryDifferential' => 'applications/feed/story/differential',
|
'PhabricatorFeedStoryDifferential' => 'applications/feed/story/differential',
|
||||||
'PhabricatorFeedStoryManiphest' => 'applications/feed/story/maniphest',
|
'PhabricatorFeedStoryManiphest' => 'applications/feed/story/maniphest',
|
||||||
|
@ -1302,6 +1303,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorFeedController' => 'PhabricatorController',
|
'PhabricatorFeedController' => 'PhabricatorController',
|
||||||
'PhabricatorFeedDAO' => 'PhabricatorLiskDAO',
|
'PhabricatorFeedDAO' => 'PhabricatorLiskDAO',
|
||||||
'PhabricatorFeedPublicStreamController' => 'PhabricatorFeedController',
|
'PhabricatorFeedPublicStreamController' => 'PhabricatorFeedController',
|
||||||
|
'PhabricatorFeedStoryAudit' => 'PhabricatorFeedStory',
|
||||||
'PhabricatorFeedStoryData' => 'PhabricatorFeedDAO',
|
'PhabricatorFeedStoryData' => 'PhabricatorFeedDAO',
|
||||||
'PhabricatorFeedStoryDifferential' => 'PhabricatorFeedStory',
|
'PhabricatorFeedStoryDifferential' => 'PhabricatorFeedStory',
|
||||||
'PhabricatorFeedStoryManiphest' => 'PhabricatorFeedStory',
|
'PhabricatorFeedStoryManiphest' => 'PhabricatorFeedStory',
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class PhabricatorAuditActionConstants {
|
final class PhabricatorAuditActionConstants {
|
||||||
|
|
||||||
const CONCERN = 'concern';
|
const CONCERN = 'concern';
|
||||||
const ACCEPT = 'accept';
|
const ACCEPT = 'accept';
|
||||||
|
@ -32,6 +32,15 @@ class PhabricatorAuditActionConstants {
|
||||||
return $map;
|
return $map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getActionPastTenseVerb($action) {
|
||||||
|
static $map = array(
|
||||||
|
self::COMMENT => 'commented on',
|
||||||
|
self::CONCERN => 'raised a concern with',
|
||||||
|
self::ACCEPT => 'accepted',
|
||||||
|
);
|
||||||
|
return idx($map, $action, 'updated');
|
||||||
|
}
|
||||||
|
|
||||||
public static function getStatusNameMap() {
|
public static function getStatusNameMap() {
|
||||||
static $map = array(
|
static $map = array(
|
||||||
self::CONCERN => PhabricatorAuditStatusConstants::CONCERNED,
|
self::CONCERN => PhabricatorAuditStatusConstants::CONCERNED,
|
||||||
|
|
|
@ -8,5 +8,7 @@
|
||||||
|
|
||||||
phutil_require_module('phabricator', 'applications/audit/constants/status');
|
phutil_require_module('phabricator', 'applications/audit/constants/status');
|
||||||
|
|
||||||
|
phutil_require_module('phutil', 'utils');
|
||||||
|
|
||||||
|
|
||||||
phutil_require_source('PhabricatorAuditActionConstants.php');
|
phutil_require_source('PhabricatorAuditActionConstants.php');
|
||||||
|
|
|
@ -71,7 +71,8 @@ final class PhabricatorAuditCommentEditor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: News feed.
|
$this->publishFeedStory($comment, array_keys($audit_phids));
|
||||||
|
|
||||||
// TODO: Search index.
|
// TODO: Search index.
|
||||||
// TODO: Email.
|
// TODO: Email.
|
||||||
}
|
}
|
||||||
|
@ -112,4 +113,29 @@ final class PhabricatorAuditCommentEditor {
|
||||||
return array_keys($phids);
|
return array_keys($phids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function publishFeedStory($comment, array $more_phids) {
|
||||||
|
$commit = $this->commit;
|
||||||
|
$user = $this->user;
|
||||||
|
|
||||||
|
$related_phids = array_merge(
|
||||||
|
array(
|
||||||
|
$user->getPHID(),
|
||||||
|
$commit->getPHID(),
|
||||||
|
),
|
||||||
|
$more_phids);
|
||||||
|
|
||||||
|
id(new PhabricatorFeedStoryPublisher())
|
||||||
|
->setRelatedPHIDs($related_phids)
|
||||||
|
->setStoryAuthorPHID($user->getPHID())
|
||||||
|
->setStoryTime(time())
|
||||||
|
->setStoryType(PhabricatorFeedStoryTypeConstants::STORY_AUDIT)
|
||||||
|
->setStoryData(
|
||||||
|
array(
|
||||||
|
'commitPHID' => $commit->getPHID(),
|
||||||
|
'action' => $comment->getAction(),
|
||||||
|
'content' => $comment->getContent(),
|
||||||
|
))
|
||||||
|
->publish();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
|
|
||||||
phutil_require_module('phabricator', 'applications/audit/constants/action');
|
phutil_require_module('phabricator', 'applications/audit/constants/action');
|
||||||
|
phutil_require_module('phabricator', 'applications/feed/constants/story');
|
||||||
|
phutil_require_module('phabricator', 'applications/feed/publisher');
|
||||||
phutil_require_module('phabricator', 'applications/owners/storage/owner');
|
phutil_require_module('phabricator', 'applications/owners/storage/owner');
|
||||||
phutil_require_module('phabricator', 'applications/owners/storage/package');
|
phutil_require_module('phabricator', 'applications/owners/storage/package');
|
||||||
phutil_require_module('phabricator', 'applications/owners/storage/packagecommitrelationship');
|
phutil_require_module('phabricator', 'applications/owners/storage/packagecommitrelationship');
|
||||||
|
|
|
@ -25,5 +25,6 @@ final class PhabricatorFeedStoryTypeConstants
|
||||||
const STORY_PHRICTION = 'PhabricatorFeedStoryPhriction';
|
const STORY_PHRICTION = 'PhabricatorFeedStoryPhriction';
|
||||||
const STORY_MANIPHEST = 'PhabricatorFeedStoryManiphest';
|
const STORY_MANIPHEST = 'PhabricatorFeedStoryManiphest';
|
||||||
const STORY_PROJECT = 'PhabricatorFeedStoryProject';
|
const STORY_PROJECT = 'PhabricatorFeedStoryProject';
|
||||||
|
const STORY_AUDIT = 'PhabricatorFeedStoryAudit';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorFeedStoryAudit extends PhabricatorFeedStory {
|
||||||
|
|
||||||
|
public function getRequiredHandlePHIDs() {
|
||||||
|
return array(
|
||||||
|
$this->getStoryData()->getAuthorPHID(),
|
||||||
|
$this->getStoryData()->getValue('commitPHID'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRequiredObjectPHIDs() {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderView() {
|
||||||
|
$data = $this->getStoryData();
|
||||||
|
|
||||||
|
$author_phid = $data->getAuthorPHID();
|
||||||
|
$commit_phid = $data->getValue('commitPHID');
|
||||||
|
|
||||||
|
$view = new PhabricatorFeedStoryView();
|
||||||
|
|
||||||
|
$action = $data->getValue('action');
|
||||||
|
$verb = PhabricatorAuditActionConstants::getActionPastTenseVerb($action);
|
||||||
|
|
||||||
|
$view->setTitle(
|
||||||
|
$this->linkTo($author_phid).
|
||||||
|
" {$verb} commit ".
|
||||||
|
$this->linkTo($commit_phid).
|
||||||
|
".");
|
||||||
|
|
||||||
|
$view->setEpoch($data->getEpoch());
|
||||||
|
|
||||||
|
$comments = $data->getValue('content');
|
||||||
|
if ($comments) {
|
||||||
|
$full_size = true;
|
||||||
|
} else {
|
||||||
|
$full_size = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($full_size) {
|
||||||
|
$view->setImage($this->getHandle($author_phid)->getImageURI());
|
||||||
|
$content = $this->renderSummary($data->getValue('content'));
|
||||||
|
$view->appendChild($content);
|
||||||
|
} else {
|
||||||
|
$view->setOneLineStory(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $view;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
14
src/applications/feed/story/audit/__init__.php
Normal file
14
src/applications/feed/story/audit/__init__.php
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is automatically generated. Lint this module to rebuild it.
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_module('phabricator', 'applications/audit/constants/action');
|
||||||
|
phutil_require_module('phabricator', 'applications/feed/story/base');
|
||||||
|
phutil_require_module('phabricator', 'applications/feed/view/story');
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_source('PhabricatorFeedStoryAudit.php');
|
Loading…
Reference in a new issue