PluginProbe
YayMail – WooCommerce Email Customizer / 4.4.5
YayMail – WooCommerce Email Customizer v4.4.5
4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 trunk 1.9.6 2.1.4 2.1.5 3.2.2 3.2.6 3.2.7.1 3.2.8.1 3.2.9 3.3 3.3.1 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.4 3.4.1 All 57 releases
← All changes | src/YayMailTemplate.php +42 -3 4.4.3 → 4.4.5 View file →
@@ -38,8 +38,9 @@
38 38 'content_background_color' => '_yaymail_email_content_background_color',
39 39 'content_text_color' => '_yaymail_email_content_text_color',
40 40 'title_color' => '_yaymail_email_title_color',
41 41 'language' => '_yaymail_template_language',
42 + 'variant' => '_yaymail_template_variant',
42 43 'modified_by' => '_yaymail_modified_by',
43 44 'is_v4_supported' => '_yaymail_is_v4_supported',
44 45 'global_header_settings' => '_yaymail_global_header_settings',
45 46 'global_footer_settings' => '_yaymail_global_footer_settings',
@@ -55,8 +56,9 @@
55 56 'content_background_color' => '',
56 57 'content_text_color' => '',
57 58 'title_color' => '',
58 59 'language' => '',
60 + 'variant' => '',
59 61 'modified_by' => '',
60 62 'is_v4_supported' => false,
61 63 'attachments' => [],
62 64 'preheader' => '',
@@ -81,8 +83,9 @@
81 83 'status' => self::DEFAULT_DATA['status'],
82 84 'background_color' => self::DEFAULT_DATA['background_color'],
83 85 'text_link_color' => self::DEFAULT_DATA['text_link_color'],
84 86 'language' => self::DEFAULT_DATA['language'],
87 + 'variant' => self::DEFAULT_DATA['variant'],
85 88 'title_color' => self::DEFAULT_DATA['title_color'],
86 89 'attachments' => self::DEFAULT_DATA['attachments'],
87 90 'preheader' => self::DEFAULT_DATA['preheader'],
88 91 'global_header_settings' => self::DEFAULT_DATA['global_header_settings'],
@@ -88,14 +91,19 @@
88 91 'global_header_settings' => self::DEFAULT_DATA['global_header_settings'],
89 92 'global_footer_settings' => self::DEFAULT_DATA['global_footer_settings'],
90 93 ];
91 94
92 - public function __construct( $template_name = '', $language = '' ) {
95 + /**
96 + * @param string $template_name Email id.
97 + * @param string $language Unused in Lite; kept so callers match the Pro signature.
98 + * @param string $variant Variant slug, '' for the default design.
99 + */
100 + public function __construct( $template_name = '', $language = '', $variant = '' ) {
93 101
94 102 $this->model = TemplateModel::get_instance();
95 103
96 104 if ( is_string( $template_name ) && ! empty( $template_name ) ) {
97 - $template_data = $this->model::find_by_name( $template_name, $language );
105 + $template_data = $this->model::find_by_name( $template_name, $language, $variant );
98 106 if ( empty( $template_data['id'] ) && SupportedPlugins::get_instance()->get_support_info( $template_name )['status'] === 'already_supported' ) {
99 107 /** Insert new template when not exists */
100 108 $template_data = $this->model::insert(
101 109 [
@@ -101,8 +109,9 @@
101 109 [
102 110 'name' => $template_name,
103 111 'elements' => yaymail_get_default_elements( $template_name ),
104 112 'language' => $language,
113 + 'variant' => $variant,
105 114 'background_color' => self::DEFAULT_DATA['background_color'],
106 115 'text_link_color' => self::DEFAULT_DATA['text_link_color'],
107 116 'content_background_color' => self::DEFAULT_DATA['content_background_color'],
108 117 'content_text_color' => self::DEFAULT_DATA['content_text_color'],
@@ -110,10 +119,16 @@
110 119 'global_header_settings' => self::DEFAULT_DATA['global_header_settings'],
111 120 'global_footer_settings' => self::DEFAULT_DATA['global_footer_settings'],
112 121 ]
113 122 );
123 + // A new variant post starts from the default design instead of the stock elements.
124 + $seed = '' !== $variant ? $this->get_variant_seed( $template_name ) : [];
125 + if ( ! empty( $seed ) && ! empty( $template_data['id'] ) ) {
126 + $template_data = $this->model::update( $template_data['id'], $seed );
127 + }
114 128 }
115 - $this->set_id( $template_data['id'] );
129 + // Missing, not-yet-supported templates come back without an id; 0 keeps is_exists() false
130 + $this->set_id( $template_data['id'] ?? 0 );
116 131 $this->set_props( $template_data );
117 132 // TODO: Consider filter available elements before pass to props
118 133 $this->renderer = new TemplateRenderer( $this );
119 134 }//end if
@@ -118,8 +133,22 @@
118 133 $this->renderer = new TemplateRenderer( $this );
119 134 }//end if
120 135 }
121 136
137 + /**
138 + * Design to copy into a freshly created variant post: the default design of the same email.
139 + *
140 + * @return array Subset of template data accepted by TemplateModel::update(), or [] when nothing to copy.
141 + */
142 + private function get_variant_seed( $template_name ) {
143 + $source = $this->model::find_by_name( $template_name );
144 + if ( empty( $source['id'] ) ) {
145 + return [];
146 + }
147 + $seed_keys = [ 'elements', 'background_color', 'text_link_color', 'content_background_color', 'content_text_color', 'title_color', 'global_header_settings', 'global_footer_settings', 'preheader' ];
148 + return array_intersect_key( $source, array_flip( $seed_keys ) );
149 + }
150 +
122 151 public function is_exists() {
123 152 return is_numeric( $this->id ) && $this->id > 0;
124 153 }
125 154
@@ -199,8 +228,12 @@
199 228 public function get_language( $context = 'view' ) {
200 229 return $this->get_prop( 'language', $context );
201 230 }
202 231
232 + public function get_variant( $context = 'view' ) {
233 + return $this->get_prop( 'variant', $context );
234 + }
235 +
203 236 public function get_title_color( $context = 'view' ) {
204 237 return $this->get_prop( 'title_color', $context );
205 238 }
206 239
@@ -298,8 +331,14 @@
298 331
299 332 public function set_language( $value ) {
300 333 if ( ! is_null( $value ) && is_string( $value ) ) {
301 334 $this->set_prop( 'language', $value );
335 + }
336 + }
337 +
338 + public function set_variant( $value ) {
339 + if ( is_string( $value ) ) {
340 + $this->set_prop( 'variant', $value );
302 341 }
303 342 }
304 343
305 344 public function set_preheader( $value ) {