PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.8.0
GiveWP – Donation Plugin and Fundraising Platform v3.8.0
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 3 years ago ModelColumn.php 3 years ago
ListTable.php
155 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 $cellValue = $column->getCellValue($model, $locale);
127 } catch (Exception $exception) {
128 Log::error(
129 sprintf(
130 'Error while rendering column "%s" for table "%s".',
131 $column::getId(),
132 $this->id()
133 ),
134 [
135 'column' => $column::getId(),
136 'table' => $this->id(),
137 'model' => $model->toArray(),
138 'exception' => $exception->getMessage(),
139 ]
140 );
141
142 $cellValue = __(
143 sprintf(
144 'Something went wrong, more in detail in <a href="%s">logs</a>',
145 admin_url('edit.php?post_type=give_forms&page=give-tools&tab=logs')
146 ),
147 'give'
148 );
149 }
150
151 return $cellValue;
152 }
153 }
154
155