/*
* File : $Source: /alkacon/cvs/alkacon/com.alkacon.opencms.v8.registration/src/com/alkacon/opencms/v8/registration/CmsRegistrationXmlContentHandler.java,v $
* Date : $Date: 2011/03/10 11:59:04 $
* Version: $Revision: 1.3 $
*
* This library is part of OpenCms -
* the Open Source Content Mananagement System
*
* Copyright (C) 2005 Alkacon Software GmbH (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software GmbH, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.alkacon.opencms.v8.registration;
import com.alkacon.opencms.v8.formgenerator.CmsForm;
import org.opencms.file.CmsFile;
import org.opencms.file.CmsGroup;
import org.opencms.file.CmsObject;
import org.opencms.main.CmsException;
import org.opencms.main.OpenCms;
import org.opencms.security.CmsOrganizationalUnit;
import org.opencms.security.CmsRole;
import org.opencms.util.CmsStringUtil;
import org.opencms.xml.content.CmsDefaultXmlContentHandler;
import org.opencms.xml.content.CmsXmlContent;
import org.opencms.xml.types.I_CmsXmlContentValue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
/**
* Xml content handler for the webuser registration.<p>
*
* @author Michael Moossen
*
* @version $Revision: 1.3 $
*
* @since 7.0.3
*/
public class CmsRegistrationXmlContentHandler extends CmsDefaultXmlContentHandler {
/**
* Default constructor.<p>
*/
public CmsRegistrationXmlContentHandler() {
super();
}
/**
* @see org.opencms.xml.content.CmsDefaultXmlContentHandler#prepareForWrite(org.opencms.file.CmsObject, org.opencms.xml.content.CmsXmlContent, org.opencms.file.CmsFile)
*/
@Override
public CmsFile prepareForWrite(CmsObject cms, CmsXmlContent content, CmsFile file) throws CmsException {
// for each locale
if (file.getName().indexOf("~") != 0) {
Iterator<Locale> locales = content.getLocales().iterator();
while (locales.hasNext()) {
Locale locale = locales.next();
// check the account manager role for the given organizational unit
CmsOrganizationalUnit ou = OpenCms.getOrgUnitManager().readOrganizationalUnit(
cms,
content.getStringValue(cms, CmsRegistrationForm.NODE_ACTION
+ "/"
+ CmsRegistrationForm.NODE_ORGANIZATIONALUNIT, locale));
OpenCms.getRoleManager().checkRole(cms, CmsRole.ACCOUNT_MANAGER.forOrgUnit(ou.getName()));
// check the account manager role for the organizational unit of the given group
if (content.getValue(CmsRegistrationForm.NODE_ACTION + "/" + CmsRegistrationForm.NODE_GROUP, locale) != null) {
String groupName = content.getStringValue(cms, CmsRegistrationForm.NODE_ACTION
+ "/"
+ CmsRegistrationForm.NODE_GROUP, locale);
if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(groupName)) {
CmsGroup group = cms.readGroup(groupName);
OpenCms.getRoleManager().checkRole(cms, CmsRole.ACCOUNT_MANAGER.forOrgUnit(group.getOuFqn()));
}
}
// check mandatory fields
List<String> mandatories = new ArrayList<String>(Arrays.asList(new String[] {
"email",
"password",
"login"}));
if (Boolean.valueOf(
content.getStringValue(cms, CmsRegistrationForm.NODE_ACTION
+ "/"
+ CmsRegistrationForm.NODE_EMAILASLOGIN, locale)).booleanValue()) {
mandatories.remove(2);
}
Iterator<I_CmsXmlContentValue> fields = content.getValues(CmsForm.NODE_INPUTFIELD, locale).iterator();
while (fields.hasNext()) {
I_CmsXmlContentValue inputField = fields.next();
String stringValue = content.getStringValue(cms, inputField.getPath()
+ "/"
+ CmsForm.NODE_FIELDLABEL, locale);
if (mandatories.contains(stringValue)) {
mandatories.remove(stringValue);
} else {
int pos = stringValue.lastIndexOf("|");
if ((pos >= 0) && (pos < (stringValue.length() - 1))) {
stringValue = stringValue.substring(pos + 1);
if (mandatories.contains(stringValue)) {
mandatories.remove(stringValue);
}
}
}
}
if (!mandatories.isEmpty()) {
throw new CmsException(Messages.get().container(
Messages.ERR_MANDATORY_FIELDS_MISSING_1,
mandatories));
}
}
}
return super.prepareForWrite(cms, content, file);
}
}