@Override
 public ModelAndView postEditView(
     @ModelAttribute("Model") Player model, HttpServletRequest request, BindingResult result) {
   validator.validate(model, result);
   if (result.hasErrors()) {
     return getEditView(model);
   }
   // make sure not to overwrite passwordHash, verfied etc.
   Player player;
   if (model.getId() != null) {
     player = playerDAO.findById(model.getId());
   } else {
     Player existingPlayer = playerDAO.findByEmail(model.getEmail());
     if (existingPlayer != null) {
       result.addError(new ObjectError("email", msg.get("EmailAlreadyRegistered")));
       return getEditView(model);
     }
     player = new Player();
   }
   player.setEmail(model.getEmail());
   player.setFirstName(model.getFirstName());
   player.setLastName(model.getLastName());
   player.setPhone(model.getPhone());
   player.setGender(model.getGender());
   player.setInitialRanking(model.getInitialRanking());
   playerDAO.saveOrUpdate(player);
   return redirectToIndex(request);
 }
 @RequestMapping("mail")
 public ModelAndView mailAll(HttpServletRequest request) {
   List<Player> allPlayers = playerDAO.findPlayersRegisteredForEmails();
   List<String> emails = new ArrayList<>();
   for (Player player : allPlayers) {
     emails.add(player.getEmail());
   }
   ModelAndView mav = new ModelAndView("admin/players/mail");
   mav.addObject("bcc", StringUtils.join(emails, ","));
   mav.addObject(
       "body",
       msg.get(
           "MailAllPlayersBody",
           new Object[] {RequestUtil.getBaseURL(request) + "/account/profile"}));
   return mav;
 }