mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-21 21:10:56 +01:00
Move activity log rendering to a dashboard panel
Summary: Ref T4986. Swap this in. Two minor notes: - I adjusted the SearchEngine to add an additional constraint when the viewer isn't an admin. This mostly stops us from doing a bunch of unnecessary work. - I fixed the settings panel to paginate (currently loads all results, slow in production). Test Plan: Viewed logs; viewed settings panel; created a dashboard panel. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T4986 Differential Revision: https://secure.phabricator.com/D9136
This commit is contained in:
parent
6300955661
commit
e6f6a58f93
3 changed files with 59 additions and 32 deletions
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
final class PhabricatorPeopleLogsController extends PhabricatorPeopleController
|
final class PhabricatorPeopleLogsController
|
||||||
implements PhabricatorApplicationSearchResultsControllerInterface {
|
extends PhabricatorPeopleController {
|
||||||
|
|
||||||
private $queryKey;
|
private $queryKey;
|
||||||
|
|
||||||
|
@ -19,34 +19,6 @@ final class PhabricatorPeopleLogsController extends PhabricatorPeopleController
|
||||||
return $this->delegateToController($controller);
|
return $this->delegateToController($controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function renderResultsList(
|
|
||||||
array $logs,
|
|
||||||
PhabricatorSavedQuery $query) {
|
|
||||||
assert_instances_of($logs, 'PhabricatorUserLog');
|
|
||||||
|
|
||||||
$request = $this->getRequest();
|
|
||||||
$viewer = $request->getUser();
|
|
||||||
|
|
||||||
$phids = array();
|
|
||||||
foreach ($logs as $log) {
|
|
||||||
$phids[$log->getActorPHID()] = true;
|
|
||||||
$phids[$log->getUserPHID()] = true;
|
|
||||||
}
|
|
||||||
$phids = array_keys($phids);
|
|
||||||
$handles = $this->loadViewerHandles($phids);
|
|
||||||
|
|
||||||
$table = id(new PhabricatorUserLogView())
|
|
||||||
->setUser($viewer)
|
|
||||||
->setLogs($logs)
|
|
||||||
->setSearchBaseURI($this->getApplicationURI('logs/'))
|
|
||||||
->setHandles($handles);
|
|
||||||
|
|
||||||
return id(new PHUIObjectBoxView())
|
|
||||||
->setHeaderText(pht('User Activity Logs'))
|
|
||||||
->appendChild($table);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function buildSideNavView() {
|
public function buildSideNavView() {
|
||||||
$nav = new AphrontSideNavFilterView();
|
$nav = new AphrontSideNavFilterView();
|
||||||
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
|
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
|
||||||
|
|
|
@ -3,6 +3,10 @@
|
||||||
final class PhabricatorPeopleLogSearchEngine
|
final class PhabricatorPeopleLogSearchEngine
|
||||||
extends PhabricatorApplicationSearchEngine {
|
extends PhabricatorApplicationSearchEngine {
|
||||||
|
|
||||||
|
public function getApplicationClassName() {
|
||||||
|
return 'PhabricatorApplicationPeople';
|
||||||
|
}
|
||||||
|
|
||||||
public function getPageSize(PhabricatorSavedQuery $saved) {
|
public function getPageSize(PhabricatorSavedQuery $saved) {
|
||||||
return 500;
|
return 500;
|
||||||
}
|
}
|
||||||
|
@ -36,6 +40,16 @@ final class PhabricatorPeopleLogSearchEngine
|
||||||
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
|
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
|
||||||
$query = id(new PhabricatorPeopleLogQuery());
|
$query = id(new PhabricatorPeopleLogQuery());
|
||||||
|
|
||||||
|
// NOTE: If the viewer isn't an administrator, always restrict the query to
|
||||||
|
// related records. This echoes the policy logic of these logs. This is
|
||||||
|
// mostly a performance optimization, to prevent us from having to pull
|
||||||
|
// large numbers of logs that the user will not be able to see and filter
|
||||||
|
// them in-process.
|
||||||
|
$viewer = $this->requireViewer();
|
||||||
|
if (!$viewer->getIsAdmin()) {
|
||||||
|
$query->withRelatedPHIDs(array($viewer->getPHID()));
|
||||||
|
}
|
||||||
|
|
||||||
$actor_phids = $saved->getParameter('actorPHIDs', array());
|
$actor_phids = $saved->getParameter('actorPHIDs', array());
|
||||||
if ($actor_phids) {
|
if ($actor_phids) {
|
||||||
$query->withActorPHIDs($actor_phids);
|
$query->withActorPHIDs($actor_phids);
|
||||||
|
@ -154,4 +168,38 @@ final class PhabricatorPeopleLogSearchEngine
|
||||||
return parent::buildSavedQueryFromBuiltin($query_key);
|
return parent::buildSavedQueryFromBuiltin($query_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getRequiredHandlePHIDsForResultList(
|
||||||
|
array $logs,
|
||||||
|
PhabricatorSavedQuery $query) {
|
||||||
|
|
||||||
|
$phids = array();
|
||||||
|
foreach ($logs as $log) {
|
||||||
|
$phids[$log->getActorPHID()] = true;
|
||||||
|
$phids[$log->getUserPHID()] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return array_keys($phids);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function renderResultList(
|
||||||
|
array $logs,
|
||||||
|
PhabricatorSavedQuery $query,
|
||||||
|
array $handles) {
|
||||||
|
assert_instances_of($logs, 'PhabricatorUserLog');
|
||||||
|
|
||||||
|
$viewer = $this->requireViewer();
|
||||||
|
|
||||||
|
$table = id(new PhabricatorUserLogView())
|
||||||
|
->setUser($viewer)
|
||||||
|
->setLogs($logs)
|
||||||
|
->setHandles($handles);
|
||||||
|
|
||||||
|
if ($viewer->getIsAdmin()) {
|
||||||
|
$table->setSearchBaseURI($this->getApplicationURI('logs/'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return id(new PHUIObjectBoxView())
|
||||||
|
->setHeaderText(pht('User Activity Logs'))
|
||||||
|
->appendChild($table);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,10 +27,13 @@ final class PhabricatorSettingsPanelActivity
|
||||||
$viewer = $request->getUser();
|
$viewer = $request->getUser();
|
||||||
$user = $this->getUser();
|
$user = $this->getUser();
|
||||||
|
|
||||||
|
$pager = id(new AphrontCursorPagerView())
|
||||||
|
->readFromRequest($request);
|
||||||
|
|
||||||
$logs = id(new PhabricatorPeopleLogQuery())
|
$logs = id(new PhabricatorPeopleLogQuery())
|
||||||
->setViewer($viewer)
|
->setViewer($viewer)
|
||||||
->withRelatedPHIDs(array($user->getPHID()))
|
->withRelatedPHIDs(array($user->getPHID()))
|
||||||
->execute();
|
->executeWithCursorPager($pager);
|
||||||
|
|
||||||
$phids = array();
|
$phids = array();
|
||||||
foreach ($logs as $log) {
|
foreach ($logs as $log) {
|
||||||
|
@ -56,7 +59,11 @@ final class PhabricatorSettingsPanelActivity
|
||||||
->setHeaderText(pht('Account Activity Logs'))
|
->setHeaderText(pht('Account Activity Logs'))
|
||||||
->appendChild($table);
|
->appendChild($table);
|
||||||
|
|
||||||
return $panel;
|
$pager_box = id(new PHUIBoxView())
|
||||||
|
->addMargin(PHUI::MARGIN_LARGE)
|
||||||
|
->appendChild($pager);
|
||||||
|
|
||||||
|
return array($panel, $pager_box);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue