--- /dev/null
+package com.pentila.entSavoie.utils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.naming.NamingException;
+import javax.servlet.http.HttpServletRequest;
+
+import com.liferay.portal.kernel.exception.PortalException;
+import com.liferay.portal.kernel.exception.SystemException;
+import com.liferay.portal.kernel.json.JSONArray;
+import com.liferay.portal.kernel.json.JSONFactoryUtil;
+import com.liferay.portal.kernel.json.JSONObject;
+import com.liferay.portal.model.Layout;
+import com.liferay.portal.model.LayoutOverride;
+import com.liferay.portal.model.Organization;
+import com.liferay.portal.model.User;
+import com.liferay.portal.model.UserGroup;
+import com.liferay.portal.service.LayoutLocalServiceUtil;
+import com.liferay.portal.service.UserGroupLocalServiceUtil;
+import com.liferay.portal.theme.ThemeDisplay;
+import com.pentila.entSavoie.directory.OrganizationFinderServiceUtil;
+import com.pentila.entSavoie.gestionMenus.model.EntityMenu;
+import com.pentila.entSavoie.gestionMenus.model.InternationalMenu;
+import com.pentila.entSavoie.gestionMenus.model.LinkEtab;
+import com.pentila.entSavoie.gestionMenus.service.EntityMenuLocalServiceUtil;
+import com.pentila.entSavoie.gestionMenus.service.InternationalMenuLocalServiceUtil;
+import com.pentila.entSavoie.gestionMenus.service.LinkEtabLocalServiceUtil;
+import com.pentila.entSavoie.userProperties.service.UserPropertiesLocalServiceUtil;
+
+public class MenuFullScreenGenerator {
+
+ public static String generate(ThemeDisplay themeDisplay, HttpServletRequest request, User user) throws NamingException, Exception{
+ JSONArray menu = JSONFactoryUtil.createJSONArray();
+
+ if(!user.isDefaultUser()){
+ Organization etab = OrganizationFinderServiceUtil.getEtabRatachement(user);
+
+ // pages privees du user
+ List<Layout> privatePages = LayoutLocalServiceUtil.getLayouts(user.getGroup().getGroupId(), true);
+
+ // on construit un map a partir des pages privees du user
+ Map<String, Layout> privateUserPagesMap = new HashMap<String, Layout>();
+ for (Layout l: privatePages) {
+ privateUserPagesMap.put(l.getFriendlyURL(), l);
+ }
+
+ boolean ajaxablePortlets = false;
+ try {
+ ajaxablePortlets = UserPropertiesLocalServiceUtil.getUserPropertiesByUserId(user.getUserId()).getAjaxablePortlets();
+ } catch(Exception e){}
+
+ String[] categories = ENTMainUtilsLocalServiceUtil.getEntCategories();
+
+ for(int i=0; i<categories.length; i++){
+ JSONObject category = JSONFactoryUtil.createJSONObject();
+ category.put("text", categories[i]);
+ category.put("leaf", false);
+ category.put("order", i);
+
+ JSONArray underMenu = JSONFactoryUtil.createJSONArray();
+ List<EntityMenu> entityMenus = new ArrayList<EntityMenu>(EntityMenuLocalServiceUtil.getEntityMenuByCateory(etab.getOrganizationId(), categories[i]));
+ for (EntityMenu entityMenu : entityMenus) {
+ // Si c'est une feuille
+ if (entityMenu.getIsLeaf()) {
+ for (Layout l: getAppliFromUserGrp(entityMenu.getAppRoleId())) {
+ String furl = l.getFriendlyURL();
+ if (privateUserPagesMap.containsKey(furl)) {
+ String title = "";
+ InternationalMenu im = InternationalMenuLocalServiceUtil.getByEntityMenuId_Locale(entityMenu.getEntityId(), themeDisplay.getLocale().getLanguage());
+ if(im != null){
+ title = im.getMenuName();
+ } else {
+ title = entityMenu.getEntityName();
+ }
+ JSONObject item = JSONFactoryUtil.createJSONObject();
+ item.put("text", title);
+ item.put("leaf", true);
+ item.put("order", entityMenu.getOrderEntityFullScreen());
+ String function = getMenuOnClickFunction(request, entityMenu.getEntityId(), title, privateUserPagesMap, furl, ajaxablePortlets);
+ item.put("onClickFn", function);
+ underMenu.put(item);
+ }
+ }
+ }
+ }
+ category.put("menu", underMenu);
+ menu.put(category);
+ }
+
+ List<LinkEtab> linkEtabs = LinkEtabLocalServiceUtil.getLinkEtabByEtabId(etab.getOrganizationId());
+ if(linkEtabs.size() > 0){
+ JSONObject linkCateg = JSONFactoryUtil.createJSONObject();
+ linkCateg.put("text", ENTMainUtilsLocalServiceUtil.getEntLinkEtabCategory());
+ linkCateg.put("leaf", false);
+ linkCateg.put("order", categories.length);
+
+ JSONArray underMenu = JSONFactoryUtil.createJSONArray();
+ for(LinkEtab linkEtab : linkEtabs){
+ JSONObject item = JSONFactoryUtil.createJSONObject();
+ item.put("text", linkEtab.getName());
+ item.put("leaf", true);
+ item.put("order", linkEtab.getOrders());
+ item.put("onClickFn", "window.open(\\\""+ linkEtab.getUrl()+"\\\")");
+ underMenu.put(item);
+ }
+ linkCateg.put("menu", underMenu);
+ menu.put(linkCateg);
+ }
+ }
+
+ return menu.toString().replaceAll("'", "’");
+ }
+
+ private static List<Layout> getAppliFromUserGrp(long userGroupId) throws PortalException, SystemException {
+ try {
+ // Recupere le groupe d'utilisateur correspondant au role applicatif
+ final UserGroup groupApp = UserGroupLocalServiceUtil.getUserGroup(userGroupId);
+
+ // on recupere l ensemble des pages privees du groupe
+ List<Layout> privatePages = LayoutLocalServiceUtil.getLayouts(groupApp.getGroup().getGroupId(), true);
+
+ return privatePages;
+ }
+ catch(Exception e) {
+ return new ArrayList<Layout>();
+ }
+ }
+
+ private static String getMenuOnClickFunction(HttpServletRequest request, long menuId, String menuTitle, Map<String, Layout> privateUserPagesMap, String furl, boolean ajaxablePortlets) throws PortalException, SystemException{
+ String function = "";
+
+ String url = "";
+ String regularUrl = "";
+ if(ajaxablePortlets){
+ url = ((LayoutOverride) privateUserPagesMap.get(furl)).getAjaxURL(request);
+ regularUrl = ((LayoutOverride) privateUserPagesMap.get(furl)).getRegularURL(request);
+ function = "entityMenuNavigation(\\\"" + url + "\\\", \\\"" + menuId + "\\\", \\\"" + menuTitle + "\\\", \\\"" + regularUrl + "\\\")";
+ } else {
+ url = ((LayoutOverride) privateUserPagesMap.get(furl)).getRegularURL(request);
+ function = "window.location=" + url;
+ }
+
+ return function;
+ }
+
+}