示例#1
0
 /**
  * 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);
     }
 }
示例#2
0
 /**
  * $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;
 }