Columns.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
<?php
namespace ACA\MetaBox\Service;
use AC;
use AC\Registerable;
use ACA\MetaBox\ColumnFactory;
use ACA\MetaBox\RelationColumnFactory;
use ACA\MetaBox\RelationshipRepository;
use ACP;
class Columns implements Registerable {
/**
* @var ColumnFactory
*/
private $column_factory;
/**
* @var RelationColumnFactory
*/
private $relation_column_factory;
/**
* @var RelationshipRepository
*/
private $relationship_repository;
public function __construct(
ColumnFactory $column_factory,
RelationColumnFactory $relation_column_factory,
RelationshipRepository $relationship_repository
) {
$this->column_factory = $column_factory;
$this->relation_column_factory = $relation_column_factory;
$this->relationship_repository = $relationship_repository;
}
public function register(): void
{
add_action( 'ac/column_groups', [ $this, 'register_column_groups' ] );
add_action( 'ac/column_types', [ $this, 'add_columns' ] );
add_action( 'ac/column_types', [ $this, 'add_relation_columns' ] );
}
public function register_column_groups( AC\Groups $groups ) {
$groups->add( 'metabox', 'MetaBox', 11 );
$groups->add( 'metabox_relation', 'MetaBox Relation', 11 );
$groups->add( 'metabox_custom', 'Custom MetaBox', 11 );
}
public function add_columns( AC\ListScreen $list_screen ) {
$fields = $this->get_fields_by_list_screen( $list_screen );
foreach ( $fields as $field ) {
$column = $this->column_factory->create( $field );
if ( $column ) {
$list_screen->register_column_type( $column );
}
}
}
/**
* @return array
*/
private function get_fields_by_list_screen( $list_screen ) {
switch ( true ) {
case $list_screen instanceof ACP\ListScreen\Media:
case $list_screen instanceof ACP\ListScreen\Post:
return rwmb_get_object_fields( $list_screen->get_post_type() );
case $list_screen instanceof ACP\ListScreen\User:
return rwmb_get_object_fields( 'user', 'user' );
case $list_screen instanceof ACP\ListScreen\Taxonomy:
return rwmb_get_object_fields( $list_screen->get_taxonomy(), 'term' );
case $list_screen instanceof ACP\ListScreen\Comment:
return $this->get_comment_fields();
default:
return [];
}
}
/**
* @return array
*/
private function get_comment_fields() {
if ( ! class_exists( 'MB_Comment_Meta_Box', false ) ) {
return [];
}
$fields = [];
$metaboxes = rwmb_get_registry( 'meta_box' )->get_by( [ 'object_type' => 'comment' ] );
foreach ( $metaboxes as $metabox ) {
if ( ! $metabox instanceof MB_Comment_Meta_Box ) {
continue;
}
foreach ( $metabox->fields as $field ) {
$fields[ $field['id'] ] = $field;
}
}
return $fields;
}
public function add_relation_columns( AC\ListScreen $list_screen ) {
if ( ! class_exists( 'MB_Relationships_API', false ) || ! method_exists( 'MB_Relationships_API', 'get_all_relationships' ) ) {
return;
}
foreach ( $this->relationship_repository->get_by_list_screen( $list_screen ) as $relationship ) {
$column = $this->relation_column_factory->create( $relationship );
if ( $column instanceof AC\Column ) {
$list_screen->register_column_type( $column );
}
}
}
}