Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/auth/controller/message/PhabricatorAuthMessageViewController.php
12263 views
1
<?php
2
3
final class PhabricatorAuthMessageViewController
4
extends PhabricatorAuthMessageController {
5
6
public function handleRequest(AphrontRequest $request) {
7
$viewer = $this->getViewer();
8
9
$this->requireApplicationCapability(
10
AuthManageProvidersCapability::CAPABILITY);
11
12
// The "id" in the URI may either be an actual storage record ID (if a
13
// message has already been created) or a message type key (for a message
14
// type which does not have a record yet).
15
16
// This flow allows messages which have not been set yet to have a detail
17
// page (so users can get detailed information about the message and see
18
// any default value).
19
20
$id = $request->getURIData('id');
21
if (ctype_digit($id)) {
22
$message = id(new PhabricatorAuthMessageQuery())
23
->setViewer($viewer)
24
->withIDs(array($id))
25
->executeOne();
26
if (!$message) {
27
return new Aphront404Response();
28
}
29
} else {
30
$types = PhabricatorAuthMessageType::getAllMessageTypes();
31
if (!isset($types[$id])) {
32
return new Aphront404Response();
33
}
34
35
// If this message type already has a storage record, redirect to the
36
// canonical page for the record.
37
$message = id(new PhabricatorAuthMessageQuery())
38
->setViewer($viewer)
39
->withMessageKeys(array($id))
40
->executeOne();
41
if ($message) {
42
$message_uri = $message->getURI();
43
return id(new AphrontRedirectResponse())->setURI($message_uri);
44
}
45
46
// Otherwise, create an empty placeholder message object with the
47
// appropriate message type.
48
$message = PhabricatorAuthMessage::initializeNewMessage($types[$id]);
49
}
50
51
$crumbs = $this->buildApplicationCrumbs()
52
->addTextCrumb($message->getMessageType()->getDisplayName())
53
->setBorder(true);
54
55
$header = $this->buildHeaderView($message);
56
$properties = $this->buildPropertiesView($message);
57
$curtain = $this->buildCurtain($message);
58
59
if ($message->getID()) {
60
$timeline = $this->buildTransactionTimeline(
61
$message,
62
new PhabricatorAuthMessageTransactionQuery());
63
$timeline->setShouldTerminate(true);
64
} else {
65
$timeline = null;
66
}
67
68
$view = id(new PHUITwoColumnView())
69
->setHeader($header)
70
->setCurtain($curtain)
71
->setMainColumn(
72
array(
73
$timeline,
74
))
75
->addPropertySection(pht('Details'), $properties);
76
77
return $this->newPage()
78
->setTitle($message->getMessageTypeDisplayName())
79
->setCrumbs($crumbs)
80
->setPageObjectPHIDs(
81
array(
82
$message->getPHID(),
83
))
84
->appendChild($view);
85
}
86
87
private function buildHeaderView(PhabricatorAuthMessage $message) {
88
$viewer = $this->getViewer();
89
90
$view = id(new PHUIHeaderView())
91
->setViewer($viewer)
92
->setHeader($message->getMessageTypeDisplayName());
93
94
return $view;
95
}
96
97
private function buildPropertiesView(PhabricatorAuthMessage $message) {
98
$viewer = $this->getViewer();
99
100
$message_type = $message->getMessageType();
101
102
$view = id(new PHUIPropertyListView())
103
->setViewer($viewer);
104
105
$full_description = $message_type->getFullDescription();
106
if (strlen($full_description)) {
107
$view->addTextContent(new PHUIRemarkupView($viewer, $full_description));
108
} else {
109
$short_description = $message_type->getShortDescription();
110
$view->addProperty(pht('Description'), $short_description);
111
}
112
113
$message_text = $message->getMessageText();
114
if (strlen($message_text)) {
115
$view->addSectionHeader(
116
pht('Message Preview'),
117
PHUIPropertyListView::ICON_SUMMARY);
118
119
$view->addTextContent(new PHUIRemarkupView($viewer, $message_text));
120
}
121
122
$default_text = $message_type->getDefaultMessageText();
123
if (strlen($default_text)) {
124
$view->addSectionHeader(
125
pht('Default Message'),
126
PHUIPropertyListView::ICON_SUMMARY);
127
128
$view->addTextContent(new PHUIRemarkupView($viewer, $default_text));
129
}
130
131
return $view;
132
}
133
134
private function buildCurtain(PhabricatorAuthMessage $message) {
135
$viewer = $this->getViewer();
136
$id = $message->getID();
137
138
$can_edit = PhabricatorPolicyFilter::hasCapability(
139
$viewer,
140
$message,
141
PhabricatorPolicyCapability::CAN_EDIT);
142
143
if ($id) {
144
$edit_uri = urisprintf('message/edit/%s/', $id);
145
$edit_name = pht('Edit Message');
146
} else {
147
$edit_uri = urisprintf('message/edit/');
148
$params = array(
149
'messageKey' => $message->getMessageKey(),
150
);
151
$edit_uri = new PhutilURI($edit_uri, $params);
152
153
$edit_name = pht('Customize Message');
154
}
155
$edit_uri = $this->getApplicationURI($edit_uri);
156
157
$curtain = $this->newCurtainView($message);
158
159
$curtain->addAction(
160
id(new PhabricatorActionView())
161
->setName($edit_name)
162
->setIcon('fa-pencil')
163
->setHref($edit_uri)
164
->setDisabled(!$can_edit)
165
->setWorkflow(!$can_edit));
166
167
return $curtain;
168
}
169
170
}
171
172