1 package org.jahia.taglibs.form; 2 3 import java.util.ArrayList ; 4 import java.util.Enumeration ; 5 import java.util.HashSet ; 6 import java.util.Locale ; 7 import java.util.Vector ; 8 9 import javax.servlet.ServletRequest ; 10 import javax.servlet.jsp.JspException ; 11 import javax.servlet.jsp.tagext.BodyTagSupport ; 12 13 import org.jahia.content.ContentPageKey; 14 import org.jahia.data.JahiaData; 15 import org.jahia.data.beans.ContainerListBean; 16 import org.jahia.data.containers.JahiaContainer; 17 import org.jahia.data.containers.JahiaContainerDefinition; 18 import org.jahia.data.containers.JahiaContainerList; 19 import org.jahia.data.containers.JahiaContainerStructure; 20 import org.jahia.data.fields.JahiaField; 21 import org.jahia.data.fields.JahiaFieldDefinition; 22 import org.jahia.exceptions.JahiaException; 23 import org.jahia.registries.ServicesRegistry; 24 import org.jahia.services.acl.JahiaACLEntry; 25 import org.jahia.services.acl.JahiaBaseACL; 26 import org.jahia.services.containers.ContentContainer; 27 import org.jahia.services.pages.ContentPage; 28 import org.jahia.services.usermanager.JahiaGroup; 29 import org.jahia.services.usermanager.JahiaGroupManagerService; 30 import org.jahia.services.usermanager.JahiaUser; 31 import org.jahia.services.usermanager.JahiaUserManagerService; 32 import org.jahia.services.version.StateModificationContext; 33 34 43 44 public class FormContentMapperHandlerTag extends BodyTagSupport { 45 46 private static org.apache.log4j.Logger logger = 47 org.apache.log4j.Logger.getLogger(FormContentMapperHandlerTag.class); 48 49 private boolean immediatePublication = false; 50 private String listName = null; 51 private String storeAsUserName = JahiaUserManagerService.GUEST_USERNAME; 52 private String storeAsGroupName = JahiaGroupManagerService.GUEST_GROUPNAME; 53 private String submitMarker = null; 54 55 public boolean isImmediatePublication () { 56 return immediatePublication; 57 } 58 59 public void setImmediatePublication (boolean immediatePublication) { 60 this.immediatePublication = immediatePublication; 61 } 62 63 public String getListName () { 64 return listName; 65 } 66 67 public void setListName (String listName) { 68 this.listName = listName; 69 } 70 71 public String getStoreAsUserName () { 72 return storeAsUserName; 73 } 74 75 public void setStoreAsUserName (String storeAsUserName) { 76 this.storeAsUserName = storeAsUserName; 77 } 78 public String getStoreAsGroupName() { 79 return storeAsGroupName; 80 } 81 public void setStoreAsGroupName(String storeAsGroupName) { 82 this.storeAsGroupName = storeAsGroupName; 83 } 84 public String getSubmitMarker() { 85 return submitMarker; 86 } 87 public void setSubmitMarker(String submitMarker) { 88 this.submitMarker = submitMarker; 89 } 90 91 private void storeForm (JahiaContainerList containerList, 92 JahiaData jData) 93 throws JahiaException { 94 ServicesRegistry servicesRegistry = ServicesRegistry.getInstance(); 95 if (containerList != null) { 96 if (containerList.getID() <= 0) { 97 int parentAclID = 0; 99 if (containerList.getParentEntryID() != 0) { 100 ContentContainer contentContainer = ContentContainer.getContainer(containerList.getParentEntryID()); 101 parentAclID = contentContainer.getAclID(); 102 } else { 103 parentAclID = jData.params().getPage().getAclID(); 104 } 105 servicesRegistry.getJahiaContainersService().saveContainerListInfo(containerList, parentAclID); 106 } 107 JahiaBaseACL acl = new JahiaBaseACL(containerList.getAclID()); 108 JahiaACLEntry aclEntry = new JahiaACLEntry( 109 JahiaBaseACL.ALL_RIGHTS, JahiaACLEntry.ACL_YES); 110 JahiaUser guest = servicesRegistry. 111 getJahiaUserManagerService(). 112 lookupUser(jData.params().getSiteID(), 113 storeAsUserName); 114 JahiaGroup guestGroup = servicesRegistry. 115 getJahiaGroupManagerService(). 116 lookupGroup(jData.params().getSiteID(), 117 storeAsGroupName); 118 119 acl.setUserEntry(guest, aclEntry); 120 acl.setGroupEntry(guestGroup, aclEntry); 121 JahiaContainer container = new JahiaContainer(0, 122 jData.params().getJahiaID(), 123 jData.params().getPageID(), 124 containerList.getID(), 125 0, 126 containerList.getAclID(), 127 containerList.getctndefid(), 128 0, 2); 129 JahiaContainerDefinition containerDef = container.getDefinition(); 130 servicesRegistry.getJahiaContainersService(). 131 saveContainer(container, containerList.getID(), jData.params()); 132 container.setLanguageCode(jData.params().getLocale().toString()); 133 container.fieldsStructureCheck(jData.params()); 134 135 Enumeration fieldDefEnum = containerDef.getStructure(null, jData.params().getPage().getPageTemplateID(), 136 JahiaContainerStructure.JAHIA_FIELD); 137 while (fieldDefEnum.hasMoreElements()) { 138 JahiaContainerStructure curStructureElem = (JahiaContainerStructure) fieldDefEnum.nextElement(); 139 JahiaFieldDefinition curFieldDef = (JahiaFieldDefinition) curStructureElem.getObjectDef(); 140 String curFieldName = curFieldDef.getName(); 141 String curFieldValue = jData.params().getRequest().getParameter(curFieldName); 142 JahiaField curField = container.getField(curFieldName); 143 if ((curFieldValue != null) && (!"".equals(curFieldValue)) && (curField != null)) { 144 curField.setValue(curFieldValue); 145 curField.setObject(curFieldValue); 146 curField.save(jData.params()); 147 } 148 } 149 150 ContentPage currentPage = jData.params().getContentPage(); 151 ArrayList locales = jData.params().getSite(). 152 getLanguageSettingsAsLocales(true); 153 Vector languageCodes = new Vector (); 154 for (int i = 0; i < locales.size(); i++) { 155 Locale loc = (Locale ) locales.get(i); 156 languageCodes.add(loc.toString()); 157 } 158 if (isImmediatePublication()) { 159 currentPage.activeStagingEntries( 160 new HashSet (languageCodes), true, servicesRegistry.getJahiaVersionService(). 163 getSiteSaveVersion(jData.params().getSiteID()), jData.params().getUser(), 165 jData.params(), 166 new StateModificationContext( 167 new ContentPageKey(currentPage. 168 getID()), 169 new HashSet (languageCodes)) 170 ); 172 } 173 } 174 } 175 176 public int doStartTag () { 177 179 ServletRequest request = pageContext.getRequest(); 180 JahiaData jData = (JahiaData) request.getAttribute( 181 "org.jahia.data.JahiaData"); 182 183 String submitMarkerParam = request.getParameter(getSubmitMarker()); 184 if (submitMarkerParam == null) { 185 return SKIP_BODY; 188 } 189 190 if (getListName() != null) { 191 ContainerListBean containerListBean = (ContainerListBean) pageContext.findAttribute(getListName()); 192 if (containerListBean == null) { 193 logger.error("Couldn't find any ContainerListBean object in context name=[" + getListName() + "]"); 194 return SKIP_BODY; 195 } 196 try { 197 storeForm(containerListBean.getJahiaContainerList(), jData); 198 } catch (JahiaException je) { 199 logger.error("Error while processing form content mapper handler:", je); 200 } 201 } 202 203 return SKIP_BODY; 204 } 205 206 public int doEndTag () 207 throws JspException { 208 immediatePublication = false; 211 listName = null; 212 storeAsUserName = JahiaUserManagerService.GUEST_USERNAME; 213 storeAsGroupName = JahiaGroupManagerService.GUEST_GROUPNAME; 214 submitMarker = null; 215 return EVAL_PAGE; 216 } 217 218 } 219 | Popular Tags |