Version Description
Download this release
Release Info
Developer | sswells |
Plugin | Formidable Forms – Form Builder for WordPress |
Version | 2.0rc1 |
Comparing to | |
See all releases |
Code changes from version 2.0b8 to 2.0rc1
- classes/controllers/FrmAppController.php +13 -11
- classes/controllers/FrmEntriesController.php +12 -4
- classes/controllers/FrmFieldsController.php +16 -14
- classes/controllers/FrmFormActionsController.php +8 -2
- classes/controllers/FrmFormsController.php +58 -67
- classes/controllers/FrmHooksController.php +5 -9
- classes/controllers/FrmSettingsController.php +7 -5
- classes/controllers/FrmStylesController.php +37 -11
- classes/controllers/FrmXMLController.php +5 -5
- classes/helpers/FrmAppHelper.php +219 -51
- classes/helpers/FrmEntriesHelper.php +178 -97
- classes/helpers/FrmEntriesListHelper.php +6 -2
- classes/helpers/FrmFieldsHelper.php +42 -16
- classes/helpers/FrmFormsHelper.php +33 -12
- classes/helpers/FrmFormsListHelper.php +28 -6
- classes/helpers/FrmListHelper.php +1 -0
- classes/helpers/FrmStylesHelper.php +5 -5
- classes/helpers/FrmXMLHelper.php +4 -1
- classes/models/FrmDb.php +35 -21
- classes/models/FrmEntry.php +20 -23
- classes/models/FrmEntryMeta.php +16 -11
- classes/models/FrmField.php +42 -25
- classes/models/FrmForm.php +1 -1
- classes/models/FrmFormAction.php +1 -1
- classes/models/FrmNotification.php +9 -8
- classes/models/FrmSettings.php +9 -8
- classes/models/FrmStyle.php +28 -21
- classes/views/frm-entries/errors.php +1 -1
- classes/views/frm-entries/form.php +1 -0
- classes/views/frm-entries/sidebar-shared.php +84 -0
- classes/views/frm-entries/sidebar-show.php +3 -1
- classes/views/frm-fields/input.php +37 -53
- classes/views/frm-fields/radio.php +4 -8
- classes/views/frm-fields/show-build.php +2 -4
- classes/views/frm-fields/single-option.php +0 -1
- classes/views/frm-form-actions/default_actions.php +7 -7
- classes/views/frm-form-actions/email_action.php +3 -3
- classes/views/frm-forms/add_field.php +3 -3
- classes/views/frm-forms/add_field_links.php +1 -1
- classes/views/frm-forms/insert_form_popup.php +3 -1
- classes/views/frm-forms/shortcode_opts.php +42 -0
- classes/views/shared/errors.php +1 -1
- classes/views/shared/head.php +1 -19
- classes/views/shared/mb_adv_info.php +2 -2
- classes/views/styles/show.php +1 -1
- classes/views/xml/forms_xml.php +0 -1
- classes/views/xml/posts_xml.php +0 -1
- css/_single_theme.css.php +10 -1
- css/custom_theme.css.php +2 -6
- css/frm_admin.css +3 -0
- deprecated.php +0 -19
- formidable.php +2 -2
- js/bootstrap.min.js +3 -3
- js/formidable.js +367 -245
- js/formidable.min.js +45 -45
- js/formidable_admin.js +13 -11
- languages/formidable-de_DE.mo +0 -0
- languages/formidable-de_DE.po +1286 -1169
- languages/formidable-en_US.po +1286 -1169
- languages/formidable-es_ES.mo +0 -0
- languages/formidable-es_ES.po +1286 -1169
- languages/formidable-fr_FR.mo +0 -0
- languages/formidable-fr_FR.po +1073 -1140
classes/controllers/FrmAppController.php
CHANGED
@@ -142,7 +142,7 @@ return false;
|
|
142 |
return;
|
143 |
}
|
144 |
|
145 |
-
wp_register_script('bootstrap_tooltip', FrmAppHelper::plugin_url() .'/js/bootstrap.min.js', array('jquery'), '3.2
|
146 |
|
147 |
if ( isset($_GET) && ((isset($_GET['page']) && strpos($_GET['page'], 'formidable') === 0 ) ||
|
148 |
($pagenow == 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] == 'frm_display'))
|
@@ -162,7 +162,6 @@ return false;
|
|
162 |
add_thickbox();
|
163 |
|
164 |
wp_register_script('formidable-editinplace', FrmAppHelper::plugin_url() .'/js/jquery/jquery.editinplace.packed.js', array('jquery'), '2.3.0');
|
165 |
-
wp_register_script('jquery-frm-themepicker', FrmAppHelper::plugin_url() .'/js/jquery/jquery-ui-themepicker.js', array('jquery'), $version);
|
166 |
|
167 |
if ( FrmAppHelper::is_admin_page('formidable-settings') || FrmAppHelper::is_admin_page('formidable-styles') ) {
|
168 |
// load multselect js
|
@@ -225,6 +224,11 @@ return false;
|
|
225 |
return preg_replace_callback( $regex, 'FrmAppHelper::widget_text_filter_callback', $content );
|
226 |
}
|
227 |
|
|
|
|
|
|
|
|
|
|
|
228 |
public static function front_head(){
|
229 |
if (is_multisite()){
|
230 |
$old_db_version = get_option('frm_db_version');
|
@@ -246,11 +250,9 @@ return false;
|
|
246 |
|
247 |
self::localize_script('front');
|
248 |
|
249 |
-
wp_enqueue_script('jquery');
|
250 |
-
|
251 |
$frm_settings = FrmAppHelper::get_settings();
|
252 |
|
253 |
-
$style = apply_filters('get_frm_stylesheet',
|
254 |
if($style){
|
255 |
foreach ( (array) $style as $k => $file ) {
|
256 |
wp_register_style($k, $file, array(), $version);
|
@@ -268,6 +270,9 @@ return false;
|
|
268 |
}
|
269 |
}
|
270 |
|
|
|
|
|
|
|
271 |
public static function localize_script($location){
|
272 |
wp_localize_script('formidable', 'frm_js', array(
|
273 |
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
@@ -347,18 +352,15 @@ return false;
|
|
347 |
|
348 |
$frm_settings = FrmAppHelper::get_settings();
|
349 |
if ( $frm_vars['load_css'] && ! FrmAppHelper::is_admin() && $frm_settings->load_style != 'none' ) {
|
350 |
-
$css = apply_filters('get_frm_stylesheet',
|
351 |
|
352 |
-
if(!empty($css)){
|
353 |
-
echo "\n".'<script type="text/javascript">';
|
354 |
foreach ( (array) $css as $css_key => $file ) {
|
355 |
wp_enqueue_style($css_key);
|
356 |
unset($css_key, $file);
|
357 |
}
|
358 |
-
unset($css);
|
359 |
-
|
360 |
-
echo '</script>'."\n";
|
361 |
}
|
|
|
362 |
}
|
363 |
|
364 |
if ( ! FrmAppHelper::is_admin() && $location != 'header' && ! empty($frm_vars['forms_loaded']) ) {
|
142 |
return;
|
143 |
}
|
144 |
|
145 |
+
wp_register_script('bootstrap_tooltip', FrmAppHelper::plugin_url() .'/js/bootstrap.min.js', array('jquery'), '3.3.2');
|
146 |
|
147 |
if ( isset($_GET) && ((isset($_GET['page']) && strpos($_GET['page'], 'formidable') === 0 ) ||
|
148 |
($pagenow == 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] == 'frm_display'))
|
162 |
add_thickbox();
|
163 |
|
164 |
wp_register_script('formidable-editinplace', FrmAppHelper::plugin_url() .'/js/jquery/jquery.editinplace.packed.js', array('jquery'), '2.3.0');
|
|
|
165 |
|
166 |
if ( FrmAppHelper::is_admin_page('formidable-settings') || FrmAppHelper::is_admin_page('formidable-styles') ) {
|
167 |
// load multselect js
|
224 |
return preg_replace_callback( $regex, 'FrmAppHelper::widget_text_filter_callback', $content );
|
225 |
}
|
226 |
|
227 |
+
public static function widget_text_filter_callback( $matches ) {
|
228 |
+
_deprecated_function( __FUNCTION__, '2.0', 'FrmAppHelper::widget_text_filter_callback' );
|
229 |
+
return FrmAppHelper::widget_text_filter_callback($matches);
|
230 |
+
}
|
231 |
+
|
232 |
public static function front_head(){
|
233 |
if (is_multisite()){
|
234 |
$old_db_version = get_option('frm_db_version');
|
250 |
|
251 |
self::localize_script('front');
|
252 |
|
|
|
|
|
253 |
$frm_settings = FrmAppHelper::get_settings();
|
254 |
|
255 |
+
$style = apply_filters('get_frm_stylesheet', self::custom_stylesheet());
|
256 |
if($style){
|
257 |
foreach ( (array) $style as $k => $file ) {
|
258 |
wp_register_style($k, $file, array(), $version);
|
270 |
}
|
271 |
}
|
272 |
|
273 |
+
/**
|
274 |
+
* @param string $location
|
275 |
+
*/
|
276 |
public static function localize_script($location){
|
277 |
wp_localize_script('formidable', 'frm_js', array(
|
278 |
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
352 |
|
353 |
$frm_settings = FrmAppHelper::get_settings();
|
354 |
if ( $frm_vars['load_css'] && ! FrmAppHelper::is_admin() && $frm_settings->load_style != 'none' ) {
|
355 |
+
$css = apply_filters('get_frm_stylesheet', self::custom_stylesheet());
|
356 |
|
357 |
+
if ( ! empty($css) ) {
|
|
|
358 |
foreach ( (array) $css as $css_key => $file ) {
|
359 |
wp_enqueue_style($css_key);
|
360 |
unset($css_key, $file);
|
361 |
}
|
|
|
|
|
|
|
362 |
}
|
363 |
+
unset($css);
|
364 |
}
|
365 |
|
366 |
if ( ! FrmAppHelper::is_admin() && $location != 'header' && ! empty($frm_vars['forms_loaded']) ) {
|
classes/controllers/FrmEntriesController.php
CHANGED
@@ -244,10 +244,11 @@ class FrmEntriesController{
|
|
244 |
return $result;
|
245 |
|
246 |
global $frm_vars;
|
247 |
-
if(isset($frm_vars['current_form'])
|
248 |
$frm_vars['current_form']->options = maybe_unserialize($frm_vars['current_form']->options);
|
|
|
249 |
|
250 |
-
if(isset($frm_vars['current_form'])
|
251 |
$result = $frm_vars['current_form']->options['hidden_cols'];
|
252 |
}else{
|
253 |
$cols = $frm_vars['cols'];
|
@@ -263,8 +264,7 @@ class FrmEntriesController{
|
|
263 |
if($i > $max_columns)
|
264 |
$result[] = $col_key; //remove some columns by default
|
265 |
$i--;
|
266 |
-
unset($col_key);
|
267 |
-
unset($col);
|
268 |
}
|
269 |
}
|
270 |
|
@@ -634,4 +634,12 @@ class FrmEntriesController{
|
|
634 |
return $values;
|
635 |
}
|
636 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
637 |
}
|
244 |
return $result;
|
245 |
|
246 |
global $frm_vars;
|
247 |
+
if ( isset($frm_vars['current_form']) && $frm_vars['current_form'] ) {
|
248 |
$frm_vars['current_form']->options = maybe_unserialize($frm_vars['current_form']->options);
|
249 |
+
}
|
250 |
|
251 |
+
if ( isset($frm_vars['current_form']) && $frm_vars['current_form'] && isset($frm_vars['current_form']->options['hidden_cols']) && ! empty($frm_vars['current_form']->options['hidden_cols']) ) {
|
252 |
$result = $frm_vars['current_form']->options['hidden_cols'];
|
253 |
}else{
|
254 |
$cols = $frm_vars['cols'];
|
264 |
if($i > $max_columns)
|
265 |
$result[] = $col_key; //remove some columns by default
|
266 |
$i--;
|
267 |
+
unset($col_key, $col);
|
|
|
268 |
}
|
269 |
}
|
270 |
|
634 |
return $values;
|
635 |
}
|
636 |
|
637 |
+
public static function entry_sidebar($entry) {
|
638 |
+
$data = maybe_unserialize($entry->description);
|
639 |
+
$date_format = get_option('date_format');
|
640 |
+
$time_format = get_option('time_format');
|
641 |
+
|
642 |
+
include(FrmAppHelper::plugin_path() .'/classes/views/frm-entries/sidebar-shared.php');
|
643 |
+
}
|
644 |
+
|
645 |
}
|
classes/controllers/FrmFieldsController.php
CHANGED
@@ -19,6 +19,10 @@ class FrmFieldsController{
|
|
19 |
foreach ( $fields as $field ) {
|
20 |
$field = htmlspecialchars_decode(nl2br($field));
|
21 |
$field = json_decode($field, true);
|
|
|
|
|
|
|
|
|
22 |
|
23 |
$field_id = $field['id'];
|
24 |
|
@@ -290,21 +294,20 @@ class FrmFieldsController{
|
|
290 |
$response = array( 'other' => true );
|
291 |
|
292 |
//If the deleted option is an "other" option
|
293 |
-
if (
|
294 |
//Assume all other options are gone, unless proven otherwise
|
295 |
$other = false;
|
296 |
|
297 |
-
//Check if all other options are really gone
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
break;
|
304 |
-
}
|
305 |
-
unset( $o_key, $o_val );
|
306 |
}
|
|
|
307 |
}
|
|
|
308 |
//If all other options are gone
|
309 |
if ( false === $other ) {
|
310 |
$field_options = maybe_unserialize( $field->field_options );
|
@@ -424,8 +427,7 @@ class FrmFieldsController{
|
|
424 |
}
|
425 |
unset($vals);
|
426 |
}
|
427 |
-
unset($opt_key);
|
428 |
-
unset($opt);
|
429 |
}
|
430 |
}
|
431 |
|
@@ -436,9 +438,9 @@ class FrmFieldsController{
|
|
436 |
if ( $opt_key && strpos( $opt_key, 'other' ) !== false ) {
|
437 |
$other_array[$opt_key] = $opt;
|
438 |
}
|
439 |
-
unset($opt_key
|
440 |
}
|
441 |
-
if ( $other_array ) {
|
442 |
$opts = array_merge( $opts, $other_array);
|
443 |
}
|
444 |
}
|
19 |
foreach ( $fields as $field ) {
|
20 |
$field = htmlspecialchars_decode(nl2br($field));
|
21 |
$field = json_decode($field, true);
|
22 |
+
if ( ! isset($field['id']) ) {
|
23 |
+
// this field may have already been loaded
|
24 |
+
continue;
|
25 |
+
}
|
26 |
|
27 |
$field_id = $field['id'];
|
28 |
|
294 |
$response = array( 'other' => true );
|
295 |
|
296 |
//If the deleted option is an "other" option
|
297 |
+
if ( FrmAppHelper::is_other_opt( $opt_key ) ) {
|
298 |
//Assume all other options are gone, unless proven otherwise
|
299 |
$other = false;
|
300 |
|
301 |
+
//Check if all other options are really gone
|
302 |
+
foreach ( $options as $o_key => $o_val ) {
|
303 |
+
//If there is still an other option in the field, set other to true
|
304 |
+
if ( FrmAppHelper::is_other_opt( $o_key ) ) {
|
305 |
+
$other = true;
|
306 |
+
break;
|
|
|
|
|
|
|
307 |
}
|
308 |
+
unset( $o_key, $o_val );
|
309 |
}
|
310 |
+
|
311 |
//If all other options are gone
|
312 |
if ( false === $other ) {
|
313 |
$field_options = maybe_unserialize( $field->field_options );
|
427 |
}
|
428 |
unset($vals);
|
429 |
}
|
430 |
+
unset($opt_key, $opt);
|
|
|
431 |
}
|
432 |
}
|
433 |
|
438 |
if ( $opt_key && strpos( $opt_key, 'other' ) !== false ) {
|
439 |
$other_array[$opt_key] = $opt;
|
440 |
}
|
441 |
+
unset($opt_key, $opt);
|
442 |
}
|
443 |
+
if ( ! empty($other_array) ) {
|
444 |
$opts = array_merge( $opts, $other_array);
|
445 |
}
|
446 |
}
|
classes/controllers/FrmFormActionsController.php
CHANGED
@@ -26,10 +26,13 @@ class FrmFormActionsController{
|
|
26 |
* menu_order: form id
|
27 |
* post_excerpt: action type
|
28 |
*/
|
|
|
|
|
29 |
}
|
30 |
|
31 |
public static function actions_init() {
|
32 |
self::$registered_actions = new Frm_Form_Action_Factory();
|
|
|
33 |
do_action( 'frm_form_actions_init' );
|
34 |
}
|
35 |
|
@@ -189,7 +192,7 @@ class FrmFormActionsController{
|
|
189 |
|
190 |
$registered_actions = self::$registered_actions->actions;
|
191 |
|
192 |
-
$old_actions = $wpdb->get_col($wpdb->prepare(
|
193 |
$new_actions = array();
|
194 |
|
195 |
foreach ( $registered_actions as $registered_action ) {
|
@@ -217,6 +220,9 @@ class FrmFormActionsController{
|
|
217 |
self::trigger_actions('create', $form_id, $entry_id);
|
218 |
}
|
219 |
|
|
|
|
|
|
|
220 |
public static function trigger_actions($event, $form, $entry, $type = 'all') {
|
221 |
$form_actions = FrmFormActionsHelper::get_action_for_form((is_object($form) ? $form->id : $form), $type);
|
222 |
|
@@ -291,7 +297,7 @@ class FrmFormActionsController{
|
|
291 |
return;
|
292 |
}
|
293 |
|
294 |
-
$action_controls =
|
295 |
|
296 |
foreach ( $action_controls as $action_control ) {
|
297 |
$action_control->duplicate_form_actions($form_id, $args['old_id']);
|
26 |
* menu_order: form id
|
27 |
* post_excerpt: action type
|
28 |
*/
|
29 |
+
|
30 |
+
self::actions_init();
|
31 |
}
|
32 |
|
33 |
public static function actions_init() {
|
34 |
self::$registered_actions = new Frm_Form_Action_Factory();
|
35 |
+
self::register_actions();
|
36 |
do_action( 'frm_form_actions_init' );
|
37 |
}
|
38 |
|
192 |
|
193 |
$registered_actions = self::$registered_actions->actions;
|
194 |
|
195 |
+
$old_actions = $wpdb->get_col($wpdb->prepare('SELECT ID FROM '. $wpdb->posts .' WHERE post_type=%s AND menu_order=%d', self::$action_post_type, $form_id));
|
196 |
$new_actions = array();
|
197 |
|
198 |
foreach ( $registered_actions as $registered_action ) {
|
220 |
self::trigger_actions('create', $form_id, $entry_id);
|
221 |
}
|
222 |
|
223 |
+
/**
|
224 |
+
* @param string $event
|
225 |
+
*/
|
226 |
public static function trigger_actions($event, $form, $entry, $type = 'all') {
|
227 |
$form_actions = FrmFormActionsHelper::get_action_for_form((is_object($form) ? $form->id : $form), $type);
|
228 |
|
297 |
return;
|
298 |
}
|
299 |
|
300 |
+
$action_controls = self::get_form_actions( );
|
301 |
|
302 |
foreach ( $action_controls as $action_control ) {
|
303 |
$action_control->duplicate_form_actions($form_id, $args['old_id']);
|
classes/controllers/FrmFormsController.php
CHANGED
@@ -27,7 +27,6 @@ class FrmFormsController{
|
|
27 |
|
28 |
public static function head(){
|
29 |
wp_enqueue_script('formidable-editinplace');
|
30 |
-
wp_enqueue_script('jquery-frm-themepicker');
|
31 |
|
32 |
if ( wp_is_mobile() ) {
|
33 |
wp_enqueue_script( 'jquery-touch-punch' );
|
@@ -43,7 +42,9 @@ class FrmFormsController{
|
|
43 |
FrmAppHelper::permission_check('frm_view_forms');
|
44 |
|
45 |
$params = FrmFormsHelper::get_params();
|
46 |
-
$errors =
|
|
|
|
|
47 |
return self::display_forms_list($params, '', false, $errors);
|
48 |
}
|
49 |
|
@@ -84,7 +85,9 @@ class FrmFormsController{
|
|
84 |
}
|
85 |
|
86 |
//Set radio button and checkbox meta equal to "other" value
|
87 |
-
|
|
|
|
|
88 |
|
89 |
$id = isset($values['id']) ? (int) $values['id'] : (int) FrmAppHelper::get_param('id');
|
90 |
|
@@ -106,8 +109,6 @@ class FrmFormsController{
|
|
106 |
}else{
|
107 |
FrmForm::update( $id, $values, true );
|
108 |
die(FrmAppHelper::js_redirect(admin_url('admin.php?page=formidable&frm_action=settings&id='. $id)));
|
109 |
-
//$message = __('Form was Successfully Created', 'formidable');
|
110 |
-
//return self::settings($record, $message);
|
111 |
}
|
112 |
}
|
113 |
|
@@ -121,8 +122,9 @@ class FrmFormsController{
|
|
121 |
public static function settings($id=false, $message=''){
|
122 |
FrmAppHelper::permission_check('frm_edit_forms');
|
123 |
|
124 |
-
if(
|
125 |
-
$id =
|
|
|
126 |
return self::get_settings_vars($id, '', $message);
|
127 |
}
|
128 |
|
@@ -145,7 +147,7 @@ class FrmFormsController{
|
|
145 |
}
|
146 |
|
147 |
public static function edit_key(){
|
148 |
-
FrmAppHelper::
|
149 |
|
150 |
global $wpdb;
|
151 |
$values = array('form_key' => trim($_POST['update_value']));
|
@@ -157,7 +159,7 @@ class FrmFormsController{
|
|
157 |
}
|
158 |
|
159 |
public static function edit_description(){
|
160 |
-
FrmAppHelper::
|
161 |
|
162 |
FrmForm::update($_POST['form_id'], array('description' => $_POST['update_value']));
|
163 |
$description = FrmAppHelper::use_wpautop(stripslashes($_POST['update_value']));
|
@@ -173,13 +175,14 @@ class FrmFormsController{
|
|
173 |
}
|
174 |
|
175 |
//Set radio button and checkbox meta equal to "other" value
|
176 |
-
|
|
|
|
|
177 |
|
178 |
$errors = FrmForm::validate($values);
|
179 |
-
|
180 |
-
if (
|
181 |
-
$
|
182 |
-
$errors['form'] = $frm_settings->admin_permission;
|
183 |
}
|
184 |
|
185 |
$id = isset($values['id']) ? (int) $values['id'] : (int) FrmAppHelper::get_param('id');
|
@@ -252,7 +255,9 @@ class FrmFormsController{
|
|
252 |
$controller = FrmAppHelper::get_param('controller');
|
253 |
$key = (isset($_GET['form']) ? $_GET['form'] : (isset($_POST['form']) ? $_POST['form'] : ''));
|
254 |
$form = FrmForm::getAll(array('form_key' => $key), '', 1);
|
255 |
-
if (
|
|
|
|
|
256 |
|
257 |
require(FrmAppHelper::plugin_path() .'/classes/views/frm-entries/direct.php');
|
258 |
die();
|
@@ -325,8 +330,25 @@ class FrmFormsController{
|
|
325 |
return $message;
|
326 |
}
|
327 |
|
328 |
-
|
329 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
330 |
global $wpdb;
|
331 |
|
332 |
$trash_forms = $wpdb->get_results($wpdb->prepare("SELECT id, options FROM {$wpdb->prefix}frm_forms WHERE status = %s", 'trash'));
|
@@ -335,17 +357,21 @@ class FrmFormsController{
|
|
335 |
return;
|
336 |
}
|
337 |
|
338 |
-
|
|
|
|
|
339 |
|
|
|
340 |
foreach ( $trash_forms as $form ) {
|
341 |
$form->options = maybe_unserialize($form->options);
|
342 |
if ( !isset($form->options['trash_time']) || $form->options['trash_time'] < $delete_timestamp ) {
|
343 |
FrmForm::destroy($form->id);
|
|
|
344 |
}
|
345 |
|
346 |
unset($form);
|
347 |
}
|
348 |
-
|
349 |
}
|
350 |
|
351 |
public static function insert_form_button($content){
|
@@ -379,9 +405,6 @@ class FrmFormsController{
|
|
379 |
|
380 |
$form_id = '';
|
381 |
$opts = array();
|
382 |
-
|
383 |
-
echo '<div id="sc-opts-'. $shortcode .'" class="frm_shortcode_option">';
|
384 |
-
echo '<input type="radio" name="frmsc" value="'. esc_attr($shortcode) .'" id="sc-'. esc_attr($shortcode) .'" style="display:none;" />';
|
385 |
switch( $shortcode ) {
|
386 |
case 'formidable':
|
387 |
$form_id = 'id';
|
@@ -393,48 +416,9 @@ class FrmFormsController{
|
|
393 |
);
|
394 |
break;
|
395 |
}
|
396 |
-
|
397 |
$opts = apply_filters('frm_sc_popup_opts', $opts, $shortcode);
|
398 |
|
399 |
-
|
400 |
-
?>
|
401 |
-
<h4 for="frmsc_<?php echo $shortcode .'_'. $form_id ?>" class="frm_left_label"><?php _e('Select a form:', 'formidable') ?></h4>
|
402 |
-
<?php FrmFormsHelper::forms_dropdown( 'frmsc_'. $shortcode .'_'. $form_id ); ?>
|
403 |
-
<div class="frm_box_line"></div>
|
404 |
-
<?php
|
405 |
-
}
|
406 |
-
|
407 |
-
if ( ! empty($opts) ) { ?>
|
408 |
-
<h4><?php _e('Options', 'formidable') ?></h4>
|
409 |
-
<ul>
|
410 |
-
<?php
|
411 |
-
foreach ( $opts as $opt => $val ) {
|
412 |
-
if ( isset($val['type']) && 'text' == $val['type'] ) { ?>
|
413 |
-
<li><label class="setting" for="frmsc_<?php echo $shortcode .'_'. $opt ?>">
|
414 |
-
<span><?php echo $val['label'] ?></span>
|
415 |
-
<input type="text" id="frmsc_<?php echo $shortcode .'_'. $opt ?>" value="<?php echo esc_attr($val['val']) ?>" />
|
416 |
-
</label>
|
417 |
-
<li>
|
418 |
-
<?php } else if ( isset($val['type']) && 'select' == $val['type'] ) { ?>
|
419 |
-
<li><label class="setting" for="frmsc_<?php echo $shortcode .'_'. $opt ?>">
|
420 |
-
<span><?php echo $val['label'] ?></span>
|
421 |
-
<select id="frmsc_<?php echo $shortcode .'_'. $opt ?>">
|
422 |
-
<?php foreach ( $val['opts'] as $select_opt => $select_label ) { ?>
|
423 |
-
<option value="<?php echo esc_attr($select_opt) ?>"><?php echo $select_label ?></option>
|
424 |
-
<?php } ?>
|
425 |
-
</select>
|
426 |
-
</label>
|
427 |
-
</li>
|
428 |
-
<?php } else { ?>
|
429 |
-
<li><label class="setting" for="frmsc_<?php echo $shortcode .'_'. $opt ?>"><input type="checkbox" id="frmsc_<?php echo $shortcode .'_'. $opt ?>" value="<?php echo esc_attr($val['val']) ?>" /> <?php echo $val['label'] ?></label><li>
|
430 |
-
<?php
|
431 |
-
}
|
432 |
-
}
|
433 |
-
?>
|
434 |
-
</ul>
|
435 |
-
<?php
|
436 |
-
}
|
437 |
-
echo '</div>';
|
438 |
|
439 |
die();
|
440 |
}
|
@@ -680,9 +664,9 @@ class FrmFormsController{
|
|
680 |
return $errors;
|
681 |
}
|
682 |
|
683 |
-
|
684 |
-
|
685 |
-
$errors[] = $
|
686 |
return $errors;
|
687 |
}
|
688 |
|
@@ -733,12 +717,14 @@ class FrmFormsController{
|
|
733 |
$values['form_key'] = $filename;
|
734 |
$values['is_template'] = $template;
|
735 |
$values['status'] = 'published';
|
736 |
-
if($default)
|
|
|
|
|
737 |
|
738 |
include($templates[$i]);
|
739 |
|
740 |
//get updated form
|
741 |
-
if ( isset($form) && $form ) {
|
742 |
$old_id = $form->id;
|
743 |
$form = FrmForm::getOne($form->id);
|
744 |
} else {
|
@@ -776,6 +762,10 @@ class FrmFormsController{
|
|
776 |
}
|
777 |
}else{
|
778 |
$action = FrmAppHelper::get_param($action);
|
|
|
|
|
|
|
|
|
779 |
}
|
780 |
|
781 |
add_action('frm_load_form_hooks', 'FrmFormsController::trigger_load_form_hooks');
|
@@ -792,6 +782,7 @@ class FrmFormsController{
|
|
792 |
case 'trash':
|
793 |
case 'untrash':
|
794 |
case 'destroy':
|
|
|
795 |
case 'settings':
|
796 |
case 'update_settings':
|
797 |
return self::$action($vars);
|
27 |
|
28 |
public static function head(){
|
29 |
wp_enqueue_script('formidable-editinplace');
|
|
|
30 |
|
31 |
if ( wp_is_mobile() ) {
|
32 |
wp_enqueue_script( 'jquery-touch-punch' );
|
42 |
FrmAppHelper::permission_check('frm_view_forms');
|
43 |
|
44 |
$params = FrmFormsHelper::get_params();
|
45 |
+
$errors = self::process_bulk_form_actions(array());
|
46 |
+
$errors = apply_filters('frm_admin_list_form_action', $errors);
|
47 |
+
|
48 |
return self::display_forms_list($params, '', false, $errors);
|
49 |
}
|
50 |
|
85 |
}
|
86 |
|
87 |
//Set radio button and checkbox meta equal to "other" value
|
88 |
+
if ( FrmAppHelper::pro_is_installed() ) {
|
89 |
+
$values = FrmProEntry::mod_other_vals( $values, 'back' );
|
90 |
+
}
|
91 |
|
92 |
$id = isset($values['id']) ? (int) $values['id'] : (int) FrmAppHelper::get_param('id');
|
93 |
|
109 |
}else{
|
110 |
FrmForm::update( $id, $values, true );
|
111 |
die(FrmAppHelper::js_redirect(admin_url('admin.php?page=formidable&frm_action=settings&id='. $id)));
|
|
|
|
|
112 |
}
|
113 |
}
|
114 |
|
122 |
public static function settings($id=false, $message=''){
|
123 |
FrmAppHelper::permission_check('frm_edit_forms');
|
124 |
|
125 |
+
if ( ! $id || ! is_numeric($id) ) {
|
126 |
+
$id = (int) FrmAppHelper::get_param('id');
|
127 |
+
}
|
128 |
return self::get_settings_vars($id, '', $message);
|
129 |
}
|
130 |
|
147 |
}
|
148 |
|
149 |
public static function edit_key(){
|
150 |
+
FrmAppHelper::permission_check('frm_edit_forms', 'hide');
|
151 |
|
152 |
global $wpdb;
|
153 |
$values = array('form_key' => trim($_POST['update_value']));
|
159 |
}
|
160 |
|
161 |
public static function edit_description(){
|
162 |
+
FrmAppHelper::permission_check('frm_edit_forms', 'hide');
|
163 |
|
164 |
FrmForm::update($_POST['form_id'], array('description' => $_POST['update_value']));
|
165 |
$description = FrmAppHelper::use_wpautop(stripslashes($_POST['update_value']));
|
175 |
}
|
176 |
|
177 |
//Set radio button and checkbox meta equal to "other" value
|
178 |
+
if ( FrmAppHelper::pro_is_installed() ) {
|
179 |
+
$values = FrmProEntry::mod_other_vals( $values, 'back' );
|
180 |
+
}
|
181 |
|
182 |
$errors = FrmForm::validate($values);
|
183 |
+
$permission_error = FrmAppHelper::permission_nonce_error('frm_edit_forms', 'frm_save_form', 'frm_save_form_nonce');
|
184 |
+
if ( $permission_error !== false ) {
|
185 |
+
$errors['form'] = $permission_error;
|
|
|
186 |
}
|
187 |
|
188 |
$id = isset($values['id']) ? (int) $values['id'] : (int) FrmAppHelper::get_param('id');
|
255 |
$controller = FrmAppHelper::get_param('controller');
|
256 |
$key = (isset($_GET['form']) ? $_GET['form'] : (isset($_POST['form']) ? $_POST['form'] : ''));
|
257 |
$form = FrmForm::getAll(array('form_key' => $key), '', 1);
|
258 |
+
if ( empty($form) ) {
|
259 |
+
$form = FrmForm::getAll('', '', 1);
|
260 |
+
}
|
261 |
|
262 |
require(FrmAppHelper::plugin_path() .'/classes/views/frm-entries/direct.php');
|
263 |
die();
|
330 |
return $message;
|
331 |
}
|
332 |
|
333 |
+
private static function delete_all() {
|
334 |
+
//check nonce url
|
335 |
+
$permission_error = FrmAppHelper::permission_nonce_error('frm_delete_forms', '_wpnonce', 'bulk-toplevel_page_formidable');
|
336 |
+
if ( $permission_error !== false ) {
|
337 |
+
self::display_forms_list('', '', 1, array($permission_error));
|
338 |
+
return;
|
339 |
+
}
|
340 |
+
|
341 |
+
$count = self::scheduled_delete(time());
|
342 |
+
$message = sprintf(_n( '%1$s form permanently deleted.', '%1$s forms permanently deleted.', $count, 'formidable' ), $count);
|
343 |
+
|
344 |
+
self::display_forms_list('', $message, 1);
|
345 |
+
}
|
346 |
+
|
347 |
+
/*
|
348 |
+
* Delete trashed forms based on how long they have been trashed
|
349 |
+
* @return int The number of forms deleted
|
350 |
+
*/
|
351 |
+
public static function scheduled_delete($delete_timestamp = '') {
|
352 |
global $wpdb;
|
353 |
|
354 |
$trash_forms = $wpdb->get_results($wpdb->prepare("SELECT id, options FROM {$wpdb->prefix}frm_forms WHERE status = %s", 'trash'));
|
357 |
return;
|
358 |
}
|
359 |
|
360 |
+
if ( empty($delete_timestamp) ) {
|
361 |
+
$delete_timestamp = time() - ( DAY_IN_SECONDS * EMPTY_TRASH_DAYS );
|
362 |
+
}
|
363 |
|
364 |
+
$count = 0;
|
365 |
foreach ( $trash_forms as $form ) {
|
366 |
$form->options = maybe_unserialize($form->options);
|
367 |
if ( !isset($form->options['trash_time']) || $form->options['trash_time'] < $delete_timestamp ) {
|
368 |
FrmForm::destroy($form->id);
|
369 |
+
$count++;
|
370 |
}
|
371 |
|
372 |
unset($form);
|
373 |
}
|
374 |
+
return $count;
|
375 |
}
|
376 |
|
377 |
public static function insert_form_button($content){
|
405 |
|
406 |
$form_id = '';
|
407 |
$opts = array();
|
|
|
|
|
|
|
408 |
switch( $shortcode ) {
|
409 |
case 'formidable':
|
410 |
$form_id = 'id';
|
416 |
);
|
417 |
break;
|
418 |
}
|
|
|
419 |
$opts = apply_filters('frm_sc_popup_opts', $opts, $shortcode);
|
420 |
|
421 |
+
include(FrmAppHelper::plugin_path() .'/classes/views/frm-forms/shortcode_opts.php');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
422 |
|
423 |
die();
|
424 |
}
|
664 |
return $errors;
|
665 |
}
|
666 |
|
667 |
+
$permission_error = FrmAppHelper::permission_nonce_error('', '_wpnonce', 'bulk-toplevel_page_formidable');
|
668 |
+
if ( $permission_error !== false ) {
|
669 |
+
$errors[] = $permission_error;
|
670 |
return $errors;
|
671 |
}
|
672 |
|
717 |
$values['form_key'] = $filename;
|
718 |
$values['is_template'] = $template;
|
719 |
$values['status'] = 'published';
|
720 |
+
if ( $default ) {
|
721 |
+
$values['default_template'] = 1;
|
722 |
+
}
|
723 |
|
724 |
include($templates[$i]);
|
725 |
|
726 |
//get updated form
|
727 |
+
if ( isset($form) && ! empty($form) ) {
|
728 |
$old_id = $form->id;
|
729 |
$form = FrmForm::getOne($form->id);
|
730 |
} else {
|
762 |
}
|
763 |
}else{
|
764 |
$action = FrmAppHelper::get_param($action);
|
765 |
+
if ( isset( $_REQUEST['delete_all'] ) ) {
|
766 |
+
// override the action for this page
|
767 |
+
$action = 'delete_all';
|
768 |
+
}
|
769 |
}
|
770 |
|
771 |
add_action('frm_load_form_hooks', 'FrmFormsController::trigger_load_form_hooks');
|
782 |
case 'trash':
|
783 |
case 'untrash':
|
784 |
case 'destroy':
|
785 |
+
case 'delete_all':
|
786 |
case 'settings':
|
787 |
case 'update_settings':
|
788 |
return self::$action($vars);
|
classes/controllers/FrmHooksController.php
CHANGED
@@ -48,12 +48,12 @@ class FrmHooksController{
|
|
48 |
add_action('plugins_loaded', 'FrmAppController::load_lang' );
|
49 |
add_action('init', 'FrmAppController::front_head' );
|
50 |
add_filter('widget_text', 'FrmAppController::widget_text_filter', 8 );
|
51 |
-
add_filter('get_frm_stylesheet', 'FrmAppController::custom_stylesheet' );
|
52 |
-
|
53 |
add_action('wp_footer', 'FrmAppController::footer_js', 1, 0);
|
54 |
|
55 |
-
|
56 |
-
|
|
|
|
|
57 |
|
58 |
// Entries controller
|
59 |
add_action('wp', 'FrmEntriesController::process_entry', 10, 0);
|
@@ -64,9 +64,7 @@ class FrmHooksController{
|
|
64 |
add_filter('frmpro_fields_replace_shortcodes', 'FrmEntriesController::filter_shortcode_value', 10, 4);
|
65 |
|
66 |
// Form Actions Controller
|
67 |
-
add_action('init', 'FrmFormActionsController::register_post_types',
|
68 |
-
add_action('init', 'FrmFormActionsController::actions_init', 1);
|
69 |
-
add_action('frm_form_actions_init', 'FrmFormActionsController::register_actions');
|
70 |
add_action('frm_after_create_entry', 'FrmFormActionsController::trigger_create_actions', 20, 2);
|
71 |
|
72 |
// Forms Controller
|
@@ -120,8 +118,6 @@ class FrmHooksController{
|
|
120 |
add_action('admin_footer', 'FrmFormsController::insert_form_popup' );
|
121 |
add_filter('media_buttons_context', 'FrmFormsController::insert_form_button' );
|
122 |
|
123 |
-
add_filter('frm_admin_list_form_action', 'FrmFormsController::process_bulk_form_actions' );
|
124 |
-
|
125 |
// Forms Model
|
126 |
add_action('frm_after_duplicate_form', 'FrmForm::after_duplicate', 10, 2);
|
127 |
|
48 |
add_action('plugins_loaded', 'FrmAppController::load_lang' );
|
49 |
add_action('init', 'FrmAppController::front_head' );
|
50 |
add_filter('widget_text', 'FrmAppController::widget_text_filter', 8 );
|
|
|
|
|
51 |
add_action('wp_footer', 'FrmAppController::footer_js', 1, 0);
|
52 |
|
53 |
+
if ( ! FrmAppHelper::is_admin() ) {
|
54 |
+
// Update the session data
|
55 |
+
add_action('init', 'FrmAppController::referer_session', 1);
|
56 |
+
}
|
57 |
|
58 |
// Entries controller
|
59 |
add_action('wp', 'FrmEntriesController::process_entry', 10, 0);
|
64 |
add_filter('frmpro_fields_replace_shortcodes', 'FrmEntriesController::filter_shortcode_value', 10, 4);
|
65 |
|
66 |
// Form Actions Controller
|
67 |
+
add_action('init', 'FrmFormActionsController::register_post_types', 1);
|
|
|
|
|
68 |
add_action('frm_after_create_entry', 'FrmFormActionsController::trigger_create_actions', 20, 2);
|
69 |
|
70 |
// Forms Controller
|
118 |
add_action('admin_footer', 'FrmFormsController::insert_form_popup' );
|
119 |
add_filter('media_buttons_context', 'FrmFormsController::insert_form_button' );
|
120 |
|
|
|
|
|
121 |
// Forms Model
|
122 |
add_action('frm_after_duplicate_form', 'FrmForm::after_duplicate', 10, 2);
|
123 |
|
classes/controllers/FrmSettingsController.php
CHANGED
@@ -31,17 +31,18 @@ class FrmSettingsController{
|
|
31 |
|
32 |
$frm_settings = FrmAppHelper::get_settings();
|
33 |
|
34 |
-
if(!isset($_POST['process_form'])
|
35 |
wp_die($frm_settings->admin_permission);
|
|
|
36 |
|
37 |
$errors = array();
|
38 |
$message = '';
|
39 |
|
40 |
-
if(!isset($frm_vars['settings_routed'])
|
41 |
//$errors = $frm_settings->validate($_POST,array());
|
42 |
$frm_settings->update(stripslashes_deep($_POST));
|
43 |
|
44 |
-
if( empty($errors) ){
|
45 |
$frm_settings->store();
|
46 |
$message = __('Settings Saved', 'formidable');
|
47 |
}
|
@@ -60,9 +61,10 @@ class FrmSettingsController{
|
|
60 |
public static function route($stop_load=false){
|
61 |
$action = isset($_REQUEST['frm_action']) ? 'frm_action' : 'action';
|
62 |
$action = FrmAppHelper::get_param($action);
|
63 |
-
if($action == 'process-form')
|
64 |
return self::process_form($stop_load);
|
65 |
-
else if($stop_load != 'stop_load')
|
66 |
return self::display_form();
|
|
|
67 |
}
|
68 |
}
|
31 |
|
32 |
$frm_settings = FrmAppHelper::get_settings();
|
33 |
|
34 |
+
if ( ! isset($_POST['process_form']) || ! wp_verify_nonce($_POST['process_form'], 'process_form_nonce') ) {
|
35 |
wp_die($frm_settings->admin_permission);
|
36 |
+
}
|
37 |
|
38 |
$errors = array();
|
39 |
$message = '';
|
40 |
|
41 |
+
if ( ! isset($frm_vars['settings_routed']) || ! $frm_vars['settings_routed'] ) {
|
42 |
//$errors = $frm_settings->validate($_POST,array());
|
43 |
$frm_settings->update(stripslashes_deep($_POST));
|
44 |
|
45 |
+
if ( empty($errors) ) {
|
46 |
$frm_settings->store();
|
47 |
$message = __('Settings Saved', 'formidable');
|
48 |
}
|
61 |
public static function route($stop_load=false){
|
62 |
$action = isset($_REQUEST['frm_action']) ? 'frm_action' : 'action';
|
63 |
$action = FrmAppHelper::get_param($action);
|
64 |
+
if ( $action == 'process-form' ) {
|
65 |
return self::process_form($stop_load);
|
66 |
+
} else if ( $stop_load != 'stop_load' ) {
|
67 |
return self::display_form();
|
68 |
+
}
|
69 |
}
|
70 |
}
|
classes/controllers/FrmStylesController.php
CHANGED
@@ -42,20 +42,17 @@ class FrmStylesController{
|
|
42 |
|
43 |
self::load_pro_hooks();
|
44 |
wp_enqueue_script('jquery-ui-datepicker');
|
45 |
-
add_action('admin_head', 'FrmStylesController::head');
|
46 |
-
}
|
47 |
|
48 |
-
|
49 |
-
wp_enqueue_script('jquery-frm-themepicker');
|
|
|
|
|
|
|
50 |
|
51 |
$style = apply_filters('frm_style_head', false);
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
<?php if ($style) { ?>
|
56 |
-
<link href="<?php echo admin_url('admin-ajax.php') ?>?action=frmpro_load_css&flat=1&<?php echo http_build_query($style->post_content); ?>" type="text/css" rel="Stylesheet" class="frm-single-custom-theme"/>
|
57 |
-
<?php }
|
58 |
-
require(FrmAppHelper::plugin_path() .'/classes/views/shared/head.php');
|
59 |
}
|
60 |
|
61 |
public static function new_style($return = '') {
|
@@ -92,6 +89,8 @@ class FrmStylesController{
|
|
92 |
// set the post id to the new style so it will be loaded for editing
|
93 |
$post_id = reset($id);
|
94 |
}
|
|
|
|
|
95 |
$message = __('Your styling settings have been saved.', 'formidable');
|
96 |
}
|
97 |
|
@@ -265,6 +264,26 @@ class FrmStylesController{
|
|
265 |
die();
|
266 |
}
|
267 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
268 |
// Get the stylesheets for the form settings page
|
269 |
public static function get_style_opts() {
|
270 |
$frm_style = new FrmStyle();
|
@@ -284,6 +303,10 @@ class FrmStylesController{
|
|
284 |
return $frm_style->get_one();
|
285 |
}
|
286 |
|
|
|
|
|
|
|
|
|
287 |
public static function get_form_style_class($class, $style) {
|
288 |
if ( 1 == $style ) {
|
289 |
$style = 'default';
|
@@ -299,6 +322,9 @@ class FrmStylesController{
|
|
299 |
return $class;
|
300 |
}
|
301 |
|
|
|
|
|
|
|
302 |
public static function get_style_val($val, $form = 'default') {
|
303 |
$style = self::get_form_style($form);
|
304 |
if ( $style && isset($style->post_content[$val]) ) {
|
42 |
|
43 |
self::load_pro_hooks();
|
44 |
wp_enqueue_script('jquery-ui-datepicker');
|
|
|
|
|
45 |
|
46 |
+
$version = FrmAppHelper::plugin_version();
|
47 |
+
wp_enqueue_script('jquery-frm-themepicker', FrmAppHelper::plugin_url() .'/js/jquery/jquery-ui-themepicker.js', array('jquery'), $version);
|
48 |
+
|
49 |
+
wp_enqueue_style('jquery-ui-base', FrmAppHelper::jquery_ui_base_url() .'/themes/base/ui.all.css');
|
50 |
+
wp_enqueue_style('frm-custom-theme', admin_url('admin-ajax.php') .'?action=frmpro_css');
|
51 |
|
52 |
$style = apply_filters('frm_style_head', false);
|
53 |
+
if ( $style ) {
|
54 |
+
wp_enqueue_style('frm-single-custom-theme', admin_url('admin-ajax.php') .'?action=frmpro_load_css&flat=1&'. http_build_query($style->post_content));
|
55 |
+
}
|
|
|
|
|
|
|
|
|
56 |
}
|
57 |
|
58 |
public static function new_style($return = '') {
|
89 |
// set the post id to the new style so it will be loaded for editing
|
90 |
$post_id = reset($id);
|
91 |
}
|
92 |
+
// include the CSS that includes this style
|
93 |
+
echo '<link href="'. admin_url('admin-ajax.php') .'?action=frmpro_css" type="text/css" rel="Stylesheet" class="frm-custom-theme" />';
|
94 |
$message = __('Your styling settings have been saved.', 'formidable');
|
95 |
}
|
96 |
|
264 |
die();
|
265 |
}
|
266 |
|
267 |
+
/*
|
268 |
+
* Check if the Formidable styling should be loaded,
|
269 |
+
* then enqueue it for the footer
|
270 |
+
* @since 2.0
|
271 |
+
*/
|
272 |
+
public static function enqueue_style() {
|
273 |
+
global $frm_vars;
|
274 |
+
|
275 |
+
if ( isset($frm_vars['css_loaded']) && $frm_vars['css_loaded'] ) {
|
276 |
+
// the CSS has already been loaded
|
277 |
+
return;
|
278 |
+
}
|
279 |
+
|
280 |
+
$frm_settings = FrmAppHelper::get_settings();
|
281 |
+
if ( $frm_settings->load_style != 'none' ) {
|
282 |
+
wp_enqueue_style('formidable');
|
283 |
+
$frm_vars['css_loaded'] = true;
|
284 |
+
}
|
285 |
+
}
|
286 |
+
|
287 |
// Get the stylesheets for the form settings page
|
288 |
public static function get_style_opts() {
|
289 |
$frm_style = new FrmStyle();
|
303 |
return $frm_style->get_one();
|
304 |
}
|
305 |
|
306 |
+
/**
|
307 |
+
* @param string $class
|
308 |
+
* @param string $style
|
309 |
+
*/
|
310 |
public static function get_form_style_class($class, $style) {
|
311 |
if ( 1 == $style ) {
|
312 |
$style = 'default';
|
322 |
return $class;
|
323 |
}
|
324 |
|
325 |
+
/**
|
326 |
+
* @param string $val
|
327 |
+
*/
|
328 |
public static function get_style_val($val, $form = 'default') {
|
329 |
$style = self::get_form_style($form);
|
330 |
if ( $style && isset($style->post_content[$val]) ) {
|
classes/controllers/FrmXMLController.php
CHANGED
@@ -73,9 +73,9 @@ class FrmXMLController{
|
|
73 |
$errors = array();
|
74 |
$message = '';
|
75 |
|
76 |
-
|
77 |
-
|
78 |
-
$errors[] = $
|
79 |
self::form($errors);
|
80 |
return;
|
81 |
}
|
@@ -137,7 +137,7 @@ class FrmXMLController{
|
|
137 |
}
|
138 |
|
139 |
public static function export_xml() {
|
140 |
-
FrmAppHelper::
|
141 |
|
142 |
$ids = array();
|
143 |
if ( isset($_POST['frm_export_forms']) ) {
|
@@ -275,7 +275,7 @@ class FrmXMLController{
|
|
275 |
include(FrmAppHelper::plugin_path() .'/classes/views/xml/xml.php');
|
276 |
}
|
277 |
|
278 |
-
function allow_mime($mimes) {
|
279 |
if ( !isset($mimes['csv']) ) {
|
280 |
// allow csv files
|
281 |
$mimes['csv'] = 'text/csv';
|
73 |
$errors = array();
|
74 |
$message = '';
|
75 |
|
76 |
+
$permission_error = FrmAppHelper::permission_nonce_error('frm_edit_forms', 'import-xml', 'import-xml-nonce');
|
77 |
+
if ( $permission_error !== false ) {
|
78 |
+
$errors[] = $permission_error;
|
79 |
self::form($errors);
|
80 |
return;
|
81 |
}
|
137 |
}
|
138 |
|
139 |
public static function export_xml() {
|
140 |
+
FrmAppHelper::permission_check('frm_edit_forms', 'show');
|
141 |
|
142 |
$ids = array();
|
143 |
if ( isset($_POST['frm_export_forms']) ) {
|
275 |
include(FrmAppHelper::plugin_path() .'/classes/views/xml/xml.php');
|
276 |
}
|
277 |
|
278 |
+
public static function allow_mime($mimes) {
|
279 |
if ( !isset($mimes['csv']) ) {
|
280 |
// allow csv files
|
281 |
$mimes['csv'] = 'text/csv';
|
classes/helpers/FrmAppHelper.php
CHANGED
@@ -2,13 +2,13 @@
|
|
2 |
if(!defined('ABSPATH')) die('You are not allowed to call this page directly.');
|
3 |
|
4 |
class FrmAppHelper{
|
5 |
-
public static $db_version =
|
6 |
public static $pro_db_version = 27;
|
7 |
|
8 |
/*
|
9 |
* @since 2.0
|
10 |
*/
|
11 |
-
public static $plug_version = '2.
|
12 |
|
13 |
/*
|
14 |
* @since 1.07.02
|
@@ -83,7 +83,7 @@ class FrmAppHelper{
|
|
83 |
*/
|
84 |
public static function update_message($features, $class = ''){
|
85 |
if ( ! self::pro_is_installed() ) {
|
86 |
-
include(
|
87 |
}
|
88 |
}
|
89 |
|
@@ -226,6 +226,10 @@ class FrmAppHelper{
|
|
226 |
/*
|
227 |
* @since 2.0
|
228 |
*/
|
|
|
|
|
|
|
|
|
229 |
public static function simple_get($action) {
|
230 |
if ( $_GET && isset($_GET[$action]) ) {
|
231 |
return $_GET[$action];
|
@@ -271,6 +275,9 @@ class FrmAppHelper{
|
|
271 |
return $value;
|
272 |
}
|
273 |
|
|
|
|
|
|
|
274 |
public static function trigger_hook_load( $type, $object = null ) {
|
275 |
// only load the form hooks once
|
276 |
$hooks_loaded = apply_filters('frm_'. $type .'_hooks_loaded', false, $object);
|
@@ -333,6 +340,10 @@ class FrmAppHelper{
|
|
333 |
/*
|
334 |
* @since 2.0
|
335 |
*/
|
|
|
|
|
|
|
|
|
336 |
public static function delete_cache_and_transient($cache_key) {
|
337 |
delete_transient($cache_key);
|
338 |
wp_cache_delete($cache_key);
|
@@ -414,7 +425,7 @@ class FrmAppHelper{
|
|
414 |
public static function post_edit_link($post_id) {
|
415 |
$post = get_post($post_id);
|
416 |
if ( $post ) {
|
417 |
-
return '<a href="'. esc_url(admin_url('post.php') .'?post='. $post_id .'&action=edit') .'">'.
|
418 |
}
|
419 |
return '';
|
420 |
}
|
@@ -474,8 +485,10 @@ class FrmAppHelper{
|
|
474 |
if($needed_role == '-1')
|
475 |
return false;
|
476 |
|
477 |
-
|
|
|
478 |
return true;
|
|
|
479 |
|
480 |
$roles = array( 'administrator', 'editor', 'author', 'contributor', 'subscriber' );
|
481 |
foreach ($roles as $role){
|
@@ -511,31 +524,41 @@ class FrmAppHelper{
|
|
511 |
* Return permission message and stop the action if no permission
|
512 |
* @since 2.0
|
513 |
*/
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
518 |
}
|
519 |
}
|
520 |
|
521 |
/*
|
522 |
-
* Check
|
523 |
-
* Return permission message and stop the action if no permission
|
524 |
* @since 2.0
|
|
|
525 |
*/
|
526 |
-
public static function
|
527 |
-
|
528 |
-
|
|
|
529 |
}
|
530 |
|
531 |
-
if (
|
532 |
-
$
|
533 |
-
}
|
|
|
|
|
534 |
$frm_settings = self::get_settings();
|
535 |
-
$
|
536 |
}
|
537 |
|
538 |
-
|
539 |
}
|
540 |
|
541 |
public static function checked($values, $current){
|
@@ -559,44 +582,145 @@ class FrmAppHelper{
|
|
559 |
$current = preg_replace("/&#?[a-z0-9]{2,8};/i", "", $current);
|
560 |
*/
|
561 |
|
562 |
-
|
563 |
-
return true;
|
564 |
-
} else {
|
565 |
-
return false;
|
566 |
-
}
|
567 |
}
|
568 |
|
569 |
-
|
570 |
-
* Check if
|
571 |
-
*
|
|
|
|
|
|
|
|
|
572 |
*/
|
573 |
-
public static function
|
574 |
-
|
575 |
-
|
576 |
-
}
|
577 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
578 |
$other_val = '';
|
579 |
-
|
580 |
-
//
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
585 |
}
|
586 |
-
|
|
|
|
|
587 |
return '';
|
588 |
} else {
|
589 |
-
$other_val = $value;
|
590 |
}
|
591 |
-
unset($opt_key, $opt_val);
|
|
|
|
|
|
|
|
|
592 |
}
|
593 |
-
} else if ( array_key_exists ( $opt_key , (array) $value ) && $value[$opt_key] ) {
|
594 |
-
$other_val = $value[$opt_key];
|
595 |
}
|
596 |
-
|
597 |
return $other_val;
|
598 |
}
|
599 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
600 |
public static function recursive_trim(&$value) {
|
601 |
if ( is_array($value) ) {
|
602 |
$value = array_map(array('FrmAppHelper', 'recursive_trim'), $value);
|
@@ -642,6 +766,9 @@ class FrmAppHelper{
|
|
642 |
return $url;
|
643 |
}
|
644 |
|
|
|
|
|
|
|
645 |
public static function script_version($handle) {
|
646 |
global $wp_scripts;
|
647 |
if ( ! $wp_scripts ) {
|
@@ -703,6 +830,10 @@ class FrmAppHelper{
|
|
703 |
return $contents;
|
704 |
}
|
705 |
|
|
|
|
|
|
|
|
|
706 |
public static function get_unique_key($name='', $table_name, $column, $id = 0, $num_chars = 6){
|
707 |
global $wpdb;
|
708 |
|
@@ -718,13 +849,14 @@ class FrmAppHelper{
|
|
718 |
$key = base_convert( rand($min_slug_value, $max_slug_value), 10, 36 );
|
719 |
}
|
720 |
|
721 |
-
if (is_numeric($key)
|
722 |
$key = $key .'a';
|
|
|
723 |
|
724 |
$query = "SELECT $column FROM $table_name WHERE $column = %s AND ID != %d LIMIT 1";
|
725 |
$key_check = $wpdb->get_var($wpdb->prepare($query, $key, $id));
|
726 |
|
727 |
-
if ($key_check
|
728 |
$suffix = 2;
|
729 |
do {
|
730 |
$alt_post_name = substr($key, 0, 200-(strlen($suffix)+1)). "$suffix";
|
@@ -740,6 +872,10 @@ class FrmAppHelper{
|
|
740 |
* Editing a Form or Entry
|
741 |
* @return bool|array
|
742 |
*/
|
|
|
|
|
|
|
|
|
743 |
public static function setup_edit_vars($record, $table, $fields='', $default=false, $post_values=array()){
|
744 |
if ( ! $record ) {
|
745 |
return false;
|
@@ -761,10 +897,13 @@ class FrmAppHelper{
|
|
761 |
|
762 |
$values['description'] = self::use_wpautop($values['description']);
|
763 |
$frm_settings = self::get_settings();
|
|
|
764 |
|
765 |
foreach ( (array) $fields as $field ) {
|
766 |
-
// Make sure to filter default values (for placeholder text)
|
767 |
-
|
|
|
|
|
768 |
self::fill_field_defaults($field, $record, $values, compact('default', 'post_values', 'frm_settings'));
|
769 |
}
|
770 |
|
@@ -928,6 +1067,9 @@ class FrmAppHelper{
|
|
928 |
}
|
929 |
}
|
930 |
|
|
|
|
|
|
|
931 |
public static function get_meta_value($field_id, $entry) {
|
932 |
if ( isset($entry->metas) ) {
|
933 |
return isset($entry->metas[$field_id]) ? $entry->metas[$field_id] : false;
|
@@ -1206,6 +1348,9 @@ class FrmAppHelper{
|
|
1206 |
return $term;
|
1207 |
}
|
1208 |
|
|
|
|
|
|
|
1209 |
public static function esc_order($order_query) {
|
1210 |
if ( empty($order_query) ) {
|
1211 |
return '';
|
@@ -1242,6 +1387,9 @@ class FrmAppHelper{
|
|
1242 |
return ' ORDER BY '. $order . ' '. $order_by;
|
1243 |
}
|
1244 |
|
|
|
|
|
|
|
1245 |
public static function esc_limit($limit) {
|
1246 |
if ( empty($limit) ) {
|
1247 |
return '';
|
@@ -1303,6 +1451,9 @@ class FrmAppHelper{
|
|
1303 |
return (($r_count < ($current_p * $p_size))?$r_count:($current_p * $p_size));
|
1304 |
}
|
1305 |
|
|
|
|
|
|
|
1306 |
public static function getFirstRecordNum($r_count,$current_p,$p_size){
|
1307 |
if($current_p == 1)
|
1308 |
return 1;
|
@@ -1310,6 +1461,9 @@ class FrmAppHelper{
|
|
1310 |
return (self::getLastRecordNum($r_count,($current_p - 1),$p_size) + 1);
|
1311 |
}
|
1312 |
|
|
|
|
|
|
|
1313 |
public static function &getRecordCount($where = '', $table_name) {
|
1314 |
$cache_key = 'count_'. $table_name .'_'. maybe_serialize($where);
|
1315 |
$query = 'SELECT COUNT(*) FROM ' . $table_name . self::prepend_and_or_where(' WHERE ', $where);
|
@@ -1341,12 +1495,13 @@ class FrmAppHelper{
|
|
1341 |
$referrerinfo = '';
|
1342 |
$keywords = array();
|
1343 |
$i = 1;
|
1344 |
-
if(isset($_SESSION)
|
1345 |
foreach ($_SESSION['frm_http_referer'] as $referer) {
|
1346 |
$referrerinfo .= str_pad("Referer $i: ",20) . $referer. "\r\n";
|
1347 |
$keywords_used = self::get_referer_query($referer);
|
1348 |
-
if ($keywords_used)
|
1349 |
$keywords[] = $keywords_used;
|
|
|
1350 |
|
1351 |
$i++;
|
1352 |
}
|
@@ -1357,8 +1512,8 @@ class FrmAppHelper{
|
|
1357 |
}
|
1358 |
|
1359 |
$i = 1;
|
1360 |
-
if(isset($_SESSION)
|
1361 |
-
foreach ($_SESSION['frm_http_pages'] as $page) {
|
1362 |
$referrerinfo .= str_pad("Page visited $i: ",20) . $page. "\r\n";
|
1363 |
$i++;
|
1364 |
}
|
@@ -1391,6 +1546,10 @@ class FrmAppHelper{
|
|
1391 |
$l2 = $name;
|
1392 |
}
|
1393 |
|
|
|
|
|
|
|
|
|
1394 |
$this_val = ( $p == $last ) ? $jv['value'] : array();
|
1395 |
|
1396 |
switch ( $p ) {
|
@@ -1420,6 +1579,15 @@ class FrmAppHelper{
|
|
1420 |
$vars[$l1][$l2][$l3] = $this_val;
|
1421 |
}
|
1422 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1423 |
}
|
1424 |
|
1425 |
unset($this_val, $n);
|
2 |
if(!defined('ABSPATH')) die('You are not allowed to call this page directly.');
|
3 |
|
4 |
class FrmAppHelper{
|
5 |
+
public static $db_version = 18; //version of the database we are moving to
|
6 |
public static $pro_db_version = 27;
|
7 |
|
8 |
/*
|
9 |
* @since 2.0
|
10 |
*/
|
11 |
+
public static $plug_version = '2.0rc1';
|
12 |
|
13 |
/*
|
14 |
* @since 1.07.02
|
83 |
*/
|
84 |
public static function update_message($features, $class = ''){
|
85 |
if ( ! self::pro_is_installed() ) {
|
86 |
+
include(self::plugin_path() .'/classes/views/shared/update_message.php');
|
87 |
}
|
88 |
}
|
89 |
|
226 |
/*
|
227 |
* @since 2.0
|
228 |
*/
|
229 |
+
|
230 |
+
/**
|
231 |
+
* @param string $action
|
232 |
+
*/
|
233 |
public static function simple_get($action) {
|
234 |
if ( $_GET && isset($_GET[$action]) ) {
|
235 |
return $_GET[$action];
|
275 |
return $value;
|
276 |
}
|
277 |
|
278 |
+
/**
|
279 |
+
* @param string $type
|
280 |
+
*/
|
281 |
public static function trigger_hook_load( $type, $object = null ) {
|
282 |
// only load the form hooks once
|
283 |
$hooks_loaded = apply_filters('frm_'. $type .'_hooks_loaded', false, $object);
|
340 |
/*
|
341 |
* @since 2.0
|
342 |
*/
|
343 |
+
|
344 |
+
/**
|
345 |
+
* @param string $cache_key
|
346 |
+
*/
|
347 |
public static function delete_cache_and_transient($cache_key) {
|
348 |
delete_transient($cache_key);
|
349 |
wp_cache_delete($cache_key);
|
425 |
public static function post_edit_link($post_id) {
|
426 |
$post = get_post($post_id);
|
427 |
if ( $post ) {
|
428 |
+
return '<a href="'. esc_url(admin_url('post.php') .'?post='. $post_id .'&action=edit') .'">'. self::truncate($post->post_title, 50) .'</a>';
|
429 |
}
|
430 |
return '';
|
431 |
}
|
485 |
if($needed_role == '-1')
|
486 |
return false;
|
487 |
|
488 |
+
// $needed_role will be equal to blank if "Logged-in users" is selected
|
489 |
+
if ( ( $needed_role == '' && is_user_logged_in() ) || current_user_can( $needed_role ) ) {
|
490 |
return true;
|
491 |
+
}
|
492 |
|
493 |
$roles = array( 'administrator', 'editor', 'author', 'contributor', 'subscriber' );
|
494 |
foreach ($roles as $role){
|
524 |
* Return permission message and stop the action if no permission
|
525 |
* @since 2.0
|
526 |
*/
|
527 |
+
|
528 |
+
/**
|
529 |
+
* @param string $permission
|
530 |
+
*/
|
531 |
+
public static function permission_check($permission, $show_message = 'show') {
|
532 |
+
$permission_error = self::permission_nonce_error($permission);
|
533 |
+
if ( $permission_error !== false ) {
|
534 |
+
if ( 'hide' == $show_message ) {
|
535 |
+
$permission_error = '';
|
536 |
+
}
|
537 |
+
wp_die($permission_error);
|
538 |
}
|
539 |
}
|
540 |
|
541 |
/*
|
542 |
+
* Check user permission and nonce
|
|
|
543 |
* @since 2.0
|
544 |
+
* @return false|string The permission message or false if allowed
|
545 |
*/
|
546 |
+
public static function permission_nonce_error($permission, $nonce_name = '', $nonce = '') {
|
547 |
+
$error = false;
|
548 |
+
if ( ! empty($permission) && current_user_can($permission) ) {
|
549 |
+
return $error;
|
550 |
}
|
551 |
|
552 |
+
if ( empty($nonce_name) ) {
|
553 |
+
return $error;
|
554 |
+
}
|
555 |
+
|
556 |
+
if ( $_REQUEST && ( ! isset($_REQUEST[$nonce_name]) || ! wp_verify_nonce($_REQUEST[$nonce_name], $nonce) ) ) {
|
557 |
$frm_settings = self::get_settings();
|
558 |
+
$error = $frm_settings->admin_permission;
|
559 |
}
|
560 |
|
561 |
+
return $error;
|
562 |
}
|
563 |
|
564 |
public static function checked($values, $current){
|
582 |
$current = preg_replace("/&#?[a-z0-9]{2,8};/i", "", $current);
|
583 |
*/
|
584 |
|
585 |
+
return ( is_array($values) && in_array($current, $values) ) || ( ! is_array($values) && $values == $current );
|
|
|
|
|
|
|
|
|
586 |
}
|
587 |
|
588 |
+
/**
|
589 |
+
* Check if current field option is an "other" option
|
590 |
+
*
|
591 |
+
* @since 2.0
|
592 |
+
*
|
593 |
+
* @param $opt_key string
|
594 |
+
* @return boolean true or false. Returns true if current field option is an "Other" option
|
595 |
*/
|
596 |
+
public static function is_other_opt( $opt_key ) {
|
597 |
+
return $opt_key && strpos( $opt_key, 'other' ) !== false;
|
598 |
+
}
|
|
|
599 |
|
600 |
+
/**
|
601 |
+
* Get value that belongs in "Other" text box
|
602 |
+
*
|
603 |
+
* @since 2.0
|
604 |
+
*
|
605 |
+
* @param $opt_key string
|
606 |
+
* @param $field array
|
607 |
+
* @return $other_val string
|
608 |
+
*/
|
609 |
+
public static function get_other_val( $opt_key, $field, $parent = false, $pointer = false ) {
|
610 |
$other_val = '';
|
611 |
+
|
612 |
+
//If option is an "other" option and there is a value set for this field, check if the value belongs in the current "Other" option text field
|
613 |
+
if ( !self::is_other_opt( $opt_key ) || !isset( $field['value'] ) || !$field['value'] ) {
|
614 |
+
return $other_val;
|
615 |
+
}
|
616 |
+
|
617 |
+
// Check posted vals before checking saved values
|
618 |
+
|
619 |
+
// For fields inside repeating sections - note, don't check if $pointer is true because it will often be zero
|
620 |
+
if ( $parent && isset( $_POST['item_meta'][$parent][$pointer]['other'][$field['id']] ) ) {
|
621 |
+
if ( FrmFieldsHelper::is_field_with_multiple_values( $field ) ) {
|
622 |
+
$other_val = isset( $_POST['item_meta'][$parent][$pointer]['other'][$field['id']][$opt_key] ) ? $_POST['item_meta'][$parent][$pointer]['other'][$field['id']][$opt_key] : '';
|
623 |
+
} else {
|
624 |
+
$other_val = $_POST['item_meta'][$parent][$pointer]['other'][$field['id']];
|
625 |
+
}
|
626 |
+
return $other_val;
|
627 |
+
|
628 |
+
// For normal fields
|
629 |
+
} else if ( isset( $field['id'] ) && isset( $_POST['item_meta']['other'][$field['id']] ) ) {
|
630 |
+
if ( FrmFieldsHelper::is_field_with_multiple_values( $field ) ) {
|
631 |
+
$other_val = isset( $_POST['item_meta']['other'][$field['id']][$opt_key] ) ? $_POST['item_meta']['other'][$field['id']][$opt_key] : '';
|
632 |
+
} else {
|
633 |
+
$other_val = $_POST['item_meta']['other'][$field['id']];
|
634 |
+
}
|
635 |
+
return $other_val;
|
636 |
+
}
|
637 |
+
|
638 |
+
// For checkboxes
|
639 |
+
if ( $field['type'] == 'checkbox' && is_array( $field['value'] ) ) {
|
640 |
+
// Check if there is an "other" val in saved value and make sure the "other" val is not equal to the Other checkbox option
|
641 |
+
if ( isset( $field['value'][$opt_key] ) && $field['options'][$opt_key] != $field['value'][$opt_key] ) {
|
642 |
+
$other_val = $field['value'][$opt_key];
|
643 |
+
}
|
644 |
+
|
645 |
+
// For radio buttons and dropdowns
|
646 |
+
} else {
|
647 |
+
//Check if saved value equals any of the options. If not, set it as the other value.
|
648 |
+
foreach ( $field['options'] as $opt_key => $opt_val ) {
|
649 |
+
$temp_val = is_array( $opt_val ) ? $opt_val['value'] : $opt_val;
|
650 |
+
// Multi-select dropdowns - key is not preserved
|
651 |
+
if ( is_array( $field['value'] ) ) {
|
652 |
+
$o_key = array_search( $temp_val, $field['value'] );
|
653 |
+
if ( isset( $field['value'][$o_key] ) ) {
|
654 |
+
unset( $field['value'][$o_key], $o_key );
|
655 |
}
|
656 |
+
|
657 |
+
// For radio and regular dropdowns
|
658 |
+
} else if ( $temp_val == $field['value'] ) {
|
659 |
return '';
|
660 |
} else {
|
661 |
+
$other_val = $field['value'];
|
662 |
}
|
663 |
+
unset($opt_key, $opt_val, $temp_val);
|
664 |
+
}
|
665 |
+
// For multi-select dropdowns only
|
666 |
+
if ( is_array( $field['value'] ) && !empty( $field['value'] ) ) {
|
667 |
+
$other_val = reset( $field['value'] );
|
668 |
}
|
|
|
|
|
669 |
}
|
|
|
670 |
return $other_val;
|
671 |
}
|
672 |
|
673 |
+
/**
|
674 |
+
* Check if there is a saved value for the "Other" text field. If so, set it as the $other_val.
|
675 |
+
* Intended for front-end use
|
676 |
+
*
|
677 |
+
* @since 2.0
|
678 |
+
*
|
679 |
+
* @param $field array
|
680 |
+
* @param $other_opt boolean
|
681 |
+
* @param $checked string
|
682 |
+
* @param $args array, should include opt_key and field name
|
683 |
+
* @return $other_val string
|
684 |
+
*/
|
685 |
+
public static function prepare_other_input( $field, &$other_opt, &$checked, $args = array() ){
|
686 |
+
//Check if this is an "Other" option
|
687 |
+
if ( !self::is_other_opt( $args['opt_key'] ) ) {
|
688 |
+
return;
|
689 |
+
}
|
690 |
+
|
691 |
+
$other_opt = true;
|
692 |
+
$other_args = array();
|
693 |
+
$parent = $pointer = '';
|
694 |
+
|
695 |
+
// Check for parent ID and pointer
|
696 |
+
$temp_array = explode( '[', $args['field_name'] );
|
697 |
+
// Count should only be greater than 3 if inside of a repeating section
|
698 |
+
if ( count( $temp_array ) > 3 ) {
|
699 |
+
$parent = str_replace( ']', '', $temp_array[1] );
|
700 |
+
$pointer = str_replace( ']', '', $temp_array[2]);
|
701 |
+
}
|
702 |
+
unset( $temp_array );
|
703 |
+
|
704 |
+
//Set up name for other field
|
705 |
+
$other_args['name'] = str_replace( '[]', '', $args['field_name'] );
|
706 |
+
$other_args['name'] = preg_replace('/\[' . $field['id'] . '\]$/', '', $other_args['name']);
|
707 |
+
$other_args['name'] = $other_args['name'] . '[other]' . '[' . $field['id'] . ']';
|
708 |
+
//Converts item_meta[field_id] => item_meta[other][field_id] and
|
709 |
+
//item_meta[parent][0][field_id] => item_meta[parent][0][other][field_id]
|
710 |
+
if ( FrmFieldsHelper::is_field_with_multiple_values( $field ) ) {
|
711 |
+
$other_args['name'] .= '[' . $args['opt_key'] . ']';
|
712 |
+
}
|
713 |
+
|
714 |
+
// Get text for "other" text field
|
715 |
+
$other_args['value'] = self::get_other_val( $args['opt_key'], $field, $parent, $pointer );
|
716 |
+
|
717 |
+
if ( $other_args['value'] ) {
|
718 |
+
$checked = 'checked="checked" ';
|
719 |
+
}
|
720 |
+
|
721 |
+
return $other_args;
|
722 |
+
}
|
723 |
+
|
724 |
public static function recursive_trim(&$value) {
|
725 |
if ( is_array($value) ) {
|
726 |
$value = array_map(array('FrmAppHelper', 'recursive_trim'), $value);
|
766 |
return $url;
|
767 |
}
|
768 |
|
769 |
+
/**
|
770 |
+
* @param string $handle
|
771 |
+
*/
|
772 |
public static function script_version($handle) {
|
773 |
global $wp_scripts;
|
774 |
if ( ! $wp_scripts ) {
|
830 |
return $contents;
|
831 |
}
|
832 |
|
833 |
+
/**
|
834 |
+
* @param string $table_name
|
835 |
+
* @param string $column
|
836 |
+
*/
|
837 |
public static function get_unique_key($name='', $table_name, $column, $id = 0, $num_chars = 6){
|
838 |
global $wpdb;
|
839 |
|
849 |
$key = base_convert( rand($min_slug_value, $max_slug_value), 10, 36 );
|
850 |
}
|
851 |
|
852 |
+
if ( is_numeric($key) || in_array($key, array('id', 'key', 'created-at', 'detaillink', 'editlink', 'siteurl', 'evenodd')) ) {
|
853 |
$key = $key .'a';
|
854 |
+
}
|
855 |
|
856 |
$query = "SELECT $column FROM $table_name WHERE $column = %s AND ID != %d LIMIT 1";
|
857 |
$key_check = $wpdb->get_var($wpdb->prepare($query, $key, $id));
|
858 |
|
859 |
+
if ( $key_check || is_numeric($key_check) ) {
|
860 |
$suffix = 2;
|
861 |
do {
|
862 |
$alt_post_name = substr($key, 0, 200-(strlen($suffix)+1)). "$suffix";
|
872 |
* Editing a Form or Entry
|
873 |
* @return bool|array
|
874 |
*/
|
875 |
+
|
876 |
+
/**
|
877 |
+
* @param string $table
|
878 |
+
*/
|
879 |
public static function setup_edit_vars($record, $table, $fields='', $default=false, $post_values=array()){
|
880 |
if ( ! $record ) {
|
881 |
return false;
|
897 |
|
898 |
$values['description'] = self::use_wpautop($values['description']);
|
899 |
$frm_settings = self::get_settings();
|
900 |
+
$is_form_builder = self::is_admin_page('formidable');
|
901 |
|
902 |
foreach ( (array) $fields as $field ) {
|
903 |
+
// Make sure to filter default values (for placeholder text), but not on the form builder page
|
904 |
+
if ( ! $is_form_builder ) {
|
905 |
+
$field->default_value = apply_filters('frm_get_default_value', $field->default_value, $field, true );
|
906 |
+
}
|
907 |
self::fill_field_defaults($field, $record, $values, compact('default', 'post_values', 'frm_settings'));
|
908 |
}
|
909 |
|
1067 |
}
|
1068 |
}
|
1069 |
|
1070 |
+
/**
|
1071 |
+
* @return string
|
1072 |
+
*/
|
1073 |
public static function get_meta_value($field_id, $entry) {
|
1074 |
if ( isset($entry->metas) ) {
|
1075 |
return isset($entry->metas[$field_id]) ? $entry->metas[$field_id] : false;
|
1348 |
return $term;
|
1349 |
}
|
1350 |
|
1351 |
+
/**
|
1352 |
+
* @param string $order_query
|
1353 |
+
*/
|
1354 |
public static function esc_order($order_query) {
|
1355 |
if ( empty($order_query) ) {
|
1356 |
return '';
|
1387 |
return ' ORDER BY '. $order . ' '. $order_by;
|
1388 |
}
|
1389 |
|
1390 |
+
/**
|
1391 |
+
* @param string $limit
|
1392 |
+
*/
|
1393 |
public static function esc_limit($limit) {
|
1394 |
if ( empty($limit) ) {
|
1395 |
return '';
|
1451 |
return (($r_count < ($current_p * $p_size))?$r_count:($current_p * $p_size));
|
1452 |
}
|
1453 |
|
1454 |
+
/**
|
1455 |
+
* @param integer $current_p
|
1456 |
+
*/
|
1457 |
public static function getFirstRecordNum($r_count,$current_p,$p_size){
|
1458 |
if($current_p == 1)
|
1459 |
return 1;
|
1461 |
return (self::getLastRecordNum($r_count,($current_p - 1),$p_size) + 1);
|
1462 |
}
|
1463 |
|
1464 |
+
/**
|
1465 |
+
* @param string $table_name
|
1466 |
+
*/
|
1467 |
public static function &getRecordCount($where = '', $table_name) {
|
1468 |
$cache_key = 'count_'. $table_name .'_'. maybe_serialize($where);
|
1469 |
$query = 'SELECT COUNT(*) FROM ' . $table_name . self::prepend_and_or_where(' WHERE ', $where);
|
1495 |
$referrerinfo = '';
|
1496 |
$keywords = array();
|
1497 |
$i = 1;
|
1498 |
+
if ( isset($_SESSION) && isset($_SESSION['frm_http_referer']) && $_SESSION['frm_http_referer'] ) {
|
1499 |
foreach ($_SESSION['frm_http_referer'] as $referer) {
|
1500 |
$referrerinfo .= str_pad("Referer $i: ",20) . $referer. "\r\n";
|
1501 |
$keywords_used = self::get_referer_query($referer);
|
1502 |
+
if ( $keywords_used !== false ) {
|
1503 |
$keywords[] = $keywords_used;
|
1504 |
+
}
|
1505 |
|
1506 |
$i++;
|
1507 |
}
|
1512 |
}
|
1513 |
|
1514 |
$i = 1;
|
1515 |
+
if ( isset($_SESSION) && isset($_SESSION['frm_http_pages']) && $_SESSION['frm_http_pages'] ) {
|
1516 |
+
foreach ( $_SESSION['frm_http_pages'] as $page ) {
|
1517 |
$referrerinfo .= str_pad("Page visited $i: ",20) . $page. "\r\n";
|
1518 |
$i++;
|
1519 |
}
|
1546 |
$l2 = $name;
|
1547 |
}
|
1548 |
|
1549 |
+
if ( ! isset($l3) ) {
|
1550 |
+
$l3 = $name;
|
1551 |
+
}
|
1552 |
+
|
1553 |
$this_val = ( $p == $last ) ? $jv['value'] : array();
|
1554 |
|
1555 |
switch ( $p ) {
|
1579 |
$vars[$l1][$l2][$l3] = $this_val;
|
1580 |
}
|
1581 |
break;
|
1582 |
+
|
1583 |
+
case 3:
|
1584 |
+
$l4 = $name;
|
1585 |
+
if ( $name == '' ) {
|
1586 |
+
$vars[$l1][$l2][$l3][] = $this_val;
|
1587 |
+
} else if ( ! isset($vars[$l1][$l2][$l3][$l4] ) ) {
|
1588 |
+
$vars[$l1][$l2][$l3][$l4] = $this_val;
|
1589 |
+
}
|
1590 |
+
break;
|
1591 |
}
|
1592 |
|
1593 |
unset($this_val, $n);
|
classes/helpers/FrmEntriesHelper.php
CHANGED
@@ -80,7 +80,7 @@ class FrmEntriesHelper{
|
|
80 |
|
81 |
foreach ( (array) $field->field_options as $k => $v ) {
|
82 |
if ( ! isset($field_array[$k]) ) {
|
83 |
-
|
84 |
}
|
85 |
unset($k, $v);
|
86 |
}
|
@@ -96,6 +96,7 @@ class FrmEntriesHelper{
|
|
96 |
if ( is_array($form->options) ) {
|
97 |
foreach ( $form->options as $opt => $value ) {
|
98 |
$values[$opt] = FrmAppHelper::get_post_param($opt, $value);
|
|
|
99 |
}
|
100 |
}
|
101 |
|
@@ -112,18 +113,6 @@ class FrmEntriesHelper{
|
|
112 |
|
113 |
$values = array_merge($form_defaults, $values);
|
114 |
|
115 |
-
if ( ! isset($values['before_html']) ) {
|
116 |
-
$values['before_html'] = FrmFormsHelper::get_default_html('before');
|
117 |
-
}
|
118 |
-
|
119 |
-
if ( ! isset($values['after_html']) ) {
|
120 |
-
$values['after_html'] = FrmFormsHelper::get_default_html('after');
|
121 |
-
}
|
122 |
-
|
123 |
-
if ( ! isset($values['submit_html']) ) {
|
124 |
-
$values['submit_html'] = FrmFormsHelper::get_default_html('submit');
|
125 |
-
}
|
126 |
-
|
127 |
return apply_filters('frm_setup_new_entry', $values);
|
128 |
}
|
129 |
|
@@ -251,7 +240,11 @@ class FrmEntriesHelper{
|
|
251 |
$meta = array('item_id' => $atts['id'], 'field_id' => $f->id, 'meta_value' => $prev_val, 'field_type' => $f->type);
|
252 |
|
253 |
//This filter applies to the default-message shortcode and frm-show-entry shortcode only
|
254 |
-
|
|
|
|
|
|
|
|
|
255 |
}
|
256 |
|
257 |
self::textarea_display_value( $val, $f->type, $atts['plain_text'] );
|
@@ -299,12 +292,15 @@ class FrmEntriesHelper{
|
|
299 |
|
300 |
if ( $atts['format'] != 'text' ) {
|
301 |
$values['ip'] = $atts['entry']->ip;
|
302 |
-
$values['browser'] = $data['browser'];
|
303 |
$values['referrer'] = $data['referrer'];
|
304 |
} else {
|
305 |
//$content .= "\r\n\r\n" . __('User Information', 'formidable') ."\r\n";
|
306 |
$values['ip'] = array('label' => __('IP Address', 'formidable'), 'val' => $atts['entry']->ip);
|
307 |
-
$values['browser'] = array(
|
|
|
|
|
|
|
308 |
$values['referrer'] = array('label' => __('Referrer', 'formidable'), 'val' => $data['referrer']);
|
309 |
}
|
310 |
}
|
@@ -523,107 +519,131 @@ class FrmEntriesHelper{
|
|
523 |
return apply_filters('frm_display_value', $value, $field, $atts);
|
524 |
}
|
525 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
526 |
/**
|
527 |
-
*
|
|
|
528 |
* @since 2.0
|
529 |
*
|
530 |
-
* @param $
|
531 |
-
* @param $
|
532 |
-
* @
|
533 |
*/
|
534 |
-
public static function
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
$other_array = $values['item_meta']['other'];
|
540 |
-
foreach ( $other_array as $f_id => $o_val ) {
|
541 |
-
//For checkboxes
|
542 |
-
if ( is_array( $o_val ) ) {
|
543 |
-
foreach ( $o_val as $opt_key => $opt_val ) {
|
544 |
-
$_POST['item_meta'][$f_id][$opt_key] = $values['item_meta'][$f_id][$opt_key] = $opt_val;
|
545 |
-
unset( $opt_key, $opt_val );
|
546 |
-
}
|
547 |
-
//For radio buttons
|
548 |
-
} else if ( $o_val ) {
|
549 |
-
// If Other vals weren't cleared with JS (like on the back-end), check if they need to be cleared now
|
550 |
-
if ( $clear_vals && isset( $values['item_meta'][$f_id] ) && !empty( $values['item_meta'][$f_id] ) ) {
|
551 |
-
$field = FrmField::getOne( $f_id );
|
552 |
-
$array = array_filter( $field->options, 'is_numeric', ARRAY_FILTER_USE_KEY );
|
553 |
-
// Check if posted value is NOT equal to other value
|
554 |
-
if ( !in_array( $values['item_meta'][$f_id], $array ) ) {
|
555 |
-
$_POST['item_meta'][$f_id] = $values['item_meta'][$f_id] = $o_val;
|
556 |
-
}
|
557 |
-
unset( $array );
|
558 |
-
} else {
|
559 |
-
$_POST['item_meta'][$f_id] = $values['item_meta'][$f_id] = $o_val;
|
560 |
-
}
|
561 |
-
}
|
562 |
}
|
563 |
-
unset( $_POST['item_meta']['other'] );
|
564 |
|
565 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
}
|
567 |
|
568 |
-
|
569 |
* Sets radio or checkbox value equal to "other" value if it is set - FOR REPEATING SECTIONS
|
|
|
570 |
* @since 2.0
|
571 |
-
*
|
|
|
|
|
|
|
572 |
*/
|
573 |
-
public static function set_other_repeating_vals( $
|
574 |
-
if (
|
575 |
-
|
576 |
-
} else {
|
577 |
-
return $values;
|
578 |
}
|
579 |
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
foreach ( $val['other'] as $sub_fid => $o_val ) {
|
586 |
-
|
587 |
-
//For checkboxes
|
588 |
-
if ( is_array( $o_val ) ) {
|
589 |
-
foreach ( $o_val as $opt_key => $opt_val ) {
|
590 |
-
$values['item_meta'][$field->id][$k][$sub_fid][$opt_key] = $opt_val;
|
591 |
-
unset( $values['item_meta'][$field->id][$k]['other'][$sub_fid][$opt_key] );
|
592 |
-
unset( $opt_key, $opt_val );
|
593 |
-
}
|
594 |
|
595 |
-
|
596 |
-
} else if ( $o_val ) {
|
597 |
-
$values['item_meta'][$field->id][$k][$sub_fid] = $o_val;
|
598 |
-
unset( $values['item_meta'][$field->id][$k]['other'][$sub_fid] );
|
599 |
-
}
|
600 |
-
unset( $sub_fid, $o_val);
|
601 |
-
}
|
602 |
|
603 |
-
|
|
|
604 |
}
|
605 |
-
|
606 |
-
return $values;
|
607 |
}
|
608 |
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
616 |
|
617 |
-
|
618 |
-
if ( is_object( $field ) ) {
|
619 |
-
$field_id = $field->id;
|
620 |
-
} else {
|
621 |
-
$field_id = $field;
|
622 |
-
}
|
623 |
-
if ( empty($args['parent_field_id']) ) {
|
624 |
-
$value = isset($_POST['item_meta'][$field_id]) ? $_POST['item_meta'][$field_id] : '';
|
625 |
} else {
|
626 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
627 |
}
|
628 |
}
|
629 |
|
@@ -652,4 +672,65 @@ class FrmEntriesHelper{
|
|
652 |
|
653 |
return $content;
|
654 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
655 |
}
|
80 |
|
81 |
foreach ( (array) $field->field_options as $k => $v ) {
|
82 |
if ( ! isset($field_array[$k]) ) {
|
83 |
+
$field_array[$k] = $v;
|
84 |
}
|
85 |
unset($k, $v);
|
86 |
}
|
96 |
if ( is_array($form->options) ) {
|
97 |
foreach ( $form->options as $opt => $value ) {
|
98 |
$values[$opt] = FrmAppHelper::get_post_param($opt, $value);
|
99 |
+
unset($opt, $value);
|
100 |
}
|
101 |
}
|
102 |
|
113 |
|
114 |
$values = array_merge($form_defaults, $values);
|
115 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
return apply_filters('frm_setup_new_entry', $values);
|
117 |
}
|
118 |
|
240 |
$meta = array('item_id' => $atts['id'], 'field_id' => $f->id, 'meta_value' => $prev_val, 'field_type' => $f->type);
|
241 |
|
242 |
//This filter applies to the default-message shortcode and frm-show-entry shortcode only
|
243 |
+
if ( isset($atts['filter']) && $atts['filter'] == false ) {
|
244 |
+
$val = $prev_val;
|
245 |
+
} else {
|
246 |
+
$val = apply_filters('frm_email_value', $prev_val, (object) $meta, $atts['entry']);
|
247 |
+
}
|
248 |
}
|
249 |
|
250 |
self::textarea_display_value( $val, $f->type, $atts['plain_text'] );
|
292 |
|
293 |
if ( $atts['format'] != 'text' ) {
|
294 |
$values['ip'] = $atts['entry']->ip;
|
295 |
+
$values['browser'] = self::get_browser($data['browser']);
|
296 |
$values['referrer'] = $data['referrer'];
|
297 |
} else {
|
298 |
//$content .= "\r\n\r\n" . __('User Information', 'formidable') ."\r\n";
|
299 |
$values['ip'] = array('label' => __('IP Address', 'formidable'), 'val' => $atts['entry']->ip);
|
300 |
+
$values['browser'] = array(
|
301 |
+
'label' => __('User-Agent (Browser/OS)', 'formidable'),
|
302 |
+
'val' => self::get_browser($data['browser']),
|
303 |
+
);
|
304 |
$values['referrer'] = array('label' => __('Referrer', 'formidable'), 'val' => $data['referrer']);
|
305 |
}
|
306 |
}
|
519 |
return apply_filters('frm_display_value', $value, $field, $atts);
|
520 |
}
|
521 |
|
522 |
+
public static function set_posted_value($field, $value, $args) {
|
523 |
+
// If validating a field with "other" opt, set back to prev value now
|
524 |
+
if ( isset( $args['other'] ) && $args['other'] ) {
|
525 |
+
$value = $args['temp_value'];
|
526 |
+
}
|
527 |
+
if ( empty($args['parent_field_id']) ) {
|
528 |
+
$_POST['item_meta'][$field->id] = $value;
|
529 |
+
} else {
|
530 |
+
$_POST['item_meta'][$args['parent_field_id']][$args['key_pointer']][$field->id] = $value;
|
531 |
+
}
|
532 |
+
}
|
533 |
+
|
534 |
+
public static function get_posted_value($field, &$value, $args) {
|
535 |
+
if ( is_object( $field ) ) {
|
536 |
+
$field_id = $field->id;
|
537 |
+
} else {
|
538 |
+
$field_id = $field;
|
539 |
+
}
|
540 |
+
if ( empty($args['parent_field_id']) ) {
|
541 |
+
$value = isset($_POST['item_meta'][$field_id]) ? $_POST['item_meta'][$field_id] : '';
|
542 |
+
} else {
|
543 |
+
$value = $_POST['item_meta'][$args['parent_field_id']][$args['key_pointer']][$field_id];
|
544 |
+
}
|
545 |
+
}
|
546 |
+
|
547 |
/**
|
548 |
+
* Check if field has an "Other" option and if any other values are posted
|
549 |
+
*
|
550 |
* @since 2.0
|
551 |
*
|
552 |
+
* @param $field object
|
553 |
+
* @param $value string or array
|
554 |
+
* @param $args array
|
555 |
*/
|
556 |
+
public static function maybe_set_other_validation( $field, &$value, &$args ) {
|
557 |
+
$args['other'] = false;
|
558 |
+
if ( !$value || empty( $value ) || !FrmAppHelper::pro_is_installed() ) {
|
559 |
+
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
560 |
}
|
|
|
561 |
|
562 |
+
// Get other value for fields in repeating section
|
563 |
+
self::set_other_repeating_vals( $field, $value, $args );
|
564 |
+
|
565 |
+
// Check if there are any posted "Other" values
|
566 |
+
if ( isset( $field->field_options['other'] ) && $field->field_options['other'] && isset( $_POST['item_meta']['other'][$field->id] ) ) {
|
567 |
+
|
568 |
+
// Save original value
|
569 |
+
$args['temp_value'] = $value;
|
570 |
+
$args['other'] = true;
|
571 |
+
$other_vals = $_POST['item_meta']['other'][$field->id];
|
572 |
+
|
573 |
+
// Set the validation value now
|
574 |
+
self::set_other_validation_val( $value, $other_vals, $field, $args );
|
575 |
+
}
|
576 |
}
|
577 |
|
578 |
+
/**
|
579 |
* Sets radio or checkbox value equal to "other" value if it is set - FOR REPEATING SECTIONS
|
580 |
+
*
|
581 |
* @since 2.0
|
582 |
+
*
|
583 |
+
* @param $field object
|
584 |
+
* @param $value string or array
|
585 |
+
* @param $args array
|
586 |
*/
|
587 |
+
public static function set_other_repeating_vals( $field, &$value, &$args ){
|
588 |
+
if ( !$args['parent_field_id'] ) {
|
589 |
+
return;
|
|
|
|
|
590 |
}
|
591 |
|
592 |
+
// Check if there are any other posted "other" values for this field
|
593 |
+
if ( isset( $field->field_options['other'] ) && $field->field_options['other'] && isset( $_POST['item_meta'][$args['parent_field_id']][$args['key_pointer']]['other'][$field->id] ) ) {
|
594 |
+
// Save original value
|
595 |
+
$args['temp_value'] = $value;
|
596 |
+
$args['other'] = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
597 |
|
598 |
+
$other_vals = $_POST['item_meta'][$args['parent_field_id']][$args['key_pointer']]['other'][$field->id];
|
|
|
|
|
|
|
|
|
|
|
|
|
599 |
|
600 |
+
// Set the validation value now
|
601 |
+
self::set_other_validation_val( $value, $other_vals, $field, $args );
|
602 |
}
|
|
|
|
|
603 |
}
|
604 |
|
605 |
+
/**
|
606 |
+
* Modify value used for validation
|
607 |
+
* This function essentially removes the "Other" radio or checkbox value from the $value being validated.
|
608 |
+
* It also adds any text from the free text fields to the value
|
609 |
+
*
|
610 |
+
* Needs to accommodate for times when other opt is selected, but no other free text is entered
|
611 |
+
*
|
612 |
+
* @since 2.0
|
613 |
+
*
|
614 |
+
* @param $value string or array
|
615 |
+
* @param $other_vals string or array (usually of posted values)
|
616 |
+
* @param $field object
|
617 |
+
* @param $args array
|
618 |
+
*/
|
619 |
+
public static function set_other_validation_val( &$value, $other_vals, $field, &$args ) {
|
620 |
+
// Checkboxes and multi-select dropdowns
|
621 |
+
if ( is_array( $value ) && $field->type == 'checkbox' ) {
|
622 |
+
// Combine "Other" values with checked values. "Other" values will override checked box values.
|
623 |
+
$value = array_merge( $value, $other_vals );
|
624 |
+
$value = array_filter( $value );
|
625 |
+
if ( count( $value ) == 0 ) {
|
626 |
+
$value = '';
|
627 |
+
}
|
628 |
|
629 |
+
// Radio and dropdowns
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
630 |
} else {
|
631 |
+
$other_key = array_filter( array_keys($field->options), 'is_string');
|
632 |
+
$other_key = reset( $other_key );
|
633 |
+
|
634 |
+
// Multi-select dropdown
|
635 |
+
if ( is_array( $value ) ) {
|
636 |
+
$o_key = array_search( $field->options[$other_key], $value );
|
637 |
+
if ( $o_key ) {
|
638 |
+
// Modify original value so key is preserved
|
639 |
+
$value[$other_key] = $value[$o_key];
|
640 |
+
unset( $value[$o_key] );
|
641 |
+
$args['temp_value'] = $value;
|
642 |
+
$value[$other_key] = reset( $other_vals );
|
643 |
+
}
|
644 |
+
} else if ( $field->options[$other_key] == $value ) {
|
645 |
+
$value = $other_vals;
|
646 |
+
}
|
647 |
}
|
648 |
}
|
649 |
|
672 |
|
673 |
return $content;
|
674 |
}
|
675 |
+
|
676 |
+
public static function get_browser($u_agent) {
|
677 |
+
$bname = __('Unknown', 'formidable');
|
678 |
+
$platform = __('Unknown', 'formidable');
|
679 |
+
$ub = '';
|
680 |
+
|
681 |
+
//First get the platform?
|
682 |
+
if ( preg_match('/linux/i', $u_agent) ) {
|
683 |
+
$platform = 'Linux';
|
684 |
+
} else if ( preg_match('/macintosh|mac os x/i', $u_agent) ) {
|
685 |
+
$platform = 'Mac';
|
686 |
+
} else if ( preg_match('/windows|win32/i', $u_agent) ) {
|
687 |
+
$platform = 'Windows';
|
688 |
+
}
|
689 |
+
|
690 |
+
// Next get the name of the useragent yes seperately and for good reason
|
691 |
+
if ( preg_match('/MSIE/i', $u_agent) && ! preg_match('/Opera/i', $u_agent) ) {
|
692 |
+
$bname = 'Internet Explorer';
|
693 |
+
$ub = 'MSIE';
|
694 |
+
} else if ( preg_match('/Firefox/i', $u_agent) ) {
|
695 |
+
$bname = 'Mozilla Firefox';
|
696 |
+
$ub = 'Firefox';
|
697 |
+
} else if ( preg_match('/Chrome/i', $u_agent) ) {
|
698 |
+
$bname = 'Google Chrome';
|
699 |
+
$ub = 'Chrome';
|
700 |
+
} else if ( preg_match('/Safari/i', $u_agent) ) {
|
701 |
+
$bname = 'Apple Safari';
|
702 |
+
$ub = 'Safari';
|
703 |
+
} else if ( preg_match('/Opera/i',$u_agent) ) {
|
704 |
+
$bname = $ub = 'Opera';
|
705 |
+
} else if ( preg_match('/Netscape/i', $u_agent) ) {
|
706 |
+
$bname = $ub = 'Netscape';
|
707 |
+
}
|
708 |
+
|
709 |
+
// finally get the correct version number
|
710 |
+
$known = array('Version', $ub, 'other');
|
711 |
+
$pattern = '#(?<browser>' . join('|', $known) . ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
|
712 |
+
preg_match_all($pattern, $u_agent, $matches); // get the matching numbers
|
713 |
+
|
714 |
+
// see how many we have
|
715 |
+
$i = count($matches['browser']);
|
716 |
+
if ( $i != 1 ) {
|
717 |
+
//we will have two since we are not using 'other' argument yet
|
718 |
+
//see if version is before or after the name
|
719 |
+
if ( strripos($u_agent, 'Version') < strripos($u_agent,$ub) ) {
|
720 |
+
$version = $matches['version'][0];
|
721 |
+
} else {
|
722 |
+
$version = $matches['version'][1];
|
723 |
+
}
|
724 |
+
} else {
|
725 |
+
$version = $matches['version'][0];
|
726 |
+
}
|
727 |
+
|
728 |
+
// check if we have a number
|
729 |
+
if ( $version == '') {
|
730 |
+
$version = '?';
|
731 |
+
}
|
732 |
+
|
733 |
+
return $bname .' '. $version .' / '. $platform;
|
734 |
+
}
|
735 |
+
|
736 |
}
|
classes/helpers/FrmEntriesListHelper.php
CHANGED
@@ -149,10 +149,11 @@ class FrmEntriesListHelper extends FrmListHelper {
|
|
149 |
$class = 'class="'. $column_name .' column-'. $column_name .'"';
|
150 |
|
151 |
$style = '';
|
152 |
-
if ( in_array( $column_name, $hidden ) )
|
153 |
$style = ' style="display:none;"';
|
154 |
-
else if(
|
155 |
$action_col = $column_name;
|
|
|
156 |
|
157 |
$attributes = $class . $style;
|
158 |
|
@@ -241,6 +242,9 @@ class FrmEntriesListHelper extends FrmListHelper {
|
|
241 |
return $r;
|
242 |
}
|
243 |
|
|
|
|
|
|
|
244 |
private function get_actions( &$actions, $item, $view_link ) {
|
245 |
$actions['view'] = '<a href="' . esc_url( $view_link ) . '">'. __('View', 'formidable') .'</a>';
|
246 |
|
149 |
$class = 'class="'. $column_name .' column-'. $column_name .'"';
|
150 |
|
151 |
$style = '';
|
152 |
+
if ( in_array( $column_name, $hidden ) ) {
|
153 |
$style = ' style="display:none;"';
|
154 |
+
} else if ( ! $action_col && ! in_array($column_name, array('cb', 'id', 'form_id', 'post_id')) ) {
|
155 |
$action_col = $column_name;
|
156 |
+
}
|
157 |
|
158 |
$attributes = $class . $style;
|
159 |
|
242 |
return $r;
|
243 |
}
|
244 |
|
245 |
+
/**
|
246 |
+
* @param string $view_link
|
247 |
+
*/
|
248 |
private function get_actions( &$actions, $item, $view_link ) {
|
249 |
$actions['view'] = '<a href="' . esc_url( $view_link ) . '">'. __('View', 'formidable') .'</a>';
|
250 |
|
classes/helpers/FrmFieldsHelper.php
CHANGED
@@ -85,10 +85,12 @@ class FrmFieldsHelper{
|
|
85 |
}
|
86 |
}
|
87 |
|
88 |
-
|
89 |
* Check if this field can hold an array of values
|
90 |
*
|
91 |
* @since 2.0
|
|
|
|
|
92 |
* @return boolean
|
93 |
*/
|
94 |
public static function is_field_with_multiple_values( $field ) {
|