/** * Create a work flow task for the new content created and send a email to the corresponding role * moderator users * * @param contentlet The content * @param user The user that add the content * @param moderatorRole The role to assign the work flow * @throws DotDataException * @throws DotDataException */ public static void createWorkFlowTask(Contentlet contentlet, String userId, String moderatorRole) throws DotDataException { User user = getUserFromId(userId); StringBuffer changeHist = new StringBuffer("Task Added<br>"); WorkflowTask task = new WorkflowTask(); changeHist.append("Title: " + UtilHTML.escapeHTMLSpecialChars(contentlet.getTitle()) + "<br>"); task.setTitle( "A new content titled: " + UtilHTML.escapeHTMLSpecialChars(contentlet.getTitle()) + " has been posted."); task.setDescription( "A new content titled \"" + UtilHTML.escapeHTMLSpecialChars(contentlet.getTitle().trim()) + "\" has been posted by " + UtilHTML.escapeHTMLSpecialChars(user.getFullName()) + " (" + user.getEmailAddress() + ")"); changeHist.append( "Description: " + UtilHTML.escapeHTMLSpecialChars(task.getDescription()) + "<br>"); Role role = roleAPI.loadRoleByKey(moderatorRole); task.setBelongsTo(role.getId()); task.setAssignedTo("Nobody"); task.setModDate(new Date()); task.setCreationDate(new Date()); task.setCreatedBy(user.getUserId()); task.setStatus(WorkflowStatuses.OPEN.toString()); changeHist.append("Due Date: " + UtilMethods.dateToHTMLDate(task.getDueDate()) + " -> <br>"); task.setDueDate(null); task.setWebasset(contentlet.getInode()); // HibernateUtil.saveOrUpdate(task); // Save the work flow comment WorkflowComment taskComment = new WorkflowComment(); taskComment.setComment(task.getDescription()); taskComment.setCreationDate(new Date()); taskComment.setPostedBy(user.getUserId()); HibernateUtil.saveOrUpdate(taskComment); relAPI.addRelationship(task.getInode(), taskComment.getInode(), "child"); // Save the work flow history WorkflowHistory hist = new WorkflowHistory(); hist.setChangeDescription("Task Creation"); hist.setCreationDate(new Date()); hist.setMadeBy(user.getUserId()); HibernateUtil.saveOrUpdate(hist); relAPI.addRelationship(task.getInode(), hist.getInode(), "child"); // WorkflowEmailUtil.sendWorkflowChangeEmails (task, "New user content has been submitted", "New // Task", null); }
@SuppressWarnings("unchecked") public static Contentlet createContent( Structure st, ArrayList<Category> cats, String userId, List<String> parametersName, List<String[]> values, String options, List<Map<String, Object>> fileParameters, boolean autoPublish, Host formHost, String moderatorRole) throws DotContentletStateException, DotDataException, DotSecurityException { Contentlet contentlet = null; /*try {*/ /** Get the current user */ User user = getUserFromId(userId); /** Content inherit structure permissions */ List<Permission> permissionList = perAPI.getPermissions(st); /** Set the content values */ contentlet = SubmitContentUtil.setAllFields(st.getName(), parametersName, values); /** Get the required relationships */ Map<Relationship, List<Contentlet>> relationships = SubmitContentUtil.getRelationships(st, contentlet, options, user); /** Validating content fields */ // conAPI.validateContentlet(contentlet,relationships,cats); /** Set the binary field values http://jira.dotmarketing.net/browse/DOTCMS-3463 */ if (fileParameters.size() > 0) { for (Map<String, Object> value : fileParameters) { Field field = (Field) value.get("field"); java.io.File file = (java.io.File) value.get(field.getVelocityVarName()); if (file != null) { try { contentlet.setBinary(field.getVelocityVarName(), file); } catch (IOException e) { } } } } if (st.getStructureType() == Structure.STRUCTURE_TYPE_FORM) { contentlet.setHost(formHost.getIdentifier()); Host host = APILocator.getHostAPI() .find(formHost.getIdentifier(), APILocator.getUserAPI().getSystemUser(), false); if (!perAPI.doesUserHavePermissions( host, "PARENT:" + PermissionAPI.PERMISSION_READ + ", CONTENTLETS:" + PermissionAPI.PERMISSION_WRITE + "", user)) { throw new DotSecurityException("User doesn't have write permissions to Contentlet"); } } /** If the moderator field is set, a work flow task is created */ if (UtilMethods.isSet(moderatorRole)) { if (!UtilMethods.isSet(contentlet.getStringProperty(Contentlet.WORKFLOW_ACTION_KEY))) contentlet.setStringProperty( Contentlet.WORKFLOW_ACTION_KEY, APILocator.getWorkflowAPI().findEntryAction(contentlet, user).getId()); String contentletTitle = ""; List<Field> fields = FieldsCache.getFieldsByStructureInode(contentlet.getStructureInode()); for (Field fld : fields) { if (fld.isListed()) { contentletTitle = contentlet.getMap().get(fld.getVelocityVarName()).toString(); contentletTitle = contentletTitle.length() > 250 ? contentletTitle.substring(0, 250) : contentletTitle; } } contentlet.setStringProperty( Contentlet.WORKFLOW_COMMENTS_KEY, "A new content titled \"" + UtilHTML.escapeHTMLSpecialChars(contentletTitle.trim()) + "\" has been posted by " + UtilHTML.escapeHTMLSpecialChars(user.getFullName()) + " (" + user.getEmailAddress() + ")"); contentlet.setStringProperty( Contentlet.WORKFLOW_ASSIGN_KEY, roleAPI.loadRoleByKey(moderatorRole).getId()); } /** Saving Content */ contentlet = conAPI.checkin(contentlet, relationships, cats, permissionList, user, true); APILocator.getVersionableAPI().setWorking(contentlet); if (autoPublish) APILocator.getVersionableAPI().setLive(contentlet); /** Saving file and images */ if (fileParameters.size() > 0) { for (Map<String, Object> value : fileParameters) { Field field = (Field) value.get("field"); // http://jira.dotmarketing.net/browse/DOTCMS-3463 if (field.getFieldType().equals(Field.FieldType.IMAGE.toString()) || field.getFieldType().equals(Field.FieldType.FILE.toString())) { java.io.File uploadedFile = (java.io.File) value.get("file"); try { if (!UtilMethods.isSet(FileUtil.getBytes(uploadedFile))) continue; } catch (IOException e) { Logger.error(SubmitContentUtil.class, e.getMessage()); } String title = (String) value.get("title"); Host host = (Host) value.get("host"); contentlet = addFileToContentlet(contentlet, field, host, uploadedFile, user, title); } } if (autoPublish) { // DOTCMS-5188 contentlet = conAPI.checkinWithoutVersioning( contentlet, relationships, cats, permissionList, user, true); conAPI.publish(contentlet, APILocator.getUserAPI().getSystemUser(), false); } else { contentlet = conAPI.checkinWithoutVersioning( contentlet, relationships, cats, permissionList, user, true); conAPI.unpublish(contentlet, APILocator.getUserAPI().getSystemUser(), false); } } /*}catch(Exception e){ Logger.error(SubmitContentUtil.class, e.getMessage()); throw new DotContentletStateException("Unable to perform checkin. "+e.getMessage()); }*/ return contentlet; }