CloneColumnFactory.php
1.39 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
<?php
namespace ACA\ACF;
class CloneColumnFactory {
const CLONE_PREFIX = 'acfclone__';
/**
* @var ColumnFactory
*/
private $column_factory;
public function __construct( ColumnFactory $column_factory ) {
$this->column_factory = $column_factory;
}
/**
* @param array $settings
*
* @return Column|null
*/
public function create( array $settings ) {
$clone_setting = acf_get_field( $settings['__key'] );
if ( $clone_setting['type'] === 'group' ) {
return null;
}
// Seamless without prefix
if ( $clone_setting['name'] === $settings['name'] ) {
return $this->create_seamless_clone( $clone_setting, $settings['label'] );
}
$explode = explode( '_', $settings['key'] );
// Grouped prefixed
if ( count( $explode ) === 2 ) {
$settings['key'] = $settings['_clone'] . '_' . $settings['key'];
}
return $this->create_prefixed_clone( $settings );
}
private function create_seamless_clone( array $clone_setting, $label ) {
$clone_setting['key'] = $clone_setting['name'];
$clone_setting['label'] = $label;
return $this->column_factory->create( $clone_setting );
}
private function create_prefixed_clone( array $settings ) {
$settings['key'] = self::CLONE_PREFIX . $settings['key'];
foreach ( [ '_clone', '_name', '_valid', '__name', '__label', '__key' ] as $key ) {
unset( $settings[ $key ] );
}
return $this->column_factory->create( $settings );
}
}