RulesRepository.php
2.09 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
<?php declare( strict_types=1 );
namespace ACP\ConditionalFormat;
use AC\Type\ListScreenId;
use AC\Type\UserId;
use ACP\ConditionalFormat\Entity\Rule;
final class RulesRepository {
private const FORMAT = 'format';
private const FACT = 'fact';
private const OPERATOR = 'operator';
private const COLUMN_NAME = 'column_name';
/**
* @var string
*/
private $key;
public function __construct( ListScreenId $list_screen_id ) {
$this->key = 'ac_conditional_format_' . $list_screen_id;
}
public function find( UserId $id ): RuleCollection {
$rules = get_user_meta( $id->get_value(), $this->key, true );
if ( ! is_array( $rules ) ) {
$rules = [];
}
return $this->create_rules( $rules );
}
public function find_by_column( UserId $id, string $column_name ): RuleCollection {
$rule_collection = new RuleCollection();
foreach ( $this->find( $id ) as $rule ) {
if ( $column_name === $rule->get_column_name() ) {
$rule_collection->add( $rule );
}
}
return $rule_collection;
}
public function save( UserId $id, RuleCollection $rules ): void {
$encoded = [];
foreach ( $rules as $rule ) {
$encoded[] = [
self::COLUMN_NAME => $rule->get_column_name(),
self::FORMAT => $rule->get_format(),
self::OPERATOR => $rule->get_operator(),
self::FACT => $rule->has_fact() ? $rule->get_fact() : null,
];
}
update_user_meta( $id->get_value(), $this->key, $encoded );
}
public function remove( UserId $id ): void {
delete_user_meta( $id->get_value(), $this->key );
}
public function remove_for_all_users(): void {
global $wpdb;
$wpdb->delete(
$wpdb->usermeta,
[
'meta_key' => $this->key,
],
[
'%s',
]
);
}
private function create_rules( array $encoded_rules ): RuleCollection {
$rule_collection = new RuleCollection();
foreach ( $encoded_rules as $encoded_rule ) {
$rule = new Rule(
$encoded_rule[ self::COLUMN_NAME ],
$encoded_rule[ self::FORMAT ],
$encoded_rule[ self::OPERATOR ],
$encoded_rule[ self::FACT ] ?? null
);
$rule_collection->add( $rule );
}
return $rule_collection;
}
}