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.utils;
37 import java.io.ByteArrayOutputStream;
39 import java.io.FileOutputStream;
40 import java.io.StringReader;
42 import java.text.SimpleDateFormat;
43 import java.util.ArrayList;
44 import java.util.Collections;
45 import java.util.Date;
46 import java.util.List;
47 import java.util.Locale;
48 import java.util.ResourceBundle;
50 import javax.naming.NamingException;
51 import javax.portlet.ResourceRequest;
52 import javax.portlet.ActionResponse;
54 import org.jsoup.Jsoup;
55 import org.jsoup.select.Elements;
57 import com.itextpdf.text.Document;
58 import com.itextpdf.text.Element;
59 import com.itextpdf.text.Image;
60 import com.itextpdf.text.PageSize;
61 import com.itextpdf.text.html.simpleparser.HTMLWorker;
62 import com.itextpdf.text.html.simpleparser.StyleSheet;
63 import com.itextpdf.text.pdf.PdfWriter;
64 import com.liferay.portal.kernel.exception.PortalException;
65 import com.liferay.portal.kernel.exception.SystemException;
66 import com.liferay.portal.kernel.json.JSONFactoryUtil;
67 import com.liferay.portal.kernel.json.JSONObject;
68 import com.liferay.portal.kernel.log.Log;
69 import com.liferay.portal.kernel.log.LogFactoryUtil;
70 import com.liferay.portal.kernel.util.Base64;
71 import com.liferay.portal.kernel.util.FileUtil;
72 import com.liferay.portal.kernel.util.HttpUtil;
73 import com.liferay.portal.kernel.util.ParamUtil;
74 import com.liferay.portal.kernel.util.WebKeys;
75 import com.liferay.portal.model.CompanyConstants;
76 import com.liferay.portal.model.Group;
77 import com.liferay.portal.model.Role;
78 import com.liferay.portal.model.User;
79 import com.liferay.portal.service.GroupLocalServiceUtil;
80 import com.liferay.portal.service.RoleLocalServiceUtil;
81 import com.liferay.portal.theme.ThemeDisplay;
82 import com.liferay.portal.util.PortalUtil;
83 import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
84 import com.pentila.entSavoie.ENTRolesConstants;
85 import com.pentila.entSavoie.cahierDeTexte.model.AnnotationCDT;
86 import com.pentila.entSavoie.cahierDeTexte.model.EventCDT;
87 import com.pentila.entSavoie.cahierDeTexte.service.AnnotationCDTLocalServiceUtil;
88 import com.pentila.entSavoie.cahierDeTexte.service.EventCDTLocalServiceUtil;
89 import com.pentila.entSavoie.cahierDeTexte.util.CDTUtil;
91 public class ExportPDF {
93 static SimpleDateFormat classicDateFormat = new SimpleDateFormat("yyyy-MM-dd");
94 static SimpleDateFormat textFrenchDateFormat = new SimpleDateFormat("EEEE dd MMM yyyy", Locale.FRENCH);
96 static List<Long> processUserExport = new ArrayList<Long>();
99 public static JSONObject exportPDF(ResourceRequest resourceRequest) throws NamingException, Exception {
100 JSONObject result = JSONFactoryUtil.createJSONObject();
101 result.put("success", false);
103 User currUser = null;
107 currUser = PortalUtil.getUser(resourceRequest);
109 if (processUserExport.contains(currUser.getUserId())) {
110 result.put("msg", "Un export est déjà en cours pour votre compte, vous ne pouvez en réaliser qu´un seul à la fois.<br/> Veuillez renouveler cette opération lorsque celui-ci sera terminé.");
111 result.put("success", true);
115 processUserExport.add(currUser.getUserId());
118 ResourceBundle messages = ResourceBundle.getBundle("content.Language", currUser.getLocale());
119 //final String type = ParamUtil.getString(resourceRequest, "type");
120 final String startDay = ParamUtil.getString(resourceRequest, "startDay");
121 final String endDay = ParamUtil.getString(resourceRequest, "endDay");
123 Date startDayDate = classicDateFormat.parse(startDay);
124 Date endDayDate = classicDateFormat.parse(endDay);
126 boolean isEnseignant = false;
128 Role enseignant = RoleLocalServiceUtil.getRole(currUser.getCompanyId(), ENTRolesConstants.NATIONAL_3);
129 List<Role> lroles = currUser.getRoles();
130 if(lroles.contains(enseignant)){
134 boolean sortByDate = ParamUtil.getBoolean(resourceRequest, "sortByDate", false);
135 boolean sortByUser = ParamUtil.getBoolean(resourceRequest, "sortByUser", false);
136 boolean sortByCalendar = ParamUtil.getBoolean(resourceRequest, "sortByCalendar", false);
137 boolean sortBySubject = ParamUtil.getBoolean(resourceRequest, "sortBySubject", false);
139 String sort = sortByUser?" trié par enseignants.":(sortByCalendar?" trié par classes.":" trié par matières.");
141 Document document = new Document(PageSize.A4, 10, 10, 25, 25);
142 ByteArrayOutputStream b = new ByteArrayOutputStream();
143 PdfWriter.getInstance(document, b);
145 document.addAuthor(currUser.getFullName());
146 document.addTitle(messages.getString("export-du") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", currUser.getLocale())).format(startDayDate) + " " + messages.getString("au") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", currUser.getLocale())).format(endDayDate));
147 document.addSubject(messages.getString("export-pdf-du-cahier-de-texte"));
148 document.addCreationDate();
150 ThemeDisplay themeDisplay = (ThemeDisplay)resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);
153 StyleSheet mystyle = new StyleSheet();
155 // Ouverture du document
158 String finalHTML = "<table border='1'>";
161 finalHTML += "<tr><td style='font-size:12px;font-weight:bold;'>" + messages.getString("export-du")+ " " + (new SimpleDateFormat("EEEE dd MMM yyyy", currUser.getLocale())).format(startDayDate) + " " + messages.getString("au") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", currUser.getLocale())).format(endDayDate) + (sortByDate?"":sort) + "</td></tr>";
163 List<EventCDT> listEvt = null;
164 // Suivant le filtre d'organization choisi
165 //if (type.equals("MyCalendar")) {
166 // listEvt = CDTEvent.calendarEvent_listEvent(resourceRequest);
167 //} else if (type.equals("AllCalendar")) {
168 listEvt = ExportUtil.calendarEvent_list(resourceRequest);
171 if (!listEvt.isEmpty()) {
172 Boolean firstEvent = true;
174 int totalCDT = listEvt.size();
178 String currentDate = "";
179 for (EventCDT evt : listEvt) {
180 Date d1 = new Date();
182 String eventDate = textFrenchDateFormat.format(evt.getStartDay());
183 if (currentDate.equals(eventDate)) {
184 // on est sur le meme jour que le precedent
185 finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
190 finalHTML += "</td></tr>";
193 currentDate = eventDate;
194 finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventDate + "</b></font><br />";
197 finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar);
199 Date d2 = new Date();
201 System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
203 } else if(sortByUser){
204 String currentUser = "";
205 for (EventCDT evt : listEvt) {
206 Date d1 = new Date();
208 String eventUser = ExportUtil.getUserNameCached(evt.getCreator());
209 if (currentUser.equals(eventUser)) {
210 // on est sur le meme jour que le precedent
211 finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
216 finalHTML += "</td></tr>";
219 currentUser = eventUser;
220 finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventUser + "</b></font><br />";
223 finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar);
225 Date d2 = new Date();
227 System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
229 } else if(sortByCalendar){
230 String currentCalendar = "";
231 for (EventCDT evt : listEvt) {
232 Date d1 = new Date();
233 Group group = GroupLocalServiceUtil.getGroup(evt.getGroupId());
234 String eventCalendar = ExportUtil.getClasseNameCached(group);
235 if (currentCalendar.equals(eventCalendar)) {
236 // on est sur le meme jour que le precedent
237 finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
242 finalHTML += "</td></tr>";
245 currentCalendar = eventCalendar;
246 finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventCalendar + "</b></font><br />";
249 finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar);
251 Date d2 = new Date();
253 System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
255 } else if(sortBySubject){
256 String currentSubject = "";
257 for (EventCDT evt : listEvt) {
258 Date d1 = new Date();
260 String eventSubject = ExportUtil.getMatiereNameCached(evt.getSubjectCDT());
261 if (currentSubject.equals(eventSubject)) {
262 // on est sur le meme jour que le precedent
263 finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
268 finalHTML += "</td></tr>";
271 currentSubject = eventSubject;
272 finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventSubject + "</b></font><br />";
275 finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar);
277 Date d2 = new Date();
279 System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
282 finalHTML += "</td></tr>";
284 finalHTML += "</table>";
286 StringReader srcDesc= new StringReader(finalHTML);
287 ArrayList<Element> pDesc = HTMLWorker.parseToList(srcDesc, mystyle);
288 for (int k = 0; k < pDesc.size(); ++k){
289 document.add((Element)pDesc.get(k));
292 // Fermer le document
295 String folderName = ExportUtil.sendToCasier(resourceRequest, currUser, b.toByteArray(), startDay, endDay, false);
297 String hrefPDF = "<a href=\"" + themeDisplay.getURLPortal().toString() + "/" + themeDisplay.getPathMain() + "/document_library/get_file?p_l_id=" + themeDisplay.getPlid() + folderName + "\" target=\"_blank\"> <br /> <br /> <u> " + messages.getString("cahier-de-texte") + " : " + messages.getString("export-du") + " " + textFrenchDateFormat.format(startDayDate) + " au " + textFrenchDateFormat.format(endDayDate) +".pdf </u> </a>";
299 processUserExport.remove(currUser.getUserId());
300 result.put("msg", messages.getString("un-export-pdf-a-ete-depose-dans-votre-casier") + " : " + hrefPDF);
301 result.put("success", true);
302 } catch (Exception e) {
303 if (_log.isErrorEnabled()) {
306 result.put("success", false);
309 processUserExport.remove(currUser.getUserId());
315 public static byte[] exportPDFIntoFile(User user, boolean sortByDate, boolean sortByUser, boolean sortByCalendar, boolean sortBySubject, ThemeDisplay themeDisplay, ResourceBundle messages,Date startDayDate, Date endDayDate, long filteredEtabOrgId) throws NamingException, Exception {
317 User currUser = user;
321 if (processUserExport.contains(currUser.getUserId())) {
325 processUserExport.add(currUser.getUserId());
328 boolean isEnseignant = false;
330 Role enseignant = RoleLocalServiceUtil.getRole(currUser.getCompanyId(), ENTRolesConstants.NATIONAL_3);
331 List<Role> lroles = currUser.getRoles();
332 if(lroles.contains(enseignant)){
336 String sort = sortByUser?" trié par enseignants.":(sortByCalendar?" trié par classes.":" trié par matières.");
338 Document document = new Document(PageSize.A4, 10, 10, 25, 25);
339 ByteArrayOutputStream b = new ByteArrayOutputStream();
340 PdfWriter.getInstance(document, b);
342 document.addAuthor(currUser.getFullName());
343 document.addTitle(messages.getString("export-du") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", currUser.getLocale())).format(startDayDate) + " " + messages.getString("au") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", currUser.getLocale())).format(endDayDate));
344 document.addSubject(messages.getString("export-pdf-du-cahier-de-texte"));
345 document.addCreationDate();
348 StyleSheet mystyle = new StyleSheet();
350 // Ouverture du document
353 String finalHTML = "<table border='1'>";
356 finalHTML += "<tr><td style='font-size:12px;font-weight:bold;'>" + messages.getString("export-du")+ " " + (new SimpleDateFormat("EEEE dd MMM yyyy", currUser.getLocale())).format(startDayDate) + " " + messages.getString("au") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", currUser.getLocale())).format(endDayDate) + (sortByDate?"":sort) + "</td></tr>";
358 List<EventCDT> listEvt = CDTUtil.calendarEvent_list(currUser.getUserId(), 0, -1l, "[-1]", false, startDayDate, endDayDate, sortByDate, sortByUser, sortByCalendar, sortBySubject, filteredEtabOrgId);
360 if (!listEvt.isEmpty()) {
361 Boolean firstEvent = true;
363 int totalCDT = listEvt.size();
367 String currentDate = "";
368 for (EventCDT evt : listEvt) {
369 Date d1 = new Date();
371 String eventDate = textFrenchDateFormat.format(evt.getStartDay());
372 if (currentDate.equals(eventDate)) {
373 // on est sur le meme jour que le precedent
374 finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
379 finalHTML += "</td></tr>";
382 currentDate = eventDate;
383 finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventDate + "</b></font><br />";
386 finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar, messages);
388 Date d2 = new Date();
390 System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
392 } else if(sortByUser){
393 String currentUser = "";
394 for (EventCDT evt : listEvt) {
395 Date d1 = new Date();
397 String eventUser = ExportUtil.getUserNameCached(evt.getCreator());
398 if (currentUser.equals(eventUser)) {
399 // on est sur le meme jour que le precedent
400 finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
405 finalHTML += "</td></tr>";
408 currentUser = eventUser;
409 finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventUser + "</b></font><br />";
412 finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar, messages);
414 Date d2 = new Date();
416 System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
418 } else if(sortByCalendar){
419 String currentCalendar = "";
420 for (EventCDT evt : listEvt) {
421 Date d1 = new Date();
422 Group group = GroupLocalServiceUtil.getGroup(evt.getGroupId());
423 String eventCalendar = ExportUtil.getClasseNameCached(group);
424 if (currentCalendar.equals(eventCalendar)) {
425 // on est sur le meme jour que le precedent
426 finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
431 finalHTML += "</td></tr>";
434 currentCalendar = eventCalendar;
435 finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventCalendar + "</b></font><br />";
438 finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar, messages);
440 Date d2 = new Date();
442 System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
444 } else if(sortBySubject){
445 String currentSubject = "";
446 for (EventCDT evt : listEvt) {
447 Date d1 = new Date();
449 String eventSubject = ExportUtil.getMatiereNameCached(evt.getSubjectCDT());
450 if (currentSubject.equals(eventSubject)) {
451 // on est sur le meme jour que le precedent
452 finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
457 finalHTML += "</td></tr>";
460 currentSubject = eventSubject;
461 finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventSubject + "</b></font><br />";
464 finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar, messages);
466 Date d2 = new Date();
468 System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
471 finalHTML += "</td></tr>";
473 finalHTML += "</table>";
475 StringReader srcDesc= new StringReader(finalHTML);
476 ArrayList<Element> pDesc = HTMLWorker.parseToList(srcDesc, mystyle);
477 for (int k = 0; k < pDesc.size(); ++k){
478 document.add((Element)pDesc.get(k));
481 // Fermer le document
485 processUserExport.remove(currUser.getUserId());
486 return b.toByteArray();
489 } catch (Exception e) {
490 if (_log.isErrorEnabled()) {
495 processUserExport.remove(currUser.getUserId());
502 public static String processImageDescription(String desc) {
503 String infosEvt = "";
506 org.jsoup.nodes.Document parsedDoc = Jsoup.parseBodyFragment(desc);
507 org.jsoup.nodes.Element body = parsedDoc.body();
508 Elements imgs = body.getElementsByTag("img");
509 for (org.jsoup.nodes.Element el: imgs) {
510 String src = el.attr("src");
511 if(src.contains("data:image") && src.contains("base64")){
513 String imgInBase64 = src.substring(src.indexOf(",") + 1);
515 byte[] image = Base64.decode(imgInBase64);
516 String extension = src.substring(src.indexOf("data:image/") + 11, src.indexOf(";base64,"));
518 //On cree le fichier à partir du byteArray decode
520 String title = "" + d.getTime() + "." + extension;
522 File tempImage = File.createTempFile(title, "." + extension);
523 FileOutputStream fos = new FileOutputStream(tempImage);
527 el.attr("src", tempImage.getPath());
529 } catch (Exception e1){
532 } else if(src.contains("http")){
534 URL url = new URL(src);
535 Image.getInstance(url);
536 } catch(Exception e){
537 // Si on arrive pas a recuperer l'image a partir de l'url on la vire
540 } else if (!src.contains("http")) {
545 infosEvt = body.outerHtml();
547 } catch(Exception e){
553 public static String getDescription(EventCDT evt, ThemeDisplay themeDisplay, User user, boolean isEnseignant, boolean sortByDate, boolean sortByUser, boolean sortByCalendar, boolean sortBySubject) throws PortalException, SystemException {
554 ResourceBundle messages = ResourceBundle.getBundle("content.Language", user.getLocale());
555 return getDescription(evt, themeDisplay, user, isEnseignant, sortByDate, sortByUser, sortByCalendar, sortBySubject, messages);
559 public static String getDescription(EventCDT evt, ThemeDisplay themeDisplay, User user, boolean isEnseignant, boolean sortByDate, boolean sortByUser, boolean sortByCalendar, boolean sortBySubject, ResourceBundle messages) throws PortalException, SystemException {
560 String infosEvt = "<font style='font-size:8px'><b>";
563 String startEvtDay = textFrenchDateFormat.format(evt.getStartDay());
564 infosEvt += startEvtDay + " ";
568 String evtTime = evt.getStartEvtTime().replace(':', 'h')+" - "+evt.getEndEvtTime().replace(':', 'h');
569 infosEvt += evtTime + " ";
571 Group group = GroupLocalServiceUtil.getGroup(evt.getGroupId());
572 if(!sortByCalendar) {
574 String classeName = ExportUtil.getClasseNameCached(group);
575 infosEvt += classeName + " ";
580 String matiereLabel = ExportUtil.getMatiereNameCached(evt.getSubjectCDT());
581 infosEvt += matiereLabel + "<br/>";
585 if (!evt.getSubject().isEmpty()) {
586 infosEvt += "<u>" + messages.getString("sujet") + " :</u></b> " + evt.getSubject() + "<br/>";
590 if (evt.getBroadcast() || (user.getUserId() == evt.getCreator())) {
591 if (!evt.getDescription().isEmpty()) {
592 infosEvt += "<b><u>" + messages.getString("description") + " :</u></b><br /><br />" + processImageDescription(evt.getDescription()) + "<br/>";
596 AnnotationCDT annotation = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorIdEvtId(user.getUserId(), evt.getEvtId());
597 if (annotation!=null) {
598 infosEvt += "<b><u>" + messages.getString("note") + " :</u></b> " + processImageDescription(annotation.getAnnotation()) + "<br/>";
603 if (evt.getBroadcast() || (user.getUserId() == evt.getCreator())) {
604 String[] eventCDTAttachments = EventCDTLocalServiceUtil.getAttachFilesNameToEventCDT(user.getCompanyId(), evt.getEvtId());
606 for (int i = 0; i < eventCDTAttachments.length; i++) {
607 String fileName = FileUtil.getShortFileName(eventCDTAttachments[i]);
608 long fileSize = DLStoreUtil.getFileSize(user.getCompanyId(), CompanyConstants.SYSTEM, eventCDTAttachments[i])/1000;
612 href += "<a href=" + themeDisplay.getURLPortal().toString() + "/" + themeDisplay.getPathMain() + "/cahier_de_texte/get_event_attachment?evtId="+ evt.getEvtId() +"&companyId="+ user.getCompanyId() +"&attachment="+HttpUtil.encodeURL(fileName)+">" + fileName + " (" + fileSize + " kb)" + "</a>, ";
615 if (eventCDTAttachments.length>0) {
616 infosEvt += "<b><u>" + messages.getString("piece-jointe") + " :</u></b> " + href.substring(0, href.length()-2) + "<br />";
621 List<EventCDT> evtCDTDevoir = new ArrayList<EventCDT>();
622 evtCDTDevoir.addAll(EventCDTLocalServiceUtil.getToEventCDT(evt.getEvtId()));
623 List<EventCDT> filteredEventToDo = new ArrayList<EventCDT>();
625 Collections.sort(evtCDTDevoir);
627 if (user.getUserId() != evt.getCreator()) {
629 for (EventCDT devoirARendre : evtCDTDevoir) {
630 if (devoirARendre.getBroadcast()) {
631 filteredEventToDo.add(devoirARendre);
636 filteredEventToDo.addAll(evtCDTDevoir);
639 if (!filteredEventToDo.isEmpty()) {
640 infosEvt += "<br/><u><b>" + messages.getString("devoirs-a-rendre") + " :</b></u><br/>";
642 for (EventCDT devoir : evtCDTDevoir) {
644 EventCDT evtFrom = EventCDTLocalServiceUtil.getEventCDT(devoir.getFromEvt());
645 infosEvt += " - " + messages.getString("devoir-donne-le") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", user.getLocale())).format(evtFrom.getStartDay()) + "<br />";
647 catch (Exception exc1){}
649 if (!devoir.getSubject().isEmpty()) {
650 infosEvt += " <u><b>" + devoir.getSubject() + " :</b></u>";
652 if (!devoir.getDescription().isEmpty()) {
653 infosEvt += " " + processImageDescription(devoir.getDescription()) + "<br />";
656 infosEvt += "<br />";
658 /*if (devoir.getEstimatedTime()>0) {
659 infosEvt += " " + messages.getString("temps-estime") + ": " + devoir.getEstimatedTime() + messages.getString("minutes") + "<br />";
662 AnnotationCDT devAnnotation = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorIdEvtId(user.getUserId(), devoir.getEvtId());
663 if (devAnnotation!=null) {
664 infosEvt += " <b><u>" + messages.getString("note") + " :</u></b>";
665 if (!devAnnotation.getAnnotation().isEmpty()){
666 infosEvt += processImageDescription(devAnnotation.getAnnotation());
670 if(devAnnotation.getDone()) {
671 infosEvt += " " + messages.getString("travail-realise");
673 infosEvt += " " + messages.getString("travail-non-realise");
678 String[] eventCDTDevoirAttachments = EventCDTLocalServiceUtil.getAttachFilesNameToEventCDT(user.getCompanyId(), devoir.getEvtId());
679 String hrefDevoir = "";
680 for (int i = 0; i < eventCDTDevoirAttachments.length; i++) {
681 String fileName = FileUtil.getShortFileName(eventCDTDevoirAttachments[i]);
682 long fileSize = DLStoreUtil.getFileSize(user.getCompanyId(), CompanyConstants.SYSTEM, eventCDTDevoirAttachments[i])/1000;
686 hrefDevoir += "<a href=" + themeDisplay.getURLPortal().toString() + "/" + themeDisplay.getPathMain() + "/cahier_de_texte/get_event_attachment?evtId="+ devoir.getEvtId() +"&companyId="+ user.getCompanyId() +"&attachment="+HttpUtil.encodeURL(fileName)+">" + fileName + " (" + fileSize + " kb)" + "</a>, ";
688 if (eventCDTDevoirAttachments.length>0) {
689 infosEvt += " <u><b>" + messages.getString("piece-jointe") + " :</b></u> " + hrefDevoir.substring(0, hrefDevoir.length()-2);
690 infosEvt += "<br />";
696 if (evt.getBroadcast() || (user.getUserId() == evt.getCreator())) {
697 evtCDTDevoir = EventCDTLocalServiceUtil.getFromEventCDT(evt.getEvtId());
698 if (!evtCDTDevoir.isEmpty()) {
699 infosEvt += "<br/><u><b>" + messages.getString("devoirs-donnes") + " :</b></u><br/>";
701 for (EventCDT devoir : evtCDTDevoir) {
702 infosEvt += " - " + messages.getString("devoir-a-rendre-pour-le") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", user.getLocale())).format(devoir.getStartDay()) + "<br />";
703 if (!devoir.getSubject().isEmpty()) {
704 infosEvt += " <u><b>" + devoir.getSubject() + " :</b></u>";
706 if (!devoir.getDescription().isEmpty()) {
707 infosEvt += " " + processImageDescription(devoir.getDescription()) + "<br />";
710 infosEvt += "<br />";
712 /*if (devoir.getEstimatedTime()>0) {
713 infosEvt += " " + messages.getString("temps-estime") + ": " + devoir.getEstimatedTime() + messages.getString("minutes") + "<br />";
716 AnnotationCDT devAnnotation = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorIdEvtId(user.getUserId(), devoir.getEvtId());
717 if (devAnnotation!=null) {
718 infosEvt += " <b><u>" + messages.getString("note") + " :</u></b>";
719 if (!devAnnotation.getAnnotation().isEmpty()){
720 infosEvt += processImageDescription(devAnnotation.getAnnotation()) + " -";
722 if(devAnnotation.getDone()) {
723 infosEvt += " " + messages.getString("travail-realise");
725 infosEvt += " " + messages.getString("travail-non-realise");
729 String[] eventCDTDevoirAttachments = EventCDTLocalServiceUtil.getAttachFilesNameToEventCDT(user.getCompanyId(), devoir.getEvtId());
730 String hrefDevoir = "";
731 for (int i = 0; i < eventCDTDevoirAttachments.length; i++) {
732 String fileName = FileUtil.getShortFileName(eventCDTDevoirAttachments[i]);
733 long fileSize = DLStoreUtil.getFileSize(user.getCompanyId(), CompanyConstants.SYSTEM, eventCDTDevoirAttachments[i])/1000;
737 hrefDevoir += "<a href=" + themeDisplay.getURLPortal().toString() + "/" + themeDisplay.getPathMain() + "/cahier_de_texte/get_event_attachment?evtId="+ devoir.getEvtId() +"&companyId="+ user.getCompanyId() +"&attachment="+HttpUtil.encodeURL(fileName)+">" + fileName + " (" + fileSize + " kb)" + "</a>, ";
739 if (eventCDTDevoirAttachments.length>0) {
740 infosEvt += " <u><b>" + messages.getString("piece-jointe") + " :</b></u> " + hrefDevoir.substring(0, hrefDevoir.length()-2);
741 infosEvt += "<br />";
745 infosEvt += "<br />";
747 infosEvt += "</font>";
751 private static Log _log = LogFactoryUtil.getLog(ExportPDF.class);