package com.psddev.cms.tool.page;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.UUID;
import javax.servlet.ServletException;
import com.psddev.cms.db.ToolUser;
import com.psddev.cms.tool.ToolPageContext;
import com.psddev.dari.db.ObjectType;
import com.psddev.dari.util.ObjectUtils;
public class ProfileTab extends ProfilePanelTab {
@Override
public void writeHtml(ToolPageContext page) throws IOException, ServletException {
String tab = page.param(String.class, "tab");
ToolUser user = page.getUser();
if (user != null
&& user.getRole() != null
&& !user.getRole().hasPermission("type" + ObjectType.getInstance(ToolUser.class).getId() + "/read")
&& (ObjectUtils.isBlank(page.param(UUID.class, "id")) || user.getId().equals(page.param(UUID.class, "id")))) {
user.getRole().setPermissions(user.getRole().getPermissions().replace("-type/" + ObjectType.getInstance(ToolUser.class).getId(), ""));
}
Collection<String> excludeFields = new ArrayList<String>();
excludeFields.add("role");
excludeFields.add("changePasswordOnLogIn");
excludeFields.add("tfaRequired");
if (user.isExternal()) {
excludeFields.add("password");
}
if ("profile".equals(tab) && page.isFormPost()) {
try {
page.include("/WEB-INF/objectPost.jsp", "object", user, "excludeFields", excludeFields);
user.save();
page.writeStart("script", "type", "text/javascript");
page.writeRaw("window.top.window.location = window.top.window.location;");
page.writeEnd();
return;
} catch (Exception ex) {
page.getErrors().add(ex);
}
}
page.writeStart("div",
"class", "p-tud-profile",
"data-tab", page.localize(ProfileTab.class, "title"));
page.writeStart("ul", "class", "piped");
page.writeStart("li");
page.writeStart("a",
"class", "icon icon-key",
"href", page.cmsUrl("/toolUserTfa"),
"target", "toolUserTfa");
page.writeHtml(page.localize(ProfileTab.class, user.isTfaEnabled() ? "action.disableTfa" : "action.enableTfa"));
page.writeEnd();
page.writeEnd();
page.writeEnd();
page.include("/WEB-INF/errors.jsp");
page.writeStart("form",
"method", "post",
"enctype", "multipart/form-data",
"action", page.objectUrl("", user));
page.writeElement("input",
"type", "hidden",
"name", "tab",
"value", "profile");
page.writeStart("div", "class", "fixedScrollable");
page.include("/WEB-INF/objectForm.jsp", "object", user, "excludeFields", excludeFields);
page.writeEnd();
page.writeStart("div", "class", "actions");
page.writeStart("button", "class", "icon icon-action-save");
page.writeHtml(page.localize(ProfileTab.class, "action.save"));
page.writeEnd();
page.writeEnd();
page.writeEnd();
page.writeEnd();
}
}