mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-03 16:09:17 +01:00
Use ActionListView for all profile actions
Summary: This leaves the space between the properties and the blurb looking a bit empty, but there will be more stuff there soon (status, VCS names, email, phone/fax numbers, etc., and custom user fields). I removed "view lint messages" since I'm pretty sure no one has ever clicked it. I think providing better search (e.g, T2625) to that UI in Diffusion is a preferable approach. Test Plan: {F49423} Reviewers: chad, btrahan Reviewed By: chad CC: aran Differential Revision: https://secure.phabricator.com/D6403
This commit is contained in:
parent
0125984226
commit
6a40df529d
13 changed files with 143 additions and 190 deletions
|
@ -3029,7 +3029,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'phabricator-action-list-view-css' =>
|
'phabricator-action-list-view-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/f63afae7/rsrc/css/layout/phabricator-action-list-view.css',
|
'uri' => '/res/ef104683/rsrc/css/layout/phabricator-action-list-view.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
@ -4149,7 +4149,7 @@ celerity_register_resource_map(array(
|
||||||
), array(
|
), array(
|
||||||
'packages' =>
|
'packages' =>
|
||||||
array(
|
array(
|
||||||
'680ace9b' =>
|
'6e2d527c' =>
|
||||||
array(
|
array(
|
||||||
'name' => 'core.pkg.css',
|
'name' => 'core.pkg.css',
|
||||||
'symbols' =>
|
'symbols' =>
|
||||||
|
@ -4197,7 +4197,7 @@ celerity_register_resource_map(array(
|
||||||
40 => 'phabricator-property-list-view-css',
|
40 => 'phabricator-property-list-view-css',
|
||||||
41 => 'phabricator-tag-view-css',
|
41 => 'phabricator-tag-view-css',
|
||||||
),
|
),
|
||||||
'uri' => '/res/pkg/680ace9b/core.pkg.css',
|
'uri' => '/res/pkg/6e2d527c/core.pkg.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
),
|
),
|
||||||
'75ccea43' =>
|
'75ccea43' =>
|
||||||
|
@ -4391,16 +4391,16 @@ celerity_register_resource_map(array(
|
||||||
'reverse' =>
|
'reverse' =>
|
||||||
array(
|
array(
|
||||||
'aphront-attached-file-view-css' => 'adc3c36d',
|
'aphront-attached-file-view-css' => 'adc3c36d',
|
||||||
'aphront-dialog-view-css' => '680ace9b',
|
'aphront-dialog-view-css' => '6e2d527c',
|
||||||
'aphront-error-view-css' => '680ace9b',
|
'aphront-error-view-css' => '6e2d527c',
|
||||||
'aphront-form-view-css' => '680ace9b',
|
'aphront-form-view-css' => '6e2d527c',
|
||||||
'aphront-list-filter-view-css' => '680ace9b',
|
'aphront-list-filter-view-css' => '6e2d527c',
|
||||||
'aphront-pager-view-css' => '680ace9b',
|
'aphront-pager-view-css' => '6e2d527c',
|
||||||
'aphront-panel-view-css' => '680ace9b',
|
'aphront-panel-view-css' => '6e2d527c',
|
||||||
'aphront-table-view-css' => '680ace9b',
|
'aphront-table-view-css' => '6e2d527c',
|
||||||
'aphront-tokenizer-control-css' => '680ace9b',
|
'aphront-tokenizer-control-css' => '6e2d527c',
|
||||||
'aphront-tooltip-css' => '680ace9b',
|
'aphront-tooltip-css' => '6e2d527c',
|
||||||
'aphront-typeahead-control-css' => '680ace9b',
|
'aphront-typeahead-control-css' => '6e2d527c',
|
||||||
'differential-changeset-view-css' => 'dd27a69b',
|
'differential-changeset-view-css' => 'dd27a69b',
|
||||||
'differential-core-view-css' => 'dd27a69b',
|
'differential-core-view-css' => 'dd27a69b',
|
||||||
'differential-inline-comment-editor' => '4ad86dee',
|
'differential-inline-comment-editor' => '4ad86dee',
|
||||||
|
@ -4414,7 +4414,7 @@ celerity_register_resource_map(array(
|
||||||
'differential-table-of-contents-css' => 'dd27a69b',
|
'differential-table-of-contents-css' => 'dd27a69b',
|
||||||
'diffusion-commit-view-css' => 'c8ce2d88',
|
'diffusion-commit-view-css' => 'c8ce2d88',
|
||||||
'diffusion-icons-css' => 'c8ce2d88',
|
'diffusion-icons-css' => 'c8ce2d88',
|
||||||
'global-drag-and-drop-css' => '680ace9b',
|
'global-drag-and-drop-css' => '6e2d527c',
|
||||||
'inline-comment-summary-css' => 'dd27a69b',
|
'inline-comment-summary-css' => 'dd27a69b',
|
||||||
'javelin-aphlict' => '75ccea43',
|
'javelin-aphlict' => '75ccea43',
|
||||||
'javelin-behavior' => 'a9f14d76',
|
'javelin-behavior' => 'a9f14d76',
|
||||||
|
@ -4488,55 +4488,55 @@ celerity_register_resource_map(array(
|
||||||
'javelin-util' => 'a9f14d76',
|
'javelin-util' => 'a9f14d76',
|
||||||
'javelin-vector' => 'a9f14d76',
|
'javelin-vector' => 'a9f14d76',
|
||||||
'javelin-workflow' => 'a9f14d76',
|
'javelin-workflow' => 'a9f14d76',
|
||||||
'lightbox-attachment-css' => '680ace9b',
|
'lightbox-attachment-css' => '6e2d527c',
|
||||||
'maniphest-task-summary-css' => 'adc3c36d',
|
'maniphest-task-summary-css' => 'adc3c36d',
|
||||||
'maniphest-transaction-detail-css' => 'adc3c36d',
|
'maniphest-transaction-detail-css' => 'adc3c36d',
|
||||||
'phabricator-action-list-view-css' => '680ace9b',
|
'phabricator-action-list-view-css' => '6e2d527c',
|
||||||
'phabricator-application-launch-view-css' => '680ace9b',
|
'phabricator-application-launch-view-css' => '6e2d527c',
|
||||||
'phabricator-busy' => '75ccea43',
|
'phabricator-busy' => '75ccea43',
|
||||||
'phabricator-content-source-view-css' => 'dd27a69b',
|
'phabricator-content-source-view-css' => 'dd27a69b',
|
||||||
'phabricator-core-css' => '680ace9b',
|
'phabricator-core-css' => '6e2d527c',
|
||||||
'phabricator-crumbs-view-css' => '680ace9b',
|
'phabricator-crumbs-view-css' => '6e2d527c',
|
||||||
'phabricator-drag-and-drop-file-upload' => '4ad86dee',
|
'phabricator-drag-and-drop-file-upload' => '4ad86dee',
|
||||||
'phabricator-dropdown-menu' => '75ccea43',
|
'phabricator-dropdown-menu' => '75ccea43',
|
||||||
'phabricator-file-upload' => '75ccea43',
|
'phabricator-file-upload' => '75ccea43',
|
||||||
'phabricator-filetree-view-css' => '680ace9b',
|
'phabricator-filetree-view-css' => '6e2d527c',
|
||||||
'phabricator-flag-css' => '680ace9b',
|
'phabricator-flag-css' => '6e2d527c',
|
||||||
'phabricator-form-view-css' => '680ace9b',
|
'phabricator-form-view-css' => '6e2d527c',
|
||||||
'phabricator-header-view-css' => '680ace9b',
|
'phabricator-header-view-css' => '6e2d527c',
|
||||||
'phabricator-hovercard' => '75ccea43',
|
'phabricator-hovercard' => '75ccea43',
|
||||||
'phabricator-jump-nav' => '680ace9b',
|
'phabricator-jump-nav' => '6e2d527c',
|
||||||
'phabricator-keyboard-shortcut' => '75ccea43',
|
'phabricator-keyboard-shortcut' => '75ccea43',
|
||||||
'phabricator-keyboard-shortcut-manager' => '75ccea43',
|
'phabricator-keyboard-shortcut-manager' => '75ccea43',
|
||||||
'phabricator-main-menu-view' => '680ace9b',
|
'phabricator-main-menu-view' => '6e2d527c',
|
||||||
'phabricator-menu-item' => '75ccea43',
|
'phabricator-menu-item' => '75ccea43',
|
||||||
'phabricator-nav-view-css' => '680ace9b',
|
'phabricator-nav-view-css' => '6e2d527c',
|
||||||
'phabricator-notification' => '75ccea43',
|
'phabricator-notification' => '75ccea43',
|
||||||
'phabricator-notification-css' => '680ace9b',
|
'phabricator-notification-css' => '6e2d527c',
|
||||||
'phabricator-notification-menu-css' => '680ace9b',
|
'phabricator-notification-menu-css' => '6e2d527c',
|
||||||
'phabricator-object-item-list-view-css' => '680ace9b',
|
'phabricator-object-item-list-view-css' => '6e2d527c',
|
||||||
'phabricator-object-selector-css' => 'dd27a69b',
|
'phabricator-object-selector-css' => 'dd27a69b',
|
||||||
'phabricator-phtize' => '75ccea43',
|
'phabricator-phtize' => '75ccea43',
|
||||||
'phabricator-prefab' => '75ccea43',
|
'phabricator-prefab' => '75ccea43',
|
||||||
'phabricator-project-tag-css' => 'adc3c36d',
|
'phabricator-project-tag-css' => 'adc3c36d',
|
||||||
'phabricator-property-list-view-css' => '680ace9b',
|
'phabricator-property-list-view-css' => '6e2d527c',
|
||||||
'phabricator-remarkup-css' => '680ace9b',
|
'phabricator-remarkup-css' => '6e2d527c',
|
||||||
'phabricator-shaped-request' => '4ad86dee',
|
'phabricator-shaped-request' => '4ad86dee',
|
||||||
'phabricator-side-menu-view-css' => '680ace9b',
|
'phabricator-side-menu-view-css' => '6e2d527c',
|
||||||
'phabricator-standard-page-view' => '680ace9b',
|
'phabricator-standard-page-view' => '6e2d527c',
|
||||||
'phabricator-tag-view-css' => '680ace9b',
|
'phabricator-tag-view-css' => '6e2d527c',
|
||||||
'phabricator-textareautils' => '75ccea43',
|
'phabricator-textareautils' => '75ccea43',
|
||||||
'phabricator-tooltip' => '75ccea43',
|
'phabricator-tooltip' => '75ccea43',
|
||||||
'phabricator-transaction-view-css' => '680ace9b',
|
'phabricator-transaction-view-css' => '6e2d527c',
|
||||||
'phabricator-zindex-css' => '680ace9b',
|
'phabricator-zindex-css' => '6e2d527c',
|
||||||
'phui-button-css' => '680ace9b',
|
'phui-button-css' => '6e2d527c',
|
||||||
'phui-form-css' => '680ace9b',
|
'phui-form-css' => '6e2d527c',
|
||||||
'phui-icon-view-css' => '680ace9b',
|
'phui-icon-view-css' => '6e2d527c',
|
||||||
'phui-spacing-css' => '680ace9b',
|
'phui-spacing-css' => '6e2d527c',
|
||||||
'sprite-apps-large-css' => '680ace9b',
|
'sprite-apps-large-css' => '6e2d527c',
|
||||||
'sprite-gradient-css' => '680ace9b',
|
'sprite-gradient-css' => '6e2d527c',
|
||||||
'sprite-icons-css' => '680ace9b',
|
'sprite-icons-css' => '6e2d527c',
|
||||||
'sprite-menu-css' => '680ace9b',
|
'sprite-menu-css' => '6e2d527c',
|
||||||
'syntax-highlighting-css' => '680ace9b',
|
'syntax-highlighting-css' => '6e2d527c',
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|
|
@ -484,7 +484,6 @@ phutil_register_library_map(array(
|
||||||
'DiffusionPathQuery' => 'applications/diffusion/query/DiffusionPathQuery.php',
|
'DiffusionPathQuery' => 'applications/diffusion/query/DiffusionPathQuery.php',
|
||||||
'DiffusionPathQueryTestCase' => 'applications/diffusion/query/pathid/__tests__/DiffusionPathQueryTestCase.php',
|
'DiffusionPathQueryTestCase' => 'applications/diffusion/query/pathid/__tests__/DiffusionPathQueryTestCase.php',
|
||||||
'DiffusionPathValidateController' => 'applications/diffusion/controller/DiffusionPathValidateController.php',
|
'DiffusionPathValidateController' => 'applications/diffusion/controller/DiffusionPathValidateController.php',
|
||||||
'DiffusionPeopleMenuEventListener' => 'applications/diffusion/events/DiffusionPeopleMenuEventListener.php',
|
|
||||||
'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php',
|
'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php',
|
||||||
'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php',
|
'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php',
|
||||||
'DiffusionRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRemarkupRule.php',
|
'DiffusionRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRemarkupRule.php',
|
||||||
|
@ -2412,7 +2411,6 @@ phutil_register_library_map(array(
|
||||||
'DiffusionPathCompleteController' => 'DiffusionController',
|
'DiffusionPathCompleteController' => 'DiffusionController',
|
||||||
'DiffusionPathQueryTestCase' => 'PhabricatorTestCase',
|
'DiffusionPathQueryTestCase' => 'PhabricatorTestCase',
|
||||||
'DiffusionPathValidateController' => 'DiffusionController',
|
'DiffusionPathValidateController' => 'DiffusionController',
|
||||||
'DiffusionPeopleMenuEventListener' => 'PhutilEventListener',
|
|
||||||
'DiffusionQuery' => 'PhabricatorQuery',
|
'DiffusionQuery' => 'PhabricatorQuery',
|
||||||
'DiffusionRawDiffQuery' => 'DiffusionQuery',
|
'DiffusionRawDiffQuery' => 'DiffusionQuery',
|
||||||
'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject',
|
'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject',
|
||||||
|
|
|
@ -3,34 +3,34 @@
|
||||||
final class AuditPeopleMenuEventListener extends PhutilEventListener {
|
final class AuditPeopleMenuEventListener extends PhutilEventListener {
|
||||||
|
|
||||||
public function register() {
|
public function register() {
|
||||||
$this->listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU);
|
$this->listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handleEvent(PhutilEvent $event) {
|
public function handleEvent(PhutilEvent $event) {
|
||||||
switch ($event->getType()) {
|
switch ($event->getType()) {
|
||||||
case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU:
|
case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS:
|
||||||
$this->handleMenuEvent($event);
|
$this->handleActionsEvent($event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleMenuEvent($event) {
|
private function handleActionsEvent($event) {
|
||||||
$viewer = $event->getUser();
|
$person = $event->getValue('object');
|
||||||
$menu = $event->getValue('menu');
|
if (!($person instanceof PhabricatorUser)) {
|
||||||
$person = $event->getValue('person');
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$actions = $event->getValue('actions');
|
||||||
|
|
||||||
$username = phutil_escape_uri($person->getUsername());
|
$username = phutil_escape_uri($person->getUsername());
|
||||||
|
|
||||||
$href = '/audit/view/author/'.$username.'/';
|
$href = '/audit/view/author/'.$username.'/';
|
||||||
$name = pht('Commits');
|
|
||||||
|
|
||||||
$menu->addMenuItemToLabel('activity',
|
$actions[] = id(new PhabricatorActionView())
|
||||||
id(new PHUIListItemView())
|
->setIcon('transcript')
|
||||||
->setIsExternal(true)
|
->setName(pht('View Commits'))
|
||||||
->setName($name)
|
->setHref($href);
|
||||||
->setHref($href)
|
|
||||||
->setKey($name));
|
|
||||||
|
|
||||||
$event->setValue('menu', $menu);
|
$event->setValue('actions', $actions);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,35 +3,34 @@
|
||||||
final class ConpherencePeopleMenuEventListener extends PhutilEventListener {
|
final class ConpherencePeopleMenuEventListener extends PhutilEventListener {
|
||||||
|
|
||||||
public function register() {
|
public function register() {
|
||||||
$this->listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU);
|
$this->listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handleEvent(PhutilEvent $event) {
|
public function handleEvent(PhutilEvent $event) {
|
||||||
switch ($event->getType()) {
|
switch ($event->getType()) {
|
||||||
case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU:
|
case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS:
|
||||||
$this->handleMenuEvent($event);
|
$this->handleActionsEvent($event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleMenuEvent($event) {
|
private function handleActionsEvent($event) {
|
||||||
$viewer = $event->getUser();
|
$person = $event->getValue('object');
|
||||||
$menu = $event->getValue('menu');
|
if (!($person instanceof PhabricatorUser)) {
|
||||||
$person = $event->getValue('person');
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$conpherence_uri =
|
$href = '/conpherence/new/?participant='.$person->getPHID();
|
||||||
new PhutilURI('/conpherence/new/?participant='.$person->getPHID());
|
|
||||||
$name = pht('Message');
|
|
||||||
|
|
||||||
$menu->addMenuItemBefore('activity',
|
$actions = $event->getValue('actions');
|
||||||
id(new PHUIListItemView())
|
|
||||||
->setIsExternal(true)
|
$actions[] = id(new PhabricatorActionView())
|
||||||
->setName($name)
|
->setIcon('message')
|
||||||
->setHref($conpherence_uri)
|
->setName(pht('Send Message'))
|
||||||
->setWorkflow(true)
|
->setWorkflow(true)
|
||||||
->setKey($name));
|
->setHref($href);
|
||||||
|
|
||||||
$event->setValue('menu', $menu);
|
$event->setValue('actions', $actions);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,34 +3,35 @@
|
||||||
final class DifferentialPeopleMenuEventListener extends PhutilEventListener {
|
final class DifferentialPeopleMenuEventListener extends PhutilEventListener {
|
||||||
|
|
||||||
public function register() {
|
public function register() {
|
||||||
$this->listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU);
|
$this->listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handleEvent(PhutilEvent $event) {
|
public function handleEvent(PhutilEvent $event) {
|
||||||
switch ($event->getType()) {
|
switch ($event->getType()) {
|
||||||
case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU:
|
case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS:
|
||||||
$this->handleMenuEvent($event);
|
$this->handleActionsEvent($event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleMenuEvent($event) {
|
private function handleActionsEvent($event) {
|
||||||
$viewer = $event->getUser();
|
$person = $event->getValue('object');
|
||||||
$menu = $event->getValue('menu');
|
if (!($person instanceof PhabricatorUser)) {
|
||||||
$person = $event->getValue('person');
|
return;
|
||||||
$username = phutil_escape_uri($person->getUserName());
|
}
|
||||||
|
|
||||||
$href = '/differential/filter/revisions/'.$username.'/';
|
$href = '/differential/?authorPHIDs[]='.$person->getPHID();
|
||||||
$name = pht('Revisions');
|
|
||||||
|
|
||||||
$menu->addMenuItemToLabel('activity',
|
$actions = $event->getValue('actions');
|
||||||
id(new PHUIListItemView())
|
|
||||||
->setIsExternal(true)
|
|
||||||
->setHref($href)
|
|
||||||
->setName($name)
|
|
||||||
->setKey($name));
|
|
||||||
|
|
||||||
$event->setValue('menu', $menu);
|
$actions[] = id(new PhabricatorActionView())
|
||||||
|
->setUser($event->getUser())
|
||||||
|
->setRenderAsForm(true)
|
||||||
|
->setIcon('transcript')
|
||||||
|
->setName(pht('View Revisions'))
|
||||||
|
->setHref($href);
|
||||||
|
|
||||||
|
$event->setValue('actions', $actions);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ final class PhabricatorApplicationDiffusion extends PhabricatorApplication {
|
||||||
|
|
||||||
public function getEventListeners() {
|
public function getEventListeners() {
|
||||||
return array(
|
return array(
|
||||||
new DiffusionPeopleMenuEventListener(),
|
|
||||||
new DiffusionHovercardEventListener(),
|
new DiffusionHovercardEventListener(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
final class DiffusionPeopleMenuEventListener extends PhutilEventListener {
|
|
||||||
|
|
||||||
public function register() {
|
|
||||||
$this->listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handleEvent(PhutilEvent $event) {
|
|
||||||
switch ($event->getType()) {
|
|
||||||
case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU:
|
|
||||||
$this->handleMenuEvent($event);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function handleMenuEvent($event) {
|
|
||||||
$viewer = $event->getUser();
|
|
||||||
$menu = $event->getValue('menu');
|
|
||||||
$person_phid = $event->getValue('person')->getPHID();
|
|
||||||
|
|
||||||
$href = '/diffusion/lint/?owner[0]='.$person_phid;
|
|
||||||
$name = pht('Lint Messages');
|
|
||||||
|
|
||||||
$menu->addMenuItemToLabel('activity',
|
|
||||||
id(new PHUIListItemView())
|
|
||||||
->setIsExternal(true)
|
|
||||||
->setHref($href)
|
|
||||||
->setName($name)
|
|
||||||
->setKey($name));
|
|
||||||
|
|
||||||
$event->setValue('menu', $menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -24,6 +24,13 @@ final class PhabricatorFlagsUIEventListener extends PhutilEventListener {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (($object instanceof PhabricatorUser)) {
|
||||||
|
// Although there's no real reason not to let you flag users, it also
|
||||||
|
// makes less conceptual sense than flaging other types of objects. For
|
||||||
|
// now, don't allow it.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$flag = PhabricatorFlagQuery::loadUserFlag($user, $object->getPHID());
|
$flag = PhabricatorFlagQuery::loadUserFlag($user, $object->getPHID());
|
||||||
|
|
||||||
if ($flag) {
|
if ($flag) {
|
||||||
|
|
|
@ -3,33 +3,33 @@
|
||||||
final class ManiphestPeopleMenuEventListener extends PhutilEventListener {
|
final class ManiphestPeopleMenuEventListener extends PhutilEventListener {
|
||||||
|
|
||||||
public function register() {
|
public function register() {
|
||||||
$this->listen(PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU);
|
$this->listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handleEvent(PhutilEvent $event) {
|
public function handleEvent(PhutilEvent $event) {
|
||||||
switch ($event->getType()) {
|
switch ($event->getType()) {
|
||||||
case PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU:
|
case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS:
|
||||||
$this->handleMenuEvent($event);
|
$this->handleActionsEvent($event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleMenuEvent($event) {
|
private function handleActionsEvent($event) {
|
||||||
$viewer = $event->getUser();
|
$person = $event->getValue('object');
|
||||||
$menu = $event->getValue('menu');
|
if (!($person instanceof PhabricatorUser)) {
|
||||||
$person_phid = $event->getValue('person')->getPHID();
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$href = '/maniphest/view/action/?users='.$person_phid;
|
$href = '/maniphest/view/action/?users='.$person->getPHID();
|
||||||
$name = pht('Tasks');
|
|
||||||
|
|
||||||
$menu->addMenuItemToLabel('activity',
|
$actions = $event->getValue('actions');
|
||||||
id(new PHUIListItemView())
|
|
||||||
->setIsExternal(true)
|
|
||||||
->setHref($href)
|
|
||||||
->setName($name)
|
|
||||||
->setKey($name));
|
|
||||||
|
|
||||||
$event->setValue('menu', $menu);
|
$actions[] = id(new PhabricatorActionView())
|
||||||
|
->setIcon('transcript')
|
||||||
|
->setName(pht('View Tasks'))
|
||||||
|
->setHref($href);
|
||||||
|
|
||||||
|
$event->setValue('actions', $actions);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ final class PhabricatorApplicationPeople extends PhabricatorApplication {
|
||||||
'picture/(?P<id>[1-9]\d*)/' =>
|
'picture/(?P<id>[1-9]\d*)/' =>
|
||||||
'PhabricatorPeopleProfilePictureController',
|
'PhabricatorPeopleProfilePictureController',
|
||||||
),
|
),
|
||||||
'/p/(?P<username>[\w._-]+)/(?:(?P<page>\w+)/)?'
|
'/p/(?P<username>[\w._-]+)/'
|
||||||
=> 'PhabricatorPeopleProfileController',
|
=> 'PhabricatorPeopleProfileController',
|
||||||
'/emailverify/(?P<code>[^/]+)/' =>
|
'/emailverify/(?P<code>[^/]+)/' =>
|
||||||
'PhabricatorEmailVerificationController',
|
'PhabricatorEmailVerificationController',
|
||||||
|
|
|
@ -4,7 +4,6 @@ final class PhabricatorPeopleProfileController
|
||||||
extends PhabricatorPeopleController {
|
extends PhabricatorPeopleController {
|
||||||
|
|
||||||
private $username;
|
private $username;
|
||||||
private $page;
|
|
||||||
|
|
||||||
public function shouldRequireAdmin() {
|
public function shouldRequireAdmin() {
|
||||||
return false;
|
return false;
|
||||||
|
@ -12,17 +11,6 @@ final class PhabricatorPeopleProfileController
|
||||||
|
|
||||||
public function willProcessRequest(array $data) {
|
public function willProcessRequest(array $data) {
|
||||||
$this->username = idx($data, 'username');
|
$this->username = idx($data, 'username');
|
||||||
$this->page = idx($data, 'page');
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getMainFilters($username) {
|
|
||||||
return array(
|
|
||||||
array(
|
|
||||||
'key' => 'feed',
|
|
||||||
'name' => pht('Feed'),
|
|
||||||
'href' => '/p/'.$username.'/feed/'
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function processRequest() {
|
public function processRequest() {
|
||||||
|
@ -41,26 +29,6 @@ final class PhabricatorPeopleProfileController
|
||||||
$profile = $user->loadUserProfile();
|
$profile = $user->loadUserProfile();
|
||||||
$username = phutil_escape_uri($user->getUserName());
|
$username = phutil_escape_uri($user->getUserName());
|
||||||
|
|
||||||
$menu = new PHUIListView();
|
|
||||||
foreach ($this->getMainFilters($username) as $filter) {
|
|
||||||
$menu->newLink($filter['name'], $filter['href'], $filter['key']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$menu->newLabel(pht('Activity'), 'activity');
|
|
||||||
// NOTE: applications install the various links through PhabricatorEvent
|
|
||||||
// listeners
|
|
||||||
|
|
||||||
$event = new PhabricatorEvent(
|
|
||||||
PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU,
|
|
||||||
array(
|
|
||||||
'menu' => $menu,
|
|
||||||
'person' => $user,
|
|
||||||
));
|
|
||||||
$event->setUser($viewer);
|
|
||||||
PhutilEventEngine::dispatchEvent($event);
|
|
||||||
$nav = AphrontSideNavFilterView::newFromMenu($event->getValue('menu'));
|
|
||||||
$nav->selectFilter($this->page, 'feed');
|
|
||||||
|
|
||||||
$picture = $user->loadProfileImageURI();
|
$picture = $user->loadProfileImageURI();
|
||||||
|
|
||||||
$header = id(new PhabricatorHeaderView())
|
$header = id(new PhabricatorHeaderView())
|
||||||
|
@ -104,6 +72,7 @@ final class PhabricatorPeopleProfileController
|
||||||
}
|
}
|
||||||
|
|
||||||
$actions = id(new PhabricatorActionListView())
|
$actions = id(new PhabricatorActionListView())
|
||||||
|
->setObject($user)
|
||||||
->setUser($viewer);
|
->setUser($viewer);
|
||||||
|
|
||||||
$can_edit = ($user->getPHID() == $viewer->getPHID());
|
$can_edit = ($user->getPHID() == $viewer->getPHID());
|
||||||
|
@ -134,13 +103,20 @@ final class PhabricatorPeopleProfileController
|
||||||
|
|
||||||
$properties = $this->buildPropertyView($user);
|
$properties = $this->buildPropertyView($user);
|
||||||
|
|
||||||
$nav->appendChild($header);
|
$crumbs = $this->buildApplicationCrumbs();
|
||||||
$nav->appendChild($actions);
|
$crumbs->addCrumb(
|
||||||
$nav->appendChild($properties);
|
id(new PhabricatorCrumbView())
|
||||||
$nav->appendChild($this->renderUserFeed($user));
|
->setName($user->getUsername()));
|
||||||
|
$feed = $this->renderUserFeed($user);
|
||||||
|
|
||||||
return $this->buildApplicationPage(
|
return $this->buildApplicationPage(
|
||||||
$nav,
|
array(
|
||||||
|
$crumbs,
|
||||||
|
$header,
|
||||||
|
$actions,
|
||||||
|
$properties,
|
||||||
|
$feed,
|
||||||
|
),
|
||||||
array(
|
array(
|
||||||
'title' => $user->getUsername(),
|
'title' => $user->getUsername(),
|
||||||
'device' => true,
|
'device' => true,
|
||||||
|
|
|
@ -36,6 +36,9 @@ final class PhabricatorHeaderView extends AphrontView {
|
||||||
public function render() {
|
public function render() {
|
||||||
require_celerity_resource('phabricator-header-view-css');
|
require_celerity_resource('phabricator-header-view-css');
|
||||||
|
|
||||||
|
$classes = array();
|
||||||
|
$classes[] = 'phabricator-header-shell';
|
||||||
|
|
||||||
$image = null;
|
$image = null;
|
||||||
if ($this->image) {
|
if ($this->image) {
|
||||||
$image = phutil_tag(
|
$image = phutil_tag(
|
||||||
|
@ -45,6 +48,7 @@ final class PhabricatorHeaderView extends AphrontView {
|
||||||
'style' => 'background-image: url('.$this->image.')',
|
'style' => 'background-image: url('.$this->image.')',
|
||||||
),
|
),
|
||||||
'');
|
'');
|
||||||
|
$classes[] = 'phabricator-header-has-image';
|
||||||
}
|
}
|
||||||
|
|
||||||
$header = array();
|
$header = array();
|
||||||
|
@ -84,7 +88,7 @@ final class PhabricatorHeaderView extends AphrontView {
|
||||||
return phutil_tag(
|
return phutil_tag(
|
||||||
'div',
|
'div',
|
||||||
array(
|
array(
|
||||||
'class' => 'phabricator-header-shell',
|
'class' => implode(' ', $classes),
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
$image,
|
$image,
|
||||||
|
|
|
@ -21,7 +21,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.device-desktop .phabricator-header-shell + .phabricator-action-list-view {
|
.device-desktop .phabricator-header-shell + .phabricator-action-list-view {
|
||||||
margin-top: -28px;
|
margin-top: -33px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-desktop .phabricator-header-shell.phabricator-header-has-image +
|
||||||
|
.phabricator-action-list-view {
|
||||||
|
margin-top: -53px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.device .phabricator-header-shell + .phabricator-action-list-view {
|
.device .phabricator-header-shell + .phabricator-action-list-view {
|
||||||
|
|
Loading…
Add table
Reference in a new issue