You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
513 lines
14 KiB
PHP
513 lines
14 KiB
PHP
<?php
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
class AWSM_Job_Openings_Mail_Customizer {
|
|
private static $instance = null;
|
|
|
|
public function __construct() {
|
|
add_action( 'awsm_jobs_notification_html_template_head', array( $this, 'template_head' ) );
|
|
add_action( 'awsm_jobs_notification_html_template_footer', array( $this, 'template_footer' ) );
|
|
}
|
|
|
|
public static function init() {
|
|
if ( is_null( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
public function template_head( $settings ) {
|
|
// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
echo AWSM_Job_Openings_UI_Builder::generate_css( self::get_reset_styles() );
|
|
echo AWSM_Job_Openings_UI_Builder::generate_css( self::get_main_styles( $settings ) );
|
|
// phpcs:enable
|
|
}
|
|
|
|
public function template_footer( $settings ) {
|
|
?>
|
|
<td style="text-align: center; padding: 30px 0;">
|
|
<?php echo nl2br( self::sanitize_content( $settings['footer_text'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
|
|
</td>
|
|
<?php
|
|
}
|
|
|
|
public static function get_default_logo() {
|
|
return AWSM_JOBS_PLUGIN_URL . '/assets/img/logo.png';
|
|
}
|
|
|
|
public static function sanitize_content( $content ) {
|
|
/**
|
|
* Filters the notification customizer allowed html for the content.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param string|array $allowed_html Allowed HTML elements and attributes, or a context name.
|
|
*/
|
|
$allowed_html = apply_filters( 'awsm_jobs_notification_customizer_allowed_html', 'post' );
|
|
|
|
return wp_kses( $content, $allowed_html );
|
|
}
|
|
|
|
public static function get_settings() {
|
|
/**
|
|
* Filters the notification customizer default values.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param array $default_values Default values.
|
|
*/
|
|
$default_values = apply_filters(
|
|
'awsm_jobs_notification_customizer_default_values',
|
|
array(
|
|
'logo' => 'default',
|
|
'base_color' => '#05BC9C',
|
|
/* translators: %1$s: Site link, %2$s: Plugin website link */
|
|
'footer_text' => sprintf( esc_html__( 'Sent from %1$s by %2$s Plugin', 'wp-job-openings' ), '<a href="{site-url}">{site-title}</a>', '<a href="https://wpjobopenings.com">' . esc_html__( 'WP Job Openings', 'wp-job-openings' ) . '</a>' ),
|
|
)
|
|
);
|
|
|
|
$settings = get_option( 'awsm_jobs_notification_customizer' );
|
|
$customizer_settings = wp_parse_args( $settings, $default_values );
|
|
return $customizer_settings;
|
|
}
|
|
|
|
public static function validate_template() {
|
|
$unsupported_versions = array( '2.0.0' );
|
|
|
|
$is_valid_header_template = awsm_jobs_is_valid_template_file( AWSM_Job_Openings::get_template_path( 'header.php', 'mail' ), $unsupported_versions );
|
|
$is_valid_footer_template = awsm_jobs_is_valid_template_file( AWSM_Job_Openings::get_template_path( 'footer.php', 'mail' ), $unsupported_versions );
|
|
|
|
if ( ! $is_valid_header_template || ! $is_valid_footer_template ) :
|
|
?>
|
|
<div class="awsm-jobs-error-container">
|
|
<div class="awsm-jobs-error">
|
|
<p>
|
|
<?php esc_html_e( 'It looks like you have overridden the mail HTML template files. This version is unsupported with the notification customizer. Please update template files for full support.', 'wp-job-openings' ); ?>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
endif;
|
|
}
|
|
|
|
public static function get_logo( $settings = array() ) {
|
|
$logo = '';
|
|
if ( empty( $settings ) ) {
|
|
$settings = self::get_settings();
|
|
}
|
|
|
|
if ( ! empty( $settings['logo'] ) ) {
|
|
$image_url = self::get_default_logo();
|
|
$img_alt = esc_html__( 'WP Job Openings', 'wp-job-openings' );
|
|
$extra_attr = '';
|
|
|
|
if ( $settings['logo'] === 'default' ) {
|
|
$extra_attr = ' width="284" height="35"';
|
|
} else {
|
|
$image_url = awsm_jobs_get_original_image_url( $settings['logo'] );
|
|
$company_name = get_option( 'awsm_job_company_name' );
|
|
$img_alt = ! empty( $company_name ) ? $company_name : get_bloginfo( 'name', 'display' );
|
|
}
|
|
$logo = sprintf( '<a href="%1$s" target="_blank"><h1><img src="%2$s" alt="%3$s"%4$s></h1></a>', esc_url( site_url( '/' ) ), esc_url( $image_url ), esc_attr( $img_alt ), $extra_attr );
|
|
}
|
|
/**
|
|
* Filters the notification HTML mail template logo.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param string $logo Mail logo HTML content.
|
|
* @param array $settings Notification mail customizer settings.
|
|
*/
|
|
$logo = apply_filters( 'awsm_jobs_notification_html_template_logo', $logo, $settings );
|
|
|
|
return $logo;
|
|
}
|
|
|
|
public static function get_reset_styles() {
|
|
$styles = array(
|
|
array(
|
|
'selector' => 'html, body',
|
|
'declaration' => array(
|
|
'margin' => '0 auto !important',
|
|
'padding' => '0 !important',
|
|
'height' => '100% !important',
|
|
'width' => '100% !important',
|
|
'background' => '#f1f1f1',
|
|
),
|
|
),
|
|
/* What it does: Stops email clients resizing small text. */
|
|
array(
|
|
'selector' => '*',
|
|
'declaration' => array(
|
|
'-ms-text-size-adjust' => '100%',
|
|
'-webkit-text-size-adjust' => '100%',
|
|
),
|
|
),
|
|
/* What it does: Centers email on Android 4.4. */
|
|
array(
|
|
'selector' => 'div[style*="margin: 16px 0"]',
|
|
'declaration' => array(
|
|
'margin' => '0 !important',
|
|
),
|
|
),
|
|
/* What it does: Stops Outlook from adding extra spacing to tables. */
|
|
array(
|
|
'selector' => 'table, td',
|
|
'declaration' => array(
|
|
'mso-table-lspace' => '0pt !important',
|
|
'mso-table-rspace' => '0pt !important',
|
|
),
|
|
),
|
|
/* What it does: Fixes webkit padding issue. */
|
|
array(
|
|
'selector' => 'table',
|
|
'declaration' => array(
|
|
'border-spacing' => '0 !important',
|
|
'border-collapse' => 'collapse !important',
|
|
'table-layout' => 'fixed !important',
|
|
'margin' => '0 auto !important',
|
|
),
|
|
),
|
|
/* What it does: Uses a better rendering method when resizing images in IE. */
|
|
array(
|
|
'selector' => 'img',
|
|
'declaration' => array(
|
|
'-ms-interpolation-mode' => 'bicubic',
|
|
),
|
|
),
|
|
/* What it does: Prevents Windows 10 Mail from underlining links despite inline CSS. Styles for underlined links should be inline. */
|
|
array(
|
|
'selector' => 'a',
|
|
'declaration' => array(
|
|
'text-decoration' => 'none',
|
|
),
|
|
),
|
|
/* What it does: A work-around for email clients meddling in triggered links. */
|
|
array(
|
|
'selector' => '*[x-apple-data-detectors], .unstyle-auto-detected-links *, .aBn',
|
|
'declaration' => array(
|
|
'border-bottom' => '0 !important',
|
|
'cursor' => 'default !important',
|
|
'color' => 'inherit !important',
|
|
'text-decoration' => 'none !important',
|
|
'font-size' => 'inherit !important',
|
|
'font-family' => 'inherit !important',
|
|
'font-weight' => 'inherit !important',
|
|
'line-height' => 'inherit !important',
|
|
),
|
|
),
|
|
/* What it does: Prevents Gmail from displaying a download button on large, non-linked images. */
|
|
array(
|
|
'selector' => '.a6S',
|
|
'declaration' => array(
|
|
'display' => 'none !important',
|
|
'opacity' => '0.01 !important',
|
|
),
|
|
),
|
|
/* What it does: Prevents Gmail from changing the text color in conversation threads. */
|
|
array(
|
|
'selector' => '.im',
|
|
'declaration' => array(
|
|
'color' => 'inherit !important',
|
|
),
|
|
),
|
|
/* If the above doesn't work, add a .g-img class to any image in question. */
|
|
array(
|
|
'selector' => 'img.g-img + div',
|
|
'declaration' => array(
|
|
'display' => 'none !important',
|
|
),
|
|
),
|
|
/* What it does: Removes right gutter in Gmail iOS app: https://github.com/TedGoas/Cerberus/issues/89 */
|
|
/* Create one of these media queries for each additional viewport size you'd like to fix */
|
|
/* iPhone 4, 4S, 5, 5S, 5C, and 5SE */
|
|
array(
|
|
'media_query' => '@media only screen and (min-device-width: 320px) and (max-device-width: 374px)',
|
|
'css' => array(
|
|
array(
|
|
'selector' => 'u ~ div .email-container',
|
|
'declaration' => array(
|
|
'min-width' => '320px !important',
|
|
),
|
|
),
|
|
),
|
|
),
|
|
/* iPhone 6, 6S, 7, 8, and X */
|
|
array(
|
|
'media_query' => '@media only screen and (min-device-width: 375px) and (max-device-width: 413px)',
|
|
'css' => array(
|
|
array(
|
|
'selector' => 'u ~ div .email-container',
|
|
'declaration' => array(
|
|
'min-width' => '375px !important',
|
|
),
|
|
),
|
|
),
|
|
),
|
|
/* iPhone 6+, 7+, and 8+ */
|
|
array(
|
|
'media_query' => '@media only screen and (min-device-width: 414px)',
|
|
'css' => array(
|
|
array(
|
|
'selector' => 'u ~ div .email-container',
|
|
'declaration' => array(
|
|
'min-width' => '414px !important',
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
/**
|
|
* Filters the notification HTML mail template reset styles.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param array $styles Reset styles.
|
|
*/
|
|
$styles = apply_filters( 'awsm_jobs_notification_html_template_reset_styles', $styles );
|
|
|
|
return $styles;
|
|
}
|
|
|
|
public static function get_main_styles( $settings = array() ) {
|
|
if ( empty( $settings ) ) {
|
|
$settings = self::get_settings();
|
|
}
|
|
|
|
$styles = array(
|
|
array(
|
|
'selector' => '.primary',
|
|
'declaration' => array(
|
|
'background' => '#f3a333',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.bg_white',
|
|
'declaration' => array(
|
|
'background' => '#ffffff',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.bg_light',
|
|
'declaration' => array(
|
|
'background' => '#fafafa',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.bg_black',
|
|
'declaration' => array(
|
|
'background' => '#000000',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.bg_dark',
|
|
'declaration' => array(
|
|
'background' => 'rgba(0,0,0,.8)',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.btn',
|
|
'declaration' => array(
|
|
'padding' => '14px 40px',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.btn.btn-primary',
|
|
'declaration' => array(
|
|
'border-radius' => '3px',
|
|
'background' => $settings['base_color'],
|
|
'color' => '#ffffff',
|
|
'border' => '1px solid #207E76',
|
|
'font-weight' => 'bold',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => 'h1, h2, h3, h4, h5, h6',
|
|
'declaration' => array(
|
|
'font-family' => '"Helvetica Neue", Helvetica, Arial, sans-serif',
|
|
'color' => '#1F3130',
|
|
'margin-top' => '0',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => 'body',
|
|
'declaration' => array(
|
|
'font-family' => '"Helvetica Neue", Helvetica, Arial, sans-serif',
|
|
'font-weight' => '400',
|
|
'font-size' => '16px',
|
|
'line-height' => '1.125',
|
|
'color' => '#4F5F5E',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => 'a',
|
|
'declaration' => array(
|
|
'color' => $settings['base_color'],
|
|
),
|
|
),
|
|
array(
|
|
'selector' => 'table',
|
|
'declaration' => array(
|
|
'color' => '#4F5F5E',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.logo',
|
|
'declaration' => array(
|
|
'padding' => '30px 0',
|
|
'text-align' => 'center',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.logo h1',
|
|
'declaration' => array(
|
|
'margin' => '0',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.logo h1 a',
|
|
'declaration' => array(
|
|
'color' => '#000',
|
|
'font-size' => '20px',
|
|
'font-weight' => '700',
|
|
'text-transform' => 'uppercase',
|
|
'font-family' => '"Montserrat", sans-serif',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content',
|
|
'declaration' => array(
|
|
'padding' => '40px 0',
|
|
'border-width' => '9px 1px 1px',
|
|
'border-style' => 'solid',
|
|
'border-color' => $settings['base_color'] . ' #C6CCD2 #C6CCD2',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content h2',
|
|
'declaration' => array(
|
|
'font-size' => '25px',
|
|
'margin-bottom' => '17px',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content h3',
|
|
'declaration' => array(
|
|
'font-size' => '16px',
|
|
'text-transform' => 'uppercase',
|
|
'margin-bottom' => '20px',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content ul',
|
|
'declaration' => array(
|
|
'list-style' => 'none',
|
|
'padding' => '0',
|
|
'margin' => '0',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content li',
|
|
'declaration' => array(
|
|
'display' => 'inline-block',
|
|
'margin' => '0 25px',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content li span',
|
|
'declaration' => array(
|
|
'display' => 'block',
|
|
'font-size' => '43px',
|
|
'color' => $settings['base_color'],
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.job-table td, .job-table th',
|
|
'declaration' => array(
|
|
'text-align' => 'left',
|
|
'padding' => '13px 20px',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content-in-2',
|
|
'declaration' => array(
|
|
'padding' => '30px 0',
|
|
'border-bottom' => '1px solid #D7DFDF',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content-in-3',
|
|
'declaration' => array(
|
|
'padding-top' => '30px',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.footer a',
|
|
'declaration' => array(
|
|
'color' => '#4F5F5E',
|
|
),
|
|
),
|
|
array(
|
|
'media_query' => '@media screen and (max-width: 550px)',
|
|
'css' => array(
|
|
array(
|
|
'selector' => '.logo',
|
|
'declaration' => array(
|
|
'padding' => '25px 0',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content',
|
|
'declaration' => array(
|
|
'padding' => '25px 0',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.job-table td, .job-table th',
|
|
'declaration' => array(
|
|
'padding' => '10px',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content li',
|
|
'declaration' => array(
|
|
'margin' => '0 10px',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content li span',
|
|
'declaration' => array(
|
|
'font-size' => '34px',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content-in-2',
|
|
'declaration' => array(
|
|
'padding' => '25px 0',
|
|
),
|
|
),
|
|
array(
|
|
'selector' => '.main-content-in-3',
|
|
'declaration' => array(
|
|
'padding-top' => '25px',
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
/**
|
|
* Filters the notification HTML mail template main styles.
|
|
*
|
|
* @since 2.2.0
|
|
*
|
|
* @param array $styles Main styles.
|
|
* @param array $settings Notification mail customizer settings.
|
|
*/
|
|
$styles = apply_filters( 'awsm_jobs_notification_html_template_main_styles', $styles, $settings );
|
|
|
|
return $styles;
|
|
}
|
|
}
|