/
DisambiguationSegmentFieldModifier.php
47 lines (36 loc) · 1.2 KB
/
DisambiguationSegmentFieldModifier.php
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
<?php
namespace SilverStripe\UserForms\Modifier;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\SegmentFieldModifier\AbstractSegmentFieldModifier;
use SilverStripe\UserForms\Model\EditableFormField;
class DisambiguationSegmentFieldModifier extends AbstractSegmentFieldModifier
{
public function getPreview($value)
{
if ($this->form instanceof Form && $record = $this->form->getRecord()) {
$parent = $record->Parent();
$try = $value;
$sibling = EditableFormField::get()
->filter('ParentID', $parent->ID)
->filter('Name', $try)
->where('"ID" != ' . $record->ID)
->first();
$counter = 1;
while ($sibling !== null) {
$try = $value . '_' . $counter++;
$sibling = EditableFormField::get()
->filter('ParentID', $parent->ID)
->filter('Name', $try)
->first();
}
if ($try !== $value) {
return $try;
}
}
return $value;
}
public function getSuggestion($value)
{
return $this->getPreview($value);
}
}