fields = $fields; $this->errorFields = array(); $this->isLocaleField = $isLocaleField; $this->userFunction = $userFunction; $this->additionalArguments = $additionalArguments; $this->complementReturn = $complementReturn; } /** * Check if field value is valid. * Value is valid if it is empty and optional or is in the set of accepted values. * @return boolean */ function isValid() { if ($this->type == 'optional') { return true; } $ret = true; $data = $this->form->getData($this->field); if (!is_array($data)) return false; foreach ($data as $key => $value) { if (count($this->fields) == 0) { if ($this->isLocaleField) { $ret = call_user_func_array($this->userFunction, array_merge(array($value), $key, $this->additionalArguments)); } else { $ret = call_user_func_array($this->userFunction, array_merge(array($value), $this->additionalArguments)); } $ret = $this->complementReturn ? !$ret : $ret; if (!$ret) { if ($this->isLocaleField) { array_push($this->errorFields, array($key => "{$this->field}[{$key}]")); } else { array_push($this->errorFields, "{$this->field}[{$key}]"); } } } else { foreach ($this->fields as $field) { if ($this->isLocaleField) { $ret = call_user_func_array($this->userFunction, array_merge(array($value[$field]), $key, $this->additionalArguments)); } else { $ret = call_user_func_array($this->userFunction, array_merge(array($value[$field]), $this->additionalArguments)); } $ret = $this->complementReturn ? !$ret : $ret; if (!$ret) { if ($this->isLocaleField) { array_push($this->errorFields, array($key => "{$this->field}[{$key}][{$field}]")); } else { array_push($this->errorFields, "{$this->field}[{$key}][{$field}]"); } } } } } return $ret; } /** * Get array of fields where an error occurred. * @return array */ function getErrorFields() { return $this->errorFields; } /** * Is the field an array. * @return boolean */ function isArray() { return is_array($this->form->getData($this->field)); } /** * Is it a multilingual-capable field. * @return boolean */ function isLocaleField() { return $this->isLocaleField; } } ?>