Capability Manager Enhanced - Version 2.1

Version Description

  • 24 Jun 2021 =
    • Feature : Editor Features restriction (new screen to block editor elements per-role)
    • Fixed : If Media "Create" capability is selected / unselected by clicking Media caption or Create caption, the corresponding upload_files checkbox (in Other WP Core Capabilities section) is not toggled, leading to an apparant update failure
    • Fixed : If Media "Create" capability is negated or un-negated, the corresponding upload_files checkbox (in Other WP Core Capabilities section) is not toggled, leading to an apparant update failure
    • Fixed : PHP Warning if a role is stored without a valid capabilities array
Download this release

Release Info

Developer publishpress
Plugin Icon 128x128 Capability Manager Enhanced
Version 2.1
Comparing to
See all releases

Code changes from version 2.0.2 to 2.1

capsman-enhanced.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: PublishPress Capabilities
4
  * Plugin URI: https://publishpress.com/capability-manager/
5
  * Description: Manage WordPress role definitions, per-site or network-wide. Organizes post capabilities by post type and operation.
6
- * Version: 2.0.2
7
  * Author: PublishPress
8
  * Author URI: https://publishpress.com/
9
  * Text Domain: capsman-enhanced
@@ -25,13 +25,13 @@
25
  * @copyright Copyright (C) 2009, 2010 Jordi Canals; modifications Copyright (C) 2020 PublishPress
26
  * @license GNU General Public License version 3
27
  * @link https://publishpress.com/
28
- * @version 2.0.2
29
  */
30
 
31
  if (!defined('CAPSMAN_VERSION')) {
32
- define('CAPSMAN_VERSION', '2.0.2');
33
- define('CAPSMAN_ENH_VERSION', '2.0.2');
34
- define('PUBLISHPRESS_CAPS_VERSION', '2.0.2');
35
  }
36
 
37
  foreach (get_option('active_plugins') as $plugin_file) {
3
  * Plugin Name: PublishPress Capabilities
4
  * Plugin URI: https://publishpress.com/capability-manager/
5
  * Description: Manage WordPress role definitions, per-site or network-wide. Organizes post capabilities by post type and operation.
6
+ * Version: 2.1
7
  * Author: PublishPress
8
  * Author URI: https://publishpress.com/
9
  * Text Domain: capsman-enhanced
25
  * @copyright Copyright (C) 2009, 2010 Jordi Canals; modifications Copyright (C) 2020 PublishPress
26
  * @license GNU General Public License version 3
27
  * @link https://publishpress.com/
28
+ * @version 2.1
29
  */
30
 
31
  if (!defined('CAPSMAN_VERSION')) {
32
+ define('CAPSMAN_VERSION', '2.1');
33
+ define('CAPSMAN_ENH_VERSION', '2.1');
34
+ define('PUBLISHPRESS_CAPS_VERSION', '2.1');
35
  }
36
 
37
  foreach (get_option('active_plugins') as $plugin_file) {
common/css/admin.css CHANGED
@@ -78,10 +78,16 @@ height: 2em;
78
  table .cme-typecaps th {
79
  padding-left: 0.3em;
80
  padding-right: 0.3em;
 
81
  }
82
 
83
  table.cme-typecaps span.cap-x {
84
  display: none;
 
 
 
 
 
85
  }
86
 
87
  h3.cme-cap-section {
78
  table .cme-typecaps th {
79
  padding-left: 0.3em;
80
  padding-right: 0.3em;
81
+ cursor: pointer;
82
  }
83
 
84
  table.cme-typecaps span.cap-x {
85
  display: none;
86
+ cursor: pointer;
87
+ }
88
+
89
+ table.cme-checklist span.cap-x {
90
+ cursor: pointer;
91
  }
92
 
93
  h3.cme-cap-section {
common/js/admin.dev.js CHANGED
@@ -12,6 +12,8 @@ jQuery(document).ready( function($) {
12
  var cap_name_attr = $(this).parent().find('input[type="checkbox"]').attr('name');
13
  $(this).after('<input type="hidden" class="cme-negation-input" name="'+cap_name_attr+'" value="" />');
14
 
 
 
15
  return false;
16
  });
17
 
@@ -21,6 +23,16 @@ jQuery(document).ready( function($) {
21
  $(this).parent().find('input[type="checkbox"]').prop('checked',false);
22
  $(this).parent().find('input.cme-negation-input').remove();
23
 
 
 
 
 
 
 
 
 
 
 
24
  return false;
25
  });
26
 
@@ -51,6 +63,8 @@ jQuery(document).ready( function($) {
51
 
52
  var cap_name_attr = $(this).find('input[type="checkbox"]').attr('name');
53
  $(this).append('<input type="hidden" class="cme-negation-input" name="'+cap_name_attr+'" value="" />');
 
 
54
  });
55
 
56
  return false;
@@ -67,9 +81,12 @@ jQuery(document).ready( function($) {
67
  else
68
  var class_sel = '[class*="post-cap"]';
69
 
70
- $(this).closest("table")
71
- .find("tr td" + class_sel + ":nth-child(" + (columnNo+1) + ') input[type="checkbox"]:visible')
72
- .prop("checked", check_val);
 
 
 
73
 
74
  $(this).prop('checked_all',check_val);
75
  });
12
  var cap_name_attr = $(this).parent().find('input[type="checkbox"]').attr('name');
13
  $(this).after('<input type="hidden" class="cme-negation-input" name="'+cap_name_attr+'" value="" />');
14
 
15
+ $('input[name="' + cap_name_attr + '"]').closest('td').removeClass('cap-yes').removeClass('cap-no').addClass('cap-neg');
16
+
17
  return false;
18
  });
19
 
23
  $(this).parent().find('input[type="checkbox"]').prop('checked',false);
24
  $(this).parent().find('input.cme-negation-input').remove();
25
 
26
+ // Also apply for any other checkboxes with the same name
27
+ var cap_name_attr = $(this).next('input[type="checkbox"]').attr('name');
28
+
29
+ if (!cap_name_attr) {
30
+ cap_name_attr = $(this).next('label').find('input[type="checkbox"]').attr('name');
31
+ }
32
+
33
+ $('input[name="' + cap_name_attr + '"]').parent().closest('td').removeClass('cap-neg').removeClass('cap-yes').addClass('cap-no');
34
+ $('input[name="' + cap_name_attr + '"]').prop('checked',false).parent().find('input.cme-negation-input').remove();
35
+
36
  return false;
37
  });
38
 
63
 
64
  var cap_name_attr = $(this).find('input[type="checkbox"]').attr('name');
65
  $(this).append('<input type="hidden" class="cme-negation-input" name="'+cap_name_attr+'" value="" />');
66
+
67
+ $('input[name="' + cap_name_attr + '"]').parent().next('a.neg-cap:visible').click();
68
  });
69
 
70
  return false;
81
  else
82
  var class_sel = '[class*="post-cap"]';
83
 
84
+ var chks = $(this).closest("table")
85
+ .find("tr td" + class_sel + ":nth-child(" + (columnNo+1) + ') input[type="checkbox"]:visible');
86
+
87
+ $(chks).each(function(i,e) {
88
+ $('input[name="' + $(this).attr('name') + '"]').prop('checked', check_val);
89
+ });
90
 
91
  $(this).prop('checked_all',check_val);
92
  });
common/js/admin.js CHANGED
@@ -1,3 +1,4 @@
1
- jQuery(document).ready(function($){$('a.neg-cap').attr('title',cmeAdmin.negationCaption);$('a.neg-type-caps').attr('title',cmeAdmin.typeCapsNegationCaption);$('td.cap-unreg').attr('title',cmeAdmin.typeCapUnregistered);$('a.normal-cap').attr('title',cmeAdmin.switchableCaption);$('span.cap-x').attr('title',cmeAdmin.capNegated);$('table.cme-checklist input[class!="cme-check-all"]').not(':disabled').attr('title',cmeAdmin.chkCaption);$('table.cme-checklist a.neg-cap').click(function(e){$(this).closest('td').removeClass('cap-yes').removeClass('cap-no').addClass('cap-neg');var cap_name_attr=$(this).parent().find('input[type="checkbox"]').attr('name');$(this).after('<input type="hidden" class="cme-negation-input" name="'+cap_name_attr+'" value="" />');return false;});$(document).on('click','table.cme-typecaps span.cap-x,table.cme-checklist span.cap-x,table.cme-checklist td.cap-neg span',function(e){$(this).closest('td').removeClass('cap-neg').removeClass('cap-yes').addClass('cap-no');$(this).parent().find('input[type="checkbox"]').prop('checked',false);$(this).parent().find('input.cme-negation-input').remove();return false;});$("#publishpress_caps_form").bind("keypress",function(e){if(e.keyCode==13){$(document.activeElement).parent().find('input[type="submit"]').first().click();return false;}});$('input.cme-check-all').click(function(e){$(this).closest('table').find('input[type="checkbox"][disabled!="disabled"]:visible').prop('checked',$(this).is(":checked"));});$('a.cme-neg-all').click(function(e){$(this).closest('table').find('a.neg-cap:visible').click();return false;});$('a.cme-switch-all').click(function(e){$(this).closest('table').find('td.cap-neg span').click();return false;});$('table.cme-typecaps a.neg-type-caps').click(function(e){$(this).closest('tr').find('td[class!="cap-neg"]').filter('td[class!="cap-unreg"]').each(function(){$(this).addClass('cap-neg');var cap_name_attr=$(this).find('input[type="checkbox"]').attr('name');$(this).append('<input type="hidden" class="cme-negation-input" name="'+cap_name_attr+'" value="" />');});return false;});$('table.cme-typecaps th').click(function(){var columnNo=$(this).index();var check_val=!$(this).prop('checked_all');if($(this).hasClass('term-cap'))
 
2
  var class_sel='[class*="term-cap"]';else
3
- var class_sel='[class*="post-cap"]';$(this).closest("table").find("tr td"+class_sel+":nth-child("+(columnNo+1)+') input[type="checkbox"]:visible').prop("checked",check_val);$(this).prop('checked_all',check_val);});$('a.cme-fix-read-cap').click(function(){$('input[name="caps[read]"]').prop('checked',true);$('input[name="SaveRole"]').trigger('click');return false;});});
1
+ jQuery(document).ready(function($){$('a.neg-cap').attr('title',cmeAdmin.negationCaption);$('a.neg-type-caps').attr('title',cmeAdmin.typeCapsNegationCaption);$('td.cap-unreg').attr('title',cmeAdmin.typeCapUnregistered);$('a.normal-cap').attr('title',cmeAdmin.switchableCaption);$('span.cap-x').attr('title',cmeAdmin.capNegated);$('table.cme-checklist input[class!="cme-check-all"]').not(':disabled').attr('title',cmeAdmin.chkCaption);$('table.cme-checklist a.neg-cap').click(function(e){$(this).closest('td').removeClass('cap-yes').removeClass('cap-no').addClass('cap-neg');var cap_name_attr=$(this).parent().find('input[type="checkbox"]').attr('name');$(this).after('<input type="hidden" class="cme-negation-input" name="'+cap_name_attr+'" value="" />');$('input[name="'+cap_name_attr+'"]').closest('td').removeClass('cap-yes').removeClass('cap-no').addClass('cap-neg');return false;});$(document).on('click','table.cme-typecaps span.cap-x,table.cme-checklist span.cap-x,table.cme-checklist td.cap-neg span',function(e){$(this).closest('td').removeClass('cap-neg').removeClass('cap-yes').addClass('cap-no');$(this).parent().find('input[type="checkbox"]').prop('checked',false);$(this).parent().find('input.cme-negation-input').remove();var cap_name_attr=$(this).next('input[type="checkbox"]').attr('name');if(!cap_name_attr){cap_name_attr=$(this).next('label').find('input[type="checkbox"]').attr('name');}
2
+ $('input[name="'+cap_name_attr+'"]').parent().closest('td').removeClass('cap-neg').removeClass('cap-yes').addClass('cap-no');$('input[name="'+cap_name_attr+'"]').prop('checked',false).parent().find('input.cme-negation-input').remove();return false;});$("#publishpress_caps_form").bind("keypress",function(e){if(e.keyCode==13){$(document.activeElement).parent().find('input[type="submit"]').first().click();return false;}});$('input.cme-check-all').click(function(e){$(this).closest('table').find('input[type="checkbox"][disabled!="disabled"]:visible').prop('checked',$(this).is(":checked"));});$('a.cme-neg-all').click(function(e){$(this).closest('table').find('a.neg-cap:visible').click();return false;});$('a.cme-switch-all').click(function(e){$(this).closest('table').find('td.cap-neg span').click();return false;});$('table.cme-typecaps a.neg-type-caps').click(function(e){$(this).closest('tr').find('td[class!="cap-neg"]').filter('td[class!="cap-unreg"]').each(function(){$(this).addClass('cap-neg');var cap_name_attr=$(this).find('input[type="checkbox"]').attr('name');$(this).append('<input type="hidden" class="cme-negation-input" name="'+cap_name_attr+'" value="" />');$('input[name="'+cap_name_attr+'"]').parent().next('a.neg-cap:visible').click();});return false;});$('table.cme-typecaps th').click(function(){var columnNo=$(this).index();var check_val=!$(this).prop('checked_all');if($(this).hasClass('term-cap'))
3
  var class_sel='[class*="term-cap"]';else
4
+ var class_sel='[class*="post-cap"]';var chks=$(this).closest("table").find("tr td"+class_sel+":nth-child("+(columnNo+1)+') input[type="checkbox"]:visible');$(chks).each(function(i,e){$('input[name="'+$(this).attr('name')+'"]').prop('checked',check_val);});$(this).prop('checked_all',check_val);});$('a.cme-fix-read-cap').click(function(){$('input[name="caps[read]"]').prop('checked',true);$('input[name="SaveRole"]').trigger('click');return false;});});
framework/lib/users.php CHANGED
@@ -85,6 +85,10 @@ function ak_level2caps( $level ) {
85
  * @return int Level found, if no level found, will return 0.
86
  */
87
  function ak_caps2level( $caps ) {
 
 
 
 
88
  $level = array_reduce( array_keys( $caps ), '_ak_caps2level_CB', 0);
89
  return $level;
90
  }
85
  * @return int Level found, if no level found, will return 0.
86
  */
87
  function ak_caps2level( $caps ) {
88
+ if (!is_array($caps)) {
89
+ return 0;
90
+ }
91
+
92
  $level = array_reduce( array_keys( $caps ), '_ak_caps2level_CB', 0);
93
  return $level;
94
  }
includes/admin.php CHANGED
@@ -240,16 +240,16 @@ if( defined('PRESSPERMIT_ACTIVE') ) {
240
  $custom_types = get_post_types( array( '_builtin' => false ), 'names' );
241
  $custom_tax = get_taxonomies( array( '_builtin' => false ), 'names' );
242
 
243
- $defined = array();
244
- $defined['type'] = apply_filters('cme_filterable_post_types', get_post_types( array( 'public' => true, 'show_ui' => true), 'object', 'or' ));
245
- $defined['taxonomy'] = get_taxonomies( array( 'public' => true ), 'object' );
246
 
247
  // bbPress' dynamic role def requires additional code to enforce stored caps
248
  $unfiltered['type'] = apply_filters('presspermit_unfiltered_post_types', ['forum','topic','reply','wp_block']);
249
  $unfiltered['type'] = (defined('PP_CAPABILITIES_NO_LEGACY_FILTERS')) ? $unfiltered['type'] : apply_filters('pp_unfiltered_post_types', $unfiltered['type']);
250
 
251
  $unfiltered['taxonomy'] = apply_filters('presspermit_unfiltered_post_types', ['post_status', 'topic-tag']); // avoid confusion with Edit Flow administrative taxonomy
252
- $unfiltered['taxonomy'] = (defined('PP_CAPABILITIES_NO_LEGACY_FILTERS')) ? $unfiltered['taxonomy'] : apply_filters('pp_unfiltered_post_types', $unfiltered['taxonomy']);
253
 
254
  $enabled_taxonomies = cme_get_assisted_taxonomies();
255
 
@@ -387,7 +387,7 @@ if( defined('PRESSPERMIT_ACTIVE') ) {
387
  if ( empty($force_distinct_ui) && empty( $cap_properties[$cap_type][$item_type] ) )
388
  continue;
389
 
390
- $type_label = (!empty($type_obj->labels->menu_name)) ? $type_obj->labels->menu_name : $type_obj->labels->name;
391
 
392
  $row .= "<td><a class='cap_type' href='#toggle_type_caps'>" . $type_label . '</a>';
393
  $row .= '<a href="#" class="neg-type-caps">&nbsp;x&nbsp;</a>';
@@ -520,7 +520,12 @@ if( defined('PRESSPERMIT_ACTIVE') ) {
520
  jQuery(document).ready( function($) {
521
  $('a[href="#toggle_type_caps"]').click( function() {
522
  var chks = $(this).closest('tr').find('input');
523
- $(chks).prop( 'checked', ! $(chks).first().is(':checked') );
 
 
 
 
 
524
  return false;
525
  });
526
 
@@ -1161,11 +1166,9 @@ function cme_network_role_ui( $default ) {
1161
  <?php
1162
  if ( ! $autocreate_roles = get_site_option( 'cme_autocreate_roles' ) )
1163
  $autocreate_roles = array();
1164
-
1165
- $checked = ( in_array( $default, $autocreate_roles ) ) ? 'checked="checked"': '';
1166
  ?>
1167
  <div style="margin-bottom: 5px">
1168
- <label for="cme_autocreate_role" title="<?php _e('Create this role definition in new (future) sites', 'capsman-enhanced');?>"><input type="checkbox" name="cme_autocreate_role" id="cme_autocreate_role" autocomplete="off" value="1" <?php echo $checked;?>> <?php _e('include in new sites', 'capsman-enhanced'); ?> </label>
1169
  </div>
1170
  <div>
1171
  <label for="cme_net_sync_role" title="<?php echo esc_attr(__('Copy / update this role definition to all sites now', 'capsman-enhanced'));?>"><input type="checkbox" name="cme_net_sync_role" id="cme_net_sync_role" autocomplete="off" value="1"> <?php _e('sync role to all sites now', 'capsman-enhanced'); ?> </label>
240
  $custom_types = get_post_types( array( '_builtin' => false ), 'names' );
241
  $custom_tax = get_taxonomies( array( '_builtin' => false ), 'names' );
242
 
243
+ $defined = [];
244
+ $defined['type'] = apply_filters('cme_filterable_post_types', get_post_types(['public' => true, 'show_ui' => true], 'object', 'or'));
245
+ $defined['taxonomy'] = apply_filters('cme_filterable_taxonomies', get_taxonomies(['public' => true, 'show_ui' => true], 'object', 'or'));
246
 
247
  // bbPress' dynamic role def requires additional code to enforce stored caps
248
  $unfiltered['type'] = apply_filters('presspermit_unfiltered_post_types', ['forum','topic','reply','wp_block']);
249
  $unfiltered['type'] = (defined('PP_CAPABILITIES_NO_LEGACY_FILTERS')) ? $unfiltered['type'] : apply_filters('pp_unfiltered_post_types', $unfiltered['type']);
250
 
251
  $unfiltered['taxonomy'] = apply_filters('presspermit_unfiltered_post_types', ['post_status', 'topic-tag']); // avoid confusion with Edit Flow administrative taxonomy
252
+ $unfiltered['taxonomy'] = (defined('PP_CAPABILITIES_NO_LEGACY_FILTERS')) ? $unfiltered['taxonomy'] : apply_filters('pp_unfiltered_taxonomies', $unfiltered['taxonomy']);
253
 
254
  $enabled_taxonomies = cme_get_assisted_taxonomies();
255
 
387
  if ( empty($force_distinct_ui) && empty( $cap_properties[$cap_type][$item_type] ) )
388
  continue;
389
 
390
+ $type_label = (defined('CME_LEGACY_MENU_NAME_LABEL') && !empty($type_obj->labels->menu_name)) ? $type_obj->labels->menu_name : $type_obj->labels->name;
391
 
392
  $row .= "<td><a class='cap_type' href='#toggle_type_caps'>" . $type_label . '</a>';
393
  $row .= '<a href="#" class="neg-type-caps">&nbsp;x&nbsp;</a>';
520
  jQuery(document).ready( function($) {
521
  $('a[href="#toggle_type_caps"]').click( function() {
522
  var chks = $(this).closest('tr').find('input');
523
+ var set_checked = ! $(chks).first().is(':checked');
524
+
525
+ $(chks).each(function(i,e) {
526
+ $('input[name="' + $(this).attr('name') + '"]').prop('checked', set_checked);
527
+ });
528
+
529
  return false;
530
  });
531
 
1166
  <?php
1167
  if ( ! $autocreate_roles = get_site_option( 'cme_autocreate_roles' ) )
1168
  $autocreate_roles = array();
 
 
1169
  ?>
1170
  <div style="margin-bottom: 5px">
1171
+ <label for="cme_autocreate_role" title="<?php _e('Create this role definition in new (future) sites', 'capsman-enhanced');?>"><input type="checkbox" name="cme_autocreate_role" id="cme_autocreate_role" autocomplete="off" value="1" <?php echo checked(in_array($default, $autocreate_roles));?>> <?php _e('include in new sites', 'capsman-enhanced'); ?> </label>
1172
  </div>
1173
  <div>
1174
  <label for="cme_net_sync_role" title="<?php echo esc_attr(__('Copy / update this role definition to all sites now', 'capsman-enhanced'));?>"><input type="checkbox" name="cme_net_sync_role" id="cme_net_sync_role" autocomplete="off" value="1"> <?php _e('sync role to all sites now', 'capsman-enhanced'); ?> </label>
includes/features/editor-features-classic.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $ce_elements = PP_Capabilities_Post_Features::elementsLayoutClassic();
3
+
4
+ $ce_post_disabled = [];
5
+
6
+ $def_post_types = apply_filters('pp_capabilities_feature_post_types', ['post', 'page']);
7
+
8
+ foreach($def_post_types as $post_type) {
9
+ $_disabled = get_option("capsman_feature_restrict_classic_{$post_type}", []);
10
+ $ce_post_disabled[$post_type] = !empty($_disabled[$default_role]) ? (array)$_disabled[$default_role] : [];
11
+ }
12
+ ?>
13
+
14
+ <table class="wp-list-table widefat fixed striped pp-capability-menus-select editor-features-classic" <?php if (empty($_REQUEST['ppc-tab']) || ('classic' != $_REQUEST['ppc-tab'])) echo 'style="display:none;"';?>>
15
+ <?php foreach(['thead', 'tfoot'] as $tag):?>
16
+ <<?php echo $tag;?>>
17
+ <tr>
18
+ <th class="menu-column"><?php _e('Classic Editor Screen', 'capsman-enhanced') ?></th>
19
+
20
+ <?php foreach($def_post_types as $post_type) :
21
+ $type_obj = get_post_type_object($post_type);
22
+ ?>
23
+ <th class="restrict-column ppc-menu-row"><?php printf(__('%s Restrict', 'capsman-enhanced'), $type_obj->labels->singular_name);?><br />
24
+ <input class="check-item classic check-all-menu-item" type="checkbox" title="<?php _e('Toggle all', 'capsman-enhanced');?>" data-pp_type="<?php echo $post_type;?>" />
25
+ </th>
26
+ <?php endforeach;?>
27
+ </tr>
28
+ </<?php echo $tag;?>>
29
+ <?php endforeach;?>
30
+
31
+ <tbody>
32
+ <?php
33
+ foreach ($ce_elements as $section_title => $arr) {
34
+ ?>
35
+ <tr class="ppc-menu-row parent-menu">
36
+ <td colspan="<?php echo (count($def_post_types) + 1);?>">
37
+ <h4 class="ppc-menu-row-section"><?php echo $section_title;?></h4>
38
+ </td>
39
+ </tr>
40
+
41
+ <?php
42
+ foreach ($arr as $feature_slug => $arr_feature) {
43
+ if (!$feature_slug) {
44
+ continue;
45
+ }
46
+ ?>
47
+ <tr class="ppc-menu-row parent-menu">
48
+ <td class="menu-column ppc-menu-item">
49
+ <span class="classic menu-item-link<?php echo (in_array($feature_slug, $ce_post_disabled['post'])) ? ' restricted' : ''; ?>">
50
+ <strong><i class="dashicons dashicons-arrow-right"></i>
51
+ <?php echo $arr_feature['label']; ?>
52
+ </strong></span>
53
+ </td>
54
+
55
+ <?php foreach($def_post_types as $post_type) :?>
56
+ <td class="restrict-column ppc-menu-checkbox">
57
+ <input id="cb_<?php echo $post_type . '-' . str_replace(['#', '.'], '_', $feature_slug);?>" class="check-item" type="checkbox"
58
+ name="capsman_feature_restrict_classic_<?php echo $post_type;?>[]"
59
+ value="<?php echo $feature_slug; ?>" <?php checked(in_array($feature_slug, $ce_post_disabled[$post_type]));?> />
60
+ </td>
61
+ <?php endforeach;?>
62
+ </tr>
63
+ <?php
64
+ }
65
+ }
66
+ ?>
67
+
68
+ </tbody>
69
+ </table>
includes/features/editor-features-gutenberg.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $gutenberg_elements = PP_Capabilities_Post_Features::elementsLayout();
3
+
4
+ $gutenberg_post_disabled = [];
5
+
6
+ $def_post_types = apply_filters('pp_capabilities_feature_post_types', ['post', 'page']);
7
+
8
+ foreach($def_post_types as $post_type) {
9
+ $_disabled = get_option("capsman_feature_restrict_{$post_type}", []);
10
+ $gutenberg_post_disabled[$post_type] = !empty($_disabled[$default_role]) ? (array)$_disabled[$default_role] : [];
11
+ }
12
+ ?>
13
+
14
+ <table class="wp-list-table widefat fixed striped pp-capability-menus-select editor-features-gutenberg" <?php if (!empty($_REQUEST['ppc-tab']) && ('gutenberg' != $_REQUEST['ppc-tab'])) echo 'style="display:none;"';?>>
15
+ <?php foreach(['thead', 'tfoot'] as $tag):?>
16
+ <<?php echo $tag;?>>
17
+ <tr>
18
+ <th class="menu-column"><?php _e('Gutenberg Screen', 'capsman-enhanced') ?></th>
19
+
20
+ <?php foreach($def_post_types as $post_type) :
21
+ $type_obj = get_post_type_object($post_type);
22
+ ?>
23
+ <th class="restrict-column ppc-menu-row"><?php printf(__('%s Restrict', 'capsman-enhanced'), $type_obj->labels->singular_name);?><br />
24
+ <input class="check-item gutenberg check-all-menu-item" type="checkbox" title="<?php _e('Toggle all', 'capsman-enhanced');?>" data-pp_type="<?php echo $post_type;?>" />
25
+ </th>
26
+ <?php endforeach;?>
27
+ </tr>
28
+ </<?php echo $tag;?>>
29
+ <?php endforeach;?>
30
+
31
+ <tbody>
32
+ <?php
33
+ foreach ($gutenberg_elements as $section_title => $arr) {
34
+ ?>
35
+ <tr class="ppc-menu-row parent-menu">
36
+ <td colspan="<?php echo (count($def_post_types) + 1);?>">
37
+ <h4 class="ppc-menu-row-section"><?php echo $section_title;?></h4>
38
+ </td>
39
+ </tr>
40
+
41
+ <?php
42
+ foreach ($arr as $feature_slug => $arr_feature) {
43
+ ?>
44
+ <tr class="ppc-menu-row parent-menu">
45
+ <td class="menu-column ppc-menu-item">
46
+ <span class="gutenberg menu-item-link<?php checked(in_array($feature_slug, $gutenberg_post_disabled['post']), true, 'restricted');?>">
47
+ <strong><i class="dashicons dashicons-arrow-right"></i>
48
+ <?php echo $arr_feature['label']; ?>
49
+ </strong></span>
50
+ </td>
51
+
52
+ <?php foreach($def_post_types as $post_type) :?>
53
+ <td class="restrict-column ppc-menu-checkbox">
54
+ <input id="check-item-<?php echo "{$post_type}-{$feature_slug}";?>" class="check-item" type="checkbox"
55
+ name="capsman_feature_restrict_<?php echo $post_type;?>[]"
56
+ value="<?php echo $feature_slug;?>"<?php checked(in_array($feature_slug, $gutenberg_post_disabled[$post_type]));?> />
57
+ </td>
58
+ <?php endforeach;?>
59
+ </tr>
60
+ <?php
61
+ }
62
+ }
63
+ ?>
64
+
65
+ </tbody>
66
+ </table>
includes/features/editor-features.php ADDED
@@ -0,0 +1,231 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Capability Manager Edit Posts Permission.
4
+ * Edit Posts permission and visibility per roles.
5
+ *
6
+ * Copyright 2021, PublishPress <help@publishpress.com>
7
+ *
8
+ * This program is free software; you can redistribute it and/or
9
+ * modify it under the terms of the GNU General Public License
10
+ * version 2 as published by the Free Software Foundation.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License
18
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ */
20
+
21
+ require_once (dirname(CME_FILE) . '/includes/features/restrict-editor-features.php');
22
+
23
+ global $capsman;
24
+ $roles = $capsman->roles;
25
+ $default_role = $capsman->current;
26
+
27
+ $classic_editor = pp_capabilities_is_classic_editor_available();
28
+ ?>
29
+ <div class="wrap publishpress-caps-manage pressshack-admin-wrapper pp-capability-menus-wrapper">
30
+ <div id="icon-capsman-admin" class="icon32"></div>
31
+ <h2><?php _e('Editor Feature Restriction', 'capsman-enhanced'); ?></h2>
32
+
33
+ <form method="post" id="ppc-editor-features-form"
34
+ action="admin.php?page=pp-capabilities-editor-features">
35
+ <?php wp_nonce_field('pp-capabilities-editor-features'); ?>
36
+
37
+ <table id="akmin">
38
+ <tr>
39
+ <td class="content">
40
+
41
+ <div class="publishpress-headline">
42
+ <span class="cme-subtext">
43
+ <span class='pp-capability-role-caption'>
44
+ <?php
45
+ _e('Select editor features to remove. Note that this screen cannot be used to grant additional features to any role.', 'capabilities-pro');
46
+ ?>
47
+ </span>
48
+ </span>
49
+ </div>
50
+
51
+ <div class="publishpress-filters">
52
+ <select name="ppc-editor-features-role" class="ppc-editor-features-role">
53
+ <?php
54
+ foreach ($roles as $role => $name) :
55
+ $name = translate_user_role($name);
56
+ ?>
57
+ <option value="<?php echo $role;?>" <?php selected($default_role, $role);?>><?php echo $name;?></option>
58
+ <?php
59
+ endforeach;
60
+ ?>
61
+ </select> &nbsp;
62
+
63
+ <img class="loading" src="<?php echo $capsman->mod_url; ?>/images/wpspin_light.gif" style="display: none">
64
+
65
+ <input type="submit" name="editor-features-submit"
66
+ value="<?php _e('Save Changes', 'capabilities-pro') ?>"
67
+ class="button-primary ppc-editor-features-submit" style="float:right" />
68
+
69
+ <input type="hidden" name="ppc-tab" value="<?php echo (!empty($_REQUEST['ppc-tab'])) ? sanitize_key($_REQUEST['ppc-tab']) : 'gutenberg';?>" />
70
+ </div>
71
+
72
+ <script type="text/javascript">
73
+ /* <![CDATA[ */
74
+ jQuery(document).ready(function($) {
75
+ $('li.gutenberg-tab').click(function() {
76
+ $('div.publishpress-filters input[name=ppc-tab]').val('gutenberg');
77
+ });
78
+
79
+ $('li.classic-tab').click(function() {
80
+ $('div.publishpress-filters input[name=ppc-tab]').val('classic');
81
+ });
82
+ });
83
+ /* ]]> */
84
+ </script>
85
+
86
+ <?php if ($classic_editor) { ?>
87
+ <ul class="nav-tab-wrapper">
88
+ <li class="editor-features-tab gutenberg-tab nav-tab <?php if (empty($_REQUEST['ppc-tab']) || ('gutenberg' == $_REQUEST['ppc-tab'])) echo 'nav-tab-active';?>"
89
+ data-tab=".editor-features-gutenberg"><a href="#"><?php _e('Gutenberg', 'capsman-enhanced') ?></a></li>
90
+
91
+ <li class="editor-features-tab classic-tab nav-tab <?php if (!empty($_REQUEST['ppc-tab']) && ('classic' == $_REQUEST['ppc-tab'])) echo 'nav-tab-active';?>"
92
+ data-tab=".editor-features-classic"><a href="#"><?php _e('Classic', 'capsman-enhanced') ?></a></li>
93
+ </ul>
94
+ <?php } ?>
95
+
96
+ <div id="pp-capability-menu-wrapper" class="postbox">
97
+ <div class="pp-capability-menus">
98
+
99
+ <div class="pp-capability-menus-wrap">
100
+ <div id="pp-capability-menus-general"
101
+ class="pp-capability-menus-content editable-role"
102
+ style="display: block;">
103
+ <?php
104
+ $sn = 0;
105
+ include(dirname(__FILE__) . '/editor-features-gutenberg.php');
106
+
107
+ if ($classic_editor) {
108
+ include(dirname(__FILE__) . '/editor-features-classic.php');
109
+ }
110
+ ?>
111
+
112
+ </div>
113
+ </div>
114
+
115
+ </div>
116
+ </div>
117
+
118
+ <input type="submit" name="editor-features-submit"
119
+ value="<?php _e('Save Changes', 'capsman-enhanced') ?>"
120
+ class="button-primary ppc-editor-features-submit"/> &nbsp;
121
+
122
+
123
+ </td>
124
+ </tr>
125
+ </table>
126
+
127
+ </form>
128
+
129
+ <?php if (!defined('PUBLISHPRESS_CAPS_PRO_VERSION') || get_option('cme_display_branding')) {
130
+ cme_publishpressFooter();
131
+ }
132
+ ?>
133
+ </div>
134
+
135
+ <style>
136
+ span.menu-item-link {
137
+ webkit-user-select: none; /* Safari */
138
+ -moz-user-select: none; /* Firefox */
139
+ -ms-user-select: none; /* IE10+/Edge */
140
+ user-select: none; /* Standard */
141
+ }
142
+
143
+ input.check-all-menu-item {margin-top: 5px !important;}
144
+ </style>
145
+
146
+ <script type="text/javascript">
147
+ /* <![CDATA[ */
148
+ jQuery(document).ready(function ($) {
149
+
150
+ // -------------------------------------------------------------
151
+ // Set form action attribute to include role
152
+ // -------------------------------------------------------------
153
+ $('#ppc-editor-features-form').attr('action', '<?php echo admin_url('admin.php?page=pp-capabilities-editor-features&role=' . $default_role . ''); ?>');
154
+
155
+ // -------------------------------------------------------------
156
+ // Instant restricted item class
157
+ // -------------------------------------------------------------
158
+ $(document).on('change', '.pp-capability-menus-wrapper .ppc-menu-row .check-item', function () {
159
+ var current_tab;
160
+
161
+ <?php if ($classic_editor) { ?>
162
+ if ($('.nav-tab-wrapper .classic-tab').hasClass('nav-tab-active')) {
163
+ current_tab = 'classic';
164
+ } else {
165
+ current_tab = 'gutenberg';
166
+ }
167
+ <?php } else { ?>
168
+ current_tab = 'gutenberg';
169
+ <?php } ?>
170
+
171
+ //add class if feature is restricted for any post type
172
+ var anyRestricted = $(this).closest('tr').find('input:checked').length > 0;
173
+ $(this).closest('tr').find('.menu-item-link').toggleClass('restricted', anyRestricted);
174
+
175
+ var isChecked = $(this).is(':checked');
176
+
177
+ //toggle all checkbox
178
+ if ($(this).hasClass('check-all-menu-item')) {
179
+ var suffix = ('gutenberg' == current_tab) ? '' : current_tab + '_';
180
+ $("input[type='checkbox'][name='capsman_feature_restrict_" + suffix + $(this).data('pp_type') + "[]']").prop('checked', isChecked);
181
+
182
+ $('.' + current_tab + '.menu-item-link').each(function(i,e) {
183
+ $(this).toggleClass('restricted', $(this).closest('tr').find('input:checked').length > 0);
184
+ });
185
+ } else {
186
+ $('.' + current_tab + '.check-all-menu-link').removeClass('restricted').prop('checked', false);
187
+ }
188
+ });
189
+
190
+ $('span.menu-item-link').click(function(e) {
191
+ var chks = $(this).closest('tr').find('input');
192
+ $(chks).prop('checked', !$(this).hasClass('restricted'));
193
+ $(this).toggleClass('restricted', $(chks).filter(':checked').length);
194
+ });
195
+
196
+ // -------------------------------------------------------------
197
+ // Load selected roles menu
198
+ // -------------------------------------------------------------
199
+ $(document).on('change', '.pp-capability-menus-wrapper .ppc-editor-features-role', function () {
200
+
201
+ //disable select
202
+ $('.pp-capability-menus-wrapper .ppc-editor-features-role').attr('disabled', true);
203
+
204
+ //hide button
205
+ $('.pp-capability-menus-wrapper .ppc-editor-features-submit').hide();
206
+
207
+ //show loading
208
+ $('#pp-capability-menu-wrapper').hide();
209
+ $('div.publishpress-caps-manage img.loading').show();
210
+
211
+ //go to url
212
+ window.location = '<?php echo admin_url('admin.php?page=pp-capabilities-editor-features&role='); ?>' + $(this).val() + '';
213
+
214
+ });
215
+
216
+
217
+ // -------------------------------------------------------------
218
+ // Editor features tab
219
+ // -------------------------------------------------------------
220
+ $('.editor-features-tab').click(function (e) {
221
+ e.preventDefault();
222
+ $('.editor-features-tab').removeClass('nav-tab-active');
223
+ $(this).addClass('nav-tab-active');
224
+ $('.pp-capability-menus-select').hide();
225
+ $($(this).attr('data-tab')).show();
226
+ });
227
+
228
+ });
229
+ /* ]]> */
230
+ </script>
231
+ <?php
includes/features/features-block-script.js ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ if(ppc_features.disabled_panel){
2
+ var disabled_panel = ppc_features.disabled_panel;
3
+ var disabled_panel = disabled_panel.split(',');
4
+
5
+ var taxs = ppc_features.taxonomies;
6
+ taxs = taxs.split(',');
7
+
8
+ taxs.forEach ((tax) => {
9
+ if(disabled_panel.includes("taxonomy-panel-" + tax)){
10
+ wp.data.dispatch('core/edit-post').removeEditorPanel('taxonomy-panel-' + tax); // category / tag / custom taxonomy
11
+ }
12
+ });
13
+
14
+ if(disabled_panel.includes("featured-image")){
15
+ wp.data.dispatch('core/edit-post').removeEditorPanel( 'featured-image' ); // featured image
16
+ }
17
+ if(disabled_panel.includes("post-link")){
18
+ wp.data.dispatch('core/edit-post').removeEditorPanel( 'post-link' ); // permalink
19
+ }
20
+ if(disabled_panel.includes("page-attributes")){
21
+ wp.data.dispatch('core/edit-post').removeEditorPanel( 'page-attributes' ); // page attributes
22
+ }
23
+ if(disabled_panel.includes("post-excerpt")){
24
+ wp.data.dispatch('core/edit-post').removeEditorPanel( 'post-excerpt' ); // Excerpt
25
+ }
26
+ if(disabled_panel.includes("discussion-panel")){
27
+ wp.data.dispatch('core/edit-post').removeEditorPanel( 'discussion-panel' ); // Discussion
28
+ }
29
+ if(disabled_panel.includes("post-status")){
30
+ wp.data.dispatch( 'core/edit-post').removeEditorPanel( 'post-status' ) ;// Post status
31
+ }
32
+ }
includes/features/restrict-editor-features.php ADDED
@@ -0,0 +1,356 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PP_Capabilities_Post_Features {
4
+
5
+ /**
6
+ * Recursive search in array.
7
+ *
8
+ * @param string $needle
9
+ * @param array $haystack
10
+ *
11
+ * @return bool
12
+ */
13
+ private static function recursiveInArray($needle, $haystack)
14
+ {
15
+ if ('' === $haystack) {
16
+ return false;
17
+ }
18
+
19
+ if (!$haystack) {
20
+ return false;
21
+ }
22
+
23
+ foreach ($haystack as $stalk) {
24
+ if ($needle === $stalk
25
+ || (is_array($stalk)
26
+ && self::recursiveInArray($needle, $stalk)
27
+ )
28
+ ) {
29
+ return true;
30
+ }
31
+ }
32
+
33
+ return false;
34
+ }
35
+
36
+ public static function elementsLayoutClassic()
37
+ {
38
+ $elements = [];
39
+
40
+ $elements[__('Top Tabs', 'capsman-enhanced')] = [
41
+ '#contextual-help-link-wrap' => ['label' => __('Help', 'capsman-enhanced')],
42
+ '#screen-options-link-wrap' => ['label' => __('Screen Options', 'capsman-enhanced')],
43
+ ];
44
+
45
+ $elements[__('Editor', 'capsman-enhanced')] = [
46
+ '.page-title-action' => ['label' => __('Add New', 'capsman-enhanced')],
47
+ '#title' => ['label' => __('Title', 'capsman-enhanced'), 'elements' => '#titlediv, #title, #titlewrap'],
48
+ '#postdivrich' => ['label' => __('Editor', 'capsman-enhanced')],
49
+ '#pageslugdiv' => ['label' => __('Permalink', 'capsman-enhanced')],
50
+ '#media_buttons' => ['label' => __('Media Buttons (all)', 'capsman-enhanced'), 'elements' => '#media-buttons, #wp-content-media-buttons'],
51
+ '#html_editor_button' => ['label' => __('HTML Editor Button', 'capsman-enhanced'),'elements' => '#editor-toolbar #edButtonHTML, #quicktags, #content-html, .wp-switch-editor.switch-html'],
52
+ '#wp-word-count' => ['label' => __('Word count', 'capsman-enhanced')],
53
+ ];
54
+
55
+ $elements[__('Publish Box', 'capsman-enhanced')] = [
56
+ '#submitdiv' => ['label' => __('Publish Box', 'capsman-enhanced')],
57
+ '#save-post' => ['label' => __('Save Draft', 'capsman-enhanced')],
58
+ '#post-preview' => ['label' => __('Preview', 'capsman-enhanced')],
59
+ '.misc-pub-post-status' => ['label' => __('Publish Status ', 'capsman-enhanced')],
60
+ '.misc-pub-visibility' => ['label' => __('Publish Visibility', 'capsman-enhanced')],
61
+ '#passworddiv' => ['label' => __('Password Protect This Post', 'capsman-enhanced')],
62
+ '#misc-publishing-actions' => ['label' => __('Publish Actions', 'capsman-enhanced')],
63
+ '.misc-pub-curtime' => ['label' => __('Publish Schedule', 'capsman-enhanced')],
64
+ '#date' => ['label' => __('Date', 'capsman-enhanced'), 'elements' => '#date, #datediv, th.column-date, td.date, div.curtime'],
65
+ '#publish' => ['label' => __('Publish', 'capsman-enhanced')],
66
+ ];
67
+
68
+ $elements[__('Taxonomy Boxes', 'capsman-enhanced')] = [
69
+ '#category' => ['label' => __('Categories', 'capsman-enhanced'), 'elements' => '#categories, #categorydiv, #categorydivsb, th.column-categories, td.categories'],
70
+ '#category-add-toggle' => ['label' => __('Add New Category', 'capsman-enhanced')],
71
+ '#post_tag' => ['label' => __('Tags', 'capsman-enhanced'), 'elements' => '#tags, #tagsdiv,#tagsdivsb,#tagsdiv-post_tag, th.column-tags, td.tags'],
72
+ ];
73
+
74
+ end($elements);
75
+ $k = key($elements);
76
+
77
+ foreach (get_taxonomies(['show_ui' => true], 'object') as $taxonomy => $tx_obj) {
78
+ if (!in_array($taxonomy, ['category', 'post_tag', 'link_category'])) {
79
+ $elements[$k]["#{$tx_obj->name}div"] = ['label' => $tx_obj->label];
80
+ }
81
+ }
82
+
83
+ $elements[__('Page Boxes', 'capsman-enhanced')] = [
84
+ '#pageparentdiv' => ['label' => __('Page Attributes', 'capsman-enhanced')],
85
+ '#parent_id' => ['label' => __('Parent', 'capsman-enhanced'), 'elements' => 'p.parent-id-label-wrapper, #parent_id'],
86
+ '#page_template' => ['label' => __('Page Template', 'capsman-enhanced')],
87
+ 'p.menu-order-label-wrapper' => ['label' => __('Order', 'capsman-enhanced')],
88
+ ];
89
+
90
+ $elements[__('Other Boxes', 'capsman-enhanced')] = [
91
+ '#postimagediv' => ['label' => __('Featured Image', 'capsman-enhanced')],
92
+ '#slug' => ['label' => __('Post Slug', 'capsman-enhanced'), 'elements' => '#slugdiv,#edit-slug-box'],
93
+ '#commentstatusdiv' => ['label' => __('Discussion', 'capsman-enhanced')],
94
+ ];
95
+
96
+ end($elements);
97
+ $k = key($elements);
98
+
99
+ /*
100
+ __('Related, Shortcuts', 'capsman-enhanced') => '.side-info',
101
+ __('Messages', 'capsman-enhanced') => '#notice',
102
+ __('h2: Advanced Options', 'capsman-enhanced') => '#post-body h2',
103
+ */
104
+
105
+ $post_type_supports = [];
106
+
107
+ $def_post_types = apply_filters('pp_capabilities_feature_post_types', ['post', 'page']);
108
+
109
+ foreach($def_post_types as $post_type) {
110
+ $post_type_supports = array_merge($post_type_supports, get_all_post_type_supports($post_type));
111
+ }
112
+
113
+ foreach (array_keys($post_type_supports) as $feature) {
114
+ $label = ucfirst(str_replace(['-', '_'], ' ', $feature));
115
+
116
+ switch ($feature) {
117
+ case 'excerpt' :
118
+ $id = 'postexcerpt';
119
+ break;
120
+
121
+ case 'custom-fields' :
122
+ $id = 'postcustom';
123
+ break;
124
+
125
+ case 'post-formats' :
126
+ $id = 'format';
127
+ break;
128
+
129
+ case 'author':
130
+ case 'excerpt':
131
+ case 'trackbacks':
132
+ case 'comments':
133
+ case 'revisions':
134
+ //default:
135
+ $id = $feature;
136
+ break;
137
+
138
+ default:
139
+ continue 2;
140
+ }
141
+
142
+ $elements[$k][$feature] = [
143
+ 'label' => $label,
144
+ 'elements' => '#' . $id
145
+ . ', #' . $id . 'div'
146
+ . ', th.column-' . $id
147
+ . ', td.' . $id
148
+ ]; //th and td for raw in edit screen
149
+ }
150
+
151
+ return apply_filters('pp_capabilities_post_feature_elements_classic', $elements);
152
+ }
153
+
154
+
155
+ /**
156
+ * Classic Editor screen: Output Styles to Hide UI elements for Editor Features configured as restricted
157
+ */
158
+ public static function applyRestrictionsClassic()
159
+ {
160
+ $restrict_elements = [];
161
+
162
+ if (!$post_type = pp_capabilities_get_post_type()) {
163
+ return;
164
+ }
165
+
166
+ // Only restrictions associated with this user's role(s) will be applied
167
+ $role_restrictions = array_intersect_key(
168
+ get_option("capsman_feature_restrict_classic_{$post_type}", []),
169
+ array_fill_keys(wp_get_current_user()->roles, true)
170
+ );
171
+
172
+ foreach($role_restrictions as $features) {
173
+ $restrict_elements = array_merge($restrict_elements, self::getElements($features, ['editor_type' => 'classic']));
174
+ }
175
+
176
+ // apply the stored restrictions by css
177
+ if ($restrict_elements = array_unique($restrict_elements)) {
178
+ echo '<style>' . implode(',', $restrict_elements) . ' {display:none !important;}</style>';
179
+ }
180
+ }
181
+
182
+ /**
183
+ * Classic Editor: Apply / Queue editor feature restrictions
184
+ */
185
+ public static function adminInitClassic($post_type)
186
+ {
187
+ // Get all user roles.
188
+ $user_roles = wp_get_current_user()->roles;
189
+ $ce_post_disabled = get_option("capsman_feature_restrict_classic_{$post_type}", []);
190
+
191
+ $disabled_elements_post_ = [];
192
+ $disabled_elements_post_all = [];
193
+
194
+ foreach ($user_roles as $role) {
195
+ if (!empty($ce_post_disabled[$role])) {
196
+ $disabled_elements_post_[$role] = (array)$ce_post_disabled[$role];
197
+ }
198
+
199
+ if (!empty($disabled_elements_post_[$role])) {
200
+ $disabled_elements_post_all[] = $disabled_elements_post_[$role];
201
+ }
202
+ }
203
+
204
+ // Set default editor tinymce
205
+ if (self::recursiveInArray(
206
+ '#editor-toolbar #edButtonHTML, #quicktags, #content-html',
207
+ $disabled_elements_post_all
208
+ )
209
+ ) {
210
+ add_filter('wp_default_editor', function($default) {
211
+ return 'tinymce';
212
+ });
213
+ }
214
+
215
+ // Remove media buttons
216
+ if (self::recursiveInArray('media_buttons', $disabled_elements_post_all)
217
+ ) {
218
+ remove_action('media_buttons', 'media_buttons');
219
+ }
220
+
221
+ // set meta-box post option
222
+ add_action('admin_head', ['PP_Capabilities_Post_Features', 'applyRestrictionsClassic'], 1);
223
+ }
224
+
225
+ /**
226
+ * Gutenberg Editor: Hide UI elements for editor features configured as restricted
227
+ */
228
+ public static function applyRestrictions($post_type)
229
+ {
230
+ $restrict_elements = [];
231
+
232
+ // Only restrictions associated with this user's role(s) will be applied
233
+ $role_restrictions = array_intersect_key(
234
+ get_option("capsman_feature_restrict_{$post_type}", []),
235
+ array_fill_keys(wp_get_current_user()->roles, true)
236
+ );
237
+
238
+ foreach($role_restrictions as $features) {
239
+ $restrict_elements = array_merge($restrict_elements, self::getElements($features));
240
+ }
241
+
242
+ // apply the stored restrictions by js and css
243
+ if ($restrict_elements = array_unique($restrict_elements)) {
244
+
245
+ // script file
246
+ wp_register_script(
247
+ 'ppc-features-block-script',
248
+ plugin_dir_url(CME_FILE) . 'includes/features/features-block-script.js',
249
+ ['wp-blocks', 'wp-edit-post']
250
+ );
251
+
252
+ //localize script
253
+ wp_localize_script(
254
+ 'ppc-features-block-script',
255
+ 'ppc_features',
256
+ [
257
+ 'disabled_panel' => implode(',', $restrict_elements),
258
+ 'taxonomies' => implode(",", get_taxonomies())
259
+ ]
260
+ );
261
+
262
+ // register block editor script
263
+ register_block_type(
264
+ 'ppc/features-block-script',
265
+ ['editor_script' => 'ppc-features-block-script']
266
+ );
267
+
268
+ echo '<style>' . implode(',', $restrict_elements) . ' {display:none !important;}</style>';
269
+ }
270
+ }
271
+
272
+ private static function getElements($feature_names, $args = []) {
273
+ $is_classic = (!empty($args['editor_type']) && ('classic' == $args['editor_type']));
274
+
275
+ $feature_names = (array) $feature_names;
276
+
277
+ $arr = ($is_classic) ? self::elementsLayoutClassic() : self::elementsLayout();
278
+
279
+ $elements = [];
280
+
281
+ foreach($arr as $section_features) {
282
+ foreach($section_features as $_feature_name => $feature_info) {
283
+ if (in_array($_feature_name, $feature_names)) {
284
+ if (!empty($feature_info['elements'])) {
285
+ $elements = array_merge($elements, explode(',', $feature_info['elements']));
286
+ } else {
287
+ $elements[]= $_feature_name;
288
+ }
289
+ }
290
+ }
291
+ }
292
+
293
+ return $elements;
294
+ }
295
+
296
+ public static function elementsLayout()
297
+ {
298
+ $elements = [
299
+ __('Top Bar - Left', 'capabilities-pro') => [
300
+ 'add_block' => ['label' => __('Add block', 'capsman-enhanced'), 'elements' => '.edit-post-header-toolbar .edit-post-header-toolbar__inserter-toggle.has-icon'],
301
+ 'modes' => ['label' => __('Modes', 'capsman-enhanced'), 'elements' => '.edit-post-header-toolbar .components-dropdown:first-of-type'],
302
+ 'undo' => ['label' => __('Undo', 'capsman-enhanced'), 'elements' => '.edit-post-header-toolbar .editor-history__undo'],
303
+ 'redo' => ['label' => __('Redo', 'capsman-enhanced'), 'elements' => '.edit-post-header-toolbar .editor-history__redo'],
304
+ 'details' => ['label' => __('Details', 'capsman-enhanced'), 'elements' => '.edit-post-header__toolbar .table-of-contents'],
305
+ 'outline' => ['label' => __('Outline', 'capsman-enhanced'), 'elements' => '.edit-post-header__toolbar .block-editor-block-navigation'],
306
+ ],
307
+
308
+ __('Top Bar - Right', 'capabilities-pro') => [
309
+ 'save_draft' => ['label' => __('Save Draft', 'capsman-enhanced'), 'elements' => '.edit-post-header__settings .components-button.editor-post-save-draft'],
310
+ 'switch_to_draft' => ['label' => __('Switch to draft', 'capsman-enhanced'), 'elements' => '.edit-post-header__settings .components-button.editor-post-switch-to-draft'],
311
+ 'preview' => ['label' => __('Preview', 'capsman-enhanced'), 'elements' => '.edit-post-header__settings .block-editor-post-preview__dropdown'],
312
+ 'publish' => ['label' => __('Publish / Update', 'capsman-enhanced'), 'elements' => '.edit-post-header__settings .editor-post-publish-button__button'],
313
+ 'settings' => ['label' => __('Settings', 'capsman-enhanced'), 'elements' => '.edit-post-header__settings .interface-pinned-items button'],
314
+ 'options' => ['label' => __('Options', 'capsman-enhanced'), 'elements' => '.edit-post-header__settings .edit-post-more-menu .components-button'],
315
+ ],
316
+
317
+ __('Body', 'capabilities-pro') => [
318
+ 'edit_title' => ['label' => __('Edit title', 'capsman-enhanced'), 'elements' => '.wp-block.editor-post-title__block'],
319
+ 'content' => ['label' => __('Content', 'capsman-enhanced'), 'elements' => '.block-editor-block-list__layout'],
320
+ ],
321
+
322
+ __('Document Panel', 'capabilities-pro') => [
323
+ 'status_visibility' => ['label' => __('Status & visibility', 'capsman-enhanced'), 'elements' => 'post-status'],
324
+ 'permalink' => ['label' => __('Permalink', 'capsman-enhanced'), 'elements' => 'post-link'],
325
+ 'categories' => ['label' => __('Categories', 'capsman-enhanced'), 'elements' => 'taxonomy-panel-category'],
326
+ 'tags' => ['label' => __('Tags', 'capsman-enhanced'), 'elements' => 'taxonomy-panel-post_tag'],
327
+ ]
328
+ ];
329
+
330
+ end($elements);
331
+ $k = key($elements);
332
+
333
+ foreach (get_taxonomies(['show_ui' => true], 'object') as $taxonomy => $tx_obj) {
334
+ if (!in_array($taxonomy, ['category', 'post_tag', 'link_category'])) {
335
+ $elements[$k][$tx_obj->name] = ['label' => $tx_obj->label, 'elements' => "taxonomy-panel-$taxonomy"];
336
+ }
337
+ }
338
+
339
+ $elements[$k] = array_merge($elements[$k], [
340
+ 'featured_image' => ['label' => __('Featured image', 'capsman-enhanced'), 'elements' => 'featured-image'],
341
+ 'excerpt' => ['label' => __('Excerpt', 'capsman-enhanced'), 'elements' => 'post-excerpt'],
342
+ 'discussion' => ['label' => __('Discussion', 'capsman-enhanced'), 'elements' => 'discussion-panel'],
343
+ 'post_attributes' => ['label' => __('Post Attributes', 'capsman-enhanced'), 'elements' => 'page-attributes'],
344
+ ]);
345
+
346
+ $elements[__('Block Panel', 'capabilities-pro')] = [
347
+ 'block_panel' => ['label' => __('Block Panel', 'capsman-enhanced'), 'elements' => '.block-editor-block-inspector'],
348
+ 'paragraph' => ['label' => __('Paragraph', 'capsman-enhanced'), 'elements' => '.block-editor-block-card'],
349
+ 'typography' => ['label' => __('Typography', 'capsman-enhanced'), 'elements' => '.block-editor-block-inspector .components-panel__body:first-of-type'],
350
+ 'color' => ['label' => __('Color settings', 'capsman-enhanced'), 'elements' => '.block-editor-panel-color-gradient-settings'],
351
+ 'text_settings' => ['label' => __('Text settings', 'capsman-enhanced'), 'elements' => '.block-editor-panel-color-gradient-settings + .components-panel__body'],
352
+ ];
353
+
354
+ return apply_filters('pp_capabilities_post_feature_elements', $elements);
355
+ }
356
+ }
includes/filters.php CHANGED
@@ -31,8 +31,8 @@ if ( defined( 'WC_PLUGIN_FILE' ) ) {
31
  if (!defined('CME_DISABLE_WP_EDIT_PUBLISHED_WORKAROUND')) {
32
  global $wp_version;
33
  if (version_compare($wp_version, '4.9.7', '>=')) { // avoid any issues with old REST API implementations
34
- require_once (dirname(__FILE__) . '/filters-wp_rest_workarounds.php');
35
- new PublishPress\Capabilities\WP_REST_Workarounds();
36
  }
37
  }
38
 
@@ -261,31 +261,31 @@ function cme_get_assisted_post_types() {
261
  // Note: this intentionally does NOT share Press Permit' option name, for back compat reasons
262
  // Enabling filtered taxonomies in PP previously did not cause the edit_terms, delete_terms, assign_terms capabilities to be enforced
263
  function cme_get_assisted_taxonomies() {
264
- $tx_args = array( 'public' => true );
265
-
266
- $taxonomies = get_taxonomies( $tx_args );
267
-
268
- if ( $omit_taxonomies = apply_filters( 'pp_unfiltered_taxonomies', array() ) ) {
269
- $taxonomies = array_diff_key( $taxonomies, array_fill_keys( (array) $omit_taxonomies, true ) );
270
  }
271
 
272
  $option_name = (defined('PPC_VERSION') && !defined('PRESSPERMIT_VERSION')) ? 'pp_enabled_taxonomies' : 'presspermit_enabled_taxonomies';
273
- $enabled = (array) get_option( $option_name, array() );
274
  $taxonomies = array_intersect( $taxonomies, array_keys( array_filter( $enabled ) ) );
275
 
276
  return apply_filters( 'cme_assisted_taxonomies', $taxonomies, $tx_args );
277
  }
278
 
279
  function cme_get_detailed_taxonomies() {
280
- $tx_args = array( 'public' => true );
281
-
282
- $taxonomies = get_taxonomies( $tx_args );
283
-
284
- if ( $omit_taxonomies = apply_filters( 'pp_unfiltered_taxonomies', array() ) ) {
285
- $taxonomies = array_diff_key( $taxonomies, array_fill_keys( (array) $omit_taxonomies, true ) );
286
  }
287
 
288
- $enabled = (array) get_option( 'cme_detailed_taxonomies', array() );
289
  $taxonomies = array_intersect( $taxonomies, array_keys( array_filter( $enabled ) ) );
290
 
291
  return apply_filters( 'cme_detailed_taxonomies', $taxonomies, $tx_args );
31
  if (!defined('CME_DISABLE_WP_EDIT_PUBLISHED_WORKAROUND')) {
32
  global $wp_version;
33
  if (version_compare($wp_version, '4.9.7', '>=')) { // avoid any issues with old REST API implementations
34
+ require_once (dirname(__FILE__) . '/filters-wp_rest_workarounds.php');
35
+ new PublishPress\Capabilities\WP_REST_Workarounds();
36
  }
37
  }
38
 
261
  // Note: this intentionally does NOT share Press Permit' option name, for back compat reasons
262
  // Enabling filtered taxonomies in PP previously did not cause the edit_terms, delete_terms, assign_terms capabilities to be enforced
263
  function cme_get_assisted_taxonomies() {
264
+ $tx_args = ['public' => true, 'show_ui' => true];
265
+ $taxonomies = apply_filters('cme_filterable_taxonomies', get_taxonomies($tx_args, 'object', 'or'));
266
+ $taxonomies = array_combine(array_keys($taxonomies), array_keys($taxonomies));
267
+
268
+ if ($omit_taxonomies = apply_filters('pp_unfiltered_taxonomies', [])) {
269
+ $taxonomies = array_diff($taxonomies, (array) $omit_taxonomies);
270
  }
271
 
272
  $option_name = (defined('PPC_VERSION') && !defined('PRESSPERMIT_VERSION')) ? 'pp_enabled_taxonomies' : 'presspermit_enabled_taxonomies';
273
+ $enabled = (array) get_option( $option_name, []);
274
  $taxonomies = array_intersect( $taxonomies, array_keys( array_filter( $enabled ) ) );
275
 
276
  return apply_filters( 'cme_assisted_taxonomies', $taxonomies, $tx_args );
277
  }
278
 
279
  function cme_get_detailed_taxonomies() {
280
+ $tx_args = ['public' => true, 'show_ui' => true];
281
+ $taxonomies = apply_filters('cme_filterable_taxonomies', get_taxonomies($tx_args, 'object', 'or'));
282
+ $taxonomies = array_combine(array_keys($taxonomies), array_keys($taxonomies));
283
+
284
+ if ($omit_taxonomies = apply_filters('pp_unfiltered_taxonomies', [])) {
285
+ $taxonomies = array_diff($taxonomies, (array) $omit_taxonomies);
286
  }
287
 
288
+ $enabled = (array) get_option('cme_detailed_taxonomies', []);
289
  $taxonomies = array_intersect( $taxonomies, array_keys( array_filter( $enabled ) ) );
290
 
291
  return apply_filters( 'cme_detailed_taxonomies', $taxonomies, $tx_args );
includes/functions-admin.php CHANGED
@@ -9,7 +9,13 @@ class PP_Capabilities_Admin_UI {
9
  */
10
  require_once (dirname(CME_FILE) . '/classes/pp-capabilities-notices.php');
11
 
12
- add_action('admin_enqueue_scripts', [$this, 'adminScripts']);
 
 
 
 
 
 
13
  add_action('admin_print_scripts', [$this, 'adminPrintScripts']);
14
 
15
  add_action('profile_update', [$this, 'action_profile_update'], 10, 2);
@@ -20,7 +26,7 @@ class PP_Capabilities_Admin_UI {
20
  add_action('user_register', [$this, 'action_profile_update'], 9);
21
  }
22
 
23
- if (is_admin() && (isset($_REQUEST['page']) && (in_array($_REQUEST['page'], ['pp-capabilities', 'pp-capabilities-backup', 'pp-capabilities-roles', 'pp-capabilities-admin-menus', 'pp-capabilities-nav-menus', 'pp-capabilities-settings']))
24
  || (!empty($_REQUEST['action']) && in_array($_REQUEST['action'], ['pp-roles-add-role', 'pp-roles-delete-role', 'pp-roles-hide-role', 'pp-roles-unhide-role']))
25
  || ( ! empty($_SERVER['SCRIPT_NAME']) && strpos( $_SERVER['SCRIPT_NAME'], 'p-admin/plugins.php' ) && ! empty($_REQUEST['action'] ) )
26
  || ( isset($_GET['action']) && 'reset-defaults' == $_GET['action'] )
@@ -39,13 +45,60 @@ class PP_Capabilities_Admin_UI {
39
  }
40
  }
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  function adminScripts() {
43
  global $publishpress;
44
 
45
  if (function_exists('get_current_screen') && (!defined('PUBLISHPRESS_VERSION') || empty($publishpress) || empty($publishpress->modules) || empty($publishpress->modules->roles))) {
46
  $screen = get_current_screen();
47
 
48
- if ('user-edit' === $screen->base || ('user' === $screen->base && 'add' === $screen->action)) {
49
  // Check if we are on the user's profile page
50
  wp_enqueue_script(
51
  'pp-capabilities-chosen-js',
@@ -74,13 +127,17 @@ class PP_Capabilities_Admin_UI {
74
  CAPSMAN_VERSION
75
  );
76
 
77
- $userId = isset($_GET['user_id']) ? (int)$_GET['user_id'] : 0;
 
 
 
 
78
 
79
  wp_localize_script(
80
  'pp-capabilities-roles-profile-js',
81
  'ppCapabilitiesProfileData',
82
  [
83
- 'selected_roles' => ($userId) ? $this->getUsersRoles($userId) : (array) get_option('default_role'),
84
  ]
85
  );
86
  }
@@ -188,6 +245,7 @@ class PP_Capabilities_Admin_UI {
188
  );
189
 
190
  add_submenu_page('pp-capabilities', __('Roles', 'capsman-enhanced'), __('Roles', 'capsman-enhanced'), $cap_name, 'pp-capabilities-roles', 'cme_fakefunc');
 
191
  add_submenu_page('pp-capabilities', __('Admin Menus', 'capsman-enhanced'), __('Admin Menus', 'capsman-enhanced'), $cap_name, 'pp-capabilities-admin-menus', 'cme_fakefunc');
192
  add_submenu_page('pp-capabilities', __('Nav Menus', 'capsman-enhanced'), __('Nav Menus', 'capsman-enhanced'), $cap_name, 'pp-capabilities-nav-menus', 'cme_fakefunc');
193
  add_submenu_page('pp-capabilities', __('Backup', 'capsman-enhanced'), __('Backup', 'capsman-enhanced'), $cap_name, 'pp-capabilities-backup', 'cme_fakefunc');
@@ -212,3 +270,144 @@ class PP_Capabilities_Admin_UI {
212
 
213
  function cme_fakefunc() {
214
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  require_once (dirname(CME_FILE) . '/classes/pp-capabilities-notices.php');
11
 
12
+ add_action('init', [$this, 'featureRestrictionsGutenberg']);
13
+
14
+ if (is_admin()) {
15
+ add_action('admin_init', [$this, 'featureRestrictionsClassic']);
16
+ }
17
+
18
+ add_action('admin_enqueue_scripts', [$this, 'adminScripts'], 100);
19
  add_action('admin_print_scripts', [$this, 'adminPrintScripts']);
20
 
21
  add_action('profile_update', [$this, 'action_profile_update'], 10, 2);
26
  add_action('user_register', [$this, 'action_profile_update'], 9);
27
  }
28
 
29
+ if (is_admin() && (isset($_REQUEST['page']) && (in_array($_REQUEST['page'], ['pp-capabilities', 'pp-capabilities-backup', 'pp-capabilities-roles', 'pp-capabilities-admin-menus', 'pp-capabilities-editor-features', 'pp-capabilities-nav-menus', 'pp-capabilities-settings']))
30
  || (!empty($_REQUEST['action']) && in_array($_REQUEST['action'], ['pp-roles-add-role', 'pp-roles-delete-role', 'pp-roles-hide-role', 'pp-roles-unhide-role']))
31
  || ( ! empty($_SERVER['SCRIPT_NAME']) && strpos( $_SERVER['SCRIPT_NAME'], 'p-admin/plugins.php' ) && ! empty($_REQUEST['action'] ) )
32
  || ( isset($_GET['action']) && 'reset-defaults' == $_GET['action'] )
45
  }
46
  }
47
 
48
+ private function applyFeatureRestrictions($editor = 'gutenberg') {
49
+ global $pagenow;
50
+
51
+ // Return if not a post editor request
52
+ if (!in_array($pagenow, ['post.php', 'post-new.php'])) {
53
+ return;
54
+ }
55
+
56
+ static $def_post_types; // avoid redundant filter application
57
+
58
+ if (!isset($def_post_types)) {
59
+ //$def_post_types = apply_filters('pp_capabilities_feature_post_types', get_post_types(['public' => true]));
60
+ $def_post_types = apply_filters('pp_capabilities_feature_post_types', ['post', 'page']);
61
+ }
62
+
63
+ $post_type = pp_capabilities_get_post_type();
64
+
65
+ // Return if not a supported post type
66
+ if (!in_array($post_type, $def_post_types)) {
67
+ return;
68
+ }
69
+
70
+ switch ($editor) {
71
+ case 'gutenberg':
72
+ if (_pp_capabilities_is_block_editor_active()) {
73
+ require_once ( dirname(CME_FILE) . '/includes/features/restrict-editor-features.php' );
74
+ PP_Capabilities_Post_Features::applyRestrictions($post_type);
75
+ }
76
+
77
+ break;
78
+
79
+ case 'classic':
80
+ if (!_pp_capabilities_is_block_editor_active()) {
81
+ require_once ( dirname(CME_FILE) . '/includes/features/restrict-editor-features.php' );
82
+ PP_Capabilities_Post_Features::adminInitClassic($post_type);
83
+ }
84
+ }
85
+ }
86
+
87
+ function featureRestrictionsGutenberg() {
88
+ $this->applyFeatureRestrictions();
89
+ }
90
+
91
+ function featureRestrictionsClassic() {
92
+ $this->applyFeatureRestrictions('classic');
93
+ }
94
+
95
  function adminScripts() {
96
  global $publishpress;
97
 
98
  if (function_exists('get_current_screen') && (!defined('PUBLISHPRESS_VERSION') || empty($publishpress) || empty($publishpress->modules) || empty($publishpress->modules->roles))) {
99
  $screen = get_current_screen();
100
 
101
+ if ('user-edit' === $screen->base || ('user' === $screen->base && 'add' === $screen->action && defined('PP_CAPABILITIES_ADD_USER_MULTI_ROLES'))) {
102
  // Check if we are on the user's profile page
103
  wp_enqueue_script(
104
  'pp-capabilities-chosen-js',
127
  CAPSMAN_VERSION
128
  );
129
 
130
+ $roles = !empty($_GET['user_id']) ?$this->getUsersRoles($_GET['user_id']) : [];
131
+
132
+ if (empty($roles)) {
133
+ $roles = (array) get_option('default_role');
134
+ }
135
 
136
  wp_localize_script(
137
  'pp-capabilities-roles-profile-js',
138
  'ppCapabilitiesProfileData',
139
  [
140
+ 'selected_roles' => $roles
141
  ]
142
  );
143
  }
245
  );
246
 
247
  add_submenu_page('pp-capabilities', __('Roles', 'capsman-enhanced'), __('Roles', 'capsman-enhanced'), $cap_name, 'pp-capabilities-roles', 'cme_fakefunc');
248
+ add_submenu_page('pp-capabilities', __('Editor Features', 'capsman-enhanced'), __('Editor Features', 'capsman-enhanced'), $cap_name, 'pp-capabilities-editor-features', 'cme_fakefunc');
249
  add_submenu_page('pp-capabilities', __('Admin Menus', 'capsman-enhanced'), __('Admin Menus', 'capsman-enhanced'), $cap_name, 'pp-capabilities-admin-menus', 'cme_fakefunc');
250
  add_submenu_page('pp-capabilities', __('Nav Menus', 'capsman-enhanced'), __('Nav Menus', 'capsman-enhanced'), $cap_name, 'pp-capabilities-nav-menus', 'cme_fakefunc');
251
  add_submenu_page('pp-capabilities', __('Backup', 'capsman-enhanced'), __('Backup', 'capsman-enhanced'), $cap_name, 'pp-capabilities-backup', 'cme_fakefunc');
270
 
271
  function cme_fakefunc() {
272
  }
273
+
274
+ function pp_capabilities_get_post_id()
275
+ {
276
+ global $post;
277
+
278
+ if (defined('REST_REQUEST') && REST_REQUEST) {
279
+ if ($_post_id = apply_filters('presspermit_rest_post_id', 0)) {
280
+ return $_post_id;
281
+ }
282
+ }
283
+
284
+ if (!empty($post) && is_object($post)) {
285
+ if ('auto-draft' == $post->post_status) {
286
+ return 0;
287
+ } else {
288
+ return $post->ID;
289
+ }
290
+
291
+ } elseif (isset($_REQUEST['post'])) {
292
+ return (int)$_REQUEST['post'];
293
+
294
+ } elseif (isset($_REQUEST['post_ID'])) {
295
+ return (int)$_REQUEST['post_ID'];
296
+
297
+ } elseif (isset($_REQUEST['post_id'])) {
298
+ return (int)$_REQUEST['post_id'];
299
+
300
+ } elseif (defined('WOOCOMMERCE_VERSION') && !empty($_REQUEST['product_id'])) {
301
+ return (int)$_REQUEST['product_id'];
302
+ }
303
+ }
304
+
305
+ /**
306
+ * Based on Edit Flow's \Block_Editor_Compatible::should_apply_compat method.
307
+ *
308
+ * @return bool
309
+ */
310
+ function _pp_capabilities_is_block_editor_active($post_type = '', $args = [])
311
+ {
312
+ global $current_user, $wp_version;
313
+
314
+ $defaults = ['suppress_filter' => false, 'force_refresh' => false];
315
+ $args = array_merge($defaults, $args);
316
+ $suppress_filter = $args['suppress_filter'];
317
+
318
+ // Check if Revisionary lower than v1.3 is installed. It disables Gutenberg.
319
+ if (defined('REVISIONARY_VERSION') && version_compare(REVISIONARY_VERSION, '1.3-beta', '<')) {
320
+ return false;
321
+ }
322
+
323
+ static $buffer;
324
+ if (!isset($buffer)) {
325
+ $buffer = [];
326
+ }
327
+
328
+ if (!$post_type = pp_capabilities_get_post_type()) {
329
+ return true;
330
+ }
331
+
332
+ if ($post_type_obj = get_post_type_object($post_type)) {
333
+ if (!$post_type_obj->show_in_rest) {
334
+ return false;
335
+ }
336
+ }
337
+
338
+ if (isset($buffer[$post_type]) && empty($args['force_refresh']) && !$suppress_filter) {
339
+ return $buffer[$post_type];
340
+ }
341
+
342
+ if (class_exists('Classic_Editor')) {
343
+ if (isset($_REQUEST['classic-editor__forget']) && (isset($_REQUEST['classic']) || isset($_REQUEST['classic-editor']))) {
344
+ return false;
345
+ } elseif (isset($_REQUEST['classic-editor__forget']) && !isset($_REQUEST['classic']) && !isset($_REQUEST['classic-editor'])) {
346
+ return true;
347
+ } elseif (get_option('classic-editor-allow-users') === 'allow') {
348
+ if ($post_id = pp_capabilities_get_post_id()) {
349
+ $which = get_post_meta( $post_id, 'classic-editor-remember', true );
350
+
351
+ if ('block-editor' == $which) {
352
+ return true;
353
+ } elseif ('classic-editor' == $which) {
354
+ return false;
355
+ }
356
+ } else {
357
+ $use_block = ('block' == get_user_meta($current_user->ID, 'wp_classic-editor-settings'));
358
+ return $use_block && apply_filters('use_block_editor_for_post_type', $use_block, $post_type, PHP_INT_MAX);
359
+ }
360
+ }
361
+ }
362
+
363
+ $pluginsState = array(
364
+ 'classic-editor' => class_exists( 'Classic_Editor' ), // is_plugin_active('classic-editor/classic-editor.php'),
365
+ 'gutenberg' => function_exists( 'the_gutenberg_project' ), //is_plugin_active('gutenberg/gutenberg.php'),
366
+ 'gutenberg-ramp' => class_exists('Gutenberg_Ramp'),
367
+ );
368
+
369
+ $conditions = [];
370
+
371
+ if ($suppress_filter) remove_filter('use_block_editor_for_post_type', $suppress_filter, 10, 2);
372
+
373
+ /**
374
+ * 5.0:
375
+ *
376
+ * Classic editor either disabled or enabled (either via an option or with GET argument).
377
+ * It's a hairy conditional :(
378
+ */
379
+ // phpcs:ignore WordPress.VIP.SuperGlobalInputUsage.AccessDetected, WordPress.Security.NonceVerification.NoNonceVerification
380
+ $conditions[] = (version_compare($wp_version, '5.0', '>=') || $pluginsState['gutenberg'])
381
+ && ! $pluginsState['classic-editor']
382
+ && ! $pluginsState['gutenberg-ramp']
383
+ && apply_filters('use_block_editor_for_post_type', true, $post_type, PHP_INT_MAX);
384
+
385
+ $conditions[] = version_compare($wp_version, '5.0', '>=')
386
+ && $pluginsState['classic-editor']
387
+ && (get_option('classic-editor-replace') === 'block'
388
+ && ! isset($_GET['classic-editor__forget']));
389
+
390
+ $conditions[] = version_compare($wp_version, '5.0', '>=')
391
+ && $pluginsState['classic-editor']
392
+ && (get_option('classic-editor-replace') === 'classic'
393
+ && isset($_GET['classic-editor__forget']));
394
+
395
+ $conditions[] = $pluginsState['gutenberg-ramp']
396
+ && apply_filters('use_block_editor_for_post', true, get_post(pp_capabilities_get_post_id()), PHP_INT_MAX);
397
+
398
+ // Returns true if at least one condition is true.
399
+ $result = count(
400
+ array_filter($conditions,
401
+ function ($c) {
402
+ return (bool)$c;
403
+ }
404
+ )
405
+ ) > 0;
406
+
407
+ if (!$suppress_filter) {
408
+ $buffer[$post_type] = $result;
409
+ }
410
+
411
+ // Returns true if at least one condition is true.
412
+ return $result;
413
+ }
includes/functions.php CHANGED
@@ -8,7 +8,7 @@ function pp_capabilities_is_editable_role($role_name, $args = []) {
8
 
9
  if (!isset($editable_roles) || !empty($args['force_refresh'])) {
10
  $all_roles = wp_roles()->roles;
11
- $editable_roles = apply_filters('editable_roles', $all_roles);
12
  }
13
 
14
  return apply_filters('pp_capabilities_editable_role', isset($editable_roles[$role_name]), $role_name);
@@ -121,3 +121,61 @@ function pp_capabilities_update_permissions_option($option_basename, $option_val
121
  {
122
  function_exists('presspermit') ? presspermit()->updateOption($option_basename, $option_val) : pp_update_option($option_basename, $option_val);
123
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  if (!isset($editable_roles) || !empty($args['force_refresh'])) {
10
  $all_roles = wp_roles()->roles;
11
+ $editable_roles = apply_filters('editable_roles', $all_roles, $args);
12
  }
13
 
14
  return apply_filters('pp_capabilities_editable_role', isset($editable_roles[$role_name]), $role_name);
121
  {
122
  function_exists('presspermit') ? presspermit()->updateOption($option_basename, $option_val) : pp_update_option($option_basename, $option_val);
123
  }
124
+
125
+ /**
126
+ * Get post type.
127
+ *
128
+ * @return null|string String of the post type.
129
+ */
130
+ function pp_capabilities_get_post_type()
131
+ {
132
+ global $post, $typenow, $current_screen;
133
+
134
+ // We have a post so we can just get the post type from that.
135
+ if ($post && $post->post_type) {
136
+ return $post->post_type;
137
+ }
138
+
139
+ // Check the global $typenow - set in admin.php
140
+ if ($typenow) {
141
+ return $typenow;
142
+ }
143
+
144
+ // Check the global $current_screen object - set in screen.php
145
+ if ($current_screen && $current_screen->post_type) {
146
+ return $current_screen->post_type;
147
+ }
148
+
149
+ if (isset($_GET['post']) && !is_array($_GET['post'])) {
150
+ $post_id = (int) esc_attr($_GET['post']);
151
+
152
+ } elseif (isset($_POST['post_ID'])) {
153
+ $post_id = (int) esc_attr($_POST['post_ID']);
154
+ }
155
+
156
+ if (!empty($post_id)) {
157
+ return get_post_type($post_id);
158
+ }
159
+
160
+ // lastly check the post_type querystring
161
+ if (isset($_REQUEST['post_type'])) {
162
+ return sanitize_key($_REQUEST['post_type']);
163
+ }
164
+
165
+ return 'post';
166
+ }
167
+
168
+ /**
169
+ * Check if Classic Editor plugin is available.
170
+ *
171
+ * @return bool
172
+ */
173
+ function pp_capabilities_is_classic_editor_available()
174
+ {
175
+ global $wp_version;
176
+
177
+ return class_exists('Classic_Editor')
178
+ || function_exists( 'the_gutenberg_project' )
179
+ || class_exists('Gutenberg_Ramp')
180
+ || version_compare($wp_version, '5.0', '<');
181
+ }
includes/handler.php CHANGED
@@ -357,7 +357,6 @@ class CapsmanHandler
357
  foreach ( $del_caps as $cap => $grant) {
358
  $blog_role->remove_cap($cap);
359
  }
360
-
361
  } else {
362
  $wp_roles->add_role( $role_name, $role_caption, $new_caps );
363
  }
357
  foreach ( $del_caps as $cap => $grant) {
358
  $blog_role->remove_cap($cap);
359
  }
 
360
  } else {
361
  $wp_roles->add_role( $role_name, $role_caption, $new_caps );
362
  }
includes/manager.php CHANGED
@@ -168,16 +168,16 @@ class CapabilityManager
168
  */
169
  function adminStyles()
170
  {
171
- if ( empty( $_REQUEST['page'] ) || ! in_array( $_REQUEST['page'], array( 'pp-capabilities', 'pp-capabilities-roles', 'pp-capabilities-admin-menus', 'pp-capabilities-nav-menus', 'pp-capabilities-backup', 'pp-capabilities-settings' ) ) )
172
  return;
173
 
174
  wp_enqueue_style('cme-admin-common', $this->mod_url . '/common/css/pressshack-admin.css', [], PUBLISHPRESS_CAPS_VERSION);
175
 
176
  wp_register_style( $this->ID . 'framework_admin', $this->mod_url . '/framework/styles/admin.css', false, PUBLISHPRESS_CAPS_VERSION);
177
- wp_enqueue_style( $this->ID . 'framework_admin');
178
 
179
- wp_register_style( $this->ID . '_admin', $this->mod_url . '/common/css/admin.css', false, PUBLISHPRESS_CAPS_VERSION);
180
- wp_enqueue_style( $this->ID . '_admin');
181
 
182
  $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '.dev' : '';
183
  $url = $this->mod_url . "/common/js/admin{$suffix}.js";
@@ -331,7 +331,9 @@ class CapabilityManager
331
  }
332
  );
333
  }
334
-
 
 
335
  do_action('pp-capabilities-admin-submenus');
336
 
337
  add_submenu_page('pp-capabilities', __('Backup', 'capsman-enhanced'), __('Backup', 'capsman-enhanced'), $cap_name, 'pp-capabilities-backup', array($this, 'backupTool'));
@@ -360,8 +362,8 @@ class CapabilityManager
360
 
361
  function($arr) {
362
  return [
363
- 'cb' => '<input type="checkbox"/>',
364
- 'name' => __('Name', 'capsman-enhanced'),
365
  'role' => __('Role', 'capsman-enhanced'),
366
  'count' => __('Users', 'capsman-enhanced'),
367
  ];
@@ -404,6 +406,57 @@ class CapabilityManager
404
  require_once ( dirname(CME_FILE) . '/includes/roles/roles.php' );
405
  }
406
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
407
  /**
408
  * Sets the 'manage_capabilities' cap to the administrator role.
409
  *
168
  */
169
  function adminStyles()
170
  {
171
+ if ( empty( $_REQUEST['page'] ) || ! in_array( $_REQUEST['page'], array( 'pp-capabilities', 'pp-capabilities-roles', 'pp-capabilities-admin-menus', 'pp-capabilities-nav-menus', 'pp-capabilities-editor-features', 'pp-capabilities-backup', 'pp-capabilities-settings' ) ) )
172
  return;
173
 
174
  wp_enqueue_style('cme-admin-common', $this->mod_url . '/common/css/pressshack-admin.css', [], PUBLISHPRESS_CAPS_VERSION);
175
 
176
  wp_register_style( $this->ID . 'framework_admin', $this->mod_url . '/framework/styles/admin.css', false, PUBLISHPRESS_CAPS_VERSION);
177
+ wp_enqueue_style( $this->ID . 'framework_admin');
178
 
179
+ wp_register_style( $this->ID . '_admin', $this->mod_url . '/common/css/admin.css', false, PUBLISHPRESS_CAPS_VERSION);
180
+ wp_enqueue_style( $this->ID . '_admin');
181
 
182
  $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '.dev' : '';
183
  $url = $this->mod_url . "/common/js/admin{$suffix}.js";
331
  }
332
  );
333
  }
334
+
335
+ add_submenu_page('pp-capabilities', __('Editor Features', 'capsman-enhanced'), __('Editor Features', 'capsman-enhanced'), $cap_name, 'pp-capabilities-editor-features', [$this, 'ManageEditorFeatures']);
336
+
337
  do_action('pp-capabilities-admin-submenus');
338
 
339
  add_submenu_page('pp-capabilities', __('Backup', 'capsman-enhanced'), __('Backup', 'capsman-enhanced'), $cap_name, 'pp-capabilities-backup', array($this, 'backupTool'));
362
 
363
  function($arr) {
364
  return [
365
+ 'cb' => '<input type="checkbox"/>',
366
+ 'name' => __('Name', 'capsman-enhanced'),
367
  'role' => __('Role', 'capsman-enhanced'),
368
  'count' => __('Users', 'capsman-enhanced'),
369
  ];
406
  require_once ( dirname(CME_FILE) . '/includes/roles/roles.php' );
407
  }
408
 
409
+ public function ManageEditorFeatures() {
410
+ if ((!is_multisite() || !is_super_admin()) && !current_user_can('administrator') && !current_user_can('manage_capabilities')) {
411
+ // TODO: Implement exceptions.
412
+ wp_die('<strong>' .__('You do not have permission to manage editor features.', 'capabilities-pro') . '</strong>');
413
+ }
414
+
415
+ $this->generateNames();
416
+ $roles = array_keys($this->roles);
417
+
418
+ if (!isset($this->current)) {
419
+ if (empty($_POST) && !empty($_REQUEST['role'])) {
420
+ $this->current = $_REQUEST['role'];
421
+ }
422
+ }
423
+
424
+ if (!isset($this->current) || !get_role($this->current)) {
425
+ $this->current = get_option('default_role');
426
+ }
427
+
428
+ if (!in_array($this->current, $roles)) {
429
+ $this->current = array_shift($roles);
430
+ }
431
+
432
+ if ('POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['ppc-editor-features-role'])) {
433
+ $this->current = $_POST['ppc-editor-features-role'];
434
+
435
+ $classic_editor = pp_capabilities_is_classic_editor_available();
436
+
437
+ //$def_post_types = apply_filters('pp_capabilities_feature_post_types', get_post_types(['public' => true]));
438
+ $def_post_types = apply_filters('pp_capabilities_feature_post_types', ['post', 'page']);
439
+
440
+ foreach ($def_post_types as $post_type) {
441
+ if ($classic_editor) {
442
+ $posted_settings = (isset($_POST["capsman_feature_restrict_classic_{$post_type}"])) ? $_POST["capsman_feature_restrict_classic_{$post_type}"] : [];
443
+ $post_features_option = get_option("capsman_feature_restrict_classic_{$post_type}", []);
444
+ $post_features_option[$_POST['ppc-editor-features-role']] = $posted_settings;
445
+ update_option("capsman_feature_restrict_classic_{$post_type}", $post_features_option, false);
446
+ }
447
+
448
+ $posted_settings = (isset($_POST["capsman_feature_restrict_{$post_type}"])) ? $_POST["capsman_feature_restrict_{$post_type}"] : [];
449
+ $post_features_option = get_option("capsman_feature_restrict_{$post_type}", []);
450
+ $post_features_option[$_POST['ppc-editor-features-role']] = $posted_settings;
451
+ update_option("capsman_feature_restrict_{$post_type}", $post_features_option, false);
452
+ }
453
+
454
+ ak_admin_notify(__('Settings updated.', 'capabilities-pro'));
455
+ }
456
+
457
+ include(dirname(CME_FILE) . '/includes/features/editor-features.php');
458
+ }
459
+
460
  /**
461
  * Sets the 'manage_capabilities' cap to the administrator role.
462
  *
includes/pp-ui.php CHANGED
@@ -70,24 +70,6 @@ class Capsman_PP_UI {
70
  }
71
  }
72
 
73
- function pp_only_roles_ui( $default ) {
74
- $support_pp_only_roles = defined('PRESSPERMIT_ACTIVE') || version_compare( PP_VERSION, '1.0-beta1.4', '>=');
75
- ?>
76
-
77
- <?php if ( $support_pp_only_roles && ! in_array( $default, array( /*'subscriber', 'contributor', 'author', 'editor',*/ 'administrator' ) ) ) : ?>
78
- <div style="float:right">
79
- <?php
80
- pp_refresh_options();
81
- $pp_only = (array) pp_capabilities_get_permissions_option( 'supplemental_role_defs' );
82
- $checked = ( in_array( $default, $pp_only ) ) ? 'checked="checked"': '';
83
- ?>
84
- <label for="pp_only_role" title="<?php _e('Make role available for supplemental assignment to Permission Groups only', 'capsman-enhanced');?>"><input type="checkbox" name="pp_only_role" id="pp_only_role" autocomplete="off" value="1" <?php echo $checked;?>> <?php _e('hidden role', 'capsman-enhanced'); ?> </label>
85
- </div>
86
- <?php endif; ?>
87
- <?php
88
- return $support_pp_only_roles;
89
- }
90
-
91
  // Note: CME can now impose type-specific capabilities without Press Permit Core active
92
  function pp_types_ui( $defined_types ) {
93
  ?>
70
  }
71
  }
72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  // Note: CME can now impose type-specific capabilities without Press Permit Core active
74
  function pp_types_ui( $defined_types ) {
75
  ?>
includes/publishpress-roles.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  class CME_PublishPressRoles {
3
- function scripts() {
4
  ?>
5
  <script type="text/javascript">
6
  /* <![CDATA[ */
1
  <?php
2
  class CME_PublishPressRoles {
3
+ public static function scripts() {
4
  ?>
5
  <script type="text/javascript">
6
  /* <![CDATA[ */
includes/roles/class/class-pp-roles-list-table.php CHANGED
@@ -261,7 +261,9 @@ class PP_Capabilities_Roles_List_Table extends WP_List_Table
261
  ['page' => 'pp-capabilities', 'role' => esc_attr($item['role'])],
262
  admin_url('admin.php')
263
  ),
264
- esc_html($item['name']), $role_states);
 
 
265
  } else {
266
  $out = esc_html($item['name']);
267
  }
261
  ['page' => 'pp-capabilities', 'role' => esc_attr($item['role'])],
262
  admin_url('admin.php')
263
  ),
264
+ esc_html($item['name']),
265
+ $role_states
266
+ );
267
  } else {
268
  $out = esc_html($item['name']);
269
  }
languages/capsman-enhanced-en_US.mo CHANGED
Binary file
languages/capsman-enhanced-en_US.po CHANGED
@@ -2,8 +2,8 @@ msgid ""
2
  msgstr ""
3
  "Project-Id-Version: PublishPress Capabilities\n"
4
  "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2021-05-06 13:51-0400\n"
6
- "PO-Revision-Date: 2021-05-06 13:51-0400\n"
7
  "Last-Translator: Kevin Behrens <kevin@publishpress.com>\n"
8
  "Language-Team: PublishPress <help@publishpress.com>\n"
9
  "Language: en_US\n"
@@ -13,7 +13,7 @@ msgstr ""
13
  "X-Poedit-KeywordsList: __;_e;_c;__ngettext;_n;pp_po_trigger;_x\n"
14
  "X-Poedit-Basepath: F:/snapshot/capability-manager-enhanced\n"
15
  "X-Poedit-SourceCharset: utf-8\n"
16
- "X-Generator: Poedit 2.4.2\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
  "X-Poedit-KeywordsList: __;_e;_c;_x;__ngettext\n"
19
  "X-Poedit-Basepath: ..\n"
@@ -31,16 +31,16 @@ msgstr ""
31
  msgid "<strong>This plugin can be deleted.</strong>"
32
  msgstr ""
33
 
34
- #: capsman-enhanced.php:102
35
  msgid "Warning:"
36
  msgstr ""
37
 
38
- #: capsman-enhanced.php:103
39
  #, php-format
40
  msgid "The active plugin %s is not compatible with your PHP version."
41
  msgstr ""
42
 
43
- #: capsman-enhanced.php:105
44
  #, php-format
45
  msgid "%s is required for this plugin."
46
  msgstr ""
@@ -49,11 +49,11 @@ msgstr ""
49
  msgid "Settings saved."
50
  msgstr ""
51
 
52
- #: includes-core/CoreAdmin.php:55 includes/functions-admin.php:37
53
  msgid "Admin Menus"
54
  msgstr ""
55
 
56
- #: includes-core/CoreAdmin.php:56 includes/functions-admin.php:38
57
  msgid "Nav Menus"
58
  msgstr ""
59
 
@@ -62,7 +62,9 @@ msgid "Admin Menu Restrictions"
62
  msgstr ""
63
 
64
  #: includes-core/admin-menus-promo.php:48 includes-core/nav-menus-promo.php:52
65
- #: includes/admin.php:99 includes/admin.php:1079 includes/settings.php:54
 
 
66
  msgid "Save Changes"
67
  msgstr ""
68
 
@@ -73,8 +75,8 @@ msgid ""
73
  msgstr ""
74
 
75
  #: includes-core/admin-menus-promo.php:62 includes-core/nav-menus-promo.php:67
76
- #: includes/functions-admin.php:45 includes/functions-admin.php:46
77
- #: includes/manager.php:334 includes/manager.php:335
78
  msgid "Upgrade to Pro"
79
  msgstr ""
80
 
@@ -95,17 +97,17 @@ msgid ""
95
  "%1$sClick here to fix this now%2$s."
96
  msgstr ""
97
 
98
- #: includes/admin.php:64
99
  msgid "Role Capabilities"
100
  msgstr ""
101
 
102
- #: includes/admin.php:109
103
  msgid ""
104
  "<strong>Note:</strong> Capability changes <strong>remain in the database</"
105
  "strong> after plugin deactivation."
106
  msgstr ""
107
 
108
- #: includes/admin.php:114
109
  #, php-format
110
  msgid ""
111
  "<strong>Note:</strong> Capability changes <strong>remain in the database</"
@@ -113,225 +115,222 @@ msgid ""
113
  "%sPermission Group%s."
114
  msgstr ""
115
 
116
- #: includes/admin.php:148 includes/settings.php:38
117
  msgid "PublishPress Permissions"
118
  msgstr ""
119
 
120
- #: includes/admin.php:150
121
  msgid ""
122
  "Automatically define type-specific capabilities for your custom post types "
123
  "and taxonomies"
124
  msgstr ""
125
 
126
- #: includes/admin.php:154
127
  msgid "Assign standard WP roles supplementally for a specific post type"
128
  msgstr ""
129
 
130
- #: includes/admin.php:158
131
  msgid ""
132
  "Assign custom WP roles supplementally for a specific post type <em>(Pro)</em>"
133
  msgstr ""
134
 
135
- #: includes/admin.php:162
136
  msgid "Customize reading permissions per-category or per-post"
137
  msgstr ""
138
 
139
- #: includes/admin.php:166
140
  msgid "Customize editing permissions per-category or per-post <em>(Pro)</em>"
141
  msgstr ""
142
 
143
- #: includes/admin.php:170
144
  msgid ""
145
  "Custom Post Visibility statuses, fully implemented throughout wp-admin "
146
  "<em>(Pro)</em>"
147
  msgstr ""
148
 
149
- #: includes/admin.php:174
150
  msgid ""
151
  "Custom Moderation statuses for access-controlled, multi-step publishing "
152
  "workflow <em>(Pro)</em>"
153
  msgstr ""
154
 
155
- #: includes/admin.php:178
156
  msgid "Regulate permissions for Edit Flow post statuses <em>(Pro)</em>"
157
  msgstr ""
158
 
159
- #: includes/admin.php:182
160
  msgid ""
161
  "Customize the moderated editing of published content with Revisionary or "
162
  "Post Forking <em>(Pro)</em>"
163
  msgstr ""
164
 
165
- #: includes/admin.php:186
166
  msgid ""
167
  "Grant Spectator, Participant or Moderator access to specific bbPress forums "
168
  "<em>(Pro)</em>"
169
  msgstr ""
170
 
171
- #: includes/admin.php:190
172
  msgid ""
173
  "Grant supplemental content permissions to a BuddyPress group <em>(Pro)</em>"
174
  msgstr ""
175
 
176
- #: includes/admin.php:194
177
  msgid "WPML integration to mirror permissions to translations <em>(Pro)</em>"
178
  msgstr ""
179
 
180
- #: includes/admin.php:198
181
  msgid "Member support forum"
182
  msgstr ""
183
 
184
- #: includes/admin.php:205
185
  #, php-format
186
  msgid "%1$sgrab%2$s %3$s"
187
  msgstr ""
188
 
189
- #: includes/admin.php:205
190
  #, php-format
191
  msgid "%s (free install)"
192
  msgstr ""
193
 
194
- #: includes/admin.php:207
195
  #, php-format
196
  msgid "%1$sbuy%2$s %3$s"
197
  msgstr ""
198
 
199
- #: includes/admin.php:207
200
  #, php-format
201
  msgid "%s info/purchase"
202
  msgstr ""
203
 
204
- #: includes/admin.php:287
205
  msgid "&nbsp;"
206
  msgstr ""
207
 
208
- #: includes/admin.php:288
209
  msgid "Reading"
210
  msgstr ""
211
 
212
- #: includes/admin.php:289
213
  msgid "Editing Capabilities"
214
  msgstr ""
215
 
216
- #: includes/admin.php:290
217
  msgid "Deletion Capabilities"
218
  msgstr ""
219
 
220
- #: includes/admin.php:294
221
  msgid "can read posts which are currently published with private visibility"
222
  msgstr ""
223
 
224
- #: includes/admin.php:295
225
  msgid ""
226
  "has basic editing capability (but may need other capabilities based on post "
227
  "status and ownership)"
228
  msgstr ""
229
 
230
- #: includes/admin.php:296
231
  msgid "can edit posts which were created by other users"
232
  msgstr ""
233
 
234
- #: includes/admin.php:297
235
  msgid "can edit posts which are currently published"
236
  msgstr ""
237
 
238
- #: includes/admin.php:298
239
  msgid "can edit posts which are currently published with private visibility"
240
  msgstr ""
241
 
242
- #: includes/admin.php:299
243
  msgid "can make a post publicly visible"
244
  msgstr ""
245
 
246
- #: includes/admin.php:300
247
  msgid ""
248
  "has basic deletion capability (but may need other capabilities based on post "
249
  "status and ownership)"
250
  msgstr ""
251
 
252
- #: includes/admin.php:301
253
  msgid "can delete posts which were created by other users"
254
  msgstr ""
255
 
256
- #: includes/admin.php:302
257
  msgid "can delete posts which are currently published"
258
  msgstr ""
259
 
260
- #: includes/admin.php:303
261
  msgid "can delete posts which are currently published with private visibility"
262
  msgstr ""
263
 
264
- #: includes/admin.php:437 includes/admin.php:547 includes/admin.php:809
265
- #: includes/admin.php:904 includes/admin.php:1001
266
  #, php-format
267
  msgid "%s: assigned by Permission Group"
268
  msgstr ""
269
 
270
- #: includes/admin.php:452
271
  #, php-format
272
  msgid "shared capability: %s"
273
  msgstr ""
274
 
275
- #: includes/admin.php:524
276
  msgid "Other WordPress Core Capabilities"
277
  msgstr ""
278
 
279
- #: includes/admin.php:566
280
  msgid ""
281
  "Lockout Prevention: To remove read capability, first remove WordPress "
282
  "admin / editing capabilities, or add \"dashboard_lockout_ok\" capability"
283
  msgstr ""
284
 
285
- #: includes/admin.php:609 includes/admin.php:848 includes/admin.php:957
286
- #: includes/admin.php:1044
287
  msgid "check/uncheck all"
288
  msgstr ""
289
 
290
- #: includes/admin.php:609 includes/admin.php:848 includes/admin.php:957
291
- #: includes/admin.php:1044
292
  msgid "negate all (storing as disabled capabilities)"
293
  msgstr ""
294
 
295
- #: includes/admin.php:609 includes/admin.php:848 includes/admin.php:957
296
- #: includes/admin.php:1044
297
  msgid "negate none (add/remove all capabilities normally)"
298
  msgstr ""
299
 
300
- #: includes/admin.php:783
301
  #, php-format
302
  msgid "%s Capabilities"
303
  msgstr ""
304
 
305
- #: includes/admin.php:856
306
- msgid "Additional Capabilities"
307
  msgstr ""
308
 
309
- #: includes/admin.php:966
310
  msgid ""
311
- "Meta capabilities are used in code as placeholders for other capabilities. "
312
- "Assiging to a role has no effect."
313
  msgstr ""
314
 
315
- #: includes/admin.php:967
316
- msgid "Invalid Capabilities"
317
  msgstr ""
318
 
319
- #: includes/admin.php:1057
320
  msgid ""
321
  "Role level is mostly deprecated. However, it still determines eligibility "
322
  "for Post Author assignment and limits the application of user editing "
323
  "capabilities."
324
  msgstr ""
325
 
326
- #: includes/admin.php:1059
327
  msgid "Level:"
328
  msgstr ""
329
 
330
- #: includes/admin.php:1082
331
  msgid "Delete this role"
332
  msgstr ""
333
 
334
- #: includes/admin.php:1082
335
  #, php-format
336
  msgid ""
337
  "You are about to delete the %s role.\n"
@@ -339,68 +338,77 @@ msgid ""
339
  " 'Cancel' to stop, 'OK' to delete."
340
  msgstr ""
341
 
342
- #: includes/admin.php:1082
343
  msgid "Delete Role"
344
  msgstr ""
345
 
346
- #: includes/admin.php:1091
347
  msgid "Add Capability"
348
  msgstr ""
349
 
350
- #: includes/admin.php:1094
351
  msgid "Add to role"
352
  msgstr ""
353
 
354
- #: includes/admin.php:1106
355
  msgid "Copy this role to"
356
  msgstr ""
357
 
358
- #: includes/admin.php:1109
 
359
  msgid "Role Name"
360
  msgstr ""
361
 
362
- #: includes/admin.php:1112 includes/pp-ui.php:84
363
  msgid ""
364
  "Make role available for supplemental assignment to Permission Groups only"
365
  msgstr ""
366
 
367
- #: includes/admin.php:1112
368
  msgid "hidden"
369
  msgstr ""
370
 
371
- #: includes/admin.php:1116
372
  msgid "Copy"
373
  msgstr ""
374
 
375
- #: includes/admin.php:1122
376
  msgid "Rename Role"
377
  msgstr ""
378
 
379
- #: includes/admin.php:1124
380
  msgid "New Role Name"
381
  msgstr ""
382
 
383
- #: includes/admin.php:1127
384
  msgid "Rename"
385
  msgstr ""
386
 
387
- #: includes/admin.php:1158
388
  msgid "Create this role definition in new (future) sites"
389
  msgstr ""
390
 
391
- #: includes/admin.php:1158
392
  msgid "include in new sites"
393
  msgstr ""
394
 
395
- #: includes/admin.php:1161
396
  msgid "Copy / update this role definition to all sites now"
397
  msgstr ""
398
 
399
- #: includes/admin.php:1161
400
  msgid "sync role to all sites now"
401
  msgstr ""
402
 
403
- #: includes/backup-handler.php:9 includes/manager.php:701
 
 
 
 
 
 
 
 
404
  msgid "You do not have permission to restore roles."
405
  msgstr ""
406
 
@@ -442,8 +450,8 @@ msgstr ""
442
  msgid "Restore"
443
  msgstr ""
444
 
445
- #: includes/backup.php:47 includes/functions-admin.php:39
446
- #: includes/manager.php:325
447
  msgid "Backup"
448
  msgstr ""
449
 
@@ -547,193 +555,472 @@ msgstr ""
547
  msgid "%s (level %s)"
548
  msgstr ""
549
 
550
- #: includes/backup.php:259
 
 
 
 
551
  msgid "Reset WordPress Defaults"
552
  msgstr ""
553
 
554
- #: includes/backup.php:262
555
  msgid "WARNING:"
556
  msgstr ""
557
 
558
- #: includes/backup.php:262
559
  msgid ""
560
  "Reseting default Roles and Capabilities will set them to the WordPress "
561
  "install defaults."
562
  msgstr ""
563
 
564
- #: includes/backup.php:266
565
  msgid ""
566
  "If you have installed any plugin that adds new roles or capabilities, these "
567
  "will be lost."
568
  msgstr ""
569
 
570
- #: includes/backup.php:268
571
  msgid "It is recommended to use this only as a last resource!"
572
  msgstr ""
573
 
574
- #: includes/backup.php:271
575
  msgid "Reset Roles and Capabilities to WordPress defaults"
576
  msgstr ""
577
 
578
- #: includes/backup.php:273
579
  msgid ""
580
  "You are about to reset Roles and Capabilities to WordPress defaults.\n"
581
  " 'Cancel' to stop, 'OK' to reset."
582
  msgstr ""
583
 
584
- #: includes/backup.php:273
585
  msgid "Reset to WordPress defaults"
586
  msgstr ""
587
 
588
- #: includes/filters-woocommerce.php:32
 
 
 
 
 
589
  #, php-format
590
- msgid "All %s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
591
  msgstr ""
592
 
 
593
  #: includes/filters-woocommerce.php:33
594
  msgid "Add New"
595
  msgstr ""
596
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597
  #: includes/filters.php:312
598
  msgid "Edit Roles"
599
  msgstr ""
600
 
601
- #: includes/functions-admin.php:14 includes/manager.php:289
602
- #: includes/roles/class/class-pp-roles-list-table.php:120
603
  msgid "Capabilities"
604
  msgstr ""
605
 
606
- #: includes/functions-admin.php:36 includes/manager.php:311
607
  #: includes/roles/roles.php:4
608
  msgid "Roles"
609
  msgstr ""
610
 
611
- #: includes/functions-admin.php:40 includes/manager.php:328
612
- msgid "Settings"
613
  msgstr ""
614
 
615
- #: includes/handler.php:23 includes/handler.php:49
616
  msgid "New role created."
617
  msgstr ""
618
 
619
- #: includes/handler.php:29 includes/handler.php:55
620
  msgid "Error: Failed creating the new role."
621
  msgstr ""
622
 
623
- #: includes/handler.php:42
624
  #, php-format
625
  msgid "Role \"%s\" (id %s) renamed to \"%s\""
626
  msgstr ""
627
 
628
- #: includes/handler.php:111
629
  msgid "Incorrect capability name."
630
  msgstr ""
631
 
632
- #: includes/handler.php:116
633
  msgid "Type / Taxonomy settings saved."
634
  msgstr ""
635
 
636
- #: includes/handler.php:122
637
  msgid "Bad form received."
638
  msgstr ""
639
 
640
- #: includes/handler.php:245
641
  msgid "You cannot remove Manage Capabilities from Administrators"
642
  msgstr ""
643
 
644
- #: includes/handler.php:357
645
- #, php-format
646
- msgid ""
647
- "Cannot delete default role. You <a href=\"%s\">have to change it first</a>."
648
- msgstr ""
649
-
650
- #: includes/handler.php:404
651
- #, php-format
652
- msgid "Role has been deleted. %1$d users moved to default role %2$s."
653
- msgstr ""
654
-
655
- #: includes/manager.php:174
656
  msgid "Explicity negate this capability by storing as disabled"
657
  msgstr ""
658
 
659
- #: includes/manager.php:175
660
  msgid "Explicitly negate these capabilities by storing as disabled"
661
  msgstr ""
662
 
663
- #: includes/manager.php:176
664
  msgid "Post type registration does not define this capability distinctly"
665
  msgstr ""
666
 
667
- #: includes/manager.php:177
668
  msgid "This capability is explicitly negated. Click to add/remove normally."
669
  msgstr ""
670
 
671
- #: includes/manager.php:178
672
  msgid "Add or remove this capability from the WordPress role"
673
  msgstr ""
674
 
675
- #: includes/manager.php:179
676
  msgid "Add or remove capability from the role normally"
677
  msgstr ""
678
 
679
- #: includes/manager.php:352
680
- #: includes/roles/class/class-pp-roles-list-table.php:77
681
- msgid "Role"
682
  msgstr ""
683
 
684
- #: includes/manager.php:353
685
- #: includes/roles/class/class-pp-roles-list-table.php:78
686
- #: includes/roles/roles.php:33
687
- msgid "Name"
688
  msgstr ""
689
 
690
- #: includes/manager.php:354
691
- #: includes/roles/class/class-pp-roles-list-table.php:79
692
  msgid "Users"
693
  msgstr ""
694
 
695
- #: includes/manager.php:381
696
  msgid "You do not have permission to manage roles."
697
  msgstr ""
698
 
699
- #: includes/manager.php:487 includes/manager.php:528
 
 
 
 
 
 
 
 
700
  msgid "You do not have permission to manage capabilities."
701
  msgstr ""
702
 
703
- #: includes/manager.php:542
704
  msgid "New capability added to role."
705
  msgstr ""
706
 
707
- #: includes/manager.php:581
 
 
 
 
708
  msgid "Bad form Received"
709
  msgstr ""
710
 
711
- #: includes/manager.php:731
712
  #, php-format
713
  msgid "If you like %s, please leave us a %s rating. Thank you!"
714
  msgstr ""
715
 
716
- #: includes/manager.php:742
717
  msgid "About PublishPress Capabilities"
718
  msgstr ""
719
 
720
- #: includes/manager.php:742
721
  msgid "About"
722
  msgstr ""
723
 
724
- #: includes/manager.php:744
725
  msgid "Capabilites Documentation"
726
  msgstr ""
727
 
728
- #: includes/manager.php:744
729
  msgid "Documentation"
730
  msgstr ""
731
 
732
- #: includes/manager.php:746
733
  msgid "Contact the PublishPress team"
734
  msgstr ""
735
 
736
- #: includes/manager.php:746
737
  msgid "Contact"
738
  msgstr ""
739
 
@@ -784,77 +1071,122 @@ msgid ""
784
  "status-specific role."
785
  msgstr ""
786
 
787
- #: includes/pp-ui.php:84
788
- msgid "hidden role"
789
- msgstr ""
790
-
791
- #: includes/pp-ui.php:95
792
  msgid "Type-Specific Capabilities"
793
  msgstr ""
794
 
795
- #: includes/pp-ui.php:98
796
  msgid "Ensure permissions can be controlled separately from other post types."
797
  msgstr ""
798
 
799
- #: includes/pp-ui.php:161
800
  msgid ""
801
  "Make selected post types require a different capability to add new posts."
802
  msgstr ""
803
 
804
- #: includes/pp-ui.php:161
805
  msgid "Use create_posts capability"
806
  msgstr ""
807
 
808
- #: includes/pp-ui.php:169 includes/pp-ui.php:232 includes/pp-ui.php:288
809
  msgid "Update"
810
  msgstr ""
811
 
812
- #: includes/pp-ui.php:179
813
  msgid "Taxonomy-Specific Capabilities"
814
  msgstr ""
815
 
816
- #: includes/pp-ui.php:182
817
  msgid "Ensure permissions can be controlled separately from other taxonomies."
818
  msgstr ""
819
 
820
- #: includes/pp-ui.php:237
821
  msgid "Detailed Taxonomy Capabilities"
822
  msgstr ""
823
 
824
- #: includes/pp-ui.php:240
825
  msgid ""
826
  "Enforce Edit, Delete and Assign capabilities separately from Management "
827
  "capability."
828
  msgstr ""
829
 
830
- #: includes/roles/class/class-pp-roles-actions.php:126
831
  msgid "You do not have sufficient permissions to perform this action."
832
  msgstr ""
833
 
834
- #: includes/roles/class/class-pp-roles-actions.php:142
835
  msgid "Your link has expired, refresh the page and try again."
836
  msgstr ""
837
 
838
- #: includes/roles/class/class-pp-roles-actions.php:163
839
- #: includes/roles/class/class-pp-roles-actions.php:269
 
 
840
  msgid "Missing parameters, refresh the page and try again."
841
  msgstr ""
842
 
843
- #: includes/roles/class/class-pp-roles-actions.php:197
844
  msgid ""
845
  "Something went wrong, the system wasn't able to create the role, refresh the "
846
  "page and try again."
847
  msgstr ""
848
 
849
- #: includes/roles/class/class-pp-roles-actions.php:284
 
 
 
 
 
 
850
  msgid "Deleting a system role is not allowed."
851
  msgstr ""
852
 
853
- #: includes/roles/class/class-pp-roles-list-table.php:134
854
- #: includes/roles/class/class-pp-roles-list-table.php:242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
855
  msgid "Delete"
856
  msgstr ""
857
 
 
 
 
 
858
  #: includes/roles/roles-functions.php:32
859
  msgid "Are you sure you want to delete this role?"
860
  msgstr ""
2
  msgstr ""
3
  "Project-Id-Version: PublishPress Capabilities\n"
4
  "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2021-06-23 13:17-0400\n"
6
+ "PO-Revision-Date: 2021-06-23 13:17-0400\n"
7
  "Last-Translator: Kevin Behrens <kevin@publishpress.com>\n"
8
  "Language-Team: PublishPress <help@publishpress.com>\n"
9
  "Language: en_US\n"
13
  "X-Poedit-KeywordsList: __;_e;_c;__ngettext;_n;pp_po_trigger;_x\n"
14
  "X-Poedit-Basepath: F:/snapshot/capability-manager-enhanced\n"
15
  "X-Poedit-SourceCharset: utf-8\n"
16
+ "X-Generator: Poedit 2.4.3\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
  "X-Poedit-KeywordsList: __;_e;_c;_x;__ngettext\n"
19
  "X-Poedit-Basepath: ..\n"
31
  msgid "<strong>This plugin can be deleted.</strong>"
32
  msgstr ""
33
 
34
+ #: capsman-enhanced.php:98
35
  msgid "Warning:"
36
  msgstr ""
37
 
38
+ #: capsman-enhanced.php:99
39
  #, php-format
40
  msgid "The active plugin %s is not compatible with your PHP version."
41
  msgstr ""
42
 
43
+ #: capsman-enhanced.php:101
44
  #, php-format
45
  msgid "%s is required for this plugin."
46
  msgstr ""
49
  msgid "Settings saved."
50
  msgstr ""
51
 
52
+ #: includes-core/CoreAdmin.php:53 includes/functions-admin.php:249
53
  msgid "Admin Menus"
54
  msgstr ""
55
 
56
+ #: includes-core/CoreAdmin.php:54 includes/functions-admin.php:250
57
  msgid "Nav Menus"
58
  msgstr ""
59
 
62
  msgstr ""
63
 
64
  #: includes-core/admin-menus-promo.php:48 includes-core/nav-menus-promo.php:52
65
+ #: includes/admin.php:107 includes/admin.php:1094
66
+ #: includes/features/editor-features.php:66
67
+ #: includes/features/editor-features.php:119 includes/settings.php:54
68
  msgid "Save Changes"
69
  msgstr ""
70
 
75
  msgstr ""
76
 
77
  #: includes-core/admin-menus-promo.php:62 includes-core/nav-menus-promo.php:67
78
+ #: includes/functions-admin.php:260 includes/functions-admin.php:261
79
+ #: includes/manager.php:348 includes/manager.php:349
80
  msgid "Upgrade to Pro"
81
  msgstr ""
82
 
97
  "%1$sClick here to fix this now%2$s."
98
  msgstr ""
99
 
100
+ #: includes/admin.php:66
101
  msgid "Role Capabilities"
102
  msgstr ""
103
 
104
+ #: includes/admin.php:117
105
  msgid ""
106
  "<strong>Note:</strong> Capability changes <strong>remain in the database</"
107
  "strong> after plugin deactivation."
108
  msgstr ""
109
 
110
+ #: includes/admin.php:122
111
  #, php-format
112
  msgid ""
113
  "<strong>Note:</strong> Capability changes <strong>remain in the database</"
115
  "%sPermission Group%s."
116
  msgstr ""
117
 
118
+ #: includes/admin.php:156 includes/settings.php:38
119
  msgid "PublishPress Permissions"
120
  msgstr ""
121
 
122
+ #: includes/admin.php:158
123
  msgid ""
124
  "Automatically define type-specific capabilities for your custom post types "
125
  "and taxonomies"
126
  msgstr ""
127
 
128
+ #: includes/admin.php:162
129
  msgid "Assign standard WP roles supplementally for a specific post type"
130
  msgstr ""
131
 
132
+ #: includes/admin.php:166
133
  msgid ""
134
  "Assign custom WP roles supplementally for a specific post type <em>(Pro)</em>"
135
  msgstr ""
136
 
137
+ #: includes/admin.php:170
138
  msgid "Customize reading permissions per-category or per-post"
139
  msgstr ""
140
 
141
+ #: includes/admin.php:174
142
  msgid "Customize editing permissions per-category or per-post <em>(Pro)</em>"
143
  msgstr ""
144
 
145
+ #: includes/admin.php:178
146
  msgid ""
147
  "Custom Post Visibility statuses, fully implemented throughout wp-admin "
148
  "<em>(Pro)</em>"
149
  msgstr ""
150
 
151
+ #: includes/admin.php:182
152
  msgid ""
153
  "Custom Moderation statuses for access-controlled, multi-step publishing "
154
  "workflow <em>(Pro)</em>"
155
  msgstr ""
156
 
157
+ #: includes/admin.php:186
158
  msgid "Regulate permissions for Edit Flow post statuses <em>(Pro)</em>"
159
  msgstr ""
160
 
161
+ #: includes/admin.php:190
162
  msgid ""
163
  "Customize the moderated editing of published content with Revisionary or "
164
  "Post Forking <em>(Pro)</em>"
165
  msgstr ""
166
 
167
+ #: includes/admin.php:194
168
  msgid ""
169
  "Grant Spectator, Participant or Moderator access to specific bbPress forums "
170
  "<em>(Pro)</em>"
171
  msgstr ""
172
 
173
+ #: includes/admin.php:198
174
  msgid ""
175
  "Grant supplemental content permissions to a BuddyPress group <em>(Pro)</em>"
176
  msgstr ""
177
 
178
+ #: includes/admin.php:202
179
  msgid "WPML integration to mirror permissions to translations <em>(Pro)</em>"
180
  msgstr ""
181
 
182
+ #: includes/admin.php:206
183
  msgid "Member support forum"
184
  msgstr ""
185
 
186
+ #: includes/admin.php:213
187
  #, php-format
188
  msgid "%1$sgrab%2$s %3$s"
189
  msgstr ""
190
 
191
+ #: includes/admin.php:213
192
  #, php-format
193
  msgid "%s (free install)"
194
  msgstr ""
195
 
196
+ #: includes/admin.php:215
197
  #, php-format
198
  msgid "%1$sbuy%2$s %3$s"
199
  msgstr ""
200
 
201
+ #: includes/admin.php:215
202
  #, php-format
203
  msgid "%s info/purchase"
204
  msgstr ""
205
 
206
+ #: includes/admin.php:296
207
  msgid "&nbsp;"
208
  msgstr ""
209
 
210
+ #: includes/admin.php:297
211
  msgid "Reading"
212
  msgstr ""
213
 
214
+ #: includes/admin.php:298
215
  msgid "Editing Capabilities"
216
  msgstr ""
217
 
218
+ #: includes/admin.php:299
219
  msgid "Deletion Capabilities"
220
  msgstr ""
221
 
222
+ #: includes/admin.php:303
223
  msgid "can read posts which are currently published with private visibility"
224
  msgstr ""
225
 
226
+ #: includes/admin.php:304
227
  msgid ""
228
  "has basic editing capability (but may need other capabilities based on post "
229
  "status and ownership)"
230
  msgstr ""
231
 
232
+ #: includes/admin.php:305
233
  msgid "can edit posts which were created by other users"
234
  msgstr ""
235
 
236
+ #: includes/admin.php:306
237
  msgid "can edit posts which are currently published"
238
  msgstr ""
239
 
240
+ #: includes/admin.php:307
241
  msgid "can edit posts which are currently published with private visibility"
242
  msgstr ""
243
 
244
+ #: includes/admin.php:308
245
  msgid "can make a post publicly visible"
246
  msgstr ""
247
 
248
+ #: includes/admin.php:309
249
  msgid ""
250
  "has basic deletion capability (but may need other capabilities based on post "
251
  "status and ownership)"
252
  msgstr ""
253
 
254
+ #: includes/admin.php:310
255
  msgid "can delete posts which were created by other users"
256
  msgstr ""
257
 
258
+ #: includes/admin.php:311
259
  msgid "can delete posts which are currently published"
260
  msgstr ""
261
 
262
+ #: includes/admin.php:312
263
  msgid "can delete posts which are currently published with private visibility"
264
  msgstr ""
265
 
266
+ #: includes/admin.php:446 includes/admin.php:563 includes/admin.php:823
267
+ #: includes/admin.php:1009
268
  #, php-format
269
  msgid "%s: assigned by Permission Group"
270
  msgstr ""
271
 
272
+ #: includes/admin.php:461
273
  #, php-format
274
  msgid "shared capability: %s"
275
  msgstr ""
276
 
277
+ #: includes/admin.php:540
278
  msgid "Other WordPress Core Capabilities"
279
  msgstr ""
280
 
281
+ #: includes/admin.php:582
282
  msgid ""
283
  "Lockout Prevention: To remove read capability, first remove WordPress "
284
  "admin / editing capabilities, or add \"dashboard_lockout_ok\" capability"
285
  msgstr ""
286
 
287
+ #: includes/admin.php:625 includes/admin.php:862 includes/admin.php:1062
 
288
  msgid "check/uncheck all"
289
  msgstr ""
290
 
291
+ #: includes/admin.php:625 includes/admin.php:862 includes/admin.php:1062
 
292
  msgid "negate all (storing as disabled capabilities)"
293
  msgstr ""
294
 
295
+ #: includes/admin.php:625 includes/admin.php:862 includes/admin.php:1062
 
296
  msgid "negate none (add/remove all capabilities normally)"
297
  msgstr ""
298
 
299
+ #: includes/admin.php:797
300
  #, php-format
301
  msgid "%s Capabilities"
302
  msgstr ""
303
 
304
+ #: includes/admin.php:873
305
+ msgid "Invalid Capabilities"
306
  msgstr ""
307
 
308
+ #: includes/admin.php:878
309
  msgid ""
310
+ "The following entries have no effect. Please assign desired capabilities in "
311
+ "the Read / Edit / Delete grid above."
312
  msgstr ""
313
 
314
+ #: includes/admin.php:955
315
+ msgid "Additional Capabilities"
316
  msgstr ""
317
 
318
+ #: includes/admin.php:1072
319
  msgid ""
320
  "Role level is mostly deprecated. However, it still determines eligibility "
321
  "for Post Author assignment and limits the application of user editing "
322
  "capabilities."
323
  msgstr ""
324
 
325
+ #: includes/admin.php:1074
326
  msgid "Level:"
327
  msgstr ""
328
 
329
+ #: includes/admin.php:1097
330
  msgid "Delete this role"
331
  msgstr ""
332
 
333
+ #: includes/admin.php:1097
334
  #, php-format
335
  msgid ""
336
  "You are about to delete the %s role.\n"
338
  " 'Cancel' to stop, 'OK' to delete."
339
  msgstr ""
340
 
341
+ #: includes/admin.php:1097
342
  msgid "Delete Role"
343
  msgstr ""
344
 
345
+ #: includes/admin.php:1106
346
  msgid "Add Capability"
347
  msgstr ""
348
 
349
+ #: includes/admin.php:1109
350
  msgid "Add to role"
351
  msgstr ""
352
 
353
+ #: includes/admin.php:1121
354
  msgid "Copy this role to"
355
  msgstr ""
356
 
357
+ #: includes/admin.php:1124
358
+ #: includes/roles/class/class-pp-roles-list-table.php:80
359
  msgid "Role Name"
360
  msgstr ""
361
 
362
+ #: includes/admin.php:1127
363
  msgid ""
364
  "Make role available for supplemental assignment to Permission Groups only"
365
  msgstr ""
366
 
367
+ #: includes/admin.php:1127
368
  msgid "hidden"
369
  msgstr ""
370
 
371
+ #: includes/admin.php:1131
372
  msgid "Copy"
373
  msgstr ""
374
 
375
+ #: includes/admin.php:1137
376
  msgid "Rename Role"
377
  msgstr ""
378
 
379
+ #: includes/admin.php:1139
380
  msgid "New Role Name"
381
  msgstr ""
382
 
383
+ #: includes/admin.php:1142
384
  msgid "Rename"
385
  msgstr ""
386
 
387
+ #: includes/admin.php:1171
388
  msgid "Create this role definition in new (future) sites"
389
  msgstr ""
390
 
391
+ #: includes/admin.php:1171
392
  msgid "include in new sites"
393
  msgstr ""
394
 
395
+ #: includes/admin.php:1174
396
  msgid "Copy / update this role definition to all sites now"
397
  msgstr ""
398
 
399
+ #: includes/admin.php:1174
400
  msgid "sync role to all sites now"
401
  msgstr ""
402
 
403
+ #: includes/admin.php:1177
404
+ msgid "Copy option settings to all sites now"
405
+ msgstr ""
406
+
407
+ #: includes/admin.php:1177
408
+ msgid "sync options to all sites now"
409
+ msgstr ""
410
+
411
+ #: includes/backup-handler.php:9 includes/manager.php:776
412
  msgid "You do not have permission to restore roles."
413
  msgstr ""
414
 
450
  msgid "Restore"
451
  msgstr ""
452
 
453
+ #: includes/backup.php:47 includes/functions-admin.php:251
454
+ #: includes/manager.php:339
455
  msgid "Backup"
456
  msgstr ""
457
 
555
  msgid "%s (level %s)"
556
  msgstr ""
557
 
558
+ #: includes/backup.php:264
559
+ msgid "No changes"
560
+ msgstr ""
561
+
562
+ #: includes/backup.php:281
563
  msgid "Reset WordPress Defaults"
564
  msgstr ""
565
 
566
+ #: includes/backup.php:283
567
  msgid "WARNING:"
568
  msgstr ""
569
 
570
+ #: includes/backup.php:283
571
  msgid ""
572
  "Reseting default Roles and Capabilities will set them to the WordPress "
573
  "install defaults."
574
  msgstr ""
575
 
576
+ #: includes/backup.php:287
577
  msgid ""
578
  "If you have installed any plugin that adds new roles or capabilities, these "
579
  "will be lost."
580
  msgstr ""
581
 
582
+ #: includes/backup.php:289
583
  msgid "It is recommended to use this only as a last resource!"
584
  msgstr ""
585
 
586
+ #: includes/backup.php:292
587
  msgid "Reset Roles and Capabilities to WordPress defaults"
588
  msgstr ""
589
 
590
+ #: includes/backup.php:294
591
  msgid ""
592
  "You are about to reset Roles and Capabilities to WordPress defaults.\n"
593
  " 'Cancel' to stop, 'OK' to reset."
594
  msgstr ""
595
 
596
+ #: includes/backup.php:294
597
  msgid "Reset to WordPress defaults"
598
  msgstr ""
599
 
600
+ #: includes/features/editor-features-classic.php:18
601
+ msgid "Classic Editor Screen"
602
+ msgstr ""
603
+
604
+ #: includes/features/editor-features-classic.php:23
605
+ #: includes/features/editor-features-gutenberg.php:23
606
  #, php-format
607
+ msgid "%s Restrict"
608
+ msgstr ""
609
+
610
+ #: includes/features/editor-features-classic.php:24
611
+ #: includes/features/editor-features-gutenberg.php:24
612
+ msgid "Toggle all"
613
+ msgstr ""
614
+
615
+ #: includes/features/editor-features-gutenberg.php:18
616
+ msgid "Gutenberg Screen"
617
+ msgstr ""
618
+
619
+ #: includes/features/editor-features.php:31
620
+ msgid "Editor Feature Restriction"
621
+ msgstr ""
622
+
623
+ #: includes/features/editor-features.php:45
624
+ msgid ""
625
+ "Select editor features to remove. Note that this screen cannot be used to "
626
+ "grant additional features to any role."
627
+ msgstr ""
628
+
629
+ #: includes/features/editor-features.php:89
630
+ msgid "Gutenberg"
631
+ msgstr ""
632
+
633
+ #: includes/features/editor-features.php:92
634
+ msgid "Classic"
635
+ msgstr ""
636
+
637
+ #: includes/features/restrict-editor-features.php:40
638
+ msgid "Top Tabs"
639
+ msgstr ""
640
+
641
+ #: includes/features/restrict-editor-features.php:41
642
+ msgid "Help"
643
+ msgstr ""
644
+
645
+ #: includes/features/restrict-editor-features.php:42
646
+ msgid "Screen Options"
647
+ msgstr ""
648
+
649
+ #: includes/features/restrict-editor-features.php:45
650
+ #: includes/features/restrict-editor-features.php:48
651
+ msgid "Editor"
652
  msgstr ""
653
 
654
+ #: includes/features/restrict-editor-features.php:46
655
  #: includes/filters-woocommerce.php:33
656
  msgid "Add New"
657
  msgstr ""
658
 
659
+ #: includes/features/restrict-editor-features.php:47
660
+ msgid "Title"
661
+ msgstr ""
662
+
663
+ #: includes/features/restrict-editor-features.php:49
664
+ #: includes/features/restrict-editor-features.php:324
665
+ msgid "Permalink"
666
+ msgstr ""
667
+
668
+ #: includes/features/restrict-editor-features.php:50
669
+ msgid "Media Buttons (all)"
670
+ msgstr ""
671
+
672
+ #: includes/features/restrict-editor-features.php:51
673
+ msgid "HTML Editor Button"
674
+ msgstr ""
675
+
676
+ #: includes/features/restrict-editor-features.php:52
677
+ msgid "Word count"
678
+ msgstr ""
679
+
680
+ #: includes/features/restrict-editor-features.php:55
681
+ #: includes/features/restrict-editor-features.php:56
682
+ msgid "Publish Box"
683
+ msgstr ""
684
+
685
+ #: includes/features/restrict-editor-features.php:57
686
+ #: includes/features/restrict-editor-features.php:309
687
+ msgid "Save Draft"
688
+ msgstr ""
689
+
690
+ #: includes/features/restrict-editor-features.php:58
691
+ #: includes/features/restrict-editor-features.php:311
692
+ msgid "Preview"
693
+ msgstr ""
694
+
695
+ #: includes/features/restrict-editor-features.php:59
696
+ msgid "Publish Status "
697
+ msgstr ""
698
+
699
+ #: includes/features/restrict-editor-features.php:60
700
+ msgid "Publish Visibility"
701
+ msgstr ""
702
+
703
+ #: includes/features/restrict-editor-features.php:61
704
+ msgid "Password Protect This Post"
705
+ msgstr ""
706
+
707
+ #: includes/features/restrict-editor-features.php:62
708
+ msgid "Publish Actions"
709
+ msgstr ""
710
+
711
+ #: includes/features/restrict-editor-features.php:63
712
+ msgid "Publish Schedule"
713
+ msgstr ""
714
+
715
+ #: includes/features/restrict-editor-features.php:64
716
+ msgid "Date"
717
+ msgstr ""
718
+
719
+ #: includes/features/restrict-editor-features.php:65
720
+ msgid "Publish"
721
+ msgstr ""
722
+
723
+ #: includes/features/restrict-editor-features.php:68
724
+ msgid "Taxonomy Boxes"
725
+ msgstr ""
726
+
727
+ #: includes/features/restrict-editor-features.php:69
728
+ #: includes/features/restrict-editor-features.php:325
729
+ msgid "Categories"
730
+ msgstr ""
731
+
732
+ #: includes/features/restrict-editor-features.php:70
733
+ msgid "Add New Category"
734
+ msgstr ""
735
+
736
+ #: includes/features/restrict-editor-features.php:71
737
+ #: includes/features/restrict-editor-features.php:326
738
+ msgid "Tags"
739
+ msgstr ""
740
+
741
+ #: includes/features/restrict-editor-features.php:83
742
+ msgid "Page Boxes"
743
+ msgstr ""
744
+
745
+ #: includes/features/restrict-editor-features.php:84
746
+ msgid "Page Attributes"
747
+ msgstr ""
748
+
749
+ #: includes/features/restrict-editor-features.php:85
750
+ msgid "Parent"
751
+ msgstr ""
752
+
753
+ #: includes/features/restrict-editor-features.php:86
754
+ msgid "Page Template"
755
+ msgstr ""
756
+
757
+ #: includes/features/restrict-editor-features.php:87
758
+ msgid "Order"
759
+ msgstr ""
760
+
761
+ #: includes/features/restrict-editor-features.php:90
762
+ msgid "Other Boxes"
763
+ msgstr ""
764
+
765
+ #: includes/features/restrict-editor-features.php:91
766
+ msgid "Featured Image"
767
+ msgstr ""
768
+
769
+ #: includes/features/restrict-editor-features.php:92
770
+ msgid "Post Slug"
771
+ msgstr ""
772
+
773
+ #: includes/features/restrict-editor-features.php:93
774
+ #: includes/features/restrict-editor-features.php:342
775
+ msgid "Discussion"
776
+ msgstr ""
777
+
778
+ #: includes/features/restrict-editor-features.php:299
779
+ msgid "Top Bar - Left"
780
+ msgstr ""
781
+
782
+ #: includes/features/restrict-editor-features.php:300
783
+ msgid "Add block"
784
+ msgstr ""
785
+
786
+ #: includes/features/restrict-editor-features.php:301
787
+ msgid "Modes"
788
+ msgstr ""
789
+
790
+ #: includes/features/restrict-editor-features.php:302
791
+ msgid "Undo"
792
+ msgstr ""
793
+
794
+ #: includes/features/restrict-editor-features.php:303
795
+ msgid "Redo"
796
+ msgstr ""
797
+
798
+ #: includes/features/restrict-editor-features.php:304
799
+ msgid "Details"
800
+ msgstr ""
801
+
802
+ #: includes/features/restrict-editor-features.php:305
803
+ msgid "Outline"
804
+ msgstr ""
805
+
806
+ #: includes/features/restrict-editor-features.php:308
807
+ msgid "Top Bar - Right"
808
+ msgstr ""
809
+
810
+ #: includes/features/restrict-editor-features.php:310
811
+ msgid "Switch to draft"
812
+ msgstr ""
813
+
814
+ #: includes/features/restrict-editor-features.php:312
815
+ msgid "Publish / Update"
816
+ msgstr ""
817
+
818
+ #: includes/features/restrict-editor-features.php:313
819
+ #: includes/functions-admin.php:254 includes/manager.php:342
820
+ msgid "Settings"
821
+ msgstr ""
822
+
823
+ #: includes/features/restrict-editor-features.php:314
824
+ msgid "Options"
825
+ msgstr ""
826
+
827
+ #: includes/features/restrict-editor-features.php:317
828
+ msgid "Body"
829
+ msgstr ""
830
+
831
+ #: includes/features/restrict-editor-features.php:318
832
+ msgid "Edit title"
833
+ msgstr ""
834
+
835
+ #: includes/features/restrict-editor-features.php:319
836
+ msgid "Content"
837
+ msgstr ""
838
+
839
+ #: includes/features/restrict-editor-features.php:322
840
+ msgid "Document Panel"
841
+ msgstr ""
842
+
843
+ #: includes/features/restrict-editor-features.php:323
844
+ msgid "Status & visibility"
845
+ msgstr ""
846
+
847
+ #: includes/features/restrict-editor-features.php:340
848
+ msgid "Featured image"
849
+ msgstr ""
850
+
851
+ #: includes/features/restrict-editor-features.php:341
852
+ msgid "Excerpt"
853
+ msgstr ""
854
+
855
+ #: includes/features/restrict-editor-features.php:343
856
+ msgid "Post Attributes"
857
+ msgstr ""
858
+
859
+ #: includes/features/restrict-editor-features.php:346
860
+ #: includes/features/restrict-editor-features.php:347
861
+ msgid "Block Panel"
862
+ msgstr ""
863
+
864
+ #: includes/features/restrict-editor-features.php:348
865
+ msgid "Paragraph"
866
+ msgstr ""
867
+
868
+ #: includes/features/restrict-editor-features.php:349
869
+ msgid "Typography"
870
+ msgstr ""
871
+
872
+ #: includes/features/restrict-editor-features.php:350
873
+ msgid "Color settings"
874
+ msgstr ""
875
+
876
+ #: includes/features/restrict-editor-features.php:351
877
+ msgid "Text settings"
878
+ msgstr ""
879
+
880
+ #: includes/filters-woocommerce.php:32
881
+ #, php-format
882
+ msgid "All %s"
883
+ msgstr ""
884
+
885
  #: includes/filters.php:312
886
  msgid "Edit Roles"
887
  msgstr ""
888
 
889
+ #: includes/functions-admin.php:225 includes/manager.php:301
890
+ #: includes/roles/class/class-pp-roles-list-table.php:125
891
  msgid "Capabilities"
892
  msgstr ""
893
 
894
+ #: includes/functions-admin.php:247 includes/manager.php:323
895
  #: includes/roles/roles.php:4
896
  msgid "Roles"
897
  msgstr ""
898
 
899
+ #: includes/functions-admin.php:248 includes/manager.php:335
900
+ msgid "Editor Features"
901
  msgstr ""
902
 
903
+ #: includes/handler.php:28 includes/handler.php:54
904
  msgid "New role created."
905
  msgstr ""
906
 
907
+ #: includes/handler.php:34 includes/handler.php:60
908
  msgid "Error: Failed creating the new role."
909
  msgstr ""
910
 
911
+ #: includes/handler.php:47
912
  #, php-format
913
  msgid "Role \"%s\" (id %s) renamed to \"%s\""
914
  msgstr ""
915
 
916
+ #: includes/handler.php:126
917
  msgid "Incorrect capability name."
918
  msgstr ""
919
 
920
+ #: includes/handler.php:131
921
  msgid "Type / Taxonomy settings saved."
922
  msgstr ""
923
 
924
+ #: includes/handler.php:137
925
  msgid "Bad form received."
926
  msgstr ""
927
 
928
+ #: includes/handler.php:260
929
  msgid "You cannot remove Manage Capabilities from Administrators"
930
  msgstr ""
931
 
932
+ #: includes/manager.php:186
 
 
 
 
 
 
 
 
 
 
 
933
  msgid "Explicity negate this capability by storing as disabled"
934
  msgstr ""
935
 
936
+ #: includes/manager.php:187
937
  msgid "Explicitly negate these capabilities by storing as disabled"
938
  msgstr ""
939
 
940
+ #: includes/manager.php:188
941
  msgid "Post type registration does not define this capability distinctly"
942
  msgstr ""
943
 
944
+ #: includes/manager.php:189
945
  msgid "This capability is explicitly negated. Click to add/remove normally."
946
  msgstr ""
947
 
948
+ #: includes/manager.php:190
949
  msgid "Add or remove this capability from the WordPress role"
950
  msgstr ""
951
 
952
+ #: includes/manager.php:191
953
  msgid "Add or remove capability from the role normally"
954
  msgstr ""
955
 
956
+ #: includes/manager.php:366 includes/roles/roles.php:33
957
+ msgid "Name"
 
958
  msgstr ""
959
 
960
+ #: includes/manager.php:367
961
+ #: includes/roles/class/class-pp-roles-list-table.php:81
962
+ msgid "Role"
 
963
  msgstr ""
964
 
965
+ #: includes/manager.php:368
966
+ #: includes/roles/class/class-pp-roles-list-table.php:82
967
  msgid "Users"
968
  msgstr ""
969
 
970
+ #: includes/manager.php:395
971
  msgid "You do not have permission to manage roles."
972
  msgstr ""
973
 
974
+ #: includes/manager.php:412
975
+ msgid "You do not have permission to manage editor features."
976
+ msgstr ""
977
+
978
+ #: includes/manager.php:454
979
+ msgid "Settings updated."
980
+ msgstr ""
981
+
982
+ #: includes/manager.php:556 includes/manager.php:597
983
  msgid "You do not have permission to manage capabilities."
984
  msgstr ""
985
 
986
+ #: includes/manager.php:611
987
  msgid "New capability added to role."
988
  msgstr ""
989
 
990
+ #: includes/manager.php:629
991
+ msgid "The selected role is not editable."
992
+ msgstr ""
993
+
994
+ #: includes/manager.php:656
995
  msgid "Bad form Received"
996
  msgstr ""
997
 
998
+ #: includes/manager.php:806
999
  #, php-format
1000
  msgid "If you like %s, please leave us a %s rating. Thank you!"
1001
  msgstr ""
1002
 
1003
+ #: includes/manager.php:817
1004
  msgid "About PublishPress Capabilities"
1005
  msgstr ""
1006
 
1007
+ #: includes/manager.php:817
1008
  msgid "About"
1009
  msgstr ""
1010
 
1011
+ #: includes/manager.php:819
1012
  msgid "Capabilites Documentation"
1013
  msgstr ""
1014
 
1015
+ #: includes/manager.php:819
1016
  msgid "Documentation"
1017
  msgstr ""
1018
 
1019
+ #: includes/manager.php:821
1020
  msgid "Contact the PublishPress team"
1021
  msgstr ""
1022
 
1023
+ #: includes/manager.php:821
1024
  msgid "Contact"
1025
  msgstr ""
1026
 
1071
  "status-specific role."
1072
  msgstr ""
1073
 
1074
+ #: includes/pp-ui.php:77
 
 
 
 
1075
  msgid "Type-Specific Capabilities"
1076
  msgstr ""
1077
 
1078
+ #: includes/pp-ui.php:80
1079
  msgid "Ensure permissions can be controlled separately from other post types."
1080
  msgstr ""
1081
 
1082
+ #: includes/pp-ui.php:143
1083
  msgid ""
1084
  "Make selected post types require a different capability to add new posts."
1085
  msgstr ""
1086
 
1087
+ #: includes/pp-ui.php:143
1088
  msgid "Use create_posts capability"
1089
  msgstr ""
1090
 
1091
+ #: includes/pp-ui.php:151 includes/pp-ui.php:214 includes/pp-ui.php:270
1092
  msgid "Update"
1093
  msgstr ""
1094
 
1095
+ #: includes/pp-ui.php:161
1096
  msgid "Taxonomy-Specific Capabilities"
1097
  msgstr ""
1098
 
1099
+ #: includes/pp-ui.php:164
1100
  msgid "Ensure permissions can be controlled separately from other taxonomies."
1101
  msgstr ""
1102
 
1103
+ #: includes/pp-ui.php:219
1104
  msgid "Detailed Taxonomy Capabilities"
1105
  msgstr ""
1106
 
1107
+ #: includes/pp-ui.php:222
1108
  msgid ""
1109
  "Enforce Edit, Delete and Assign capabilities separately from Management "
1110
  "capability."
1111
  msgstr ""
1112
 
1113
+ #: includes/roles/class/class-pp-roles-actions.php:143
1114
  msgid "You do not have sufficient permissions to perform this action."
1115
  msgstr ""
1116
 
1117
+ #: includes/roles/class/class-pp-roles-actions.php:159
1118
  msgid "Your link has expired, refresh the page and try again."
1119
  msgstr ""
1120
 
1121
+ #: includes/roles/class/class-pp-roles-actions.php:180
1122
+ #: includes/roles/class/class-pp-roles-actions.php:298
1123
+ #: includes/roles/class/class-pp-roles-actions.php:412
1124
+ #: includes/roles/class/class-pp-roles-actions.php:473
1125
  msgid "Missing parameters, refresh the page and try again."
1126
  msgstr ""
1127
 
1128
+ #: includes/roles/class/class-pp-roles-actions.php:214
1129
  msgid ""
1130
  "Something went wrong, the system wasn't able to create the role, refresh the "
1131
  "page and try again."
1132
  msgstr ""
1133
 
1134
+ #: includes/roles/class/class-pp-roles-actions.php:306
1135
+ #, php-format
1136
+ msgid ""
1137
+ "Cannot delete default role. You <a href=\"%s\">have to change it first</a>."
1138
+ msgstr ""
1139
+
1140
+ #: includes/roles/class/class-pp-roles-actions.php:322
1141
  msgid "Deleting a system role is not allowed."
1142
  msgstr ""
1143
 
1144
+ #: includes/roles/class/class-pp-roles-actions.php:345
1145
+ #, php-format
1146
+ msgid "%1$d users moved to default role %2$s."
1147
+ msgstr ""
1148
+
1149
+ #: includes/roles/class/class-pp-roles-actions.php:350
1150
+ #, php-format
1151
+ msgid "The role %1$s was successfully deleted. %2$s"
1152
+ msgstr ""
1153
+
1154
+ #: includes/roles/class/class-pp-roles-actions.php:356
1155
+ #, php-format
1156
+ msgid "The selected %1$s roles were successfully deleted. %2$s"
1157
+ msgstr ""
1158
+
1159
+ #: includes/roles/class/class-pp-roles-actions.php:369
1160
+ msgid "The role could not be deleted."
1161
+ msgstr ""
1162
+
1163
+ #: includes/roles/class/class-pp-roles-actions.php:423
1164
+ #, php-format
1165
+ msgid "The role %1$s was successfully hidden."
1166
+ msgstr ""
1167
+
1168
+ #: includes/roles/class/class-pp-roles-actions.php:484
1169
+ #, php-format
1170
+ msgid "The role %1$s was successfully unhidden."
1171
+ msgstr ""
1172
+
1173
+ #: includes/roles/class/class-pp-roles-list-table.php:130
1174
+ msgid "(non-editable role)"
1175
+ msgstr ""
1176
+
1177
+ #: includes/roles/class/class-pp-roles-list-table.php:150
1178
+ msgid "Unhide"
1179
+ msgstr ""
1180
+
1181
+ #: includes/roles/class/class-pp-roles-list-table.php:168
1182
+ #: includes/roles/class/class-pp-roles-list-table.php:307
1183
  msgid "Delete"
1184
  msgstr ""
1185
 
1186
+ #: includes/roles/class/class-pp-roles-list-table.php:189
1187
+ msgid "Hide"
1188
+ msgstr ""
1189
+
1190
  #: includes/roles/roles-functions.php:32
1191
  msgid "Are you sure you want to delete this role?"
1192
  msgstr ""
languages/capsman-enhanced.pot CHANGED
@@ -3,7 +3,7 @@ msgid ""
3
  msgstr ""
4
  "Project-Id-Version: PublishPress Capabilities\n"
5
  "Report-Msgid-Bugs-To: \n"
6
- "POT-Creation-Date: 2021-05-06 13:51-0400\n"
7
  "PO-Revision-Date: 2020-10-08 11:17-0500\n"
8
  "Last-Translator: Kevin Behrens <kevin@publishpress.com>\n"
9
  "Language-Team: PublishPress <help@publishpress.com>\n"
@@ -14,7 +14,7 @@ msgstr ""
14
  "X-Poedit-Basepath: ..\n"
15
  "X-Poedit-SourceCharset: UTF-8\n"
16
  "Language: en_US\n"
17
- "X-Generator: Poedit 2.4.2\n"
18
  "X-Poedit-SearchPath-0: .\n"
19
  "X-Poedit-SearchPath-1: includes\n"
20
  "X-Poedit-SearchPath-2: includes-core\n"
@@ -45,11 +45,11 @@ msgstr ""
45
  msgid "Settings saved."
46
  msgstr ""
47
 
48
- #: includes-core/CoreAdmin.php:53 includes/functions-admin.php:191
49
  msgid "Admin Menus"
50
  msgstr ""
51
 
52
- #: includes-core/CoreAdmin.php:54 includes/functions-admin.php:192
53
  msgid "Nav Menus"
54
  msgstr ""
55
 
@@ -58,7 +58,9 @@ msgid "Admin Menu Restrictions"
58
  msgstr ""
59
 
60
  #: includes-core/admin-menus-promo.php:48 includes-core/nav-menus-promo.php:52
61
- #: includes/admin.php:107 includes/admin.php:1089 includes/settings.php:54
 
 
62
  msgid "Save Changes"
63
  msgstr ""
64
 
@@ -67,8 +69,8 @@ msgid "You can restrict access to admin menu screens. This feature is available
67
  msgstr ""
68
 
69
  #: includes-core/admin-menus-promo.php:62 includes-core/nav-menus-promo.php:67
70
- #: includes/functions-admin.php:202 includes/functions-admin.php:203
71
- #: includes/manager.php:346 includes/manager.php:347
72
  msgid "Upgrade to Pro"
73
  msgstr ""
74
 
@@ -230,8 +232,8 @@ msgstr ""
230
  msgid "can delete posts which are currently published with private visibility"
231
  msgstr ""
232
 
233
- #: includes/admin.php:446 includes/admin.php:558 includes/admin.php:818
234
- #: includes/admin.php:1004
235
  #, php-format
236
  msgid "%s: assigned by Permission Group"
237
  msgstr ""
@@ -241,56 +243,56 @@ msgstr ""
241
  msgid "shared capability: %s"
242
  msgstr ""
243
 
244
- #: includes/admin.php:535
245
  msgid "Other WordPress Core Capabilities"
246
  msgstr ""
247
 
248
- #: includes/admin.php:577
249
  msgid "Lockout Prevention: To remove read capability, first remove WordPress admin / editing capabilities, or add \"dashboard_lockout_ok\" capability"
250
  msgstr ""
251
 
252
- #: includes/admin.php:620 includes/admin.php:857 includes/admin.php:1057
253
  msgid "check/uncheck all"
254
  msgstr ""
255
 
256
- #: includes/admin.php:620 includes/admin.php:857 includes/admin.php:1057
257
  msgid "negate all (storing as disabled capabilities)"
258
  msgstr ""
259
 
260
- #: includes/admin.php:620 includes/admin.php:857 includes/admin.php:1057
261
  msgid "negate none (add/remove all capabilities normally)"
262
  msgstr ""
263
 
264
- #: includes/admin.php:792
265
  #, php-format
266
  msgid "%s Capabilities"
267
  msgstr ""
268
 
269
- #: includes/admin.php:868
270
  msgid "Invalid Capabilities"
271
  msgstr ""
272
 
273
- #: includes/admin.php:873
274
  msgid "The following entries have no effect. Please assign desired capabilities in the Read / Edit / Delete grid above."
275
  msgstr ""
276
 
277
- #: includes/admin.php:950
278
  msgid "Additional Capabilities"
279
  msgstr ""
280
 
281
- #: includes/admin.php:1067
282
  msgid "Role level is mostly deprecated. However, it still determines eligibility for Post Author assignment and limits the application of user editing capabilities."
283
  msgstr ""
284
 
285
- #: includes/admin.php:1069
286
  msgid "Level:"
287
  msgstr ""
288
 
289
- #: includes/admin.php:1092
290
  msgid "Delete this role"
291
  msgstr ""
292
 
293
- #: includes/admin.php:1092
294
  #, php-format
295
  msgid ""
296
  "You are about to delete the %s role.\n"
@@ -298,76 +300,76 @@ msgid ""
298
  " 'Cancel' to stop, 'OK' to delete."
299
  msgstr ""
300
 
301
- #: includes/admin.php:1092
302
  msgid "Delete Role"
303
  msgstr ""
304
 
305
- #: includes/admin.php:1101
306
  msgid "Add Capability"
307
  msgstr ""
308
 
309
- #: includes/admin.php:1104
310
  msgid "Add to role"
311
  msgstr ""
312
 
313
- #: includes/admin.php:1116
314
  msgid "Copy this role to"
315
  msgstr ""
316
 
317
- #: includes/admin.php:1119
318
  #: includes/roles/class/class-pp-roles-list-table.php:80
319
  msgid "Role Name"
320
  msgstr ""
321
 
322
- #: includes/admin.php:1122 includes/pp-ui.php:84
323
  msgid "Make role available for supplemental assignment to Permission Groups only"
324
  msgstr ""
325
 
326
- #: includes/admin.php:1122
327
  msgid "hidden"
328
  msgstr ""
329
 
330
- #: includes/admin.php:1126
331
  msgid "Copy"
332
  msgstr ""
333
 
334
- #: includes/admin.php:1132
335
  msgid "Rename Role"
336
  msgstr ""
337
 
338
- #: includes/admin.php:1134
339
  msgid "New Role Name"
340
  msgstr ""
341
 
342
- #: includes/admin.php:1137
343
  msgid "Rename"
344
  msgstr ""
345
 
346
- #: includes/admin.php:1168
347
  msgid "Create this role definition in new (future) sites"
348
  msgstr ""
349
 
350
- #: includes/admin.php:1168
351
  msgid "include in new sites"
352
  msgstr ""
353
 
354
- #: includes/admin.php:1171
355
  msgid "Copy / update this role definition to all sites now"
356
  msgstr ""
357
 
358
- #: includes/admin.php:1171
359
  msgid "sync role to all sites now"
360
  msgstr ""
361
 
362
- #: includes/admin.php:1174
363
  msgid "Copy option settings to all sites now"
364
  msgstr ""
365
 
366
- #: includes/admin.php:1174
367
  msgid "sync options to all sites now"
368
  msgstr ""
369
 
370
- #: includes/backup-handler.php:9 includes/manager.php:723
371
  msgid "You do not have permission to restore roles."
372
  msgstr ""
373
 
@@ -409,8 +411,8 @@ msgstr ""
409
  msgid "Restore"
410
  msgstr ""
411
 
412
- #: includes/backup.php:47 includes/functions-admin.php:193
413
- #: includes/manager.php:337
414
  msgid "Backup"
415
  msgstr ""
416
 
@@ -543,31 +545,305 @@ msgstr ""
543
  msgid "Reset to WordPress defaults"
544
  msgstr ""
545
 
546
- #: includes/filters-woocommerce.php:32
 
 
 
 
 
547
  #, php-format
548
- msgid "All %s"
 
 
 
 
 
 
 
 
 
549
  msgstr ""
550
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
551
  #: includes/filters-woocommerce.php:33
552
  msgid "Add New"
553
  msgstr ""
554
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
555
  #: includes/filters.php:312
556
  msgid "Edit Roles"
557
  msgstr ""
558
 
559
- #: includes/functions-admin.php:168 includes/manager.php:301
560
  #: includes/roles/class/class-pp-roles-list-table.php:125
561
  msgid "Capabilities"
562
  msgstr ""
563
 
564
- #: includes/functions-admin.php:190 includes/manager.php:323
565
  #: includes/roles/roles.php:4
566
  msgid "Roles"
567
  msgstr ""
568
 
569
- #: includes/functions-admin.php:196 includes/manager.php:340
570
- msgid "Settings"
571
  msgstr ""
572
 
573
  #: includes/handler.php:28 includes/handler.php:54
@@ -623,66 +899,74 @@ msgstr ""
623
  msgid "Add or remove capability from the role normally"
624
  msgstr ""
625
 
626
- #: includes/manager.php:364 includes/roles/roles.php:33
627
  msgid "Name"
628
  msgstr ""
629
 
630
- #: includes/manager.php:365
631
  #: includes/roles/class/class-pp-roles-list-table.php:81
632
  msgid "Role"
633
  msgstr ""
634
 
635
- #: includes/manager.php:366
636
  #: includes/roles/class/class-pp-roles-list-table.php:82
637
  msgid "Users"
638
  msgstr ""
639
 
640
- #: includes/manager.php:393
641
  msgid "You do not have permission to manage roles."
642
  msgstr ""
643
 
644
- #: includes/manager.php:503 includes/manager.php:544
 
 
 
 
 
 
 
 
645
  msgid "You do not have permission to manage capabilities."
646
  msgstr ""
647
 
648
- #: includes/manager.php:558
649
  msgid "New capability added to role."
650
  msgstr ""
651
 
652
- #: includes/manager.php:576
653
  msgid "The selected role is not editable."
654
  msgstr ""
655
 
656
- #: includes/manager.php:603
657
  msgid "Bad form Received"
658
  msgstr ""
659
 
660
- #: includes/manager.php:753
661
  #, php-format
662
  msgid "If you like %s, please leave us a %s rating. Thank you!"
663
  msgstr ""
664
 
665
- #: includes/manager.php:764
666
  msgid "About PublishPress Capabilities"
667
  msgstr ""
668
 
669
- #: includes/manager.php:764
670
  msgid "About"
671
  msgstr ""
672
 
673
- #: includes/manager.php:766
674
  msgid "Capabilites Documentation"
675
  msgstr ""
676
 
677
- #: includes/manager.php:766
678
  msgid "Documentation"
679
  msgstr ""
680
 
681
- #: includes/manager.php:768
682
  msgid "Contact the PublishPress team"
683
  msgstr ""
684
 
685
- #: includes/manager.php:768
686
  msgid "Contact"
687
  msgstr ""
688
 
@@ -719,43 +1003,39 @@ msgstr ""
719
  msgid "Capabilities for custom statuses can be manually added to a role here (see Conditions > Status > Capability Mapping for applicable names). However, it is usually more convenient to use Permit Groups to assign a supplemental status-specific role."
720
  msgstr ""
721
 
722
- #: includes/pp-ui.php:84
723
- msgid "hidden role"
724
- msgstr ""
725
-
726
- #: includes/pp-ui.php:95
727
  msgid "Type-Specific Capabilities"
728
  msgstr ""
729
 
730
- #: includes/pp-ui.php:98
731
  msgid "Ensure permissions can be controlled separately from other post types."
732
  msgstr ""
733
 
734
- #: includes/pp-ui.php:161
735
  msgid "Make selected post types require a different capability to add new posts."
736
  msgstr ""
737
 
738
- #: includes/pp-ui.php:161
739
  msgid "Use create_posts capability"
740
  msgstr ""
741
 
742
- #: includes/pp-ui.php:169 includes/pp-ui.php:232 includes/pp-ui.php:288
743
  msgid "Update"
744
  msgstr ""
745
 
746
- #: includes/pp-ui.php:179
747
  msgid "Taxonomy-Specific Capabilities"
748
  msgstr ""
749
 
750
- #: includes/pp-ui.php:182
751
  msgid "Ensure permissions can be controlled separately from other taxonomies."
752
  msgstr ""
753
 
754
- #: includes/pp-ui.php:237
755
  msgid "Detailed Taxonomy Capabilities"
756
  msgstr ""
757
 
758
- #: includes/pp-ui.php:240
759
  msgid "Enforce Edit, Delete and Assign capabilities separately from Management capability."
760
  msgstr ""
761
 
@@ -825,7 +1105,7 @@ msgid "Unhide"
825
  msgstr ""
826
 
827
  #: includes/roles/class/class-pp-roles-list-table.php:168
828
- #: includes/roles/class/class-pp-roles-list-table.php:305
829
  msgid "Delete"
830
  msgstr ""
831
 
3
  msgstr ""
4
  "Project-Id-Version: PublishPress Capabilities\n"
5
  "Report-Msgid-Bugs-To: \n"
6
+ "POT-Creation-Date: 2021-06-23 13:16-0400\n"
7
  "PO-Revision-Date: 2020-10-08 11:17-0500\n"
8
  "Last-Translator: Kevin Behrens <kevin@publishpress.com>\n"
9
  "Language-Team: PublishPress <help@publishpress.com>\n"
14
  "X-Poedit-Basepath: ..\n"
15
  "X-Poedit-SourceCharset: UTF-8\n"
16
  "Language: en_US\n"
17
+ "X-Generator: Poedit 2.4.3\n"
18
  "X-Poedit-SearchPath-0: .\n"
19
  "X-Poedit-SearchPath-1: includes\n"
20
  "X-Poedit-SearchPath-2: includes-core\n"
45
  msgid "Settings saved."
46
  msgstr ""
47
 
48
+ #: includes-core/CoreAdmin.php:53 includes/functions-admin.php:249
49
  msgid "Admin Menus"
50
  msgstr ""
51
 
52
+ #: includes-core/CoreAdmin.php:54 includes/functions-admin.php:250
53
  msgid "Nav Menus"
54
  msgstr ""
55
 
58
  msgstr ""
59
 
60
  #: includes-core/admin-menus-promo.php:48 includes-core/nav-menus-promo.php:52
61
+ #: includes/admin.php:107 includes/admin.php:1094
62
+ #: includes/features/editor-features.php:66
63
+ #: includes/features/editor-features.php:119 includes/settings.php:54
64
  msgid "Save Changes"
65
  msgstr ""
66
 
69
  msgstr ""
70
 
71
  #: includes-core/admin-menus-promo.php:62 includes-core/nav-menus-promo.php:67
72
+ #: includes/functions-admin.php:260 includes/functions-admin.php:261
73
+ #: includes/manager.php:348 includes/manager.php:349
74
  msgid "Upgrade to Pro"
75
  msgstr ""
76
 
232
  msgid "can delete posts which are currently published with private visibility"
233
  msgstr ""
234
 
235
+ #: includes/admin.php:446 includes/admin.php:563 includes/admin.php:823
236
+ #: includes/admin.php:1009
237
  #, php-format
238
  msgid "%s: assigned by Permission Group"
239
  msgstr ""
243
  msgid "shared capability: %s"
244
  msgstr ""
245
 
246
+ #: includes/admin.php:540
247
  msgid "Other WordPress Core Capabilities"
248
  msgstr ""
249
 
250
+ #: includes/admin.php:582
251
  msgid "Lockout Prevention: To remove read capability, first remove WordPress admin / editing capabilities, or add \"dashboard_lockout_ok\" capability"
252
  msgstr ""
253
 
254
+ #: includes/admin.php:625 includes/admin.php:862 includes/admin.php:1062
255
  msgid "check/uncheck all"
256
  msgstr ""
257
 
258
+ #: includes/admin.php:625 includes/admin.php:862 includes/admin.php:1062
259
  msgid "negate all (storing as disabled capabilities)"
260
  msgstr ""
261
 
262
+ #: includes/admin.php:625 includes/admin.php:862 includes/admin.php:1062
263
  msgid "negate none (add/remove all capabilities normally)"
264
  msgstr ""
265
 
266
+ #: includes/admin.php:797
267
  #, php-format
268
  msgid "%s Capabilities"
269
  msgstr ""
270
 
271
+ #: includes/admin.php:873
272
  msgid "Invalid Capabilities"
273
  msgstr ""
274
 
275
+ #: includes/admin.php:878
276
  msgid "The following entries have no effect. Please assign desired capabilities in the Read / Edit / Delete grid above."
277
  msgstr ""
278
 
279
+ #: includes/admin.php:955
280
  msgid "Additional Capabilities"
281
  msgstr ""
282
 
283
+ #: includes/admin.php:1072
284
  msgid "Role level is mostly deprecated. However, it still determines eligibility for Post Author assignment and limits the application of user editing capabilities."
285
  msgstr ""
286
 
287
+ #: includes/admin.php:1074
288
  msgid "Level:"
289
  msgstr ""
290
 
291
+ #: includes/admin.php:1097
292
  msgid "Delete this role"
293
  msgstr ""
294
 
295
+ #: includes/admin.php:1097
296
  #, php-format
297
  msgid ""
298
  "You are about to delete the %s role.\n"
300
  " 'Cancel' to stop, 'OK' to delete."
301
  msgstr ""
302
 
303
+ #: includes/admin.php:1097
304
  msgid "Delete Role"
305
  msgstr ""
306
 
307
+ #: includes/admin.php:1106
308
  msgid "Add Capability"
309
  msgstr ""
310
 
311
+ #: includes/admin.php:1109
312
  msgid "Add to role"
313
  msgstr ""
314
 
315
+ #: includes/admin.php:1121
316
  msgid "Copy this role to"
317
  msgstr ""
318
 
319
+ #: includes/admin.php:1124
320
  #: includes/roles/class/class-pp-roles-list-table.php:80
321
  msgid "Role Name"
322
  msgstr ""
323
 
324
+ #: includes/admin.php:1127
325
  msgid "Make role available for supplemental assignment to Permission Groups only"
326
  msgstr ""
327
 
328
+ #: includes/admin.php:1127
329
  msgid "hidden"
330
  msgstr ""
331
 
332
+ #: includes/admin.php:1131
333
  msgid "Copy"
334
  msgstr ""
335
 
336
+ #: includes/admin.php:1137
337
  msgid "Rename Role"
338
  msgstr ""
339
 
340
+ #: includes/admin.php:1139
341
  msgid "New Role Name"
342
  msgstr ""
343
 
344
+ #: includes/admin.php:1142
345
  msgid "Rename"
346
  msgstr ""
347
 
348
+ #: includes/admin.php:1171
349
  msgid "Create this role definition in new (future) sites"
350
  msgstr ""
351
 
352
+ #: includes/admin.php:1171
353
  msgid "include in new sites"
354
  msgstr ""
355
 
356
+ #: includes/admin.php:1174
357
  msgid "Copy / update this role definition to all sites now"
358
  msgstr ""
359
 
360
+ #: includes/admin.php:1174
361
  msgid "sync role to all sites now"
362
  msgstr ""
363
 
364
+ #: includes/admin.php:1177
365
  msgid "Copy option settings to all sites now"
366
  msgstr ""
367
 
368
+ #: includes/admin.php:1177
369
  msgid "sync options to all sites now"
370
  msgstr ""
371
 
372
+ #: includes/backup-handler.php:9 includes/manager.php:776
373
  msgid "You do not have permission to restore roles."
374
  msgstr ""
375
 
411
  msgid "Restore"
412
  msgstr ""
413
 
414
+ #: includes/backup.php:47 includes/functions-admin.php:251
415
+ #: includes/manager.php:339
416
  msgid "Backup"
417
  msgstr ""
418
 
545
  msgid "Reset to WordPress defaults"
546
  msgstr ""
547
 
548
+ #: includes/features/editor-features-classic.php:18
549
+ msgid "Classic Editor Screen"
550
+ msgstr ""
551
+
552
+ #: includes/features/editor-features-classic.php:23
553
+ #: includes/features/editor-features-gutenberg.php:23
554
  #, php-format
555
+ msgid "%s Restrict"
556
+ msgstr ""
557
+
558
+ #: includes/features/editor-features-classic.php:24
559
+ #: includes/features/editor-features-gutenberg.php:24
560
+ msgid "Toggle all"
561
+ msgstr ""
562
+
563
+ #: includes/features/editor-features-gutenberg.php:18
564
+ msgid "Gutenberg Screen"
565
  msgstr ""
566
 
567
+ #: includes/features/editor-features.php:31
568
+ msgid "Editor Feature Restriction"
569
+ msgstr ""
570
+
571
+ #: includes/features/editor-features.php:45
572
+ msgid "Select editor features to remove. Note that this screen cannot be used to grant additional features to any role."
573
+ msgstr ""
574
+
575
+ #: includes/features/editor-features.php:89
576
+ msgid "Gutenberg"
577
+ msgstr ""
578
+
579
+ #: includes/features/editor-features.php:92
580
+ msgid "Classic"
581
+ msgstr ""
582
+
583
+ #: includes/features/restrict-editor-features.php:40
584
+ msgid "Top Tabs"
585
+ msgstr ""
586
+
587
+ #: includes/features/restrict-editor-features.php:41
588
+ msgid "Help"
589
+ msgstr ""
590
+
591
+ #: includes/features/restrict-editor-features.php:42
592
+ msgid "Screen Options"
593
+ msgstr ""
594
+
595
+ #: includes/features/restrict-editor-features.php:45
596
+ #: includes/features/restrict-editor-features.php:48
597
+ msgid "Editor"
598
+ msgstr ""
599
+
600
+ #: includes/features/restrict-editor-features.php:46
601
  #: includes/filters-woocommerce.php:33
602
  msgid "Add New"
603
  msgstr ""
604
 
605
+ #: includes/features/restrict-editor-features.php:47
606
+ msgid "Title"
607
+ msgstr ""
608
+
609
+ #: includes/features/restrict-editor-features.php:49
610
+ #: includes/features/restrict-editor-features.php:324
611
+ msgid "Permalink"
612
+ msgstr ""
613
+
614
+ #: includes/features/restrict-editor-features.php:50
615
+ msgid "Media Buttons (all)"
616
+ msgstr ""
617
+
618
+ #: includes/features/restrict-editor-features.php:51
619
+ msgid "HTML Editor Button"
620
+ msgstr ""
621
+
622
+ #: includes/features/restrict-editor-features.php:52
623
+ msgid "Word count"
624
+ msgstr ""
625
+
626
+ #: includes/features/restrict-editor-features.php:55
627
+ #: includes/features/restrict-editor-features.php:56
628
+ msgid "Publish Box"
629
+ msgstr ""
630
+
631
+ #: includes/features/restrict-editor-features.php:57
632
+ #: includes/features/restrict-editor-features.php:309
633
+ msgid "Save Draft"
634
+ msgstr ""
635
+
636
+ #: includes/features/restrict-editor-features.php:58
637
+ #: includes/features/restrict-editor-features.php:311
638
+ msgid "Preview"
639
+ msgstr ""
640
+
641
+ #: includes/features/restrict-editor-features.php:59
642
+ msgid "Publish Status "
643
+ msgstr ""
644
+
645
+ #: includes/features/restrict-editor-features.php:60
646
+ msgid "Publish Visibility"
647
+ msgstr ""
648
+
649
+ #: includes/features/restrict-editor-features.php:61
650
+ msgid "Password Protect This Post"
651
+ msgstr ""
652
+
653
+ #: includes/features/restrict-editor-features.php:62
654
+ msgid "Publish Actions"
655
+ msgstr ""
656
+
657
+ #: includes/features/restrict-editor-features.php:63
658
+ msgid "Publish Schedule"
659
+ msgstr ""
660
+
661
+ #: includes/features/restrict-editor-features.php:64
662
+ msgid "Date"
663
+ msgstr ""
664
+
665
+ #: includes/features/restrict-editor-features.php:65
666
+ msgid "Publish"
667
+ msgstr ""
668
+
669
+ #: includes/features/restrict-editor-features.php:68
670
+ msgid "Taxonomy Boxes"
671
+ msgstr ""
672
+
673
+ #: includes/features/restrict-editor-features.php:69
674
+ #: includes/features/restrict-editor-features.php:325
675
+ msgid "Categories"
676
+ msgstr ""
677
+
678
+ #: includes/features/restrict-editor-features.php:70
679
+ msgid "Add New Category"
680
+ msgstr ""
681
+
682
+ #: includes/features/restrict-editor-features.php:71
683
+ #: includes/features/restrict-editor-features.php:326
684
+ msgid "Tags"
685
+ msgstr ""
686
+
687
+ #: includes/features/restrict-editor-features.php:83
688
+ msgid "Page Boxes"
689
+ msgstr ""
690
+
691
+ #: includes/features/restrict-editor-features.php:84
692
+ msgid "Page Attributes"
693
+ msgstr ""
694
+
695
+ #: includes/features/restrict-editor-features.php:85
696
+ msgid "Parent"
697
+ msgstr ""
698
+
699
+ #: includes/features/restrict-editor-features.php:86
700
+ msgid "Page Template"
701
+ msgstr ""
702
+
703
+ #: includes/features/restrict-editor-features.php:87
704
+ msgid "Order"
705
+ msgstr ""
706
+
707
+ #: includes/features/restrict-editor-features.php:90
708
+ msgid "Other Boxes"
709
+ msgstr ""
710
+
711
+ #: includes/features/restrict-editor-features.php:91
712
+ msgid "Featured Image"
713
+ msgstr ""
714
+
715
+ #: includes/features/restrict-editor-features.php:92
716
+ msgid "Post Slug"
717
+ msgstr ""
718
+
719
+ #: includes/features/restrict-editor-features.php:93
720
+ #: includes/features/restrict-editor-features.php:342
721
+ msgid "Discussion"
722
+ msgstr ""
723
+
724
+ #: includes/features/restrict-editor-features.php:299
725
+ msgid "Top Bar - Left"
726
+ msgstr ""
727
+
728
+ #: includes/features/restrict-editor-features.php:300
729
+ msgid "Add block"
730
+ msgstr ""
731
+
732
+ #: includes/features/restrict-editor-features.php:301
733
+ msgid "Modes"
734
+ msgstr ""
735
+
736
+ #: includes/features/restrict-editor-features.php:302
737
+ msgid "Undo"
738
+ msgstr ""
739
+
740
+ #: includes/features/restrict-editor-features.php:303
741
+ msgid "Redo"
742
+ msgstr ""
743
+
744
+ #: includes/features/restrict-editor-features.php:304
745
+ msgid "Details"
746
+ msgstr ""
747
+
748
+ #: includes/features/restrict-editor-features.php:305
749
+ msgid "Outline"
750
+ msgstr ""
751
+
752
+ #: includes/features/restrict-editor-features.php:308
753
+ msgid "Top Bar - Right"
754
+ msgstr ""
755
+
756
+ #: includes/features/restrict-editor-features.php:310
757
+ msgid "Switch to draft"
758
+ msgstr ""
759
+
760
+ #: includes/features/restrict-editor-features.php:312
761
+ msgid "Publish / Update"
762
+ msgstr ""
763
+
764
+ #: includes/features/restrict-editor-features.php:313
765
+ #: includes/functions-admin.php:254 includes/manager.php:342
766
+ msgid "Settings"
767
+ msgstr ""
768
+
769
+ #: includes/features/restrict-editor-features.php:314
770
+ msgid "Options"
771
+ msgstr ""
772
+
773
+ #: includes/features/restrict-editor-features.php:317
774
+ msgid "Body"
775
+ msgstr ""
776
+
777
+ #: includes/features/restrict-editor-features.php:318
778
+ msgid "Edit title"
779
+ msgstr ""
780
+
781
+ #: includes/features/restrict-editor-features.php:319
782
+ msgid "Content"
783
+ msgstr ""
784
+
785
+ #: includes/features/restrict-editor-features.php:322
786
+ msgid "Document Panel"
787
+ msgstr ""
788
+
789
+ #: includes/features/restrict-editor-features.php:323
790
+ msgid "Status & visibility"
791
+ msgstr ""
792
+
793
+ #: includes/features/restrict-editor-features.php:340
794
+ msgid "Featured image"
795
+ msgstr ""
796
+
797
+ #: includes/features/restrict-editor-features.php:341
798
+ msgid "Excerpt"
799
+ msgstr ""
800
+
801
+ #: includes/features/restrict-editor-features.php:343
802
+ msgid "Post Attributes"
803
+ msgstr ""
804
+
805
+ #: includes/features/restrict-editor-features.php:346
806
+ #: includes/features/restrict-editor-features.php:347
807
+ msgid "Block Panel"
808
+ msgstr ""
809
+
810
+ #: includes/features/restrict-editor-features.php:348
811
+ msgid "Paragraph"
812
+ msgstr ""
813
+
814
+ #: includes/features/restrict-editor-features.php:349
815
+ msgid "Typography"
816
+ msgstr ""
817
+
818
+ #: includes/features/restrict-editor-features.php:350
819
+ msgid "Color settings"
820
+ msgstr ""
821
+
822
+ #: includes/features/restrict-editor-features.php:351
823
+ msgid "Text settings"
824
+ msgstr ""
825
+
826
+ #: includes/filters-woocommerce.php:32
827
+ #, php-format
828
+ msgid "All %s"
829
+ msgstr ""
830
+
831
  #: includes/filters.php:312
832
  msgid "Edit Roles"
833
  msgstr ""
834
 
835
+ #: includes/functions-admin.php:225 includes/manager.php:301
836
  #: includes/roles/class/class-pp-roles-list-table.php:125
837
  msgid "Capabilities"
838
  msgstr ""
839
 
840
+ #: includes/functions-admin.php:247 includes/manager.php:323
841
  #: includes/roles/roles.php:4
842
  msgid "Roles"
843
  msgstr ""
844
 
845
+ #: includes/functions-admin.php:248 includes/manager.php:335
846
+ msgid "Editor Features"
847
  msgstr ""
848
 
849
  #: includes/handler.php:28 includes/handler.php:54
899
  msgid "Add or remove capability from the role normally"
900
  msgstr ""
901
 
902
+ #: includes/manager.php:366 includes/roles/roles.php:33
903
  msgid "Name"
904
  msgstr ""
905
 
906
+ #: includes/manager.php:367
907
  #: includes/roles/class/class-pp-roles-list-table.php:81
908
  msgid "Role"
909
  msgstr ""
910
 
911
+ #: includes/manager.php:368
912
  #: includes/roles/class/class-pp-roles-list-table.php:82
913
  msgid "Users"
914
  msgstr ""
915
 
916
+ #: includes/manager.php:395
917
  msgid "You do not have permission to manage roles."
918
  msgstr ""
919
 
920
+ #: includes/manager.php:412
921
+ msgid "You do not have permission to manage editor features."
922
+ msgstr ""
923
+
924
+ #: includes/manager.php:454
925
+ msgid "Settings updated."
926
+ msgstr ""
927
+
928
+ #: includes/manager.php:556 includes/manager.php:597
929
  msgid "You do not have permission to manage capabilities."
930
  msgstr ""
931
 
932
+ #: includes/manager.php:611
933
  msgid "New capability added to role."
934
  msgstr ""
935
 
936
+ #: includes/manager.php:629
937
  msgid "The selected role is not editable."
938
  msgstr ""
939
 
940
+ #: includes/manager.php:656
941
  msgid "Bad form Received"
942
  msgstr ""
943
 
944
+ #: includes/manager.php:806
945
  #, php-format
946
  msgid "If you like %s, please leave us a %s rating. Thank you!"
947
  msgstr ""
948
 
949
+ #: includes/manager.php:817
950
  msgid "About PublishPress Capabilities"
951
  msgstr ""
952
 
953
+ #: includes/manager.php:817
954
  msgid "About"
955
  msgstr ""
956
 
957
+ #: includes/manager.php:819
958
  msgid "Capabilites Documentation"
959
  msgstr ""
960
 
961
+ #: includes/manager.php:819
962
  msgid "Documentation"
963
  msgstr ""
964
 
965
+ #: includes/manager.php:821
966
  msgid "Contact the PublishPress team"
967
  msgstr ""
968
 
969
+ #: includes/manager.php:821
970
  msgid "Contact"
971
  msgstr ""
972
 
1003
  msgid "Capabilities for custom statuses can be manually added to a role here (see Conditions > Status > Capability Mapping for applicable names). However, it is usually more convenient to use Permit Groups to assign a supplemental status-specific role."
1004
  msgstr ""
1005
 
1006
+ #: includes/pp-ui.php:77
 
 
 
 
1007
  msgid "Type-Specific Capabilities"
1008
  msgstr ""
1009
 
1010
+ #: includes/pp-ui.php:80
1011
  msgid "Ensure permissions can be controlled separately from other post types."
1012
  msgstr ""
1013
 
1014
+ #: includes/pp-ui.php:143
1015
  msgid "Make selected post types require a different capability to add new posts."
1016
  msgstr ""
1017
 
1018
+ #: includes/pp-ui.php:143
1019
  msgid "Use create_posts capability"
1020
  msgstr ""
1021
 
1022
+ #: includes/pp-ui.php:151 includes/pp-ui.php:214 includes/pp-ui.php:270
1023
  msgid "Update"
1024
  msgstr ""
1025
 
1026
+ #: includes/pp-ui.php:161
1027
  msgid "Taxonomy-Specific Capabilities"
1028
  msgstr ""
1029
 
1030
+ #: includes/pp-ui.php:164
1031
  msgid "Ensure permissions can be controlled separately from other taxonomies."
1032
  msgstr ""
1033
 
1034
+ #: includes/pp-ui.php:219
1035
  msgid "Detailed Taxonomy Capabilities"
1036
  msgstr ""
1037
 
1038
+ #: includes/pp-ui.php:222
1039
  msgid "Enforce Edit, Delete and Assign capabilities separately from Management capability."
1040
  msgstr ""
1041
 
1105
  msgstr ""
1106
 
1107
  #: includes/roles/class/class-pp-roles-list-table.php:168
1108
+ #: includes/roles/class/class-pp-roles-list-table.php:307
1109
  msgid "Delete"
1110
  msgstr ""
1111
 
readme.txt CHANGED
@@ -1,60 +1,71 @@
1
- === PublishPress Capabilities: Manage WordPress Permissions and Edit User Roles ===
2
 
3
  Contributors: publishpress, kevinB, stevejburge, andergmartins
4
  Author: PublishPress
5
  Author URI: https://publishpress.com
6
- Tags: user roles, capabilities, permissions, authors, editors, post types, taxonomies
7
  Requires at least: 4.9.7
8
- Tested up to: 5.7
9
  Requires PHP: 5.6.20
10
- Stable tag: 2.0.2
11
  License: GPLv3
12
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
13
 
14
- PublishPress Capabilities is the best plugin to customize your permissions and user roles. You can control who has access to your WordPress site.
15
 
16
  == Description ==
17
 
18
  [PublishPress Capabilities](https://publishpress.com/capabilities/) gives you control over all the permissions on your WordPress site. We built this user role editor plugin so you have an EASY and POWERFUL way to manage users.
19
 
20
- You can customize all the user roles on your site, from Administrators and Editors to Authors, Contributors, Subscribers and custom roles. Each role can have the exact permissions that your site needs.
21
 
22
- PublishPress Capabilities is SAFE TO USE. Every time you change your site's permissions, PublishPress Capabilities will take a backup that you can restore if anything goes wrong. You can use these backups to migrate your roles and permissions from one site to another.
23
 
24
- = The 10 Key Features of PublishPress Capabilities =
25
 
26
- - **Edit user roles**: You can change the capabilities for any role.
27
- - **Works for all post types**: Choose who can Publish, Read, Edit and Delete content for any post type.
28
- - **Works for all taxonomies**: Choose who can Manage, Edit and Assign terms in any taxonomy.
29
- - **Safe backups**: Every time you change your permissions, PublishPress Capabilities saves a backup.
30
- - **Create or copy user roles**: Add new roles, or clone existing roles.
31
- - **Frontend menus (Pro version)**: Stop users from accessing any frontend menu link.
32
- - **Admin menus (Pro version)**: Stop users from accessing any admin menu link.
33
- - **Media library permissions**: Decide who can upload, edit and delete files.
34
- - **WooCommerce permissions**: Control access to WooCommerce products, orders, coupons and more.
35
- - **Multisite support**: Manage permissions on a single site or across your whole network.
36
 
37
- = Control User Permissions =
38
 
39
- PublishPress Capabilities gives you detailed control over all the permissions on your WordPress site. You can customize all the user roles on your site, from Administrator to Subscriber.
 
 
 
 
 
 
 
 
 
 
40
 
41
- With Capabilities, you can choose who can Publish, Read, Edit and Delete content. You can choose permissions for posts, pages, custom content types, categories, tags, and more.
 
 
 
 
42
 
43
  [Click here for your quick start guide to PublishPress Capabilities](https://publishpress.com/knowledge-base/permissions-start/).
44
 
45
- = Capabilities for any Post Type =
46
 
47
  Many WordPress users have sites with custom post types. This can be done using custom code, a theme, or with a plugin. No matter how your post type is created, PublishPress Capabilities lets you enforce and assign distinct capabilities for your post type.
48
 
49
  [Click here to see how to control post type permissions](https://publishpress.com/knowledge-base/custom-post-types-capability/).
50
 
51
- = Capabilities for any Taxonomy =
52
 
53
- The PublishPress Capabilities plugin allows you to add extra permissions to the taxonomies on your site. This feature includes the default Categories and Tags, but also applies to other taxonomies. For example, in WooCommerce you can apply custom permissions to Product categories, Product tags, and Product shipping classes. You can enforce and assign "Manage", "Edit" and "Assign" distinct capabilities for all your taxonomies.
54
 
55
  [Click here to learn about taxonomy permissions](https://publishpress.com/knowledge-base/taxonomy-specific-capabilities/).
56
 
57
- = Backup and Restore Roles and Capabilities =
 
 
 
 
 
 
58
 
59
  PublishPress Capabilities offers you the ability to back up and restore your permissions. This feature is very helpful if you want to test out changes on your site, or if you've installed a new plugin that has changed your site's permissions.
60
 
@@ -62,56 +73,50 @@ Every time you change your permissions, the PublishPress Capabilities plugin wil
62
 
63
  [Click here to see how to backup permissions](https://publishpress.com/knowledge-base/backup-restore-permissions/).
64
 
65
- = Create or Copy User Roles =
66
 
67
  With PublishPress Capabilities you can create or copy any existing WordPress user role. These roles can be customized in exactly the same way as the default WordPress roles. These new roles can be added to single sites or to an entire multisite network.
68
 
69
  [Click here to see how to create or copy user roles](https://publishpress.com/knowledge-base/create-or-copy-user-roles/).
70
 
71
- = Frontend Menu Restrictions (Pro version) =
72
 
73
  PublishPress Capabilities enables you to restrict access to navigation menus by roles, logged in and logged out users. This is useful because a default WordPress site does not give you way to control the visibility of your links.
74
 
75
  [Click to see how to block frontend menu access](https://publishpress.com/knowledge-base/nav-menus/).
76
 
77
- = Admin Menu Restrictions (Pro version) =
78
 
79
  With PublishPress Capabilities you can restrict access to admin menu screens by user roles. This is useful because many plugin do not have any way to control who can access their admin screens.
80
 
81
  [Click to see how to block Admin menu access](https://publishpress.com/knowledge-base/admin-menus/).
82
 
83
- = Support for Media Library Permissions =
84
 
85
  PublishPress Capabilities enables you to decide who can upload, edit and delete files from your site's Media Library. By default, only Administrators are able to delete files in your Media Library. Subscribers and Contributors are not even allowed to upload files. You can customize these permissions for the Media Library and also the Featured Image box.
86
 
87
  [Click here to learn about Media Library permissions](https://publishpress.com/knowledge-base/control-media-library-access/).
88
 
89
- = Support for WooCommerce Permissions =
90
 
91
  We mentioned earlier that PublishPress Capabilities has special support for WooCommerce taxonomies. This is true for the rest of WooCommerce also. With PublishPress Capabilities you can control permissions for WooCommerce products, orders and coupons.
92
 
93
  [Click here to learn about WooCommerce permissions](https://publishpress.com/knowledge-base/woocommerce-permissons/).
94
 
95
- = WordPress Multisite support =
96
 
97
  PublishPress Capabilities allows you to control permissions on a single site or across your whole network. Every time you update permissions in PublishPress Capabilities, you can choose to sync those changes across your multisite network.
98
 
99
  [Click here to learn about multisite permissions](https://publishpress.com/knowledge-base/multisite-network/).
100
 
101
- = Permissions for Custom Statuses =
102
-
103
- This option will appear if you have the [PublishPress](https://publishpress.com/publishpress) plugin installed to create and configure custom statuses. With Capabilities Pro, you can decide which user roles are able to send posts to each status. For status-specific editing control, also activate [PublishPress Permissions Pro](https://publishpress.com/presspermit) and its Status Control module.
104
-
105
- [Click here to see how to manage permissions for statuses](https://publishpress.com/knowledge-base/permissions-for-custom-statuses/).
106
-
107
-
108
  = Join PublishPress and get the Pro plugins =
109
 
110
  The Pro versions of the PublishPress plugins are well worth your investment. The Pro versions have extra features and faster support. [Click here to join PublishPress](https://publishpress.com/pricing/).
111
 
112
- Join PublishPress and you'll get access to these 6 Pro plugins:
113
 
114
  * [PublishPress Authors Pro](https://publishpress.com/authors) allows you to add multiple authors and guest authors to WordPress posts.
 
115
  * [PublishPress Capabilities Pro](https://publishpress.com/capabilities) is the plugin to manage your WordPress user roles, permissions, and capabilities.
116
  * [PublishPress Checklists Pro](https://publishpress.com/checklists) enables you to define tasks that must be completed before content is published.
117
  * [PublishPress Permissions Pro](https://publishpress.com/permissions) is the plugin for advanced WordPress permissions.
@@ -128,6 +133,236 @@ Bug reports for PublishPress Capabilities are welcomed in our [repository on Git
128
 
129
  Follow PublishPress on [Facebook](https://www.facebook.com/publishpress), [Twitter](https://www.twitter.com/publishpresscom) and [YouTube](https://www.youtube.com/publishpress).
130
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  == Screenshots ==
132
 
133
  1. Control user permissions
@@ -142,13 +377,14 @@ Follow PublishPress on [Facebook](https://www.facebook.com/publishpress), [Twitt
142
  10. PublishPress Permission integration (showing capabilities from supplemental roles)
143
  11. Multisite support
144
 
145
- == Upgrade Notice ==
146
-
147
- = 1.5.1 =
148
- Fixed : Non-administrators with user editing capabilities could add new Administrators
149
-
150
  == Changelog ==
151
 
 
 
 
 
 
 
152
  = 2.0.2 - 6 May 2021 =
153
  * Feature : Multisite - "sync options to all sites" checkbox. Copies "use create_posts capability", Type-Specific Capabilities, Taxonomy-Specific Capabilities, Detailed Taxonomy Capabilities settings
154
  * Fixed : Multisite - "sync role to all sites" did not work if main site ID is not 1
1
+ === WordPress Permissions Plugin and User Role Editor - PublishPress Capabilities ===
2
 
3
  Contributors: publishpress, kevinB, stevejburge, andergmartins
4
  Author: PublishPress
5
  Author URI: https://publishpress.com
6
+ Tags: user roles, capabilities, permissions, admin menus, user role editor
7
  Requires at least: 4.9.7
8
+ Tested up to: 5.8
9
  Requires PHP: 5.6.20
10
+ Stable tag: 2.1
11
  License: GPLv3
12
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
13
 
14
+ The best permissions plugin allows you to customize user roles, editor features and admin menus. You control who has access to your WordPress site.
15
 
16
  == Description ==
17
 
18
  [PublishPress Capabilities](https://publishpress.com/capabilities/) gives you control over all the permissions on your WordPress site. We built this user role editor plugin so you have an EASY and POWERFUL way to manage users.
19
 
20
+ You can **customize all your WordPress user roles**, from Administrators and Editors to Authors, Contributors, Subscribers and custom roles. Each use role can have the exact permissions that your site needs.
21
 
22
+ You can use PublishPress Capabilities to clean up the post editing screen. You can decide what authors see when they're writing posts. You can **hide any features on the Gutenberg or Classic Editor screens**.
23
 
24
+ The Pro version of PublishPress Capabilities enables you to stop users from accessing any admin menu link and any frontend menu link.
25
 
26
+ PublishPress Capabilities is **safe to use**. Every time you change your site's permissions, this plugin will take a backup that you can restore if anything goes wrong. You can use these backups to migrate your roles and permissions from one site to another.
 
 
 
 
 
 
 
 
 
27
 
28
+ = The Key Features of PublishPress Capabilities =
29
 
30
+ 1. **User role editor**: You can change the capabilities for any role.
31
+ 2. **Works for all post types**: Choose who can Publish, Read, Edit and Delete content for any post type.
32
+ 3. **Works for all taxonomies**: Choose who can Manage, Edit and Assign terms in any taxonomy.
33
+ 4. **Hide editor features**: Decide what users see when they're writing posts in Gutenberg or the Classic Editor.
34
+ 5. **Safe backups**: Every time you change your permissions, PublishPress Capabilities saves a backup.
35
+ 6. **Create or copy user roles**: Add new roles, or clone existing roles.
36
+ 7. **Frontend menus (Pro version)**: Stop users from accessing any frontend menu link.
37
+ 8. **Admin menus (Pro version)**: Stop users from accessing any admin menu link.
38
+ 9. **Media library permissions**: Decide who can upload, edit and delete files.
39
+ 10. **WooCommerce permissions**: Control access to WooCommerce products, orders, coupons and more.
40
+ 11. **Multisite support**: Manage permissions on a single site or across your whole network.
41
 
42
+ = #1. WordPress User Role Editor =
43
+
44
+ PublishPress Capabilities gives you detailed control over all the permission levelsss on your WordPress site. You can edit user roles on your site, from Administrator and Editor to Contributor and Subscriber.
45
+
46
+ With the Capabilities plugin, you can choose who can Publish, Read, Edit and Delete content. You can choose permissions for posts, pages, custom content types, categories, tags, and more.
47
 
48
  [Click here for your quick start guide to PublishPress Capabilities](https://publishpress.com/knowledge-base/permissions-start/).
49
 
50
+ = #2. Capabilities for any Post Type =
51
 
52
  Many WordPress users have sites with custom post types. This can be done using custom code, a theme, or with a plugin. No matter how your post type is created, PublishPress Capabilities lets you enforce and assign distinct capabilities for your post type.
53
 
54
  [Click here to see how to control post type permissions](https://publishpress.com/knowledge-base/custom-post-types-capability/).
55
 
56
+ = #3. Capabilities for any WordPress Taxonomy =
57
 
58
+ PublishPress Capabilities enables you to add extra permissions to the taxonomies on your site. This feature includes the default Categories and Tags, but also applies to other taxonomies. For example, in WooCommerce you can apply custom permissions to Product categories, Product tags, and Product shipping classes. You can enforce and assign "Manage", "Edit" and "Assign" distinct capabilities for all your taxonomies.
59
 
60
  [Click here to learn about taxonomy permissions](https://publishpress.com/knowledge-base/taxonomy-specific-capabilities/).
61
 
62
+ = #4. Hide Gutenberg and Classic Editor Features =
63
+
64
+ PublishPress Capabilities has an option called "Editor Features" allows you to clean up the post editing screen. You can decide what users see when they're writing posts. You can hide anything on the Gutenberg or Classic Editor screens. You can hide boxes inside the sidebadd such Tags, Categories, or Excerpt. You can the "Publish" button. You can even hide the post title, body, or permalink. This is a great alternative to plugins such as Adminimize.
65
+
66
+ [Click here to learn about hiding editor features](https://publishpress.com/knowledge-base/editor-features/).
67
+
68
+ = #5. Backup and Restore User Roles and Capabilities =
69
 
70
  PublishPress Capabilities offers you the ability to back up and restore your permissions. This feature is very helpful if you want to test out changes on your site, or if you've installed a new plugin that has changed your site's permissions.
71
 
73
 
74
  [Click here to see how to backup permissions](https://publishpress.com/knowledge-base/backup-restore-permissions/).
75
 
76
+ = #6. Create New User Roles or Copy User Roles =
77
 
78
  With PublishPress Capabilities you can create or copy any existing WordPress user role. These roles can be customized in exactly the same way as the default WordPress roles. These new roles can be added to single sites or to an entire multisite network.
79
 
80
  [Click here to see how to create or copy user roles](https://publishpress.com/knowledge-base/create-or-copy-user-roles/).
81
 
82
+ = #7. Frontend Menu Restrictions (Pro version) =
83
 
84
  PublishPress Capabilities enables you to restrict access to navigation menus by roles, logged in and logged out users. This is useful because a default WordPress site does not give you way to control the visibility of your links.
85
 
86
  [Click to see how to block frontend menu access](https://publishpress.com/knowledge-base/nav-menus/).
87
 
88
+ = #8. WordPress Admin Menu Restrictions (Pro version) =
89
 
90
  With PublishPress Capabilities you can restrict access to admin menu screens by user roles. This is useful because many plugin do not have any way to control who can access their admin screens.
91
 
92
  [Click to see how to block Admin menu access](https://publishpress.com/knowledge-base/admin-menus/).
93
 
94
+ = #9. Support for Media Library Permissions =
95
 
96
  PublishPress Capabilities enables you to decide who can upload, edit and delete files from your site's Media Library. By default, only Administrators are able to delete files in your Media Library. Subscribers and Contributors are not even allowed to upload files. You can customize these permissions for the Media Library and also the Featured Image box.
97
 
98
  [Click here to learn about Media Library permissions](https://publishpress.com/knowledge-base/control-media-library-access/).
99
 
100
+ = #10. Support for WooCommerce Permissions =
101
 
102
  We mentioned earlier that PublishPress Capabilities has special support for WooCommerce taxonomies. This is true for the rest of WooCommerce also. With PublishPress Capabilities you can control permissions for WooCommerce products, orders and coupons.
103
 
104
  [Click here to learn about WooCommerce permissions](https://publishpress.com/knowledge-base/woocommerce-permissons/).
105
 
106
+ = #11. WordPress Multisite support =
107
 
108
  PublishPress Capabilities allows you to control permissions on a single site or across your whole network. Every time you update permissions in PublishPress Capabilities, you can choose to sync those changes across your multisite network.
109
 
110
  [Click here to learn about multisite permissions](https://publishpress.com/knowledge-base/multisite-network/).
111
 
 
 
 
 
 
 
 
112
  = Join PublishPress and get the Pro plugins =
113
 
114
  The Pro versions of the PublishPress plugins are well worth your investment. The Pro versions have extra features and faster support. [Click here to join PublishPress](https://publishpress.com/pricing/).
115
 
116
+ Join PublishPress and you'll get access to these Pro plugins:
117
 
118
  * [PublishPress Authors Pro](https://publishpress.com/authors) allows you to add multiple authors and guest authors to WordPress posts.
119
+ * [PublishPress Blocks Pro](https://publishpress.com/blocks) is the plugin that gives you more control over the WordPress block editor.
120
  * [PublishPress Capabilities Pro](https://publishpress.com/capabilities) is the plugin to manage your WordPress user roles, permissions, and capabilities.
121
  * [PublishPress Checklists Pro](https://publishpress.com/checklists) enables you to define tasks that must be completed before content is published.
122
  * [PublishPress Permissions Pro](https://publishpress.com/permissions) is the plugin for advanced WordPress permissions.
133
 
134
  Follow PublishPress on [Facebook](https://www.facebook.com/publishpress), [Twitter](https://www.twitter.com/publishpresscom) and [YouTube](https://www.youtube.com/publishpress).
135
 
136
+ == Frequently Asked Questions ==
137
+
138
+ = How do I Backup and Restore WordPress User Permissions? =
139
+
140
+ PublishPress Capabilities offers you the ability to backup and restore your WordPress user permissions. This feature is very helpful if you want to test out changes on your site, or you've installed a new plugin that has changed your site's permissions.
141
+
142
+ Changing permissions in WordPress can be a tricky task. It's possible to lock yourself or others out of some important features. So, we've built a way to keep your site safe.
143
+
144
+ Every time you change your permissions, the PublishPress Capabilities plugin will automatically create a backup. If you make a mistake, go to the “Backup” menu link and click the “Restore” tab. Here you can browse through the most recent 20 automatic backups. The plugin also saves a backup from you first installed PublishPress Capabilities. And you can click the “Backup” tab to manually create backups.
145
+
146
+ Click the yellow “Restore Selected Roles” button and you'll be able to roll back to a previous version.
147
+
148
+ Whenever you choose a backup, the plugin will show all the permissions in that backup. Important changes in permissions are highlighted:
149
+
150
+ * A green role title means the role does not exist in your current set.
151
+ * A green capability is set in the role backup, but not the current role.
152
+ * A stuck-through capability is set in the current role, but not the role backup.
153
+
154
+ = How Do I Restore Permissions to the WordPress Defaults? =
155
+
156
+ If you really need to clean up and refresh your site, PublishPress Capabilities does allow you to restore the default WordPress permissions. Go to Capabilities > Backup and dlick the “Reset Roles” tab. Before you take next step, make sure to read this warning:
157
+
158
+ “WARNING: This will delete and/or modify stored role definitions. If you have installed any plugin that adds new roles or capabilities, these will be lost. It is recommended to use this only as a last resort!”
159
+
160
+ If you want to proceed, click the “Reset to WordPress defaults” link. PublishPress Capabilities will ask you if you're really sure you want to do this. Click “OK” to continue. Once the process is complete, you'll see the message, “Roles and Capabilities reset to WordPress defaults”.
161
+
162
+ = How Do I Control WooCommerce Menu Link Permissions? =
163
+
164
+ WooCommerce is the most popular WordPress eCommerce plugin. You can create beautiful store with themes customized to your brand and industry and you'll find 1,000's of tools and popular integrations.
165
+
166
+ The PublishPress Capabilities plugin enables you to control permissions for the WooCommerce plugin and also WooCommerce user rols. Go to the “Capabilities” link in your WordPress admin menu. In the main area of your screen will see options for WooCommerce Products, Orders and Coupons. These permissions cover editing, deleting and reading.
167
+
168
+ In the right sidebar, you can also enable permissions for WooCommerce taxonomies. Check the boxes for Product categories, Product tags, and Product shipping classes. After you check those boxes and refresh your screen, you will see Manager, Edit, Assign and Delete options for Product categories, Product tags, and Product shipping classes.
169
+
170
+ The Pro version of PublishPress Capabilities allows you to block access to admin menu links in WooCommerce. This is useful because WooCommerce has very limited options for controlling who can access the admin screens. When you first install WooCommerce, you'll see four top-level menu links, plus sub-menus. All of these links are available to users in the Administrator and Shop Manager roles:
171
+
172
+ * WooCommerce
173
+ * Products
174
+ * Analytics
175
+ * Marketing
176
+
177
+ It is possible to control who can access these links by using the PublishPress Capabilities Pro plugin. After installing PublishPress Capabilities Pro, go to “Capabilities”, then “Admin Menus” in your WordPress admin area. n the top-left corner of this screen, choose the role that you want to edit. Scroll down and you can enter a red X for any menu link that you don't want users in that role to access. This is a great way to customize a WooCommerce role such as Shop Manager. This approach works for the core WooCommerce plugin and can also be used for WooCommerce add-on plugins such as WooCommerce Subscriptions, WooCommerce Shipping, and WooCommerce Bookings. PublishPress Capabilities can help you manage WooCommerce permissisons.
178
+
179
+ [Click here to learn about WooCommerce menu permissions](https://publishpress.com/knowledge-base/control-access-woocommerce-admin-menus/).
180
+
181
+ = How Do I Control Contact Form 7 Permissions? =
182
+
183
+ The Pro version of PublishPress Capabilities allows you to block access to admin menu links in the Contact Form 7 plugin. This is useful because Contact Form 7 has very limited options for controlling who can access the admin screens.
184
+
185
+ Contact Form 7 is the most popular contact form plugin for WordPress. You can manage multiple contact forms, and easily customize each form and the emails it sends. Contact Form 7 supports Ajax-powered submitting, CAPTCHA, Akismet spam filtering and much more.
186
+
187
+ When you first install Contact Form 7, you'll see one top-level menu link, plus three sub-menus. All of these links are available to users in the Administrator role:
188
+
189
+ * Contact Forms
190
+ * Add New
191
+ * Integration
192
+
193
+ It is possible to control who can access these links by using the PublishPress Capabilities Pro plugin. After installing PublishPress Capabilities Pro, go to “Capabilities”, then “Admin Menus” in your WordPress admin area. In the top-left corner of this screen, choose the role that you want to edit. Scroll down and you can enter a red X for any menu link that you don't want users in the Editor role to access. This approach works for the core Contact Form 7 plugin and can also be used for add-on plugins such as Flamingo which records entries for Contact Form 7 forms.
194
+
195
+ [Click here to learn about Contact Form 7 menu permissions](https://publishpress.com/knowledge-base/control-access-contact-form-7-admin-menus/).
196
+
197
+ = How Do I Control Yoast SEO User Roles and Permissions? =
198
+
199
+ The Pro version of PublishPress Capabilities allows you to block access to admin menu links in the Yoast SEO plugin. This is useful because Yoast SEO has limited options for managing who can access the admin screens and important features.
200
+
201
+ Yoast SEO is the most popular WordPress SEO plugin and contains everything that you need to manage your SEO. Yoast SEO is packed full of feature that help search engines to find and understand your website.
202
+
203
+ When you first install Yoast SEO, you'll see one top-level menu link, plus at least 5 sub-menus:
204
+
205
+ * General
206
+ * Search Appearance
207
+ * Social
208
+ * Tools
209
+ * Premium
210
+
211
+ It is possible to control who can access these Yoast SEO links by using the PublishPress Capabilities Pro plugin. After installing PublishPress Capabilities Pro, go to “Capabilities”, then “Admin Menus” in your WordPress admin area. In the top-left corner of this screen, choose the role that you want to edit. For example, you can restrict Yoast SEO access for the “SEO Manager” role. Scroll down and you can enter a red X for any menu link that you don't want users in the SEO Manager role to access.
212
+
213
+ This approach works for the core Yoast SEO plugin and can also be used for add-on plugins such as Local SEO, WooCommerce SEO, Google News, and more.
214
+
215
+ [Click here to learn about Yoast SEO menu permissions](https://publishpress.com/knowledge-base/control-access-yoast-seo-admin-menus/).
216
+
217
+ = How Do I Control Elementor User Roles and Permissions? =
218
+
219
+ The Pro version of PublishPress Capabilities allows you to block access to admin menu links in the Elementor plugin. This is useful because Elementor has limited options for managing who can access the admin screens and important features.
220
+
221
+ The Elementor plugin is one of the most popular drag-and-drop page builders. With Elementor, you’re editing the site live, and simultaneously see exactly how it looks like. Elementor designs are full-responsive and come with over 40 powerful widgets. PublishPress Capabilities can help you manage Elementor permissisons.
222
+
223
+ When you first install Elementor, you'll see one top-level menu link, plus at least 9 sub-menus:
224
+
225
+ * Settings
226
+ * Role Manager
227
+ * Tools
228
+ * System Info
229
+ * Getting Started
230
+ * Get Help
231
+ * Custom Fonts
232
+ * Custom Icons
233
+ * Go Pro
234
+
235
+ It is possible to control who can access Elementor menu links by using the PublishPress Capabilities Pro plugin. After installing PublishPress Capabilities Pro, go to “Capabilities”, then “Admin Menus” in your WordPress admin area.
236
+
237
+ In the top-left corner of this screen, choose the role that you want to edit. For example, you can restrict Elementor access for the “Administrator” role. If you do this, I would recommend making a copy of the Administrator role so that one role still has full Elementor access. Scroll down and you can enter a red X for any Elementor menu link that you don't want users in the Administrator role to access.
238
+
239
+ This approach works for the core Elementor plugin and can also be used for add-on plugins such as Essential Addons, Premium Addons, and others.
240
+
241
+ [Click here to learn about Elementor menu permissions](https://publishpress.com/knowledge-base/control-access-elementor-admin-menus/).
242
+
243
+ = How Do I Control Jetpack User Roles and Permissions? =
244
+
245
+ The Pro version of PublishPress Capabilities allows you to block access to admin menu links in the Jetpack plugin. This is useful because Jetpack has limited options for managing who can access the admin screens and important features.
246
+
247
+ Jetpack is a plugin built by Automattic, the company behind WordPress.com. This plugin offers many different services including backups, spam blocking, analytics, malware scans, contact forms, and more. PublishPress Capabilities can help you manage Jetpack permissisons.
248
+
249
+ When you first install the Jetpack plugin, you'll see one top-level menu link, plus at least 2 sub-menus:
250
+
251
+ * Dashboard
252
+ * Settings
253
+
254
+ It is possible to control who can access these Jetpack links by using the PublishPress Capabilities Pro plugin. After installing PublishPress Capabilities Pro, go to “Capabilities”, then “Admin Menus” in your WordPress admin area. In the top-left corner of this screen, choose the role that you want to edit. For example, you can restrict Jetpack access for the “Administrator” role. If you do this, I would recommend making a copy of the Administrator role so that one role still has full Jetpack access. Scroll down and you can enter a red X for any Jetpack menu link that you don't want users in the Administrator role to access. Now when an Administrator logs in to your site, they will not be able to see the Jetpack menu links that you have blocked. This approach works for the core Jetpack plugin and can also be used for add-on plugins such as Jetpack CRM and others.
255
+
256
+ [Click here to learn about Jetpack menu permissions](https://publishpress.com/knowledge-base/control-access-jetpack-admin-menus/).
257
+
258
+ = How Do I Control WPForms User Roles and Permissions? =
259
+
260
+ The Pro version of PublishPress Capabilities allows you to block access to admin menu links in the WP Forms plugin. This is useful because WPForms has limited options for managing who can access the admin screens and important features.
261
+
262
+ WPForms is one of the most popular WordPress contact form plugin with millions of active installs. WPForms allows you to create beautiful contact forms, feedback forms, subscription forms, payment forms, and more.
263
+
264
+ When you first install the WPForms plugin, you'll see one top-level menu link, plus at least 10 sub-menus:
265
+
266
+ * All Forms
267
+ * Add New
268
+ * Entries
269
+ * Settings
270
+ * Tools
271
+ * Addons
272
+ * Analytics
273
+ * SMTP
274
+ * About Us
275
+ * Community
276
+
277
+ It is possible to control who can access these WPForms plugin links by using the PublishPress Capabilities Pro plugin. After installing PublishPress Capabilities Pro, go to “Capabilities”, then “Admin Menus” in your WordPress admin area. In the top-left corner of this screen, choose the role that you want to edit. For example, you can restrict WPForms access for the “Administrator” role. If you do this, I would recommend making a copy of the Administrator role so that one role still has full WPForms access.
278
+
279
+ Scroll down and you can enter a red X for any WPForms menu link that you don't want users in the Administrator role to access. Now when an Administrator logs in to your site, they will not be able to see the WPForms menu links that you have blocked.
280
+
281
+ This approach works for the core WPForms plugin and can also be used for add-on plugins such as Form Abandonment, Form Locker, Offline Forms, and more.
282
+
283
+ [Click here to learn about WPForms menu permissions](https://publishpress.com/knowledge-base/control-access-wpforms-admin-menus/).
284
+
285
+ = How Do I Control The Events Calendar User Roles and Permissions? =
286
+
287
+ The Pro version of PublishPress Capabilities allows you to block access to admin menu links in The Events Calendar plugin. This is useful because The Events Calendar has limited options for managing who can access the admin screens and important features.
288
+
289
+ With The Events Calendar, you can easily create and manage an events calendar on your WordPress site. The plugin supports both in-person and virtual events. There are also many ways to extend the plugin for recurring events, ticket sales, user-submitted events and more.
290
+
291
+ When you first install the The Events Calendar plugin, you'll see one top-level menu link, plus at least 10 sub-menus:
292
+
293
+ * Events
294
+ * Add New
295
+ * Tag
296
+ * Events Categories
297
+ * Venues
298
+ * Organizers
299
+ * Import
300
+ * Settings
301
+ * Help
302
+ * Event Add-Ons
303
+
304
+ It is possible to control who can access these The Events Calendar plugin links by using the PublishPress Capabilities Pro plugin. After installing PublishPress Capabilities Pro, go to “Capabilities”, then “Admin Menus” in your WordPress admin area. In the top-left corner of this screen, choose the role that you want to edit. For example, you can restrict The Events Calendar access for the “Editor” role. Scroll down and you can enter a red X for any The Events Calendar menu link that you don't want users in the Editor role to access. Now when an Administrator logs in to your site, they will not be able to see the Events Calendar menu links that you have blocked:
305
+
306
+ This approach works for the core The Events Calendar plugin and can also be used for add-on plugins such as Virtual Events, Events Tickets, and more.
307
+
308
+ [Click here to learn about The Events Calendar menu permissions](https://publishpress.com/knowledge-base/control-access-the-events-calendar-admin-menus/).
309
+
310
+ = How Do I Control The Gravity Forms User Roles and Permissions? =
311
+
312
+ The Pro version of PublishPress Capabilities allows you to block access to admin menu links in the Gravity Forms plugin. This is useful because Gravity Forms has limited options for controlling who can access the admin screens.
313
+
314
+ Gravity Forms is perhaps the most popular contact form plugin for WordPress. You can build and publish your WordPress forms in just minutes. Choose your fields, configure your options and easily embed forms on your WordPress-powered site. Gravity Forms allows you to easily integrate with third party services such as PayPal, Mailchimp, and Zapier.
315
+
316
+ When you first install Gravity Forms, you'll see one top-level menu link, plus eight sub-menus.
317
+
318
+ * Forms
319
+ * New Form
320
+ * Entries
321
+ * Settings
322
+ * Import/Export
323
+ * Add-ons
324
+ * System Status
325
+ * Help
326
+
327
+ It is possible to control who can access these links by using the PublishPress Capabilities Pro plugin. After installing PublishPress Capabilities Pro, go to “Capabilities”, then “Admin Menus” in your WordPress admin area. In the top-left corner of this screen, choose the role that you want to edit. For example, you can restrict access for the “Editor” role. By default, Editors aren't given access to Gravity Forms, but site administrators often do they give them some access. Scroll down and you can enter a red X for any Gravity Forms menu link that you don't want users in the Editor role to access. Now when an Editor logs in to your site, they will not be able to see the blocked Gravity Forms menu links.
328
+
329
+ This approach works for the core Gravity Forms plugin and can also be used for add-on plugins from the official site, or third-party sites.
330
+
331
+ [Click here to learn about Gravity Forms menu permissions](https://publishpress.com/knowledge-base/control-access-gravity-forms-admin-menus/).
332
+
333
+ = What’s the Difference Between PublishPress Capabilities and PublishPress Permissions? =
334
+
335
+ We provide two plugins that allow you to control who can access what on your WordPress site. This is simple way to understand the difference:
336
+
337
+ * PublishPress Capabilities: Easy.
338
+ * PublishPress Permissions: Advanced.
339
+
340
+ OK, that's maybe too simple, so here's more detail:
341
+
342
+ * PublishPress Permissions allows you to customize the default WordPress permissions.
343
+ * PublishPress Permissions allows you to customize advanced permissions that go far beyond the scope of the WordPress core.
344
+
345
+ Here's an contrasting example when it comes to Post:
346
+
347
+ * PublishPress Capabilities allows you to control who can publish all your Posts.
348
+ * PublishPress Permissions allows you to control who can publish Posts with a particular Status, Category or Tag, or even Posts without a specific Category or Tag.
349
+
350
+ Here's another comparison:
351
+
352
+ * PublishPress Capabilities allows you to control who can read all your Pages.
353
+ * PublishPress Permissions allows you to control who can read Pages with a specific Status, Category or Tag, or even Pages with a particular parent Page.
354
+
355
+ = What's the correct way to spell PublishPress Capabilities? =
356
+
357
+ PublishPress is the official brandname. When writing about this user role editor plugin, please make sure to uppercase the Ps.
358
+
359
+ * PublishPress Capabilities (correct)
360
+ * Publish Press Capabilities (incorrect)
361
+ * publishpress capabilities (incorrect)
362
+ * publish press cpabilities (incorrect)
363
+
364
+ Common and incorrect typos include Capabilitise, Cpabilities, Capabiliites, Cspabilities, Capsbilities, Caoabilities, Calabilities.
365
+
366
  == Screenshots ==
367
 
368
  1. Control user permissions
377
  10. PublishPress Permission integration (showing capabilities from supplemental roles)
378
  11. Multisite support
379
 
 
 
 
 
 
380
  == Changelog ==
381
 
382
+ = 2.1 - 24 Jun 2021 =
383
+ * Feature : Editor Features restriction (new screen to block editor elements per-role)
384
+ * Fixed : If Media "Create" capability is selected / unselected by clicking Media caption or Create caption, the corresponding upload_files checkbox (in Other WP Core Capabilities section) is not toggled, leading to an apparant update failure
385
+ * Fixed : If Media "Create" capability is negated or un-negated, the corresponding upload_files checkbox (in Other WP Core Capabilities section) is not toggled, leading to an apparant update failure
386
+ * Fixed : PHP Warning if a role is stored without a valid capabilities array
387
+
388
  = 2.0.2 - 6 May 2021 =
389
  * Feature : Multisite - "sync options to all sites" checkbox. Copies "use create_posts capability", Type-Specific Capabilities, Taxonomy-Specific Capabilities, Detailed Taxonomy Capabilities settings
390
  * Fixed : Multisite - "sync role to all sites" did not work if main site ID is not 1