PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 3.1.14
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v3.1.14
3.1.14 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 All 123 releases
← All changes | Inc/Core/Helpers/Form/SubmissionMeta.php +91 -11 3.1.8 → 3.1.14 View file →
@@ -1,8 +1,8 @@
1 1 <?php
2 2 /**
3 3 * @package FireBox
4 - * @version 3.1.8 Free
4 + * @version 3.1.14 Free
5 5 *
6 6 * @author FirePlugins <[email protected]>
7 7 * @link https://www.fireplugins.com
8 8 * @copyright Copyright © 2026 FirePlugins All Rights Reserved
@@ -34,10 +34,11 @@
34 34 return [];
35 35 }
36 36
37 37 $meta = [];
38 -
39 - // Save submission meta
38 + $rows = [];
39 +
40 + // Build submission meta
40 41 foreach ($fields_values as $key => $value)
41 42 {
42 43 $submission_meta_payload = [
43 44 'submission_id' => $submission_id,
@@ -46,21 +47,100 @@
46 47 'meta_value' => is_array($value) ? wp_json_encode($value) : $value,
47 48 'created_at' => gmdate('Y-m-d H:i:s'),
48 49 'modified_at' => null
49 50 ];
50 -
51 - if ($save)
51 +
52 + $rows[] = $submission_meta_payload;
53 + $meta[] = $submission_meta_payload;
54 + }
55 +
56 + if ($save)
57 + {
58 + if (!self::insertMany($rows))
52 59 {
53 - if (!firebox()->tables->submissionmeta->insert($submission_meta_payload))
54 - {
55 - return;
56 - }
60 + return;
57 61 }
62 + }
58 63
59 - $meta[] = $submission_meta_payload;
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;
60 80 }
61 81
62 - return $meta;
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;
63 143 }
64 144
65 145 /**
66 146 * Retrieves the meta row.