@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 PHUIFormInsetView extends AphrontView {
4
5 private $title;
6 private $description;
7 private $rightButton;
8 private $content;
9 private $hidden = array();
10
11 private $divAttributes;
12
13 public function setTitle($title) {
14 $this->title = $title;
15 return $this;
16 }
17
18 public function setDescription($description) {
19 $this->description = $description;
20 return $this;
21 }
22
23 public function setRightButton($button) {
24 $this->rightButton = $button;
25 return $this;
26 }
27
28 public function setContent($content) {
29 $this->content = $content;
30 return $this;
31 }
32
33 public function addHiddenInput($key, $value) {
34 if (is_array($value)) {
35 foreach ($value as $hidden_key => $hidden_value) {
36 $this->hidden[] = array($key.'['.$hidden_key.']', $hidden_value);
37 }
38 } else {
39 $this->hidden[] = array($key, $value);
40 }
41 return $this;
42 }
43
44 public function addDivAttributes(array $attributes) {
45 $this->divAttributes = $attributes;
46 return $this;
47 }
48
49 public function render() {
50
51 $right_button = $desc = '';
52
53 $hidden_inputs = array();
54 foreach ($this->hidden as $inp) {
55 list($key, $value) = $inp;
56 $hidden_inputs[] = phutil_tag(
57 'input',
58 array(
59 'type' => 'hidden',
60 'name' => $key,
61 'value' => $value,
62 ));
63 }
64
65 if ($this->rightButton) {
66 $right_button = phutil_tag(
67 'div',
68 array(
69 'style' => 'float: right;',
70 ),
71 $this->rightButton);
72 $right_button = phutil_tag_div('grouped', $right_button);
73 }
74
75 if ($this->description) {
76 $desc = phutil_tag(
77 'p',
78 array(),
79 $this->description);
80 }
81
82 $div_attributes = $this->divAttributes;
83 $classes = array('phui-form-inset');
84 if (isset($div_attributes['class'])) {
85 $classes[] = $div_attributes['class'];
86 }
87
88 $div_attributes['class'] = implode(' ', $classes);
89
90 $content = $hidden_inputs;
91 $content[] = $right_button;
92 $content[] = $desc;
93
94 if ($this->title != '') {
95 array_unshift($content, phutil_tag('h1', array(), $this->title));
96 }
97
98 if ($this->content) {
99 $content[] = $this->content;
100 }
101
102 $content = array_merge($content, $this->renderChildren());
103
104 return phutil_tag('div', $div_attributes, $content);
105 }
106}