package org.joget.apps.userview.lib;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.form.model.FormPermission;
import org.joget.apps.userview.model.UserviewPermission;
import org.joget.commons.util.LogUtil;
import org.joget.directory.model.Department;
import org.joget.directory.model.Employment;
import org.joget.directory.model.Organization;
import org.joget.directory.model.User;
import org.joget.directory.model.service.ExtDirectoryManager;
import org.joget.plugin.base.PluginWebSupport;
import org.joget.workflow.model.service.WorkflowUserManager;
import org.joget.workflow.util.WorkflowUtil;
import org.json.JSONArray;
import org.springframework.context.ApplicationContext;
public class DepartmentPermission extends UserviewPermission implements PluginWebSupport, FormPermission {
@Override
public boolean isAuthorize() {
User user = getCurrentUser();
if (user != null && user.getEmployments() != null && user.getEmployments().size() > 0) {
Employment e = (Employment) user.getEmployments().iterator().next();
StringTokenizer strToken = new StringTokenizer(getPropertyString("allowedDeptIds"), ";");
while (strToken.hasMoreTokens()) {
String deptId = (String) strToken.nextElement();
if (deptId.equals(e.getDepartmentId())) {
return true;
}
}
}
return false;
}
public String getName() {
return "Department Permission";
}
public String getVersion() {
return "3.0.0";
}
public String getDescription() {
return "";
}
public String getLabel() {
return "Department";
}
public String getClassName() {
return getClass().getName();
}
public String getPropertyOptions() {
return AppUtil.readPluginResource(getClass().getName(), "/properties/userview/departmentPermission.json", null, true, "message/userview/departmentPermission");
}
public void webService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean isAdmin = WorkflowUtil.isCurrentUserInRole(WorkflowUserManager.ROLE_ADMIN);
if (!isAdmin) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
String action = request.getParameter("action");
if ("getOrgs".equals(action)) {
try {
JSONArray jsonArray = new JSONArray();
ApplicationContext ac = AppUtil.getApplicationContext();
ExtDirectoryManager directoryManager = (ExtDirectoryManager) ac.getBean("directoryManager");
Collection<Organization> orgList = directoryManager.getOrganizationsByFilter(null, "name", false, null, null);
for (Organization o : orgList) {
Map<String, String> option = new HashMap<String, String>();
option.put("value", o.getId());
option.put("label", o.getName());
jsonArray.put(option);
}
jsonArray.write(response.getWriter());
} catch (Exception ex) {
LogUtil.error(this.getClass().getName(), ex, "Get Organization options Error!");
}
} else if ("getDepts".equals(action)) {
String orgId = request.getParameter("orgId");
if ("null".equals(orgId) || "".equals(orgId)) {
orgId = null;
}
try {
JSONArray jsonArray = new JSONArray();
ApplicationContext ac = AppUtil.getApplicationContext();
ExtDirectoryManager directoryManager = (ExtDirectoryManager) ac.getBean("directoryManager");
Collection<Department> deptList = directoryManager.getDepartmentsByOrganizationId(null, orgId, "name", false, null, null);
for (Department d : deptList) {
Map<String, String> option = new HashMap<String, String>();
option.put("value", d.getId());
option.put("label", ((d.getTreeStructure() != null) ? d.getTreeStructure() + " " : "") + d.getName());
jsonArray.put(option);
}
jsonArray.write(response.getWriter());
} catch (Exception ex) {
LogUtil.error(this.getClass().getName(), ex, "Get departments options Error!");
}
} else {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
}
}
}