mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 17:02:41 +01:00
Simplify notification code
Summary: Currently we have two different feed story classes, one for notifications and one for feed stories. However, we never actually do anything different with them -- the notification is always the same as the feed story, just shown differently. Delete the notification special case to reduce the amount of code we have supporting feed and notifications. This is a precursor to @chad's notification designs. Test Plan: Viewed notifications and feed, saw exactly the same result before and after the patch (but less, simpler code). Reviewers: btrahan Reviewed By: btrahan CC: chad, aran Differential Revision: https://secure.phabricator.com/D4114
This commit is contained in:
parent
75e8ff26f5
commit
0bd3f3c53e
12 changed files with 46 additions and 151 deletions
|
@ -745,7 +745,6 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorFeedStoryReference' => 'applications/feed/storage/PhabricatorFeedStoryReference.php',
|
'PhabricatorFeedStoryReference' => 'applications/feed/storage/PhabricatorFeedStoryReference.php',
|
||||||
'PhabricatorFeedStoryStatus' => 'applications/feed/story/PhabricatorFeedStoryStatus.php',
|
'PhabricatorFeedStoryStatus' => 'applications/feed/story/PhabricatorFeedStoryStatus.php',
|
||||||
'PhabricatorFeedStoryTypeConstants' => 'applications/feed/constants/PhabricatorFeedStoryTypeConstants.php',
|
'PhabricatorFeedStoryTypeConstants' => 'applications/feed/constants/PhabricatorFeedStoryTypeConstants.php',
|
||||||
'PhabricatorFeedStoryUnknown' => 'applications/feed/story/PhabricatorFeedStoryUnknown.php',
|
|
||||||
'PhabricatorFeedStoryView' => 'applications/feed/view/PhabricatorFeedStoryView.php',
|
'PhabricatorFeedStoryView' => 'applications/feed/view/PhabricatorFeedStoryView.php',
|
||||||
'PhabricatorFeedView' => 'applications/feed/view/PhabricatorFeedView.php',
|
'PhabricatorFeedView' => 'applications/feed/view/PhabricatorFeedView.php',
|
||||||
'PhabricatorFile' => 'applications/files/storage/PhabricatorFile.php',
|
'PhabricatorFile' => 'applications/files/storage/PhabricatorFile.php',
|
||||||
|
@ -872,8 +871,6 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorNotificationPanelController' => 'applications/notification/controller/PhabricatorNotificationPanelController.php',
|
'PhabricatorNotificationPanelController' => 'applications/notification/controller/PhabricatorNotificationPanelController.php',
|
||||||
'PhabricatorNotificationQuery' => 'applications/notification/PhabricatorNotificationQuery.php',
|
'PhabricatorNotificationQuery' => 'applications/notification/PhabricatorNotificationQuery.php',
|
||||||
'PhabricatorNotificationStatusController' => 'applications/notification/controller/PhabricatorNotificationStatusController.php',
|
'PhabricatorNotificationStatusController' => 'applications/notification/controller/PhabricatorNotificationStatusController.php',
|
||||||
'PhabricatorNotificationStoryView' => 'applications/notification/view/PhabricatorNotificationStoryView.php',
|
|
||||||
'PhabricatorNotificationView' => 'applications/notification/view/PhabricatorNotificationView.php',
|
|
||||||
'PhabricatorOAuthClientAuthorization' => 'applications/oauthserver/storage/PhabricatorOAuthClientAuthorization.php',
|
'PhabricatorOAuthClientAuthorization' => 'applications/oauthserver/storage/PhabricatorOAuthClientAuthorization.php',
|
||||||
'PhabricatorOAuthClientAuthorizationBaseController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationBaseController.php',
|
'PhabricatorOAuthClientAuthorizationBaseController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationBaseController.php',
|
||||||
'PhabricatorOAuthClientAuthorizationDeleteController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationDeleteController.php',
|
'PhabricatorOAuthClientAuthorizationDeleteController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationDeleteController.php',
|
||||||
|
@ -1986,7 +1983,6 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorFeedStoryReference' => 'PhabricatorFeedDAO',
|
'PhabricatorFeedStoryReference' => 'PhabricatorFeedDAO',
|
||||||
'PhabricatorFeedStoryStatus' => 'PhabricatorFeedStory',
|
'PhabricatorFeedStoryStatus' => 'PhabricatorFeedStory',
|
||||||
'PhabricatorFeedStoryTypeConstants' => 'PhabricatorFeedConstants',
|
'PhabricatorFeedStoryTypeConstants' => 'PhabricatorFeedConstants',
|
||||||
'PhabricatorFeedStoryUnknown' => 'PhabricatorFeedStory',
|
|
||||||
'PhabricatorFeedStoryView' => 'PhabricatorFeedView',
|
'PhabricatorFeedStoryView' => 'PhabricatorFeedView',
|
||||||
'PhabricatorFeedView' => 'AphrontView',
|
'PhabricatorFeedView' => 'AphrontView',
|
||||||
'PhabricatorFile' =>
|
'PhabricatorFile' =>
|
||||||
|
@ -2096,8 +2092,6 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorNotificationPanelController' => 'PhabricatorNotificationController',
|
'PhabricatorNotificationPanelController' => 'PhabricatorNotificationController',
|
||||||
'PhabricatorNotificationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
'PhabricatorNotificationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||||
'PhabricatorNotificationStatusController' => 'PhabricatorNotificationController',
|
'PhabricatorNotificationStatusController' => 'PhabricatorNotificationController',
|
||||||
'PhabricatorNotificationStoryView' => 'PhabricatorNotificationView',
|
|
||||||
'PhabricatorNotificationView' => 'AphrontView',
|
|
||||||
'PhabricatorOAuthClientAuthorization' => 'PhabricatorOAuthServerDAO',
|
'PhabricatorOAuthClientAuthorization' => 'PhabricatorOAuthServerDAO',
|
||||||
'PhabricatorOAuthClientAuthorizationBaseController' => 'PhabricatorOAuthServerController',
|
'PhabricatorOAuthClientAuthorizationBaseController' => 'PhabricatorOAuthServerController',
|
||||||
'PhabricatorOAuthClientAuthorizationDeleteController' => 'PhabricatorOAuthClientAuthorizationBaseController',
|
'PhabricatorOAuthClientAuthorizationDeleteController' => 'PhabricatorOAuthClientAuthorizationBaseController',
|
||||||
|
|
|
@ -149,12 +149,6 @@ abstract class PhabricatorFeedStory implements PhabricatorPolicyInterface {
|
||||||
|
|
||||||
abstract public function renderView();
|
abstract public function renderView();
|
||||||
|
|
||||||
// TODO: Make abstract once all subclasses implement it.
|
|
||||||
public function renderNotificationView() {
|
|
||||||
return id(new PhabricatorFeedStoryUnknown($this->data))
|
|
||||||
->renderNotificationView();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getRequiredHandlePHIDs() {
|
public function getRequiredHandlePHIDs() {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ final class PhabricatorFeedStoryDifferential extends PhabricatorFeedStory {
|
||||||
$data = $this->getStoryData();
|
$data = $this->getStoryData();
|
||||||
|
|
||||||
$view = new PhabricatorFeedStoryView();
|
$view = new PhabricatorFeedStoryView();
|
||||||
|
$view->setViewed($this->getHasViewed());
|
||||||
|
|
||||||
$line = $this->getLineForData($data);
|
$line = $this->getLineForData($data);
|
||||||
$view->setTitle($line);
|
$view->setTitle($line);
|
||||||
|
@ -37,18 +38,6 @@ final class PhabricatorFeedStoryDifferential extends PhabricatorFeedStory {
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function renderNotificationView() {
|
|
||||||
$data = $this->getStoryData();
|
|
||||||
|
|
||||||
$view = new PhabricatorNotificationStoryView();
|
|
||||||
|
|
||||||
$view->setTitle($this->getLineForData($data));
|
|
||||||
$view->setEpoch($data->getEpoch());
|
|
||||||
$view->setViewed($this->getHasViewed());
|
|
||||||
|
|
||||||
return $view;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getLineForData($data) {
|
private function getLineForData($data) {
|
||||||
$actor_phid = $data->getAuthorPHID();
|
$actor_phid = $data->getAuthorPHID();
|
||||||
$revision_phid = $data->getValue('revision_phid');
|
$revision_phid = $data->getValue('revision_phid');
|
||||||
|
|
|
@ -4,11 +4,6 @@ final class PhabricatorFeedStoryDifferentialAggregate
|
||||||
extends PhabricatorFeedStoryAggregate {
|
extends PhabricatorFeedStoryAggregate {
|
||||||
|
|
||||||
public function renderView() {
|
public function renderView() {
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function renderNotificationView() {
|
|
||||||
$data = $this->getStoryData();
|
$data = $this->getStoryData();
|
||||||
|
|
||||||
$task_link = $this->linkTo($data->getValue('revision_phid'));
|
$task_link = $this->linkTo($data->getValue('revision_phid'));
|
||||||
|
@ -59,7 +54,7 @@ final class PhabricatorFeedStoryDifferentialAggregate
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$view = new PhabricatorNotificationStoryView();
|
$view = new PhabricatorFeedStoryView();
|
||||||
$view->setEpoch($this->getEpoch());
|
$view->setEpoch($this->getEpoch());
|
||||||
$view->setViewed($this->getHasViewed());
|
$view->setViewed($this->getHasViewed());
|
||||||
$view->setTitle($title);
|
$view->setTitle($title);
|
||||||
|
|
|
@ -17,6 +17,7 @@ final class PhabricatorFeedStoryManiphest
|
||||||
$data = $this->getStoryData();
|
$data = $this->getStoryData();
|
||||||
|
|
||||||
$view = new PhabricatorFeedStoryView();
|
$view = new PhabricatorFeedStoryView();
|
||||||
|
$view->setViewed($this->getHasViewed());
|
||||||
|
|
||||||
$line = $this->getLineForData($data);
|
$line = $this->getLineForData($data);
|
||||||
$view->setTitle($line);
|
$view->setTitle($line);
|
||||||
|
@ -43,18 +44,6 @@ final class PhabricatorFeedStoryManiphest
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function renderNotificationView() {
|
|
||||||
$data = $this->getStoryData();
|
|
||||||
|
|
||||||
$view = new PhabricatorNotificationStoryView();
|
|
||||||
|
|
||||||
$view->setTitle($this->getLineForData($data));
|
|
||||||
$view->setEpoch($data->getEpoch());
|
|
||||||
$view->setViewed($this->getHasViewed());
|
|
||||||
|
|
||||||
return $view;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getLineForData($data) {
|
private function getLineForData($data) {
|
||||||
$action = $data->getValue('action');
|
$action = $data->getValue('action');
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,6 @@ final class PhabricatorFeedStoryManiphestAggregate
|
||||||
extends PhabricatorFeedStoryAggregate {
|
extends PhabricatorFeedStoryAggregate {
|
||||||
|
|
||||||
public function renderView() {
|
public function renderView() {
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function renderNotificationView() {
|
|
||||||
$data = $this->getStoryData();
|
$data = $this->getStoryData();
|
||||||
|
|
||||||
$task_link = $this->linkTo($data->getValue('taskPHID'));
|
$task_link = $this->linkTo($data->getValue('taskPHID'));
|
||||||
|
@ -59,7 +54,7 @@ final class PhabricatorFeedStoryManiphestAggregate
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$view = new PhabricatorNotificationStoryView();
|
$view = new PhabricatorFeedStoryView();
|
||||||
$view->setEpoch($this->getEpoch());
|
$view->setEpoch($this->getEpoch());
|
||||||
$view->setViewed($this->getHasViewed());
|
$view->setViewed($this->getHasViewed());
|
||||||
$view->setTitle($title);
|
$view->setTitle($title);
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
final class PhabricatorFeedStoryUnknown extends PhabricatorFeedStory {
|
|
||||||
|
|
||||||
public function renderView() {
|
|
||||||
$data = $this->getStoryData();
|
|
||||||
|
|
||||||
$view = new PhabricatorFeedStoryView();
|
|
||||||
|
|
||||||
$view->setTitle('Unknown Story');
|
|
||||||
$view->setEpoch($data->getEpoch());
|
|
||||||
|
|
||||||
$view->appendChild(
|
|
||||||
'This is an unrenderable feed story of type '.
|
|
||||||
'"'.phutil_escape_html($data->getStoryType()).'".');
|
|
||||||
|
|
||||||
|
|
||||||
return $view;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function renderNotificationView() {
|
|
||||||
$data = $this->getStoryData();
|
|
||||||
|
|
||||||
$view = new PhabricatorNotificationStoryView();
|
|
||||||
|
|
||||||
$view->setTitle('A wild notifcation appeared!');
|
|
||||||
$view->setEpoch($data->getEpoch());
|
|
||||||
|
|
||||||
$view->appendChild(
|
|
||||||
'This is an unrenderable feed story of type '.
|
|
||||||
'"'.phutil_escape_html($data->getStoryType()).'".');
|
|
||||||
|
|
||||||
|
|
||||||
return $view;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -7,6 +7,7 @@ final class PhabricatorFeedStoryView extends PhabricatorFeedView {
|
||||||
private $phid;
|
private $phid;
|
||||||
private $epoch;
|
private $epoch;
|
||||||
private $viewer;
|
private $viewer;
|
||||||
|
private $viewed;
|
||||||
|
|
||||||
private $oneLine;
|
private $oneLine;
|
||||||
|
|
||||||
|
@ -35,6 +36,32 @@ final class PhabricatorFeedStoryView extends PhabricatorFeedView {
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setViewed($viewed) {
|
||||||
|
$this->viewed = $viewed;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getViewed() {
|
||||||
|
return $this->viewed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderNotification() {
|
||||||
|
$classes = array(
|
||||||
|
'phabricator-notification',
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!$this->viewed) {
|
||||||
|
$classes[] = 'phabricator-notification-unread';
|
||||||
|
}
|
||||||
|
|
||||||
|
return phutil_render_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'class' => implode(' ', $classes),
|
||||||
|
),
|
||||||
|
$this->title);
|
||||||
|
}
|
||||||
|
|
||||||
public function render() {
|
public function render() {
|
||||||
|
|
||||||
$head = phutil_render_tag(
|
$head = phutil_render_tag(
|
||||||
|
|
|
@ -123,8 +123,9 @@ final class PhabricatorNotificationBuilder {
|
||||||
$null_view = new AphrontNullView();
|
$null_view = new AphrontNullView();
|
||||||
|
|
||||||
foreach ($stories as $story) {
|
foreach ($stories as $story) {
|
||||||
$view = $story->renderNotificationView();
|
$view = $story->renderView();
|
||||||
$null_view->appendChild($view);
|
|
||||||
|
$null_view->appendChild($view->renderNotification());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $null_view;
|
return $null_view;
|
||||||
|
|
|
@ -14,7 +14,8 @@ final class PhabricatorFeedStoryNotification extends PhabricatorFeedDAO {
|
||||||
) + parent::getConfiguration();
|
) + parent::getConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
static public function updateObjectNotificationViews(PhabricatorUser $user,
|
static public function updateObjectNotificationViews(
|
||||||
|
PhabricatorUser $user,
|
||||||
$object_phid) {
|
$object_phid) {
|
||||||
|
|
||||||
if (PhabricatorEnv::getEnvConfig('notification.enabled')) {
|
if (PhabricatorEnv::getEnvConfig('notification.enabled')) {
|
||||||
|
@ -38,22 +39,18 @@ final class PhabricatorFeedStoryNotification extends PhabricatorFeedDAO {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* should only be called when notifications are enabled */
|
public function countUnread(PhabricatorUser $user) {
|
||||||
public function countUnread(
|
$conn = $this->establishConnection('r');
|
||||||
PhabricatorUser $user) {
|
|
||||||
|
|
||||||
$conn = $this->establishConnection('r');
|
$data = queryfx_one(
|
||||||
|
$conn,
|
||||||
|
'SELECT COUNT(*) as count
|
||||||
|
FROM %T
|
||||||
|
WHERE userPHID = %s AND hasViewed = 0',
|
||||||
|
$this->getTableName(),
|
||||||
|
$user->getPHID());
|
||||||
|
|
||||||
$data = queryfx_one(
|
return $data['count'];
|
||||||
$conn,
|
|
||||||
"SELECT COUNT(*) as count
|
|
||||||
FROM %T
|
|
||||||
WHERE userPHID = %s
|
|
||||||
AND hasViewed=0",
|
|
||||||
$this->getTableName(),
|
|
||||||
$user->getPHID());
|
|
||||||
|
|
||||||
return $data['count'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
final class PhabricatorNotificationStoryView
|
|
||||||
extends PhabricatorNotificationView {
|
|
||||||
|
|
||||||
private $title;
|
|
||||||
private $phid;
|
|
||||||
private $epoch;
|
|
||||||
private $viewed;
|
|
||||||
|
|
||||||
public function setTitle($title) {
|
|
||||||
$this->title = $title;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setEpoch($epoch) {
|
|
||||||
$this->epoch = $epoch;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setViewed($viewed) {
|
|
||||||
$this->viewed = $viewed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function render() {
|
|
||||||
|
|
||||||
$classes = array(
|
|
||||||
'phabricator-notification',
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!$this->viewed) {
|
|
||||||
$classes[] = 'phabricator-notification-unread';
|
|
||||||
}
|
|
||||||
|
|
||||||
return phutil_render_tag(
|
|
||||||
'div',
|
|
||||||
array(
|
|
||||||
'class' => implode(' ', $classes),
|
|
||||||
),
|
|
||||||
$this->title);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
abstract class PhabricatorNotificationView extends AphrontView {
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in a new issue