shell bypass 403
<?php
/**
* Class for Form Email.
*
* @package ThemeIsle
*/
namespace ThemeIsle\GutenbergBlocks\Integration;
/**
* Form Email
*
* @since 2.0.3
*/
class Form_Email {
/**
* The main instance var.
*
* @var Form_Email|null
*/
public static $instance = null;
/**
* The instance method for the static class.
* Defines and returns the instance of the static class.
*
* @static
* @since 2.0.1
* @access public
* @return Form_Email
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
self::$instance->init();
}
return self::$instance;
}
/**
* Add email rendering actions.
*
* @return void
* @since 2.0.3
*/
public function init() {
/**
* Add filter that render the email's header.
*/
add_filter( 'otter_form_email_render_head', array( $this, 'build_head' ) );
/**
* Add filter that render the email's body.
*/
add_filter( 'otter_form_email_render_body', array( $this, 'build_body' ) );
/**
* Add filter that render the email's body for errors.
*/
add_filter( 'otter_form_email_render_body_error', array( $this, 'build_error_body' ) );
}
/**
* Create the email content.
*
* @param Form_Data_Request $form_data The form request data.
* @return string
* @since 2.0.3
*/
public function build_email( $form_data ) {
return sprintf(
'
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;" charset="utf-8"/>
<!-- view port meta tag -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>%s%s</title>
</head>
<body>
%s
%s
</body>
</html>',
esc_html__( 'Mail From: ', 'otter-blocks' ),
sanitize_email( get_site_option( 'admin_email' ) ),
apply_filters( 'otter_form_email_render_head', $form_data ),
apply_filters( 'otter_form_email_render_body', $form_data )
);
}
/**
* Create the content for the email header.
*
* @since 2.0.3
*/
public function build_head() {
return sprintf(
'
<h3>%s <a href=\"%s\">%s</a>
</h3>
<hr/>',
esc_html( __( 'Content Form submission from ', 'otter-blocks' ) ),
esc_url( get_site_url() ),
get_bloginfo( 'name', 'display' )
);
}
/**
* Create the content for the email body.
*
* @param Form_Data_Request $form_data The form request data.
* @return string
* @since 2.0.3
*/
public function build_body( $form_data ) {
$email_form_content = $form_data->get_fields();
$content = '';
$attachment_links = '';
$fields = array();
foreach ( $email_form_content as $index => $input ) {
// If the current position from 'metadata' is different from the previous one, then we have a new field.
if (
0 === $index ||
(
isset( $input['metadata']['position'] ) &&
isset( $email_form_content[ $index - 1 ]['metadata']['position'] ) &&
$email_form_content[ $index - 1 ]['metadata']['position'] !== $input['metadata']['position']
)
) {
$fields[] = array(
'label' => $input['label'],
'value' => $input['value'],
);
} else {
// Otherwise is the same as the previous one, then we have the same field.
// Add the value to the last field from the $fields array.
$fields[ count( $fields ) - 1 ]['value'] .= ', ' . $input['value'];
}
}
foreach ( $fields as $input ) {
$content .= sprintf( '<tr><td><strong>%s:</strong> %s</td></tr>', $input['label'], $input['value'] );
}
if ( $form_data->has_files_loaded_to_media_library() ) {
$attachment_links = '<tr><td><strong>' . esc_html__( 'Files loaded to media library', 'otter-blocks' ) . ':</strong> ';
foreach ( $form_data->get_files_loaded_to_media_library() as $file ) {
$attachment_links .= '<a href="' . esc_url( wp_get_attachment_url( $file['file_id'] ) ) . '">' . esc_html( $file['file_name'] ) . '</a>, ';
}
$attachment_links .= '</td></tr>';
}
return "
<table>
<tbody>
$content
$attachment_links
</tbody>
<tfoot>
<tr>
<td>
<hr/>" .
esc_html( __( 'You received this email because your email address is set in the content form settings on ', 'otter-blocks' ) ) .
'<a href="' . esc_url( get_site_url() ) . '">' . get_bloginfo( 'name', 'display' ) . '</a>
</td>
</tr>
</tfoot>
</table>
';
}
/**
* Build the error email.
*
* @param Form_Data_Request $form_data The form request data.
* @return string
* @since 2.0.3
*/
public function build_error_email( $form_data ) {
return '
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;" charset="utf-8"/>
<!-- view port meta tag -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>'
. esc_html__( 'Mail From: ', 'otter-blocks' ) . sanitize_email( get_site_option( 'admin_email' ) ) .
'</title>
</head>
<body>'
. apply_filters( 'otter_form_email_render_body_error', $form_data ) .
"<div>
<h3> <?php esc_html_e( 'Submitted form content', 'otter-blocks' ); ?> </h3>
<div style=\"padding: 10px; border: 1px dashed black;\">"
. apply_filters( 'otter_form_email_render_body', $form_data ) .
'</div>
</div>
</body>
</html>';
}
/**
* Build the body for error messages.
*
* @param Form_Data_Request $form_data The error message.
* @since 2.0.3
*/
public function build_error_body( $form_data ) {
$error_message = __( 'No error found.', 'otter-blocks' );
$title = __( 'Status Report ', 'otter-blocks' );
if ( $form_data->has_error() ) {
$error_message = '(' . $form_data->get_error_code() . ')' . Form_Data_Response::get_error_code_message( $form_data->get_error_code() );
}
$warnings = '<p>' . __( 'No warning found.', 'otter-blocks' ) . '</p>';
if ( $form_data->has_warning() ) {
$warnings = '<ul>';
foreach ( $form_data->get_warning_codes() as $warning ) {
$warnings .= '<li>';
$warnings .= '(' . esc_html( $warning['code'] ) . ') ';
$warnings .= esc_html( Form_Data_Response::get_error_code_message( $warning['code'] ) . ( ! empty( $warning['details'] ) ? '(' . $warning['details'] . ')' : '' ) );
$warnings .= '</li>';
}
$warnings .= '</ul>';
}
return sprintf(
'
<h3>%s</h3>
<div style="padding: 10px;">
<span style="color: red;font-weight: bold">%s</span>%s<br/>
<span style="font-weight: bold">%s</span>%s<br/>
<p>%s</p>
</div>',
esc_html( $title ),
esc_html( __( 'Error: ', 'otter-blocks' ) ),
esc_html( $error_message ),
esc_html( __( 'Warnings: ', 'otter-blocks' ) ),
$warnings,
esc_html( __( 'Please check your Form credential from the email provider.', 'otter-blocks' ) )
);
}
/**
* Build the body for the test email.
*
* @param Form_Data_Request $form_data The form request data.
* @return string
* @since 2.0.3
*/
public function build_test_email( $form_data ) {
return sprintf(
'
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;" charset="utf-8"/>
<!-- view port meta tag -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>%s</title>
</head>
<body>
%s
<br><br>
%s
</body>
</html>
',
sprintf(
// translators: %s is the admin email address.
__( 'Mail From: %s', 'otter-blocks' ),
sanitize_email( get_site_option( 'admin_email' ) )
),
esc_html__( 'This a test email. If you receive this email, your SMTP set-up is working for sending emails via Form Block.', 'otter-blocks' ),
sprintf(
// translators: %s is the URL of the site from which the email was sent.
__( 'Location: %s', 'otter-blocks' ),
'<a href="' . $form_data->get_data_from_payload( 'site' ) . '">' . esc_html__( 'link', 'otter-blocks' ) . '</a>'
)
);
}
/**
* Throw error on object clone
*
* The whole idea of the singleton design pattern is that there is a single
* object therefore, we don't want the object to be cloned.
*
* @access public
* @since 2.0.1
* @return void
*/
public function __clone() {
// Cloning instances of the class is forbidden.
_doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'otter-blocks' ), '1.0.0' );
}
/**
* Disable unserializing of the class
*
* @access public
* @since 2.0.1
* @return void
*/
public function __wakeup() {
// Unserializing instances of the class is forbidden.
_doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'otter-blocks' ), '1.0.0' );
}
}