1 package com.pentila.entSavoie.utils;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.util.ArrayList;
8 import java.util.Enumeration;
9 import java.util.HashSet;
10 import java.util.LinkedHashMap;
11 import java.util.List;
12 import java.util.ResourceBundle;
15 import javax.portlet.ActionRequest;
16 import javax.portlet.ActionResponse;
17 import javax.portlet.ResourceRequest;
18 import javax.portlet.ResourceResponse;
20 import com.liferay.contacts.util.ListFicheFactory;
21 import com.liferay.contacts.util.ProxyFiche;
22 import com.liferay.portal.kernel.dao.orm.QueryUtil;
23 import com.liferay.portal.kernel.exception.PortalException;
24 import com.liferay.portal.kernel.exception.SystemException;
25 import com.liferay.portal.kernel.json.JSONArray;
26 import com.liferay.portal.kernel.json.JSONFactoryUtil;
27 import com.liferay.portal.kernel.json.JSONObject;
28 import com.liferay.portal.kernel.log.Log;
29 import com.liferay.portal.kernel.log.LogFactoryUtil;
30 import com.liferay.portal.kernel.repository.model.FileEntry;
31 import com.liferay.portal.kernel.upload.UploadPortletRequest;
32 import com.liferay.portal.kernel.util.FileUtil;
33 import com.liferay.portal.kernel.util.HttpUtil;
34 import com.liferay.portal.kernel.util.MimeTypesOverrideUtil;
35 import com.liferay.portal.kernel.util.ObjectValuePair;
36 import com.liferay.portal.kernel.util.OrderByComparator;
37 import com.liferay.portal.kernel.util.ParamUtil;
38 import com.liferay.portal.kernel.util.PrefsPropsUtil;
39 import com.liferay.portal.kernel.util.PropsKeys;
40 import com.liferay.portal.kernel.util.Validator;
41 import com.liferay.portal.kernel.util.WebKeys;
42 import com.liferay.portal.kernel.workflow.WorkflowConstants;
43 import com.liferay.portal.model.CompanyConstants;
44 import com.liferay.portal.model.User;
45 import com.liferay.portal.service.ExtUserLocalServiceUtil;
46 import com.liferay.portal.service.UserLocalServiceUtil;
47 import com.liferay.portal.theme.ThemeDisplay;
48 import com.liferay.portal.util.PortalUtil;
49 import com.liferay.portlet.documentlibrary.FileSizeException;
50 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
51 import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
52 import com.liferay.portlet.documentlibrary.util.DLPreviewableProcessor;
53 import com.pentila.entSavoie.amis.model.Relationship;
54 import com.pentila.entSavoie.amis.service.RelationshipLocalServiceUtil;
55 import com.pentila.entSavoie.carnetDAdresses.model.Fiche;
56 import com.pentila.entSavoie.carnetDAdresses.model.Liste;
57 import com.pentila.entSavoie.carnetDAdresses.service.FicheLocalServiceUtil;
58 import com.pentila.entSavoie.carnetDAdresses.service.ListeLocalServiceUtil;
59 import com.pentila.entSavoie.internalMessaging.ThreadSendMessage;
61 public class JSPPortletUtil {
63 private static Log logger = LogFactoryUtil.getLog(JSPPortletUtil.class);
67 * @param resourceRequest
69 * @throws SystemException
70 * @throws PortalException
72 public static JSONObject addFileEntry(ResourceRequest resourceRequest) throws PortalException, SystemException{
73 return addFileEntry(resourceRequest, null, false);
78 * @param resourceRequest
81 * @throws SystemException
82 * @throws PortalException
84 public static JSONObject addFileEntry(ResourceRequest resourceRequest, ResourceBundle messages) throws PortalException, SystemException{
85 return addFileEntry(resourceRequest, messages, false);
90 * @param resourceRequest
93 * @throws SystemException
94 * @throws PortalException
96 public static JSONObject addFileEntry(ResourceRequest resourceRequest, boolean addImageInfos) throws PortalException, SystemException{
97 return addFileEntry(resourceRequest, null, addImageInfos);
102 * @param resourceRequest
104 * @param addImageInfos
106 * @throws PortalException
107 * @throws SystemException
109 public static JSONObject addFileEntry(ResourceRequest resourceRequest, ResourceBundle messages, boolean addImageInfos) throws PortalException, SystemException{
111 // Get user from request
112 final User user = PortalUtil.getUser(resourceRequest);
114 // Get file id set in resource request
115 final Long fileEntryId = ParamUtil.getLong(resourceRequest, "idFile", 0);
117 // Create JSON object
118 JSONObject result = JSONFactoryUtil.createJSONObject();
119 result.put("success", true);
127 fe = DLAppUtil.addTemporaryFileEntry(user, fileEntryId);
130 // Get upload request
131 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(resourceRequest);
133 // Get folder from request
134 long folderId = ParamUtil.getLong(resourceRequest, "folderId");
136 fe = DLAppUtil.addTemporaryFileEntry(uploadRequest, user, folderId);
139 result.put("success", true);
140 result.put("id", String.valueOf(fe.getFileEntryId()));
141 result.put("name", fe.getTitle());
142 result.put("type", "Fichier");
143 String contentType = MimeTypesOverrideUtil.getContentType(fe.getTitle());
144 // Add image info in result
145 if(addImageInfos && contentType.contains("image")){
146 // Get theme display from request
147 ThemeDisplay themeDisplay = (ThemeDisplay) resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);
149 result.put("urlThumb", DLAppUtil.getImageSrc(fe, themeDisplay, DLPreviewableProcessor.THUMBNAIL_INDEX_DEFAULT));
150 result.put("height", PrefsPropsUtil.getInteger(PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_HEIGHT));
151 result.put("width", PrefsPropsUtil.getInteger(PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_WIDTH));;
153 if(fe.getExtension().contains("html")){
154 result.put("isSignet", DLEntryUtil.isSignetFile(fe));
158 } catch (FileSizeException e) {
160 result.put("success", false);
161 if(Validator.isNotNull(messages)){
162 String messageSizeTooImportant = messages.getString("file-uploaded-overweight");
163 long maxUploadSize = getSizeInMegaOctet(
164 ENTMainUtilsLocalServiceUtil.getUploadServletRequestMaxSize(user.getCompanyId()));
165 result.put("portal_message", messageSizeTooImportant.replace("$1", String.valueOf(maxUploadSize)));
168 } catch (Exception e) {
170 result.put("success", false);
171 if(Validator.isNotNull(messages)){
172 result.put("portal_message", messages.getString("nom-fichier-incorrect"));
178 public static long getSizeInMegaOctet(long pSize){
179 return pSize / (1024 * 1024);
183 * Add image after user choice
184 * @param resourceRequest
187 public static JSONObject pictureChoosedProcess(ResourceRequest resourceRequest){
188 return pictureChoosedProcess(resourceRequest,true);
192 * Add image after user choice
193 * @param resourceRequest
196 public static JSONObject pictureChoosedProcess(ResourceRequest resourceRequest, boolean absoluteUrl){
198 // Create JSON object
199 JSONObject result = JSONFactoryUtil.createJSONObject();
200 result.put("success", true);
202 // Get theme display from request
203 ThemeDisplay themeDisplay = (ThemeDisplay) resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);
209 // Get existing file entry id
210 final Long idFile = ParamUtil.getLong(resourceRequest, "idFile", 0);
212 // Get user from request
213 User user = PortalUtil.getUser(resourceRequest);
214 String resize = ParamUtil.getString(resourceRequest, "resize", "");
217 // Get image from document library
218 fe = DLAppUtil.addTemporaryImage(idFile, user, resize);
221 // Get upload request
222 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(resourceRequest);
224 // Get image from upload request - parameter : uploadedFile
225 fe = DLAppUtil.addTemporaryImage(uploadRequest, user, resize);
230 imageURL = DLAppUtil.getImageSrc(fe, themeDisplay, DLPreviewableProcessor.THUMBNAIL_INDEX_DEFAULT);
233 imageURL = DLAppUtil.getImageSrcRelative(fe, themeDisplay, DLPreviewableProcessor.THUMBNAIL_INDEX_DEFAULT);
236 result.put("imageId", fe.getFileEntryId());
237 result.put("urlThumb", imageURL);
238 result.put("height", PrefsPropsUtil.getInteger(PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_HEIGHT));
239 result.put("width", PrefsPropsUtil.getInteger(PropsKeys.DL_FILE_ENTRY_THUMBNAIL_MAX_WIDTH));
241 } catch (Exception e) {
243 result.put("success", false);
250 * Add image in CKEditor after user choice
251 * @param resourceRequest
254 public static JSONObject pictureChoosedCKEditor(ResourceRequest resourceRequest) throws PortalException, SystemException, IOException{
256 // Create JSON object
257 JSONObject result = JSONFactoryUtil.createJSONObject();
258 result.put("success", true);
260 // Get existing file entry id
261 final Long idFile = ParamUtil.getLong(resourceRequest, "idFile", 0);
263 byte[] fileArray = null;
265 String fileBase64 = null;
266 String extension = "";
269 // Get image from document library
270 FileEntry fe = DLAppLocalServiceUtil.getFileEntry(idFile);
271 InputStream is = fe.getContentStream();
274 String[] splitFN = DLEntryUtil.splitFileName(fe.getTitle());
275 extension = splitFN[1];
276 fileArray = FileUtil.getBytes(is);
278 fileBase64 = DLEntryUtil.convertImageToBase64(fileArray, extension, true, 500.0, 500.0);
281 // Get image from upload request
282 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(resourceRequest);
284 String fileNameParam = "";
285 Enumeration<String> enumeration = uploadRequest.getParameterNames();
286 while (enumeration.hasMoreElements()) {
287 String ee = enumeration.nextElement();
288 if (ee.startsWith("ext-gen") || ee.startsWith("uploadedFile") || ee.startsWith("files")){
293 if(!fileNameParam.isEmpty()){
295 String sourceFileName = uploadRequest.getFileName(fileNameParam);
296 String[] splitFN = DLEntryUtil.splitFileName(sourceFileName);
297 extension = splitFN[1];
299 file = uploadRequest.getFile(fileNameParam);
300 //fileArray = FileUtil.getBytes(uploadRequest.getFile(fileNameParam));
303 throw new FileSizeException();
306 // Convert image in base 64
307 fileBase64 = DLEntryUtil.convertImageToBase64(file, extension, true, 500.0, 500.0);
308 //String fileBase64 = Base64.encode(fileArray);
311 result.put("extension", extension);
312 result.put("fileBase64", fileBase64);
318 * Upload image in CKEditor
319 * @param resourceRequest
321 * @throws PortalException
322 * @throws SystemException
323 * @throws IOException
325 public static JSONObject uploadPictureCKEditor(ResourceRequest resourceRequest) throws PortalException, SystemException, IOException{
327 // Create JSON object
328 JSONObject result = JSONFactoryUtil.createJSONObject();
329 result.put("success", true);
331 // Get upload portlet request
332 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(resourceRequest);
334 // Get file parameter name
335 String fileNameParam = "";
336 Enumeration<String> enumeration = uploadRequest.getParameterNames();
337 while (enumeration.hasMoreElements()) {
338 String ee = enumeration.nextElement();
339 if (ee.startsWith("ext-gen") || ee.startsWith("uploadedFile") || ee.startsWith("files")){
344 if(!fileNameParam.isEmpty()){
345 // Get file from upload request
346 final java.io.File file = uploadRequest.getFile(fileNameParam);
347 String sourceFileName = uploadRequest.getFileName(fileNameParam);
350 String[] splitFN = DLEntryUtil.splitFileName(sourceFileName);
351 String extension = splitFN[1];
353 // Convert file to base 64
354 String fileBase64 = DLEntryUtil.convertImageToBase64(file, extension, true, 500.0, 500.0);
356 result.put("extension", extension);
357 result.put("fileBase64", fileBase64);
360 logger.error("File size exception in uploadPictureCKEditor");
361 throw new FileSizeException();
368 * Return a JSON Array of file containing their base64 link.
371 * @return a JSON Array of file containing their base64 link
373 public static JSONArray getFileListBase64(JSONArray fileList, User currentUser) {
374 JSONArray fileListWithBase64 = JSONFactoryUtil.createJSONArray();
375 for (int i=0 ; i<fileList.length() ; ++i) {
376 JSONObject file = fileList.getJSONObject(i);
378 String[] splitFileName = DLEntryUtil.splitFileName(file.getString("fileName").toLowerCase());
379 String extension = splitFileName[1];
381 file.put("fileBase64", getFileBase64(file.getLong("fileId"), extension, currentUser));
382 fileListWithBase64.put(file);
384 return fileListWithBase64;
388 * Get the base64 link for a fileId
392 * @return The file base64 link
394 public static String getFileBase64(long fileId, String extension, User currentUser) {
397 ObjectValuePair<String, byte[]> ovp = JSPPortletUtil.getFileAsOVP(currentUser.getCompanyId(), fileId, "");
398 byte[] bytes = ovp.getValue();
399 fileBase64 = DLEntryUtil.convertImageToBase64(bytes, extension, true, 500.0, 500.0);
400 return "data:image/" + extension + ";base64," + fileBase64;
402 catch (Exception e) {
410 * @param themeDisplay
411 * @param attachmentFile
415 * @throws PortalException
416 * @throws SystemException
418 public static JSONObject formatAttachment(ThemeDisplay themeDisplay, String attachmentFile, long objectId, String portlet) throws PortalException, SystemException{
419 return formatAttachment(themeDisplay, attachmentFile, objectId, portlet, null);
424 * @param themeDisplay
425 * @param attachmentFile
430 * @throws PortalException
431 * @throws SystemException
433 public static JSONObject formatAttachment(ThemeDisplay themeDisplay, String attachmentFile, long objectId, String portlet, Object[] params) throws PortalException, SystemException{
434 final JSONObject fileDescriptor = JSONFactoryUtil.createJSONObject();
436 long companyId = themeDisplay.getCompanyId();
438 String fileName = FileUtil.getShortFileName(attachmentFile);
440 long fileSize = DLStoreUtil.getFileSize(companyId, CompanyConstants.SYSTEM, attachmentFile)/1000;
445 String[] splitFN = DLEntryUtil.splitFileName(fileName);
446 String extension = splitFN[1];
448 String fileId = attachmentFile;
449 Date now = new Date();
450 String tokenId = fileId + now.getTime();
452 boolean isSignet = false;
453 String urlSignet = "";
454 if(extension.contains("html")){
455 isSignet = DLEntryUtil.isSignetFile(DLStoreUtil.getFileAsStream(companyId, CompanyConstants.SYSTEM, attachmentFile));
457 urlSignet = DLEntryUtil.getUrlSignet(DLStoreUtil.getFileAsStream(companyId, CompanyConstants.SYSTEM, attachmentFile));
461 if(portlet.equals(PortletConstant.ACTUALITES)){
462 fileDescriptor.put("fileHref", "<a id='" + tokenId + "' style='cursor:pointer;' onClick='showMenuAttachment(\""+themeDisplay.getPathMain()+"/blog_entries/get_blog_entry_attachment?blogEntryInfosId="+objectId+"&attachment="+HttpUtil.encodeURL(fileName)+"\",\"" + fileId + "\",\"" + fileName + "\",\"" + extension + "\",\"" + fileSize +"\",\"" + objectId + "\",\"" + tokenId + "\"," + (Boolean)params[0] + "," + (Boolean)params[1] + ", \"" + urlSignet + "\");'>"+fileName+"</a>");
464 else if(portlet.equals(PortletConstant.BLOG)){
465 fileDescriptor.put("fileHref", "<a id='" + tokenId + "' style='cursor:pointer;' onClick='showMenuAttachment(\""+themeDisplay.getPathMain()+"/blog/get_item_file?itemId="+objectId+"&fileName="+HttpUtil.encodeURL(fileName)+"&fileType=attachment"+"\",\"" + fileId + "\",\"" + fileName + "\",\"" + extension + "\",\"" + fileSize +"\",\"" + objectId + "\",\"" + tokenId + "\", \"" + urlSignet + "\");'>"+fileName+"</a>");
467 else if(portlet.equals(PortletConstant.CAHIER_DE_TEXTE)){
468 fileDescriptor.put("fileHref", "<a id='" + tokenId + "' style='cursor:pointer;' onClick='showMenuAttachment(\""+ themeDisplay.getPathMain()+"/cahier_de_texte/get_event_attachment?evtId="+ objectId +"&companyId="+ companyId +"&attachment="+HttpUtil.encodeURL(fileName)+"\",\"" + fileId + "\",\"" + fileName + "\",\"" + extension + "\",\"" + fileSize + "\",\"" + objectId + "\",\"" + tokenId + "\", \"" + urlSignet + "\");'>"+fileName + " (" + fileSize + " kb)" +"</a>");
470 else if(portlet.equals(PortletConstant.FORUM)){
471 fileDescriptor.put("fileHref", "<a id='" + tokenId + "' style='cursor:pointer;' onClick='showMenuAttachment(\""+themeDisplay.getPathMain()+"/message_boards/get_message_attachment?messageId="+objectId+"&attachment="+HttpUtil.encodeURL(fileName)+"\",\"" + fileId + "\",\"" + fileName + "\",\"" + extension + "\",\"" + fileSize + "\",\"" + objectId + "\",\"" + tokenId + "\", \"" + urlSignet + "\");'>"+fileName+"</a>");
473 fileDescriptor.put("fileId", fileId);
474 fileDescriptor.put("fileName", fileName);
475 fileDescriptor.put("fileInfo", fileSize);
476 fileDescriptor.put("type", "Fichier");
477 fileDescriptor.put("isSignet", isSignet);
479 return fileDescriptor;
483 * Format attachment for new portlet with angular, change file link & JSON paramter name
484 * @param themeDisplay
485 * @param attachmentFile
490 * @throws PortalException
491 * @throws SystemException
493 public static JSONObject newFormatAttachment(ThemeDisplay themeDisplay, String attachmentFile, long objectId, String portlet) throws PortalException, SystemException{
494 final JSONObject fileDescriptor = JSONFactoryUtil.createJSONObject();
496 long companyId = themeDisplay.getCompanyId();
498 String fileName = FileUtil.getShortFileName(attachmentFile);
500 long fileSize = DLStoreUtil.getFileSize(companyId, CompanyConstants.SYSTEM, attachmentFile);
505 String[] splitFN = DLEntryUtil.splitFileName(fileName);
506 String extension = splitFN[1];
508 String fileId = attachmentFile;
510 boolean isSignet = false;
511 String urlSignet = "";
512 if(extension.contains("html")){
513 isSignet = DLEntryUtil.isSignetFile(DLStoreUtil.getFileAsStream(companyId, CompanyConstants.SYSTEM, attachmentFile));
515 urlSignet = DLEntryUtil.getUrlSignet(DLStoreUtil.getFileAsStream(companyId, CompanyConstants.SYSTEM, attachmentFile));
518 fileDescriptor.put("urlSignet", urlSignet);
520 if(portlet.equals(PortletConstant.ACTUALITES)){
521 fileDescriptor.put("fileLink", themeDisplay.getPathMain()+"/blog_entries/get_blog_entry_attachment?blogEntryInfosId="+objectId+"&attachment="+HttpUtil.encodeURL(fileName));
523 else if(portlet.equals(PortletConstant.BLOG)){
524 fileDescriptor.put("link", themeDisplay.getPathMain()+"/blog/get_item_file?itemId="+objectId+"&fileName="+HttpUtil.encodeURL(fileName)+"&fileType=attachment");
526 else if(portlet.equals(PortletConstant.CAHIER_DE_TEXTE)){
527 fileDescriptor.put("link", themeDisplay.getPathMain()+"/cahier_de_texte/get_event_attachment?evtId="+ objectId +"&companyId="+ companyId +"&attachment="+HttpUtil.encodeURL(fileName));
529 else if(portlet.equals(PortletConstant.FORUM)){
530 fileDescriptor.put("link", themeDisplay.getPathMain()+"/message_boards/get_message_attachment?messageId="+objectId+"&attachment=" + HttpUtil.encodeURL(fileName));
532 fileDescriptor.put("fileName", fileName);
533 fileDescriptor.put("isSignet", isSignet);
534 fileDescriptor.put("fileSize", DLEntryUtil.formatFileSize(fileSize,themeDisplay.getLocale()));
536 return fileDescriptor;
540 * Get file as Object Value Pair
544 * @throws SystemException
545 * @throws PortalException
547 public static ObjectValuePair<String, byte[]> getFileAsOVP(long companyId, String file) throws PortalException, SystemException {
548 ObjectValuePair<String, byte[]> ovp = new ObjectValuePair<String, byte[]>();
549 String fileName = FileUtil.getShortFileName(file);
550 ovp.setKey(fileName);
551 ovp.setValue(DLStoreUtil.getFileAsBytes(companyId, CompanyConstants.SYSTEM, file));
556 * Get file as Object Value Pair
560 * @throws SystemException
561 * @throws PortalException
562 * @throws IOException
564 public static ObjectValuePair<String, byte[]> getFileAsOVP(long companyId, long fileId) throws PortalException, SystemException, IOException{
565 FileEntry fe = DLAppLocalServiceUtil.getFileEntry(fileId);
566 InputStream is = fe.getContentStream();
567 ObjectValuePair<String, byte[]> ovp = new ObjectValuePair<String, byte[]>();
568 String formattedTitle = FileNameUtil.getValidName(fe.getTitle());
569 ovp.setKey(formattedTitle);
570 ovp.setValue(FileUtil.getBytes(is));
575 * Get file as Object Value Pair
580 * @throws SystemException
581 * @throws PortalException
582 * @throws IOException
584 public static ObjectValuePair<String, byte[]> getFileAsOVP(long companyId, long fileId, String fileName) throws PortalException, SystemException, IOException{
585 String formattedTitle = "";
587 ObjectValuePair<String, byte[]> ovp = new ObjectValuePair<String, byte[]>();
589 FileEntry fe = DLAppLocalServiceUtil.getFileEntry(fileId);
590 InputStream is = fe.getContentStream();
591 formattedTitle = FileNameUtil.getValidName(fe.getTitle(), true, true);
592 ovp.setValue(FileUtil.getBytes(is));
596 byte[] file = DLStoreUtil.getFileAsBytes(companyId, CompanyConstants.SYSTEM, fileName);
597 formattedTitle = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length());
600 ovp.setKey(formattedTitle);
606 * Get file as Object Value Pair
610 * @throws SystemException
611 * @throws PortalException
612 * @throws IOException
614 public static ObjectValuePair<String, InputStream> getFileAsOVPStream(long companyId, long fileId) throws PortalException, SystemException, IOException{
615 FileEntry fe = DLAppLocalServiceUtil.getFileEntry(fileId);
616 InputStream is = fe.getContentStream();
617 ObjectValuePair<String, InputStream> ovp = new ObjectValuePair<String, InputStream>();
618 String formattedTitle = FileNameUtil.getValidName(fe.getTitle());
619 ovp.setKey(formattedTitle);
625 * Get file as Object Value Pair
630 * @throws SystemException
631 * @throws PortalException
632 * @throws IOException
634 public static ObjectValuePair<String, InputStream> getFileAsOVPStream(long companyId, long fileId, String fileName) throws PortalException, SystemException, IOException{
635 String formattedTitle = "";
637 ObjectValuePair<String, InputStream> ovp = new ObjectValuePair<String, InputStream>();
639 FileEntry fe = DLAppLocalServiceUtil.getFileEntry(fileId);
640 InputStream is = fe.getContentStream();
641 formattedTitle = FileNameUtil.getValidName(fe.getTitle(), true, true);
646 InputStream file = DLStoreUtil.getFileAsStream(companyId, CompanyConstants.SYSTEM, fileName);
647 formattedTitle = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length());
650 ovp.setKey(formattedTitle);
657 * @param resourceRequest
658 * @throws PortalException
659 * @throws SystemException
661 public static JSONObject createMessage(ResourceRequest resourceRequest) throws PortalException, SystemException {
664 JSONObject result = JSONFactoryUtil.createJSONObject();
666 final long currentUserId = PortalUtil.getUserId(resourceRequest);
667 final String subject = ParamUtil.getString(resourceRequest, "subject");
668 final String content = ParamUtil.getString(resourceRequest, "content");
669 final User user = UserLocalServiceUtil.getUser(currentUserId);
674 Set<Long> destFinal = new HashSet<Long>();
675 Set<ProxyFiche> lesFiches = new HashSet<ProxyFiche>();
676 JSONArray destinataires = JSONFactoryUtil.createJSONArray(ParamUtil.getString(resourceRequest, "destinatairesIM"));
678 for (int i=0; i<destinataires.length(); i++) {
680 JSONObject jobj = destinataires.getJSONObject(i);
681 String mbrtype = jobj.getString("type");
683 if (!mbrtype.equals("")) {
686 if (mbrtype.equals("all")) {
687 // cas de tous mes contacts
688 lesFiches.addAll(ListFicheFactory.createAllContacts(user));
690 else if (mbrtype.equals("perso")) {
691 // cas de tous mes contacts personnels
692 lesFiches.addAll(ListFicheFactory.createPersoContacts(user));
694 else if (mbrtype.equals("inst")) {
695 // cas de tous mes contact inst
696 lesFiches.addAll(ListFicheFactory.createInstContacts(user));
698 else if (mbrtype.equals("local")) {
699 // cas d'une liste perso
700 long listId = jobj.getLong("listId");
701 Liste userListe = ListeLocalServiceUtil.getListe(listId);
702 lesFiches.addAll(ListFicheFactory.createUserListContacts(user, userListe));
704 else if (mbrtype.equals("amis")) {
705 long listId = jobj.getLong("listId");
706 List<Relationship> listRel = RelationshipLocalServiceUtil.getRelationshipByUserIdFriendFolderIdStateId(user.getUserId(), listId, 2, QueryUtil.ALL_POS, QueryUtil.ALL_POS);
707 List<Long> lesAmis = new ArrayList<Long>();
708 for(Relationship rel : listRel){
709 lesAmis.add(rel.getFriendId());
711 lesFiches.addAll(ListFicheFactory.createAmisContacts(user, lesAmis));
713 else if (mbrtype.equals("allAmis")) {
714 List<Relationship> listAllRel = RelationshipLocalServiceUtil.getRelationshipByUserIdStateId(user.getUserId(), 2, QueryUtil.ALL_POS, QueryUtil.ALL_POS);
715 List<Long> lesAmis = new ArrayList<Long>();
716 for(Relationship rel : listAllRel){
717 lesAmis.add(rel.getFriendId());
719 lesFiches.addAll(ListFicheFactory.createAmisContacts(user, lesAmis));
721 else if (mbrtype.equals("search")) {
722 // cas d'une organisation
723 String roleId = jobj.getString("roleId");
724 String orgId = jobj.getString("orgId");
725 long listId = jobj.getLong("listId");
727 Long roleIdL = new Long(0);
728 Long orgIdL = new Long(0);
730 if (!roleId.equals("")) {
731 roleIdL = Long.valueOf(roleId);
733 if (!orgId.equals("")) {
734 orgIdL = Long.valueOf(orgId);
737 lesFiches.addAll(ListFicheFactory.createSearchContacts(user, orgIdL, roleIdL, listId));
741 // User case, start with 2
742 lesFiches.add(new ProxyFiche(
744 UserLocalServiceUtil.getUser(Long.valueOf(jobj.getString("id")))));
749 for (ProxyFiche f : lesFiches) {
750 String typeUser = f.getType();
751 if (typeUser.equals("user")) {
752 idUser = Long.valueOf(f.getId());
754 idUser = Long.valueOf(f.getRelUserId());
759 if (!destFinal.contains(idUser)) {
760 destFinal.add(idUser);
766 // forwardPjFiles can be empty
767 boolean forwardPjIsEmpty = ParamUtil.getString(resourceRequest, "forwardPjFiles") == null || ParamUtil.getString(resourceRequest, "forwardPjFiles").isEmpty();
768 boolean attachFileIsEmpty = ParamUtil.getString(resourceRequest, "attachFiles") == null || ParamUtil.getString(resourceRequest, "attachFiles").isEmpty();
770 JSONArray forwardPjFiles = JSONFactoryUtil.createJSONArray(forwardPjIsEmpty?JSONUtils.EMPTY_JSON_ARRAY:ParamUtil.getString(resourceRequest, "forwardPjFiles"));
771 JSONArray attachFiles = JSONFactoryUtil.createJSONArray(attachFileIsEmpty?JSONUtils.EMPTY_JSON_ARRAY:ParamUtil.getString(resourceRequest, "attachFiles"));
773 JSONArray files = JSONUtils.concatArray(forwardPjFiles,attachFiles);
775 final String cmd = ParamUtil.getString(resourceRequest, "cmd");
778 ThreadSendMessage sendMsgThd = new ThreadSendMessage(user, destFinal, subject, content, files,cmd.equals("createMessage"), cmd.equals("createMessageCasier"));
781 result.put("success", true);
782 } catch (Exception e) {
784 result.put("success", false);
793 * Generates a JSON Object with all children of the given folderId
794 * If folderId == 0 , then return both MyDocuments and Dropbox folder ids
799 public static JSONArray getFilesTree(User user, long folderId, ResourceBundle messages) {
801 JSONArray files = JSONFactoryUtil.createJSONArray();
807 long schoolBagFolderId = FoldersUtil.getRootFolder(user.getUserId(), user.getGroup().getGroupId()).getFolderId();
808 JSONObject schoolbag = JSONFactoryUtil.createJSONObject();
809 schoolbag.put("id", schoolBagFolderId);
810 schoolbag.put("text", messages.getString("schoolbag"));
811 schoolbag.put("draggable", false);
812 schoolbag.put("leaf", false);
813 schoolbag.put("iconCls", "cartableAttachFileChooserAdvanced");
814 files.put(schoolbag);
817 long dropBoxFolderId = FoldersUtil.getDropBox(user.getUserId()).getFolderId();
818 JSONObject dropbox = JSONFactoryUtil.createJSONObject();
819 dropbox.put("id", dropBoxFolderId);
820 dropbox.put("text", messages.getString("dropbox"));
821 dropbox.put("draggable", false);
822 dropbox.put("leaf", false);
823 dropbox.put("iconCls", "casierAttachFileChooserAdvanced");
827 files = FoldersUtil.getCartableTreeViewAsJSONWithoutFolderSelection(folderId);
829 } catch (Exception e) {
830 logger.error("Error when retrieving root document and/or dropbox folder ids", e);
836 * Return wiki javascript redirection link from old url
840 public static String getWikiJavascriptRedirection(String url) {
841 // replace ' character by \' to avoid error on javascript
842 url = url.replaceAll("'", "\\\\'").replaceAll("%27", "\\\\%27").replaceAll("'", "\\\\'");
843 return "javascript:fireGroupChangeWikiPageEvent('" + url + "')";