PluginProbe
QuadMenu – Mega Menu / 3.3.4
QuadMenu – Mega Menu v3.3.4
3.3.7 3.3.6 trunk 1.8.4 1.8.5 1.8.7 1.8.8 1.8.9 1.9.0 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 All 87 releases
quadmenu / lib / backend / class-settings.php

class-settings.php in QuadMenu – Mega Menu 3.3.4, at lib/backend/class-settings.php

546 lines 23.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace QuadLayers\QuadMenu\Backend;
3
4 use QuadLayers\QuadMenu\Plugin;
5 use QuadLayers\QuadMenu\Configuration;
6 if ( ! defined( 'ABSPATH' ) ) {
7 die( '-1' );
8 }
9
10 /**
11 * Settings Class ex QuadMenu_Settings
12 */
13 class Settings extends Configuration {
14
15 public $tabs;
16 public $panels = array();
17 public static $instance;
18
19 public function __construct() {
20
21 add_action( 'quadmenu_modal_panels', array( $this, 'panels' ), 10, 4 );
22
23 add_action( 'wp_ajax_quadmenu_add_nav_menu_item_panel', array( $this, 'ajax_add_nav_menu_item_panel' ) );
24 }
25
26 public function get_children_nav_menu_items( $menu_id, $parent_menu_item_id ) {
27
28 $childrens = array();
29
30 // check we're using a valid menu ID
31 if ( ! is_nav_menu( $menu_id ) ) {
32 return $childrens;
33 }
34
35 if ( is_array( $menu = $this->wp_get_nav_menu_items( $menu_id ) ) && count( $menu ) ) {
36
37 foreach ( $menu as $item ) {
38
39 // find the child menu items
40 if ( $parent_menu_item_id == $item->menu_item_parent ) {
41
42 $childrens[ $item->ID ] = array(
43 'id' => $item->ID,
44 'title' => $item->title,
45 );
46 }
47 }
48 }
49
50 return $childrens;
51 }
52
53 function wp_get_nav_menu_items( $menu_id ) {
54
55 $quadmenu_menu_items = wp_cache_get( "wp_get_nav_menu_items_{$menu_id}", 'quadmenu' );
56
57 if ( $quadmenu_menu_items === false ) {
58
59 $quadmenu_menu_items = wp_get_nav_menu_items( $menu_id );
60
61 wp_cache_set( "wp_get_nav_menu_items_{$menu_id}", $quadmenu_menu_items, 'quadmenu' );
62 }
63
64 return $quadmenu_menu_items;
65 }
66
67 public function nav_menu_item_settings( $setting, $item ) {
68
69 $type = $setting['type'];
70
71 // $desc = isset($setting['desc']) ? '<span class="quadmenu-menu-item-setting-description">' . $setting['desc'] . '</span>' : '';
72 // $tip = isset($setting['tip']) ? '<div class="quadmenu-menu-item-setting-tip"><i class="tip-icon"></i> ' . $setting['tip'] . '</div>' : '';
73
74 $value = $item->{$setting['db']};
75
76 $id = 'menu-item-' . $setting['db'];
77
78 $name = 'menu-item-' . $setting['id'];
79
80 $class = 'menu-item-quadmenu-setting ' . $id;
81
82 $ops = '';
83
84 if ( isset( $setting['ops'] ) ) {
85 $ops = $setting['ops'];
86 if ( ! is_array( $ops ) && function_exists( $ops ) ) {
87 if ( isset( $setting['ops_args'] ) ) {
88 $ops = $ops( $setting['ops_args'] );
89 } else {
90 $ops = $ops();
91 }
92 }
93 }
94
95 switch ( $type ) {
96
97 case 'checkbox':
98 ?>
99 <label class="multicheck-label">
100 <input type="checkbox" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_attr( $ops ? $ops : 'on' ); ?>" <?php echo checked( $value, $ops ? $ops : 'on' ); ?> />
101 <?php echo esc_html( $setting['placeholder'] ); ?>
102 </label>
103 <?php
104 break;
105
106 case 'multicheck':
107 ?>
108 <span class="field-wrapper">
109 <?php
110 $value = is_array( $value ) ? $value : array();
111
112 foreach ( $ops as $_val => $_name ) :
113 ?>
114 <label class="multicheck-label" title="<?php echo esc_html( $_val ); ?>" >
115 <input type="checkbox" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?> checkbox multicheckbox" name="<?php echo esc_attr( $name . '[]' ); ?>" value="<?php echo esc_html( $_val ); ?>" <?php echo checked( in_array( $_val, $value ) ); ?> />
116 <?php echo esc_html( $_name ); ?>
117 </label>
118 <?php endforeach; ?>
119 </span>
120 <?php
121 break;
122
123 case 'text':
124 if ( is_array( $value ) ) {
125 $value = implode( ' ', $value );
126 }
127 ?>
128 <input type="text" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" placeholder="<?php echo esc_html( $setting['placeholder'] ); ?>" value="<?php echo esc_html( $value ); ?>" />
129 <?php
130 break;
131
132 case 'number':
133 if ( is_array( $value ) ) {
134 $value = implode( ' ', $value );
135 }
136 ?>
137 <input type="number" step="<?php echo esc_attr( $ops['step'] ); ?>" min="<?php echo esc_attr( $ops['min'] ); ?>" max="<?php echo esc_attr( $ops['max'] ); ?>" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_html( $value ); ?>" />
138 <?php
139 break;
140
141 case 'hidden':
142 ?>
143 <input type="hidden" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?> checkbox multicheckbox" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_html( $value ); ?>" />
144 <?php
145 break;
146
147 case 'textarea':
148 ?>
149 <textarea id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $value ); ?></textarea>
150 <?php
151 break;
152
153 case 'select':
154 ?>
155 <select id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" >
156 <?php foreach ( $ops as $_val => $_name ) : ?>
157 <option value="<?php echo esc_html( $_val ); ?>" <?php selected( $value, $_val ); ?> ><?php echo $_name; ?></option>
158 <?php endforeach; ?>
159 </select>
160 <?php
161 break;
162
163 case 'radio':
164 ?>
165 <span class="field-wrapper">
166 <?php foreach ( $ops as $_val => $_name ) : ?>
167 <label class="radio-label" title="<?php echo esc_html( $_val ); ?>" >
168 <input id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" type="radio" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_html( $_val ); ?>" <?php echo checked( $value, $_val ); ?> />
169 <?php echo esc_html( $_name ); ?>
170 </label>
171 <?php endforeach; ?>
172 </span>
173 <?php
174 break;
175
176 case 'width':
177 extract( $ops );
178 ?>
179 <div class="quadmenu-setting-width-icons">
180 <div>
181 <span class="title">#</span>
182 </div>
183 <?php
184 if ( ! empty( $icons ) ) :
185 foreach ( $icons as $size ) :
186 ?>
187 <div class="<?php echo esc_attr( $size ); ?>"><i></i></div>
188 <?php
189 endforeach;
190 endif;
191 ?>
192 </div>
193 <?php if ( ! empty( $columns ) ) : ?>
194 <div class="quadmenu-setting-width-columns">
195 <div class="col">
196 <span class="title"><?php esc_html_e( 'Width', 'quadmenu' ); ?></span>
197 </div>
198 <?php
199 foreach ( $columns as $size ) :
200
201 if ( $size != '' ) {
202 $size = '-' . $size;
203 }
204 ?>
205 <div class="col<?php echo esc_attr( $size ); ?>">
206 <select id="menu-item-width<?php echo esc_attr( $size ); ?>-columns" class="menu-item-quadmenu-setting menu-item-columns<?php echo esc_attr( $size ); ?>" name="menu-item-quadmenu-settings[columns][]">
207 <?php // if ($size != ''): ?>
208 <option value="">
209 <?php esc_html_e( 'Inherit from smaller', 'quadmenu' ); ?>
210 </option>
211 <?php // endif; ?>
212 <?php
213 for ( $i = 1; $i <= 12; $i++ ) :
214 $current = 'col' . $size . '-' . $i;
215 ?>
216 <option value="<?php echo esc_attr( $current ); ?>" <?php selected( true, in_array( sanitize_key( $current ), str_replace( 'col-xs-', 'col-', $value ) ) ); ?>>
217 <?php printf( esc_html( '%1$s column', 'quadmenu' ), $i ); ?>
218 </option>
219 <?php endfor; ?>
220 </select>
221 </div>
222 <?php endforeach; ?>
223 </div>
224 <?php endif; ?>
225 <?php if ( ! empty( $offset ) ) : ?>
226 <div class="quadmenu-setting-width-offset">
227 <div>
228 <span class="title"><?php esc_html_e( 'Offset', 'quadmenu' ); ?></span>
229 </div>
230 <?php foreach ( $offset as $size ) : ?>
231 <div class="<?php echo esc_attr( $size ); ?>">
232 <select id="menu-item-width-<?php echo esc_attr( $size ); ?>-offset" class="menu-item-quadmenu-setting menu-item-offset-<?php echo esc_attr( $size ); ?>" name="menu-item-quadmenu-settings[columns][]">
233 <option value="">
234 <?php esc_html_e( 'Inherit from smaller', 'quadmenu' ); ?>
235 </option>
236 <?php
237 for ( $i = 1; $i <= 12; $i++ ) :
238 $current = 'offset-' . $size . '-' . $i;
239 ?>
240 <option value="<?php echo esc_attr( $current ); ?>" <?php selected( true, in_array( sanitize_key( $current ), $value ) ); ?>>
241 <?php printf( esc_html( '%1$s column', 'quadmenu' ), $i ); ?>
242 </option>
243 <?php endfor; ?>
244 </select>
245 </div>
246 <?php endforeach; ?>
247 </div>
248 <?php endif; ?>
249 <?php if ( ! empty( $hidden ) ) : ?>
250 <div class="quadmenu-setting-width-hidden">
251 <div>
252 <span class="title"><?php esc_html_e( 'Hidden', 'quadmenu' ); ?></span>
253 </div>
254 <?php
255 foreach ( $hidden as $size ) :
256 $current = 'hidden-' . $size;
257 ?>
258 <div class="<?php echo esc_attr( $size ); ?>">
259 <input type="checkbox" id="menu-item-width-<?php echo esc_attr( $size ); ?>-hidden" class="menu-item-quadmenu-setting menu-item-hidden-<?php echo esc_attr( $size ); ?> checkbox multicheckbox" name="menu-item-quadmenu-settings[columns][]" value="<?php echo esc_attr( $current ); ?>" <?php checked( true, in_array( sanitize_key( $current ), $value ) ); ?>>
260 </div>
261 <?php endforeach; ?>
262 </div>
263 <?php endif; ?>
264 <?php
265 break;
266
267 case 'icon':
268 ?>
269 <div class="quadmenu-setting">
270 <label>
271 <span class="title"><?php esc_html_e( 'Icon', 'quadmenu' ); ?></span>
272 <input type="text" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_html( $value ); ?>"/>
273 </label>
274 </div>
275 <div class="quadmenu-setting">
276 <div class="quadmenu-icons-search">
277 <span class="button-icon button-secondary" class="button"><i class="<?php echo esc_html( $value ); ?>"></i><?php echo _QuadMenu()->selected_icons()->name; ?></span>
278 <input type="search" value="" placeholder="<?php echo esc_html( $setting['placeholder'] ); ?>"/>
279 </div>
280 <div class="quadmenu-icons-scroll">
281 <?php foreach ( explode( ',', _QuadMenu()->selected_icons()->iconmap ) as $icon ) : ?>
282 <a style="display: block;" class="icon _<?php echo esc_attr( str_replace( ' ', '_', trim( $icon ) ) ); ?>"><i class="<?php echo esc_attr( $icon ); ?>"></i></a>
283 <?php endforeach; ?>
284 <div class="clearfix"></div>
285 </div>
286 </div>
287 <?php
288 break;
289
290 case 'background':
291 $defaults = array(
292 'thumbnail-id' => 0,
293 'size' => '',
294 'position' => '',
295 'repeat' => '',
296 'origin' => 'border-box',
297 'opacity' => 1,
298 );
299
300 $value = wp_parse_args( $value, $defaults );
301
302 $_src = ! empty( $value['thumbnail-id'] ) ? wp_get_attachment_image_src( $value['thumbnail-id'], 'thumbnail' ) : false;
303 $_url = ! empty( $value['thumbnail-id'] ) ? wp_get_attachment_image_src( $value['thumbnail-id'], 'full' ) : false;
304
305 $have_media = isset( $_src[0] ) && strlen( $_src[0] ) > 0 ? 'active' : '';
306 ?>
307 <span class="field-background"
308 style="
309 background-image: url(<?php echo esc_attr( isset( $_url[0] ) ? $_url[0] : '' ); ?>);
310 background-size: <?php echo esc_attr( $value['size'] ); ?>;
311 background-repeat: <?php echo esc_attr( $value['repeat'] ); ?>;
312 background-position: <?php echo esc_attr( $value['position'] ); ?>;
313 background-origin: <?php echo esc_attr( $value['origin'] ); ?>;
314 opacity: <?php echo esc_attr( $value['opacity'] ); ?>;
315 "></span>
316 <span class="field-wrapper <?php echo esc_attr( $have_media ); ?>">
317 <span class="edit-menu-item-media-thumbnail">
318 <?php if ( $have_media ) : ?>
319 <img src="<?php echo esc_attr( $_src[0] ); ?>" width="50" height="50" id="mega-media-thumbnail-menu-item-<?php echo esc_attr( $item->ID ); ?>" title="menu-item-<?php echo esc_attr( $item->ID ); ?>-media" alt="menu-item-<?php echo esc_attr( $item->ID ); ?>-media">
320 <?php endif ?>
321 </span>
322 <input type="hidden" id="edit-menu-item-media-thumbnail-id-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-thumbnail-id" name="<?php echo esc_attr( $name . '[thumbnail-id]' ); ?>" value="<?php echo esc_attr( $value['thumbnail-id'] ); ?>" />
323 <span class="edit-menu-item-media-text"><?php esc_html_e( 'Select media image', 'quadmenu' ); ?></span>
324 <a id="<?php echo esc_attr( $item->ID ); ?>" class="menu-item-media-upload" href="javascript:void(0)"><?php esc_html_e( 'Edit', 'quadmenu' ); ?></a>
325 <a id="<?php echo esc_attr( $item->ID ); ?>" class="menu-item-media-clear" href="javascript:void(0)" ><?php esc_html_e( 'Remove', 'quadmenu' ); ?></a>
326 <div class="clearfix"></div>
327 <label class="setting">
328 <b><?php esc_html_e( 'Opacity', 'quadmenu' ); ?></b>
329 <input type="number" step="1" min="1" max="100" id="edit-menu-item-background-opacity-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-opacity" name="<?php echo esc_attr( $name . '[opacity]' ); ?>" value="<?php echo esc_attr( $value['opacity'] ); ?>"/>
330 </label>
331 <label class="setting">
332 <b><?php esc_html_e( 'Position', 'quadmenu' ); ?></b>
333 <select id="edit-menu-item-background-position-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-position" name="<?php echo esc_attr( $name . '[position]' ); ?>">
334 <option value="left top" <?php selected( 'left top', $value['position'] ); ?>>left top</option>
335 <option value="left center" <?php selected( 'left center', $value['position'] ); ?>>left center</option>
336 <option value="left bottom" <?php selected( 'left bottom', $value['position'] ); ?>>left bottom</option>
337 <option value="right top" <?php selected( 'right top', $value['position'] ); ?>>right top</option>
338 <option value="right center" <?php selected( 'right center', $value['position'] ); ?>>right center</option>
339 <option value="right bottom" <?php selected( 'right bottom', $value['position'] ); ?>>right bottom</option>
340 <option value="center top" <?php selected( 'center top', $value['position'] ); ?>>center top</option>
341 <option value="center center" <?php selected( 'center center', $value['position'] ); ?>>center center</option>
342 <option value="center bottom" <?php selected( 'center bottom', $value['position'] ); ?>>center bottom</option>
343 </select>
344 </label>
345 <label class="setting">
346 <b><?php esc_html_e( 'Repeat', 'quadmenu' ); ?></b>
347 <select id="edit-menu-item-background-repeat-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-repeat" name="<?php echo esc_attr( $name . '[repeat]' ); ?>">
348 <option value="repeat" <?php selected( 'repeat', $value['repeat'] ); ?>>repeat</option>
349 <option value="no-repeat" <?php selected( 'no-repeat', $value['repeat'] ); ?>>no-repeat</option>
350 </select>
351 </label>
352 <label class="setting">
353 <b><?php esc_html_e( 'Size', 'quadmenu' ); ?></b>
354 <select id="edit-menu-item-background-size-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-size" name="<?php echo esc_attr( $name . '[size]' ); ?>" value="<?php echo esc_attr( $value['size'] ); ?>">
355 <option value="auto" <?php selected( 'auto', $value['size'] ); ?>>auto</option>
356 <option value="cover" <?php selected( 'cover', $value['size'] ); ?>>cover</option>
357 <option value="contain" <?php selected( 'contain', $value['size'] ); ?>>contain</option>
358 </select>
359 </label>
360 <label class="setting">
361 <b><?php esc_html_e( 'Origin', 'quadmenu' ); ?></b>
362 <select id="edit-menu-item-background-origin-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-origin" name="<?php echo esc_attr( $name . '[origin]' ); ?>" value="<?php echo esc_attr( $value['origin'] ); ?>">
363 <option value="content-box" <?php selected( 'content-box', $value['origin'] ); ?>>Boxed</option>
364 <option value="border-box" <?php selected( 'border-box', $value['origin'] ); ?>>Stretch</option>
365 </select>
366 </label>
367 <div class="clearfix"></div>
368 </span>
369 <?php
370 break;
371
372 case 'media':
373 $_src = ! empty( $value['thumbnail-id'] ) ? wp_get_attachment_image_src( $value['thumbnail-id'], 'thumbnail' ) : false;
374
375 $have_media = ( strlen( $_src[0] ) > 0 ? 'active' : '' );
376 ?>
377 <span class="field-wrapper <?php echo esc_attr( $have_media ); ?>">
378 <span class="edit-menu-item-media-thumbnail">
379 <?php if ( $have_media ) : ?>
380 <img src="<?php echo esc_attr( $_src[0] ); ?>" width="50" height="50" id="mega-media-thumbnail-menu-item-<?php echo esc_attr( $item->ID ); ?>" title="menu-item-<?php echo esc_attr( $item->ID ); ?>-media" alt="menu-item-<?php echo esc_attr( $item->ID ); ?>-media">
381 <?php endif ?>
382 </span>
383 <span class="edit-menu-item-media-text"><?php esc_html_e( 'Select media image', 'quadmenu' ); ?></span>
384 <a id="<?php echo esc_attr( $item->ID ); ?>" class="menu-item-media-upload" href="javascript:void(0)"><?php esc_html_e( 'Edit', 'quadmenu' ); ?></a>
385 <a id="<?php echo esc_attr( $item->ID ); ?>" class="menu-item-media-clear" href="javascript:void(0)" ><?php esc_html_e( 'Remove', 'quadmenu' ); ?></a>
386 <span class="edit-menu-item-media-css">
387 <?php
388 if ( $have_media ) :
389 echo $value['position'] . ',' . $value['repeat'] . ',' . $value['attachment'] . ',' . $value['size'];
390 endif
391 ?>
392 </span>
393 <input type="hidden" id="edit-menu-item-media-thumbnail-id-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-thumbnail-id" name="<?php echo esc_attr( $name . '[thumbnail-id]' ); ?>" value="<?php echo esc_attr( $value['thumbnail-id'] ); ?>" />
394 <input type="hidden" id="edit-menu-item-media-position-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-position" name="<?php echo esc_attr( $name . '[position]' ); ?>" value="<?php echo esc_attr( $value['position'] ); ?>" />
395 <input type="hidden" id="edit-menu-item-media-repeat-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-repeat" name="<?php echo esc_attr( $name . '[repeat]' ); ?>" value="<?php echo esc_attr( $value['repeat'] ); ?>" />
396 <input type="hidden" id="edit-menu-item-media-attachment-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-attachment" name="<?php echo esc_attr( $name . '[attachment]' ); ?>" value="<?php echo esc_attr( $value['attachment'] ); ?>" />
397 <input type="hidden" id="edit-menu-item-media-size-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-size" name="<?php echo esc_attr( $name . '[size]' ); ?>" value="<?php echo esc_attr( $value['size'] ); ?>" /> </span>
398 <?php
399 break;
400
401 default:
402 printf( esc_html__( 'Unknown field %s.', 'quadmenu' ), $type );
403 }
404
405 // echo $desc;
406 // echo $tip;
407 }
408
409 public function form( $menu_obj, $menu_item_depth = 0, $settings = array() ) {
410
411 $fields = $this->nav_menu_item_fields( $menu_obj );
412 ob_start();
413
414 if ( in_array( $menu_obj->object, array( 'search', 'cart', 'login', 'column' ) ) ) {
415 $settings = array_diff( $settings, array( 'url', 'target', 'xfn', 'description' ) );
416 }
417 if ( in_array( $menu_obj->type, array( 'taxonomy', 'post_type', 'post_type_archive' ) ) ) {
418 $settings = array_diff( $settings, array( 'url' ) );
419 }
420 ?>
421 <form id="form_<?php echo esc_attr( $menu_obj->quadmenu ); ?>_<?php echo esc_attr( $menu_obj->ID ); ?>" class="form-<?php echo esc_attr( $menu_obj->quadmenu ); ?>" data-menu_item_id="<?php echo esc_attr( $menu_obj->ID ); ?>" data-menu_item_depth="<?php echo esc_attr( $menu_item_depth ); ?>">
422 <?php
423 foreach ( $settings as $key ) :
424
425 $classes = array();
426
427 $classes[] = 'quadmenu-setting';
428
429 $classes[] = 'quadmenu-setting-' . $fields[ $key ]['type'];
430
431 $classes[] = 'quadmenu-setting-' . $fields[ $key ]['db'];
432
433 if ( isset( $fields[ $key ]['depth'] ) ) {
434
435 if ( is_array( $fields[ $key ]['depth'] ) ) {
436
437 foreach ( $fields[ $key ]['depth'] as $depth ) {
438
439 $classes[] = 'quadmenu-setting-depth-' . $depth;
440 }
441 } else {
442
443 $classes[] = 'quadmenu-setting-depth-' . $fields[ $key ]['depth'];
444 }
445 }
446 ?>
447 <div class="<?php echo join( ' ', array_map( 'sanitize_html_class', $classes ) ); ?>">
448 <label>
449 <?php if ( ! empty( $fields[ $key ]['title'] ) ) : ?>
450 <span class="title"><?php echo esc_html( $fields[ $key ]['title'] ); ?></span>
451 <?php endif; ?>
452 <?php $this->nav_menu_item_settings( $fields[ $key ], $menu_obj ); ?>
453 <?php if ( ! empty( $fields[ $key ]['desc'] ) ) : ?>
454 <span class="description"><?php echo esc_html( $fields[ $key ]['desc'] ); ?></span>
455 <?php endif; ?>
456 </label>
457 </div>
458 <?php
459 endforeach;
460 ?>
461 </form>
462 <?php
463 return ob_get_clean();
464 }
465
466 public function ajax_add_nav_menu_item_panel() {
467
468 if ( ! check_ajax_referer( 'quadmenu', 'nonce', false ) ) {
469 Plugin::send_json_error( esc_html__( 'Please reload the page.', 'quadmenu' ) );
470 }
471
472 $panel = sanitize_text_field( $_REQUEST['menu_item_panel'] );
473
474 $menu_item_id = absint( $_REQUEST['menu_item_id'] );
475
476 $menu_id = absint( $_REQUEST['menu_id'] );
477
478 if ( ob_get_contents() ) {
479 ob_clean();
480 }
481
482 $menu_obj = Plugin::wp_setup_nav_menu_item( $menu_item_id );
483
484 $items = Configuration::custom_nav_menu_items();
485
486 if ( ! $settings = $items->{$menu_obj->quadmenu}->panels->$panel->settings ) {
487 Plugin::send_json_error( json_encode( $menu_obj ) );
488 }
489
490 if ( $form = $this->form( $menu_obj, 0, $settings ) ) {
491 Plugin::send_json_success( $form );
492 } else {
493 Plugin::send_json_error( json_encode( $menu_obj ) );
494 }
495
496 wp_die();
497 }
498
499 public function panels( $menu_item_depth, $menu_obj, $menu_id ) {
500
501 $items = Configuration::custom_nav_menu_items();
502
503 $this->panels = $items->{$menu_obj->quadmenu}->panels;
504 ?>
505 <ul role="tablist" id="settings_<?php echo esc_attr( $menu_obj->ID ); ?>" class="quadmenu-tabs vertical">
506 <li class="active"><a href="#setting_default_<?php echo esc_attr( $menu_obj->ID ); ?>" data-quadmenu="tab"><i class="dashicons dashicons-menu"></i><span class="title"><?php echo esc_html( 'Default', 'quadmenu' ); ?></span></a></li>
507 <?php foreach ( $this->panels as $key => $panel ) : ?>
508 <?php
509 $classes = array();
510
511 if ( isset( $panel->depth ) ) {
512 foreach ( $panel->depth as $depth ) {
513 $classes[] = 'quadmenu-panel-depth-' . $depth;
514 }
515 }
516
517 $classes[] = 'quadmenu-panel-' . $key;
518 ?>
519 <li class="<?php echo join( ' ', array_map( 'sanitize_html_class', $classes ) ); ?>" data-menu_item_id="<?php echo esc_attr( $menu_obj->ID ); ?>" data-menu_item_panel="<?php echo esc_attr( $key ); ?>"><a class="<?php echo esc_attr( $key ); ?>" href="#setting_<?php echo esc_attr( $key ); ?>_<?php echo esc_attr( $menu_obj->ID ); ?>" data-quadmenu="tab"><i class="<?php echo esc_attr( $panel->icon ); ?>"></i><span class="title"><?php echo esc_html( $panel->title ); ?></span></a></li>
520 <?php $this->panels->{$key} = $panel->settings; ?>
521 <?php endforeach; ?>
522 <?php do_action( 'quadmenu_modal_panels_tab', $menu_item_depth, $menu_obj, $menu_id ); ?>
523 </ul>
524 <div class="quadmenu-tabs-content<?php // echo join(' ', array_map('sanitize_html_class', $classes)); ?>">
525 <div role="tabpanel" class="quadmenu-tab-pane quadmenu-tab-pane-default active" id="setting_default_<?php echo esc_attr( $menu_obj->ID ); ?>">
526 <?php echo $this->form( $menu_obj, 0, array( 'url', 'target', 'title', 'attr-title', 'classes', 'xfn', 'description' ) ); ?>
527 </div>
528 <?php foreach ( $this->panels as $key => $settings ) : ?>
529 <div role="tabpanel" class="quadmenu-tab-pane quadmenu-tab-pane-<?php echo esc_attr( $key ); ?> fade" id="setting_<?php echo esc_attr( $key ); ?>_<?php echo esc_attr( $menu_obj->ID ); ?>">
530 <span class="spinner"></span>
531 </div>
532 <?php endforeach; ?>
533 <?php do_action( 'quadmenu_modal_panels_pane', $menu_item_depth, $menu_obj, $menu_id ); ?>
534 </div>
535 <?php
536 }
537
538 public static function instance() {
539 if ( ! isset( self::$instance ) ) {
540 self::$instance = new self();
541 }
542 return self::$instance;
543 }
544 }
545
546