mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
BUGFIX #5009: Removed inappropriate field-detection change on multienums with no default (from r97980)
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@102561 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
9e9dcb1b96
commit
1997485ba3
@ -12,14 +12,27 @@
|
|||||||
*/
|
*/
|
||||||
class MultiEnum extends Enum {
|
class MultiEnum extends Enum {
|
||||||
function __construct($name, $enum = NULL, $default = NULL) {
|
function __construct($name, $enum = NULL, $default = NULL) {
|
||||||
parent::__construct($name, $enum, $default);
|
// MultiEnum needs to take care of its own defaults
|
||||||
|
parent::__construct($name, $enum, null);
|
||||||
// MultiEnums are allowed blank defaults
|
|
||||||
if(!$default) $this->default = $default;
|
// Validate and assign the default
|
||||||
|
$this->default = null;
|
||||||
|
if($default) {
|
||||||
|
$defaults = preg_split('/ *, */',trim($default));
|
||||||
|
foreach($defaults as $thisDefault) {
|
||||||
|
if(!in_array($thisDefault, $this->enum)) {
|
||||||
|
user_error("Enum::__construct() The default value '$thisDefault' does not match "
|
||||||
|
. "any item in the enumeration", E_USER_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->default = implode(',',$defaults);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function requireField(){
|
function requireField(){
|
||||||
DB::requireField($this->tableName, $this->name, "set('" . implode("','", $this->enum) . "') character set utf8 collate utf8_general_ci default '{$this->default}'");
|
$defaultClause = $this->default ? " default '". Convert::raw2sql($this->default) . "'" : "";
|
||||||
|
DB::requireField($this->tableName, $this->name, "set('" . implode("','", $this->enum) . "') character set utf8 collate utf8_general_ci$defaultClause");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -32,8 +45,8 @@ class MultiEnum extends Enum {
|
|||||||
|
|
||||||
$field = new CheckboxSetField($name, $title, $this->enumValues($hasEmpty), $value, $form);
|
$field = new CheckboxSetField($name, $title, $this->enumValues($hasEmpty), $value, $form);
|
||||||
|
|
||||||
return $field;
|
return $field;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
40
tests/model/DataObjectSchemaGenerationTest.php
Normal file
40
tests/model/DataObjectSchemaGenerationTest.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class DataObjectSchemaGenerationTest extends SapphireTest {
|
||||||
|
protected $extraDataObjects = array(
|
||||||
|
'DataObjectSchemaGenerationTest_DO',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check that once a schema has been generated, then it doesn't need any more updating
|
||||||
|
*/
|
||||||
|
function testFieldsDontRerequestChanges() {
|
||||||
|
$db = DB::getConn();
|
||||||
|
DB::quiet();
|
||||||
|
|
||||||
|
|
||||||
|
// Table will have been initially created by the $extraDataObjects setting
|
||||||
|
|
||||||
|
|
||||||
|
// Verify that it doesn't need to be recreated
|
||||||
|
$db->beginSchemaUpdate();
|
||||||
|
$obj = new DataObjectSchemaGenerationTest_DO();
|
||||||
|
$obj->requireTable();
|
||||||
|
$needsUpdating = $db->doesSchemaNeedUpdating();
|
||||||
|
$db->cancelSchemaUpdate();
|
||||||
|
|
||||||
|
$this->assertFalse($needsUpdating);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DataObjectSchemaGenerationTest_DO extends DataObject implements TestOnly {
|
||||||
|
static $db = array(
|
||||||
|
'MultiEnum1' => 'MultiEnum("A, B, C, D","")',
|
||||||
|
'MultiEnum2' => 'MultiEnum("A, B, C, D","A")',
|
||||||
|
'MultiEnum3' => 'MultiEnum("A, B, C, D","A, B")',
|
||||||
|
|
||||||
|
'Enum1' => 'Enum("A, B, C, D","")',
|
||||||
|
'Enum2' => 'Enum("A, B, C, D","A")',
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user