Passed
Push — master ( 277c03...b6fa43 )
by Jean-Christophe
04:42
created

FieldAsTrait::fieldAsIcon()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
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"]);
0 ignored issues
show
Unused Code Comprehensibility introduced by
100% of this comment could be valid code. Did you maybe forget this after debugging?

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.

Loading history...
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