
serposcope.controllers.GroupController Maven / Gradle / Ivy
/*
* Serposcope - SEO rank checker https://serposcope.serphacker.com/
*
* Copyright (c) 2016 SERP Hacker
* @author Pierre Nogues
* @license https://opensource.org/licenses/MIT MIT License
*/
package serposcope.controllers;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.serphacker.serposcope.db.base.BaseDB;
import com.serphacker.serposcope.db.google.GoogleDB;
import com.serphacker.serposcope.models.base.Group;
import com.serphacker.serposcope.models.base.Group.Module;
import conf.SerposcopeConf;
import java.util.Comparator;
import java.util.List;
import ninja.Context;
import ninja.FilterWith;
import ninja.Result;
import ninja.Results;
import ninja.Router;
import ninja.params.Param;
import ninja.session.FlashScope;
import org.apache.commons.lang3.StringEscapeUtils;
import serposcope.controllers.google.GoogleGroupController;
import serposcope.filters.AdminFilter;
import serposcope.filters.AuthFilter;
import serposcope.filters.XSRFFilter;
@Singleton
@FilterWith(AuthFilter.class)
public class GroupController extends BaseController {
@Inject
SerposcopeConf conf;
@Inject
Router router;
@Inject
BaseDB baseDB;
@Inject
GoogleDB googleDB;
public Result groups(Context context) throws JsonProcessingException{
long count = googleDB.search.count();
return Results
.ok()
.render("groups", context.getAttribute("groups"))
.render("search_count", googleDB.search.count())
.render("h2warning", count > 2000 && conf.dbUrl != null && conf.dbUrl.contains(":h2:"))
;
}
public Result jsonSuggest(
Context context,
@Param("query") String query
){
List groups = (List) context.getAttribute("groups");
StringBuilder builder = new StringBuilder("[");
groups.stream()
.filter((Group g) -> query == null ? true : g.getName().contains(query))
.sorted((Group o1, Group o2) -> o1.getId() - o2.getId())
.limit(10)
.forEach((g) -> {
builder.append("{")
.append("\"id\":").append(g.getId()).append(",")
.append("\"name\":\"").append(StringEscapeUtils.escapeJson(g.getName())).append("\",")
.append("\"module\":\"").append(g.getModule()).append("\"")
.append("},");
});
if(builder.length() > 1){
builder.deleteCharAt(builder.length()-1);
}
builder.append("]");
return Results.json().renderRaw(builder.toString());
}
@FilterWith({
AdminFilter.class,
XSRFFilter.class
})
public Result create(
Context context,
@Param("name") String name,
@Param("module") Integer moduleNum
){
FlashScope flash = context.getFlashScope();
Module module = null;
if(name == null || name.isEmpty()){
flash.error("error.invalidName");
return Results.redirect(router.getReverseRoute(GroupController.class, "home"));
}
try {
module = Module.values()[moduleNum];
}catch(Exception ex){
flash.error("error.invalidModule");
return Results.redirect(router.getReverseRoute(GroupController.class, "home"));
}
Group group = new Group(module, name);
baseDB.group.insert(group);
flash.success("home.groupCreated");
switch(group.getModule()){
case GOOGLE:
return Results.redirect(router.getReverseRoute(GoogleGroupController.class, "view", "groupId", group.getId()));
default:
return Results.redirect(router.getReverseRoute(GroupController.class, "home"));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy