PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.1.6
Adminify – White Label, Admin Menu Editor, Login Customizer v3.1.6
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 4.1.17 All 164 releases
← All changes | Inc/Modules/MenuDuplicator/MenuDuplicator.php +50 -82 4.2.243.1.6 View file →
@@ -1,12 +1,10 @@
1 1 <?php
2 2
3 -namespace PXLBSAdminify\Inc\Modules\MenuDuplicator;
3 +namespace WPAdminify\Inc\Modules\MenuDuplicator;
4 4
5 -use PXLBSAdminify\Inc\Utils;
6 -
7 5 // no direct access allowed
8 -if (!defined('ABSPATH')) {
6 +if ( ! defined( 'ABSPATH' ) ) {
9 7 exit;
10 8 }
11 9
12 10 /**
@@ -15,18 +13,16 @@
15 13 *
16 14 * @author Jewel Theme <support@jeweltheme.com>
17 15 */
18 16
19 -class MenuDuplicator
20 -{
17 +class MenuDuplicator {
21 18
22 - public function __construct()
23 - {
24 - add_action('admin_footer', [$this, 'add_duplicate_button'], 11);
25 - add_action('admin_footer', [$this, 'creating_menu_duplicate'], 6);
19 + public function __construct() {
20 + add_action( 'admin_footer', [ $this, 'jltwp_adminify_add_duplicate_button' ], 11 );
21 + add_action( 'admin_footer', [ $this, 'jltwp_adminify_creating_menu_duplicate' ], 6 );
26 22
27 23 // Duplicate Nav Menu Item
28 - add_action('admin_footer', [$this, 'duplicate_nav_menu_item'], 12);
24 + add_action( 'admin_footer', [ $this, 'jltwp_adminify_duplicate_nav_menu_item' ], 12 );
29 25 }
30 26
31 27 /**
32 28 * Duplicate Menu Button
@@ -32,32 +28,20 @@
32 28 * Duplicate Menu Button
33 29 *
34 30 * @return void
35 31 */
36 - public function add_duplicate_button()
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 -
32 + public function jltwp_adminify_add_duplicate_button() {
43 33 $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 - );
34 + $current_menu = get_user_option( 'nav_menu_recently_edited' );
35 + if ( $current_screen->id == 'nav-menus' && $_GET['menu'] != '0' ) {
52 36 $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>';
54 -?>
37 + $return .= '<div style="display:none;" class="AdminifyDuplicateMenuSpinenr spinner is-active"></div><a class="AdminifyDuplicateMenuClick button button-primary button-large menu-save" href="?adminify-menu-duplicate=' . $current_menu . '">' . __( 'Duplicate Menu', 'adminify' ) . '</a>';
38 + ?>
55 39 <script type="text/javascript">
56 40 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. ?>');
41 + update_menu_form.find('.publishing-action').append('<?php echo esc_js( addslashes_gpc( $return ) ); ?>');
58 42 jQuery('.AdminifyDuplicateMenuClick').click(function() {
59 - jQuery('.AdminifyDuplicateMenuSpinenr').addClass('is-active').show();
43 + jQuery('.AdminifyDuplicateMenuSpinenr').show();
60 44 });
61 45 </script>
62 46
63 47 <?php
@@ -68,41 +52,27 @@
68 52 * Creating Menu Duplication
69 53 *
70 54 * @return void
71 55 */
72 - public function creating_menu_duplicate()
73 - {
56 + public function jltwp_adminify_creating_menu_duplicate() {
74 57 $current_screen = get_current_screen();
75 - if ($current_screen->id == 'nav-menus') {
76 - 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 -
91 - $source = wp_get_nav_menu_object($id);
92 - $duplicate = $this->render_menu_duplicate($id, $source->name . ' ' . __('(Copy)', 'adminify'));
93 - if ($duplicate) {
94 - ?>
58 + if ( $current_screen->id == 'nav-menus' ) {
59 + if ( isset( $_GET['adminify-menu-duplicate'] ) ) {
60 + $id = intval( wp_unslash( $_GET['adminify-menu-duplicate'] ) );
61 + $source = wp_get_nav_menu_object( $id );
62 + $duplicate = $this->render_menu_duplicate( sanitize_text_field( wp_unslash( $_GET['adminify-menu-duplicate'] ) ), $source->name . ' ' . __( '(Copy)', 'adminify' ) );
63 + if ( $duplicate ) {
64 + ?>
95 65 <script type="text/javascript">
96 - window.location.replace("<?php echo esc_url(admin_url('nav-menus.php?action=edit&menu=' . $duplicate)); ?>");
66 + window.location.replace("<?php echo esc_url( admin_url( 'nav-menus.php?action=edit&menu=' . $duplicate ) ); ?>");
97 67 </script>
98 - <?php
68 + <?php
99 69 } else {
100 - ?>
70 + ?>
101 71 <script type="text/javascript">
102 - window.location.replace("<?php echo esc_url(admin_url('nav-menus.php')); ?>");
72 + window.location.replace("<?php echo esc_url( admin_url( 'nav-menus.php' ) ); ?>");
103 73 </script>
104 - <?php
74 + <?php
105 75 }
106 76 }
107 77 }
108 78 }
@@ -112,30 +82,29 @@
112 82 * Render Menu Duplicate
113 83 *
114 84 * @return void
115 85 */
116 - public function render_menu_duplicate($id = null, $name = null)
117 - {
86 + public function render_menu_duplicate( $id = null, $name = null ) {
118 87
119 88 // Sanity check
120 - if (empty($id) || empty($name)) {
89 + if ( empty( $id ) || empty( $name ) ) {
121 90 return false;
122 91 }
123 92
124 - $id = intval($id);
125 - $name = sanitize_text_field($name);
126 - $source = wp_get_nav_menu_object($id);
127 - $source_items = wp_get_nav_menu_items($id);
93 + $id = intval( $id );
94 + $name = sanitize_text_field( $name );
95 + $source = wp_get_nav_menu_object( $id );
96 + $source_items = wp_get_nav_menu_items( $id );
128 97
129 - $menu_exists = wp_get_nav_menu_object($name);
98 + $menu_exists = wp_get_nav_menu_object( $name );
130 99
131 - if (!$menu_exists) {
132 - $new_id = wp_create_nav_menu($name);
100 + if ( ! $menu_exists ) {
101 + $new_id = wp_create_nav_menu( $name );
133 102 } else {
134 - return $new_id = $this->render_menu_duplicate($id, $name . ' ' . __('(Copy)', 'adminify'));
103 + return $new_id = $this->render_menu_duplicate( $id, $name . ' ' . __( '(Copy)', 'adminify' ) );
135 104 }
136 105
137 - if (!$new_id || is_array($new_id)) {
106 + if ( ! $new_id || is_array( $new_id ) ) {
138 107 return false;
139 108 }
140 109
141 110 // Key is the original db ID, val is the new
@@ -141,9 +110,9 @@
141 110 // Key is the original db ID, val is the new
142 111 $rel = [];
143 112
144 113 $i = 1;
145 - foreach ($source_items as $menu_item) {
114 + foreach ( $source_items as $menu_item ) {
146 115 $args = [
147 116 'menu-item-db-id' => $menu_item->db_id,
148 117 'menu-item-object-id' => $menu_item->object_id,
149 118 'menu-item-object' => $menu_item->object,
@@ -153,25 +122,25 @@
153 122 'menu-item-url' => $menu_item->url,
154 123 'menu-item-description' => $menu_item->description,
155 124 'menu-item-attr-title' => $menu_item->attr_title,
156 125 'menu-item-target' => $menu_item->target,
157 - 'menu-item-classes' => implode(' ', $menu_item->classes),
126 + 'menu-item-classes' => implode( ' ', $menu_item->classes ),
158 127 'menu-item-xfn' => $menu_item->xfn,
159 128 'menu-item-status' => $menu_item->post_status,
160 129 ];
161 130
162 - $parent_id = wp_update_nav_menu_item($new_id, 0, $args);
131 + $parent_id = wp_update_nav_menu_item( $new_id, 0, $args );
163 132
164 - $rel[$menu_item->db_id] = $parent_id;
133 + $rel[ $menu_item->db_id ] = $parent_id;
165 134
166 135 // did it have a parent? if so, we need to update with the NEW ID
167 - if ($menu_item->menu_item_parent) {
168 - $args['menu-item-parent-id'] = $rel[$menu_item->menu_item_parent];
169 - $parent_id = wp_update_nav_menu_item($new_id, $parent_id, $args);
136 + if ( $menu_item->menu_item_parent ) {
137 + $args['menu-item-parent-id'] = $rel[ $menu_item->menu_item_parent ];
138 + $parent_id = wp_update_nav_menu_item( $new_id, $parent_id, $args );
170 139 }
171 140
172 141 // allow developers to run any custom functionality they'd like
173 - do_action('pxlbsadminify_duplicate_menu_item', $menu_item, $args);
142 + do_action( 'duplicate_menu_item', $menu_item, $args );
174 143
175 144 $i++;
176 145 }
177 146
@@ -183,13 +152,12 @@
183 152 * Duplicate Nav Menu Item
184 153 *
185 154 * @return void
186 155 */
187 - public function duplicate_nav_menu_item()
188 - {
156 + public function jltwp_adminify_duplicate_nav_menu_item() {
189 157 global $pagenow;
190 158
191 - if ($pagenow != 'nav-menus.php' || !current_user_can('edit_theme_options')) {
159 + if ( $pagenow != 'nav-menus.php' || ! current_user_can( 'edit_theme_options' ) ) {
192 160 return;
193 161 }
194 162
195 163 ?>
@@ -246,9 +214,9 @@
246 214 }
247 215 };
248 216
249 217 $.post(ajaxurl, form_data, function(menuMarkup) {
250 - // console.log($(menuMarkup));
218 + console.log($(menuMarkup));
251 219
252 220 var newElement = $(menuMarkup);
253 221
254 222 $('.hide-column-tog').not(':checked').each(function() {
@@ -275,7 +243,7 @@
275 243 });
276 244
277 245 })(jQuery)
278 246 </script>
279 -<?php
247 + <?php
280 248 }
281 249 }