package org.iatoki.judgels.raguel;
import org.iatoki.judgels.api.jophiel.JophielClientAPI;
import org.iatoki.judgels.api.jophiel.JophielPublicAPI;
import org.iatoki.judgels.jophiel.AbstractBaseJophielClientController;
import org.iatoki.judgels.jophiel.activity.UserActivityMessage;
import org.iatoki.judgels.jophiel.activity.UserActivityMessageService;
import org.iatoki.judgels.jophiel.avatar.BaseAvatarCacheService;
import org.iatoki.judgels.jophiel.client.html.linkedClientsView;
import org.iatoki.judgels.jophiel.logincheck.html.isLoggedIn;
import org.iatoki.judgels.jophiel.logincheck.html.isLoggedOut;
import org.iatoki.judgels.jophiel.profile.UserProfileSearchForm;
import org.iatoki.judgels.jophiel.profile.html.userProfileSearchView;
import org.iatoki.judgels.jophiel.profile.html.userProfileView;
import org.iatoki.judgels.jophiel.viewpoint.ViewpointForm;
import org.iatoki.judgels.jophiel.viewpoint.html.viewAs;
import org.iatoki.judgels.play.IdentityUtils;
import org.iatoki.judgels.play.JudgelsPlayUtils;
import org.iatoki.judgels.play.controllers.ControllerUtils;
import org.iatoki.judgels.play.jid.BaseJidCacheService;
import org.iatoki.judgels.play.template.HtmlTemplate;
import org.iatoki.judgels.play.views.html.sidebar.guestView;
import play.data.Form;
import play.i18n.Messages;
import play.mvc.Http;
import play.mvc.Result;
import play.twirl.api.Html;
public abstract class AbstractRaguelController extends AbstractBaseJophielClientController {
private final JophielClientAPI jophielClientAPI;
private final JophielPublicAPI jophielPublicAPI;
private final UserActivityMessageService userActivityMessageService;
protected AbstractRaguelController(BaseJidCacheService jidCacheService, BaseAvatarCacheService avatarCacheService, JophielClientAPI jophielClientAPI, JophielPublicAPI jophielPublicAPI, UserActivityMessageService userActivityMessageService) {
super(jidCacheService, avatarCacheService);
this.jophielClientAPI = jophielClientAPI;
this.jophielPublicAPI = jophielPublicAPI;
this.userActivityMessageService = userActivityMessageService;
}
protected boolean isCurrentUserModerator() {
return currentUserHasRole("moderator");
}
protected boolean isCurrentUserModeratorOrAdmin() {
return isCurrentUserAdmin() || isCurrentUserModerator();
}
protected void addActivityLog(String log) {
if (!isCurrentUserGuest()) {
String newLog = log;
try {
if (JudgelsPlayUtils.hasViewPoint()) {
newLog += " view as " + IdentityUtils.getUserJid();
}
userActivityMessageService.addUserActivityMessage(new UserActivityMessage(System.currentTimeMillis(), RaguelUtils.getRealUserJid(), newLog, IdentityUtils.getIpAddress()));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
protected HtmlTemplate getBaseHtmlTemplate() {
HtmlTemplate htmlTemplate = super.getBaseHtmlTemplate();
String linkedClientsAPIEndpoint = jophielClientAPI.getLinkedClientsAPIEndpoint();
Html linkedClientsWidget = linkedClientsView.render(linkedClientsAPIEndpoint);
htmlTemplate.addLowerSidebarWidget(linkedClientsWidget);
if (isCurrentUserGuest()) {
String registerUrl = jophielClientAPI.getRegisterEndpoint();
String loginUrl = getAbsoluteUrl(org.iatoki.judgels.jophiel.routes.JophielClientController.login(ControllerUtils.getCurrentUrl(request())));
Html guestWidget = guestView.render(registerUrl, loginUrl);
htmlTemplate.addUpperSidebarWidget(guestWidget);
Html isLoggedInScript = isLoggedIn.render(jophielClientAPI.getUserIsLoggedInAPIEndpoint(), getAbsoluteUrl(routes.ApplicationController.auth(ControllerUtils.getCurrentUrl(Http.Context.current().request()))), "lib/jophielcommons/javascripts/isLoggedIn.js");
htmlTemplate.addAdditionalScript(isLoggedInScript);
} else {
String editProfileUrl = jophielClientAPI.getUserEditProfileEndpoint();
String logoutUrl = getAbsoluteUrl(org.iatoki.judgels.jophiel.routes.JophielClientController.logout(ControllerUtils.getCurrentUrl(Http.Context.current().request())));
Html userProfileWidget = userProfileView.render(getCurrentUsername(), getCurrentUserRealName(), getCurrentUserAvatarUrl(), editProfileUrl, logoutUrl);
htmlTemplate.addUpperSidebarWidget(userProfileWidget);
htmlTemplate.addSidebarMenu(Messages.get("forum.text.forums"), org.iatoki.judgels.raguel.forum.routes.ForumController.index());
Html isLoggedOutScript = isLoggedOut.render(jophielClientAPI.getUserIsLoggedInAPIEndpoint(), getAbsoluteUrl(routes.ApplicationController.logout(ControllerUtils.getCurrentUrl(Http.Context.current().request()))), "lib/jophielcommons/javascripts/isLoggedOut.js", RaguelUtils.getRealUserJid());
htmlTemplate.addAdditionalScript(isLoggedOutScript);
if (isCurrentUserAdmin()) {
htmlTemplate.addSidebarMenu(Messages.get("user.text.users"), org.iatoki.judgels.raguel.user.routes.UserController.index());
Form<ViewpointForm> form = Form.form(ViewpointForm.class);
if (JudgelsPlayUtils.hasViewPoint()) {
ViewpointForm viewpointForm = new ViewpointForm();
viewpointForm.username = IdentityUtils.getUsername();
form.fill(viewpointForm);
}
Html viewAsWidget = viewAs.render(form, jophielPublicAPI.getUserAutocompleteAPIEndpoint(), "lib/jophielcommons/javascripts/userAutoComplete.js", routes.ApplicationController.postViewAs(), routes.ApplicationController.resetViewAs());
htmlTemplate.addLowerSidebarWidget(viewAsWidget);
}
}
Form<UserProfileSearchForm> userProfileSearchForm = Form.form(UserProfileSearchForm.class);
String autocompleteUserAPIEndpoint = jophielPublicAPI.getUserAutocompleteAPIEndpoint();
String postSearchUserProfileUrl = jophielClientAPI.getUserSearchProfileEndpoint();
Html userProfileSearchWidget = userProfileSearchView.render(userProfileSearchForm, autocompleteUserAPIEndpoint, postSearchUserProfileUrl);
htmlTemplate.addLowerSidebarWidget(userProfileSearchWidget);
return htmlTemplate;
}
@Override
protected Result renderTemplate(HtmlTemplate template) {
template.reverseBreadcrumbLocations();
return super.renderTemplate(template);
}
}