1
0
Fork 0
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:
epriestley 2012-02-27 09:49:01 -08:00
parent 26599e6192
commit 053d576ad6
8 changed files with 127 additions and 2 deletions

View file

@ -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',

View file

@ -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,

View file

@ -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');

View file

@ -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();
}
} }

View file

@ -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');

View file

@ -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';
} }

View file

@ -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;
}
}

View 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');