1 18 19 package org.apache.roller.ui.core.tags.menu; 20 21 import java.util.ArrayList ; 22 import java.util.Arrays ; 23 import java.util.Hashtable ; 24 import java.util.Iterator ; 25 import java.util.List ; 26 import javax.servlet.http.HttpServletRequest ; 27 import javax.servlet.jsp.PageContext ; 28 import org.apache.struts.util.RequestUtils; 29 import org.apache.roller.RollerException; 30 import org.apache.roller.config.RollerConfig; 31 import org.apache.roller.model.Roller; 32 import org.apache.roller.model.RollerFactory; 33 import org.apache.roller.pojos.FolderData; 34 import org.apache.roller.pojos.PermissionsData; 35 import org.apache.roller.pojos.UserData; 36 import org.apache.roller.pojos.WeblogCategoryData; 37 import org.apache.roller.pojos.WeblogEntryData; 38 import org.apache.roller.pojos.WebsiteData; 39 import org.apache.roller.ui.core.BasePageModel; 40 import org.apache.roller.ui.core.RequestConstants; 41 import org.apache.roller.ui.core.RollerSession; 42 import org.apache.roller.ui.rendering.util.WeblogPageRequest; 43 import org.apache.roller.util.Utilities; 44 45 46 49 public abstract class BaseRollerMenu { 50 51 protected String mName = null; 52 protected String mForward = null; 53 protected String mSubforwards = null; 54 protected String mEnabledProperty = null; 55 protected String mDisabledProperty = null; 56 protected List mRoles = new ArrayList (); 57 protected List mPerms = new ArrayList (); 58 59 public BaseRollerMenu() { 60 init(); 61 } 62 63 public BaseRollerMenu(String name, String forward) { 64 mName = name; 65 mForward = forward; 66 init(); 67 } 68 69 72 public void init() { 73 mRoles.add("admin"); 74 mRoles.add("editor"); 75 76 mPerms.add("admin"); 77 mPerms.add("author"); 78 } 79 80 81 public void setName( String v ) { mName = v; } 82 83 84 public String getName() { return mName; } 85 86 87 public String getForward() { return mForward; } 88 89 90 public void setForward( String forward ) { mForward = forward; } 91 92 93 public String getSubforwards() { return mSubforwards; } 94 95 96 public void setSubforwards( String subforwards ) { mSubforwards = subforwards; } 97 98 99 public void setRoles( String roles ) { 100 mRoles = Arrays.asList(Utilities.stringToStringArray(roles,",")); 101 } 102 103 104 public void setPerms( String perms ) { 105 mPerms = Arrays.asList(Utilities.stringToStringArray(perms,",")); 106 } 107 108 109 public void setEnabledProperty(String enabledProperty) { 110 mEnabledProperty = enabledProperty; 111 } 112 113 114 public void setDisabledProperty(String disabledProperty) { 115 mDisabledProperty = disabledProperty; 116 } 117 118 119 public boolean isPermitted(HttpServletRequest req) throws RollerException { 120 if (mEnabledProperty != null) { 122 String enabledProp = RollerConfig.getProperty(mEnabledProperty); 123 if (enabledProp != null && enabledProp.equalsIgnoreCase("false")) { 124 return false; 125 } 126 } 127 if (mDisabledProperty != null) { 128 String disabledProp = RollerConfig.getProperty(mDisabledProperty); 129 if (disabledProp != null && disabledProp.equalsIgnoreCase("true")) { 130 return false; 131 } 132 } 133 RollerSession rses = RollerSession.getRollerSession(req); 134 boolean ret = true; 135 136 if (rses != null && rses.isGlobalAdminUser()) return true; 137 138 if (mRoles != null && mRoles.size() > 0) { 140 ret = false; 141 Iterator roles = mRoles.iterator(); 142 while (roles.hasNext()) { 143 String role = (String )roles.next(); 144 if (req.isUserInRole(role) || role.equals("any")) { 145 ret = true; 146 break; 147 } 148 } 149 } 150 151 if (ret && mPerms != null && mPerms.size() > 0) { 153 UserData user = null; 154 if (rses != null) user = rses.getAuthenticatedUser(); 155 156 WebsiteData website = getRequestedWeblog(req); 157 BasePageModel pageModel = (BasePageModel)req.getAttribute("model"); 158 if (pageModel != null) { 159 website = pageModel.getWebsite(); 160 } 161 162 PermissionsData permsData = null; 163 if (user != null && website != null) { 164 permsData = RollerFactory.getRoller() 165 .getUserManager().getPermissions(website, user); 166 } 167 ret = false; 168 Iterator perms = mPerms.iterator(); 169 while (perms.hasNext()) { 170 String perm = (String )perms.next(); 171 if (perm.equals("any")) { 172 ret = true; break; 174 } 175 if (permsData != null && 176 ((perm.equals("admin") && permsData.has(PermissionsData.ADMIN)) 177 || (perm.equals("author") && permsData.has(PermissionsData.AUTHOR)) 178 || (perm.equals("limited") && permsData.has(PermissionsData.LIMITED)))) { 179 ret = true; break; 181 } 182 } 183 } 184 return ret; 185 } 186 187 188 public String getUrl( PageContext pctx ) { 189 String url = null; 190 try { 191 Hashtable params = RollerMenuModel.createParams( 192 (HttpServletRequest )pctx.getRequest()); 193 params.put( RollerMenuModel.MENU_ITEM_KEY, getName() ); 194 url = RequestUtils.computeURL( 195 pctx, 196 mForward, null, null, null, 200 params, null, false ); } catch (Exception e) { 204 pctx.getServletContext().log( 205 "ERROR in menu item creating URL",e); 206 } 207 return url; 208 } 209 210 221 protected static WebsiteData getRequestedWeblog(HttpServletRequest request) throws RollerException { 222 WebsiteData weblog = null; 223 Roller roller = RollerFactory.getRoller(); 224 if (request.getParameter(RequestConstants.WEBLOG) != null) { 226 String weblogHandle = request.getParameter(RequestConstants.WEBLOG); 227 weblog = roller.getUserManager().getWebsiteByHandle(weblogHandle); 228 } else if (request.getParameter(RequestConstants.WEBLOG_ID) != null) { 229 String weblogId = request.getParameter(RequestConstants.WEBLOG_ID); 230 weblog = roller.getUserManager().getWebsite(weblogId); 231 } else if (request.getParameter(RequestConstants.WEBLOGENTRY_ID) != null) { 232 String entryId = request.getParameter(RequestConstants.WEBLOGENTRY_ID); 233 WeblogEntryData entry = roller.getWeblogManager().getWeblogEntry(entryId); 234 if(entry != null) { 235 weblog = entry.getWebsite(); 236 } 237 } else if (request.getParameter(RequestConstants.WEBLOGCATEGORY_ID) != null) { 238 String catId = request.getParameter(RequestConstants.WEBLOGCATEGORY_ID); 239 WeblogCategoryData cat = roller.getWeblogManager().getWeblogCategory(catId); 240 if(cat != null) { 241 weblog = cat.getWebsite(); 242 } 243 } else if (request.getParameter(RequestConstants.FOLDER_ID) != null) { 244 String folderId = request.getParameter(RequestConstants.FOLDER_ID); 245 FolderData folder = roller.getBookmarkManager().getFolder(folderId); 246 if(folder != null) { 247 weblog = folder.getWebsite(); 248 } 249 } else if (request.getSession().getAttribute(RequestConstants.WEBLOG_SESSION_STASH) != null) { 250 String handle = (String )request.getSession().getAttribute(RequestConstants.WEBLOG_SESSION_STASH); 251 weblog = roller.getUserManager().getWebsiteByHandle(handle); 252 } else { 253 WeblogPageRequest pageRequest = (WeblogPageRequest) request.getAttribute("pageRequest"); 256 if(pageRequest != null) { 257 weblog = pageRequest.getWeblog(); 258 } 259 } 260 return weblog; 261 } 262 } 263 | Popular Tags |