1 /*******************************************************************************
2 * Copyright � Igor Barma, Alexandre Desoubeaux, Christian Martel, Eric Brun, Mathieu Amblard, Gwenael Gevet, Pierre Guillot, 2012
3 * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Alexandre Lefevre, Marc Salvat 2014-2016
4 * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Marc Salvat, Marc Suarez, Harifetra Ramamonjy 2017
6 * This file is part of the work and learning management system Pentila Nero.
8 * Pentila Nero is free software. You can redistribute it and/or modify since
9 * you respect the terms of either (at least one of the both license) :
10 * - under the terms of the GNU Affero General Public License as
11 * published by the Free Software Foundation, either version 3 of the
12 * License, or (at your option) any later version.
13 * - the CeCILL-C as published by CeCILL-C; either version 1 of the
14 * License, or any later version
15 * - the GNU Lesser General Public License as published by the
16 * Free Software Foundation, either version 3 of the license,
17 * or (at your option) any later version.
19 * There are special exceptions to the terms and conditions of the
20 * licenses as they are applied to this software. View the full text of
21 * the exception in file LICENSE-PROJECT.txt in the directory of this software
24 * Pentila Nero is distributed in the hope that it will be useful,
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 * Licenses for more details.
29 * You should have received a copy of the GNU Affero General Public License
30 * and the CeCILL-C and the GNU Lesser General Public License along with
31 * Pentila Nero. If not, see :
32 * <http://www.gnu.org/licenses/> and
33 * <http://www.cecill.info/licences.fr.html>.
34 ******************************************************************************/
35 package com.pentila.entSavoie.internalMessaging;
38 import java.io.IOException;
39 import java.io.InputStream;
40 import java.util.Date;
41 import java.util.HashSet;
42 import java.util.LinkedHashMap;
43 import java.util.List;
46 import javax.mail.internet.InternetAddress;
48 import com.liferay.mail.service.MailServiceUtil;
49 import com.liferay.portal.kernel.dao.orm.QueryUtil;
50 import com.liferay.portal.kernel.exception.PortalException;
51 import com.liferay.portal.kernel.exception.SystemException;
52 import com.liferay.portal.kernel.io.FileCacheOutputStream;
53 import com.liferay.portal.kernel.json.JSONArray;
54 import com.liferay.portal.kernel.json.JSONFactoryUtil;
55 import com.liferay.portal.kernel.json.JSONObject;
56 import com.liferay.portal.kernel.log.Log;
57 import com.liferay.portal.kernel.log.LogFactoryUtil;
58 import com.liferay.portal.kernel.mail.MailMessage;
59 import com.liferay.portal.kernel.repository.model.FileEntry;
60 import com.liferay.portal.kernel.repository.model.Folder;
61 import com.liferay.portal.kernel.util.FileUtil;
62 import com.liferay.portal.kernel.util.HtmlUtil;
63 import com.liferay.portal.kernel.util.OrderByComparator;
64 import com.liferay.portal.kernel.util.StringPool;
65 import com.liferay.portal.kernel.util.Validator;
66 import com.liferay.portal.kernel.workflow.WorkflowConstants;
67 import com.liferay.portal.model.Group;
68 import com.liferay.portal.model.Role;
69 import com.liferay.portal.model.RoleConstants;
70 import com.liferay.portal.model.User;
71 import com.liferay.portal.service.GroupLocalServiceUtil;
72 import com.liferay.portal.service.RoleLocalServiceUtil;
73 import com.liferay.portal.service.ServiceContext;
74 import com.liferay.portal.service.UserLocalServiceUtil;
75 import com.liferay.portal.util.comparator.UserLastNameComparator;
76 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
77 import com.pentila.entSavoie.ENTRolesConstants;
78 import com.pentila.entSavoie.cartable.NoSuchDlLinkException;
79 import com.pentila.entSavoie.cartable.model.DlLink;
80 import com.pentila.entSavoie.cartable.service.DlLinkLocalServiceUtil;
81 import com.pentila.entSavoie.internalMessaging.model.InternalAttachFile;
82 import com.pentila.entSavoie.internalMessaging.model.InternalAutoResponse;
83 import com.pentila.entSavoie.internalMessaging.model.InternalFolderMessage;
84 import com.pentila.entSavoie.internalMessaging.model.InternalMessage;
85 import com.pentila.entSavoie.internalMessaging.service.InternalAttachFileLocalServiceUtil;
86 import com.pentila.entSavoie.internalMessaging.service.InternalAutoResponseLocalServiceUtil;
87 import com.pentila.entSavoie.internalMessaging.service.InternalContentLocalServiceUtil;
88 import com.pentila.entSavoie.internalMessaging.service.InternalFolderMessageLocalServiceUtil;
89 import com.pentila.entSavoie.internalMessaging.service.InternalMessageLocalServiceUtil;
90 import com.pentila.entSavoie.internalMessaging.service.InternalReceiversLocalServiceUtil;
91 import com.pentila.entSavoie.service.DiskUsageUserLocalServiceUtil;
92 import com.pentila.entSavoie.userProperties.model.UserProperties;
93 import com.pentila.entSavoie.userProperties.service.UserPropertiesLocalServiceUtil;
94 import com.pentila.entSavoie.utils.DLEntryUtil;
95 import com.pentila.entSavoie.utils.ENTMainUtilsLocalServiceUtil;
96 import com.pentila.entSavoie.utils.FoldersUtil;
97 import com.pentila.entSavoie.utils.PortletConstant;
98 import com.pentila.entSavoie.utils.ZipUtil;
100 public class IMUtils {
102 private static Log logger = LogFactoryUtil.getLog(IMUtils.class);
104 public static boolean isGeneratedEmailAddress(User user, String userEmailAddress) {
105 String suffixe = ENTMainUtilsLocalServiceUtil.getENTOrgRootSuffixeMail(user.getCompanyId());
106 if(userEmailAddress.equals(user.getScreenName() + suffixe)){
113 public static void sendMessage(User sender, Set<Long> receiversFinal, String messageSubject, String messageContent, JSONArray attachFiles, long messageId) {
114 if(sendMessage(sender, receiversFinal, messageSubject, messageContent, attachFiles)){
117 long draftFolderId = InternalFolderMessageLocalServiceUtil.getUserFolderTypeMessages(sender.getUserId(), InternalMessagingConstants.DRAFT_FOLDER_TYPE).get(0).getFolderMessageId();
118 InternalMessage im = InternalMessageLocalServiceUtil.getInternalMessage(messageId);
119 long folderId = im.getFolderMessageId();
120 // Si on est dans les brouillons on le supprime
121 if(draftFolderId == folderId){
122 // on supprime definitivement
123 // delete file attach and set the memory free
124 if(im.getPjFolderId()>0){
125 DiskUsageUserLocalServiceUtil.substractDiskUsage(DLAppLocalServiceUtil.getFolder(im.getPjFolderId()), sender.getUserId(), PortletConstant.MESSAGERIE_PORTLET_ID);
127 InternalMessageLocalServiceUtil.deleteMessageAndDependencies(im);
129 } catch(Exception e){
130 logger.error("Exception when deleting dependencies.");
138 * Envoi d'un message dans la messagerie
140 public static boolean sendMessage(User sender, Set<Long> receiversFinal, String messageSubject, String messageContent, JSONArray attachFiles) {
141 JSONArray errorDest = JSONFactoryUtil.createJSONArray();
143 boolean errorCopyFile = false;
144 String firstNameReceiver="";
145 Set<Long> filteredReceivers = new HashSet<Long>();
147 if (receiversFinal.size() > 0) {
149 // Limit the number of receivers if it reaches the limit
150 filteredReceivers = filterReceivers(sender, receiversFinal);
153 User firstReceiverUser = UserLocalServiceUtil.getUser((Long) filteredReceivers.toArray()[0]);
154 firstNameReceiver = firstReceiverUser.getLastName() + " " + firstReceiverUser.getFirstName();
155 } catch (Exception e) {
156 logger.error("Error : exception when getting first receiver.");
161 String senderName = sender.getLastName()+" "+sender.getFirstName();
162 long senderId = sender.getUserId();
164 boolean isENTMailSenderUseForward = ENTMainUtilsLocalServiceUtil.isENTMailSenderUseForward(sender.getCompanyId());
165 String mailNoReply = ENTMainUtilsLocalServiceUtil.getMailNoReply(sender.getCompanyId());
166 String mailRedirectSubject = ENTMainUtilsLocalServiceUtil.getMailRedirectSubject(sender.getCompanyId());
167 String mailRedirectBody = ENTMainUtilsLocalServiceUtil.getMailRedirectBody(sender.getCompanyId());
168 long messageSenderId = 0;
171 // on prepare les pieces jointes pour la creation de liens
172 JSONArray attachFilesProcessed = JSONFactoryUtil.createJSONArray();
173 if (attachFiles.length() > 0) {
175 attachFilesProcessed = preprareAttachFiles(senderId, attachFiles);
176 } catch (Exception e) {
177 logger.error("Error : exception when preparing attached files.");
181 // remove emoticone in UT8-MB4 from content and subject
182 String replacedContent = (messageContent == null)?"":messageContent.replaceAll("[^\\u0000-\\uFFFF]", "");
183 String replacedSubject = (messageSubject == null)?"":messageSubject.replaceAll("[^\\u0000-\\uFFFF]", "");
186 // Envoi du message dans la boite d'envoi de l'envoyeur
187 InternalFolderMessage sendFolder = InternalFolderMessageLocalServiceUtil.getUserFolderTypeMessages(senderId, InternalMessagingConstants.SENDING_FOLDER_TYPE).get(0);
189 // First create the message with the content, so that the index can index the content
190 InternalMessage message = InternalMessageLocalServiceUtil.addMessage(sender.getCompanyId(), sendFolder.getFolderMessageId(), senderId, senderName, firstNameReceiver, new Date(), replacedSubject, replacedContent, false,0);
191 InternalContentLocalServiceUtil.addContent(message.getMessageId(), replacedContent);
192 // Then update the message with empty content, reindexing is commented so no problem
193 message.setMessageContent("");
194 InternalMessageLocalServiceUtil.updateInternalMessage(message);
196 // Gestion des destinataires
197 InternalReceiversLocalServiceUtil.addInternalReceivers(message.getMessageId(), filteredReceivers);
199 if (attachFilesProcessed.length()>0) {
201 // Gestion des pièces jointes
203 pjFolderId = copyAttachFile(senderId, senderId, message.getMessageId(), attachFilesProcessed);
204 message.setPjFolderId(pjFolderId);
205 } catch(Exception e){
206 logger.error("Error : exception when copying attached files.");
208 errorCopyFile = true;
210 InternalMessageLocalServiceUtil.updateInternalMessage(message);
213 messageSenderId = message.getPrimaryKey();
215 catch (Exception e) {
216 logger.error("Error : Cannot add the message in the receiver box.");
220 String mailFromSender = mailNoReply;
221 // test si on utilise le noreply ou l adresse du mec
222 if (isENTMailSenderUseForward) {
224 UserProperties up = UserPropertiesLocalServiceUtil.getUserPropertiesByUserId(senderId);
225 if (up != null && up.getForwardByMail() && !up.getForwardMail().isEmpty()) {
226 mailFromSender = up.getForwardMail();
228 } catch (Exception e) {
233 InternalFolderMessage sendFolder = null;
235 sendFolder = InternalFolderMessageLocalServiceUtil.getUserFolderTypeMessages(senderId, InternalMessagingConstants.INCOMMING_FOLDER_TYPE).get(0);
236 } catch (SystemException e1) {
237 // TODO Auto-generated catch block
238 e1.printStackTrace();
240 //-------------------------------------------------------------------------------------------------------------------------------------------
241 // get the receiverbox
242 for (long receiverId: filteredReceivers) {
244 // Envoie des reponses automatiques
245 InternalAutoResponse internalAutoResponse = InternalAutoResponseLocalServiceUtil.getInternalAutoResponse(receiverId, sender.getUserId());
246 if(Validator.isNotNull(internalAutoResponse)){
247 if(Validator.isNotNull(sendFolder)){
248 User receiver = UserLocalServiceUtil.getUser(receiverId);
249 String receiverName = receiver.getLastName() + " " + receiver.getFirstName();
251 // remove emoticone in UT8-MB4 from content and subject
252 String autoResponseContent = (internalAutoResponse.getContent() == null)?"":internalAutoResponse.getContent().replaceAll("[^\\u0000-\\uFFFF]", "");
253 String autoResponseSubject = (internalAutoResponse.getSubject() == null)?"":internalAutoResponse.getSubject().replaceAll("[^\\u0000-\\uFFFF]", "");
255 InternalMessage message = InternalMessageLocalServiceUtil.addMessage(sender.getCompanyId(), sendFolder.getFolderMessageId(), receiverId, receiverName, senderName, new Date(), autoResponseSubject, autoResponseContent, true, 0);
256 InternalContentLocalServiceUtil.addContent(message.getMessageId(), autoResponseContent);
257 // Then update the message with empty content, reindexing is commented so no problem
258 message.setMessageContent("");
259 InternalMessageLocalServiceUtil.updateInternalMessage(message);
261 // Gestion des destinataires
262 Set<Long> dest = new HashSet<Long>();
263 dest.add(sender.getUserId());
264 InternalReceiversLocalServiceUtil.addInternalReceivers(message.getMessageId(), dest);
266 // Si l'utilisteur ne souhaite pas recevoir le message
267 // On envoi simplement la reponse automatique
268 if(!internalAutoResponse.getReceive()){
273 InternalFolderMessage destFolder = InternalFolderMessageLocalServiceUtil.getUserFolderTypeMessages(receiverId, InternalMessagingConstants.INCOMMING_FOLDER_TYPE).get(0);
275 InternalMessage message = InternalMessageLocalServiceUtil.addMessage(sender.getCompanyId(), destFolder.getFolderMessageId(), senderId,
276 senderName, firstNameReceiver, new Date(), replacedSubject, replacedContent, true, messageSenderId);
277 // Then update the message with empty content, reindexing is commented so no problem
278 message.setMessageContent("");
279 InternalMessageLocalServiceUtil.updateInternalMessage(message);
282 if (attachFilesProcessed.length()>0) {
284 // Take care of the attachments by setting the right folderID
285 message.setPjFolderId(pjFolderId);
286 InternalMessageLocalServiceUtil.updateInternalMessage(message);
287 } catch(Exception e){
288 errorCopyFile = true;
292 /* On notifie la personne sur son téléphone mobile (Non fonctionnel/Not working anymore)
293 ThreadMobileNotification notifThread = new ThreadMobileNotification(receiverId, "Vous avez recu un nouveau message de " + PortalUtil.getUserName(sender.getUserId(), "ENT"));
297 // Send the redirections if exists
298 UserProperties up = UserPropertiesLocalServiceUtil.getUserPropertiesByUserId(receiverId);
299 if (up != null && up.getForwardByMail() && !up.getForwardMail().isEmpty()) {
300 InternetAddress iaTo = new InternetAddress(up.getForwardMail());
302 InternetAddress iaFrom = new InternetAddress(mailFromSender);
304 //Gestion des copies par mail
305 MailMessage mailMessage = new MailMessage();
307 mailMessage.setFrom(iaFrom);
308 mailMessage.setTo(iaTo);
310 mailMessage.setHTMLFormat(true);
312 String subjectForward = HtmlUtil.extractText(replacedSubject);
313 mailMessage.setSubject(mailRedirectSubject + " " + subjectForward);
314 mailMessage.setBody(String.format(mailRedirectBody, senderName) + replacedContent);
316 for (int i = 0 ; i<attachFiles.length(); i++) {
318 Long fileId = attachFiles.getJSONObject(i).getLong("id");
319 String type = attachFiles.getJSONObject(i).getString("type");
321 if (type.equals("Fichier")) {
322 FileEntry dlFile = DLAppLocalServiceUtil.getFileEntry(fileId);
323 InputStream fileStream = dlFile.getContentStream();
324 File finalFile = FileUtil.createTempFile(dlFile.getTitle());
325 FileUtil.write(finalFile, fileStream);
327 mailMessage.addFileAttachment(finalFile);
331 } catch (IOException e) {}
333 //Cas d'un dossier, on le zip
334 long[] folderIdArray = new long[] { fileId };
338 Folder folder = DLAppLocalServiceUtil.getFolder(fileId);
339 FileCacheOutputStream zipStream = ZipUtil.createZipStream(sender, folderIdArray, new long[0]);
340 File finalFile = FileUtil.createTempFile(folder.getName() + ".zip");
341 FileUtil.write(finalFile, zipStream.getBytes());
343 mailMessage.addFileAttachment(finalFile);
345 catch (Exception e) {}
349 MailServiceUtil.sendEmail(mailMessage);
352 catch (Exception e) {
353 logger.error("Error during sending message \"" + replacedSubject + "\" from sender : "
354 + senderName + "(user id:" + senderId + ") to user " + receiverId + " at date : " + new Date(), e );
355 errorDest.put(receiverId);
359 // If errors dectected, we send a warning message to the original sender
360 if (errorDest.length()!=0) {
361 // on envoie un message pour l'informer
362 Set<Long> errorSender = new HashSet<Long>();
363 errorSender.add(sender.getUserId());
365 String message = "Une erreur s'est produite durant l'envoi de votre message.<br>Celui-ci n'a pu être transmis aux personnes suivantes: <br><ul>";
366 for (int i=0; i<errorDest.length(); i++) {
367 Long idDest = errorDest.getLong(i);
368 User userDest = UserLocalServiceUtil.getUser(idDest);
369 message += "<li>"+userDest.getFirstName() + " " + userDest.getLastName() + "</li>";
373 message += "<br /> Cette erreur semble venir des documents attachés au message.";
378 message += "Message non transmis aux différents destinataires : <br />";
379 message += "<b>Sujet : </b>" + replacedSubject + "<br />";
380 message += "<b>Contenu : </b><br />" + replacedContent + "<br />";
384 "Erreur lors de l'envoi du message: " + replacedSubject,
386 JSONFactoryUtil.createJSONArray());
389 catch (Exception e) {
390 // impossible d'ajouter le message dans la boite d'envoi de l 'expediteur
391 // --> ON NE PEUT PAS FAIRE GRAND CHOSE DANS CE CAS !!!
403 * Limit the number of receivers to the max limits defined in the portal-ext.properties file depending on its role
408 private static Set<Long> filterReceivers(User sender, Set<Long> receivers) {
410 int maxStudentReceivers = ENTMainUtilsLocalServiceUtil.getMessagingStudentMaxReceivers();
411 int maxParentReceivers = ENTMainUtilsLocalServiceUtil.getMessagingParentMaxReceivers();
412 int maxPersonalReceivers = ENTMainUtilsLocalServiceUtil.getMessagingPersonalMaxReceivers();
413 int min = Math.min(maxStudentReceivers, Math.min(maxParentReceivers, maxPersonalReceivers));
415 // If no max limit is reached, return the init receivers list
416 if (receivers.size() < min) {
420 Role studentRole = RoleLocalServiceUtil.getRole(sender.getCompanyId(), ENTRolesConstants.ELEVE);
421 Role parentRole = RoleLocalServiceUtil.getRole(sender.getCompanyId(), ENTRolesConstants.PARENT);
422 if (RoleLocalServiceUtil.hasUserRole(sender.getUserId(), studentRole.getRoleId()) && receivers.size() > maxStudentReceivers) {
423 logger.error("Student "+sender.getFullName()+" tries to send an internal message to "+receivers.size()+" users => limit this number to "+maxStudentReceivers);
424 return filterMaxReceivers(receivers, maxStudentReceivers);
425 } else if (RoleLocalServiceUtil.hasUserRole(sender.getUserId(), parentRole.getRoleId()) && receivers.size() > maxParentReceivers) {
426 logger.error("Parent "+sender.getFullName()+" tries to send an internal message to "+receivers.size()+" users => limit this number to "+maxParentReceivers);
427 return filterMaxReceivers(receivers, maxParentReceivers);
429 logger.error("User "+sender.getFullName()+" tries to send an internal message to "+receivers.size()+" users => limit this number to "+maxPersonalReceivers);
430 return filterMaxReceivers(receivers, maxPersonalReceivers);
432 } catch (Exception e) {
433 logger.error("Error when filtering the number of receivers for message sent by user "+sender.getUserId(), e);
439 private static Set<Long> filterMaxReceivers(Set<Long> receivers, int max) {
441 Set<Long> filteredReceivers = new HashSet<Long>();
443 if (receivers.size() > max) {
445 for (Long receiverId : receivers) {
446 if (nbReceivers < max) {
447 filteredReceivers.add(receiverId);
452 filteredReceivers = receivers;
454 return filteredReceivers;
458 * Gestion des pièces jointes
459 * @throws SystemException
460 * @throws PortalException
461 * @throws IOException
463 private static JSONArray preprareAttachFiles(long senderId, JSONArray attachFiles) throws PortalException, SystemException, IOException {
464 JSONArray copyResults = JSONFactoryUtil.createJSONArray();
465 // boite d'envoi de la personne
466 final Folder senderTmpBox = FoldersUtil.getSendingBox(senderId);
467 // on cree un dossier pour chaque message
468 Date stamp = new Date();
469 Folder messageSendingFolder = DLAppLocalServiceUtil.addFolder(
471 senderTmpBox.getGroupId(),
472 senderTmpBox.getFolderId(),
474 "PJ du message " + stamp.getTime(),
475 new ServiceContext());
477 for (int i=0; i<attachFiles.length(); i++) {
478 JSONObject pjobj = attachFiles.getJSONObject(i);
480 if (pjobj.getString("type").equals("Fichier")) {
482 Long sourceFileId = pjobj.getLong("id");
484 DlLink dll = DlLinkLocalServiceUtil.getDlFileLinkByTarget(sourceFileId);
485 sourceFileId = dll.getSourceId();
487 catch(NoSuchDlLinkException nsdle) {
488 // no link so we have an original
491 FileEntry referenceFile = DLEntryUtil.copyFileEntry(senderId, sourceFileId, messageSendingFolder.getFolderId());
492 //add disk usage to sender because the folder or/and file is store on it's output box
493 DiskUsageUserLocalServiceUtil.addDiskUsage(referenceFile, senderId, PortletConstant.MESSAGERIE_PORTLET_ID);
494 JSONObject fileObj = JSONFactoryUtil.createJSONObject();
495 fileObj.put("type", "Fichier");
496 fileObj.put("id", referenceFile.getFileEntryId());
497 copyResults.put(fileObj);
499 else if (pjobj.getString("type").equals("Dossier")) {
501 Long sourceFolderId = pjobj.getLong("id");
503 DlLink dll = DlLinkLocalServiceUtil.getDlFolderLinkByTarget(sourceFolderId);
504 sourceFolderId = dll.getSourceId();
506 catch(NoSuchDlLinkException nsdle) {
507 // no link so we have an original
509 Folder referenceFolder = DLEntryUtil.copyFolder(senderId, sourceFolderId, messageSendingFolder.getFolderId());
510 // add disk usage to sender because the folder or/and file is store on it's output box
511 DiskUsageUserLocalServiceUtil.addDiskUsage(referenceFolder, senderId, PortletConstant.MESSAGERIE_PORTLET_ID);
512 JSONObject fileObj = JSONFactoryUtil.createJSONObject();
513 fileObj.put("type", "Dossier");
514 fileObj.put("id", referenceFolder.getFolderId());
515 copyResults.put(fileObj);
518 catch (NullPointerException e) {
520 Long sourceFileId = attachFiles.getLong(i);
522 DlLink dll = DlLinkLocalServiceUtil.getDlFileLinkByTarget(sourceFileId);
523 sourceFileId = dll.getSourceId();
525 catch(NoSuchDlLinkException nsdle) {
526 // no link so we have an original
528 FileEntry referenceFile = DLEntryUtil.copyFileEntry(senderId, sourceFileId, messageSendingFolder.getFolderId());
529 // add disk usage to sender because the folder or/and file is store on it's output box
530 DiskUsageUserLocalServiceUtil.addDiskUsage(referenceFile, senderId, PortletConstant.MESSAGERIE_PORTLET_ID);
531 JSONObject fileObj = JSONFactoryUtil.createJSONObject();
532 fileObj.put("type", "Fichier");
533 fileObj.put("id", referenceFile.getFileEntryId());
534 copyResults.put(fileObj);
540 private static Long copyAttachFile(long senderId, long receiverId, long messageId, JSONArray attachFiles) throws PortalException, SystemException, IOException {
541 final Folder receiverDropBox = FoldersUtil.getIMBox(receiverId);
542 // on cree un dossier pour chaque message
543 Folder messageFolder = DLAppLocalServiceUtil.addFolder(
545 receiverDropBox.getGroupId(),
546 receiverDropBox.getFolderId(),
547 String.valueOf(messageId),
548 "PJ du message " + messageId,
549 new ServiceContext());
551 for (int i=0; i<attachFiles.length(); i++) {
552 JSONObject pjobj = attachFiles.getJSONObject(i);
554 if (pjobj.getString("type").equals("Fichier")) {
556 FileEntry newEntry = DLEntryUtil.copyLinkedFileEntry(receiverId, pjobj.getLong("id"), messageFolder.getFolderId(), PortletConstant.MESSAGERIE_PORTLET_ID);
558 InternalAttachFile pjFile = InternalAttachFileLocalServiceUtil.addAttachFile();
559 pjFile.setAttachFileType("Fichier");
560 pjFile.setMessageId(messageId);
561 pjFile.setAttachFileId(newEntry.getFileEntryId());
562 InternalAttachFileLocalServiceUtil.updateInternalAttachFile(pjFile);
564 else if (pjobj.getString("type").equals("Dossier")) {
567 Folder newFolder = DLEntryUtil.copyLinkedFolder(receiverId, pjobj.getLong("id"), messageFolder.getFolderId(), PortletConstant.MESSAGERIE_PORTLET_ID);
568 InternalAttachFile pjFolder = InternalAttachFileLocalServiceUtil.addAttachFile();
569 pjFolder.setAttachFileType("Dossier");
570 pjFolder.setMessageId(messageId);
571 pjFolder.setAttachFileId(newFolder.getFolderId());
572 InternalAttachFileLocalServiceUtil.updateInternalAttachFile(pjFolder);
575 catch (NullPointerException e) {
577 FileEntry newEntry = DLEntryUtil.copyLinkedFileEntry(receiverId, attachFiles.getLong(i), messageFolder.getFolderId(), PortletConstant.MESSAGERIE_PORTLET_ID);
579 InternalAttachFile pjFile = InternalAttachFileLocalServiceUtil.addAttachFile();
580 pjFile.setAttachFileType("Fichier");
581 pjFile.setMessageId(messageId);
582 pjFile.setAttachFileId(newEntry.getFileEntryId());
583 InternalAttachFileLocalServiceUtil.updateInternalAttachFile(pjFile);
587 return messageFolder.getFolderId();