PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.2.0
Independent Analytics – WordPress Analytics Plugin v2.2.0
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Tables / Columns / Column.php
independent-analytics / IAWP / Tables / Columns Last commit date
Column.php 2 years ago
Column.php
116 lines
1 <?php
2
3 namespace IAWP_SCOPED\IAWP\Tables\Columns;
4
5 use IAWP_SCOPED\IAWP\Tables\Groups\Group;
6 /** @internal */
7 class Column
8 {
9 private $id;
10 private $label;
11 private $visible;
12 private $type;
13 private $requires_woocommerce;
14 private $exportable;
15 private $options;
16 private $filter_placeholder;
17 private $unavailable_for;
18 private $database_column;
19 private $is_nullable;
20 public function __construct($options)
21 {
22 $this->id = $options['id'];
23 $this->label = $options['label'];
24 $this->visible = $options['visible'];
25 $this->type = $options['type'];
26 $this->requires_woocommerce = $options['requires_woocommerce'] ?? \false;
27 $this->exportable = $options['exportable'] ?? \true;
28 $this->options = $options['options'] ?? [];
29 $this->filter_placeholder = $options['filter_placeholder'] ?? '';
30 $this->unavailable_for = $options['unavailable_for'] ?? [];
31 $this->database_column = $options['database_column'] ?? null;
32 $this->is_nullable = $options['is_nullable'] ?? \false;
33 }
34 public function is_enabled_for_group(Group $group) : bool
35 {
36 return !\in_array($group->id(), $this->unavailable_for);
37 }
38 public function is_group_dependent() : bool
39 {
40 return \count($this->unavailable_for) > 0;
41 }
42 public function id() : string
43 {
44 return $this->id;
45 }
46 public function database_column() : string
47 {
48 return !\is_null($this->database_column) ? $this->database_column : $this->id;
49 }
50 public function label() : string
51 {
52 return $this->label;
53 }
54 public function visible() : bool
55 {
56 return $this->visible;
57 }
58 public function type() : string
59 {
60 return $this->type;
61 }
62 /**
63 * @return string[]
64 */
65 public function filter_operators() : array
66 {
67 switch ($this->type) {
68 case 'string':
69 return ['contains', 'exact'];
70 case 'date':
71 return ['before', 'after', 'on'];
72 case 'select':
73 return ['is', 'isnt'];
74 default:
75 // int
76 return ['greater', 'lesser', 'equal'];
77 }
78 }
79 public function is_valid_filter_operator(string $operator) : bool
80 {
81 return \in_array($operator, $this->filter_operators());
82 }
83 public function sort_direction() : string
84 {
85 $descending_types = ['int', 'date'];
86 return \in_array($this->type, $descending_types) ? 'desc' : 'asc';
87 }
88 public function set_visibility(bool $visible) : void
89 {
90 $this->visible = $visible;
91 }
92 public function requires_woocommerce() : bool
93 {
94 return $this->requires_woocommerce;
95 }
96 public function exportable() : bool
97 {
98 return $this->exportable;
99 }
100 /**
101 * @return array List of possible options for this filter such as a list of authors or list of post categories
102 */
103 public function options() : array
104 {
105 return $this->options;
106 }
107 public function filter_placeholder() : string
108 {
109 return $this->filter_placeholder;
110 }
111 public function is_nullable() : bool
112 {
113 return $this->is_nullable;
114 }
115 }
116