PluginProbe
Themify Builder / 7.7.7
Themify Builder v7.7.7
7.8.1 7.8.0 7.7.9 7.7.8 7.7.7 7.7.6 7.7.5 7.7.4 7.7.3 7.7.2 trunk 7.6.0 7.6.1 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.8 7.6.9 7.7.0 7.7.1
themify-builder / modules / module-accordion.php

module-accordion.php in Themify Builder 7.7.7, at modules/module-accordion.php

161 lines 5.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 defined('ABSPATH') || exit;
3
4 /**
5 * Module Name: Accordion
6 * Description: Display Accordion content
7 */
8 class TB_Accordion_Module extends Themify_Builder_Component_Module {
9
10 public static function get_module_name():string {
11 add_filter('themify_builder_active_vars', [__CLASS__, 'builder_active_enqueue']);
12 return __('Accordion', 'themify');
13 }
14
15 public static function get_module_icon():string {
16 return 'layout-accordion-merged';
17 }
18
19 public static function get_js_css():array {
20 $assets = array(
21 'css' => 1,
22 'js' => 1,
23 );
24 if (Themify_Builder_Model::is_front_builder_activate()) {
25 $assets['js_admin'] = 1;
26 }
27 return $assets;
28 }
29
30 public static function builder_active_enqueue(array $vars):array {
31 $vars['addons'][THEMIFY_BUILDER_URI . '/js/modules/accordion-admin.js'] = THEMIFY_VERSION;
32 return $vars;
33 }
34 /**
35 * Render plain content for static content.
36 *
37 * @param array $module
38 * @return string
39 */
40 public static function get_static_content(array $module):string {
41 $mod_settings = $module['mod_settings']+array(
42 'mod_title_accordion' => '',
43 'content_accordion' => array()
44 );
45 $output = '' !== $mod_settings['mod_title_accordion']?sprintf('<h3>%s</h3>', $mod_settings['mod_title_accordion']):'';
46
47 if ( ! empty( $mod_settings['content_accordion'] ) ) {
48 $output .= '<ul>';
49 foreach ( $mod_settings['content_accordion'] as $accordion ) {
50 $output .= '<li>';
51 if ( ! empty( $accordion['title_accordion'] ) ) {
52 $output .= '<h4>' . $accordion['title_accordion'] . '</h4>';
53 }
54
55 if ( isset( $accordion['text_accordion'] ) ) {
56 $output .= $accordion['text_accordion'];
57 } else if ( ! empty( $accordion['builder_content'] ) && is_array( $accordion['builder_content'] ) ) {
58 $output .= ThemifyBuilder_Data_Manager::_get_all_builder_text_content( $accordion['builder_content'] );
59 }
60 $output .= '</li>';
61 }
62 $output .= '</ul>';
63 }
64
65 return $output;
66 }
67
68 public static function subrow_attributes( $attr ) {
69 remove_filter( 'themify_builder_subrow_attributes', [ __CLASS__, 'subrow_attributes' ] );
70 $attr['itemprop'] = 'text';
71 return $attr;
72 }
73
74 public static function get_styling_image_fields() : array {
75 return [
76 'bg_i' => [ ' .ui.module-accordion .accordion-title', ' .ui.module-accordion>li' ]
77 ];
78 }
79
80 public static function get_translatable_fields( $module, $classname ) : array {
81 $fields = parent::get_translatable_fields( $module, $classname );
82 if ( ! empty( $module['mod_settings']['mod_title_accordion'] ) ) {
83 $fields[] = [
84 'id' => 'mod_title_accordion',
85 'value' => $module['mod_settings']['mod_title_accordion'],
86 ];
87 }
88 if ( ! empty( $module['mod_settings']['content_accordion'] ) && is_array( $module['mod_settings']['content_accordion'] ) ) {
89 foreach ( $module['mod_settings']['content_accordion'] as $row_index => $acc ) {
90 if ( ! is_array( $acc ) ) {
91 continue;
92 }
93 $fields[] = [
94 'id' => 'title_accordion-' . $row_index,
95 'value' => isset( $acc['title_accordion'] ) ? $acc['title_accordion'] : '',
96 ];
97 if ( isset( $acc['text_accordion'] ) ) {
98 $fields[] = [
99 'id' => 'text_accordion-' . $row_index,
100 'value' => $acc['text_accordion'],
101 'type' => 'VISUAL',
102 ];
103 }
104 }
105 }
106
107 return $fields;
108 }
109
110 public static function translate_module( $module_data, $translations ) {
111 if ( empty( $module_data['mod_settings'] ) || ! is_array( $module_data['mod_settings'] ) ) {
112 $module_data['mod_settings'] = [];
113 }
114 if ( empty( $module_data['mod_settings']['content_accordion'] ) || ! is_array( $module_data['mod_settings']['content_accordion'] ) ) {
115 $module_data['mod_settings']['content_accordion'] = [];
116 }
117
118 foreach ( $translations as $item_key => $value ) {
119 if ( $item_key === 'mod_title_accordion' ) {
120 $module_data['mod_settings']['mod_title_accordion'] = $value;
121 continue;
122 }
123
124 $dash_pos = strrpos( $item_key, '-' );
125 if ( $dash_pos === false ) {
126 continue;
127 }
128
129 $field = substr( $item_key, 0, $dash_pos );
130 $index = substr( $item_key, $dash_pos + 1 );
131 if ( $field === '' || $index === '' || ! is_numeric( $index ) ) {
132 continue;
133 }
134
135 if ( ! isset( $module_data['mod_settings']['content_accordion'][ $index ] ) || ! is_array( $module_data['mod_settings']['content_accordion'][ $index ] ) ) {
136 $module_data['mod_settings']['content_accordion'][ $index ] = [];
137 }
138
139 $module_data['mod_settings']['content_accordion'][ $index ][ $field ] = $value;
140 }
141
142 return $module_data;
143 }
144
145 /**
146 * Returns a flat array of all nested modules
147 */
148 public static function get_nested_modules( array $data ) : array {
149 $modules = [];
150 if ( isset( $data['mod_settings']['content_accordion'][0]['builder_content'] ) ) {
151 foreach ( $data['mod_settings']['content_accordion'] as $tab ) {
152 foreach ( $tab['builder_content'] as $row ) {
153 $modules = array_merge( $modules, Themify_Builder::_get_modules_recursive( $row ) );
154 }
155 }
156 }
157
158 return $modules;
159 }
160 }
161