001
014
015 package com.liferay.portlet.journal.asset;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.language.LanguageUtil;
020 import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
021 import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
022 import com.liferay.portal.kernel.trash.TrashRenderer;
023 import com.liferay.portal.kernel.util.GetterUtil;
024 import com.liferay.portal.kernel.util.HtmlUtil;
025 import com.liferay.portal.kernel.util.StringUtil;
026 import com.liferay.portal.kernel.util.Validator;
027 import com.liferay.portal.model.Group;
028 import com.liferay.portal.model.Layout;
029 import com.liferay.portal.security.permission.ActionKeys;
030 import com.liferay.portal.security.permission.PermissionChecker;
031 import com.liferay.portal.service.GroupLocalServiceUtil;
032 import com.liferay.portal.service.LayoutLocalServiceUtil;
033 import com.liferay.portal.service.permission.LayoutPermissionUtil;
034 import com.liferay.portal.theme.ThemeDisplay;
035 import com.liferay.portal.util.PortalUtil;
036 import com.liferay.portal.util.PortletKeys;
037 import com.liferay.portal.util.PropsValues;
038 import com.liferay.portal.util.WebKeys;
039 import com.liferay.portlet.PortletPreferencesFactoryUtil;
040 import com.liferay.portlet.asset.model.BaseAssetRenderer;
041 import com.liferay.portlet.journal.model.JournalArticle;
042 import com.liferay.portlet.journal.model.JournalArticleConstants;
043 import com.liferay.portlet.journal.model.JournalArticleDisplay;
044 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
045 import com.liferay.portlet.journal.service.JournalContentSearchLocalServiceUtil;
046 import com.liferay.portlet.journal.service.permission.JournalArticlePermission;
047
048 import java.util.Date;
049 import java.util.List;
050 import java.util.Locale;
051
052 import javax.portlet.PortletPreferences;
053 import javax.portlet.PortletRequest;
054 import javax.portlet.PortletURL;
055 import javax.portlet.RenderRequest;
056 import javax.portlet.RenderResponse;
057
058
064 public class JournalArticleAssetRenderer
065 extends BaseAssetRenderer implements TrashRenderer {
066
067 public static final String TYPE = "journal_article";
068
069 public static long getClassPK(JournalArticle article) {
070 if ((article.isDraft() || article.isPending()) &&
071 (article.getVersion() !=
072 JournalArticleConstants.VERSION_DEFAULT)) {
073
074 return article.getPrimaryKey();
075 }
076 else {
077 return article.getResourcePrimKey();
078 }
079 }
080
081 public JournalArticleAssetRenderer(JournalArticle article) {
082 _article = article;
083 }
084
085 @Override
086 public String getAddToPagePortletId() throws Exception {
087 return PortletKeys.JOURNAL_CONTENT;
088 }
089
090 public JournalArticle getArticle() {
091 return _article;
092 }
093
094 @Override
095 public String[] getAvailableLanguageIds() {
096 return _article.getAvailableLanguageIds();
097 }
098
099 @Override
100 public String getClassName() {
101 return JournalArticle.class.getName();
102 }
103
104 @Override
105 public long getClassPK() {
106 return getClassPK(_article);
107 }
108
109 @Override
110 public String getDiscussionPath() {
111 if (PropsValues.JOURNAL_ARTICLE_COMMENTS_ENABLED) {
112 return "edit_article_discussion";
113 }
114 else {
115 return null;
116 }
117 }
118
119 @Override
120 public Date getDisplayDate() {
121 return _article.getDisplayDate();
122 }
123
124 @Override
125 public long getGroupId() {
126 return _article.getGroupId();
127 }
128
129 @Override
130 public String getPortletId() {
131 return PortletKeys.JOURNAL;
132 }
133
134 @Override
135 public int getStatus() {
136 return _article.getStatus();
137 }
138
139 @Override
140 public String getSummary(Locale locale) {
141 String summary = _article.getDescription(locale);
142
143 if (Validator.isNull(summary)) {
144 try {
145 JournalArticleDisplay articleDisplay =
146 JournalArticleLocalServiceUtil.getArticleDisplay(
147 _article, null, null,
148 LanguageUtil.getLanguageId(locale), 1, null, null);
149
150 summary = StringUtil.shorten(
151 HtmlUtil.stripHtml(articleDisplay.getContent()), 200);
152 }
153 catch (Exception e) {
154 }
155 }
156
157 return summary;
158 }
159
160 @Override
161 public String getThumbnailPath(PortletRequest portletRequest)
162 throws Exception {
163
164 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
165 WebKeys.THEME_DISPLAY);
166
167 String thumbnailSrc = _article.getArticleImageURL(themeDisplay);
168
169 if (Validator.isNotNull(thumbnailSrc)) {
170 return thumbnailSrc;
171 }
172
173 return themeDisplay.getPathThemeImages() +
174 "/file_system/large/article.png";
175 }
176
177 @Override
178 public String getTitle(Locale locale) {
179 return _article.getTitle(locale);
180 }
181
182 @Override
183 public String getType() {
184 return TYPE;
185 }
186
187 @Override
188 public PortletURL getURLEdit(
189 LiferayPortletRequest liferayPortletRequest,
190 LiferayPortletResponse liferayPortletResponse)
191 throws Exception {
192
193 PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
194 getControlPanelPlid(liferayPortletRequest), PortletKeys.JOURNAL,
195 PortletRequest.RENDER_PHASE);
196
197 portletURL.setParameter("struts_action", "/journal/edit_article");
198 portletURL.setParameter(
199 "groupId", String.valueOf(_article.getGroupId()));
200 portletURL.setParameter("articleId", _article.getArticleId());
201 portletURL.setParameter(
202 "version", String.valueOf(_article.getVersion()));
203
204 return portletURL;
205 }
206
207 @Override
208 public PortletURL getURLExport(
209 LiferayPortletRequest liferayPortletRequest,
210 LiferayPortletResponse liferayPortletResponse) {
211
212 PortletURL portletURL = liferayPortletResponse.createActionURL();
213
214 portletURL.setParameter(
215 "struts_action", "/asset_publisher/export_journal_article");
216 portletURL.setParameter(
217 "groupId", String.valueOf(_article.getGroupId()));
218 portletURL.setParameter("articleId", _article.getArticleId());
219
220 return portletURL;
221 }
222
223 @Override
224 public String getUrlTitle() {
225 return _article.getUrlTitle();
226 }
227
228 @Override
229 public String getURLViewInContext(
230 LiferayPortletRequest liferayPortletRequest,
231 LiferayPortletResponse liferayPortletResponse,
232 String noSuchEntryRedirect)
233 throws Exception {
234
235 ThemeDisplay themeDisplay =
236 (ThemeDisplay)liferayPortletRequest.getAttribute(
237 WebKeys.THEME_DISPLAY);
238
239 Layout layout = themeDisplay.getLayout();
240
241 if (Validator.isNotNull(_article.getLayoutUuid())) {
242 layout = LayoutLocalServiceUtil.getLayoutByUuidAndCompanyId(
243 _article.getLayoutUuid(), _article.getCompanyId());
244 }
245
246 String portletId = (String)liferayPortletRequest.getAttribute(
247 WebKeys.PORTLET_ID);
248
249 PortletPreferences portletSetup =
250 PortletPreferencesFactoryUtil.getStrictLayoutPortletSetup(
251 layout, portletId);
252
253 String linkToLayoutUuid = GetterUtil.getString(
254 portletSetup.getValue("portletSetupLinkToLayoutUuid", null));
255
256 if (Validator.isNotNull(_article.getLayoutUuid()) &&
257 Validator.isNull(linkToLayoutUuid)) {
258
259 Group group = themeDisplay.getScopeGroup();
260
261 if (group.getGroupId() != _article.getGroupId()) {
262 group = GroupLocalServiceUtil.getGroup(_article.getGroupId());
263 }
264
265 String groupFriendlyURL = PortalUtil.getGroupFriendlyURL(
266 group, layout.isPrivateLayout(), themeDisplay);
267
268 return PortalUtil.addPreservedParameters(
269 themeDisplay,
270 groupFriendlyURL.concat(
271 JournalArticleConstants.CANONICAL_URL_SEPARATOR).concat(
272 _article.getUrlTitle()));
273 }
274
275 List<Long> hitLayoutIds =
276 JournalContentSearchLocalServiceUtil.getLayoutIds(
277 _article.getGroupId(), layout.isPrivateLayout(),
278 _article.getArticleId());
279
280 for (Long hitLayoutId : hitLayoutIds) {
281 Layout hitLayout = LayoutLocalServiceUtil.getLayout(
282 _article.getGroupId(), layout.isPrivateLayout(),
283 hitLayoutId.longValue());
284
285 if (LayoutPermissionUtil.contains(
286 themeDisplay.getPermissionChecker(), hitLayout,
287 ActionKeys.VIEW)) {
288
289 return PortalUtil.getLayoutURL(hitLayout, themeDisplay);
290 }
291 }
292
293 return noSuchEntryRedirect;
294 }
295
296 @Override
297 public long getUserId() {
298 return _article.getUserId();
299 }
300
301 @Override
302 public String getUserName() {
303 return _article.getUserName();
304 }
305
306 @Override
307 public String getUuid() {
308 return _article.getUuid();
309 }
310
311 @Override
312 public String getViewInContextMessage() {
313 return "view";
314 }
315
316 @Override
317 public boolean hasEditPermission(PermissionChecker permissionChecker)
318 throws PortalException, SystemException {
319
320 return JournalArticlePermission.contains(
321 permissionChecker, _article, ActionKeys.UPDATE);
322 }
323
324 @Override
325 public boolean hasViewPermission(PermissionChecker permissionChecker)
326 throws PortalException, SystemException {
327
328 return JournalArticlePermission.contains(
329 permissionChecker, _article, ActionKeys.VIEW);
330 }
331
332 @Override
333 public boolean isConvertible() {
334 return true;
335 }
336
337 @Override
338 public boolean isDisplayable() {
339 Date now = new Date();
340
341 Date displayDate = _article.getDisplayDate();
342
343 if ((displayDate != null) && displayDate.after(now)) {
344 return false;
345 }
346
347 Date expirationDate = _article.getExpirationDate();
348
349 if ((expirationDate != null) && expirationDate.before(now)) {
350 return false;
351 }
352
353 return true;
354 }
355
356 @Override
357 public boolean isLocalizable() {
358 return true;
359 }
360
361 @Override
362 public boolean isPrintable() {
363 return true;
364 }
365
366 @Override
367 public String render(
368 RenderRequest renderRequest, RenderResponse renderResponse,
369 String template)
370 throws Exception {
371
372 if (template.equals(TEMPLATE_ABSTRACT) ||
373 template.equals(TEMPLATE_FULL_CONTENT)) {
374
375 renderRequest.setAttribute(WebKeys.JOURNAL_ARTICLE, _article);
376
377 return "/html/portlet/journal/asset/" + template + ".jsp";
378 }
379 else {
380 return null;
381 }
382 }
383
384 @Override
385 public void setAddToPagePreferences(
386 PortletPreferences preferences, String portletId,
387 ThemeDisplay themeDisplay)
388 throws Exception {
389
390 preferences.setValue("articleId", _article.getArticleId());
391 preferences.setValue("groupId", String.valueOf(_article.getGroupId()));
392
393 Layout layout = themeDisplay.getLayout();
394
395 JournalContentSearchLocalServiceUtil.updateContentSearch(
396 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
397 portletId, _article.getArticleId(), true);
398 }
399
400 @Override
401 protected String getIconPath(ThemeDisplay themeDisplay) {
402 return themeDisplay.getPathThemeImages() + "/common/history.png";
403 }
404
405 private JournalArticle _article;
406
407 }