1 package org.jahia.views.administration.htmleditors.actions; 2 3 import java.io.IOException ; 4 import java.util.ArrayList ; 5 import java.util.Arrays ; 6 import java.util.Enumeration ; 7 import java.util.Iterator ; 8 9 import javax.servlet.ServletException ; 10 import javax.servlet.http.HttpServletRequest ; 11 import javax.servlet.http.HttpServletResponse ; 12 13 import org.apache.struts.action.ActionErrors; 14 import org.apache.struts.action.ActionForm; 15 import org.apache.struts.action.ActionForward; 16 import org.apache.struts.action.ActionMapping; 17 18 import org.jahia.bin.JahiaErrorDisplay; 19 import org.jahia.data.JahiaData; 20 import org.jahia.exceptions.JahiaException; 21 import org.jahia.exceptions.JahiaForbiddenAccessException; 22 import org.jahia.params.ParamBean; 23 import org.jahia.registries.ServicesRegistry; 24 import org.jahia.resourcebundle.JahiaResourceBundle; 25 import org.jahia.services.htmlparser.*; 26 import org.jahia.services.sites.*; 27 import org.jahia.bin.AdminAction; 28 29 30 39 public class HtmlEditorsAdminAction extends AdminAction { 40 41 private static final String HTTP_FILES = "/jsp/jahia/engines"; 42 43 private static org.apache.log4j.Logger logger = 44 org.apache.log4j.Logger.getLogger(HtmlEditorsAdminAction.class); 45 46 static String alphabet = 47 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 48 49 60 public ActionForward showOperationChoices(ActionMapping mapping, 61 ActionForm form, 62 HttpServletRequest request, 63 HttpServletResponse response) 64 throws IOException , ServletException { 65 66 ActionForward forward = mapping.getInputForward(); 67 ActionErrors errors = new ActionErrors(); 68 69 try { 70 init(request,response); 71 72 } catch ( Throwable t ){ 73 JahiaErrorDisplay.DisplayException(request, response, 74 super.getServlet().getServletContext(), t); 75 } 76 return continueForward(mapping,request,errors,forward); 77 } 78 79 90 public ActionForward reloadHtmlEditorsConfigFile(ActionMapping mapping, 91 ActionForm form, 92 HttpServletRequest request, 93 HttpServletResponse response) 94 throws IOException , ServletException { 95 96 request.setAttribute("reloadHtmlEditorsList",Boolean.TRUE); 97 return displayHtmlEditorsList(mapping,form,request,response); 98 } 99 100 111 public ActionForward displayHtmlEditorsList(ActionMapping mapping, 112 ActionForm form, 113 HttpServletRequest request, 114 HttpServletResponse response) 115 throws IOException , ServletException { 116 117 ActionForward forward = mapping.findForward("displayHtmlEditorsList"); 118 ActionErrors errors = new ActionErrors(); 119 try { 120 init(request,response); 121 122 JahiaData jData = (JahiaData)request 123 .getAttribute("org.jahia.data.JahiaData"); 124 125 Enumeration editors = ServicesRegistry.getInstance() 126 .getHtmlEditorsService().getEditors(); 127 128 if ( editors.hasMoreElements() ){ 129 request.setAttribute("editors",editors); 130 } 131 132 Boolean reloadHtmlEditors = 133 (Boolean )request.getAttribute("reloadHtmlEditorsList"); 134 135 int reloadHtmlEditorsStatus = 0; 136 if ( reloadHtmlEditors != null && reloadHtmlEditors.booleanValue() ){ 137 try { 138 ServicesRegistry.getInstance().getHtmlEditorsService() 139 .reloadConfigurationFile(); 140 reloadHtmlEditorsStatus = 1; 141 } catch ( Throwable t ){ 142 reloadHtmlEditorsStatus = -1; 143 logger.debug("Error reloading html editors config file",t); 144 } 145 } 146 request.setAttribute("reloadHtmlEditorsStatus", 147 new Integer (reloadHtmlEditorsStatus)); 148 149 } catch ( Throwable t ){ 150 JahiaErrorDisplay.DisplayException(request, response, 151 super.getServlet().getServletContext(), t); 152 } 153 return continueForward(mapping,request,errors,forward); 154 } 155 156 167 public ActionForward showMarkupsToRemove(ActionMapping mapping, 168 ActionForm form, 169 HttpServletRequest request, 170 HttpServletResponse response) 171 throws IOException , ServletException { 172 173 ActionForward forward = mapping.findForward("showMarkupsToRemove"); 174 ActionErrors errors = new ActionErrors(); 175 try { 176 init(request,response); 177 178 JahiaData jData = (JahiaData)request 179 .getAttribute("org.jahia.data.JahiaData"); 180 181 deleteSelectedMarkups(request); 182 183 ArrayList markupsToRemove = getMarkupToRemove(); 184 if ( markupsToRemove.size()>0 ){ 185 request.setAttribute("markupsToRemove",markupsToRemove); 186 } 187 188 } catch ( Throwable t ){ 189 JahiaErrorDisplay.DisplayException(request, response, 190 super.getServlet().getServletContext(), t); 191 } 192 return continueForward(mapping,request,errors,forward); 193 } 194 195 private ArrayList getMarkupToRemove(){ 196 ArrayList vals = new ArrayList (); 197 Iterator iterator = ServicesRegistry.getInstance() 198 .getHtmlParserService() 199 .getMarkupSettings(ToRemoveMarkupSetting.SETTING_TYPE); 200 while ( iterator.hasNext() ){ 201 ToRemoveMarkupSetting trmSetting = 202 new ToRemoveMarkupSetting((MarkupSetting)iterator.next()); 203 if ( trmSetting.getMarkupDefinition() != null ){ 204 vals.add(trmSetting); 205 } 206 } 207 if ( vals.size()>1 ){ 208 209 Object [] array = vals.toArray(); 210 211 Arrays.sort(array,(ToRemoveMarkupSetting)array[0]); 212 vals = new ArrayList (Arrays.asList(array)); 213 } 214 return vals; 215 } 216 217 221 private void deleteSelectedMarkups(HttpServletRequest request) 222 throws JahiaException{ 223 224 HtmlParserService htmlPServ = ServicesRegistry.getInstance() 225 .getHtmlParserService(); 226 227 String [] vals = request.getParameterValues("markup"); 228 if ( vals != null ){ 229 int size = vals.length; 230 for ( int i=0 ; i<size; i++ ){ 231 int id = Integer.parseInt((String )vals[i]); 232 MarkupSetting setting = htmlPServ.getMarkupSetting(id); 233 if ( setting != null ){ 234 try { 235 htmlPServ.removeMarkupDefinition(setting.getMarkupDefId()); 236 } catch ( Throwable t ){ 237 logger.debug("Error deleting markup definition :" 238 + setting.getMarkupDefId(),t); 239 } 240 htmlPServ.removeMarkupSetting(id); 241 } 242 } 243 } 244 } 245 246 257 public ActionForward displayAddMarkup(ActionMapping mapping, 258 ActionForm form, 259 HttpServletRequest request, 260 HttpServletResponse response) 261 throws IOException , ServletException { 262 263 ActionForward forward = mapping.findForward("displayAddMarkup"); 264 ActionErrors errors = new ActionErrors(); 265 try { 266 init(request,response); 267 268 JahiaData jData = (JahiaData)request 269 .getAttribute("org.jahia.data.JahiaData"); 270 271 String value = (String )request.getAttribute("markupName"); 272 if ( value == null ){ 273 value = ""; 274 } 275 request.setAttribute("markupName",value); 276 277 } catch ( Throwable t ){ 278 JahiaErrorDisplay.DisplayException(request, response, 279 super.getServlet().getServletContext(), t); 280 } 281 return continueForward(mapping,request,errors,forward); 282 } 283 284 285 296 public ActionForward saveMarkup(ActionMapping mapping, 297 ActionForm form, 298 HttpServletRequest request, 299 HttpServletResponse response) 300 throws IOException , ServletException { 301 302 ActionForward forward = mapping.findForward("showMarkupsToRemove"); 303 ActionErrors errors = new ActionErrors(); 304 try { 305 init(request,response); 306 307 JahiaData jData = (JahiaData)request 308 .getAttribute("org.jahia.data.JahiaData"); 309 310 HtmlParserService htmlPServ = ServicesRegistry.getInstance() 311 .getHtmlParserService(); 312 313 String markupName = request.getParameter("markupName"); 314 if ( checkMarkupName(markupName) ){ 315 markupName = markupName.toLowerCase(); 316 if ( htmlPServ.getMarkupDefinition(markupName) == null ){ 317 MarkupDefinition def = new MarkupDefinition(markupName); 318 htmlPServ.saveMarkupDefinition(def); 319 320 ToRemoveMarkupSetting setting = 321 new ToRemoveMarkupSetting(def.getId()); 322 setting.setApplyToAllSite(true); 323 htmlPServ.saveMarkupSetting(setting); 324 325 ArrayList markupsToRemove = getMarkupToRemove(); 326 if ( markupsToRemove.size()>0 ){ 327 request.setAttribute("markupsToRemove",markupsToRemove); 328 } 329 } else { 330 request.setAttribute("warningMsg","alreadyRegisteredMarkupName"); 331 request.setAttribute("markupName",markupName); 332 return displayAddMarkup(mapping,form,request,response); 333 } 334 } else { 335 request.setAttribute("warningMsg","notValidMarkupName"); 336 request.setAttribute("markupName",markupName); 337 return displayAddMarkup(mapping,form,request,response); 338 } 339 } catch ( Throwable t ){ 340 JahiaErrorDisplay.DisplayException(request, response, 341 super.getServlet().getServletContext(), t); 342 } 343 return continueForward(mapping,request,errors,forward); 344 } 345 346 357 public ActionForward showSiteSetting(ActionMapping mapping, 358 ActionForm form, 359 HttpServletRequest request, 360 HttpServletResponse response) 361 throws IOException , ServletException { 362 363 ActionForward forward = mapping.findForward("showSiteSetting"); 364 ActionErrors errors = new ActionErrors(); 365 try { 366 init(request,response); 367 368 JahiaData jData = (JahiaData)request 369 .getAttribute("org.jahia.data.JahiaData"); 370 371 JahiaSitesService sitesServ = ServicesRegistry.getInstance() 372 .getJahiaSitesService(); 373 374 Enumeration sites = sitesServ.getSites(); 375 376 request.setAttribute("sites",sites); 377 378 } catch ( Throwable t ){ 379 JahiaErrorDisplay.DisplayException(request, response, 380 super.getServlet().getServletContext(), t); 381 } 382 return continueForward(mapping,request,errors,forward); 383 } 384 385 396 public ActionForward saveSiteSetting(ActionMapping mapping, 397 ActionForm form, 398 HttpServletRequest request, 399 HttpServletResponse response) 400 throws IOException , ServletException { 401 402 ActionForward forward = mapping.findForward("showSiteSetting"); 403 ActionErrors errors = new ActionErrors(); 404 try { 405 init(request,response); 406 407 JahiaData jData = (JahiaData)request 408 .getAttribute("org.jahia.data.JahiaData"); 409 410 JahiaSitesService sitesServ = ServicesRegistry.getInstance() 411 .getJahiaSitesService(); 412 413 String [] vals = request.getParameterValues("htmlCleanup"); 414 if (vals == null ){ 415 vals = new String [0]; 416 } 417 ArrayList htmlCleanup = new ArrayList (Arrays.asList(vals)); 418 419 vals = request.getParameterValues("markupFiltering"); 420 if (vals == null ){ 421 vals = new String [0]; 422 } 423 ArrayList markupFiltering = new ArrayList (Arrays.asList(vals)); 424 425 Enumeration sites = sitesServ.getSites(); 426 while ( sites.hasMoreElements() ){ 427 JahiaSite site = (JahiaSite)sites.nextElement(); 428 String siteId = String.valueOf(site.getID()); 429 if ( htmlCleanup.contains(siteId) ){ 430 site.setHtmlCleanup(1); 431 } else { 432 site.setHtmlCleanup(0); 433 } 434 435 if ( markupFiltering.contains(siteId) ){ 436 site.setHtmlMarkupFiltering(1); 437 } else { 438 site.setHtmlMarkupFiltering(0); 439 } 440 sitesServ.updateSite(site); 441 } 442 sites = sitesServ.getSites(); 443 request.setAttribute("sites",sites); 444 445 } catch ( Throwable t ){ 446 JahiaErrorDisplay.DisplayException(request, response, 447 super.getServlet().getServletContext(), t); 448 } 449 return continueForward(mapping,request,errors,forward); 450 } 451 452 458 protected void init(HttpServletRequest request, HttpServletResponse response) 459 throws JahiaException { 460 461 super.init(request,response); 462 463 JahiaData jData = (JahiaData)request.getAttribute("org.jahia.data.JahiaData"); 464 if ( !jData.params().getUser().isRoot() ){ 465 throw new JahiaForbiddenAccessException(); 466 } 467 468 try { 469 470 if( request.getAttribute("msg") == null ) { 472 ParamBean jParams = null; 473 if (jData != null) { 474 jParams = jData.params (); 475 } 476 request.setAttribute("msg", 477 JahiaResourceBundle.getAdminResource("org.jahia.admin.copyright", 478 jParams, jParams.getLocale())); 479 } 480 481 if( request.getAttribute("focus") == null ) { 482 request.setAttribute("focus", "-none-"); 483 } 484 485 if( request.getAttribute("title") == null ) { 487 request.setAttribute("title", "Manage Html Editors"); 488 } 489 490 } catch ( Throwable t ){ 491 t.printStackTrace(); 492 throw new JahiaException("Exception occured initializing engine's objects", 493 "Exception occured initializing engine's objects", 494 JahiaException.ENGINE_ERROR, 495 JahiaException.ENGINE_ERROR); 496 } 497 } 498 499 private boolean checkMarkupName(String name){ 500 if ( name == null || "".equals(name.trim()) ){ 501 return false; 502 } 503 char[] chars = name.toCharArray(); 504 int size = chars.length; 505 for ( int i=0; i<size; i++ ){ 506 if ( HtmlEditorsAdminAction.alphabet.indexOf(chars[i]) == -1 ){ 507 return false; 508 } 509 } 510 return true; 511 } 512 513 } 514 | Popular Tags |