[Suiviobsmer-commits] r553 - in trunk: wao-business/src/main/xmi wao-ui/src/main/java/fr/ifremer/wao/ui/components wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/resources/fr/ifremer/wao/ui/components wao-ui/src/main/webapp
Author: fdesbois Date: 2010-06-18 16:15:34 +0000 (Fri, 18 Jun 2010) New Revision: 553 Log: Evo #2018 : Add LogFile component used for ActivityCalendar + move imports from boats page Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/LogFile.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/LogFile.tml Modified: trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/CsvImport.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/CsvImport.tml trunk/wao-ui/src/main/webapp/Administration.tml trunk/wao-ui/src/main/webapp/Boats.tml Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/CsvImport.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/CsvImport.java 2010-06-18 14:46:07 UTC (rev 552) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/CsvImport.java 2010-06-18 16:15:34 UTC (rev 553) @@ -16,7 +16,10 @@ import org.apache.tapestry5.upload.services.UploadedFile; import org.slf4j.Logger; +import java.io.IOException; +import java.io.InputStream; import java.util.List; +import java.util.zip.GZIPInputStream; /** * This component is used to import a {@code csvFile} using a form. The page @@ -33,8 +36,12 @@ public class CsvImport { /** Event triggered after form submission success */ - static final String EVENT_IMPORTED = "imported"; + protected static final String EVENT_IMPORTED = "imported"; + protected static final String MIMETYPE_GZIP = "application/x-gzip"; + + protected static final String MIMETYPE_CSV = "text/csv"; + /** Label to display on fieldset and in submit button title */ @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) @Property @@ -72,15 +79,18 @@ try { // Execute import using the engine - ImportResults result = engine.execute(csvFile.getStream()); + ImportResults result = engine.execute(getStream()); - // Add info on nbRows imported and refused - errorReport.addInfo(result.getNbRowsImported() + " lignes importées, " + - result.getNbRowsRefused() + " refusées."); + if (result != null) { + // Add info on nbRows imported and refused + errorReport.addInfo(result.getNbRowsImported() + " lignes importées dont " + + result.getNbRowsImportedNew() + " nouvelles, " + + result.getNbRowsRefused() + " refusées."); - // Add import errors - List<String> errors = result.getErrors(); - errorReport.addError(errors.toArray(new String[errors.size()])); + // Add import errors + List<String> errors = result.getErrors(); + errorReport.addError(errors.toArray(new String[errors.size()])); + } } catch (WaoBusinessException eee) { @@ -92,9 +102,33 @@ String[] errors = manager.getErrorMessages(eee, messages, logger); errorReport.addError(errors); + + } catch (IOException eee) { + errorReport.addError("Erreur de format du fichier ! Seul les formats [csv, gz] sont autorisés."); + logger.error("Error on import csv file", eee); } // Trigger event "imported" with ErroReport in argument resources.triggerEvent(EVENT_IMPORTED, new Object[] {errorReport}, null); } + + protected InputStream getStream() throws IOException { + InputStream input = csvFile.getStream(); + String contentType = csvFile.getContentType(); + + if (logger.isDebugEnabled()) { + logger.debug("Content type : " + csvFile.getContentType()); + } + + if (contentType.equals(MIMETYPE_GZIP)) { + if (logger.isDebugEnabled()) { + logger.debug("Gzip file"); + } + input = new GZIPInputStream(input); + + } else if (!contentType.equals(MIMETYPE_CSV)) { + throw new IOException("unsupported format : " + contentType); + } + return input; + } } Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/LogFile.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/LogFile.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/LogFile.java 2010-06-18 16:15:34 UTC (rev 553) @@ -0,0 +1,52 @@ +package fr.ifremer.wao.ui.components; + +import org.apache.tapestry5.Asset; +import org.apache.tapestry5.BindingConstants; +import org.apache.tapestry5.StreamResponse; +import org.apache.tapestry5.annotations.Parameter; +import org.apache.tapestry5.annotations.Property; +import org.apache.tapestry5.services.Response; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +/** + * Created: 18 juin 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public class LogFile { + + @Parameter(required = true) + @Property + private InputStream source; + + @Parameter(defaultPrefix = BindingConstants.LITERAL) + @Property + private String title; + + @Parameter(defaultPrefix = BindingConstants.ASSET) + @Property + private Asset icon; + + public StreamResponse onActionFromShowLogFile() { + return new StreamResponse() { + + @Override + public String getContentType() { + return "text/plain;charset=utf-8"; + } + + @Override + public InputStream getStream() throws IOException { + return source; + } + + @Override + public void prepareResponse(Response response) { + } + }; + } +} Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2010-06-18 14:46:07 UTC (rev 552) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2010-06-18 16:15:34 UTC (rev 553) @@ -28,6 +28,7 @@ import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoBusinessException.Type; import fr.ifremer.wao.WaoException; +import fr.ifremer.wao.WaoProperty; import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.ImportResults; import fr.ifremer.wao.bean.ImportResultsImpl; @@ -35,6 +36,7 @@ import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyImpl; import fr.ifremer.wao.entity.WaoUser; +import fr.ifremer.wao.service.ServiceBoat; import fr.ifremer.wao.service.ServiceReferential; import fr.ifremer.wao.service.ServiceSampling; import fr.ifremer.wao.service.ServiceUser; @@ -45,10 +47,15 @@ import fr.ifremer.wao.ui.data.RequiresAuthentication; import fr.ifremer.wao.ui.services.WaoManager; +import java.io.FileNotFoundException; +import java.io.IOException; import java.io.InputStream; import java.util.List; +import java.util.zip.GZIPInputStream; + import org.apache.commons.lang.StringUtils; import org.apache.tapestry5.EventContext; +import org.apache.tapestry5.StreamResponse; import org.apache.tapestry5.annotations.IncludeStylesheet; import org.apache.tapestry5.annotations.InjectComponent; import org.apache.tapestry5.annotations.Log; @@ -63,6 +70,7 @@ import org.apache.tapestry5.ioc.services.PropertyAccess; import org.apache.tapestry5.ioc.services.TypeCoercer; import org.apache.tapestry5.services.BeanModelSource; +import org.apache.tapestry5.services.Response; import org.apache.tapestry5.upload.services.UploadedFile; import org.slf4j.Logger; @@ -81,6 +89,7 @@ private Layout layout; @SessionState + @Property private ConnectedUser currentUser; @Inject @@ -151,10 +160,15 @@ @Inject private ServiceSampling serviceSampling; + @Inject + private ServiceBoat serviceBoat; + public ImportEngine getFishingZoneImportEngine() { return new ImportEngine() { + @Override - public ImportResults execute(InputStream input) throws WaoException, WaoBusinessException { + public ImportResults execute(InputStream input) + throws WaoException, WaoBusinessException { int nbImported = serviceReferential.importFishingZoneCsv(input); ImportResults results = new ImportResultsImpl(); results.setNbRowsImported(nbImported); @@ -165,8 +179,10 @@ public ImportEngine getSamplingPlanImportEngine() { return new ImportEngine() { + @Override - public ImportResults execute(InputStream input) throws WaoException, WaoBusinessException { + public ImportResults execute(InputStream input) + throws WaoException, WaoBusinessException { ImportResults results = serviceSampling.importSamplingPlanCsv(input); return results; } @@ -174,6 +190,65 @@ } @Log + public ImportEngine getBoatImportEngine() { + return new ImportEngine() { + + @Override + public ImportResults execute(InputStream input) + throws WaoException, WaoBusinessException { + int[] result = serviceBoat.importBoatCsv(input); + ImportResults results = new ImportResultsImpl(); + results.setNbRowsImported(result[0]); + results.setNbRowsImportedNew(result[1]); + return results; + } + }; + } + + public ImportEngine getActivityCalendarImportEngine() { + return new ImportEngine() { + + @Override + public ImportResults execute(InputStream input) + throws WaoException, WaoBusinessException { + // Will execute a thread to import activityCalendars + serviceBoat.importActivityCalendarCsv(input); + // Errors will be written in an activityCalendarLogFile + return null; + } + }; + } + + public InputStream getActivityCalendarLogFile() { + return getActivityCalendarLogFile(WaoProperty.FILENAME_LOG_ACTIVITY_IMPORT); + } + + public InputStream getActivityCalendarAccessLogFile() { + return getActivityCalendarLogFile(WaoProperty.FILENAME_LOG_ACTIVITY_ACCESS); + } + + private InputStream getActivityCalendarLogFile(WaoProperty property) { + InputStream result = null; + try { + switch (property) { + case FILENAME_LOG_ACTIVITY_ACCESS: + result = serviceBoat.getActivityCalendarLogAccessFile(); break; + case FILENAME_LOG_ACTIVITY_IMPORT: + result = serviceBoat.getActivityCalendarLogFile(); + } + } catch (FileNotFoundException eee) { + if (logger.isInfoEnabled()) { + logger.info("Not existing log file for " + property); + } + } + return result; + } + + public boolean isActivityCalendarImportRun() { + return manager.isActivityCalendarImportRun(); + } + + @Log void onImported(ErrorReport report) { for (String info : report.getInfos()) { layout.addInfo(info); Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2010-06-18 14:46:07 UTC (rev 552) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2010-06-18 16:15:34 UTC (rev 553) @@ -186,142 +186,139 @@ /**************************** Import Forms ********************************/ - @Inject - private Messages messages; +// /** Csv file for boats import */ +// @Property +// private UploadedFile boatsCsvFile; +// +// /** Csv file for activityCalendar import, can be a Gzip file */ +// @Property +// private UploadedFile activityCalendarsCsvFile; +// +// private InputStream activityCalendarLogFile; +// +// private InputStream activityCalendarLogAccessFile; +// +// protected static final String GZIP_MIMETYPE = "application/x-gzip"; +// +// public boolean canImportReferentials() { +// return user.isAdmin() && !user.isReadOnly(); +// } +// +// @Log +// void onSuccessFromImportBoatsForm() { +// if (canImportReferentials()) { +// try { +// int[] result = serviceBoat.importBoatCsv( +// boatsCsvFile.getStream()); +// // Suppress persitant list of boats +// boats = null; +// layout.addInfo(result[0] + " navires importés dont " + +// result[1] + " nouveaux"); +// } catch (WaoBusinessException eee) { +// layout.addError(eee.getMessage()); +// } +// } +// } +// +// InputStream getActivityCalendarLogFile() throws FileNotFoundException { +// if (activityCalendarLogFile == null) { +// activityCalendarLogFile = serviceBoat.getActivityCalendarLogFile(); +// } +// return activityCalendarLogFile; +// } +// +// public boolean isLogFileExists() { +// try { +// getActivityCalendarLogFile(); +// return true; +// } catch (FileNotFoundException eee) { +// if (log.isInfoEnabled()) { +// log.info("Aucun fichier de log existant pour les calendriers d'activité"); +// } +// return false; +// } +// } +// +// InputStream getActivityCalendarLogAccessFile() throws FileNotFoundException { +// if (activityCalendarLogAccessFile == null) { +// activityCalendarLogAccessFile = +// serviceBoat.getActivityCalendarLogAccessFile(); +// } +// return activityCalendarLogAccessFile; +// } +// +// public boolean isLogAccessFileExists() { +// try { +// getActivityCalendarLogAccessFile(); +// return true; +// } catch (FileNotFoundException eee) { +// if (log.isInfoEnabled()) { +// log.info("Aucun fichier de log existant pour les accès " + +// "utilisateurs aux calendriers d'activité"); +// } +// return false; +// } +// } +// +// @Log +// void onSuccessFromImportActivityCalendarsForm() +// throws WaoException, IOException { +// if (canImportReferentials()) { +// InputStream input = activityCalendarsCsvFile.getStream(); +// if (log.isDebugEnabled()) { +// log.debug("Content type : " + +// activityCalendarsCsvFile.getContentType()); +// } +// if (activityCalendarsCsvFile.getContentType(). +// equals(GZIP_MIMETYPE)) { +// if (log.isDebugEnabled()) { +// log.debug("Gzip file"); +// } +// input = new GZIPInputStream(input); +// } +// serviceBoat.importActivityCalendarCsv(input); +// companyBoatInfos = null; +// } +// } +// +// public StreamResponse onActionFromShowActivityCalendarLogFile() { +// return new StreamResponse() { +// +// @Override +// public String getContentType() { +// return "text/plain;charset=utf-8"; +// } +// +// @Override +// public InputStream getStream() throws IOException { +// return getActivityCalendarLogFile(); +// } +// +// @Override +// public void prepareResponse(Response response) { +// } +// }; +// } +// +// public StreamResponse onActionFromShowActivityCalendarLogAccessFile() { +// return new StreamResponse() { +// +// @Override +// public String getContentType() { +// return "text/plain;charset=utf-8"; +// } +// +// @Override +// public InputStream getStream() throws IOException { +// return getActivityCalendarLogAccessFile(); +// } +// +// @Override +// public void prepareResponse(Response response) { +// } +// }; +// } - /** Csv file for boats import */ - @Property - private UploadedFile boatsCsvFile; - - /** Csv file for activityCalendar import, can be a Gzip file */ - @Property - private UploadedFile activityCalendarsCsvFile; - - private InputStream activityCalendarLogFile; - - private InputStream activityCalendarLogAccessFile; - - protected static final String GZIP_MIMETYPE = "application/x-gzip"; - - public boolean canImportReferentials() { - return user.isAdmin() && !user.isReadOnly(); - } - - @Log - void onSuccessFromImportBoatsForm() { - if (canImportReferentials()) { - try { - int[] result = serviceBoat.importBoatCsv( - boatsCsvFile.getStream()); - // Suppress persitant list of boats - boats = null; - layout.addInfo(result[0] + " navires importés dont " + - result[1] + " nouveaux"); - } catch (WaoBusinessException eee) { - layout.addError(eee.getMessage()); - } - } - } - - InputStream getActivityCalendarLogFile() throws FileNotFoundException { - if (activityCalendarLogFile == null) { - activityCalendarLogFile = serviceBoat.getActivityCalendarLogFile(); - } - return activityCalendarLogFile; - } - - public boolean isLogFileExists() { - try { - getActivityCalendarLogFile(); - return true; - } catch (FileNotFoundException eee) { - if (log.isInfoEnabled()) { - log.info("Aucun fichier de log existant pour les calendriers d'activité"); - } - return false; - } - } - - InputStream getActivityCalendarLogAccessFile() throws FileNotFoundException { - if (activityCalendarLogAccessFile == null) { - activityCalendarLogAccessFile = - serviceBoat.getActivityCalendarLogAccessFile(); - } - return activityCalendarLogAccessFile; - } - - public boolean isLogAccessFileExists() { - try { - getActivityCalendarLogAccessFile(); - return true; - } catch (FileNotFoundException eee) { - if (log.isInfoEnabled()) { - log.info("Aucun fichier de log existant pour les accès " + - "utilisateurs aux calendriers d'activité"); - } - return false; - } - } - - @Log - void onSuccessFromImportActivityCalendarsForm() - throws WaoException, IOException { - if (canImportReferentials()) { - InputStream input = activityCalendarsCsvFile.getStream(); - if (log.isDebugEnabled()) { - log.debug("Content type : " + - activityCalendarsCsvFile.getContentType()); - } - if (activityCalendarsCsvFile.getContentType(). - equals(GZIP_MIMETYPE)) { - if (log.isDebugEnabled()) { - log.debug("Gzip file"); - } - input = new GZIPInputStream(input); - } - serviceBoat.importActivityCalendarCsv(input); - companyBoatInfos = null; - } - } - - public StreamResponse onActionFromShowActivityCalendarLogFile() { - return new StreamResponse() { - - @Override - public String getContentType() { - return "text/plain;charset=utf-8"; - } - - @Override - public InputStream getStream() throws IOException { - return getActivityCalendarLogFile(); - } - - @Override - public void prepareResponse(Response response) { - } - }; - } - - public StreamResponse onActionFromShowActivityCalendarLogAccessFile() { - return new StreamResponse() { - - @Override - public String getContentType() { - return "text/plain;charset=utf-8"; - } - - @Override - public InputStream getStream() throws IOException { - return getActivityCalendarLogAccessFile(); - } - - @Override - public void prepareResponse(Response response) { - } - }; - } - /**************************** Filters Form *****************************************/ /** Filters to apply on boats list */ Modified: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/CsvImport.tml =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/CsvImport.tml 2010-06-18 14:46:07 UTC (rev 552) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/CsvImport.tml 2010-06-18 16:15:34 UTC (rev 553) @@ -9,6 +9,7 @@ <label for="csvFile">Fichier CSV ${label}</label> : <input t:type="upload" t:id="csvFile" t:validate="required" /> <input t:type="submit" class="ico import" value="OK" title="Import ${label} (format CSV avec encodage UTF-8)" /> + <t:body /> </fieldset> </form> </div> Added: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/LogFile.tml =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/LogFile.tml (rev 0) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/LogFile.tml 2010-06-18 16:15:34 UTC (rev 553) @@ -0,0 +1,12 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> + + <t:if t:test="source"> + <div class="fright"> + <a t:type="actionlink" t:id="showLogFile" target="blank"> + <img src="${icon}" alt="Fichier de log" title="Afficher le fichier de log ${title}" /> + </a> + </div> + </t:if> + +</html> Modified: trunk/wao-ui/src/main/webapp/Administration.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Administration.tml 2010-06-18 14:46:07 UTC (rev 552) +++ trunk/wao-ui/src/main/webapp/Administration.tml 2010-06-18 16:15:34 UTC (rev 553) @@ -31,10 +31,29 @@ <t:layout t:pageTitle="Administration" t:contentId="so-admin" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> - <t:csvImport t:label="des zones de pêche" t:engine="fishingZoneImportEngine" /> + <t:if t:test="currentUser.admin"> + <t:csvImport t:label="des zones de pêche" t:engine="fishingZoneImportEngine" /> - <t:csvImport t:label="du plan d'échantillonnage" t:engine="samplingPlanImportEngine" /> + <t:csvImport t:label="du plan d'échantillonnage" t:engine="samplingPlanImportEngine" /> + <t:csvImport t:label="des navires" t:engine="boatImportEngine" /> + + <t:unless t:test="activityCalendarImportRun"> + <div class="clearfix"> + <t:csvImport t:label="des calendriers d'activité" t:engine="activityCalendarImportEngine"> + <t:logFile t:source="activityCalendarAccessLogFile" t:title="des accès utilisateurs aux calendriers d'activité" t:icon="context:img/text-access-32px.png" /> + <t:logFile t:source="activityCalendarLogFile" t:title="de l'import des calendriers d'activité" t:icon="context:img/text-32px.png" /> + </t:csvImport> + </div> + <p:else> + <div class="fb-info"> + Import des calendriers d'activité en cours. <br /> + Vous pouvez continuer à naviguer sur le site en attendant la fin du chargement. + </div> + </p:else> + </t:unless> + </t:if> + <form class="actions clearfix" t:type="form" t:id="actionsForm"> <div class="fields fleft"> <t:label t:for="companies" /> : Modified: trunk/wao-ui/src/main/webapp/Boats.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Boats.tml 2010-06-18 14:46:07 UTC (rev 552) +++ trunk/wao-ui/src/main/webapp/Boats.tml 2010-06-18 16:15:34 UTC (rev 553) @@ -31,57 +31,57 @@ <t:layout t:pageTitle="Navires" t:contentId="so-boats" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> - <t:if t:test="canImportReferentials()"> - <div class="so-import"> - <fieldset> - <legend>Import des navires</legend> - <!--t:zone t:id="importZone"--> - <form t:type="form" t:id="importBoatsForm"> - <t:errors /> - <t:label for="boatsCsvFile" /> : - <input t:type="upload" t:id="boatsCsvFile" t:validate="required" /> - <input t:type="submit" class="ico import" value="OK" title="Importer une liste de navires (format CSV avec encodage UTF-8)" /> - </form> - <!--/t:zone--> - </fieldset> - </div> - <t:unless t:test="activityCalendarImportRun"> - <div class="so-import clearfix"> - <fieldset> - <legend>Import des calendriers d'activité</legend> - <form t:type="form" t:id="importActivityCalendarsForm"> - <t:errors /> - <t:label for="activityCalendarsCsvFile" /> : - <input t:type="upload" t:id="activityCalendarsCsvFile" t:validate="required" /> - <input t:type="submit" class="ico import" value="OK" - title="Importer les calendriers d'activité des navires (format CSV avec encodage UTF-8)" /> - </form> - <t:if t:test="logAccessFileExists"> - <div class="fright"> - <a t:type="actionlink" t:id="showActivityCalendarLogAccessFile" target="blank"> - <img src="${asset:context:}/img/text-access-32px.png" - title="Afficher le fichier de log des accès utilisateurs aux calendriers d'activité"/> - </a> - </div> - </t:if> - <t:if t:test="logFileExists"> - <div class="fright"> - <a t:type="actionlink" t:id="showActivityCalendarLogFile"> - <img src="${asset:context:}/img/text-32px.png" - title="Afficher le fichier de log de l'import des calendriers d'activité"/> - </a> - </div> - </t:if> - </fieldset> - </div> - <p:else> - <div class="fb-info"> - Import des calendriers d'activité en cours. <br /> - Vous pouvez continuer à naviguer sur le site en attendant la fin du chargement. - </div> - </p:else> - </t:unless> - </t:if> + <!--<t:if t:test="canImportReferentials()">--> + <!--<div class="so-import">--> + <!--<fieldset>--> + <!--<legend>Import des navires</legend>--> + <!--<!–t:zone t:id="importZone"–>--> + <!--<form t:type="form" t:id="importBoatsForm">--> + <!--<t:errors />--> + <!--<t:label for="boatsCsvFile" /> :--> + <!--<input t:type="upload" t:id="boatsCsvFile" t:validate="required" />--> + <!--<input t:type="submit" class="ico import" value="OK" title="Importer une liste de navires (format CSV avec encodage UTF-8)" />--> + <!--</form>--> + <!--<!–/t:zone–>--> + <!--</fieldset>--> + <!--</div>--> + <!--<t:unless t:test="activityCalendarImportRun">--> + <!--<div class="so-import clearfix">--> + <!--<fieldset>--> + <!--<legend>Import des calendriers d'activité</legend>--> + <!--<form t:type="form" t:id="importActivityCalendarsForm">--> + <!--<t:errors />--> + <!--<t:label for="activityCalendarsCsvFile" /> :--> + <!--<input t:type="upload" t:id="activityCalendarsCsvFile" t:validate="required" />--> + <!--<input t:type="submit" class="ico import" value="OK"--> + <!--title="Importer les calendriers d'activité des navires (format CSV avec encodage UTF-8)" />--> + <!--</form>--> + <!--<t:if t:test="logAccessFileExists">--> + <!--<div class="fright">--> + <!--<a t:type="actionlink" t:id="showActivityCalendarLogAccessFile" target="blank">--> + <!--<img src="${asset:context:}/img/text-access-32px.png"--> + <!--title="Afficher le fichier de log des accès utilisateurs aux calendriers d'activité"/>--> + <!--</a>--> + <!--</div>--> + <!--</t:if>--> + <!--<t:if t:test="logFileExists">--> + <!--<div class="fright">--> + <!--<a t:type="actionlink" t:id="showActivityCalendarLogFile">--> + <!--<img src="${asset:context:}/img/text-32px.png"--> + <!--title="Afficher le fichier de log de l'import des calendriers d'activité"/>--> + <!--</a>--> + <!--</div>--> + <!--</t:if>--> + <!--</fieldset>--> + <!--</div>--> + <!--<p:else>--> + <!--<div class="fb-info">--> + <!--Import des calendriers d'activité en cours. <br />--> + <!--Vous pouvez continuer à naviguer sur le site en attendant la fin du chargement.--> + <!--</div>--> + <!--</p:else>--> + <!--</t:unless> --> + <!--</t:if>--> <!-- Filtres --> <!--t:filters t:title="Filtres de recherche" t:mainId="so-boats-filters"-->
participants (1)
-
fdesbois@users.labs.libre-entreprise.org