1 31 32 package org.opencms.workplace.editors.directedit; 33 34 import org.opencms.cache.CmsMemoryObjectCache; 35 import org.opencms.file.CmsFile; 36 import org.opencms.file.CmsObject; 37 import org.opencms.file.CmsProject; 38 import org.opencms.file.CmsProperty; 39 import org.opencms.file.CmsPropertyDefinition; 40 import org.opencms.i18n.CmsEncoder; 41 import org.opencms.main.CmsException; 42 import org.opencms.main.CmsLog; 43 import org.opencms.main.OpenCms; 44 import org.opencms.util.CmsMacroResolver; 45 import org.opencms.workplace.CmsWorkplace; 46 import org.opencms.workplace.editors.Messages; 47 48 import javax.servlet.jsp.JspException ; 49 import javax.servlet.jsp.PageContext ; 50 51 import org.apache.commons.logging.Log; 52 53 67 public class CmsDirectEditDefaultProvider extends A_CmsDirectEditProvider implements I_CmsDirectEditProvider { 68 69 70 private static final Log LOG = CmsLog.getLog(CmsDirectEditDefaultProvider.class); 71 72 73 protected int m_lastPermissionMode; 74 75 76 private String m_headerInclude; 77 78 83 public String endDirectEditDisabled() { 84 85 return "</div>\n<!-- EDIT BLOCK END (DISABLED) -->\n"; 86 } 87 88 93 public String endDirectEditEnabled() { 94 95 return "</div>\n<!-- EDIT BLOCK END (ENABLED) -->\n"; 96 } 97 98 105 public String getDirectEditIncludes(CmsDirectEditParams params) { 106 107 String closeLink = getLink(params.getLinkForClose()); 108 String deleteLink = getLink(params.getLinkForDelete()); 109 String titleForNew = m_messages.key(Messages.GUI_EDITOR_TITLE_NEW_0); 110 String skinUri = CmsWorkplace.getSkinUri(); 111 112 CmsMacroResolver resolver = CmsMacroResolver.newInstance(); 114 resolver.addMacro("closeLink", closeLink); 115 resolver.addMacro("deleteLink", deleteLink); 116 resolver.addMacro("titleForNew", titleForNew); 117 resolver.addMacro("skinUri", skinUri); 118 119 return resolver.resolveMacros(m_headerInclude); 120 } 121 122 125 public void init(CmsObject cms, CmsDirectEditMode mode, String fileName) { 126 127 super.init(cms, mode, fileName); 128 129 CmsMemoryObjectCache cache = CmsMemoryObjectCache.getInstance(); 131 m_headerInclude = (String )cache.getCachedObject(CmsDirectEditDefaultProvider.class, m_fileName); 132 133 if (m_headerInclude == null) { 134 try { 136 CmsFile file = m_cms.readFile(m_fileName); 137 CmsProperty p = m_cms.readPropertyObject(file, CmsPropertyDefinition.PROPERTY_CONTENT_ENCODING, true); 139 String e = p.getValue(); 140 if (e == null) { 141 e = OpenCms.getSystemInfo().getDefaultEncoding(); 142 } 143 m_headerInclude = CmsEncoder.createString(file.getContents(), e); 145 cache.putCachedObject(CmsDirectEditDefaultProvider.class, m_fileName, m_headerInclude); 147 148 } catch (CmsException e) { 149 m_headerInclude = ""; 151 LOG.error(Messages.get().getBundle().key(Messages.LOG_DIRECT_EDIT_NO_HEADER_1, fileName), e); 152 } 153 } 154 } 155 156 159 public void insertDirectEditEnd(PageContext context) throws JspException { 160 161 String content; 162 switch (m_lastPermissionMode) { 163 164 case 1: content = endDirectEditDisabled(); 166 break; 167 case 2: content = endDirectEditEnabled(); 169 break; 170 default: content = null; 172 } 173 m_lastPermissionMode = 0; 174 print(context, content); 175 } 176 177 180 public void insertDirectEditIncludes(PageContext context, CmsDirectEditParams params) throws JspException { 181 182 print(context, getDirectEditIncludes(params)); 183 } 184 185 188 public boolean insertDirectEditStart(PageContext context, CmsDirectEditParams params) throws JspException { 189 190 String content; 191 CmsDirectEditResourceInfo resourceInfo = getResourceInfo(params.getResourceName()); 193 m_lastPermissionMode = resourceInfo.getPermissions().getPermission(); 195 switch (m_lastPermissionMode) { 196 case 1: content = startDirectEditDisabled(params, resourceInfo); 198 break; 199 case 2: content = startDirectEditEnabled(params, resourceInfo); 201 break; 202 default: content = null; 204 } 205 print(context, content); 206 return content != null; 207 } 208 209 214 public boolean isManual(CmsDirectEditMode mode) { 215 216 return false; 217 } 218 219 222 public I_CmsDirectEditProvider newInstance() { 223 224 CmsDirectEditDefaultProvider result = new CmsDirectEditDefaultProvider(); 225 result.m_configurationParameters = m_configurationParameters; 226 return result; 227 } 228 229 237 public String startDirectEditDisabled(CmsDirectEditParams params, CmsDirectEditResourceInfo resourceInfo) { 238 239 String editId = getNextDirectEditId(); 240 StringBuffer result = new StringBuffer (256); 241 242 result.append("<!-- EDIT BLOCK START (DISABLED): "); 243 result.append(params.m_resourceName); 244 result.append(" ["); 245 result.append(resourceInfo.getResource().getState()); 246 result.append("] "); 247 if (!resourceInfo.getLock().isNullLock()) { 248 result.append(" locked "); 249 try { 250 CmsProject project = m_cms.readProject(resourceInfo.getLock().getProjectId()); 251 result.append(project.getName()); 252 } catch (CmsException e) { 253 result.append(resourceInfo.getLock().getProjectId()); 254 } 255 } 256 result.append(" -->\n"); 257 258 result.append("<script type=\"text/javascript\">\n"); 259 result.append("registerButtonOcms(\"").append(editId).append("\");\n"); 260 result.append("</script>\n"); 261 result.append("<div class=\"ocms_de_bt\" id=\"buttons_").append(editId).append("\">\n"); 262 result.append("<span onmouseover=\"activateOcms(\'").append(editId).append( 263 "\');\" onmouseout=\"deactivateOcms(\'").append(editId).append("\');\">\n"); 264 result.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"table_").append(editId).append( 265 "\"><tr>\n"); 266 result.append("<td class=\"ocms_de\"><span class=\"ocms_disabled\">"); 267 if (m_editButtonStyle == 1) { 268 result.append("<span class=\"ocms_combobutton\" style=\"background-image: url(\'").append( 269 CmsWorkplace.getSkinUri()).append("buttons/directedit_in.png\');\"> ").append( 270 m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_LOCKED_0)).append("</span>"); 271 } else if (m_editButtonStyle == 2) { 272 result.append("<span class=\"ocms_combobutton\" style=\"padding-left: 4px;\">").append( 273 m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_LOCKED_0)).append("</span>"); 274 } else { 275 result.append("<img border=\"0\" SRC=\"").append(CmsWorkplace.getSkinUri()).append( 276 "buttons/directedit_in.png\" title=\"").append( 277 m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_LOCKED_0)).append("\" alt=\"\">"); 278 } 279 result.append("</span></td>\n"); 280 result.append("</tr></table>\n"); 281 result.append("</span>\n"); 282 result.append("</div>\n"); 283 result.append("<div id=\"").append(editId).append("\" class=\"ocms_de_norm\">\n"); 284 285 return result.toString(); 286 } 287 288 296 public String startDirectEditEnabled(CmsDirectEditParams params, CmsDirectEditResourceInfo resourceInfo) { 297 298 String editLocale = m_cms.getRequestContext().getLocale().toString(); 299 String editId = getNextDirectEditId(); 300 StringBuffer result = new StringBuffer (512); 301 302 String uri = m_cms.getRequestContext().getUri(); 303 304 String editLink = getLink(params.getLinkForEdit()); 305 String editNewLink = CmsEncoder.encode(params.getLinkForNew()); 306 307 result.append("<!-- EDIT BLOCK START (ENABLED): "); 308 result.append(params.m_resourceName); 309 result.append(" ["); 310 result.append(resourceInfo.getResource().getState()); 311 result.append("]"); 312 if (!resourceInfo.getLock().isNullLock()) { 313 result.append(" locked "); 314 try { 315 CmsProject project = m_cms.readProject(resourceInfo.getLock().getProjectId()); 316 result.append(project.getName()); 317 } catch (CmsException e) { 318 result.append(resourceInfo.getLock().getProjectId()); 319 } 320 } 321 result.append(" -->\n"); 322 323 result.append("<script type=\"text/javascript\">\n"); 324 result.append("registerButtonOcms(\"").append(editId).append("\");\n"); 325 result.append("</script>\n"); 326 result.append("<div class=\"ocms_de_bt\" id=\"buttons_").append(editId).append("\">\n"); 327 result.append("<form name=\"form_").append(editId).append("\" id=\"form_").append(editId).append( 328 "\" method=\"post\" action=\"").append(editLink).append("\" class=\"ocms_nomargin\" target=\"_top\">\n"); 329 result.append("<input type=\"hidden\" name=\"resource\" value=\"").append(params.getResourceName()).append( 330 "\">\n"); 331 result.append("<input type=\"hidden\" name=\"directedit\" value=\"true\">\n"); 332 result.append("<input type=\"hidden\" name=\"elementlanguage\" value=\"").append(editLocale).append("\">\n"); 333 result.append("<input type=\"hidden\" name=\"elementname\" value=\"").append(params.getElement()).append( 334 "\">\n"); 335 result.append("<input type=\"hidden\" name=\"backlink\" value=\"").append(uri).append("\">\n"); 336 result.append("<input type=\"hidden\" name=\"newlink\">\n"); 337 result.append("<input type=\"hidden\" name=\"closelink\">\n"); 338 result.append("<input type=\"hidden\" name=\"redirect\" value=\"true\">\n"); 339 result.append("<input type=\"hidden\" name=\"editortitle\">\n"); 340 result.append("</form>\n"); 341 result.append("<span onmouseover=\"activateOcms(\'").append(editId).append( 342 "\');\" onmouseout=\"deactivateOcms(\'").append(editId).append("\');\">\n"); 343 result.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"table_").append(editId).append( 344 "\"><tr>\n"); 345 if (params.getButtonSelection().isShowEdit()) { 346 result.append("<td class=\"ocms_de\"><a HREF=\"#\" onclick=\"javascript:submitOcms(\'").append(editId).append( 347 "\', \'").append(CmsDirectEditButtonSelection.VALUE_EDIT).append( 348 "\');\" class=\"ocms_button\"><span class=\"ocms_over\" onmouseover=\"className=\'ocms_over\'\" onmouseout=\"className=\'ocms_over\'\" onmousedown=\"className=\'ocms_push\'\" onmouseup=\"className=\'ocms_over\'\">"); 349 if (m_editButtonStyle == 1) { 350 result.append("<span id=\"bt_").append(editId).append( 351 "\" class=\"ocms_combobutton\" style=\"background-image: url(\'").append(CmsWorkplace.getSkinUri()).append( 352 "buttons/directedit_cl.png\');\"> ").append( 353 m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_EDIT_0)).append("</span>"); 354 } else if (m_editButtonStyle == 2) { 355 result.append("<span class=\"ocms_combobutton\" style=\"padding-left: 4px;\">").append( 356 m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_EDIT_0)).append("</span>"); 357 } else { 358 result.append("<span id=\"bt_").append(editId).append( 359 "\" class=\"ocms_combobutton\" style=\"padding-left: 15px; padding-right: 1px; background-image: url(\'").append( 360 CmsWorkplace.getSkinUri()).append( 361 "buttons/directedit_cl.png\'); background-position: 0px 0px;\" title=\"").append( 362 m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_EDIT_0)).append("\"> </span>"); 363 } 364 result.append("</span></a></td>\n"); 365 } 366 if (params.getButtonSelection().isShowDelete()) { 367 result.append("<td class=\"ocms_de\"><a HREF=\"#\" onclick=\"javascript:submitOcms(\'").append(editId).append( 368 "\', \'").append(CmsDirectEditButtonSelection.VALUE_DELETE).append( 369 "\');\" class=\"ocms_button\"><span class=\"ocms_over\" onmouseover=\"className=\'ocms_over\'\" onmouseout=\"className=\'ocms_over\'\" onmousedown=\"className=\'ocms_push\'\" onmouseup=\"className=\'ocms_over\'\">"); 370 if (m_editButtonStyle == 1) { 371 result.append("<span id=\"del_").append(editId).append( 372 "\" class=\"ocms_combobutton\" style=\"background-image: url(\'").append(CmsWorkplace.getSkinUri()).append( 373 "buttons/deletecontent.png\');\"> ").append(m_messages.key(Messages.GUI_BUTTON_DELETE_0)).append( 374 "</span>"); 375 } else if (m_editButtonStyle == 2) { 376 result.append("<span class=\"ocms_combobutton\" style=\"padding-left: 4px;\">").append( 377 m_messages.key(Messages.GUI_BUTTON_DELETE_0)).append("</span>"); 378 } else { 379 result.append("<img border=\"0\" SRC=\"").append(CmsWorkplace.getSkinUri()).append( 380 "buttons/deletecontent.png\" title=\"").append(m_messages.key(Messages.GUI_BUTTON_DELETE_0)).append( 381 "\" alt=\"\">"); 382 } 383 result.append("</span></a></td>\n"); 384 } 385 if (params.getButtonSelection().isShowNew()) { 386 result.append("<td class=\"ocms_de\"><a HREF=\"#\" onclick=\"javascript:submitOcms(\'").append(editId).append( 387 "\', \'").append(CmsDirectEditButtonSelection.VALUE_NEW).append("\', \'").append(editNewLink).append( 388 "\');\" class=\"ocms_button\"><span class=\"ocms_over\" onmouseover=\"className=\'ocms_over\'\" onmouseout=\"className=\'ocms_over\'\" onmousedown=\"className=\'ocms_push\'\" onmouseup=\"className=\'ocms_over\'\">"); 389 if (m_editButtonStyle == 1) { 390 result.append("<span id=\"new_").append(editId).append( 391 "\" class=\"ocms_combobutton\" style=\"background-image: url(\'").append(CmsWorkplace.getSkinUri()).append( 392 "buttons/new.png\');\"> ").append(m_messages.key(Messages.GUI_BUTTON_NEW_0)).append("</span>"); 393 } else if (m_editButtonStyle == 2) { 394 result.append("<span class=\"ocms_combobutton\" style=\"padding-left: 4px;\">").append( 395 m_messages.key(Messages.GUI_BUTTON_NEW_0)).append("</span>"); 396 } else { 397 result.append("<img border=\"0\" SRC=\"").append(CmsWorkplace.getSkinUri()).append( 398 "buttons/new.png\" title=\"").append(m_messages.key(Messages.GUI_BUTTON_NEW_0)).append( 399 "\" alt=\"\">"); 400 } 401 result.append("</span></a></td>"); 402 } 403 result.append("</tr></table>\n"); 404 result.append("</span>\n"); 405 result.append("</div>\n"); 406 result.append("<div id=\"").append(editId).append("\" class=\"ocms_de_norm\">"); 407 return result.toString(); 408 } 409 } | Popular Tags |