1 package com.dotmarketing.portlets.workflows.factories; 2 3 import java.util.ArrayList ; 4 import java.util.Date ; 5 import java.util.List ; 6 import java.util.Set ; 7 8 import com.dotmarketing.beans.Inode; 9 import com.dotmarketing.cms.factories.PublicUserFactory; 10 import com.dotmarketing.db.DotConnect; 11 import com.dotmarketing.factories.InodeFactory; 12 import com.dotmarketing.factories.RoleFactory; 13 import com.dotmarketing.portlets.files.model.File; 14 import com.dotmarketing.portlets.workflows.model.WorkflowComment; 15 import com.dotmarketing.portlets.workflows.model.WorkflowHistory; 16 import com.dotmarketing.portlets.workflows.model.WorkflowTask; 17 import com.dotmarketing.util.Config; 18 import com.dotmarketing.util.Logger; 19 import com.dotmarketing.util.Mailer; 20 import com.dotmarketing.util.UtilMethods; 21 import com.dotmarketing.util.WebKeys; 22 import com.dotmarketing.util.WebKeys.WorkflowStatuses; 23 import com.liferay.portal.model.Role; 24 import com.liferay.portal.model.User; 25 26 30 public class WorkflowsFactory { 31 32 public static WorkflowTask getWorkflowTaskByInode(String inode) { 34 return (WorkflowTask) InodeFactory.getInode(inode, WorkflowTask.class); 35 } 36 37 public static WorkflowTask getWorkflowTaskByInode(long inode) { 38 return (WorkflowTask) InodeFactory.getInode(inode, WorkflowTask.class); 39 } 40 41 public static List <WorkflowTask> getWorkflowTasksAssignedToUser(String userId) { 42 return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "assigned_to = '" + userId + "'", 43 "mod_date"); 44 } 45 46 public static List <WorkflowTask> getWorkflowTasksAssignedToUser(String userId, WorkflowStatuses status) { 47 return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "assigned_to = '" + userId 48 + "' and status = '" + status.toString() + "'", "mod_date"); 49 } 50 51 public static List <WorkflowTask> getWorkflowTasksCreatedByUser(String userId) { 52 return InodeFactory 53 .getInodesOfClassByCondition(WorkflowTask.class, "created_by = '" + userId + "'", "mod_date"); 54 } 55 56 public static List <WorkflowTask> getWorkflowTasksResolvedByUser(String userId) { 57 return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "assigned_to = '" + userId 58 + "' and status = " + WorkflowStatuses.RESOLVED.ordinal(), "mod_date"); 59 } 60 61 public static List <WorkflowTask> getWorkflowTasksCancelledByUser(String userId) { 62 return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "assigned_to = '" + userId 63 + "' and status = " + WorkflowStatuses.CANCELLED.ordinal(), "mod_date"); 64 } 65 66 public static List <WorkflowTask> getWorkflowTasksOpenWithoutAssignee(User user) { 67 List <WorkflowTask> tasks = new ArrayList <WorkflowTask>(); 68 List <Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId()); 69 String rolesString = ""; 70 for (Role role : userRoles) { 71 if (!rolesString.equals("")) { 72 rolesString += ","; 73 } 74 rolesString += role.getRoleId(); 75 } 76 if (rolesString.equals("")) 77 return tasks; 78 rolesString = "(" + rolesString + ")"; 79 return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, 80 "belongs_to in " + rolesString + " and status = " + WorkflowStatuses.OPEN.ordinal() 81 + " and (assigned_to is null or assigned_to = '')", "mod_date"); 82 } 83 84 public static List <WorkflowTask> getWorkflowTasksOpenWithAssignee(User user) { 85 List <WorkflowTask> tasks = new ArrayList <WorkflowTask>(); 86 List <Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId()); 87 String rolesString = ""; 88 for (Role role : userRoles) { 89 if (!rolesString.equals("")) { 90 rolesString += ","; 91 } 92 rolesString += role.getRoleId(); 93 } 94 if (rolesString.equals("")) 95 return tasks; 96 rolesString = "(" + rolesString + ")"; 97 return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "belongs_to in " + rolesString 98 + " and status = " + WorkflowStatuses.OPEN.ordinal() 99 + " and (assigned_to is not null and assigned_to <> '')", "mod_date"); 100 } 101 102 public static List <WorkflowTask> getWorkflowTasksBelongsToRole(int roleId) { 103 return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "belongs_to = " + roleId, "mod_date"); 104 } 105 106 public static List <WorkflowTask> getWorkflowTasksAssociatedWithAsset(Inode asset, User user) { 107 StringBuffer condition = new StringBuffer (); 108 List <Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId()); 109 String rolesString = ""; 110 for (Role role : userRoles) { 111 if (!rolesString.equals("")) { 112 rolesString += ","; 113 } 114 rolesString += role.getRoleId(); 115 } 116 condition.append("(created_by = '" + user.getUserId() + "' or assigned_to = '" + user.getUserId() 117 + "' or belongs_to in (" + rolesString + ")) and "); 118 condition.append(" webasset = " + asset.getInode()); 119 120 return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, condition.toString(), "mod_date"); 121 } 122 123 public static List <WorkflowTask> getOpenedWorkflowTasksAssociatedWithAsset(Inode asset, User user) { 124 StringBuffer condition = new StringBuffer (); 125 List <Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId()); 126 String rolesString = ""; 127 for (Role role : userRoles) { 128 if (!rolesString.equals("")) { 129 rolesString += ","; 130 } 131 rolesString += role.getRoleId(); 132 } 133 condition.append("status = '" + WebKeys.WorkflowStatuses.OPEN.toString() + "' and " + 134 " (created_by = '" + user.getUserId() + "' or assigned_to = '" + user.getUserId() 135 + "' or belongs_to in (" + rolesString + ")) and "); 136 condition.append(" webasset = " + asset.getInode()); 137 138 return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, condition.toString(), "mod_date"); 139 } 140 141 public static List <WorkflowTask> filterWorkflowTasks(User user, String title, String description, String createdBy, 142 String assignedTo, Date createdFrom, Date createdTo, Date modifiedFrom, Date modifiedTo, int offset, 143 int maxResults, String orderBy) { 144 StringBuffer condition = new StringBuffer (); 145 if (UtilMethods.isSet(title)) { 146 condition.append("title like '%" + title + "%' and "); 147 } 148 if (UtilMethods.isSet(description)) { 149 condition.append("description like '%" + description + "%' and "); 150 } 151 if (UtilMethods.isSet(createdBy)) { 152 condition.append("created_by = '" + createdBy + "' and "); 153 } 154 if (UtilMethods.isSet(assignedTo)) { 155 condition.append("assigned_to = '" + assignedTo + "' and "); 156 } 157 if (UtilMethods.isSet(createdFrom)) { 158 condition.append("creation_date >= '" + UtilMethods.dateToJDBC(createdFrom) + "' and "); 159 } 160 if (UtilMethods.isSet(createdTo)) { 161 condition.append("creation_date <= '" + UtilMethods.dateToJDBC(createdTo) + "' and "); 162 } 163 if (UtilMethods.isSet(modifiedFrom)) { 164 condition.append("mod_date >= '" + UtilMethods.dateToJDBC(modifiedFrom) + "' and "); 165 } 166 if (UtilMethods.isSet(modifiedTo)) { 167 condition.append("mod_date <= '" + UtilMethods.dateToJDBC(modifiedTo) + "' and "); 168 } 169 List <Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId()); 170 String rolesString = ""; 171 for (Role role : userRoles) { 172 if (!rolesString.equals("")) { 173 rolesString += ","; 174 } 175 rolesString += role.getRoleId(); 176 } 177 condition.append("(created_by = '" + user.getUserId() + "' or assigned_to = '" + user.getUserId() 178 + "' or belongs_to in (" + rolesString + "))"); 179 return InodeFactory.getInodesOfClassByConditionAndOrderBy(WorkflowTask.class, condition.toString(), orderBy, 180 maxResults, offset); 181 } 182 183 public static int filterWorkflowTasksCount(User user, String title, String description, String createdBy, 184 String assignedTo, Date createdFrom, Date createdTo, Date modifiedFrom, Date modifiedTo) { 185 StringBuffer condition = new StringBuffer (); 186 if (UtilMethods.isSet(title)) { 187 condition.append("title = '" + title + "' and "); 188 } 189 if (UtilMethods.isSet(description)) { 190 condition.append("description = '" + description + "' and "); 191 } 192 if (UtilMethods.isSet(createdBy)) { 193 condition.append("created_by = '" + createdBy + "' and "); 194 } 195 if (UtilMethods.isSet(assignedTo)) { 196 condition.append("assigned_to = '" + assignedTo + "' and "); 197 } 198 if (UtilMethods.isSet(createdFrom)) { 199 condition.append("creation_date >= '" + UtilMethods.dateToJDBC(createdFrom) + "' and "); 200 } 201 if (UtilMethods.isSet(createdTo)) { 202 condition.append("creation_date <= '" + UtilMethods.dateToJDBC(createdTo) + "' and "); 203 } 204 if (UtilMethods.isSet(modifiedFrom)) { 205 condition.append("mod_date >= '" + UtilMethods.dateToJDBC(modifiedFrom) + "' and "); 206 } 207 if (UtilMethods.isSet(modifiedTo)) { 208 condition.append("mod_date <= '" + UtilMethods.dateToJDBC(modifiedTo) + "' and "); 209 } 210 List <Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId()); 211 String rolesString = ""; 212 for (Role role : userRoles) { 213 if (!rolesString.equals("")) { 214 rolesString += ","; 215 } 216 rolesString += role.getRoleId(); 217 } 218 condition.append("(created_by = '" + user.getUserId() + "' or assigned_to = '" + user.getUserId() 219 + "' or belongs_to in (" + rolesString + "))"); 220 DotConnect dc = new DotConnect(); 221 dc.setSQL("select count(*) as count from workflow_task where " + condition); 222 return dc.getInt("count"); 223 } 224 225 public static void saveWorkflowTask(WorkflowTask task) { 226 InodeFactory.saveInode(task); 227 } 228 229 public static void deleteWorkflowTask(WorkflowTask task) { 230 InodeFactory.deleteInode(task); 231 } 232 233 public static void sendWorkflowChangeEmails(WorkflowTask task, String subject, String body) { 234 try { 235 236 if (Config.getBooleanProperty("WORKFLOWS_EMAILS_ENABLED")) { 237 boolean hasRecipients = false; 238 User createdByUser = PublicUserFactory.findUserByUserId(task.getCreatedBy()); 239 User assignedToUser = PublicUserFactory.findUserByUserId(task.getAssignedTo()); 240 String fromEmail = Config.getStringProperty("EMAIL_SYSTEM_ADDRESS"); 241 Mailer mailer = new Mailer(); 242 mailer.setFromEmail(fromEmail); 243 if (assignedToUser != null || createdByUser != null) { 244 if (assignedToUser != null) 245 mailer.setToEmail(assignedToUser.getEmailAddress()); 246 else 247 mailer.setToEmail(createdByUser.getEmailAddress()); 248 if (assignedToUser != null && assignedToUser != null) 249 mailer.setCc(createdByUser.getEmailAddress()); 250 hasRecipients = true; 251 } else if (UtilMethods.isSet(task.getBelongsTo())) { 252 Role role = RoleFactory.getRoleById(task.getBelongsTo()); 253 String to = ""; 254 if (UtilMethods.isSet(role.getRoleId())) { 255 Set <User> users = RoleFactory.getUsers(role.getRoleId()); 256 if (users.size() > 0) { 257 hasRecipients = true; 258 for (User user : users) { 259 to += user.getEmailAddress() + ";"; 260 } 261 } 262 } 263 mailer.setToEmail(to); 264 } 265 mailer.setSubject(subject); 266 mailer.setHTMLAndTextBody(body); 267 if (hasRecipients) 268 mailer.sendMessage(); 269 } 270 } catch (Exception e) { 271 Logger.error(WorkflowsFactory.class, "Exception ocurred trying to deliver emails for task " 272 + task.getInode() + " change"); 273 } 274 } 275 276 public static List <WorkflowComment> getWorkflowCommentsOfTask(WorkflowTask task) { 278 return InodeFactory.getChildrenClass(task, WorkflowComment.class, "creation_date"); 279 } 280 281 public static void saveWorkflowComment(WorkflowComment comment) { 282 InodeFactory.saveInode(comment); 283 } 284 285 public static void deleteWorkflowComment(WorkflowComment comment) { 286 InodeFactory.deleteInode(comment); 287 } 288 289 public static List <WorkflowHistory> getWorkflowHistoryOfTask(WorkflowTask task) { 291 return InodeFactory.getChildrenClass(task, WorkflowHistory.class, "creation_date"); 292 } 293 294 public static void saveWorkflowHistory(WorkflowHistory history) { 295 InodeFactory.saveInode(history); 296 } 297 298 public static void deleteWorkflowHistory(WorkflowHistory history) { 299 InodeFactory.deleteInode(history); 300 } 301 302 public static List <File> getWorkflowTaskFiles(WorkflowTask task) { 304 return InodeFactory.getChildrenClass(task, File.class); 305 } 306 307 } 308 | Popular Tags |