1 4 package com.openedit.blog; 5 6 import java.io.File ; 7 import java.io.FileWriter ; 8 import java.io.Serializable ; 9 import java.io.Writer ; 10 import java.util.Date ; 11 import java.util.HashSet ; 12 import java.util.Iterator ; 13 import java.util.Set ; 14 15 import org.apache.commons.logging.Log; 16 import org.apache.commons.logging.LogFactory; 17 import org.openedit.repository.filesystem.StringItem; 18 19 import com.openedit.OpenEditException; 20 import com.openedit.hittracker.HitTracker; 21 import com.openedit.modules.email.Recipient; 22 import com.openedit.modules.email.TemplateWebEmail; 23 import com.openedit.page.Page; 24 import com.openedit.page.manage.PageManager; 25 import com.openedit.users.Group; 26 import com.openedit.users.User; 27 import com.openedit.users.UserManager; 28 import com.openedit.util.FileUtils; 29 30 public class Notify implements Serializable 31 { 32 private static final Log log = LogFactory.getLog(Notify.class); 33 transient protected UserManager fieldUserManager; 34 transient protected PageManager fieldPageManager; 35 36 protected File fieldRootDirectory; 37 protected String [] fieldGroupNames; 38 protected boolean fieldKeepRunning; 39 40 public UserManager getUserManager() 41 { 42 return fieldUserManager; 43 } 44 45 public void setUserManager(UserManager inUserManager) 46 { 47 fieldUserManager = inUserManager; 48 } 49 50 public void sendEmail( TemplateWebEmail inEmail, Writer inLog ) throws OpenEditException 51 { 52 fieldKeepRunning = true; 53 FileWriter out = null; 54 int grandTotal = 0; 55 try 56 { 57 Set duplicate = new HashSet (); 58 inLog.write("<pre>"); 59 File logFile = getLogFile(inEmail.getMailTemplatePath()); 60 if ( logFile.exists() ) 61 { 62 out = new FileWriter (logFile,true); 63 } 64 else 65 { 66 out = new FileWriter ( logFile); 67 } 68 out.write("Starting Sending " + new Date () + "\n"); 69 70 for (int i = 0; i < getGroupNames().length && isKeepRunning(); i++) 71 { 72 Group group = getUserManager().getGroup(getGroupNames()[i]); 73 inLog.write("Status, "+ group.getName() + " group starting to send\n" ); 74 out.write("Status, "+ group.getName() + " group starting to send\n" ); 75 int countSent = 0; 76 int countSkipped = 0; 77 int logCount = 0; 78 HitTracker users = getUserManager().getUsersInGroup(group); 79 for (Iterator iter = users.iterator(); iter.hasNext();) 80 { 81 User user = (User) iter.next(); 82 String email = user.getEmail(); 83 if (email.length() > 4 && !duplicate.contains(email.toLowerCase())) 84 { 85 Recipient rec = new Recipient(); 86 rec.setEmailAddress(user.getEmail()); 87 rec.setLastName(user.getLastName()); 88 rec.setFirstName(user.getFirstName()); 89 try 90 { 91 inEmail.send(rec); 92 out.write("Sent, email: " + rec.getEmailAddress() + ", username:" + user.getUserName() + "\n"); 93 duplicate.add( email.toLowerCase()); 94 countSent++; 95 } 96 catch (Exception ex) 97 { 98 inLog.write("Error, email: " + rec.getEmailAddress() + ", username:" + user.getUserName() + ", error: " + ex.toString() + "\n" ); 99 out.write("Error, email: " + rec.getEmailAddress() + ", username:" + user.getUserName() + ", error: " + ex.toString() + "\n" ); 100 log.error( ex); 101 } 102 } 103 else 104 { 105 inLog.write("Skipping, " + email + " looks invalid or a duplicate\n"); 106 out.write("Skipping, " + email + " looks invalid or a duplicate\n"); 107 108 countSkipped++; 109 } 110 logCount++; 111 grandTotal++; 112 if ( logCount == 100 ) 113 { 114 inLog.write("Status, Processed 100 more emails and " + grandTotal + " total\n"); 115 logCount = 0; 116 } 117 inLog.flush(); 118 out.flush(); 119 } 120 inLog.write("Status, completed. sent:" + countSent + " skipped: " + countSkipped + "\n" ); 121 out.write("Status, completed. sent:" + countSent + " skipped: " + countSkipped + "\n" ); 122 inLog.write("</pre>"); 123 inLog.flush(); 124 setKeepRunning(false); 125 } 126 } 127 catch ( Exception ex) 128 { 129 setKeepRunning(false); 130 if ( ex instanceof OpenEditException) 131 { 132 throw (OpenEditException)ex; 133 } 134 throw new OpenEditException(ex); 135 } 136 finally 137 { 138 FileUtils.safeClose(out); 139 } 140 } 141 142 public void fixLinks(Page inMailTemplatePage, String base) throws OpenEditException 143 { 144 String content = inMailTemplatePage.getContent(); 145 147 content = content.replaceAll("src=\\\"/","src=\"" + base + "/"); 148 content = content.replaceAll("src=/","src=" + base + "/"); 149 content = content.replaceAll("href=\\\"/","href=\"" + base + "/"); 150 content = content.replaceAll("href=/","href=" + base + "/"); 151 content = content.replaceAll("url\\('/","url('" + base + "/"); 152 content = content.replaceAll("\\$home",base ); 153 154 StringItem item = new StringItem(inMailTemplatePage.getPath(), content, inMailTemplatePage.getCharacterEncoding()); 155 inMailTemplatePage.setContentItem(item); 156 157 getPageManager().putPage(inMailTemplatePage); 158 159 } 160 161 protected File getLogFile(String inPath) 162 { 163 File f = new File ( getRootDirectory(), inPath + ".log"); 164 return f; 165 } 166 167 public boolean hasLog(String inPath) 168 { 169 File f = getLogFile(inPath); 170 return f.exists(); 171 } 172 public String [] getGroupNames() 173 { 174 return fieldGroupNames; 175 } 176 177 public void setGroupNames(String [] inGroupNames) 178 { 179 fieldGroupNames = inGroupNames; 180 } 181 182 public void cancel() 183 { 184 fieldKeepRunning = false; 185 } 186 187 public boolean isKeepRunning() 188 { 189 return fieldKeepRunning; 190 } 191 192 public void setKeepRunning(boolean inKeepRunning) 193 { 194 fieldKeepRunning = inKeepRunning; 195 } 196 197 public File getRootDirectory() 198 { 199 return fieldRootDirectory; 200 } 201 202 public void setRootDirectory(File inRootDirectory) 203 { 204 fieldRootDirectory = inRootDirectory; 205 } 206 207 public PageManager getPageManager() 208 { 209 return fieldPageManager; 210 } 211 212 public void setPageManager(PageManager inPageManager) 213 { 214 fieldPageManager = inPageManager; 215 } 216 217 } | Popular Tags |