PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.12.2
Independent Analytics – WordPress Analytics Plugin v2.12.2
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 / Overview / WP_Options_Storage.php
independent-analytics / IAWP / Overview Last commit date
Modules 11 months ago Form_Field.php 11 months ago Form_Field_Option.php 1 year ago Module_Refresh_Job.php 1 year ago Overview.php 1 year ago Sync_Module_Background_Job.php 1 year ago WP_Options_Storage.php 1 year ago
WP_Options_Storage.php
132 lines
1 <?php
2
3 namespace IAWP\Overview;
4
5 use IAWPSCOPED\Illuminate\Support\Collection;
6 /**
7 * Storing an array of data in wp_options? Easily manipulate it with WP_Options_Storage!
8 * @internal
9 */
10 class WP_Options_Storage
11 {
12 private $option_name;
13 public function __construct(string $option_name)
14 {
15 $this->option_name = $option_name;
16 }
17 public function all() : array
18 {
19 return \get_option($this->option_name, []);
20 }
21 /**
22 * Find a record by its id.
23 *
24 * @param string|null $id
25 *
26 * @return array|null
27 */
28 public function find_by_id(?string $id) : ?array
29 {
30 if ($id === null) {
31 return null;
32 }
33 $records = \get_option($this->option_name, []);
34 return Collection::make($records)->first(function ($module) use($id) {
35 return $module['id'] === $id;
36 });
37 }
38 /**
39 * Check if a record exists.
40 *
41 * @param string $id
42 *
43 * @return bool
44 */
45 public function exists(?string $id) : bool
46 {
47 return $this->find_by_id($id) !== null;
48 }
49 /**
50 * Insert a record. If it contains an id that's already in use, the existing record will be
51 * completely replaced by the new one.
52 *
53 * @param array $attributes
54 *
55 * @return string Inserted records id
56 */
57 public function insert(array $attributes) : ?string
58 {
59 // TODO It needs to preserve the position if it's updating an existing record...
60 if (!\is_array($attributes)) {
61 return null;
62 }
63 if (!\array_key_exists('id', $attributes)) {
64 $attributes['id'] = $this->generate_id();
65 }
66 $match_found = \false;
67 $records = \get_option($this->option_name, []);
68 $new_records = Collection::make($records)->map(function ($record) use($attributes, &$match_found) {
69 // Replace the existing record, if any
70 if ($record['id'] === $attributes['id']) {
71 $match_found = \true;
72 return $attributes;
73 }
74 return $record;
75 });
76 if (!$match_found) {
77 $new_records->push($attributes);
78 }
79 \update_option($this->option_name, $new_records->all(), \true);
80 return $attributes['id'];
81 // $this->delete($attributes['id']);
82 //
83 // $records = get_option($this->option_name, []);
84 // $records[] = $attributes;
85 //
86 // update_option($this->option_name, $records, true);
87 //
88 // return $attributes['id'];
89 }
90 /**
91 * Delete a record by its id.
92 *
93 * @param string|null $id
94 *
95 * @return bool
96 */
97 public function delete(?string $id) : bool
98 {
99 if ($id === null) {
100 return \false;
101 }
102 $records = \get_option($this->option_name, []);
103 $new_records = Collection::make($records)->reject(function ($module) use($id) {
104 return $module['id'] === $id;
105 })->values()->all();
106 \update_option($this->option_name, $new_records, \true);
107 // Return true if a record was deleted
108 return \count($records) === \count($new_records) + 1;
109 }
110 public function generate_id() : string
111 {
112 return \bin2hex(\random_bytes(16));
113 }
114 /**
115 * Reorder the records
116 *
117 * @param string[] $ids
118 *
119 * @return void
120 */
121 public function set_order(array $ids) : void
122 {
123 $records = \get_option($this->option_name, []);
124 $sorted_records = Collection::make($records)->sort(function ($a, $b) use($ids) {
125 $a_index = \array_search($a['id'], $ids);
126 $b_index = \array_search($b['id'], $ids);
127 return $a_index <=> $b_index;
128 })->values()->all();
129 \update_option($this->option_name, $sorted_records, \true);
130 }
131 }
132