_id = $id; $this->reload(); } /// Carga la información del usuario desde los archivos. function reload() { $d = file_users_get($this->_id); $this->_pass = $d[1]; $this->_email = $d[2]; if ($this->esAsesor()) $d = file_ase_get($this->_id); else $d = file_int_get($this->_id); $this->_nombre = $d[1]; $this->_apellido = $d[2]; } function getId() { return $this->_id; } function getPassword() { return $this->_pass; } function getNombre() { return $this->_nombre; } function getApellido() { return $this->_apellido; } function getEmail() { return $this->_email; } function getCreditos() { // El asesor puede preguntar siempre if ($this->esAsesor()) return 1; $d = file_creditos_get($this->_id); return $d[1]; } function getFotoFilename() { return 'fotos/'.$this->_id; } function esAdmin() { return file_admins_es_admin($this->_id); } function esAsesor() { return $this->_id{0} == 'A'; } /// Agrega créditos al usuario (false si hay error o no aplica). function addCreditos($n) { // El asesor puede preguntar siempre if ($this->esAsesor()) return false; $this->log("El administrador le agrega $n créditos"); return file_creditos_add($this->_id, $n); } /// Cede los permisos de administración a otro usuario. function cederAdmin($user) { // El asesor puede preguntar siempre if (!$this->esAdmin()) return 'Sólo un administrador puede ceder la administración'; if ($user->esAdmin()) return 'El usuario '.$user->getNombre().' '.$user->getApellido() .'ya es administrador.'; if (!file_admins_replace($this->getId(), $user->getId())) return 'Error al intercambiar los administradores.'; $this->reload(); $this->log('Cede permisos de administración a ' .$user->getNombre().' '.$user->getApellido().'.'); $user->log('Recibe permisos de administración de ' .$this->getNombre().' '.$this->getApellido().'.'); return ''; } /// Muestra el usuario como HTML (foto + apellido) function toHtml() { return sprintf('Foto de %s %s %s', $this->getFotoFilename(), $this->getNombre(), $this->getApellido(), $this->getApellido()); } /// Muestra el usuario como una opción de un select HTML. function toHtmlOption($selected = null) { $cred = $this->esAsesor() ? '' : ' ('.$this->getCreditos().')'; $admin = $this->esAdmin() ? '* ' : ''; if (!is_null($selected)) $selected = ($this->getId() == $user) ? ' selected="selected"' : ''; return sprintf("\n", $this->getId(), $selected, $admin, $this->getNombre(), $this->getApellido(), $cred); } /// Entrada al sistema. function login() { $this->log('Ingreso al sistema'); $res = file_creditos_login($this->_id); // Actualizamos créditos if (is_array($res)) $this->log("Se restaron créditos ({$res[0]}) por no preguntar."); } /// Salida del sistema. function logout() { $this->log('Salida del sistema'); } /// Graba un mensaje de log. function log($msg) { file_log_add($this->_id, $msg); } /** * Valida que la password del usuario sea correcta. * @return bool true si es correcta. * @static */ function validar($id, $pass) { file_log_add($id, 'Intento de ingreso al sistema'); $user = file_users_get($id); if (!$user) return false; return $user[1] == $pass; } /** * Indica si un usuario está asociado. * @return bool true si es correcta. * @static */ function asociado($id) { if (file_users_get($id)) return true; return false; } /** * Chequea si existen 2 admins. * @return string true si existen 2 admins, false de otra forma. * @static */ function checkAdmins() { $admins = @file('data/admins.txt'); if (count($admins) < 2) return false; return true; } /** * Asocia a un integrante del grupo. * @return mixed Si hubo error, retorna un string con el error, si no retorna ''. * @static */ function asociar($id, $pass, $email, $foto, $admin = false) { $ase = false; if (!file_int_get($id) and !($ase = file_ase_get($id))) return 'El número de registro no existe! No se puede asociar al grupo!'; if (@file_users_get($id)) return 'El usuario ya está registrado!'; if (!file_users_add($id, $pass, $email)) return 'No se pudo agregar el usuario!'; if ($admin) { if (Usuario::checkAdmins()) return 'Ya hay 2 administradores en el sistema!'; if (!file_admins_add($id)) return 'No se pudo agregar el usuario a la lista de administradores!'; } if (!$ase) // Si no es asesor, creamos archivo de créditos { if (!file_creditos_crear($id)) return 'No se pudo crear el archivo de créditos!'; } if (!copy($foto, "fotos/$id")) return 'No se pudo copiar la foto!'; file_log_add($id, 'Se asocia al usuario'); return ''; } /** * Obtiene una lista de los usuarios que son socios. * Si $admins es false, no incluye administradores. * @return array con los objetos de usuarios. * @static */ function getSocios($admins = true) { $r = array(); foreach (file_users_get_all() as $i) { $u = new Usuario($i[0]); if (!$u->esAsesor() and (!$u->esAdmin() or $u->esAdmin() and $admins)) $r[] = $u; } return $r; } /** * Obtiene una lista de los usuarios que son asesores. * Si $admins es false, no incluye administradores. * @return array con los objetos de usuarios. * @static */ function getAsesores($admins = true) { $r = array(); foreach (file_users_get_all() as $i) { $u = new Usuario($i[0]); if ($u->esAsesor() and (!$u->esAdmin() or $u->esAdmin() and $admins)) $r[] = $u; } return $r; } /** * Obtiene una lista de todos los usuarios asociados al sistema. * Si $admins es false, no incluye administradores. * @return array con los objetos de usuarios. * @static */ function getAll($admins = true) { $r = array(); foreach (file_users_get_all() as $i) { $u = new Usuario($i[0]); if (!$u->esAdmin() or $u->esAdmin() and $admins) $r[] = $u; } return $r; } } ?>