".__( 'Only letters, numbers, hyphen and underscores allowed in form identificative name', 'contact-forms')."
";
}
if (substr($fid,0,2) == '__') {
$error .= "".__( 'The identificative name can\'t start with two underscores (__)', 'contact-forms')."
";
}
if (strlen($fid) > 70) {
$error .= "".__( 'You cannot use more than 70 characters for the identificative name', 'contact-forms')."
";
}
return $error;
}
function accua_forms_list_page() {
$message = '';
if (isset($_POST['accua-form-edit-action'])){
$message = _accua_forms_form_edit_action();
} else if (isset($_GET['fid'])) {
check_admin_referer('edit_posts');
$fid = stripslashes($_GET['fid']);
$error = accua_forms_validate_form_id($fid);
if ($error === '' && (isset($_GET['clonefrom'])&&$_GET['clonefrom']!=='')) {
$error .= _accua_forms_test_clonefrom($fid);
}
if ($error === '') {
return accua_forms_edit_page($fid);
} else {
return accua_forms_add_page($error);
}
}
?>
".__( 'Only letters, numbers, hyphen and underscores allowed in field identificative slug', 'contact-forms')."
";
$valid = false;
}
if(substr($post['form-field-id'], 0, 2) == '__') {
$message .= "".__( 'The field identificative slug can\'t start with two underscores (__)', 'contact-forms')."
";
$valid = false;
}
if (!empty($avail_fields[$post['form-field-id']])) {
$message .= sprintf( __( '".__( 'The identificative slug cannot be longer than 70 characters', 'contact-forms')."
";
$valid = false;
}
$filtered_data = accua_forms_fields_filter_values($post);
$message .= $filtered_data['message'];
$valid = $valid && $filtered_data['valid'];
if ($valid) {
$fill_form_fields = false;
$avail_fields[$post['form-field-id']] = $filtered_data['data'];
update_option('accua_forms_avail_fields', $avail_fields);
$message .= sprintf( __( 'Field "%s" created', 'contact-forms'), htmlspecialchars($post['form-field-id']) );
do_action('accua_forms_field_added', $avail_fields[$post['form-field-id']]);
}
if ($fill_form_fields) {
$editing = true;
$default_form_values = $filtered_data['data'];
}
break;
}
} else if (!empty($_GET['edit-fid'])) {
$fid = stripslashes($_GET['edit-fid']);
if (empty($avail_fields[$fid])) {
$message .= sprintf( __( 'Field "%s" doesn\'t exists', 'contact-forms'), htmlspecialchars($fid) );
} else {
$adding = false;
$editing = true;
$default_form_values = $avail_fields[$fid] + $default_form_values;
}
}
if ($default_form_values['version'] >= 2 && $default_form_values['type'] == 'file') {
//Show allowed_extensions value in allowed_values field
$default_form_values['allowed_values'] = $default_form_values['allowed_extensions'];
}
?>
'',
'error_message' => '',
'emails_from_name' => '',
'emails_from' => '',
'admin_emails_to' => '',
'emails_bcc' => '',
'admin_emails_subject' => '',
'admin_emails_message' => '',
'confirmation_emails_subject' => '',
'confirmation_emails_message' => '',
'layout' => 'sidebyside',
'style_margin' => '',
'style_border_color' => '',
'style_border_width' => '',
'style_border_radius' => '',
'style_background_color' => '',
'style_padding' => '',
'style_color' => '',
'style_font_size' => '',
'style_field_spacing' => '',
'style_field_border_color' => '',
'style_field_border_width' => '',
'style_field_border_radius' => '',
'style_field_background_color' => '',
'style_field_padding' => '',
'style_field_color' => '',
'style_submit_border_color' => '',
'style_submit_border_width' => '',
'style_submit_border_radius' => '',
'style_submit_background_color' => '',
'style_submit_padding' => '',
'style_submit_color' => '',
'style_submit_font_size' => '',
);
$empty_file_data = array(
'valid_extensions' => '',
'max_size' => '',
'dest_path' => '',
);
$empty_captcha_data = array(
'recaptcha_force_v1' => '',
'recaptcha_public_key' => '',
'recaptcha_private_key' => '',
);
$empty_analytics_data = array(
'analytics_track_submit' => false,
'analytics_track_fields' => false,
);
$empty_anonymize_ip_data = array(
'anonymize_ip_bytes' => 0,
);
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['accua_form_save_form_settings'])) {
check_admin_referer('accua_form_save_settings', '_nonce_accua_form_save_settings');
$post = stripslashes_deep($_POST);
$post += $empty_form_data;
$post += $empty_file_data;
$post += $empty_captcha_data;
$post += $empty_analytics_data;
$post += $empty_anonymize_ip_data;
$form_data = array();
$file_data = array();
$captcha_data = array();
$analytics_data = array();
$anonymize_ip_data = array();
foreach($empty_form_data as $key=>$val){
$form_data[$key] = $post[$key];
}
$form_data = accua_forms_filter_settings($form_data);
$file_data['valid_extensions'] = accua_forms_filter_extensions($post['valid_extensions']);
$file_data['max_size'] = $post['max_size'];
if (current_user_can('edit_files') || current_user_can('install_plugins')) {
$file_data['dest_path'] = $post['dest_path'];
} else {
$old_file_data = get_option('accua_forms_default_file_field_data',array());
$file_data['dest_path'] = isset($old_file_data['dest_path']) ? $old_file_data['dest_path'] : '';
}
$captcha_data['recaptcha_force_v1'] = (bool) $post['recaptcha_force_v1'];
$captcha_data['recaptcha_public_key'] = sanitize_text_field($post['recaptcha_public_key']);
$captcha_data['recaptcha_private_key'] = sanitize_text_field($post['recaptcha_private_key']);
foreach($empty_analytics_data as $key=>$val){
$analytics_data[$key] = (bool) $post[$key];
}
/* foreach($empty_anonymize_ip_data as $key=>$val){
$anonymize_ip_data[$key] = $post[$key];
} */
$anonymize_ip_bytes = (int) $post['anonymize_ip_bytes'];
if ($anonymize_ip_bytes < 0) {
$anonymize_ip_bytes = 0;
} else if ($anonymize_ip_bytes > 4) {
$anonymize_ip_bytes = 4;
}
$anonymize_ip_data['anonymize_ip_bytes'] = $anonymize_ip_bytes;
update_option('accua_forms_default_form_data', $form_data);
update_option('accua_forms_default_file_field_data', $file_data);
update_option('accua_forms_default_captcha_field_data', $captcha_data);
update_option('accua_forms_default_analytics_data', $analytics_data);
update_option('accua_forms_anonymize_ip_data', $anonymize_ip_data);
if (!empty($post['delete_previous_ip_values'])) {
global $wpdb;
$wpdb->query("UPDATE `{$wpdb->prefix}accua_forms_submissions` SET afs_ip = ''");
}
} else {
$form_data = get_option('accua_forms_default_form_data',array()) + $empty_form_data;
$file_data = get_option('accua_forms_default_file_field_data',array()) + $empty_file_data;
$captcha_data = get_option('accua_forms_default_captcha_field_data',array()) + $empty_captcha_data;
$analytics_data = get_option('accua_forms_default_analytics_data',array()) + $empty_analytics_data;
$anonymize_ip_data = get_option('accua_forms_anonymize_ip_data',array()) + $empty_anonymize_ip_data;
}
if ($captcha_data['recaptcha_force_v1']) {
$captcha_data = $empty_captcha_data;
}
?>
array(),
'title' => '',
'success_message' => '',
'error_message' => '',
'emails_from_name' => '',
'emails_from' => '',
'admin_emails_to' => '',
'emails_bcc' => '',
'admin_emails_subject' => '',
'admin_emails_message' => '',
'confirmation_emails_subject' => '',
'confirmation_emails_message' => '',
'use_ajax' => true,
'layout' => 'sidebyside',
'style_margin' => '',
'style_border_color' => '',
'style_border_width' => '',
'style_border_radius' => '',
'style_background_color' => '',
'style_padding' => '',
'style_color' => '',
'style_font_size' => '',
'style_field_spacing' => '',
'style_field_border_color' => '',
'style_field_border_width' => '',
'style_field_border_radius' => '',
'style_field_background_color' => '',
'style_field_padding' => '',
'style_field_color' => '',
'style_submit_border_color' => '',
'style_submit_border_width' => '',
'style_submit_border_radius' => '',
'style_submit_background_color' => '',
'style_submit_padding' => '',
'style_submit_color' => '',
'style_submit_font_size' => '',
);
if ($fid === false) {
return $empty_form_data;
}
$default_form_data = get_option('accua_forms_default_form_data',array());
if ($fid === null) {
return $default_form_data + $empty_form_data;
}
$forms_data = get_option('accua_forms_saved_forms', array());
if ($restore_trash) {
$trash_data = get_option('accua_forms_trash_forms', array());
if (isset($trash_data[$fid])) {
$forms_data[$fid] = $trash_data[$fid];
update_option('accua_forms_saved_forms', $forms_data);
unset($trash_data[$fid]);
update_option('accua_forms_trash_forms', $trash_data);
}
}
if (isset($forms_data[$fid])) {
$form_data = array(
'_overrided' => $forms_data[$fid]
) + $forms_data[$fid] + $default_form_data + $empty_form_data;
/*
if ($form_data['fields']) {
foreach ($form_data['fields'] as $i => $istance_data) {
// TODO: popuplate default fields data?
}
}
*/
return $form_data;
} else if ($return_empty) {
return array(
'_overrided' => array()
) + $default_form_data + $empty_form_data;
} else {
return null;
}
}
function _accua_forms_style_parameters($params) {
$ret = '';
foreach ($params as $key => $value) {
$value = trim($value);
if ($value !== '') {
if (is_numeric($value)) {
$ret .= "{$key}:{$value}px;";
} else {
$ret .= "{$key}:{$value};";
}
if ($key == 'border-width') {
$ret .= "border-style:solid;";
}
}
}
return $ret;
}
/*
* generazione del form (e della preview)
* */
add_action('accua_form_alter', 'accua_forms_form_generate', -999, 2);
function accua_forms_form_generate($baseid, $form) {
if (substr($baseid, 0, 14) == '__accua-form__') {
$fid = substr($baseid,14);
$form_data = _accua_forms_get_form_data($fid, false);
/*
echo '";
*/
if ($form_data) {
$form_style = _accua_forms_style_parameters(array(
'margin' => $form_data['style_margin'],
'border-color' => $form_data['style_border_color'],
'border-width' => $form_data['style_border_width'],
'border-radius' => $form_data['style_border_radius'],
'background' => $form_data['style_background_color'],
'padding' => $form_data['style_padding'],
'color' => $form_data['style_color'],
'font-size' => $form_data['style_font_size'],
));
$field_style = _accua_forms_style_parameters(array(
'margin-bottom' => $form_data['style_field_spacing'],
'border-color' => $form_data['style_field_border_color'],
'border-width' => $form_data['style_field_border_width'],
'border-radius' => $form_data['style_field_border_radius'],
'background' => (trim($form_data['style_field_background_color']) === '')?'transparent':$form_data['style_field_background_color'],
'padding' => $form_data['style_field_padding'],
'color' => (trim($form_data['style_field_color']) === '')?$form_data['style_color']:$form_data['style_field_color'],
'font-size' => $form_data['style_font_size'],
));
$field_properties = array();
if ($field_style !== '') {
$field_properties['style'] = $field_style;
}
$submit_style = _accua_forms_style_parameters(array(
'border-color' => $form_data['style_submit_border_color'],
'border-width' => $form_data['style_submit_border_width'],
'border-radius' => $form_data['style_submit_border_radius'],
'background' => $form_data['style_submit_background_color'],
'padding' => $form_data['style_submit_padding'],
'color' => $form_data['style_submit_color'],
'font-size' => $form_data['style_submit_font_size'],
));
$submit_properties = array();
if ($submit_style !== '') {
$submit_properties['style'] = $submit_style;
}
if ($form_style !== '') {
$form->configure(array('style' => $form_style));
}
if (!empty($form_data['use_ajax'])){
$form->configure(array(
"accua_ajax" => 1,
));
}
$add_submit = true;
$fieldset_open = false;
$avail_fields = get_option('accua_forms_avail_fields', array());
foreach ($form_data['fields'] as $istance_data) {
if (empty($avail_fields[$istance_data['ref']])) {
$field_data = array();
if (!empty($istance_data['ref'])) {
if ($istance_data['ref'] == '__fieldset-begin') {
$field_data = array(
'id' => '__fieldset-begin',
'name' => __('Fieldset begin', 'contact-forms'),
'type' => 'fieldset-begin',
'description' => '',
);
} else if ($istance_data['ref'] == '__fieldset-end') {
$field_data = array(
'id' => '__fieldset-end',
'name' => __('Fieldset end', 'contact-forms'),
'type' => 'fieldset-end',
'description' => '',
);
}
}
} else {
$field_data = $avail_fields[$istance_data['ref']];
}
$field_data += array(
'version' => 1,
'id' => '__html',
'name' => __( 'Custom HTML content', 'contact-forms'),
'type' => 'html',
'description' => __('Use this special field to inject raw HTML in the form. You can use this multiple times.', 'contact-forms'),
'default_value' => '',
'allowed_values' => '',
'allowed_extensions' => '',
);
$istance_data += array(
'version' => 1,
);
if ($field_data['type'] == 'file') {
if ($field_data['version'] < 2) {
$field_data['allowed_extensions'] = $field_data['allowed_values'];
}
if ($istance_data['version'] < 2 && isset($istance_data['allowed_values'])) {
$istance_data['allowed_extensions'] = $istance_data['allowed_values'];
}
}
/* prendo i dati relativi ai campi di tipo date
lo faccio prima, così default value in questo modo viene sovrascritto se un campo è di un tipo diverso
NB: se i campi sono già sovrascritti, si trovano già in istance_data */
if ($field_data['type'] == 'date'){
$istance_data += array(
'default_value' => $field_data['default_date_value'],
'min_date' => $field_data['min_date'],
'max_date' => $field_data['max_date'],
);
}
$istance_data += array(
'istance_id' => $field_data['id'],
'widget_number' => '',
'ref' => $field_data['id'],
'label' => $field_data['name'],
'default_value' => $field_data['default_value'], /* viene impostato il valore di defualt se non è un campo data */
'allowed_values' => $field_data['allowed_values'],
'allowed_extensions' => $field_data['allowed_extensions'],
);
$element = NULL;
$element_conf = NULL;
$allowed_val = trim($istance_data['allowed_values']);
if ($field_data['type'] == 'post-multicheckbox' || $field_data['type'] == 'post-select') {
$posts = accua_get_pages($allowed_val);
$allowed_values = array();
foreach ($posts as $p) {
//$allowed_values[$p->ID] = apply_filters( 'the_title', $p->post_title, $p->ID );
$allowed_values[$p->ID] = $p->post_title;
}
} else {
if ($field_data['type'] == 'file') {
$filedata = get_option('accua_forms_default_file_field_data',array());
$filedata += array(
'valid_extensions' => '',
'max_filesize' => '',
'dest_path' => '',
);
$allowed_val = accua_forms_filter_extensions($istance_data['allowed_extensions']);
if ($allowed_val == '') {
$allowed_val = accua_forms_filter_extensions($filedata['valid_extensions']);
}
}
$allowed_val = explode("\n",$allowed_val);
$allowed_values = array();
foreach ($allowed_val as $val) {
$val = explode('|',$val,2);
$val[0] = trim($val[0]);
/*
if (empty($val[0])) {
continue;
}
*/
if ((!isset($val[1])) || (trim($val[1])==='')) {
if ($val[0] === '') {
continue;
} else {
$val[1] = $val[0];
}
}
$allowed_values[$val[0]] = $val[1];
}
}
switch ($field_data['type']) {
case 'textarea':
$element = new Element_Textarea($istance_data['label'], $istance_data['istance_id'], $field_properties+array('cols' => '50', 'value'=>$istance_data['default_value']));
break;
case 'hidden':
$element = new Element_Hidden($istance_data['istance_id'], $istance_data['default_value']);
break;
case 'checkbox':
$lab = $istance_data['label'];
if (!empty($istance_data['required'])) {
$lab .= ' | ',$replace_map['__submitted_html_raw']);
}
if (!empty($params['json'])) {
$replace_map['__submitted_json'] = _accua_forms_json_encode($replace_map['__submitted_json_raw']);
}
if (!empty($params['email'])) {
$replace_map['__autoreply_email'] = implode('; ', $replace_map['__autoreply_email_raw']);
}
}
add_filter('accua_form_validate', 'accua_forms_validation_handler', 10, 4);
function accua_forms_validation_handler($valid, $submittedID, $submittedData, $form){
if (substr($submittedID, 0, 14) == '__accua-form__') {
$fid = substr($submittedID,14);
$form_data = _accua_forms_get_form_data($fid, false);
if ($form_data) {
return apply_filters('accua_forms_validation', $valid, $fid, $submittedData, $form);
}
}
return $valid;
}
function accua_forms_anonymize_ip($ip) {
$ip = (string) $ip;
$anonymize_ip_data = get_option('accua_forms_anonymize_ip_data',array());
if (empty($anonymize_ip_data['anonymize_ip_bytes'])) {
return $ip;
}
switch ($anonymize_ip_data['anonymize_ip_bytes']) {
case 1:
$ip = preg_replace('/\.[^.]+$/', '.xxx', $ip);
break;
case 2:
$ip = preg_replace('/\.[^.]+\.[^.]+$/', '.xxx.xxx', $ip);
break;
case 3:
$ip = preg_replace('/\.[^.]+\.[^.]+\.[^.]+$/', '.xxx.xxx.xxx', $ip);
break;
case 4:
$ip = '';
}
return $ip;
}
add_action('accua_form_submit', 'accua_forms_form_submission_handler', -10, 3);
function accua_forms_form_submission_handler($submittedID, $submittedData, $form) {
if (empty($GLOBALS['wp_rewrite'])) {
$GLOBALS['wp_rewrite'] = new WP_Rewrite();
}
if (!class_exists('AccuaConditionalReplacer')){
require_once('AccuaConditionalReplacer.php');
}
if (substr($submittedID, 0, 14) == '__accua-form__') {
$fid = substr($submittedID,14);
$form_data = _accua_forms_get_form_data($fid, false);
if ($form_data) {
global $wpdb;
$time = time();
$afs_stats = _accua_forms_json_encode(array(
'user_agent' => $form->stats['user_agent'],
'platform' => $form->stats['platform'],
'tentatives' => $form->stats['tentatives'],
'submit_method' => $form->stats['submit_method'],
));
$anonymized_ip = accua_forms_anonymize_ip($form->stats['ip']);
$insert_ret = $wpdb->insert(
$wpdb->prefix . 'accua_forms_submissions',
array (
'afs_form_id' => (string) $fid,
'afs_post_id' => (string) $form->stats['pid'],
'afs_ip' => $anonymized_ip,
'afs_uri' => (string) $form->stats['uri'],
'afs_referrer' => (string) $form->stats['referrer'],
'afs_lang' => (string) $form->stats['lang'],
'afs_created' => (string) gmdate('Y-m-d H:i:s', $form->stats['created']),
'afs_submitted' => (string) gmdate('Y-m-d H:i:s', $time),
'afs_stats' => (string) $afs_stats,
)
);
if ($insert_ret) {
$submission_id = $form->stats['submission_id'] = $wpdb->insert_id;
} else {
$submission_id = $form->stats['submission_id'] = 0;
error_log("[WordPress Contact Forms] unable to save submitted form data");
}
$review_submission_url = admin_url('admin.php').'?page=accua_forms_submissions_list&sid='.$submission_id;
$replace_map = array(
'__fid' => $fid,
'__subid' => $submission_id,
'__pid' => $form->stats['pid'],
'__ip' => $form->stats['ip'],
'__anonymized_ip' => $anonymized_ip,
'__uri' => $form->stats['uri'],
'__url' => $form->stats['url'],
'__referrer' => $form->stats['referrer'],
'__lang' => $form->stats['lang'],
'__locale' => $form->stats['locale'],
'__created' => $form->stats['created'],
'__created_day' => date('l j F Y', $form->stats['created']),
'__created_day_month_year' => date('j F Y', $form->stats['created']),
'__created_hour' => date('G:i', $form->stats['created']),
'__submitted' => $time,
'__submitted_day' => date('l j F Y', $time),
'__submitted_day_month_year' => date('j F Y', $time),
'__submitted_hour' => date('G:i', $time),
'__confirmation_emails_message' => $form_data['confirmation_emails_message'],
'__user_agent' => $form->stats['user_agent'],
'__platform' => $form->stats['platform'],
'__tentatives' => $form->stats['tentatives'],
'__submit_method' => $form->stats['submit_method'],
'__review_submission_url' => $review_submission_url,
);
$avail_fields = get_option('accua_forms_avail_fields', array());
$replace_map['__autoreply_email_raw'] = array();
$replace_map['__submitted_txt_raw'] = array();
$replace_map['__submitted_html_raw'] = array();
$replace_map['__submitted_json_raw'] = array();
$_field_data = array();
$_istance_data = array();
$field_data = array();
foreach ($submittedData as $istance_id => $value) {
if (empty($form_data['fields'][$istance_id])) {
continue;
}
$istance_data = $form_data['fields'][$istance_id];
if (empty($avail_fields[$istance_data['ref']])) {
$fieldset_data = array();
if (!empty($istance_data['ref'])) {
if ($istance_data['ref'] == '__fieldset-begin') {
$field_data = array(
'id' => '__fieldset-begin',
'name' => __('Fieldset begin', 'contact-forms'),
'type' => 'fieldset-begin',
'description' => '',
);
} else if ($istance_data['ref'] == '__fieldset-end') {
$field_data = array(
'id' => '__fieldset-end',
'name' => __('Fieldset end', 'contact-forms'),
'type' => 'fieldset-end',
'description' => '',
);
}
}
} else {
$field_data = $avail_fields[$istance_data['ref']];
}
$field_data += array(
'id' => '__html',
'name' => __( 'Custom HTML content', 'contact-forms'),
'type' => 'html',
'description' => __( 'Use this special field to inject raw HTML in the form. You can use this multiple times.', 'contact-forms'),
'default_value' => '',
'allowed_values' => '',
);
/*
echo "\n";
*/
$istance_data += array(
'istance_id' => $field_data['id'],
'widget_number' => '',
'ref' => $field_data['id'],
'label' => $field_data['name'],
'default_value' => $field_data['default_value'],
'allowed_values' => $field_data['allowed_values'],
);
$type = $field_data['type'];
$file_download_url = '';
switch ($field_data['type']) {
case 'checkbox':
case 'submit':
if (empty($value)) {
$replace_map[$istance_data['istance_id']] = $value = '';
} else {
if (empty($istance_data['default_value'])) {
$replace_map[$istance_data['istance_id']] = 'Checked';
$value = '1';
} else {
$replace_map[$istance_data['istance_id']] = $value = $istance_data['default_value'];
}
}
break;
case 'multiselect':
case 'multicheckbox':
case 'select':
case 'radio':
$el = $form->getElementByName($istance_id);
$opts = $el->getOptions();
if (!is_array($value)) {
$value = array($value);
}
$label = array();
foreach ($value as $val) {
if (isset($opts[$val])) {
$label[] = $opts[$val];
}
}
$replace_map['__label_'.$istance_data['istance_id']] = implode(", ", $label);
$replace_map[$istance_data['istance_id']] = implode(', ',$value);
$value = implode('|',$value);
break;
case 'post-multicheckbox':
if (is_array($value) && $value) {
$el = $form->getElementByName($istance_id);
$opts = $el->getOptions();
$value2 = array();
$titles = array();
$ids = array();
$urls = array();
foreach ($value as $val) {
if (isset($opts[$val])) {
$titles[] = $opts[$val];
$ids[] = $value;
$urls[] = get_permalink($value);
$value2[] = $val . ': ' . trim(preg_replace('/[\s\n\r]+/', ' ', $opts[$val]));
}
}
$replace_map['__label_'.$istance_data['istance_id']] = $replace_map['__post_title_'.$istance_data['istance_id']] = implode("\n", $titles);
$replace_map['__post_id_'.$istance_data['istance_id']] = implode("\n", $ids);
$replace_map['__post_url_'.$istance_data['istance_id']] = implode("\n", $urls);
$replace_map[$istance_data['istance_id']] = $value = implode("\n", $value2);
} else {
$replace_map['__label_'.$istance_data['istance_id']] = $replace_map['__post_title_'.$istance_data['istance_id']] = '';
$replace_map['__post_id_'.$istance_data['istance_id']] = '';
$replace_map['__post_url_'.$istance_data['istance_id']] = '';
$replace_map[$istance_data['istance_id']] = $value = '';
}
break;
case 'post-select':
if ($value !== '') {
$el = $form->getElementByName($istance_id);
$opts = $el->getOptions();
if (isset($opts[$value])) {
$replace_map['__label_'.$istance_data['istance_id']] = $replace_map['__post_title_'.$istance_data['istance_id']] = $opts[$value];
$replace_map['__post_id_'.$istance_data['istance_id']] = $value;
$replace_map['__post_url_'.$istance_data['istance_id']] = get_permalink($value);
$value = $value . ': ' . trim(preg_replace('/[\s\n\r]+/', ' ', $opts[$value]));
} else {
$replace_map['__label_'.$istance_data['istance_id']] = $replace_map['__post_title_'.$istance_data['istance_id']] = '';
$replace_map['__post_id_'.$istance_data['istance_id']] = '';
$replace_map['__post_url_'.$istance_data['istance_id']] = '';
$value = '';
}
}
$replace_map[$istance_data['istance_id']] = $value;
break;
case 'autoreply_email':
if ($value !== '') {
$replace_map['__autoreply_email_raw'][] = $value;
}
$replace_map[$istance_data['istance_id']] = $value;
break;
case 'file':
//TODO: move temp file to "{$submission_id}_{$field_data['id']}_{$file['name']}"; value is $file['name']
$buildid = $submittedData['_AccuaForm_buildID'];
$file = $form->getFile($istance_id);
if ($value !== null && $value !== '' && $file) {
if ($form->renameFile($istance_id, "{$submission_id}_{$field_data['id']}_{$file['name']}")) {
$urlfield = rawurlencode($istance_data['istance_id']);
$urlfile = rawurlencode($value);
$file_download_url = admin_url('admin-ajax.php') . "?action=accua_forms_download_submitted_file&subid={$submission_id}&field={$urlfield}&file={$urlfile}";
}
}
$replace_map[$istance_data['istance_id']] = $value;
$replace_map['__download_'.$istance_data['istance_id']] = $file_download_url;
break;
case 'password':
case 'password-and-confirm':
$value = trim($value);
$replace_map[$istance_data['istance_id']] = $value;
$type = 'hashed-password';
if ($value !== '') {
$value = wp_hash_password($value);
}
$replace_map['__hashed_'.$istance_data['istance_id']] = $value;
break;
default:
$replace_map[$istance_data['istance_id']] = $value;
}
switch ($field_data['type']) {
case 'file':
$replace_map['__submitted_txt_raw'][$istance_data['istance_id']] = "{$istance_data['istance_id']}\t$value\t$file_download_url";
$replace_map['__submitted_json_raw'][$istance_data['istance_id']] = "$value\t$file_download_url";
$replace_map['__submitted_html_raw'][$istance_data['istance_id']] = "{$istance_data['istance_id']} | ".htmlspecialchars($value)."";
break;
case 'email':
case 'autoreply_email':
$replace_map['__submitted_txt_raw'][$istance_data['istance_id']] = "{$istance_data['istance_id']}\t$value";
$replace_map['__submitted_json_raw'][$istance_data['istance_id']] = $value;
$replace_map['__submitted_html_raw'][$istance_data['istance_id']] = "{$istance_data['istance_id']} | ".htmlspecialchars($value)."";
break;
case 'submit':
break;
case 'colorpicker':
$replace_map['__submitted_txt_raw'][$istance_data['istance_id']] = "{$istance_data['istance_id']}\t$value";
$replace_map['__submitted_json_raw'][$istance_data['istance_id']] = $value;
if ($value === '') {
$value_html = '';
} else {
$value_esc = htmlspecialchars($value, ENT_QUOTES);
$value_html = "█ $value_esc";
}
$replace_map['__submitted_html_raw'][$istance_data['istance_id']] = "{$istance_data['istance_id']} | $value_html";
break;
case 'password':
case 'password-and-confirm':
break;
default:
$replace_map['__submitted_txt_raw'][$istance_data['istance_id']] = "{$istance_data['istance_id']}\t$value";
$replace_map['__submitted_json_raw'][$istance_data['istance_id']] = $value;
$replace_map['__submitted_html_raw'][$istance_data['istance_id']] = "{$istance_data['istance_id']} | ".htmlspecialchars($value);
}
if ($submission_id) {
$wpdb->insert(
$wpdb->prefix . 'accua_forms_submissions_values',
array (
'afsv_sub_id' => $submission_id,
'afsv_field_id' => $istance_data['istance_id'],
'afsv_type' => $type,
'afsv_value' => $value,
),
array('%d','%s','%s','%s')
);
}
$_field_data[$istance_data['istance_id']] = $field_data;
$_istance_data[$istance_data['istance_id']] = $istance_data;
}
$replace_map['__autoreply'] = (bool) ($replace_map['__autoreply_email_raw']
&& $form_data['confirmation_emails_subject']
&& $form_data['confirmation_emails_message']);
accua_forms_aggregate_submitted_data($replace_map);
//Older undocumented filter, maintained for backward compatibility. In fact filter accua_forms_form_submission_handler is called before accua_forms_submission, but for the rest they are the same
$replace_map = apply_filters('accua_forms_form_submission_handler', $replace_map, $fid, $submittedData, $form, $_field_data, $_istance_data);
//Newer filter, with an easier name
$replace_map = apply_filters('accua_forms_submission', $replace_map, $fid, $submittedData, $form, $_field_data, $_istance_data);
$submitted_html = '| ' . $replace_map['__submitted_html'] . ' | ';
$confirmation_emails_message = $replace_map['__confirmation_emails_message'];
unset($replace_map['__submitted_html'], $replace_map['__confirmation_emails_message'], $replace_map['__submitted_txt_raw'], $replace_map['__submitted_html_raw'], $replace_map['__submitted_json_raw'], $replace_map['__autoreply_email_raw']);
$replace_map_html = array();
foreach($replace_map as $key => $value) {
$replace_map_html["!$key"] = wp_kses($value, 'post');
$replace_map_html[$key] = htmlspecialchars($value, ENT_QUOTES);
}
$replace_map['__submitted_html'] = $replace_map_html['__submitted_html'] = $replace_map_html['!__submitted_html'] = $submitted_html;
$replacer_html = new AccuaConditionalReplacer($replace_map_html);
$confirmation_emails_message = $replace_map['__confirmation_emails_message'] = $replacer_html->doReplace($confirmation_emails_message);
$replacer_html->appendPattern(array('__confirmation_emails_message' => $confirmation_emails_message, '!__confirmation_emails_message' => $confirmation_emails_message));
$replacer = new AccuaConditionalReplacer($replace_map);
$form_data_replaced = array();
$settings = array(
'emails_from_name',
'emails_from',
'admin_emails_to',
'emails_bcc',
'admin_emails_subject',
'confirmation_emails_subject',
);
foreach($settings as $i) {
$form_data_replaced[$i] = $replacer->doReplace($form_data[$i]);
}
$settings_html = array(
'success_message',
'admin_emails_message',
);
foreach($settings_html as $i) {
$form_data_replaced[$i] = $replacer_html->doReplace($form_data[$i]);
}
AccuaForm::appendSubmittedMessages(wpautop($form_data_replaced['success_message']));
$header = array("Content-Type: text/html; charset=".get_option('blog_charset'));
$emails_from = trim($form_data_replaced['emails_from']);
if (strpos($emails_from, '@') !== false) {
if ((strpos($emails_from, '<') === false) && is_email($emails_from)) {
$emails_from_name = trim($form_data_replaced['emails_from_name']);
if ($emails_from_name !== '') {
$emails_from = "=?" . get_bloginfo('charset') . "?B?" . base64_encode($emails_from_name) . "?= <$emails_from>";
}
}
$header[] = 'From: '.$emails_from;
}
if ($form_data_replaced['emails_bcc']) {
$header[] = 'Bcc: '.$form_data_replaced['emails_bcc'];
}
if ($form_data_replaced['admin_emails_to']
&& $form_data_replaced['admin_emails_subject']) {
/*
$admin_tos = explode(',', strtr($form_data_replaced['admin_emails_to'], "\n\t\r;", ',,,,'));
foreach ($admin_tos as $admin_to) {
$mail1 = wp_mail(trim($admin_to), $form_data_replaced['admin_emails_subject'], $form_data_replaced['admin_emails_message'], $header);
}
*/
$mail1 = wp_mail($form_data_replaced['admin_emails_to'], $form_data_replaced['admin_emails_subject'],''.wpautop($form_data_replaced['admin_emails_message']).'', $header);
}
if ($replace_map['__autoreply'] && $replace_map['__autoreply_email']
&& $form_data_replaced['confirmation_emails_subject']
&& $confirmation_emails_message) {
$mail2 = wp_mail($replace_map['__autoreply_email'], $form_data_replaced['confirmation_emails_subject'], ''.wpautop($confirmation_emails_message).'', $header);
}
/*
echo "";
*/
}
}
}
function accua_forms_get_submission_data($subid, $options = array()){
//TODO: Completa e usa per sostituire i campi
global $wpdb;
$subid = (int) $subid;
$options += array(
'extra' => true,
'file_format' => 'name',
);
$ret = array();
if ($options['extra']) {
$query1 = "SELECT *
FROM `{$wpdb->prefix}accua_forms_submissions`
WHERE afs_id = $subid";
$data = $wpdb->get_row($query1);
if (!empty($data)) {
$created = $data->afs_created;
$created[10] = 'T';
$created.='.00+00:00';
$created = strtotime($created);
$submitted = $data->afs_submitted;
$submitted[10] = 'T';
$submitted.='.00+00:00';
$submitted = strtotime($submitted);
if ($data->afs_stats) {
$stats = json_decode($data->afs_stats, true);
if (!$stats) {
$stats = array();
}
} else {
$stats = array();
}
$stats += array(
'user_agent' => '',
'platform' => '',
'tentatives' => '',
'submit_method' => '',
);
$ret += array(
'__fid' => $data->afs_form_id,
'__subid' => $subid,
'__pid' => $data->afs_post_id,
'__ip' => $data->afs_ip,
'__anonymized_ip' => accua_forms_anonymize_ip($data->afs_ip),
'__uri' => $data->afs_uri,
'__referrer' => $data->afs_referrer,
'__lang' => $data->afs_lang,
'__created' => $created,
'__created_day' => date('l j F Y', $created),
'__created_hour' => date('G:i', $created),
'__submitted' => $submitted,
'__submitted_day' => date('l j F Y', $submitted),
'__submitted_hour' => date('G:i', $submitted),
'__user_agent' => $stats['user_agent'],
'__platform' => $stats['platform'],
'__tentatives' => $stats['tentatives'],
'__submit_method' => $stats['submit_method'],
);
}
}
$query2 = "SELECT *
FROM `{$wpdb->prefix}accua_forms_submissions_values`
WHERE afsv_sub_id = $subid";
$data2 = $wpdb->get_results($query2, OBJECT);
foreach ($data2 as $row) {
switch ($row->afsv_type) {
case 'file' :
if ($options['file_format'] == 'url' || $options['file_format'] == 'link') {
$fieldid = rawurlencode($row->afsv_field_id);
$filename = rawurlencode($row->afsv_value);
$url = admin_url('admin-ajax.php') . "?action=accua_forms_download_submitted_file&subid={$row->afsv_sub_id}&field={$fieldid}&file={$filename}";
if ($options['file_format'] == 'link'){
$url = htmlspecialchars($url,ENT_QUOTES);
$filename = htmlspecialchars($row->afsv_value,ENT_QUOTES);
$fielddata = "{$filename}";
} else {
$fielddata = $url;
}
} else { // $options['file_format'] == 'name'
$fielddata = $row->afsv_value;
}
break;
default:
$fielddata = $row->afsv_value;
}
$ret[$row->afsv_field_id] = $fielddata;
}
return $ret;
}
add_shortcode( 'accua-form', 'accua_forms_shortcode_handler' );
function accua_forms_shortcode_handler($atts, $content = '', $code = '') {
if (empty($atts['fid'])) {
return '';
}
$fid = $atts['fid'];
$form_data = _accua_forms_get_form_data($fid, false);
if (! $form_data) {
return '';
}
$fid = '__accua-form__'.$fid;
$out = '';
if (AccuaForm::getSubmittedID() == $fid) {
/* return "Form submitted.\n\nData: " . print_r(AccuaForm::getSubmittedData(), true) . ' '; */
$messages = AccuaForm::getSubmittedMessages();
if ($messages) {
$out .= ''.$messages.' ';
}
if (AccuaForm::isValid()) {
return $out;
}
$form = AccuaForm::getSubmittedForm();
} else {
$analytics_data = get_option('accua_forms_default_analytics_data',array());
$params = array(
'layout' => $form_data['layout'],
'title' => $form_data['title'],
'track_submit' => !empty($analytics_data['analytics_track_submit']),
'track_fields' => !empty($analytics_data['analytics_track_fields']),
);
$form = AccuaForm::create($fid, $params);
}
$out .= $form->render(true);
$doing_ajax = function_exists('wp_doing_ajax') ? wp_doing_ajax() : (defined( 'DOING_AJAX' ) && DOING_AJAX);
if ($doing_ajax && ($_REQUEST['action'] === 'wpseo_filter_shortcodes')) {
$strip_regexp = '/( |