<?php
/*
Plugin Name: Calculated Fields Form
Plugin URI: http://cff.dwbooster.com
Description: Create forms with field values calculated based in other form field values.
Version: 1.0.170
Text Domain: calculated-fields-form
Author: CodePeople
Author URI: http://cff.dwbooster.com
License: GPL
*/

require_once 'inc/cpcff_session.inc.php';
// Start Session
CP_SESSION::session_start();

// Defining main constants
define('CP_CALCULATEDFIELDSF_BASE_PATH', dirname( __FILE__ ) );
define('CP_CALCULATEDFIELDSF_BASE_NAME', plugin_basename( __FILE__ ) );

require_once 'inc/cpcff_auxiliary.inc.php';
require_once 'config/cpcff_config.cfg.php';

require_once 'inc/cpcff_banner.inc.php';
require_once 'inc/cpcff_main.inc.php';

// Global variables
$cpcff_main = new CPCFF_MAIN; // Main plugin's object

// Global variables to maintain an incremental number to identify the forms on page
$CP_CFF_global_form_count_number = 0;
$CP_CFF_global_form_count = "_".$CP_CFF_global_form_count_number;

// Install/uninstall the plugin, and create the database's tables.
require_once 'inc/cpcff_install_uninstall.inc.php';
register_activation_hook(__FILE__,array('CPCFF_INSTALLER','install'));
add_action('wpmu_new_blog', array('CPCFF_INSTALLER', 'new_blog'), 10, 6);

add_action( 'init', 'cp_calculated_fields_form_check_posted_data', 11 );

if ( is_admin() ) {
    add_action('admin_enqueue_scripts', 'set_cp_calculatedfieldsf_insert_adminScripts', 1);
}


// functions
//------------------------------------------

/**
 * Add the attribute: property="stylesheet" to the link tag if has not been defined.
 */
function cp_calculatedfieldsf_link_tag( $tag )
{
	if( preg_match( '/property\\s*=/i', $tag ) == 0 )
	{
		return str_replace( '/>', ' property="stylesheet" />', $tag );
	}
	return $tag;
} // End cp_calculatedfieldsf_link_tag

/**
 * Create a javascript variable, from: Post, Get, Session or Cookie
 */
function cp_calculatedfieldsf_create_var( $atts ) {

	if( CPCFF_AUXILIARY::is_crawler() ) return '';

	if( isset( $atts[ 'name' ] ) )
	{
		$var = trim( $atts[ 'name' ] );
		if( !empty( $var ) )
		{
			if( isset( $atts[ 'value' ] ) )
			{
				$value = json_encode( $atts[ 'value' ] );
			}
			else
			{
				$from = '_';
				if( isset( $atts[ 'from' ] ) ) $from .= strtoupper( trim( $atts[ 'from' ] ) );
				if( in_array( $from, array( '_POST', '_GET', '_SESSION', '_COOKIE' ) ) )
				{
					if( isset( $GLOBALS[ $from ][ $var ] ) ){
						if( $from == '_COOKIE' )
						{
							$cookie_var = 1;
							$value = 'fbuilder_get_cookie("'.$var.'")';
						}else $value = json_encode($GLOBALS[ $from ][ $var ]);
					}
					elseif( isset( $atts[ 'default_value' ] ) ) $value = json_encode($atts[ 'default_value' ]);
				}
				else
				{
					if( isset( $_POST[ $var ] ) ) 				$value = json_encode($_POST[ $var ]);
					elseif( isset( $_GET[ $var ] ) ) 			$value = json_encode($_GET[ $var ]);
					elseif( isset( $_SESSION[ $var ] ) )		$value = json_encode($_SESSION[ $var ]);
					elseif( isset( $_COOKIE[ $var ] ) ){
																$cookie_var = 1;
																$value = 'fbuilder_get_cookie("'.$var.'")';
					}
					elseif( isset( $atts[ 'default_value' ] ) ) $value = json_encode($atts[ 'default_value' ]);
				}
			}
			if( isset( $value ) )
			{
				$js_script  = '';
				global $calculated_fields_form_cookie_var;
				if( isset($cookie_var) && empty($calculated_fields_form_cookie_var) )
				{
					$calculated_fields_form_cookie_var  = 1;
					$js_script .= 'function fbuilder_get_cookie( name ){
										var re = new RegExp(name + "=([^;]+)");
										var value = re.exec(document.cookie);
										return (value != null) ? decodeURIComponent(value[1].replace(/\+/g, "%20")) : null;
									};';
				}
				return '
				<script>
					try{
					'.$js_script.'
					window["'.$var.'"]='.$value.';
					}catch( err ){}
				</script>
				';
			}
		}
	}
} // End cp_calculatedfieldsf_create_var

// Used to load the public form
function cp_calculatedfieldsf_filter_content( $atts ) {

	if( CPCFF_AUXILIARY::is_crawler() ) return '';

    global $wpdb, $CP_CFF_global_form_count;

	if( empty( $atts[ 'id' ] ) )
        $myrows = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix.CP_CALCULATEDFIELDSF_FORMS_TABLE );
    else
        $myrows = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM ".$wpdb->prefix.CP_CALCULATEDFIELDSF_FORMS_TABLE." WHERE id=%d",$atts[ 'id' ] ) );

    if( empty( $myrows ) ) return '';
	$atts[ 'id' ] = $myrows[0]->id;

	/**
	 * Filters applied before generate the form,
	 * is passed as parameter an array with the forms attributes, and return the list of attributes
	 */
	$atts = apply_filters( 'cpcff_pre_form',  $atts );

    ob_start();
    cp_calculatedfieldsf_get_public_form($atts[ 'id' ]);
    $buffered_contents = ob_get_contents();
    if( count( $atts ) > 1 )
    {
        $buffered_contents .= '<script>';
        foreach( $atts as $i => $v )
        {
            if( $i != 'id' && !is_numeric( $i ) )
            {
				$nV = ( is_numeric( $v ) ) ? $v : json_encode( $v );
                $buffered_contents .= $i.'='.$nV.';';
                $buffered_contents .= 'if(typeof '.$i.'_arr == "undefined") '.$i.'_arr={}; '.$i.'_arr["'.$CP_CFF_global_form_count.'"]='.$nV.';';
            }
        }
        $buffered_contents .= '</script>';
    }
    ob_end_clean();

	/**
	 * Filters applied after generate the form,
	 * is passed as parameter the HTML code of the form with the corresponding <LINK> and <SCRIPT> tags,
	 * and returns the HTML code to includes in the webpage
	 */
	$buffered_contents = apply_filters( 'cpcff_the_form', $buffered_contents,  $atts[ 'id' ] );

    return $buffered_contents;
}

function cp_calculatedfieldsf_available_templates(){
	global $CP_CFF_global_templates;

	if( empty( $CP_CFF_global_templates ) )
	{
		// Get available designs
		$tpls_dir = dir( plugin_dir_path( __FILE__ ).'templates' );
		$CP_CFF_global_templates = array();
		while( false !== ( $entry = $tpls_dir->read() ) )
		{
			if ( $entry != '.' && $entry != '..' && is_dir( $tpls_dir->path.'/'.$entry ) && file_exists( $tpls_dir->path.'/'.$entry.'/config.ini' ) )
			{
				if( ( $ini_array = parse_ini_file( $tpls_dir->path.'/'.$entry.'/config.ini' ) ) != false ||
					( $ini_array = parse_ini_string( file_get_contents( $tpls_dir->path.'/'.$entry.'/config.ini' ) ) ) != false )
				{
					if( !empty( $ini_array[ 'file' ] ) ) $ini_array[ 'file' ] = plugins_url( 'templates/'.$entry.'/'.$ini_array[ 'file' ], __FILE__ );
					if( !empty( $ini_array[ 'js' ] ) ) $ini_array[ 'js' ] = plugins_url( 'templates/'.$entry.'/'.$ini_array[ 'js' ], __FILE__ );
					if( !empty( $ini_array[ 'thumbnail' ] ) ) $ini_array[ 'thumbnail' ] = plugins_url( 'templates/'.$entry.'/'.$ini_array[ 'thumbnail' ], __FILE__ );
					$CP_CFF_global_templates[ $ini_array[ 'prefix' ] ] = $ini_array;
				}
			}
		}
	}

	return $CP_CFF_global_templates;
}

function cp_calculatedfieldsf_get_public_form($id) {
    global $wpdb, $cpcff_default_texts_array;
    global $CP_CFF_global_form_count;
    global $CP_CFF_global_form_count_number;

    $CP_CFF_global_form_count_number++;
    $CP_CFF_global_form_count = "_".$CP_CFF_global_form_count_number;
    if ( !defined('CP_AUTH_INCLUDE') ) define('CP_AUTH_INCLUDE', true);

    $previous_label = cp_calculatedfieldsf_get_option('vs_text_previousbtn', 'Previous',$id);
    $previous_label = ( $previous_label=='' ? 'Previous' : $previous_label );
    $next_label = cp_calculatedfieldsf_get_option('vs_text_nextbtn', 'Next',$id);
    $next_label = ( $next_label == '' ? 'Next' : $next_label );

    $cpcff_texts_array = cp_calculatedfieldsf_get_option( 'vs_all_texts', $cpcff_default_texts_array, $id );
    $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
        $cpcff_default_texts_array,
        ( is_string( $cpcff_texts_array ) && is_array( unserialize( $cpcff_texts_array ) ) )
            ? unserialize( $cpcff_texts_array )
            : ( ( is_array( $cpcff_texts_array ) ) ? $cpcff_texts_array : array() )
    );
    $page_of_label = $cpcff_texts_array[ 'page_of_text' ][ 'text' ];
	$maxlength_error_text = $cpcff_texts_array[ 'errors' ][ 'maxlength' ][ 'text' ];
	$minlength_error_text = $cpcff_texts_array[ 'errors' ][ 'minlength' ][ 'text' ];
	$equalTo_error_text   = $cpcff_texts_array[ 'errors' ][ 'equalTo' ][ 'text' ];
	$accept_error_text   = $cpcff_texts_array[ 'errors' ][ 'accept' ][ 'text' ];
	$upload_size_error_text   = $cpcff_texts_array[ 'errors' ][ 'upload_size' ][ 'text' ];

	$public_js_path = ( file_exists( rtrim( dirname( __FILE__ ), '/' ).'/js/cache/all.js' ) && get_option( 'CP_CALCULATEDFIELDSF_USE_CACHE', CP_CALCULATEDFIELDSF_USE_CACHE ) ) ? plugins_url('/js/cache/all.js', __FILE__) : CPCFF_AUXILIARY::site_url().( ( strpos( CPCFF_AUXILIARY::site_url(),'?' ) === false ) ? '/?' : '&' ).'cp_cff_resources=public&min='.get_option( 'CP_CALCULATEDFIELDSF_USE_CACHE', CP_CALCULATEDFIELDSF_USE_CACHE );

	if (CP_CALCULATEDFIELDSF_DEFAULT_DEFER_SCRIPTS_LOADING)
    {
        wp_deregister_script('query-stringify');
        wp_register_script('query-stringify', plugins_url('/js/jQuery.stringify.js', __FILE__));

        wp_deregister_script('cp_calculatedfieldsf_validate_script');
        wp_register_script('cp_calculatedfieldsf_validate_script', plugins_url('/js/jquery.validate.js', __FILE__));

        wp_enqueue_script( 'cp_calculatedfieldsf_buikder_script', $public_js_path, array("jquery","jquery-ui-core","jquery-ui-button","jquery-ui-datepicker","jquery-ui-widget","jquery-ui-position","jquery-ui-tooltip","query-stringify","cp_calculatedfieldsf_validate_script", "jquery-ui-slider"), '1.0.165', true );

		$obj = array(
			"pub"=>true,
			"identifier"=>$CP_CFF_global_form_count,
			"messages"=> array(
				"required" => cp_calculatedfieldsf_get_option('vs_text_is_required', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_is_required,$id),
        	    "email" => cp_calculatedfieldsf_get_option('vs_text_is_email', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_is_email,$id),
        	    "datemmddyyyy" => cp_calculatedfieldsf_get_option('vs_text_datemmddyyyy', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_datemmddyyyy,$id),
				"dateddmmyyyy" => cp_calculatedfieldsf_get_option('vs_text_dateddmmyyyy', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_dateddmmyyyy,$id),
				"number" => cp_calculatedfieldsf_get_option('vs_text_number', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_number,$id),
				"digits" => cp_calculatedfieldsf_get_option('vs_text_digits', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_digits,$id),
				"max" => cp_calculatedfieldsf_get_option('vs_text_max', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_max,$id),
				"min" => cp_calculatedfieldsf_get_option('vs_text_min', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_min,$id),
				"previous" => $previous_label,
				"next" => $next_label,
				"pageof" => $page_of_label,
				"minlength" => $minlength_error_text,
				"maxlength" => $maxlength_error_text,
				"equalTo" => $equalTo_error_text,
				"accept" => $accept_error_text,
				"upload_size" => $upload_size_error_text
			)
		);
        wp_localize_script('cp_calculatedfieldsf_buikder_script', 'cp_calculatedfieldsf_fbuilder_config'.$CP_CFF_global_form_count, array('obj' => json_encode( $obj )));
    }
    else
    {
        if( !defined( 'CP_CALCULATEDFIELDSF_SCRIPTS_LOADED' ) ) // Load the scripts only one time
		{
			define( 'CP_CALCULATEDFIELDSF_SCRIPTS_LOADED', true );
			// This code won't be used in most cases. This code is for preventing problems in wrong WP themes and conflicts with third party plugins.
			$plugin_url = plugins_url('', __FILE__);
			$prefix_ui = '';
			if ( @file_exists( dirname( __FILE__ ).'/../../../wp-includes/js/jquery/ui/jquery.ui.core.min.js' ) )
			$prefix_ui = 'jquery.ui.';

			if(!wp_script_is('jquery', 'done'))
				print '<script type="text/javascript" src="'.$plugin_url.'/../../../wp-includes/js/jquery/jquery.js"></script>';
			if(!wp_script_is('jquery-ui-core', 'done'))
				print '<script type="text/javascript" src="'.$plugin_url.'/../../../wp-includes/js/jquery/ui/'.$prefix_ui.'core.min.js"></script>';
			if(!wp_script_is('jquery-ui-datepicker', 'done'))
				print '<script type="text/javascript" src="'.$plugin_url.'/../../../wp-includes/js/jquery/ui/'.$prefix_ui.'datepicker.min.js"></script>';
			if(!wp_script_is('jquery-ui-widget', 'done'))
				print '<script type="text/javascript" src="'.$plugin_url.'/../../../wp-includes/js/jquery/ui/'.$prefix_ui.'widget.min.js"></script>';
			if(!wp_script_is('jquery-ui-position', 'done'))
				print '<script type="text/javascript" src="'.$plugin_url.'/../../../wp-includes/js/jquery/ui/'.$prefix_ui.'position.min.js"></script>';
			if(!wp_script_is('jquery-ui-tooltip', 'done'))
				print '<script type="text/javascript" src="'.$plugin_url.'/../../../wp-includes/js/jquery/ui/'.$prefix_ui.'tooltip.min.js"></script>';
			if(!wp_script_is('jquery-ui-mouse', 'done'))
				print '<script type="text/javascript" src="'.$plugin_url.'/../../../wp-includes/js/jquery/ui/'.$prefix_ui.'mouse.min.js"></script>';
			if(!wp_script_is('jquery-ui-slider', 'done'))
				print '<script type="text/javascript" src="'.$plugin_url.'/../../../wp-includes/js/jquery/ui/'.$prefix_ui.'slider.min.js"></script>';
		?>
			<script>if( typeof fbuilderjQuery == 'undefined') var fbuilderjQuery = jQuery.noConflict( );</script>
			<script type='text/javascript' src='<?php echo plugins_url('js/jQuery.stringify.js', __FILE__); ?>'></script>
			<script type='text/javascript' src='<?php echo plugins_url('js/jquery.validate.js', __FILE__); ?>'></script>
			<script type='text/javascript' src='<?php echo $public_js_path.(( strpos( $public_js_path, '?' ) == false ) ? '?' : '&' ).'ver=1.0.165'; ?>'></script>
		<?php
		}
		?>
		<script type='text/javascript'>
			/* <![CDATA[ */
			<?php
				$fbuilder_config = new stdClass;
				$fbuilder_config->obj = new stdClass;
				$fbuilder_config->obj->pub = true;
				$fbuilder_config->obj->identifier = $CP_CFF_global_form_count;
				$fbuilder_config->obj->messages = new stdClass;
				$fbuilder_config->obj->messages->required = cp_calculatedfieldsf_get_option('vs_text_is_required', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_is_required,$id);
				$fbuilder_config->obj->messages->email = cp_calculatedfieldsf_get_option('vs_text_is_email', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_is_email,$id);
				$fbuilder_config->obj->messages->datemmddyyyy = cp_calculatedfieldsf_get_option('vs_text_datemmddyyyy', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_datemmddyyyy,$id);
				$fbuilder_config->obj->messages->dateddmmyyyy = cp_calculatedfieldsf_get_option('vs_text_dateddmmyyyy', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_dateddmmyyyy,$id);
				$fbuilder_config->obj->messages->number = cp_calculatedfieldsf_get_option('vs_text_number', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_number,$id);
				$fbuilder_config->obj->messages->digits = cp_calculatedfieldsf_get_option('vs_text_digits', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_digits,$id);
				$fbuilder_config->obj->messages->max = cp_calculatedfieldsf_get_option('vs_text_max', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_max,$id);
				$fbuilder_config->obj->messages->min = cp_calculatedfieldsf_get_option('vs_text_min', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_min,$id);
				$fbuilder_config->obj->messages->previous = $previous_label;
				$fbuilder_config->obj->messages->next = $next_label;
				$fbuilder_config->obj->messages->pageof = $page_of_label;
				$fbuilder_config->obj->messages->minlength = $minlength_error_text;
				$fbuilder_config->obj->messages->maxlength = $maxlength_error_text;
				$fbuilder_config->obj->messages->equalTo = $equalTo_error_text;

				print 'var cp_calculatedfieldsf_fbuilder_config'.$CP_CFF_global_form_count.'='.json_encode( $fbuilder_config );
			?>
			/* ]]> */
		</script>
		<?php
    }
	@include dirname( __FILE__ ) . '/inc/cpcff_public_int.inc.php';
}

function cp_calculatedfieldsf_html_post_page() {
    if (isset($_GET["cal"]) && $_GET["cal"] != '')
    {
		@include_once dirname( __FILE__ ) . '/inc/cpcff_admin_int.inc.php';
    }
    else
	{
		if (isset($_GET["page"]) &&$_GET["page"] == 'cp_calculated_fields_form_sub3')
        {
            echo("Redirecting to upgrade page...<script type='text/javascript'>document.location='http://cff.dwbooster.com/download';</script>");
            exit;
        }
        else if (isset($_GET["page"]) &&$_GET["page"] == 'cp_calculated_fields_form_sub2')
        {
            echo("Redirecting to demo page...<script type='text/javascript'>document.location='http://cff.dwbooster.com/documentation';</script>");
            exit;
        }
        else if (isset($_GET["page"]) &&$_GET["page"] == 'cp_calculated_fields_form_sub4')
        {
            echo("Redirecting to demo page...<script type='text/javascript'>document.location='https://wordpress.org/support/plugin/calculated-fields-form#new-post';</script>");
            exit;
        }
        else
			@include_once dirname( __FILE__ ) . '/inc/cpcff_admin_int_list.inc.php';
	}
}


function set_cp_calculatedfieldsf_insert_adminScripts($hook) {
    if ( isset($_GET["page"]) && $_GET["page"] == "cp_calculated_fields_form" )
    {
		wp_enqueue_script( "jquery" );
		wp_enqueue_script( "jquery-ui-core" );
		wp_enqueue_script( "jquery-ui-sortable" );
		wp_enqueue_script( "jquery-ui-tabs" );
		wp_enqueue_script( "jquery-ui-droppable" );
		wp_enqueue_script( "jquery-ui-button" );
		wp_enqueue_script( "jquery-ui-datepicker" );
        wp_deregister_script('query-stringify');
        wp_register_script('query-stringify', plugins_url('/js/jQuery.stringify.js', __FILE__));
		wp_enqueue_script( "query-stringify" );

		//ULR to the admin resources
		$admin_resources = admin_url( "admin.php?page=cp_calculated_fields_form&cp_cff_resources=admin" );
        wp_enqueue_script( 'cp_calculatedfieldsf_buikder_script', $admin_resources, array("jquery","jquery-ui-core","jquery-ui-sortable","jquery-ui-tabs","jquery-ui-droppable","jquery-ui-button","jquery-ui-datepicker","query-stringify") );
		wp_enqueue_script( 'cp_calculatedfieldsf_buikder_script_caret', plugins_url('/js/jquery.caret.js', __FILE__),array("jquery"));
        wp_enqueue_style('jquery-style', CP_SCHEME.'ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css');
    }

    if( 'post.php' != $hook  && 'post-new.php' != $hook )
        return;
    wp_enqueue_script( 'cp_calculatedfieldsf_script', plugins_url('/js/cp_calculatedfieldsf_scripts.js', __FILE__) );
}

function cp_calculated_fields_form_check_posted_data() {

    global $wpdb;

    if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset( $_POST['cp_calculatedfieldsf_post_options'] ) && is_admin() )
    {
        cp_calculatedfieldsf_save_options();
		if( isset( $_POST[ 'preview' ] ) )
		{
			print '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body>';
			print( cp_calculatedfieldsf_filter_content( array( 'id' => $_POST[ 'cp_calculatedfieldsf_id' ] ) ));
			wp_footer();
			print '</body></html>';
			exit;
		}
		return;
    }
}

function cp_calculatedfieldsf_save_options()
{
	check_admin_referer( 'session_id_'.CP_SESSION::session_id(), '_cpcff_nonce' );
    global $wpdb;
    if (!defined('CP_CALCULATEDFIELDSF_ID'))
        define ('CP_CALCULATEDFIELDSF_ID',$_POST["cp_calculatedfieldsf_id"]);

	$error_occur = false;
	if( isset( $_POST[ 'form_structure' ] ) )
    {
		// Remove bom characters
		$bom = pack('H*','EFBBBF');
		$_POST[ 'form_structure' ] = preg_replace("/$bom/", '', $_POST[ 'form_structure' ]);

		$form_structure_obj = CPCFF_AUXILIARY::json_decode( $_POST[ 'form_structure' ] );
		if( !empty( $form_structure_obj ) )
		{
			global $cpcff_default_texts_array;
			$cpcff_text_array = '';

			if( isset( $_POST[ 'cpcff_text_array' ] ) )
			{
				foreach( $_POST[ 'cpcff_text_array' ] as $cpcff_text_index => $cpcff_text_attr )
				{
					if( $cpcff_text_index  == 'errors')
					{
						foreach( $_POST[ 'cpcff_text_array' ][ $cpcff_text_index ] as $cpcff_text_sub_index => $cpcff_text_sub_attr )
						{
							$_POST[ 'cpcff_text_array' ][ $cpcff_text_index ][$cpcff_text_sub_index][ 'text' ] = stripcslashes( $cpcff_text_sub_attr[ 'text' ] );
						}
					}
					else
					{
						$_POST[ 'cpcff_text_array' ][ $cpcff_text_index ][ 'text' ] = stripcslashes( $cpcff_text_attr[ 'text' ] );
					}
				}
				$cpcff_text_array = $_POST[ 'cpcff_text_array' ];
				unset( $_POST[ 'cpcff_text_array' ] );
			}

			foreach ($_POST as $item => $value)
				$_POST[$item] = stripcslashes($value);

			$data = array(
						  'form_structure' => $_POST['form_structure'],

						  'fp_from_email' => $_POST['fp_from_email'],
						  'fp_destination_emails' => $_POST['fp_destination_emails'],
						  'fp_subject' => $_POST['fp_subject'],
						  'fp_inc_additional_info' => $_POST['fp_inc_additional_info'],
						  'fp_return_page' => $_POST['fp_return_page'],
						  'fp_message' => $_POST['fp_message'],
						  'fp_emailformat' => $_POST['fp_emailformat'],

						  'cu_enable_copy_to_user' => $_POST['cu_enable_copy_to_user'],
						  'cu_user_email_field' => (isset($_POST['cu_user_email_field'])?$_POST['cu_user_email_field']:''),
						  'cu_subject' => $_POST['cu_subject'],
						  'cu_message' => $_POST['cu_message'],
						  'cu_emailformat' => $_POST['cu_emailformat'],

						  'enable_paypal' => @$_POST["enable_paypal"],
						  'paypal_email' => $_POST["paypal_email"],
						  'request_cost' => @$_POST["request_cost"],
						  'paypal_product_name' => $_POST["paypal_product_name"],
						  'currency' => $_POST["currency"],
						  'paypal_language' => $_POST["paypal_language"],
						  'paypal_mode' => $_POST["paypal_mode"],
						  'paypal_recurrent' => $_POST["paypal_recurrent"],
						  'paypal_identify_prices' => (isset($_POST['paypal_identify_prices'])?$_POST['paypal_identify_prices']:'0'),
						  'paypal_zero_payment' => $_POST["paypal_zero_payment"],

						  'vs_use_validation' => $_POST['vs_use_validation'],
						  'vs_text_is_required' => $_POST['vs_text_is_required'],
						  'vs_text_is_email' => $_POST['vs_text_is_email'],
						  'vs_text_datemmddyyyy' => $_POST['vs_text_datemmddyyyy'],
						  'vs_text_dateddmmyyyy' => $_POST['vs_text_dateddmmyyyy'],
						  'vs_text_number' => $_POST['vs_text_number'],
						  'vs_text_digits' => $_POST['vs_text_digits'],
						  'vs_text_max' => $_POST['vs_text_max'],
						  'vs_text_min' => $_POST['vs_text_min'],
						  'vs_text_previousbtn' => $_POST['vs_text_previousbtn'],
						  'vs_text_nextbtn' => $_POST['vs_text_nextbtn'],
						  'vs_all_texts' => serialize( $cpcff_text_array ),

						  'cv_enable_captcha' => $_POST['cv_enable_captcha'],
						  'cv_width' => $_POST['cv_width'],
						  'cv_height' => $_POST['cv_height'],
						  'cv_chars' => $_POST['cv_chars'],
						  'cv_font' => $_POST['cv_font'],
						  'cv_min_font_size' => $_POST['cv_min_font_size'],
						  'cv_max_font_size' => $_POST['cv_max_font_size'],
						  'cv_noise' => $_POST['cv_noise'],
						  'cv_noise_length' => $_POST['cv_noise_length'],
						  'cv_background' => $_POST['cv_background'],
						  'cv_border' => $_POST['cv_border'],
						  'cv_text_enter_valid_captcha' => $_POST['cv_text_enter_valid_captcha']
			);
			$_update_result = $wpdb->update (
				$wpdb->prefix.CP_CALCULATEDFIELDSF_FORMS_TABLE,
				$data,
				array( 'id' => CP_CALCULATEDFIELDSF_ID ),
				array( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' ),
				array( '%d' )
			);
			if( $_update_result === false )
			{
				global $cff_structure_error;
				$cff_structure_error = __('<div class="error-text">The data cannot be stored in database because has occurred an error with the database structure. Please, go to the plugins section and Deactivate/Activate the plugin to be sure the structure of database has been checked, and corrected if needed. If the issue persist, please <a href="http://wordpress.dwbooster.com/support">contact us</a></div>', 'calculated-fields-form' );
			}
		}
		else
		{
			$error_occur = true;
		}
	}
	else
    {
		$error_occur = true;
    }

	if( $error_occur )
	{
		global $cff_structure_error;
        $cff_structure_error = __('<div class="error-text">The data cannot be stored in database because has occurred an error with the form structure. Please, try to save the data again. If have been copied and pasted data from external text editors, the data can contain invalid characters. If the issue persist, please <a href="http://wordpress.dwbooster.com/support">contact us</a></div>', 'calculated-fields-form' );
	}
}


// cp_calculatedfieldsf_get_option:
$cp_calculatedfieldsf_option_buffered_item = false;
$cp_calculatedfieldsf_option_buffered_id = -1;

function cp_calculatedfieldsf_get_option ($field, $default_value, $id = '')
{
	$value = '';
    if (!defined("CP_CALCULATEDFIELDSF_ID"))
        define ("CP_CALCULATEDFIELDSF_ID", (!empty($id)) ? $id : 1);
    if (empty($id))
        $id = CP_CALCULATEDFIELDSF_ID;

    global $wpdb, $cp_calculatedfieldsf_option_buffered_item, $cp_calculatedfieldsf_option_buffered_id;
    if ($cp_calculatedfieldsf_option_buffered_id == $id)
	{
        if( property_exists( $cp_calculatedfieldsf_option_buffered_item, $field ) ) $value = @$cp_calculatedfieldsf_option_buffered_item->$field;
	}
    else
    {
		$myrows = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM ".$wpdb->prefix.CP_CALCULATEDFIELDSF_FORMS_TABLE." WHERE id=%d", $id ) );
		if( !empty( $myrows ) )
		{
			if( property_exists( $myrows[0], $field ) )
			{
				$value = @$myrows[0]->$field;
			}
			else
			{
				$value = $default_value;
			}
			$cp_calculatedfieldsf_option_buffered_item = $myrows[0];
			$cp_calculatedfieldsf_option_buffered_id  = $id;
		}
		else
		{
			$value = $default_value;
		}
    }

	if( $field == 'form_structure'  && !is_array( $value ) )
	{
		$form_data = CPCFF_AUXILIARY::json_decode( $value, 'normal' );
		$value = $cp_calculatedfieldsf_option_buffered_item->form_structure = ( !is_null( $form_data ) ) ? $form_data : '';
	}

    if ( ( $field == 'vs_all_texts' && empty( $value ) ) || ( $value == '' && $cp_calculatedfieldsf_option_buffered_item->form_structure == '' ) )
        $value = $default_value;

	/**
	 * Filters applied before returning a form option,
	 * use three parameters: The value of option, the name of option and the form's id
	 * returns the new option's value
	 */
    $value = apply_filters( 'cpcff_get_option', $value, $field, $id );

    return $value;
}
?>