1 31 32 package org.opencms.workplace.editors; 33 34 import org.opencms.file.CmsObject; 35 import org.opencms.file.CmsProject; 36 import org.opencms.file.CmsResource; 37 import org.opencms.file.CmsResourceFilter; 38 import org.opencms.file.types.CmsResourceTypeXmlPage; 39 import org.opencms.i18n.CmsEncoder; 40 import org.opencms.jsp.CmsJspActionElement; 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.security.CmsPermissionSet; 46 import org.opencms.util.CmsStringUtil; 47 import org.opencms.util.CmsUUID; 48 import org.opencms.workplace.CmsDialog; 49 import org.opencms.workplace.CmsFrameset; 50 import org.opencms.workplace.CmsWorkplace; 51 import org.opencms.xml.I_CmsXmlDocument; 52 import org.opencms.xml.page.CmsXmlPageFactory; 53 54 import java.io.IOException ; 55 import java.util.List ; 56 import java.util.Locale ; 57 58 import javax.servlet.ServletRequest ; 59 import javax.servlet.jsp.JspException ; 60 61 import org.apache.commons.logging.Log; 62 63 72 public class CmsEditorActionDefault implements I_CmsEditorActionHandler { 73 74 75 private static final Log LOG = CmsLog.getLog(CmsEditorActionDefault.class); 76 77 80 public CmsEditorActionDefault() { 81 82 } 84 85 88 public void editorAction(CmsEditor editor, CmsJspActionElement jsp) throws IOException , JspException { 89 90 editor.actionSave(); 92 editor.actionClear(true); 94 String publishLink = jsp.link(CmsWorkplace.PATH_DIALOGS + "publishresource.jsp"); 96 StringBuffer params = new StringBuffer (64); 98 params.append("?resource="); 99 params.append(editor.getParamResource()); 100 params.append("&action="); 101 params.append(CmsDialog.DIALOG_CONFIRMED); 102 params.append("&directpublish=true&publishsiblings=true"); 103 params.append("&title="); 104 params.append(CmsEncoder.escapeWBlanks(editor.key(Messages.GUI_MESSAGEBOX_TITLE_PUBLISHRESOURCE_0) 105 + ": " 106 + editor.getParamResource(), CmsEncoder.ENCODING_UTF_8)); 107 params.append("&").append(CmsDialog.PARAM_REDIRECT).append("=").append(CmsStringUtil.TRUE); 108 params.append("&closelink="); 109 if (Boolean.valueOf(editor.getParamDirectedit()).booleanValue()) { 110 String linkTarget; 111 if (!"".equals(editor.getParamBacklink())) { 112 linkTarget = jsp.link(editor.getParamBacklink()); 113 } else { 114 linkTarget = jsp.link(editor.getParamResource()); 115 } 116 publishLink += params.toString() + CmsEncoder.escapeWBlanks(linkTarget, CmsEncoder.ENCODING_UTF_8); 118 } else { 119 publishLink += params.toString() 121 + CmsEncoder.escapeWBlanks(jsp.link(CmsFrameset.JSP_WORKPLACE_URI), CmsEncoder.ENCODING_UTF_8); 122 123 } 124 jsp.getResponse().sendRedirect(publishLink); 126 } 127 128 131 public String getButtonName() { 132 133 return Messages.GUI_EXPLORER_CONTEXT_PUBLISH_0; 134 } 135 136 139 public String getButtonUrl(CmsJspActionElement jsp, String resourceName) { 140 141 String button = CmsWorkplace.VFS_PATH_RESOURCES + "buttons/publish.png"; 143 if (!isButtonActive(jsp, resourceName)) { 144 button = CmsWorkplace.VFS_PATH_RESOURCES + "buttons/publish_in.png"; 146 } 147 return jsp.link(button); 148 } 149 150 153 public String getEditMode(CmsObject cmsObject, String filename, String element, ServletRequest req) { 154 155 try { 156 157 CmsResource resource = cmsObject.readResource(filename, CmsResourceFilter.ALL); 158 int currentProject = cmsObject.getRequestContext().currentProject().getId(); 159 CmsUUID userId = cmsObject.getRequestContext().currentUser().getId(); 160 CmsLock lock = cmsObject.getLock(filename); 161 boolean locked = !(lock.isNullLock() || (lock.getUserId().equals(userId) && lock.getProjectId() == currentProject)); 162 163 if (currentProject == CmsProject.ONLINE_PROJECT_ID) { 164 return null; 166 } else if (!OpenCms.getResourceManager().getResourceType(resource.getTypeId()).isDirectEditable()) { 167 return null; 169 } else if (CmsResource.getName(filename).startsWith(org.opencms.workplace.CmsWorkplace.TEMP_FILE_PREFIX)) { 170 return DIRECT_EDIT_MODE_INACTIVE; 172 } else if (!cmsObject.isInsideCurrentProject(filename)) { 173 return DIRECT_EDIT_MODE_INACTIVE; 175 } else if (!cmsObject.hasPermissions( 176 resource, 177 CmsPermissionSet.ACCESS_WRITE, 178 false, 179 CmsResourceFilter.IGNORE_EXPIRATION)) { 180 if (locked) { 182 return DIRECT_EDIT_MODE_DISABLED; 183 } else { 184 return DIRECT_EDIT_MODE_INACTIVE; 185 } 186 } else if (locked) { 187 return DIRECT_EDIT_MODE_DISABLED; 188 } 189 190 if ((element != null) && (resource.getTypeId() == CmsResourceTypeXmlPage.getStaticTypeId())) { 191 I_CmsXmlDocument document = CmsXmlPageFactory.unmarshal(cmsObject, filename, req); 193 List locales = document.getLocales(); 194 Locale locale; 195 if ((locales == null) || (locales.size() == 0)) { 196 locale = (Locale )OpenCms.getLocaleManager().getDefaultLocales(cmsObject, filename).get(0); 197 } else { 198 locale = OpenCms.getLocaleManager().getBestMatchingLocale( 199 null, 200 OpenCms.getLocaleManager().getDefaultLocales(cmsObject, filename), 201 locales); 202 } 203 if (!document.hasValue(element, locale) || !document.isEnabled(element, locale)) { 204 return DIRECT_EDIT_MODE_INACTIVE; 205 } 206 } 207 208 return DIRECT_EDIT_MODE_ENABLED; 210 211 } catch (CmsException e) { 212 if (LOG.isWarnEnabled()) { 213 LOG.warn(Messages.get().getBundle().key(Messages.LOG_CALC_EDIT_MODE_FAILED_1, filename), e); 214 } 215 return DIRECT_EDIT_MODE_INACTIVE; 217 } 218 } 219 220 223 public boolean isButtonActive(CmsJspActionElement jsp, String resourceName) { 224 225 return jsp.getCmsObject().hasPublishPermissions(resourceName); 226 } 227 228 } 229 | Popular Tags |