PluginProbe ʕ •ᴥ•ʔ
Responsive Lightbox & Gallery / trunk
Responsive Lightbox & Gallery vtrunk
2.7.8 trunk 1.0.0 1.0.1 1.0.1.1 1.0.2 1.0.3 1.0.4 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4.0 1.4.0.1 1.4.1 1.4.11 1.4.12 1.4.13 1.4.14 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 2.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.1 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3.1 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7
responsive-lightbox / includes / galleries / class-gallery-config.php
responsive-lightbox / includes / galleries Last commit date
class-gallery-api.php 4 months ago class-gallery-base.php 4 months ago class-gallery-config.php 4 months ago class-gallery-design.php 4 months ago class-gallery-field-provider.php 4 months ago class-gallery-images.php 4 months ago class-gallery-lightbox.php 4 months ago class-gallery-misc.php 4 months ago class-gallery-paging.php 4 months ago trait-gallery-ajax.php 4 months ago trait-gallery-duplicate.php 4 months ago trait-gallery-image-methods.php 2 weeks ago trait-gallery-preview.php 4 months ago trait-gallery-sanitize.php 4 months ago
class-gallery-config.php
253 lines
1 <?php
2 /**
3 * Responsive Lightbox Gallery Config Settings
4 *
5 * Handles gallery configuration settings (gallery type selection).
6 * Adapts existing Settings API galleries tab for post meta context.
7 *
8 * @package Responsive_Lightbox
9 */
10
11 // exit if accessed directly
12 if ( ! defined( 'ABSPATH' ) )
13 exit;
14
15 /**
16 * Responsive_Lightbox_Gallery_Config class.
17 *
18 * Gallery configuration tab - adapts settings API galleries fields.
19 *
20 * @class Responsive_Lightbox_Gallery_Config
21 */
22 class Responsive_Lightbox_Gallery_Config extends Responsive_Lightbox_Gallery_Base {
23
24 /**
25 * Tab key identifier.
26 *
27 * @var string
28 */
29 const TAB_KEY = 'config';
30
31 /**
32 * Get tab data for rendering.
33 *
34 * Returns configuration fields adapted from Settings API.
35 *
36 * @param string $menu_item Optional menu item to get fields for.
37 * @return array Tab data.
38 */
39 public function get_tab_data( $menu_item = '' ) {
40 $rl = Responsive_Lightbox();
41 $gallery_types = apply_filters( 'rl_gallery_types', $rl->get_data( 'gallery_types' ) );
42 if ( ! is_array( $gallery_types ) ) {
43 $gallery_types = [];
44 }
45
46 $config_data = [
47 'tab_key' => self::TAB_KEY,
48 'menu_items' => []
49 ];
50
51 // Build menu items: Global first, then other gallery types
52 $config_data['menu_items']['default'] = __( 'Global', 'responsive-lightbox' );
53 foreach ( $gallery_types as $type => $type_data ) {
54 if ( $type === 'default' ) {
55 continue; // Skip default as we handle it as Global
56 }
57 if ( is_array( $type_data ) ) {
58 $label = $type_data['label'] ?? ( $type_data['name'] ?? $type );
59 } else {
60 $label = (string) $type_data;
61 }
62 $config_data['menu_items'][$type] = $label;
63 }
64
65 // If menu_item is specified, return fields for that gallery type
66 // Otherwise, use the first available gallery type as default
67 $selected_type = ! empty( $menu_item ) && array_key_exists( $menu_item, $config_data['menu_items'] ) ? $menu_item : 'default';
68 $config_data['options'] = $this->get_gallery_type_fields( $selected_type );
69
70 return $config_data;
71 }
72
73 /**
74 * Get fields for a specific gallery type.
75 *
76 * Adapts Settings API galleries fields for post meta, emulating legacy logic.
77 *
78 * @param string $gallery_type Gallery type.
79 * @return array Fields configuration.
80 */
81 public function get_gallery_type_fields( $gallery_type ) {
82 $rl = Responsive_Lightbox();
83
84 // Get gallery types for label resolution
85 $gallery_types = apply_filters( 'rl_gallery_types', $rl->get_data( 'gallery_types' ) );
86
87 // Get default gallery fields (universal base)
88 $default_gallery_fields = $rl->frontend->get_default_gallery_fields();
89
90 // Build settings data using shared provider
91 $provider = new Responsive_Lightbox_Gallery_Field_Provider();
92 $settings = $provider->get_gallery_settings_data();
93 $defaults = $rl->defaults;
94 $default_gallery_type = isset( $rl->options['settings']['builder_gallery'] ) ? $rl->options['settings']['builder_gallery'] : 'basicgrid';
95 $default_gallery_key = $default_gallery_type . '_gallery';
96 $builder_gallery_fields = [];
97 $global_settings = [];
98
99 // Ensure default_gallery exists in settings
100 if ( ! array_key_exists( 'default_gallery', $settings ) ) {
101 $settings['default_gallery'] = [];
102 }
103
104 // Get builder gallery fields
105 if ( ! empty( $settings[$default_gallery_key]['fields'] ) ) {
106 $builder_gallery_fields = $settings[$default_gallery_key]['fields'];
107 } elseif ( $rl->settings && method_exists( $rl->settings, 'get_setting_fields' ) ) {
108 $legacy_fields = $rl->settings->get_setting_fields( $default_gallery_key );
109 if ( ! empty( $legacy_fields ) && is_array( $legacy_fields ) ) {
110 $builder_gallery_fields = $legacy_fields;
111 }
112 }
113
114 if ( ! empty( $rl->options[$default_gallery_key] ) && is_array( $rl->options[$default_gallery_key] ) ) {
115 $global_settings = $rl->options[$default_gallery_key];
116 }
117
118 // Assign default values for default_gallery
119 foreach ( $default_gallery_fields as $field => $field_args ) {
120 $defaults['default_gallery'][$field] = $field_args['default'];
121 }
122
123 $fields = [];
124 $disabled_fields = [];
125
126 if ( $gallery_type === 'default' ) {
127 // For Global: merge base + builder gallery fields, disable non-base fields
128 $fields = $default_gallery_fields;
129 if ( ! empty( $builder_gallery_fields ) ) {
130 $fields = $rl->frontend->get_unique_fields( $default_gallery_fields, $builder_gallery_fields );
131 foreach ( $defaults[$default_gallery_key] as $field => $default_value ) {
132 if ( ! array_key_exists( $field, $defaults['default_gallery'] ) ) {
133 $defaults['default_gallery'][$field] = $default_value;
134 }
135 }
136 }
137 $disabled_fields = array_diff_key( $fields, $default_gallery_fields );
138 } else {
139 // For specific types: merge base + type fields
140 if ( array_key_exists( $gallery_type . '_gallery', $settings ) ) {
141 $type_fields = $settings[$gallery_type . '_gallery']['fields'] ?? [];
142 if ( empty( $type_fields ) && $rl->settings && method_exists( $rl->settings, 'get_setting_fields' ) ) {
143 $type_fields = $rl->settings->get_setting_fields( $gallery_type . '_gallery' );
144 }
145 if ( ! empty( $type_fields ) ) {
146 $fields = $rl->frontend->get_unique_fields( $default_gallery_fields, $type_fields );
147 }
148 // Add default gallery default values
149 foreach ( $default_gallery_fields as $field => $field_args ) {
150 $defaults[$gallery_type . '_gallery'][$field] = $field_args['default'];
151 }
152 }
153 }
154
155 // Adapt fields for gallery context
156 $adapted_fields = [];
157 foreach ( $fields as $field_key => $field ) {
158 // Skip fields that don't make sense in per-gallery context
159 if ( in_array( $field_key, [ 'active' ], true ) ) {
160 continue;
161 }
162
163 $adapted_field = $field;
164
165 // Mark disabled fields for Global
166 if ( $gallery_type === 'default' && isset( $disabled_fields[$field_key] ) ) {
167 $adapted_field['disabled'] = true;
168 $adapted_field['is_global_locked'] = true;
169
170 // Propagate disabled to subfields for multiple fields
171 if ( isset( $field['type'] ) && $field['type'] === 'multiple' && ! empty( $field['fields'] ) ) {
172 foreach ( $field['fields'] as $subfield_key => $subfield ) {
173 $adapted_field['fields'][$subfield_key] = $subfield;
174 $adapted_field['fields'][$subfield_key]['disabled'] = true;
175 $adapted_field['fields'][$subfield_key]['is_global_locked'] = true;
176 }
177 }
178 }
179
180 // Adapt field names and defaults for gallery context
181 if ( isset( $field['default'] ) ) {
182 // Keep defaults as-is for now
183 }
184
185 $adapted_fields[$field_key] = $adapted_field;
186 }
187
188 // Add disabled notice for Global if there are disabled fields
189 if ( $gallery_type === 'default' && ! empty( $disabled_fields ) ) {
190 $settings_menu = '';
191 $settings_tab_label = '';
192 $settings_section = '';
193
194 if ( ! empty( $rl->settings_api ) && method_exists( $rl->settings_api, 'get_pages' ) ) {
195 $settings_pages = $rl->settings_api->get_pages();
196 if ( ! empty( $settings_pages['settings'] ) ) {
197 $settings_menu = ! empty( $settings_pages['settings']['menu_title'] ) ? $settings_pages['settings']['menu_title'] : '';
198 if ( ! empty( $settings_pages['settings']['tabs']['gallery']['label'] ) ) {
199 $settings_tab_label = $settings_pages['settings']['tabs']['gallery']['label'];
200 }
201 }
202 }
203 if ( ! empty( $settings[$default_gallery_key]['sections'] ) && is_array( $settings[$default_gallery_key]['sections'] ) ) {
204 $first_section = reset( $settings[$default_gallery_key]['sections'] );
205 if ( ! empty( $first_section['title'] ) ) {
206 $settings_section = $first_section['title'];
207 }
208 }
209
210 if ( $settings_section === '' && ! empty( $gallery_types[$default_gallery_type] ) ) {
211 if ( is_array( $gallery_types[$default_gallery_type] ) ) {
212 $settings_section = $gallery_types[$default_gallery_type]['label'] ?? $gallery_types[$default_gallery_type]['name'] ?? $default_gallery_type;
213 } else {
214 $settings_section = (string) $gallery_types[$default_gallery_type];
215 }
216 }
217
218 if ( $settings_section === '' ) {
219 $settings_section = ucwords( str_replace( '_', ' ', $default_gallery_key ) );
220 }
221
222 $settings_url = admin_url( 'admin.php?page=responsive-lightbox-settings&tab=gallery' );
223 if ( $settings_menu === '' ) {
224 $settings_menu = __( 'Lightbox', 'responsive-lightbox' );
225 }
226 if ( $settings_tab_label === '' ) {
227 $settings_tab_label = __( 'Galleries', 'responsive-lightbox' );
228 }
229
230 $disabled_notice = [
231 'type' => 'notice',
232 'content' => '<div class="rl-gallery-disabled-notice"><p>' . wp_kses_post( sprintf( __( 'Settings below are controlled globally in %1$s &rarr; %2$s &rarr; %3$s.', 'responsive-lightbox' ), esc_html( $settings_menu ), esc_html( $settings_tab_label ), esc_html( $settings_section ) ) ) . '</p><a class="rl-gallery-disabled-notice-link" href="' . esc_url( $settings_url ) . '">' . esc_html( sprintf( __( 'Edit Global %s Settings ->', 'responsive-lightbox' ), $settings_section ) ) . '</a></div>',
233 'class' => 'rl-gallery-field-disabled-notice'
234 ];
235
236 // Insert notice before the first disabled field using key-preserving method
237 $new_fields = [];
238 $notice_inserted = false;
239 foreach ( $adapted_fields as $key => $field ) {
240 if ( !$notice_inserted && isset( $field['is_global_locked'] ) && $field['is_global_locked'] ) {
241 $new_fields['disabled_notice'] = $disabled_notice;
242 $notice_inserted = true;
243 }
244 $new_fields[$key] = $field;
245 }
246 $adapted_fields = $new_fields;
247 }
248
249 return $adapted_fields;
250 }
251
252 }
253