charset=UTF-8' . "\r\n";
// Send email to user.
$email_sent = wp_mail( $email_fields['email_to'], $email_fields['email_subject'], $email_fields['email_content'], $headers );
$response['sent_user_email'] = $email_sent;
// Send email to admin.
if ( isset( $settings['enable_admin_email'] ) && 'yes' === $settings['enable_admin_email'] ) {
// translators: %s: site name and admin email.
$admin_headers = sprintf( 'From: %s <%s>' . "\r\n", $blogname, $admin_email );
// translators: %s: admin email.
$admin_headers .= sprintf( 'Reply-To: %s' . "\r\n", $admin_email );
$admin_headers .= 'Content-Type: text/html; charset=UTF-8' . "\r\n";
$admin_email_sent = wp_mail( $email_fields['admin_email_to'], $email_fields['admin_email_subject'], $email_fields['admin_email_content'], $admin_headers );
$response['sent_admin_email'] = $admin_email_sent;
}
/**
* Fires just after the notification email sent.
*
* @since 1.5.0
*
* @param object $settings Module settings.
*/
do_action( 'pp_rf_email_sent', $settings );
if ( ! $email_sent || ( isset( $admin_email_sent ) && ! $admin_email_sent ) ) {
$response['code'] = 'email_failed';
$response['message'] = __( 'An error occurred sending email!', 'powerpack' );
$response['error'] = true;
}
return $response;
}
/**
* Sanitize field.
*
* Sanitizes the field value.
*
* @since 1.5.0
* @access private
*
* @param array $field An array of field data.
* @param string $value Field value.
*
* @return string $value Sanitized field value.
*/
private function sanitize_field( $field, $value ) {
$field_type = $field['type'];
switch ( $field_type ) {
case 'text':
case 'password':
case 'hidden':
case 'search':
case 'checkbox':
case 'radio':
case 'select':
$value = sanitize_text_field( $value );
break;
case 'url':
$value = esc_url_raw( $value );
break;
case 'textarea':
$value = sanitize_textarea_field( $value );
break;
case 'email':
$value = sanitize_email( $value );
break;
default:
$value = apply_filters( "pp_rf_sanitize_{$field_type}", $value, $field );
}
return $value;
}
/**
* Replace tags.
*
* Replaces merge tags in fields with their original value.
*
* @since 1.5.0
* @access private
*
* @param string $field_value Field value.
* @param Object $widget Widget object.
* @return string $value Original field value.
*/
private function replace_tags( $field_value, $widget ) {
$site_info = $widget->get_site_info();
return preg_replace_callback(
'/{{(.*?)}}/i',
function( $matches ) use ( $site_info ) {
$value = $matches[0];
if ( isset( $this->form_fields[ $matches[1] ] ) ) {
$value = $this->form_fields[ $matches[1] ]['value'];
} elseif ( isset( $site_info[ $matches[1] ] ) ) {
$value = $site_info[ $matches[1] ];
}
return $value;
},
$field_value
);
}
/**
* Replace content tags.
*
* Replaces merge tags in email content field with their value.
*
* @since 1.5.0
* @access private
*
* @param string $email_content Email content.
*
* @return string $email_content Email content with actual value.
*/
private function replace_content_tags( $email_content ) {
$email_content = do_shortcode( $email_content );
$all_fields_tag = '{{all-fields}}';
if ( false !== strpos( $email_content, $all_fields_tag ) ) {
$text = '
';
foreach ( $this->form_fields as $field ) {
$text .= $this->field_formatted( $field ) . '
';
}
$email_content = str_replace( $all_fields_tag, $text, $email_content );
}
return $email_content;
}
/**
* Field formatted.
*
* Returns field value with it's label.
*
* @since 1.5.0
* @access private
*
* @param array $field An array of field data.
*
* @return string $formatted Field label with value.
*/
private function field_formatted( $field ) {
$formatted = '';
if ( ! empty( $field['label'] ) ) {
// translators: %s: Field Label.
$formatted = sprintf( '%s: %s', $field['label'], $field['value'] );
} elseif ( ! empty( $field['value'] ) ) {
// translators: %s: Value.
$formatted = sprintf( '%s', $field['value'] );
}
return $formatted;
}
/**
* Get Widget Setting data.
*
* @since 1.5.0
* @access public
* @param array $elements Element array.
* @param string $form_id Element ID.
* @return Boolean True/False.
*/
public function find_element_recursive( $elements, $form_id ) {
foreach ( $elements as $element ) {
if ( $form_id === $element['id'] ) {
return $element;
}
if ( ! empty( $element['elements'] ) ) {
$element = $this->find_element_recursive( $element['elements'], $form_id );
if ( $element ) {
return $element;
}
}
}
return false;
}
}