public function index()
 {
     $auth_token = \Request::header('authorization');
     $user = \User::where('auth_token', '=', $auth_token)->first();
     // obtener los permisos del usuario
     $idpermisos = \User::getPermisosPorUsuarioId($user->id)->get()->lists('idpermisos');
     // obtener los eventos de acuerdo a los permisos del usuario
     $eventos = [];
     if (in_array(12, $idpermisos)) {
         // tiene el permiso "listar (todos los) eventos"
         $eventos = \Evento::all();
     } elseif (in_array(15, $idpermisos)) {
         // tiene el permiso "mis eventos"
         $eventos = \Asistencia::getEventosPorUser($user->id)->get();
     }
     $response = [];
     foreach ($eventos as $e) {
         // obtener los documentos del evento
         $docs = \DocumentosEvento::getDocumentosPorEvento($e->ideventos)->get();
         foreach ($docs as $d) {
             // obtener hace cuantos dias se subio el documento
             $from = new \DateTime();
             $from->setTimestamp(strtotime($d->created_at));
             $to = new \DateTime('today');
             $dias = $from->diff($to)->d;
             // obtener los usuarios asignados al documento (al evento)
             $users = [];
             $usuarios = \Asistencia::getUsersPorEvento($e->ideventos)->get();
             foreach ($usuarios as $u) {
                 $perfiles = \User::getPerfilesPorUsuario2($u->id)->get();
                 $perfiles_array = [];
                 foreach ($perfiles as $perfil) {
                     $perfiles_array[] = ['id' => $perfil->idperfiles, 'name' => $perfil->nombre];
                 }
                 // verificar si el usuario ha visto el documento
                 $visto = \Visualizacion::getVisualizacionesPorUserPorEventoPorDocumento($u->id, $e->ideventos, $d->iddocumentos)->first();
                 $users[] = ['id' => $u->id, 'names' => $u->nombres, 'last_name' => $u->apellido_pat, 'username' => $u->num_documento, 'profiles' => $perfiles_array, 'seen' => $visto ? 1 : 0];
             }
             $response[] = ['id' => $d->iddocumentos, 'name' => $d->titulo, 'url' => $d->ruta . $d->nombre_archivo, 'upload_date' => 'Hace ' . $dias . ' día' . ($dias != 1 ? 's' : '') . ', ' . date('h:i A', $from->getTimestamp()), 'size' => $d->peso . ' KB', 'users' => $users];
         }
     }
     return \Response::json($response, 200);
 }
 public function submit_edit_user()
 {
     if (Auth::check()) {
         $data["inside_url"] = Config::get('app.inside_url');
         $data["user"] = Session::get('user');
         $data["permisos"] = Session::get('permisos');
         if (in_array('side_nuevo_usuario', $data["permisos"])) {
             // Validate the info, create rules for the inputs
             $attributes = array('idtipo_identificacion' => 'Tipo de identificación', 'num_documento' => 'Número de Documento', 'email' => 'E-mail', 'nombres' => 'Nombres', 'apellido_pat' => 'Apellido Paterno', 'apellido_mat' => 'Apellido Materno', 'direccion' => 'Dirección', 'telefono' => 'Teléfono', 'celular' => 'Celular', 'perfiles' => 'Perfiles');
             $messages = array();
             $rules = array('idtipo_identificacion' => 'required', 'num_documento' => 'numeric|digits_between:8,16|unique:users', 'email' => 'email|max:100|unique:users', 'nombres' => 'required|alpha_spaces|min:2|max:100', 'apellido_pat' => 'required|alpha_spaces|min:2|max:100', 'apellido_mat' => 'required|alpha_spaces|min:2|max:100', 'direccion' => 'required|max:150', 'telefono' => 'numeric|digits_between:7,20', 'celular' => 'numeric|digits_between:7,20', 'perfiles' => 'required');
             // Run the validation rules on the inputs from the form
             $validator = Validator::make(Input::all(), $rules, $messages, $attributes);
             // If the validator fails, redirect back to the form
             $user_id = Input::get('user_id');
             if ($validator->fails()) {
                 return Redirect::to("user/edit_user/" . $user_id)->withErrors($validator)->withInput(Input::all());
             } else {
                 $password = Input::get('password');
                 $user = User::find($user_id);
                 if (!empty(Input::get('email'))) {
                     $user->email = Input::get('email');
                 }
                 if (!empty($password)) {
                     $user->password = Hash::make($password);
                 }
                 if (!empty(Input::get('num_documento'))) {
                     $user->num_documento = Input::get('num_documento');
                 }
                 $user->idtipo_identificacion = Input::get('idtipo_identificacion');
                 $user->save();
                 $persona = Persona::find($user->idpersona);
                 $persona->nombres = Input::get('nombres');
                 $persona->apellido_pat = Input::get('apellido_pat');
                 $persona->apellido_mat = Input::get('apellido_mat');
                 if (!empty(Input::get('fecha_nacimiento'))) {
                     $persona->fecha_nacimiento = date('Y-m-d H:i:s', strtotime(Input::get('fecha_nacimiento')));
                 }
                 $persona->direccion = Input::get('direccion');
                 $persona->telefono = Input::get('telefono');
                 $persona->celular = Input::get('celular');
                 $persona->latitud = Input::get('latitud');
                 $persona->longitud = Input::get('longitud');
                 $persona->save();
                 // Elimino los perfiles anteriores
                 $perfiles_usuario = User::getPerfilesPorUsuario2($user->id)->get();
                 foreach ($perfiles_usuario as $perfil_usuario) {
                     $p = UsersPerfil::find($perfil_usuario->idusers_perfiles);
                     $p->delete();
                 }
                 // Registro los perfiles seleccionados
                 $perfiles = Input::get('perfiles');
                 foreach ($perfiles as $perfil) {
                     $users_perfil = new UsersPerfil();
                     $users_perfil->idusers = $user->id;
                     $users_perfil->idperfiles = $perfil;
                     $users_perfil->save();
                 }
                 // Llamo a la función para registrar el log de auditoria
                 $descripcion_log = "Se editó el usuario con id {{$user->id}}";
                 Helpers::registrarLog(4, $descripcion_log);
                 Session::flash('message', 'Se editó correctamente la información.');
                 return Redirect::to("user/edit_user/" . $user_id);
             }
         } else {
             // Llamo a la función para registrar el log de auditoria
             $descripcion_log = "Se intentó acceder a la ruta '" . Request::path() . "' por el método '" . Request::method() . "'";
             Helpers::registrarLog(10, $descripcion_log);
             Session::flash('error', 'Usted no tiene permisos para realizar dicha acción.');
             return Redirect::to('/dashboard');
         }
     } else {
         return View::make('error/error');
     }
 }
 /**
  * Display a listing of the resource.
  *
  * @return Response
  */
 public function sesiones()
 {
     // obtener usuario que esta haciendo la peticion
     $auth_token = \Request::header('authorization');
     $user = User::where('auth_token', '=', $auth_token)->first();
     // obtener los permisos del usuario
     $idpermisos = User::getPermisosPorUsuarioId($user->id)->get()->lists('idpermisos');
     // obtener las sesiones de acuerdo a los permisos del usuario
     $sesiones = [];
     if (in_array(12, $idpermisos)) {
         // tiene el permiso "listar (todos los) eventos"
         $sesiones = \Evento::all();
     } elseif (in_array(15, $idpermisos)) {
         // tiene el permiso "mis eventos"
         $sesiones = \Asistencia::getEventosPorUser($user->id)->get();
     }
     $response = [];
     foreach ($sesiones as $sesion) {
         //obtener los puntos de reunion de la sesion
         //$idpuntos = PuntoEvento::where('ideventos', '=', $sesion->ideventos)->get()->lists('idpuntos_reunion');
         //$puntos_reunion = PuntoReunion::whereIn('idpuntos_reunion', $idpuntos)->get();
         //$puntos_evento = PuntoEvento::getPuntosPorEvento($sesion->ideventos)->get();
         $puntos_reunion = PuntoReunion::all();
         $lista_puntos = [];
         foreach ($puntos_reunion as $punto) {
             // verificar si la sesion tiene asignado el punto de reunion
             $punto_evento = PuntoEvento::getPuntosPorEventoXPunto($sesion->ideventos, $punto->idpuntos_reunion)->first();
             $lista_puntos[] = ['id' => $punto->idpuntos_reunion, 'latitude' => (double) $punto->latitud, 'longitude' => (double) $punto->longitud, 'selected' => $punto_evento ? 1 : 0];
         }
         //obtener los documentos de la sesion
         //$iddocumentos = DocumentosEvento::where('ideventos', '=', $sesion->ideventos)->get()->lists('iddocumentos');
         //$documentos = Documento::whereIn('iddocumentos', $iddocumentos)->get();
         $documentos = DocumentosEvento::getDocumentosPorEvento($sesion->ideventos)->get();
         $lista_docs = [];
         foreach ($documentos as $doc) {
             // obtener hace cuantos dias se subio el documento
             $from = new \DateTime();
             $from->setTimestamp(strtotime($doc->created_at));
             $to = new \DateTime('today');
             $dias = $from->diff($to)->d;
             // obtener los usuarios asignados al documento (al evento)
             $users = [];
             $usuarios = \Asistencia::getUsersPorEvento($sesion->ideventos)->get();
             foreach ($usuarios as $u) {
                 $perfiles = \User::getPerfilesPorUsuario2($u->id)->get();
                 $perfiles_array = [];
                 foreach ($perfiles as $perfil) {
                     $perfiles_array[] = ['id' => $perfil->idperfiles, 'name' => $perfil->nombre];
                 }
                 // verificar si el usuario ha visto el documento
                 $visto = \Visualizacion::getVisualizacionesPorUserPorEventoPorDocumento($u->id, $sesion->ideventos, $doc->iddocumentos)->first();
                 $users[] = ['id' => $u->id, 'names' => $u->nombres, 'last_name' => $u->apellido_pat, 'username' => $u->num_documento, 'profiles' => $perfiles_array, 'seen' => $visto ? 1 : 0];
             }
             $lista_docs[] = ['id' => $doc->iddocumentos, 'name' => $doc->titulo, 'url' => $doc->ruta . $doc->nombre_archivo, 'upload_date' => 'Hace ' . $dias . ' día' . ($dias != 1 ? 's' : '') . ', ' . date('h:i A', $from->getTimestamp()), 'size' => $doc->peso . ' KB', 'users' => $users];
         }
         //obtener los niños asignados a la sesion
         $ninhos = AsistenciaNinho::getNinhosPorEvento($sesion->ideventos)->get();
         $lista_ninhos = [];
         foreach ($ninhos as $n) {
             // genero
             $genero = null;
             if ($n->genero == 'm' || $n->genero == 'M') {
                 $genero = 0;
             } elseif ($n->genero == 'f' || $n->genero == 'F') {
                 $genero = 1;
             }
             // edad
             $from = new \DateTime($n->fecha_nacimiento);
             $to = new \DateTime('today');
             $edad = $from->diff($to)->y;
             // obtener el comentario que el usuario le ha hecho al niño
             $ha_comentado = 0;
             $comentario = null;
             $c = Comentario::getComentarioPorUserPorNinhos($user->id, $n->idasistencia_ninhos)->first();
             if ($c) {
                 $ha_comentado = 1;
                 $comentario = ['id' => $c->idcomentarios, 'message' => $c->comentario, 'face' => (int) $c->calificacion];
             }
             $lista_ninhos[] = ['id' => $n->idasistencia_ninhos, 'child' => ['id' => $n->idninhos, 'names' => $n->nombres, 'last_name' => $n->apellido_pat, 'gender' => $genero, 'age' => $edad, 'sessions' => \AsistenciaNinho::where('idninhos', '=', $n->idninhos)->count(), 'joining_date' => strtotime($n->created_at)], 'commented' => $ha_comentado, 'comment' => $comentario];
         }
         //obtener los voluntarios asignados a la sesion
         $voluntarios = Asistencia::getUsersPorEvento($sesion->ideventos)->get();
         $lista_voluntarios = [];
         foreach ($voluntarios as $v) {
             $perfiles = User::getPerfilesPorUsuario2($v->id)->get();
             $perfiles_array = array();
             foreach ($perfiles as $perfil) {
                 $perfiles_array[] = ['id' => $perfil->idperfiles, 'name' => $perfil->nombre];
             }
             $lista_voluntarios[] = ['id' => $v->idasistencias, 'volunteer' => ['id' => $v->id, 'names' => $v->nombres, 'last_name' => $v->apellido_pat, 'username' => $v->num_documento, 'email' => $v->email, 'profiles' => $perfiles_array], 'attended' => (bool) $v->asistio, 'rating' => (int) $v->calificacion, 'comment' => $v->comentario];
         }
         $response[] = ['id' => $sesion->ideventos, 'name' => $sesion->nombre, 'date' => strtotime($sesion->fecha_evento), 'location' => ['latitude' => (double) $sesion->latitud, 'longitude' => (double) $sesion->longitud, 'address' => $sesion->direccion], 'meeting_points' => $lista_puntos, 'documents' => $lista_docs, 'attendance_children' => $lista_ninhos, 'attendance_volunteers' => $lista_voluntarios];
     }
     return Response::json($response, 200);
 }
 public function show($id)
 {
     $n = \Ninho::find($id);
     if (!$n) {
         return Response::json(['error' => 'No existe niño con id = ' . $id], 200);
     }
     // genero
     $genero = null;
     if ($n->genero == 'm' || $n->genero == 'M') {
         $genero = 0;
     } elseif ($n->genero == 'f' || $n->genero == 'F') {
         $genero = 1;
     }
     // edad
     $from = new \DateTime($n->fecha_nacimiento);
     $to = new \DateTime('today');
     $edad = $from->diff($to)->y;
     // obtener todos los comentarios hechos al niño en todas las sesiones
     $lista_comentarios = [];
     $asistencias = \AsistenciaNinho::where('idninhos', '=', $n->idninhos)->get();
     foreach ($asistencias as $a) {
         $comentarios = \Comentario::where('idasistencia_ninhos', '=', $a->idasistencia_ninhos)->get();
         foreach ($comentarios as $c) {
             $autor = \User::searchUserById($c->idusers)->first();
             $perfiles = \User::getPerfilesPorUsuario2($autor->id)->get();
             $perfiles_array = [];
             foreach ($perfiles as $perfil) {
                 $perfiles_array[] = ['id' => $perfil->idperfiles, 'name' => $perfil->nombre];
             }
             $lista_comentarios[] = ['id' => $c->idcomentarios, 'session_id' => $a->ideventos, 'message' => $c->comentario, 'face' => (int) $c->calificacion, 'author' => ['id' => $autor->id, 'names' => $autor->nombres, 'last_name' => $autor->apellido_pat, 'username' => $autor->num_documento, 'profiles' => $perfiles_array]];
         }
     }
     $response = ['id' => $n->idninhos, 'names' => $n->nombres, 'last_name' => $n->apellido_pat, 'gender' => $genero, 'age' => $edad, 'sessions' => $asistencias->count(), 'joining_date' => strtotime($n->created_at), 'comments' => $lista_comentarios];
     return Response::json($response, 200);
 }