#1951 - Fix newsletter subscription form

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@49174 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Sam Minnee 2008-02-07 03:00:25 +00:00
parent 2128298467
commit 0ad6198307
2 changed files with 14 additions and 15 deletions

View File

@ -64,14 +64,19 @@ class SubscribeForm extends UserDefinedForm {
if( !empty( $typeValue ) ) { if( !empty( $typeValue ) ) {
$newField->prepopulate( $typeValue ); $newField->prepopulate( $typeValue );
} }
$newField->setField('ID', "new-" . $count); $newField->ParentID = $this->ID;
$newField->Sort = $count; $newField->Sort = $count;
$f->addWithoutWrite($newField); $newField->write();
$count++; $count++;
} }
} }
public function write($showDebug = false, $forceInsert = false, $forceWrite = false) {
$isNew = (!$this->ID);
parent::write($showDebug, $forceInsert, $forceWrite);
if($isNew) $this->addDefaultFields();
}
public function Newsletters() { public function Newsletters() {
$components = $this->getComponents('Newsletters'); $components = $this->getComponents('Newsletters');
@ -179,7 +184,6 @@ class SubscribeForm_SubscribeEmail extends Email_Template {
class SubscribeForm_Controller extends UserDefinedForm_Controller { class SubscribeForm_Controller extends UserDefinedForm_Controller {
function process( $data, $form ) { function process( $data, $form ) {
// Add the user to the mailing list // Add the user to the mailing list
$member = Object::create("Member"); $member = Object::create("Member");
@ -188,7 +192,6 @@ class SubscribeForm_Controller extends UserDefinedForm_Controller {
// map the editables to the data // map the editables to the data
foreach( $this->Fields() as $editable ) { foreach( $this->Fields() as $editable ) {
$field = $editable->CustomParameter; $field = $editable->CustomParameter;
if( !$field ) if( !$field )
continue; continue;
@ -198,14 +201,14 @@ class SubscribeForm_Controller extends UserDefinedForm_Controller {
// if( $member->hasField( $field ) ) // if( $member->hasField( $field ) )
$member->$field = $data[$editable->Name]; $member->$field = $data[$editable->Name];
} }
// need to write the member record before adding the user to groups // need to write the member record before adding the user to groups
$member->write(); $member->write();
$newsletters = array(); $newsletters = array();
// Add member to the selected newsletters // Add member to the selected newsletters
if( $data['Newsletters'] ) foreach( $data['Newsletters'] as $listID ) { if( isset($data['Newsletters'])) foreach( $data['Newsletters'] as $listID ) {
if( !is_numeric( $listID ) ) if( !is_numeric( $listID ) )
continue; continue;
@ -259,13 +262,9 @@ class SubscribeForm_Controller extends UserDefinedForm_Controller {
$newsletters = array(); $newsletters = array();
// Debug::show($newsletterList);
// get the newsletter types to display on the form // get the newsletter types to display on the form
foreach( $newsletterList as $newsletter ) foreach( $newsletterList as $newsletter )
$newsletters[] = $newsletter; $newsletters[$newsletter->ID] = $newsletter->Title;
// Debug::show( $newsletters );
$form->Fields()->push( new CheckboxSetField( 'Newsletters', 'Subscribe to lists', $newsletters ) ); $form->Fields()->push( new CheckboxSetField( 'Newsletters', 'Subscribe to lists', $newsletters ) );

View File

@ -232,7 +232,7 @@ class UserDefinedForm_Controller extends Page_Controller {
if( $field->hasMethod( 'getValueFromData' ) ) if( $field->hasMethod( 'getValueFromData' ) )
$submittedField->Value = $field->getValueFromData( $data ); $submittedField->Value = $field->getValueFromData( $data );
else else
$submittedField->Value = $data[$field->Name]; if(isset($data[$field->Name])) $submittedField->Value = $data[$field->Name];
$submittedField->write(); $submittedField->write();
$submittedFields->push($submittedField); $submittedFields->push($submittedField);
@ -278,7 +278,7 @@ class UserDefinedForm_Controller extends Page_Controller {
$values[$field->Title] = Convert::linkIfMatch($field->getValueFromData( $data )); $values[$field->Title] = Convert::linkIfMatch($field->getValueFromData( $data ));
} else { } else {
$values[$field->Title] = Convert::linkIfMatch($data[$field->Name]); if(isset($data[$field->Name])) $values[$field->Title] = Convert::linkIfMatch($data[$field->Name]);
} }
} }