package controllers; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import org.bson.types.ObjectId; import com.mongodb.DBCursor; import net.vz.mongodb.jackson.DBQuery; import net.vz.mongodb.jackson.DBQuery.Query; import ch.qos.logback.core.Context; import utils.BasicRequests; import models.Administrator; import models.User; import play.data.Form; import play.libs.Json; import play.mvc.Controller; import play.mvc.Http; import play.mvc.Result; import play.mvc.With; import views.html.users.*; import static play.libs.Json.toJson; import play.mvc.Security; @Security.Authenticated(AdminSecurity.class) public class Users extends Controller { public static String module = "Users"; public static String basePath = controllers.routes.Users.index().toString(); public static class deleteRequest { public Long id; public deleteRequest() {} } public static Result index() { Http.Context.current().args.put("admin_module", "Users"); Http.Context.current().args.put("admin_parent_section", "users"); utils.BasicRequests.listingRequest params = form( utils.BasicRequests.listingRequest.class ).bindFromRequest().get(); //Listview init Query adminQuery = DBQuery.exists("username"); net.vz.mongodb.jackson.DBCursor<models.User.Model> users = models.User.coll.find( adminQuery ) .limit( params.resultsPerPage ).skip( params.resultsPerPage * params.p - params.resultsPerPage ); params.setTotalResults( models.User.coll.find( adminQuery ).count() ); return ok( listview.render( params , users ) ); } public static Result edit(String id) { models.User.Model user; try { user = models.User.coll.findOneById( id ); } catch( IllegalArgumentException e) { return redirect(routes.Users.index()); } Form<User.Model> form = form(User.Model.class).fill(user); System.out.println( form.get()._id ); return ok( views.html.users.form.render("Edit User", form) ); } public static Result create() { Form<User.Model> form = form(User.Model.class); return ok( views.html.users.form.render("New User", form) ); } public static Result delete() { Form<BasicRequests.deleteRequestMongoModel> req = form(BasicRequests.deleteRequestMongoModel.class).bindFromRequest(); User.coll.removeById(req.get().id); HashMap<String, String> ret = new HashMap<String, String>(); ret.put("ret_code", "0"); ret.put("id", ""+req.get().id); return ok( toJson( ret ) ); } public static Result save() { Form<User.Model> formAdmin = form(User.Model.class).bindFromRequest(); if( formAdmin.field("username").value().isEmpty() ) formAdmin.reject("username", "Username can not be empty!"); if( formAdmin.hasErrors() ) { flash().put("form_error", "Please fill in all fields properly"); formAdmin.reject("username", "Required"); } try { if( formAdmin.field("_id") != null && !formAdmin.field("_id").value().isEmpty() && User.coll.find( DBQuery.is("username", formAdmin.field("username").valueOr("").trim() ).notEquals("_id", new ObjectId( formAdmin.field("_id").valueOr("-1") ) ) ).count() > 0 ) { flash().put("form_error", "Username is taken, please provide a unique one!"); flash().put("error_username", "Username is taken!"); formAdmin.reject("username", "Username is taken!"); } } catch(IllegalArgumentException e) { formAdmin.reject("username", "Required"); } if( formAdmin.field("domainsString").value().isEmpty() ) formAdmin.reject("domainsString", "Domains are required"); if( formAdmin.hasErrors() ) { return badRequest( views.html.users.form.render( formAdmin.field("_id").valueOr("").isEmpty() ? "New User" : "Edit User", formAdmin) ); } formAdmin.get().username = formAdmin.get().username.trim(); String[] domains = formAdmin.field("domainsString").valueOr("").split(","); formAdmin.get().domains = new ArrayList<String>(); for(int i = 0; i < domains.length; i++) formAdmin.get().domains.add( domains[i] ); String id; if( formAdmin.field("_id").valueOr("").isEmpty() ) { formAdmin.get().createdAt = new Date(); id = User.save( formAdmin.get() ).getSavedId(); } else { id = formAdmin.field("_id").valueOr(""); formAdmin.get().lastUpdatedAt = new Date(); User.update(formAdmin.field("_id").valueOr(""), formAdmin.get() ); } flash().put("form_success", "User is saved!"); return redirect( controllers.routes.Users.edit( id ) ); } }