You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(48) |
Dec
(31) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(22) |
Feb
(68) |
Mar
(185) |
Apr
(11) |
May
(21) |
Jun
(23) |
Jul
(46) |
Aug
(69) |
Sep
(211) |
Oct
(26) |
Nov
(51) |
Dec
(52) |
2006 |
Jan
(13) |
Feb
(13) |
Mar
(8) |
Apr
(21) |
May
(17) |
Jun
(100) |
Jul
(34) |
Aug
(23) |
Sep
(26) |
Oct
(16) |
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(66) |
Oct
(10) |
Nov
(1) |
Dec
|
2008 |
Jan
|
Feb
|
Mar
(1) |
Apr
(3) |
May
(8) |
Jun
(5) |
Jul
(31) |
Aug
(8) |
Sep
(11) |
Oct
(6) |
Nov
|
Dec
|
2012 |
Jan
(13) |
Feb
(2) |
Mar
(9) |
Apr
(6) |
May
(24) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(120) |
2013 |
Jan
(6) |
Feb
(35) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <mb...@re...> - 2004-11-05 23:49:15
|
Author: mbooth Date: 2004-11-06 00:42:14 +0100 (Sat, 06 Nov 2004) New Revision: 86 Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/actions/SimpleEmailListener.java Log: Only output relevant (directly user entered) values in simple email. Format it nicely and handle array values. Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/actions/SimpleEmailListener.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/actions/SimpleEmailListener.java 2004-11-05 23:41:13 UTC (rev 85) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/actions/SimpleEmailListener.java 2004-11-05 23:42:14 UTC (rev 86) @@ -18,33 +18,43 @@ */ package com.arsdigita.formbuilder.actions; +import com.arsdigita.formbuilder.PersistentComponent; +import com.arsdigita.formbuilder.PersistentFormSection; +import com.arsdigita.formbuilder.PersistentProcessListener; +import com.arsdigita.formbuilder.PersistentSubmit; +import com.arsdigita.formbuilder.PersistentWidget; import com.arsdigita.formbuilder.util.Placeholders; +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.parameters.ParameterData; +import com.arsdigita.kernel.Kernel; +import com.arsdigita.kernel.PersonName; +import com.arsdigita.kernel.User; +import com.arsdigita.mail.Mail; import com.arsdigita.persistence.OID; import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.metadata.ObjectType; import com.arsdigita.domain.DataObjectNotFoundException; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.Web; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.event.FormSectionEvent; - -import com.arsdigita.mail.Mail; - -import com.arsdigita.formbuilder.PersistentProcessListener; -import com.arsdigita.formbuilder.util.Placeholders; - import java.math.BigDecimal; import java.util.Iterator; import javax.mail.MessagingException; -import com.arsdigita.util.UncheckedWrapperException; -import com.arsdigita.bebop.event.FormProcessListener; +import org.apache.log4j.Logger; + public class SimpleEmailListener extends PersistentProcessListener { public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.formbuilder.actions.SimpleEmailListener"; + private static final Logger s_log = + Logger.getLogger( SimpleEmailListener.class ); + public static final String TO = "recipient"; public static final String SUBJECT = "subject"; @@ -138,29 +148,74 @@ public void process(FormSectionEvent e) throws FormProcessException { - Placeholders p = new Placeholders(e.getPageState()); + PersistentFormSection form = getForm(); + Placeholders p = new Placeholders(e.getPageState(), e.getFormData()); - String to = p.interpolate(m_to); String subject = p.interpolate(m_subject); - //String from = p.interpolate("::user.givenname:: ::user.familyname:: <::user.email::>"); - String from = p.interpolate("::user.email::"); - StringBuffer body = new StringBuffer(p.interpolate("::user.givenname:: ::user.familyname:: submittted the following form values:\n\n")); + User user = (User) Kernel.getContext().getParty(); + String from; + if( null == user ) { + from = "notloggedinuser@" + + Web.getConfig().getServer().getName(); + } else { + from = user.getPrimaryEmail().getEmailAddress(); + } + StringBuffer body = new StringBuffer(); + + if( null != user ) { + PersonName name = user.getPersonName(); + + body.append( name.getGivenName() ).append( ' ' ); + body.append( name.getFamilyName() ); + body.append( " submitted the following:\n\n" ); + } + + String submit = null; + FormData data = e.getFormData(); - Iterator keys = data.keySet().iterator(); - while (keys.hasNext()) { - String key = (String)keys.next(); - Object value = data.get(key); + Iterator components = form.getComponents().iterator(); + while( components.hasNext() ) { + PersistentComponent c = (PersistentComponent) components.next(); - body.append(key + ": " + (value == null ? "(null)" : value.toString()) + "\n"); + if( c instanceof PersistentWidget ) { + PersistentWidget w = (PersistentWidget) c; + + if( c instanceof PersistentSubmit ) { + submit = c.getDescription(); + } else { + body.append( c.getDescription() ).append( '\n' ); + + Object value = data.get( w.getParameterName() ); + if( null != value ) { + if( value.getClass().isArray() ) { + Object[] values = (Object[]) value; + + for( int i = 0; i < values.length; i++ ) { + body.append( values[i].toString() ); + body.append( '\n' ); + } + } else { + body.append( value.toString() ); + body.append( '\n' ); + } + + body.append( '\n' ); + } + } + } } + if( null != submit ) { + body.append( "User clicked " ).append( submit ); + } + try { - Mail message = new Mail(to, from, subject, body.toString()); + Mail message = new Mail(m_to, from, subject, body.toString()); message.send(); } catch (MessagingException ex) { - throw new UncheckedWrapperException("cannot send message", ex); + throw new FormProcessException( "cannot send message", ex ); } } } |
From: <mb...@re...> - 2004-11-05 23:48:12
|
Author: mbooth Date: 2004-11-06 00:41:13 +0100 (Sat, 06 Nov 2004) New Revision: 85 Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/PersistentProcessListener.java ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/TemplateEmailForm.java Log: Display a list of available substitution values in templated email form. Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/PersistentProcessListener.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/PersistentProcessListener.java 2004-11-05 23:38:51 UTC (rev 84) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/PersistentProcessListener.java 2004-11-05 23:41:13 UTC (rev 85) @@ -20,10 +20,11 @@ import com.arsdigita.kernel.ACSObject; +import com.arsdigita.domain.DataObjectNotFoundException; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.OID; -import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.metadata.ObjectType; -import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.bebop.event.FormProcessListener; @@ -39,6 +40,7 @@ public static final String NAME = "name"; public static final String DESCRIPTION = "description"; public static final String LISTENER_CLASS = "listenerClass"; + public static final String FORM = "form"; public PersistentProcessListener(String typeName) { super(typeName); @@ -115,4 +117,12 @@ public String getDescription() { return (String)get(DESCRIPTION); } + + /** + * Return the PersistentFormSection associated with this listener + */ + public PersistentFormSection getForm() { + DataObject obj = (DataObject) get( FORM ); + return (PersistentFormSection) DomainObjectFactory.newInstance( obj ); + } } Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/TemplateEmailForm.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/TemplateEmailForm.java 2004-11-05 23:38:51 UTC (rev 84) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/TemplateEmailForm.java 2004-11-05 23:41:13 UTC (rev 85) @@ -18,48 +18,56 @@ */ package com.arsdigita.formbuilder.ui.editors; - +import com.arsdigita.formbuilder.PersistentComponent; +import com.arsdigita.formbuilder.PersistentFormSection; +import com.arsdigita.formbuilder.PersistentProcessListener; +import com.arsdigita.formbuilder.PersistentWidget; +import com.arsdigita.formbuilder.actions.TemplateEmailListener; import com.arsdigita.formbuilder.util.GlobalizationUtil ; - -import com.arsdigita.formbuilder.actions.TemplateEmailListener; - +import com.arsdigita.bebop.ColumnPanel; import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.FormSection; import com.arsdigita.bebop.Label; import com.arsdigita.bebop.PageState; - +import com.arsdigita.bebop.SingleSelectionModel; import com.arsdigita.bebop.event.FormSectionEvent; - +import com.arsdigita.bebop.event.PrintEvent; +import com.arsdigita.bebop.event.PrintListener; import com.arsdigita.bebop.form.TextArea; import com.arsdigita.bebop.form.TextField; - +import com.arsdigita.bebop.parameters.EmailParameter; +import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.bebop.parameters.StringInRangeValidationListener; import com.arsdigita.bebop.parameters.StringParameter; - import com.arsdigita.domain.DataObjectNotFoundException; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.OID; +import com.arsdigita.util.Assert; - - import java.math.BigDecimal; +import java.util.Iterator; -import com.arsdigita.bebop.SingleSelectionModel; -import com.arsdigita.formbuilder.PersistentProcessListener; -import com.arsdigita.bebop.parameters.NotNullValidationListener; -import com.arsdigita.bebop.parameters.StringInRangeValidationListener; -import com.arsdigita.bebop.parameters.EmailParameter; -import com.arsdigita.bebop.ColumnPanel; +import org.apache.log4j.Logger; - public class TemplateEmailForm extends ProcessListenerForm { private TextField m_to; private TextField m_subject; private TextArea m_body; + private Label m_bodyLabel; + private SingleSelectionModel m_form; + + private static final Logger s_log = + Logger.getLogger( TemplateEmailForm.class ); + public TemplateEmailForm(String name, SingleSelectionModel form, SingleSelectionModel action) { super(name, form, action); + + m_form = form; } protected void addWidgets(FormSection section) { @@ -84,7 +92,45 @@ m_body.setRows(20); m_body.addValidationListener(new NotNullValidationListener()); m_body.addValidationListener(new StringInRangeValidationListener(1, 4000)); - section.add(new Label(GlobalizationUtil.globalize("formbuilder.ui.editors.body")), ColumnPanel.RIGHT); + + m_bodyLabel = new Label(new PrintListener() { + public void prepare( PrintEvent ev ) { + PageState state = ev.getPageState(); + Label target = (Label) ev.getTarget(); + + BigDecimal formID = (BigDecimal) m_form.getSelectedKey( state ); + Assert.exists( formID, BigDecimal.class ); + + OID formOID = new OID( PersistentFormSection.BASE_DATA_OBJECT_TYPE, + formID ); + + PersistentFormSection form = (PersistentFormSection) + DomainObjectFactory.newInstance( formOID ); + + StringBuffer buf = new StringBuffer(); + buf.append( GlobalizationUtil.globalize("formbuilder.ui.editors.body").localize( state.getRequest() ) ); + buf.append( "<ul>" ); + + Iterator components = form.getComponents().iterator(); + while( components.hasNext() ) { + PersistentComponent c = (PersistentComponent) components.next(); + + if( c instanceof PersistentWidget ) { + PersistentWidget w = (PersistentWidget) c; + + buf.append( "<li>::form." ); + buf.append( w.getParameterName() ); + buf.append( "::</li>" ); + } + } + buf.append( "</ul>" ); + + target.setLabel( buf.toString() ); + } + }); + m_bodyLabel.setOutputEscaping( false ); + + section.add(m_bodyLabel, ColumnPanel.RIGHT); section.add(m_body); } |
From: <mb...@re...> - 2004-11-05 23:45:51
|
Author: mbooth Date: 2004-11-06 00:38:51 +0100 (Sat, 06 Nov 2004) New Revision: 84 Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/util/Placeholders.java ccm-core/trunk/src/com/arsdigita/util/StringUtils.java Log: Handle dashes (-) in parameter names and do something useful with array values. Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/util/Placeholders.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/util/Placeholders.java 2004-11-05 19:57:28 UTC (rev 83) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/util/Placeholders.java 2004-11-05 23:38:51 UTC (rev 84) @@ -114,18 +114,8 @@ while(params.hasNext()) { ParameterData param = (ParameterData)params.next(); Object value = param.getValue(); - m_vars.put("form." + param.getName(), (value == null ? "(null)" : value.toString())); + m_vars.put("form." + param.getName(), (value == null ? "(null)" : value)); } - - /* - Iterator keys = data.keySet().iterator(); - while (keys.hasNext()) { - String key = (String)keys.next(); - Object value = data.get(key); - - m_vars.put("form." + key, (value == null ? "(null)" : value.toString())); - } - */ } protected void setSystemVars() { Modified: ccm-core/trunk/src/com/arsdigita/util/StringUtils.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/util/StringUtils.java 2004-11-05 19:57:28 UTC (rev 83) +++ ccm-core/trunk/src/com/arsdigita/util/StringUtils.java 2004-11-05 23:38:51 UTC (rev 84) @@ -1091,7 +1091,7 @@ try { Util.substitute(result, matcher, - compiler.compile("(::(?:\\w+(?:\\.\\w+)*)::)"), + compiler.compile("(::(?:\\w+(?:[.-]+\\w+)*)::)"), subst, input, Util.SUBSTITUTE_ALL); @@ -1203,12 +1203,41 @@ Object value = (m_hash.containsKey(key) ? m_hash.get(key) : placeholder); + + if( s_log.isDebugEnabled() ) { + Object hashValue = m_hash.get( key ); + + s_log.debug( "Placeholder: " + placeholder ); + s_log.debug( "Key: " + key ); + if( null != value ) { + s_log.debug( "Value (" + value.getClass().getName() + + "): " + value.toString() ); + } + if( null != hashValue ) { + s_log.debug( "Hash Value (" + + hashValue.getClass().getName() + "): " + + hashValue.toString() ); + } + } + String val; - try { + if( value instanceof PlaceholderValueGenerator ) { PlaceholderValueGenerator gen = (PlaceholderValueGenerator)value; val = gen.generate(key); - } catch (ClassCastException ex) { - val = (String)value; + } else if( value.getClass().isArray() ) { + Object[] values = (Object[]) value; + + StringBuffer buf = new StringBuffer(); + for( int i = 0; i < values.length; i++ ) { + buf.append( values[i].toString() ); + if( (values.length - 1) != i ) { + buf.append( ", " ); + } + } + + val = buf.toString(); + } else { + val = value.toString(); } appendBuffer.append(val); |
From: <mb...@re...> - 2004-11-05 20:04:38
|
Author: mbooth Date: 2004-11-05 20:57:28 +0100 (Fri, 05 Nov 2004) New Revision: 83 Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/ControlEditor.java ccm-core/trunk/src/com/arsdigita/formbuilder/ui/MetaObjectProperties.java ccm-core/trunk/src/com/arsdigita/formbuilder/ui/PropertiesEditor.java ccm-core/trunk/src/com/arsdigita/formbuilder/ui/PropertiesForm.java ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/OptionGroupEditor.java Log: Fix "unable to cancel checkbox creation" bug Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/ControlEditor.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/ui/ControlEditor.java 2004-11-05 19:56:43 UTC (rev 82) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/ui/ControlEditor.java 2004-11-05 19:57:28 UTC (rev 83) @@ -18,50 +18,48 @@ */ package com.arsdigita.formbuilder.ui; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.formbuilder.PersistentComponent; +import com.arsdigita.formbuilder.PersistentComponentFactory; import com.arsdigita.formbuilder.PersistentForm; -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.Container; -import com.arsdigita.bebop.PageState; -import java.math.BigDecimal; import com.arsdigita.formbuilder.PersistentFormSection; -import com.arsdigita.bebop.ColumnPanel; -import com.arsdigita.bebop.FormSection; -import com.arsdigita.formbuilder.PersistentComponentFactory; -import com.arsdigita.formbuilder.PersistentComponent; import com.arsdigita.formbuilder.PersistentWidget; import com.arsdigita.formbuilder.WidgetLabel; +import com.arsdigita.formbuilder.util.FormBuilderUtil; +import com.arsdigita.formbuilder.util.GlobalizationUtil; + +import com.arsdigita.bebop.BaseLink; import com.arsdigita.bebop.BoxPanel; +import com.arsdigita.bebop.ColumnPanel; +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Container; +import com.arsdigita.bebop.ControlLink; import com.arsdigita.bebop.Form; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.FormSection; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.Link; import com.arsdigita.bebop.MetaForm; -import com.arsdigita.formbuilder.util.FormBuilderUtil; +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.ParameterSingleSelectionModel; import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.SingleSelectionModel; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.event.PrintListener; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.bebop.parameters.BigDecimalParameter; +import com.arsdigita.bebop.util.Traversal; import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.persistence.OID; import com.arsdigita.util.UncheckedWrapperException; -import com.arsdigita.formbuilder.ui.BaseEditAddObserver; -import com.arsdigita.formbuilder.ui.NewControl; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.Page; -import com.arsdigita.bebop.parameters.BigDecimalParameter; -import com.arsdigita.formbuilder.ui.ControlProperties; -import com.arsdigita.formbuilder.util.GlobalizationUtil; -import com.arsdigita.formbuilder.util.FormBuilderUtil; -import com.arsdigita.bebop.ControlLink; -import com.arsdigita.bebop.BaseLink; -import com.arsdigita.bebop.Link; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.SingleSelectionModel; -import com.arsdigita.bebop.event.ActionListener; -import com.arsdigita.bebop.event.ActionEvent; -import com.arsdigita.bebop.util.Traversal; -import com.arsdigita.bebop.form.Widget; -import com.arsdigita.bebop.event.PrintListener; +import java.math.BigDecimal; +import org.apache.log4j.Logger; /** * This class provides a basic UI component for editing the @@ -70,6 +68,8 @@ * infrasructure */ public class ControlEditor extends SimpleContainer { + private static final Logger s_log = Logger.getLogger( ControlEditor.class ); + private ParameterSingleSelectionModel m_control; private SingleSelectionModel m_form; @@ -249,6 +249,9 @@ private class NewSectionProcessListener implements FormProcessListener { public void process(FormSectionEvent e) throws FormProcessException { + + s_log.debug( "NewSectionProcessListener().process()" ); + PageState state = e.getPageState(); BigDecimal form_id = (BigDecimal)m_form.getSelectedKey(state); @@ -264,6 +267,8 @@ public void process(FormSectionEvent e) throws FormProcessException { + s_log.debug( "NewControlProcessListener.process()" ); + m_control.setSelectedKey(e.getPageState(), null); m_view_form.setVisible(e.getPageState(), false); m_control_props.setVisible(e.getPageState(), true); @@ -274,6 +279,8 @@ public void complete(FormSectionEvent e) throws FormProcessException { + s_log.debug( "ControlPropsCompletionListener.complete()" ); + m_control.setSelectedKey(e.getPageState(), null); m_view_form.setVisible(e.getPageState(), true); m_control_props.setVisible(e.getPageState(), false); @@ -283,6 +290,8 @@ private class MoveControlActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { + s_log.debug( "MoveControlActionListener.actionPerformed()" ); + m_control.setSelectedKey(e.getPageState(), null); m_view_form.setVisible(e.getPageState(), true); m_move_control.setVisible(e.getPageState(), false); Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/MetaObjectProperties.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/ui/MetaObjectProperties.java 2004-11-05 19:56:43 UTC (rev 82) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/ui/MetaObjectProperties.java 2004-11-05 19:57:28 UTC (rev 83) @@ -18,30 +18,33 @@ */ package com.arsdigita.formbuilder.ui; - +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.event.FormSubmissionListener; +import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.formbuilder.MetaObject; import com.arsdigita.formbuilder.MetaObjectCollection; +import com.arsdigita.util.UncheckedWrapperException; + import java.math.BigDecimal; -import com.arsdigita.domain.DataObjectNotFoundException; -import com.arsdigita.util.UncheckedWrapperException; +import java.util.Iterator; import java.util.HashMap; -import java.util.Iterator; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.Page; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.SimpleContainer; -import com.arsdigita.bebop.event.FormSubmissionListener; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.event.FormSectionEvent; +import org.apache.log4j.Logger; - public abstract class MetaObjectProperties extends SimpleContainer { private HashMap m_widget_map; private HashMap m_id_map; private String m_app; private Class m_type; + private static final Logger s_log = + Logger.getLogger( MetaObjectProperties.class ); + public MetaObjectProperties(String app, Class type) { m_type = type; @@ -128,6 +131,11 @@ PropertiesEditor f = (PropertiesEditor)e.getSource(); + if( s_log.isDebugEnabled() ) { + s_log.debug( "MetaObjectListener.process(): " + + f.getClass().getName() ); + } + if (f.isComplete(e.getPageState())) { m_l.complete(new FormSectionEvent(m_source, e.getPageState(), @@ -140,6 +148,11 @@ PropertiesEditor f = (PropertiesEditor)e.getSource(); + if( s_log.isDebugEnabled() ) { + s_log.debug( "MetaObjectListener.submitted(): " + + f.getClass().getName() ); + } + if (f.isCancelled(e.getPageState())) { m_l.complete(new FormSectionEvent(m_source, e.getPageState(), Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/PropertiesEditor.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/ui/PropertiesEditor.java 2004-11-05 19:56:43 UTC (rev 82) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/ui/PropertiesEditor.java 2004-11-05 19:57:28 UTC (rev 83) @@ -18,17 +18,20 @@ */ package com.arsdigita.formbuilder.ui; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.SimpleContainer; -import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; -import com.arsdigita.bebop.FormProcessException; +import org.apache.log4j.Logger; - public class PropertiesEditor extends SimpleContainer { + private static final Logger s_log = + Logger.getLogger( PropertiesEditor.class ); + PropertiesForm m_form; String m_app; @@ -77,6 +80,11 @@ public void process(FormSectionEvent e) throws FormProcessException { + if( s_log.isDebugEnabled() ) { + s_log.debug( "PropertiesFormProcessListener.process(): " + + m_l.getClass().getName() ); + } + m_l.process(new FormSectionEvent(PropertiesEditor.this, e.getPageState(), e.getFormData())); @@ -93,6 +101,11 @@ public void submitted(FormSectionEvent e) throws FormProcessException { + if( s_log.isDebugEnabled() ) { + s_log.debug( "PropertiesFormSubmissionListener.submitted(): " + + m_l.getClass().getName() ); + } + m_l.submitted(new FormSectionEvent(PropertiesEditor.this, e.getPageState(), e.getFormData())); Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/PropertiesForm.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/ui/PropertiesForm.java 2004-11-05 19:56:43 UTC (rev 82) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/ui/PropertiesForm.java 2004-11-05 19:57:28 UTC (rev 83) @@ -22,16 +22,14 @@ import com.arsdigita.formbuilder.util.GlobalizationUtil ; import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.FormSection; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.SaveCancelSection; import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.event.FormSubmissionListener; -import com.arsdigita.bebop.Label; - - public class PropertiesForm extends Form { SaveCancelSection m_buttons; String m_app; @@ -42,13 +40,13 @@ createWidgets(); addSubmissionListener(new FormSubmissionListener() { - public void submitted(FormSectionEvent e) - throws FormProcessException { + public void submitted(FormSectionEvent e) + throws FormProcessException { - if (m_buttons.getCancelButton().isSelected(e.getPageState())) - throw new FormProcessException("Cancel pressed"); - } - }); + if (m_buttons.getCancelButton().isSelected(e.getPageState())) + throw new FormProcessException("Cancel pressed"); + } + }); } public void setApplication(String app) { Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/OptionGroupEditor.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/OptionGroupEditor.java 2004-11-05 19:56:43 UTC (rev 82) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/ui/editors/OptionGroupEditor.java 2004-11-05 19:57:28 UTC (rev 83) @@ -19,18 +19,17 @@ package com.arsdigita.formbuilder.ui.editors; import com.arsdigita.formbuilder.ui.PropertiesEditor; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.SingleSelectionModel; -import com.arsdigita.bebop.event.FormSectionEvent; + +import com.arsdigita.bebop.BoxPanel; +import com.arsdigita.bebop.Form; import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.Form; +import com.arsdigita.bebop.SingleSelectionModel; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.form.Submit; -import com.arsdigita.bebop.BoxPanel; import com.arsdigita.xml.Element; - - public class OptionGroupEditor extends PropertiesEditor { private Form m_editor; @@ -100,8 +99,4 @@ public boolean isComplete(PageState state) { return m_done.isSelected(state); } - - public boolean isCancelled(PageState state) { - return false; - } } |
From: <mb...@re...> - 2004-11-05 20:03:50
|
Author: mbooth Date: 2004-11-05 20:56:43 +0100 (Fri, 05 Nov 2004) New Revision: 82 Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/MoveControl.java ccm-core/trunk/web/packages/formbuilder/xsl/formbuilder.xsl Log: Fix repositioning of form widgets Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/ui/MoveControl.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/ui/MoveControl.java 2004-11-05 12:02:47 UTC (rev 81) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/ui/MoveControl.java 2004-11-05 19:56:43 UTC (rev 82) @@ -18,44 +18,41 @@ */ package com.arsdigita.formbuilder.ui; - +import com.arsdigita.formbuilder.PersistentComponent; +import com.arsdigita.formbuilder.PersistentComponentFactory; +import com.arsdigita.formbuilder.PersistentForm; +import com.arsdigita.formbuilder.PersistentFormSection; +import com.arsdigita.formbuilder.PersistentWidget; +import com.arsdigita.formbuilder.WidgetLabel; +import com.arsdigita.formbuilder.ui.BaseAddObserver; +import com.arsdigita.formbuilder.util.FormBuilderUtil; +import com.arsdigita.formbuilder.util.FormBuilderUtil; import com.arsdigita.formbuilder.util.GlobalizationUtil ; - -import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.ColumnPanel; +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.ControlLink; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; import com.arsdigita.bebop.Form; - - -import com.arsdigita.formbuilder.util.FormBuilderUtil; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.MetaForm; -import java.math.BigDecimal; -import com.arsdigita.domain.DataObjectNotFoundException; -import com.arsdigita.formbuilder.PersistentComponentFactory; -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.ColumnPanel; import com.arsdigita.bebop.FormSection; import com.arsdigita.bebop.GridPanel; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.MetaForm; +import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.SingleSelectionModel; -import com.arsdigita.bebop.ControlLink; -import com.arsdigita.bebop.event.ActionEvent; -import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.domain.DataObjectNotFoundException; -import com.arsdigita.formbuilder.PersistentFormSection; -import com.arsdigita.formbuilder.util.FormBuilderUtil; -import com.arsdigita.formbuilder.PersistentForm; -import com.arsdigita.formbuilder.ui.BaseAddObserver; +import java.math.BigDecimal; import java.util.ArrayList; -import com.arsdigita.bebop.event.ActionListener; -import com.arsdigita.bebop.event.ActionEvent; -import com.arsdigita.formbuilder.PersistentWidget; -import com.arsdigita.formbuilder.WidgetLabel; +import java.util.HashSet; import java.util.Iterator; -import com.arsdigita.formbuilder.PersistentComponent; -import java.util.HashSet; +import org.apache.log4j.Logger; public class MoveControl extends MetaForm { + private static final Logger s_log = Logger.getLogger( MoveControl.class ); + private SingleSelectionModel m_form; private SingleSelectionModel m_control; @@ -71,42 +68,70 @@ m_listeners = new ArrayList(); addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - PageState state = e.getPageState(); + public void actionPerformed(ActionEvent e) { + PageState state = e.getPageState(); - String name = state.getControlEventName(); - String value = state.getControlEventValue(); + String name = state.getControlEventName(); + String value = state.getControlEventValue(); - if (name.equals("move")) { - Integer pos = new Integer(value); - BigDecimal control_id = (BigDecimal)m_control.getSelectedKey(state); - BigDecimal form_id = (BigDecimal)m_form.getSelectedKey(state); + if (name.equals("move")) { + Integer pos = new Integer(value); + BigDecimal control_id = (BigDecimal)m_control.getSelectedKey(state); + BigDecimal form_id = (BigDecimal)m_form.getSelectedKey(state); - PersistentFormSection form = (PersistentFormSection)FormBuilderUtil.instantiateObject(form_id); - PersistentComponent control = (PersistentComponent)FormBuilderUtil.instantiateObject(control_id); + PersistentFormSection form = (PersistentFormSection)FormBuilderUtil.instantiateObject(form_id); + PersistentComponent control = (PersistentComponent)FormBuilderUtil.instantiateObject(control_id); - WidgetLabel label = null; + WidgetLabel label = null; - if (control instanceof PersistentWidget) { - try { - label = WidgetLabel.findByWidget((PersistentWidget)control); - } catch (DataObjectNotFoundException ex) { - // Nada - } + if (control instanceof PersistentWidget) { + try { + label = WidgetLabel.findByWidget((PersistentWidget)control); + } catch (DataObjectNotFoundException ex) { + // Nada } + } - if (label != null) - form.removeComponent(label); - form.removeComponent(control); - if (label != null) - form.addComponent(label, pos.intValue()); - form.addComponent(control, (label == null ? pos.intValue() : pos.intValue() + 1)); - //form.moveComponent(label, pos.intValue()); - //form.moveComponent(control, pos.intValue()+1); + if( s_log.isDebugEnabled() ) { + StringBuffer buf = new StringBuffer(); + + buf.append( "form: " ); + buf.append( form.getOID().toString() ); + + buf.append( "\ncontrol: " ); + buf.append( control.getOID().toString() ); + + buf.append( "\nwidget: " ); + if( null != label ) { + buf.append( label.getOID().toString() ); + } else { + buf.append( "null" ); + } + + buf.append( "\nnew pos: " ); + buf.append( pos ); + + s_log.debug( buf.toString() ); } + + int newPos = pos.intValue(); + + if (label != null) + form.removeComponent(label); + form.removeComponent(control); + + if (label != null) { + if( 1 == newPos ) { + form.addComponent( label, newPos ); + newPos++; + } else { + form.addComponent(label, newPos - 1); + } + } + form.addComponent(control, newPos); } - }); - + } + }); } public Form buildForm(PageState state) { @@ -207,7 +232,7 @@ if (!(componentFactory instanceof WidgetLabel) && m_after) { - addLink(formSection, componentPosition-1); + addLink(formSection, componentPosition); } if (componentFactory.getID().equals(m_moving)) { Modified: ccm-core/trunk/web/packages/formbuilder/xsl/formbuilder.xsl =================================================================== --- ccm-core/trunk/web/packages/formbuilder/xsl/formbuilder.xsl 2004-11-05 12:02:47 UTC (rev 81) +++ ccm-core/trunk/web/packages/formbuilder/xsl/formbuilder.xsl 2004-11-05 19:56:43 UTC (rev 82) @@ -69,9 +69,11 @@ <!-- TODO: we should also check the link/orderNumber to make sure that the order number of this label is the current link/orderNumber -1 --> - <xsl:if test="following-sibling::component[defaultDomainClass='com.arsdigita.formbuilder.WidgetLabel'][1]"> - <xsl:apply-templates select="following-sibling::component[defaultDomainClass='com.arsdigita.formbuilder.WidgetLabel'][1]"/> - </xsl:if> + <xsl:variable name="labelOrder"> + <xsl:value-of select="link/orderNumber - 1"/> + </xsl:variable> + + <xsl:apply-templates select="../component[defaultDomainClass='com.arsdigita.formbuilder.WidgetLabel' and link/orderNumber=$labelOrder]"/> </xsl:template> <!-- a utility template to print out error messages --> |
From: <mb...@re...> - 2004-11-05 12:09:59
|
Author: mbooth Date: 2004-11-05 13:02:47 +0100 (Fri, 05 Nov 2004) New Revision: 81 Modified: ccm-cms/trunk/src/com/arsdigita/cms/ContentItem.java ccm-cms/trunk/src/com/arsdigita/cms/lifecycle/LifecycleService.java ccm-cms/trunk/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java Log: Bring back republish Modified: ccm-cms/trunk/src/com/arsdigita/cms/ContentItem.java =================================================================== --- ccm-cms/trunk/src/com/arsdigita/cms/ContentItem.java 2004-11-04 20:38:35 UTC (rev 80) +++ ccm-cms/trunk/src/com/arsdigita/cms/ContentItem.java 2004-11-05 12:02:47 UTC (rev 81) @@ -1233,6 +1233,27 @@ } /** + * Republish the item using its existing lifecycle + */ + public void republish() { + if( s_log.isDebugEnabled() ) { + s_log.debug( "Republishing item " + getOID().toString() ); + } + + Assert.truth( isLive(), "Attempt to republish non live item " + getOID() ); + + Lifecycle cycle = getLifecycle(); + Assert.exists( cycle, Lifecycle.class ); + + if( s_log.isDebugEnabled() ) { + s_log.debug( "Reusing lifecycle " + cycle.getOID() ); + } + + ContentItem newLive = createPendingVersion( cycle ); + promotePendingVersion( newLive ); + } + + /** * Fetches the publication lifecycle. * * @return The associated lifecycle, null if there is none @@ -1243,8 +1264,10 @@ final Lifecycle lifecycle = LifecycleService.getLifecycle(this); if (lifecycle == null) { - s_log.debug("The item has no lifecycle; checking if the public " + - "version has a lifecycle"); + if( s_log.isDebugEnabled() ) { + s_log.debug("The item has no lifecycle; checking if the " + + "public version has a lifecycle"); + } final ContentItem pub = getPublicVersion(); Modified: ccm-cms/trunk/src/com/arsdigita/cms/lifecycle/LifecycleService.java =================================================================== --- ccm-cms/trunk/src/com/arsdigita/cms/lifecycle/LifecycleService.java 2004-11-04 20:38:35 UTC (rev 80) +++ ccm-cms/trunk/src/com/arsdigita/cms/lifecycle/LifecycleService.java 2004-11-05 12:02:47 UTC (rev 81) @@ -193,7 +193,13 @@ LifecycleService service = null; if (coll.next()) { service = new LifecycleService(coll.getDataObject()); + + if( coll.next() ) { + s_log.warn( "Multiple lifecycles for " + + object.getOID().toString() ); + } } + coll.close(); return service; Modified: ccm-cms/trunk/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java =================================================================== --- ccm-cms/trunk/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java 2004-11-04 20:38:35 UTC (rev 80) +++ ccm-cms/trunk/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java 2004-11-05 12:02:47 UTC (rev 81) @@ -27,18 +27,28 @@ import com.arsdigita.bebop.event.ActionListener; import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.dispatcher.Utilities; import com.arsdigita.cms.lifecycle.Lifecycle; import com.arsdigita.cms.ui.BaseItemPane; import com.arsdigita.cms.ui.ContentItemPage; import com.arsdigita.cms.ui.item.ContentItemRequestLocal; +import com.arsdigita.cms.workflow.CMSTask; +import com.arsdigita.kernel.User; import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.PropertyList; import com.arsdigita.toolbox.ui.Section; +import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.web.RedirectSignal; import com.arsdigita.web.URL; +import com.arsdigita.web.Web; +import com.arsdigita.workflow.simple.Engine; +import com.arsdigita.workflow.simple.TaskException; +import com.arsdigita.workflow.simple.Workflow; + import org.apache.log4j.Logger; import java.text.DateFormat; +import java.util.Iterator; /** * This class contains the component which displays the information @@ -87,6 +97,7 @@ group.setSubject(new Properties()); group.addAction(new UnpublishLink()); + group.addAction(new RepublishLink()); } private class Properties extends PropertyList { @@ -144,6 +155,55 @@ } } + private class RepublishLink extends ActionLink { + RepublishLink() { + super(new Label(gz("cms.ui.item.lifecycle.republish"))); + + addActionListener(new Listener()); + } + + private class Listener implements ActionListener { + public final void actionPerformed(final ActionEvent e) { + final PageState state = e.getPageState(); + final ContentItem item = m_item.getContentItem(state); + + item.republish(); + + // XXX: The following cut/pasted from com.arsdigita.cms.ui.lifecycle.ItemLifecycleSelectForm.ProcessListener.process() + // Refactor to reuse this code + + Workflow workflow = Workflow.getObjectWorkflow( item ); + if( null != workflow ) { + final Engine engine = Engine.getInstance(); + final User user = Web.getContext().getUser(); + + final Iterator iter = engine.getEnabledTasks + (user, workflow.getID()).iterator(); + + while (iter.hasNext()) { + final CMSTask task = (CMSTask) iter.next(); + + if (task.getTaskType().equals(CMSTask.DEPLOY)) { + s_log.debug("Found DEPLOY task, ID=" + CMSTask.DEPLOY); + try { + task.finish(user); + } catch (TaskException te) { + throw new UncheckedWrapperException(te); + } + } + } + } + + if (ContentSection.getConfig().getUseStreamlinedCreation()) { + throw new RedirectSignal + (URL.there(state.getRequest(), + Utilities.getWorkspaceURL()), + true); + } + } + } + } + private class PhaseSection extends Section { PhaseSection() { super(gz("cms.ui.lifecycle.phases")); |
From: <mb...@re...> - 2004-11-04 20:45:40
|
Author: mbooth Date: 2004-11-04 21:38:35 +0100 (Thu, 04 Nov 2004) New Revision: 80 Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/actions/XMLEmailListener.java ccm-core/trunk/src/com/arsdigita/formbuilder/util/Placeholders.java Log: Fix/Enhance XMLEmailListener in a few ways: 1. No longer throws an error when user isn't logged in. 2. Produces much cleaner (but the same) XML. 3. Email title can contain any placeholder text and this will be interpolated. eg set title to "Email about ::form.subject::" "subject" will be interpolated from a fields in the form. Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/actions/XMLEmailListener.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/actions/XMLEmailListener.java 2004-11-04 20:28:37 UTC (rev 79) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/actions/XMLEmailListener.java 2004-11-04 20:38:35 UTC (rev 80) @@ -18,29 +18,44 @@ */ package com.arsdigita.formbuilder.actions; +import com.arsdigita.formbuilder.PersistentProcessListener; import com.arsdigita.formbuilder.util.Placeholders; +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.kernel.Kernel; +import com.arsdigita.kernel.PersonName; +import com.arsdigita.kernel.User; import com.arsdigita.persistence.OID; import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.metadata.ObjectType; import com.arsdigita.domain.DataObjectNotFoundException; - -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.event.FormSectionEvent; - import com.arsdigita.mail.Mail; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.Web; +import com.arsdigita.xml.XML; -import com.arsdigita.formbuilder.PersistentProcessListener; -import com.arsdigita.formbuilder.util.Placeholders; - +import java.io.StringWriter; import java.math.BigDecimal; import java.util.Iterator; import javax.mail.MessagingException; -import com.arsdigita.util.UncheckedWrapperException; -import com.arsdigita.bebop.event.FormProcessListener; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + public class XMLEmailListener extends PersistentProcessListener { public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.formbuilder.actions.XMLEmailListener"; @@ -48,6 +63,17 @@ public static final String TO = "recipient"; public static final String SUBJECT = "subject"; + private ThreadLocal s_dbFactory = new ThreadLocal() { + protected Object initialValue() { + DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); + f.setCoalescing( true ); + f.setNamespaceAware( false ); + f.setValidating( false ); + + return f; + } + }; + public XMLEmailListener() { this(BASE_DATA_OBJECT_TYPE); } @@ -136,27 +162,112 @@ public void process(FormSectionEvent e) throws FormProcessException { - - Placeholders p = new Placeholders(e.getPageState()); + Placeholders p = new Placeholders(e.getPageState(), e.getFormData()); String to = p.interpolate(m_to); String subject = p.interpolate(m_subject); - //String from = p.interpolate("::user.givenname:: ::user.familyname:: <::user.email::>"); - String from = p.interpolate("::user.email::"); - StringBuffer body = new StringBuffer(p.interpolate("<form-data>\n <from email=\"::user.email::\">\n <givenname>::user.givenname::</givename> <familyname>::user.familyname::</familyname>\n </from>\n <field-list>\n")); + String from; + User user = (User)Kernel.getContext().getParty(); + if( null == user ) { + from = "notloggedinuser@" + + Web.getConfig().getServer().getName(); + } else { + from = user.getPrimaryEmail().getEmailAddress(); + } + DocumentBuilder db; + try { + db = ((DocumentBuilderFactory) (s_dbFactory.get())).newDocumentBuilder(); + } catch( ParserConfigurationException ex ) { + throw new UncheckedWrapperException( ex ); + } + + Document doc = db.newDocument(); + Element formDataE = doc.createElement( "form-data" ); + doc.appendChild( formDataE ); + + if( null != user ) { + Element fromE = doc.createElement( "from" ); + fromE.setAttribute( "email", from ); + formDataE.appendChild( fromE ); + + PersonName name = user.getPersonName(); + + String givenName = name.getGivenName(); + Element givenNameE = doc.createElement( "givenname" ); + givenNameE.appendChild( doc.createTextNode( givenName ) ); + fromE.appendChild( givenNameE ); + + String familyName = name.getFamilyName(); + Element familyNameE = doc.createElement( "familyname" ); + familyNameE.appendChild( doc.createTextNode( familyName ) ); + fromE.appendChild( familyNameE ); + } + + Element fieldListE = doc.createElement( "field-list" ); + formDataE.appendChild( fieldListE ); + FormData data = e.getFormData(); Iterator keys = data.keySet().iterator(); while (keys.hasNext()) { String key = (String)keys.next(); Object value = data.get(key); - body.append(" <field" + (value == null ? "" : (" type=\"" + value.getClass().getName() + "\"")) + "><key>" + key + "</key>" + (value == null ? "" : "<value>" + value.toString() + "</value>") + "</field>\n"); + Element fieldE = doc.createElement( "field" ); + fieldListE.appendChild( fieldE ); + + Element keyE = doc.createElement( "key" ); + keyE.appendChild( doc.createTextNode( key ) ); + fieldE.appendChild( keyE ); + + if( null == value ) continue; + + Class valueClass = value.getClass(); + + String type; + if( valueClass.isArray() ) { + type = valueClass.getComponentType().getName(); + } else { + type = valueClass.getName(); + } + fieldE.setAttribute( "type", type ); + + if( valueClass.isArray() ) { + Object[] values = (Object[]) value; + + for( int i = 0; i < values.length; i++ ) { + Element valueE = doc.createElement( "value" ); + valueE.appendChild( doc.createTextNode( values[i].toString() ) ); + fieldE.appendChild( valueE ); + } + } else { + Element valueE = doc.createElement( "value" ); + valueE.appendChild( doc.createTextNode( value.toString() ) ); + fieldE.appendChild( valueE ); + } } - body.append("</field-list>\n</form-data>\n"); + StringWriter body = new StringWriter(); + DOMSource source = new DOMSource( doc ); + + Transformer tr; try { + tr = TransformerFactory.newInstance().newTransformer(); + } catch( TransformerConfigurationException ex ) { + throw new UncheckedWrapperException( ex ); + } + + tr.setOutputProperty( OutputKeys.ENCODING, "UTF-8" ); + tr.setOutputProperty( OutputKeys.INDENT, "yes" ); + + try { + tr.transform( source, new StreamResult( body ) ); + } catch( TransformerException ex ) { + throw new UncheckedWrapperException( ex ); + } + + try { Mail message = new Mail(to, from, subject, body.toString()); message.send(); } catch (MessagingException ex) { Modified: ccm-core/trunk/src/com/arsdigita/formbuilder/util/Placeholders.java =================================================================== --- ccm-core/trunk/src/com/arsdigita/formbuilder/util/Placeholders.java 2004-11-04 20:28:37 UTC (rev 79) +++ ccm-core/trunk/src/com/arsdigita/formbuilder/util/Placeholders.java 2004-11-04 20:38:35 UTC (rev 80) @@ -31,15 +31,19 @@ import java.util.HashMap; import java.util.Iterator; +import java.util.Map; - import com.arsdigita.db.Sequences; import java.sql.SQLException; import com.arsdigita.util.UncheckedWrapperException; import java.math.BigDecimal; +import org.apache.log4j.Logger; + public class Placeholders { + private static final Logger s_log = Logger.getLogger( Placeholders.class ); + private HashMap m_vars; // FIXME: why do we need to pass state into this constructor? I don't see it @@ -71,6 +75,21 @@ public String interpolate(String text) { + if( s_log.isDebugEnabled() ) { + StringBuffer buf = new StringBuffer(); + + buf.append( "Interpolating: " ).append( text ).append( '\n' ); + + Iterator vars = m_vars.entrySet().iterator(); + while( vars.hasNext() ) { + Map.Entry var = (Map.Entry) vars.next(); + + buf.append( var.getKey() ).append( ": " ); + buf.append( var.getValue() ).append( '\n' ); + } + + s_log.debug( buf.toString() ); + } return StringUtils.interpolate(text, m_vars); } |