00001 <?php
00002
00015
00016
00017
00018 import('form.validation.FormValidator');
00019
00020 class FormValidatorArrayCustom extends FormValidator {
00021
00023 var $fields;
00024
00026 var $errorFields;
00027
00029 var $isLocaleField;
00030
00032 var $userFunction;
00033
00035 var $additionalArguments;
00036
00038 var $complementReturn;
00039
00046 function FormValidatorArrayCustom(&$form, $field, $type, $message, $userFunction, $additionalArguments = array(), $complementReturn = false, $fields = array(), $isLocaleField = false) {
00047 parent::FormValidator($form, $field, $type, $message);
00048 $this->fields = $fields;
00049 $this->errorFields = array();
00050 $this->isLocaleField = $isLocaleField;
00051 $this->userFunction = $userFunction;
00052 $this->additionalArguments = $additionalArguments;
00053 $this->complementReturn = $complementReturn;
00054 }
00055
00061 function isValid() {
00062 if ($this->type == 'optional') {
00063 return true;
00064 }
00065
00066 $ret = true;
00067 $data = $this->form->getData($this->field);
00068 if (!is_array($data)) return false;
00069 foreach ($data as $key => $value) {
00070 if (count($this->fields) == 0) {
00071 if ($this->isLocaleField) {
00072 $ret = call_user_func_array($this->userFunction, array_merge(array($value), $key, $this->additionalArguments));
00073 } else {
00074 $ret = call_user_func_array($this->userFunction, array_merge(array($value), $this->additionalArguments));
00075 }
00076 $ret = $this->complementReturn ? !$ret : $ret;
00077 if (!$ret) {
00078 if ($this->isLocaleField) {
00079 array_push($this->errorFields, array($key => "{$this->field}[{$key}]"));
00080 } else {
00081 array_push($this->errorFields, "{$this->field}[{$key}]");
00082 }
00083 }
00084 } else {
00085 foreach ($this->fields as $field) {
00086 if ($this->isLocaleField) {
00087 $ret = call_user_func_array($this->userFunction, array_merge(array($value[$field]), $key, $this->additionalArguments));
00088 } else {
00089 $ret = call_user_func_array($this->userFunction, array_merge(array($value[$field]), $this->additionalArguments));
00090 }
00091 $ret = $this->complementReturn ? !$ret : $ret;
00092 if (!$ret) {
00093 if ($this->isLocaleField) {
00094 array_push($this->errorFields, array($key => "{$this->field}[{$key}][{$field}]"));
00095 } else {
00096 array_push($this->errorFields, "{$this->field}[{$key}][{$field}]");
00097 }
00098 }
00099 }
00100 }
00101 }
00102 return $ret;
00103 }
00104
00109 function getErrorFields() {
00110 return $this->errorFields;
00111 }
00112
00117 function isArray() {
00118 return is_array($this->form->getData($this->field));
00119 }
00120
00125 function isLocaleField() {
00126 return $this->isLocaleField;
00127 }
00128 }
00129
00130 ?>