function bbconnect_scrub($callback, $data) { if (is_array($data)) { $new = array(); foreach ($data as $key => $val) { if (is_array($val)) { $new[$key] = bbconnect_scrub($callback, $val); } else { $new[$key] = call_user_func($callback, $val); } } } else { $new = call_user_func($callback, $data); } return $new; }
/** * This function saves BB Connect Options data at init to catch taxonomic options. * * @since 1.0.2 * * @param none * * @return var sets the global notification. */ function bbconnect_options_save() { if (isset($_POST['_bbc_option'])) { // SECURITY CHECK check_admin_referer('bbconnect-nonce'); // SANITIZE ALL INPUT bbconnect_scrub('bbconnect_sanitize', $_POST); // LET PLUGINS MANIPULATE THEIR OWN OPTIONS do_action('bbconnect_options_save_ext'); global $notice, $bbconnect_flush; $notice = array(); $bbconnect_flush = apply_filters('bbconnect_flush_permalinks', false, $_POST); foreach ($_POST['_bbc_option'] as $key => $value) { if (update_option($key, $value)) { $notice[] = $key; } } } }
/** * Receives BBCONNECT-specific data and prepares it for WP updates. On update scenarios, BBCONNECT takes the lead. * * @since 1.0.2 * * @param int $id Required. The ID of the target user. * @param arr $uvals Required. The passed data. Default is a $_POST array. * * @return int/arr The ID if insertion was successful, otherwise a WP_Error. */ function bbconnect_update_user_metadata($args = '') { // SET THE DEFAULTS TO BE OVERRIDDEN AS DESIRED $defaults = array('user_id' => false, 'uvals' => false, 'source' => false, 'data_handler' => 'overwrite'); // PARSE THE INCOMING ARGS $args = wp_parse_args($args, $defaults); // EXTRACT THE VARIABLES extract($args, EXTR_SKIP); if (empty($uvals) || empty($user_id)) { return false; } // APPLY AN ACTION IF CONDITIONS ARE PRESENT // IN ALL CASES EXCEPT NEW USERS, BBCONNECT LEADS if (false != $source) { do_action('bbconnect_trigger_user_metadata', $user_id, $uvals, $source); } // SANITIZE THE DATA $uvals = bbconnect_scrub('bbconnect_sanitize', $uvals); // PROCESS THE USER META / MERGE TAGS // IF LOGIC PREVENTS NASTY NOTICES IF THEY ACCIDENTALLY HIT 'EDIT' if (isset($uvals['bbconnect_user_meta'])) { // GO AHEAD AND PROCESS THE FULL SUBMISSION foreach ($uvals['bbconnect_user_meta'] as $key => $value) { $bbconnect_[$key] = bbconnect_get_option($key); if (empty($bbconnect_[$key])) { continue; } // IF THIS IS A SECTION, SKIP IT if ('section' == $bbconnect_[$key]['options']['field_type']) { continue; } if (is_array($value)) { // FOR MULTI-TEXT LOOP THROUGH TO MAKE SURE NULL VALUES ARE REMOVED FROM PROFILE EDITS if ('multitext' == $bbconnect_[$key]['options']['field_type']) { $new_value = array(); foreach ($value as $subvalue) { if (!empty($subvalue['value'])) { $new_value[] = $subvalue; } } $value = $new_value; } // FOR TAXONOMIES if ('taxonomy' == $bbconnect_[$key]['options']['field_type']) { if (isset($uvals['bbconnect_user_taxonomy_options'])) { $data_handler = $uvals['bbconnect_user_taxonomy_options'][$key]; } if ('append' == $data_handler || 'append_no_overwrite' == $data_handler) { $pre_array = get_user_meta($user_id, bbconnect_key($key, $bbconnect_[$key]['source']), true); if (is_array($pre_array)) { $new_array = array(); foreach ($value as $subvalue) { if (!in_array($subvalue, $pre_array)) { $new_array[] = $subvalue; } } $value = array_merge($pre_array, $new_array); //update_user_meta( $user_id, bbconnect_key( $key, $bbconnect_{$key}['source'] ), $merged ); } else { //update_user_meta( $user_id, bbconnect_key( $key, $bbconnect_{$key}['source'] ), $value ); } } else { if ('remove' == $data_handler) { $pre_array = get_user_meta($user_id, bbconnect_key($key, $bbconnect_[$key]['source']), true); if (is_array($pre_array)) { $new_array = array(); foreach ($value as $subvalue) { $pre_key = array_search($subvalue, $pre_array); if (false === $pre_key) { } else { unset($pre_array[$pre_key]); } } $value = $pre_array; } } } $value = array_filter($value); } } if ('wpr' == $bbconnect_[$key]['source'] && 'url' == $key) { wp_update_user(array('ID' => $user_id, 'user_url' => $value)); } else { if (false !== strpos($data_handler, 'no_overwrite')) { ${$key} = get_user_meta($user_id, bbconnect_key($key, $bbconnect_[$key]['source']), true); if ('' != ${$key}) { continue; } } if (empty($value)) { delete_user_meta($user_id, bbconnect_key($key, $bbconnect_[$key]['source'])); } else { update_user_meta($user_id, bbconnect_key($key, $bbconnect_[$key]['source']), $value); } } /*} elseif ( 'bbconnect' != $bbconnect_{$key}['source'] ) { // CHECK TO MAKE SURE WE'RE ALLOWING OVERWRITES if ( isset( $_POST['no_overwrite'] ) ) { ${$key} = get_user_meta( $user_id, $key, true ); if ( '' != ${$key} ) continue; } if ( '' != $value || !empty( $value ) ) { update_user_meta( $user_id, $key, $value ); } else { delete_user_meta( $user_id, $key ); } } elseif ( 'bbconnect' == $bbconnect_{$key}['source'] ) { // CHECK TO MAKE SURE WE'RE ALLOWING OVERWRITES if ( isset( $_POST['no_overwrite'] ) ) { ${$key} = get_user_meta( $user_id, 'bbconnect_'.$key, true ); if ( '' != ${$key} ) continue; } if ( '' != $value || !empty( $value ) ) { update_user_meta( $user_id, 'bbconnect_'.$key, $value ); } else { delete_user_meta( $user_id, 'bbconnect_'.$key ); } }*/ } } /* // PROCESS THE USER TAXONOMIES / INTEREST GROUPINGS if ( isset( $uvals['bbconnect_user_taxonomy'] ) ) { foreach ( $uvals['bbconnect_user_taxonomy'] as $key => $value ) { // IF THIS IS A GROUP ACTION, EVALUATE IF THIS IS AN OVERWRITE OR AN APPEND (DEFAULT) if ( isset( $uvals['bbconnect_user_taxonomy_options'] ) ) { } else { if ( false !== array_search( 'falsetto', $value ) ) { $f_key = array_search( 'falsetto', $value ); unset( $value[$f_key] ); } // CHECK TO MAKE SURE WE'RE ALLOWING OVERWRITES if ( isset( $_POST['no_overwrite'] ) ) { ${$key} = get_user_meta( $user_id, 'bbconnect_'.$key, true ); if ( '' != ${$key} ) continue; } if ( !empty( $value ) ) { update_user_meta( $user_id, 'bbconnect_'.$key, $value ); } else { delete_user_meta( $user_id, 'bbconnect_'.$key ); } } } } */ // ALLOW PLUGINS TO PERFORM ANY ACTIONS BEFORE THE USER TABLE IS UPDATED do_action('bbconnect_update_user_metadata_ext', $user_id, $uvals); }
function bbconnect_report_process() { // RUN A SECURITY CHECK if (!wp_verify_nonce($_POST['bbconnect_report_nonce'], 'bbconnect-report-nonce')) { die('terribly sorry.'); } // MAKE SURE WE HAVE A CLEAN START... $_POST = bbconnect_scrub('bbconnect_sanitize', $_POST); // UNWRAP THE VALUES if (isset($_POST['data'])) { parse_str($_POST['data'], $_POST); } // UNWRAP THE VALUES if (isset($_POST['userdata'])) { parse_str($_POST['userdata'], $_POST); } // UNWRAP THE VALUES if (isset($_POST['fdata'])) { parse_str($_POST['fdata'], $_POST); } // RUN THE SWITCH $post_keys = array_keys($_POST['action']); $pro_func = array_shift($post_keys); $pro_var = array_shift($_POST['action']); global $ret_res; $ret_res = $pro_func($_POST); if (false != $ret_res) { //echo '<div>'.memory_get_usage().'</div>'; // REMEMBER THE USERS SEARCH global $current_user; $filter_query = $ret_res['post_vars']; update_option('_bbconnect_' . $current_user->ID . '_current', $filter_query); // DISPLAY THE RESULTS bbconnect_report_display($ret_res); //echo '<div>'.memory_get_usage().'</div>'; } die; }
/** * Process the submissions return the results * * @since 0.1.0 */ function bbconnectpanels_submission($embed = false) { // RUN A SECURITY CHECK if (is_user_logged_in()) { if (!check_ajax_referer('bbconnectpanels-ajax-nonce', 'bbconnectpanels_nonce', false)) { wp_clear_auth_cookie(); die(__('very sorry. there seems to be an error. please refresh the page and try again.', 'bbconnect')); } } // UNWRAP THE VALUES if (isset($_POST['data'])) { parse_str($_POST['data'], $_POST); } // SANITIZE ALL INPUT DATA $_POST = bbconnect_scrub('bbconnect_sanitize', $_POST); // DO A SERIALIZED VALUE CHECK $rel = maybe_unserialize(urldecode($_POST['rel'])); if (is_array($rel)) { $rel_array = $rel; $rel = $rel_array['rel']; $_POST = array_merge($_POST, $rel_array); } else { if (false !== strpos($rel, '&')) { $rel_pre = explode('&', $rel); } else { $rel_pre = array($rel); } // REL CAN BE DECLARED BY THE FORMS if (1 == count($rel_pre) && false === strpos($rel, '=')) { $rel_array = array('rel' => $rel); } else { $rel_array = array(); foreach ($rel_pre as $key => $pair) { $pair = explode('=', $pair); $rel_array[$pair[0]] = $pair[1]; } } // ALLOWED $_GETs $okget = bbconnectpanels_get_query_vars(); foreach ($rel_array as $key => $val) { if (in_array($key, $okget)) { $_POST[$key] = $val; } } } // SANITIZE ALL INPUT DATA $_POST = bbconnect_scrub('bbconnect_sanitize', $_POST); // IF WE'VE SET A TEMPORARY RE-DIRECT, UNSET IT HERE bbconnectpanels_done_whereto(); // RUN THE SWITCH switch ($_POST['rel']) { // SENDING A CONTACT REQUEST case 'contact': if (!empty($_POST['email'])) { // CONDITIONS FOR NAME $fname = ''; $lname = ''; if (isset($_POST['bbconnect_user_meta']['first_name'])) { $fname = $_POST['bbconnect_user_meta']['first_name']; } if (isset($_POST['bbconnect_user_meta']['last_name'])) { $lname = $_POST['bbconnect_user_meta']['last_name']; } $name = $fname . ' ' . $lname; // EMAIL $email = $_POST['email']; // USER TARGET if (isset($_POST['uid'])) { $uid = $_POST['uid']; unset($_POST['uid']); } // CODE $log_code = false; $contact_title = ''; $form = false; if (isset($_POST['bbc_form'])) { $log_code = $_POST['bbc_form']; $bbc_titles = get_option('_bbconnect_user_forms'); $contact_title = $bbc_titles[$_POST['bbc_form']] . ': '; $form = get_option('_bbconnect_form_' . $_POST['bbc_form']); $form_notifications = true; if (!empty($form['notify_enable']) && 'false' == $form['notify_enable']) { $form_notifications = false; } } // SUBJECT $subject = $contact_title . __('Submission', 'bbconnect'); if (false != $form && isset($form['subject'])) { $subject = $form['subject']; } if (isset($_POST['_bbc_post']['_bbc_form_subject'])) { $subject = $_POST['_bbc_post']['_bbc_form_subject']; unset($_POST['_bbc_post']['_bbc_form_subject']); } // MESSAGE $message = ''; if (isset($_POST['_bbc_post']['_bbc_form_message'])) { $message = $_POST['_bbc_post']['_bbc_form_message']; unset($_POST['_bbc_post']['_bbc_form_message']); } // APPEND ADDITIONAL FIELDS TO THE MESSAGE if (isset($_POST['bbconnect_user_meta'])) { foreach ($_POST['bbconnect_user_meta'] as $k => $v) { $option = bbconnect_get_option($k); $message .= "\r\n"; $message .= $option['name'] . ": " . stripslashes(maybe_serialize($v)) . "\r\n"; } } // CC $cc_me = 'false'; if (isset($_POST['_bbc_post']['_bbc_form_cc'])) { $cc_me = $_POST['_bbc_post']['_bbc_form_cc']; unset($_POST['_bbc_post']['_bbc_form_cc']); } $sender = get_user_by('email', $email); // IF THEY DON'T EXIST, ADD THEM! // FIRST TIME COMMUNICATIONS ARE GOING TO BE LOGGED NO MATTER WHAT if (!$sender) { // NEED TO DO A SECONDARY CHECK FOR ALTERNATE EMAILS $user_id = bbconnect_insert_user(array('ivals' => $_POST, 'log_type' => 'contact_form', 'log_code' => $log_code, 'title' => $contact_title . $subject, 'content' => $message)); $sender = get_user_by('id', $user_id); // IF THEY DO EXIST, AND ARE CONTACTING AN ADMIN, LOG IT! } else { if (!isset($uid)) { $postdata['post_title'] = $contact_title . $subject; $postdata['post_content'] = $message; $postdata['post_status'] = 'private'; $postdata['post_author'] = $sender->ID; $postdata['post_type'] = 'bbc_log'; $post_id = wp_insert_post($postdata, true); // UPDATE THE META if (intval($post_id)) { update_post_meta($post_id, '_bbc_log_type', 'contact_form'); update_post_meta($post_id, '_bbc_log_code', $log_code); } } } // PREP THE FORM FOR MAIL NOTIFICATIONS // SENDER INFORMATION // EMAIL COMES FROM $_POST['email'] $_POST['name'] = $name; if (false != $form) { if (!empty($form['notify_from'])) { $_POST['email'] = $form['notify_from']; } if (!empty($form['notify_from_name'])) { $_POST['name'] = $form['notify_from_name']; } } // NEED AN OPTION FOR MAIL NOTIFICATIONS // IF THIS IS GOING TO ANOTHER SITE USER... $to_email = array(); if (isset($uid)) { $recipient = get_user_by('id', $uid); $to_email[] = $recipient->user_email; $form_notifications = true; } else { if (false != $form) { $to_email = explode(',', $form['notify']); foreach ($to_email as $tek => $tev) { $to_email[$tek] = trim($tev); } } } $to_email = apply_filters('bbconnectpanels_contact_form_recipients', $to_email, $sender, $log_code); // IF WE'RE EMAILING, DO IT NOW if (!empty($to_email)) { $admin_msg = ''; $admin_msg .= sprintf(__('Origin: %1$s', 'bbconnect'), get_option('blogname')) . "\r\n"; if (!empty($contact_title)) { $admin_msg .= sprintf(__('Form: %1$s', 'bbconnect'), $contact_title) . "\r\n"; } $admin_msg .= sprintf(__('Sender: %1$s <%2$s>', 'bbconnect'), $name, $email) . "\r\n"; $admin_msg .= "\r\n"; $admin_msg .= $message; // IF WE'RE MAILING, ADD THE FILTERS add_filter('wp_mail_from', 'bbconnectpanels_get_from_email', 20); add_filter('wp_mail_from_name', 'bbconnectpanels_get_from_name', 20); // SEND THE MAIL if (false != $form_notifications) { wp_mail($to_email, $subject, $admin_msg); } // COPY THEM BUT NOT ON THE SAME EMAIL if ('true' == $cc_me) { $_POST['email'] = get_option('admin_email'); $_POST['name'] = get_option('blogname'); $user_msg = sprintf(__('You asked to be copied on the message below that you sent via the website: %1$s', 'bbconnect'), get_option('blogname')) . "\r\n"; $user_msg .= "\r\n"; $user_msg .= $message; wp_mail($email, 'Re: ' . $subject, $user_msg); } remove_filter('wp_mail_from', 'bbconnectpanels_get_from_email', 20); remove_filter('wp_mail_from_name', 'bbconnectpanels_get_from_name', 20); } // THANK YOU $thankyou = __('Thank you.', 'bbconnect'); if (isset($_POST['bbc_form'])) { $bbc_form = get_option('_bbconnect_form_' . $_POST['bbc_form']); $thankyou = bbconnect_scrub('bbconnect_esc_html', $bbc_form['confirm']); } $signcount = 2 + round(str_word_count(strip_tags($thankyou)) / 4); // GIVE PREFERENCE TO THE USER'S PRIOR ACTION // LET PLUGINS MODIFY THE SUCCESS ACTION do_action('bbconnect_after_contact', $sender, $log_code); // SET A FILTER FOR REDIRECTION $wloc = apply_filters('bbconnect_contact_redirect', '', $sender, $log_code); // REFRESH THE BROWSER ?> <p id="tschuss"><?php echo wpautop($thankyou); ?> </p> <script type="text/javascript"> setTimeout(function() { jQuery('#tschuss').fadeOut('slow'); jQuery('#bbconnectpanel').removeClass(); <?php if ('true' != get_option('bbconnectpanels_embed')) { ?> jQuery('#bbconnectpanel').slideToggle('fast'); <?php if (!empty($wloc)) { echo "window.location = '" . $wloc . "';"; } } else { if (!empty($wloc)) { echo "window.location.href = '" . $wloc . "';"; } } ?> }, <?php echo $signcount * 1000; ?> ); </script> <?php die; } else { // THE DEFAULT FIELDS $form_fields = bbconnect_form_api_fields(); // USER-DEFINED REPLACEMENT if (isset($_POST['bbc_form'])) { $contact_arr = get_option('_bbconnect_form_' . $_POST['bbc_form']); } // THE DEFAULT CONTACT FORM if (!isset($contact_arr) || empty($contact_arr)) { $contact_arr = get_option('_bbconnect_form_contact_form'); } // THE SAFETY CONTACT FORM if (!isset($contact_arr) || empty($contact_arr)) { $contact_arr = array('column_1' => array('first_name', 'last_name', 'email'), 'column_2' => array('_bbc_form_subject', '_bbc_form_message', '_bbc_form_cc')); } // DOUBLE-CHECK THAT WE HAVE AN EMAIL AND A MESSAGE $c_email = false; $c_msg = false; foreach ($contact_arr as $ckey => $cval) { if (is_array($cval)) { if (in_array('email', $cval)) { $c_email = true; } if (in_array('_bbc_form_message', $cval)) { $c_msg = true; } } } // ALWAYS ENSURE EMAIL IS SET if (false == $c_email) { array_push($contact_arr['column_1'], 'email'); } //if ( false == $c_msg ) //array_push( $contact_arr['column_2'], '_bbc_form_message' ); if (isset($contact_arr['msg']) && !empty($contact_arr['msg'])) { echo '<div id="form-msg">'; echo wpautop(stripslashes($contact_arr['msg'])); echo '</div>'; } // LET'S SEE IF THEY WANT ONE OR TWO COLUMNS if (empty($contact_arr['column_2'])) { $colone = ' class="column-holder full"'; $coltwo = false; } else { $colone = ' id="column_1_holder"'; $coltwo = ' id="column_2_holder"'; } ?> <form class="bbconnectpanels-form" enctype="multipart/form-data" action="" method="POST"> <div<?php echo $colone; ?> > <ul> <?php if (isset($contact_arr['column_1'])) { foreach ($contact_arr['column_1'] as $key => $val) { if (isset($form_fields[$val])) { $meta = $form_fields[$val]; $args['type'] = 'post'; } else { $meta = bbconnect_get_option($val); } $args['meta'] = $meta; $args['action'] = 'register'; if (is_user_logged_in()) { global $current_user; $args['id'] = $current_user->ID; } bbconnect_get_field($args); } } ?> </ul> </div> <?php if (false != $coltwo) { ?> <div<?php echo $coltwo; ?> > <ul> <?php if (isset($contact_arr['column_2'])) { foreach ($contact_arr['column_2'] as $key => $val) { if (isset($form_fields[$val])) { $meta = $form_fields[$val]; $args['type'] = 'post'; } else { $meta = bbconnect_get_option($val); } $args['meta'] = $meta; $args['action'] = 'register'; if (is_user_logged_in()) { global $current_user; $args['id'] = $current_user->ID; } bbconnect_get_field($args); } } ?> </ul> </div> <?php } ?> <div class="continue"> <input type="hidden" name="rel" value="contact" /> <?php if (isset($_POST['uid'])) { echo '<input type="hidden" name="uid" value="' . $_POST['uid'] . '" />'; } if (isset($_POST['bbc_form'])) { echo '<input type="hidden" name="bbc_form" value="' . $_POST['bbc_form'] . '" />'; } ?> <input type="submit" name="_bbconnect[submission]" value="<?php _e('Submit', 'bbconnect'); ?> " class="button" /> <?php echo bbconnectpanels_build_panel_link(array('links' => apply_filters('bbconnect_contact_links', array()))); ?> </div> </form> <?php } break; // EXTEND THE PANEL SYSTEM // EXTEND THE PANEL SYSTEM default: do_action('bbconnectpanels_switch', $rel); break; } if ('true' == get_option('bbconnectpanels_embed')) { echo '<div id="close-bot"></div>'; } else { ?> <div id="close-top"><?php bbconnectpanels_panel_link('action=close'); ?> </div> <div id="close-bot"><?php bbconnectpanels_panel_link('action=close'); ?> </div> <script type="text/javascript"> </script> <?php } if ('true' == get_option('bbconnectpanels_google_analytics')) { ?> <script type="text/javascript"> // "_trackEvent" is the pageview event, _gaq.push(['_trackPageview', '/<?php echo $rel; ?> ']); </script> <?php } // ALL DONE! die; }
function bbconnect_get_field($args = '') { // SET THE DEFAULTS TO BE OVERRIDDEN AS DESIRED $defaults = array('meta' => false, 'id' => false, 'type' => 'user', 'action' => '', 'post_val' => false, 'bbconnect_cap' => '', 'required' => false, 'swap_name' => array(), 'swap_id' => false, 'help' => false, 'return' => false, 'readonly' => false, 'flag' => false); // PARSE THE INCOMING ARGS $args = wp_parse_args($args, $defaults); // EXTRACT THE VARIABLES extract($args, EXTR_SKIP); // EXIT GRACEFULLY IF NEED BE if (false == $meta) { return false; } // SET THE BASE AND WRAPPER VALUES $key = $meta['meta_key']; $wrap = true; $label = $meta['name']; $label_wrap = true; $lock = false; $pmv = ''; $pmt = ''; $public = $meta['options']['public']; $admin_only = false; $mayberequired = false; $asterix = false; // LET HELP HAVE AN OVERRIDE if (false == $help && !empty($meta['help'])) { $help = $meta['help']; } // LET READONLY HAVE AN OVERRIDE if (isset($meta['options']['readonly']) && false != $meta['options']['readonly']) { $readonly = true; } // SPECIAL CASE FOR CHECKBOX if ('checkbox' == $meta['options']['field_type']) { $label = false; } // SET THE FIELD ARRAY $field = array(); // SPECIAL CASES FOR TITLES, SECTIONS AND GROUPS $reserved_types = array('title', 'section', 'group'); // SPECIAL CASES FOR TITLES, SECTIONS AND GROUPS $reserved_source = array('email', 'user_login', 'display_name'); // IF WE HAVE POST VALS, GO AHEAD AND SANITIZE IT, PROBABLY AGAIN if (false != $post_val) { $post_val = bbconnect_scrub('bbconnect_sanitize', $post_val); } // MODIFY VALUES ON CONTEXT/TYPE $field['type'] = $type; if ('option' === $type) { $field_pre_name = '_bbc_option'; if ('textarea' == $meta['options']['field_type']) { $field['value'] = bbconnect_scrub('bbconnect_esc_html', get_option($key)); } else { $field['value'] = bbconnect_scrub('bbconnect_esc_attr', get_option($key)); } if (false != $post_val) { $field['value'] = $post_val; } $public = false; } else { if ('post' === $type) { $field_pre_name = '_bbc_post'; if ('textarea' == $meta['options']['field_type']) { $field['value'] = bbconnect_scrub('bbconnect_esc_html', get_post_meta($id, $key, true)); } else { $field['value'] = bbconnect_scrub('bbconnect_esc_attr', get_post_meta($id, $key, true)); } if (false != $post_val) { $field['value'] = bbconnect_scrub('bbconnect_esc_attr', $post_val); } $public = false; } else { if ('search' === $type) { $field_pre_name = 'search'; $field['value'] = $post_val; $public = false; } else { if ('user' === $type) { $field_pre_name = 'bbconnect_user_meta'; if (false != $post_val) { $field['value'] = $post_val; } else { if ('wpr' == $meta['source']) { $field['value'] = get_userdata($id); } else { if ('wp' == $meta['source'] || 'user' == $meta['source']) { $field['value'] = bbconnect_scrub('bbconnect_esc_attr', get_user_meta($id, $key, true)); } else { if ('textarea' == $meta['options']['field_type']) { $field['value'] = bbconnect_scrub('bbconnect_esc_html', get_user_meta($id, 'bbconnect_' . $key, true)); } else { $field['value'] = bbconnect_scrub('bbconnect_esc_attr', get_user_meta($id, 'bbconnect_' . $key, true)); } } } } // ADDITIONAL PROCESSING FOR PUBLIC USER FIELDS // BY DEFAULT, PUBLIC DATA IS SET TO FALSE AND HAS TO BE OVERRIDDEN BY AN ADMIN $user_opt = bbconnect_scrub('esc_attr', get_user_meta($id, 'bbconnect_bbc_public', true)); if (false != $public) { // SOMEONE HAS UPDATED THIS PROFILE AND SET A PREFERENCE if (is_array($user_opt) && isset($user_opt[$key])) { if ('true' != $user_opt[$key]) { $pmt = 'off'; $pmv = 'false'; } else { $pmt = 'on'; $pmv = 'true'; } // IF A USER HAS NOT DECIDED YET ON THEIR PUBLIC STATUS... } else { if (!is_array($user_opt) || !isset($user_opt[$key])) { // IF AN ADMIN HAS OPTED TO FORCE DISPLAY ON UNDECIDED USERS $admin_opt = get_option('_bbconnect_public'); if ('true' != $admin_opt) { $pmt = 'off'; $pmv = 'false'; } else { $pmt = 'on'; $pmv = 'true'; } } } } } else { return false; } } } } $field['cid'] = $id; $field['display'] = ''; $field_swap_name = array(); $field_name = '[' . $key . ']'; $field_pos_name = array(); // MODIFY VALUES ON APPEND/CONTEXT // VIEW IS FOR PUBLIC-FACING DATA -- CURRENTLY ONLY CORRESPONDS TO USERS if ('-view' == $action || 'view' == $action) { // EXIT OUT IF AN ADMIN HAS NOT SPECIFIED THIS AS A PUBLIC FIELD if (empty($public) && !in_array($meta['options']['field_type'], $reserved_types)) { return false; } // FOR USERS -- EXIT OUT IF NOT A USER FIELD if (!isset($id)) { return false; } // IF THIS IS A CONTAINER, LET IT GO if (in_array($meta['options']['field_type'], $reserved_types)) { // IF A USER HAS DECIDED ON THEIR PUBLIC STATUS AND SAID NO } else { // FOR USERS -- EXIT OUT IF NOT A USER FIELD if (!isset($user_opt)) { return false; } // SOMEONE HAS UPDATED THIS PROFILE AND SET A PREFERENCE if (is_array($user_opt) && isset($user_opt[$key])) { if ('true' != $user_opt[$key]) { return false; } // IF A USER HAS NOT DECIDED YET ON THEIR PUBLIC STATUS... } else { if (!is_array($user_opt) || !isset($user_opt[$key])) { // IF AN ADMIN HAS OPTED TO FORCE DISPLAY ON UNDECIDED USERS $admin_opt = get_option('_bbconnect_public'); if ('true' != $admin_opt || in_array($meta['options']['field_type'], $reserved_types)) { return false; } } } } $field['action'] = '-view'; $label_wrap = false; if ('true' == get_option('bbconnectpanels_public_labels')) { $label = '<span class="bbconnectpanels-profile-label">' . $label . '</span>'; } else { $label = false; } $help = false; $public = false; // A BIT WEIRD, BUT STILL, WE DON'T WANT TO SHOW THE TOGGLE } else { if ('-bulk-edit' == $action || 'bulk-edit' == $action) { // FOR PLUGINS LET'S REMOVE THIS if ('plugin' == $meta['options']['field_type']) { return false; } // SPECIAL CASE FOR CHECKBOX if ('checkbox' == $meta['options']['field_type']) { $label = $meta['name']; } // SPECIAL CASE FOR UNIQUE USER IDENTIFIERS if (in_array($meta['meta_key'], $reserved_source)) { return false; } $field['action'] = '-bulk-edit'; $field['display'] = ' disabled="disabled"'; $lock = true; $public = false; } else { if ('-search' == $action || 'search' == $action) { // FOR PLUGINS LET'S REMOVE THIS if ('plugin' == $meta['options']['field_type']) { return false; } $field['action'] = '-search'; $field_name = ''; $field_pos_name = array('[query]'); $wrap = false; $help = false; $label_wrap = false; $label = false; } else { if ('register' == $action) { // FOR PLUGINS LET'S REMOVE THIS if ('plugin' == $meta['options']['field_type']) { return false; } $field['action'] = 'register'; $public = false; } else { if ('-edit' == $action || 'edit' == $action) { $field['action'] = '-edit'; if (false != $readonly) { $field['action'] = '-view'; } // FOR PLUGINS LET'S REMOVE THIS if ('user' == $type && false != $meta['options']['admin'] && false == $meta['options']['user']) { $admin_only = true; } } else { if ('inline' == $action) { $field['action'] = '-edit'; $label_wrap = false; $label = false; $help = false; $public = false; // A BIT WEIRD, BUT STILL, WE DON'T WANT TO SHOW THE TOGGLE } else { return false; } } } } } } // ALLOW FOR REDIRECTED PROCESSING OF FIELDS if (is_array($swap_name) && !empty($swap_name)) { foreach ($swap_name as $name) { $field_swap_name[] = '[' . $name . ']'; } } $field['name'] = $field_pre_name . implode('', $field_swap_name) . $field_name . implode('', $field_pos_name); // ALLOW FOR REPLACEMENT IDS if (false != $swap_id) { $field['id'] = $swap_id; $field['title'] = $swap_id; } else { $field['id'] = $key; $field['title'] = $key; } $field['capabilities'] = $bbconnect_cap; if (false != $required || !empty($meta['options']['req'])) { if ('bbconnect' == $meta['source'] && false !== strpos($meta['meta_key'], 'address_state_')) { $required = ' semi-required'; $asterix = '<span class="asterix-required" style="display:none;">*</span>'; } else { $required = ' required'; $asterix = '<span class="asterix-required">*</span>'; } } if (false != $required && 'checkbox' == $meta['options']['field_type'] && false == $label) { $mayberequired = __('Required', 'bbconnect'); } // ALLOW FOR ADDITIONAL CLASSES if (isset($meta['options']['class'])) { if (is_array($meta['options']['class'])) { $field['class'] = ' ' . implode(' ', $meta['options']['class']); } else { $field['class'] = ' ' . $meta['options']['class']; } } else { $field['class'] = ''; } // SET THE WILDCARD IF APPLICABLE if (false != $flag) { $field['flag'] = $flag; } // OVERRIDE DISPALY DEFAULTS FOR RESERVES if (in_array($meta['options']['field_type'], $reserved_types)) { $label = false; $label_wrap = false; $lock = false; $help = false; $public = false; } if ($admin_only == true && current_user_can('manage_padlock_fields') || $admin_only == false) { if ($wrap) { echo '<li class="meta-item">'; } if ($label_wrap) { echo '<span class="bbconnect-label' . $required . '">' . $mayberequired; } if ($lock) { echo '<a class="rui off" title="' . $key . $action . '">'; } if ($label) { echo stripslashes($label); } if ($lock) { echo '</a>'; } if ($label_wrap) { echo $asterix; } if ($help || $public || $admin_only) { if ($label) { echo '<br />'; } } if ($help && 'checkbox' != $meta['options']['field_type']) { echo '<a class="help" title="' . $help . '"> </a>'; } if ($admin_only) { echo '<a class="icon-admin" title="' . __('Only visible to admins.', 'bbconnect') . '"> </a>'; } if ($public) { echo '<a class="pmt ' . $pmt . '" rel="' . __('Public or Private', 'bbconnect') . '" title="public_' . $key . '"><input type="hidden" id="public_' . $key . '" name="' . $field_pre_name . '[bbc_public][' . $key . ']" value="' . $pmv . '" /> </a>'; } if ($label_wrap) { echo '</span>'; } if ($label_wrap) { echo '<span class="bbconnect-field">'; } // TEST FOR A DEFAULT VALUE if ($field["value"] == '' || $field["value"] == NULL) { $field["value"] = bbconnect_field_defaults($meta["meta_key"], $field["value"]); } bbconnect_field($meta, $field); if ($help && 'checkbox' == $meta['options']['field_type']) { echo '<a class="help" title="' . $help . '"> </a>'; } if ($label_wrap) { echo '</span>'; } if ($wrap) { echo '</li>'; } } }
function bbconnect_show_form($args = null) { // SET THE DEFAULTS TO BE OVERRIDDEN AS DESIRED $defaults = array('pid' => false, 'show_msg' => true, 'show_notify' => true, 'show_links' => true, 'column_1' => array(), 'column_2' => array()); // PARSE THE INCOMING ARGS $args = wp_parse_args($args, $defaults); // EXTRACT THE VARIABLES extract($args, EXTR_SKIP); $option = ''; $delete = __('Delete this field', 'bbconnect'); $undo = __('Undo', 'bbconnect'); if (false == $pid) { return false; } $option = '_bbconnect_form_' . $pid; $form = get_option($option); $forms = get_option('_bbconnect_user_forms'); $form_name = $forms[$pid]; ?> <div id="form-data"> <?php if (false != $show_msg) { ?> <div class="options-field"> <h3><?php _e('Messages', 'bbconnect'); ?> </h3> <p><?php printf(__('Add a %1$sgreeting%2$s or instructions to the form.', 'bbconnect'), '<strong>', '</strong>'); ?> </p> <textarea style="height: 100px;" name="_bbc_option[<?php echo $option; ?> ][msg]"><?php if (isset($form['msg'])) { echo bbconnect_scrub('bbconnect_esc_html', $form['msg']); } ?> </textarea> <p><?php printf(__('Add a %1$sthank you%2$s or instructions to the form.', 'bbconnect'), '<strong>', '</strong>'); ?> </p> <textarea style="height: 100px;" name="_bbc_option[<?php echo $option; ?> ][confirm]"><?php if (isset($form['confirm'])) { echo bbconnect_scrub('bbconnect_esc_html', $form['confirm']); } ?> </textarea> </div> <?php } ?> <?php if (false != $show_notify) { $fields = bbconnect_form_notify($form_name); echo '<div class="options-field">'; echo '<h3>' . __('Notifications', 'bbconnect') . '</h3>'; echo '<ul>'; foreach ($fields as $field) { $args['meta'] = $field['meta']; $args['type'] = 'option'; $args['action'] = 'edit'; $args['swap_name'] = array($option); if (is_array($form) && isset($form[$field['meta']['meta_key']])) { $args['post_val'] = $form[$field['meta']['meta_key']]; } else { $args['post_val'] = false; } bbconnect_get_field($args); } echo '</ul>'; echo '</div>'; } /* ?> <div class="options-field"> <h3><?php _e( 'Notifications', 'bbconnect' ); ?></h3> <p><?php printf( __( 'Decide which email addresses should be %1$snotified%2$s after the form is submitted. Multiple emails should be separated by commas.', 'bbconnect' ), '<strong>', '</strong>' ); ?></p> <p><input type="text" class="regular-text" name="_bbc_option[<?php echo $option; ?>][notify]" value="<?php if ( isset( $form['notify'] ) ) { echo bbconnect_scrub( 'bbconnect_esc_html', $form['notify'] ); } else { echo get_option( 'admin_email' ); } ?>" /></p> <p><?php printf( __( 'Set the default %1$ssubject%2$s', 'bbconnect' ), '<strong>', '</strong>.' ); ?></p> <p><input type="text" class="regular-text" name="_bbc_option[<?php echo $option; ?>][subject]" value="<?php if ( isset( $form['subject'] ) ) { echo bbconnect_scrub( 'bbconnect_esc_html', $form['subject'] ); } else { printf( __( '%1$s Submission', 'bbconnect' ), $form_name ); } ?>" /></p> </div> <?php } */ ?> <div class="options-field"> <h3><?php _e('Add fields', 'bbconnect'); ?> </h3> <?php bbconnect_user_data_select(array('id' => 'form-field-select', 's_context' => 'form_api', 'address_unlock' => true)); ?> <a class="button" id="add-form-field" rel="form-field-select"><?php _e('+ Add Field', 'bbconnect'); ?> </a> </div> <div class="options-field"> <div class="inside t-panel" style="display: block;"> <?php // IF IT'S A SYSTEM-GENERATED FORM if ('bbconnect' == $form['source'] || false !== strpos($pid, 'default')) { echo '<input type="hidden" name="_bbc_option[' . $option . '][source]" value="bbconnect" />'; } else { echo '<input type="hidden" name="_bbc_option[' . $option . '][source]" value="user" /></div>'; } // PULL THE SPECIAL FORM FIELDS $form_fields = bbconnect_form_api_fields(); ?> <div id="column_1_holder"> <ul id="column_1" title="<?php echo $option; ?> " class="forms-sortable connected-forms-sortable primary-list column"> <?php // LOOP THROUGH ALL OF THE FIELDS REGISTERED WITH THE SYSTEM // RETRIEVE THEIR VALUES FOR DISPLAY // IF IT'S A GROUP, MAKE A SUBLIST // WE'LL USE DRAG & DROP FOR SORTING if (isset($form['column_1']) && !empty($form['column_1'])) { $column_1 = $form['column_1']; } foreach ($column_1 as $key => $value) { if (isset($form_fields[$value])) { $val_title = esc_attr($form_fields[$value]['name']); } else { $val_arr = bbconnect_get_option($value); $val_title = esc_attr($val_arr['name']); } ?> <li> <div class="t-wrapper"> <div class="t-title"> <span><?php echo $val_title; ?> </span> <span class="right"> <a class="delete" rel="<?php echo $key; ?> " title="<?php echo $delete; ?> "> </a> <a class="undo" rel="<?php echo $key; ?> " title="<?php echo $undo; ?> "> </a> </span> <input class="column-input" type="hidden" id="<?php echo $key; ?> " name="_bbc_option[<?php echo $option; ?> ][column_1][]" value="<?php echo $value; ?> " /> </div> </div> </li> <?php } ?> </ul> </div> <div id="column_2_holder"> <ul id="column_2" title="<?php echo $option; ?> " class="forms-sortable connected-forms-sortable primary-list column"> <?php if (isset($form['column_2']) && !empty($form['column_2'])) { $column_2 = $form['column_2']; } foreach ($column_2 as $key => $value) { if (isset($form_fields[$value])) { $val_title = esc_attr($form_fields[$value]['name']); } else { $val_arr = bbconnect_get_option($value); $val_title = esc_attr($val_arr['name']); } ?> <li> <div class="t-wrapper"> <div class="t-title"> <span><?php echo $val_title; ?> </span> <span class="right"> <a class="delete" rel="<?php echo $key; ?> " title="<?php echo $delete; ?> "> </a> <a class="undo" rel="<?php echo $key; ?> " title="<?php echo undo; ?> "> </a> </span> <input class="column-input" type="hidden" id="<?php echo $key; ?> " name="_bbc_option[<?php echo $option; ?> ][column_2][]" value="<?php echo $value; ?> " /> </div> </div> </li> <?php } ?> </ul> </div> </div> </div> <?php if (false != $show_links) { ?> <div class="options-field"> <h3><?php _e('Display this form', 'bbconnect'); ?> </h3> <?php echo '<p>' . sprintf(__('Use the link, shortcode or menu options below to link to this form. You can replace %1$s with your own text.', 'bbconnect'), '<strong>' . $form_name . '</strong>') . '</p>'; echo '<p class="code-help"><strong>' . __('Embed Shortcode (embeds the form. make sure you have turned on form embedding on the panels tab)', 'bbconnect') . '</strong><br /><textarea readonly class="fin-btn">[bbconnectf id="' . $pid . '"]</textarea></p>'; echo '<p class="code-help"><strong>' . __('Link Shortcode (generates a link)', 'bbconnect') . '</strong><br /><textarea readonly class="fin-btn">[ppf_link id="' . $pid . '" text="' . $form_name . '"]</textarea></p>'; echo '<p class="code-help"><strong>' . __('Local Link', 'bbconnect') . '</strong><br /><textarea readonly class="fin-btn">' . htmlentities('<a class="bbconnectpanels-toggle" title="' . $pid . '" href="' . home_url() . '/bbconnect/?rel=contact&bbc_form=' . $pid . '">') . $form_name . htmlentities('</a>') . '</textarea></p>'; $bbconnectref = urlencode(serialize(array('rel' => 'contact', 'bbc_form' => $pid))); echo '<p class="code-help"><strong>' . __('Direct Link', 'bbconnect') . '</strong><br /><textarea readonly class="fin-btn">' . home_url() . '?bbconnectref=' . $bbconnectref . '</textarea></p>'; bbconnect_add_to_nav_menu($form_name, $pid, '/bbconnect/?rel=contact&bbc_form=' . $pid); ?> </div> <?php } ?> <?php // IF IT'S A SYSTEM-GENERATED FORM if (isset($form['source']) && 'bbconnect' != $form['source']) { if (false === strpos($pid, 'default')) { ?> <div class="options-field"> <h3><?php _e('Delete this form', 'bbconnect'); ?> </h3> <div class="tright inside"><a class="button" id="delete-form" rel="<?php echo $pid; ?> "><?php _e('Delete This Form', 'bbconnect'); ?> </a></div> </div> <?php } } ?> <?php do_action('bbconnect_form_ext_msg', $pid); ?> </div> <script type="text/javascript"> jQuery.noConflict(); jQuery(document).ready(function(){ jQuery('#wpfooter').hide(); jQuery('#show-form').on('click', '.delete', function(){ jQuery(this).closest('li').remove(); }); // SORTING FUNCTION FOR LISTS jQuery(function() { jQuery('.forms-sortable').sortable({ connectWith: '.connected-forms-sortable', appendTo: document.body, placeholder: 'pp-ui-highlight', forcePlaceholderSize: true, forceHelperSize: true, update: function(event, ui) { var cid = jQuery(this).attr('id'); var oid = jQuery(this).attr('title'); var fid = ui.item.attr('id'); ui.item.find('.column-input').attr('name','_bbc_option['+oid+']['+cid+'][]'); } }).disableSelection(); }); jQuery('#add-form-field').click(function(){ //var cref = jQuery(this).previous('select'); var fid = jQuery('#show-form select').val(); var fna = jQuery('#show-form select option:selected').text(); jQuery('<li><div class="t-wrapper"><div class="t-title">'+fna+'<span></span><span class="right"><a class="delete" rel="'+fid+'" title="<?php echo $delete; ?> "> </a><a class="undo" rel="'+fid+'" title="<?php echo $undo; ?> "> </a></span><input class="column-input" type="hidden" id="'+fid+'" name="_bbc_option[<?php echo $option; ?> ][column_1][]" value="'+fid+'" /></div></div></li>').appendTo('#column_1'); return false; }); }); </script> <?php }