private void _doPreparePortlet(HttpServletRequest request, Portlet portlet) throws Exception { User user = PortalUtil.getUser(request); Layout layout = (Layout) request.getAttribute(WebKeys.LAYOUT); ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); long scopeGroupId = PortalUtil.getScopeGroupId(request, portlet.getPortletId()); themeDisplay.setScopeGroupId(scopeGroupId); long siteGroupId = 0; if (layout.isTypeControlPanel()) { siteGroupId = PortalUtil.getSiteGroupId(scopeGroupId); } else { siteGroupId = PortalUtil.getSiteGroupId(layout.getGroupId()); } themeDisplay.setSiteGroupId(siteGroupId); if (user != null) { HttpSession session = request.getSession(); InvokerPortletImpl.clearResponse( session, layout.getPrimaryKey(), portlet.getPortletId(), LanguageUtil.getLanguageId(request)); } processPublicRenderParameters(request, layout, portlet); if (themeDisplay.isLifecycleRender() || themeDisplay.isLifecycleResource()) { WindowState windowState = WindowStateFactory.getWindowState(ParamUtil.getString(request, "p_p_state")); if (layout.isTypeControlPanel() && ((windowState == null) || windowState.equals(WindowState.NORMAL) || Validator.isNull(windowState.toString()))) { windowState = WindowState.MAXIMIZED; } PortletMode portletMode = PortletModeFactory.getPortletMode(ParamUtil.getString(request, "p_p_mode")); PortalUtil.updateWindowState(portlet.getPortletId(), user, layout, windowState, request); PortalUtil.updatePortletMode(portlet.getPortletId(), user, layout, portletMode, request); } }
protected void initNewLayoutPermissions( long companyId, long groupId, long userId, Layout layout, Layout importedLayout, boolean privateLayout) throws Exception { boolean addGroupPermissions = true; Group group = importedLayout.getGroup(); if (privateLayout && group.isUser()) { addGroupPermissions = false; } boolean addGuestPermissions = false; if (!privateLayout || layout.isTypeControlPanel()) { addGuestPermissions = true; } _resourceLocalService.addResources( companyId, groupId, userId, Layout.class.getName(), importedLayout.getPlid(), false, addGroupPermissions, addGuestPermissions); }
protected void includeLayoutContent( HttpServletRequest request, HttpServletResponse response, ThemeDisplay themeDisplay, Layout layout) throws Exception { ServletContext servletContext = (ServletContext) request.getAttribute(WebKeys.CTX); String path = StrutsUtil.TEXT_HTML_DIR; if (BrowserSnifferUtil.isWap(request)) { path = StrutsUtil.TEXT_WAP_DIR; } // Manually check the p_p_id. See LEP-1724. if (themeDisplay.isStateExclusive() || Validator.isNotNull(ParamUtil.getString(request, "p_p_id"))) { if (layout.isTypePanel()) { path += "/portal/layout/view/panel.jsp"; } else if (layout.isTypeControlPanel()) { path += "/portal/layout/view/control_panel.jsp"; } else { path += "/portal/layout/view/portlet.jsp"; } } else { path += PortalUtil.getLayoutViewPage(layout); } RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher(path); UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter(); PipingServletResponse pipingServletResponse = new PipingServletResponse(response, unsyncStringWriter); String contentType = pipingServletResponse.getContentType(); requestDispatcher.include(request, pipingServletResponse); if (contentType != null) { pipingServletResponse.setContentType(contentType); } request.setAttribute(WebKeys.LAYOUT_CONTENT, unsyncStringWriter.getStringBundler()); }
protected boolean isPrivateLayout(String name, String primKey) throws Exception { if (!name.equals(Layout.class.getName())) { return false; } long plid = GetterUtil.getLong(primKey); Layout layout = LayoutLocalServiceUtil.getLayout(plid); if (layout.isPublicLayout() || layout.isTypeControlPanel()) { return false; } return true; }
@Override public boolean hasPortletId(String portletId, boolean strict) throws PortalException { List<String> columns = getColumns(); for (String columnId : columns) { if (hasNonstaticPortletId(columnId, portletId)) { return true; } if (hasStaticPortletId(columnId, portletId)) { return true; } } Layout layout = getLayout(); if (layout.isTypeControlPanel()) { return false; } if (isCustomizable() && isCustomizedView()) { LayoutTypePortletImpl defaultLayoutTypePortletImpl = getDefaultLayoutTypePortletImpl(); if (defaultLayoutTypePortletImpl.hasNonstaticPortletId(portletId)) { return false; } } if (!strict && ((PortletPreferencesLocalServiceUtil.getPortletPreferencesCount( PortletKeys.PREFS_OWNER_TYPE_LAYOUT, layout.getPlid(), portletId) > 0) || (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount( PortletKeys.PREFS_OWNER_TYPE_USER, layout.getPlid(), portletId) > 0))) { return true; } return false; }
private String _getBreadcrumbLayoutURL( Layout selLayout, String selLayoutParam, PortletURL portletURL, ThemeDisplay themeDisplay) throws Exception { if (portletURL == null) { return PortalUtil.getLayoutURL(selLayout, themeDisplay); } else { portletURL.setParameter(selLayoutParam, String.valueOf(selLayout.getPlid())); if (selLayout.isTypeControlPanel()) { if (themeDisplay.getDoAsGroupId() > 0) { portletURL.setParameter("doAsGroupId", String.valueOf(themeDisplay.getDoAsGroupId())); } if (themeDisplay.getRefererPlid() != LayoutConstants.DEFAULT_PLID) { portletURL.setParameter("refererPlid", String.valueOf(themeDisplay.getRefererPlid())); } } return portletURL.toString(); } }
public boolean hasPortletId(String portletId) throws PortalException, SystemException { List<String> columns = getColumns(); for (String columnId : columns) { if (hasNonstaticPortletId(columnId, portletId)) { return true; } if (hasStaticPortletId(columnId, portletId)) { return true; } } Layout layout = getLayout(); if (layout.isTypeControlPanel() || layout.isTypePanel()) { return true; } return false; }
protected boolean isDisplaySuccessMessage(PortletRequest portletRequest) { if (!SessionErrors.isEmpty(portletRequest)) { return false; } ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY); Layout layout = themeDisplay.getLayout(); if (layout.isTypeControlPanel()) { return true; } String portletId = (String) portletRequest.getAttribute(WebKeys.PORTLET_ID); try { LayoutTypePortlet layoutTypePortlet = themeDisplay.getLayoutTypePortlet(); if (layoutTypePortlet.hasPortletId(portletId)) { return true; } } catch (PortalException pe) { if (_log.isDebugEnabled()) { _log.debug(pe, pe); } } Portlet portlet = PortletLocalServiceUtil.getPortletById(themeDisplay.getCompanyId(), portletId); if (portlet.isAddDefaultResource()) { return true; } return false; }
private void _doRender(HttpServletRequest request, HttpServletResponse response, Portlet portlet) throws Exception { if ((portlet != null) && portlet.isInstanceable() && !portlet.isAddDefaultResource()) { String instanceId = portlet.getInstanceId(); if (!Validator.isPassword(instanceId)) { if (_log.isDebugEnabled()) { _log.debug( "Portlet " + portlet.getPortletId() + " is instanceable but does not have a valid " + "instance id"); } portlet = null; } } if (portlet == null) { return; } // Capture the current portlet's settings to reset them once the child // portlet is rendered ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); PortletDisplay portletDisplayClone = PortletDisplayFactory.create(); portletDisplay.copyTo(portletDisplayClone); PortletConfig portletConfig = (PortletConfig) request.getAttribute(JavaConstants.JAVAX_PORTLET_CONFIG); PortletRequest portletRequest = (PortletRequest) request.getAttribute(JavaConstants.JAVAX_PORTLET_REQUEST); if (!(portletRequest instanceof RenderRequest)) { portletRequest = null; } PortletResponse portletResponse = (PortletResponse) request.getAttribute(JavaConstants.JAVAX_PORTLET_RESPONSE); if (!(portletResponse instanceof RenderResponse)) { portletResponse = null; } String lifecycle = (String) request.getAttribute(PortletRequest.LIFECYCLE_PHASE); request.setAttribute(WebKeys.RENDER_PORTLET, portlet); String path = (String) request.getAttribute(WebKeys.RENDER_PATH); if (path == null) { path = "/html/portal/render_portlet.jsp"; } RequestDispatcher requestDispatcher = DirectRequestDispatcherFactoryUtil.getRequestDispatcher(request, path); BufferCacheServletResponse bufferCacheServletResponse = null; boolean writeOutput = false; if (response instanceof BufferCacheServletResponse) { bufferCacheServletResponse = (BufferCacheServletResponse) response; } else { writeOutput = true; bufferCacheServletResponse = new BufferCacheServletResponse(response); } try { requestDispatcher.include(request, bufferCacheServletResponse); Boolean portletConfiguratorVisibility = (Boolean) request.getAttribute(WebKeys.PORTLET_CONFIGURATOR_VISIBILITY); if (portletConfiguratorVisibility != null) { request.removeAttribute(WebKeys.PORTLET_CONFIGURATOR_VISIBILITY); Layout layout = themeDisplay.getLayout(); if (!layout.isTypeControlPanel() && !LayoutPermissionUtil.contains( themeDisplay.getPermissionChecker(), layout, ActionKeys.UPDATE) && !PortletPermissionUtil.contains( themeDisplay.getPermissionChecker(), layout, portlet.getPortletId(), ActionKeys.CONFIGURATION)) { bufferCacheServletResponse.setCharBuffer(null); return; } } if (writeOutput) { Writer writer = response.getWriter(); writer.write(bufferCacheServletResponse.getString()); } } finally { portletDisplay.copyFrom(portletDisplayClone); portletDisplayClone.recycle(); if (portletConfig != null) { request.setAttribute(JavaConstants.JAVAX_PORTLET_CONFIG, portletConfig); } if (portletRequest != null) { request.setAttribute(JavaConstants.JAVAX_PORTLET_REQUEST, portletRequest); } if (portletResponse != null) { request.setAttribute(JavaConstants.JAVAX_PORTLET_RESPONSE, portletResponse); } if (lifecycle != null) { request.setAttribute(PortletRequest.LIFECYCLE_PHASE, lifecycle); } request.removeAttribute(WebKeys.RENDER_PORTLET); } }
private ActionResult _doProcessAction( HttpServletRequest request, HttpServletResponse response, Portlet portlet) throws Exception { HttpServletRequest ownerLayoutRequest = getOwnerLayoutRequestWrapper(request, portlet); Layout ownerLayout = (Layout) ownerLayoutRequest.getAttribute(WebKeys.LAYOUT); boolean allowAddPortletDefaultResource = PortalUtil.isAllowAddPortletDefaultResource(ownerLayoutRequest, portlet); if (!allowAddPortletDefaultResource) { String url = null; LastPath lastPath = (LastPath) request.getAttribute(WebKeys.LAST_PATH); if (lastPath != null) { StringBundler sb = new StringBundler(3); sb.append(PortalUtil.getPortalURL(request)); sb.append(lastPath.getContextPath()); sb.append(lastPath.getPath()); url = sb.toString(); } else { url = String.valueOf(request.getRequestURI()); } _log.error("Reject processAction for " + url + " on " + portlet.getPortletId()); return ActionResult.EMPTY_ACTION_RESULT; } Layout layout = (Layout) request.getAttribute(WebKeys.LAYOUT); WindowState windowState = WindowStateFactory.getWindowState(ParamUtil.getString(request, "p_p_state")); if (layout.isTypeControlPanel() && ((windowState == null) || windowState.equals(WindowState.NORMAL) || Validator.isNull(windowState.toString()))) { windowState = WindowState.MAXIMIZED; } PortletMode portletMode = PortletModeFactory.getPortletMode(ParamUtil.getString(request, "p_p_mode")); PortletPreferencesIds portletPreferencesIds = PortletPreferencesFactoryUtil.getPortletPreferencesIds(request, portlet.getPortletId()); PortletPreferences portletPreferences = PortletPreferencesLocalServiceUtil.getPreferences(portletPreferencesIds); ServletContext servletContext = (ServletContext) request.getAttribute(WebKeys.CTX); InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(portlet, servletContext); PortletConfig portletConfig = PortletConfigFactoryUtil.create(portlet, servletContext); PortletContext portletContext = portletConfig.getPortletContext(); String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE); if (_log.isDebugEnabled()) { _log.debug("Content type " + contentType); } UploadServletRequest uploadServletRequest = null; try { if ((contentType != null) && contentType.startsWith(ContentTypes.MULTIPART_FORM_DATA)) { PortletConfigImpl invokerPortletConfigImpl = (PortletConfigImpl) invokerPortlet.getPortletConfig(); if (invokerPortlet.isStrutsPortlet() || invokerPortletConfigImpl.isCopyRequestParameters() || !invokerPortletConfigImpl.isWARFile()) { uploadServletRequest = new UploadServletRequestImpl(request); request = uploadServletRequest; } } if (PropsValues.AUTH_TOKEN_CHECK_ENABLED && invokerPortlet.isCheckAuthToken()) { AuthTokenUtil.check(request); } ActionRequestImpl actionRequestImpl = ActionRequestFactory.create( request, portlet, invokerPortlet, portletContext, windowState, portletMode, portletPreferences, layout.getPlid()); User user = PortalUtil.getUser(request); ActionResponseImpl actionResponseImpl = ActionResponseFactory.create( actionRequestImpl, response, portlet.getPortletId(), user, layout, windowState, portletMode); actionRequestImpl.defineObjects(portletConfig, actionResponseImpl); ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequestImpl); ServiceContextThreadLocal.pushServiceContext(serviceContext); PermissionChecker permissionChecker = PermissionThreadLocal.getPermissionChecker(); ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); long scopeGroupId = themeDisplay.getScopeGroupId(); boolean access = PortletPermissionUtil.hasAccessPermission( permissionChecker, scopeGroupId, ownerLayout, portlet, portletMode); if (access) { invokerPortlet.processAction(actionRequestImpl, actionResponseImpl); actionResponseImpl.transferHeaders(response); } RenderParametersPool.put( request, layout.getPlid(), portlet.getPortletId(), actionResponseImpl.getRenderParameterMap()); List<Event> events = actionResponseImpl.getEvents(); String redirectLocation = actionResponseImpl.getRedirectLocation(); if (Validator.isNull(redirectLocation) && portlet.isActionURLRedirect()) { PortletURL portletURL = new PortletURLImpl( actionRequestImpl, actionRequestImpl.getPortletName(), layout.getPlid(), PortletRequest.RENDER_PHASE); Map<String, String[]> renderParameters = actionResponseImpl.getRenderParameterMap(); for (Map.Entry<String, String[]> entry : renderParameters.entrySet()) { String key = entry.getKey(); String[] value = entry.getValue(); portletURL.setParameter(key, value); } redirectLocation = portletURL.toString(); } return new ActionResult(events, redirectLocation); } finally { if (uploadServletRequest != null) { uploadServletRequest.cleanUp(); } ServiceContextThreadLocal.popServiceContext(); } }
protected void importLayout( PortletDataContext portletDataContext, User user, LayoutCache layoutCache, List<Layout> previousLayouts, List<Layout> newLayouts, Map<Long, Layout> newLayoutsMap, Set<Long> newLayoutIds, String portletsMergeMode, String themeId, String colorSchemeId, String layoutsImportMode, boolean privateLayout, boolean importPermissions, boolean importPublicLayoutPermissions, boolean importUserPermissions, boolean importThemeSettings, Element rootElement, Element layoutElement) throws Exception { long groupId = portletDataContext.getGroupId(); String layoutUuid = GetterUtil.getString(layoutElement.attributeValue("layout-uuid")); long layoutId = GetterUtil.getInteger(layoutElement.attributeValue("layout-id")); long oldLayoutId = layoutId; boolean deleteLayout = GetterUtil.getBoolean(layoutElement.attributeValue("delete")); if (deleteLayout) { Layout layout = LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(layoutUuid, groupId); if (layout != null) { newLayoutsMap.put(oldLayoutId, layout); ServiceContext serviceContext = ServiceContextThreadLocal.getServiceContext(); LayoutLocalServiceUtil.deleteLayout(layout, false, serviceContext); } return; } String path = layoutElement.attributeValue("path"); if (!portletDataContext.isPathNotProcessed(path)) { return; } Layout layout = (Layout) portletDataContext.getZipEntryAsObject(path); Layout existingLayout = null; Layout importedLayout = null; String friendlyURL = layout.getFriendlyURL(); if (layoutsImportMode.equals(PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_ADD_AS_NEW)) { layoutId = LayoutLocalServiceUtil.getNextLayoutId(groupId, privateLayout); friendlyURL = StringPool.SLASH + layoutId; } else if (layoutsImportMode.equals( PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_MERGE_BY_LAYOUT_NAME)) { Locale locale = LocaleUtil.getDefault(); String localizedName = layout.getName(locale); for (Layout curLayout : previousLayouts) { if (localizedName.equals(curLayout.getName(locale)) || friendlyURL.equals(curLayout.getFriendlyURL())) { existingLayout = curLayout; break; } } if (existingLayout == null) { layoutId = LayoutLocalServiceUtil.getNextLayoutId(groupId, privateLayout); } } else if (layoutsImportMode.equals( PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_CREATED_FROM_PROTOTYPE)) { existingLayout = LayoutUtil.fetchByG_P_SPLU(groupId, privateLayout, layout.getUuid()); if (SitesUtil.isLayoutModifiedSinceLastMerge(existingLayout)) { newLayoutsMap.put(oldLayoutId, existingLayout); return; } } else { // The default behaviour of import mode is // PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_MERGE_BY_LAYOUT_UUID existingLayout = LayoutUtil.fetchByUUID_G(layout.getUuid(), groupId); if (existingLayout == null) { existingLayout = LayoutUtil.fetchByG_P_F(groupId, privateLayout, friendlyURL); } if (existingLayout == null) { layoutId = LayoutLocalServiceUtil.getNextLayoutId(groupId, privateLayout); } } if (_log.isDebugEnabled()) { if (existingLayout == null) { _log.debug( "Layout with {groupId=" + groupId + ",privateLayout=" + privateLayout + ",layoutId=" + layoutId + "} does not exist"); } else { _log.debug( "Layout with {groupId=" + groupId + ",privateLayout=" + privateLayout + ",layoutId=" + layoutId + "} exists"); } } if (existingLayout == null) { long plid = CounterLocalServiceUtil.increment(); importedLayout = LayoutUtil.create(plid); if (layoutsImportMode.equals( PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE_CREATED_FROM_PROTOTYPE)) { importedLayout.setSourcePrototypeLayoutUuid(layout.getUuid()); layoutId = LayoutLocalServiceUtil.getNextLayoutId(groupId, privateLayout); } else { importedLayout.setUuid(layout.getUuid()); importedLayout.setCreateDate(layout.getCreateDate()); importedLayout.setModifiedDate(layout.getModifiedDate()); importedLayout.setLayoutPrototypeUuid(layout.getLayoutPrototypeUuid()); importedLayout.setLayoutPrototypeLinkEnabled(layout.isLayoutPrototypeLinkEnabled()); importedLayout.setSourcePrototypeLayoutUuid(layout.getSourcePrototypeLayoutUuid()); } importedLayout.setGroupId(groupId); importedLayout.setPrivateLayout(privateLayout); importedLayout.setLayoutId(layoutId); // Resources boolean addGroupPermissions = true; Group group = importedLayout.getGroup(); if (privateLayout && group.isUser()) { addGroupPermissions = false; } boolean addGuestPermissions = false; if (!privateLayout || layout.isTypeControlPanel()) { addGuestPermissions = true; } ResourceLocalServiceUtil.addResources( user.getCompanyId(), groupId, user.getUserId(), Layout.class.getName(), importedLayout.getPlid(), false, addGroupPermissions, addGuestPermissions); LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(groupId, privateLayout); importedLayout.setLayoutSet(layoutSet); } else { importedLayout = existingLayout; } newLayoutsMap.put(oldLayoutId, importedLayout); long parentLayoutId = layout.getParentLayoutId(); Node parentLayoutNode = rootElement.selectSingleNode("./layouts/layout[@layout-id='" + parentLayoutId + "']"); String parentLayoutUuid = GetterUtil.getString(layoutElement.attributeValue("parent-layout-uuid")); if ((parentLayoutId != LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) && (parentLayoutNode != null)) { importLayout( portletDataContext, user, layoutCache, previousLayouts, newLayouts, newLayoutsMap, newLayoutIds, portletsMergeMode, themeId, colorSchemeId, layoutsImportMode, privateLayout, importPermissions, importPublicLayoutPermissions, importUserPermissions, importThemeSettings, rootElement, (Element) parentLayoutNode); Layout parentLayout = newLayoutsMap.get(parentLayoutId); parentLayoutId = parentLayout.getLayoutId(); } else if (Validator.isNotNull(parentLayoutUuid)) { Layout parentLayout = LayoutLocalServiceUtil.getLayoutByUuidAndGroupId(parentLayoutUuid, groupId); parentLayoutId = parentLayout.getLayoutId(); } if (_log.isDebugEnabled()) { _log.debug( "Importing layout with layout id " + layoutId + " and parent layout id " + parentLayoutId); } importedLayout.setCompanyId(user.getCompanyId()); importedLayout.setParentLayoutId(parentLayoutId); importedLayout.setName(layout.getName()); importedLayout.setTitle(layout.getTitle()); importedLayout.setDescription(layout.getDescription()); importedLayout.setKeywords(layout.getKeywords()); importedLayout.setRobots(layout.getRobots()); importedLayout.setType(layout.getType()); if (layout.isTypeArticle()) { importJournalArticle(portletDataContext, layout, layoutElement); importedLayout.setTypeSettings(layout.getTypeSettings()); } else if (layout.isTypePortlet() && Validator.isNotNull(layout.getTypeSettings()) && !portletsMergeMode.equals(PortletDataHandlerKeys.PORTLETS_MERGE_MODE_REPLACE)) { mergePortlets(importedLayout, layout.getTypeSettings(), portletsMergeMode); } else if (layout.isTypeLinkToLayout()) { UnicodeProperties typeSettingsProperties = layout.getTypeSettingsProperties(); long linkToLayoutId = GetterUtil.getLong( typeSettingsProperties.getProperty("linkToLayoutId", StringPool.BLANK)); if (linkToLayoutId > 0) { Node linkedLayoutNode = rootElement.selectSingleNode("./layouts/layout[@layout-id='" + linkToLayoutId + "']"); if (linkedLayoutNode != null) { importLayout( portletDataContext, user, layoutCache, previousLayouts, newLayouts, newLayoutsMap, newLayoutIds, portletsMergeMode, themeId, colorSchemeId, layoutsImportMode, privateLayout, importPermissions, importPublicLayoutPermissions, importUserPermissions, importThemeSettings, rootElement, (Element) linkedLayoutNode); Layout linkedLayout = newLayoutsMap.get(linkToLayoutId); typeSettingsProperties.setProperty( "privateLayout", String.valueOf(linkedLayout.getPrivateLayout())); typeSettingsProperties.setProperty( "linkToLayoutId", String.valueOf(linkedLayout.getLayoutId())); } else { if (_log.isWarnEnabled()) { StringBundler sb = new StringBundler(); sb.append("Unable to link layout with friendly URL "); sb.append(layout.getFriendlyURL()); sb.append(" and layout id "); sb.append(layout.getLayoutId()); sb.append(" to layout with layout id "); sb.append(linkToLayoutId); _log.warn(sb.toString()); } } } importedLayout.setTypeSettings(layout.getTypeSettings()); } else { importedLayout.setTypeSettings(layout.getTypeSettings()); } importedLayout.setHidden(layout.isHidden()); importedLayout.setFriendlyURL(friendlyURL); if (importThemeSettings) { importedLayout.setThemeId(layout.getThemeId()); importedLayout.setColorSchemeId(layout.getColorSchemeId()); } else { importedLayout.setThemeId(StringPool.BLANK); importedLayout.setColorSchemeId(StringPool.BLANK); } importedLayout.setWapThemeId(layout.getWapThemeId()); importedLayout.setWapColorSchemeId(layout.getWapColorSchemeId()); importedLayout.setCss(layout.getCss()); importedLayout.setPriority(layout.getPriority()); importedLayout.setLayoutPrototypeUuid(layout.getLayoutPrototypeUuid()); importedLayout.setLayoutPrototypeLinkEnabled(layout.isLayoutPrototypeLinkEnabled()); StagingUtil.updateLastImportSettings(layoutElement, importedLayout, portletDataContext); fixTypeSettings(importedLayout); importedLayout.setIconImage(false); if (layout.isIconImage()) { String iconImagePath = layoutElement.elementText("icon-image-path"); byte[] iconBytes = portletDataContext.getZipEntryAsByteArray(iconImagePath); if ((iconBytes != null) && (iconBytes.length > 0)) { importedLayout.setIconImage(true); if (importedLayout.getIconImageId() == 0) { long iconImageId = CounterLocalServiceUtil.increment(); importedLayout.setIconImageId(iconImageId); } ImageLocalServiceUtil.updateImage(importedLayout.getIconImageId(), iconBytes); } } else { ImageLocalServiceUtil.deleteImage(importedLayout.getIconImageId()); } ServiceContext serviceContext = portletDataContext.createServiceContext(layoutElement, importedLayout, null); importedLayout.setExpandoBridgeAttributes(serviceContext); LayoutUtil.update(importedLayout, false); portletDataContext.setPlid(importedLayout.getPlid()); portletDataContext.setOldPlid(layout.getPlid()); newLayoutIds.add(importedLayout.getLayoutId()); newLayouts.add(importedLayout); // Layout permissions if (importPermissions) { _permissionImporter.importLayoutPermissions( layoutCache, portletDataContext.getCompanyId(), groupId, user.getUserId(), importedLayout, layoutElement, rootElement, importUserPermissions); } if (importPublicLayoutPermissions) { String resourceName = Layout.class.getName(); String resourcePrimKey = String.valueOf(importedLayout.getPlid()); Role guestRole = RoleLocalServiceUtil.getRole(importedLayout.getCompanyId(), RoleConstants.GUEST); if (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 5) { Resource resource = layoutCache.getResource( importedLayout.getCompanyId(), groupId, resourceName, ResourceConstants.SCOPE_INDIVIDUAL, resourcePrimKey, false); PermissionLocalServiceUtil.setRolePermissions( guestRole.getRoleId(), new String[] {ActionKeys.VIEW}, resource.getResourceId()); } else if (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 6) { ResourcePermissionLocalServiceUtil.setResourcePermissions( importedLayout.getCompanyId(), resourceName, ResourceConstants.SCOPE_INDIVIDUAL, resourcePrimKey, guestRole.getRoleId(), new String[] {ActionKeys.VIEW}); } else { Resource resource = layoutCache.getResource( importedLayout.getCompanyId(), groupId, resourceName, ResourceConstants.SCOPE_INDIVIDUAL, resourcePrimKey, false); PermissionLocalServiceUtil.setGroupPermissions( groupId, new String[] {ActionKeys.VIEW}, resource.getResourceId()); } } _portletImporter.importPortletData( portletDataContext, PortletKeys.LAYOUT_CONFIGURATION, null, layoutElement); }
protected File doExport(PortletDataContext portletDataContext) throws Exception { boolean exportPermissions = MapUtil.getBoolean( portletDataContext.getParameterMap(), PortletDataHandlerKeys.PERMISSIONS); if (_log.isDebugEnabled()) { _log.debug("Export permissions " + exportPermissions); } StopWatch stopWatch = new StopWatch(); stopWatch.start(); Layout layout = _layoutLocalService.getLayout(portletDataContext.getPlid()); if (!layout.isTypeControlPanel() && !layout.isTypePanel() && !layout.isTypePortlet()) { throw new LayoutImportException("Layout type " + layout.getType() + " is not valid"); } ServiceContext serviceContext = ServiceContextThreadLocal.getServiceContext(); if (serviceContext == null) { serviceContext = new ServiceContext(); serviceContext.setCompanyId(layout.getCompanyId()); serviceContext.setSignedIn(false); long defaultUserId = _userLocalService.getDefaultUserId(layout.getCompanyId()); serviceContext.setUserId(defaultUserId); ServiceContextThreadLocal.pushServiceContext(serviceContext); } long layoutSetBranchId = MapUtil.getLong(portletDataContext.getParameterMap(), "layoutSetBranchId"); serviceContext.setAttribute("layoutSetBranchId", layoutSetBranchId); long scopeGroupId = portletDataContext.getGroupId(); javax.portlet.PortletPreferences jxPortletPreferences = PortletPreferencesFactoryUtil.getLayoutPortletSetup( layout, portletDataContext.getPortletId()); String scopeType = GetterUtil.getString(jxPortletPreferences.getValue("lfrScopeType", null)); String scopeLayoutUuid = GetterUtil.getString(jxPortletPreferences.getValue("lfrScopeLayoutUuid", null)); if (Validator.isNotNull(scopeType)) { Group scopeGroup = null; if (scopeType.equals("company")) { scopeGroup = _groupLocalService.getCompanyGroup(layout.getCompanyId()); } else if (Validator.isNotNull(scopeLayoutUuid)) { scopeGroup = layout.getScopeGroup(); } if (scopeGroup != null) { scopeGroupId = scopeGroup.getGroupId(); } } portletDataContext.setScopeType(scopeType); portletDataContext.setScopeLayoutUuid(scopeLayoutUuid); Document document = SAXReaderUtil.createDocument(); Element rootElement = document.addElement("root"); portletDataContext.setExportDataRootElement(rootElement); Element headerElement = rootElement.addElement("header"); headerElement.addAttribute( "available-locales", StringUtil.merge( LanguageUtil.getAvailableLocales( PortalUtil.getSiteGroupId(portletDataContext.getScopeGroupId())))); headerElement.addAttribute("build-number", String.valueOf(ReleaseInfo.getBuildNumber())); headerElement.addAttribute("export-date", Time.getRFC822()); if (portletDataContext.hasDateRange()) { headerElement.addAttribute("start-date", String.valueOf(portletDataContext.getStartDate())); headerElement.addAttribute("end-date", String.valueOf(portletDataContext.getEndDate())); } headerElement.addAttribute("type", "portlet"); headerElement.addAttribute("company-id", String.valueOf(portletDataContext.getCompanyId())); headerElement.addAttribute( "company-group-id", String.valueOf(portletDataContext.getCompanyGroupId())); headerElement.addAttribute("group-id", String.valueOf(scopeGroupId)); headerElement.addAttribute( "user-personal-site-group-id", String.valueOf(portletDataContext.getUserPersonalSiteGroupId())); headerElement.addAttribute("private-layout", String.valueOf(layout.isPrivateLayout())); headerElement.addAttribute("root-portlet-id", portletDataContext.getRootPortletId()); Element missingReferencesElement = rootElement.addElement("missing-references"); portletDataContext.setMissingReferencesElement(missingReferencesElement); Map<String, Boolean> exportPortletControlsMap = ExportImportHelperUtil.getExportPortletControlsMap( layout.getCompanyId(), portletDataContext.getPortletId(), portletDataContext.getParameterMap()); exportPortlet( portletDataContext, layout, rootElement, exportPermissions, exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS), exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_DATA), exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_SETUP), exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_USER_PREFERENCES)); exportService( portletDataContext, rootElement, exportPortletControlsMap.get(PortletDataHandlerKeys.PORTLET_SETUP)); exportAssetLinks(portletDataContext); exportExpandoTables(portletDataContext); exportLocks(portletDataContext); _deletionSystemEventExporter.exportDeletionSystemEvents(portletDataContext); if (exportPermissions) { _permissionExporter.exportPortletDataPermissions(portletDataContext); } ExportImportHelperUtil.writeManifestSummary(document, portletDataContext.getManifestSummary()); if (_log.isInfoEnabled()) { _log.info("Exporting portlet took " + stopWatch.getTime() + " ms"); } try { portletDataContext.addZipEntry("/manifest.xml", document.formattedString()); } catch (IOException ioe) { throw new SystemException(ioe); } ZipWriter zipWriter = portletDataContext.getZipWriter(); return zipWriter.getFile(); }
protected File doExportPortletInfoAsFile( long plid, long groupId, String portletId, Map<String, String[]> parameterMap, Date startDate, Date endDate) throws Exception { boolean exportCategories = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.CATEGORIES); boolean exportPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PERMISSIONS); boolean exportPortletArchivedSetups = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS); boolean exportPortletData = false; if (parameterMap.containsKey( PortletDataHandlerKeys.PORTLET_DATA + "_" + PortletConstants.getRootPortletId(portletId))) { exportPortletData = MapUtil.getBoolean( parameterMap, PortletDataHandlerKeys.PORTLET_DATA + "_" + PortletConstants.getRootPortletId(portletId)); } else { exportPortletData = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_DATA); } boolean exportPortletDataAll = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_DATA_ALL); boolean exportPortletSetup = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_SETUP); boolean exportPortletUserPreferences = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.PORTLET_USER_PREFERENCES); boolean exportUserPermissions = MapUtil.getBoolean(parameterMap, PortletDataHandlerKeys.USER_PERMISSIONS); if (_log.isDebugEnabled()) { _log.debug("Export categories " + exportCategories); _log.debug("Export permissions " + exportPermissions); _log.debug("Export portlet archived setups " + exportPortletArchivedSetups); _log.debug("Export portlet data " + exportPortletData); _log.debug("Export all portlet data " + exportPortletDataAll); _log.debug("Export portlet setup " + exportPortletSetup); _log.debug("Export portlet user preferences " + exportPortletUserPreferences); _log.debug("Export user permissions " + exportUserPermissions); } if (exportPortletDataAll) { exportPortletData = true; } StopWatch stopWatch = null; if (_log.isInfoEnabled()) { stopWatch = new StopWatch(); stopWatch.start(); } LayoutCache layoutCache = new LayoutCache(); Layout layout = LayoutLocalServiceUtil.getLayout(plid); if (!layout.isTypeControlPanel() && !layout.isTypePanel() && !layout.isTypePortlet()) { throw new LayoutImportException("Layout type " + layout.getType() + " is not valid"); } long defaultUserId = UserLocalServiceUtil.getDefaultUserId(layout.getCompanyId()); ZipWriter zipWriter = ZipWriterFactoryUtil.getZipWriter(); long scopeGroupId = groupId; javax.portlet.PortletPreferences jxPreferences = PortletPreferencesFactoryUtil.getLayoutPortletSetup(layout, portletId); String scopeType = GetterUtil.getString(jxPreferences.getValue("lfrScopeType", null)); String scopeLayoutUuid = GetterUtil.getString(jxPreferences.getValue("lfrScopeLayoutUuid", null)); if (Validator.isNotNull(scopeType)) { Group scopeGroup = null; if (scopeType.equals("company")) { scopeGroup = GroupLocalServiceUtil.getCompanyGroup(layout.getCompanyId()); } else if (Validator.isNotNull(scopeLayoutUuid)) { scopeGroup = layout.getScopeGroup(); } if (scopeGroup != null) { scopeGroupId = scopeGroup.getGroupId(); } } PortletDataContext portletDataContext = new PortletDataContextImpl( layout.getCompanyId(), scopeGroupId, parameterMap, new HashSet<String>(), startDate, endDate, zipWriter); portletDataContext.setPortetDataContextListener( new PortletDataContextListenerImpl(portletDataContext)); portletDataContext.setPlid(plid); portletDataContext.setOldPlid(plid); portletDataContext.setScopeType(scopeType); portletDataContext.setScopeLayoutUuid(scopeLayoutUuid); Document document = SAXReaderUtil.createDocument(); Element rootElement = document.addElement("root"); Element headerElement = rootElement.addElement("header"); headerElement.addAttribute("build-number", String.valueOf(ReleaseInfo.getBuildNumber())); headerElement.addAttribute("export-date", Time.getRFC822()); if (portletDataContext.hasDateRange()) { headerElement.addAttribute("start-date", String.valueOf(portletDataContext.getStartDate())); headerElement.addAttribute("end-date", String.valueOf(portletDataContext.getEndDate())); } headerElement.addAttribute("type", "portlet"); headerElement.addAttribute("group-id", String.valueOf(scopeGroupId)); headerElement.addAttribute("private-layout", String.valueOf(layout.isPrivateLayout())); headerElement.addAttribute("root-portlet-id", PortletConstants.getRootPortletId(portletId)); exportPortlet( portletDataContext, layoutCache, portletId, layout, rootElement, defaultUserId, exportPermissions, exportPortletArchivedSetups, exportPortletData, exportPortletSetup, exportPortletUserPreferences, exportUserPermissions); if (exportCategories) { exportAssetCategories(portletDataContext); } exportAssetLinks(portletDataContext); exportAssetTags(portletDataContext); exportComments(portletDataContext); exportExpandoTables(portletDataContext); exportLocks(portletDataContext); if (exportPermissions) { _permissionExporter.exportPortletDataPermissions(portletDataContext); } exportRatingsEntries(portletDataContext, rootElement); if (_log.isInfoEnabled()) { _log.info("Exporting portlet took " + stopWatch.getTime() + " ms"); } try { portletDataContext.addZipEntry("/manifest.xml", document.formattedString()); } catch (IOException ioe) { throw new SystemException(ioe); } return zipWriter.getFile(); }
protected Portlet processPortletRequest( HttpServletRequest request, HttpServletResponse response, String lifecycle) throws Exception { HttpSession session = request.getSession(); long companyId = PortalUtil.getCompanyId(request); User user = PortalUtil.getUser(request); Layout layout = (Layout) request.getAttribute(WebKeys.LAYOUT); String portletId = ParamUtil.getString(request, "p_p_id"); if (Validator.isNull(portletId)) { return null; } Portlet portlet = PortletLocalServiceUtil.getPortletById(companyId, portletId); if (portlet == null) { return null; } ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); themeDisplay.setScopeGroupId(PortalUtil.getScopeGroupId(request, portletId)); ServletContext servletContext = (ServletContext) request.getAttribute(WebKeys.CTX); InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(portlet, servletContext); if (user != null) { InvokerPortletImpl.clearResponse( session, layout.getPrimaryKey(), portletId, LanguageUtil.getLanguageId(request)); } PortletConfig portletConfig = PortletConfigFactoryUtil.create(portlet, servletContext); PortletContext portletContext = portletConfig.getPortletContext(); WindowState windowState = WindowStateFactory.getWindowState(ParamUtil.getString(request, "p_p_state")); if (layout.isTypeControlPanel() && ((windowState == null) || windowState.equals(WindowState.NORMAL) || (Validator.isNull(windowState.toString())))) { windowState = WindowState.MAXIMIZED; } PortletMode portletMode = PortletModeFactory.getPortletMode(ParamUtil.getString(request, "p_p_mode")); PortletPreferencesIds portletPreferencesIds = PortletPreferencesFactoryUtil.getPortletPreferencesIds(request, portletId); PortletPreferences portletPreferences = PortletPreferencesLocalServiceUtil.getPreferences(portletPreferencesIds); processPublicRenderParameters(request, layout, portlet); if (lifecycle.equals(PortletRequest.ACTION_PHASE)) { String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE); if (_log.isDebugEnabled()) { _log.debug("Content type " + contentType); } UploadServletRequest uploadRequest = null; try { if ((contentType != null) && (contentType.startsWith(ContentTypes.MULTIPART_FORM_DATA))) { PortletConfigImpl invokerPortletConfigImpl = (PortletConfigImpl) invokerPortlet.getPortletConfig(); if (invokerPortlet.isStrutsPortlet() || ((invokerPortletConfigImpl != null) && (!invokerPortletConfigImpl.isWARFile()))) { uploadRequest = new UploadServletRequestImpl(request); request = uploadRequest; } } if (PropsValues.AUTH_TOKEN_CHECK_ENABLED && invokerPortlet.isCheckAuthToken()) { AuthTokenUtil.check(request); } ActionRequestImpl actionRequestImpl = ActionRequestFactory.create( request, portlet, invokerPortlet, portletContext, windowState, portletMode, portletPreferences, layout.getPlid()); ActionResponseImpl actionResponseImpl = ActionResponseFactory.create( actionRequestImpl, response, portletId, user, layout, windowState, portletMode); actionRequestImpl.defineObjects(portletConfig, actionResponseImpl); ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequestImpl); ServiceContextThreadLocal.pushServiceContext(serviceContext); invokerPortlet.processAction(actionRequestImpl, actionResponseImpl); actionResponseImpl.transferHeaders(response); RenderParametersPool.put( request, layout.getPlid(), portletId, actionResponseImpl.getRenderParameterMap()); List<LayoutTypePortlet> layoutTypePortlets = null; if (!actionResponseImpl.getEvents().isEmpty()) { if (PropsValues.PORTLET_EVENT_DISTRIBUTION_LAYOUT_SET) { layoutTypePortlets = getLayoutTypePortlets(layout.getGroupId(), layout.isPrivateLayout()); } else { if (layout.isTypePortlet()) { LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType(); layoutTypePortlets = new ArrayList<LayoutTypePortlet>(); layoutTypePortlets.add(layoutTypePortlet); } } processEvents(actionRequestImpl, actionResponseImpl, layoutTypePortlets); actionRequestImpl.defineObjects(portletConfig, actionResponseImpl); } } finally { if (uploadRequest != null) { uploadRequest.cleanUp(); } ServiceContextThreadLocal.popServiceContext(); } } else if (lifecycle.equals(PortletRequest.RENDER_PHASE) || lifecycle.equals(PortletRequest.RESOURCE_PHASE)) { PortalUtil.updateWindowState(portletId, user, layout, windowState, request); PortalUtil.updatePortletMode(portletId, user, layout, portletMode, request); } if (lifecycle.equals(PortletRequest.RESOURCE_PHASE)) { PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); String portletPrimaryKey = PortletPermissionUtil.getPrimaryKey(layout.getPlid(), portletId); portletDisplay.setId(portletId); portletDisplay.setRootPortletId(portlet.getRootPortletId()); portletDisplay.setInstanceId(portlet.getInstanceId()); portletDisplay.setResourcePK(portletPrimaryKey); portletDisplay.setPortletName(portletConfig.getPortletName()); portletDisplay.setNamespace(PortalUtil.getPortletNamespace(portletId)); ResourceRequestImpl resourceRequestImpl = ResourceRequestFactory.create( request, portlet, invokerPortlet, portletContext, windowState, portletMode, portletPreferences, layout.getPlid()); ResourceResponseImpl resourceResponseImpl = ResourceResponseFactory.create(resourceRequestImpl, response, portletId, companyId); resourceRequestImpl.defineObjects(portletConfig, resourceResponseImpl); try { ServiceContext serviceContext = ServiceContextFactory.getInstance(resourceRequestImpl); ServiceContextThreadLocal.pushServiceContext(serviceContext); invokerPortlet.serveResource(resourceRequestImpl, resourceResponseImpl); } finally { ServiceContextThreadLocal.popServiceContext(); } } return portlet; }
private ActionResult _doProcessAction( HttpServletRequest request, HttpServletResponse response, Portlet portlet) throws Exception { Layout layout = (Layout) request.getAttribute(WebKeys.LAYOUT); WindowState windowState = WindowStateFactory.getWindowState(ParamUtil.getString(request, "p_p_state")); if (layout.isTypeControlPanel() && ((windowState == null) || windowState.equals(WindowState.NORMAL) || Validator.isNull(windowState.toString()))) { windowState = WindowState.MAXIMIZED; } PortletMode portletMode = PortletModeFactory.getPortletMode(ParamUtil.getString(request, "p_p_mode")); PortletPreferencesIds portletPreferencesIds = PortletPreferencesFactoryUtil.getPortletPreferencesIds(request, portlet.getPortletId()); PortletPreferences portletPreferences = PortletPreferencesLocalServiceUtil.getStrictPreferences(portletPreferencesIds); ServletContext servletContext = (ServletContext) request.getAttribute(WebKeys.CTX); InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(portlet, servletContext); PortletConfig portletConfig = PortletConfigFactoryUtil.create(portlet, servletContext); PortletContext portletContext = portletConfig.getPortletContext(); String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE); if (_log.isDebugEnabled()) { _log.debug("Content type " + contentType); } UploadServletRequest uploadServletRequest = null; try { if ((contentType != null) && contentType.startsWith(ContentTypes.MULTIPART_FORM_DATA)) { LiferayPortletConfig liferayPortletConfig = (LiferayPortletConfig) invokerPortlet.getPortletConfig(); if (invokerPortlet.isStrutsPortlet() || liferayPortletConfig.isCopyRequestParameters() || !liferayPortletConfig.isWARFile()) { uploadServletRequest = PortalUtil.getUploadServletRequest(request); request = uploadServletRequest; } } ActionRequestImpl actionRequestImpl = ActionRequestFactory.create( request, portlet, invokerPortlet, portletContext, windowState, portletMode, portletPreferences, layout.getPlid()); User user = PortalUtil.getUser(request); ActionResponseImpl actionResponseImpl = ActionResponseFactory.create( actionRequestImpl, response, portlet.getPortletId(), user, layout, windowState, portletMode); actionRequestImpl.defineObjects(portletConfig, actionResponseImpl); ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequestImpl); ServiceContextThreadLocal.pushServiceContext(serviceContext); invokerPortlet.processAction(actionRequestImpl, actionResponseImpl); actionResponseImpl.transferHeaders(response); RenderParametersPool.put( request, layout.getPlid(), portlet.getPortletId(), actionResponseImpl.getRenderParameterMap()); List<Event> events = actionResponseImpl.getEvents(); String redirectLocation = actionResponseImpl.getRedirectLocation(); if (Validator.isNull(redirectLocation) && portlet.isActionURLRedirect()) { PortletURL portletURL = new PortletURLImpl( actionRequestImpl, actionRequestImpl.getPortletName(), layout.getPlid(), PortletRequest.RENDER_PHASE); Map<String, String[]> renderParameters = actionResponseImpl.getRenderParameterMap(); for (Map.Entry<String, String[]> entry : renderParameters.entrySet()) { String key = entry.getKey(); String[] value = entry.getValue(); portletURL.setParameter(key, value); } redirectLocation = portletURL.toString(); } return new ActionResult(events, redirectLocation); } finally { if (uploadServletRequest != null) { uploadServletRequest.cleanUp(); } ServiceContextThreadLocal.popServiceContext(); } }