File Editor
Directories:
.. (Back)
Files:
Classic.php
Compact.php
General.php
Notifications.php
Plain.php
Summary.php
Create New File
Create
Edit File: General.php
<?php namespace WPForms\Emails\Templates; use WPForms\Emails\Helpers; use WPForms\Emails\Styler; use WPForms\Helpers\Templates; /** * Base email template class. * * @since 1.5.4 */ class General { /** * Template slug. * * @since 1.5.4 * * @var string */ const TEMPLATE_SLUG = 'general'; /** * Email message. * * @since 1.5.4 * * @var string */ protected $message; /** * Content is plain text type. * * @since 1.5.4 * * @var bool */ protected $plain_text; /** * Dynamic {{tags}}. * * @since 1.5.4 * * @var array */ protected $tags; /** * Header/footer/body arguments. * * @since 1.5.4 * * @var array */ protected $args; /** * Final email content. * * @since 1.5.4 * * @var string */ protected $content; /** * Constructor. * * @since 1.5.4 * * @param string $message Email message. */ public function __construct( $message = '' ) { $this->set_message( $message ); $this->plain_text = Helpers::is_plain_text_template(); $this->set_initial_args(); } /** * Set initial arguments to use in a template. * * @since 1.5.4 */ public function set_initial_args() { $header_args = [ 'title' => \esc_html__( 'WPForms', 'wpforms-lite' ), ]; if ( ! $this->plain_text ) { $header_args['header_image'] = $this->get_header_image(); } $args = [ 'header' => $header_args, 'body' => [ 'message' => $this->get_message() ], 'footer' => [], 'style' => [], ]; $args = \apply_filters( 'wpforms_emails_templates_general_set_initial_args', $args, $this ); $this->set_args( $args ); } /** * Get the template slug. * * @since 1.5.4 * * @return string */ public function get_slug() { return static::TEMPLATE_SLUG; } /** * Get the template parent slug. * * @since 1.5.4 * * @return string */ public function get_parent_slug() { return self::TEMPLATE_SLUG; } /** * Get the message. * * @since 1.5.4 * * @return string */ public function get_message() { return \apply_filters( 'wpforms_emails_templates_general_get_message', $this->message, $this ); } /** * Get the dynamic tags. * * @since 1.5.4 * * @return array */ public function get_tags() { return \apply_filters( 'wpforms_emails_templates_general_get_tags', $this->tags, $this ); } /** * Get header/footer/body arguments * * @since 1.5.4 * * @param string $type Header/footer/body. * * @return array */ public function get_args( $type ) { if ( ! empty( $type ) ) { return isset( $this->args[ $type ] ) ? apply_filters( 'wpforms_emails_templates_general_get_args_' . $type, $this->args[ $type ], $this ) : []; } return apply_filters( 'wpforms_emails_templates_general_get_args', $this->args, $this ); } /** * Set email message. * * @since 1.5.4 * * @param string $message Email message. * * @return General */ public function set_message( $message ) { $message = \apply_filters( 'wpforms_emails_templates_general_set_message', $message, $this ); if ( ! \is_string( $message ) ) { return $this; } $this->message = $message; return $this; } /** * Set the dynamic tags. * * @since 1.5.4 * * @param array $tags Tags to set. * * @return General */ public function set_tags( $tags ) { $tags = \apply_filters( 'wpforms_emails_templates_general_set_tags', $tags, $this ); if ( ! \is_array( $tags ) ) { return $this; } $this->tags = $tags; return $this; } /** * Set header/footer/body/style arguments to use in a template. * * @since 1.5.4 * * @param array $args Arguments to set. * @param bool $merge Merge the arguments with existing once or replace. * * @return General */ public function set_args( $args, $merge = true ) { $args = \apply_filters( 'wpforms_emails_templates_general_set_args', $args, $this ); if ( empty( $args ) || ! \is_array( $args ) ) { return $this; } foreach ( $args as $type => $value ) { if ( ! \is_array( $value ) ) { continue; } if ( ! isset( $this->args[ $type ] ) || ! \is_array( $this->args[ $type ] ) ) { $this->args[ $type ] = []; } $this->args[ $type ] = $merge ? \array_merge( $this->args[ $type ], $value ) : $value; } return $this; } /** * Process and replace any dynamic tags. * * @since 1.5.4 * * @param string $content Content to make replacements in. * * @return string */ public function process_tags( $content ) { $tags = $this->get_tags(); if ( empty( $tags ) ) { return $content; } foreach ( $tags as $tag => $value ) { $content = \str_replace( $tag, $value, $content ); } return $content; } /** * Conditionally modify email template name. * * @since 1.5.4 * * @param string $name Base template name. * * @return string */ protected function get_full_template_name( $name ) { $name = \sanitize_file_name( $name ); if ( $this->plain_text ) { $name .= '-plain'; } $template = 'emails/' . $this->get_slug() . '-' . $name; if ( ! Templates::locate( $template . '.php' ) ) { $template = 'emails/' . $this->get_parent_slug() . '-' . $name; } return \apply_filters( 'wpforms_emails_templates_general_get_full_template_name', $template, $this ); } /** * Get header image URL from settings. * * @since 1.5.4 * * @return array */ protected function get_header_image() { /** * Additional 'width' key with an integer value can be added to $img array to control image's width in pixels. * This setting helps to scale an image in some versions of MS Outlook and old email clients. * Percentage 'width' values have no effect in MS Outlook and will be sanitized as integer by an email template.. * * Example: * * $img = [ * 'url' => \wpforms_setting( 'email-header-image' ), * 'width' => 150, * ]; * * * To set percentage values for the modern email clients, use $this->set_args() method: * * $this->set_args( * [ * 'style' => [ * 'header_image_max_width' => '45%', * ], * ] *); * * Both pixel and percentage approaches work well with 'wpforms_emails_templates_general_get_header_image' filter or this class extension. */ $img = [ 'url' => wpforms_setting( 'email-header-image' ), 'size' => wpforms_setting( 'email-header-image-size', 'medium' ), ]; return \apply_filters( 'wpforms_emails_templates_general_get_header_image', $img, $this ); } /** * Get content part HTML. * * @since 1.5.4 * * @param string $name Name of the content part. * * @return string */ protected function get_content_part( $name ) { if ( ! \is_string( $name ) ) { return ''; } $html = Templates::get_html( $this->get_full_template_name( $name ), $this->get_args( $name ), true ); return \apply_filters( 'wpforms_emails_templates_general_get_content_part', $html, $name, $this ); } /** * Assemble all content parts in an array. * * @since 1.5.4 * * @return array */ protected function get_content_parts() { $parts = [ 'header' => $this->get_content_part( 'header' ), 'body' => $this->get_content_part( 'body' ), 'footer' => $this->get_content_part( 'footer' ), ]; return \apply_filters( 'wpforms_emails_templates_general_get_content_parts', $parts, $this ); } /** * Apply inline styling and save email content. * * @since 1.5.4 * * @param string $content Content with no styling applied. */ protected function save_styled( $content ) { if ( empty( $content ) ) { $this->content = ''; return; } if ( $this->plain_text ) { $this->content = \wp_strip_all_tags( $content ); return; } $style_templates = [ 'style' => $this->get_full_template_name( 'style' ), 'queries' => $this->get_full_template_name( 'queries' ), ]; $styler = new Styler( $content, $style_templates, $this->get_args( 'style' ) ); $this->content = \apply_filters( 'wpforms_emails_templates_general_save_styled_content', $styler->get(), $this ); } /** * Build an email including styling. * * @since 1.5.4 * * @param bool $force Rebuild the content if it was already built and saved. */ protected function build( $force = false ) { if ( $this->content && ! $force ) { return; } $content = \implode( $this->get_content_parts() ); if ( empty( $content ) ) { return; } $content = $this->process_tags( $content ); if ( ! $this->plain_text ) { $content = \make_clickable( $content ); } $content = \apply_filters( 'wpforms_emails_templates_general_build_content', $content, $this ); $this->save_styled( $content ); } /** * Return final email. * * @since 1.5.4 * * @param bool $force Rebuild the content if it was already built and saved. * * @return string */ public function get( $force = false ) { $this->build( $force ); return $this->content; } }
Save Changes
Rename File
Rename