diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index aacf33c45b..43adb4cf58 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -744,6 +744,7 @@ phutil_register_library_map(array( 'PhabricatorNotificationBuilder' => 'applications/notification/builder/PhabricatorNotificationBuilder.php', 'PhabricatorNotificationController' => 'applications/notification/controller/PhabricatorNotificationController.php', 'PhabricatorNotificationIndividualController' => 'applications/notification/controller/PhabricatorNotificationIndividualController.php', + 'PhabricatorNotificationListController' => 'applications/notification/controller/PhabricatorNotificationListController.php', 'PhabricatorNotificationPanelController' => 'applications/notification/controller/PhabricatorNotificationPanelController.php', 'PhabricatorNotificationQuery' => 'applications/notification/PhabricatorNotificationQuery.php', 'PhabricatorNotificationStatusController' => 'applications/notification/controller/PhabricatorNotificationStatusController.php', @@ -1715,7 +1716,9 @@ phutil_register_library_map(array( 'PhabricatorMySQLFileStorageEngine' => 'PhabricatorFileStorageEngine', 'PhabricatorNotificationController' => 'PhabricatorController', 'PhabricatorNotificationIndividualController' => 'PhabricatorNotificationController', + 'PhabricatorNotificationListController' => 'PhabricatorNotificationController', 'PhabricatorNotificationPanelController' => 'PhabricatorNotificationController', + 'PhabricatorNotificationQuery' => 'PhabricatorOffsetPagedQuery', 'PhabricatorNotificationStatusController' => 'PhabricatorNotificationController', 'PhabricatorNotificationStoryView' => 'PhabricatorNotificationView', 'PhabricatorNotificationView' => 'AphrontView', diff --git a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php index b82f1acc97..0629bc7fd7 100644 --- a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php +++ b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php @@ -427,6 +427,7 @@ class AphrontDefaultApplicationConfiguration ), '/notification/' => array( + '' => 'PhabricatorNotificationListController', 'panel/' => 'PhabricatorNotificationPanelController', 'individual/' => 'PhabricatorNotificationIndividualController', 'status/' => 'PhabricatorNotificationStatusController', diff --git a/src/applications/notification/PhabricatorNotificationQuery.php b/src/applications/notification/PhabricatorNotificationQuery.php index 4b1970d4e7..69034b5979 100644 --- a/src/applications/notification/PhabricatorNotificationQuery.php +++ b/src/applications/notification/PhabricatorNotificationQuery.php @@ -16,29 +16,20 @@ * limitations under the License. */ -final class PhabricatorNotificationQuery { +final class PhabricatorNotificationQuery extends PhabricatorOffsetPagedQuery { - private $limit = 100; private $userPHID; - - public function setLimit($limit) { - $this->limit = $limit; - return $this; - } - public function setUserPHID($user_phid) { $this->userPHID = $user_phid; return $this; } - public function execute() { if (!$this->userPHID) { throw new Exception("Call setUser() before executing the query"); } - //TODO throw an exception if no user $story_table = new PhabricatorFeedStoryData(); $notification_table = new PhabricatorFeedStoryNotification(); @@ -49,12 +40,12 @@ final class PhabricatorNotificationQuery { "SELECT story.*, notif.hasViewed FROM %T notif JOIN %T story ON notif.chronologicalKey = story.chronologicalKey WHERE notif.userPHID = %s - ORDER BY notif.chronologicalKey desc - LIMIT %d", + ORDER BY notif.chronologicalKey DESC + %Q", $notification_table->getTableName(), $story_table->getTableName(), $this->userPHID, - $this->limit); + $this->buildLimitClause($conn)); $viewed_map = ipull($data, 'hasViewed', 'chronologicalKey'); $data = $story_table->loadAllFromArray($data); diff --git a/src/applications/notification/controller/PhabricatorNotificationListController.php b/src/applications/notification/controller/PhabricatorNotificationListController.php new file mode 100644 index 0000000000..b863b4bab0 --- /dev/null +++ b/src/applications/notification/controller/PhabricatorNotificationListController.php @@ -0,0 +1,56 @@ +getRequest(); + $user = $request->getUser(); + + $pager = new AphrontPagerView(); + $pager->setURI($request->getRequestURI(), 'offset'); + $pager->setOffset($request->getInt('offset')); + + $query = new PhabricatorNotificationQuery(); + $query->setUserPHID($user->getPHID()); + $notifications = $query->executeWithPager($pager); + + if ($notifications) { + $builder = new PhabricatorNotificationBuilder($notifications); + $view = $builder->buildView(); + } else { + $view = + '