Correct a parameter order swap in "diffusion.historyquery" for Mercurial
[phabricator.git] / src / applications / phame / controller / blog / PhameBlogManageController.php
blob65378d91cb5303a11b069e2c0423192d5f107205
1 <?php
3 final class PhameBlogManageController extends PhameBlogController {
5 public function shouldAllowPublic() {
6 return true;
9 public function handleRequest(AphrontRequest $request) {
10 $viewer = $request->getViewer();
11 $id = $request->getURIData('id');
13 $blog = id(new PhameBlogQuery())
14 ->setViewer($viewer)
15 ->withIDs(array($id))
16 ->needProfileImage(true)
17 ->needHeaderImage(true)
18 ->executeOne();
19 if (!$blog) {
20 return new Aphront404Response();
23 if ($blog->isArchived()) {
24 $header_icon = 'fa-ban';
25 $header_name = pht('Archived');
26 $header_color = 'dark';
27 } else {
28 $header_icon = 'fa-check';
29 $header_name = pht('Active');
30 $header_color = 'bluegrey';
33 $picture = $blog->getProfileImageURI();
35 $view = id(new PHUIButtonView())
36 ->setTag('a')
37 ->setText(pht('View Live'))
38 ->setIcon('fa-external-link')
39 ->setHref($blog->getLiveURI())
40 ->setDisabled($blog->isArchived());
42 $header = id(new PHUIHeaderView())
43 ->setHeader($blog->getName())
44 ->setUser($viewer)
45 ->setPolicyObject($blog)
46 ->setImage($picture)
47 ->setStatus($header_icon, $header_color, $header_name)
48 ->addActionLink($view);
50 $can_edit = PhabricatorPolicyFilter::hasCapability(
51 $viewer,
52 $blog,
53 PhabricatorPolicyCapability::CAN_EDIT);
55 if ($can_edit) {
56 $header->setImageEditURL(
57 $this->getApplicationURI('blog/picture/'.$blog->getID().'/'));
60 $curtain = $this->buildCurtain($blog);
61 $properties = $this->buildPropertyView($blog);
62 $file = $this->buildFileView($blog);
64 $crumbs = $this->buildApplicationCrumbs();
65 $crumbs->addTextCrumb(
66 pht('Blogs'),
67 $this->getApplicationURI('blog/'));
68 $crumbs->addTextCrumb(
69 $blog->getName(),
70 $this->getApplicationURI('blog/view/'.$id));
71 $crumbs->addTextCrumb(pht('Manage Blog'));
72 $crumbs->setBorder(true);
74 $object_box = id(new PHUIObjectBoxView())
75 ->setHeader($header)
76 ->addPropertyList($properties);
78 $timeline = $this->buildTransactionTimeline(
79 $blog,
80 new PhameBlogTransactionQuery());
81 $timeline->setShouldTerminate(true);
83 $view = id(new PHUITwoColumnView())
84 ->setHeader($header)
85 ->setCurtain($curtain)
86 ->addPropertySection(pht('Details'), $properties)
87 ->addPropertySection(pht('Header'), $file)
88 ->setMainColumn(
89 array(
90 $timeline,
91 ));
93 return $this->newPage()
94 ->setTitle($blog->getName())
95 ->setCrumbs($crumbs)
96 ->appendChild(
97 array(
98 $view,
99 ));
102 private function buildPropertyView(PhameBlog $blog) {
103 $viewer = $this->getViewer();
105 require_celerity_resource('aphront-tooltip-css');
106 Javelin::initBehavior('phabricator-tooltips');
108 $properties = id(new PHUIPropertyListView())
109 ->setUser($viewer);
111 $full_domain = $blog->getDomainFullURI();
112 if (!$full_domain) {
113 $full_domain = phutil_tag('em', array(), pht('No external domain'));
115 $properties->addProperty(pht('Full Domain'), $full_domain);
117 $parent_site = $blog->getParentSite();
118 if (!$parent_site) {
119 $parent_site = phutil_tag('em', array(), pht('No parent site'));
122 $properties->addProperty(pht('Parent Site'), $parent_site);
124 $parent_domain = $blog->getParentDomain();
125 if (!$parent_domain) {
126 $parent_domain = phutil_tag('em', array(), pht('No parent domain'));
129 $properties->addProperty(pht('Parent Domain'), $parent_domain);
131 $feed_uri = PhabricatorEnv::getProductionURI(
132 $this->getApplicationURI('blog/feed/'.$blog->getID().'/'));
133 $properties->addProperty(
134 pht('Atom URI'),
135 javelin_tag('a',
136 array(
137 'href' => $feed_uri,
138 'sigil' => 'has-tooltip',
139 'meta' => array(
140 'tip' => pht('Atom URI does not support custom domains.'),
141 'size' => 320,
144 $feed_uri));
146 $engine = id(new PhabricatorMarkupEngine())
147 ->setViewer($viewer)
148 ->addObject($blog, PhameBlog::MARKUP_FIELD_DESCRIPTION)
149 ->process();
151 $description = $blog->getDescription();
152 if (strlen($description)) {
153 $description = new PHUIRemarkupView($viewer, $description);
154 $properties->addSectionHeader(
155 pht('Description'),
156 PHUIPropertyListView::ICON_SUMMARY);
157 $properties->addTextContent($description);
160 return $properties;
163 private function buildCurtain(PhameBlog $blog) {
164 $viewer = $this->getViewer();
166 $curtain = $this->newCurtainView($blog);
168 $actions = id(new PhabricatorActionListView())
169 ->setObject($blog)
170 ->setUser($viewer);
172 $can_edit = PhabricatorPolicyFilter::hasCapability(
173 $viewer,
174 $blog,
175 PhabricatorPolicyCapability::CAN_EDIT);
177 $curtain->addAction(
178 id(new PhabricatorActionView())
179 ->setIcon('fa-pencil')
180 ->setHref($this->getApplicationURI('blog/edit/'.$blog->getID().'/'))
181 ->setName(pht('Edit Blog'))
182 ->setDisabled(!$can_edit)
183 ->setWorkflow(!$can_edit));
185 $curtain->addAction(
186 id(new PhabricatorActionView())
187 ->setIcon('fa-camera')
188 ->setHref($this->getApplicationURI('blog/header/'.$blog->getID().'/'))
189 ->setName(pht('Edit Blog Header'))
190 ->setDisabled(!$can_edit)
191 ->setWorkflow(!$can_edit));
193 $curtain->addAction(
194 id(new PhabricatorActionView())
195 ->setIcon('fa-picture-o')
196 ->setHref($this->getApplicationURI('blog/picture/'.$blog->getID().'/'))
197 ->setName(pht('Edit Blog Picture'))
198 ->setDisabled(!$can_edit)
199 ->setWorkflow(!$can_edit));
201 if ($blog->isArchived()) {
202 $curtain->addAction(
203 id(new PhabricatorActionView())
204 ->setName(pht('Activate Blog'))
205 ->setIcon('fa-check')
206 ->setHref(
207 $this->getApplicationURI('blog/archive/'.$blog->getID().'/'))
208 ->setDisabled(!$can_edit)
209 ->setWorkflow(true));
210 } else {
211 $curtain->addAction(
212 id(new PhabricatorActionView())
213 ->setName(pht('Archive Blog'))
214 ->setIcon('fa-ban')
215 ->setHref(
216 $this->getApplicationURI('blog/archive/'.$blog->getID().'/'))
217 ->setDisabled(!$can_edit)
218 ->setWorkflow(true));
221 return $curtain;
224 private function buildFileView(
225 PhameBlog $blog) {
226 $viewer = $this->getViewer();
228 $view = id(new PHUIPropertyListView())
229 ->setUser($viewer);
231 if ($blog->getHeaderImagePHID()) {
232 $view->addImageContent(
233 phutil_tag(
234 'img',
235 array(
236 'src' => $blog->getHeaderImageURI(),
237 'class' => 'phabricator-image-macro-hero',
238 )));
239 return $view;
241 return null;