forked from phacility/phabricator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPhabricatorProjectColumnHideController.php
149 lines (128 loc) · 4.58 KB
/
PhabricatorProjectColumnHideController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php
final class PhabricatorProjectColumnHideController
extends PhabricatorProjectBoardController {
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
$id = $request->getURIData('id');
$project_id = $request->getURIData('projectID');
$project = id(new PhabricatorProjectQuery())
->setViewer($viewer)
->requireCapabilities(
array(
PhabricatorPolicyCapability::CAN_VIEW,
PhabricatorPolicyCapability::CAN_EDIT,
))
->withIDs(array($project_id))
->executeOne();
if (!$project) {
return new Aphront404Response();
}
$this->setProject($project);
$column = id(new PhabricatorProjectColumnQuery())
->setViewer($viewer)
->withIDs(array($id))
->requireCapabilities(
array(
PhabricatorPolicyCapability::CAN_VIEW,
PhabricatorPolicyCapability::CAN_EDIT,
))
->executeOne();
if (!$column) {
return new Aphront404Response();
}
$column_phid = $column->getPHID();
$view_uri = $project->getWorkboardURI();
$view_uri = new PhutilURI($view_uri);
foreach ($request->getPassthroughRequestData() as $key => $value) {
$view_uri->replaceQueryParam($key, $value);
}
if ($column->isDefaultColumn()) {
return $this->newDialog()
->setTitle(pht('Can Not Hide Default Column'))
->appendParagraph(
pht('You can not hide the default/backlog column on a board.'))
->addCancelButton($view_uri, pht('Okay'));
}
$proxy = $column->getProxy();
if ($request->isFormPost()) {
if ($proxy) {
if ($proxy->isArchived()) {
$new_status = PhabricatorProjectStatus::STATUS_ACTIVE;
} else {
$new_status = PhabricatorProjectStatus::STATUS_ARCHIVED;
}
$xactions = array();
$xactions[] = id(new PhabricatorProjectTransaction())
->setTransactionType(
PhabricatorProjectStatusTransaction::TRANSACTIONTYPE)
->setNewValue($new_status);
id(new PhabricatorProjectTransactionEditor())
->setActor($viewer)
->setContentSourceFromRequest($request)
->setContinueOnNoEffect(true)
->setContinueOnMissingFields(true)
->applyTransactions($proxy, $xactions);
} else {
if ($column->isHidden()) {
$new_status = PhabricatorProjectColumn::STATUS_ACTIVE;
} else {
$new_status = PhabricatorProjectColumn::STATUS_HIDDEN;
}
$type_status =
PhabricatorProjectColumnStatusTransaction::TRANSACTIONTYPE;
$xactions = array(
id(new PhabricatorProjectColumnTransaction())
->setTransactionType($type_status)
->setNewValue($new_status),
);
$editor = id(new PhabricatorProjectColumnTransactionEditor())
->setActor($viewer)
->setContinueOnNoEffect(true)
->setContinueOnMissingFields(true)
->setContentSourceFromRequest($request)
->applyTransactions($column, $xactions);
}
return id(new AphrontRedirectResponse())->setURI($view_uri);
}
if ($proxy) {
if ($column->isHidden()) {
$title = pht('Activate and Show Column');
$body = pht(
'This column is hidden because it represents an archived '.
'subproject. Do you want to activate the subproject so the '.
'column is visible again?');
$button = pht('Activate Subproject');
} else {
$title = pht('Archive and Hide Column');
$body = pht(
'This column is visible because it represents an active '.
'subproject. Do you want to hide the column by archiving the '.
'subproject?');
$button = pht('Archive Subproject');
}
} else {
if ($column->isHidden()) {
$title = pht('Show Column');
$body = pht('Are you sure you want to show this column?');
$button = pht('Show Column');
} else {
$title = pht('Hide Column');
$body = pht(
'Are you sure you want to hide this column? It will no longer '.
'appear on the workboard.');
$button = pht('Hide Column');
}
}
$dialog = $this->newDialog()
->setWidth(AphrontDialogView::WIDTH_FORM)
->setTitle($title)
->appendChild($body)
->setDisableWorkflowOnCancel(true)
->addCancelButton($view_uri)
->addSubmitButton($button);
foreach ($request->getPassthroughRequestData() as $key => $value) {
$dialog->addHiddenInput($key, $value);
}
return $dialog;
}
}