1 package com.pentila.entSavoie.utils;
3 import java.util.ArrayList;
4 import java.util.HashMap;
8 import javax.naming.NamingException;
9 import javax.servlet.http.HttpServletRequest;
11 import com.liferay.portal.kernel.exception.PortalException;
12 import com.liferay.portal.kernel.exception.SystemException;
13 import com.liferay.portal.kernel.json.JSONArray;
14 import com.liferay.portal.kernel.json.JSONFactoryUtil;
15 import com.liferay.portal.kernel.json.JSONObject;
16 import com.liferay.portal.model.Layout;
17 import com.liferay.portal.model.LayoutOverride;
18 import com.liferay.portal.model.Organization;
19 import com.liferay.portal.model.User;
20 import com.liferay.portal.model.UserGroup;
21 import com.liferay.portal.service.LayoutLocalServiceUtil;
22 import com.liferay.portal.service.UserGroupLocalServiceUtil;
23 import com.liferay.portal.theme.ThemeDisplay;
24 import com.pentila.entSavoie.directory.OrganizationFinderServiceUtil;
25 import com.pentila.entSavoie.gestionMenus.model.EntityMenu;
26 import com.pentila.entSavoie.gestionMenus.model.InternationalMenu;
27 import com.pentila.entSavoie.gestionMenus.model.LinkEtab;
28 import com.pentila.entSavoie.gestionMenus.service.EntityMenuLocalServiceUtil;
29 import com.pentila.entSavoie.gestionMenus.service.InternationalMenuLocalServiceUtil;
30 import com.pentila.entSavoie.gestionMenus.service.LinkEtabLocalServiceUtil;
31 import com.pentila.entSavoie.userProperties.service.UserPropertiesLocalServiceUtil;
33 public class MenuFullScreenGenerator {
35 public static String generate(ThemeDisplay themeDisplay, HttpServletRequest request, User user) throws NamingException, Exception{
36 JSONArray menu = JSONFactoryUtil.createJSONArray();
38 if(!user.isDefaultUser()){
39 Organization etab = OrganizationFinderServiceUtil.getEtabRatachement(user);
41 // pages privees du user
42 List<Layout> privatePages = LayoutLocalServiceUtil.getLayouts(user.getGroup().getGroupId(), true);
44 // on construit un map a partir des pages privees du user
45 Map<String, Layout> privateUserPagesMap = new HashMap<String, Layout>();
46 for (Layout l: privatePages) {
47 privateUserPagesMap.put(l.getFriendlyURL(), l);
50 boolean ajaxablePortlets = false;
52 ajaxablePortlets = UserPropertiesLocalServiceUtil.getUserPropertiesByUserId(user.getUserId()).getAjaxablePortlets();
53 } catch(Exception e){}
55 String[] categories = ENTMainUtilsLocalServiceUtil.getEntCategories();
57 for(int i=0; i<categories.length; i++){
58 JSONObject category = JSONFactoryUtil.createJSONObject();
59 category.put("text", categories[i]);
60 category.put("leaf", false);
61 category.put("order", i);
63 JSONArray underMenu = JSONFactoryUtil.createJSONArray();
64 List<EntityMenu> entityMenus = new ArrayList<EntityMenu>(EntityMenuLocalServiceUtil.getEntityMenuByCateory(etab.getOrganizationId(), categories[i]));
65 for (EntityMenu entityMenu : entityMenus) {
66 // Si c'est une feuille
67 if (entityMenu.getIsLeaf()) {
68 for (Layout l: getAppliFromUserGrp(entityMenu.getAppRoleId())) {
69 String furl = l.getFriendlyURL();
70 if (privateUserPagesMap.containsKey(furl)) {
72 InternationalMenu im = InternationalMenuLocalServiceUtil.getByEntityMenuId_Locale(entityMenu.getEntityId(), themeDisplay.getLocale().getLanguage());
74 title = im.getMenuName();
76 title = entityMenu.getEntityName();
78 JSONObject item = JSONFactoryUtil.createJSONObject();
79 item.put("text", title);
80 item.put("leaf", true);
81 item.put("order", entityMenu.getOrderEntityFullScreen());
82 String function = getMenuOnClickFunction(request, entityMenu.getEntityId(), title, privateUserPagesMap, furl, ajaxablePortlets);
83 item.put("onClickFn", function);
89 category.put("menu", underMenu);
93 List<LinkEtab> linkEtabs = LinkEtabLocalServiceUtil.getLinkEtabByEtabId(etab.getOrganizationId());
94 if(linkEtabs.size() > 0){
95 JSONObject linkCateg = JSONFactoryUtil.createJSONObject();
96 linkCateg.put("text", ENTMainUtilsLocalServiceUtil.getEntLinkEtabCategory());
97 linkCateg.put("leaf", false);
98 linkCateg.put("order", categories.length);
100 JSONArray underMenu = JSONFactoryUtil.createJSONArray();
101 for(LinkEtab linkEtab : linkEtabs){
102 JSONObject item = JSONFactoryUtil.createJSONObject();
103 item.put("text", linkEtab.getName());
104 item.put("leaf", true);
105 item.put("order", linkEtab.getOrders());
106 item.put("onClickFn", "window.open(\\\""+ linkEtab.getUrl()+"\\\")");
109 linkCateg.put("menu", underMenu);
114 return menu.toString().replaceAll("'", "’");
117 private static List<Layout> getAppliFromUserGrp(long userGroupId) throws PortalException, SystemException {
119 // Recupere le groupe d'utilisateur correspondant au role applicatif
120 final UserGroup groupApp = UserGroupLocalServiceUtil.getUserGroup(userGroupId);
122 // on recupere l ensemble des pages privees du groupe
123 List<Layout> privatePages = LayoutLocalServiceUtil.getLayouts(groupApp.getGroup().getGroupId(), true);
128 return new ArrayList<Layout>();
132 private static String getMenuOnClickFunction(HttpServletRequest request, long menuId, String menuTitle, Map<String, Layout> privateUserPagesMap, String furl, boolean ajaxablePortlets) throws PortalException, SystemException{
133 String function = "";
136 String regularUrl = "";
137 if(ajaxablePortlets){
138 url = ((LayoutOverride) privateUserPagesMap.get(furl)).getAjaxURL(request);
139 regularUrl = ((LayoutOverride) privateUserPagesMap.get(furl)).getRegularURL(request);
140 function = "entityMenuNavigation(\\\"" + url + "\\\", \\\"" + menuId + "\\\", \\\"" + menuTitle + "\\\", \\\"" + regularUrl + "\\\")";
142 url = ((LayoutOverride) privateUserPagesMap.get(furl)).getRegularURL(request);
143 function = "window.location=" + url;