assets
3 weeks ago
views
7 months ago
api.php
3 weeks ago
init.php
3 weeks ago
options.php
4 years ago
walker-nav-menu.php
3 weeks ago
api.php
90 lines
| 1 | <?php |
| 2 | namespace ElementsKit_Lite; |
| 3 | |
| 4 | use ElementsKit_Lite\Libs\Framework\Attr; |
| 5 | use ElementsKit_Lite\Modules\Megamenu\Init; |
| 6 | |
| 7 | defined( 'ABSPATH' ) || exit; |
| 8 | |
| 9 | class Megamenu_Api extends Core\Handler_Api { |
| 10 | |
| 11 | public function config() { |
| 12 | $this->prefix = 'megamenu'; |
| 13 | } |
| 14 | |
| 15 | private function current_user_can_save_menuitem_settings() { |
| 16 | return current_user_can( 'manage_options' ) && ( is_multisite() ? is_super_admin() : current_user_can( 'unfiltered_html' ) ); |
| 17 | } |
| 18 | |
| 19 | private function sanitize_icon_class( $icon_class ) { |
| 20 | $classes = preg_split( '/\s+/', sanitize_text_field( wp_unslash( $icon_class ) ) ); |
| 21 | $classes = array_filter( array_map( 'sanitize_html_class', $classes ) ); |
| 22 | |
| 23 | return implode( ' ', $classes ); |
| 24 | } |
| 25 | |
| 26 | private function sanitize_color( $color ) { |
| 27 | $color = sanitize_text_field( wp_unslash( $color ) ); |
| 28 | |
| 29 | return sanitize_hex_color( $color ) ? $color : ''; |
| 30 | } |
| 31 | |
| 32 | private function sanitize_menuitem_settings( $settings ) { |
| 33 | $settings = is_array( $settings ) ? wp_unslash( $settings ) : array(); |
| 34 | |
| 35 | return array( |
| 36 | 'menu_id' => isset( $settings['menu_id'] ) ? absint( $settings['menu_id'] ) : 0, |
| 37 | 'menu_has_child' => isset( $settings['menu_has_child'] ) ? sanitize_text_field( $settings['menu_has_child'] ) : '', |
| 38 | 'menu_enable' => empty( $settings['menu_enable'] ) ? 0 : 1, |
| 39 | 'menu_icon' => isset( $settings['menu_icon'] ) ? $this->sanitize_icon_class( $settings['menu_icon'] ) : '', |
| 40 | 'menu_icon_color' => isset( $settings['menu_icon_color'] ) ? $this->sanitize_color( $settings['menu_icon_color'] ) : '', |
| 41 | 'menu_badge_text' => isset( $settings['menu_badge_text'] ) ? sanitize_text_field( $settings['menu_badge_text'] ) : '', |
| 42 | 'menu_badge_color' => isset( $settings['menu_badge_color'] ) ? $this->sanitize_color( $settings['menu_badge_color'] ) : '', |
| 43 | 'menu_badge_background' => isset( $settings['menu_badge_background'] ) ? $this->sanitize_color( $settings['menu_badge_background'] ) : '', |
| 44 | 'mobile_submenu_content_type' => isset( $settings['mobile_submenu_content_type'] ) ? sanitize_key( $settings['mobile_submenu_content_type'] ) : 'builder_content', |
| 45 | 'vertical_megamenu_position_type' => isset( $settings['vertical_megamenu_position_type'] ) ? sanitize_key( $settings['vertical_megamenu_position_type'] ) : 'relative_position', |
| 46 | 'vertical_menu_width' => isset( $settings['vertical_menu_width'] ) ? sanitize_text_field( $settings['vertical_menu_width'] ) : '', |
| 47 | 'megamenu_width_type' => isset( $settings['megamenu_width_type'] ) ? sanitize_key( $settings['megamenu_width_type'] ) : 'default_width', |
| 48 | 'megamenu_ajax_load' => isset( $settings['megamenu_ajax_load'] ) && 'yes' === $settings['megamenu_ajax_load'] ? 'yes' : 'no', |
| 49 | ); |
| 50 | } |
| 51 | |
| 52 | public function get_save_menuitem_settings() { |
| 53 | if ( ! $this->current_user_can_save_menuitem_settings() ) { |
| 54 | return; |
| 55 | } |
| 56 | $settings = $this->sanitize_menuitem_settings( $this->request['settings'] ); |
| 57 | $menu_item_id = $settings['menu_id']; |
| 58 | $menu_item_settings = wp_json_encode( $settings, JSON_UNESCAPED_UNICODE ); |
| 59 | update_post_meta( $menu_item_id, Init::$menuitem_settings_key, $menu_item_settings ); |
| 60 | |
| 61 | return array( |
| 62 | 'saved' => 1, |
| 63 | 'message' => esc_html__( 'Saved', 'elementskit-lite' ), |
| 64 | ); |
| 65 | } |
| 66 | |
| 67 | public function get_get_menuitem_settings() { |
| 68 | if ( ! current_user_can( 'manage_options' ) ) { |
| 69 | return; |
| 70 | } |
| 71 | $menu_item_id = $this->request['menu_id']; |
| 72 | |
| 73 | $data = get_post_meta( $menu_item_id, Init::$menuitem_settings_key, true ); |
| 74 | return (array) json_decode( $data ); |
| 75 | } |
| 76 | |
| 77 | public function get_megamenu_content() { |
| 78 | $menu_item_id = intval($this->request['id']); |
| 79 | |
| 80 | if ('publish' !== get_post_status ($menu_item_id) || post_password_required($menu_item_id)) { |
| 81 | return; |
| 82 | } |
| 83 | |
| 84 | $output = \ElementsKit_Lite\Utils::render_elementor_content($menu_item_id); |
| 85 | |
| 86 | return $output; |
| 87 | } |
| 88 | } |
| 89 | new Megamenu_Api(); |
| 90 |