content;
}
/**
*
* Tag generator
* Adds AC Repeater to the CF7 editor
*
*/
public static function acffr_add_tag_generator_acrepeater() {
if (class_exists('WPCF7_TagGenerator')) {
$tag_generator = WPCF7_TagGenerator::get_instance();
$tag_generator->add( 'acrepeater', __( 'AC Repeater', 'contact-form-7-repeater' ), array(__CLASS__,'acffr_tg_pane_acrepeater'));
} else if (function_exists('wpcf7_add_tag_generator')) {
wpcf7_add_tag_generator( 'acrepeater', __( 'AC Repeater', 'contact-form-7-repeater' ), array(__CLASS__,'wpcf7-tg-pane-ac_cf7_repeater'), array(__CLASS__,'acffr_tg_pane_acrepeater') );
}
}
function acffr_tg_pane_acrepeater($contact_form, $args = '') {
if (class_exists('WPCF7_TagGenerator')) {
$args = wp_parse_args( $args, array() );
$description = __( "Generate a form-tag that will repeat input fields %s", 'ac-cf7-form-field-repeater' );
$desc_link = ''.__( 'AC Form Field Repeater', 'ac-cf7-form-field-repeater' ).'';
?>
';
echo '<'.$tag_html_type.' id="'.$tag_id.'" '.implode(' ',$tag_html_data).' data-ac-repeater="'.$tag_id.'" class="acrepeater">';
}
else if ($form_part == '[/acrepeater]') {
echo ''.array_pop($stack).'>';
} else {
echo $form_part;
}
}
$properties['form'] = ob_get_clean();
}
return $properties;
}
/**
*
* Filter the post data
*
*/
function acffr_posted_data($posted_data){
$repeated_groups_data = json_decode(stripslashes($posted_data['_acffr_repeatable_groups']));
$this->repeated_groups_data = $repeated_groups_data;
if (is_array($repeated_groups_data) && count($repeated_groups_data) > 0) {
foreach ($repeated_groups_data as $group) {
$this->repeated_groups[] = $posted_data[$group];
foreach ($posted_data[$group] as $key => $repeat){
foreach ($repeat as $tag => $value){
$key = $key + 1;
$posted_data[$key . ' ' . $tag ] = $value;
}
}
unset($posted_data[$group]);
}
}
return $posted_data;
}
/**
*
* Filter the mail comonents
*
*/
function acffr_mail_components($components){
$acffr_mail_raw = WPCF7_Mail::get_current();
$body = $acffr_mail_raw->get('body');
$body_array = explode( "\n", $body);
$body_replaced = [];
$repeat_group = [];
$repeated_groups = [];
$repeating = false;
$repeat_group_line_num= 0;
$repeat_group_data = $this->repeated_groups_data;
foreach ($repeat_group_data as $key => $group_name){
foreach ($body_array as $num => $line){
if($line == '['.$group_name.']'){
//The repeat tag is opened
$repeating = true;
$repeat_group_line_num = $num;
}elseif ($repeating == true && $line != '[/acrepeater]'){
//we are repeating
$repeat_group[] = $line;
}elseif ($repeating == true && $line == '[/acrepeater]'){
//we are closing the repeating
$repeating = false;
}else{
$line = new WPCF7_MailTaggedText( $line );
$replaced = $line->replace_tags();
$body_replaced[$num] = $replaced;
}
}
foreach ($this->repeated_groups[$key] as $key => $repeat){
$repeated_groups[] = $repeat_group;
foreach ( $repeat as $tag => $value){
$tag = '[' . $tag . ']';
foreach ($repeated_groups[$key] as $num => $line){
$repeated_groups[$key][$num] = str_replace($tag, $value, $line);
}
}
}
}
array_splice($body_replaced, $repeat_group_line_num,0,$repeated_groups);
$body_replaced = acffr_flatten($body_replaced);
$body = implode( "\n", $body_replaced);
$components['body'] = $body;
return $components;
}
function acffr_additional_mail($additional_mail, $contact_form) {
if (!is_array($additional_mail) || !array_key_exists('mail_2', $additional_mail)) return $additional_mail;
$additional_mail['mail_2'] = $this->acffr_mail_components($additional_mail['mail_2']);
return $additional_mail;
}
}
new ACFFR_FormFieldRepeater;
/**
*
* Add the acffr hidden fields to the form.
*
*/
add_action('wpcf7_form_hidden_fields', 'acffr_form_hidden_fields',10,1);
function acffr_form_hidden_fields($hidden_fields) {
return array_merge($hidden_fields, array(
'_acffr_repeatable_group_fields' => '',
'_acffr_repeatable_groups' => '',
));
}
function acffr_flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}