PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 1.07.11
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v1.07.11
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / classes / models / FrmEntryMeta.php

FrmEntryMeta.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 1.07.11, at classes/models/FrmEntryMeta.php

276 lines 10.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if(!defined('ABSPATH')) die(__('You are not allowed to call this page directly.', 'formidable'));
3
4 if(class_exists('FrmEntryMeta'))
5 return;
6
7 class FrmEntryMeta{
8
9 function add_entry_meta($entry_id, $field_id, $meta_key = null, $meta_value) {
10 global $wpdb;
11
12 if ( (is_array($meta_value) && empty($meta_value) ) || ( !is_array($meta_value) && trim($meta_value) == '' ) ) {
13 // don't save blank fields
14 return;
15 }
16
17 $new_values = array(
18 'meta_value' => is_array($meta_value) ? serialize(array_filter($meta_value)) : trim($meta_value),
19 'item_id' => $entry_id,
20 'field_id' => $field_id,
21 'created_at' => current_time('mysql', 1),
22 );
23
24 $new_values = apply_filters('frm_add_entry_meta', $new_values);
25
26 $query_results = $wpdb->insert( $wpdb->prefix .'frm_item_metas', $new_values );
27
28 $id = $query_results ? $wpdb->insert_id : 0;
29
30 return $id;
31 }
32
33 function update_entry_meta($entry_id, $field_id, $meta_key = null, $meta_value){
34 if ( ! $field_id ) {
35 return false;
36 }
37
38 global $wpdb;
39
40 $values = $where_values = array( 'item_id' => $entry_id, 'field_id' => $field_id );
41 $values['meta_value'] = $meta_value;
42 $values = apply_filters('frm_update_entry_meta', $values);
43 if ( is_array($meta_value) ) {
44 $meta_value = array_filter($meta_value);
45 }
46 $meta_value = maybe_serialize($values['meta_value']);
47
48 return $wpdb->update( $wpdb->prefix .'frm_item_metas', array( 'meta_value' => $meta_value ), $where_values );
49 }
50
51 function update_entry_metas($entry_id, $values){
52 global $frm_field, $wpdb;
53
54 $prev_values = $wpdb->get_col($wpdb->prepare("SELECT field_id FROM {$wpdb->prefix}frm_item_metas WHERE item_id=%d AND field_id != %d", $entry_id, 0));
55
56 foreach ( $values as $field_id => $meta_value ) {
57
58 if ( $prev_values && in_array($field_id, $prev_values) ) {
59 if ( (is_array($meta_value) && empty($meta_value) ) || ( !is_array($meta_value) && trim($meta_value) == '' ) ) {
60 // remove blank fields
61 unset($values[$field_id]);
62 } else {
63 // if value exists, then update it
64 $this->update_entry_meta($entry_id, $field_id, '', $values[$field_id]);
65 }
66 } else {
67 // if value does not exist, then create it
68 $this->add_entry_meta($entry_id, $field_id, '', $values[$field_id]);
69 }
70
71 }
72
73 if ( empty($prev_values) ) {
74 return;
75 }
76
77 $prev_values = array_diff($prev_values, array_keys($values));
78
79 if ( empty($prev_values) ) {
80 return;
81 }
82
83 // Delete any leftovers
84 $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}frm_item_metas WHERE item_id=%d AND field_id in", $entry_id) ." (". implode(',', $prev_values) .")");
85 }
86
87 function duplicate_entry_metas($old_id, $new_id){
88 $metas = $this->get_entry_meta_info($old_id);
89 foreach ( $metas as $meta ) {
90 $this->add_entry_meta($new_id, $meta->field_id, null, $meta->meta_value);
91 unset($meta);
92 }
93 }
94
95 function delete_entry_meta($entry_id, $field_id){
96 global $wpdb;
97 return $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}frm_item_metas WHERE field_id=%d AND item_id=%d", $field_id, $entry_id));
98 }
99
100 function delete_entry_metas($entry_id, $where=''){
101 _deprecated_function( __FUNCTION__, '1.07.05', '$frm_entry_meta->delete_entry_meta()' );
102 }
103
104 function get_entry_meta_by_field($entry_id, $field_id, $return_var=true){
105 global $wpdb;
106
107 $entry_id = (int)$entry_id;
108
109 $cached = wp_cache_get( $entry_id, 'frm_entry' );
110 if($cached and isset($cached->metas) and isset($cached->metas[$field_id])){
111 $result = $cached->metas[$field_id];
112 return stripslashes_deep($result);
113 }
114
115 if (is_numeric($field_id))
116 $query = $wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}frm_item_metas WHERE field_id=%d and item_id=%d", $field_id, $entry_id);
117 else
118 $query = $wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}frm_item_metas it LEFT OUTER JOIN {$wpdb->prefix}frm_fields fi ON it.field_id=fi.id WHERE fi.field_key=%s and item_id=%d", $field_id, $entry_id);
119
120 if($return_var){
121 $result = maybe_unserialize($wpdb->get_var("{$query} LIMIT 1"));
122 if($cached){
123 if(!isset($cached->metas))
124 $cached->metas = array();
125 $cached->metas[$field_id] = $result;
126 wp_cache_set($entry_id, $cached, 'frm_entry');
127 }
128 $result = stripslashes_deep($result);
129 }else{
130 $result = $wpdb->get_col($query, 0);
131 }
132
133 return $result;
134 }
135
136 function get_entry_meta($entry_id, $field_id, $return_var=true){
137 global $wpdb;
138
139 $entry = wp_cache_get($entry_id, 'frm_entry');
140 if($return_var and $entry and isset($entry->metas) and isset($entry->metas[$field_id])){
141 $var = $entry->metas[$field_id];
142 return stripslashes_deep($var);
143 }
144
145 $query = $wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}frm_item_metas WHERE field_id=%d and item_id=%d", $field_id, $entry_id);
146
147 if($return_var){
148 $var = $wpdb->get_var("{$query} LIMIT 1");
149 if($var)
150 $var = stripslashes_deep(maybe_unserialize($var));
151 }else{
152 $var = $wpdb->get_col($query, 0);
153 }
154 return $var;
155 }
156
157 function get_entry_metas($entry_id){
158 global $wpdb;
159 return $wpdb->get_col($wpdb->prepare("SELECT meta_value FROM {$wpdb->prefix}frm_item_metas WHERE item_id=%d", $entry_id));
160 }
161
162 function get_entry_metas_for_field($field_id, $order='', $limit='', $args=array()){
163 global $wpdb;
164
165 $defaults = array('value' => false, 'unique' => false, 'stripslashes' => true, 'is_draft' => false);
166 extract(wp_parse_args( $args, $defaults ));
167
168 $query = "SELECT ";
169 $query .= ($unique) ? "DISTINCT(em.meta_value)" : "em.meta_value";
170 $query .= " FROM {$wpdb->prefix}frm_item_metas em ";
171
172 if(!$is_draft)
173 $query .= " INNER JOIN {$wpdb->prefix}frm_items e ON (e.id=em.item_id) ";
174 $query .= (is_numeric($field_id)) ? "WHERE em.field_id='{$field_id}'" : "LEFT JOIN {$wpdb->prefix}frm_fields fi ON (em.field_id = fi.id) WHERE fi.field_key='{$field_id}'";
175
176 if(!$is_draft)
177 $query .= " AND e.is_draft=0";
178
179 if($value)
180 $query .= " AND meta_value='$value'";
181 $query .= "{$order}{$limit}";
182
183 $values = $wpdb->get_col($query);
184 if($stripslashes){
185 foreach($values as $k => $v){
186 $values[$k] = maybe_unserialize($v);
187 unset($k);
188 unset($v);
189 }
190 $values = stripslashes_deep($values);
191 }
192
193 return $values;
194 }
195
196 function get_entry_meta_info($entry_id){
197 global $wpdb;
198 return $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}frm_item_metas WHERE item_id=%d", $entry_id));
199 }
200
201 function getAll($where = '', $order_by = '', $limit = '', $stripslashes = false){
202 global $wpdb, $frm_field;
203 $query = "SELECT it.*, fi.type as field_type, fi.field_key as field_key,
204 fi.required as required, fi.form_id as field_form_id, fi.name as field_name, fi.options as fi_options
205 FROM {$wpdb->prefix}frm_item_metas it LEFT OUTER JOIN {$wpdb->prefix}frm_fields fi ON it.field_id=fi.id" .
206 FrmAppHelper::prepend_and_or_where(' WHERE ', $where) . $order_by . $limit;
207
208 $results = ($limit == ' LIMIT 1') ? $wpdb->get_row($query) : $wpdb->get_results($query);
209
210 if($results and $stripslashes){
211 foreach($results as $k => $result){
212 $results[$k]->meta_value = stripslashes_deep(maybe_unserialize($result->meta_value));
213 unset($k);
214 unset($result);
215 }
216 }
217
218 return $results;
219 }
220
221 function getEntryIds($where = '', $order_by = '', $limit = '', $unique=true, $drafts=false){
222 global $wpdb;
223 $query = "SELECT ";
224 $query .= ($unique) ? "DISTINCT(it.item_id)" : "it.item_id";
225 $query .= " FROM {$wpdb->prefix}frm_item_metas it LEFT OUTER JOIN {$wpdb->prefix}frm_fields fi ON it.field_id=fi.id ";
226
227 if ( !$drafts ) {
228 $query .= "INNER JOIN {$wpdb->prefix}frm_items e ON (e.id=it.item_id) ";
229 if ( is_array($where) ) {
230 $where['e.is_draft'] = 0;
231 } else {
232 if ( strpos($where, ' GROUP BY ') ) {
233 // don't inject WHERE filtering after GROUP BY
234 $parts = explode(' GROUP BY ', $where);
235 $where = $parts[0];
236 $where .= ' AND e.is_draft=0';
237 $where .= ' GROUP BY '. $parts[1];
238 } else {
239 $where .= ' AND e.is_draft=0';
240 }
241 }
242 }
243
244 $query .= FrmAppHelper::prepend_and_or_where(' WHERE ', $where) . $order_by . $limit;
245 if ($limit == ' LIMIT 1')
246 $results = $wpdb->get_var($query);
247 else
248 $results = $wpdb->get_col($query);
249
250 return $results;
251 }
252
253 function search_entry_metas($search, $field_id='', $operator){
254 global $wpdb;
255 if (is_array($search)){
256 $where = '';
257 foreach ($search as $field => $value){
258 if ($field == 'year' and $value > 0)
259 $where .= " meta_value {$operator} '%{$value}' and";
260 if ($field == 'month' and $value > 0)
261 $where .= " meta_value {$operator} '{$value}%' and";
262 if ($field == 'day' and $value > 0)
263 $where .= " meta_value {$operator} '%/{$value}/%' and";
264 }
265 $where .= " field_id='{$field_id}'";
266 $query = "SELECT DISTINCT item_id FROM {$wpdb->prefix}frm_item_metas". FrmAppHelper::prepend_and_or_where(' WHERE ', $where);
267 }else{
268 if ($operator == 'LIKE')
269 $search = "%{$search}%";
270 $query = $wpdb->prepare("SELECT DISTINCT item_id FROM {$wpdb->prefix}frm_item_metas WHERE meta_value {$operator} %s and field_id = %d", $search, $field_id);
271 }
272 return $wpdb->get_col($query, 0);
273 }
274
275 }
276