PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 3.1.13
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v3.1.13
3.1.13 3.1.12 3.1.11 3.1.10 3.1.9 3.1.8 3.1.7 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 All 122 releases
firebox / Inc / Core / Helpers / Form / SubmissionMeta.php

SubmissionMeta.php in FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment 3.1.13, at Inc/Core/Helpers/Form/SubmissionMeta.php

175 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package FireBox
4 * @version 3.1.13 Free
5 *
6 * @author FirePlugins <info@fireplugins.com>
7 * @link https://www.fireplugins.com
8 * @copyright Copyright © 2026 FirePlugins All Rights Reserved
9 * @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
10 */
11
12 namespace FireBox\Core\Helpers\Form;
13
14 if (!defined('ABSPATH'))
15 {
16 exit; // Exit if accessed directly.
17 }
18
19 class SubmissionMeta
20 {
21 /**
22 * Creates the submision meta.
23 *
24 * @param int $submission_id
25 * @param array $fields_values
26 * @param bool $save
27 *
28 * @return array
29 */
30 public static function create($submission_id = null, $fields_values = [], $save = true)
31 {
32 if (!$fields_values)
33 {
34 return [];
35 }
36
37 $meta = [];
38 $rows = [];
39
40 // Build submission meta
41 foreach ($fields_values as $key => $value)
42 {
43 $submission_meta_payload = [
44 'submission_id' => $submission_id,
45 'meta_type' => '',
46 'meta_key' => $key,
47 'meta_value' => is_array($value) ? wp_json_encode($value) : $value,
48 'created_at' => gmdate('Y-m-d H:i:s'),
49 'modified_at' => null
50 ];
51
52 $rows[] = $submission_meta_payload;
53 $meta[] = $submission_meta_payload;
54 }
55
56 if ($save)
57 {
58 if (!self::insertMany($rows))
59 {
60 return;
61 }
62 }
63
64 return $meta;
65 }
66
67 /**
68 * Batch-inserts multiple submission meta rows using a single multi-row INSERT
69 * instead of one INSERT per field.
70 *
71 * @param array $rows
72 *
73 * @return bool
74 */
75 private static function insertMany($rows)
76 {
77 if (!$rows)
78 {
79 return true;
80 }
81
82 global $wpdb;
83
84 $table = firebox()->tables->submissionmeta->getFullTableName();
85
86 $placeholders = [];
87 $values = [];
88
89 foreach ($rows as $row)
90 {
91 $placeholders[] = '(%d, %s, %s, %s, %s, %s)';
92
93 $values[] = $row['submission_id'];
94 $values[] = $row['meta_type'];
95 $values[] = $row['meta_key'];
96 $values[] = $row['meta_value'];
97 $values[] = $row['created_at'];
98 $values[] = $row['modified_at'];
99 }
100
101 $sql = "INSERT INTO `{$table}` (`submission_id`, `meta_type`, `meta_key`, `meta_value`, `created_at`, `modified_at`) VALUES " . implode(', ', $placeholders);
102
103 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
104 $result = $wpdb->query($wpdb->prepare($sql, $values));
105
106 return false !== $result;
107 }
108
109 /**
110 * Retrieves submission meta for multiple submissions in chunked IN() queries,
111 * grouped by submission_id, to avoid one query per submission.
112 *
113 * @param array $submission_ids
114 *
115 * @return array
116 */
117 public static function getMetaForSubmissions($submission_ids = [])
118 {
119 if (!$submission_ids)
120 {
121 return [];
122 }
123
124 $meta_by_submission = [];
125
126 foreach (array_chunk($submission_ids, 500) as $id_chunk)
127 {
128 $ids_in = implode(',', array_map('absint', $id_chunk));
129
130 $chunk_meta = firebox()->tables->submissionmeta->getResults([
131 'where' => [
132 'submission_id' => " IN (" . $ids_in . ")"
133 ]
134 ]);
135
136 foreach ($chunk_meta as $meta_item)
137 {
138 $meta_by_submission[$meta_item->submission_id][] = $meta_item;
139 }
140 }
141
142 return $meta_by_submission;
143 }
144
145 /**
146 * Retrieves the meta row.
147 *
148 * @param int $submission_id
149 * @param string $type
150 * @param string $key
151 *
152 * @return mixed
153 */
154 public static function getMeta($submission_id, $type = '', $key = '')
155 {
156 if (!$submission_id)
157 {
158 return;
159 }
160
161 $where = [
162 'submission_id = ' => "'" . sanitize_key($submission_id) . "'",
163 'meta_type = ' => "'" . sanitize_key($type) . "'"
164 ];
165
166 if (!empty($key))
167 {
168 $where['meta_key = '] = "'" . sanitize_key($key) . "'";
169 }
170
171 return firebox()->tables->submissionmeta->getResults([
172 'where' => $where
173 ], true);
174 }
175 }