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 / FrmDb.php

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

329 lines 12.8 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('FrmDb'))
5 return;
6
7 class FrmDb{
8
9 function __construct(){
10 global $wpdb;
11 $this->fields = $wpdb->prefix . "frm_fields";
12 $this->forms = $wpdb->prefix . "frm_forms";
13 $this->entries = $wpdb->prefix . "frm_items";
14 $this->entry_metas = $wpdb->prefix . "frm_item_metas";
15 }
16
17 function upgrade($old_db_version=false){
18 global $wpdb;
19 //$frm_db_version is the version of the database we're moving to
20 $frm_db_version = FrmAppHelper::$db_version;
21 $old_db_version = (float)$old_db_version;
22 if(!$old_db_version)
23 $old_db_version = get_option('frm_db_version');
24
25 if ($frm_db_version != $old_db_version){
26 require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
27
28 $charset_collate = '';
29 if( $wpdb->has_cap( 'collation' ) ){
30 if( !empty($wpdb->charset) )
31 $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
32 if( !empty($wpdb->collate) )
33 $charset_collate .= " COLLATE $wpdb->collate";
34 }
35
36 /* Create/Upgrade Fields Table */
37 $sql = "CREATE TABLE {$this->fields} (
38 id int(11) NOT NULL auto_increment,
39 field_key varchar(255) default NULL,
40 name text default NULL,
41 description text default NULL,
42 type text default NULL,
43 default_value longtext default NULL,
44 options longtext default NULL,
45 field_order int(11) default 0,
46 required int(1) default NULL,
47 field_options longtext default NULL,
48 form_id int(11) default NULL,
49 created_at datetime NOT NULL,
50 PRIMARY KEY (id),
51 KEY form_id (form_id),
52 UNIQUE KEY field_key (field_key)
53 ) {$charset_collate};";
54
55 dbDelta($sql);
56
57 /* Create/Upgrade Forms Table */
58 $sql = "CREATE TABLE {$this->forms} (
59 id int(11) NOT NULL auto_increment,
60 form_key varchar(255) default NULL,
61 name varchar(255) default NULL,
62 description text default NULL,
63 parent_form_id int(11) default NULL,
64 logged_in tinyint(1) default NULL,
65 editable tinyint(1) default NULL,
66 is_template tinyint(1) default 0,
67 default_template tinyint(1) default 0,
68 status varchar(255) default NULL,
69 prli_link_id int(11) default NULL,
70 options longtext default NULL,
71 created_at datetime NOT NULL,
72 PRIMARY KEY (id),
73 UNIQUE KEY form_key (form_key)
74 ) {$charset_collate};";
75
76 dbDelta($sql);
77
78 /* Create/Upgrade Items Table */
79 $sql = "CREATE TABLE {$this->entries} (
80 id int(11) NOT NULL auto_increment,
81 item_key varchar(255) default NULL,
82 name varchar(255) default NULL,
83 description text default NULL,
84 ip text default NULL,
85 form_id int(11) default NULL,
86 post_id int(11) default NULL,
87 user_id int(11) default NULL,
88 parent_item_id int(11) default NULL,
89 is_draft tinyint(1) default 0,
90 updated_by int(11) default NULL,
91 created_at datetime NOT NULL,
92 updated_at datetime NOT NULL,
93 PRIMARY KEY (id),
94 KEY form_id (form_id),
95 KEY post_id (post_id),
96 KEY user_id (user_id),
97 KEY parent_item_id (parent_item_id),
98 UNIQUE KEY item_key (item_key)
99 ) {$charset_collate};";
100
101 dbDelta($sql);
102
103 /* Create/Upgrade Meta Table */
104 $sql = "CREATE TABLE {$this->entry_metas} (
105 id int(11) NOT NULL auto_increment,
106 meta_value longtext default NULL,
107 field_id int(11) NOT NULL,
108 item_id int(11) NOT NULL,
109 created_at datetime NOT NULL,
110 PRIMARY KEY (id),
111 KEY field_id (field_id),
112 KEY item_id (item_id)
113 ) {$charset_collate};";
114
115 dbDelta($sql);
116
117 /**** MIGRATE DATA ****/
118 if ($frm_db_version >= 1.03 and $old_db_version < 1.03){
119 global $frm_entry;
120 $all_entries = $frm_entry->getAll();
121 foreach($all_entries as $ent){
122 $opts = maybe_unserialize($ent->description);
123 if(is_array($opts) and in_array($opts['ip']))
124 $wpdb->update( $this->entries, array('ip' => $opts['ip']), array( 'id' => $ent->id ) );
125 }
126 }
127
128 if($frm_db_version >= 4 and $old_db_version < 4){
129 global $frm_entry_meta;
130 $user_ids = $frm_entry_meta->getAll("fi.type='user_id'");
131 foreach($user_ids as $user_id)
132 $wpdb->update( $this->entries, array('user_id' => $user_id->meta_value), array('id' => $user_id->item_id) );
133 }
134
135 if($frm_db_version >= 6 and $old_db_version < 6){
136 $fields = $wpdb->get_results("SELECT id, field_options FROM $this->fields WHERE type not in ('hidden', 'user_id', 'break', 'divider', 'html', 'captcha', 'form')");
137 $default_html = <<<DEFAULT_HTML
138 <div id="frm_field_[id]_container" class="form-field [required_class] [error_class]">
139 <label class="frm_pos_[label_position]">[field_name]
140 <span class="frm_required">[required_label]</span>
141 </label>
142 [input]
143 [if description]<div class="frm_description">[description]</div>[/if description]
144 </div>
145 DEFAULT_HTML;
146 $old_default_html = <<<DEFAULT_HTML
147 <div id="frm_field_[id]_container" class="form-field [required_class] [error_class]">
148 <label class="frm_pos_[label_position]">[field_name]
149 <span class="frm_required">[required_label]</span>
150 </label>
151 [input]
152 [if description]<p class="frm_description">[description]</p>[/if description]
153 </div>
154 DEFAULT_HTML;
155 $new_default_html = FrmFieldsHelper::get_default_html('text');
156 foreach($fields as $field){
157 $field->field_options = maybe_unserialize($field->field_options);
158 if ( !isset($field->field_options['custom_html']) || empty($field->field_options['custom_html']) || $field->field_options['custom_html'] == $default_html || $field->field_options['custom_html'] == $old_default_html ) {
159 $field->field_options['custom_html'] = $new_default_html;
160 $wpdb->update($this->fields, array('field_options' => maybe_serialize($field->field_options)), array( 'id' => $field->id ));
161 }
162 unset($field);
163 }
164 unset($default_html);
165 unset($old_default_html);
166 unset($fields);
167 }
168
169 if($frm_db_version >= 11 and $old_db_version < 11){
170 $forms = $wpdb->get_results("SELECT id, options FROM $this->forms");
171 $sending = __('Sending', 'formidable');
172 $img = FrmAppHelper::plugin_url() .'/images/ajax_loader.gif';
173 $old_default_html = <<<DEFAULT_HTML
174 <div class="frm_submit">
175 [if back_button]<input type="submit" value="[back_label]" name="frm_prev_page" formnovalidate="formnovalidate" [back_hook] />[/if back_button]
176 <input type="submit" value="[button_label]" [button_action] />
177 <img class="frm_ajax_loading" src="$img" alt="$sending" style="visibility:hidden;" />
178 </div>
179 DEFAULT_HTML;
180 unset($sending);
181 unset($img);
182
183 $new_default_html = FrmFormsHelper::get_default_html('submit');
184 $draft_link = FrmFormsHelper::get_draft_link();
185 foreach($forms as $form){
186 $form->options = maybe_unserialize($form->options);
187 if(!isset($form->options['submit_html']) or empty($form->options['submit_html']))
188 continue;
189
190 if ( $form->options['submit_html'] != $new_default_html && $form->options['submit_html'] == $old_default_html ) {
191 $form->options['submit_html'] = $new_default_html;
192 $wpdb->update($this->forms, array('options' => serialize($form->options)), array( 'id' => $form->id ));
193 }else if(!strpos($form->options['submit_html'], 'save_draft')){
194 $form->options['submit_html'] = preg_replace('~\<\/div\>(?!.*\<\/div\>)~', $draft_link ."\r\n</div>", $form->options['submit_html']);
195 $wpdb->update($this->forms, array('options' => serialize($form->options)), array( 'id' => $form->id ));
196 }
197 unset($form);
198 }
199 unset($forms);
200 }
201
202
203
204 /**** ADD/UPDATE DEFAULT TEMPLATES ****/
205 if ( class_exists('FrmXMLController') ) {
206 FrmXMLController::add_default_templates();
207 }
208
209
210 /***** SAVE DB VERSION *****/
211 update_option('frm_db_version', $frm_db_version);
212 }
213
214 do_action('frm_after_install');
215 }
216
217 function get_count($table, $args=array()){
218 global $wpdb;
219 extract(FrmDb::get_where_clause_and_values( $args ));
220
221 $query = "SELECT COUNT(*) FROM {$table}{$where}";
222 $query = $wpdb->prepare($query, $values);
223 return $wpdb->get_var($query);
224 }
225
226 function get_where_clause_and_values( $args ){
227 $where = '';
228 $values = array();
229 if(is_array($args)){
230 foreach($args as $key => $value){
231 $where .= (!empty($where)) ? ' AND' : ' WHERE';
232 $where .= " {$key}=";
233 $where .= is_numeric($value) ? (strpos($value, ".") !== false ? '%f' : '%d') : '%s';
234
235 $values[] = $value;
236 }
237 }
238
239 return compact('where', 'values');
240 }
241
242 function get_var($table, $args=array(), $field='id', $order_by=''){
243 global $wpdb;
244
245 extract(FrmDb::get_where_clause_and_values( $args ));
246 if(!empty($order_by))
247 $order_by = " ORDER BY {$order_by}";
248
249 $query = $wpdb->prepare("SELECT {$field} FROM {$table}{$where}{$order_by} LIMIT 1", $values);
250 return $wpdb->get_var($query);
251 }
252
253 function get_col($table, $args=array(), $field='id', $order_by=''){
254 global $wpdb;
255
256 extract(FrmDb::get_where_clause_and_values( $args ));
257 if(!empty($order_by))
258 $order_by = " ORDER BY {$order_by}";
259
260 $query = $wpdb->prepare("SELECT {$field} FROM {$table}{$where}{$order_by}", $values);
261 return $wpdb->get_col($query);
262 }
263
264 function get_one_record($table, $args=array(), $fields='*', $order_by=''){
265 global $wpdb;
266
267 extract(FrmDb::get_where_clause_and_values( $args ));
268
269 if(!empty($order_by))
270 $order_by = " ORDER BY {$order_by}";
271
272 $query = "SELECT {$fields} FROM {$table}{$where} {$order_by} LIMIT 1";
273 $query = $wpdb->prepare($query, $values);
274 return $wpdb->get_row($query);
275 }
276
277 function get_records($table, $args=array(), $order_by='', $limit='', $fields='*'){
278 global $wpdb;
279
280 extract(FrmDb::get_where_clause_and_values( $args ));
281
282 if ( !empty($order_by) && strpos($order_by, ' ORDER BY ') === false ) {
283 $order_by = " ORDER BY {$order_by}";
284 }
285
286 if ( !empty($limit) && strpos($order_by, ' LIMIT ') === false ) {
287 $limit = " LIMIT {$limit}";
288 }
289
290 $query = "SELECT {$fields} FROM {$table}{$where}{$order_by}{$limit}";
291 $query = $wpdb->prepare($query, $values);
292 return $wpdb->get_results($query);
293 }
294
295 function uninstall(){
296 if ( !current_user_can('administrator') ) {
297 global $frm_settings;
298 wp_die($frm_settings->admin_permission);
299 }
300
301 global $wpdb, $wp_roles;
302
303 $wpdb->query('DROP TABLE IF EXISTS '. $this->fields);
304 $wpdb->query('DROP TABLE IF EXISTS '. $this->forms);
305 $wpdb->query('DROP TABLE IF EXISTS '. $this->entries);
306 $wpdb->query('DROP TABLE IF EXISTS '. $this->entry_metas);
307
308 delete_option('frm_options');
309 delete_option('frm_db_version');
310
311 //delete roles
312 $frm_roles = FrmAppHelper::frm_capabilities();
313 $roles = get_editable_roles();
314 foreach($frm_roles as $frm_role => $frm_role_description){
315 foreach ($roles as $role => $details){
316 $wp_roles->remove_cap( $role, $frm_role );
317 unset($role);
318 unset($details);
319 }
320 unset($frm_role);
321 unset($frm_role_description);
322 }
323 unset($roles);
324 unset($frm_roles);
325
326 do_action('frm_after_uninstall');
327 }
328 }
329