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.CmsResource; 36 import org.opencms.file.CmsResourceFilter; 37 import org.opencms.i18n.CmsEncoder; 38 import org.opencms.lock.CmsLock; 39 import org.opencms.main.CmsException; 40 import org.opencms.main.CmsLog; 41 import org.opencms.main.OpenCms; 42 import org.opencms.workplace.CmsFrameset; 43 44 import com.opencms.core.I_CmsSession; 45 import com.opencms.legacy.CmsLegacyException; 46 import com.opencms.legacy.CmsXmlTemplateLoader; 47 import com.opencms.template.A_CmsXmlContent; 48 import com.opencms.template.CmsXmlTemplateFile; 49 50 import java.io.IOException ; 51 import java.io.UnsupportedEncodingException ; 52 import java.util.Hashtable ; 53 54 import javax.servlet.http.HttpServletRequest ; 55 56 67 68 public class CmsEditor extends CmsWorkplaceDefault { 69 70 79 protected String getBrowserSpecificSection(CmsObject cms, CmsXmlTemplateFile templateFile, Hashtable parameters) { 80 HttpServletRequest orgReq = (HttpServletRequest )CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest(); 81 String browser = orgReq.getHeader("user-agent"); 82 String result = null; 83 String noactivex = (String )parameters.get("noactivex"); 86 87 if(browser.indexOf("MSIE") > -1) { 89 if(templateFile.hasSection("ie")) { 90 if(!"true".equalsIgnoreCase(noactivex)){ 91 result = "ie"; 92 } else { 93 if(templateFile.hasSection("ns")) { 95 result = "ns"; 96 } 97 } 98 } 99 } 100 else { 101 if(templateFile.hasSection("ns")) { 102 result = "ns"; 103 } 104 } 105 return result; 106 } 107 108 124 public byte[] getContent(CmsObject cms, String templateFile, String elementName, 125 Hashtable parameters, String templateSelector) throws CmsException { 126 127 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 128 String saveerror = ""; 129 String file = (String )parameters.get(CmsWorkplaceDefault.C_PARA_RESOURCE); 131 if((file == null) || ("".equals(file))){ 133 file = (String )session.getValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 134 session.removeValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 135 } 136 if((file != null) && (! "".equals(file))) { 137 session.putValue("te_file", file); 138 } 139 String content = (String )parameters.get(CmsWorkplaceDefault.C_PARA_CONTENT); 140 if((content == null) || ("".equals(content))){ 142 content = (String )session.getValue(CmsWorkplaceDefault.C_PARA_CONTENT); 143 if(content != null){ 144 parameters.put(CmsWorkplaceDefault.C_PARA_CONTENT, content); 145 } 146 session.removeValue(CmsWorkplaceDefault.C_PARA_CONTENT); 147 } 148 String action = (String )parameters.get(CmsWorkplaceDefault.C_PARA_ACTION); 149 String jsfile = (String )parameters.get(com.opencms.core.I_CmsConstants.C_ROOT_TEMPLATE_NAME + "." + CmsWorkplaceDefault.C_PARA_JSFILE); 150 if((jsfile == null) || ("".equals(jsfile))){ 152 jsfile = (String )session.getValue(CmsWorkplaceDefault.C_PARA_JSFILE); 153 session.removeValue(CmsWorkplaceDefault.C_PARA_JSFILE); 154 } 155 String editorframe = (String )parameters.get("root.editorframe"); 156 if((editorframe == null) || ("".equals(editorframe))){ 157 editorframe = (String )session.getValue("editorframe"); 158 session.removeValue("editorframe"); 159 } 160 161 boolean checkit = false; 162 boolean existsFileParam = ((file != null) && (!"".equals(file))); 163 boolean saveRequested = ((action != null) && (CmsWorkplaceDefault.C_EDIT_ACTION_SAVE.equals(action) 164 || CmsWorkplaceDefault.C_EDIT_ACTION_SAVEEXIT.equals(action))); 165 boolean exitRequested = ((action != null) && (CmsWorkplaceDefault.C_EDIT_ACTION_EXIT.equals(action) 166 || CmsWorkplaceDefault.C_EDIT_ACTION_SAVEEXIT.equals(action))); 167 168 CmsFile editFile = null; 170 CmsLock lock = null; 171 172 if (existsFileParam && (content == null || saveRequested)) { 175 editFile = readFile(cms, file); 176 lock = cms.getLock(file); 177 178 if (lock.isNullLock()) { 180 if (OpenCms.getWorkplaceManager().autoLockResources()) { 182 cms.lockResource(file); 184 lock = cms.getLock(file); 185 } else { 186 throw new CmsLegacyException("Resource is not locked", CmsLegacyException.C_RESOURCE_UNLOCKED); 187 } 188 } 189 if (lock.getType() == CmsLock.TYPE_INHERITED) { 190 cms.lockResource(file); 191 lock = cms.getLock(file); 192 } 193 if (lock.getType() != CmsLock.TYPE_EXCLUSIVE) { 194 throw new CmsLegacyException("Insufficient lock to edit content of resource", CmsLegacyException.C_RESOURCE_LOCKED_NON_EXCLUSIVE); 195 } 196 if (!lock.getUserId().equals(cms.getRequestContext().currentUser().getId())) { 197 throw new CmsLegacyException("Resource locked by another user", CmsLegacyException.C_RESOURCE_LOCKED_BY_OTHER_USER); 198 } 199 200 checkit = true; 201 202 String encoding = cms.getRequestContext().getEncoding(); 204 encoding = cms.readProperty(file, CmsPropertyDefinition.PROPERTY_CONTENT_ENCODING, true, encoding); 205 206 if(content == null) { 209 try { 210 content = new String (editFile.getContents(), encoding); 211 } catch (UnsupportedEncodingException e) { 212 content = new String (editFile.getContents()); 213 } 214 content = CmsEncoder.escapeWBlanks(content, CmsEncoder.ENCODING_UTF_8); 215 parameters.put(CmsWorkplaceDefault.C_PARA_CONTENT, content); 216 } 217 218 if(saveRequested) { 221 try{ 222 String decodedContent = CmsEncoder.unescape(content, CmsEncoder.ENCODING_UTF_8); 223 try { 224 editFile.setContents(decodedContent.getBytes(encoding)); 225 } catch (UnsupportedEncodingException e) { 226 editFile.setContents(decodedContent.getBytes()); 227 } 228 cms.writeFile(editFile); 229 } catch (CmsException e){ 230 saveerror = e.getMessage(); 231 } 232 } 233 } 234 235 if(exitRequested && ((saveerror == null) || ("".equals(saveerror)))) { 237 try { 238 CmsXmlTemplateLoader.getResponse(cms.getRequestContext()).sendCmsRedirect(CmsWorkplaceAction.getWorkplaceUri(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest())); 239 } catch(IOException e) { 240 throwException("Could not send redirect to workplace main screen.", e); 241 } 242 243 return null; 245 } 246 247 CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)getOwnTemplateFile(cms, 249 templateFile, elementName, parameters, templateSelector); 250 String sectionName = getBrowserSpecificSection(cms, xmlTemplateDocument, parameters); 251 252 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_RESOURCE, file); 255 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_JSFILE, jsfile); 256 xmlTemplateDocument.setData("editorframe", editorframe); 257 xmlTemplateDocument.setData("OpenCmsContext", OpenCms.getSystemInfo().getOpenCmsContext()); 258 if(checkit==true){ 260 xmlTemplateDocument.setData("fileName", editFile.getName()); 261 String parent = CmsResource.getParentFolder(cms.getSitePath(editFile)); 262 xmlTemplateDocument.setData("pathName", parent); 263 } 264 String lasturlname = null; 265 if(!"".equals(saveerror)){ 266 if(file != null){ 267 session.putValue(CmsWorkplaceDefault.C_PARA_RESOURCE, file); 268 } 269 if(content != null){ 270 session.putValue(CmsWorkplaceDefault.C_PARA_CONTENT, content); 271 } 272 if(jsfile != null){ 273 session.putValue(CmsWorkplaceDefault.C_PARA_JSFILE, jsfile); 274 } 275 if(editorframe != null){ 276 session.putValue("editorframe", editorframe); 277 } 278 sectionName = "errorsave"; 279 xmlTemplateDocument.setData("errordetail", saveerror); 280 lasturlname=(String )parameters.get("editor._TEMPLATE_"); 281 if (lasturlname != null){ 282 lasturlname=lasturlname.substring(lasturlname.lastIndexOf("/")+1, lasturlname.length()); 283 } 284 xmlTemplateDocument.setData("errorlasturl", lasturlname+".html"); 285 } 286 287 String userLanguage = CmsXmlLanguageFile.getCurrentUserLanguage(cms); 289 xmlTemplateDocument.setData("LOCALE", "" + userLanguage); 290 291 try { 292 cms.readFolder(CmsWorkplaceDefault.C_VFS_PATH_HELP + userLanguage); 293 xmlTemplateDocument.setData("HELP", xmlTemplateDocument.getProcessedDataValue("HELP_ENABLED", this)); 295 } 296 catch (CmsException e) { 297 try { 299 xmlTemplateDocument.setData("HELP", xmlTemplateDocument.getProcessedDataValue("HELP_DISABLED", this)); 300 } 301 catch (Exception ex) { 302 } 304 } 305 306 return startProcessing(cms, xmlTemplateDocument, elementName, parameters, sectionName); 307 } 308 309 319 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, 320 Hashtable parameters, String templateSelector) { 321 return false; 322 } 323 324 331 protected CmsFile readFile(CmsObject cms, String filename) throws CmsException { 332 CmsFile result = null; 333 try { 334 result = cms.readFile(filename, CmsResourceFilter.IGNORE_EXPIRATION); 335 } 336 catch(Exception e) { 337 338 String errorMessage = "Error while reading file " + filename + ": " + e; 340 if(CmsLog.getLog(this).isErrorEnabled()) { 341 CmsLog.getLog(this).error(errorMessage, e); 342 } 343 344 if(e instanceof CmsException) { 346 throw (CmsException)e; 347 } 348 else { 349 throw new CmsLegacyException(errorMessage); 350 } 351 } 352 return result; 353 } 354 355 368 public Object setText(CmsObject cms, String tagcontent, A_CmsXmlContent doc, 369 Object userObj) { 370 Hashtable parameters = (Hashtable )userObj; 371 String content = (String )parameters.get(CmsWorkplaceDefault.C_PARA_CONTENT); 372 if(content == null) { 373 content = ""; 374 } 375 return content; 376 } 377 } 378 | Popular Tags |