Skip to content

Commit 9838251

Browse files
committed
Make PhabricatorActionListView logged-out user savvy
Summary: Fixes T2691. Now, all PhabricatorActionListViews in the codebase setObjectHref to $request->getRequestURI. This value is passed over to PhabricatorActionItems right before they are rendered. If a PhabricatorActionItem is a workflow and there is no user OR the user is logged out, we used this objectURI to construct a log in URI. Potentially added some undesirable behavior to aggressively setUser (and later setObjectURI) from within the List on Actions... This should be okay-ish unless there was a vision of actions having different user objects associated with them. I think this is a safe assumption. Test Plan: played around with a mock all logged out (Ref T2652) and it worked! Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Maniphest Tasks: T2691 Differential Revision: https://secure.phabricator.com/D6416
1 parent b6df427 commit 9838251

File tree

30 files changed

+90
-37
lines changed

30 files changed

+90
-37
lines changed

src/applications/daemon/controller/PhabricatorWorkerTaskDetailController.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,14 @@ public function processRequest() {
7373
}
7474

7575
private function buildActionListView(PhabricatorWorkerTask $task) {
76-
$user = $this->getRequest()->getUser();
77-
78-
$view = new PhabricatorActionListView();
79-
$view->setUser($user);
80-
76+
$request = $this->getRequest();
77+
$user = $request->getUser();
8178
$id = $task->getID();
8279

80+
$view = id(new PhabricatorActionListView())
81+
->setUser($user)
82+
->setObjectURI($request->getRequestURI());
83+
8384
if ($task->isArchived()) {
8485
$result_success = PhabricatorWorkerArchiveTask::RESULT_SUCCESS;
8586
$can_retry = ($task->getResult() != $result_success);

src/applications/differential/events/DifferentialPeopleMenuEventListener.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ private function handleActionsEvent($event) {
2525
$actions = $event->getValue('actions');
2626

2727
$actions[] = id(new PhabricatorActionView())
28-
->setUser($event->getUser())
2928
->setRenderAsForm(true)
3029
->setIcon('differential-dark')
3130
->setIconSheet(PHUIIconView::SPRITE_APPS)

src/applications/differential/view/DifferentialRevisionDetailView.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public function render() {
4545

4646
$actions = id(new PhabricatorActionListView())
4747
->setUser($user)
48-
->setObject($revision);
48+
->setObject($revision)
49+
->setObjectURI($this->getRequest()->getRequestURI());
4950
foreach ($this->getActions() as $action) {
5051
$obj = id(new PhabricatorActionView())
5152
->setIcon(idx($action, 'icon', 'edit'))

src/applications/diffusion/controller/DiffusionBrowseFileController.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ private function renderViewSelectPanel($selected) {
378378

379379
return id(new PhabricatorActionListView())
380380
->setUser($user)
381+
->setObjectURI($this->getRequest()->getRequestURI())
381382
->addAction($blame_button)
382383
->addAction($highlight_button)
383384
->addAction($lint_button)
@@ -821,6 +822,7 @@ private function buildImageCorpus($file_uri) {
821822

822823
$actions = id(new PhabricatorActionListView())
823824
->setUser($this->getRequest()->getUser())
825+
->setObjectURI($this->getRequest()->getRequestURI())
824826
->addAction($this->createEditAction());
825827

826828
return array($actions, $properties);
@@ -837,6 +839,7 @@ private function buildBinaryCorpus($file_uri, $data) {
837839

838840
$actions = id(new PhabricatorActionListView())
839841
->setUser($this->getRequest()->getUser())
842+
->setObjectURI($this->getRequest()->getRequestURI())
840843
->addAction($this->createEditAction())
841844
->addAction(
842845
id(new PhabricatorActionView())

src/applications/diffusion/controller/DiffusionCommitController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,8 @@ private function renderHeadsupActionList(
860860

861861
$actions = id(new PhabricatorActionListView())
862862
->setUser($user)
863-
->setObject($commit);
863+
->setObject($commit)
864+
->setObjectURI($request->getRequestURI());
864865

865866
// TODO -- integrate permissions into whether or not this action is shown
866867
$uri = '/diffusion/'.$repository->getCallSign().'/commit/'.

src/applications/diffusion/controller/DiffusionRepositoryEditController.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ private function buildBasicActions(PhabricatorRepository $repository) {
7070
$user = $this->getRequest()->getUser();
7171

7272
$view = id(new PhabricatorActionListView())
73+
->setObjectURI($this->getRequest()->getRequestURI())
7374
->setUser($user);
7475

7576
$can_edit = PhabricatorPolicyFilter::hasCapability(
@@ -122,6 +123,7 @@ private function buildEncodingActions(PhabricatorRepository $repository) {
122123
$user = $this->getRequest()->getUser();
123124

124125
$view = id(new PhabricatorActionListView())
126+
->setObjectURI($this->getRequest()->getRequestURI())
125127
->setUser($user);
126128

127129
$can_edit = PhabricatorPolicyFilter::hasCapability(

src/applications/drydock/controller/DrydockLeaseViewController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public function processRequest() {
6363
private function buildActionListView(DrydockLease $lease) {
6464
$view = id(new PhabricatorActionListView())
6565
->setUser($this->getRequest()->getUser())
66+
->setObjectURI($this->getRequest()->getRequestURI())
6667
->setObject($lease);
6768

6869
$id = $lease->getID();

src/applications/drydock/controller/DrydockResourceViewController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public function processRequest() {
7676
private function buildActionListView(DrydockResource $resource) {
7777
$view = id(new PhabricatorActionListView())
7878
->setUser($this->getRequest()->getUser())
79+
->setObjectURI($this->getRequest()->getRequestURI())
7980
->setObject($resource);
8081

8182
$can_close = ($resource->getStatus() == DrydockResourceStatus::STATUS_OPEN);

src/applications/files/controller/PhabricatorFileInfoController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ private function buildActionView(PhabricatorFile $file) {
6565

6666
$view = id(new PhabricatorActionListView())
6767
->setUser($user)
68+
->setObjectURI($this->getRequest()->getRequestURI())
6869
->setObject($file);
6970

7071
if ($file->isViewableInBrowser()) {

src/applications/legalpad/controller/LegalpadDocumentViewController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ private function buildActionView(LegalpadDocument $document) {
123123

124124
$actions = id(new PhabricatorActionListView())
125125
->setUser($user)
126+
->setObjectURI($this->getRequest()->getRequestURI())
126127
->setObject($document);
127128

128129
$can_edit = PhabricatorPolicyFilter::hasCapability(

src/applications/macro/controller/PhabricatorMacroViewController.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,13 @@ public function processRequest() {
106106
}
107107

108108
private function buildActionView(PhabricatorFileImageMacro $macro) {
109-
$view = new PhabricatorActionListView();
110-
$view->setUser($this->getRequest()->getUser());
111-
$view->setObject($macro);
112-
$view->addAction(
113-
id(new PhabricatorActionView())
109+
$request = $this->getRequest();
110+
$view = id(new PhabricatorActionListView())
111+
->setUser($request->getUser())
112+
->setObject($macro)
113+
->setObjectURI($request->getRequestURI())
114+
->addAction(
115+
id(new PhabricatorActionView())
114116
->setName(pht('Edit Macro'))
115117
->setHref($this->getApplicationURI('/edit/'.$macro->getID().'/'))
116118
->setIcon('edit'));

src/applications/maniphest/controller/ManiphestTaskDetailController.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -381,11 +381,11 @@ private function buildActionView(ManiphestTask $task) {
381381
$id = $task->getID();
382382
$phid = $task->getPHID();
383383

384-
$view = new PhabricatorActionListView();
385-
$view->setUser($viewer);
386-
$view->setObject($task);
387-
388-
$view->addAction(
384+
$view = id(new PhabricatorActionListView())
385+
->setUser($viewer)
386+
->setObject($task)
387+
->setObjectURI($this->getRequest()->getRequestURI())
388+
->addAction(
389389
id(new PhabricatorActionView())
390390
->setName(pht('Edit Task'))
391391
->setIcon('edit')

src/applications/meta/controller/PhabricatorApplicationDetailViewController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ private function buildActionView(
7979
PhabricatorUser $user, PhabricatorApplication $selected) {
8080

8181
$view = id(new PhabricatorActionListView())
82-
->setUser($user);
82+
->setUser($user)
83+
->setObjectURI($this->getRequest()->getRequestURI());
8384

8485
if ($selected->canUninstall()) {
8586
if ($selected->isInstalled()) {

src/applications/paste/controller/PhabricatorPasteViewController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ private function buildActionView(
9494
return id(new PhabricatorActionListView())
9595
->setUser($user)
9696
->setObject($paste)
97+
->setObjectURI($this->getRequest()->getRequestURI())
9798
->addAction(
9899
id(new PhabricatorActionView())
99100
->setName(pht('Fork This Paste'))

src/applications/people/controller/PhabricatorPeopleProfileController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public function processRequest() {
3838

3939
$actions = id(new PhabricatorActionListView())
4040
->setObject($user)
41+
->setObjectURI($this->getRequest()->getRequestURI())
4142
->setUser($viewer);
4243

4344
$can_edit = ($user->getPHID() == $viewer->getPHID());

src/applications/phame/controller/blog/PhameBlogViewController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ private function renderActions(PhameBlog $blog, PhabricatorUser $user) {
144144

145145
$actions = id(new PhabricatorActionListView())
146146
->setObject($blog)
147+
->setObjectURI($this->getRequest()->getRequestURI())
147148
->setUser($user);
148149

149150
$can_edit = PhabricatorPolicyFilter::hasCapability(

src/applications/phame/controller/post/PhamePostViewController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ private function renderActions(
8787

8888
$actions = id(new PhabricatorActionListView())
8989
->setObject($post)
90+
->setObjectURI($this->getRequest()->getRequestURI())
9091
->setUser($user);
9192

9293
$can_edit = PhabricatorPolicyFilter::hasCapability(

src/applications/phlux/controller/PhluxViewController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public function processRequest() {
3535

3636
$actions = id(new PhabricatorActionListView())
3737
->setUser($user)
38+
->setObjectURI($request->getRequestURI())
3839
->setObject($var);
3940

4041
$can_edit = PhabricatorPolicyFilter::hasCapability(

src/applications/pholio/controller/PholioMockViewController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ private function buildActionView(PholioMock $mock) {
109109

110110
$actions = id(new PhabricatorActionListView())
111111
->setUser($user)
112+
->setObjectURI($this->getRequest()->getRequestURI())
112113
->setObject($mock);
113114

114115
$can_edit = PhabricatorPolicyFilter::hasCapability(

src/applications/phortune/controller/PhortuneAccountViewController.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public function processRequest() {
3434

3535
$actions = id(new PhabricatorActionListView())
3636
->setUser($user)
37+
->setObjectURI($request->getRequestURI())
3738
->addAction(
3839
id(new PhabricatorActionView())
3940
->setName(pht('Edit Account'))
@@ -88,6 +89,7 @@ private function buildPaymentMethodsSection(PhortuneAccount $account) {
8889

8990
$actions = id(new PhabricatorActionListView())
9091
->setUser($user)
92+
->setObjectURI($request->getRequestURI())
9193
->addAction(
9294
id(new PhabricatorActionView())
9395
->setName(pht('Add Payment Method'))

src/applications/phortune/controller/PhortuneProductViewController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public function processRequest() {
3434

3535
$actions = id(new PhabricatorActionListView())
3636
->setUser($user)
37+
->setObjectURI($request->getRequestURI())
3738
->addAction(
3839
id(new PhabricatorActionView())
3940
->setName(pht('Edit Product'))

src/applications/phrequent/event/PhrequentUIEventListener.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,13 @@ private function handleActionEvent($event) {
3838
$object->getPHID());
3939
if (!$tracking) {
4040
$track_action = id(new PhabricatorActionView())
41-
->setUser($user)
4241
->setName(pht('Start Tracking Time'))
4342
->setIcon('history')
4443
->setWorkflow(true)
4544
->setRenderAsForm(true)
4645
->setHref('/phrequent/track/start/'.$object->getPHID().'/');
4746
} else {
4847
$track_action = id(new PhabricatorActionView())
49-
->setUser($user)
5048
->setName(pht('Stop Tracking Time'))
5149
->setIcon('history')
5250
->setWorkflow(true)

src/applications/phriction/controller/PhrictionDocumentController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ private function buildActionView(
273273

274274
$action_view = id(new PhabricatorActionListView())
275275
->setUser($user)
276+
->setObjectURI($this->getRequest()->getRequestURI())
276277
->setObject($document);
277278

278279
if (!$document->getID()) {

src/applications/ponder/controller/PonderQuestionViewController.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,11 @@ public function processRequest() {
100100
}
101101

102102
private function buildActionListView(PonderQuestion $question) {
103-
$viewer = $this->getRequest()->getUser();
104-
$view = new PhabricatorActionListView();
105-
106-
$view->setUser($viewer);
107-
$view->setObject($question);
108-
109-
return $view;
103+
$request = $this->getRequest();
104+
return id(new PhabricatorActionListView())
105+
->setUser($request->getUser())
106+
->setObject($question)
107+
->setObjectURI($request->getRequestURI());
110108
}
111109

112110
private function buildPropertyListView(

src/applications/project/controller/PhabricatorProjectProfileController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ public function processRequest() {
9494

9595
$action_list = id(new PhabricatorActionListView())
9696
->setUser($user)
97+
->setObjectURI($request->getRequestURI())
9798
->addAction($action);
9899

99100
$nav_view->appendChild($header);

src/applications/subscriptions/events/PhabricatorSubscriptionsUIEventListener.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ private function handleActionEvent($event) {
3636
if ($object->isAutomaticallySubscribed($user->getPHID())) {
3737
$sub_action = id(new PhabricatorActionView())
3838
->setWorkflow(true)
39-
->setUser($user)
4039
->setDisabled(true)
4140
->setRenderAsForm(true)
4241
->setHref('/subscriptions/add/'.$object->getPHID().'/')
@@ -59,15 +58,13 @@ private function handleActionEvent($event) {
5958

6059
if ($subscribed) {
6160
$sub_action = id(new PhabricatorActionView())
62-
->setUser($user)
6361
->setWorkflow(true)
6462
->setRenderAsForm(true)
6563
->setHref('/subscriptions/delete/'.$object->getPHID().'/')
6664
->setName(pht('Unsubscribe'))
6765
->setIcon('disable');
6866
} else {
6967
$sub_action = id(new PhabricatorActionView())
70-
->setUser($user)
7168
->setWorkflow(true)
7269
->setRenderAsForm(true)
7370
->setHref('/subscriptions/add/'.$object->getPHID().'/')

src/applications/tokens/event/PhabricatorTokenUIEventListener.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,12 @@ private function handleActionEvent($event) {
4141

4242
if (!$current) {
4343
$token_action = id(new PhabricatorActionView())
44-
->setUser($user)
4544
->setWorkflow(true)
4645
->setHref('/token/give/'.$object->getPHID().'/')
4746
->setName(pht('Award Token'))
4847
->setIcon('like');
4948
} else {
5049
$token_action = id(new PhabricatorActionView())
51-
->setUser($user)
5250
->setWorkflow(true)
5351
->setHref('/token/give/'.$object->getPHID().'/')
5452
->setName(pht('Rescind Token'))

src/applications/uiexample/examples/PhabricatorActionListExample.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ public function renderExample() {
4141
return id(new AphrontDialogResponse())->setDialog($dialog);
4242
}
4343

44-
$view = new PhabricatorActionListView();
45-
$view->setUser($user);
44+
$view = id(new PhabricatorActionListView())
45+
->setUser($user)
46+
->setObjectURI($this->getRequest()->getRequestURI());
4647

4748
$view->addAction(
4849
id(new PhabricatorActionView())

src/view/layout/PhabricatorActionListView.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,19 @@ final class PhabricatorActionListView extends AphrontView {
44

55
private $actions = array();
66
private $object;
7+
private $objectURI;
78
private $id = null;
89

910
public function setObject(PhabricatorLiskDAO $object) {
1011
$this->object = $object;
1112
return $this;
1213
}
1314

15+
public function setObjectURI($uri) {
16+
$this->objectURI = $uri;
17+
return $this;
18+
}
19+
1420
public function addAction(PhabricatorActionView $view) {
1521
$this->actions[] = $view;
1622
return $this;
@@ -41,6 +47,11 @@ public function render() {
4147
return null;
4248
}
4349

50+
foreach ($actions as $action) {
51+
$action->setObjectURI($this->objectURI);
52+
$action->setUser($this->user);
53+
}
54+
4455
require_celerity_resource('phabricator-action-list-view-css');
4556

4657
return phutil_tag(

0 commit comments

Comments
 (0)