| Server IP : 68.183.124.220 / Your IP : 216.73.217.137 Web Server : Apache/2.4.18 (Ubuntu) System : Linux Sandbox-A 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : gavin ( 1000) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/html/wp-content/plugins/ninja-forms/deprecated/includes/admin/ |
Upload File : |
<?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;
}