10 define(
'CH_WSB_FORM_METHOD_GET',
'get');
11 define(
'CH_WSB_FORM_METHOD_POST',
'post');
120 $this->aFormAttrs = isset(
$aInfo[
'form_attrs']) ?
$aInfo[
'form_attrs'] : array();
121 $this->aTableAttrs = isset(
$aInfo[
'table_attrs']) ?
$aInfo[
'table_attrs'] : array();
122 $this->aInputs = isset(
$aInfo[
'inputs']) ?
$aInfo[
'inputs'] : array();
123 $this->aParams = isset(
$aInfo[
'params']) ?
$aInfo[
'params'] : array();
126 $this->
id = $this->aFormAttrs[
'id'] = (!
empty($this->aFormAttrs[
'id']) ? $this->aFormAttrs[
'id'] : (!
empty($this->aFormAttrs[
'name']) ? $this->aFormAttrs[
'name'] :
'form_advanced'));
129 if (!isset($this->aFormAttrs[
'method']))
133 if (!isset($this->aFormAttrs[
'action']))
134 $this->aFormAttrs[
'action'] =
'';
136 $this->_sCheckerHelper = isset($this->aParams[
'checker_helper']) ? $this->aParams[
'checker_helper'] :
'';
141 'form_object' => $this,
142 'form_attrs' => &$this->aFormAttrs,
143 'table_attrs' => &$this->aTableAttrs,
144 'params' => &$this->aParams,
145 'inputs' => &$this->aInputs,
153 $oChecker->setFormMethod($this->aFormAttrs[
'method']);
156 $oChecker->enableFormCsrfChecking(isset($this->aParams[
'csrf'][
'disable']) && $this->aParams[
'csrf'][
'disable'] ===
true ?
false :
true);
157 $this->_isValid = $oChecker->check($this->aInputs);
160 $oChecker->fillWithValues($this->aInputs, $aValues);
164 'values' => $aValues,
165 'checker_object' => $oChecker,
166 'form_object' => $this,
167 'form_attrs' => &$this->aFormAttrs,
168 'table_attrs' => &$this->aTableAttrs,
169 'params' => &$this->aParams,
170 'inputs' => &$this->aInputs,
179 $oChecker->setFormMethod($this->aFormAttrs[
'method']);
180 $sSql = $oChecker->dbInsert($this->aParams[
'db'], $this->aInputs, $aValsToAdd);
181 if (!$sSql)
return false;
187 'vals_to_add' => $aValsToAdd,
188 'checker_object' => $oChecker,
189 'form_object' => $this,
190 'form_attrs' => &$this->aFormAttrs,
191 'table_attrs' => &$this->aTableAttrs,
192 'params' => &$this->aParams,
193 'inputs' => &$this->aInputs,
200 function update ($val, $aValsToAdd = array())
203 $oChecker->setFormMethod($this->aFormAttrs[
'method']);
204 $sSql = $oChecker->dbUpdate($val, $this->aParams[
'db'], $this->aInputs, $aValsToAdd);
207 if (!($res =
db_res ($sSql)))
212 'vals_to_add' => $aValsToAdd,
213 'checker_object' => $oChecker,
214 'form_object' => $this,
215 'form_attrs' => &$this->aFormAttrs,
216 'table_attrs' => &$this->aTableAttrs,
217 'params' => &$this->aParams,
218 'inputs' => &$this->aInputs,
227 $f = &$this->aParams[
'db'];
235 $oChecker->setFormMethod($this->aFormAttrs[
'method']);
236 $a = $this->aInputs[
$sName];
238 return $oChecker->get ($a[
'name'], $a[
'db'][
'pass'], $a[
'db'][
'params'] ? $a[
'db'][
'params'] : array());
240 return $oChecker->get (
$sName);
266 return isset($aData[$sKey]) ? $aData[$sKey] :
false;
272 if(
$GLOBALS[
'MySQL']->
getParam(
'sys_security_form_token_enable') !=
'on' || defined(
'CH_WSB_CRON_EXECUTE'))
277 $iCsrfTokenLifetime = (int)
$GLOBALS[
'MySQL']->
getParam(
'sys_security_form_token_lifetime');
278 if($oSession->getValue(
'csrf_token') ===
false || ($iCsrfTokenLifetime != 0 &&
time() - (int)$oSession->getValue(
'csrf_token_time') > $iCsrfTokenLifetime)) {
280 $oSession->setValue(
'csrf_token',
$sToken);
281 $oSession->setValue(
'csrf_token_time',
time());
283 $sToken = $oSession->getValue(
'csrf_token');
292 return $oSession->getValue(
'csrf_token');
298 return $oSession->getValue(
'csrf_token_time');
311 $this->_bFormCsrfChecking =
true;
313 $sCheckerName = !
empty($sHelper) ? $sHelper :
'ChWsbFormCheckerHelper';
314 $this->_oChecker =
new $sCheckerName();
319 $this->_sFormMethod = $sMethod;
324 $this->_bFormCsrfChecking = $bFormCsrfChecking;
334 if(
$GLOBALS[
'MySQL']->
getParam(
'sys_security_form_token_enable') ==
'on' && !defined(
'CH_WSB_CRON_EXECUTE') && $this->_bFormCsrfChecking ===
true && ($mixedCsrfTokenSys =
ChWsbForm::getCsrfToken()) !==
false) {
336 unset($aInputs[
'csrf_token']);
338 if($mixedCsrfTokenUsr ===
false || $mixedCsrfTokenSys != $mixedCsrfTokenUsr)
342 foreach ($aInputs
as $k => $a) {
343 $a[
'name'] = str_replace(
'[]',
'', $a[
'name']);
346 $val = isset($_FILES[$a[
'name']]) ? $_FILES[$a[
'name']] :
'';
348 if (!isset ($a[
'checker'])) {
349 if ($a[
'type'] !=
'checkbox' && $a[
'type'] !=
'submit')
350 $aInputs[$k][
'value'] = $_FILES[$a[
'name']] ?
'' : $val;
354 $sCheckFunction = array($oChecker,
'check'.ucfirst($a[
'checker'][
'func']));
356 if (is_callable($sCheckFunction))
357 $bool = call_user_func_array ($sCheckFunction, $a[
'checker'][
'params'] ? array_merge(array($val), $a[
'checker'][
'params']) : array ($val));
361 if (is_string($bool)) {
363 $aInputs[$k][
'error'] = $bool;
366 $aInputs[$k][
'error'] = $a[
'checker'][
'error'];
368 $aInputs[$k][
'value'] = $_FILES[$a[
'name']] ?
'' : $val;
372 if (!$iErrors && (
'on' ==
getParam(
'sys_uridnsbl_enable') ||
'on' ==
getParam(
'sys_akismet_enable'))) {
374 foreach ($aInputs
as $k => $a) {
376 if ($a[
'type'] !=
'textarea')
379 $a[
'name'] = str_replace(
'[]',
'', $a[
'name']);
384 if ($oChecker->checkNoSpam($val))
388 $aInputs[$k][
'error'] = sprintf(
_t(
"_sys_spam_detected"), CH_WSB_URL_ROOT .
'contact.php');
393 return $iErrors ?
false :
true;
403 $mixedVal = call_user_func_array (array($this->_oChecker,
'pass'.ucfirst($sPass)), $aParams ? array_merge(array($val), $aParams) : array ($val));
404 if (is_array($mixedVal) &&
'select_multiple' ==
$sType)
405 $mixedVal = serialize($mixedVal);
414 foreach ($aInputs
as $k => $a) {
415 if (!isset ($a[
'db']))
continue;
416 $valClean = $this->
get ($a[
'name'], $a[
'db'][
'pass'], $a[
'db'][
'params'] ? $a[
'db'][
'params'] : array(), $a[
'type']);
417 $s .=
"`{$a['name']}` = '$valClean',";
418 $aInputs[$k][
'db'][
'value'] = $valClean;
420 foreach ($aValsToAdd
as $k => $val) {
421 $s .=
"`{$k}` = '$val',";
423 return $s ? substr (
$s, 0, -1) :
'';
426 function dbInsert (&$aDb, &$aInputs, $aValsToAdd = array())
428 if (!$aDb[
'table'])
return '';
430 if (!$sFields)
return '';
431 return "INSERT INTO `{$aDb['table']}` SET $sFields";
434 function dbUpdate ($val, &$aDb, &$aInputs, $aValsToAdd = array())
436 if (!$aDb[
'table'] || !$aDb[
'key'])
return '';
438 if (!$sFields)
return '';
439 return "UPDATE `{$aDb['table']}` SET $sFields WHERE `{$aDb['key']}` = '$val'";
444 foreach ($aInputs
as $k => $a) {
445 if (!isset($aValues[$k]))
continue;
446 $sMethod =
'display'.ucfirst($a[
'db'][
'pass']);
447 if (method_exists($this->_oChecker, $sMethod))
448 $aInputs[$k][
'value'] = call_user_func_array (array($this->_oChecker, $sMethod), $a[
'db'][
'params'] ? array_merge(array($aValues[$k]), $a[
'db'][
'params']) : array ($aValues[$k]));
450 $aInputs[$k][
'value'] = $aValues[$k];
452 if ($a[
'type'] ==
'select_box')
453 $aInputs[$k][
'value'] = explode (
';', $aInputs[$k][
'value']);
454 elseif ($a[
'type'] ==
'select_multiple')
455 $aInputs[$k][
'value'] = @unserialize($aInputs[$k][
'value']);
467 foreach (
$s as $k => $v) {
469 if ($iLen < $iLenMin || $iLen > $iLenMax)
475 return $iLen >= $iLenMin && $iLen <= $iLenMax ?
true :
false;
486 $s = str_replace(
'T',
' ',
$s);
487 $s = str_replace(
'Z',
':00',
$s);
495 foreach (
$s as $k => $v)
496 if (!preg_match($r, $v))
500 return preg_match($r,
$s) ?
true :
false;
513 return filter_var(
$s, FILTER_VALIDATE_EMAIL) !==
false;
527 $sSessKey =
'captcha-' . $oCaptcha->getUserResponse();
528 if ($iSessVal = $oSession->getValue($sSessKey)) {
529 $oSession->setValue($sSessKey, --$iSessVal);
534 if (!$oCaptcha->check ())
540 $oSession->setValue($sSessKey, 3);
555 foreach (
$s as $k => $v) {
556 $a[$k] = (int)trim($v);
567 foreach (
$s as $k => $v) {
579 foreach (
$s as $k => $v) {
591 foreach (
$s as $k => $v) {
601 list($iYear, $iMonth, $iDay) = explode(
'-',
$s);
603 $iMonth = (int)$iMonth;
604 $iYear = (int)$iYear;
605 $iRet = $sFunc (0, 0, 0, $iMonth, $iDay, $iYear);
606 return $iRet > 0 ? $iRet : 0;
613 foreach (
$s as $k => $v) {
625 foreach (
$s as $k => $v) {
635 if (preg_match(
'#(\d+)\-(\d+)\-(\d+)[\sT]{1}(\d+):(\d+)#',
$s, $m)) {
641 $iRet = $sFunc ($iH, $iM, 0, $iMonth, $iDay, $iYear);
642 return $iRet > 0 ? $iRet : 0;
651 foreach (
$s as $k => $v) {
663 foreach (
$s as $k => $v) {
675 foreach (
$s as $k => $v) {
687 foreach (
$s as $k => $v) {
697 if (preg_match ($r,
$s, $m)) {
707 foreach (
$s as $k => $v) {
719 return implode(
",", $aTags);
726 foreach ($aa
as $k => $v)
740 foreach (
$s as $k => $v) {
741 $a[$k] = $v ==
'on' ?
true :
false;
745 return $s ==
'on' ?
true :
false;
751 return date(
"Y-m-d", $i);
756 return date(
"Y-m-d H:i", $i);
761 return gmdate(
"Y-m-d", $i);
766 return gmdate(
"Y-m-d H:i", $i);
776 foreach ($a
as $k => $v)