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