PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.2.4.1
Adminify – White Label, Admin Menu Editor, Login Customizer v3.2.4.1
4.3.2 4.3.1 4.3.0 4.2.26 4.2.25 4.2.24 4.2.23 4.2.22 4.2.21 4.2.20 4.2.19 4.2.18 4.2.17 4.2.16 4.2.15 4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 All 165 releases
← All changes | Inc/Modules/MenuDuplicator/MenuDuplicator.php +15 -39 4.2.113.2.4.1 View file →
@@ -1,9 +1,9 @@
1 1 <?php
2 2
3 -namespace PXLBSAdminify\Inc\Modules\MenuDuplicator;
3 +namespace WPAdminify\Inc\Modules\MenuDuplicator;
4 4
5 -use PXLBSAdminify\Inc\Utils;
5 +use WPAdminify\Inc\Utils;
6 6
7 7 // no direct access allowed
8 8 if (!defined('ABSPATH')) {
9 9 exit;
@@ -20,13 +20,13 @@
20 20 {
21 21
22 22 public function __construct()
23 23 {
24 - add_action('admin_footer', [$this, 'add_duplicate_button'], 11);
25 - add_action('admin_footer', [$this, 'creating_menu_duplicate'], 6);
24 + add_action('admin_footer', [$this, 'jltwp_adminify_add_duplicate_button'], 11);
25 + add_action('admin_footer', [$this, 'jltwp_adminify_creating_menu_duplicate'], 6);
26 26
27 27 // Duplicate Nav Menu Item
28 - add_action('admin_footer', [$this, 'duplicate_nav_menu_item'], 12);
28 + add_action('admin_footer', [$this, 'jltwp_adminify_duplicate_nav_menu_item'], 12);
29 29 }
30 30
31 31 /**
32 32 * Duplicate Menu Button
@@ -32,30 +32,19 @@
32 32 * Duplicate Menu Button
33 33 *
34 34 * @return void
35 35 */
36 - public function add_duplicate_button()
36 + public function jltwp_adminify_add_duplicate_button()
37 37 {
38 - // Only users who can manage menus may see/use the duplicate action.
39 - if ( ! current_user_can( 'edit_theme_options' ) ) {
40 - return;
41 - }
42 -
43 38 $current_screen = get_current_screen();
44 - $current_menu = (int) get_user_option('nav_menu_recently_edited');
45 - // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only check, no state change.
46 - if ($current_screen->id == 'nav-menus' && isset($_GET['menu']) && sanitize_text_field(wp_unslash($_GET['menu'])) != '0') {
47 - // CSRF protection: sign the duplicate action with a nonce tied to the menu id.
48 - $duplicate_url = wp_nonce_url(
49 - add_query_arg( 'adminify-menu-duplicate', $current_menu, admin_url( 'nav-menus.php' ) ),
50 - 'adminify_duplicate_menu_' . $current_menu
51 - );
39 + $current_menu = get_user_option('nav_menu_recently_edited');
40 + if ($current_screen->id == 'nav-menus' && $_GET['menu'] != '0') {
52 41 $return = '';
53 - $return .= '<div class="AdminifyDuplicateMenuSpinenr spinner"></div><a class="AdminifyDuplicateMenuClick button button-primary button-large menu-save" href="' . esc_url( $duplicate_url ) . '">' . __('Duplicate Menu', 'adminify') . '</a>';
42 + $return .= '<div class="AdminifyDuplicateMenuSpinenr spinner"></div><a class="AdminifyDuplicateMenuClick button button-primary button-large menu-save" href="?adminify-menu-duplicate=' . $current_menu . '">' . __('Duplicate Menu', 'adminify') . '</a>';
54 43 ?>
55 44 <script type="text/javascript">
56 45 var update_menu_form = jQuery('#update-nav-menu');
57 - update_menu_form.find('.publishing-action').append('<?php echo Utils::kses_custom($return); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- kses_custom() is a wp_kses() wrapper; output already escaped. ?>');
46 + update_menu_form.find('.publishing-action').append('<?php echo Utils::wp_kses_custom($return); ?>');
58 47 jQuery('.AdminifyDuplicateMenuClick').click(function() {
59 48 jQuery('.AdminifyDuplicateMenuSpinenr').addClass('is-active').show();
60 49 });
61 50 </script>
@@ -68,29 +57,16 @@
68 57 * Creating Menu Duplication
69 58 *
70 59 * @return void
71 60 */
72 - public function creating_menu_duplicate()
61 + public function jltwp_adminify_creating_menu_duplicate()
73 62 {
74 63 $current_screen = get_current_screen();
75 64 if ($current_screen->id == 'nav-menus') {
76 65 if (isset($_GET['adminify-menu-duplicate'])) {
77 -
78 - $id = intval(wp_unslash($_GET['adminify-menu-duplicate']));
79 -
80 - // Authorization: only menu managers may duplicate.
81 - if ( ! current_user_can( 'edit_theme_options' ) ) {
82 - return;
83 - }
84 -
85 - // CSRF: verify the nonce that was attached to the duplicate link.
86 - $nonce = isset( $_GET['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ) : '';
87 - if ( ! wp_verify_nonce( $nonce, 'adminify_duplicate_menu_' . $id ) ) {
88 - wp_die( esc_html__( 'Security check failed.', 'adminify' ) );
89 - }
90 -
66 + $id = intval(wp_unslash($_GET['adminify-menu-duplicate']));
91 67 $source = wp_get_nav_menu_object($id);
92 - $duplicate = $this->render_menu_duplicate($id, $source->name . ' ' . __('(Copy)', 'adminify'));
68 + $duplicate = $this->render_menu_duplicate(sanitize_text_field(wp_unslash($_GET['adminify-menu-duplicate'])), $source->name . ' ' . __('(Copy)', 'adminify'));
93 69 if ($duplicate) {
94 70 ?>
95 71 <script type="text/javascript">
96 72 window.location.replace("<?php echo esc_url(admin_url('nav-menus.php?action=edit&menu=' . $duplicate)); ?>");
@@ -169,9 +145,9 @@
169 145 $parent_id = wp_update_nav_menu_item($new_id, $parent_id, $args);
170 146 }
171 147
172 148 // allow developers to run any custom functionality they'd like
173 - do_action('pxlbsadminify_duplicate_menu_item', $menu_item, $args);
149 + do_action('duplicate_menu_item', $menu_item, $args);
174 150
175 151 $i++;
176 152 }
177 153
@@ -183,9 +159,9 @@
183 159 * Duplicate Nav Menu Item
184 160 *
185 161 * @return void
186 162 */
187 - public function duplicate_nav_menu_item()
163 + public function jltwp_adminify_duplicate_nav_menu_item()
188 164 {
189 165 global $pagenow;
190 166
191 167 if ($pagenow != 'nav-menus.php' || !current_user_can('edit_theme_options')) {