1 18 19 package org.apache.roller.ui.core.struts.actions; 20 21 import java.util.List ; 22 import javax.servlet.http.HttpServletRequest ; 23 import javax.servlet.http.HttpServletResponse ; 24 import org.apache.commons.lang.CharSetUtils; 25 import org.apache.commons.logging.Log; 26 import org.apache.commons.logging.LogFactory; 27 import org.apache.struts.action.ActionError; 28 import org.apache.struts.action.ActionErrors; 29 import org.apache.struts.action.ActionForm; 30 import org.apache.struts.action.ActionForward; 31 import org.apache.struts.action.ActionMapping; 32 import org.apache.struts.action.ActionMessage; 33 import org.apache.struts.action.ActionMessages; 34 import org.apache.struts.actions.DispatchAction; 35 import org.apache.roller.RollerException; 36 import org.apache.roller.config.RollerConfig; 37 import org.apache.roller.config.RollerRuntimeConfig; 38 import org.apache.roller.model.Roller; 39 import org.apache.roller.model.RollerFactory; 40 import org.apache.roller.model.ThemeManager; 41 import org.apache.roller.model.UserManager; 42 import org.apache.roller.pojos.UserData; 43 import org.apache.roller.pojos.WebsiteData; 44 import org.apache.roller.ui.core.BasePageModel; 45 import org.apache.roller.ui.core.RollerContext; 46 import org.apache.roller.ui.core.RollerSession; 47 import org.apache.roller.ui.authoring.struts.formbeans.CreateWebsiteForm; 48 import org.apache.roller.util.Utilities; 49 50 51 58 public class CreateWebsiteAction extends DispatchAction { 59 60 protected static String DEFAULT_ALLOWED_CHARS = "A-Za-z0-9"; 61 62 private static Log mLogger = LogFactory.getLog(CreateWebsiteAction.class); 63 64 65 66 public ActionForward unspecified( 67 ActionMapping mapping, 68 ActionForm actionForm, 69 HttpServletRequest request, 70 HttpServletResponse response) 71 throws Exception { 72 73 if (request.getMethod().equals("GET")) { 74 return create(mapping, actionForm, request, response); 75 } 76 return save(mapping, actionForm, request, response); 77 } 78 79 80 public ActionForward cancel( 81 ActionMapping mapping, 82 ActionForm actionForm, 83 HttpServletRequest request, 84 HttpServletResponse response) 85 throws Exception { 86 87 return mapping.findForward("yourWebsites"); 88 } 89 90 91 92 public ActionForward create( 93 ActionMapping mapping, 94 ActionForm actionForm, 95 HttpServletRequest request, 96 HttpServletResponse response) 97 throws Exception { 98 99 ActionForward forward = mapping.findForward("createWebsite.page"); 100 CreateWebsiteForm form = (CreateWebsiteForm)actionForm; 101 102 RollerSession rses = RollerSession.getRollerSession(request); 103 UserData user = rses.getAuthenticatedUser(); 104 form.setLocale(user.getLocale()); 105 form.setTimeZone(user.getTimeZone()); 106 form.setEmailAddress(user.getEmailAddress()); 107 108 if (!RollerConfig.getBooleanProperty("groupblogging.enabled")) { 109 Roller roller = RollerFactory.getRoller(); 110 List permissions = roller.getUserManager().getAllPermissions(user); 111 if (permissions.size() > 0) { 112 return mapping.findForward("access-denied"); 115 } 116 } 117 118 request.setAttribute("model", 119 new CreateWebsitePageModel(request, response, mapping, null)); 120 121 return forward; 122 } 123 124 125 126 public ActionForward save( 127 ActionMapping mapping, 128 ActionForm actionForm, 129 HttpServletRequest request, 130 HttpServletResponse response) 131 throws Exception { 132 133 CreateWebsiteForm form = (CreateWebsiteForm)actionForm; 134 ActionMessages msgs = new ActionMessages(); 135 ActionMessages errors = validate(form, new ActionErrors()); 136 ActionForward forward = mapping.findForward("yourWebsites"); 137 Roller roller = RollerFactory.getRoller(); 138 WebsiteData website = null; 139 if (!errors.isEmpty()) { 140 saveErrors(request, errors); 141 forward = mapping.findForward("createWebsite.page"); 142 } else try { 143 RollerContext rollerContext = RollerContext.getRollerContext(); 144 UserData user = 145 RollerSession.getRollerSession(request).getAuthenticatedUser(); 146 UserManager mgr = roller.getUserManager(); 147 148 if (!RollerConfig.getBooleanProperty("groupblogging.enabled")) { 149 List permissions = roller.getUserManager().getAllPermissions(user); 150 if (permissions.size() > 0) { 151 return mapping.findForward("access-denied"); 154 } 155 } 156 157 WebsiteData wd = new WebsiteData( 158 form.getHandle(), 159 user, 160 form.getName(), 161 form.getDescription(), 162 form.getEmailAddress(), 163 form.getEmailAddress(), 164 form.getTheme(), 165 form.getLocale(), 166 form.getTimeZone()); 167 168 try { 169 String def = RollerRuntimeConfig.getProperty("users.editor.pages"); 170 String [] defs = Utilities.stringToStringArray(def,","); 171 wd.setEditorPage(defs[0]); 172 } catch (Exception ex) { 173 log.error("ERROR setting default editor page for weblog", ex); 174 } 175 176 mgr.addWebsite(wd); 177 178 RollerFactory.getRoller().flush(); 179 180 request.setAttribute("model", 181 new CreateWebsitePageModel(request, response, mapping, website)); 182 183 msgs.add(ActionMessages.GLOBAL_MESSAGE, 184 new ActionMessage("createWebsite.created", form.getHandle())); 185 saveMessages(request, msgs); 186 } catch (RollerException e) { 187 errors.add(ActionErrors.GLOBAL_ERROR, 188 new ActionError(e.getMessage())); 189 saveErrors(request, errors); 190 mLogger.error("ERROR in createWebsite", e); 191 } 192 193 request.setAttribute("model", 194 new CreateWebsitePageModel(request, response, mapping, website)); 195 196 return forward; 197 } 198 199 200 private ActionMessages validate(CreateWebsiteForm form, ActionErrors messages) 201 throws RollerException { 202 203 String allowed = RollerConfig.getProperty("username.allowedChars"); 204 if(allowed == null || allowed.trim().length() == 0) { 205 allowed = DEFAULT_ALLOWED_CHARS; 206 } 207 String safe = CharSetUtils.keep(form.getHandle(), allowed); 208 209 if (form.getHandle() == null || "".equals(form.getHandle().trim())) { 210 messages.add( ActionErrors.GLOBAL_ERROR, 211 new ActionError("createWeblog.error.missingHandle")); 212 } else if (!safe.equals(form.getHandle()) ) { 213 messages.add( ActionErrors.GLOBAL_ERROR, 214 new ActionError("createWeblog.error.invalidHandle")); 215 } 216 if (form.getEmailAddress() == null || "".equals(form.getEmailAddress().trim())) { 217 messages.add( ActionErrors.GLOBAL_ERROR, 218 new ActionError("createWeblog.error.missingEmailAddress")); 219 } 220 221 Roller roller = RollerFactory.getRoller(); 222 if (roller.getUserManager().getWebsiteByHandle(form.getHandle()) != null) { 223 messages.add(ActionErrors.GLOBAL_ERROR, 224 new ActionError("createWeblog.error.handleExists")); 225 } 226 return messages; 227 } 228 229 230 public static class CreateWebsitePageModel extends BasePageModel { 231 232 private List themes; 233 private String contextURL = null; 234 private String weblogURL = null; 235 private String rssURL = null; 236 private WebsiteData website = null; 237 public CreateWebsitePageModel(HttpServletRequest request, 238 HttpServletResponse response, ActionMapping mapping, WebsiteData wd) 239 throws RollerException { 240 super("createWebsite.title", request, response, mapping); 241 RollerContext rollerContext = RollerContext.getRollerContext(); 242 Roller roller = RollerFactory.getRoller(); 243 ThemeManager themeMgr = roller.getThemeManager(); 244 themes = themeMgr.getEnabledThemesList(); 245 if (wd != null) { 246 contextURL = RollerRuntimeConfig.getAbsoluteContextURL(); 247 weblogURL = wd.getURL(); 248 rssURL = contextURL + "/rss/" + wd.getHandle(); 249 website = wd; 250 } 251 } 252 public String getAbsoluteURL() { 253 return RollerRuntimeConfig.getAbsoluteContextURL(); 254 } 255 public String getContextURL() { 256 return contextURL; 257 } 258 public void setContextURL(String contextURL) { 259 this.contextURL = contextURL; 260 } 261 public String getRssURL() { 262 return rssURL; 263 } 264 public void setRssURL(String rssURL) { 265 this.rssURL = rssURL; 266 } 267 public List getThemes() { 268 return themes; 269 } 270 public void setThemes(List themes) { 271 this.themes = themes; 272 } 273 public String getWeblogURL() { 274 return weblogURL; 275 } 276 public void setWeblogURL(String weblogURL) { 277 this.weblogURL = weblogURL; 278 } 279 public WebsiteData getWebsite() { 280 return website; 281 } 282 public void setWebsite(WebsiteData website) { 283 this.website = website; 284 } 285 } 286 287 } 288 | Popular Tags |