@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class PhamePostMoveController extends PhamePostController {
4
5 public function handleRequest(AphrontRequest $request) {
6 $viewer = $request->getViewer();
7 $id = $request->getURIData('id');
8
9 $post = id(new PhamePostQuery())
10 ->setViewer($viewer)
11 ->withIDs(array($id))
12 ->requireCapabilities(
13 array(
14 PhabricatorPolicyCapability::CAN_EDIT,
15 PhabricatorPolicyCapability::CAN_VIEW,
16 ))
17 ->executeOne();
18
19 if (!$post) {
20 return new Aphront404Response();
21 }
22
23 $view_uri = $post->getViewURI();
24 $v_blog = $post->getBlog()->getPHID();
25
26 if ($request->isFormPost()) {
27 $v_blog = $request->getStr('blogPHID');
28
29 $xactions = array();
30 $xactions[] = id(new PhamePostTransaction())
31 ->setTransactionType(PhamePostBlogTransaction::TRANSACTIONTYPE)
32 ->setNewValue($v_blog);
33
34 $editor = id(new PhamePostEditor())
35 ->setActor($viewer)
36 ->setContentSourceFromRequest($request)
37 ->setContinueOnMissingFields(true)
38 ->setContinueOnNoEffect(true);
39
40 $editor->applyTransactions($post, $xactions);
41
42 $view_uri = $post->getViewURI();
43
44 return id(new AphrontRedirectResponse())
45 ->setURI($view_uri.'?moved=1');
46 }
47
48 $blogs = id(new PhameBlogQuery())
49 ->setViewer($viewer)
50 ->requireCapabilities(
51 array(
52 PhabricatorPolicyCapability::CAN_VIEW,
53 PhabricatorPolicyCapability::CAN_EDIT,
54 ))
55 ->execute();
56
57 $options = mpull($blogs, 'getName', 'getPHID');
58 asort($options);
59
60 $form = id(new PHUIFormLayoutView())
61 ->setUser($viewer)
62 ->appendChild(
63 id(new AphrontFormSelectControl())
64 ->setLabel(pht('Blog'))
65 ->setName('blogPHID')
66 ->setOptions($options)
67 ->setValue($v_blog));
68
69 return $this->newDialog()
70 ->setTitle(pht('Move Post'))
71 ->appendChild($form)
72 ->addSubmitButton(pht('Move Post'))
73 ->addCancelButton($view_uri);
74 }
75
76}