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