3 abstract class PhabricatorEditEngineAPIMethod
4 extends ConduitAPIMethod
{
6 abstract public function newEditEngine();
8 public function getApplication() {
9 $engine = $this->newEditEngine();
10 $class = $engine->getEngineApplicationClass();
11 return PhabricatorApplication
::getByClass($class);
14 final protected function defineParamTypes() {
16 'transactions' => 'list<map<string, wild>>',
17 'objectIdentifier' => 'optional id|phid|string',
21 final protected function defineReturnType() {
22 return 'map<string, wild>';
25 final protected function execute(ConduitAPIRequest
$request) {
26 $engine = $this->newEditEngine()
27 ->setViewer($request->getUser());
29 return $engine->buildConduitResponse($request);
32 final public function getMethodDescription() {
34 'This is a standard **ApplicationEditor** method which allows you to '.
35 'create and modify objects by applying transactions. For documentation '.
36 'on these endpoints, see '.
37 '**[[ %s | Conduit API: Using Edit Endpoints ]]**.',
38 PhabricatorEnv
::getDoclink('Conduit API: Using Edit Endpoints'));
41 final protected function newDocumentationPages(PhabricatorUser
$viewer) {
42 $engine = $this->newEditEngine()
45 $types = $engine->getConduitEditTypes();
49 return $this->buildEditTypesDocumentationPages($viewer, $engine, $types);
52 private function buildEditTypesDocumentationPages(
53 PhabricatorUser
$viewer,
54 PhabricatorEditEngine
$engine,
60 'This endpoint supports these types of transactions. See below for '.
61 'detailed information about each transaction type.');
64 foreach ($types as $type) {
67 $type->getConduitDescription(),
71 $summary_table = id(new AphrontTableView($rows))
83 $title = pht('Transaction Summary');
85 $this->buildRemarkup($summary_info),
89 $pages[] = $this->newDocumentationBoxPage($viewer, $title, $content)
92 foreach ($types as $type) {
95 $section[] = $type->getConduitDescription();
97 $type_documentation = $type->getConduitDocumentation();
98 if (strlen($type_documentation)) {
99 $section[] = $type_documentation;
102 $section = implode("\n\n", $section);
109 $type->getEditType(),
114 $type->getConduitType(),
115 $type->getConduitTypeDescription(),
118 $type_table = id(new AphrontTableView($rows))
132 $title = $type->getEditType();
134 $this->buildRemarkup($section),
138 $pages[] = $this->newDocumentationBoxPage($viewer, $title, $content)
139 ->setAnchor($type->getEditType())
140 ->setIconIcon('fa-pencil');
147 private function buildRemarkup($remarkup) {
148 $viewer = $this->getViewer();
150 $view = new PHUIRemarkupView($viewer, $remarkup);
152 $view->setRemarkupOptions(
154 PHUIRemarkupView
::OPTION_PRESERVE_LINEBREAKS
=> false,
157 return id(new PHUIBoxView())
159 ->addPadding(PHUI
::PADDING_LARGE
);