EntryServiceFactory.php
3.11 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
namespace ACA\GravityForms\Editing;
use AC\Helper\Select\Option;
use AC\Type\ToggleOptions;
use ACA\GravityForms\Editing;
use ACA\GravityForms\Field\Field;
use ACA\GravityForms\Field\Type;
use ACP;
use ACP\Editing\View;
class EntryServiceFactory {
/**
* @param Field $field
*
* @return ACP\Editing\Service|false
*/
public function create( Field $field ) {
switch ( true ) {
case $field instanceof Type\Date:
return new ACP\Editing\Service\Date(
( new View\Date() )->set_clear_button( true ),
new Editing\Storage\Entry( $field->get_id() )
);
case $field instanceof Type\CheckboxGroup:
return new ACP\Editing\Service\Basic(
$this->create_view( $field ),
new Editing\Storage\Entry\Checkbox( $field )
);
case $field instanceof Type\Select:
$storage = $field->is_multiple()
? new Editing\Storage\Entry\MultiSelect( $field )
: new Editing\Storage\Entry( $field->get_id() );
return new ACP\Editing\Service\Basic( $this->create_view( $field ), $storage );
case $field instanceof Type\Checkbox:
case $field instanceof Type\ProductSelect:
case $field instanceof Type\Radio:
case $field instanceof Type\Textarea:
case $field instanceof Type\Number:
case $field instanceof Type\Input:
return new ACP\Editing\Service\Basic(
$this->create_view( $field ),
new Editing\Storage\Entry( $field->get_id() )
);
default:
return false;
}
}
/**
* @param Field $field
*
* @return View
*/
private function create_view( Field $field ) {
return $this->set_default_view_properties( $field, $this->create_basic_view( $field ) );
}
/**
* @param Field $field
*
* @return View
*/
private function create_basic_view( Field $field ) {
switch ( true ) {
case $field instanceof Type\CheckboxGroup:
return new View\CheckboxList( $field->get_options() );
case $field instanceof Type\Checkbox:
return new View\Toggle( new ToggleOptions(
new Option( '' ), new Option( $field->get_value() )
) );
case $field instanceof Type\Radio:
case $field instanceof Type\ProductSelect:
return new View\Select( $field->get_options() );
case $field instanceof Type\Select:
return $field->is_multiple()
? ( new View\AdvancedSelect( $field->get_options() ) )->set_multiple( true )
: new View\Select( $field->get_options() );
case $field instanceof Type\Number:
$view = ( new View\Number() );
if ( $field->has_range_min() ) {
$view->set_min( $field->get_range_min() );
}
if ( $field->has_range_max() ) {
$view->set_max( $field->get_range_max() );
}
return $view;
case $field instanceof Type\Textarea:
return new View\TextArea();
case $field instanceof Type\Input:
switch ( $field->get_input_type() ) {
case 'email':
return new View\Email();
case 'url':
return new View\Url();
default:
return new View\Text();
}
default:
return new View\Text();
}
}
private function set_default_view_properties( Field $field, View $view ) {
return $view->set_clear_button( true )
->set_required( $field->is_required() );
}
}