| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739 |
- <?php if ( ! defined( 'ABSPATH' ) ) exit;
- add_action( 'wp_ajax_ninja_forms_save_metabox_state', 'ninja_forms_save_metabox_state' );
- function ninja_forms_save_metabox_state(){
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $plugin_settings = nf_get_settings();
- $page = esc_html( $_REQUEST['page'] );
- $tab = esc_html( $_REQUEST['tab'] );
- $slug = esc_html( $_REQUEST['slug'] );
- $metabox_state = esc_html( $_REQUEST['metabox_state'] );
- $plugin_settings['metabox_state'][$page][$tab][$slug] = $metabox_state;
- update_option( 'ninja_forms_settings', $plugin_settings );
- die();
- }
- /**
- * When a field settings metabox is expanded, return a JSON element containing the field settings HTML
- *
- * @since 2.9
- * @return false;
- */
- function nf_output_field_settings_html() {
- global $nf_rte_editors;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- // Bail if we don't have proper permissions
- if ( ! current_user_can( apply_filters( 'nf_new_field_capabilities', 'manage_options' ) ) )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $field_id = esc_html( $_REQUEST['field_id'] );
- $data = isset ( $_REQUEST['data'] ) ? json_decode( stripslashes( $_REQUEST['data'] ), true ) : array();
- $field = ninja_forms_get_field_by_id( $field_id );
- $field_data = $field['data'];
- $data = wp_parse_args( $data, $field_data );
- nf_output_registered_field_settings( $field_id, $data );
- die();
- }
- add_action( 'wp_ajax_nf_output_field_settings_html', 'nf_output_field_settings_html' );
- /**
- * Save our admin fields page.
- *
- * @since 2.9
- * @return false;
- */
- function nf_admin_save_builder() {
- global $ninja_forms_fields, $wpdb;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- // Bail if we don't have proper permissions
- if ( ! current_user_can( apply_filters( 'nf_new_field_capabilities', 'manage_options' ) ) )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $field_data = json_decode( stripslashes( $_REQUEST['field_data'] ), true );
- $form_id = esc_html( $_REQUEST['form_id'] );
- $form_title = stripslashes( $_REQUEST['form_title'] );
- $field_order = json_decode( strip_tags( stripslashes( $_REQUEST['field_order'] ) ), true );
- if ( is_array ( $field_order ) ) {
- $order_array = array();
- $x = 0;
- foreach ( $field_order as $id ) {
- $id = str_replace( 'ninja_forms_field_', '', $id );
- $order_array[ $id ] = $x;
- $x++;
- }
- }
- $tmp_array = array();
- foreach ( $field_data as $field ) {
- $field_id = $field['id'];
- unset( $field['id'] );
- unset( $field['metabox_state'] );
- $tmp_array[ $field_id ] = $field;
- }
- $field_data = $tmp_array;
- if ( isset ( $ninja_forms_fields ) && is_array( $ninja_forms_fields ) ) {
- foreach ( $ninja_forms_fields as $slug => $field ){
- if ( $field['save_function'] != '') {
- $save_function = $field['save_function'];
- $arguments['form_id'] = $form_id;
- $arguments['data'] = $field_data;
- $field_data = call_user_func_array( $save_function, $arguments );
- }
- }
- }
- if( $form_id != '' && $form_id != 0 && $form_id != 'new' ){
- foreach ( $field_data as $field_id => $vals ) {
- $field_order = isset( $order_array[$field_id] ) ? $order_array[$field_id] : '';
- $field_row = ninja_forms_get_field_by_id( $field_id );
- $data = $field_row['data'];
- foreach( $vals as $k => $v ){
- $data[$k] = $v;
- }
- $data_array = array('data' => serialize( $data ), 'order' => $field_order);
- $wpdb->update( NINJA_FORMS_FIELDS_TABLE_NAME, $data_array, array( 'id' => $field_id ));
- }
- $date_updated = date( 'Y-m-d H:i:s', strtotime ( 'now' ) );
- Ninja_Forms()->form( $form_id )->update_setting( 'form_title', $form_title );
- Ninja_Forms()->form( $form_id )->update_setting( 'date_updated', $date_updated );
- Ninja_Forms()->form( $form_id )->update_setting( 'status', '' );
- }
- // Dump our current form transient.
- delete_transient( 'nf_form_' . $form_id );
- die();
- }
- add_action( 'wp_ajax_nf_admin_save_builder', 'nf_admin_save_builder' );
- add_action('wp_ajax_ninja_forms_new_field', 'ninja_forms_new_field');
- function ninja_forms_new_field(){
- global $wpdb, $ninja_forms_fields;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- // Bail if we don't have proper permissions
- if ( ! current_user_can( apply_filters( 'nf_new_field_capabilities', 'manage_options' ) ) )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $type = esc_html( $_REQUEST['type'] );
- $form_id = absint( $_REQUEST['form_id'] );
- if( isset( $ninja_forms_fields[$type]['name'] ) ){
- $type_name = $ninja_forms_fields[$type]['name'];
- }else{
- $type_name = '';
- }
- if( isset( $ninja_forms_fields[$type]['default_label'] ) ){
- $default_label = $ninja_forms_fields[$type]['default_label'];
- }else{
- $default_label = '';
- }
- if( isset( $ninja_forms_fields[$type]['edit_options'] ) ){
- $edit_options = $ninja_forms_fields[$type]['edit_options'];
- }else{
- $edit_options = '';
- }
- if ( $default_label != '' ) {
- $label = $default_label;
- } else {
- $label = $type_name;
- }
- $input_limit_msg = __( 'character(s) left', 'ninja-forms' );
- $data = serialize( array( 'label' => $label, 'input_limit_msg' => $input_limit_msg ) );
- $order = 999;
- if($form_id != 0 && $form_id != ''){
- $args = array(
- 'type' => $type,
- 'data' => $data,
- );
- $new_id = ninja_forms_insert_field( $form_id, $args );
- $new_html = ninja_forms_return_echo('ninja_forms_edit_field', $new_id, true );
- header("Content-type: application/json");
- $array = array ('new_id' => $new_id, 'new_type' => $type_name, 'new_html' => $new_html, 'edit_options' => $edit_options, 'new_type_slug' => $type );
- echo json_encode($array);
- die();
- }
- }
- add_action('wp_ajax_ninja_forms_remove_field', 'ninja_forms_remove_field');
- function ninja_forms_remove_field(){
- global $wpdb;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- // Bail if we don't have proper permissions
- if ( ! current_user_can( apply_filters( 'nf_delete_field_capabilities', 'manage_options' ) ) )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $field_id = absint( $_REQUEST['field_id'] );
- $form_id = absint( $_REQUEST['form_id'] );
- $wpdb->query($wpdb->prepare("DELETE FROM ".NINJA_FORMS_FIELDS_TABLE_NAME." WHERE id = %d", $field_id));
- Ninja_Forms()->form( $form_id )->dump_cache();
- die();
- }
- add_action('wp_ajax_ninja_forms_add_list_option', 'ninja_forms_add_list_options');
- function ninja_forms_add_list_options(){
- global $wpdb;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- // Bail if we don't have proper permissions
- if ( ! current_user_can( apply_filters( 'nf_new_field_capabilities', 'manage_options' ) ) )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
-
- $field_id = absint( $_REQUEST['field_id'] );
- $x = absint( $_REQUEST['x'] );
- $hidden_value = esc_html( $_REQUEST['hidden_value'] );
- ninja_forms_field_list_option_output($field_id, $x, '', $hidden_value);
- die();
- }
- function ninja_forms_insert_fav(){
- global $wpdb, $ninja_forms_fields;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $fav_id = absint( $_REQUEST['field_id'] );
- $form_id = absint( $_REQUEST['form_id'] );
- $fav_row = ninja_forms_get_fav_by_id($fav_id);
- $data = serialize($fav_row['data']);
- $type = $fav_row['type'];
- $type_name = $ninja_forms_fields[$type]['name'];
- if($form_id != 0 && $form_id != ''){
- $args = array(
- 'type' => $type,
- 'data' => $data,
- 'fav_id' => $fav_id,
- );
- $new_id = ninja_forms_insert_field( $form_id, $args );
- $new_html = ninja_forms_return_echo('ninja_forms_edit_field', $new_id, true );
- header("Content-type: application/json");
- $array = array ('new_id' => $new_id, 'new_type' => $type_name, 'new_html' => $new_html);
- echo json_encode($array);
- }
- die();
- }
- add_action('wp_ajax_ninja_forms_insert_fav', 'ninja_forms_insert_fav');
- function ninja_forms_insert_def(){
- global $wpdb, $ninja_forms_fields;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $def_id = absint( $_REQUEST['field_id'] );
- $form_id = absint( $_REQUEST['form_id'] );
- $def_row = ninja_forms_get_def_by_id($def_id);
- $data = serialize($def_row['data']);
- $type = $def_row['type'];
- $type_name = $ninja_forms_fields[$type]['name'];
- if($form_id != 0 && $form_id != ''){
- $args = array(
- 'type' => $type,
- 'data' => $data,
- 'def_id' => $def_id,
- );
- $new_id = ninja_forms_insert_field( $form_id, $args );
- $new_html = ninja_forms_return_echo('ninja_forms_edit_field', $new_id, true );
- header("Content-type: application/json");
- $array = array ('new_id' => $new_id, 'new_type' => $type_name, 'new_html' => $new_html);
- echo json_encode($array);
- }
- die();
- }
- add_action('wp_ajax_ninja_forms_insert_def', 'ninja_forms_insert_def');
- add_action('wp_ajax_ninja_forms_add_fav', 'ninja_forms_add_fav');
- function ninja_forms_add_fav(){
- global $wpdb;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $field_data = $_REQUEST['field_data'];
- $field_id = absint( $_REQUEST['field_id'] );
- $field_row = ninja_forms_get_field_by_id($field_id);
- $field_type = $field_row['type'];
- $form_id = 1;
- $data = array();
- foreach($field_data as $key => $val){
- $key = stripslashes( $key );
- $key = str_replace('"', '', $key);
- if(strpos($key, '[')){
- $key = str_replace(']', '', $key);
- $key = explode('[', $key);
- $multi = array();
- $temp =& $multi;
- $x = 0;
- $count = count($key) - 1;
- foreach ($key as $item){
- $temp[$item] = array();
- if($x < $count){
- $temp =& $temp[$item];
- }else{
- $temp[$item] = $val;
- }
- $x++;
- }
- $data = ninja_forms_array_merge_recursive($data, $multi);
- }else{
- $data[$key] = $val;
- }
- }
- $name = stripslashes( esc_html( $_REQUEST['fav_name'] ) );
- if ( !isset ( $data['label'] ) or empty ( $data['label'] ) ) {
- $data['label'] = $name;
- }
- $data = ninja_forms_stripslashes_deep( $data );
- $data = serialize($data);
- $wpdb->insert(NINJA_FORMS_FAV_FIELDS_TABLE_NAME, array('row_type' => 1, 'type' => $field_type, 'order' => 0, 'data' => $data, 'name' => $name));
- $fav_id = $wpdb->insert_id;
- $update_array = array('fav_id' => $fav_id);
- $wpdb->update( NINJA_FORMS_FIELDS_TABLE_NAME, $update_array, array( 'id' => $field_id ));
- $new_html = '<p class="button-controls" id="ninja_forms_insert_fav_field_'.$fav_id.'_p">
- <a class="button add-new-h2 ninja-forms-insert-fav-field" id="ninja_forms_insert_fav_field_'.$fav_id.'" data-field="' . $fav_id . '" data-type="fav" href="#">'.__($name, 'ninja-forms').'</a>
- </p>';
- header("Content-type: application/json");
- $array = array ('fav_id' => $fav_id, 'fav_name' => $name, 'link_html' => $new_html);
- echo json_encode($array);
- die();
- }
- add_action('wp_ajax_ninja_forms_add_def', 'ninja_forms_add_def');
- function ninja_forms_add_def(){
- global $wpdb;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $field_data = $_REQUEST['field_data'];
- $field_id = absint( $_REQUEST['field_id'] );
- $field_row = ninja_forms_get_field_by_id($field_id);
- $field_type = $field_row['type'];
- $row_type = 0;
- $data = array();
- foreach($field_data as $key => $val){
- $key = str_replace('"', '', $key);
- if(strpos($key, '[')){
- $key = str_replace(']', '', $key);
- $key = explode('[', $key);
- $multi = array();
- $temp =& $multi;
- $x = 0;
- $count = count($key) - 1;
- foreach ($key as $item){
- $temp[$item] = array();
- if($x < $count){
- $temp =& $temp[$item];
- }else{
- $temp[$item] = $val;
- }
- $x++;
- }
- $data = ninja_forms_array_merge_recursive($data, $multi);
- }else{
- $data[$key] = $val;
- }
- }
- $name = stripslashes( esc_html( $_REQUEST['def_name'] ) );
- $data['label'] = $name;
- $data = serialize($data);
- $wpdb->insert(NINJA_FORMS_FAV_FIELDS_TABLE_NAME, array('row_type' => $row_type, 'type' => $field_type, 'data' => $data, 'name' => $name));
- $def_id = $wpdb->insert_id;
- $update_array = array('def_id' => $def_id);
- $wpdb->update( NINJA_FORMS_FIELDS_TABLE_NAME, $update_array, array( 'id' => $field_id ));
- $new_html = '<p class="button-controls" id="ninja_forms_insert_def_field_'.$def_id.'_p">
- <a class="button add-new-h2 ninja-forms-insert-def-field" id="ninja_forms_insert_def_field_'.$def_id.'" name="" href="#">'.__($name, 'ninja-forms').'</a>
- </p>';
- header("Content-type: application/json");
- $array = array ('def_id' => $def_id, 'def_name' => $name, 'link_html' => $new_html);
- echo json_encode($array);
- die();
- }
- add_action('wp_ajax_ninja_forms_remove_fav', 'ninja_forms_remove_fav');
- function ninja_forms_remove_fav(){
- global $wpdb, $ninja_forms_fields;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $field_id = absint( $_REQUEST['field_id'] );
- $field_row = ninja_forms_get_field_by_id($field_id);
- $field_type = $field_row['type'];
- $fav_id = $field_row['fav_id'];
- $wpdb->query($wpdb->prepare("DELETE FROM ".NINJA_FORMS_FAV_FIELDS_TABLE_NAME." WHERE id = %d", $fav_id));
- $wpdb->update(NINJA_FORMS_FIELDS_TABLE_NAME, array('fav_id' => '' ), array('fav_id' => $fav_id));
- $type_name = $ninja_forms_fields[$field_type]['name'];
- header("Content-type: application/json");
- $array = array ('fav_id' => $fav_id, 'type_name' => $type_name);
- echo json_encode($array);
- die();
- }
- add_action('wp_ajax_ninja_forms_remove_def', 'ninja_forms_remove_def');
- function ninja_forms_remove_def(){
- global $wpdb, $ninja_forms_fields;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $field_id = absint( $_REQUEST['field_id'] );
- $field_row = ninja_forms_get_field_by_id($field_id);
- $field_type = $field_row['type'];
- $def_id = $field_row['def_id'];
- $wpdb->query($wpdb->prepare("DELETE FROM ".NINJA_FORMS_FAV_FIELDS_TABLE_NAME." WHERE id = %d", $def_id));
- $wpdb->update(NINJA_FORMS_FIELDS_TABLE_NAME, array('def_id' => '' ), array('def_id' => $def_id));
- $type_name = $ninja_forms_fields[$field_type]['name'];
- header("Content-type: application/json");
- $array = array ('def_id' => $def_id, 'type_name' => $type_name);
- echo json_encode($array);
- die();
- }
- add_action( 'wp_ajax_ninja_forms_side_sortable', 'ninja_forms_side_sortable' );
- function ninja_forms_side_sortable(){
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $plugin_settings = nf_get_settings();
- $page = esc_html( $_REQUEST['page'] );
- $tab = esc_html( $_REQUEST['tab'] );
- $order = ninja_forms_esc_html_deep( $_REQUEST['order'] );
- $plugin_settings['sidebars'][$page][$tab] = $order;
- update_option( 'ninja_forms_settings', $plugin_settings );
- die();
- }
- add_action('wp_ajax_ninja_forms_delete_sub', 'ninja_forms_delete_sub');
- function ninja_forms_delete_sub($sub_id = ''){
- global $wpdb;
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- if($sub_id == ''){
- $ajax = true;
- $sub_id = absint( $_REQUEST['sub_id'] );
- }else{
- $ajax = false;
- }
- $wpdb->query($wpdb->prepare("DELETE FROM ".NINJA_FORMS_SUBS_TABLE_NAME." WHERE id = %d", $sub_id));
- if( $ajax ){
- die();
- }
- }
- function ninja_forms_array_merge_recursive() {
- $arrays = func_get_args();
- $base = array_shift($arrays);
- foreach ($arrays as $array) {
- reset($base); //important
- while (list($key, $value) = @each($array)) {
- if (is_array($value) && @is_array($base[$key])) {
- $base[$key] = ninja_forms_array_merge_recursive($base[$key], $value);
- } else {
- $base[$key] = $value;
- }
- }
- }
- return $base;
- }
- function ninja_forms_import_list_options(){
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $options = $_REQUEST['options'];
- $field_id = absint( $_REQUEST['field_id'] );
- $options = str_replace('\,', '-comma-replace-placeholder-', $options );
- $options = ninja_forms_csv_explode( $options );
- if( is_array( $options ) ){
- $tmp_array = array();
- $x = 0;
- foreach( $options as $option ){
- $label = stripslashes( $option[0] );
- $value = stripslashes( $option[1] );
- $calc = stripslashes( $option[2] );
- $label = str_replace( "''", "", $label );
- $label = str_replace( "-comma-replace-placeholder-", ",", $label );
- $value = str_replace( "''", "", $value );
- $value = str_replace( "-comma-replace-placeholder-", ",", $value );
- $calc = str_replace( "''", "", $calc );
- $calc = str_replace( "-comma-replace-placeholder-", ",", $calc );
- $tmp_array[$x]['label'] = $label;
- $tmp_array[$x]['value'] = $value;
- $tmp_array[$x]['calc'] = $calc;
- $x++;
- }
- $x = 0;
- foreach( $tmp_array as $option ){
- $hidden = 0;
- ninja_forms_field_list_option_output($field_id, $x, $option, $hidden);
- $x++;
- }
- }
- die();
- }
- add_action( 'wp_ajax_ninja_forms_import_list_options', 'ninja_forms_import_list_options' );
- /*
- *
- * Function that outputs a list of terms so that the user can exclude terms from a list selector.
- *
- * @since 2.2.51
- * @return void
- */
- function ninja_forms_list_terms_checkboxes( $field_id = '', $tax_name = '' ){
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- if ( $field_id == '' && isset ( $_POST['field_id'] ) ) {
- $field_id = absint( $_POST['field_id'] );
- }
- if ( $tax_name == '' && isset ( $_POST['tax_name'] ) ) {
- $tax_name = esc_html( $_POST['tax_name'] );
- }
- if ( $field_id != '' && $tax_name != '' ) {
- $field = ninja_forms_get_field_by_id( $field_id );
- if ( isset ( $field['data']['exclude_terms'] ) ) {
- $exclude_terms = $field['data']['exclude_terms'];
- } else {
- $exclude_terms = '';
- }
- $terms = get_terms( $tax_name, array( 'hide_empty' => false ) );
- if ( is_array ( $terms ) && !empty ( $terms ) ) {
- ?>
- <h4><?php _e( 'Do not show these terms', 'ninja-forms' );?>:</h4>
- <input type="hidden" name="ninja_forms_field_<?php echo $field_id;?>[exclude_terms]" value="">
- <?php
- foreach ( $terms as $term ) {
- ?>
- <div>
- <label>
- <input type="checkbox" <?php checked( in_array ( $term->term_id, $exclude_terms ), true );?> name="ninja_forms_field_<?php echo $field_id;?>[exclude_terms][]" value="<?php echo $term->term_id;?>">
- <?php echo $term->name;?>
- </label>
- </div>
- <?php
- }
- }
- }
- if ( isset ( $_POST['from_ajax'] ) && absint( $_POST['from_ajax'] ) == 1 ) {
- die();
- }
- }
- add_action( 'wp_ajax_ninja_forms_list_terms_checkboxes', 'ninja_forms_list_terms_checkboxes' );
- /*
- *
- * Function that outputs a calculation row
- *
- * @since 2.2.28
- * @returns void
- */
- function ninja_forms_add_calc_row(){
- // Bail if we aren't in the admin
- if ( ! is_admin() )
- return false;
- check_ajax_referer( 'nf_ajax', 'nf_ajax_nonce' );
- $field_id = absint( $_REQUEST['field_id'] );
- $c = array( 'calc' => '', 'operator' => 'add', 'value' => '', 'when' => '' );
- $x = absint( $_REQUEST['x'] );
- ninja_forms_output_field_calc_row( $field_id, $c, $x );
- die();
- }
- add_action( 'wp_ajax_ninja_forms_add_calc_row', 'ninja_forms_add_calc_row' );
- /**
- *
- * Covert a multi-line CSV string into a 2d array. Follows RFC 4180, allows
- * "cells with ""escaped delimiters""" && multi-line enclosed cells
- * It assumes the CSV file is properly formatted, and doesn't check for errors
- * in CSV format.
- * @param string $str The CSV string
- * @param string $d The delimiter between values
- * @param string $e The enclosing character
- * @param bool $crlf Set to true if your CSV file should return carriage return
- * and line feed (CRLF should be returned according to RFC 4180
- * @return array
- */
- function ninja_forms_csv_explode( $str, $d=',', $e='"', $crlf=TRUE ) {
- // Convert CRLF to LF, easier to work with in regex
- if( $crlf ) $str = str_replace("\r\n","\n",$str);
- // Get rid of trailing linebreaks that RFC4180 allows
- $str = trim($str);
- // Do the dirty work
- if ( preg_match_all(
- '/(?:
- '.$e.'((?:[^'.$e.']|'.$e.$e.')*+)'.$e.'(?:'.$d.'|\n|$)
- # match enclose, then match either non-enclose or double-enclose
- # zero to infinity times (possesive), then match another enclose,
- # followed by a comma, linebreak, or string end
- | ####### OR #######
- ([^'.$d.'\n]*+)(?:['.$d.'\n]|$)
- # match anything thats not a comma or linebreak zero to infinity
- # times (possesive), then match either a comma or a linebreak or
- # string end
- )/x',
- $str, $ms, PREG_SET_ORDER
- ) === FALSE ) return FALSE;
- // Initialize vars, $r will hold our return data, $i will track which line we're on
- $r = array(); $i = 0;
- // Loop through results
- foreach( $ms as $m ) {
- // If the first group of matches is empty, the cell has no quotes
- if( empty($m[1]) )
- // Put the CRLF back in if needed
- $r[$i][] = ($crlf == TRUE) ? str_replace("\n","\r\n",$m[2]) : $m[2];
- else {
- // The cell was quoted, so we want to convert any "" back to " and
- // any LF back to CRLF, if needed
- $r[$i][] = ($crlf == TRUE) ?
- str_replace(
- array("\n",$e.$e),
- array("\r\n",$e),
- $m[1]) :
- str_replace($e.$e, $e, $m[1]);
- }
- // If the raw match doesn't have a delimiter, it must be the last in the
- // row, so we increment our line count.
- if( substr($m[0],-1) != $d )
- $i++;
- }
- // An empty array will exist due to $ being a zero-length match, so remove it
- array_pop( $r );
- return $r;
- }
|