예제 #1
0
 /**
  * Se consume en GET /personas/{id}/deportes
  * @summary Retorna todos los deportes que practica la persona.
  * @responses 200 array {"$ref":"Deporte"}
  * @responses 404 No se pudo encontrar a la persona
  */
 function get_list($id_persona)
 {
     //si estuviese en el padre, se llamaria como get_deportes_list
     $deportes = modelo_persona::get_deportes($id_persona);
     $deportes_vista = rest_hidratador::hidratar(current($this->_get_modelos()), $deportes);
     rest::response()->get($deportes_vista);
 }
예제 #2
0
 /**
  * Se consume en GET /personas/{id}/juego_de_mesa
  * @summary Retorna todos los juegos de mesa que juega la persona.
  * @responses 200 array {"$ref":"Juego"}
  * @responses 404 No se pudo encontrar a la persona
  */
 function get_list($id_persona)
 {
     $juegos_mesa = modelo_persona::get_juegos($id_persona, 1);
     if ($juegos_mesa && !empty($juegos_mesa)) {
         $juegos_mesa_vista = rest_hidratador::hidratar(current($this->_get_modelos()), $juegos_mesa);
         rest::response()->get($juegos_mesa_vista);
     } else {
         rest::response()->not_found();
     }
 }
예제 #3
0
 /**
  * Dado el username, retorna el api_key.
  * @param $api_key
  * @return mixed string\null. El api_key o NULL si el usuario no existe
  */
 function get_usuario_api_key($api_key)
 {
     $usuarios_ini = toba_modelo_rest::get_ini_usuarios($this->modelo_proyecto);
     foreach ($usuarios_ini->get_entradas() as $username => $u) {
         if (isset($u['api_key']) && $u['api_key'] === $api_key) {
             return $username;
         }
     }
     rest::app()->logger->info("No se encontro 'api_key = {$api_key}' para ningún usuario de rest_usuarios.ini");
     return NULL;
 }
예제 #4
0
 /**
  * @param $path
  *
  * @return anotaciones_docs
  */
 protected function add_modelos($path)
 {
     $lector = rest::app()->lector_recursos;
     //new lector_recursos_archivo($this->api_root);
     $archivo = $lector->get_recurso(explode('/', $path));
     $i = new rest_instanciador();
     $i->archivo = $archivo['archivo'];
     $objeto = $i->get_instancia();
     if (method_exists($objeto, '_get_modelos')) {
         $modelo = new modelo_recursos();
         $specs = $modelo->to_swagger($objeto->_get_modelos());
         $this->list['definitions'] = array_merge($this->list['definitions'], $specs);
     } else {
         rest::app()->logger->debug('El objeto no tiene el metodo _get_modelos. Clase: ' . get_class($objeto));
         return array();
     }
 }
예제 #5
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);
     }
 }
예제 #6
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;
 }