1
22
23 package com.liferay.portlet.journal.util;
24
25 import com.liferay.portal.kernel.search.Document;
26 import com.liferay.portal.kernel.search.Field;
27 import com.liferay.portal.kernel.search.Hits;
28 import com.liferay.portal.model.Layout;
29 import com.liferay.portal.search.HitsOpenSearchImpl;
30 import com.liferay.portal.security.permission.ActionKeys;
31 import com.liferay.portal.security.permission.PermissionChecker;
32 import com.liferay.portal.service.GroupLocalServiceUtil;
33 import com.liferay.portal.service.LayoutLocalServiceUtil;
34 import com.liferay.portal.service.permission.LayoutPermissionUtil;
35 import com.liferay.portal.theme.ThemeDisplay;
36 import com.liferay.portal.util.PortalUtil;
37 import com.liferay.portlet.journal.model.JournalContentSearch;
38 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
39 import com.liferay.portlet.journal.service.JournalContentSearchLocalServiceUtil;
40
41 import java.util.List;
42
43 import javax.portlet.PortletURL;
44
45
51 public class JournalOpenSearchImpl extends HitsOpenSearchImpl {
52
53 public static final String SEARCH_PATH = "/c/journal/open_search";
54
55 public static final String TITLE = "Liferay Journal Search: ";
56
57 public Hits getHits(
58 long companyId, String keywords, int start, int end)
59 throws Exception {
60
61 return JournalArticleLocalServiceUtil.search(
62 companyId, 0, keywords, start, end);
63 }
64
65 public String getSearchPath() {
66 return SEARCH_PATH;
67 }
68
69 public String getTitle(String keywords) {
70 return TITLE + keywords;
71 }
72
73 protected String getLayoutURL(ThemeDisplay themeDisplay, String articleId)
74 throws Exception {
75
76 PermissionChecker permissionChecker =
77 themeDisplay.getPermissionChecker();
78
79 List<JournalContentSearch> contentSearches =
80 JournalContentSearchLocalServiceUtil.getArticleContentSearches(
81 articleId);
82
83 for (JournalContentSearch contentSearch : contentSearches) {
84 if (LayoutPermissionUtil.contains(
85 permissionChecker, contentSearch.getGroupId(),
86 contentSearch.isPrivateLayout(),
87 contentSearch.getLayoutId(), ActionKeys.VIEW)) {
88
89 if (contentSearch.isPrivateLayout()) {
90 if (!GroupLocalServiceUtil.hasUserGroup(
91 themeDisplay.getUserId(),
92 contentSearch.getGroupId())) {
93
94 continue;
95 }
96 }
97
98 Layout hitLayout = LayoutLocalServiceUtil.getLayout(
99 contentSearch.getGroupId(), contentSearch.isPrivateLayout(),
100 contentSearch.getLayoutId());
101
102 return PortalUtil.getLayoutURL(hitLayout, themeDisplay);
103 }
104 }
105
106 return null;
107 }
108
109 protected String getURL(
110 ThemeDisplay themeDisplay, long groupId, Document result,
111 PortletURL portletURL)
112 throws Exception {
113
114 PermissionChecker permissionChecker =
115 themeDisplay.getPermissionChecker();
116
117 Layout layout = themeDisplay.getLayout();
118
119 String articleId = result.get(Field.ENTRY_CLASS_PK);
120 String version = result.get("version");
121
122 List<Long> hitLayoutIds =
123 JournalContentSearchLocalServiceUtil.getLayoutIds(
124 layout.getGroupId(), layout.isPrivateLayout(), articleId);
125
126 for (Long hitLayoutId : hitLayoutIds) {
127 if (LayoutPermissionUtil.contains(
128 permissionChecker, layout.getGroupId(),
129 layout.isPrivateLayout(), hitLayoutId, ActionKeys.VIEW)) {
130
131 Layout hitLayout = LayoutLocalServiceUtil.getLayout(
132 layout.getGroupId(), layout.isPrivateLayout(),
133 hitLayoutId.longValue());
134
135 return PortalUtil.getLayoutURL(hitLayout, themeDisplay);
136 }
137 }
138
139 String layoutURL = getLayoutURL(themeDisplay, articleId);
140
141 if (layoutURL != null) {
142 return layoutURL;
143 }
144
145 StringBuilder sb = new StringBuilder();
146
147 sb.append(themeDisplay.getPathMain());
148 sb.append("/journal/view_article_content?groupId=");
149 sb.append(groupId);
150 sb.append("&articleId=");
151 sb.append(articleId);
152 sb.append("&version=");
153 sb.append(version);
154
155 return sb.toString();
156 }
157
158 }