Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/diviner/controller/DivinerBookEditController.php
12256 views
1
<?php
2
3
final class DivinerBookEditController extends DivinerController {
4
5
public function handleRequest(AphrontRequest $request) {
6
$viewer = $request->getViewer();
7
8
$book_name = $request->getURIData('book');
9
10
$book = id(new DivinerBookQuery())
11
->setViewer($viewer)
12
->requireCapabilities(
13
array(
14
PhabricatorPolicyCapability::CAN_VIEW,
15
PhabricatorPolicyCapability::CAN_EDIT,
16
))
17
->needProjectPHIDs(true)
18
->withNames(array($book_name))
19
->executeOne();
20
21
if (!$book) {
22
return new Aphront404Response();
23
}
24
25
$view_uri = '/book/'.$book->getName().'/';
26
27
if ($request->isFormPost()) {
28
$v_projects = $request->getArr('projectPHIDs');
29
$v_view = $request->getStr('viewPolicy');
30
$v_edit = $request->getStr('editPolicy');
31
32
$xactions = array();
33
$xactions[] = id(new DivinerLiveBookTransaction())
34
->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
35
->setMetadataValue(
36
'edge:type',
37
PhabricatorProjectObjectHasProjectEdgeType::EDGECONST)
38
->setNewValue(
39
array(
40
'=' => array_fuse($v_projects),
41
));
42
$xactions[] = id(new DivinerLiveBookTransaction())
43
->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
44
->setNewValue($v_view);
45
$xactions[] = id(new DivinerLiveBookTransaction())
46
->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)
47
->setNewValue($v_edit);
48
49
id(new DivinerLiveBookEditor())
50
->setContinueOnNoEffect(true)
51
->setContentSourceFromRequest($request)
52
->setActor($viewer)
53
->applyTransactions($book, $xactions);
54
55
return id(new AphrontRedirectResponse())->setURI($view_uri);
56
}
57
58
$crumbs = $this->buildApplicationCrumbs();
59
$crumbs->addTextCrumb(pht('Edit Basics'));
60
$crumbs->setBorder(true);
61
62
$title = pht('Edit Book: %s', $book->getTitle());
63
$header_icon = 'fa-pencil';
64
65
$policies = id(new PhabricatorPolicyQuery())
66
->setViewer($viewer)
67
->setObject($book)
68
->execute();
69
$view_capability = PhabricatorPolicyCapability::CAN_VIEW;
70
$edit_capability = PhabricatorPolicyCapability::CAN_EDIT;
71
72
$form = id(new AphrontFormView())
73
->setUser($viewer)
74
->appendControl(
75
id(new AphrontFormTokenizerControl())
76
->setDatasource(new PhabricatorProjectDatasource())
77
->setName('projectPHIDs')
78
->setLabel(pht('Tags'))
79
->setValue($book->getProjectPHIDs()))
80
->appendControl(
81
id(new AphrontFormTokenizerControl())
82
->setDatasource(new DiffusionRepositoryDatasource())
83
->setName('repositoryPHIDs')
84
->setLabel(pht('Repository'))
85
->setDisableBehavior(true)
86
->setLimit(1)
87
->setValue($book->getRepositoryPHID()
88
? array($book->getRepositoryPHID())
89
: null))
90
->appendChild(
91
id(new AphrontFormPolicyControl())
92
->setName('viewPolicy')
93
->setPolicyObject($book)
94
->setCapability($view_capability)
95
->setPolicies($policies))
96
->appendChild(
97
id(new AphrontFormPolicyControl())
98
->setName('editPolicy')
99
->setPolicyObject($book)
100
->setCapability($edit_capability)
101
->setPolicies($policies))
102
->appendChild(
103
id(new AphrontFormSubmitControl())
104
->setValue(pht('Save'))
105
->addCancelButton($view_uri));
106
107
$box = id(new PHUIObjectBoxView())
108
->setHeaderText(pht('Book'))
109
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
110
->setForm($form);
111
112
$timeline = $this->buildTransactionTimeline(
113
$book,
114
new DivinerLiveBookTransactionQuery());
115
$timeline->setShouldTerminate(true);
116
117
$header = id(new PHUIHeaderView())
118
->setHeader($title)
119
->setHeaderIcon($header_icon);
120
121
$view = id(new PHUITwoColumnView())
122
->setHeader($header)
123
->setFooter(array(
124
$box,
125
$timeline,
126
));
127
128
return $this->newPage()
129
->setTitle($title)
130
->setCrumbs($crumbs)
131
->appendChild($view);
132
}
133
134
}
135
136