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 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.administrators.*;
import static play.libs.Json.toJson;
import play.mvc.Security;
@Security.Authenticated(AdminSecurity.class)
public class Administrators extends Controller {
public static String module = "Administrators";
public static String basePath = controllers.routes.Administrators.index().toString();
public static class deleteRequest {
public Long id;
public deleteRequest() {}
}
public static Result index() {
Http.Context.current().args.put("admin_module", "Administrators");
Http.Context.current().args.put("admin_parent_section", "settings");
utils.BasicRequests.listingRequest params = form( utils.BasicRequests.listingRequest.class ).bindFromRequest().get();
//Listview init
Query adminQuery = DBQuery.exists("username");
net.vz.mongodb.jackson.DBCursor<models.Administrator.Model> admins = models.Administrator.coll.find( adminQuery )
.limit( params.resultsPerPage ).skip( params.resultsPerPage * params.p - params.resultsPerPage );
params.setTotalResults( models.Administrator.coll.find( adminQuery ).count() );
return ok( listview.render( params , admins ) );
}
public static Result edit(String id) {
models.Administrator.Model admin;
try {
admin = models.Administrator.coll.findOneById(id);
} catch( IllegalArgumentException e) {
return redirect(routes.Administrators.index());
}
Form<Administrator.Model> form = form(Administrator.Model.class).fill(admin);
return ok( views.html.administrators.form.render("Edit Administrator", form) );
}
public static Result create() {
Form<Administrator.Model> form = form(Administrator.Model.class);
return ok( views.html.administrators.form.render("New Administrator", form) );
}
public static Result delete() {
Form<BasicRequests.deleteRequestMongoModel> req = form(BasicRequests.deleteRequestMongoModel.class).bindFromRequest();
Administrator.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<Administrator.Model> formAdmin = form(Administrator.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");
}
if( !formAdmin.field("id").valueOr("").isEmpty() && Administrator.coll.find( DBQuery.is("username", formAdmin.field("username").valueOr("").trim() ).notEquals("_id", new ObjectId( formAdmin.field("id").valueOr("") ) ) ).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!");
// return badRequest( views.html.administrators.form.render( formAdmin.field("id").valueOr("").isEmpty() ? "New Administrator" : "Edit Administrator", formAdmin) );
}
if( !formAdmin.field("_id").valueOr("").isEmpty() ) {
if( !formAdmin.field("password").value().equals( formAdmin.field("password_confirm").value() ) ) {
flash().put("form_error", "Provided passwords must match!!");
flash().put("error_password", "Passwords must match!");
formAdmin.reject("password", "Passwords must match!");
}
} else {
if( !formAdmin.field("password").value().equals( formAdmin.field("password_confirm").value() ) || formAdmin.field("password").valueOr("").isEmpty() ) {
flash().put("form_error", "Provided passwords must match!!");
flash().put("error_password", "Passwords must match!");
formAdmin.reject("password", "Passwords must match!");
}
}
if( formAdmin.hasErrors() ) {
return badRequest( views.html.administrators.form.render( formAdmin.field("_id").valueOr("").isEmpty() ? "New Administrator" : "Edit Administrator", formAdmin) );
}
formAdmin.get().username = formAdmin.get().username.trim();
if( !formAdmin.field("password").valueOr("").isEmpty() ) {
formAdmin.get().password = utils.Tools.md5Encode( formAdmin.field("password").value() );
}
String id;
if( formAdmin.field("_id").valueOr("").isEmpty() ) {
formAdmin.get().createdAt = new Date();
id = Administrator.save( formAdmin.get() ).getSavedId();
} else {
formAdmin.get().lastUpdatedAt = new Date();
id = Administrator.update( formAdmin.field("_id").valueOr(""), formAdmin.get() ).getSavedId();
}
flash().put("form_success", "Administrator is saved!");
return redirect( controllers.routes.Administrators.edit( id ) );
}
}