/** * Lee el parametro 'order' del request y arma el ORDER BY de la sql * Solo permite ordenar por los campos definidos en el constructor (evitar inyeccion sql). * * @param null $default si no hay un param order, se usa el default * * @throws rest_error * * @return string */ public function get_sql_order_by($default = null) { $get_order = rest::request()->get("order"); $usar_default = false; if (trim($get_order) == '') { if ($default !== null) { $usar_default = true; $get_order = $default; } else { return ""; } } $sql_order_by = array(); $get_campos = explode(",", $get_order); foreach ($get_campos as $get_campo) { $get_campo = trim($get_campo); $signo = substr($get_campo, 0, 1); switch ($signo) { case '+': $signo = " ASC"; break; case '-': $signo = " DESC"; break; default: throw new rest_error(400, "Parámetro 'order' invalido. Se esperaba + o - y se recibio '{$signo}'"); } $campo = substr($get_campo, 1); if ($usar_default) { $sql_order_by[] = $campo . $signo; } elseif (!isset($this->campos_ordenables[$campo])) { throw new rest_error(400, "Parámetro 'order' invalido. No esta permitido ordenar por campo '{$campo}'"); } else { $alias_sql = $this->campos_ordenables[$campo]['alias_sql']; $sql_order_by[] = $alias_sql . $signo; } } if (empty($sql_order_by)) { return ""; } else { return "ORDER BY " . implode(', ', $sql_order_by); } }
/** * $relajar_ocultos boolean no checkea campos obligatorios cuando no se especifican */ protected function procesar_input_edicion($relajar_ocultos = false) { /**Validacion del input del usuario, de acuerdo a la especificacion de la API * La PersonaEditar tiene solo los campos editables, ej: el id no se puede setear */ $datos = rest::request()->get_body_json(); $spec_persona = $this->get_spec_persona(true, 'PersonaEditar'); rest_validador::validar($datos, $spec_persona, $relajar_ocultos); /**Transformo el input del usuario a formato del modelo, deshaciendo la hidratacion. * Por ejemplo, cambia el nombre de fecha_nacimiento (vista) a fecha_nac (modelo) * Se pueden requerir otros pasos, en casos mas complejos */ $datos = rest_hidratador::deshidratar_fila($datos, $spec_persona); return $datos; }