1
|
|
|
<?php |
2
|
|
|
namespace Ajax\semantic\widgets\base; |
3
|
|
|
use Ajax\service\JString; |
4
|
|
|
use Ajax\semantic\html\elements\HtmlImage; |
5
|
|
|
use Ajax\semantic\html\base\constants\Size; |
6
|
|
|
use Ajax\semantic\html\elements\HtmlLabel; |
7
|
|
|
use Ajax\semantic\html\modules\HtmlProgress; |
8
|
|
|
use Ajax\semantic\html\modules\HtmlRating; |
9
|
|
|
use Ajax\semantic\html\elements\HtmlHeader; |
10
|
|
|
use Ajax\semantic\html\collections\form\HtmlFormCheckbox; |
11
|
|
|
use Ajax\semantic\html\collections\form\HtmlFormInput; |
12
|
|
|
use Ajax\semantic\html\collections\form\HtmlFormDropdown; |
13
|
|
|
use Ajax\semantic\html\collections\form\HtmlFormTextarea; |
14
|
|
|
use Ajax\semantic\html\collections\form\HtmlFormFields; |
15
|
|
|
use Ajax\semantic\html\collections\HtmlMessage; |
16
|
|
|
use Ajax\semantic\html\elements\HtmlButton; |
17
|
|
|
use Ajax\service\JArray; |
18
|
|
|
use Ajax\semantic\html\elements\html5\HtmlLink; |
19
|
|
|
use Ajax\semantic\html\elements\HtmlFlag; |
20
|
|
|
use Ajax\common\html\BaseHtml; |
21
|
|
|
use Ajax\semantic\html\collections\form\HtmlFormField; |
22
|
|
|
use Ajax\semantic\html\collections\form\HtmlFormRadio; |
23
|
|
|
use Ajax\semantic\html\base\HtmlSemDoubleElement; |
24
|
|
|
use Ajax\semantic\html\elements\HtmlIcon; |
25
|
|
|
|
26
|
|
|
/** |
27
|
|
|
* trait used in Widget |
28
|
|
|
* @author jc |
29
|
|
|
* @property InstanceViewer $_instanceViewer |
30
|
|
|
* @property boolean $_edition |
31
|
|
|
* @property mixed _modelInstance |
32
|
|
|
*/ |
33
|
|
|
trait FieldAsTrait{ |
34
|
|
|
|
35
|
|
|
abstract protected function _getFieldIdentifier($prefix,$name=""); |
36
|
|
|
abstract public function setValueFunction($index,$callback); |
37
|
|
|
abstract protected function _getFieldName($index); |
38
|
|
|
abstract protected function _getFieldCaption($index); |
39
|
|
|
abstract protected function _buttonAsSubmit(BaseHtml &$button,$event,$url,$responseElement=NULL,$parameters=NULL); |
40
|
|
|
|
41
|
|
|
/** |
42
|
|
|
* @param HtmlFormField $element |
43
|
|
|
* @param array $attributes |
44
|
|
|
*/ |
45
|
|
|
protected function _applyAttributes(BaseHtml $element,&$attributes,$index){ |
46
|
|
|
if(isset($attributes["jsCallback"])){ |
47
|
|
|
$callback=$attributes["jsCallback"]; |
48
|
|
|
if(\is_callable($callback)){ |
49
|
|
|
$callback($element,$this->_modelInstance,$index,InstanceViewer::$index); |
50
|
|
|
//unset($attributes["jsCallback"]); |
|
|
|
|
51
|
|
|
} |
52
|
|
|
} |
53
|
|
|
unset($attributes["rules"]); |
54
|
|
|
unset($attributes["ajax"]); |
55
|
|
|
unset($attributes["visibleHover"]); |
56
|
|
|
$element->fromArray($attributes); |
57
|
|
|
} |
58
|
|
|
|
59
|
|
|
private function _getLabelField($caption,$icon=NULL){ |
60
|
|
|
$label=new HtmlLabel($this->_getFieldIdentifier("lbl"),$caption,$icon); |
61
|
|
|
return $label; |
62
|
|
|
} |
63
|
|
|
|
64
|
|
|
|
65
|
|
|
protected function _addRules(HtmlFormField $element,&$attributes){ |
66
|
|
|
if(isset($attributes["rules"])){ |
67
|
|
|
$rules=$attributes["rules"]; |
68
|
|
|
if(\is_array($rules)){ |
69
|
|
|
$element->addRules($rules); |
70
|
|
|
} |
71
|
|
|
else{ |
72
|
|
|
$element->addRule($rules); |
73
|
|
|
} |
74
|
|
|
unset($attributes["rules"]); |
75
|
|
|
} |
76
|
|
|
} |
77
|
|
|
|
78
|
|
|
protected function _prepareFormFields(HtmlFormField &$field,$name,&$attributes){ |
79
|
|
|
$field->setName($name); |
80
|
|
|
$this->_addRules($field, $attributes); |
81
|
|
|
return $field; |
82
|
|
|
} |
83
|
|
|
|
84
|
|
|
protected function _fieldAs($elementCallback,&$index,$attributes=NULL,$prefix=null){ |
85
|
|
|
$this->setValueFunction($index,function($value,$instance,$index,$rowIndex) use (&$attributes,$elementCallback,$prefix){ |
86
|
|
|
$caption=$this->_getFieldCaption($index); |
87
|
|
|
$name=$this->_getFieldName($index); |
88
|
|
|
$id=$this->_getFieldIdentifier($prefix,$name); |
89
|
|
|
if(isset($attributes["name"])){ |
90
|
|
|
$name=$attributes["name"]; |
91
|
|
|
unset($attributes["name"]); |
92
|
|
|
} |
93
|
|
|
$element=$elementCallback($id,$name,$value,$caption); |
94
|
|
|
if(\is_array($attributes)){ |
95
|
|
|
$this->_applyAttributes($element, $attributes,$index); |
96
|
|
|
} |
97
|
|
|
$element->setDisabled(!$this->_edition); |
98
|
|
|
return $element; |
99
|
|
|
}); |
100
|
|
|
return $this; |
101
|
|
|
} |
102
|
|
|
|
103
|
|
|
|
104
|
|
|
public function fieldAsProgress($index,$label=NULL, $attributes=array()){ |
105
|
|
|
$this->setValueFunction($index,function($value) use($label,$attributes){ |
106
|
|
|
$pb=new HtmlProgress($this->_getFieldIdentifier("pb"),$value,$label,$attributes); |
107
|
|
|
return $pb; |
108
|
|
|
}); |
109
|
|
|
return $this; |
110
|
|
|
} |
111
|
|
|
|
112
|
|
|
public function fieldAsRating($index,$max=5, $icon=""){ |
113
|
|
|
$this->setValueFunction($index,function($value) use($max,$icon){ |
114
|
|
|
$rating=new HtmlRating($this->_getFieldIdentifier("rat"),$value,$max,$icon); |
115
|
|
|
return $rating; |
116
|
|
|
}); |
117
|
|
|
return $this; |
118
|
|
|
} |
119
|
|
|
|
120
|
|
|
public function fieldAsLabel($index,$icon=NULL,$attributes=NULL){ |
121
|
|
|
return $this->_fieldAs(function($id,$name,$value) use($icon){ |
122
|
|
|
$lbl=new HtmlLabel($id,$value); |
123
|
|
|
if(isset($icon)) |
124
|
|
|
$lbl->addIcon($icon); |
125
|
|
|
return $lbl; |
126
|
|
|
}, $index,$attributes,"label"); |
127
|
|
|
} |
128
|
|
|
|
129
|
|
|
public function fieldAsHeader($index,$niveau=1,$icon=NULL,$attributes=NULL){ |
130
|
|
|
return $this->_fieldAs(function($id,$name,$value) use($niveau,$icon){ |
131
|
|
|
$header=new HtmlHeader($id,$niveau,$value); |
132
|
|
|
if(isset($icon)) |
133
|
|
|
$header->asIcon($icon, $value); |
134
|
|
|
return $header; |
135
|
|
|
}, $index,$attributes,"header"); |
136
|
|
|
} |
137
|
|
|
|
138
|
|
|
|
139
|
|
|
public function fieldAsImage($index,$size=Size::MINI,$circular=false){ |
140
|
|
|
$this->setValueFunction($index,function($img) use($size,$circular){ |
141
|
|
|
$image=new HtmlImage($this->_getFieldIdentifier("image"),$img);$image->setSize($size);if($circular)$image->setCircular(); |
142
|
|
|
return $image; |
143
|
|
|
}); |
144
|
|
|
return $this; |
145
|
|
|
} |
146
|
|
|
|
147
|
|
|
public function fieldAsFlag($index){ |
148
|
|
|
$this->setValueFunction($index,function($flag){ |
149
|
|
|
$flag=new HtmlFlag($this->_getFieldIdentifier("flag"),$flag); |
150
|
|
|
return $flag; |
151
|
|
|
}); |
152
|
|
|
return $this; |
153
|
|
|
} |
154
|
|
|
|
155
|
|
|
public function fieldAsIcon($index){ |
156
|
|
|
$this->setValueFunction($index,function($icon){ |
157
|
|
|
$icon=new HtmlIcon($this->_getFieldIdentifier("icon"),$icon); |
158
|
|
|
return $icon; |
159
|
|
|
}); |
160
|
|
|
return $this; |
161
|
|
|
} |
162
|
|
|
|
163
|
|
|
public function fieldAsAvatar($index,$attributes=NULL){ |
164
|
|
|
return $this->_fieldAs(function($id,$name,$value){ |
165
|
|
|
$img=new HtmlImage($id,$value); |
166
|
|
|
$img->asAvatar(); |
167
|
|
|
return $img; |
168
|
|
|
}, $index,$attributes,"avatar"); |
169
|
|
|
} |
170
|
|
|
|
171
|
|
|
public function fieldAsRadio($index,$attributes=NULL){ |
172
|
|
|
return $this->_fieldAs(function($id,$name,$value) use($attributes){ |
173
|
|
|
$input= new HtmlFormRadio($id,$name,$value,$value); |
174
|
|
|
return $this->_prepareFormFields($input, $name, $attributes); |
175
|
|
|
}, $index,$attributes,"radio"); |
176
|
|
|
} |
177
|
|
|
|
178
|
|
|
public function fieldAsRadios($index,$elements=[],$attributes=NULL){ |
179
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption) use ($elements){ |
180
|
|
|
return HtmlFormFields::radios($name,$elements,$caption,$value); |
181
|
|
|
}, $index,$attributes,"radios"); |
182
|
|
|
} |
183
|
|
|
|
184
|
|
|
public function fieldAsInput($index,$attributes=NULL){ |
185
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption) use ($attributes){ |
186
|
|
|
$input= new HtmlFormInput($id,$caption,"text",$value); |
187
|
|
|
return $this->_prepareFormFields($input, $name, $attributes); |
188
|
|
|
}, $index,$attributes,"input"); |
189
|
|
|
} |
190
|
|
|
|
191
|
|
|
public function fieldAsTextarea($index,$attributes=NULL){ |
192
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption) use ($attributes){ |
193
|
|
|
$textarea=new HtmlFormTextarea($id,$caption,$value); |
194
|
|
|
return $this->_prepareFormFields($textarea, $name, $attributes); |
195
|
|
|
}, $index,$attributes,"textarea"); |
196
|
|
|
} |
197
|
|
|
|
198
|
|
|
public function fieldAsElement($index,$tagName="div",$baseClass="",$attributes=NULL){ |
199
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption) use ($attributes,$tagName,$baseClass){ |
200
|
|
|
$div=new HtmlSemDoubleElement($id,$tagName,$baseClass); |
201
|
|
|
$div->setContent(\htmlentities($value)); |
202
|
|
|
$textarea=new HtmlFormField("field-".$id, $div,$caption); |
203
|
|
|
return $this->_prepareFormFields($textarea, $name, $attributes); |
204
|
|
|
}, $index,$attributes,"element"); |
205
|
|
|
} |
206
|
|
|
|
207
|
|
|
|
208
|
|
|
public function fieldAsHidden($index,$attributes=NULL){ |
209
|
|
|
if(!\is_array($attributes)){ |
210
|
|
|
$attributes=[]; |
211
|
|
|
} |
212
|
|
|
$attributes["inputType"]="hidden"; |
213
|
|
|
return $this->fieldAsInput($index,$attributes); |
214
|
|
|
} |
215
|
|
|
|
216
|
|
|
public function fieldAsCheckbox($index,$attributes=NULL){ |
217
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption) use($attributes){ |
218
|
|
|
if($caption===null || $caption==="") |
219
|
|
|
$caption=""; |
220
|
|
|
$input=new HtmlFormCheckbox($id,$caption,$this->_instanceViewer->getIdentifier()); |
221
|
|
|
$input->setChecked(JString::isBooleanTrue($value)); |
222
|
|
|
return $this->_prepareFormFields($input, $name, $attributes); |
223
|
|
|
}, $index,$attributes,"ck"); |
224
|
|
|
} |
225
|
|
|
|
226
|
|
|
public function fieldAsDropDown($index,$elements=[],$multiple=false,$attributes=NULL){ |
227
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption) use($elements,$multiple,$attributes){ |
228
|
|
|
$dd=new HtmlFormDropdown($id,$elements,$caption,$value); |
229
|
|
|
$dd->asSelect($name,$multiple); |
230
|
|
|
return $this->_prepareFormFields($dd, $name, $attributes); |
231
|
|
|
}, $index,$attributes,"dd"); |
232
|
|
|
} |
233
|
|
|
|
234
|
|
|
public function fieldAsMessage($index,$attributes=NULL){ |
235
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption){ |
236
|
|
|
$mess= new HtmlMessage("message-".$id,$caption); |
237
|
|
|
$mess->addHeader($value); |
238
|
|
|
return $mess; |
239
|
|
|
}, $index,$attributes,"message"); |
240
|
|
|
} |
241
|
|
|
|
242
|
|
|
public function fieldAsLink($index,$attributes=NULL){ |
243
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption){ |
244
|
|
|
$lnk= new HtmlLink("message-".$id,"#",$caption); |
245
|
|
|
return $lnk; |
246
|
|
|
}, $index,$attributes,"link"); |
247
|
|
|
} |
248
|
|
|
|
249
|
|
|
/**Change fields type |
250
|
|
|
* @param array $types an array or associative array $type=>$attributes |
251
|
|
|
*/ |
252
|
|
|
public function fieldsAs(array $types){ |
253
|
|
|
$i=0; |
254
|
|
|
if(JArray::isAssociative($types)){ |
255
|
|
|
foreach ($types as $type=>$attributes){ |
256
|
|
|
if(\is_int($type)) |
257
|
|
|
$this->fieldAs($i++,$attributes,[]); |
258
|
|
|
else{ |
259
|
|
|
$type=preg_replace('/\d/', '', $type ); |
260
|
|
|
$this->fieldAs($i++,$type,$attributes); |
261
|
|
|
} |
262
|
|
|
} |
263
|
|
|
}else{ |
264
|
|
|
foreach ($types as $type){ |
265
|
|
|
$this->fieldAs($i++,$type); |
266
|
|
|
} |
267
|
|
|
} |
268
|
|
|
} |
269
|
|
|
|
270
|
|
|
public function fieldAs($index,$type,$attributes=NULL){ |
271
|
|
|
$method="fieldAs".\ucfirst($type); |
272
|
|
|
if(\method_exists($this, $method)){ |
273
|
|
|
if(!\is_array($attributes)){ |
274
|
|
|
$attributes=[$index]; |
275
|
|
|
}else{ |
276
|
|
|
\array_unshift($attributes, $index); |
277
|
|
|
} |
278
|
|
|
\call_user_func_array([$this,$method], $attributes); |
279
|
|
|
} |
280
|
|
|
} |
281
|
|
|
|
282
|
|
|
public function fieldAsSubmit($index,$cssStyle=NULL,$url=NULL,$responseElement=NULL,$attributes=NULL){ |
283
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption) use ($url,$responseElement,$cssStyle,$attributes){ |
284
|
|
|
$button=new HtmlButton($id,$caption,$cssStyle); |
285
|
|
|
$this->_buttonAsSubmit($button,"click",$url,$responseElement,@$attributes["ajax"]); |
286
|
|
|
return $button; |
287
|
|
|
}, $index,$attributes,"submit"); |
288
|
|
|
} |
289
|
|
|
|
290
|
|
|
public function fieldAsButton($index,$cssStyle=NULL,$attributes=NULL){ |
291
|
|
|
return $this->_fieldAs(function($id,$name,$value,$caption) use ($cssStyle){ |
292
|
|
|
$button=new HtmlButton($id,$value,$cssStyle); |
293
|
|
|
return $button; |
294
|
|
|
}, $index,$attributes,"button"); |
295
|
|
|
} |
296
|
|
|
} |
297
|
|
|
|
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.