Admin Menu Editor - Version 1.9.9

Version Description

  • Fixed a conflict with the "PRO Theme" plugin where "PRO Theme" would expand the wrong top level admin menu if the current submenu item had been moved from one parent menu to another.
  • Fixed PHP notice "Undefined offset: 0 in /wp-includes/capabilities.php on line 70" (various line numbers).
  • Fixed a conflict with "Stripe For WooCommerce" 3.2.12 where the "Stripe Gateway" menu had a wrong URL because a hidden menu item was not removed.
  • Fixed a browser warning about the "ws_nmh_pending_seen_urls" cookie not using the SameSite attribute.
  • Fixed a conflict with WooFunnels where changing the WooFunnels menu icon would result in both of the icons - the original one and the new one - showing up at the same time. The new icon was also misaligned.
  • Minor visual changes.
  • Tested with WordPress 5.7 and 5.8-alpha.
Download this release

Release Info

Developer whiteshadow
Plugin Icon 128x128 Admin Menu Editor
Version 1.9.9
Comparing to
See all releases

Code changes from version 1.9.8 to 1.9.9

css/admin.css CHANGED
@@ -126,7 +126,7 @@ hr.ws-submenu-separator {
126
  }
127
 
128
  #adminmenu .wp-submenu li.opensub > ul.ame-deep-submenu {
129
- top: -7px;
130
  }
131
 
132
  .folded #adminmenu li.opensub > ul.ame-deep-submenu,
126
  }
127
 
128
  #adminmenu .wp-submenu li.opensub > ul.ame-deep-submenu {
129
+ top: -1px;
130
  }
131
 
132
  .folded #adminmenu li.opensub > ul.ame-deep-submenu,
css/force-dashicons.css CHANGED
@@ -17,7 +17,8 @@
17
  font-family: "dashicons", sans-serif !important;
18
  font-size: 20px !important; }
19
  #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image {
20
- background-image: none; }
 
21
  #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-menu:before {
22
  content: "\f333" !important; }
23
  #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-site:before {
17
  font-family: "dashicons", sans-serif !important;
18
  font-size: 20px !important; }
19
  #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image {
20
+ background-image: none !important;
21
+ position: static; }
22
  #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-menu:before {
23
  content: "\f333" !important; }
24
  #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-site:before {
css/force-dashicons.css.map CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "version": 3,
3
- "mappings": "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",
4
  "sources": ["force-dashicons.scss","_dashicons.scss"],
5
  "names": [],
6
  "file": "force-dashicons.css"
1
  {
2
  "version": 3,
3
+ "mappings": "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",
4
  "sources": ["force-dashicons.scss","_dashicons.scss"],
5
  "names": [],
6
  "file": "force-dashicons.css"
css/force-dashicons.scss CHANGED
@@ -18,7 +18,8 @@
18
 
19
  //Some plugins set the icon as a background image instead of a pseudo-element.
20
  & > .wp-menu-image {
21
- background-image: none;
 
22
  }
23
 
24
  @import '_dashicons';
18
 
19
  //Some plugins set the icon as a background image instead of a pseudo-element.
20
  & > .wp-menu-image {
21
+ background-image: none !important;
22
+ position: static;
23
  }
24
 
25
  @import '_dashicons';
css/menu-editor.css CHANGED
@@ -7,7 +7,7 @@
7
 
8
  .ws_main_container {
9
  margin: 2px;
10
- width: 310px;
11
  float: left;
12
  display: block;
13
  border: 1px solid #ccd0d4;
@@ -141,7 +141,7 @@
141
  */
142
  .ws_container {
143
  display: block;
144
- width: 290px;
145
  padding: 3px;
146
  margin: 2px 0 2px 6px; }
147
  body.rtl .ws_container {
@@ -314,7 +314,8 @@
314
  visibility: hidden; }
315
 
316
  /* The input box in each field editor */
317
- #ws_menu_editor .ws_editbox input[type="text"], #ws_menu_editor .ws_editbox select {
 
318
  display: block;
319
  float: left;
320
  width: 254px;
@@ -323,8 +324,8 @@
323
  line-height: 17px;
324
  padding-top: 3px;
325
  padding-bottom: 3px; }
326
- .ame-is-wp53-plus #ws_menu_editor .ws_editbox input[type="text"],
327
- .ame-is-wp53-plus #ws_menu_editor .ws_editbox select {
328
  height: 28px; }
329
 
330
  #ws_menu_editor .ws_edit_field label {
@@ -544,6 +545,9 @@ a.ws_button.ws_button_disabled:hover {
544
  float: left;
545
  width: 5px; }
546
 
 
 
 
547
  /************************************
548
  Capability selector
549
  *************************************/
@@ -917,6 +921,10 @@ a#ws-ame-delete-color-preset:hover {
917
  .settings_page_menu_editor .ui-dialog .ui-dialog-content {
918
  padding: 8px 8px 8px 8px;
919
  font-size: 1.1em; }
 
 
 
 
920
  .settings_page_menu_editor .ui-dialog-titlebar {
921
  display: block;
922
  height: 22px;
@@ -955,6 +963,28 @@ a#ws-ame-delete-color-preset:hover {
955
  #import_dialog .ws_dialog_panel {
956
  height: 64px; }
957
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
958
  .ws_dialog_buttons {
959
  /*height: 30px;*/
960
  text-align: right;
@@ -1501,6 +1531,20 @@ a#ws-ame-delete-color-preset:hover {
1501
  .ame-is-wp53-plus .ws_edit_field input[type="button"] {
1502
  margin-top: 1px; }
1503
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1504
  /*********************************************
1505
  Miscellaneous
1506
  **********************************************/
7
 
8
  .ws_main_container {
9
  margin: 2px;
10
+ width: 316px;
11
  float: left;
12
  display: block;
13
  border: 1px solid #ccd0d4;
141
  */
142
  .ws_container {
143
  display: block;
144
+ width: 296px;
145
  padding: 3px;
146
  margin: 2px 0 2px 6px; }
147
  body.rtl .ws_container {
314
  visibility: hidden; }
315
 
316
  /* The input box in each field editor */
317
+ #ws_menu_editor .ws_editbox input[type="text"],
318
+ #ws_menu_editor .ws_editbox select {
319
  display: block;
320
  float: left;
321
  width: 254px;
324
  line-height: 17px;
325
  padding-top: 3px;
326
  padding-bottom: 3px; }
327
+ .ame-is-wp53-plus #ws_menu_editor .ws_editbox input[type="text"], .ame-is-wp53-plus
328
+ #ws_menu_editor .ws_editbox select {
329
  height: 28px; }
330
 
331
  #ws_menu_editor .ws_edit_field label {
545
  float: left;
546
  width: 5px; }
547
 
548
+ #ws_toggle_toolbar {
549
+ margin-right: 0; }
550
+
551
  /************************************
552
  Capability selector
553
  *************************************/
921
  .settings_page_menu_editor .ui-dialog .ui-dialog-content {
922
  padding: 8px 8px 8px 8px;
923
  font-size: 1.1em; }
924
+ .settings_page_menu_editor .ui-dialog .ame-scrollable-dialog-content {
925
+ max-height: 500px;
926
+ overflow-y: auto;
927
+ padding-top: 0.5em; }
928
  .settings_page_menu_editor .ui-dialog-titlebar {
929
  display: block;
930
  height: 22px;
963
  #import_dialog .ws_dialog_panel {
964
  height: 64px; }
965
 
966
+ .ws_dialog_panel .ame-fixed-label-text {
967
+ display: inline-block;
968
+ min-width: 6em; }
969
+ .ws_dialog_panel .ame-inline-select-with-input {
970
+ vertical-align: baseline; }
971
+ .ws_dialog_panel .ame-box-side-sizes {
972
+ display: flex;
973
+ flex-wrap: wrap;
974
+ max-width: 800px; }
975
+ .ws_dialog_panel .ame-box-side-sizes .ame-fixed-label-text {
976
+ min-width: 4em; }
977
+ .ws_dialog_panel .ame-box-side-sizes label {
978
+ margin-right: 2.5em; }
979
+ .ws_dialog_panel .ame-box-side-sizes input {
980
+ margin-bottom: 0.4em; }
981
+ .ws_dialog_panel .ame-box-side-sizes input[type=number] {
982
+ width: 6em; }
983
+
984
+ .ame-flexbox-break {
985
+ flex-basis: 100%;
986
+ height: 0; }
987
+
988
  .ws_dialog_buttons {
989
  /*height: 30px;*/
990
  text-align: right;
1531
  .ame-is-wp53-plus .ws_edit_field input[type="button"] {
1532
  margin-top: 1px; }
1533
 
1534
+ /*********************************************
1535
+ CSS border style selector
1536
+ **********************************************/
1537
+ .ame-css-border-styles .ame-fixed-label-text {
1538
+ min-width: 5em; }
1539
+ .ame-css-border-styles .ame-border-sample-container {
1540
+ display: inline-block;
1541
+ vertical-align: top;
1542
+ min-height: 28px; }
1543
+ .ame-css-border-styles .ame-border-sample {
1544
+ display: inline-block;
1545
+ width: 14em;
1546
+ border-top: 0.3em solid #444; }
1547
+
1548
  /*********************************************
1549
  Miscellaneous
1550
  **********************************************/
css/menu-editor.scss CHANGED
@@ -10,7 +10,7 @@
10
  margin-top: 9px;
11
  }
12
 
13
- $mainContainerWidth: 310px;
14
  $mainContainerBorderWidth: 1px;
15
  $mainContainerBorderRadius: 0px;
16
  $mainContainerBorderColor: $amePostboxBorderColor; //Was #cdd5d5 before WP 5.3.
@@ -189,7 +189,7 @@ $mainContainerBorderColor: $amePostboxBorderColor; //Was #cdd5d5 before WP 5.3.
189
  */
190
 
191
  .ws_container {
192
- $itemWidth: 290px;
193
  $itemPadding: 3px;
194
  $itemBorderWidth: 1px;
195
  $itemHorizontalMargin: ($mainContainerWidth - $itemWidth - $itemPadding * 2 - $itemBorderWidth * 2) / 2;
@@ -740,6 +740,10 @@ a.ws_button.ws_button_disabled:hover {
740
  width: 5px;
741
  }
742
 
 
 
 
 
743
  /************************************
744
  Capability selector
745
  *************************************/
@@ -1240,6 +1244,12 @@ $colorFieldRightMargin: 5px;
1240
  padding: 8px 8px 8px 8px;
1241
  font-size: 1.1em;
1242
  }
 
 
 
 
 
 
1243
  }
1244
 
1245
  .ui-dialog-titlebar {
@@ -1300,6 +1310,44 @@ $colorFieldRightMargin: 5px;
1300
  height: 64px;
1301
  }
1302
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1303
  .ws_dialog_buttons {
1304
  /*height: 30px;*/
1305
  text-align: right;
@@ -2127,6 +2175,28 @@ $userSelectionPanelPadding: 10px;
2127
  margin-top: 1px;
2128
  }
2129
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2130
  /*********************************************
2131
  Miscellaneous
2132
  **********************************************/
10
  margin-top: 9px;
11
  }
12
 
13
+ $mainContainerWidth: 316px;
14
  $mainContainerBorderWidth: 1px;
15
  $mainContainerBorderRadius: 0px;
16
  $mainContainerBorderColor: $amePostboxBorderColor; //Was #cdd5d5 before WP 5.3.
189
  */
190
 
191
  .ws_container {
192
+ $itemWidth: $mainContainerWidth - 20px;
193
  $itemPadding: 3px;
194
  $itemBorderWidth: 1px;
195
  $itemHorizontalMargin: ($mainContainerWidth - $itemWidth - $itemPadding * 2 - $itemBorderWidth * 2) / 2;
740
  width: 5px;
741
  }
742
 
743
+ #ws_toggle_toolbar {
744
+ margin-right: 0;
745
+ }
746
+
747
  /************************************
748
  Capability selector
749
  *************************************/
1244
  padding: 8px 8px 8px 8px;
1245
  font-size: 1.1em;
1246
  }
1247
+
1248
+ .ame-scrollable-dialog-content {
1249
+ max-height: 500px;
1250
+ overflow-y: auto;
1251
+ padding-top: 0.5em;
1252
+ }
1253
  }
1254
 
1255
  .ui-dialog-titlebar {
1310
  height: 64px;
1311
  }
1312
 
1313
+ .ws_dialog_panel {
1314
+ .ame-fixed-label-text {
1315
+ display: inline-block;
1316
+ min-width: 6em;
1317
+ }
1318
+
1319
+ .ame-inline-select-with-input {
1320
+ vertical-align: baseline;
1321
+ }
1322
+
1323
+ .ame-box-side-sizes {
1324
+ display: flex;
1325
+ flex-wrap: wrap;
1326
+ max-width: 800px;
1327
+
1328
+ .ame-fixed-label-text {
1329
+ min-width: 4em;
1330
+ }
1331
+
1332
+ label {
1333
+ margin-right: 2.5em;
1334
+ }
1335
+
1336
+ input {
1337
+ margin-bottom: 0.4em;
1338
+ }
1339
+
1340
+ input[type=number] {
1341
+ width: 6em;
1342
+ }
1343
+ }
1344
+ }
1345
+
1346
+ .ame-flexbox-break {
1347
+ flex-basis: 100%;
1348
+ height: 0;
1349
+ }
1350
+
1351
  .ws_dialog_buttons {
1352
  /*height: 30px;*/
1353
  text-align: right;
2175
  margin-top: 1px;
2176
  }
2177
 
2178
+ /*********************************************
2179
+ CSS border style selector
2180
+ **********************************************/
2181
+
2182
+ .ame-css-border-styles {
2183
+ .ame-fixed-label-text {
2184
+ min-width: 5em;
2185
+ }
2186
+
2187
+ .ame-border-sample-container {
2188
+ display: inline-block;
2189
+ vertical-align: top;
2190
+ min-height: 28px;
2191
+ }
2192
+
2193
+ .ame-border-sample {
2194
+ display: inline-block;
2195
+ width: 14em;
2196
+ border-top: 0.3em solid #444;
2197
+ }
2198
+ }
2199
+
2200
  /*********************************************
2201
  Miscellaneous
2202
  **********************************************/
css/style-modern-one.css CHANGED
@@ -9,7 +9,7 @@ $hiddenItemBorder: #f1acb1;
9
  -webkit-box-sizing: border-box;
10
  -moz-box-sizing: border-box;
11
  box-sizing: border-box;
12
- width: 298px;
13
  padding: 0;
14
  margin-top: 0;
15
  margin-bottom: 9px;
@@ -67,7 +67,7 @@ a.ws_edit_link {
67
  -moz-box-sizing: border-box;
68
  box-sizing: border-box;
69
  vertical-align: middle;
70
- width: 244.36px;
71
  height: 0;
72
  border: 2px inset rgba(0, 0, 0, 0.2); }
73
  .ws_menu_separator .ws_item_title {
@@ -124,7 +124,7 @@ a.ws_edit_link {
124
  box-shadow: 1px 3px 6px 0 rgba(1, 1, 1, 0.4); }
125
 
126
  .ws_main_container {
127
- width: 318px; }
128
  .ws_main_container .ws_toolbar {
129
  padding: 10px 10px 0; }
130
  .ws_main_container .ws_dropzone {
9
  -webkit-box-sizing: border-box;
10
  -moz-box-sizing: border-box;
11
  box-sizing: border-box;
12
+ width: 304px;
13
  padding: 0;
14
  margin-top: 0;
15
  margin-bottom: 9px;
67
  -moz-box-sizing: border-box;
68
  box-sizing: border-box;
69
  vertical-align: middle;
70
+ width: 249.28px;
71
  height: 0;
72
  border: 2px inset rgba(0, 0, 0, 0.2); }
73
  .ws_menu_separator .ws_item_title {
124
  box-shadow: 1px 3px 6px 0 rgba(1, 1, 1, 0.4); }
125
 
126
  .ws_main_container {
127
+ width: 324px; }
128
  .ws_main_container .ws_toolbar {
129
  padding: 10px 10px 0; }
130
  .ws_main_container .ws_dropzone {
css/style-modern-one.scss CHANGED
@@ -10,7 +10,7 @@ $itemText: #23282D; //WordPress default.
10
 
11
  $horizontalPadding: 7px;
12
  $headVerticalPadding: 7px;
13
- $itemWidth: 298px;
14
  $itemMarginBottom: 9px;
15
 
16
  $selectedItemBackground: #c7c7c7;
10
 
11
  $horizontalPadding: 7px;
12
  $headVerticalPadding: 7px;
13
+ $itemWidth: 304px;
14
  $itemMarginBottom: 9px;
15
 
16
  $selectedItemBackground: #c7c7c7;
includes/ame-utils.php CHANGED
@@ -64,6 +64,43 @@ class ameUtils {
64
  }
65
  return null;
66
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
 
69
  class ameFileLock {
64
  }
65
  return null;
66
  }
67
+
68
+ /**
69
+ * Capitalize the first character of every word. Supports UTF-8.
70
+ *
71
+ * @param string $input
72
+ * @return string
73
+ */
74
+ public static function ucWords($input) {
75
+ static $hasUnicodeSupport = null, $charset = 'UTF-8';
76
+ if ( $hasUnicodeSupport === null ) {
77
+ //We need the mbstring extension and PCRE UTF-8 support.
78
+ $hasUnicodeSupport = function_exists('mb_list_encodings')
79
+ && (@preg_match('/\pL/u', 'a') === 1)
80
+ && function_exists('get_bloginfo');
81
+
82
+ if ( $hasUnicodeSupport ) {
83
+ //Technically, the encoding can change if something switches WP to a different site
84
+ //in the middle of a request, but we'll ignore that possibility.
85
+ $charset = get_bloginfo('charset');
86
+ $hasUnicodeSupport = in_array($charset, mb_list_encodings()) && ($charset === 'UTF-8');
87
+ }
88
+ }
89
+
90
+ if ( $hasUnicodeSupport ) {
91
+ $totalLength = mb_strlen($input);
92
+ $words = preg_split('/([\s\-_]++)/u', $input, null, PREG_SPLIT_DELIM_CAPTURE);
93
+ $output = array();
94
+ foreach ($words as $word) {
95
+ $firstCharacter = mb_substr($word, 0, 1, $charset);
96
+ //In old PHP versions, you must specify a non-null length to get the rest of the string.
97
+ $remainder = mb_substr($word, 1, $totalLength, $charset);
98
+ $output[] = mb_strtoupper($firstCharacter, $charset) . $remainder;
99
+ }
100
+ return implode('', $output);
101
+ }
102
+ return ucwords($input);
103
+ }
104
  }
105
 
106
  class ameFileLock {
includes/editor-page.php CHANGED
@@ -40,7 +40,7 @@ if ( !apply_filters('admin_menu_editor_is_pro', false) ){
40
  var screenLinks = $('#screen-meta-links');
41
  screenLinks.append(
42
  '<div id="ws-pro-version-notice" class="custom-screen-meta-link-wrap">' +
43
- '<a href="http://adminmenueditor.com/upgrade-to-pro/?utm_source=Admin%2BMenu%2BEditor%2Bfree&utm_medium=text_link&utm_content=top_upgrade_link&utm_campaign=Plugins" id="ws-pro-version-notice-link" class="show-settings custom-screen-meta-link" target="_blank" title="View Pro version details">Upgrade to Pro</a>' +
44
  '</div>'
45
  );
46
  })(jQuery);
@@ -102,6 +102,9 @@ function ame_output_sort_buttons($icons) {
102
 
103
  <a id='ws_new_menu' class='ws_button' href='javascript:void(0)' title='New menu'><img src='<?php echo $icons['new']; ?>' alt="New menu" /></a>
104
  <a id='ws_new_separator' class='ws_button' href='javascript:void(0)' title='New separator'><img src='<?php echo $icons['new-separator']; ?>' alt="New separator" /></a>
 
 
 
105
 
106
  <?php if ( $is_pro_version ): ?>
107
  <div class="ws_separator">&nbsp;</div>
40
  var screenLinks = $('#screen-meta-links');
41
  screenLinks.append(
42
  '<div id="ws-pro-version-notice" class="custom-screen-meta-link-wrap">' +
43
+ '<a href="https://adminmenueditor.com/upgrade-to-pro/?utm_source=Admin%2BMenu%2BEditor%2Bfree&utm_medium=text_link&utm_content=top_upgrade_link&utm_campaign=Plugins" id="ws-pro-version-notice-link" class="show-settings custom-screen-meta-link" target="_blank" title="View Pro version details">Upgrade to Pro</a>' +
44
  '</div>'
45
  );
46
  })(jQuery);
102
 
103
  <a id='ws_new_menu' class='ws_button' href='javascript:void(0)' title='New menu'><img src='<?php echo $icons['new']; ?>' alt="New menu" /></a>
104
  <a id='ws_new_separator' class='ws_button' href='javascript:void(0)' title='New separator'><img src='<?php echo $icons['new-separator']; ?>' alt="New separator" /></a>
105
+ <?php if ( $is_pro_version ): ?>
106
+ <a id='ws_new_heading' class='ws_button' href='javascript:void(0)' title='New heading'><img src='<?php echo $icons['new-heading']; ?>' alt="New heading" /></a>
107
+ <?php endif; ?>
108
 
109
  <?php if ( $is_pro_version ): ?>
110
  <div class="ws_separator">&nbsp;</div>
includes/menu-editor-core.php CHANGED
@@ -88,7 +88,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
88
  public $virtual_cap_mode = 3; //self::ALL_VIRTUAL_CAPS
89
 
90
  /**
91
- * @var array An index of URLs relative to /wp-admin/. Any menus that match the index will be ignored.
92
  */
93
  private $menu_url_blacklist = array();
94
 
@@ -125,6 +125,20 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
125
  */
126
  private $last_menu_exception = null;
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  function init(){
129
  $this->sitewide_options = true;
130
 
@@ -309,6 +323,8 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
309
  'index.php?page=simple-calendar_about' => true,
310
  'index.php?page=simple-calendar_credits' => true,
311
  'index.php?page=simple-calendar_translators' => true,
 
 
312
  );
313
 
314
  //AJAXify screen options
@@ -331,7 +347,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
331
  //to the request vars even if this PHP misfeature is disabled.
332
  $this->capture_request_vars();
333
 
334
- add_action('admin_enqueue_scripts', array($this, 'enqueue_menu_fix_script'));
335
 
336
  //Enqueue miscellaneous helper scripts and styles.
337
  add_action('admin_enqueue_scripts', array($this, 'enqueue_helper_scripts'));
@@ -609,6 +625,8 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
609
  //Save the merged menu for later - the editor page will need it
610
  $this->merged_custom_menu = $custom_menu;
611
 
 
 
612
  //Convert our custom menu to the $menu + $submenu structure used by WP.
613
  //Note: This method sets up multiple internal fields and may cause side-effects.
614
  $this->user_cap_cache_enabled = true;
@@ -897,18 +915,25 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
897
 
898
  /**
899
  * @access private
 
900
  */
901
- public function register_jquery_plugins() {
902
- //jQuery JSON plugin
903
- wp_register_auto_versioned_script('jquery-json', plugins_url('js/jquery.json.js', $this->plugin_file), array('jquery'));
904
- //jQuery sort plugin
905
- wp_register_auto_versioned_script('jquery-sort', plugins_url('js/jquery.sort.js', $this->plugin_file), array('jquery'));
906
- //qTip2 - jQuery tooltip plugin
907
- wp_register_auto_versioned_script('jquery-qtip', plugins_url('js/jquery.qtip.min.js', $this->plugin_file), array('jquery'));
908
- //jQuery Form plugin. This is a more recent version than the one included with WP.
909
- wp_register_auto_versioned_script('ame-jquery-form', plugins_url('js/jquery.form.js', $this->plugin_file), array('jquery'));
910
- //jQuery cookie plugin
911
- wp_register_auto_versioned_script('ame-jquery-cookie', plugins_url('js/jquery.biscuit.js', $this->plugin_file), array('jquery'));
 
 
 
 
 
 
912
  }
913
 
914
  /**
@@ -1300,6 +1325,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
1300
  *
1301
  * @param array|null $custom_menu
1302
  * @param string|null $config_id Supported values: 'network-admin', 'global' or 'site'
 
1303
  */
1304
  function set_custom_menu($custom_menu, $config_id = null) {
1305
  if ( $config_id === null ) {
@@ -1327,14 +1353,13 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
1327
  $site_specific_options = array();
1328
  }
1329
  $site_specific_options['custom_menu'] = $custom_menu;
1330
- update_option($this->option_name, $site_specific_options);
1331
  } else if ($config_id === 'global') {
1332
  $this->options['custom_menu'] = $custom_menu;
1333
- $this->save_options();
1334
-
1335
  } else if ($config_id === 'network-admin' ) {
1336
  $this->options['custom_network_menu'] = $custom_menu;
1337
- $this->save_options();
1338
  } else {
1339
  throw new LogicException(sprintf('Invalid menu configuration ID: "%s"', $config_id));
1340
  }
@@ -1343,6 +1368,8 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
1343
  $this->cached_custom_menu = null;
1344
  $this->cached_virtual_caps = null;
1345
  $this->cached_user_caps = array();
 
 
1346
  }
1347
 
1348
  /**
@@ -2511,6 +2538,11 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
2511
  //Remember if the user has changed any menu icons to different Dashicons.
2512
  $menu['has_modified_dashicons'] = ameModifiedIconDetector::detect($menu);
2513
 
 
 
 
 
 
2514
  //Which menu configuration are we changing?
2515
  $config_id = isset($post['config_id']) ? $post['config_id'] : null;
2516
  if ( !in_array($config_id, array('site', 'global', 'network-admin')) ) {
@@ -2518,7 +2550,39 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
2518
  }
2519
 
2520
  //Save the custom menu
2521
- $this->set_custom_menu($menu, $config_id);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2522
 
2523
  //Redirect back to the editor and display the success message.
2524
  $query = array('message' => 1);
@@ -3179,11 +3243,20 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
3179
  * would not be highlighted properly when the user visits them.
3180
  */
3181
  public function enqueue_menu_fix_script() {
 
 
 
 
 
 
 
 
 
3182
  wp_enqueue_auto_versioned_script(
3183
  'ame-menu-fix',
3184
  plugins_url('js/menu-highlight-fix.js', $this->plugin_file),
3185
  array('jquery'),
3186
- true
3187
  );
3188
  }
3189
 
@@ -3242,7 +3315,20 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
3242
  return $this->cached_user_caps[$capability];
3243
  }
3244
 
3245
- $user_can = apply_filters('admin_menu_editor-current_user_can', current_user_can($capability), $capability);
 
 
 
 
 
 
 
 
 
 
 
 
 
3246
  $this->cached_user_caps[$capability] = $user_can;
3247
  return $user_can;
3248
  }
@@ -3647,7 +3733,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
3647
  'ame-helper-style',
3648
  plugins_url('css/admin.css', $this->plugin_file),
3649
  array(),
3650
- '20201031'
3651
  );
3652
 
3653
  if ( $this->options['force_custom_dashicons'] ) {
@@ -3658,7 +3744,7 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework {
3658
  'ame-force-dashicons',
3659
  plugins_url('css/force-dashicons.css', $this->plugin_file),
3660
  array(),
3661
- '20190810'
3662
  );
3663
  }
3664
  }
@@ -4625,7 +4711,12 @@ class ameMenuTemplateBuilder {
4625
  //Skip blacklisted menus.
4626
  //BUG: We shouldn't skip top level menus that have non-blacklisted submenu items.
4627
  if ( isset($item['url'], $this->blacklist[$item['url']]) ) {
4628
- return;
 
 
 
 
 
4629
  }
4630
 
4631
  $name = $this->sanitizeMenuTitle($item['menu_title']);
88
  public $virtual_cap_mode = 3; //self::ALL_VIRTUAL_CAPS
89
 
90
  /**
91
+ * @var array<string,true|string> An index of URLs relative to /wp-admin/. Any menus that match the index will be ignored.
92
  */
93
  private $menu_url_blacklist = array();
94
 
125
  */
126
  private $last_menu_exception = null;
127
 
128
+ private static $jquery_plugins = array(
129
+ //jQuery JSON plugin
130
+ 'jquery-json' => 'js/jquery.json.js',
131
+ //jQuery sort plugin
132
+ 'jquery-sort' => 'js/jquery.sort.js',
133
+ //qTip2 - jQuery tooltip plugin
134
+ 'jquery-qtip' => 'js/jquery.qtip.min.js',
135
+ //jQuery Form plugin. This is a more recent version than the one included with WP.
136
+ 'ame-jquery-form' => 'js/jquery.form.js',
137
+ //jQuery cookie plugin
138
+ 'ame-jquery-cookie' => 'js/jquery.biscuit.js',
139
+ );
140
+ private $registered_jquery_plugins = array();
141
+
142
  function init(){
143
  $this->sitewide_options = true;
144
 
323
  'index.php?page=simple-calendar_about' => true,
324
  'index.php?page=simple-calendar_credits' => true,
325
  'index.php?page=simple-calendar_translators' => true,
326
+ //Stripe For WooCommerce 3.2.12
327
+ 'wc_stripe' => 'submenu',
328
  );
329
 
330
  //AJAXify screen options
347
  //to the request vars even if this PHP misfeature is disabled.
348
  $this->capture_request_vars();
349
 
350
+ add_action('admin_enqueue_scripts', array($this, 'enqueue_menu_fix_script'), 8);
351
 
352
  //Enqueue miscellaneous helper scripts and styles.
353
  add_action('admin_enqueue_scripts', array($this, 'enqueue_helper_scripts'));
625
  //Save the merged menu for later - the editor page will need it
626
  $this->merged_custom_menu = $custom_menu;
627
 
628
+ do_action('admin_menu_editor-menu_merged', $custom_menu, $this->merged_custom_menu);
629
+
630
  //Convert our custom menu to the $menu + $submenu structure used by WP.
631
  //Note: This method sets up multiple internal fields and may cause side-effects.
632
  $this->user_cap_cache_enabled = true;
915
 
916
  /**
917
  * @access private
918
+ * @param string[]|null $handles
919
  */
920
+ public function register_jquery_plugins($handles = null) {
921
+ if ( $handles === null ) {
922
+ $handles = array_keys(self::$jquery_plugins);
923
+ }
924
+
925
+ foreach ($handles as $handle) {
926
+ if ( !isset(self::$jquery_plugins[$handle]) || !empty($this->registered_jquery_plugins[$handle]) ) {
927
+ continue;
928
+ }
929
+
930
+ wp_register_auto_versioned_script(
931
+ $handle,
932
+ plugins_url(self::$jquery_plugins[$handle], $this->plugin_file),
933
+ array('jquery')
934
+ );
935
+ $this->registered_jquery_plugins[$handle] = true;
936
+ }
937
  }
938
 
939
  /**
1325
  *
1326
  * @param array|null $custom_menu
1327
  * @param string|null $config_id Supported values: 'network-admin', 'global' or 'site'
1328
+ * @return bool True if the database entry was updated, false if not.
1329
  */
1330
  function set_custom_menu($custom_menu, $config_id = null) {
1331
  if ( $config_id === null ) {
1353
  $site_specific_options = array();
1354
  }
1355
  $site_specific_options['custom_menu'] = $custom_menu;
1356
+ $updated = update_option($this->option_name, $site_specific_options);
1357
  } else if ($config_id === 'global') {
1358
  $this->options['custom_menu'] = $custom_menu;
1359
+ $updated = $this->save_options();
 
1360
  } else if ($config_id === 'network-admin' ) {
1361
  $this->options['custom_network_menu'] = $custom_menu;
1362
+ $updated = $this->save_options();
1363
  } else {
1364
  throw new LogicException(sprintf('Invalid menu configuration ID: "%s"', $config_id));
1365
  }
1368
  $this->cached_custom_menu = null;
1369
  $this->cached_virtual_caps = null;
1370
  $this->cached_user_caps = array();
1371
+
1372
+ return $updated;
1373
  }
1374
 
1375
  /**
2538
  //Remember if the user has changed any menu icons to different Dashicons.
2539
  $menu['has_modified_dashicons'] = ameModifiedIconDetector::detect($menu);
2540
 
2541
+ //Add a modification timestamp to help ensure that the new menu data will be different.
2542
+ //This way update_option() and similar functions should only return false when there is
2543
+ //an actual error, not just because the data hasn't changed.
2544
+ $menu['last_modified_on'] = date('c');
2545
+
2546
  //Which menu configuration are we changing?
2547
  $config_id = isset($post['config_id']) ? $post['config_id'] : null;
2548
  if ( !in_array($config_id, array('site', 'global', 'network-admin')) ) {
2550
  }
2551
 
2552
  //Save the custom menu
2553
+ if ( !$this->set_custom_menu($menu, $config_id) ) {
2554
+ $messages = array('Error: Could not save menu settings.');
2555
+
2556
+ global $wpdb;
2557
+ if ( !empty($wpdb->last_error) ) {
2558
+ $messages[] = 'Last database error: "' . esc_html($wpdb->last_error) . '"';
2559
+ }
2560
+
2561
+ //Check the character set of the wp_options and wp_sitemeta tables.
2562
+ $bad_charsets = array('utf8', 'utf8mb3');
2563
+ $tables_to_check = array(array($wpdb->options, 'option_value'));
2564
+ if ( is_multisite() ) {
2565
+ $tables_to_check[] = array($wpdb->sitemeta, 'meta_value');
2566
+ }
2567
+ foreach ($tables_to_check as $item) {
2568
+ list($table, $column) = $item;
2569
+ if ( empty($table) ) {
2570
+ continue;
2571
+ }
2572
+ $current_charset = $wpdb->get_col_charset($table, $column);
2573
+ if ( in_array($current_charset, $bad_charsets) ) {
2574
+ $messages[] = sprintf(
2575
+ '<p>Warning: The <code>%s</code> database table uses the outdated <code>%s</code> ' .
2576
+ 'character set. This can prevent you from saving settings that contain emojis, ' .
2577
+ 'certain Chinese characters, and so on. It is recommended to convert the table ' .
2578
+ 'to the <code>utf8mb4</code> character set.</p>',
2579
+ esc_html($wpdb->options),
2580
+ esc_html($current_charset)
2581
+ );
2582
+ }
2583
+ }
2584
+ wp_die(implode("<br>\n", $messages));
2585
+ }
2586
 
2587
  //Redirect back to the editor and display the success message.
2588
  $query = array('message' => 1);
3243
  * would not be highlighted properly when the user visits them.
3244
  */
3245
  public function enqueue_menu_fix_script() {
3246
+ //Compatibility fix for PRO Theme 1.1.5.
3247
+ //This custom admin theme expands the current admin menu via JavaScript by using a "ready" handler.
3248
+ //We need to ensure that we highlight the correct current menu before that happens. This means we
3249
+ //have to enqueue the script in the header and with a higher priority than the PRO Theme script.
3250
+ $inFooter = true;
3251
+ if ( class_exists('PROTheme', false) ) {
3252
+ $inFooter = false;
3253
+ }
3254
+
3255
  wp_enqueue_auto_versioned_script(
3256
  'ame-menu-fix',
3257
  plugins_url('js/menu-highlight-fix.js', $this->plugin_file),
3258
  array('jquery'),
3259
+ $inFooter
3260
  );
3261
  }
3262
 
3315
  return $this->cached_user_caps[$capability];
3316
  }
3317
 
3318
+ /*
3319
+ * Some meta caps require an object ID to be passed as the second argument. WordPress core will
3320
+ * unintentionally trigger a notice if we don't provide that argument. We use a non-existent ID
3321
+ * to prevent that notice.
3322
+ *
3323
+ * NULL, FALSE and 0 are not good alternatives because some WordPress APIs (e.g. get_post) take
3324
+ * those values as a sign to return the current post/page/taxonomy.
3325
+ */
3326
+
3327
+ $user_can = apply_filters(
3328
+ 'admin_menu_editor-current_user_can',
3329
+ current_user_can($capability, -1),
3330
+ $capability
3331
+ );
3332
  $this->cached_user_caps[$capability] = $user_can;
3333
  return $user_can;
3334
  }
3733
  'ame-helper-style',
3734
  plugins_url('css/admin.css', $this->plugin_file),
3735
  array(),
3736
+ '20210218'
3737
  );
3738
 
3739
  if ( $this->options['force_custom_dashicons'] ) {
3744
  'ame-force-dashicons',
3745
  plugins_url('css/force-dashicons.css', $this->plugin_file),
3746
  array(),
3747
+ '20210226'
3748
  );
3749
  }
3750
  }
4711
  //Skip blacklisted menus.
4712
  //BUG: We shouldn't skip top level menus that have non-blacklisted submenu items.
4713
  if ( isset($item['url'], $this->blacklist[$item['url']]) ) {
4714
+ $filter = $this->blacklist[$item['url']];
4715
+ if ( $filter === true ) {
4716
+ return;
4717
+ } else if ( ($filter === 'submenu') && ($parent !== null) ) {
4718
+ return;
4719
+ }
4720
  }
4721
 
4722
  $name = $this->sanitizeMenuTitle($item['menu_title']);
includes/menu.php CHANGED
@@ -155,6 +155,11 @@ abstract class ameMenu {
155
  $menu['component_visibility'] = $visibility;
156
  }
157
 
 
 
 
 
 
158
  //Copy the "modified icons" flag.
159
  if ( isset($arr['has_modified_dashicons']) ) {
160
  $menu['has_modified_dashicons'] = (bool)$arr['has_modified_dashicons'];
@@ -165,6 +170,11 @@ abstract class ameMenu {
165
  $menu['prebuilt_virtual_caps'] = $arr['prebuilt_virtual_caps'];
166
  }
167
 
 
 
 
 
 
168
  foreach(self::$custom_loaders as $callback) {
169
  $menu = call_user_func($callback, $menu, $arr);
170
  }
155
  $menu['component_visibility'] = $visibility;
156
  }
157
 
158
+ //Copy heading settings.
159
+ if ( isset($arr['menu_headings']) ) {
160
+ $menu['menu_headings'] = $arr['menu_headings'];
161
+ }
162
+
163
  //Copy the "modified icons" flag.
164
  if ( isset($arr['has_modified_dashicons']) ) {
165
  $menu['has_modified_dashicons'] = (bool)$arr['has_modified_dashicons'];
170
  $menu['prebuilt_virtual_caps'] = $arr['prebuilt_virtual_caps'];
171
  }
172
 
173
+ //Copy the modification timestamp.
174
+ if ( isset($arr['last_modified_on']) ) {
175
+ $menu['last_modified_on'] = substr(strval($arr['last_modified_on']), 0, 100);
176
+ }
177
+
178
  foreach(self::$custom_loaders as $callback) {
179
  $menu = call_user_func($callback, $menu, $arr);
180
  }
js/common.d.ts CHANGED
@@ -1,6 +1,25 @@
 
 
1
  interface AmeDictionary<T> {
2
- [mapKey: string] : T;
3
  }
4
 
5
  // noinspection JSUnusedGlobalSymbols
6
- type KeysMatchingType<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ///<reference path="knockout.d.ts"/>
2
+
3
  interface AmeDictionary<T> {
4
+ [mapKey: string]: T;
5
  }
6
 
7
  // noinspection JSUnusedGlobalSymbols
8
+ type KeysMatchingType<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];
9
+
10
+ type AmeCssBorderStyle = 'none' | 'solid' | 'dashed' | 'dotted' | 'double' | 'groove' | 'ridge' | 'outset';
11
+
12
+ interface AmeCssBorderSettings {
13
+ style: AmeCssBorderStyle;
14
+ color: string;
15
+ width: number;
16
+ }
17
+
18
+ type AmeObservablePropertiesOf<T> = {
19
+ [P in keyof T]: KnockoutObservable<T[P]>;
20
+ }
21
+
22
+ type AmeRecursiveObservablePropertiesOf<T> = {
23
+ [P in keyof T]: T[P] extends object ? AmeRecursiveObservablePropertiesOf<T[P]> : KnockoutObservable<T[P]>;
24
+ }
25
+
js/menu-editor.js CHANGED
@@ -238,6 +238,7 @@ function randomMenuId(prefix, size){
238
 
239
  return prefix + suffix;
240
  }
 
241
 
242
  function outputWpMenu(menu){
243
  var menuCopy = $.extend(true, {}, menu);
@@ -719,6 +720,7 @@ var knownMenuFields = {
719
  }
720
  }),
721
 
 
722
  'required_capability_read_only' : $.extend({}, baseField, {
723
  caption: 'Required capability',
724
  defaultValue: 'none',
@@ -986,6 +988,8 @@ var knownMenuFields = {
986
  })
987
  };
988
 
 
 
989
  AmeEditorApi.getItemDisplayUrl = function(menuItem) {
990
  var url = getFieldValue(menuItem, 'file', '');
991
  if (menuItem.template_id !== '') {
@@ -1330,6 +1334,7 @@ function updateParentAccessUi(containerNode) {
1330
  */
1331
  function updateItemEditor(containerNode) {
1332
  var menuItem = containerNode.data('menu_item');
 
1333
 
1334
  //Apply flags based on the item's state.
1335
  var flags = ['hidden', 'unused', 'custom'];
@@ -1337,6 +1342,11 @@ function updateItemEditor(containerNode) {
1337
  setMenuFlag(containerNode, flags[i], getFieldValue(menuItem, flags[i], false));
1338
  }
1339
 
 
 
 
 
 
1340
  //Update the permissions checkbox & other actor-specific UI
1341
  updateActorAccessUi(containerNode);
1342
 
@@ -1374,13 +1384,16 @@ function updateItemEditor(containerNode) {
1374
  $.data(input.get(0), 'ame_last_display_value', displayValue);
1375
  }
1376
 
 
1377
  if (typeof (knownMenuFields[fieldName].visible) === 'function') {
1378
- var isFieldVisible = knownMenuFields[fieldName].visible(menuItem, fieldName);
1379
- if (isFieldVisible) {
1380
- field.css('display', '');
1381
- } else {
1382
- field.css('display', 'none');
1383
- }
 
 
1384
  }
1385
  });
1386
  }
@@ -2056,8 +2069,9 @@ function ameOnDomReady() {
2056
  $('.ws_hide_if_pro').hide();
2057
  }
2058
 
2059
- //Let other plugins filter knownMenuFields.
2060
  $(document).trigger('filterMenuFields.adminMenuEditor', [knownMenuFields, baseField]);
 
2061
 
2062
  //Make the top menu box sortable (we only need to do this once)
2063
  var mainMenuBox = $('#ws_menu_box');
@@ -2327,6 +2341,21 @@ function ameOnDomReady() {
2327
  updateParentAccessUi(containerNode);
2328
  }
2329
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2330
  /**
2331
  * Confirm with the user that they want to hide "Dashboard -> Home".
2332
  *
@@ -3487,6 +3516,7 @@ function ameOnDomReady() {
3487
  function getSelectedMenu() {
3488
  return $('#ws_menu_box').find('.ws_active');
3489
  }
 
3490
 
3491
  //Show/Hide menu
3492
  $('#ws_hide_menu').on('click', function (event) {
238
 
239
  return prefix + suffix;
240
  }
241
+ AmeEditorApi.randomMenuId = randomMenuId;
242
 
243
  function outputWpMenu(menu){
244
  var menuCopy = $.extend(true, {}, menu);
720
  }
721
  }),
722
 
723
+ //TODO: Never save this field. It just wastes database space.
724
  'required_capability_read_only' : $.extend({}, baseField, {
725
  caption: 'Required capability',
726
  defaultValue: 'none',
988
  })
989
  };
990
 
991
+ var visibleMenuFieldsByType = {};
992
+
993
  AmeEditorApi.getItemDisplayUrl = function(menuItem) {
994
  var url = getFieldValue(menuItem, 'file', '');
995
  if (menuItem.template_id !== '') {
1334
  */
1335
  function updateItemEditor(containerNode) {
1336
  var menuItem = containerNode.data('menu_item');
1337
+ var itemSubType = (menuItem.hasOwnProperty('sub_type') ? menuItem['sub_type'] : '');
1338
 
1339
  //Apply flags based on the item's state.
1340
  var flags = ['hidden', 'unused', 'custom'];
1342
  setMenuFlag(containerNode, flags[i], getFieldValue(menuItem, flags[i], false));
1343
  }
1344
 
1345
+ if (itemSubType) {
1346
+ var typeTitle = itemSubType.charAt(0).toUpperCase() + itemSubType.slice(1);
1347
+ setMenuFlag(containerNode, 'subtype_' + itemSubType, true, typeTitle);
1348
+ }
1349
+
1350
  //Update the permissions checkbox & other actor-specific UI
1351
  updateActorAccessUi(containerNode);
1352
 
1384
  $.data(input.get(0), 'ame_last_display_value', displayValue);
1385
  }
1386
 
1387
+ var isFieldVisible = _.get(visibleMenuFieldsByType, [itemSubType, fieldName], true);
1388
  if (typeof (knownMenuFields[fieldName].visible) === 'function') {
1389
+ isFieldVisible = isFieldVisible && knownMenuFields[fieldName].visible(menuItem, fieldName);
1390
+ } else {
1391
+ isFieldVisible = isFieldVisible && knownMenuFields[fieldName].visible;
1392
+ }
1393
+ if (isFieldVisible) {
1394
+ field.css('display', '');
1395
+ } else {
1396
+ field.css('display', 'none');
1397
  }
1398
  });
1399
  }
2069
  $('.ws_hide_if_pro').hide();
2070
  }
2071
 
2072
+ //Let other plugins filter knownMenuFields and menu fields by type.
2073
  $(document).trigger('filterMenuFields.adminMenuEditor', [knownMenuFields, baseField]);
2074
+ $(document).trigger('filterVisibleMenuFields.adminMenuEditor', [visibleMenuFieldsByType]);
2075
 
2076
  //Make the top menu box sortable (we only need to do this once)
2077
  var mainMenuBox = $('#ws_menu_box');
2341
  updateParentAccessUi(containerNode);
2342
  }
2343
 
2344
+ /**
2345
+ * Insert a new top level menu after the selected menu or at the end of the list.
2346
+ *
2347
+ * @param {Object} menu
2348
+ */
2349
+ function insertMenu(menu) {
2350
+ const selection = (typeof getSelectedMenu !== 'undefined') ? getSelectedMenu() : null;
2351
+ if (selection && (selection.length > 0) ) {
2352
+ outputTopMenu(menu, selection);
2353
+ } else {
2354
+ outputTopMenu(menu);
2355
+ }
2356
+ }
2357
+ AmeEditorApi.insertMenu = insertMenu;
2358
+
2359
  /**
2360
  * Confirm with the user that they want to hide "Dashboard -> Home".
2361
  *
3516
  function getSelectedMenu() {
3517
  return $('#ws_menu_box').find('.ws_active');
3518
  }
3519
+ AmeEditorApi.getSelectedMenu = getSelectedMenu;
3520
 
3521
  //Show/Hide menu
3522
  $('#ws_hide_menu').on('click', function (event) {
menu-editor.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Admin Menu Editor
4
  Plugin URI: http://w-shadow.com/blog/2008/12/20/admin-menu-editor-for-wordpress/
5
  Description: Lets you directly edit the WordPress admin menu. You can re-order, hide or rename existing menus, add custom menus and more.
6
- Version: 1.9.8
7
  Author: Janis Elsts
8
  Author URI: http://w-shadow.com/blog/
9
  */
3
  Plugin Name: Admin Menu Editor
4
  Plugin URI: http://w-shadow.com/blog/2008/12/20/admin-menu-editor-for-wordpress/
5
  Description: Lets you directly edit the WordPress admin menu. You can re-order, hide or rename existing menus, add custom menus and more.
6
+ Version: 1.9.9
7
  Author: Janis Elsts
8
  Author URI: http://w-shadow.com/blog/
9
  */
modules/actor-selector/actor-selector.js CHANGED
@@ -12,6 +12,7 @@ var AmeActorSelector = /** @class */ (function () {
12
  this.isProVersion = false;
13
  this.allOptionEnabled = true;
14
  this.cachedVisibleActors = null;
 
15
  this.actorManager = actorManager;
16
  if (typeof isProVersion !== 'undefined') {
17
  this.isProVersion = isProVersion;
@@ -23,17 +24,16 @@ var AmeActorSelector = /** @class */ (function () {
23
  //Discard any users that don't exist / were not loaded by the actor manager.
24
  var _ = AmeActorSelector._;
25
  this.visibleUsers = _.intersection(this.visibleUsers, _.keys(actorManager.getUsers()));
26
- if (jQuery.isReady) {
27
- this.initDOM();
28
- }
29
- else {
30
- jQuery(function () {
31
- _this.initDOM();
32
- });
33
- }
34
  }
35
  AmeActorSelector.prototype.initDOM = function () {
36
  var _this = this;
 
 
 
 
37
  this.selectorNode = jQuery('#ws_actor_selector');
38
  this.populateActorSelector();
39
  //Don't show the selector in the free version.
@@ -95,6 +95,10 @@ var AmeActorSelector = /** @class */ (function () {
95
  this.subscribers.push(callback);
96
  };
97
  AmeActorSelector.prototype.highlightSelectedActor = function () {
 
 
 
 
98
  //Deselect the previous item.
99
  this.selectorNode.find('.current').removeClass('current');
100
  //Select the new one or "All".
12
  this.isProVersion = false;
13
  this.allOptionEnabled = true;
14
  this.cachedVisibleActors = null;
15
+ this.isDomInitStarted = false;
16
  this.actorManager = actorManager;
17
  if (typeof isProVersion !== 'undefined') {
18
  this.isProVersion = isProVersion;
24
  //Discard any users that don't exist / were not loaded by the actor manager.
25
  var _ = AmeActorSelector._;
26
  this.visibleUsers = _.intersection(this.visibleUsers, _.keys(actorManager.getUsers()));
27
+ jQuery(function () {
28
+ _this.initDOM();
29
+ });
 
 
 
 
 
30
  }
31
  AmeActorSelector.prototype.initDOM = function () {
32
  var _this = this;
33
+ if (this.isDomInitStarted) {
34
+ return;
35
+ }
36
+ this.isDomInitStarted = true;
37
  this.selectorNode = jQuery('#ws_actor_selector');
38
  this.populateActorSelector();
39
  //Don't show the selector in the free version.
95
  this.subscribers.push(callback);
96
  };
97
  AmeActorSelector.prototype.highlightSelectedActor = function () {
98
+ //Set up and populate the selector element if we haven't done that yet.
99
+ if (!this.isDomInitStarted) {
100
+ this.initDOM();
101
+ }
102
  //Deselect the previous item.
103
  this.selectorNode.find('.current').removeClass('current');
104
  //Select the new one or "All".
modules/actor-selector/actor-selector.ts CHANGED
@@ -17,6 +17,7 @@ declare var wsAmeActorSelectorData: {
17
  interface SelectedActorChangedCallback {
18
  (newSelectedActor: string, oldSelectedActor: string): void
19
  }
 
20
  interface SaveVisibleActorAjaxParams {
21
  ajaxUpdateAction: string,
22
  ajaxUpdateNonce: string,
@@ -40,6 +41,7 @@ class AmeActorSelector {
40
  private cachedVisibleActors: IAmeActor[] = null;
41
 
42
  private selectorNode;
 
43
 
44
  constructor(
45
  actorManager: AmeActorManagerInterface,
@@ -61,16 +63,17 @@ class AmeActorSelector {
61
  const _ = AmeActorSelector._;
62
  this.visibleUsers = _.intersection(this.visibleUsers, _.keys(actorManager.getUsers()));
63
 
64
- if (jQuery.isReady) {
65
  this.initDOM();
66
- } else {
67
- jQuery(() => {
68
- this.initDOM();
69
- });
70
- }
71
  }
72
 
73
  private initDOM() {
 
 
 
 
 
74
  this.selectorNode = jQuery('#ws_actor_selector');
75
  this.populateActorSelector();
76
 
@@ -143,6 +146,11 @@ class AmeActorSelector {
143
  }
144
 
145
  private highlightSelectedActor() {
 
 
 
 
 
146
  //Deselect the previous item.
147
  this.selectorNode.find('.current').removeClass('current');
148
 
@@ -257,9 +265,9 @@ class AmeActorSelector {
257
  jQuery.post(
258
  this.ajaxParams.adminAjaxUrl,
259
  {
260
- 'action' : this.ajaxParams.ajaxUpdateAction,
261
- '_ajax_nonce' : this.ajaxParams.ajaxUpdateNonce,
262
- 'visible_users' : jQuery.toJSON(this.visibleUsers)
263
  }
264
  );
265
  }
17
  interface SelectedActorChangedCallback {
18
  (newSelectedActor: string, oldSelectedActor: string): void
19
  }
20
+
21
  interface SaveVisibleActorAjaxParams {
22
  ajaxUpdateAction: string,
23
  ajaxUpdateNonce: string,
41
  private cachedVisibleActors: IAmeActor[] = null;
42
 
43
  private selectorNode;
44
+ private isDomInitStarted: boolean = false;
45
 
46
  constructor(
47
  actorManager: AmeActorManagerInterface,
63
  const _ = AmeActorSelector._;
64
  this.visibleUsers = _.intersection(this.visibleUsers, _.keys(actorManager.getUsers()));
65
 
66
+ jQuery(() => {
67
  this.initDOM();
68
+ });
 
 
 
 
69
  }
70
 
71
  private initDOM() {
72
+ if (this.isDomInitStarted) {
73
+ return;
74
+ }
75
+ this.isDomInitStarted = true;
76
+
77
  this.selectorNode = jQuery('#ws_actor_selector');
78
  this.populateActorSelector();
79
 
146
  }
147
 
148
  private highlightSelectedActor() {
149
+ //Set up and populate the selector element if we haven't done that yet.
150
+ if (!this.isDomInitStarted) {
151
+ this.initDOM();
152
+ }
153
+
154
  //Deselect the previous item.
155
  this.selectorNode.find('.current').removeClass('current');
156
 
265
  jQuery.post(
266
  this.ajaxParams.adminAjaxUrl,
267
  {
268
+ 'action': this.ajaxParams.ajaxUpdateAction,
269
+ '_ajax_nonce': this.ajaxParams.ajaxUpdateNonce,
270
+ 'visible_users': jQuery.toJSON(this.visibleUsers)
271
  }
272
  );
273
  }
modules/highlight-new-menus/wsNewMenuHighlighter.php CHANGED
@@ -253,7 +253,11 @@ class wsNewMenuHighlighter {
253
  $this->flagAsSeen(array_keys($urls));
254
  }
255
 
256
- setcookie(self::COOKIE_NAME, '', time() - (24 * 3600));
 
 
 
 
257
  }
258
 
259
  private function flagAsSeen($menuUrls) {
253
  $this->flagAsSeen(array_keys($urls));
254
  }
255
 
256
+ if ( version_compare(phpversion(), '7.3', '>=') ) {
257
+ setcookie(self::COOKIE_NAME, '', array('expires' => time() - (24 * 3600), 'samesite' => 'Lax'));
258
+ } else {
259
+ setcookie(self::COOKIE_NAME, '', time() - (24 * 3600), '', '', is_ssl());
260
+ }
261
  }
262
 
263
  private function flagAsSeen($menuUrls) {
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: whiteshadow
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A6P9S6CE3SRSW
4
  Tags: admin, dashboard, menu, security, wpmu
5
  Requires at least: 4.1
6
- Tested up to: 5.6
7
- Stable tag: 1.9.8
8
 
9
  Lets you edit the WordPress admin menu. You can re-order, hide or rename menus, add custom menus and more.
10
 
@@ -63,6 +63,15 @@ Plugins installed in the `mu-plugins` directory are treated as "always on", so y
63
 
64
  == Changelog ==
65
 
 
 
 
 
 
 
 
 
 
66
  = 1.9.8 =
67
  * Added a "bbPress override" option that prevents bbPress from resetting all changes that are made to dynamic bbPress roles. Enabling this option allows you to edit bbPress roles with any role editing plugin.
68
  * Fixed a conflict that caused some hidden Simple Calendars menu items to show up when Admin Menu Editor was activated.
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A6P9S6CE3SRSW
4
  Tags: admin, dashboard, menu, security, wpmu
5
  Requires at least: 4.1
6
+ Tested up to: 5.7
7
+ Stable tag: 1.9.9
8
 
9
  Lets you edit the WordPress admin menu. You can re-order, hide or rename menus, add custom menus and more.
10
 
63
 
64
  == Changelog ==
65
 
66
+ = 1.9.9 =
67
+ * Fixed a conflict with the "PRO Theme" plugin where "PRO Theme" would expand the wrong top level admin menu if the current submenu item had been moved from one parent menu to another.
68
+ * Fixed PHP notice "Undefined offset: 0 in /wp-includes/capabilities.php on line 70" (various line numbers).
69
+ * Fixed a conflict with "Stripe For WooCommerce" 3.2.12 where the "Stripe Gateway" menu had a wrong URL because a hidden menu item was not removed.
70
+ * Fixed a browser warning about the "ws_nmh_pending_seen_urls" cookie not using the SameSite attribute.
71
+ * Fixed a conflict with WooFunnels where changing the WooFunnels menu icon would result in both of the icons - the original one and the new one - showing up at the same time. The new icon was also misaligned.
72
+ * Minor visual changes.
73
+ * Tested with WordPress 5.7 and 5.8-alpha.
74
+
75
  = 1.9.8 =
76
  * Added a "bbPress override" option that prevents bbPress from resetting all changes that are made to dynamic bbPress roles. Enabling this option allows you to edit bbPress roles with any role editing plugin.
77
  * Fixed a conflict that caused some hidden Simple Calendars menu items to show up when Admin Menu Editor was activated.