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