package controllers;
import java.util.Collection;
import java.util.List;
import models.Recipe;
import models.User;
import org.jcrom.JcrMappingException;
import play.data.validation.Required;
import play.data.validation.Valid;
import play.libs.Crypto;
import play.modules.cream.ocm.JcrQueryResult;
public class Users extends Application {
@Secure.Admin
public static void add(User user) {
user = (user == null) ? new User() : user;
render(user);
}
@Secure.Admin
public static void create(@Valid User user, @Required String passwordConfirm) {
if (!user.password.equals(passwordConfirm)) {
validation.addError("passwordConfirm", "Passwords don't match!");
}
if (validation.hasErrors()) {
validation.keep();
params.flash();
flash.error("Please correct these errors !");
add(user);
}
// if you want to create the user in another path set
// user.path = "/mypath";
user.password = Crypto.passwordHash(user.password);
user.create();
Users.index(1);
}
@Secure.Admin
public static void delete(String id) {
User user = loadUser(id);
if (user.admin) {
flash.error("The administrator cannot be deleted");
Users.show(id, 1);
}
try {
// Note: we need to delete all recipes
// of the user before
user.delete();
} catch (JcrMappingException e) {
flash.error("The user cannot be deleted (check references)");
Users.show(id, 1);
}
flash.success("User %s deleted.", user.email);
Users.index(1);
}
@Secure.Admin
public static void edit(String id) {
User user = loadUser(id);
render(user);
}
public static void index(Integer page) {
page = (page != null && page > 0) ? page : 1;
JcrQueryResult<User> result = User.all();
long nbUsers = result.count();
Collection<User> users = result.fetch(page, pageSize);
render(nbUsers, users, page);
}
public static void show(String id, Integer page) {
page = (page != null && page > 0) ? page : 1;
User user = loadUser(id);
JcrQueryResult result = Recipe.findBy("author = %s order by [jcr:created] desc", user.uuid);
long nbRecipes = result.count();
List<Recipe> recipes = result.fetch(page, pageSize);
render(user, recipes, nbRecipes, page);
}
@Secure.Admin
public static void update(@Valid User user) {
if (validation.hasErrors()) {
validation.keep();
params.flash();
flash.error("Please correct these errors !");
edit(user.uuid);
}
user.merge();
Users.show(user.uuid, 1);
}
private static User loadUser(String id) {
User user = User.findById(id);
notFoundIfNull(user);
return user;
}
}