--- /dev/null
+/*******************************************************************************
+ * Copyright � Igor Barma, Alexandre Desoubeaux, Christian Martel, Eric Brun, Mathieu Amblard, Gwenael Gevet, Pierre Guillot, 2012
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Alexandre Lefevre, Marc Salvat 2014-2016
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Marc Salvat, Marc Suarez, Harifetra Ramamonjy 2017
+ *
+ * This file is part of the work and learning management system Pentila Nero.
+ *
+ * Pentila Nero is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ * - the GNU Lesser General Public License as published by the
+ * Free Software Foundation, either version 3 of the license,
+ * or (at your option) any later version.
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE-PROJECT.txt in the directory of this software
+ * distribution.
+ *
+ * Pentila Nero is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * and the CeCILL-C and the GNU Lesser General Public License along with
+ * Pentila Nero. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ ******************************************************************************/
+package com.pentila.entSavoie.utils;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.StringReader;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import javax.naming.NamingException;
+import javax.portlet.ResourceRequest;
+import javax.portlet.ActionResponse;
+
+import org.jsoup.Jsoup;
+import org.jsoup.select.Elements;
+
+import com.itextpdf.text.Document;
+import com.itextpdf.text.Element;
+import com.itextpdf.text.Image;
+import com.itextpdf.text.PageSize;
+import com.itextpdf.text.html.simpleparser.HTMLWorker;
+import com.itextpdf.text.html.simpleparser.StyleSheet;
+import com.itextpdf.text.pdf.PdfWriter;
+import com.liferay.portal.kernel.exception.PortalException;
+import com.liferay.portal.kernel.exception.SystemException;
+import com.liferay.portal.kernel.json.JSONFactoryUtil;
+import com.liferay.portal.kernel.json.JSONObject;
+import com.liferay.portal.kernel.log.Log;
+import com.liferay.portal.kernel.log.LogFactoryUtil;
+import com.liferay.portal.kernel.util.Base64;
+import com.liferay.portal.kernel.util.FileUtil;
+import com.liferay.portal.kernel.util.HttpUtil;
+import com.liferay.portal.kernel.util.ParamUtil;
+import com.liferay.portal.kernel.util.WebKeys;
+import com.liferay.portal.model.CompanyConstants;
+import com.liferay.portal.model.Group;
+import com.liferay.portal.model.Role;
+import com.liferay.portal.model.User;
+import com.liferay.portal.service.GroupLocalServiceUtil;
+import com.liferay.portal.service.RoleLocalServiceUtil;
+import com.liferay.portal.theme.ThemeDisplay;
+import com.liferay.portal.util.PortalUtil;
+import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
+import com.pentila.entSavoie.ENTRolesConstants;
+import com.pentila.entSavoie.cahierDeTexte.model.AnnotationCDT;
+import com.pentila.entSavoie.cahierDeTexte.model.EventCDT;
+import com.pentila.entSavoie.cahierDeTexte.service.AnnotationCDTLocalServiceUtil;
+import com.pentila.entSavoie.cahierDeTexte.service.EventCDTLocalServiceUtil;
+import com.pentila.entSavoie.cahierDeTexte.util.CDTUtil;
+
+public class ExportPDF {
+
+ static SimpleDateFormat classicDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ static SimpleDateFormat textFrenchDateFormat = new SimpleDateFormat("EEEE dd MMM yyyy", Locale.FRENCH);
+
+ static List<Long> processUserExport = new ArrayList<Long>();
+
+ // Export PDF
+ public static JSONObject exportPDF(ResourceRequest resourceRequest) throws NamingException, Exception {
+ JSONObject result = JSONFactoryUtil.createJSONObject();
+ result.put("success", false);
+
+ User currUser = null;
+
+ try {
+
+ currUser = PortalUtil.getUser(resourceRequest);
+
+ if (processUserExport.contains(currUser.getUserId())) {
+ 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é.");
+ result.put("success", true);
+ return result;
+ }
+ else {
+ processUserExport.add(currUser.getUserId());
+ }
+
+ ResourceBundle messages = ResourceBundle.getBundle("content.Language", currUser.getLocale());
+ //final String type = ParamUtil.getString(resourceRequest, "type");
+ final String startDay = ParamUtil.getString(resourceRequest, "startDay");
+ final String endDay = ParamUtil.getString(resourceRequest, "endDay");
+
+ Date startDayDate = classicDateFormat.parse(startDay);
+ Date endDayDate = classicDateFormat.parse(endDay);
+
+ boolean isEnseignant = false;
+
+ Role enseignant = RoleLocalServiceUtil.getRole(currUser.getCompanyId(), ENTRolesConstants.NATIONAL_3);
+ List<Role> lroles = currUser.getRoles();
+ if(lroles.contains(enseignant)){
+ isEnseignant = true;
+ }
+
+ boolean sortByDate = ParamUtil.getBoolean(resourceRequest, "sortByDate", false);
+ boolean sortByUser = ParamUtil.getBoolean(resourceRequest, "sortByUser", false);
+ boolean sortByCalendar = ParamUtil.getBoolean(resourceRequest, "sortByCalendar", false);
+ boolean sortBySubject = ParamUtil.getBoolean(resourceRequest, "sortBySubject", false);
+
+ String sort = sortByUser?" trié par enseignants.":(sortByCalendar?" trié par classes.":" trié par matières.");
+
+ Document document = new Document(PageSize.A4, 10, 10, 25, 25);
+ ByteArrayOutputStream b = new ByteArrayOutputStream();
+ PdfWriter.getInstance(document, b);
+
+ document.addAuthor(currUser.getFullName());
+ 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));
+ document.addSubject(messages.getString("export-pdf-du-cahier-de-texte"));
+ document.addCreationDate();
+
+ ThemeDisplay themeDisplay = (ThemeDisplay)resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);
+
+ //styleSheets
+ StyleSheet mystyle = new StyleSheet();
+
+ // Ouverture du document
+ document.open();
+
+ String finalHTML = "<table border='1'>";
+
+ // header du doc
+ 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>";
+
+ List<EventCDT> listEvt = null;
+ // Suivant le filtre d'organization choisi
+ //if (type.equals("MyCalendar")) {
+ // listEvt = CDTEvent.calendarEvent_listEvent(resourceRequest);
+ //} else if (type.equals("AllCalendar")) {
+ listEvt = ExportUtil.calendarEvent_list(resourceRequest);
+ //}
+
+ if (!listEvt.isEmpty()) {
+ Boolean firstEvent = true;
+
+ int totalCDT = listEvt.size();
+ int count = 0;
+
+ if(sortByDate){
+ String currentDate = "";
+ for (EventCDT evt : listEvt) {
+ Date d1 = new Date();
+
+ String eventDate = textFrenchDateFormat.format(evt.getStartDay());
+ if (currentDate.equals(eventDate)) {
+ // on est sur le meme jour que le precedent
+ finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
+ firstEvent = false;
+ }
+ else {
+ if (!firstEvent) {
+ finalHTML += "</td></tr>";
+ firstEvent = false;
+ }
+ currentDate = eventDate;
+ finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventDate + "</b></font><br />";
+ }
+
+ finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar);
+
+ Date d2 = new Date();
+ count++;
+ System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
+ }
+ } else if(sortByUser){
+ String currentUser = "";
+ for (EventCDT evt : listEvt) {
+ Date d1 = new Date();
+
+ String eventUser = ExportUtil.getUserNameCached(evt.getCreator());
+ if (currentUser.equals(eventUser)) {
+ // on est sur le meme jour que le precedent
+ finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
+ firstEvent = false;
+ }
+ else {
+ if (!firstEvent) {
+ finalHTML += "</td></tr>";
+ firstEvent = false;
+ }
+ currentUser = eventUser;
+ finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventUser + "</b></font><br />";
+ }
+
+ finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar);
+
+ Date d2 = new Date();
+ count++;
+ System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
+ }
+ } else if(sortByCalendar){
+ String currentCalendar = "";
+ for (EventCDT evt : listEvt) {
+ Date d1 = new Date();
+ Group group = GroupLocalServiceUtil.getGroup(evt.getGroupId());
+ String eventCalendar = ExportUtil.getClasseNameCached(group);
+ if (currentCalendar.equals(eventCalendar)) {
+ // on est sur le meme jour que le precedent
+ finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
+ firstEvent = false;
+ }
+ else {
+ if (!firstEvent) {
+ finalHTML += "</td></tr>";
+ firstEvent = false;
+ }
+ currentCalendar = eventCalendar;
+ finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventCalendar + "</b></font><br />";
+ }
+
+ finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar);
+
+ Date d2 = new Date();
+ count++;
+ System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
+ }
+ } else if(sortBySubject){
+ String currentSubject = "";
+ for (EventCDT evt : listEvt) {
+ Date d1 = new Date();
+
+ String eventSubject = ExportUtil.getMatiereNameCached(evt.getSubjectCDT());
+ if (currentSubject.equals(eventSubject)) {
+ // on est sur le meme jour que le precedent
+ finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
+ firstEvent = false;
+ }
+ else {
+ if (!firstEvent) {
+ finalHTML += "</td></tr>";
+ firstEvent = false;
+ }
+ currentSubject = eventSubject;
+ finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventSubject + "</b></font><br />";
+ }
+
+ finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar);
+
+ Date d2 = new Date();
+ count++;
+ System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
+ }
+ }
+ finalHTML += "</td></tr>";
+ }
+ finalHTML += "</table>";
+
+ StringReader srcDesc= new StringReader(finalHTML);
+ ArrayList<Element> pDesc = HTMLWorker.parseToList(srcDesc, mystyle);
+ for (int k = 0; k < pDesc.size(); ++k){
+ document.add((Element)pDesc.get(k));
+ }
+
+ // Fermer le document
+ document.close();
+
+ String folderName = ExportUtil.sendToCasier(resourceRequest, currUser, b.toByteArray(), startDay, endDay, false);
+
+ 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>";
+
+ processUserExport.remove(currUser.getUserId());
+ result.put("msg", messages.getString("un-export-pdf-a-ete-depose-dans-votre-casier") + " : " + hrefPDF);
+ result.put("success", true);
+ } catch (Exception e) {
+ if (_log.isErrorEnabled()) {
+ _log.error(e);
+ }
+ result.put("success", false);
+ }
+ finally {
+ processUserExport.remove(currUser.getUserId());
+ }
+
+ return result;
+ }
+
+ 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 {
+
+ User currUser = user;
+
+ try {
+
+ if (processUserExport.contains(currUser.getUserId())) {
+ return null;
+ }
+ else {
+ processUserExport.add(currUser.getUserId());
+ }
+
+ boolean isEnseignant = false;
+
+ Role enseignant = RoleLocalServiceUtil.getRole(currUser.getCompanyId(), ENTRolesConstants.NATIONAL_3);
+ List<Role> lroles = currUser.getRoles();
+ if(lroles.contains(enseignant)){
+ isEnseignant = true;
+ }
+
+ String sort = sortByUser?" trié par enseignants.":(sortByCalendar?" trié par classes.":" trié par matières.");
+
+ Document document = new Document(PageSize.A4, 10, 10, 25, 25);
+ ByteArrayOutputStream b = new ByteArrayOutputStream();
+ PdfWriter.getInstance(document, b);
+
+ document.addAuthor(currUser.getFullName());
+ 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));
+ document.addSubject(messages.getString("export-pdf-du-cahier-de-texte"));
+ document.addCreationDate();
+
+ //styleSheets
+ StyleSheet mystyle = new StyleSheet();
+
+ // Ouverture du document
+ document.open();
+
+ String finalHTML = "<table border='1'>";
+
+ // header du doc
+ 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>";
+
+ List<EventCDT> listEvt = CDTUtil.calendarEvent_list(currUser.getUserId(), 0, -1l, "[-1]", false, startDayDate, endDayDate, sortByDate, sortByUser, sortByCalendar, sortBySubject, filteredEtabOrgId);
+
+ if (!listEvt.isEmpty()) {
+ Boolean firstEvent = true;
+
+ int totalCDT = listEvt.size();
+ int count = 0;
+
+ if(sortByDate){
+ String currentDate = "";
+ for (EventCDT evt : listEvt) {
+ Date d1 = new Date();
+
+ String eventDate = textFrenchDateFormat.format(evt.getStartDay());
+ if (currentDate.equals(eventDate)) {
+ // on est sur le meme jour que le precedent
+ finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
+ firstEvent = false;
+ }
+ else {
+ if (!firstEvent) {
+ finalHTML += "</td></tr>";
+ firstEvent = false;
+ }
+ currentDate = eventDate;
+ finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventDate + "</b></font><br />";
+ }
+
+ finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar, messages);
+
+ Date d2 = new Date();
+ count++;
+ System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
+ }
+ } else if(sortByUser){
+ String currentUser = "";
+ for (EventCDT evt : listEvt) {
+ Date d1 = new Date();
+
+ String eventUser = ExportUtil.getUserNameCached(evt.getCreator());
+ if (currentUser.equals(eventUser)) {
+ // on est sur le meme jour que le precedent
+ finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
+ firstEvent = false;
+ }
+ else {
+ if (!firstEvent) {
+ finalHTML += "</td></tr>";
+ firstEvent = false;
+ }
+ currentUser = eventUser;
+ finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventUser + "</b></font><br />";
+ }
+
+ finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar, messages);
+
+ Date d2 = new Date();
+ count++;
+ System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
+ }
+ } else if(sortByCalendar){
+ String currentCalendar = "";
+ for (EventCDT evt : listEvt) {
+ Date d1 = new Date();
+ Group group = GroupLocalServiceUtil.getGroup(evt.getGroupId());
+ String eventCalendar = ExportUtil.getClasseNameCached(group);
+ if (currentCalendar.equals(eventCalendar)) {
+ // on est sur le meme jour que le precedent
+ finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
+ firstEvent = false;
+ }
+ else {
+ if (!firstEvent) {
+ finalHTML += "</td></tr>";
+ firstEvent = false;
+ }
+ currentCalendar = eventCalendar;
+ finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventCalendar + "</b></font><br />";
+ }
+
+ finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar, messages);
+
+ Date d2 = new Date();
+ count++;
+ System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
+ }
+ } else if(sortBySubject){
+ String currentSubject = "";
+ for (EventCDT evt : listEvt) {
+ Date d1 = new Date();
+
+ String eventSubject = ExportUtil.getMatiereNameCached(evt.getSubjectCDT());
+ if (currentSubject.equals(eventSubject)) {
+ // on est sur le meme jour que le precedent
+ finalHTML += " ----------------------------------------------------------------------------------------------------------------<br/><br/>";
+ firstEvent = false;
+ }
+ else {
+ if (!firstEvent) {
+ finalHTML += "</td></tr>";
+ firstEvent = false;
+ }
+ currentSubject = eventSubject;
+ finalHTML += "<tr><td> <font style='font-size:10px'><b>" + eventSubject + "</b></font><br />";
+ }
+
+ finalHTML += getDescription(evt, themeDisplay, currUser, isEnseignant, sortByDate, sortByUser, sortBySubject, sortByCalendar, messages);
+
+ Date d2 = new Date();
+ count++;
+ System.out.println("Export PDF: " + count + "/" + totalCDT + " - " + (d2.getTime()-d1.getTime()));
+ }
+ }
+ finalHTML += "</td></tr>";
+ }
+ finalHTML += "</table>";
+
+ StringReader srcDesc= new StringReader(finalHTML);
+ ArrayList<Element> pDesc = HTMLWorker.parseToList(srcDesc, mystyle);
+ for (int k = 0; k < pDesc.size(); ++k){
+ document.add((Element)pDesc.get(k));
+ }
+
+ // Fermer le document
+ document.close();
+
+
+ processUserExport.remove(currUser.getUserId());
+ return b.toByteArray();
+
+
+ } catch (Exception e) {
+ if (_log.isErrorEnabled()) {
+ _log.error(e);
+ }
+ }
+ finally {
+ processUserExport.remove(currUser.getUserId());
+ }
+
+ return null;
+ }
+
+
+ public static String processImageDescription(String desc) {
+ String infosEvt = "";
+
+ try{
+ org.jsoup.nodes.Document parsedDoc = Jsoup.parseBodyFragment(desc);
+ org.jsoup.nodes.Element body = parsedDoc.body();
+ Elements imgs = body.getElementsByTag("img");
+ for (org.jsoup.nodes.Element el: imgs) {
+ String src = el.attr("src");
+ if(src.contains("data:image") && src.contains("base64")){
+
+ String imgInBase64 = src.substring(src.indexOf(",") + 1);
+ try{
+ byte[] image = Base64.decode(imgInBase64);
+ String extension = src.substring(src.indexOf("data:image/") + 11, src.indexOf(";base64,"));
+
+ //On cree le fichier à partir du byteArray decode
+ Date d = new Date();
+ String title = "" + d.getTime() + "." + extension;
+
+ File tempImage = File.createTempFile(title, "." + extension);
+ FileOutputStream fos = new FileOutputStream(tempImage);
+ fos.write(image);
+ fos.flush();
+ fos.close();
+ el.attr("src", tempImage.getPath());
+
+ } catch (Exception e1){
+ el.remove();
+ }
+ } else if(src.contains("http")){
+ try{
+ URL url = new URL(src);
+ Image.getInstance(url);
+ } catch(Exception e){
+ // Si on arrive pas a recuperer l'image a partir de l'url on la vire
+ el.remove();
+ }
+ } else if (!src.contains("http")) {
+ // on vire l'image
+ el.remove();
+ }
+ }
+ infosEvt = body.outerHtml();
+
+ } catch(Exception e){
+ infosEvt = desc;
+ }
+ return infosEvt;
+ }
+
+ public static String getDescription(EventCDT evt, ThemeDisplay themeDisplay, User user, boolean isEnseignant, boolean sortByDate, boolean sortByUser, boolean sortByCalendar, boolean sortBySubject) throws PortalException, SystemException {
+ ResourceBundle messages = ResourceBundle.getBundle("content.Language", user.getLocale());
+ return getDescription(evt, themeDisplay, user, isEnseignant, sortByDate, sortByUser, sortByCalendar, sortBySubject, messages);
+ }
+
+
+ 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 {
+ String infosEvt = "<font style='font-size:8px'><b>";
+
+ if(!sortByDate){
+ String startEvtDay = textFrenchDateFormat.format(evt.getStartDay());
+ infosEvt += startEvtDay + " ";
+ }
+
+ // horaire
+ String evtTime = evt.getStartEvtTime().replace(':', 'h')+" - "+evt.getEndEvtTime().replace(':', 'h');
+ infosEvt += evtTime + " ";
+
+ Group group = GroupLocalServiceUtil.getGroup(evt.getGroupId());
+ if(!sortByCalendar) {
+ // classe
+ String classeName = ExportUtil.getClasseNameCached(group);
+ infosEvt += classeName + " ";
+ }
+
+ if(!sortBySubject) {
+ // matiere
+ String matiereLabel = ExportUtil.getMatiereNameCached(evt.getSubjectCDT());
+ infosEvt += matiereLabel + "<br/>";
+ }
+
+ // sujet
+ if (!evt.getSubject().isEmpty()) {
+ infosEvt += "<u>" + messages.getString("sujet") + " :</u></b> " + evt.getSubject() + "<br/>";
+ }
+
+ // description
+ if (evt.getBroadcast() || (user.getUserId() == evt.getCreator())) {
+ if (!evt.getDescription().isEmpty()) {
+ infosEvt += "<b><u>" + messages.getString("description") + " :</u></b><br /><br />" + processImageDescription(evt.getDescription()) + "<br/>";
+ }
+ }
+ // note personnel
+ AnnotationCDT annotation = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorIdEvtId(user.getUserId(), evt.getEvtId());
+ if (annotation!=null) {
+ infosEvt += "<b><u>" + messages.getString("note") + " :</u></b> " + processImageDescription(annotation.getAnnotation()) + "<br/>";
+ }
+
+
+ // PJ
+ if (evt.getBroadcast() || (user.getUserId() == evt.getCreator())) {
+ String[] eventCDTAttachments = EventCDTLocalServiceUtil.getAttachFilesNameToEventCDT(user.getCompanyId(), evt.getEvtId());
+ String href = "";
+ for (int i = 0; i < eventCDTAttachments.length; i++) {
+ String fileName = FileUtil.getShortFileName(eventCDTAttachments[i]);
+ long fileSize = DLStoreUtil.getFileSize(user.getCompanyId(), CompanyConstants.SYSTEM, eventCDTAttachments[i])/1000;
+ if (fileSize==0) {
+ fileSize = 1;
+ }
+ 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>, ";
+ }
+
+ if (eventCDTAttachments.length>0) {
+ infosEvt += "<b><u>" + messages.getString("piece-jointe") + " :</u></b> " + href.substring(0, href.length()-2) + "<br />";
+ }
+ }
+
+ // devoir a rendre
+ List<EventCDT> evtCDTDevoir = new ArrayList<EventCDT>();
+ evtCDTDevoir.addAll(EventCDTLocalServiceUtil.getToEventCDT(evt.getEvtId()));
+ List<EventCDT> filteredEventToDo = new ArrayList<EventCDT>();
+
+ Collections.sort(evtCDTDevoir);
+
+ if (user.getUserId() != evt.getCreator()) {
+
+ for (EventCDT devoirARendre : evtCDTDevoir) {
+ if (devoirARendre.getBroadcast()) {
+ filteredEventToDo.add(devoirARendre);
+ }
+ }
+ }
+ else {
+ filteredEventToDo.addAll(evtCDTDevoir);
+ }
+
+ if (!filteredEventToDo.isEmpty()) {
+ infosEvt += "<br/><u><b>" + messages.getString("devoirs-a-rendre") + " :</b></u><br/>";
+
+ for (EventCDT devoir : evtCDTDevoir) {
+ try {
+ EventCDT evtFrom = EventCDTLocalServiceUtil.getEventCDT(devoir.getFromEvt());
+ infosEvt += " - " + messages.getString("devoir-donne-le") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", user.getLocale())).format(evtFrom.getStartDay()) + "<br />";
+ }
+ catch (Exception exc1){}
+
+ if (!devoir.getSubject().isEmpty()) {
+ infosEvt += " <u><b>" + devoir.getSubject() + " :</b></u>";
+ }
+ if (!devoir.getDescription().isEmpty()) {
+ infosEvt += " " + processImageDescription(devoir.getDescription()) + "<br />";
+ }
+ else{
+ infosEvt += "<br />";
+ }
+ /*if (devoir.getEstimatedTime()>0) {
+ infosEvt += " " + messages.getString("temps-estime") + ": " + devoir.getEstimatedTime() + messages.getString("minutes") + "<br />";
+ }*/
+
+ AnnotationCDT devAnnotation = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorIdEvtId(user.getUserId(), devoir.getEvtId());
+ if (devAnnotation!=null) {
+ infosEvt += " <b><u>" + messages.getString("note") + " :</u></b>";
+ if (!devAnnotation.getAnnotation().isEmpty()){
+ infosEvt += processImageDescription(devAnnotation.getAnnotation());
+ }
+ if(!isEnseignant){
+ infosEvt += " -";
+ if(devAnnotation.getDone()) {
+ infosEvt += " " + messages.getString("travail-realise");
+ } else {
+ infosEvt += " " + messages.getString("travail-non-realise");
+ }
+ }
+ infosEvt += "<br/>";
+ }
+ String[] eventCDTDevoirAttachments = EventCDTLocalServiceUtil.getAttachFilesNameToEventCDT(user.getCompanyId(), devoir.getEvtId());
+ String hrefDevoir = "";
+ for (int i = 0; i < eventCDTDevoirAttachments.length; i++) {
+ String fileName = FileUtil.getShortFileName(eventCDTDevoirAttachments[i]);
+ long fileSize = DLStoreUtil.getFileSize(user.getCompanyId(), CompanyConstants.SYSTEM, eventCDTDevoirAttachments[i])/1000;
+ if (fileSize==0) {
+ fileSize = 1;
+ }
+ 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>, ";
+ }
+ if (eventCDTDevoirAttachments.length>0) {
+ infosEvt += " <u><b>" + messages.getString("piece-jointe") + " :</b></u> " + hrefDevoir.substring(0, hrefDevoir.length()-2);
+ infosEvt += "<br />";
+ }
+ }
+ }
+
+ // devoir donne
+ if (evt.getBroadcast() || (user.getUserId() == evt.getCreator())) {
+ evtCDTDevoir = EventCDTLocalServiceUtil.getFromEventCDT(evt.getEvtId());
+ if (!evtCDTDevoir.isEmpty()) {
+ infosEvt += "<br/><u><b>" + messages.getString("devoirs-donnes") + " :</b></u><br/>";
+
+ for (EventCDT devoir : evtCDTDevoir) {
+ infosEvt += " - " + messages.getString("devoir-a-rendre-pour-le") + " " + (new SimpleDateFormat("EEEE dd MMM yyyy", user.getLocale())).format(devoir.getStartDay()) + "<br />";
+ if (!devoir.getSubject().isEmpty()) {
+ infosEvt += " <u><b>" + devoir.getSubject() + " :</b></u>";
+ }
+ if (!devoir.getDescription().isEmpty()) {
+ infosEvt += " " + processImageDescription(devoir.getDescription()) + "<br />";
+ }
+ else{
+ infosEvt += "<br />";
+ }
+ /*if (devoir.getEstimatedTime()>0) {
+ infosEvt += " " + messages.getString("temps-estime") + ": " + devoir.getEstimatedTime() + messages.getString("minutes") + "<br />";
+ }*/
+
+ AnnotationCDT devAnnotation = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorIdEvtId(user.getUserId(), devoir.getEvtId());
+ if (devAnnotation!=null) {
+ infosEvt += " <b><u>" + messages.getString("note") + " :</u></b>";
+ if (!devAnnotation.getAnnotation().isEmpty()){
+ infosEvt += processImageDescription(devAnnotation.getAnnotation()) + " -";
+ }
+ if(devAnnotation.getDone()) {
+ infosEvt += " " + messages.getString("travail-realise");
+ } else {
+ infosEvt += " " + messages.getString("travail-non-realise");
+ }
+ infosEvt += "<br/>";
+ }
+ String[] eventCDTDevoirAttachments = EventCDTLocalServiceUtil.getAttachFilesNameToEventCDT(user.getCompanyId(), devoir.getEvtId());
+ String hrefDevoir = "";
+ for (int i = 0; i < eventCDTDevoirAttachments.length; i++) {
+ String fileName = FileUtil.getShortFileName(eventCDTDevoirAttachments[i]);
+ long fileSize = DLStoreUtil.getFileSize(user.getCompanyId(), CompanyConstants.SYSTEM, eventCDTDevoirAttachments[i])/1000;
+ if (fileSize==0) {
+ fileSize = 1;
+ }
+ 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>, ";
+ }
+ if (eventCDTDevoirAttachments.length>0) {
+ infosEvt += " <u><b>" + messages.getString("piece-jointe") + " :</b></u> " + hrefDevoir.substring(0, hrefDevoir.length()-2);
+ infosEvt += "<br />";
+ }
+ }
+ }
+ infosEvt += "<br />";
+ }
+ infosEvt += "</font>";
+ return infosEvt;
+ }
+
+ private static Log _log = LogFactoryUtil.getLog(ExportPDF.class);
+
+}