package com.ebizwindow.crm.portlet.base; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.GenericPortlet; import javax.portlet.PortletException; import javax.portlet.PortletMode; import javax.portlet.PortletPreferences; import javax.portlet.PortletRequest; import javax.portlet.PortletRequestDispatcher; import javax.portlet.PortletURL; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ebizwindow.crm.NoSuchTableDefinitionException; import com.ebizwindow.crm.NoSuchViewException; import com.ebizwindow.crm.constants.Constants; import com.ebizwindow.crm.constants.EntityIdConst; import com.ebizwindow.crm.constants.PortletIDs; import com.ebizwindow.crm.constants.SocialConst; import com.ebizwindow.crm.constants.TableConst; import com.ebizwindow.crm.json.JSONObject; import com.ebizwindow.crm.model.CompanyColumnDefinition; import com.ebizwindow.crm.model.View; import com.ebizwindow.crm.model.ViewColumn; import com.ebizwindow.crm.model.ViewItem; import com.ebizwindow.crm.portlet.settings.ViewPortlet; import com.ebizwindow.crm.service.CompanyColumnDefinitionLocalServiceUtil; import com.ebizwindow.crm.service.ViewColumnLocalServiceUtil; import com.ebizwindow.crm.service.ViewItemLocalServiceUtil; import com.ebizwindow.crm.service.ViewLocalServiceUtil; import com.ebizwindow.crm.utils.ActivityUtils; import com.ebizwindow.crm.utils.CookieUtil; import com.ebizwindow.crm.utils.DateUtil; import com.ebizwindow.crm.utils.FileEntryUtil; import com.ebizwindow.crm.utils.IDGenerator; import com.ebizwindow.crm.utils.LanguageUtil; import com.ebizwindow.crm.utils.LiferayUserUtil; import com.ebizwindow.crm.utils.PermissionUtil; import com.ebizwindow.crm.utils.PortletPreferencesUtil; import com.ebizwindow.crm.utils.PortletURLUtil; import com.ebizwindow.crm.utils.PrettyDateFormat; import com.ebizwindow.crm.utils.PropsUtil; import com.ebizwindow.crm.utils.SQLUtil; import com.ebizwindow.crm.utils.TextUtil; import com.ebizwindow.crm.utils.Validator; import com.ebizwindow.operator.model.SocialAttachment; import com.ebizwindow.operator.model.SocialComments; import com.ebizwindow.operator.model.SocialNews; import com.ebizwindow.operator.service.SocialAttachmentLocalServiceUtil; import com.ebizwindow.operator.service.SocialCommentsLocalServiceUtil; import com.ebizwindow.operator.service.SocialNewsLocalServiceUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.repository.model.Folder; import com.liferay.portal.kernel.upload.UploadRequest; import com.liferay.portal.kernel.util.MimeTypesUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.UnicodeProperties; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.model.Layout; import com.liferay.portal.model.PortletConstants; import com.liferay.portal.model.RoleConstants; import com.liferay.portal.security.permission.ActionKeys; import com.liferay.portal.security.permission.PermissionChecker; import com.liferay.portal.service.ResourcePermissionLocalServiceUtil; import com.liferay.portal.service.ServiceContext; import com.liferay.portal.service.ServiceContextFactory; import com.liferay.portal.service.UserLocalServiceUtil; import com.liferay.portal.theme.ThemeDisplay; import com.liferay.portal.util.PortalUtil; import com.liferay.portlet.documentlibrary.FileSizeException; import com.liferay.portlet.documentlibrary.model.DLFileEntry; import com.liferay.portlet.documentlibrary.model.DLFolder; import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil; import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil; import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil; /** * <a href="BasePortlet.java.html"><b><i>View Source</i></b></a> * * @author Ivan Li * */ public abstract class BasePortlet extends GenericPortlet { protected final static String FORWARD = "forward";//跳转的路径 protected final static String FOCUS = "focus"; protected final static String CHECKED = "on"; protected final static String CHANGE = "change"; protected final static String SHARE = "share"; protected final static String OPERATION = "operation";//操作 //存放portal数据的集合 protected static Set<String> PORTAL_PARAMETER_NAMES = new HashSet<String>(); static { PORTAL_PARAMETER_NAMES.add("p_p_lifecycle");//周期 PORTAL_PARAMETER_NAMES.add("p_p_state");//周期 PORTAL_PARAMETER_NAMES.add("p_p_mode");//模式 PORTAL_PARAMETER_NAMES.add("p_p_id");//portlet的id } public void init() throws PortletException { editJSP = getInitParameter("edit-jsp"); viewJSP = getInitParameter("view-jsp"); helpJSP = getInitParameter("help-jsp"); } public void doDispatch(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { super.doDispatch(renderRequest, renderResponse); } public void doEdit(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { String jspPage = renderRequest.getParameter(FORWARD); jspPage = jspPage == null ? this.editJSP : jspPage; include(jspPage, renderRequest, renderResponse); } public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { String jspPage = renderRequest.getParameter(FORWARD); if (jspPage == null) { //用户的id long userId = PortalUtil.getUserId(renderRequest); if (userId == 0L) { //如果没有找到用户的话,就需要找到登录的界面 jspPage = NEED_LOGIN_JSP; } else { //主题这个是干什么用的啊 ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest .getAttribute(WebKeys.THEME_DISPLAY); PermissionChecker permissionChecker = themeDisplay .getPermissionChecker(); boolean isCompanyAdmin = permissionChecker.isCompanyAdmin(); if (!isCompanyAdmin) { if (!PermissionUtil.isOperator(renderRequest)) { jspPage = NOT_OPERATOR_JSP; } } } } renderRequest.setAttribute(FORWARD, jspPage); } public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException { //得到portlet的id String portletId = PortalUtil.getPortletId(actionRequest); actionRequest.setAttribute(FOCUS, portletId); //得到操作的名称 String operation = ParamUtil.getString(actionRequest, OPERATION, StringPool.BLANK); String forward = null; try { if (!operation.equals(StringPool.BLANK)) { if (operation.equals("view.load")) { ViewPortlet.loadView(actionRequest); forward = "/jsp/tools/view/add.jsp"; } else if (operation.equals("view.update")) { ViewPortlet.updateView(actionRequest, actionResponse); } else if (operation.equals("view.remove")) { ViewPortlet.removeView(actionRequest, actionResponse); } else if (operation.equals("view.execute")) { ViewPortlet.executeView(actionRequest, actionResponse); PortletURL redirect = PortletURLUtil .getPortletURL(actionRequest); redirect.setPortletMode(PortletMode.VIEW); actionResponse.sendRedirect(redirect.toString()); } else if (operation.equals("social.save.news")) { this.saveNews(actionRequest, actionResponse); } else if (operation.equals("social.remove.news")) { this.removeNews(actionRequest, actionResponse); } else if (operation.equals("social.save.comments")) { this.saveComments(actionRequest, actionResponse); } else if (operation.equals("social.remove.comments")) { this.removeComments(actionRequest, actionResponse); } else if (operation.equals("get.attathment")) { this.getAttathment(actionRequest, actionResponse); } else if (operation.equals("social.load.more")) { this.loadMoreNews(actionRequest); forward = "/jsp/common/social-clone-sub.jsp"; } } } catch (NoSuchTableDefinitionException e) { _log.error(e); } catch (NoSuchViewException e) { _log.error(e); } catch (SystemException e) { _log.error(e); } catch (PortalException e) { _log.error(e); } catch (Exception e) { _log.error(e); } if (forward != null) { actionResponse.setRenderParameter(FORWARD, forward); } } private void loadMoreNews(ActionRequest actionRequest) throws SystemException { int loadMoreMarker = ParamUtil.getInteger(actionRequest, "loadMoreMarker"); long companyId = PortalUtil.getCompanyId(actionRequest); String module = ParamUtil.getString(actionRequest, "module", StringPool.BLANK); long moduleId = ParamUtil.getLong(actionRequest, "moduleId", 0l); int allNews = SocialNewsLocalServiceUtil.countByModuleId(companyId, module, moduleId); int start = loadMoreMarker * 4; int end = (loadMoreMarker + 1) * 4; if (start >= allNews || end >= allNews) { end = allNews; actionRequest.setAttribute("isLoadMore", false); } if (start < allNews) { List<SocialNews> socialNews = SocialNewsLocalServiceUtil.searchByModuleId(companyId, module, moduleId, start, end); actionRequest.setAttribute("socialNews", socialNews); } } private void getAttathment(ActionRequest actionRequest, ActionResponse actionResponse) throws PortalException, SystemException, IOException { long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId", 0l); if (fileEntryId > 0) { HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse); HttpServletRequest request = PortalUtil.getHttpServletRequest(actionRequest); FileEntryUtil.downloadFileEntry(request, response, fileEntryId); } } protected void include(String path, RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { PortletRequestDispatcher portletRequestDispatcher = getPortletContext() .getRequestDispatcher(path); if (portletRequestDispatcher == null) { _log.error(path + " is not a valid include"); } else { portletRequestDispatcher.include(renderRequest, renderResponse); } } //组装查询的语句 protected String assembledQueryStatement(PortletRequest portletRequest) throws SystemException, PortalException { long userId = PortalUtil.getUserId(portletRequest); long companyId = PortalUtil.getCompanyId(portletRequest); String portletId = PortalUtil.getPortletId(portletRequest); String tableName = PropsUtil.getTableNameByPortletId(portletId); View view = null; Cookie viewCookie = CookieUtil.getCookieByName(portletRequest, userId + "-view-" + tableName); if (viewCookie != null) { String viewIdString = viewCookie.getValue(); view = ViewLocalServiceUtil.getView(Long.valueOf(viewIdString)); } else { view = ViewLocalServiceUtil.searchByIsDefault(companyId, tableName, true); } String objName = TableConst.CUSTOMER; String query = SQLUtil.getCustomerSQL(PortalUtil.getUserId(portletRequest)); if (portletId.equals(PortletIDs.CUSTOMER_LIST)) { objName = TableConst.CUSTOMER; query = SQLUtil.getCustomerSQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.CONTACT_LIST)) { objName = TableConst.CONTACT; query = SQLUtil.getContactSQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.MARKET_LIST)) { objName = TableConst.MARKET; query = SQLUtil.getMarketSQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.CLUE_LIST)) { objName = TableConst.CLUE; query = SQLUtil.getClueSQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.ACTIVITY_LIST)) { objName = TableConst.ACTIVITY; query = SQLUtil.getActivitySQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.OPPORTUNITY_LIST)) { objName = TableConst.OPPORTUNITY; query = SQLUtil.getOpportunitySQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.QUOTATION_LIST)) { objName = TableConst.QUOTATION; query = SQLUtil.getQuotationSQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.PRODUCT)) { objName = TableConst.PRODUCT; query = SQLUtil.getProductSQL(companyId); } else if (portletId.equals(PortletIDs.CONTRACT_LIST)) { objName = TableConst.CONTRACT; query = SQLUtil.getContractSQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.ACTIVITY_HISTORY)) { objName = TableConst.ACTIVITY; query = SQLUtil.getActivitySQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.ORDER_LIST)) { objName = TableConst.ORDER; query = SQLUtil.getOrderSQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.RPLAN_LIST)) { objName = TableConst.RPLAN; query = SQLUtil.getRPlanSQL(PortalUtil.getUserId(portletRequest)); } else if (portletId.equals(PortletIDs.RRECORD_LIST)) { objName = TableConst.RRECORD; query = SQLUtil.getRRecordSQL(PortalUtil.getUserId(portletRequest)); } if (view != null) { List<ViewItem> viewItems = ViewItemLocalServiceUtil .searchByViewId(view.getViewId()); if (viewItems != null && viewItems.size() > 0) { for (ViewItem viewItem : viewItems) { CompanyColumnDefinition companyColumn = CompanyColumnDefinitionLocalServiceUtil .getCompanyColumnDefinition(viewItem .getColumnDefinitionId()); String columnName = companyColumn.getColumnName(); String operation = viewItem.getOperator(); String queryValue = viewItem.getValue(); if (queryValue.equals("customer pond")) { query = "select customer.customerId from CRM_Customer customer where customer.ownerId = 0 and customer.companyId = " + companyId; } else if (queryValue.equals("contact pond")) { query = "select contact.contactId from CRM_Contact contact where contact.ownerId = 0 and contact.companyId = " + companyId; } else { if (!queryValue.equals("own") && companyColumn.getFormType().equals(Constants.FORM_TYPE_PK)) { String searchPkID = SQLUtil.getQueryValue(queryValue, columnName, companyId); if (!operation.equals("ne")) { operation = "eq"; } query += " and " + objName + StringPool.PERIOD + SQLUtil.filterQuery(columnName) + SQLUtil.symbolToString(operation, searchPkID); } else { query += " and " + objName + StringPool.PERIOD + SQLUtil.filterQuery(columnName) + SQLUtil.symbolToString(operation, ViewPortlet.handleViewValue(queryValue, userId)); } } } } } return query; } protected String assembledSearchQuery(ActionRequest actionRequest) throws NumberFormatException, PortalException, SystemException { String query = StringPool.BLANK; String portletId = PortalUtil.getPortletId(actionRequest); String objName = PropsUtil.getObjNameByPortletId(portletId); long companyId = PortalUtil.getCompanyId(actionRequest); PortletPreferences preferences = actionRequest.getPreferences(); String searchColumnsIds = preferences.getValue("search.columns", StringPool.BLANK); if (searchColumnsIds != null && searchColumnsIds.length() > 0) { String[] columnsIdsArray = searchColumnsIds.split(","); for (String columnId : columnsIdsArray) { CompanyColumnDefinition companyColumn = CompanyColumnDefinitionLocalServiceUtil .getCompanyColumnDefinition(Integer.valueOf(columnId)); String columnName = companyColumn.getColumnName(); String formType = companyColumn.getFormType(); String searchOperator = ParamUtil.getString(actionRequest, columnName + "Operator"); String searchValue = ParamUtil.getString(actionRequest, columnName, StringPool.BLANK); if (!searchValue.equals(StringPool.BLANK)) { if (companyColumn.getFormType().equals(Constants.FORM_TYPE_PK)) { String searchPkID = SQLUtil.getQueryValue(searchValue, columnName, companyId); if (!searchOperator.equals("ne")) { searchOperator = "eq"; } query += " and " + objName + StringPool.PERIOD + SQLUtil.filterQuery(columnName) + SQLUtil.symbolToString(searchOperator, searchPkID); } else { String specialValue = specialColumnName(columnName, searchValue); query += " and " + objName + StringPool.PERIOD + SQLUtil.filterQuery(columnName) + SQLUtil.symbolToString(searchOperator, specialValue); } actionRequest.setAttribute(columnName + "Operator", searchOperator); actionRequest.setAttribute(columnName, searchValue); } else { if (!searchOperator.equals("none")) { if (formType.equals(Constants.FORM_TYPE_DATE)) { StringBuffer sQuery = new StringBuffer(); String beginDate = ""; String endDate = ""; String rangeValues = DateUtil.getDateRange(searchOperator); if (rangeValues.length() > 0) { beginDate = rangeValues.split(",")[0]; endDate = rangeValues.split(",")[1]; } sQuery.append("and"); sQuery.append(StringPool.SPACE); sQuery.append(objName); sQuery.append(StringPool.PERIOD); sQuery.append(columnName); sQuery.append(StringPool.SPACE); sQuery.append("between"); sQuery.append(StringPool.SPACE); sQuery.append(StringPool.APOSTROPHE); sQuery.append(beginDate + " 00:00:00"); sQuery.append(StringPool.APOSTROPHE); sQuery.append(StringPool.SPACE); sQuery.append("and"); sQuery.append(StringPool.SPACE); sQuery.append(StringPool.APOSTROPHE); sQuery.append(endDate + " 23:59:59"); sQuery.append(StringPool.APOSTROPHE); query += sQuery.toString(); actionRequest.setAttribute(columnName + "Operator", searchOperator); } } } } if (!query.equals(StringPool.BLANK)) { actionRequest.getPortletSession().removeAttribute("pageNo"); } } _log.info(query); return query; } protected String getSqlQueryForActivity(PortletRequest portletRequest, boolean isHistory, String relation) throws SystemException, PortalException { StringBuffer query = new StringBuffer(StringPool.BLANK); long userId = PortalUtil.getUserId(portletRequest); long companyId = PortalUtil.getCompanyId(portletRequest); query.append(SQLUtil.getActivitySQL(userId)) .append(" and activity.companyId = ").append(companyId); long relationObId = ActivityUtils.getRelationOBId(portletRequest, relation); query.append(" and activity.relationObj = ").append(relationObId) .append(" and activity.relation = '").append(relation).append("'"); Locale locale = PortalUtil.getCompany(portletRequest).getLocale(); String status = LanguageUtil.get(PortletIDs.ACTIVITY_LIST, locale, "has.ended"); if (isHistory) { query.append(" and activity.status = '").append(status).append("'"); } else { query.append(" and activity.status != '").append(status) .append("'"); } query.append(" order by activity.createDate desc"); _log.info(query); return query.toString(); } protected static void getPrefenceColumn(PortletRequest portletRequest) throws NumberFormatException, PortalException, SystemException { long companyId = PortalUtil.getCompanyId(portletRequest); String portletId = PortalUtil.getPortletId(portletRequest); String tableName = PropsUtil.getTableNameByPortletId(portletId); long userId = PortalUtil.getUserId(portletRequest); View view = null; Cookie viewCookie = CookieUtil.getCookieByName(portletRequest, userId + "-view-" + tableName); if (viewCookie != null) { String viewIdString = viewCookie.getValue(); view = ViewLocalServiceUtil.getView(Long.valueOf(viewIdString)); } else { view = ViewLocalServiceUtil.searchByIsDefault(companyId, tableName, true); } List<CompanyColumnDefinition> tableHeader = null; if (view != null) { tableHeader = new ArrayList<CompanyColumnDefinition>(); List<ViewColumn> viewColumns = ViewColumnLocalServiceUtil .searchByViewId(view.getViewId()); if (Validator.isNotNull(viewColumns)) { for (ViewColumn viewColumn : viewColumns) { long companyColumnId = viewColumn.getColumnDefinitionId(); CompanyColumnDefinition companyColumn = CompanyColumnDefinitionLocalServiceUtil .getCompanyColumnDefinition(companyColumnId); tableHeader.add(companyColumn); } } } else { long groupId = PortalUtil.getScopeGroupId(portletRequest); PortletPreferences preferences = PortletPreferencesUtil .getPortletPreferenceByPortletId(companyId, groupId, portletId); String columnsIds = preferences.getValue("default.display.columns", StringPool.BLANK); if (!columnsIds.equals(StringPool.BLANK)) { String[] columnIdsArray = columnsIds.split(StringPool.COMMA); tableHeader = new ArrayList<CompanyColumnDefinition>(); for (int i = 0; i < columnIdsArray.length; i++) { CompanyColumnDefinition companyColumn = CompanyColumnDefinitionLocalServiceUtil .getCompanyColumnDefinition(Long .valueOf(columnIdsArray[i])); tableHeader.add(companyColumn); } } } portletRequest.setAttribute("tableHeader", tableHeader); } protected static void getDefaultColumn(PortletRequest portletRequest, String portletId) throws PortalException, SystemException { long companyId = PortalUtil.getCompanyId(portletRequest); long groupId = PortalUtil.getScopeGroupId(portletRequest); PortletPreferences preferences = PortletPreferencesUtil .getPortletPreferenceByPortletId(companyId, groupId, portletId); String columnsIds = preferences.getValue("default.display.columns", StringPool.BLANK); List<CompanyColumnDefinition> tableHeader = null; if (!columnsIds.equals(StringPool.BLANK)) { String[] columnIdsArray = columnsIds.split(StringPool.COMMA); tableHeader = new ArrayList<CompanyColumnDefinition>(); for (int i = 0; i < columnIdsArray.length; i++) { CompanyColumnDefinition companyColumn = CompanyColumnDefinitionLocalServiceUtil .getCompanyColumnDefinition(Long .valueOf(columnIdsArray[i])); tableHeader.add(companyColumn); } } portletRequest.setAttribute("tableHeader", tableHeader); } protected static void getPrefenceColumnByDetail( PortletRequest portletRequest) throws NumberFormatException, PortalException, SystemException { long companyId = PortalUtil.getCompanyId(portletRequest); long groupId = PortalUtil.getScopeGroupId(portletRequest); String portletId = PortalUtil.getPortletId(portletRequest); PortletPreferences preferences = PortletPreferencesUtil .getPortletPreferenceByPortletId(companyId, groupId, portletId); List<CompanyColumnDefinition> tableHeader = null; String columnsIds = preferences.getValue("default.display.columns", StringPool.BLANK); if (!columnsIds.equals(StringPool.BLANK)) { String[] columnIdsArray = columnsIds.split(StringPool.COMMA); tableHeader = new ArrayList<CompanyColumnDefinition>(); for (int i = 0; i < columnIdsArray.length; i++) { CompanyColumnDefinition companyColumn = CompanyColumnDefinitionLocalServiceUtil .getCompanyColumnDefinition(Long .valueOf(columnIdsArray[i])); tableHeader.add(companyColumn); } } portletRequest.setAttribute("tableHeader", tableHeader); } protected static Boolean isExistsPortletInCurrentPage( PortletRequest portletRequest, String portletId) throws PortalException, SystemException { boolean result = false; HttpServletRequest request = PortalUtil .getHttpServletRequest(portletRequest); ThemeDisplay themeDisplay = (ThemeDisplay) request .getAttribute(WebKeys.THEME_DISPLAY); String rootPortletId = PortletConstants.getRootPortletId(portletId); Layout layout = themeDisplay.getLayout(); if (layout != null) { UnicodeProperties typeSettings = layout.getTypeSettingsProperties(); for (String key : typeSettings.keySet()) { String value = typeSettings.get(key); int idx = value.indexOf(rootPortletId); if (idx >= 0) { String[] portletIds = StringUtil.split(value); for (String id : portletIds) { if (id.contains(rootPortletId)) { result = true; } } } } } else { _log.debug("Get portlet by portletId not within the current page!"); } return result; } protected static void clearSession(PortletRequest portletRequest) throws PortalException, SystemException { portletRequest.getPortletSession().removeAttribute("pageNo"); if (!isExistsPortletInCurrentPage(portletRequest, PortletIDs.PRODUCT)) { HttpServletRequest request = PortalUtil .getHttpServletRequest(portletRequest); if (request.getSession().getAttribute( "LIFERAY_SHARED_PRODUCT_CATEGORY_ID") != null) { request.getSession().removeAttribute( "LIFERAY_SHARED_PRODUCT_CATEGORY_ID"); } } } protected static void clearAllSession(PortletRequest portletRequest) { HttpServletRequest request = PortalUtil .getHttpServletRequest(portletRequest); if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_CLUE_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_CLUE_ID); } if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_CONTACT_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_CONTACT_ID); } if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_CONTRACT_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_CONTRACT_ID); } if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_CUSTOMER_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_CUSTOMER_ID); } if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_MARKET_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_MARKET_ID); } if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_OPPORTUNITY_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_OPPORTUNITY_ID); } if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_ORDER_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_ORDER_ID); } if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_QUOTATION_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_QUOTATION_ID); } if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_RPLAN_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_RPLAN_ID); } if (request.getSession().getAttribute( EntityIdConst.LIFERAY_SHARED_RRECORD_ID) != null) { request.getSession().removeAttribute( EntityIdConst.LIFERAY_SHARED_RRECORD_ID); } if (request.getSession().getAttribute("contactLayoutId") != null) { request.getSession().removeAttribute("contactLayoutId"); } if (request.getSession().getAttribute("oppLayoutId") != null) { request.getSession().removeAttribute("oppLayoutId"); } if (request.getSession().getAttribute("quoLayoutId") != null) { request.getSession().removeAttribute("quoLayoutId"); } if (request.getSession().getAttribute("ordLayoutId") != null) { request.getSession().removeAttribute("ordLayoutId"); } } public void saveNews(ActionRequest actionRequest, ActionResponse actionResponse) { Map<String, Object> results = null; PrintWriter out = null; try { results = new HashMap<String, Object>(); HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse); response.setContentType("text/xml;charset=UTF-8"); out = response.getWriter(); long userId = PortalUtil.getUserId(actionRequest); long companyId = PortalUtil.getCompanyId(actionRequest); Date currentDate = DateUtil.getCurrentLocalDateTime(companyId); SocialNews socialNews = null; int type = ParamUtil.getInteger(actionRequest, "type", 0); if (type == SocialConst.SOCIAL_NEWS_TYPE_TXT) { actionRequest.setCharacterEncoding("utf-8"); String content = ParamUtil.getString(actionRequest, "content"); content = java.net.URLDecoder.decode(content, "UTF-8"); socialNews = SocialNewsLocalServiceUtil.createSocialNews(IDGenerator.increment(SocialNews.class.getName())); socialNews.setCompanyId(companyId); socialNews.setContent(content); socialNews.setCreateDate(currentDate); socialNews.setOwnerId(userId); socialNews.setModule(ParamUtil.getString(actionRequest, "module")); socialNews.setModuleId(ParamUtil.getLong(actionRequest, "moduleId")); socialNews.setType(type); socialNews = SocialNewsLocalServiceUtil.addSocialNews(socialNews); results.put("news", socialNews); results.put("userName", UserLocalServiceUtil.getUser(userId).getFirstName()); results.put("status", "success"); } else { ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(), actionRequest); UploadRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest); uploadRequest.setCharacterEncoding("utf-8"); InputStream inputStream = uploadRequest.getFileAsStream("file"); String sourceFileName = uploadRequest.getFileName("file"); long size = uploadRequest.getSize("file"); long groupId = PortalUtil.getScopeGroupId(uploadRequest); if (size < 3145728) { long attachmentId = saveFileEntry(companyId, groupId, size, inputStream, sourceFileName, serviceContext); String content = ParamUtil.getString(uploadRequest, "content"); content = java.net.URLDecoder.decode(content, "UTF-8"); if (attachmentId > 0) { String fileName = sourceFileName.substring(0, sourceFileName.indexOf(".")); if (fileName.length() > 15) { fileName.substring(0, 15); } long newsId = IDGenerator.increment(SocialNews.class.getName()); socialNews = SocialNewsLocalServiceUtil.createSocialNews(newsId); socialNews.setCompanyId(companyId); socialNews.setCreateDate(currentDate); socialNews.setOwnerId(userId); socialNews.setContent(content); socialNews.setModule(ParamUtil.getString(actionRequest, "module")); socialNews.setModuleId(ParamUtil.getLong(actionRequest, "moduleId")); socialNews.setType(type); SocialAttachment socialAttachment = SocialAttachmentLocalServiceUtil.createSocialAttachment(IDGenerator.increment(SocialAttachment.class.getName())); socialAttachment.setNewsId(newsId); socialAttachment.setAttachmentId(attachmentId); socialAttachment.setType(type); if (type == SocialConst.SOCIAL_ATTACHMENT_TYPE_IMG) { socialAttachment.setAttachmentComments(fileName); } SocialAttachmentLocalServiceUtil.addSocialAttachment(socialAttachment); socialNews = SocialNewsLocalServiceUtil.addSocialNews(socialNews); ThemeDisplay themeDisplay = (ThemeDisplay) uploadRequest.getAttribute(WebKeys.THEME_DISPLAY); String previewFileURL = LiferayUserUtil.getPhotoPath(attachmentId, themeDisplay); results.put("userAvatar", previewFileURL); results.put("fileName", fileName); results.put("fileSize", "下载 " + sourceFileName.substring(sourceFileName.indexOf(".") + 1) + " ( " + TextUtil.convertFileSize(size)+ " ) "); results.put("news", socialNews); results.put("userName", UserLocalServiceUtil.getUser(userId).getFirstName()); results.put("status", "success"); } } else { results.put("status", "size_error"); } } JSONObject jObject = new JSONObject(results); out.print(jObject); } catch (FileSizeException e) { results.put("status", "size"); _log.error(e); } catch (SystemException e) { results.put("status", "fail"); _log.error(e); } catch (IOException e) { results.put("status", "fail"); _log.error(e); } catch (PortalException e) { results.put("status", "fail"); _log.error(e); } catch (Exception e) { results.put("status", "fail"); _log.error(e); } finally { out.flush(); out.close(); } } public void removeNews(ActionRequest actionRequest, ActionResponse actionResponse) { PrintWriter out = null; try { HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse); out = response.getWriter(); long newsId = ParamUtil.getLong(actionRequest, "newsId" , 0l); if (newsId > 0) { List<SocialComments> socialComments = SocialCommentsLocalServiceUtil.searchByNewsId(newsId); if (Validator.isNotNull(socialComments)) { for (int i = 0; i < socialComments.size(); i++) { SocialCommentsLocalServiceUtil.deleteSocialComments(socialComments.get(i)); } } List<SocialAttachment> socialAttachments = SocialAttachmentLocalServiceUtil.searchByNewsId(newsId); if (Validator.isNotNull(socialAttachments)) { for (SocialAttachment attachment : socialAttachments) { long attachmentId = attachment.getAttachmentId(); if (attachmentId > 0) { DLFileEntryLocalServiceUtil.deleteDLFileEntry(attachmentId); } SocialAttachmentLocalServiceUtil.deleteSocialAttachment(attachment.getSocialAttachmentId()); } } SocialNewsLocalServiceUtil.deleteSocialNews(newsId); } out.print("success"); } catch (PortalException e) { out.print("fail"); _log.error(e); } catch (SystemException e) { out.print("fail"); _log.error(e); } catch (IOException e) { out.print("fail"); _log.error(e); } finally { out.flush(); out.close(); } } public void saveComments(ActionRequest actionRequest, ActionResponse actionResponse) { Map<String, Object> results = null; PrintWriter out = null; try { results = new HashMap<String, Object>(); HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse); response.setContentType("text/xml;charset=UTF-8"); out = response.getWriter(); long newsId = ParamUtil.getLong(actionRequest, "newsId" , 0l); if (newsId > 0) { int type = ParamUtil.getInteger(actionRequest, "type", 0); long userId = PortalUtil.getUserId(actionRequest); long companyId = PortalUtil.getCompanyId(actionRequest); Date currentDate = DateUtil.getCurrentLocalDateTime(companyId); //String content = new String(ParamUtil.getString(actionRequest, "content").getBytes("iso8859-1"), "utf-8"); actionRequest.setCharacterEncoding("utf-8"); String content = ParamUtil.getString(actionRequest, "content"); content = java.net.URLDecoder.decode(content, "UTF-8"); SocialComments socialComments = SocialCommentsLocalServiceUtil .createSocialComments(IDGenerator.increment(SocialComments.class.getName())); socialComments.setCreateDate(currentDate); socialComments.setCommenterId(userId); socialComments.setNewsId(newsId); socialComments.setContent(content); socialComments.setType(type); socialComments = SocialCommentsLocalServiceUtil.addSocialComments(socialComments); results.put("commentId", socialComments.getCommentId()); results.put("content", socialComments.getContent()); results.put("createDate", new PrettyDateFormat("## a HH:mm", "yy-MM-dd a HH:mm").format(currentDate)); results.put("userName", UserLocalServiceUtil.getUser(userId).getFirstName()); if (type == 1) { String userNames = LiferayUserUtil.getUserNames( SocialCommentsLocalServiceUtil .searchILikeByNewsId(newsId), PortalUtil .getUserId(actionRequest)); results.put("userNames", userNames); } results.put("status", "success"); JSONObject jObject = new JSONObject(results); out.print(jObject); } } catch (SystemException e) { results.put("status", "fail"); _log.error(e); } catch (IOException e) { results.put("status", "fail"); _log.error(e); } catch (PortalException e) { results.put("status", "fail"); _log.error(e); } finally { out.flush(); out.close(); } } public void removeComments(ActionRequest actionRequest, ActionResponse actionResponse) { PrintWriter out = null; try { HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse); out = response.getWriter(); long commentsId = ParamUtil.getLong(actionRequest, "commentsId" , 0l); SocialComments socialComment = SocialCommentsLocalServiceUtil.getSocialComments(commentsId); long newsId = socialComment.getNewsId(); if (commentsId > 0) { SocialCommentsLocalServiceUtil.deleteSocialComments(commentsId); } if (ParamUtil.getInteger(actionRequest, "type", 0) == 1) { String userNames = LiferayUserUtil.getUserNames( SocialCommentsLocalServiceUtil .searchILikeByNewsId(newsId), PortalUtil .getUserId(actionRequest)); out.print(userNames); } else { out.print("success"); } } catch (PortalException e) { out.print("fail"); _log.error(e); } catch (SystemException e) { out.print("fail"); _log.error(e); } catch (IOException e) { out.print("fail"); _log.error(e); } finally { out.flush(); out.close(); } } private long saveFileEntry(long companyId, long groupId, long size, InputStream inputStream, String sourceFileName, ServiceContext serviceContext) throws Exception { long folderId = 0; List<DLFolder> dlFolders = DLFolderLocalServiceUtil.getCompanyFolders(companyId, -1, -1); if (Validator.isNotNull(dlFolders)) { for (DLFolder dlFolder : dlFolders) { if (dlFolder.getName().equals("Social Image")) { folderId = dlFolder.getFolderId(); } } } if (folderId == 0) { folderId = updateFolder(companyId, groupId, serviceContext); } long repositoryId = groupId; String title = TextUtil.getRandomString(8); String description = "Avatar"; String changeLog = StringPool.BLANK; String contentType = MimeTypesUtil.getContentType(title); // Add file entry FileEntry fileEntry = DLAppServiceUtil.addFileEntry( repositoryId, folderId, sourceFileName, contentType, title, description, changeLog, inputStream, size, serviceContext); long guestRoleId = com.liferay.portal.service.RoleLocalServiceUtil.getRole(companyId, RoleConstants.GUEST).getRoleId(); ResourcePermissionLocalServiceUtil.setResourcePermissions(companyId, DLFileEntry.class.getName(), 4, String.valueOf(fileEntry.getFileEntryId()), guestRoleId, new String[] {ActionKeys.VIEW}); return fileEntry.getFileEntryId(); } private long updateFolder(long companyId, long groupId, ServiceContext serviceContext) throws Exception { long parentFolderId = 0; long repositoryId = groupId; String folderName = "Social Image"; String description = folderName; // Add folder Folder folder = DLAppServiceUtil.addFolder(repositoryId, parentFolderId, folderName, description, serviceContext); long guestRoleId = com.liferay.portal.service.RoleLocalServiceUtil .getRole(companyId, RoleConstants.GUEST).getRoleId(); ResourcePermissionLocalServiceUtil.setResourcePermissions(companyId, DLFolder.class.getName(), 4, String.valueOf(folder.getFolderId()), guestRoleId, new String[] { ActionKeys.VIEW }); return folder.getFolderId(); } private String specialColumnName(String columnName, String searchValue) { if (columnName.equals("auditStatus")) { if (searchValue.equals("通过")) { searchValue = "pass"; } else if (searchValue.equals("未通过")) { searchValue = "refuse"; } else if (searchValue.equals("待申请")) { searchValue = "request"; } else if (searchValue.equals("审核中")) { searchValue = "audit"; } } return searchValue; } protected String editJSP; protected String viewJSP; protected String helpJSP; protected final static String NOT_OPERATOR_JSP = "/jsp/not-operator.jsp"; protected final static String NEED_LOGIN_JSP = "/jsp/need-login.jsp"; private static Log _log = LogFactoryUtil.getLog(BasePortlet.class); }