diff --git a/pom.xml b/pom.xml index 7a65143c..b58ec43a 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ lutece-global-pom fr.paris.lutece.tools - 5.2.1 + 6.0.0 4.0.0 @@ -36,7 +36,7 @@ fr.paris.lutece lutece-core - [7.0.1,) + [7.0.6-SNAPSHOT,) lutece-core diff --git a/src/java/fr/paris/lutece/plugins/genericattributes/business/Field.java b/src/java/fr/paris/lutece/plugins/genericattributes/business/Field.java index e5d17053..12e71fe4 100644 --- a/src/java/fr/paris/lutece/plugins/genericattributes/business/Field.java +++ b/src/java/fr/paris/lutece/plugins/genericattributes/business/Field.java @@ -35,7 +35,6 @@ import fr.paris.lutece.plugins.referencelist.business.ReferenceItem; import fr.paris.lutece.portal.business.regularexpression.RegularExpression; - import java.io.Serializable; import java.util.Date; diff --git a/src/java/fr/paris/lutece/plugins/genericattributes/business/FieldDAO.java b/src/java/fr/paris/lutece/plugins/genericattributes/business/FieldDAO.java index 6427a2cb..bee4b447 100644 --- a/src/java/fr/paris/lutece/plugins/genericattributes/business/FieldDAO.java +++ b/src/java/fr/paris/lutece/plugins/genericattributes/business/FieldDAO.java @@ -59,7 +59,7 @@ public final class FieldDAO implements IFieldDAO private static final String SQL_QUERY_DELETE = "DELETE FROM genatt_field WHERE id_field = ? "; private static final String SQL_QUERY_INSERT_VERIF_BY = "INSERT INTO genatt_verify_by(id_field,id_expression) VALUES(?,?) "; private static final String SQL_QUERY_DELETE_VERIF_BY = "DELETE FROM genatt_verify_by WHERE id_field = ? and id_expression= ?"; - private static final String SQL_QUERY_UPDATE = "UPDATE genatt_field SET " + private static final String SQL_QUERY_UPDATE = "UPDATE genatt_field SET " + "id_field=?,id_entry=?,code=?,title=?,value=?,default_value=?,pos=?,value_type_date=?,no_display_title=?,comment=? WHERE id_field = ?"; private static final String SQL_QUERY_SELECT_FIELD_BY_ID_ENTRY = SQL_QUERY_SELECT_ALL + " WHERE id_entry = ? ORDER BY pos"; private static final String SQL_QUERY_NEW_POSITION = "SELECT MAX(pos)" + " FROM genatt_field "; @@ -113,6 +113,8 @@ public synchronized int insert( Field field, Plugin plugin ) daoUtil.setDate( nIndex++, ( field.getValueTypeDate( ) == null ) ? null : new Date( field.getValueTypeDate( ).getTime( ) ) ); daoUtil.setBoolean( nIndex++, field.isNoDisplayTitle( ) ); daoUtil.setString( nIndex++, field.getComment( ) ); + + daoUtil.executeUpdate( ); if ( daoUtil.nextGeneratedKey( ) ) { diff --git a/src/java/fr/paris/lutece/plugins/genericattributes/service/ResponseImageResourceProvider.java b/src/java/fr/paris/lutece/plugins/genericattributes/service/ResponseImageResourceProvider.java index e428c1e7..1929ce06 100644 --- a/src/java/fr/paris/lutece/plugins/genericattributes/service/ResponseImageResourceProvider.java +++ b/src/java/fr/paris/lutece/plugins/genericattributes/service/ResponseImageResourceProvider.java @@ -33,6 +33,8 @@ */ package fr.paris.lutece.plugins.genericattributes.service; +import org.apache.commons.fileupload.FileItem; + import fr.paris.lutece.plugins.genericattributes.business.Response; import fr.paris.lutece.plugins.genericattributes.business.ResponseHome; import fr.paris.lutece.portal.business.file.File; @@ -41,6 +43,7 @@ import fr.paris.lutece.portal.business.physicalfile.PhysicalFileHome; import fr.paris.lutece.portal.service.image.ImageResource; import fr.paris.lutece.portal.service.image.ImageResourceProvider; +import fr.paris.lutece.portal.service.util.AppException; import fr.paris.lutece.util.file.FileUtil; import fr.paris.lutece.util.url.UrlItem; @@ -99,4 +102,10 @@ public static String getUrlDownloadImageResponse( int nIdResponse ) return urlItem.getUrl( ); } + + @Override + public String addImageResource( FileItem fileItem ) + { + throw new AppException( "Not implemented yet." ); + } } diff --git a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeCheckBox.java b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeCheckBox.java index da843a92..55b7b0bf 100644 --- a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeCheckBox.java +++ b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeCheckBox.java @@ -39,12 +39,17 @@ import fr.paris.lutece.plugins.genericattributes.business.MandatoryError; import fr.paris.lutece.plugins.genericattributes.business.Response; import fr.paris.lutece.plugins.genericattributes.util.GenericAttributesUtils; +import fr.paris.lutece.portal.service.fileimage.FileImagePublicService; import fr.paris.lutece.portal.service.i18n.I18nService; +import fr.paris.lutece.portal.service.image.ImageResourceManager; import fr.paris.lutece.portal.service.message.AdminMessage; import fr.paris.lutece.portal.service.message.AdminMessageService; +import fr.paris.lutece.portal.service.util.AppException; import fr.paris.lutece.portal.service.util.AppLogService; +import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.fileupload.FileItem; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; @@ -60,6 +65,7 @@ */ public abstract class AbstractEntryTypeCheckBox extends AbstractEntryTypeChoice { + private static final String MESSAGE_ERROR_FILE_IMAGE = "Error importing file."; /** * {@inheritDoc} */ @@ -67,6 +73,8 @@ public abstract class AbstractEntryTypeCheckBox extends AbstractEntryTypeChoice public String getRequestData( Entry entry, HttpServletRequest request, Locale locale ) { initCommonRequestData( entry, request ); + FileImagePublicService fileImagePublicService = FileImagePublicService.getInstance( ); + fileImagePublicService.register(); String strCode = request.getParameter( PARAMETER_ENTRY_CODE ); String strTitle = request.getParameter( PARAMETER_TITLE ); String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null ) ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim( ) : null; @@ -76,6 +84,8 @@ public String getRequestData( Entry entry, HttpServletRequest request, Locale lo String strFieldInLine = request.getParameter( PARAMETER_FIELD_IN_LINE ); String strCSSClass = request.getParameter( PARAMETER_CSS_CLASS ); String strOnlyDisplayInBack = request.getParameter( PARAMETER_ONLY_DISPLAY_IN_BACK ); + MultipartHttpServletRequest multipartRequest = ( MultipartHttpServletRequest ) request; + FileItem imageFileItem = multipartRequest.getFile( PARAMETER_ILLUSTRATION_IMAGE ); int nFieldInLine = -1; @@ -101,6 +111,21 @@ public String getRequestData( Entry entry, HttpServletRequest request, Locale lo return AdminMessageService.getMessageUrl( request, strFieldError, ERROR_FIELD_REF_LIST, AdminMessage.TYPE_STOP ); } + if ( imageFileItem != null && imageFileItem.getSize( ) > 0 ) + { + try + { + String strFileStoreKey = ImageResourceManager.addImageResource( fileImagePublicService.IMAGE_RESOURCE_TYPE_ID, imageFileItem); + GenericAttributesUtils.createOrUpdateField( entry, FIELD_ILLUSTRATION_IMAGE, null, strFileStoreKey ); + } + catch ( Exception e ) + { + AppLogService.error( MESSAGE_ERROR_FILE_IMAGE, e ); + throw new AppException( MESSAGE_ERROR_FILE_IMAGE, e ); + } + } + + entry.setCode( strCode ); entry.setTitle( strTitle ); entry.setHelpMessage( strHelpMessage ); diff --git a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeImage.java b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeImage.java index 6b88ded1..451753bc 100644 --- a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeImage.java +++ b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeImage.java @@ -59,7 +59,7 @@ public GenericAttributeError getResponseData( Entry entry, HttpServletRequest re if ( !entry.isMandatory( ) ) { - String sourceBase = request.getParameter( ( IEntryTypeService.PREFIX_ATTRIBUTE + entry.getIdEntry( ) ) ); + String sourceBase = request.getParameter( ( PREFIX_ATTRIBUTE + entry.getIdEntry( ) ) ); Response response = getResponseFromImage( sourceBase, entry, false ); response.setIterationNumber( getResponseIterationValue( request ) ); diff --git a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeRadioButton.java b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeRadioButton.java index fc354d83..719720e1 100644 --- a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeRadioButton.java +++ b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeRadioButton.java @@ -39,11 +39,16 @@ import fr.paris.lutece.plugins.genericattributes.business.MandatoryError; import fr.paris.lutece.plugins.genericattributes.business.Response; import fr.paris.lutece.plugins.genericattributes.util.GenericAttributesUtils; +import fr.paris.lutece.portal.service.fileimage.FileImagePublicService; import fr.paris.lutece.portal.service.i18n.I18nService; +import fr.paris.lutece.portal.service.image.ImageResourceManager; import fr.paris.lutece.portal.service.message.AdminMessage; import fr.paris.lutece.portal.service.message.AdminMessageService; +import fr.paris.lutece.portal.service.util.AppException; import fr.paris.lutece.portal.service.util.AppLogService; +import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest; +import org.apache.commons.fileupload.FileItem; import org.apache.commons.lang3.StringUtils; import java.util.List; @@ -56,6 +61,7 @@ */ public abstract class AbstractEntryTypeRadioButton extends AbstractEntryTypeChoice { + private static final String MESSAGE_ERROR_FILE_IMAGE = "Error importing file."; /** * {@inheritDoc} */ @@ -63,6 +69,8 @@ public abstract class AbstractEntryTypeRadioButton extends AbstractEntryTypeChoi public String getRequestData( Entry entry, HttpServletRequest request, Locale locale ) { initCommonRequestData( entry, request ); + FileImagePublicService fileImagePublicService = FileImagePublicService.getInstance( ); + fileImagePublicService.register(); String strTitle = request.getParameter( PARAMETER_TITLE ); String strCode = request.getParameter( PARAMETER_ENTRY_CODE ); String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null ) ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim( ) : null; @@ -71,6 +79,8 @@ public String getRequestData( Entry entry, HttpServletRequest request, Locale lo String strFieldInLine = request.getParameter( PARAMETER_FIELD_IN_LINE ); String strCSSClass = request.getParameter( PARAMETER_CSS_CLASS ); String strOnlyDisplayInBack = request.getParameter( PARAMETER_ONLY_DISPLAY_IN_BACK ); + MultipartHttpServletRequest multipartRequest = ( MultipartHttpServletRequest ) request; + FileItem imageFileItem = multipartRequest.getFile( PARAMETER_ILLUSTRATION_IMAGE ); int nFieldInLine = -1; @@ -96,6 +106,19 @@ public String getRequestData( Entry entry, HttpServletRequest request, Locale lo return AdminMessageService.getMessageUrl( request, strFieldError, ERROR_FIELD_REF_LIST, AdminMessage.TYPE_STOP ); } + if ( imageFileItem != null && imageFileItem.getSize( ) > 0 ) + { + try + { + String strFileStoreKey = ImageResourceManager.addImageResource( fileImagePublicService.IMAGE_RESOURCE_TYPE_ID, imageFileItem); + GenericAttributesUtils.createOrUpdateField( entry, FIELD_ILLUSTRATION_IMAGE, null, strFileStoreKey ); + } + catch ( Exception e ) + { + AppLogService.error( MESSAGE_ERROR_FILE_IMAGE, e ); + throw new AppException( MESSAGE_ERROR_FILE_IMAGE, e ); + } + } entry.setCode( strCode ); entry.setTitle( strTitle ); entry.setHelpMessage( strHelpMessage ); diff --git a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeText.java b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeText.java index 2bbecb20..31acf49f 100644 --- a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeText.java +++ b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/AbstractEntryTypeText.java @@ -37,8 +37,8 @@ import java.util.Locale; import javax.servlet.http.HttpServletRequest; - import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.fileupload.FileItem; import org.apache.commons.lang3.StringUtils; import fr.paris.lutece.plugins.genericattributes.business.Entry; @@ -48,19 +48,25 @@ import fr.paris.lutece.plugins.genericattributes.business.Response; import fr.paris.lutece.plugins.genericattributes.util.GenericAttributesUtils; import fr.paris.lutece.portal.business.regularexpression.RegularExpression; +import fr.paris.lutece.portal.service.fileimage.FileImagePublicService; import fr.paris.lutece.portal.service.i18n.I18nService; +import fr.paris.lutece.portal.service.image.ImageResourceManager; import fr.paris.lutece.portal.service.message.AdminMessage; import fr.paris.lutece.portal.service.message.AdminMessageService; import fr.paris.lutece.portal.service.plugin.Plugin; import fr.paris.lutece.portal.service.regularexpression.RegularExpressionService; +import fr.paris.lutece.portal.service.util.AppException; +import fr.paris.lutece.portal.service.util.AppLogService; import fr.paris.lutece.util.ReferenceList; import fr.paris.lutece.util.string.StringUtil; +import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest; /** * Abstract entry type for text */ public abstract class AbstractEntryTypeText extends EntryTypeService { + private static final String MESSAGE_ERROR_FILE_IMAGE = "Error importing file."; /** * {@inheritDoc} */ @@ -68,6 +74,8 @@ public abstract class AbstractEntryTypeText extends EntryTypeService public String getRequestData( Entry entry, HttpServletRequest request, Locale locale ) { initCommonRequestData( entry, request ); + FileImagePublicService fileImagePublicService = FileImagePublicService.getInstance( ); + fileImagePublicService.init(); String strCode = request.getParameter( PARAMETER_ENTRY_CODE ); String strTitle = request.getParameter( PARAMETER_TITLE ); String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null ) ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim( ) : null; @@ -84,6 +92,8 @@ public String getRequestData( Entry entry, HttpServletRequest request, Locale lo String strErrorMessage = request.getParameter( PARAMETER_ERROR_MESSAGE ); String strIndexed = request.getParameter( PARAMETER_INDEXED ); String strPlaceholder = request.getParameter( PARAMETER_PLACEHOLDER ); + MultipartHttpServletRequest multipartRequest = ( MultipartHttpServletRequest ) request; + FileItem imageFileItem = multipartRequest.getFile( PARAMETER_ILLUSTRATION_IMAGE ); int nWidth = -1; int nMaxSizeEnter = -1; @@ -153,11 +163,25 @@ public String getRequestData( Entry entry, HttpServletRequest request, Locale lo entry.setErrorMessage( strErrorMessage ); entry.setCode( strCode ); + if ( imageFileItem != null && imageFileItem.getSize( ) > 0 ) + { + try + { + String strFileStoreKey = ImageResourceManager.addImageResource( fileImagePublicService.IMAGE_RESOURCE_TYPE_ID, imageFileItem); + GenericAttributesUtils.createOrUpdateField( entry, FIELD_ILLUSTRATION_IMAGE, imageFileItem.getName( ), strFileStoreKey ); + } + catch ( Exception e ) + { + AppLogService.error( MESSAGE_ERROR_FILE_IMAGE, e ); + throw new AppException( MESSAGE_ERROR_FILE_IMAGE, e ); + } + } + GenericAttributesUtils.createOrUpdateField( entry, FIELD_TEXT_CONF, null, strValue ); GenericAttributesUtils.createOrUpdateField( entry, FIELD_WIDTH, null, String.valueOf( nWidth ) ); GenericAttributesUtils.createOrUpdateField( entry, FIELD_MAX_SIZE, null, String.valueOf( nMaxSizeEnter ) ); GenericAttributesUtils.createOrUpdateField( entry, FIELD_PLACEHOLDER, null, strPlaceholder != null ? strPlaceholder : StringUtils.EMPTY ); - + entry.setMandatory( strMandatory != null ); entry.setOnlyDisplayInBack( strOnlyDisplayInBack != null ); diff --git a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/IEntryTypeService.java b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/IEntryTypeService.java index ff7284cd..b3b12bf8 100644 --- a/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/IEntryTypeService.java +++ b/src/java/fr/paris/lutece/plugins/genericattributes/service/entrytype/IEntryTypeService.java @@ -94,6 +94,7 @@ public interface IEntryTypeService String PARAMETER_USE_REF_LIST = "use_ref_list"; String PARAMETER_REF_LIST_SELECT = "select_ref_list"; String PARAMETER_PLACEHOLDER = "placeholder"; + String PARAMETER_ILLUSTRATION_IMAGE = "illustration_image"; // Fields codes String FIELD_DATE_VALUE = "default_date_value"; @@ -137,6 +138,7 @@ public interface IEntryTypeService String FIELD_USE_REF_LIST = "use_ref_list"; String FIELD_ANONYMIZABLE = "anonymizable"; String FIELD_PLACEHOLDER = "placeholder"; + String FIELD_ILLUSTRATION_IMAGE = "illustration_image"; // attribute String ATTRIBUTE_RESPONSE_ITERATION_NUMBER = "response_iteration_number";