PluginProbe
YayMail – WooCommerce Email Customizer / 4.3.4
YayMail – WooCommerce Email Customizer v4.3.4
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 3.4.2 3.4.3 All 55 releases
yaymail / src / Abstracts / BaseElement.php

BaseElement.php in YayMail – WooCommerce Email Customizer 4.3.4, at src/Abstracts/BaseElement.php

125 lines 5.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace YayMail\Abstracts;
3
4 /**
5 * BaseElement Class
6 */
7 abstract class BaseElement {
8
9 protected static $type = null;
10
11 /**
12 * List of available email IDs
13 *
14 * @var array
15 */
16 public $available_email_ids = [ YAYMAIL_WITH_ORDER_EMAILS ];
17
18 public static $icon = '<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
19 viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
20 <title>Third party elements</title>
21 <path d="M18,2h-7.6c-0.1,0-0.1,0-0.2,0.1l0,0c-0.1,0-0.1,0.1-0.2,0.1L4.6,7.4c0,0-0.1,0.1-0.1,0.2l0,0c0,0.1,0,0.1-0.1,0.2l0,0
22 c0,0.1,0,0.1,0,0.2v12.5C4.4,21.3,5.1,22,6,22h12c0.9,0,1.6-0.7,1.6-1.6l0,0V3.6C19.6,2.7,18.9,2,18,2L18,2z M9.8,4.5v2.7H7L9.8,4.5
23 z M18.1,20.3c0,0.1-0.1,0.2-0.2,0.2c0,0,0,0,0,0H6.1c-0.1,0-0.2-0.1-0.2-0.2c0,0,0,0,0,0V8.7h4.6c0.4,0,0.7-0.3,0.8-0.7V3.5h6.6
24 c0.1,0,0.2,0.1,0.2,0.2c0,0,0,0,0,0L18.1,20.3z M7.4,11.6c0-0.4,0.3-0.7,0.7-0.7c0,0,0,0,0,0h4.8c0.4,0,0.8,0.2,0.8,0.7
25 c0,0.4-0.2,0.8-0.7,0.8c-0.1,0-0.1,0-0.2,0H8.1C7.7,12.4,7.4,12.1,7.4,11.6C7.4,11.7,7.4,11.7,7.4,11.6z M16.6,14.6
26 c0,0.4-0.3,0.7-0.8,0.8H8.1c-0.4,0-0.8-0.3-0.8-0.8s0.3-0.8,0.8-0.8h7.7C16.3,13.9,16.6,14.2,16.6,14.6z M8.6,17.6
27 c0,0.4-0.3,0.7-0.7,0.7S7.2,18,7.2,17.6s0.3-0.7,0.7-0.7S8.6,17.2,8.6,17.6z M11,17.6c0,0.4-0.3,0.7-0.7,0.7S9.6,18,9.6,17.6
28 c0-0.4,0.3-0.7,0.7-0.7C10.7,16.9,11,17.2,11,17.6L11,17.6z M13.4,17.6c0,0.4-0.2,0.7-0.6,0.8c-0.4,0-0.7-0.2-0.8-0.6
29 c0-0.1,0-0.1,0-0.2c0-0.4,0.2-0.7,0.6-0.8c0.4,0,0.7,0.2,0.8,0.6C13.4,17.5,13.4,17.5,13.4,17.6z"/>
30 </svg>';
31
32 abstract public static function get_data( $attributes = [] );
33 /**
34 * Render list elements
35 *
36 * @param $element Element data
37 * @param $args includes
38 * $render_data
39 * $template
40 * $is_nested
41 */
42 public static function get_layout( $element_data, $args ) {
43 $file_name = str_replace( '_', '-', static::$type );
44 $path = 'templates/elements/' . $file_name . '.php';
45 return apply_filters( 'yaymail_' . static::$type . '_layout', yaymail_get_content( $path, array_merge( [ 'element' => $element_data ], $args ) ), $element_data, $args );
46 }
47
48 /**
49 * Check available in email.
50 *
51 * @param string|array $email_ids The email ID(s) to be set as available. Special placeholders such as
52 * `NON_ORDER_EMAILS`, `WITH_ORDER_EMAILS`, and `GLOBAL_HEADER_FOOTER_ID` can be used to include predefined sets
53 * of email IDs or the global header/footer ID.
54 * If provided as a string, it represents a single email ID.
55 * If provided as an array, it represents multiple email IDs.
56 * @return void
57 */
58 public function is_available_in_email( $email ) {
59
60 if ( ! ( $email instanceof BaseEmail ) && ! is_string( $email ) ) {
61 return false;
62 }
63
64 if ( is_string( $email ) ) {
65
66 $email = yaymail_get_email( $email );
67
68 if ( empty( $email ) || ! $email instanceof BaseEmail ) {
69 return false;
70 }
71 }
72
73 $available_email_ids = (array) $this->available_email_ids;
74 $available_email_ids = apply_filters( 'yaymail_element_available_email_ids', $available_email_ids, $this );
75
76 return ( in_array( YAYMAIL_ALL_EMAILS, $available_email_ids, true ) )
77 || ( in_array( YAYMAIL_NON_ORDER_EMAILS, $available_email_ids, true ) && in_array( YAYMAIL_NON_ORDER_EMAILS, $email->email_types, true ) )
78 || ( in_array( YAYMAIL_WITH_ORDER_EMAILS, $available_email_ids, true ) && in_array( YAYMAIL_WITH_ORDER_EMAILS, $email->email_types, true ) )
79 || ( in_array( YAYMAIL_GLOBAL_HEADER_FOOTER_ID, $available_email_ids, true ) && in_array( YAYMAIL_GLOBAL_HEADER_FOOTER_ID, $email->email_types, true ) )
80 || in_array( $email->get_id(), $available_email_ids, true );
81 }
82
83 public static function get_type() {
84 return static::$type;
85 }
86
87 /**
88 * Converts an element's data to use default values.
89 *
90 * This function iterates through the 'data' array of an element, replacing each value with its 'default_value'.
91 * It then updates the element's 'data' with the formatted data and returns the modified element.
92 *
93 * @param array $element The element to be modified.
94 * @return array The modified element with default values applied.
95 */
96 public static function reduce_new_element( $element ) {
97 $data = $element['data'];
98 $formatted_data = [];
99 foreach ( $data as $key => $value ) {
100 $fallback_value = $value;
101 if ( isset( $value['value_path'] ) ) {
102 $fallback_value = '';
103 }
104 $formatted_data[ $key ] = $value['default_value'] ?? $fallback_value;
105 }
106
107 $element['data'] = $formatted_data;
108 return $element;
109 }
110
111 public static function merge_common_data( $element, $attributes = [] ) {
112 if ( empty( $attributes['custom_css_classes'] ) ) {
113 return $element;
114 }
115
116 $element['data']['custom_css_classes'] = $attributes['custom_css_classes'];
117
118 return $element;
119 }
120
121 public static function get_object_data( ...$args ) {
122 return self::reduce_new_element( static::get_data( ...$args ) );
123 }
124 }
125