/** * @param mixed $value * @param ColumnSchema $info * @param array $params * * @return int|null|string * @throws BadRequestException */ protected function parseFilterValue($value, ColumnSchema $info, array &$params) { if (0 !== strpos($value, ':')) { // remove quoting on strings if used, i.e. 1.x required them if (is_string($value) && (0 === strcmp("'" . trim($value, "'") . "'", $value) || 0 === strcmp('"' . trim($value, '"') . '"', $value))) { $value = trim($value, '"\''); } // if not already a replacement parameter, evaluate it // $value = $this->dbConn->getSchema()->parseValueForSet($value, $info); switch ($cnvType = DbUtilities::determinePhpConversionType($info->type)) { case 'int': if (!is_int($value)) { if (!ctype_digit($value)) { throw new BadRequestException("Field '{$info->getName(true)}' must be a valid integer."); } else { $value = intval($value); } } break; case 'time': $cfgFormat = \Config::get('df.db_time_format'); $outFormat = 'H:i:s.u'; $value = DbUtilities::formatDateTime($outFormat, $value, $cfgFormat); break; case 'date': $cfgFormat = \Config::get('df.db_date_format'); $outFormat = 'Y-m-d'; $value = DbUtilities::formatDateTime($outFormat, $value, $cfgFormat); break; case 'datetime': $cfgFormat = \Config::get('df.db_datetime_format'); $outFormat = 'Y-m-d H:i:s'; $value = DbUtilities::formatDateTime($outFormat, $value, $cfgFormat); break; case 'timestamp': $cfgFormat = \Config::get('df.db_timestamp_format'); $outFormat = 'Y-m-d H:i:s'; $value = DbUtilities::formatDateTime($outFormat, $value, $cfgFormat); break; default: break; } $paramName = ':cf_' . count($params); // positionally unique $params[$paramName] = $value; $value = $paramName; } return $value; }
/** * @param mixed $value * @param ColumnSchema $field_info * * @return mixed * @throws \DreamFactory\Core\Exceptions\BadRequestException * @throws \Exception */ protected function parseValueForSet($value, $field_info) { if (!is_null($value) && !$value instanceof Expression) { $value = $this->dbConn->getSchema()->parseValueForSet($value, $field_info); switch ($cnvType = DbUtilities::determinePhpConversionType($field_info->type)) { case 'int': if (!is_int($value)) { if ('' === $value && $field_info->allowNull) { $value = null; } elseif (!ctype_digit($value)) { if (!is_float($value)) { // bigint catch as float throw new BadRequestException("Field '{$field_info->getName(true)}' must be a valid integer."); } } else { $value = intval($value); } } break; case 'time': $cfgFormat = Config::get('df.db_time_format'); $outFormat = 'H:i:s.u'; $value = DbUtilities::formatDateTime($outFormat, $value, $cfgFormat); break; case 'date': $cfgFormat = Config::get('df.db_date_format'); $outFormat = 'Y-m-d'; $value = DbUtilities::formatDateTime($outFormat, $value, $cfgFormat); break; case 'datetime': $cfgFormat = Config::get('df.db_datetime_format'); $outFormat = 'Y-m-d H:i:s'; $value = DbUtilities::formatDateTime($outFormat, $value, $cfgFormat); break; case 'timestamp': $cfgFormat = Config::get('df.db_timestamp_format'); $outFormat = 'Y-m-d H:i:s'; $value = DbUtilities::formatDateTime($outFormat, $value, $cfgFormat); break; default: break; } } return $value; }