1
22
23 package com.liferay.portlet.messageboards.util;
24
25 import com.liferay.portal.kernel.language.LanguageUtil;
26 import com.liferay.portal.kernel.portlet.LiferayWindowState;
27 import com.liferay.portal.kernel.util.GetterUtil;
28 import com.liferay.portal.kernel.util.Http;
29 import com.liferay.portal.kernel.util.LocaleUtil;
30 import com.liferay.portal.kernel.util.StringMaker;
31 import com.liferay.portal.kernel.util.StringPool;
32 import com.liferay.portal.kernel.util.StringUtil;
33 import com.liferay.portal.kernel.util.Validator;
34 import com.liferay.portal.model.Group;
35 import com.liferay.portal.model.Organization;
36 import com.liferay.portal.model.Role;
37 import com.liferay.portal.model.UserGroup;
38 import com.liferay.portal.service.GroupLocalServiceUtil;
39 import com.liferay.portal.service.OrganizationLocalServiceUtil;
40 import com.liferay.portal.service.RoleLocalServiceUtil;
41 import com.liferay.portal.service.UserGroupLocalServiceUtil;
42 import com.liferay.portal.service.UserGroupRoleLocalServiceUtil;
43 import com.liferay.portal.service.UserLocalServiceUtil;
44 import com.liferay.portal.theme.ThemeDisplay;
45 import com.liferay.portal.util.ContentUtil;
46 import com.liferay.portal.util.PropsValues;
47 import com.liferay.portlet.messageboards.model.MBBan;
48 import com.liferay.portlet.messageboards.model.MBCategory;
49 import com.liferay.portlet.messageboards.model.MBMessage;
50 import com.liferay.portlet.messageboards.model.MBStatsUser;
51 import com.liferay.portlet.messageboards.model.impl.MBCategoryImpl;
52 import com.liferay.portlet.messageboards.service.MBCategoryLocalServiceUtil;
53 import com.liferay.portlet.messageboards.service.MBMessageLocalServiceUtil;
54 import com.liferay.util.LocalizationUtil;
55
56 import java.io.IOException;
57
58 import java.util.Calendar;
59 import java.util.Date;
60
61 import javax.portlet.PortletPreferences;
62 import javax.portlet.PortletURL;
63 import javax.portlet.RenderRequest;
64 import javax.portlet.RenderResponse;
65 import javax.portlet.WindowState;
66
67 import javax.servlet.jsp.PageContext;
68
69 import org.apache.commons.logging.Log;
70 import org.apache.commons.logging.LogFactory;
71
72
78 public class MBUtil {
79
80 public static final String POP_PORTLET_PREFIX = "mb.";
81
82 public static String getBreadcrumbs(
83 long categoryId, long messageId, PageContext pageContext,
84 RenderRequest req, RenderResponse res)
85 throws Exception {
86
87 if (messageId > 0) {
88 MBMessage message = MBMessageLocalServiceUtil.getMessage(messageId);
89
90 return getBreadcrumbs(null, message, pageContext, req, res);
91 }
92 else {
93 MBCategory category = null;
94
95 try {
96 if ((categoryId > 0) &&
97 (categoryId != MBCategoryImpl.DEFAULT_PARENT_CATEGORY_ID)) {
98
99 category = MBCategoryLocalServiceUtil.getCategory(
100 categoryId);
101 }
102 }
103 catch (Exception e) {
104 }
105
106 return getBreadcrumbs(category, null, pageContext, req, res);
107 }
108 }
109
110 public static String getBreadcrumbs(
111 MBCategory category, MBMessage message, PageContext pageContext,
112 RenderRequest req, RenderResponse res)
113 throws Exception {
114
115 if ((message != null) && (category == null)) {
116 category = message.getCategory();
117 }
118
119 PortletURL categoriesURL = res.createRenderURL();
120
121 WindowState windowState = req.getWindowState();
122
123 if (windowState.equals(LiferayWindowState.POP_UP)) {
124 categoriesURL.setWindowState(LiferayWindowState.POP_UP);
125
126 categoriesURL.setParameter(
127 "struts_action", "/message_boards/select_category");
128 }
129 else {
130 categoriesURL.setWindowState(WindowState.MAXIMIZED);
131
132 categoriesURL.setParameter("struts_action", "/message_boards/view");
133 categoriesURL.setParameter(
134 "categoryId",
135 String.valueOf(MBCategoryImpl.DEFAULT_PARENT_CATEGORY_ID));
136 }
137
138 String categoriesLink =
139 "<a href=\"" + categoriesURL.toString() + "\">" +
140 LanguageUtil.get(pageContext, "categories") + "</a>";
141
142 if (category == null) {
143 return categoriesLink;
144 }
145
146 String breadcrumbs = StringPool.BLANK;
147
148 if (category != null) {
149 for (int i = 0;; i++) {
150 category = category.toEscapedModel();
151
152 PortletURL portletURL = res.createRenderURL();
153
154 if (windowState.equals(LiferayWindowState.POP_UP)) {
155 portletURL.setWindowState(LiferayWindowState.POP_UP);
156
157 portletURL.setParameter(
158 "struts_action", "/message_boards/select_category");
159 portletURL.setParameter(
160 "categoryId", String.valueOf(category.getCategoryId()));
161 }
162 else {
163 portletURL.setWindowState(WindowState.MAXIMIZED);
164
165 portletURL.setParameter(
166 "struts_action", "/message_boards/view");
167 portletURL.setParameter(
168 "categoryId", String.valueOf(category.getCategoryId()));
169 }
170
171 String categoryLink =
172 "<a href=\"" + portletURL.toString() + "\">" +
173 category.getName() + "</a>";
174
175 if (i == 0) {
176 breadcrumbs = categoryLink;
177 }
178 else {
179 breadcrumbs = categoryLink + " » " + breadcrumbs;
180 }
181
182 if (category.isRoot()) {
183 break;
184 }
185
186 category = MBCategoryLocalServiceUtil.getCategory(
187 category.getParentCategoryId());
188 }
189 }
190
191 breadcrumbs = categoriesLink + " » " + breadcrumbs;
192
193 if (message != null) {
194 message = message.toEscapedModel();
195
196 PortletURL messageURL = res.createRenderURL();
197
198 messageURL.setWindowState(WindowState.MAXIMIZED);
199
200 messageURL.setParameter(
201 "struts_action", "/message_boards/view_message");
202 messageURL.setParameter(
203 "messageId", String.valueOf(message.getMessageId()));
204
205 String messageLink =
206 "<a href=\"" + messageURL.toString() + "\">" +
207 message.getSubject() + "</a>";
208
209 breadcrumbs = breadcrumbs + " » " + messageLink;
210 }
211
212 return breadcrumbs;
213 }
214
215 public static String getEmailFromAddress(PortletPreferences prefs) {
216 String emailFromAddress = PropsValues.MESSAGE_BOARDS_EMAIL_FROM_ADDRESS;
217
218 return prefs.getValue("email-from-address", emailFromAddress);
219 }
220
221 public static String getEmailFromName(PortletPreferences prefs) {
222 String emailFromName = PropsValues.MESSAGE_BOARDS_EMAIL_FROM_NAME;
223
224 return prefs.getValue("email-from-name", emailFromName);
225 }
226
227 public static boolean getEmailHtmlFormat(PortletPreferences prefs) {
228 String emailHtmlFormat = prefs.getValue(
229 "email-html-format", StringPool.BLANK);
230
231 if (Validator.isNotNull(emailHtmlFormat)) {
232 return GetterUtil.getBoolean(emailHtmlFormat);
233 }
234 else {
235 return PropsValues.MESSAGE_BOARDS_EMAIL_HTML_FORMAT;
236 }
237 }
238
239 public static boolean getEmailMessageAddedEnabled(
240 PortletPreferences prefs) {
241
242 String emailMessageAddedEnabled = prefs.getValue(
243 "email-message-added-enabled", StringPool.BLANK);
244
245 if (Validator.isNotNull(emailMessageAddedEnabled)) {
246 return GetterUtil.getBoolean(emailMessageAddedEnabled);
247 }
248 else {
249 return PropsValues.MESSAGE_BOARDS_EMAIL_MESSAGE_ADDED_ENABLED;
250 }
251 }
252
253 public static String getEmailMessageAddedBody(PortletPreferences prefs)
254 throws IOException {
255
256 String emailMessageAddedBody = prefs.getValue(
257 "email-message-added-body", StringPool.BLANK);
258
259 if (Validator.isNotNull(emailMessageAddedBody)) {
260 return emailMessageAddedBody;
261 }
262 else {
263 return ContentUtil.get(
264 PropsValues.MESSAGE_BOARDS_EMAIL_MESSAGE_ADDED_BODY);
265 }
266 }
267
268 public static String getEmailMessageAddedSignature(PortletPreferences prefs)
269 throws IOException {
270
271 String emailMessageAddedSignature = prefs.getValue(
272 "email-message-added-signature", StringPool.BLANK);
273
274 if (Validator.isNotNull(emailMessageAddedSignature)) {
275 return emailMessageAddedSignature;
276 }
277 else {
278 return ContentUtil.get(
279 PropsValues.MESSAGE_BOARDS_EMAIL_MESSAGE_ADDED_SIGNATURE);
280 }
281 }
282
283 public static String getEmailMessageAddedSubjectPrefix(
284 PortletPreferences prefs)
285 throws IOException {
286
287 String emailMessageAddedSubjectPrefix = prefs.getValue(
288 "email-message-added-subject-prefix", StringPool.BLANK);
289
290 if (Validator.isNotNull(emailMessageAddedSubjectPrefix)) {
291 return emailMessageAddedSubjectPrefix;
292 }
293 else {
294 return ContentUtil.get(
295 PropsValues.MESSAGE_BOARDS_EMAIL_MESSAGE_ADDED_SUBJECT_PREFIX);
296 }
297 }
298
299 public static boolean getEmailMessageUpdatedEnabled(
300 PortletPreferences prefs) {
301
302 String emailMessageUpdatedEnabled = prefs.getValue(
303 "email-message-updated-enabled", StringPool.BLANK);
304
305 if (Validator.isNotNull(emailMessageUpdatedEnabled)) {
306 return GetterUtil.getBoolean(emailMessageUpdatedEnabled);
307 }
308 else {
309 return PropsValues.MESSAGE_BOARDS_EMAIL_MESSAGE_UPDATED_ENABLED;
310 }
311 }
312
313 public static String getEmailMessageUpdatedBody(PortletPreferences prefs)
314 throws IOException {
315
316 String emailMessageUpdatedBody = prefs.getValue(
317 "email-message-updated-body", StringPool.BLANK);
318
319 if (Validator.isNotNull(emailMessageUpdatedBody)) {
320 return emailMessageUpdatedBody;
321 }
322 else {
323 return ContentUtil.get(
324 PropsValues.MESSAGE_BOARDS_EMAIL_MESSAGE_UPDATED_BODY);
325 }
326 }
327
328 public static String getEmailMessageUpdatedSignature(
329 PortletPreferences prefs)
330 throws IOException {
331
332 String emailMessageUpdatedSignature = prefs.getValue(
333 "email-message-updated-signature", StringPool.BLANK);
334
335 if (Validator.isNotNull(emailMessageUpdatedSignature)) {
336 return emailMessageUpdatedSignature;
337 }
338 else {
339 return ContentUtil.get(
340 PropsValues.MESSAGE_BOARDS_EMAIL_MESSAGE_UPDATED_SIGNATURE);
341 }
342 }
343
344 public static String getEmailMessageUpdatedSubjectPrefix(
345 PortletPreferences prefs)
346 throws IOException {
347
348 String emailMessageUpdatedSubject = prefs.getValue(
349 "email-message-updated-subject-prefix", StringPool.BLANK);
350
351 if (Validator.isNotNull(emailMessageUpdatedSubject)) {
352 return emailMessageUpdatedSubject;
353 }
354 else {
355 return ContentUtil.get(
356 PropsValues.
357 MESSAGE_BOARDS_EMAIL_MESSAGE_UPDATED_SUBJECT_PREFIX);
358 }
359 }
360
361 public static String getMailId(String mx, long categoryId, long messageId) {
362 StringMaker sm = new StringMaker();
363
364 sm.append(StringPool.LESS_THAN);
365 sm.append(POP_PORTLET_PREFIX);
366 sm.append(categoryId);
367 sm.append(StringPool.PERIOD);
368 sm.append(messageId);
369 sm.append(StringPool.AT);
370 sm.append(PropsValues.POP_SERVER_SUBDOMAIN);
371 sm.append(StringPool.PERIOD);
372 sm.append(mx);
373 sm.append(StringPool.GREATER_THAN);
374
375 return sm.toString();
376 }
377
378 public static String getMailingListAddress(
379 long categoryId, long messageId, String mx) {
380
381 StringMaker sm = new StringMaker();
382
383 sm.append(POP_PORTLET_PREFIX);
384 sm.append(categoryId);
385 sm.append(StringPool.PERIOD);
386 sm.append(messageId);
387 sm.append(StringPool.AT);
388 sm.append(PropsValues.POP_SERVER_SUBDOMAIN);
389 sm.append(StringPool.PERIOD);
390 sm.append(mx);
391
392 return sm.toString();
393 }
394
395 public static long getMessageId(String mailId) {
396 int x = mailId.indexOf(StringPool.LESS_THAN) + 1;
397 int y = mailId.indexOf(StringPool.AT);
398
399 long messageId = 0;
400
401 if ((x > 0 ) && (y != -1)) {
402 String temp = mailId.substring(x, y);
403
404 int z = temp.indexOf(StringPool.PERIOD);
405
406 if (z != -1) {
407 messageId = GetterUtil.getLong(temp.substring(z));
408 }
409 }
410
411 return messageId;
412 }
413
414 public static String[] getThreadPriority(
415 PortletPreferences prefs, String languageId, double value,
416 ThemeDisplay themeDisplay)
417 throws Exception {
418
419 String[] priorities = LocalizationUtil.getPrefsValues(
420 prefs, "priorities", languageId);
421
422 String[] priorityPair = _findThreadPriority(
423 value, themeDisplay, priorities);
424
425 if (priorityPair == null) {
426 String defaultLanguageId = LocaleUtil.toLanguageId(
427 LocaleUtil.getDefault());
428
429 priorities = LocalizationUtil.getPrefsValues(
430 prefs, "priorities", defaultLanguageId);
431
432 priorityPair = _findThreadPriority(value, themeDisplay, priorities);
433 }
434
435 return priorityPair;
436 }
437
438 public static Date getUnbanDate(MBBan ban, int expireInterval) {
439 Date banDate = ban.getCreateDate();
440
441 Calendar cal = Calendar.getInstance();
442
443 cal.setTime(banDate);
444
445 cal.add(Calendar.DATE, expireInterval);
446
447 return cal.getTime();
448 }
449
450 public static String getUserRank(
451 PortletPreferences prefs, String languageId, int posts)
452 throws Exception {
453
454 String rank = StringPool.BLANK;
455
456 String[] ranks = LocalizationUtil.getPrefsValues(
457 prefs, "ranks", languageId);
458
459 for (int i = 0; i < ranks.length; i++) {
460 String[] kvp = StringUtil.split(ranks[i], StringPool.EQUAL);
461
462 String kvpName = kvp[0];
463 int kvpPosts = GetterUtil.getInteger(kvp[1]);
464
465 if (posts >= kvpPosts) {
466 rank = kvpName;
467 }
468 else {
469 break;
470 }
471 }
472
473 return rank;
474 }
475
476 public static String getUserRank(
477 PortletPreferences prefs, String languageId, MBStatsUser statsUser)
478 throws Exception {
479
480 String rank = StringPool.BLANK;
481
482 Group group = GroupLocalServiceUtil.getGroup(
483 statsUser.getGroupId());
484
485 long companyId = group.getCompanyId();
486
487 String[] ranks = LocalizationUtil.getPrefsValues(
488 prefs, "ranks", languageId);
489
490 for (int i = 0; i < ranks.length; i++) {
491 String[] kvp = StringUtil.split(ranks[i], StringPool.EQUAL);
492
493 String curRank = kvp[0];
494 String curRankValue = kvp[1];
495
496 String[] curRankValueKvp = StringUtil.split(
497 curRankValue, StringPool.COLON);
498
499 if (curRankValueKvp.length <= 1) {
500 int kvpPosts = GetterUtil.getInteger(curRankValue);
501
502 if (statsUser.getMessageCount() >= kvpPosts) {
503 rank = curRank;
504 }
505
506 continue;
507 }
508
509 String entityType = curRankValueKvp[0];
510 String entityValue = curRankValueKvp[1];
511
512 try {
513 if (_isEntityRank(
514 companyId, statsUser, entityType, entityValue)) {
515
516 return curRank;
517 }
518 }
519 catch (Exception e) {
520 if (_log.isWarnEnabled()) {
521 _log.warn(e);
522 }
523 }
524 }
525
526 return rank;
527 }
528
529 public static boolean isAllowAnonymousPosting(PortletPreferences prefs) {
530 String allowAnonymousPosting = prefs.getValue(
531 "allow-anonymous-posting", StringPool.BLANK);
532
533 if (Validator.isNotNull(allowAnonymousPosting)) {
534 return GetterUtil.getBoolean(allowAnonymousPosting);
535 }
536 else {
537 return PropsValues.MESSAGE_BOARDS_ANONYMOUS_POSTING_ENABLED;
538 }
539 }
540
541 private static String[] _findThreadPriority(
542 double value, ThemeDisplay themeDisplay, String[] priorities) {
543
544 for (int i = 0; i < priorities.length; i++) {
545 String[] priority = StringUtil.split(priorities[i]);
546
547 try {
548 String priorityName = priority[0];
549 String priorityImage = priority[1];
550 double priorityValue = GetterUtil.getDouble(priority[2]);
551
552 if (value == priorityValue) {
553 if (!priorityImage.startsWith(Http.HTTP)) {
554 priorityImage =
555 themeDisplay.getPathThemeImages() + priorityImage;
556 }
557
558 return new String[] {priorityName, priorityImage};
559 }
560 }
561 catch (Exception e) {
562 }
563 }
564
565 return null;
566 }
567
568 private static boolean _isEntityRank(
569 long companyId, MBStatsUser statsUser, String entityType,
570 String entityValue)
571 throws Exception {
572
573 long groupId = statsUser.getGroupId();
574 long userId = statsUser.getUserId();
575
576 if (entityType.equals("community-role") ||
577 entityType.equals("organization-role")) {
578
579 Role role = RoleLocalServiceUtil.getRole(companyId, entityValue);
580
581 if (UserGroupRoleLocalServiceUtil.hasUserGroupRole(
582 userId, groupId, role.getRoleId())) {
583
584 return true;
585 }
586 }
587 else if (entityType.equals("organization")) {
588 Organization organization =
589 OrganizationLocalServiceUtil.getOrganization(
590 companyId, entityValue);
591
592 if (OrganizationLocalServiceUtil.hasUserOrganization(
593 userId, organization.getOrganizationId())) {
594
595 return true;
596 }
597 }
598 else if (entityType.equals("regular-role")) {
599 if (RoleLocalServiceUtil.hasUserRole(
600 userId, companyId, entityValue, true)) {
601
602 return true;
603 }
604 }
605 else if (entityType.equals("user-group")) {
606 UserGroup userGroup = UserGroupLocalServiceUtil.getUserGroup(
607 companyId, entityValue);
608
609 if (UserLocalServiceUtil.hasUserGroupUser(
610 userGroup.getUserGroupId(), userId)) {
611
612 return true;
613 }
614 }
615
616 return false;
617 }
618
619 private static Log _log = LogFactory.getLog(MBUtil.class);
620
621 }