PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.16.4
GiveWP – Donation Plugin and Fundraising Platform v3.16.4
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 3 years ago Exceptions 3 years ago ListTable.php 1 year ago ModelColumn.php 3 years ago
ListTable.php
164 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 2.24.0
28 *
29 * @throws ColumnIdCollisionException
30 */
31 public function __construct()
32 {
33 $this->addColumns(...$this->getDefaultColumns());
34 }
35
36 /**
37 * Get table ID
38 *
39 * @since 2.24.0
40 */
41 abstract public function id(): string;
42
43 /**
44 * Define table columns
45 *
46 * @since 2.24.0
47 *
48 * @return ModelColumn[]
49 */
50 abstract protected function getDefaultColumns(): array;
51
52 /**
53 * Define default visible table columns
54 *
55 * @since 2.24.0
56 *
57 * @return string[]
58 */
59 abstract protected function getDefaultVisibleColumns(): array;
60
61 /**
62 * Get table definitions
63 *
64 * @since 2.24.0
65 *
66 * @return array
67 */
68 public function toArray(): array
69 {
70 return [
71 'id' => $this->id(),
72 'columns' => $this->getColumnsArray(),
73 ];
74 }
75
76 /**
77 * Set table items
78 *
79 * @since 2.24.0
80 *
81 * @param array $items
82 * @param string $locale
83 *
84 * @return void
85 */
86 public function items(array $items, string $locale = '')
87 {
88 $data = [];
89
90 $columns = $this->getColumns();
91
92 foreach ($items as $model) {
93 $row = [];
94
95 foreach ($columns as $column) {
96 $row[$column::getId()] = $this->safelyGetCellValue($column, $model, $locale);;
97 }
98
99 $data[] = $row;
100 }
101
102 $this->items = $data;
103 }
104
105 /**
106 * @since 2.24.0
107 *
108 * @return array
109 */
110 public function getItems(): array
111 {
112 return $this->items;
113 }
114
115 /**
116 * Safely retrieves the cell value for a column. If an exception is thrown, it will be logged and the cell value
117 * will be a human-readable error message. This is to prevent fatal errors from breaking the entire table.
118 *
119 * @since 2.24.1
120 *
121 * @return mixed
122 */
123 private function safelyGetCellValue(ModelColumn $column, Model $model, string $locale)
124 {
125 try {
126 /**
127 * @since 3.16.0
128 */
129 do_action("givewp_list_table_cell_value_{$column::getId()}_before", $column, $model, $locale);
130
131 /**
132 * @since 3.16.0
133 */
134 $cellValue = apply_filters("givewp_list_table_cell_value_{$column::getId()}",
135 $column->getCellValue($model, $locale), $column, $model, $locale);
136 } catch (Exception $exception) {
137 Log::error(
138 sprintf(
139 'Error while rendering column "%s" for table "%s".',
140 $column::getId(),
141 $this->id()
142 ),
143 [
144 'column' => $column::getId(),
145 'table' => $this->id(),
146 'model' => $model->toArray(),
147 'exception' => $exception->getMessage(),
148 ]
149 );
150
151 $cellValue = __(
152 sprintf(
153 'Something went wrong, more in detail in <a href="%s">logs</a>',
154 admin_url('edit.php?post_type=give_forms&page=give-tools&tab=logs')
155 ),
156 'give'
157 );
158 }
159
160 return $cellValue;
161 }
162 }
163
164