diff --git a/security/Member.php b/security/Member.php index 173884897..402b2e9b8 100755 --- a/security/Member.php +++ b/security/Member.php @@ -1844,7 +1844,8 @@ class Member_DatetimeOptionsetField extends OptionsetField { $source = $this->getSource(); foreach($source as $key => $value) { - $itemID = $this->id() . "_" . ereg_replace('[^a-zA-Z0-9]+', '', $key); + // convert the ID to an HTML safe value (colons are not replaced, as they are valid in an ID attribute) + $itemID = $this->id() . '_' . preg_replace('/[^\.a-zA-Z0-9\-\_]/', '_', $key); if($key == $this->value) { $useValue = false; $checked = " checked=\"checked\""; @@ -1856,8 +1857,9 @@ class Member_DatetimeOptionsetField extends OptionsetField { $extraClass = $odd ? "odd" : "even"; $extraClass .= " val" . preg_replace('/[^a-zA-Z0-9\-\_]/', '_', $key); $disabled = ($this->disabled || in_array($key, $this->disabledItems)) ? "disabled=\"disabled\"" : ""; - - $options .= "
  • name\" type=\"radio\" value=\"$key\"$checked $disabled class=\"radio\" />
  • \n"; + $ATT_key = Convert::raw2att($key); + + $options .= "
  • name\" type=\"radio\" value=\"$key\"$checked $disabled class=\"radio\" />
  • \n"; } // Add "custom" input field diff --git a/tests/forms/MemberDatetimeOptionsetFieldTest.php b/tests/forms/MemberDatetimeOptionsetFieldTest.php index 0f216867f..36e149a49 100644 --- a/tests/forms/MemberDatetimeOptionsetFieldTest.php +++ b/tests/forms/MemberDatetimeOptionsetFieldTest.php @@ -47,7 +47,7 @@ class MemberDatetimeOptionsetFieldTest extends SapphireTest { $field = $this->createDateFormatFieldForMember($this->objFromFixture('Member', 'noformatmember')); $field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldSet(), new FieldSet())); // fake form $parser = new CSSContentParser($field->Field()); - $xmlArr = $parser->getBySelector('#Form_Form_DateFormat_MMMdyyyy'); + $xmlArr = $parser->getBySelector('#Form_Form_DateFormat_MMM_d__yyyy'); $this->assertEquals('checked', (string) $xmlArr[0]['checked']); } @@ -55,7 +55,7 @@ class MemberDatetimeOptionsetFieldTest extends SapphireTest { $field = $this->createTimeFormatFieldForMember($this->objFromFixture('Member', 'noformatmember')); $field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldSet(), new FieldSet())); // fake form $parser = new CSSContentParser($field->Field()); - $xmlArr = $parser->getBySelector('#Form_Form_TimeFormat_hmmssa'); + $xmlArr = $parser->getBySelector('#Form_Form_TimeFormat_h_mm_ss_a'); $this->assertEquals('checked', (string) $xmlArr[0]['checked']); } @@ -65,7 +65,7 @@ class MemberDatetimeOptionsetFieldTest extends SapphireTest { $field = $this->createDateFormatFieldForMember($member); $field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldSet(), new FieldSet())); // fake form $parser = new CSSContentParser($field->Field()); - $xmlArr = $parser->getBySelector('#Form_Form_DateFormat_MMddyyyy'); + $xmlArr = $parser->getBySelector('#Form_Form_DateFormat_MM_dd_yyyy'); $this->assertEquals('checked', (string) $xmlArr[0]['checked']); }