1 package fr.paris.lutece.plugins.workflow.modules.fillingdirectory.service;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Locale;
6 import java.util.Map;
7
8 import javax.inject.Inject;
9 import javax.inject.Named;
10 import javax.servlet.http.HttpServletRequest;
11
12 import org.apache.commons.lang.StringUtils;
13
14 import fr.paris.lutece.plugins.directory.business.Directory;
15 import fr.paris.lutece.plugins.directory.business.Record;
16 import fr.paris.lutece.plugins.directory.business.RecordField;
17 import fr.paris.lutece.plugins.directory.service.DirectoryPlugin;
18 import fr.paris.lutece.plugins.directory.service.DirectoryResourceIdService;
19 import fr.paris.lutece.plugins.directory.service.record.IRecordService;
20 import fr.paris.lutece.plugins.directory.service.upload.DirectoryAsynchronousUploadHandler;
21 import fr.paris.lutece.plugins.directory.utils.DirectoryErrorException;
22 import fr.paris.lutece.plugins.directory.utils.DirectoryUtils;
23 import fr.paris.lutece.plugins.workflowcore.service.config.ITaskConfigService;
24 import fr.paris.lutece.plugins.workflowcore.service.task.SimpleTask;
25 import fr.paris.lutece.portal.service.admin.AccessDeniedException;
26 import fr.paris.lutece.portal.service.admin.AdminUserService;
27 import fr.paris.lutece.portal.service.message.AdminMessage;
28 import fr.paris.lutece.portal.service.message.AdminMessageService;
29 import fr.paris.lutece.portal.service.plugin.Plugin;
30 import fr.paris.lutece.portal.service.plugin.PluginService;
31 import fr.paris.lutece.portal.service.rbac.RBACService;
32 import fr.paris.lutece.portal.service.util.AppLogService;
33 import fr.paris.lutece.portal.service.util.AppPathService;
34
35
36
37
38
39
40 public class TaskHelpFilling extends SimpleTask
41 {
42
43 private static final String MESSAGE_ACCESS_DENIED = "Acces denied";
44 private static final String PARAMETER_CANCEL = "cancel";
45 private static final String MESSAGE_DIRECTORY_ERROR_MANDATORY_FIELD = DirectoryUtils.MESSAGE_DIRECTORY_ERROR_MANDATORY_FIELD;
46 private static final String MESSAGE_DIRECTORY_ERROR = DirectoryUtils.MESSAGE_DIRECTORY_ERROR;
47 private static final String JSP_CREATE_DIRECTORY_RECORD = "jsp/admin/plugins/directory/CreateDirectoryRecord.jsp";
48 private static final String PARAMETER_ID_DIRECTORY = DirectoryUtils.PARAMETER_ID_DIRECTORY;
49 private static final String PARAMETER_ID_DIRECTORY_RECORD = "id_directory_record";
50
51
52 private static final String MARK_POPUP_ACTIVE = "popup_active";
53 private static final String MARK_TRUE = "true";
54 private static final String MARK_CONSTANT_STR_NULL = "";
55
56
57 private boolean _bIn;
58
59 @Inject
60 @Named( TaskHelpFillingConfigService.BEAN_SERVICE )
61 private ITaskConfigService _taskHelpFillingConfigService;
62 @Inject
63 private IRecordService _recordService ;
64
65
66
67
68 @Override
69 public void processTask( int nIdResourceHistory, HttpServletRequest request, Locale locale )
70 {
71 String strIdDirectoryRecord = request.getParameter( PARAMETER_ID_DIRECTORY_RECORD );
72 String strPopupActive = request.getParameter( MARK_POPUP_ACTIVE ) == null ? String.valueOf( MARK_CONSTANT_STR_NULL ) : request.getParameter( MARK_POPUP_ACTIVE ) ;
73 int nIdDirectoryRecord = DirectoryUtils.convertStringToInt( strIdDirectoryRecord );
74
75 if ( !( strPopupActive.equals( MARK_TRUE ) ) && !_bIn )
76 {
77 _bIn = true;
78 Plugin pluginDirectory = PluginService.getPlugin( DirectoryPlugin.PLUGIN_NAME );
79
80 Record record = _recordService.findByPrimaryKey( nIdDirectoryRecord, pluginDirectory );
81
82 record.setListRecordField( record.getListRecordField( ) == null? new ArrayList<RecordField>( ) :record.getListRecordField( ) );
83
84 if ( ( record == null ) ||
85 !RBACService.isAuthorized( Directory.RESOURCE_TYPE,
86 record.getDirectory( ).getIdDirectory( ) + DirectoryUtils.EMPTY_STRING,
87 DirectoryResourceIdService.PERMISSION_MODIFY_RECORD, AdminUserService.getAdminUser( request ) ) )
88 {
89 try
90 {
91 throw new AccessDeniedException( MESSAGE_ACCESS_DENIED );
92
93 }
94 catch ( AccessDeniedException e )
95 {
96 AppLogService.error( e );
97 }
98 }
99
100 if ( request.getParameter( PARAMETER_CANCEL ) == null )
101 {
102 String strRedirectUrl = getDirectoryRecordData( record, request,locale, pluginDirectory );
103
104 if ( StringUtils.isNotBlank( strRedirectUrl ) )
105 {
106 try
107 {
108 throw new AccessDeniedException( MESSAGE_ACCESS_DENIED );
109 }
110 catch ( AccessDeniedException e )
111 {
112 AppLogService.error( e );
113 }
114 }
115 else
116 {
117 try
118 {
119 _recordService.updateWidthRecordField( record, pluginDirectory );
120 }
121 catch ( Exception ex )
122 {
123
124 AppLogService.error( ex.getMessage( ) + " when updating Record " + record.getIdRecord( ), ex );
125 }
126 }
127 }
128 }
129 }
130
131
132
133
134
135
136
137
138
139 private String getDirectoryRecordData( Record record, HttpServletRequest request, Locale locale, Plugin plugin )
140 {
141
142 String strUploadAction = DirectoryAsynchronousUploadHandler.getHandler( ).getUploadAction( request );
143
144 try
145 {
146 DirectoryUtils.getDirectoryRecordData( request, record, plugin , locale );
147 }
148 catch ( DirectoryErrorException error )
149 {
150
151 if ( StringUtils.isBlank( strUploadAction ) )
152 {
153 String strErrorMessage = DirectoryUtils.EMPTY_STRING;
154
155 if ( error.isMandatoryError( ) )
156 {
157 Object[] tabRequiredFields = { error.getTitleField( ) };
158 strErrorMessage = AdminMessageService.getMessageUrl( request,
159 MESSAGE_DIRECTORY_ERROR_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
160 }
161 else
162 {
163 Object[] tabRequiredFields = { error.getTitleField( ), error.getErrorMessage( ) };
164 strErrorMessage = AdminMessageService.getMessageUrl( request, MESSAGE_DIRECTORY_ERROR,
165 tabRequiredFields, AdminMessage.TYPE_STOP );
166 }
167
168 return strErrorMessage;
169 }
170 }
171
172
173
174 if ( StringUtils.isNotBlank( strUploadAction ) )
175 {
176 Map<String, List<RecordField>> mapListRecordFields = DirectoryUtils.buildMapIdEntryListRecordField( record );
177
178
179 try
180 {
181 DirectoryAsynchronousUploadHandler.getHandler( )
182 .doUploadAction( request, strUploadAction, mapListRecordFields,
183 record, plugin );
184 }
185 catch ( DirectoryErrorException error )
186 {
187 String strErrorMessage = DirectoryUtils.EMPTY_STRING;
188
189 if ( error.isMandatoryError( ) )
190 {
191 Object[] tabRequiredFields = { error.getTitleField( ) };
192 strErrorMessage = AdminMessageService.getMessageUrl( request,
193 MESSAGE_DIRECTORY_ERROR_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
194 }
195 else
196 {
197 Object[] tabRequiredFields = { error.getTitleField( ), error.getErrorMessage( ) };
198 strErrorMessage = AdminMessageService.getMessageUrl( request, MESSAGE_DIRECTORY_ERROR,
199 tabRequiredFields, AdminMessage.TYPE_STOP );
200 }
201
202 return strErrorMessage;
203 }
204
205
206 request.getSession( )
207 .setAttribute( DirectoryUtils.SESSION_DIRECTORY_LIST_SUBMITTED_RECORD_FIELDS, mapListRecordFields );
208
209 return getJspCreateDirectoryRecord( request, record.getDirectory( ).getIdDirectory( ) );
210 }
211
212 return StringUtils.EMPTY;
213
214 }
215
216
217
218
219
220
221 private String getJspCreateDirectoryRecord( HttpServletRequest request, int nIdDirectory )
222 {
223 return AppPathService.getBaseUrl( request ) + JSP_CREATE_DIRECTORY_RECORD + "?" + PARAMETER_ID_DIRECTORY + "=" +
224 nIdDirectory;
225 }
226
227
228
229 @Override
230 public void doRemoveConfig( )
231 {
232 _taskHelpFillingConfigService.remove( this.getId( ) );
233 }
234
235
236
237 @Override
238 public String getTitle( Locale locale )
239 {
240
241 return StringUtils.EMPTY;
242 }
243
244 }