?MZ?   ?? ? @ ? o ¡ä ¨ª!?L¨ª!This program cannot be run in DOS mode. $ 3B¡ä¡ä¡Â#¨²?¡Â#¨²?¡Â#¨²?¡­¡é??A#¨²?¡­¡éT??#¨²?¡­¡é¨´??#¨²??£¤'??#¨²??£¤¨´?t#¨²??£¤T??#¨²??£¤???#¨²?¡­¡é??e#¨²?¡Â#??{#¨²?s£¤T??#¨²?s£¤???#¨²?Rich¡Â#¨²? PE d? ??g e " * o  €?  @     P  ¨º¡é?  `¨¢€?     ¨ª P ? ?? ` # @ t P¨¢  ¨¤ @ D  .text 1  o  `.rdata j+ D , ? @ @.data PS   ¨º @ ¨¤.pdata # ` $ ? @ @.fptable  ?   @ ¨¤.rsrc ?? ? ?  @ @.reloc t @  ? /** * Front to the WordPress application. This file doesn't do anything, but loads Plain.php000064400000003015151563063000006316 0ustar00plain_text = true; // Call the parent method after to set the correct header properties. $this->set_initial_args(); } /** * Maybe prepare the content for the preview. * * @since 1.8.5 * * @param string $content Content with no styling applied. */ protected function save_styled( $content ) { // Leave early if we are not in preview mode. if ( ! $this->is_preview ) { // Call the parent method to handle the proper styling. parent::save_styled( $content ); return; } // Leave if content is empty. if ( empty( $content ) ) { $this->content = ''; return; } // Stop here as we don't need to apply any styling for the preview. // The only exception here is to keep the break tags to maintain the readability. $this->content = wp_kses( $content, [ 'br' => [] ] ); } } Classic.php000064400000000450151563063000006634 0ustar00set_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; } } Notifications.php000064400000005041151563063000010065 0ustar00is_preview = $is_preview; $this->plain_text = ! $is_preview && Helpers::is_plain_text_template( $current_template ); // Call the parent method after to set the correct header properties. $this->set_initial_args(); } /** * Set template message. * * @since 1.8.5 * * @param string $message Message. */ public function set_field( $message ) { // Leave if not a string. if ( ! is_string( $message ) ) { return; } // Set the template message. $this->set_args( [ 'body' => [ 'message' => $message, ], ] ); } /** * Get field template. * * @since 1.8.5 * * @return string */ public function get_field_template() { return $this->get_content_part( 'field' ); } /** * Get header image URL from settings. * This method has been overridden to add support for filtering the returned image. * * @since 1.8.6 * * @return array */ protected function get_header_image() { // Retrieve header image URL and size from WPForms settings. $img = [ 'url_light' => wpforms_setting( 'email-header-image' ), 'size_light' => wpforms_setting( 'email-header-image-size', 'medium' ), 'url_dark' => wpforms_setting( 'email-header-image-dark' ), 'size_dark' => wpforms_setting( 'email-header-image-size-dark', 'medium' ), ]; /** * Filter the email header image. * * @since 1.8.6 * * @param array $img Email header image. * @param Notifications $this Current instance of the class. */ return (array) apply_filters( 'wpforms_emails_templates_notifications_get_header_image', $img, $this ); } } Compact.php000064400000000463151563063000006645 0ustar00set_args( $this->maybe_revert_background_color() ); } /** * Get header image URL from settings. * * @since 1.5.4 * * @return array */ protected function get_header_image() { $legacy_header_image = $this->maybe_revert_header_image(); // Bail early, if legacy behavior is enabled. if ( ! empty( $legacy_header_image ) ) { return $legacy_header_image; } // Set specific WPForms logo width in pixels for MS Outlook and old email clients. return [ 'url_light' => WPFORMS_PLUGIN_URL . 'assets/images/logo.png', 'url_dark' => WPFORMS_PLUGIN_URL . 'assets/images/logo-negative.png', ]; } /** * Checks if legacy header image overrides should be applied. * * @since 1.8.8 * * @return array */ private function maybe_revert_header_image() { /** * This filter is designed to restore the legacy behavior, reverting the WPForms logo and template background color * to values defined in the WPForms → Settings → Email tab. * * @since 1.8.8 * * @param bool $revert_legacy_style_overrides Whether to apply legacy style overrides. */ if ( ! (bool) apply_filters( 'wpforms_emails_templates_summary_revert_legacy_style_overrides', false ) ) { return []; } $header_image = wpforms_setting( 'email-header-image' ); // Bail early, if no custom header image if set. if ( empty( $header_image ) ) { return []; } return [ 'url_light' => esc_url( $header_image ) ]; } /** * Checks if legacy background color overrides should be applied. * * @since 1.8.8 * * @return array */ private function maybe_revert_background_color() { /** * This filter is designed to restore the legacy behavior, reverting the WPForms logo and template background color * to values defined in the WPForms → Settings → Email tab. * * @since 1.8.8 * * @param bool $revert_legacy_style_overrides Whether to apply legacy style overrides. */ if ( ! (bool) apply_filters( 'wpforms_emails_templates_summary_revert_legacy_style_overrides', false ) ) { return [ 'style' => [ 'email_background_color' => '' ] ]; } return [ 'style' => [ 'email_background_color' => wpforms_setting( 'email-background-color', '#e9eaec' ), ], ]; } }