XCL Web Application Platform 2.5.0
The XoopsCube Legacy Project
Loading...
Searching...
No Matches
form.php
1<?php
13
14class XoopsForm
15{
23 public $_action;
24
29 public $_method;
30
35 public $_name;
36
41 public $_title;
42
47 public $_elements = [];
48
53 public $_extra;
54
59 public $_required = [];
60
62
72 public function __construct($title, $name, $action, $method= 'post', $addtoken = false)
73 {
74 $this->_title = $title;
75 $this->_name = $name;
76 $this->_action = $action;
77 $this->_method = $method;
78 if (false != $addtoken) {
79 $this->addElement(new XoopsFormHiddenToken());
80 }
81 }
82 public function XoopsForm($title, $name, $action, $method= 'post', $addtoken = false)
83 {
84 return self::__construct($title, $name, $action, $method, $addtoken);
85 }
86
92 public function getTitle()
93 {
94 return $this->_title;
95 }
96
102 public function getName()
103 {
104 return $this->_name;
105 }
106
112 public function getAction()
113 {
114 return $this->_action;
115 }
116
122 public function getMethod()
123 {
124 return $this->_method;
125 }
126
133 public function addElement(&$formElement, $required=false)
134 {
135 if (is_string($formElement)) {
136 $this->_elements[] = $formElement;
137 } elseif ($formElement instanceof \xoopsformelement) {
138 $this->_elements[] =& $formElement;
139 if ($required) {
140 if (!$formElement->isContainer()) {
141 $this->_required[] =& $formElement;
142 } else {
143 $required_elements =& $formElement->getRequired();
144 $count = count($required_elements);
145 for ($i = 0 ; $i < $count; $i++) {
146 $this->_required[] =& $required_elements[$i];
147 }
148 }
149 }
150 }
151 }
152
159 public function &getElements($recurse = false)
160 {
161 if (!$recurse) {
162 return $this->_elements;
163 } else {
164 $ret = [];
165 $count = count($this->_elements);
166 for ($i = 0; $i < $count; $i++) {
167 if (!is_object($this->_elements[$i])) {
168 $ret[] = $this->_elements[$i];
169 }
170 if (!$this->_elements[$i]->isContainer()) {
171 $ret[] =& $this->_elements[$i];
172 } else {
173 $elements =& $this->_elements[$i]->getElements(true);
174 $count2 = count($elements);
175 for ($j = 0; $j < $count2; $j++) {
176 $ret[] =& $elements[$j];
177 }
178 unset($elements);
179 }
180 }
181 return $ret;
182 }
183 }
184
190 public function getElementNames()
191 {
192 $ret = [];
193 $elements =& $this->getElements(true);
194 $count = count($elements);
195 for ($i = 0; $i < $count; $i++) {
196 $ret[] = $elements[$i]->getName();
197 }
198 return $ret;
199 }
200
207 public function &getElementByName($name)
208 {
209 $elements =& $this->getElements(true);
210 $count = count($elements);
211 for ($i = 0; $i < $count; $i++) {
212 if ($name == $elements[$i]->getName()) {
213 return $elements[$i];
214 }
215 }
216 $ret = false;
217 return $ret;
218 }
219
226 public function setElementValue($name, $value)
227 {
228 $ele =& $this->getElementByName($name);
229 if (is_object($ele) && method_exists($ele, 'setValue')) {
230 $ele->setValue($value);
231 }
232 }
233
239 public function setElementValues($values)
240 {
241 if (is_array($values) && !empty($values)) {
242 // will not use getElementByName() for performance..
243 $elements =& $this->getElements(true);
244 $count = count($elements);
245 for ($i = 0; $i < $count; $i++) {
246 $name = $elements[$i]->getName();
247 if ($name && isset($values[$name]) && method_exists($elements[$i], 'setValue')) {
248 $elements[$i]->setValue($values[$name]);
249 }
250 }
251 }
252 }
253
260 public function &getElementValue($name)
261 {
262 $ele =& $this->getElementByName($name);
263 if (is_object($ele) && method_exists($ele, 'getValue')) {
264 return $ele->getValue($value);
265 }
266
267 $ret = null;
268 return $ret;
269 }
270
276 public function &getElementValues()
277 {
278 // will not use getElementByName() for performance..
279 $elements =& $this->getElements(true);
280 $count = count($elements);
281 $values = [];
282 for ($i = 0; $i < $count; $i++) {
283 $name = $elements[$i]->getName();
284 if ($name && method_exists($elements[$i], 'getValue')) {
285 $values[$name] =& $elements[$i]->getValue();
286 }
287 }
288 return $values;
289 }
290
296 public function setExtra($extra)
297 {
298 $this->_extra = ' ' . $extra;
299 }
300
306 public function &getExtra()
307 {
308 if (isset($this->_extra)) {
309 $ret =& $this->_extra;
310 } else {
311 $ret = '';
312 }
313 return $ret;
314 }
315
321 public function setRequired(&$formElement)
322 {
323 $this->_required[] =& $formElement;
324 }
325
331 public function &getRequired()
332 {
333 return $this->_required;
334 }
335
344 public function insertBreak($extra = null)
345 {
346 }
347
355 public function render()
356 {
357 }
358
362 public function display()
363 {
364 echo $this->render();
365 }
366
373 public function renderValidationJS($withtags = true)
374 {
375 $root =& XCube_Root::getSingleton();
376 $renderSystem =& $root->getRenderSystem(XOOPSFORM_DEPENDENCE_RENDER_SYSTEM);
377
378 $renderTarget =& $renderSystem->createRenderTarget();
379
380 $renderTarget->setAttribute('legacy_module', 'legacy');
381 $renderTarget->setTemplateName('legacy_xoopsform_opt_validationjs.html');
382 $renderTarget->setAttribute('form', $this);
383 $renderTarget->setAttribute('withtags', $withtags);
384
385 $required =& $this->getRequired();
386 $reqcount = count($required);
387
388 $renderTarget->setAttribute('required', $required);
389 $renderTarget->setAttribute('required_count', $reqcount);
390
391 $renderSystem->render($renderTarget);
392
393 return $renderTarget->getResult();
394
395
396 $js = '';
397 if ($withtags) {
398 $js .= "\n<!-- Start Form Validation JavaScript //-->\n<script type='text/javascript'>\n<!--//\n";
399 }
401 $formname = $this->getName();
402 $required =& $this->getRequired();
403 $reqcount = count($required);
404 $js .= "function xoopsFormValidate_{$formname}() {
405 myform = window.document.$formname;\n";
406 for ($i = 0; $i < $reqcount; $i++) {
407 $eltname = $required[$i]->getName();
408 $eltcaption = trim($required[$i]->getCaption());
409 $eltmsg = empty($eltcaption) ? sprintf(_FORM_ENTER, $eltname) : sprintf(_FORM_ENTER, $eltcaption);
410 $eltmsg = str_replace('"', '\"', stripslashes($eltmsg));
411 $js .= "if ( myform.{$eltname}.value == \"\" ) "
412 . "{ window.alert(\"{$eltmsg}\"); myform.{$eltname}.focus(); return false; }\n";
413 }
414 $js .= "return true;\n}\n";
415 if ($withtags) {
416 $js .= "//--></script>\n<!-- End Form Validation JavaScript //-->\n";
417 }
418 return $js;
419 }
420
426 public function assign(&$tpl)
427 {
428 $i = 0;
429 $elements = [];
430 foreach ($this->getElements() as $ele) {
431 $n = ('' != $ele->getName()) ? $ele->getName() : $i;
432 $elements[$n]['name'] = $ele->getName();
433 $elements[$n]['caption'] = $ele->getCaption();
434 $elements[$n]['body'] = $ele->render();
435 $elements[$n]['hidden'] = $ele->isHidden();
436 if ('' != $ele->getDescription()) {
437 $elements[$n]['description'] = $ele->getDescription();
438 }
439 $i++;
440 }
441 $js = $this->renderValidationJS();
442 $tpl->assign($this->getName(), ['title' => $this->getTitle(), 'name' => $this->getName(), 'action' => $this->getAction(), 'method' => $this->getMethod(), 'extra' => 'onsubmit="return xoopsFormValidate_' . $this->getName() . '();"' . $this->getExtra(), 'javascript' => $js, 'elements' => $elements]
443 );
444 }
445}
insertBreak($extra=null)
Definition form.php:344
setRequired(&$formElement)
Definition form.php:321
& getElementValue($name)
Definition form.php:260
setElementValue($name, $value)
Definition form.php:226
setExtra($extra)
Definition form.php:296
& getExtra()
Definition form.php:306
display()
Definition form.php:362
& getElements($recurse=false)
Definition form.php:159
getAction()
Definition form.php:112
getName()
Definition form.php:102
getElementNames()
Definition form.php:190
setElementValues($values)
Definition form.php:239
& getElementValues()
Definition form.php:276
getTitle()
Definition form.php:92
renderValidationJS($withtags=true)
Definition form.php:373
addElement(&$formElement, $required=false)
Definition form.php:133
assign(&$tpl)
Definition form.php:426
& getRequired()
Definition form.php:331
& getElementByName($name)
Definition form.php:207
__construct($title, $name, $action, $method='post', $addtoken=false)
Definition form.php:72
getMethod()
Definition form.php:122
render()
Definition form.php:355