1 31 32 package org.opencms.notification; 33 34 import org.opencms.db.CmsUserSettings; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsUser; 37 import org.opencms.mail.CmsHtmlMail; 38 import org.opencms.main.CmsException; 39 import org.opencms.main.CmsLog; 40 import org.opencms.main.OpenCms; 41 import org.opencms.util.CmsMacroResolver; 42 import org.opencms.util.CmsStringUtil; 43 import org.opencms.xml.content.CmsXmlContent; 44 import org.opencms.xml.content.CmsXmlContentFactory; 45 46 import java.util.List ; 47 import java.util.Locale ; 48 49 import javax.mail.MessagingException ; 50 51 import org.apache.commons.logging.Log; 52 53 63 public abstract class A_CmsNotification extends CmsHtmlMail { 64 65 66 private static final Log LOG = CmsLog.getLog(A_CmsNotification.class); 67 68 69 private CmsObject m_cms; 70 71 72 private Locale m_locale; 73 74 75 private CmsMacroResolver m_macroResolver; 76 77 78 private CmsXmlContent m_mailContent; 79 80 81 private CmsUser m_receiver; 82 83 89 public A_CmsNotification(CmsObject cms, CmsUser receiver) { 90 91 m_cms = cms; 92 m_receiver = receiver; 93 94 m_macroResolver = new CmsMacroResolver(); 95 } 96 97 104 public void addMacro(String key, String value) { 105 106 m_macroResolver.addMacro(key, value); 107 } 108 109 114 public CmsObject getCmsObject() { 115 116 return m_cms; 117 } 118 119 124 public Locale getLocale() { 125 126 return m_locale; 127 } 128 129 134 public CmsUser getReceiver() { 135 136 return m_receiver; 137 } 138 139 142 public void send() throws MessagingException { 143 144 try { 145 if (CmsStringUtil.isEmpty(m_receiver.getEmail())) { 147 LOG.error(Messages.get().getBundle().key(Messages.LOG_NOTIFICATION_NO_ADDRESS_1, m_receiver.getName())); 148 return; 149 } 150 151 if (LOG.isInfoEnabled()) { 152 LOG.info(Messages.get().getBundle().key(Messages.LOG_NOTIFICATION_SEND_1, m_receiver.getEmail())); 153 } 154 155 m_mailContent = CmsXmlContentFactory.unmarshal(m_cms, m_cms.readFile(getNotificationContent())); 157 158 List locales = m_mailContent.getLocales(); 160 Locale userLocale = new CmsUserSettings(m_receiver).getLocale(); 161 if (locales.contains(userLocale)) { 162 m_locale = userLocale; 164 } else if (locales.contains(OpenCms.getWorkplaceManager().getDefaultLocale())) { 165 m_locale = OpenCms.getWorkplaceManager().getDefaultLocale(); 167 } else { 168 m_locale = (Locale )locales.get(0); 170 } 171 172 m_macroResolver.addMacro("firstname", m_receiver.getFirstname()); 174 m_macroResolver.addMacro("lastname", m_receiver.getLastname()); 175 m_macroResolver.addMacro("project", m_cms.getRequestContext().currentProject().getName()); 176 177 StringBuffer msg = new StringBuffer (); 178 179 appendHtmlHeader(msg); 181 182 msg.append(CmsMacroResolver.resolveMacros( 184 m_mailContent.getStringValue(m_cms, "Header", m_locale), 185 m_macroResolver)); 186 187 msg.append("\n<br/><br/>\n"); 189 msg.append(generateHtmlMsg()); 190 msg.append("\n<br/><br/>\n"); 191 192 msg.append(CmsMacroResolver.resolveMacros( 194 m_mailContent.getStringValue(m_cms, "Footer", m_locale), 195 m_macroResolver)); 196 197 appenHtmlFooter(msg); 199 200 addTo(m_receiver.getEmail(), m_receiver.getFirstname() + ' ' + m_receiver.getLastname()); 201 setSubject(CmsMacroResolver.resolveMacros( 202 m_mailContent.getStringValue(m_cms, "Subject", m_locale), 203 m_macroResolver)); 204 setHtmlMsg(msg.toString()); 205 206 super.send(); 208 } catch (CmsException e) { 209 LOG.error(Messages.get().getBundle().key(Messages.LOG_NOTIFICATION_SEND_ERROR_0), e); 210 } 211 } 212 213 218 protected void appendHtmlHeader(StringBuffer buffer) { 219 220 buffer.append("<html><head><style type=\"text/css\">\n"); 221 buffer.append("<!--\n"); 222 buffer.append("body { font-family: Verdana, Arial, Helvetica, sans-serif; background-color:#ffefdb; }\n"); 223 buffer.append("a { color:#b22222; text-decoration:none; }\n"); 224 buffer.append("table { white-space: nowrap; font-size: x-small; }\n"); 225 buffer.append("tr.trow1 { background-color: #cdc0b0; }\n"); 226 buffer.append("tr.trow2 { background-color: #eedfcc; }\n"); 227 buffer.append("tr.trow3 { background-color: #ffefdb; }\n"); 228 buffer.append("--></style>\n"); 229 buffer.append("</head><body><span style='font-size:8.0pt;'>"); 230 } 231 232 237 protected void appenHtmlFooter(StringBuffer buffer) { 238 239 buffer.append("</span></body></html>"); 240 } 241 242 249 protected abstract String generateHtmlMsg(); 250 251 257 protected abstract String getNotificationContent(); 258 } 259 | Popular Tags |