r172 - in trunk: cantharella.data/src/main/java/nc/ird/cantharella/data/model/search cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions cantharella.service/src/main/java/nc/ird/cantharella/service/model cantharella.service/src/main/java/nc/ird/cantharella/service/services cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl cantharella.service/src/main/resources cantharella.web/src/main/java/nc/ird/cantharella/web/config cantharella.web/src/ma
Author: echatellier Date: 2013-03-04 16:31:05 +0100 (Mon, 04 Mar 2013) New Revision: 172 Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/172 Log: Fix indexing and document missing file management Added: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java trunk/cantharella.service/src/main/resources/cantharella.conf trunk/cantharella.service/src/main/resources/service_fr.properties trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebApplicationImpl.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java trunk/cantharella.web/src/main/resources/web_en.properties trunk/cantharella.web/src/main/resources/web_fr.properties Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java =================================================================== --- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java 2013-03-04 15:31:05 UTC (rev 172) @@ -36,6 +36,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; +import org.hibernate.LazyInitializationException; import org.hibernate.search.bridge.FieldBridge; import org.hibernate.search.bridge.LuceneOptions; import org.slf4j.Logger; @@ -98,16 +99,21 @@ document.add(new Field("produit.lot.campagne.nom", lot.getCampagne().getNom(), luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector())); - // commons information for all produit - List<LotPersonneDroits> personnesDroits = lot.getPersonnesDroits(); - for (LotPersonneDroits lotPersonneDroit : personnesDroits) { - document.add(new Field("droit.pk2", String.valueOf(lotPersonneDroit.getId().getPk2().getIdPersonne()), - luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector())); + try { + // commons information for all produit + List<LotPersonneDroits> personnesDroits = lot.getPersonnesDroits(); + for (LotPersonneDroits lotPersonneDroit : personnesDroits) { + document.add(new Field("droit.pk2", String.valueOf(lotPersonneDroit.getId().getPk2().getIdPersonne()), + luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector())); + } + List<CampagnePersonneDroits> campagnesDroits = lot.getCampagne().getPersonnesDroits(); + for (CampagnePersonneDroits campagnesDroit : campagnesDroits) { + document.add(new Field("droit.pk2", String.valueOf(campagnesDroit.getId().getPk2().getIdPersonne()), + luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector())); + } + } catch (LazyInitializationException ex) { + // FIXME echatellier 20130304 caused by https://hibernate.onjira.com/browse/HSEARCH-1260 + LOG.warn("Can't index security due to exception", ex); } - List<CampagnePersonneDroits> campagnesDroits = lot.getCampagne().getPersonnesDroits(); - for (CampagnePersonneDroits campagnesDroit : campagnesDroits) { - document.add(new Field("droit.pk2", String.valueOf(campagnesDroit.getId().getPk2().getIdPersonne()), - luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector())); - } } } Added: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java (rev 0) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java 2013-03-04 15:31:05 UTC (rev 172) @@ -0,0 +1,42 @@ +/* + * #%L + * Cantharella :: Service + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below) + * %% + * This program is free software: you can redistribute it and/or modify + * it 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. + * + * This program 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 + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package nc.ird.cantharella.service.exceptions; + +import nc.ird.cantharella.data.exceptions.AbstractException; + +/** + * Exception thrown when file extension is not valid. + * + * @author Eric Chatellier + */ +public class InvalidFileExtensionException extends AbstractException { + + /** + * Constructor + * @param message message + */ + public InvalidFileExtensionException(String message) { + super(message); + } + +} Property changes on: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/exceptions/InvalidFileExtensionException.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/SearchBean.java 2013-03-04 15:31:05 UTC (rev 172) @@ -34,8 +34,8 @@ /** Search query. */ protected String query; - /** Search locale. */ - protected String locale; + /** Search country. */ + protected String country; /** * Constructor. @@ -72,20 +72,20 @@ } /** - * Search locale getter. + * Search country getter. * - * @return locale + * @return country */ - public String getLocale() { - return locale; + public String getCountry() { + return country; } /** - * Search query setter. + * Search country setter. * - * @param locale locale + * @param country country */ - public void setLocale(String locale) { - this.locale = locale; + public void setCountry(String country) { + this.country = country; } } Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java 2013-03-04 15:31:05 UTC (rev 172) @@ -28,6 +28,7 @@ import nc.ird.cantharella.data.exceptions.DataNotFoundException; import nc.ird.cantharella.data.model.Document; import nc.ird.cantharella.data.model.TypeDocument; +import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException; import nc.ird.cantharella.service.utils.normalizers.TypeDocumentNormalizer; import nc.ird.cantharella.service.utils.normalizers.UniqueFieldNormalizer; import nc.ird.cantharella.service.utils.normalizers.utils.Normalize; @@ -108,7 +109,8 @@ * @param clientFileName file name * @param contentType content type * @param content content data + * @throws InvalidFileExtensionException when file name extension is not valid */ @Transactional(readOnly = true) - void addDocumentContent(Document document, String clientFileName, String contentType, byte[] content); + void addDocumentContent(Document document, String clientFileName, String contentType, byte[] content) throws InvalidFileExtensionException; } Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java 2013-03-04 15:31:05 UTC (rev 172) @@ -26,6 +26,8 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; import java.util.List; import javax.imageio.ImageIO; @@ -37,13 +39,16 @@ import nc.ird.cantharella.data.exceptions.UnexpectedException; import nc.ird.cantharella.data.model.Document; import nc.ird.cantharella.data.model.TypeDocument; +import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException; import nc.ird.cantharella.service.services.DocumentService; import nc.ird.cantharella.utils.AssertTools; +import org.apache.commons.io.FilenameUtils; import org.imgscalr.Scalr; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; /** @@ -60,6 +65,19 @@ @Autowired private GenericDao dao; + /** Configuration allowed extension list */ + private Collection<String> documentExtensionAllowed; + + /** + * Configuration allowed extension list setter. + * @param documentExtensionAllowed configuration value + */ + @Value("${document.extension.allowed}") + private void setDcumentExtensionAllowed(String documentExtensionAllowed) { + String[] values = documentExtensionAllowed.split("\\s*,\\s*"); + this.documentExtensionAllowed = Arrays.asList(values); + } + /** {@inheritDoc} */ @Override public List<TypeDocument> listTypeDocuments() { @@ -128,14 +146,23 @@ /** {@inheritDoc} */ @Override - public void addDocumentContent(Document document, String clientFileName, String contentType, byte[] content) { + public void addDocumentContent(Document document, String clientFileName, String contentType, byte[] content) + throws InvalidFileExtensionException { + AssertTools.assertNotEmpty(clientFileName); + String extension = FilenameUtils.getExtension(clientFileName); + extension = extension.toLowerCase(); // check lower case + if (!documentExtensionAllowed.contains(extension)) { + throw new InvalidFileExtensionException("File extension is not valid"); + } + try { // resize original image document.setFileName(clientFileName); document.setFileMimetype(contentType); document.setFileContent(content); + // image detection is based on file mimetype if (contentType.startsWith("image/")) { BufferedImage originalImage = ImageIO.read(new ByteArrayInputStream(content)); BufferedImage thumbImage = Scalr.resize(originalImage, 100, 100); Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java 2013-03-04 15:31:05 UTC (rev 172) @@ -41,10 +41,7 @@ import nc.ird.cantharella.service.services.LotService; import nc.ird.cantharella.utils.AssertTools; -import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.search.FullTextSession; -import org.hibernate.search.Search; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -215,17 +212,12 @@ @Override public void updateLot(Lot lot) throws DataConstraintException { LOG.info("updateLot " + lot.getRef()); - //try { - dao.merge(lot); - - Session session = sessionFactory.getCurrentSession(); - FullTextSession fullTextSession = Search.getFullTextSession(session); - fullTextSession.index(lot); - - /*} catch (DataNotFoundException e) { + try { + dao.update(lot); + } catch (DataNotFoundException e) { LOG.error(e.getMessage(), e); throw new UnexpectedException(e); - }*/ + } } /** {@inheritDoc} */ Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/SearchServiceImpl.java 2013-03-04 15:31:05 UTC (rev 172) @@ -128,8 +128,8 @@ strQuery += search.getQuery(); } strQuery += " "; - if (search.getLocale() != null) { - strQuery += search.getLocale(); + if (search.getCountry() != null) { + strQuery += search.getCountry(); } strQuery = strQuery.trim(); Modified: trunk/cantharella.service/src/main/resources/cantharella.conf =================================================================== --- trunk/cantharella.service/src/main/resources/cantharella.conf 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.service/src/main/resources/cantharella.conf 2013-03-04 15:31:05 UTC (rev 172) @@ -4,7 +4,7 @@ # $Id$ # $HeadURL$ # %% -# Copyright (C) 2009 - 2012 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below) +# Copyright (C) 2009 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below) # %% # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -32,3 +32,6 @@ admin.courriel=ISlog@ird.fr admin.password=password + +# Document's allowed extensions +document.extension.allowed=jpeg,jpg,gif,png,xls,doc,pdf,cdx,mol Modified: trunk/cantharella.service/src/main/resources/service_fr.properties =================================================================== --- trunk/cantharella.service/src/main/resources/service_fr.properties 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.service/src/main/resources/service_fr.properties 2013-03-04 15:31:05 UTC (rev 172) @@ -21,7 +21,7 @@ # #L% ### updatePassword.subject=Cantharella - Nouveau mot de passe -updatePassword.text=Vote mot de passe Cantharella a été regénéré : {0} +updatePassword.text=Votre mot de passe Cantharella a été regénéré : {0} register.subject=Cantharella - Demande de création de compte register.text=Nous avons bien reçu votre demande de création de compte Cantharella. Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebApplicationImpl.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebApplicationImpl.java 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebApplicationImpl.java 2013-03-04 15:31:05 UTC (rev 172) @@ -139,6 +139,10 @@ @Value("${document.maxUploadSize}") protected long documentMaxUploadSize; + /** Configuration document's allowed extensions. */ + @Value("${document.extension.allowed}") + protected String documentExtensionAllowed; + /** * Constructor * @param debug Debug mode @@ -436,4 +440,13 @@ public long getDocumentMaxUploadSize() { return documentMaxUploadSize; } + + /** + * Get document allowed extension. + * + * @return document allowed extension + */ + public String getDocumentExtensionAllowed() { + return documentExtensionAllowed; + } } \ No newline at end of file Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java 2013-03-04 15:31:05 UTC (rev 172) @@ -31,10 +31,11 @@ import nc.ird.cantharella.data.model.TypeDocument; import nc.ird.cantharella.data.model.utils.DocumentAttachable; import nc.ird.cantharella.data.validation.utils.ModelValidator; +import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException; import nc.ird.cantharella.service.services.DocumentService; import nc.ird.cantharella.service.services.PersonneService; +import nc.ird.cantharella.utils.BeanTools.AccessType; import nc.ird.cantharella.utils.CollectionTools; -import nc.ird.cantharella.utils.BeanTools.AccessType; import nc.ird.cantharella.web.config.WebApplicationImpl; import nc.ird.cantharella.web.config.WebContext; import nc.ird.cantharella.web.pages.TemplatePage; @@ -48,6 +49,7 @@ import nc.ird.cantharella.web.utils.panels.SimpleTooltipPanel; import nc.ird.cantharella.web.utils.renderers.MapChoiceRenderer; +import org.apache.commons.lang3.StringUtils; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; @@ -141,13 +143,16 @@ // get configuration long documentMaxUploadSize = ((WebApplicationImpl) getApplication()).getDocumentMaxUploadSize(); + String documentExtensionAllowed = ((WebApplicationImpl) getApplication()).getDocumentExtensionAllowed(); // Initialisation du modèle documentModel = new Model<Document>(document == null ? new Document() : document); - boolean createMode = document == null; + final boolean createMode = document == null; if (createMode) { + documentModel.getObject().setDateCreation(new Date()); documentModel.getObject().setCreateur(getSession().getUtilisateur()); + documentModel.getObject().setEditeur(getSession().getUtilisateur().getOrganisme()); documentModel.getObject().setAjoutePar(getSession().getUtilisateur()); } @@ -245,12 +250,33 @@ // Fichier formView.add(new SimpleTooltipPanel("Document.file.info", new Model<String>(getString("Document.file.info", - Model.of(new Object[] { documentMaxUploadSize }))))); + Model.of(new Object[] { documentMaxUploadSize, documentExtensionAllowed}))))); formView.add(fileUploadField); // Action : création du document Button createButton = new SubmittableButton(ACTION_CREATE, new SubmittableButtonEvents() { @Override + public void onValidate() { + Document document = documentModel.getObject(); + final FileUpload uploadedFile = fileUploadField.getFileUpload(); + if (uploadedFile != null) { + try { + documentService.addDocumentContent(document, uploadedFile.getClientFileName(), uploadedFile + .getContentType(), uploadedFile.getBytes()); + + // if no error + validateModel(); + } catch (InvalidFileExtensionException ex) { + error(getString("ManageDocumentPage.Error.notAllowedExtension")); + } + } else if (StringUtils.isEmpty(document.getFileName())) { + error(getString("ManageDocumentPage.Error.emptyFile")); + } else { + validateModel(); + } + } + + @Override public void onProcess() throws DataConstraintException { Document document = documentModel.getObject(); documentAttachable.addDocument(document); @@ -261,17 +287,6 @@ successNextPage(ACTION_CREATE); redirect(); } - - @Override - public void onValidate() { - final FileUpload uploadedFile = fileUploadField.getFileUpload(); - if (uploadedFile != null) { - Document document = documentModel.getObject(); - documentService.addDocumentContent(document, uploadedFile.getClientFileName(), uploadedFile - .getContentType(), uploadedFile.getBytes()); - } - validateModel(); - } }); createButton.setVisibilityAllowed(createMode); formView.add(createButton); Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.html 2013-03-04 15:31:05 UTC (rev 172) @@ -38,8 +38,8 @@ <input type="text" wicket:id="SearchPage.Query" /> </div> <div class="property"> - <label for="SearchPage.Locale"><wicket:message key="SearchPage.Locale" /></label> - <select id="SearchPage.Locale" wicket:id="SearchPage.Locale" /> + <label for="SearchPage.Country"><wicket:message key="SearchPage.Country" /></label> + <select id="SearchPage.Country" wicket:id="SearchPage.Country" /> </div> <div class="actions"> <input type="submit" wicket:message="value:SearchPage.Search" /> Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/search/SearchPage.java 2013-03-04 15:31:05 UTC (rev 172) @@ -141,7 +141,7 @@ } }; searchForm.add(new TextField<String>("SearchPage.Query", new PropertyModel<String>(queryModel, "query"))); - searchForm.add(new DropDownChoice<String>("SearchPage.Locale", new PropertyModel<String>(queryModel, "locale"), + searchForm.add(new DropDownChoice<String>("SearchPage.Country", new PropertyModel<String>(queryModel, "country"), WebContext.COUNTRY_CODES.get(getSession().getLocale()), new MapChoiceRenderer<String, String>( WebContext.COUNTRIES.get(getSession().getLocale())))); add(searchForm); Modified: trunk/cantharella.web/src/main/resources/web_en.properties =================================================================== --- trunk/cantharella.web/src/main/resources/web_en.properties 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.web/src/main/resources/web_en.properties 2013-03-04 15:31:05 UTC (rev 172) @@ -213,6 +213,8 @@ ManageDocumentPage=Document management ManageDocumentPage.Create.OK=Document will be saved on form submit ManageDocumentPage.Update.OK=Document will be updated on form submit +ManageDocumentPage.Error.notAllowedExtension=File extension not allowed +ManageDocumentPage.Error.emptyFile=File is mandatory ManageDocumentPage.Delete.OK=Document will be deleted on form submit ManageDocumentPage.Form.uploadTooLarge=Document size can't be bigger than ${maxSize} @@ -294,7 +296,7 @@ SearchPage=Search SearchPage.Search=Search SearchPage.Query=Query -SearchPage.Locale=Language +SearchPage.Country=Country SearchPage.Specimens=Specimens SearchPage.Lots=Samples SearchPage.Extractions=Extractions @@ -415,7 +417,7 @@ Document.link=Link Document.type=Type Document.file=File -Document.file.info=File size must be less than ${0}Mb +Document.file.info=File size must be less than ${0}Mb\nFile extension must be in the following : ${1} #BASIC# Actions=Actions Modified: trunk/cantharella.web/src/main/resources/web_fr.properties =================================================================== --- trunk/cantharella.web/src/main/resources/web_fr.properties 2013-03-04 13:33:53 UTC (rev 171) +++ trunk/cantharella.web/src/main/resources/web_fr.properties 2013-03-04 15:31:05 UTC (rev 172) @@ -213,6 +213,8 @@ ManageDocumentPage.Create.OK=L'enregistrement du document s'effectuera à la validation du formulaire ManageDocumentPage.Update.OK=La modification du document s'effectuera à la validation du formulaire ManageDocumentPage.Delete.OK=La suppression du document s'effectuera à la validation du formulaire +ManageDocumentPage.Error.notAllowedExtension=Extension de fichier non autorisée +ManageDocumentPage.Error.emptyFile=Le fichier est requis ManageDocumentPage.Form.uploadTooLarge=La taille du document ne peut pas dépasser ${maxSize} UpdateUtilisateurPage=Gestion du compte @@ -293,7 +295,7 @@ SearchPage=Recherche SearchPage.Search=Rechercher SearchPage.Query=Requête -SearchPage.Locale=Langue +SearchPage.Country=Pays SearchPage.Specimens=Specimens SearchPage.Lots=Lots SearchPage.Extractions=Extractions @@ -413,7 +415,7 @@ Document.link=Lien Document.type=Type Document.file=Fichier -Document.file.info=La taille du fichier doit faire moins de ${0}Mo +Document.file.info=La taille du fichier doit faire moins de ${0}Mo\nL'extension du fichier doit être une des suivantes : ${1} #BASIC# Actions=Actions
participants (1)
-
echatellier@users.forge.codelutin.com