forked from OpenStackweb/openstack-org
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNullAbleForeignKey.php
More file actions
63 lines (57 loc) · 2.64 KB
/
Copy pathNullAbleForeignKey.php
File metadata and controls
63 lines (57 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
/**
* Copyright 2016 Open Infrastructure Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
class NullAbleForeignKey extends ForeignKey
{
public function __construct($name, $object = null) {
parent::__construct($name, $object);
$this->defaultVal = !is_null($this->object) && $this->object instanceof Page && $this->name == 'ParentID' ? 0 : null ;
}
public function nullValue() {
return !is_null($this->object) && $this->object instanceof Page && $this->name == 'ParentID' ? 0 : null ;
}
public function requireField() {
$parts =
[
'datatype' => 'int',
'precision' => 11,
'null' => 'null',
'default' => $this->defaultVal,
'arrayValue' => $this->arrayValue
];
$values= ['type'=>'int', 'parts' => $parts];
DB::requireField($this->tableName, $this->name, $values);
}
public function scaffoldFormField($title = null, $params = null) {
$relationName = substr($this->name,0,-2);
$hasOneClass = $this->object->hasOneComponent($relationName);
if($hasOneClass && singleton($hasOneClass) instanceof Image) {
$field = UploadField::create($relationName, $title);
$field->getValidator()->setAllowedExtensions(array('jpg', 'jpeg', 'png', 'gif'));
} elseif($hasOneClass && singleton($hasOneClass) instanceof File) {
$field = UploadField::create($relationName, $title);
} else {
$titleField = (singleton($hasOneClass)->hasField('Title')) ? "Title" : "Name";
$list = DataList::create($hasOneClass);
// Don't scaffold a dropdown for large tables, as making the list concrete
// might exceed the available PHP memory in creating too many DataObject instances
if($list->count() < 100) {
$field = DropdownField::create($this->name, $title, $list->map('ID', $titleField));
$field->setEmptyString(' ');
} else {
$field = NumericField::create($this->name, $title);
}
}
return $field;
}
}