/** * @see Lumine_Validator_AbstractValidator::execute() */ public function execute(Lumine_Base $obj) { $value = $this->getFieldValue($obj); if (!preg_match('@^((\\d{2}\\/\\d{2}\\/\\d{4})|(\\d{4}-\\d{2}-\\d{2})) (\\d{2}:\\d{2}(:\\d{2})?)$@', $value, $reg)) { return false; // se digitou no formato com barras } else { if (!empty($reg[2])) { list($dia, $mes, $ano) = explode('/', $reg[2]); // se nao for formato brasileiro e norte-americano if (!checkdate($mes, $dia, $ano) && !checkdate($dia, $mes, $ano)) { return false; } // se digitou no formato ISO } else { if (!empty($reg[3])) { list($ano, $mes, $dia) = explode('-', $reg[3]); // se for uma data valida if (!checkdate($mes, $dia, $ano)) { return false; } } } } if (!is_null($this->minDate) || !is_null($this->maxDate)) { $f = '%Y-%m-%d %H:%I:%S'; $resultTime = strtotime(Lumine_Util::FormatDateTime($value, $f)); if (!is_null($this->minDate) && $resultTime < strtotime(Lumine_Util::FormatDateTime($this->minDate, $f))) { return false; } if (!is_null($this->maxDate) && $resultTime > strtotime(Lumine_Util::FormatDateTime($this->maxDate, $f))) { return false; } } return true; }
/** * recupera o valor ja formatado para o banco * * @author Hugo Ferreira da Silva * @link http://www.hufersil.com.br/ * @param string $key * @param mixed $val * @return mixed */ private function getStrictValue($key, $val) { try { $res = $this->metadata()->getField($key); if ($val instanceof Lumine_Base || gettype($val) == 'NULL') { //$this->_dataholder[ $key ] = $val; return $val; } switch ($res['type']) { case 'int': case 'integer': case 'boolean': case 'bool': $val = sprintf('%d', $val); break; case 'float': case 'double': $val = sprintf('%f', $val); break; case 'datetime': $val = Lumine_Util::FormatDateTime($val); break; case 'date': if (preg_match('@^(\\d{2})/(\\d{2})/(\\d{4})$@', $val, $reg)) { if (checkdate($reg[2], $reg[1], $reg[3])) { $val = "{$reg['3']}-{$reg['2']}-{$reg['1']}"; } else { $val = "{$reg['3']}-{$reg['1']}-{$reg['2']}"; } } else { if (preg_match('@^(\\d{4})-(\\d{2})-(\\d{2})$@', $val, $reg)) { $val = $val; } else { if (is_numeric($val)) { $val = date('Y-m-d', $val); } else { $val = date('Y-m-d', strtotime($val)); } } } break; } // $this->_dataholder[ $key ] = $val; return $val; } catch (Exception $e) { // $this->_dataholder[ $key ] = $val; return $val; } }
/** * Faz o parse do valor para SQL * * @author Hugo Ferreira da Silva * @link http://www.hufersil.com.br/ * @param Lumine_Base|array $obj * @param mixed $val * @param string $type * @param boolean $islike * @return mixed */ public static function getParsedValue($obj, $val, $type, $islike = false, $usingDefault = false) { if (is_null($val) == true) { return 'NULL'; } // se esta informando atraves de um valor padrao if ($usingDefault && !is_array($val) && !is_object($val)) { // pegamos o prefixo do valor $prefix = substr($val, 0, strlen(Lumine::DEFAULT_VALUE_FUNCTION_IDENTIFIER)); // se for para ser aplicado como uma funcao do banco if ($prefix == Lumine::DEFAULT_VALUE_FUNCTION_IDENTIFIER) { // removemos o prefixo e devolvemos o valor que sera usado como funcao return str_replace($prefix, '', $val); } } switch ($type) { case 'smallint': case 'int': case 'integer': $val = sprintf('%d', $val); break; case 'float': case 'double': $val = sprintf('%f', $val); break; case 'date': /* if(is_numeric($val)) { $val = "'" . date('Y-m-d', $val) . "'"; } else { $val = "'" . date('Y-m-d', strtotime($val)) . "'"; }*/ $val = "'" . Lumine_Util::FormatDate($val, '%Y-%m-%d') . "'"; break; case 'datetime': /* if(is_numeric($val)) { $val = "'" . date('Y-m-d H:i:s', $val) . "'"; } else { $val = "'" . date('Y-m-d H:i:s', strtotime($val)) . "'"; } */ $val = "'" . Lumine_Util::FormatDateTime($val, '%Y-%m-%d %H:%M:%S') . "'"; break; case 'time': $val = Lumine_Util::FormatTime($val, '%H:%M:%S'); $val = "'" . $val . "'"; break; case 'boolean': $val = sprintf("'%d'", $val); break; case 'string': case 'text': case 'varchar': case 'char': default: if ($islike == true) { $val = "'%" . $obj->_getConnection()->escape($val) . "%'"; } else { $val = "'" . $obj->_getConnection()->escape($val) . "'"; } break; } return $val; }