| 1 31 package org.blojsom.plugin.admin; 32 33 import org.apache.commons.logging.Log; 34 import org.apache.commons.logging.LogFactory; 35 import org.blojsom.blog.Blog; 36 import org.blojsom.blog.Entry; 37 import org.blojsom.fetcher.Fetcher; 38 import org.blojsom.fetcher.FetcherException; 39 import org.blojsom.plugin.Plugin; 40 import org.blojsom.plugin.PluginException; 41 import org.blojsom.util.BlojsomConstants; 42 import org.blojsom.util.BlojsomUtils; 43 import org.springframework.context.ApplicationContext; 44 45 import javax.servlet.http.HttpServletRequest ; 46 import javax.servlet.http.HttpServletResponse ; 47 import java.util.Iterator ; 48 import java.util.Map ; 49 import java.util.TreeMap ; 50 51 58 public class EditBlogPluginsPlugin extends BaseAdminPlugin { 59 60 private Log _logger = LogFactory.getLog(EditBlogPluginsPlugin.class); 61 62 private static final String EDIT_BLOG_PLUGINS_PAGE = "/org/blojsom/plugin/admin/templates/admin-edit-blog-plugins"; 64 65 private static final String BLOJSOM_PLUGIN_EDIT_BLOG_PLUGINS_MAP = "BLOJSOM_PLUGIN_EDIT_BLOG_PLUGINS_MAP"; 67 private static final String BLOJSOM_PLUGIN_EDIT_BLOG_PLUGINS_AVAILABLE_PLUGINS = "BLOJSOM_PLUGIN_EDIT_BLOG_PLUGINS_AVAILABLE_PLUGINS"; 68 69 private static final String FAILED_EDIT_PLUGINS_PERMISSION_KEY = "failed.edit.plugins.permission.text"; 71 private static final String SUCCESSFULLY_UPDATED_PLUGINS_KEY = "successfully.updated.plugins.text"; 72 private static final String FAILED_UPDATE_PLUGINS_KEY = "failed.updated.plugins.text"; 73 74 private static final String MODIFY_PLUGIN_CHAINS = "modify-plugin-chains"; 76 77 private static final String EDIT_BLOG_PLUGINS_PERMISSION = "edit_blog_plugins_permission"; 79 80 private Fetcher _fetcher; 81 82 85 public EditBlogPluginsPlugin() { 86 } 87 88 93 public void setFetcher(Fetcher fetcher) { 94 _fetcher = fetcher; 95 } 96 97 108 public Entry[] process(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Blog blog, Map context, Entry[] entries) throws PluginException { 109 if (!authenticateUser(httpServletRequest, httpServletResponse, context, blog)) { 110 httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, ADMIN_LOGIN_PAGE); 111 112 return entries; 113 } 114 115 String username = getUsernameFromSession(httpServletRequest, blog); 116 if (!checkPermission(blog, null, username, EDIT_BLOG_PLUGINS_PERMISSION)) { 117 httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, ADMIN_ADMINISTRATION_PAGE); 118 addOperationResultMessage(context, getAdminResource(FAILED_EDIT_PLUGINS_PERMISSION_KEY, FAILED_EDIT_PLUGINS_PERMISSION_KEY, blog.getBlogAdministrationLocale())); 119 120 return entries; 121 } 122 123 context.put(BLOJSOM_PLUGIN_EDIT_BLOG_PLUGINS_MAP, new TreeMap (blog.getPlugins())); 124 125 ApplicationContext applicationContext = (ApplicationContext) _servletConfig.getServletContext().getAttribute(BlojsomConstants.BLOJSOM_APPLICATION_CONTEXT); 127 if (applicationContext != null) { 128 Map pluginBeans = applicationContext.getBeansOfType(Plugin.class); 129 String [] pluginNames = applicationContext.getBeanNamesForType(Plugin.class); 130 for (int i = 0; i < pluginNames.length; i++) { 131 String pluginName = pluginNames[i]; 132 Object plugin = pluginBeans.get(pluginName); 133 if (plugin.getClass().getName().indexOf("admin") != -1) { 134 pluginBeans.remove(pluginName); 135 } 136 } 137 138 context.put(BLOJSOM_PLUGIN_EDIT_BLOG_PLUGINS_AVAILABLE_PLUGINS, new TreeMap (pluginBeans)); 139 } 140 141 String action = BlojsomUtils.getRequestValue(ACTION_PARAM, httpServletRequest); 142 if (BlojsomUtils.checkNullOrBlank(action)) { 143 _logger.debug("User did not request edit action"); 144 145 httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, ADMIN_ADMINISTRATION_PAGE); 146 } else if (PAGE_ACTION.equals(action)) { 147 _logger.debug("User requested edit blog plugins page"); 148 149 httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, EDIT_BLOG_PLUGINS_PAGE); 150 } else if (MODIFY_PLUGIN_CHAINS.equals(action)) { 151 _logger.debug("User requested modify blog plugins action"); 152 153 Map pluginChain = new TreeMap (blog.getPlugins()); 154 155 Iterator flavorIterator = blog.getTemplates().keySet().iterator(); 157 String updatedFlavor; 158 while (flavorIterator.hasNext()) { 159 String flavor = (String ) flavorIterator.next(); 160 updatedFlavor = BlojsomUtils.getRequestValue(flavor + "." + BlojsomConstants.BLOJSOM_PLUGIN_CHAIN, httpServletRequest); 161 if (!BlojsomUtils.checkNullOrBlank(updatedFlavor)) { 162 pluginChain.put(flavor, updatedFlavor); 163 } else { 164 pluginChain.put(flavor, ""); 165 } 166 } 167 168 updatedFlavor = BlojsomUtils.getRequestValue("default." + BlojsomConstants.BLOJSOM_PLUGIN_CHAIN, httpServletRequest); 170 pluginChain.put("default", updatedFlavor); 171 172 blog.setPlugins(pluginChain); 174 175 try { 177 _fetcher.saveBlog(blog); 178 addOperationResultMessage(context, getAdminResource(SUCCESSFULLY_UPDATED_PLUGINS_KEY, SUCCESSFULLY_UPDATED_PLUGINS_KEY, blog.getBlogAdministrationLocale())); 179 } catch (FetcherException e) { 180 _logger.error(e); 181 addOperationResultMessage(context, getAdminResource(FAILED_UPDATE_PLUGINS_KEY, FAILED_UPDATE_PLUGINS_KEY, blog.getBlogAdministrationLocale())); 182 } 183 184 context.put(BLOJSOM_PLUGIN_EDIT_BLOG_PLUGINS_MAP, new TreeMap (blog.getPlugins())); 185 httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, EDIT_BLOG_PLUGINS_PAGE); 186 } 187 188 return entries; 189 } 190 } 191 | Popular Tags |