PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Framework / ListTable / ListTable.php
give / src / Framework / ListTable Last commit date
Concerns 1 year ago Exceptions 3 years ago ListTable.php 9 months ago ModelColumn.php 1 year ago
ListTable.php
202 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Give\Framework\ListTable;
6
7 use Exception;
8 use Give\Framework\ListTable\Concerns\Columns;
9 use Give\Framework\ListTable\Exceptions\ColumnIdCollisionException;
10 use Give\Framework\Models\Model;
11 use Give\Framework\Support\Contracts\Arrayable;
12 use Give\Log\Log;
13
14 /**
15 * @since 2.24.0
16 */
17 abstract class ListTable implements Arrayable
18 {
19 use Columns;
20
21 /**
22 * @var array
23 */
24 private $items = [];
25
26 /**
27 * @since 4.0.0
28 * @var array|object
29 */
30 private $data = [];
31
32 /**
33 * @since 2.24.0
34 *
35 * @throws ColumnIdCollisionException
36 */
37 public function __construct()
38 {
39 $this->addColumns(...$this->getDefaultColumns());
40 }
41
42 /**
43 * Get table ID
44 *
45 * @since 2.24.0
46 */
47 abstract public function id(): string;
48
49 /**
50 * Define table columns
51 *
52 * @since 2.24.0
53 *
54 * @return ModelColumn[]
55 */
56 abstract protected function getDefaultColumns(): array;
57
58 /**
59 * Define default visible table columns
60 *
61 * @since 2.24.0
62 *
63 * @return string[]
64 */
65 abstract protected function getDefaultVisibleColumns(): array;
66
67 /**
68 * Get table definitions
69 *
70 * @since 2.24.0
71 *
72 * @return array
73 */
74 public function toArray(): array
75 {
76 return [
77 'id' => $this->id(),
78 'columns' => $this->getColumnsArray(),
79 ];
80 }
81
82 /**
83 * Set table items
84 *
85 * @since 2.24.0
86 *
87 * @param array $items
88 * @param string $locale
89 *
90 * @return void
91 */
92 public function items(array $items, string $locale = '')
93 {
94 $data = [];
95
96 $columns = $this->getColumns();
97
98 foreach ($items as $model) {
99 $row = [];
100
101 foreach ($columns as $column) {
102 if ($column->isUsingListTableData()) {
103 $column->setListTableData($this->getData());
104 }
105 $row[$column::getId()] = $this->safelyGetCellValue($column, $model, $locale);;
106 }
107
108 $data[] = $row;
109 }
110
111 $this->items = $data;
112 }
113
114 /**
115 * @since 2.24.0
116 *
117 * @return array
118 */
119 public function getItems(): array
120 {
121 return $this->items;
122 }
123
124 /**
125 * @since 4.0.0
126 *
127 * @param array|object $data
128 *
129 * @return ListTable
130 */
131 public function setData($data): ListTable
132 {
133 $this->data = $data;
134
135 return $this;
136 }
137
138 /**
139 * @since 4.0.0
140 *
141 * @return array|object
142 */
143 public function getData()
144 {
145 return $this->data;
146 }
147
148 /**
149 * Safely retrieves the cell value for a column. If an exception is thrown, it will be logged and the cell value
150 * will be a human-readable error message. This is to prevent fatal errors from breaking the entire table.
151 *
152 * @since 2.24.1
153 *
154 * @return mixed
155 */
156 private function safelyGetCellValue(ModelColumn $column, Model $model, string $locale)
157 {
158 try {
159 /**
160 * @since 3.16.0
161 */
162 do_action("givewp_list_table_cell_value_{$column::getId()}_before", $column, $model, $locale);
163
164 /**
165 * @since 3.16.0
166 */
167 $cellValue = apply_filters(
168 "givewp_list_table_cell_value_{$column::getId()}",
169 $column->getCellValue($model, $locale),
170 $column,
171 $model,
172 $locale
173 );
174 } catch (Exception $exception) {
175 Log::error(
176 sprintf(
177 'Error while rendering column "%s" for table "%s".',
178 $column::getId(),
179 $this->id()
180 ),
181 [
182 'column' => $column::getId(),
183 'table' => $this->id(),
184 'model' => $model->toArray(),
185 'exception' => $exception->getMessage(),
186 ]
187 );
188
189 $cellValue = sprintf(
190 __(
191 'Something went wrong, more in detail in <a href="%s">logs</a>',
192 'give'
193 ),
194 admin_url('edit.php?post_type=give_forms&page=give-tools&tab=logs')
195 );
196 }
197
198 return $cellValue;
199 }
200 }
201
202