1 package com.dotmarketing.portlets.workflows.action; 2 3 import java.util.Calendar ; 4 import java.util.Date ; 5 import java.util.GregorianCalendar ; 6 7 import javax.portlet.ActionRequest; 8 import javax.portlet.ActionResponse; 9 import javax.portlet.PortletConfig; 10 import javax.portlet.WindowState; 11 import javax.servlet.http.HttpServletRequest ; 12 13 import org.apache.commons.beanutils.BeanUtils; 14 import org.apache.struts.action.ActionForm; 15 import org.apache.struts.action.ActionMapping; 16 17 import com.dotmarketing.db.DotHibernate; 18 import com.dotmarketing.factories.InodeFactory; 19 import com.dotmarketing.portal.struts.DotPortletAction; 20 import com.dotmarketing.portlets.files.model.File; 21 import com.dotmarketing.portlets.workflows.factories.WorkflowsFactory; 22 import com.dotmarketing.portlets.workflows.model.WorkflowComment; 23 import com.dotmarketing.portlets.workflows.model.WorkflowHistory; 24 import com.dotmarketing.portlets.workflows.model.WorkflowTask; 25 import com.dotmarketing.portlets.workflows.struts.WorkflowTaskForm; 26 import com.dotmarketing.util.Logger; 27 import com.dotmarketing.util.UtilMethods; 28 import com.dotmarketing.util.Validator; 29 import com.dotmarketing.util.WebKeys; 30 import com.dotmarketing.util.WebKeys.WorkflowStatuses; 31 import com.liferay.portal.model.User; 32 import com.liferay.portal.util.Constants; 33 import com.liferay.portlet.ActionRequestImpl; 34 import com.liferay.util.servlet.SessionMessages; 35 36 39 40 public class EditWorkflowTaskAction extends DotPortletAction { 41 42 public void processAction(ActionMapping mapping, ActionForm form, 43 PortletConfig config, ActionRequest req, ActionResponse res) 44 throws Exception { 45 46 String cmd = req.getParameter(Constants.CMD); 47 String referer = req.getParameter("referer"); 48 49 Logger.debug(this, "EditWorkflowTaskAction cmd=" + cmd); 50 51 DotHibernate.startTransaction(); 52 53 User user = _getUser(req); 54 55 try { 56 Logger.debug(this, "Calling Retrieve method"); 57 _retrieveWorkflowTask(req, WebKeys.WORKFLOW_TASK_EDIT); 58 } catch (Exception ae) { 59 _handleException(ae, req); 60 return; 61 } 62 63 66 if ((cmd == null) || cmd.equals(Constants.ADD)) { 67 try { 68 Logger.debug(this, "Calling Edit Method"); 69 _addWorkflowTask(req, res, config, form, user); 70 setForward(req, "portlet.ext.workflows.edit_workflow_task"); 71 return; 72 } catch (Exception ae) { 73 _handleException(ae, req); 74 return; 75 } 76 } 77 80 if ((cmd != null) && cmd.equals(Constants.EDIT)) { 81 try { 82 Logger.debug(this, "Calling Edit Method"); 83 _editWorkflowTask(req, res, config, form, user); 84 setForward(req, "portlet.ext.workflows.edit_workflow_task"); 85 return; 86 } catch (Exception ae) { 87 _handleException(ae, req); 88 return; 89 } 90 } 91 94 if ((cmd != null) && cmd.equals(Constants.VIEW)) { 95 try { 96 Logger.debug(this, "Calling View Method"); 97 _viewWorkflowTask(req, res, config, form, user); 98 setForward(req, "portlet.ext.workflows.view_workflow_task"); 99 return; 100 } catch (Exception ae) { 101 _handleException(ae, req); 102 return; 103 } 104 } 105 106 109 if ((cmd != null) && cmd.equals(Constants.SAVE)) { 110 try { 111 112 if (Validator.validate(req, form, mapping)) { 113 Logger.debug(this, "Calling Save Method"); 114 _saveWorkflowTask(req, res, config, form, user); 115 _sendToReferral(req, res, referer); 116 return; 117 } 118 119 } catch (Exception ae) { 120 _handleException(ae, req); 121 } 122 123 } 124 129 else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.CHANGE_STATUS)) { 130 try { 131 Logger.debug(this, "Calling Change Status Method"); 132 _changeWorkflowTaskStatus(req, res, config, form, user); 133 _sendToReferral(req, res, referer); 134 } catch (Exception ae) { 135 _handleException(ae, req); 136 return; 137 } 138 } else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.ADD_COMMENT)) { 139 try { 140 Logger.debug(this, "Calling Add Comment Method"); 141 _addWorkflowComment(req, res, config, form, user); 142 _sendToReferral(req, res, referer); 143 } catch (Exception ae) { 144 _handleException(ae, req); 145 return; 146 } 147 } else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.ADD_FILE)) { 148 try { 149 Logger.debug(this, "Calling Add File Method"); 150 _addFileToWorkflow(req, res, config, form, user); 151 _sendToReferral(req, res, referer); 152 } catch (Exception ae) { 153 _handleException(ae, req); 154 return; 155 } 156 } else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.REMOVE_FILE)) { 157 try { 158 Logger.debug(this, "Calling Remove File Method"); 159 _removeFileToWorkflow(req, res, config, form, user); 160 _sendToReferral(req, res, referer); 161 } catch (Exception ae) { 162 _handleException(ae, req); 163 return; 164 } 165 } else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.ASSIGN_TASK)) { 166 try { 167 Logger.debug(this, "Calling Assign Task Method"); 168 _assignWorkflowTask(req, res, config, form, user); 169 _sendToReferral(req, res, referer); 170 } catch (Exception ae) { 171 _handleException(ae, req); 172 return; 173 } 174 } else 175 176 Logger.debug(this, "Unspecified Action"); 177 178 DotHibernate.commitTransaction(); 179 180 setForward(req, "portlet.ext.workflows.edit_workflow_task"); 181 } 182 183 185 186 187 private void _saveWorkflowTask(ActionRequest req, ActionResponse res, 188 PortletConfig config, ActionForm form, User user) throws Exception { 189 190 Logger.debug(this, "I'm saving the workflowtask"); 191 192 ActionRequestImpl reqImpl = (ActionRequestImpl) req; 194 HttpServletRequest httpReq = reqImpl.getHttpServletRequest(); 195 196 boolean isNew = false; 197 StringBuffer changeHist = new StringBuffer ("Task Edited<br>"); 198 199 WorkflowTaskForm wtForm = (WorkflowTaskForm) form; 200 201 WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT); 203 204 if (task.getTitle()== null || !task.getTitle().equals(wtForm.getTitle())) { 205 changeHist.append("Title: " + task.getTitle() + " -> " + wtForm.getTitle() + "<br>"); 206 task.setTitle(wtForm.getTitle()); 207 } 208 209 if (task.getDescription()== null || !task.getDescription().equals(wtForm.getDescription())) { 210 changeHist.append("Description: " + task.getDescription() + " -> " + wtForm.getDescription() + "<br>"); 211 task.setDescription(wtForm.getDescription()); 212 } 213 214 task.setAssignedTo(wtForm.getAssignedTo()); 215 task.setModDate(new Date ()); 216 if (task.getInode() == 0) { 217 task.setCreationDate(new Date ()); 218 task.setCreatedBy(user.getUserId()); 219 task.setStatus(WorkflowStatuses.OPEN.toString()); 220 isNew = true; 221 } 222 if (!wtForm.isNoDueDate()) { 223 Date dueDate = UtilMethods.htmlToDate((Integer.parseInt(wtForm.getDueDateMonth())+1)+"/"+wtForm.getDueDateDay()+"/"+wtForm.getDueDateYear()); 224 if (task.getDueDate() == null || !task.getDueDate().equals(dueDate)) { 225 changeHist.append("Due Date: " + UtilMethods.dateToHTMLDate(task.getDueDate()) + " -> " + UtilMethods.dateToHTMLDate(dueDate) + "<br>"); 226 task.setDueDate(dueDate); 227 } 228 } else { 229 if (task.getDueDate() != null) { 230 changeHist.append("Due Date: " + UtilMethods.dateToHTMLDate(task.getDueDate()) + " -> <br>"); 231 task.setDueDate(null); 232 } 233 } 234 235 if (task.getInode() == 0) 236 task.setWebasset(wtForm.getWebasset()); 237 238 InodeFactory.saveInode(task); 239 240 if (isNew) { 241 242 _logWorkflowTaskHistory(task, user, "Task Creation"); 243 WorkflowsFactory.sendWorkflowChangeEmails (task, "New Workflow Task Created", _buildWorkflowEmailBody(req, task, "New Task")); 244 245 } else { 246 WorkflowsFactory.sendWorkflowChangeEmails (task, "New Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeHist.toString())); 247 _logWorkflowTaskHistory(task, user, changeHist.toString()); 248 } 249 SessionMessages.add(httpReq, "message", "message.workflow.saved"); 250 251 } 252 253 private void _addWorkflowTask(ActionRequest req, ActionResponse res, 254 PortletConfig config, ActionForm form, User user) throws Exception { 255 256 WorkflowTaskForm taskform = (WorkflowTaskForm) form; 257 258 GregorianCalendar now = new GregorianCalendar (); 259 taskform.setDueDateDay(String.valueOf(now.get(GregorianCalendar.DATE))); 260 taskform.setDueDateMonth(String.valueOf(now.get(GregorianCalendar.MONTH))); 261 taskform.setDueDateYear(String.valueOf(now.get(GregorianCalendar.YEAR))); 262 263 } 264 265 private void _editWorkflowTask(ActionRequest req, ActionResponse res, 266 PortletConfig config, ActionForm form, User user) throws Exception { 267 268 WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT); 269 WorkflowTaskForm taskform = (WorkflowTaskForm) form; 270 BeanUtils.copyProperties(taskform, task); 271 if (task.getDueDate() != null) { 272 Calendar cal = GregorianCalendar.getInstance(); 273 cal.setTime(task.getDueDate()); 274 taskform.setDueDateDay(String.valueOf(cal.get(Calendar.DATE))); 275 taskform.setDueDateMonth(String.valueOf(cal.get(Calendar.MONTH))); 276 taskform.setDueDateYear(String.valueOf(cal.get(Calendar.YEAR))); 277 } else { 278 taskform.setNoDueDate(true); 279 } 280 } 281 282 private void _viewWorkflowTask(ActionRequest req, ActionResponse res, 283 PortletConfig config, ActionForm form, User user) throws Exception { 284 285 WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT); 286 WorkflowTaskForm taskform = (WorkflowTaskForm) form; 287 BeanUtils.copyProperties(taskform, task); 288 if (task.getDueDate() != null) { 289 Calendar cal = GregorianCalendar.getInstance(); 290 cal.setTime(task.getDueDate()); 291 taskform.setDueDateDay(String.valueOf(cal.get(Calendar.DATE))); 292 taskform.setDueDateMonth(String.valueOf(cal.get(Calendar.MONTH))); 293 taskform.setDueDateYear(String.valueOf(cal.get(Calendar.YEAR))); 294 } 295 } 296 297 private void _changeWorkflowTaskStatus(ActionRequest req, ActionResponse res, 298 PortletConfig config, ActionForm form, User user) throws Exception { 299 300 WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT); 301 String oldStatus = task.getStatus(); 302 String newStatus = req.getParameter ("new_status"); 303 task.setStatus(newStatus); 304 305 String changeDesc = "Status changed from " + oldStatus + " -> " + task.getStatus(); 306 _logWorkflowTaskHistory(task, user, changeDesc); 307 WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc)); 308 309 310 } 311 312 private void _addWorkflowComment(ActionRequest req, ActionResponse res, 313 PortletConfig config, ActionForm form, User user) throws Exception { 314 315 WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT); 316 String comment = req.getParameter ("comment"); 317 WorkflowComment taskComment = new WorkflowComment (); 318 taskComment.setComment(comment); 319 taskComment.setCreationDate(new Date ()); 320 taskComment.setPostedBy(user.getUserId()); 321 InodeFactory.saveInode(taskComment); 322 task.addChild(taskComment); 323 324 String changeDesc = "Comment added: <br>" + comment; 325 _logWorkflowTaskHistory(task, user, changeDesc); 326 327 WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc)); 328 329 } 330 331 private void _addFileToWorkflow(ActionRequest req, ActionResponse res, 332 PortletConfig config, ActionForm form, User user) throws Exception { 333 334 WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT); 335 String fileToAttachInode = req.getParameter ("file_inode"); 336 File fileToAttach = (File) InodeFactory.getInode(fileToAttachInode, File.class); 337 if (fileToAttach.getInode() > 0) { 338 task.addChild(fileToAttach); 339 String changeDesc = "File Added: " + fileToAttach.getFileName(); 340 _logWorkflowTaskHistory(task, user, changeDesc); 341 WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc)); 342 343 } 344 345 } 346 347 private void _removeFileToWorkflow(ActionRequest req, ActionResponse res, 348 PortletConfig config, ActionForm form, User user) throws Exception { 349 350 WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT); 351 String fileToAttachInode = req.getParameter ("file_inode"); 352 File fileToAttach = (File) InodeFactory.getInode(fileToAttachInode, File.class); 353 if (fileToAttach.getInode() > 0) { 354 task.deleteChild(fileToAttach); 355 String changeDesc = "File Removed: " + fileToAttach.getFileName(); 356 _logWorkflowTaskHistory(task, user, changeDesc); 357 WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc)); 358 359 } 360 361 } 362 363 private void _assignWorkflowTask(ActionRequest req, ActionResponse res, 364 PortletConfig config, ActionForm form, User user) throws Exception { 365 366 WorkflowTask task = (WorkflowTask) req.getAttribute(WebKeys.WORKFLOW_TASK_EDIT); 367 String lastUser = task.getAssignedTo(); 368 String newUserId = req.getParameter ("user_id"); 369 task.setAssignedTo(newUserId); 370 InodeFactory.saveInode(task); 371 if (UtilMethods.isSet(lastUser)){ 372 String changeDesc = "Task Assigned from " + UtilMethods.getUserFullName(lastUser) + 373 " to " + UtilMethods.getUserFullName(task.getAssignedTo()); 374 _logWorkflowTaskHistory(task, user, changeDesc); 375 WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc)); 376 } else { 377 String changeDesc = "Task Assigned to " + UtilMethods.getUserFullName(task.getAssignedTo()); 378 _logWorkflowTaskHistory(task, user, changeDesc); 379 WorkflowsFactory.sendWorkflowChangeEmails (task, "Workflow Task Changed", _buildWorkflowEmailBody(req, task, changeDesc)); 380 } 381 } 382 383 private void _retrieveWorkflowTask(ActionRequest req, String webkey) throws Exception { 384 WorkflowTask webAsset = (WorkflowTask) InodeFactory.getInode(req 385 .getParameter("inode"), WorkflowTask.class); 386 req.setAttribute(webkey, webAsset); 387 } 388 389 private void _logWorkflowTaskHistory (WorkflowTask task, User user, String history) { 390 WorkflowHistory hist = new WorkflowHistory (); 391 hist.setChangeDescription(history); 392 hist.setCreationDate(new Date ()); 393 hist.setMadeBy(user.getUserId()); 394 InodeFactory.saveInode(hist); 395 task.addChild(hist); 396 } 397 398 private String _buildWorkflowEmailBody (ActionRequest req, WorkflowTask task, String change) { 399 400 java.util.Map params = new java.util.HashMap (); 401 params.put("struts_action", new String [] { "/ext/workflows/edit_workflow_task" }); 402 params.put("cmd", new String [] { "view" } ); 403 params.put("inode", new String [] { String.valueOf(task.getInode()) }); 404 405 String serverName = req.getServerName(); 406 407 String ref = com.dotmarketing.util.PortletURLUtil.getActionURL(req, WindowState.MAXIMIZED 408 .toString(), params); 409 410 String fullLink = "http://" + serverName + ref; 411 412 StringBuffer buffer = new StringBuffer (); 413 buffer.append( 414 "<table align=\"center\" border=\"1\" width=\"50%\">" + 415 " <tr>" + 416 " <td align=\"center\" colspan=\"2\"><b>" + change + "</b></td>" + 417 " </tr>" + 418 " <tr>" + 419 " <td width=\"15%\" nowrap><b>Task</b></td><td><a HREF=\"" + fullLink + "\">" + task.getTitle() + "</a></td>" + 420 " </tr>" + 421 " <tr>" + 422 " <td nowrap><b>Created</b></td><td>" + UtilMethods.dateToHTMLDate(task.getCreationDate()) + " " + UtilMethods.dateToHTMLTime(task.getCreationDate()) + "</td>" + 423 " </tr>" + 424 " <tr>" + 425 " <td nowrap><b>Author</b></td><td>" + UtilMethods.getUserFullName(task.getCreatedBy()) + "</td>" + 426 " </tr>" + 427 " <tr>" + 428 " <td nowrap><b>Modified</b></td><td>" + UtilMethods.dateToHTMLDate(task.getModDate()) + " " + UtilMethods.dateToHTMLTime(task.getModDate()) + "</td>" + 429 " </tr>" + 430 " <tr>" + 431 " <td nowrap><b>Asignee</b></td><td>" + UtilMethods.getUserFullName(task.getAssignedTo()) + "</td>" + 432 " </tr>" + 433 " <tr>" + 434 " <td nowrap><b>Due Date</b></td><td>" + UtilMethods.dateToHTMLDate(task.getDueDate()) + "</td>" + 435 " </tr>" + 436 " <tr>" + 437 " <td nowrap><b>Status</b></td><td>" + task.getStatus() + "</td>" + 438 " </tr>" + 439 "</table>" 440 ); 441 442 return buffer.toString(); 443 } 444 445 } | Popular Tags |