1 <?php
2 3 4 5 6
7 class Enum extends DBField {
8
9 protected $enum, $default;
10
11 public static $default_search_filter_class = 'ExactMatchFilter';
12
13 14 15 16 17 18 19 20 21
22 function __construct($name, $enum = NULL, $default = NULL) {
23 if($enum) {
24 if(!is_array($enum)){
25 $enum = preg_split("/ *, */", trim($enum));
26 }
27
28 $this->enum = $enum;
29
30
31 if($default) {
32 if(in_array($default, $enum)) {
33 $this->default = $default;
34 } else {
35 user_error("Enum::__construct() The default value '$default' does not match any item in the enumeration", E_USER_ERROR);
36 }
37
38
39 } else {
40 $this->default = reset($enum);
41 }
42 }
43 parent::__construct($name);
44 }
45
46 function requireField(){
47 $parts=Array('datatype'=>'enum', 'enums'=>$this->enum, 'character set'=>'utf8', 'collate'=> 'utf8_unicode_ci', 'default'=>$this->default, 'table'=>$this->tableName, 'arrayValue'=>$this->arrayValue);
48 $values=Array('type'=>'enum', 'parts'=>$parts);
49 DB::requireField($this->tableName, $this->name, $values);
50 }
51
52 53 54
55 function formField($title = null, $name = null, $hasEmpty = false, $value = "", $form = null, $emptyString = null) {
56 if(!$title) $title = $this->name;
57 if(!$name) $name = $this->name;
58
59 $field = new DropdownField($name, $title, $this->enumValues($hasEmpty), $value, $form, $emptyString);
60
61 return $field;
62 }
63
64 public function scaffoldFormField($title = null, $params = null) {
65 return $this->formField($title);
66 }
67
68 function scaffoldSearchField($title = null) {
69 $anyText = _t('Enum.ANY', 'Any');
70 return $this->formField($title, null, false, '', null, "($anyText)");
71 }
72
73 function hasValue() {
74 return ($this->value !== '' && $this->value !== null);
75 }
76
77 78 79
80 function enumValues($hasEmpty = false) {
81 return ($hasEmpty) ? array_merge(array('' => ''), ArrayLib::valuekey($this->enum)) : ArrayLib::valuekey($this->enum);
82 }
83
84 function Lower() {
85 return StringField::Lower();
86 }
87 function Upper() {
88 return StringField::Upper();
89 }
90 }
91
92 ?>
93
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-