PluginProbe
Polylang / trunk
Polylang vtrunk
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
← All changes | src/admin/admin-nav-menu.php +47 -12 3.8.9 → trunk View file →
@@ -2,8 +2,11 @@
2 2 /**
3 3 * @package Polylang
4 4 */
5 5
6 +use WP_Syntex\Polylang\Switcher\Fields\Menu as Fields;
7 +use WP_Syntex\Polylang\Switcher\Settings\Menu as Settings;
8 +
6 9 /**
7 10 * Manages custom menus translations as well as the language switcher menu item on admin side
8 11 *
9 12 * @since 1.2
@@ -110,12 +113,19 @@
110 113
111 114 $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
112 115 wp_enqueue_script( 'pll_nav_menu', plugins_url( "/js/build/nav-menu{$suffix}.js", POLYLANG_ROOT_FILE ), array(), POLYLANG_VERSION );
113 116
117 + $fields = Fields::get();
118 + $defaults = new Settings( array() );
119 +
120 + foreach ( $fields as $key => $field ) {
121 + $fields[ $key ]['default'] = $defaults->$key;
122 + }
123 +
114 124 $data = array(
115 - 'strings' => PLL_Switcher::get_switcher_options( 'menu', 'string' ), // The strings for the options
116 - 'title' => __( 'Languages', 'polylang' ), // The title
117 - 'val' => array(),
125 + 'data' => $fields,
126 + 'title' => __( 'Languages', 'polylang' ),
127 + 'val' => array(),
118 128 );
119 129
120 130 // Get all language switcher menu items
121 131 $items = get_posts(
@@ -129,9 +139,15 @@
129 139 );
130 140
131 141 // The options values for the language switcher
132 142 foreach ( $items as $item ) {
133 - $data['val'][ $item ] = get_post_meta( $item, '_pll_menu_item', true );
143 + $meta = get_post_meta( $item, '_pll_menu_item', true );
144 +
145 + if ( ! is_array( $meta ) ) {
146 + continue;
147 + }
148 +
149 + $data['val'][ $item ] = Fields::filter( new Settings( Fields::remove_legacy_settings( $meta ) ) );
134 150 }
135 151
136 152 // Send all these data to javascript
137 153 wp_localize_script( 'pll_nav_menu', 'pll_data', $data );
@@ -158,21 +174,25 @@
158 174 if ( empty( $_POST['menu-item-url'] ) || ! is_array( $_POST['menu-item-url'] ) || empty( $_POST['menu-item-url'][ $menu_item_db_id ] ) || '#pll_switcher' !== $_POST['menu-item-url'][ $menu_item_db_id ] ) {
159 175 return;
160 176 }
161 177
162 - $options = array( 'hide_if_no_translation' => 0, 'hide_current' => 0, 'force_home' => 0, 'show_flags' => 0, 'show_names' => 1, 'dropdown' => 0 ); // Default values.
163 -
164 - // Our jQuery form has not been displayed.
178 + // Our JS form has not been displayed.
165 179 if ( empty( $_POST['menu-item-pll-detect'][ $menu_item_db_id ] ) ) {
166 180 if ( ! get_post_meta( $menu_item_db_id, '_pll_menu_item', true ) ) { // Our options were never saved.
167 - update_post_meta( $menu_item_db_id, '_pll_menu_item', $options );
181 + $this->update_menu_meta( $menu_item_db_id, array() );
168 182 }
169 - } else {
170 - foreach ( array_keys( $options ) as $opt ) {
171 - $options[ $opt ] = empty( $_POST[ 'menu-item-' . $opt ][ $menu_item_db_id ] ) ? 0 : 1;
183 + return;
184 + }
185 +
186 + $meta = array();
187 +
188 + foreach ( Fields::get() as $name => $field ) {
189 + if ( isset( $_POST[ "menu-item-{$name}" ][ $menu_item_db_id ] ) ) {
190 + $meta[ $name ] = $_POST[ "menu-item-{$name}" ][ $menu_item_db_id ]; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
172 191 }
173 - update_post_meta( $menu_item_db_id, '_pll_menu_item', $options ); // Allow us to easily identify our nav menu item.
174 192 }
193 +
194 + $this->update_menu_meta( $menu_item_db_id, $meta );
175 195 }
176 196
177 197 /**
178 198 * Assigns menu languages and translations based on (temporary) locations.
@@ -310,6 +330,21 @@
310 330 }
311 331 }
312 332
313 333 $this->options->set( 'nav_menus', $nav_menus );
334 + }
335 +
336 + /**
337 + * Stores the menu data into the database.
338 + *
339 + * @since 3.9
340 + *
341 + * @param int $menu_id Menu ID.
342 + * @param array $data Data to store.
343 + * @return void
344 + */
345 + private function update_menu_meta( int $menu_id, array $data ): void {
346 + $validated = Fields::filter( new Settings( $data ) );
347 + $validated = Fields::add_legacy_settings( $validated );
348 + update_post_meta( $menu_id, '_pll_menu_item', $validated );
314 349 }
315 350 }