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; } }