$value)
{
$item = str_replace( $sequence,'',$item );
if ( isset( $fields[ $item ] ) )
{
$files_names_arr = array();
$files_links_arr = array();
$files_urls_arr = array();
for( $f = 0; $f < count( $value[ 'name' ] ); $f++ )
{
if( !empty( $value[ 'name' ][ $f ] ) )
{
$uploaded_file = array(
'name' => $value[ 'name' ][ $f ],
'type' => $value[ 'type' ][ $f ],
'tmp_name' => $value[ 'tmp_name' ][ $f ],
'error' => $value[ 'error' ][ $f ],
'size' => $value[ 'size' ][ $f ],
);
$movefile = wp_handle_upload( $uploaded_file, array( 'test_form' => false ) );
if ( empty( $movefile[ 'error' ] ) )
{
$files_links_arr[] = $params[ $item."_link" ][ $f ] = $movefile["file"];
$files_urls_arr[] = $params[ $item."_url" ][ $f ] = $movefile["url"];
$files_names_arr[] = $uploaded_file[ 'name' ];
/**
* Action called when the file is uploaded, the file's data is passed as parameter
*/
do_action( 'cpappb_file_uploaded', $movefile );
} //else echo $movefile[ 'error' ];
}
}
$joinned_files_names = implode( ", ", $files_names_arr );
$buffer .= $fields[ $item ] . ": ". $joinned_files_names . "\n\n";
$params[ $item ] = $joinned_files_names;
//$params[ $item."_links"] = implode( ",", $files_links_arr );
//$params[ $item."_urls"] = implode( ",", $files_urls_arr );
}
}
$buffer_A = $buffer;
/**
* Action called before insert the data into database.
* To the function is passed an array with submitted data.
*/
do_action( 'cpappb_process_data_before_insert', $params );
// insert into database
//---------------------------
$to = $this->get_option('cu_user_email_field', CP_APPBOOK_DEFAULT_cu_user_email_field);
$rows_affected = $wpdb->insert( $wpdb->prefix.$this->table_messages, array( 'formid' => $this->item,
'time' => current_time('mysql'),
'ipaddr' => (CP_APPBOOK_DEFAULT_track_IP?$_SERVER['REMOTE_ADDR']:''),
'notifyto' => (@$_POST[$to.$sequence]?$_POST[$to.$sequence]:''),
'posted_data' => serialize($params),
'data' =>$buffer_A
) );
if (!$rows_affected)
{
echo 'Error saving data! Please try again.';
exit;
}
$myrows = $wpdb->get_results( "SELECT MAX(id) as max_id FROM ".$wpdb->prefix.$this->table_messages );
$item_number = $myrows[0]->max_id;
// Call action for data processing
//---------------------------------
$params[ 'itemnumber' ] = $item_number;
/**
* Action called after inserted the data into database.
* To the function is passed an array with submitted data.
*/
do_action_ref_array( 'cpappb_process_data', array(&$params) );
$wpdb->update( $wpdb->prefix.$this->table_messages,
array( 'posted_data' => serialize($params) ),
array ( 'id' => $item_number),
array( '%s' ),
array( '%d' )
);
$this->ready_to_go_reservation($item_number, "", $params);
$_SESSION[ 'cp_cff_form_data' ] = $item_number;
if (is_admin())
return;
/**
* Filters applied to decide if the website should be redirected to the thank you page after submit the form,
* pass a boolean as parameter and returns a boolean
*/
$redirect = true;
$redirect = apply_filters( 'cpappb_redirect', $redirect );
if( $redirect )
{
header("Location: ". $this->replace_tags($this->get_option('fp_return_page', CP_APPBOOK_DEFAULT_fp_return_page), $params));
exit();
}
}
public function replace_tags ($message, $params)
{
foreach ($params as $item => $value)
{
$message = @str_replace('<'.'%'.$item.'%'.'>',(is_array($value)?(implode(", ",$value)):($value)),$message);
$message = @str_replace('%'.$item.'%',(is_array($value)?(implode(", ",$value)):($value)),$message);
}
for ($i=0;$i<500;$i++)
{
$message = str_replace('<'.'%fieldname'.$i.'%'.'>',"",$message);
$message = str_replace('%fieldname'.$i.'%',"",$message);
}
return $message;
}
public function extract_appointments($form,$data,$sequence)
{
$apps = array();
$subid = 0;
foreach($form as $field)
if ($field->ftype == 'fapp' && @$data[$field->name.$sequence] != '')
{
$apps_text = explode(';',$data[$field->name.$sequence]);
foreach($apps_text as $app_item_text)
{
$item_split = explode(' ',$app_item_text);
$subid++;
$apps[] = array (
'id' => $subid,
'cancelled' => $this->get_option('defaultstatus', ''),
'serviceindex' => $item_split[2],
'service' => $field->services[ $item_split[2] ]->name,
'duration' => $field->services[ $item_split[2] ]->duration,
'price' => $field->services[ $item_split[2] ]->price,
'date' => $item_split[0],
'slot' => $item_split[1],
'field' => $field->name
);
}
}
return $apps;
}
function extract_total_price($apps)
{
$price = 0;
foreach($apps as $app)
$price += floatval($app["price"]);
return number_format($price,2,'.','');
}
function get_appointments_text($apps)
{
$text = '';
foreach($apps as $app)
$text .= " - ".$this->format_date($app["date"])." ".$app["slot"]." (".$app["service"].")\n";
return $text;
}
function format_date($date)
{
$format = $this->get_option('date_format', '');
$format = str_replace('mm', 'm', $format);
$format = str_replace('dd', 'd', $format);
$format = str_replace('yy', 'Y', $format);
$format = str_replace('DD', 'l', $format);
$format = str_replace('MM', 'F', $format);
return date($format, strtotime($date));
}
function ready_to_go_reservation($itemnumber, $payer_email = "", $params = array())
{
global $wpdb;
$myrows = $wpdb->get_results( $wpdb->prepare("SELECT * FROM ".$wpdb->prefix.$this->table_messages." WHERE id=%d", $itemnumber) );
$mycalendarrows = $wpdb->get_results( $wpdb->prepare('SELECT * FROM '.$wpdb->prefix.$this->table_items.' WHERE `id`=%d', $myrows[0]->formid) );
$this->item = $myrows[0]->formid;
$buffer_A = $myrows[0]->data;
$buffer = $buffer_A;
if ('true' == $this->get_option('fp_inc_additional_info', CP_APPBOOK_DEFAULT_fp_inc_additional_info))
{
$buffer .="ADDITIONAL INFORMATION\n"
."*********************************\n";
$basic_data = "IP: ".$myrows[0]->ipaddr."\n"
."Server Time: ".date("Y-m-d H:i:s")."\n";
/**
* Includes additional information to the email's message,
* are passed two parameters: the basic information, and the IP address
*/
$basic_data = apply_filters( 'cpappb_additional_information', $basic_data, $myrows[0]->ipaddr );
$params["additional"] = $basic_data;
$buffer .= $basic_data;
}
// 1- Send email
//---------------------------
$attachments = array();
$message = str_replace('<'.'%', '%', $this->get_option('fp_message', CP_APPBOOK_DEFAULT_fp_message));
$message = str_replace('%'.'>', '%', $message);
$subject = str_replace('<'.'%', '%', $this->get_option('fp_subject', CP_APPBOOK_DEFAULT_fp_subject));
$subject = str_replace('%'.'>', '%', $subject);
if ('html' == $this->get_option('fp_emailformat', CP_APPBOOK_DEFAULT_email_format))
$message = str_replace('%INFO%',str_replace("\n","
",str_replace('<','<',$buffer)),$message);
else
$message = str_replace('%INFO%',$buffer,$message);
$subject = $this->get_option('fp_subject', CP_APPBOOK_DEFAULT_fp_subject);
/**
* Attach or modify attached files,
* Example for adding ical or PDF attachments
*/
$attachments = apply_filters( 'cpappb_email_attachments', $attachments, $params, $this->item);
$params["apps"] = $this->get_appointments_text($params["apps"]);
foreach ($params as $item => $value)
{
$message = str_replace('%'.$item.'%',(is_array($value)?(implode(", ",$value)):($value)),$message);
$subject = str_replace('%'.$item.'%',(is_array($value)?(implode(", ",$value)):($value)),$subject);
if (strpos($item,"_link"))
{
foreach ($value as $filevalue)
$attachments[] = $filevalue;
}
}
$message = str_replace('%itemnumber%',$itemnumber,$message);
$subject = str_replace('%itemnumber%',$itemnumber,$subject);
$from = $this->get_option('fp_from_email', @CP_APPBOOK_DEFAULT_fp_from_email);
$to = explode(",",$this->get_option('fp_destination_emails', @CP_APPBOOK_DEFAULT_fp_destination_emails));
if ('html' == $this->get_option('fp_emailformat', CP_APPBOOK_DEFAULT_email_format)) $content_type = "Content-Type: text/html; charset=utf-8\n"; else $content_type = "Content-Type: text/plain; charset=utf-8\n";
$replyto = $myrows[0]->notifyto;
if ($this->get_option('fp_emailfrommethod', "fixed") == "customer")
$from_1 = $replyto;
else
$from_1 = $from;
if ($this->get_option('fp_emailtomethod', "fixed") == 'customer')
{
$text_addr = $params[$this->get_option('fp_destination_emails_field', "fixed")];
if (is_array($text_addr))
$text_addr = implode(", ",$text_addr);
$pattern = '/[a-zA-Z0-9_\.\+-]+@[A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/'; //regex for pattern of e-mail address
preg_match_all($pattern, $text_addr, $matches);
if (count($matches[0]) > 0)
$to = $matches[0];
}
$to = array_unique ($to);
for ($i=0;$i<500;$i++)
{
$subject = str_replace('%fieldname'.$i.'%',"",$subject);
$message = str_replace('%fieldname'.$i.'%',"",$message);
}
// if is_admin and not required emails end function here
if (is_admin() && !isset($_POST["sendemails_admin"]))
return;
foreach ($to as $item)
if (trim($item) != '')
{
if (!strpos($from_1,">"))
$from_1 = '"'.$from_1.'" <'.$from_1.'>';
wp_mail(trim($item), $subject, $message,
"From: ".$from_1."\r\n".
($replyto!=''?"Reply-To: \"$replyto\" <".$replyto.">\r\n":'').
$content_type.
"X-Mailer: PHP/" . phpversion(), $attachments);
}
if ($mycalendarrows[0]->rep_days == 0 && $mycalendarrows[0]->rep_enable == 'yes')
{
$this->check_reports(true);
}
// 2- Send copy to user
//---------------------------
$to = $this->get_option('cu_user_email_field', CP_APPBOOK_DEFAULT_cu_user_email_field);
$_POST[$to] = $myrows[0]->notifyto;
if ((trim($_POST[$to]) != '' || $payer_email != '') && 'true' == $this->get_option('cu_enable_copy_to_user', CP_APPBOOK_DEFAULT_cu_enable_copy_to_user))
{
$message = str_replace('<'.'%', '%', $this->get_option('cu_message', CP_APPBOOK_DEFAULT_cu_message));
$message = str_replace('%'.'>', '%', $message);
$subject = str_replace('<'.'%', '%', $this->get_option('cu_subject', CP_APPBOOK_DEFAULT_cu_subject));
$subject = str_replace('%'.'>', '%', $subject);
if ('html' == $this->get_option('cu_emailformat', CP_APPBOOK_DEFAULT_email_format))
$message = str_replace('%INFO%',str_replace("\n","
",str_replace('<','<',$buffer_A)).'',$message);
else
$message = str_replace('%INFO%',$buffer_A,$message);
foreach ($params as $item => $value)
{
$message = str_replace('%'.$item.'%',(is_array($value)?(implode(", ",$value)):($value)),$message);
$subject = str_replace('%'.$item.'%',(is_array($value)?(implode(", ",$value)):($value)),$subject);
}
$message = str_replace('%itemnumber%',$itemnumber,$message);
$subject = str_replace('%itemnumber%',$itemnumber,$subject);
for ($i=0;$i<500;$i++)
{
$subject = str_replace('%fieldname'.$i.'%',"",$subject);
$message = str_replace('%fieldname'.$i.'%',"",$message);
}
if (!strpos($from,">"))
$from = '"'.$from.'" <'.$from.'>';
if ('html' == $this->get_option('cu_emailformat', CP_APPBOOK_DEFAULT_email_format)) $content_type = "Content-Type: text/html; charset=utf-8\n"; else $content_type = "Content-Type: text/plain; charset=utf-8\n";
if ($_POST[$to] != '')
wp_mail(trim($_POST[$to]), $subject, $message,
"From: ".$from."\r\n".
$content_type.
"X-Mailer: PHP/" . phpversion(), $attachments);
if ($_POST[$to] != $payer_email && $payer_email != '')
wp_mail(trim($payer_email), $subject, $message,
"From: ".$from."\r\n".
$content_type.
"X-Mailer: PHP/" . phpversion(), $attachments);
}
}
function available_templates(){
if( empty( $this->CP_CFPP_global_templates ) )
{
// Get available designs
$tpls_dir = dir( plugin_dir_path( __FILE__ ).'templates' );
$this->CP_CFPP_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 )
{
if( !empty( $ini_array[ 'file' ] ) ) $ini_array[ 'file' ] = plugins_url( 'templates/'.$entry.'/'.$ini_array[ 'file' ], __FILE__ );
if( !empty( $ini_array[ 'thumbnail' ] ) ) $ini_array[ 'thumbnail' ] = plugins_url( 'templates/'.$entry.'/'.$ini_array[ 'thumbnail' ], __FILE__ );
$this->CP_CFPP_global_templates[ $ini_array[ 'prefix' ] ] = $ini_array;
}
}
}
}
return $this->CP_CFPP_global_templates;
}
function save_edition()
{
foreach ($_POST as $item => $value)
if (!is_array($value))
$_POST[$item] = stripcslashes($value);
if (isset($_POST["gotab"]) && @$_POST["gotab"] == '')
{
update_option( 'cp_cpappb_rep_enable', $_POST["cp_cpappb_rep_enable"]);
update_option( 'cp_cpappb_rep_days', $_POST["cp_cpappb_rep_days"]);
update_option( 'cp_cpappb_rep_hour', $_POST["cp_cpappb_rep_hour"]);
update_option( 'cp_cpappb_rep_emails', $_POST["cp_cpappb_rep_emails"]);
update_option( 'cp_cpappb_fp_from_email', $_POST["cp_cpappb_fp_from_email"]);
update_option( 'cp_cpappb_rep_subject', $_POST["cp_cpappb_rep_subject"]);
update_option( 'cp_cpappb_rep_emailformat', $_POST["cp_cpappb_rep_emailformat"]);
update_option( 'cp_cpappb_rep_message', $_POST["cp_cpappb_rep_message"]);
}
else if (@$_POST["gotab"] == 'fixarea')
{
update_option( 'CP_APPB_LOAD_SCRIPTS', ($_POST["ccscriptload"]=="1"?"0":"1") );
if ($_POST["cccharsets"] != '')
{
$target_charset = esc_sql($_GET["cccharsets"]);
$tables = array( $wpdb->prefix.$this->table_messages, $wpdb->prefix.$this->table_items );
foreach ($tables as $tab)
{
$myrows = $wpdb->get_results( "DESCRIBE {$tab}" );
foreach ($myrows as $item)
{
$name = $item->Field;
$type = $item->Type;
if (preg_match("/^varchar\((\d+)\)$/i", $type, $mat) || !strcasecmp($type, "CHAR") || !strcasecmp($type, "TEXT") || !strcasecmp($type, "MEDIUMTEXT"))
{
$wpdb->query("ALTER TABLE {$tab} CHANGE {$name} {$name} {$type} COLLATE {$target_charset}");
}
}
}
}
}
else
{
if (substr_count(@$_POST['editionarea'],"\\\""))
$_POST["editionarea"] = stripcslashes(@$_POST["editionarea"]);
if (@$_POST["cfwpp_edit"] == 'js')
update_option('CP_AHB_JS', base64_encode(@$_POST["editionarea"]));
else if (@$_POST["cfwpp_edit"] == 'css')
update_option('CP_AHB_CSS', base64_encode(@$_POST["editionarea"]));
}
}
function save_options()
{
global $wpdb;
$this->item = $_POST[$this->prefix."_id"];
$this->verify_nonce ($_POST["anonce"], 'cpappb_actions_admin');
$this->add_field_verify($wpdb->prefix.$this->table_items, 'calendar_language');
$this->add_field_verify($wpdb->prefix.$this->table_items, 'date_format');
$this->add_field_verify($wpdb->prefix.$this->table_items, 'vs_text_maxapp');
$this->add_field_verify($wpdb->prefix.$this->table_items, 'defaultstatus', "VARCHAR(250) DEFAULT '' NOT NULL");;
$this->add_field_verify($wpdb->prefix.$this->table_items, 'defaultpaidstatus', "VARCHAR(250) DEFAULT '' NOT NULL");
while ((substr_count($_POST['form_structure'],"\\") > 30) || substr_count($_POST['form_structure'],"\\\"title\\\":"))
foreach ($_POST as $item => $value)
if (!is_array($value))
$_POST[$item] = stripcslashes($value);
$data = array(
'form_structure' => $_POST['form_structure'],
'vs_text_maxapp' => $_POST['vs_text_maxapp'],
'calendar_language' => $_POST['calendar_language'],
'date_format' => $_POST['date_format'],
'product_name' => $_POST['product_name'],
'pay_later_label' => $_POST['pay_later_label'],
'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'],
'defaultstatus' => $_POST['defaultstatus'],
'defaultpaidstatus' => $_POST['defaultpaidstatus'],
'fp_emailtomethod' => $_POST['fp_emailtomethod'],
'fp_destination_emails_field' => @$_POST['fp_destination_emails_field'],
'cu_enable_copy_to_user' => $_POST['cu_enable_copy_to_user'],
'cu_user_email_field' => @$_POST['cu_user_email_field'],
'cu_subject' => $_POST['cu_subject'],
'cu_message' => $_POST['cu_message'],
'cu_emailformat' => $_POST['cu_emailformat'],
'fp_emailfrommethod' => $_POST['fp_emailfrommethod'],
'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_pageof' => $_POST['vs_text_pageof'],
'vs_text_submitbtn' => $_POST['vs_text_submitbtn'],
'vs_text_previousbtn' => $_POST['vs_text_previousbtn'],
'vs_text_nextbtn' => $_POST['vs_text_nextbtn'],
'cp_user_access' => serialize(@$_POST["cp_user_access"]),
'rep_enable' => $_POST['rep_enable'],
'rep_days' => $_POST['rep_days'],
'rep_hour' => $_POST['rep_hour'],
'rep_emails' => $_POST['rep_emails'],
'rep_subject' => $_POST['rep_subject'],
'rep_emailformat' => $_POST['rep_emailformat'],
'rep_message' => $_POST['rep_message'],
'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' => str_replace('#','',$_POST['cv_background']),
'cv_border' => str_replace('#','',$_POST['cv_border']),
'cv_text_enter_valid_captcha' => $_POST['cv_text_enter_valid_captcha']
);
$wpdb->update ( $wpdb->prefix.$this->table_items, $data, array( 'id' => $this->item ));
if (isset($_POST["savepublish"]))
{
echo '';
} else if (isset($_POST["savereturn"]))
{
echo '';
}
}
function get_form_field_label ($fieldid, $form)
{
foreach($form as $item)
if ($item->name == $fieldid)
{
if (isset($item->shortlabel) && $item->shortlabel != '')
return $item->shortlabel;
else
return $item->title;
}
return $fieldid;
}
function generateSafeFileName($filename) {
$filename = strtolower(strip_tags($filename));
$filename = str_replace(";","_",$filename);
$filename = str_replace("#","_",$filename);
$filename = str_replace(" ","_",$filename);
$filename = str_replace("'","",$filename);
$filename = str_replace('"',"",$filename);
$filename = str_replace("__","_",$filename);
$filename = str_replace("&","and",$filename);
$filename = str_replace("/","_",$filename);
$filename = str_replace("\\","_",$filename);
$filename = str_replace("?","",$filename);
return $filename;
}
function export_csv ()
{
if (!is_admin())
return;
global $wpdb;
$this->item = intval($this->get_param("cal"));
if ($this->item)
{
$form = json_decode($this->cleanJSON($this->get_option('form_structure', CP_APPBOOK_DEFAULT_form_structure)));
$form = $form[0];
}
else
$form = array();
$cond = '';
if ($this->get_param("search")) $cond .= " AND (data like '%".esc_sql($this->get_param("search"))."%' OR posted_data LIKE '%".esc_sql($this->get_param("search"))."%')";
if ($this->get_param("dfrom")) $cond .= " AND (`time` >= '".esc_sql($this->get_param("dfrom"))."')";
if ($this->get_param("dto")) $cond .= " AND (`time` <= '".esc_sql($this->get_param("dto"))." 23:59:59')";
if ($this->item != 0) $cond .= " AND formid=".$this->item;
$events_query = "SELECT * FROM ".$wpdb->prefix.$this->table_messages." WHERE 1=1 ".$cond." ORDER BY `time` DESC";
/**
* Allows modify the query of messages, passing the query as parameter
* returns the new query
*/
$events_query = apply_filters( 'cpappb_csv_query', $events_query );
$events = $wpdb->get_results( $events_query );
if ($this->include_user_data_csv)
$fields = array("ID", "Form ID", "Time", "IP Address", "email");
else
$fields = array("ID", "Form", "Time", "email");
$values = array();
foreach ($events as $item)
{
if ($this->include_user_data_csv)
$value = array($item->id,$this->get_option('form_name',''), $item->time, $item->ipaddr, $item->notifyto);
else
$value = array($item->id,$this->get_option('form_name',''), $item->time, $item->notifyto);
if ($item->posted_data)
$data = unserialize($item->posted_data);
else
$data = array();
$end = count($fields);
for ($i=0; $i<$end; $i++)
if (isset($data[$fields[$i]]) ){
$value[$i] = $data[$fields[$i]];
unset($data[$fields[$i]]);
}
if (is_array($data)) foreach ($data as $k => $d)
if ($k != 'apps' && $k != 'itemnumber')
{
$fields[] = $k;
$value[] = $d;
}
$values[] = $value;
}
$filename = $this->generateSafeFileName(strtolower($this->get_option('form_name','export'))).'_'.date("m_d_y");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$filename.".csv");
$end = count($fields);
for ($i=0; $i<$end; $i++)
{
$hlabel = iconv("utf-8", "ISO-8859-1//TRANSLIT//IGNORE", $this->get_form_field_label($fields[$i],$form));
echo '"'.str_replace('"','""', $hlabel).'",';
}
echo "\n";
foreach ($values as $item)
{
for ($i=0; $i<$end; $i++)
{
if (!isset($item[$i]))
$item[$i] = '';
if (is_array($item[$i]))
$item[$i] = implode($item[$i],',');
$item[$i] = iconv("utf-8", "ISO-8859-1//TRANSLIT//IGNORE", $item[$i]);
echo '"'.str_replace('"','""', $item[$i]).'",';
}
echo "\n";
}
exit;
}
public function setId($id)
{
$this->item = $id;
}
public function translate_json($str)
{
$form_data = json_decode($this->cleanJSON($str));
$form_data[1][0]->title = __($form_data[1][0]->title,'cpappb');
$form_data[1][0]->description = __($form_data[1][0]->description,'cpappb');
for ($i=0; $i < count($form_data[0]); $i++)
{
$form_data[0][$i]->title = __($form_data[0][$i]->title,'cpappb');
$form_data[0][$i]->userhelpTooltip = __($form_data[0][$i]->userhelpTooltip,'cpappb');
$form_data[0][$i]->userhelp = __($form_data[0][$i]->userhelp,'cpappb');
if ($form_data[0][$i]->ftype == 'fCommentArea')
$form_data[0][$i]->userhelp = __($form_data[0][$i]->userhelp,'cpappb');
else
if ($form_data[0][$i]->ftype == 'fradio' || $form_data[0][$i]->ftype == 'fcheck' || $form_data[0][$i]->ftype == 'fradio')
{
for ($j=0; $j < count($form_data[0][$i]->choices); $j++)
$form_data[0][$i]->choices[$j] = __($form_data[0][$i]->choices[$j],'cpappb');
}
}
$str = json_encode($form_data);
return $str;
}
private function get_records_csv($formid, $form_name = "")
{
global $wpdb;
$saved_item = $this->item;
$this->item = $formid;
$last_sent_id = get_option('cp_cpappb_last_sent_id_'.$formid, '0');
$events = $wpdb->get_results(
$wpdb->prepare("SELECT * FROM ".$wpdb->prefix.$this->table_messages." WHERE formid=%d AND id>%d ORDER BY id ASC",$formid,$last_sent_id)
);
if ($wpdb->num_rows <= 0) // if no rows, return empty
return '';
if ($this->item)
{
$form = json_decode($this->cleanJSON($this->get_option('form_structure', CP_APPBOOK_DEFAULT_form_structure)));
$form = $form[0];
}
else
$form = array();
$buffer = '';
if ($this->include_user_data_csv)
$fields = array("Submission ID", "Form", "Time", "IP Address", "email");
else
$fields = array("Submission ID", "Form", "Time", "email");
$values = array();
foreach ($events as $item)
{
if ($this->include_user_data_csv)
$value = array($item->id, $form_name, $item->time, $item->ipaddr, $item->notifyto);
else
$value = array($item->id, $form_name, $item->time, $item->notifyto);
$last_sent_id = $item->id;
if ($item->posted_data)
$data = unserialize($item->posted_data);
else
$data = array();
$end = count($fields);
for ($i=0; $i<$end; $i++)
if (isset($data[$fields[$i]]) ){
$value[$i] = $data[$fields[$i]];
unset($data[$fields[$i]]);
}
if (is_array($data)) foreach ($data as $k => $d)
if ($k != 'apps' && $k != 'itemnumber')
{
$fields[] = $k;
$value[] = $d;
}
$values[] = $value;
}
update_option('cp_cpappb_last_sent_id_'.$formid, $last_sent_id);
$end = count($fields);
for ($i=0; $i<$end; $i++)
{
$hlabel = iconv("utf-8", "ISO-8859-1//TRANSLIT//IGNORE", $this->get_form_field_label($fields[$i],$form));
$buffer .= '"'.str_replace('"','""', $hlabel).'",';
}
$buffer .= "\n";
foreach ($values as $item)
{
for ($i=0; $i<$end; $i++)
{
if (!isset($item[$i]))
$item[$i] = '';
if (is_array($item[$i]))
$item[$i] = implode($item[$i],',');
$item[$i] = iconv("utf-8", "ISO-8859-1//TRANSLIT//IGNORE", $item[$i]);
$buffer .= '"'.str_replace('"','""', $item[$i]).'",';
}
$buffer .= "\n";
}
$this->item = $saved_item;
return $buffer;
}
private function check_reports($skip_verification = false) {
global $wpdb;
$last_verified = get_option('cp_cpappb_last_verified','');
if ( $skip_verification || $last_verified == '' || $last_verified < date("Y-m-d H:i:s", strtotime("-1 minutes")) ) // verification to don't check too fast to avoid overloading the site
{
update_option('cp_cpappb_last_verified',date("Y-m-d H:i:s"));
// global reports for all forms
if (get_option('cp_cpappb_rep_enable', 'no') == 'yes' && get_option('cp_cpappb_rep_days', '') != '' && get_option('cp_cpappb_rep_emails', '') != '' )
{
$formid = 0;
$verify_after = date("Y-m-d H:i:s", strtotime("-".get_option('cp_cpappb_rep_days', '')." days"));
$last_sent = get_option('cp_cpappb_last_sent'.$formid, '');
if ($last_sent == '' || $last_sent < $verify_after) // check if this form needs to check for a new report
{
update_option('cp_cpappb_last_sent'.$formid, date("Y-m-d ".(get_option('cp_cpappb_rep_hour', '')<'10'?'0':'').get_option('cp_cpappb_rep_hour', '').":00:00"));
$text = '';
$forms = $wpdb->get_results("SELECT id,fp_from_email,form_name,rep_days,rep_hour,rep_emails,rep_subject,rep_emailformat,rep_message,rep_enable FROM ".$wpdb->prefix.$this->table_items." WHERE rep_emails<>'' AND rep_enable='yes'");
$attachments = array();
foreach ($forms as $form) // for each form with the reports enabled
{
$csv = $this->get_records_csv($form->id, $form->form_name);
if ($csv != '')
{
$text = "- ".substr_count($csv,",\n\"").' submissions from '.$form->form_name."\n";
$filename = $this->generateSafeFileName(strtolower($form->form_name)).'_'.date("m_d_y");
$filename = WP_CONTENT_DIR . '/uploads/'.$filename .'.csv';
$handle = fopen($filename, 'w');
fwrite($handle,$csv);
fclose($handle);
$attachments[] = $filename;
}
}
if ('html' == get_option('cp_cpappb_rep_emailformat','')) $content_type = "Content-Type: text/html; charset=utf-8\n"; else $content_type = "Content-Type: text/plain; charset=utf-8\n";
if (count($attachments))
wp_mail( str_replace(" ","",str_replace(";",",",get_option('cp_cpappb_rep_emails',''))), get_option('cp_cpappb_rep_subject',''), get_option('cp_cpappb_rep_message','')."\n".$text,
"From: \"".get_option('cp_cpappb_fp_from_email','')."\" <".get_option('cp_cpappb_fp_from_email','').">\r\n".
$content_type.
"X-Mailer: PHP/" . phpversion(),
@$attachments);
}
}
// reports for specific forms
$forms = $wpdb->get_results("SELECT id,form_name,fp_from_email,rep_days,rep_hour,rep_emails,rep_subject,rep_emailformat,rep_message,rep_enable FROM ".$wpdb->prefix.$this->table_items." WHERE rep_emails<>'' AND rep_enable='yes'");
foreach ($forms as $form) // for each form with the reports enabled
{
$formid = $form->id;
$verify_after = date("Y-m-d H:i:s", strtotime("-".$form->rep_days." days"));
$last_sent = get_option('cp_cpappb_last_sent'.$formid, '');
if ($skip_verification || $last_sent == '' || $last_sent < $verify_after) // check if this form needs to check for a new report
{
update_option('cp_cpappb_last_sent'.$formid, date("Y-m-d ".($form->rep_hour<'10'?'0':'').$form->rep_hour.":00:00"));
$csv = $this->get_records_csv($formid, $form->form_name);
if ($csv != '')
{
$filename = $this->generateSafeFileName(strtolower($form->form_name)).'_'.date("m_d_y");
$filename = WP_CONTENT_DIR . '/uploads/'.$filename .'.csv';
$handle = fopen($filename, 'w');
fwrite($handle,$csv);
fclose($handle);
$attachments = array( $filename );
if ('html' == $form->rep_emailformat) $content_type = "Content-Type: text/html; charset=utf-8\n"; else $content_type = "Content-Type: text/plain; charset=utf-8\n";
wp_mail( str_replace(" ","",str_replace(";",",",$form->rep_emails)), $form->rep_subject, $form->rep_message,
"From: \"".$form->fp_from_email."\" <".$form->fp_from_email.">\r\n".
$content_type.
"X-Mailer: PHP/" . phpversion(),
$attachments);
}
}
} // end foreach
} // end if
} // end check_reports function
} // end class
// Auxiliar functions
// ******************************************************************
// Auxiliar functions
// ***********************************************************************
function cpappb_cleanJSON ($str)
{
$str = str_replace('&qquot;','"',$str);
$str = str_replace(' ',' ',$str);
$str = str_replace("\n",'\n',$str);
$str = str_replace("\r",'',$str);
return $str;
}
function cpappb_form_result( $atts, $content = "", $id = 0 )
{
global $wpdb;
if( $id == 0 && !empty( $_SESSION[ 'cp_cff_form_data' ] ) ) $id = $_SESSION[ 'cp_cff_form_data' ];
if( !empty( $id ) )
{
$content = html_entity_decode( $content );
$result = $wpdb->get_row( $wpdb->prepare( "SELECT form_settings.form_structure AS form_structure, form_data.data AS data, form_data.data AS data, form_data.ipaddr as ipaddr FROM ".$wpdb->prefix."cpappbk_forms"." AS form_settings,".$wpdb->prefix."cpappbk_messages"." AS form_data WHERE form_data.id=%d AND form_data.formid=form_settings.id", $id ) );
if( !is_null( $result ) )
{
$atts = shortcode_atts( array( 'fields' => '' ), $atts );
if( !empty( $atts[ 'fields' ] ) || !empty( $content ) )
{
$raw_form_str = cpappb_cleanJSON( $result->form_structure );
$form_data = json_decode( $raw_form_str );
if( is_null( $form_data ) )
{
$json = new JSON;
$form_data = $json->unserialize( $raw_form_str );
}
}
if( empty( $form_data ) )
{
return "" . preg_replace( "/\n+/", "
", $result->data ) . "
";
}
else
{
$fields = array();
foreach($form_data[0] as $item)
{
$fields[$item->name] = $item;
}
$fields[ 'ipaddr' ] = $result->ipaddr;
$result->data = unserialize( $result->data );
$str = '';
$atts[ 'fields' ] = explode( ",", str_replace( " ", "", $atts[ 'fields' ] ) );
foreach( $atts[ 'fields' ] as $field )
{
if( isset( $fields[ $field ] ) )
{
if( isset( $result->data[ $field ] ) )
{
if( is_array( $result->data[ $field ] ) ) $result->data[ $field ] = implode( ',', $result->data[ $field ] );
$str .= "{$fields[ $field ]->title} {$result->data[ $field ]}
";
}
elseif( in_array( $fields[ $field ]->ftype, array( 'fSectionBreak' ) ) )
{
$str .= "".$fields[ $field ]->title."".(( !empty($fields[ $field ]->userhelp) ) ? "
".$fields[ $field ]->userhelp."" : '' )."
";
}
}
}
if( $content != '' )
{
$replaced_values = _cpappb_replace_vars( $fields, $result->data, $content, $result->data, 'html', $id );
$str .= $replaced_values[ 'message' ];
}
return $str;
}
}
}
return '';
}
function _cpappb_extract_tags( $message )
{
$tags_arr = array();
if(
preg_match_all( "/<%(info|fieldname\d+|fieldname\d+_label|fieldname\d+_shortlabel|fieldname\d+_value|fieldname\d+_url|fieldname\d+_urls|coupon|itemnumber|final_price|payment_option|ipaddress|currentdate_mmddyyyy|currentdate_ddmmyyyy)\b(?:(?!%>).)*%>/i",
$message,
$matches
)
)
{
$tag = array();
foreach( $matches[ 0 ] as $index => $value )
{
$tag[ 'node' ] = $value;
$tag[ 'tag' ] = strtolower( $matches[ 1 ][ $index ] );
$tag[ 'if_not_empty' ] = preg_match( "/if_not_empty/i", $value );
$tag[ 'before' ] = ( preg_match( "/before\s*=\s*\{\{((?:(?!\}\}).)*)\}\}/i", $value, $match ) ) ? $match[ 1 ] : '';
$tag[ 'after' ] = ( preg_match( "/after\s*=\s*\{\{((?:(?!\}\}).)*)\}\}/i", $value, $match ) ) ? $match[ 1 ] : '';
$tag[ 'separator' ] = ( preg_match( "/separator\s*=\s*\{\{((?:(?!\}\}).)*)\}\}/i", $value, $match ) ) ? $match[ 1 ] : '';
$baseTag = ( preg_match( "/(fieldname\d+)_(label|value|shortlabel)/i", $tag[ 'tag' ], $match ) ) ? $match[ 1 ] : $tag[ 'tag' ];
if( empty( $tags_arr[ $baseTag ] ) ) $tags_arr[ $baseTag ] = array();
$tags_arr[ $baseTag ][] = $tag;
}
}
return $tags_arr;
}
function _cpappb_replace_vars( $fields, $params, $message, $buffer = '', $contentType = 'html', $itemnumber = '' )
{
// Lambda functions
$arrayReplacementFunction = create_function('&$tags, $tagName, $replacement, &$message', 'if(isset($tags[ $tagName ])){foreach( $tags[ $tagName ] as $tagData ){ $message = str_replace( $tagData[ "node" ], $tagData[ "before" ].$replacement.$tagData[ "after" ], $message );}unset( $tags[ $tagName ] );}');
$singleReplacementFunction = create_function('$tagData, $value, &$message', '$message = str_replace( $tagData[ "node" ], $tagData[ "before" ].$value.$tagData[ "after" ],$message );');
$message = str_replace( '< %', '<%', $message );
$attachments = array();
// Remove empty blocks
while( preg_match( "/<%\s*fieldname(\d+)_block\s*%>/", $message, $matches ) )
{
if( empty( $params[ 'fieldname'.$matches[ 1 ] ] ) )
{
$from = strpos( $message, $matches[ 0 ] );
if( preg_match( "/<%\s*fieldname(".$matches[ 1 ].")_endblock\s*%>/", $message, $matches_end ) )
{
$lenght = strpos( $message, $matches_end[ 0 ] ) + strlen( $matches_end[ 0 ] ) - $from;
}
else
{
$lenght = strlen( $matches[ 0 ] );
}
$message = substr_replace( $message, '', $from, $lenght );
}
else
{
$message = preg_replace( array( "/<%\s*fieldname".$matches[ 1 ]."_block\s*%>/", "/<%\s*fieldname".$matches[ 1 ]."_endblock\s*%>/"), "", $message );
}
}
$tags = _cpappb_extract_tags( $message );
if ( 'html' == $contentType )
{
$message = str_replace( "\n", "", $message );
$buffer = str_replace( array('<', '>', '\"', "\'"), array('<', '>', '"', "'" ), $buffer );
}
// Replace the INFO tags
if( !empty( $tags[ 'info' ] ) )
{
$buffer1 = $buffer;
do{
$tmp = $buffer1;
$buffer1 = preg_replace(
array(
"/^[^\n:]*:{1,2}\s*\n/",
"/\n[^\n:]*:{1,2}\s*\n/",
"/\n[^\n:]*:{1,2}\s*$/"
),
array(
"",
"\n",
""
),
$buffer1
);
}while( $buffer1 <> $tmp );
foreach( $tags[ 'info' ] as $tagData )
{
$singleReplacementFunction( $tagData, ( ( $tagData[ 'if_not_empty' ] ) ? $buffer1 : $buffer ), $message );
}
unset( $tags[ 'info' ] );
}
foreach ($params as $item => $value)
{
$value_bk = $value;
if( isset( $tags[ $item ] ) )
{
$label = ( isset( $fields[ $item ] ) && property_exists( $fields[ $item ], 'title' ) ) ? $fields[ $item ]->title : '';
$shortlabel = ( isset( $fields[ $item ] ) && property_exists( $fields[ $item ], 'shortlabel' ) ) ? $fields[ $item ]->shortlabel : '';
$value = ( !empty( $value ) || is_numeric( $value ) && $value == 0 ) ? ( ( is_array( $value ) ) ? implode( ", ", $value ) : $value ) : '';
if ( 'html' == $contentType )
{
$label = str_replace( array('<', '>', '\"', "\'"), array('<', '>', '"', "'" ), $label );
$shortlabel = str_replace( array('<', '>', '\"', "\'"), array('<', '>', '"', "'" ), $shortlabel );
$value = str_replace( array('<', '>', '\"', "\'"), array('<', '>', '"', "'" ), $value );
}
foreach( $tags[ $item ] as $tagData )
{
if( $tagData[ 'if_not_empty' ] == 0 || $value !== '' )
{
switch( $tagData[ 'tag' ] )
{
case $item:
$singleReplacementFunction( $tagData, $label.$tagData[ 'separator' ].$value, $message );
break;
case $item.'_label':
$singleReplacementFunction( $tagData, $label, $message );
break;
case $item.'_value':
$singleReplacementFunction( $tagData, $value, $message );
break;
case $item.'_shortlabel':
$singleReplacementFunction( $tagData, $shortlabel, $message );
break;
}
}
else
{
$message = str_replace( $tagData[ 'node' ], '', $message );
}
}
unset( $tags[ $item ] );
}
if( preg_match( "/_link\b/i", $item ) )
{
$attachments = array_merge( $attachments, $value_bk );
}
}
$arrayReplacementFunction( $tags, 'itemnumber', $itemnumber, $message );
$arrayReplacementFunction( $tags, 'currentdate_mmddyyyy', date("m/d/Y H:i:s"), $message );
$arrayReplacementFunction( $tags, 'currentdate_ddmmyyyy', date("d/m/Y H:i:s"), $message );
$arrayReplacementFunction( $tags, 'ipaddress', $fields[ 'ipaddr' ], $message );
// Replace coupons code
if( isset( $_REQUEST[ 'couponcode' ] ) && isset( $tags[ 'couponcode' ] ) )
{
$arrayReplacementFunction( $tags, 'couponcode', $_REQUEST[ 'couponcode' ], $message );
}
foreach( $tags as $tagArr )
{
foreach( $tagArr as $tagData )
{
$message = str_replace( $tagData[ 'node' ], '', $message );
}
}
if ( 'html' == $contentType )
{
$message = str_replace( "\n", "
", $message );
}
$message = str_replace( '\\', '', stripslashes( stripcslashes( $message ) ) );
return array( 'message' => $message, 'attachments' => $attachments );
}
?>