Modales para buscadores, en alumno aun faltan varias cosas y de administrador esta completo. Creacion de controladores. Ediciones a buscador de alumno para que no era posible mirar la lista. Control en borar usuarios como adminsitrador para cuando borran y es un usuario normal tambien borra el alumno correspondiente de tabla de alumnos.
parent
9d8830a10e
commit
94183d4ab9
@ -0,0 +1,191 @@
|
|||||||
|
package com.example.proyectofinal.controllers;
|
||||||
|
|
||||||
|
import com.example.proyectofinal.models.empresas.Alumno;
|
||||||
|
import com.example.proyectofinal.models.empresas.Ciclo;
|
||||||
|
import com.example.proyectofinal.models.empresas.Skill;
|
||||||
|
import com.example.proyectofinal.models.login.Usuario;
|
||||||
|
import com.example.proyectofinal.servicios.empresa.AlumnoService;
|
||||||
|
import com.example.proyectofinal.servicios.empresa.CicloService;
|
||||||
|
import com.example.proyectofinal.servicios.empresa.SkillService;
|
||||||
|
import com.example.proyectofinal.servicios.user.UsuarioService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class UserController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UsuarioService usuarioService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PasswordEncoder passwordEncoder;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AlumnoService alumnoService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CicloService cicloService;
|
||||||
|
@Autowired
|
||||||
|
private SkillService skillService;
|
||||||
|
|
||||||
|
@GetMapping("/admin/alta_admin_nuevo")
|
||||||
|
public String showCreateFormAdmin(Model model, Authentication authentication) {
|
||||||
|
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
||||||
|
boolean isAdmin = authorities.stream()
|
||||||
|
.anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN"));
|
||||||
|
if (!isAdmin) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "No tienes permisos para acceder a esta página");
|
||||||
|
}
|
||||||
|
|
||||||
|
model.addAttribute("usuario", new Usuario()); // Add this line
|
||||||
|
|
||||||
|
return "admin/usuario/create";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/admin/alta_admin_nuevo")
|
||||||
|
public String saveNewAdmin(@ModelAttribute Usuario usuario, Authentication authentication) {
|
||||||
|
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
||||||
|
boolean isAdmin = authorities.stream()
|
||||||
|
.anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN"));
|
||||||
|
if (!isAdmin) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "No tienes permisos para acceder a esta página");
|
||||||
|
}
|
||||||
|
usuario.setRol(usuarioService.getRolById(1));
|
||||||
|
|
||||||
|
if(usuarioService.getUserByLogInName(usuario.getNombreLogIn()) == null){
|
||||||
|
usuarioService.createUsuario(usuario.getNombreUsuario(), usuario.getNombreLogIn(), usuario.getEmail(), usuario.getPassword(), usuario.isLogedIn(), usuario.getRol().getId());
|
||||||
|
return "redirect:/buscador?userCreated=true";
|
||||||
|
}else {
|
||||||
|
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Este usuario ya existe");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/api/currentUser")
|
||||||
|
public ResponseEntity<Usuario> getCurrentUser(Authentication authentication) {
|
||||||
|
String username = authentication.getName();
|
||||||
|
Usuario usuario = usuarioService.findByLogInName(username);
|
||||||
|
return ResponseEntity.ok(usuario);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/admin/editar_usuario")
|
||||||
|
public String showUpdateFormAdmin(Model model, Authentication authentication) {
|
||||||
|
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
||||||
|
boolean isAdmin = authorities.stream()
|
||||||
|
.anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN"));
|
||||||
|
if (!isAdmin) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "No tienes permisos para acceder a esta página");
|
||||||
|
}
|
||||||
|
List<Usuario> users = usuarioService.findAll();
|
||||||
|
model.addAttribute("users", users);
|
||||||
|
model.addAttribute("usuario", new Usuario());
|
||||||
|
return "admin/usuario/update";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/admin/update_usuario")
|
||||||
|
public String updateUser(@ModelAttribute Usuario usuario, Authentication authentication) {
|
||||||
|
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
||||||
|
boolean isAdmin = authorities.stream()
|
||||||
|
.anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN"));
|
||||||
|
if (!isAdmin) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "No tienes permisos para acceder a esta página");
|
||||||
|
}
|
||||||
|
Usuario existingUser = usuarioService.findUserById(usuario.getId());
|
||||||
|
if (existingUser == null) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Este usuario no existe");
|
||||||
|
}
|
||||||
|
String password = existingUser.getPassword();
|
||||||
|
existingUser.setPassword(passwordEncoder.encode(password));
|
||||||
|
usuarioService.saveUser(usuario);
|
||||||
|
return "redirect:/buscador?userUpdated=true";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/admin/user/{id}")
|
||||||
|
public ResponseEntity<Usuario> getUser(@PathVariable Long id) {
|
||||||
|
Usuario usuario = usuarioService.findUserById(id);
|
||||||
|
return ResponseEntity.ok(usuario);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/admin/delete_usuario")
|
||||||
|
public String showDeleteFormAdmin(Model model, Authentication authentication) {
|
||||||
|
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
||||||
|
boolean isAdmin = authorities.stream()
|
||||||
|
.anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN"));
|
||||||
|
if (!isAdmin) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "No tienes permisos para acceder a esta página");
|
||||||
|
}
|
||||||
|
List<Usuario> users = usuarioService.findAll();
|
||||||
|
model.addAttribute("users", users);
|
||||||
|
model.addAttribute("usuario", new Usuario());
|
||||||
|
return "admin/usuario/delete";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/admin/delete_usuario/{id}")
|
||||||
|
public String deleteUser(@PathVariable Long id, Authentication authentication) {
|
||||||
|
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
||||||
|
boolean isAdmin = authorities.stream()
|
||||||
|
.anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN"));
|
||||||
|
if (!isAdmin) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "No tienes permisos para acceder a esta página");
|
||||||
|
}
|
||||||
|
Usuario existingUser = usuarioService.findUserById(id);
|
||||||
|
if (existingUser == null) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Este usuario no existe");
|
||||||
|
}
|
||||||
|
Usuario user = usuarioService.findUserById(id);
|
||||||
|
if(user.getRol().getId() == 2){
|
||||||
|
Alumno alumno = alumnoService.findByEmail(user.getEmail());
|
||||||
|
System.out.println("TEST DELETING ALUMNO WITH ID: " + alumno.getId()+" AND EMAIL: "+alumno.getCorreo()+" AND NAME: "+alumno.getNombre());
|
||||||
|
alumnoService.deleteById(alumno.getId());
|
||||||
|
}
|
||||||
|
usuarioService.deleteUser(id);
|
||||||
|
return "redirect:/buscador?userDeleted=true";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/usuario/usuario_update_form")
|
||||||
|
public String showUpdateForm(Model model, Authentication authentication) {
|
||||||
|
String username = authentication.getName();
|
||||||
|
Usuario usuario = usuarioService.findByLogInName(username);
|
||||||
|
Alumno alumno = alumnoService.findByEmail(usuario.getEmail());
|
||||||
|
List<Ciclo> ciclos = cicloService.findAll();
|
||||||
|
List<Skill> skills = skillService.findAll();
|
||||||
|
model.addAttribute("skills", skills);
|
||||||
|
model.addAttribute("alumno", alumno);
|
||||||
|
model.addAttribute("ciclos", ciclos);
|
||||||
|
return "admin/alumno/update";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/usuario/update")
|
||||||
|
public ResponseEntity<String> updateAlumno(Alumno alumno, @RequestParam("ciclo") Long ciclo, @RequestParam("skills") List<Long> skills){
|
||||||
|
try{
|
||||||
|
Ciclo cicloEntity = cicloService.findById(ciclo);
|
||||||
|
Set<Skill> skillEntities = skillService.findAllByIds(skills);
|
||||||
|
alumno.setCiclo(cicloEntity);
|
||||||
|
alumno.setSkills(skillEntities);
|
||||||
|
alumnoService.save(alumno);
|
||||||
|
return new ResponseEntity<>("El alumno fue actualizado con exito", HttpStatus.OK);
|
||||||
|
}catch (Exception e) {
|
||||||
|
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.proyectofinal.servicios.implemetations;
|
package com.example.proyectofinal.servicios.implemetations.empresas;
|
||||||
|
|
||||||
import com.example.proyectofinal.interfaces.IPagination;
|
import com.example.proyectofinal.interfaces.IPagination;
|
||||||
import com.example.proyectofinal.models.empresas.Ciclo;
|
import com.example.proyectofinal.models.empresas.Ciclo;
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.proyectofinal.servicios.implemetations;
|
package com.example.proyectofinal.servicios.implemetations.empresas;
|
||||||
|
|
||||||
import com.example.proyectofinal.interfaces.IPagination;
|
import com.example.proyectofinal.interfaces.IPagination;
|
||||||
import com.example.proyectofinal.models.empresas.Contacto;
|
import com.example.proyectofinal.models.empresas.Contacto;
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.proyectofinal.servicios.implemetations;
|
package com.example.proyectofinal.servicios.implemetations.empresas;
|
||||||
|
|
||||||
import com.example.proyectofinal.interfaces.IPagination;
|
import com.example.proyectofinal.interfaces.IPagination;
|
||||||
import com.example.proyectofinal.models.empresas.Empresa;
|
import com.example.proyectofinal.models.empresas.Empresa;
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.proyectofinal.servicios.implemetations;
|
package com.example.proyectofinal.servicios.implemetations.empresas;
|
||||||
|
|
||||||
import com.example.proyectofinal.interfaces.IPagination;
|
import com.example.proyectofinal.interfaces.IPagination;
|
||||||
import com.example.proyectofinal.models.empresas.Familia;
|
import com.example.proyectofinal.models.empresas.Familia;
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.proyectofinal.servicios.implemetations;
|
package com.example.proyectofinal.servicios.implemetations.empresas;
|
||||||
|
|
||||||
import com.example.proyectofinal.interfaces.IPagination;
|
import com.example.proyectofinal.interfaces.IPagination;
|
||||||
import com.example.proyectofinal.models.empresas.Oferta;
|
import com.example.proyectofinal.models.empresas.Oferta;
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.proyectofinal.servicios.implemetations;
|
package com.example.proyectofinal.servicios.implemetations.empresas;
|
||||||
|
|
||||||
import com.example.proyectofinal.interfaces.IPagination;
|
import com.example.proyectofinal.interfaces.IPagination;
|
||||||
import com.example.proyectofinal.models.empresas.Sector;
|
import com.example.proyectofinal.models.empresas.Sector;
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.proyectofinal.servicios.implemetations;
|
package com.example.proyectofinal.servicios.implemetations.empresas;
|
||||||
|
|
||||||
import com.example.proyectofinal.interfaces.IPagination;
|
import com.example.proyectofinal.interfaces.IPagination;
|
||||||
import com.example.proyectofinal.models.empresas.Skill;
|
import com.example.proyectofinal.models.empresas.Skill;
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.proyectofinal.servicios.implemetations;
|
package com.example.proyectofinal.servicios.implemetations.empresas;
|
||||||
|
|
||||||
import com.example.proyectofinal.interfaces.IPagination;
|
import com.example.proyectofinal.interfaces.IPagination;
|
||||||
import com.example.proyectofinal.models.empresas.Empresa;
|
import com.example.proyectofinal.models.empresas.Empresa;
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.example.proyectofinal.servicios.implemetations.login;
|
||||||
|
|
||||||
|
import com.example.proyectofinal.models.login.Autoridad;
|
||||||
|
import com.example.proyectofinal.models.login.Rol;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface IAutoridad {
|
||||||
|
List<Autoridad> findAll();
|
||||||
|
|
||||||
|
Autoridad findById(Long id);
|
||||||
|
|
||||||
|
Autoridad findByName(String name);
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.example.proyectofinal.servicios.implemetations.login;
|
||||||
|
|
||||||
|
import com.example.proyectofinal.models.empresas.Alumno;
|
||||||
|
import com.example.proyectofinal.models.login.Rol;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface IRol {
|
||||||
|
List<Rol> findAll();
|
||||||
|
|
||||||
|
Rol findById(Long id);
|
||||||
|
|
||||||
|
Rol findByName(String name);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.example.proyectofinal.servicios.implemetations.login;
|
||||||
|
|
||||||
|
import com.example.proyectofinal.models.login.Rol;
|
||||||
|
import com.example.proyectofinal.models.login.Usuario;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface IUsuario {
|
||||||
|
|
||||||
|
Usuario createUsuario(String nombreUsuario, String nombreLogIn, String email, String password, boolean loged, Long rolId);
|
||||||
|
|
||||||
|
Long findRolByName(String user);
|
||||||
|
|
||||||
|
Usuario findByLogInName(String logIn);
|
||||||
|
|
||||||
|
void deleteById(Long id);
|
||||||
|
|
||||||
|
List<Usuario> findAll();
|
||||||
|
|
||||||
|
Usuario findUserById(Long id);
|
||||||
|
|
||||||
|
Optional<Usuario> findByNombreUsuario(String admin);
|
||||||
|
|
||||||
|
Rol getRolById(int i);
|
||||||
|
|
||||||
|
Usuario getUserByLogInName(String nombreLogIn);
|
||||||
|
|
||||||
|
void saveUser(Usuario usuario);
|
||||||
|
|
||||||
|
void deleteUser(Long id);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.example.proyectofinal.servicios.user;
|
||||||
|
|
||||||
|
import com.example.proyectofinal.models.login.Autoridad;
|
||||||
|
import com.example.proyectofinal.repositories.login.AutoridadesRepository;
|
||||||
|
import com.example.proyectofinal.servicios.implemetations.login.IAutoridad;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class AutoridadService implements IAutoridad {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AutoridadesRepository autoridadRepository;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Autoridad> findAll() {
|
||||||
|
return autoridadRepository.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Autoridad findById(Long id) {
|
||||||
|
return autoridadRepository.findById(id).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Autoridad findByName(String name) {
|
||||||
|
return autoridadRepository.findByName(name);
|
||||||
|
}
|
||||||
|
}
|
@ -1,24 +0,0 @@
|
|||||||
package com.example.proyectofinal.servicios.user;
|
|
||||||
|
|
||||||
import com.example.proyectofinal.models.login.Autoridad;
|
|
||||||
import com.example.proyectofinal.models.login.Rol;
|
|
||||||
import com.example.proyectofinal.repositories.login.AutoridadesRepository;
|
|
||||||
import com.example.proyectofinal.repositories.login.RolRepository;
|
|
||||||
import jakarta.annotation.PostConstruct;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class RolAutoService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RolRepository rolRepository;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AutoridadesRepository autoridadRepository;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.example.proyectofinal.servicios.user;
|
||||||
|
|
||||||
|
import com.example.proyectofinal.models.login.Rol;
|
||||||
|
import com.example.proyectofinal.repositories.login.RolRepository;
|
||||||
|
import com.example.proyectofinal.servicios.implemetations.login.IRol;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class RolService implements IRol {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RolRepository rolRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Rol> findAll() {
|
||||||
|
return rolRepository.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Rol findById(Long id) {
|
||||||
|
return rolRepository.findById(id).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Rol findByName(String name) {
|
||||||
|
return rolRepository.findByName(name);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,91 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<title>Borrar Usuario</title>
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css">
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
|
||||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" th:href="@{/top.css}">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
max-width: none;
|
||||||
|
margin: auto;
|
||||||
|
padding: 25px;
|
||||||
|
margin-top: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
margin-top: 25px;
|
||||||
|
margin-right: 5px;
|
||||||
|
width: 120px;
|
||||||
|
height: 40px;
|
||||||
|
font-family: Verdana;
|
||||||
|
}
|
||||||
|
form input[type="submit"], form input[type="button"] {
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
form input[type="text"]{
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
form label{
|
||||||
|
font-size: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body, h1 {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>Borrar Usuario</h1>
|
||||||
|
<form th:action="@{/admin/delete_usuario}" th:object="${usuario}" method="get">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-3 col-form-label" for="nombreUsuario">Username:</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<select id="userSelect">
|
||||||
|
<option th:each="user : ${users}" th:value="${user.id}" th:text="${user.nombreUsuario}"></option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="hidden" th:field="*{id}" id="userId">
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<div class="col-sm-9 offset-sm-3">
|
||||||
|
<input type="submit" value="Borrar" class="btn btn-primary">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<script>
|
||||||
|
$('form').submit(function(event) {
|
||||||
|
event.preventDefault(); // Prevent the form from submitting normally
|
||||||
|
|
||||||
|
var userId = $('#userSelect').val();
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '/admin/delete_usuario/' + userId,
|
||||||
|
type: 'get',
|
||||||
|
success: function() {
|
||||||
|
window.location.href = "/buscador?userDeleted=true";
|
||||||
|
},
|
||||||
|
error: function(jqXHR, textStatus, errorThrown) {
|
||||||
|
console.error(textStatus, errorThrown);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1,203 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Update: Alumno</title>
|
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">
|
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css">
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
|
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" th:href="@{/top.css}">
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/css/select2.min.css" rel="stylesheet" />
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/js/select2.min.js"></script>
|
|
||||||
<style>
|
|
||||||
form {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: space-around;
|
|
||||||
align-items: center;
|
|
||||||
width: 100%;
|
|
||||||
max-width: none;
|
|
||||||
margin: auto;
|
|
||||||
padding: 25px;
|
|
||||||
margin-top: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn {
|
|
||||||
margin-top: 25px;
|
|
||||||
margin-right: 5px;
|
|
||||||
width: 120px;
|
|
||||||
height: 40px;
|
|
||||||
font-family: Verdana;
|
|
||||||
}
|
|
||||||
form input[type="submit"], form input[type="button"] {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
form input[type="text"]{
|
|
||||||
width: 75%;
|
|
||||||
}
|
|
||||||
form label{
|
|
||||||
font-size: 20px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
body, h1 {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
width: 100%;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Editar datos de Alumno<a href="/logout" class="logout-button"><i class="fas fa-door-open"></i></a></h1>
|
|
||||||
|
|
||||||
<form th:action="@{/alumno/update}" method="post" enctype="multipart/form-data" th:object="${alumno}">
|
|
||||||
<input type="hidden" th:field="*{id}"/>
|
|
||||||
<div class="p-3">
|
|
||||||
<div class ="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="nombre">Nombre</label>
|
|
||||||
<div class = "col-sm-9">
|
|
||||||
<input type="text" th:field="*{nombre}" required minlength="2" maxlength="75" class="form-control" id="nombre">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class ="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="cif">Apellido</label>
|
|
||||||
<div class = "col-sm-9">
|
|
||||||
<input type="text" th:field="*{apellido}" required minlength="2" maxlength="75" title="Entra un nombre" class="form-control" id="cif">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class ="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="apellido2">Apellido2</label>
|
|
||||||
<div class = "col-sm-9">
|
|
||||||
<input type="text" th:field="*{apellido2}" minlength="2" maxlength="75" class="form-control" id="apellido2">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class ="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="fechaNacimiento">Fecha de Nacimiento</label>
|
|
||||||
<div class = "col-sm-9">
|
|
||||||
<input type="date" th:field="*{fechaNacimiento}" required class="form-control" id="fechaNacimiento" title="Introduce fecha">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="genero">Genero</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<select th:field="*{genero}" class="form-control" id="genero" required>
|
|
||||||
<option value="">Selecciona un genero</option>
|
|
||||||
<option value="Mujer">Mujer</option>
|
|
||||||
<option value="Varon">Varon</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class ="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="nia">Nia</label>
|
|
||||||
<div class = "col-sm-9">
|
|
||||||
<!--TODO: Añadir validacion de nia-->
|
|
||||||
<input type="text" th:field="*{nia}" title="Entra un nia correcto" class="form-control" id="nia">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="dni">DNI/NIE</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input type="text" th:field="*{dni}" required class="form-control" id="dni" title="Introduce DNI/NIE">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="correo">Correo</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input type="email" th:field="*{correo}" required class="form-control" id="correo" title="Introduce correo">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="correo2">Correo2</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input type="email" th:field="*{correo2}" class="form-control" id="correo2" title="Introduce correo alternativo">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="nacionalidad">Nacionalidad</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input type="text" th:field="*{nacionalidad}" class="form-control" id="nacionalidad" title="Introduce nacionalidad">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="keywords">Keywords</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<input type="text" th:field="*{keywords}" class="form-control" id="keywords" title="Introduce keywords">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Ciclos -->
|
|
||||||
<div class="form-group row">
|
|
||||||
<label class="col-sm-3 col-form-label" for="ciclo">Ciclo</label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<select th:field="*{ciclo.id}" class="form-control" id="ciclo">
|
|
||||||
<option th:each="ciclo : ${ciclos}" th:value="${ciclo.id}" th:text="${ciclo.nombre}"></option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="skills-container">
|
|
||||||
<h2>Select Skills</h2>
|
|
||||||
<select id="skills" multiple>
|
|
||||||
<option th:each="skill : ${skills}" th:value="${skill.id}" th:text="${skill.nombre}" th:selected="${alumno.skills.contains(skill)}"></option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="text-center">
|
|
||||||
<input type="submit" value="Guardar" class="btn"/>
|
|
||||||
<input type="button" value="Cancelar" id="btnCancelar" class="btn" onclick="goBack()"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).ready(function() {
|
|
||||||
$('#skills').select2();
|
|
||||||
});
|
|
||||||
|
|
||||||
function goBack() {
|
|
||||||
window.history.back();
|
|
||||||
}
|
|
||||||
$(document).ready(function () {
|
|
||||||
$("form").on("submit", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
var formDataArray = $(this).serializeArray();
|
|
||||||
formDataArray.push({name: 'ciclo', value: $('#ciclo').val()});
|
|
||||||
formDataArray.push({name: 'skills', value: $('#skills').val()});
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: '/alumno/update',
|
|
||||||
type: 'post',
|
|
||||||
data: $.param(formDataArray),
|
|
||||||
success: function (message) {
|
|
||||||
if(message === "El alumno fue actualizado con exito") {
|
|
||||||
alert("El alumno fue actualizado con exito")
|
|
||||||
window.history.go(-1);
|
|
||||||
} else {
|
|
||||||
alert("Error, consulte a los informaticos")
|
|
||||||
window.history.go(-1)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function (jqXHR) {
|
|
||||||
alert(jqXHR.responseText);
|
|
||||||
window.history.back();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Loading…
Reference in new issue