1 28 29 30 package com.opencms.workplace; 31 32 import org.opencms.file.CmsFile; 33 import org.opencms.file.CmsObject; 34 import org.opencms.file.CmsPropertyDefinition; 35 import org.opencms.file.CmsRequestContext; 36 import org.opencms.file.CmsResource; 37 import org.opencms.file.CmsResourceFilter; 38 import org.opencms.file.CmsVfsResourceAlreadyExistsException; 39 import org.opencms.i18n.CmsEncoder; 40 import org.opencms.importexport.CmsCompatibleCheck; 41 import org.opencms.lock.CmsLock; 42 import org.opencms.main.CmsException; 43 import org.opencms.main.CmsLog; 44 import org.opencms.main.OpenCms; 45 import org.opencms.staticexport.CmsLinkManager; 46 import org.opencms.util.CmsStringUtil; 47 import org.opencms.workplace.CmsWorkplace; 48 import org.opencms.workplace.editors.CmsMSDHtmlEditor; 49 50 import com.opencms.core.I_CmsSession; 51 import com.opencms.legacy.CmsLegacyException; 52 import com.opencms.legacy.CmsXmlTemplateLoader; 53 import com.opencms.template.A_CmsXmlContent; 54 import com.opencms.template.CmsTemplateClassManager; 55 import com.opencms.template.CmsXmlControlFile; 56 import com.opencms.template.CmsXmlTemplate; 57 import com.opencms.template.CmsXmlTemplateFile; 58 59 import java.io.IOException ; 60 import java.util.Hashtable ; 61 import java.util.Iterator ; 62 import java.util.Map ; 63 import java.util.Vector ; 64 65 import javax.servlet.http.HttpServletRequest ; 66 67 import org.w3c.dom.Element ; 68 69 79 80 public class CmsXmlTemplateEditor extends CmsWorkplaceDefault { 81 82 protected void commitTemporaryFile(CmsObject cms, String originalFilename, String temporaryFilename, 83 int tempProject, int curProject) throws CmsException { 84 cms.getRequestContext().setCurrentProject(cms.readProject(tempProject)); 86 CmsFile tempFile = cms.readFile(temporaryFilename, CmsResourceFilter.IGNORE_EXPIRATION); 87 Map minfos = cms.readProperties(temporaryFilename); 88 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 90 CmsFile orgFile = cms.readFile(originalFilename, CmsResourceFilter.IGNORE_EXPIRATION); 91 orgFile.setContents(tempFile.getContents()); 92 cms.writeFile(orgFile); 93 Iterator keys = minfos.keySet().iterator(); 94 while(keys.hasNext()) { 95 String keyName = (String )keys.next(); 96 cms.writeProperty(originalFilename, keyName, (String )minfos.get(keyName)); 97 } 98 A_CmsXmlContent.clearFileCache(cms.getRequestContext().currentProject().getName()+":" 100 + cms.getRequestContext().addSiteRoot(originalFilename)); 101 } 102 103 protected String createTemporaryFile(CmsObject cms, CmsResource file, int tempProject, int curProject) throws CmsException { 104 String temporaryFilename = CmsResource.getFolderPath(cms.getSitePath(file)) + CmsWorkplace.TEMP_FILE_PREFIX + file.getName(); 105 boolean ok = true; 106 107 cms.getRequestContext().setCurrentProject(cms.readProject(tempProject)); 108 109 try { 110 cms.copyResource(cms.getSitePath(file), temporaryFilename, org.opencms.file.CmsResource.COPY_AS_NEW); 111 } catch (CmsException e) { 113 if ((e instanceof CmsVfsResourceAlreadyExistsException) || ((e instanceof CmsLegacyException) && (((CmsLegacyException)e).getType() != CmsLegacyException.C_SQL_ERROR))) { 114 try { 115 cms.changeLastModifiedProjectId(temporaryFilename); 117 cms.lockResource(temporaryFilename); 118 } catch (Exception ex) { 120 ok = false; 121 } 122 } else { 123 throw e; 124 } 125 } 126 127 String extendedTempFile = temporaryFilename; 128 129 int loop = 0; 130 while (!ok) { 131 ok = true; 132 extendedTempFile = temporaryFilename + loop; 133 134 try { 135 cms.copyResource(cms.getSitePath(file), extendedTempFile); 136 } catch (CmsException e) { 138 if ((!(e instanceof CmsVfsResourceAlreadyExistsException)) && (e instanceof CmsLegacyException) && (((CmsLegacyException)e).getType() != CmsLegacyException.C_SQL_ERROR)) { 139 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 140 throw e; 144 } 145 146 loop++; 148 ok = false; 149 } 150 } 151 152 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 153 temporaryFilename = extendedTempFile; 155 156 return temporaryFilename; 157 } 158 159 170 171 public Integer getAvailableTemplates(CmsObject cms, CmsXmlLanguageFile lang, Vector names, 172 Vector values, Hashtable parameters) throws CmsException { 173 174 Integer retValue = CmsHelperMastertemplates.getTemplates(cms, names, values, (String )parameters.get("template"), -1); 175 if(retValue.intValue() != -1) { 176 return retValue; 177 } else { 178 names.removeAllElements(); 181 values.removeAllElements(); 182 String name = (String )parameters.get("template"); 184 try { name = cms.readProperty(name, CmsPropertyDefinition.PROPERTY_TITLE); 186 } catch(CmsException exc) { 187 } 189 names.add(name); 190 values.add(parameters.get("template")); 191 return new Integer (0); 192 } 193 } 194 195 215 216 public Integer getBodys(CmsObject cms, CmsXmlLanguageFile lang, Vector names, Vector values, 217 Hashtable parameters) throws CmsException { 218 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 219 String currentBodySection = (String )parameters.get("body"); 220 String bodyClassName = (String )parameters.get("bodyclass"); 221 String tempBodyFilename = (String )session.getValue("te_tempbodyfile"); 222 Object tempObj = CmsTemplateClassManager.getClassInstance(bodyClassName); 223 CmsXmlTemplate bodyElementClassObject = (CmsXmlTemplate)tempObj; 224 CmsXmlTemplateFile bodyTemplateFile = bodyElementClassObject.getOwnTemplateFile(cms, 225 tempBodyFilename, C_BODY_ELEMENT, parameters, null); 226 Vector allBodys = bodyTemplateFile.getAllSections(); 227 int loop = 0; 228 int currentBodySectionIndex = 0; 229 int numBodys = allBodys.size(); 230 for(int i = 0;i < numBodys;i++) { 231 String bodyname = (String )allBodys.elementAt(i); 232 String encodedBodyname = CmsEncoder.escapeXml(bodyname); 233 if(bodyname.equals(currentBodySection)) { 234 currentBodySectionIndex = loop; 235 } 236 values.addElement(encodedBodyname); 237 names.addElement(encodedBodyname); 238 loop++; 239 } 240 return new Integer (currentBodySectionIndex); 241 } 242 243 254 public byte[] getContent(CmsObject cms, String templateFile, String elementName, 255 Hashtable parameters, String templateSelector) throws CmsException { 256 CmsRequestContext reqCont = cms.getRequestContext(); 257 HttpServletRequest orgReq = CmsXmlTemplateLoader.getRequest(reqCont).getOriginalRequest(); 258 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 259 260 int tempProject = 0; 262 try{ 263 tempProject = OpenCms.getWorkplaceManager().getTempFileProjectId(); 264 }catch(Exception e){ 265 throw new CmsLegacyException("Can not read projectId of tempfileproject for creating temporary file for editing! "+e.toString()); 266 } 267 if(tempProject == 0){ 268 throw new CmsLegacyException("Can not create temporary file for editing!"); 269 } 270 int curProject = cms.getRequestContext().currentProject().getId(); 271 272 String browser = orgReq.getHeader("user-agent"); 274 String hostName = orgReq.getScheme() + "://" + orgReq.getServerName() + ":" + orgReq.getServerPort(); 275 276 String content = (String )parameters.get(CmsWorkplaceDefault.C_PARA_CONTENT); 278 if(content == null){ 279 content = (String )session.getValue(CmsWorkplaceDefault.C_PARA_CONTENT); 281 session.removeValue(CmsWorkplaceDefault.C_PARA_CONTENT); 282 } 283 284 String body = (String )parameters.get("body"); 285 if(body == null){ 286 body = (String )session.getValue("body"); 288 session.removeValue("body"); 289 } 290 String file = (String )parameters.get(CmsWorkplaceDefault.C_PARA_RESOURCE); 291 if(file == null){ 292 file = (String )session.getValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 294 session.removeValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 295 } 296 String editor = (String )parameters.get("editor"); 297 if((editor == null) || "".equals(editor)){ 298 editor = (String )session.getValue("editor"); 300 if(editor != null){ 301 parameters.put("editor", editor); 302 } 303 session.removeValue("editor"); 304 } 305 String title = (String )parameters.get(CmsWorkplaceDefault.C_PARA_TITLE); 306 if(title == null){ 307 title = (String )session.getValue(CmsWorkplaceDefault.C_PARA_TITLE); 309 session.removeValue(CmsWorkplaceDefault.C_PARA_TITLE); 310 } 311 String bodytitle = (String )parameters.get("bodytitle"); 312 if(bodytitle == null){ 313 bodytitle = (String )session.getValue("bodytitle"); 315 session.removeValue("bodytitle"); 316 } 317 String layoutTemplateFilename = (String )parameters.get("template"); 318 if(layoutTemplateFilename == null){ 319 layoutTemplateFilename = (String )session.getValue("template"); 321 session.removeValue("template"); 322 } 323 String layoutTemplatFilenameRelative = layoutTemplateFilename; 324 layoutTemplateFilename = CmsLinkManager.getAbsoluteUri(layoutTemplateFilename, file); 325 String bodyElementClassName = (String )parameters.get("bodyclass"); 326 if(bodyElementClassName == null){ 327 bodyElementClassName = (String )session.getValue("bodyclass"); 329 session.removeValue("bodyclass"); 330 } 331 String bodyElementFilename = (String )parameters.get("bodyfile"); 332 if(bodyElementFilename == null){ 333 bodyElementFilename = (String )session.getValue("bodyfile"); 335 session.removeValue("bodyfile"); 336 } 337 String action = (String )parameters.get(CmsWorkplaceDefault.C_PARA_ACTION); 338 339 String startView = (String )parameters.get("startview"); 340 if((startView == null) || ("".equals(startView))){ 341 startView = (String )session.getValue("startview"); 343 session.removeValue("startview"); 344 } 345 346 String oldEdit = (String )session.getValue("te_oldedit"); 348 String oldLayoutFilename = (String )session.getValue("te_oldlayout"); 349 String oldTitle = (String )session.getValue("te_title"); 350 String oldBody = (String )session.getValue("te_oldbody"); 351 String oldBodytitle = (String )session.getValue("te_oldbodytitle"); 352 String layoutTemplateClassName = (String )session.getValue("te_templateclass"); 353 String tempPageFilename = (String )session.getValue("te_temppagefile"); 354 String tempBodyFilename = (String )session.getValue("te_tempbodyfile"); 355 String style = (String )session.getValue("te_stylesheet"); 356 357 boolean existsContentParam = content != null; 358 boolean existsFileParam = (file != null && (!"".equals(file))); 359 boolean saveRequested = ((action != null) && (CmsWorkplaceDefault.C_EDIT_ACTION_SAVE.equals(action) || CmsWorkplaceDefault.C_EDIT_ACTION_SAVEEXIT.equals(action))); 360 boolean exitRequested = ((action != null) && (CmsWorkplaceDefault.C_EDIT_ACTION_EXIT.equals(action) || CmsWorkplaceDefault.C_EDIT_ACTION_SAVEEXIT.equals(action))); 361 boolean bodychangeRequested = ((oldBody != null) && (body != null) && (!(oldBody.equals(body)))); 362 boolean templatechangeRequested = (oldLayoutFilename != null && layoutTemplateFilename != null 363 && (!(oldLayoutFilename.equals(layoutTemplateFilename)))); 364 boolean titlechangeRequested = (oldTitle != null && title != null && (!(oldTitle.equals(title)))); 365 boolean newbodyRequested = ((action != null) && "newbody".equals(action)); 366 boolean previewRequested = ((action != null) && "preview".equals(action)); 367 boolean bodytitlechangeRequested = (oldBodytitle != null && bodytitle != null && (!(oldBodytitle.equals(bodytitle)))); 368 369 String saveerror = ""; 370 371 if(!existsFileParam) { 373 throwException("No \"file\" parameter given. Don't know which file should be edited."); 374 } 375 376 parameters.put("root.pagetype", OpenCms.getResourceManager().getResourceType(cms.readResource(file).getTypeId()).getTypeName()); 380 parameters.put("filename_for_relative_template", file); 381 382 String templateProp = cms.readProperty(file, CmsPropertyDefinition.PROPERTY_TEMPLATE); 384 boolean isSimplePage = (templateProp != null); 385 386 CmsResource pageFileResource = cms.readResource(file); 388 CmsLock lock = cms.getLock(file); 389 if(lock.isNullLock()) { 390 cms.lockResource(file); 391 } 392 393 if(!existsContentParam) { 394 395 if (isSimplePage) { 396 397 bodyElementClassName = CmsCompatibleCheck.XML_CONTROL_DEFAULT_CLASS; 398 bodyElementFilename = file; 399 layoutTemplateClassName = CmsCompatibleCheck.XML_CONTROL_DEFAULT_CLASS; 400 layoutTemplateFilename = templateProp; 401 layoutTemplatFilenameRelative = templateProp; 402 403 } else { 404 405 CmsXmlControlFile originalControlFile = new CmsXmlControlFile(cms, file); 406 if(originalControlFile.isElementClassDefined(C_BODY_ELEMENT)) { 407 bodyElementClassName = originalControlFile.getElementClass(C_BODY_ELEMENT); 408 } 409 if(originalControlFile.isElementTemplateDefined(C_BODY_ELEMENT)) { 410 bodyElementFilename = originalControlFile.getElementTemplate(C_BODY_ELEMENT); 411 bodyElementFilename = originalControlFile.validateBodyPath(cms, bodyElementFilename, cms.readResource(file)); 412 } 413 if((bodyElementClassName == null) || (bodyElementFilename == null)) { 414 } 418 419 lock = cms.getLock(bodyElementFilename); 422 if(lock.isNullLock()) { 423 cms.lockResource(bodyElementFilename); 424 } 425 layoutTemplateFilename = originalControlFile.getMasterTemplate(); 427 layoutTemplatFilenameRelative = layoutTemplateFilename; 428 layoutTemplateFilename = CmsLinkManager.getAbsoluteUri(layoutTemplateFilename, originalControlFile.getAbsoluteFilename()); 429 layoutTemplateClassName = originalControlFile.getTemplateClass(); 430 } 431 432 int browserId; 433 if(browser.indexOf("MSIE") > -1) { 434 browserId = 0; 435 }else { 436 browserId = 1; 437 } 438 439 if(editor == null || "".equals(editor)) { 440 if(startView == null || "".equals(startView)){ 441 editor = CmsMSDHtmlEditor.SELECTBOX_EDITORVIEWS[CmsWorkplaceDefault.C_SELECTBOX_EDITORVIEWS_DEFAULT[browserId]]; 442 } else { 443 editor = startView; 444 } 445 session.putValue("te_pageeditor", editor); 446 parameters.put("editor", editor); 447 } 448 449 title = cms.readProperty(file, CmsPropertyDefinition.PROPERTY_TITLE); 451 if(title == null) { 452 title = ""; 453 } 454 455 String noactivex = (String )parameters.get("noactivex"); 460 461 if(noactivex == null || "".equals(noactivex.trim())){ 462 tempPageFilename = createTemporaryFile(cms, pageFileResource, tempProject, curProject); 463 } else { 464 tempPageFilename = (String )session.getValue("te_temppagefile"); 465 } 466 467 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 468 if (isSimplePage) { 469 tempBodyFilename = tempPageFilename; 470 } else { 471 tempBodyFilename = CmsCompatibleCheck.VFS_PATH_BODIES.substring(0, CmsCompatibleCheck.VFS_PATH_BODIES.length()-1) + tempPageFilename; 472 } 473 474 session.putValue("te_temppagefile", tempPageFilename); 475 session.putValue("te_tempbodyfile", tempBodyFilename); 476 } 477 Object tempObj = null; 482 CmsXmlTemplateFile layoutTemplateFile = null; 483 if (isSimplePage) { 484 StringBuffer layoutBuffer = new StringBuffer (512); 485 layoutBuffer.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<xmltemplate>\n<stylesheet>"); 486 layoutBuffer.append("none"); 487 layoutBuffer.append("</stylesheet>\n<template><element name=\"jsptemplate\"/></template>\n<elementdef name=\"jsptemplate\">\n<class>com.opencms.flex.CmsJspTemplate</class>\n<template>"); 488 layoutBuffer.append(templateFile); 489 layoutBuffer.append("</template>\n</elementdef>\n</xmltemplate>\n"); 490 layoutTemplateFile = new CmsXmlTemplateFile(cms, templateFile + com.opencms.core.I_CmsConstants.C_XML_CONTROL_FILE_SUFFIX, layoutBuffer.toString()); 491 } else { 492 tempObj = CmsTemplateClassManager.getClassInstance(layoutTemplateClassName); 493 CmsXmlTemplate layoutTemplateClassObject = (CmsXmlTemplate)tempObj; 494 layoutTemplateFile = layoutTemplateClassObject.getOwnTemplateFile(cms, 495 layoutTemplateFilename, null, parameters, null); 496 } 497 498 tempObj = CmsTemplateClassManager.getClassInstance(bodyElementClassName); 502 CmsXmlTemplate bodyElementClassObject = (CmsXmlTemplate)tempObj; 503 CmsXmlTemplateFile bodyTemplateFile = bodyElementClassObject.getOwnTemplateFile(cms, 504 tempBodyFilename, C_BODY_ELEMENT, parameters, null); 505 506 CmsXmlControlFile temporaryControlFile = null; 508 if (! isSimplePage) temporaryControlFile = new CmsXmlControlFile(cms, tempPageFilename); 509 if(!existsContentParam) { 510 Vector allBodys = bodyTemplateFile.getAllSections(); 511 if(allBodys == null || allBodys.size() == 0) { 512 body = ""; 513 }else { 514 body = (String )allBodys.elementAt(0); 515 } 516 bodytitle = body.equals("(default)") ? "" : body; 517 if (isSimplePage) { 518 style = cms.readProperty(layoutTemplateFilename, CmsPropertyDefinition.PROPERTY_TEMPLATE); 519 if (style != null) { 520 style = hostName + OpenCms.getSystemInfo().getOpenCmsContext() + style; 521 } else { 522 style = ""; 523 } 524 } else { 525 temporaryControlFile.setElementTemplSelector(C_BODY_ELEMENT, body); 526 temporaryControlFile.setElementTemplate(C_BODY_ELEMENT, tempBodyFilename); 527 cms.getRequestContext().setCurrentProject(cms.readProject(tempProject)); 529 temporaryControlFile.write(); 530 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 531 try { 532 style = getStylesheet(cms, null, layoutTemplateFile, null); 533 } catch (Exception e) { 534 style = ""; 535 } 536 if(style != null && !"".equals(style)) { 537 style = hostName + style; 538 } 539 } 540 session.putValue("te_stylesheet", style); 541 } else { 542 if(titlechangeRequested) { 545 try { 547 cms.getRequestContext().setCurrentProject(cms.readProject(tempProject)); 548 cms.writeProperty(tempPageFilename, CmsPropertyDefinition.PROPERTY_TITLE, title); 549 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 550 }catch(CmsException e) { 551 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 552 if(CmsLog.getLog(this).isErrorEnabled() ) { 553 CmsLog.getLog(this).error("Could not write property " + CmsPropertyDefinition.PROPERTY_TITLE + " for file " + file, e); 554 } 555 } 556 } 557 if(templatechangeRequested) { 558 if (isSimplePage) { 560 cms.getRequestContext().setCurrentProject(cms.readProject(tempProject)); 561 cms.writeProperty(tempPageFilename, CmsPropertyDefinition.PROPERTY_TEMPLATE, layoutTemplatFilenameRelative); 562 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 563 style = cms.readProperty(layoutTemplateFilename, CmsPropertyDefinition.PROPERTY_TEMPLATE); 564 if (style != null) { 565 style = hostName + OpenCms.getSystemInfo().getOpenCmsContext() + style; 566 } else { 567 style = ""; 568 } 569 } else { 570 temporaryControlFile.setMasterTemplate(layoutTemplatFilenameRelative ); 571 try { 572 style = getStylesheet(cms, null, layoutTemplateFile, null); 573 }catch(Exception e) { 574 style = ""; 575 } 576 if(style != null && !"".equals(style)) { 577 style = hostName + style; 578 } 579 } 580 session.putValue("te_stylesheet", style); 581 } 582 if(bodytitlechangeRequested) { 583 if((!oldBody.equals("(default)")) && (!oldBody.equals("script"))) { 585 if(bodytitle.toLowerCase().equals("script")) { 586 bodytitle = "script"; 587 } 588 try { 589 bodyTemplateFile.renameSection(oldBody, bodytitle); 590 oldBody = bodytitle; 591 if(!bodychangeRequested) { 592 body = bodytitle; 593 } 594 }catch(Exception e) { 595 bodytitle = oldBodytitle; 596 } 597 if(bodytitle.equals("script")) { 598 session.putValue("te_pageeditor", editor); 599 editor = CmsMSDHtmlEditor.SELECTBOX_EDITORVIEWS[1]; 600 parameters.put("editor", editor); 601 } 602 }else { 603 bodytitle = oldBodytitle; 604 } 605 } 606 if(bodychangeRequested) { 607 if (! isSimplePage) temporaryControlFile.setElementTemplSelector(C_BODY_ELEMENT, body); 608 bodytitle = body.equals("(default)") ? "" : body; 609 if(body.equals("script")) { 610 session.putValue("te_pageeditor", editor); 613 editor = CmsMSDHtmlEditor.SELECTBOX_EDITORVIEWS[1]; 614 parameters.put("editor", editor); 615 }else { 616 if(oldBody.equals("script")) { 617 editor = (String )session.getValue("te_pageeditor"); 620 parameters.put("editor", editor); 621 } 622 } 623 } 624 if(newbodyRequested) { 625 body = C_BODY_ELEMENT + bodyTemplateFile.createNewSection(C_BODY_ELEMENT); 626 bodytitle = body; 627 if (! isSimplePage) { 628 temporaryControlFile.setElementTemplSelector(C_BODY_ELEMENT, body); 629 temporaryControlFile.setElementTemplate(C_BODY_ELEMENT, tempBodyFilename); 630 } 631 } 632 633 String relativeRoot = cms.readProperty(file, org.opencms.file.CmsPropertyDefinition.PROPERTY_RELATIVEROOT, true); 635 636 content = CmsEncoder.unescape(content, CmsEncoder.ENCODING_UTF_8); 638 if (! CmsEncoder.ENCODING_UTF_8.equalsIgnoreCase(cms.getRequestContext().getEncoding())) { 639 content = CmsEncoder.escapeNonAscii(content); 640 } 641 642 if((!exitRequested) || saveRequested) { 643 bodyTemplateFile.setEditedTemplateContent(cms, content, oldBody, oldEdit.equals(CmsMSDHtmlEditor.SELECTBOX_EDITORVIEWS[0]), file, relativeRoot); 644 } 645 cms.getRequestContext().setCurrentProject(cms.readProject(tempProject)); 646 bodyTemplateFile.write(); 647 if (! isSimplePage) temporaryControlFile.write(); 648 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 649 } 650 651 if(previewRequested) { 654 preview(tempPageFilename, reqCont); 655 return "".getBytes(); 656 } 657 658 if(saveRequested) { 662 try{ 663 commitTemporaryFile(cms, bodyElementFilename, tempBodyFilename, tempProject, curProject); 664 cms.getRequestContext().setCurrentProject(cms.readProject(tempProject)); 665 title = cms.readProperty(tempPageFilename, CmsPropertyDefinition.PROPERTY_TITLE); 666 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 667 if(title != null && !"".equals(title)) { 668 cms.writeProperty(file, CmsPropertyDefinition.PROPERTY_TITLE, title); 669 } 670 if (! isSimplePage) { 671 CmsXmlControlFile originalControlFile = new CmsXmlControlFile(cms, file); 672 originalControlFile.setMasterTemplate(temporaryControlFile.getMasterTemplate()); 673 originalControlFile.write(); 674 } 675 } catch (CmsException e){ 676 saveerror = e.getMessage(); 679 if(content != null){ 680 session.putValue(CmsWorkplaceDefault.C_PARA_CONTENT, content); 681 } 682 if(body != null){ 683 session.putValue("body", body); 684 } 685 if(file != null){ 686 session.putValue(CmsWorkplaceDefault.C_PARA_RESOURCE, file); 687 } 688 if(editor != null){ 689 session.putValue("editor", editor); 690 } 691 if(title != null){ 692 session.putValue(CmsWorkplaceDefault.C_PARA_TITLE, title); 693 } 694 if(bodytitle != null){ 695 session.putValue("bodytitle", bodytitle); 696 } 697 if(layoutTemplatFilenameRelative != null){ 698 session.putValue("template", layoutTemplatFilenameRelative); 699 } 700 if(bodyElementClassName != null){ 701 session.putValue("bodyclass", bodyElementClassName); 702 } 703 if(bodyElementFilename != null){ 704 session.putValue("bodyfile", bodyElementFilename); 705 } 706 if(startView != null){ 707 session.putValue("startview", startView); 708 } 709 } 710 } 711 712 if(exitRequested && ((saveerror == null) || "".equals(saveerror))) { 714 715 if (! isSimplePage) temporaryControlFile.removeFromFileCache(); 717 bodyTemplateFile.removeFromFileCache(); 718 cms.getRequestContext().setCurrentProject(cms.readProject(tempProject)); 720 cms.deleteResource(tempPageFilename, org.opencms.file.CmsResource.DELETE_PRESERVE_SIBLINGS); 721 cms.getRequestContext().setCurrentProject(cms.readProject(curProject)); 722 try { 723 CmsXmlTemplateLoader.getResponse(cms.getRequestContext()).sendCmsRedirect(CmsWorkplaceAction.getWorkplaceUri(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest())); 724 }catch(IOException e) { 725 throwException("Could not send redirect to workplace main screen.", e); 726 } 727 return null; 728 } 729 730 Element bodyTag = layoutTemplateFile.getBodyTag(); 733 bodyTemplateFile.setBodyTag(bodyTag); 734 735 content = bodyTemplateFile.getEditableTemplateContent(this, parameters, body, editor.equals(CmsMSDHtmlEditor.SELECTBOX_EDITORVIEWS[0]), style); 737 738 content = CmsStringUtil.substitute(content, CmsStringUtil.MACRO_OPENCMS_CONTEXT + "/", OpenCms.getSystemInfo().getOpenCmsContext() + "/"); 740 741 content = CmsEncoder.escapeWBlanks(content, CmsEncoder.ENCODING_UTF_8); 743 744 parameters.put(CmsWorkplaceDefault.C_PARA_CONTENT, content); 745 746 parameters.put("body", body); 748 parameters.put("bodyfile", bodyElementFilename); 749 parameters.put("bodyclass", bodyElementClassName); 750 parameters.put("template", layoutTemplateFilename); 751 752 parameters.remove(CmsWorkplaceDefault.C_PARA_RESOURCE); 755 parameters.remove(CmsWorkplaceDefault.C_PARA_ACTION); 756 int numEditors = CmsMSDHtmlEditor.SELECTBOX_EDITORVIEWS.length; 757 for(int i = 0;i < numEditors;i++) { 758 if(editor.equals(CmsMSDHtmlEditor.SELECTBOX_EDITORVIEWS[i])) { 759 parameters.put("editor._CLASS_", C_SELECTBOX_EDITORVIEWS_CLASSES[i]); 760 parameters.put("editor._TEMPLATE_", CmsWorkplaceDefault.C_VFS_PATH_DEFAULT_INTERNAL + CmsWorkplaceDefault.C_SELECTBOX_EDITORVIEWS_TEMPLATES[i]); 761 } 762 } 763 session.putValue("te_file", file); 764 session.putValue("te_oldedit", editor); 765 session.putValue("te_oldbody", body); 766 session.putValue("te_oldbodytitle", bodytitle); 767 session.putValue("te_oldlayout", layoutTemplateFilename); 768 if(title != null) { 769 session.putValue("te_title", title); 770 }else { 771 session.putValue("te_title", ""); 772 } 773 session.putValue("te_templateclass", layoutTemplateClassName); 774 CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)getOwnTemplateFile(cms, 775 templateFile, elementName, parameters, templateSelector); 776 xmlTemplateDocument.setData("editor", editor); 777 xmlTemplateDocument.setData("bodyfile", bodyElementFilename); 778 xmlTemplateDocument.setData("bodyclass", bodyElementClassName); 779 xmlTemplateDocument.setData("editorframe", (String )parameters.get("root.editorframe")); 780 if (bodytitle != null) { 781 xmlTemplateDocument.setData("bodytitle", bodytitle); 782 } 783 784 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_RESOURCE, file); 787 if(!"".equals(saveerror)){ 788 templateSelector = "errorsave"; 789 xmlTemplateDocument.setData("errordetail", saveerror); 790 xmlTemplateDocument.setData("errorlasturl", xmlTemplateDocument.getFilename()+".html"); 791 } 792 return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector); 793 } 794 795 811 812 public Integer getEditorViews(CmsObject cms, CmsXmlLanguageFile lang, Vector names, Vector values, 813 Hashtable parameters) throws CmsException { 814 Vector names2 = new Vector (); 815 Vector values2 = new Vector (); 816 getConstantSelectEntries(names2, values2, CmsMSDHtmlEditor.SELECTBOX_EDITORVIEWS, lang); 817 int browserId; 818 CmsRequestContext reqCont = cms.getRequestContext(); 819 HttpServletRequest orgReq = CmsXmlTemplateLoader.getRequest(reqCont).getOriginalRequest(); 820 String browser = orgReq.getHeader("user-agent"); 821 if(browser.indexOf("MSIE") > -1) { 822 browserId = 0; 823 } 824 else { 825 browserId = 1; 826 } 827 int loop = 1; 828 int allowedEditors = CmsMSDHtmlEditor.SELECTBOX_EDITORVIEWS_ALLOWED[browserId]; 829 if(((String )parameters.get("body")).equals("script")) { 830 allowedEditors = allowedEditors & 510; 831 } 832 for(int i = 0;i < names2.size();i++) { 833 if((allowedEditors & loop) > 0) { 834 values.addElement(values2.elementAt(i)); 835 names.addElement(names2.elementAt(i)); 836 } 837 loop <<= 1; 838 } 839 int currentIndex = values.indexOf(parameters.get("editor")); 840 return new Integer (currentIndex); 841 } 842 843 853 854 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, 855 Hashtable parameters, String templateSelector) { 856 return false; 857 } 858 859 protected void preview(String previewPath, CmsRequestContext reqCont) throws CmsException { 860 String servletPath = CmsXmlTemplateLoader.getRequest(reqCont).getServletUrl(); 861 try { 862 CmsXmlTemplateLoader.getResponse(reqCont).sendCmsRedirect(previewPath); 863 } 864 catch(IOException e) { 865 throwException("Could not send redirect preview file " + servletPath + previewPath, e); 866 } 867 } 868 869 883 884 public Object previewUrl(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObj) throws CmsException { 885 String servletPath = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl(); 886 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 887 String tempPath = (String )session.getValue("te_temppagefile"); 888 String result = servletPath + tempPath; 889 return result; 890 } 891 892 901 902 public String setBodyTitle(CmsObject cms, CmsXmlLanguageFile lang, Hashtable parameters) throws CmsException { 903 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 904 String title = (String )session.getValue("te_oldbodytitle"); 905 return CmsEncoder.escapeXml(title); 906 } 907 908 public Object getCharset(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObj) { 909 String prop = null; 911 try { 912 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 913 String file = (String )session.getValue("te_file"); 914 prop = cms.readProperty(file, CmsPropertyDefinition.PROPERTY_CONTENT_ENCODING); 915 while ((prop == null) && (! "".equals(file))) { 916 file = file.substring(0, file.lastIndexOf("/")); 917 prop = cms.readProperty(file + "/", CmsPropertyDefinition.PROPERTY_CONTENT_ENCODING); 918 } 919 } catch (Exception e) {} 920 if (prop == null) prop = OpenCms.getSystemInfo().getDefaultEncoding(); 921 return prop; 922 } 923 924 public Object setText(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObj) throws CmsException { 925 Hashtable parameters = (Hashtable )userObj; 926 927 String content = (String )parameters.get(CmsWorkplaceDefault.C_PARA_CONTENT); 928 boolean existsContentParam = (content != null && (!"".equals(content))); 929 930 if(!existsContentParam) { 932 if(CmsLog.getLog(this).isWarnEnabled() ) { 933 CmsLog.getLog(this).warn("No content found"); 934 } 935 content = ""; 936 } 937 938 return content; 940 } 941 942 951 952 public String setTitle(CmsObject cms, CmsXmlLanguageFile lang, 953 Hashtable parameters) throws CmsException { 954 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 955 String name = (String )session.getValue("te_title"); 956 return CmsEncoder.escapeXml(name); 957 } 958 } 959
| Popular Tags
|