From dbb5f262cf54f0d279e7399eb68ed8605efb0be3 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 23 Jun 2020 10:50:32 -0400
Subject: [PATCH 01/40] Compat: Divi front end editor - non-Admins can't edit
new page
---
classes/PublishPress/Permissions/PostFilters.php | 2 +-
functions.php | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/classes/PublishPress/Permissions/PostFilters.php b/classes/PublishPress/Permissions/PostFilters.php
index 0a195e11..a2d7aef4 100644
--- a/classes/PublishPress/Permissions/PostFilters.php
+++ b/classes/PublishPress/Permissions/PostFilters.php
@@ -511,7 +511,7 @@ public function getPostsWhere($args)
if (isset($_REQUEST['context']) && ('edit' == $_REQUEST['context'])) {
$required_operation = (!empty($_REQUEST['parent_exclude'])) ? 'associate' : 'edit'; // @todo: better criteria
} else {
- $required_operation = 'read';
+ $required_operation = (presspermit_is_preview()) ? 'edit' : 'read';
}
} else {
$required_operation = (PWP::isFront() && !presspermit_is_preview()) ? 'read' : 'edit';
diff --git a/functions.php b/functions.php
index 57940b7e..650aeaea 100644
--- a/functions.php
+++ b/functions.php
@@ -21,6 +21,8 @@ function presspermit_is_preview() {
if (!$is_preview = is_preview()) {
if (defined('ELEMENTOR_VERSION')) {
$is_preview = !empty($_REQUEST['elementor-preview']);
+ } elseif (defined('ET_CORE')) {
+ $is_preview = !empty($_REQUEST['et_fb']);
}
}
From 339bcb1253faa636d3c58b7c8fb84ea9b8c19ed8 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 23 Jun 2020 11:01:38 -0400
Subject: [PATCH 02/40] If post editing is limited by term selection, default
new posts to an allowed term
---
.../Permissions/Collab/AdminFilters.php | 21 ++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/modules/presspermit-collaboration/classes/Permissions/Collab/AdminFilters.php b/modules/presspermit-collaboration/classes/Permissions/Collab/AdminFilters.php
index d4be1bd1..ce07afcd 100644
--- a/modules/presspermit-collaboration/classes/Permissions/Collab/AdminFilters.php
+++ b/modules/presspermit-collaboration/classes/Permissions/Collab/AdminFilters.php
@@ -42,7 +42,7 @@ function __construct()
add_filter('presspermit_add_exception', [$this, 'fltAddException']);
// Track autodrafts by postmeta in case WP sets their post_status to draft
- add_action('save_post', [$this, 'actSavePost'], 10, 2);
+ add_action('save_post', [$this, 'actSavePost'], 10, 3);
add_filter('wp_insert_post_empty_content', [$this, 'fltLogInsertPost'], 10, 2);
add_filter('save_post', [$this, 'fltUnloadCurrentUserExceptions']);
@@ -51,14 +51,29 @@ function __construct()
add_filter('editable_roles', [$this, 'fltEditableRoles'], 99);
}
- function actSavePost($post_id, $post)
+ function actSavePost($post_id, $post, $update)
{
if (!empty(presspermit()->flags['ignore_save_post'])) {
return;
}
- if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
+ if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
update_post_meta($post_id, '_pp_is_autodraft', true);
+
+ } elseif (!$update) {
+ // For configurations that limit access by term selection, need to default to an allowed term
+ if (!presspermit()->isAdministrator()) {
+ require_once(PRESSPERMIT_COLLAB_CLASSPATH . '/PostTermsSave.php');
+
+ foreach(get_object_taxonomies($post->post_type) as $taxonomy) {
+ if (!$terms = wp_get_object_terms($post->ID, $taxonomy, ['fields' => 'ids'])) {
+ if ($terms = PostTermsSave::fltPreObjectTerms($terms, $taxonomy)) {
+ wp_set_post_terms($post->ID, $terms, $taxonomy);
+ }
+ }
+ }
+ }
+ }
}
function fltUnloadCurrentUserExceptions($item_id)
From 060a52db45106e81c4cda78d9a6ce32bcba33127 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 23 Jun 2020 11:03:44 -0400
Subject: [PATCH 03/40] Support listing of uneditable posts on Posts / Pages
screen
Support capabilities list_posts, list_others_posts, list_pitch_pages, etc. for inclusion in Posts / Pages listing without ability to edit
---
.../PublishPress/Permissions/PostFilters.php | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/classes/PublishPress/Permissions/PostFilters.php b/classes/PublishPress/Permissions/PostFilters.php
index a2d7aef4..db1dfbe1 100644
--- a/classes/PublishPress/Permissions/PostFilters.php
+++ b/classes/PublishPress/Permissions/PostFilters.php
@@ -628,13 +628,30 @@ public function getPostsWhere($args)
}
if ($reqd_caps) { // note: this function is called only for listing query filters (not for user_has_cap filter)
- if (apply_filters(
+ if ($missing_caps = apply_filters(
'presspermit_query_missing_caps',
array_diff($reqd_caps, array_keys($user->allcaps)),
$reqd_caps,
$post_type,
$meta_cap
)) {
+ // Support list_posts, list_others_posts, list_pitch_pages etc. for listing uneditable posts on Posts screen
+ if (('edit' == $required_operation) && empty($args['has_cap_check']) && empty(presspermit()->flags['cap_filter_in_process'])) {
+ foreach($reqd_caps as $key => $cap) {
+ if (in_array($cap, $missing_caps)) {
+ $list_cap = str_replace('edit_', 'list_', $cap);
+
+ if (!empty($user->allcaps[$list_cap])) {
+ $reqd_caps[$key] = $list_cap;
+ }
+ }
+ }
+
+ if (!array_diff($reqd_caps, array_keys($user->allcaps))) {
+ $have_site_caps['user'][] = $status;
+ }
+ }
+
// remove "others" and "private" cap requirements for post author
$owner_reqd_caps = self::getBaseCaps($reqd_caps, $post_type);
From 63b6f67853ade3885dd2ce3e4461fa55af666701 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 23 Jun 2020 11:05:17 -0400
Subject: [PATCH 04/40] Tag version 3.2.2-beta
---
press-permit-core.php | 4 ++--
readme.txt | 5 +++++
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/press-permit-core.php b/press-permit-core.php
index 30914ce4..60b38031 100644
--- a/press-permit-core.php
+++ b/press-permit-core.php
@@ -5,7 +5,7 @@
* Description: Advanced yet accessible content permissions. Give users or groups type-specific roles. Enable or block access for specific posts or terms.
* Author: PublishPress
* Author URI: https://publishpress.com/
- * Version: 3.2.1
+ * Version: 3.2.2-rc
* Text Domain: press-permit-core
* Domain Path: /languages/
* Min WP Version: 4.9.7
@@ -98,7 +98,7 @@ function presspermit_load() {
return;
}
- define('PRESSPERMIT_VERSION', '3.2.1');
+ define('PRESSPERMIT_VERSION', '3.2.2-rc');
if (!$presspermit_loaded_by_pro) {
require_once(__DIR__ . '/includes/Core.php');
diff --git a/readme.txt b/readme.txt
index dc2766e4..9620699f 100644
--- a/readme.txt
+++ b/readme.txt
@@ -128,6 +128,11 @@ Press Permit Core + PP extension users: download PublishPress Permissions Pro fr
== Changelog ==
+= 3.2.2-rc =
+* Fixed : New post creation locked author out of further editing if editing permission restricted by term and necessary term was not selected (now auto-select allowed term if none selected)
+* Feature : Support capabilities list_posts, list_others_posts, list_pitch_pages, etc. for inclusion in Posts / Pages listing without ability to edit
+* Compat : Divi - non-Administrators could not edit new page on front end
+
= 3.2.1 - 1 Jun 2020 =
* Fixed : Supplemental roles were not effective on some sites
* Fixed : Menu management limitations were not applied
From f00f7809632e776250615213741f0359725fbd3b Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Wed, 24 Jun 2020 13:08:16 -0400
Subject: [PATCH 05/40] Fixed: false positive for detection of Press Permit Pro
<= 2.6
On Permissions > Settings > Install, the following caption was displayed even without a previous installation of Press Permit Pro:
'To temporarily restore Pro features before migrating to a publishpress.com account, delete this version and install Press Permit Core 2.6.x'
This occurred because of the move of the Collaborative Publishing module into the free plugin.
---
includes/SettingsTabInstall.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/includes/SettingsTabInstall.php b/includes/SettingsTabInstall.php
index 44f12477..6470ceb5 100644
--- a/includes/SettingsTabInstall.php
+++ b/includes/SettingsTabInstall.php
@@ -163,7 +163,7 @@ public function optionsUI()
);
}
- $downgrade_note = (is_array($opt_val) && count($opt_val) > 1) || get_option('ppce_version') || get_option('pps_version') || get_option('ppp_version');
+ $downgrade_note = (is_array($opt_val) && count($opt_val) > 1);
if ($msg || $downgrade_note || $key_string) :
$section = 'key'; // --- UPDATE KEY SECTION ---
From 1e064ae1794cee596a6fec88c0eb512db7747b97 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Wed, 24 Jun 2020 13:11:20 -0400
Subject: [PATCH 06/40] Tag version 3.2.2-rc2
---
press-permit-core.php | 4 ++--
readme.txt | 3 ++-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/press-permit-core.php b/press-permit-core.php
index 60b38031..cd265d32 100644
--- a/press-permit-core.php
+++ b/press-permit-core.php
@@ -5,7 +5,7 @@
* Description: Advanced yet accessible content permissions. Give users or groups type-specific roles. Enable or block access for specific posts or terms.
* Author: PublishPress
* Author URI: https://publishpress.com/
- * Version: 3.2.2-rc
+ * Version: 3.2.2-rc2
* Text Domain: press-permit-core
* Domain Path: /languages/
* Min WP Version: 4.9.7
@@ -98,7 +98,7 @@ function presspermit_load() {
return;
}
- define('PRESSPERMIT_VERSION', '3.2.2-rc');
+ define('PRESSPERMIT_VERSION', '3.2.2-rc2');
if (!$presspermit_loaded_by_pro) {
require_once(__DIR__ . '/includes/Core.php');
diff --git a/readme.txt b/readme.txt
index 9620699f..cc33fc7e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -128,9 +128,10 @@ Press Permit Core + PP extension users: download PublishPress Permissions Pro fr
== Changelog ==
-= 3.2.2-rc =
+= 3.2.2-rc2 =
* Fixed : New post creation locked author out of further editing if editing permission restricted by term and necessary term was not selected (now auto-select allowed term if none selected)
* Feature : Support capabilities list_posts, list_others_posts, list_pitch_pages, etc. for inclusion in Posts / Pages listing without ability to edit
+* Fixed : Permissions > Settings > Install displayed instructions for restoring a Press Permit Pro 2.6.x installation, even if none was installed (since 3.0)
* Compat : Divi - non-Administrators could not edit new page on front end
= 3.2.1 - 1 Jun 2020 =
From 7232777d559764d5ca0ea4b59be96ae987c6ede9 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Thu, 25 Jun 2020 15:47:38 -0400
Subject: [PATCH 07/40] Settings screen: Install tab used invalid logic to
detect PP Pro 2.6.x
Permissions > Settings > Install displayed instructions for restoring a Press Permit Pro 2.6.x installation, even if none was installed (since 3.0)
---
includes/SettingsTabInstall.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/includes/SettingsTabInstall.php b/includes/SettingsTabInstall.php
index 6470ceb5..44f12477 100644
--- a/includes/SettingsTabInstall.php
+++ b/includes/SettingsTabInstall.php
@@ -163,7 +163,7 @@ public function optionsUI()
);
}
- $downgrade_note = (is_array($opt_val) && count($opt_val) > 1);
+ $downgrade_note = (is_array($opt_val) && count($opt_val) > 1) || get_option('ppce_version') || get_option('pps_version') || get_option('ppp_version');
if ($msg || $downgrade_note || $key_string) :
$section = 'key'; // --- UPDATE KEY SECTION ---
From b6e6bf2e2e33356a7217a09e0c3f53710867e4c6 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Thu, 25 Jun 2020 15:51:39 -0400
Subject: [PATCH 08/40] Settings UI: remove "Hide non-editable posts" checkbox,
add new captions
Deprecation of this workaround corresponds to new capabilities support: list_posts, list_others_pages, etc.
---
.../PublishPress/Permissions/PostFilters.php | 6 ++++-
.../Permissions/UI/SettingsTabCore.php | 24 +++++++++----------
2 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/classes/PublishPress/Permissions/PostFilters.php b/classes/PublishPress/Permissions/PostFilters.php
index db1dfbe1..f96a8d7e 100644
--- a/classes/PublishPress/Permissions/PostFilters.php
+++ b/classes/PublishPress/Permissions/PostFilters.php
@@ -153,8 +153,12 @@ public function fltPostsClauses($clauses, $_wp_query = false, $args = [])
}
if (
+ // This solution is deprecated in favor of capability support for list_posts, list_others_pages, etc.
+ // But with removal of settings checkbox, need to maintain support for sites that rely on this previous workaround, which was enabled by constant PP_ADMIN_READONLY_LISTABLE
+ // (1) Sites that have the admin_hide_uneditable_posts option stored with false value
+ // (2) Sites that inadvertantly set options to defaults but want to restore this workaround. Now supporting an additional constant definition (disclosed by support as needed) rather than the checkbox UI.
is_admin() && (!$pp->moduleActive('collaboration') || defined('PP_ADMIN_READONLY_LISTABLE'))
- && !$pp->getOption('admin_hide_uneditable_posts')
+ && (!$pp->getOption('admin_hide_uneditable_posts') || defined('PP_ADMIN_NO_FILTER'))
) {
return $clauses;
}
diff --git a/classes/PublishPress/Permissions/UI/SettingsTabCore.php b/classes/PublishPress/Permissions/UI/SettingsTabCore.php
index 5eaf44e8..0cb3248d 100644
--- a/classes/PublishPress/Permissions/UI/SettingsTabCore.php
+++ b/classes/PublishPress/Permissions/UI/SettingsTabCore.php
@@ -52,7 +52,6 @@ public function optionCaptions($captions)
'display_user_profile_groups' => __('Permission Groups on User Profile', 'press-permit-core'),
'display_user_profile_roles' => __('Supplemental Roles on User Profile', 'press-permit-core'),
'new_user_groups_ui' => __('Select Permission Groups at User creation', 'press-permit-core'),
- 'admin_hide_uneditable_posts' => __('Hide non-editable posts', 'press-permit-core'),
'post_blockage_priority' => __('Post-specific Permissions take priority', 'press-permit-core'),
];
@@ -301,18 +300,19 @@ public function optionsUI()
optionCheckbox('display_branding', $tab, $section, '');
- $listable = defined('PP_ADMIN_READONLY_LISTABLE');
-
- $hint = ($pp->moduleExists('collaboration') && !$listable)
- ? __('Note: To allow listing of uneditable posts in wp-admin, define constant PP_ADMIN_READONLY_LISTABLE', 'press-permit-core')
- : '';
-
- $args = ($pp->moduleActive('collaboration') && !$listable)
- ? ['val' => 1, 'disabled' => true, 'no_storage' => true]
- : [];
-
- $ui->optionCheckbox('admin_hide_uneditable_posts', $tab, $section, $hint, '', $args);
+ if (defined('PP_ADMIN_READONLY_LISTABLE') && (!$pp->getOption('admin_hide_uneditable_posts') || defined('PP_ADMIN_POSTS_NO_FILTER'))) {
+ $hint = __('Unmodified from WordPress default behavior. To enable filtering, remove constant definition PP_ADMIN_READONLY_LISTABLE.', 'press-permit-core');
+ } else {
+ $hint = (!$pp->moduleActive('collaboration'))
+ ? __('Uneditable posts are hidden from wp-admin listings. To expose them, use a role editor to add desired capabilities: list_posts, list_other_pages etc.', 'press-permit-core')
+ : __('To customize editing permissions, enable the Collaborative Publishing module.', 'press-permit-core');
+ }
+ ?>
+
+ ', '', $hint);
?>
+
Date: Thu, 25 Jun 2020 15:59:11 -0400
Subject: [PATCH 09/40] Tag version 3.2.2
---
press-permit-core.php | 4 ++--
readme.txt | 6 +++---
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/press-permit-core.php b/press-permit-core.php
index cd265d32..5a5ba899 100644
--- a/press-permit-core.php
+++ b/press-permit-core.php
@@ -5,7 +5,7 @@
* Description: Advanced yet accessible content permissions. Give users or groups type-specific roles. Enable or block access for specific posts or terms.
* Author: PublishPress
* Author URI: https://publishpress.com/
- * Version: 3.2.2-rc2
+ * Version: 3.2.2
* Text Domain: press-permit-core
* Domain Path: /languages/
* Min WP Version: 4.9.7
@@ -98,7 +98,7 @@ function presspermit_load() {
return;
}
- define('PRESSPERMIT_VERSION', '3.2.2-rc2');
+ define('PRESSPERMIT_VERSION', '3.2.2');
if (!$presspermit_loaded_by_pro) {
require_once(__DIR__ . '/includes/Core.php');
diff --git a/readme.txt b/readme.txt
index cc33fc7e..3f221ffc 100644
--- a/readme.txt
+++ b/readme.txt
@@ -5,7 +5,7 @@ Tags: restrict, access, permissions, cms, user, private, category, pages, privac
Requires at least: 4.9.7
Tested up to: 5.4
Requires PHP: 5.6.20
-Stable tag: 3.2.1
+Stable tag: 3.2.2
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html
@@ -123,12 +123,12 @@ PublishPress Permissions creates and uses the following tables: pp_groups, pp_gr
== Upgrade Notice ==
-= 3.2.1 =
+= 3.2.2 =
Press Permit Core + PP extension users: download PublishPress Permissions Pro from publishpress.com instead of upgrading to this version.
== Changelog ==
-= 3.2.2-rc2 =
+= 3.2.2 - 29 Jun 2020 =
* Fixed : New post creation locked author out of further editing if editing permission restricted by term and necessary term was not selected (now auto-select allowed term if none selected)
* Feature : Support capabilities list_posts, list_others_posts, list_pitch_pages, etc. for inclusion in Posts / Pages listing without ability to edit
* Fixed : Permissions > Settings > Install displayed instructions for restoring a Press Permit Pro 2.6.x installation, even if none was installed (since 3.0)
From 72810af5a4f7c60c9e358e963d501f313c67d612 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Fri, 26 Jun 2020 15:50:09 -0400
Subject: [PATCH 10/40] Settings UI: reversed logic for Collaborative
Publishing activation check
---
classes/PublishPress/Permissions/UI/SettingsTabCore.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/classes/PublishPress/Permissions/UI/SettingsTabCore.php b/classes/PublishPress/Permissions/UI/SettingsTabCore.php
index 0cb3248d..f4b0a045 100644
--- a/classes/PublishPress/Permissions/UI/SettingsTabCore.php
+++ b/classes/PublishPress/Permissions/UI/SettingsTabCore.php
@@ -303,7 +303,7 @@ public function optionsUI()
if (defined('PP_ADMIN_READONLY_LISTABLE') && (!$pp->getOption('admin_hide_uneditable_posts') || defined('PP_ADMIN_POSTS_NO_FILTER'))) {
$hint = __('Unmodified from WordPress default behavior. To enable filtering, remove constant definition PP_ADMIN_READONLY_LISTABLE.', 'press-permit-core');
} else {
- $hint = (!$pp->moduleActive('collaboration'))
+ $hint = ($pp->moduleActive('collaboration'))
? __('Uneditable posts are hidden from wp-admin listings. To expose them, use a role editor to add desired capabilities: list_posts, list_other_pages etc.', 'press-permit-core')
: __('To customize editing permissions, enable the Collaborative Publishing module.', 'press-permit-core');
}
From 4cecdc4baeaee76ec10b0887504f4d1d76921239 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Fri, 26 Jun 2020 15:52:00 -0400
Subject: [PATCH 11/40] Fix invalid get_post_stati() call
Final two function arguments were outside closing parenthesis
---
.../classes/Permissions/Collab/Revisionary/Admin.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php b/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
index 9e38a332..74f9b2de 100644
--- a/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
+++ b/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
@@ -148,7 +148,7 @@ public function flt_additions_clause($clause, $operation, $post_type, $args)
}
if ( $revise_ids ) {
- $status_csv = "'" . implode("','", get_post_stati(['public' => true, 'private' => true]), 'names', 'or') . "'";
+ $status_csv = "'" . implode("','", get_post_stati(['public' => true, 'private' => true], 'names', 'or')) . "'";
$parent_clause []= "( {$args['src_table']}.post_author = $user->ID"
. " AND {$args['src_table']}.comment_count IN ('" . implode("','", $revise_ids) . "') AND {$args['src_table']}.post_status IN ($status_csv) )";
From a236f490b8e8c3e69888c0acb27578bb1d1c3936 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Fri, 26 Jun 2020 16:09:03 -0400
Subject: [PATCH 12/40] Revision Permissions for specific terms didn't enable
editing existing revisions
---
.../Permissions/Collab/Revisionary/Admin.php | 115 +++++++++---------
1 file changed, 55 insertions(+), 60 deletions(-)
diff --git a/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php b/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
index 74f9b2de..26580819 100644
--- a/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
+++ b/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
@@ -94,80 +94,75 @@ public function flt_additions_clause($clause, $operation, $post_type, $args)
&& !in_array($post_type, apply_filters('presspermit_unrevisable_types', []), true)) {
$user = presspermit()->getUser();
- if ( isset($args['ids']) ) { // PressPermit Core >= 2.6.2 @todo: eliminate else case?
+ if ('post' == $args['via_item_source']) {
$hide_others_revisions = rvy_get_option('revisor_lock_others_revisions')
&& (
- (!empty($type_obj->cap->edit_others_posts) && empty($type_obj->cap->edit_others_posts))
+ (!empty($type_obj->cap->edit_posts) && empty($type_obj->cap->edit_others_posts))
|| (!empty($type_obj->cap->edit_others_posts) && empty($user->allcaps[$type_obj->cap->edit_others_posts]))
);
- // If we are hiding other revisions from revisors, need to distinguish
- // between 'edit' exceptions and 'revise' exceptions (which are merged upstream for other reasons).
- if ($hide_others_revisions && empty($user->allcaps['edit_others_revisions'])) {
+ // If we are hiding other revisions from revisors, need to distinguish
+ // between 'edit' exceptions and 'revise' exceptions (which are merged upstream for other reasons).
+ if ($hide_others_revisions && empty($user->allcaps['edit_others_revisions'])) {
$revise_ids = [];
+
+ $via_item_type = (isset($args['via_item_type'])) ? $args['via_item_type'] : $post_type;
+ $revise_ids = $user->getExceptionPosts(
+ 'revise',
+ 'additional',
+ $via_item_type,
+ ['status' => $args['status']]
+ );
+
+ $edit_ids = ($revise_ids) ? array_diff($args['ids'], $revise_ids) : $args['ids'];
- switch ($args['via_item_source']) {
- case 'post':
- $via_item_type = (isset($args['via_item_type'])) ? $args['via_item_type'] : $post_type;
- $revise_ids = $user->getExceptionPosts(
- 'revise',
- 'additional',
- $via_item_type,
- ['status' => $args['status']]
- );
-
- break;
-
- case 'term':
- // @todo
-
- /*
- foreach(presspermit()->getEnabledTaxonomies(['object_type' => $post_type]) as $taxonomy) {
- $tt_ids = $user->getExceptionTerms(
- 'revise',
- 'additional',
- $post_type,
- $taxonomy,
- ['status' => $args['status'], 'merge_universals' => true]
- );
-
- $revise_ids = array_merge($revise_ids, $tt_ids);
- }
-*/
-
- break;
- }
-
- $edit_ids = ($revise_ids) ? array_diff($args['ids'], $revise_ids) : $args['ids'];
-
- if ( $edit_ids || $revise_ids ) {
- $parent_clause = array();
-
- if ( $edit_ids ) {
- $parent_clause []= "( {$args['src_table']}.comment_count IN ('" . implode("','", $edit_ids) . "') )";
- }
-
- if ( $revise_ids ) {
+ if ( $edit_ids || $revise_ids ) {
+ $parent_clause = [];
+
+ if ( $edit_ids ) {
+ $parent_clause []= "( {$args['src_table']}.comment_count IN ('" . implode("','", $edit_ids) . "') )";
+ }
+
+ if ( $revise_ids ) {
$status_csv = "'" . implode("','", get_post_stati(['public' => true, 'private' => true], 'names', 'or')) . "'";
$parent_clause []= "( {$args['src_table']}.post_author = $user->ID"
. " AND {$args['src_table']}.comment_count IN ('" . implode("','", $revise_ids) . "') AND {$args['src_table']}.post_status IN ($status_csv) )";
- }
-
- $parent_clause = 'AND (' . Arr::implode(' OR ', $parent_clause) . ' )';
-
+ }
+
+ $parent_clause = 'AND (' . Arr::implode(' OR ', $parent_clause) . ' )';
+
$append_clause .= " OR ( {$args['src_table']}.post_status IN ('pending-revision', 'future-revision') $parent_clause )";
- }
- } else {
- // Not hiding other users' revisions from Revisors, so list all posts with 'edit' or 'revise' exceptions regardless of author.
+ }
+ } else {
+ // Not hiding other users' revisions from Revisors, so list all posts with 'edit' or 'revise' exceptions regardless of author.
$append_clause .= " OR ( {$args['src_table']}.post_status IN ('pending-revision', 'future-revision')"
. " AND {$args['src_table']}.comment_count {$args['in_clause']} )";
- }
- } else {
- // Older PP Core version doesn't pass ids, so can't distinguish between 'edit' and 'revise' exceptions; retain previous behavior.
- $append_clause .= " OR ( {$args['src_table']}.post_status IN ('pending-revision', 'future-revision')"
- . " AND {$args['src_table']}.post_author = " . presspermit()->getUser()->ID
- . " AND {$args['src_table']}.comment_count {$args['in_clause']} )";
+ }
+ } elseif ('term' == $args['via_item_source']) {
+ $revise_tt_ids = [];
+
+ foreach(presspermit()->getEnabledTaxonomies(['object_type' => $post_type]) as $taxonomy) {
+ $tt_ids = $user->getExceptionTerms(
+ 'revise',
+ 'additional',
+ $post_type,
+ $taxonomy,
+ ['status' => $args['status'], 'merge_universals' => true]
+ );
+
+ $revise_tt_ids = array_merge($revise_tt_ids, $tt_ids);
+ }
+
+ if ($revise_tt_ids) {
+ global $wpdb;
+
+ $status_csv = "'" . implode("','", get_post_stati(['public' => true, 'private' => true], 'names', 'or')) . "'";
+
+ $parent_tt_clause = "( {$args['src_table']}.comment_count IN ( SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ('" . implode("','", $revise_tt_ids) . "') ) )";
+
+ $append_clause .= " OR ( {$args['src_table']}.post_status IN ('pending-revision', 'future-revision') AND $parent_tt_clause )";
+ }
}
}
From ccb170db2403ffd589fbc55bdb5bf1c5802698d0 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Fri, 3 Jul 2020 15:57:49 -0400
Subject: [PATCH 13/40] getPostStatuses(): add context parameter
This supports Status Control usage in Pro.
---
classes/PressShack/LibWP.php | 4 ++--
classes/PublishPress/Permissions/PostFilters.php | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/classes/PressShack/LibWP.php b/classes/PressShack/LibWP.php
index 1361fef5..78c35dfc 100644
--- a/classes/PressShack/LibWP.php
+++ b/classes/PressShack/LibWP.php
@@ -157,7 +157,7 @@ public static function doingCron()
}
// support array matching for post type
- public static function getPostStatuses($args, $return = 'names', $operator = 'and')
+ public static function getPostStatuses($args, $return = 'names', $operator = 'and', $params = [])
{
if (isset($args['post_type'])) {
$post_type = $args['post_type'];
@@ -174,7 +174,7 @@ public static function getPostStatuses($args, $return = 'names', $operator = 'an
$statuses = get_post_stati($args, $return, $operator);
}
- return apply_filters('presspermit_get_post_statuses', $statuses, $args, $return, $operator);
+ return apply_filters('presspermit_get_post_statuses', $statuses, $args, $return, $operator, $params);
}
public static function findPostType($post_id = 0, $return_default = true)
diff --git a/classes/PublishPress/Permissions/PostFilters.php b/classes/PublishPress/Permissions/PostFilters.php
index f96a8d7e..1f7d3e2c 100644
--- a/classes/PublishPress/Permissions/PostFilters.php
+++ b/classes/PublishPress/Permissions/PostFilters.php
@@ -386,7 +386,7 @@ public function fltPostsWhere($where, $args = [])
$valid_stati['future'] = 'future';
}
} else {
- $valid_stati = PWP::getPostStatuses(['internal' => false, 'post_type' => $post_types], 'names');
+ $valid_stati = PWP::getPostStatuses(['internal' => false, 'post_type' => $post_types], 'names', '', ['context' => 'edit']);
}
if (in_array('attachment', $post_types, true)) {
@@ -551,7 +551,7 @@ public function getPostsWhere($args)
$use_statuses = array_merge($use_statuses, $limit_statuses);
}
} else {
- $use_statuses = PWP::getPostStatuses(['internal' => false, 'post_type' => $post_types], 'object');
+ $use_statuses = PWP::getPostStatuses(['internal' => false, 'post_type' => $post_types], '', 'object', ['context' => 'edit']);
}
$use_statuses = apply_filters('presspermit_query_post_statuses', $use_statuses, $args );
From 6b6d920fd683a37ab1777f4e52efce347a26772e Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Fri, 3 Jul 2020 16:18:57 -0400
Subject: [PATCH 14/40] Remove obsolete commented code
This code was commented out when PublishPress Revisions was updated to support page parent revisioning.
---
.../Permissions/Collab/Revisionary/Admin.php | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php b/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
index 26580819..0bcd93c8 100644
--- a/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
+++ b/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
@@ -12,7 +12,7 @@ function __construct() {
}
add_filter('map_meta_cap', [$this, 'flt_mapMetaCap'], 1, 4);
- //add_filter('pre_post_parent', [$this, 'fltPageParent']);
+
add_filter('presspermit_get_exception_items', [$this, 'flt_get_exception_items'], 10, 5);
add_filter('presspermit_additions_clause', [$this, 'flt_additions_clause'], 10, 4);
@@ -72,18 +72,6 @@ public function flt_term_include_clause($clause, $args = [])
return $clause;
}
- /*
- public function fltPageParent($parent_id)
- {
- global $revisionary;
- if (!empty($revisionary->admin->revision_save_in_progress)) {
- do_action('presspermit_disable_page_parent_filter');
- }
-
- return $parent_id;
- }
- */
-
public function flt_additions_clause($clause, $operation, $post_type, $args)
{
//$args = compact( 'status', 'in_clause', 'src_table' )
From 05735ddab7409339e268e980d2d225a12e372663 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Fri, 3 Jul 2020 17:06:59 -0400
Subject: [PATCH 15/40] Settings > Install: invalid Press Permit Pro 2.6.x
migration caption
Settings > Install caption about restoring a Press Permit Pro 2.6.x installation, even if none was installed. Since version 3.0.
This occurred due to the Collaborative Publishing module being moved into Free.
---
includes/SettingsTabInstall.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/includes/SettingsTabInstall.php b/includes/SettingsTabInstall.php
index 44f12477..b92794e1 100644
--- a/includes/SettingsTabInstall.php
+++ b/includes/SettingsTabInstall.php
@@ -163,7 +163,7 @@ public function optionsUI()
);
}
- $downgrade_note = (is_array($opt_val) && count($opt_val) > 1) || get_option('ppce_version') || get_option('pps_version') || get_option('ppp_version');
+ $downgrade_note = (is_array($opt_val) && count($opt_val) > 1) || get_option('pps_version') || get_option('ppp_version');
if ($msg || $downgrade_note || $key_string) :
$section = 'key'; // --- UPDATE KEY SECTION ---
From fa85f3e9e42b771c6e2f44ec51f4d0102721e4d3 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Fri, 3 Jul 2020 17:55:33 -0400
Subject: [PATCH 16/40] Term-specific Permissions ineffective in some
configurations
Fixes #107
* Fixed : Restrictive term-specific Permissions were not correctly negated by permissive term-specific restrictions assigned to another role or group for the same user
* Compat : Revisions - Revision Permissions assigned for specific categories did not enable editing of existing revisions
---
.../Permissions/DB/Permissions.php | 20 ++++-
.../Permissions/Collab/Revisionary/Admin.php | 83 +++++++++++++++++++
2 files changed, 99 insertions(+), 4 deletions(-)
diff --git a/classes/PublishPress/Permissions/DB/Permissions.php b/classes/PublishPress/Permissions/DB/Permissions.php
index 23e1a585..21c13836 100644
--- a/classes/PublishPress/Permissions/DB/Permissions.php
+++ b/classes/PublishPress/Permissions/DB/Permissions.php
@@ -395,10 +395,7 @@ public static function addExceptionClauses($where, $required_operation, $post_ty
if ('edit' == $required_operation) {
if (!empty($user->except['revise_post']['term'][$taxonomy]['additional'][$post_type][''])) {
- if (!empty($tt_ids[''])) {
$revise_ttids['{published}'] = array_merge($revise_ttids['{published}'], $user->except['revise_post']['term'][$taxonomy]['additional'][$post_type]['']);
- $tt_ids[''] = array_diff($tt_ids[''], $revise_ttids['{published}']);
- }
}
}
@@ -626,7 +623,22 @@ public static function addTermRestrictionsClause($required_operation, $post_type
. "') ) $type_exemption_clause ) $term_additions_clause $post_additions_clause )";
}
- return $where;
+ $args = compact(
+ 'required_operation',
+ 'post_type',
+ 'src_table',
+ 'merge_additions',
+ 'exempt_post_types',
+ 'mod_types',
+ 'tx_args',
+ 'additional_ttids',
+ 'apply_object_additions',
+ 'term_additions_clause',
+ 'post_additions_clause',
+ 'type_exemption_clause'
+ );
+
+ return apply_filters('presspermit_term_restrictions_clause', $where, $args);
}
// returns propagated exceptions items for which (a) the base eitem no longer exists, or (b) the base eitem was changed to "item only"
diff --git a/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php b/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
index 0bcd93c8..535a4b32 100644
--- a/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
+++ b/modules/presspermit-collaboration/classes/Permissions/Collab/Revisionary/Admin.php
@@ -15,6 +15,8 @@ function __construct() {
add_filter('presspermit_get_exception_items', [$this, 'flt_get_exception_items'], 10, 5);
+ add_filter('presspermit_term_restrictions_clause', [$this, 'fltTermRestrictionsClause'], 10, 2);
+
add_filter('presspermit_additions_clause', [$this, 'flt_additions_clause'], 10, 4);
add_filter('presspermit_administrator_caps', [$this, 'flt_pp_administrator_caps'], 5);
@@ -229,6 +231,11 @@ public function flt_get_exception_items($exception_items, $operation, $mod_type,
$$var = $args[$var];
}
+ if ('term' == $via_item_source) {
+ // Don't implement term exceptions by merging with edit_post exceptions, due to complication of applying revision exceptions for published posts only
+ return $exception_items;
+ }
+
$user = presspermit()->getUser();
if (!isset($user->except['revise_post'])) {
@@ -262,6 +269,82 @@ public function flt_get_exception_items($exception_items, $operation, $mod_type,
return $exception_items;
}
+ // Apply term revision restrictions separately with status clause to avoid removing unpublished posts from the listing
+ function fltTermRestrictionsClause($where, $args) {
+ global $wpdb;
+
+ $defaults = array_fill_keys(
+ ['required_operation',
+ 'post_type',
+ 'src_table',
+ 'merge_additions',
+ 'exempt_post_types',
+ 'mod_types',
+ 'tx_args',
+ 'additional_ttids',
+ 'apply_object_additions',
+ 'term_additions_clause',
+ 'post_additions_clause',
+ 'type_exemption_clause'
+ ], ''
+ );
+
+ $args = array_merge($defaults, $args);
+ foreach (array_keys($defaults) as $var) {
+ $$var = $args[$var];
+ }
+
+ $user = presspermit()->getUser();
+
+ $excluded_ttids_published = [];
+
+ foreach (presspermit()->getEnabledTaxonomies($tx_args) as $taxonomy) {
+ $tx_additional_ids = ($merge_additions)
+ ? $user->getExceptionTerms($required_operation, 'additional', $post_type, $taxonomy, ['status' => '', 'merge_universals' => true])
+ : [];
+
+ foreach ($mod_types as $mod) {
+ if ($tt_ids = $user->getExceptionTerms('revise', $mod, $post_type, $taxonomy, ['status' => '', 'merge_universals' => true])) {
+ $tx_additional_ids = ($merge_additions)
+ ? $user->getExceptionTerms('revise', 'additional', $post_type, $taxonomy, ['status' => '', 'merge_universals' => true])
+ : [];
+
+ $published_stati_csv = implode("','", get_post_stati(['public' => true, 'private' => true], 'names', 'OR' ));
+
+ if ('include' == $mod) {
+ if ($tx_additional_ids) {
+ $tt_ids = array_merge($tt_ids, $tx_additional_ids);
+ }
+
+ $term_include_clause = apply_filters(
+ 'presspermit_term_include_clause',
+ "( $src_table.post_status NOT IN ('$published_stati_csv') OR $src_table.ID IN ( SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ('" . implode("','", $tt_ids) . "') ) )",
+ compact('tt_ids', 'src_table')
+ );
+
+ $where .= " AND ( $term_include_clause $term_additions_clause $post_additions_clause $type_exemption_clause )";
+ continue 2;
+
+ } else {
+ if ($tx_additional_ids) {
+ $tt_ids = array_diff($tt_ids, $tx_additional_ids);
+ }
+
+ $excluded_ttids_published = array_merge($excluded_ttids_published, $tt_ids);
+ }
+ }
+ }
+ }
+
+ if ($excluded_ttids_published) {
+ $where .= " AND ( ($src_table.post_status NOT IN ('$published_stati_csv') OR $src_table.ID NOT IN ( SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ('"
+ . implode("','", $excluded_ttids_published)
+ . "') ) $type_exemption_clause ) $term_additions_clause $post_additions_clause )";
+ }
+
+ return $where;
+ }
+
public static function adjust_revision_reqd_caps($reqd_caps, $object_type)
{
global $revisionary;
From e981e1250ffefd20f54ba14f4046f727d4d93f0c Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Fri, 3 Jul 2020 17:59:40 -0400
Subject: [PATCH 17/40] Update change log
---
readme.txt | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/readme.txt b/readme.txt
index 3f221ffc..e0870002 100644
--- a/readme.txt
+++ b/readme.txt
@@ -128,11 +128,15 @@ Press Permit Core + PP extension users: download PublishPress Permissions Pro fr
== Changelog ==
-= 3.2.2 - 29 Jun 2020 =
+= 3.2.2 - 6 Jul 2020 =
* Fixed : New post creation locked author out of further editing if editing permission restricted by term and necessary term was not selected (now auto-select allowed term if none selected)
+* Fixed : Term-specific Permissions were not applied correctly in some configurations
+* Fixed : Restrictive term-specific Permissions were not correctly negated by permissive term-specific restrictions assigned to another role or group for the same user
+* Compat : Revisions - Revision Permissions assigned for specific categories did not enable editing of existing revisions
+* Compat : Divi - non-Administrators could not edit new page on front end
+* Compat : PublishPress Authors - invalid error message for minimum PressPermit Pro version (note: Permissions is still not fully compatible with PublishPress Authors)
* Feature : Support capabilities list_posts, list_others_posts, list_pitch_pages, etc. for inclusion in Posts / Pages listing without ability to edit
* Fixed : Permissions > Settings > Install displayed instructions for restoring a Press Permit Pro 2.6.x installation, even if none was installed (since 3.0)
-* Compat : Divi - non-Administrators could not edit new page on front end
= 3.2.1 - 1 Jun 2020 =
* Fixed : Supplemental roles were not effective on some sites
From 1d14dd0b75e88284693ab514c2ac0027db867637 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Mon, 6 Jul 2020 18:09:59 -0400
Subject: [PATCH 18/40] Call is_main_site() instead of checking for $blog_id
equal to 1
Some networks have a main site with ID not equal to 1.
---
.../classes/Permissions/Import/DB/SourceConfig.php | 11 +++++------
.../classes/Permissions/Import/Importer.php | 4 ++--
.../Permissions/Import/UI/SettingsTabImport.php | 2 +-
3 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/modules/presspermit-import/classes/Permissions/Import/DB/SourceConfig.php b/modules/presspermit-import/classes/Permissions/Import/DB/SourceConfig.php
index a9f1fb44..dbec3a07 100644
--- a/modules/presspermit-import/classes/Permissions/Import/DB/SourceConfig.php
+++ b/modules/presspermit-import/classes/Permissions/Import/DB/SourceConfig.php
@@ -89,7 +89,7 @@ function hasUnimported($install_code) {
switch ($install_code) {
case 'rs' :
if (!$this->hasTable($wpdb->role_scope_rs)) {
- if (!MULTISITE || (1 != $blog_id))
+ if (!MULTISITE || !is_main_site())
return false;
}
@@ -97,8 +97,9 @@ function hasUnimported($install_code) {
$importer = RoleScoper::instance();
if (MULTISITE) {
- if (1 == $blog_id)
+ if (is_main_site()) {
return true;
+ }
$groups = []; // will deal with netwide groups in import function
} else {
@@ -127,10 +128,8 @@ function hasUnimported($install_code) {
if (!$wpdb->get_results("SHOW TABLES LIKE '$wpdb->pp_roles'"))
return false;
- if (MULTISITE) {
- global $blog_id;
- if (1 == $blog_id)
- return true;
+ if (MULTISITE && is_main_site()) {
+ return true;
}
require_once(PRESSPERMIT_IMPORT_CLASSPATH . '/DB/PressPermitBeta.php');
diff --git a/modules/presspermit-import/classes/Permissions/Import/Importer.php b/modules/presspermit-import/classes/Permissions/Import/Importer.php
index 58ba11f2..d4933a20 100644
--- a/modules/presspermit-import/classes/Permissions/Import/Importer.php
+++ b/modules/presspermit-import/classes/Permissions/Import/Importer.php
@@ -149,7 +149,7 @@ private function undoImport($run_id)
{
global $wpdb, $blog_id;
- if (is_multisite() && (1 === intval($blog_id))) {
+ if (is_multisite() && is_main_site()) {
$blog_ids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs ORDER BY blog_id");
$orig_blog_id = $blog_id;
} else {
@@ -196,7 +196,7 @@ private function undoAllImports()
global $wpdb, $blog_id;
if (is_multisite())
- $site_clause = (1 === intval($blog_id)) ? "AND site > 0" : "AND site = '$blog_id'"; // if on main site, will undo import for all sites
+ $site_clause = (is_main_site()) ? "AND site > 0" : "AND site = '$blog_id'"; // if on main site, will undo import for all sites
else
$site_clause = '';
diff --git a/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php b/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php
index 946dae1f..7ef56604 100644
--- a/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php
+++ b/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php
@@ -266,7 +266,7 @@ function actOptionsUI()
global $wpdb, $blog_id;
if (is_multisite())
- $site_clause = (1 === intval($blog_id)) ? "AND site > 0" : "AND site = '$blog_id'"; // if on main site, will undo import for all sites
+ $site_clause = (is_main_site()) ? "AND site > 0" : "AND site = '$blog_id'"; // if on main site, will undo import for all sites
else
$site_clause = '';
From ff962f2c9fe784d89beec0dbccd002293a9e5013 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Mon, 6 Jul 2020 18:14:48 -0400
Subject: [PATCH 19/40] Call is_multisite() instead of checking MULTISITE
constant directly
This avoids a PHP warning if the constant is not defined and provides better forward compatibility.
---
.../classes/Permissions/Import/DB/RoleScoper.php | 10 +++++-----
.../classes/Permissions/Import/DB/SourceConfig.php | 11 ++++++-----
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php b/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php
index a14eac13..f98575b9 100644
--- a/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php
+++ b/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php
@@ -41,7 +41,7 @@ function doImport($import_type = 'rs')
$this->tt_ids_by_taxonomy[$row->taxonomy][$row->term_id] = $row->term_taxonomy_id;
}
- if (MULTISITE && (1 === intval($blog_id))) {
+ if (is_multisite() && is_main_site()) {
$blog_ids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs ORDER BY blog_id");
$orig_blog_id = $blog_id;
$this->sites_examined = 0;
@@ -559,9 +559,9 @@ private function import_rs_item_roles()
$log_eitem_ids = [];
/*--------- group config and mapping setup ---------*/
- $rs_groups_table = (MULTISITE && get_site_option('scoper_mu_sitewide_groups')) ? $wpdb->base_prefix . 'groups_rs' : $wpdb->groups_rs;
- $pp_groups_table = (MULTISITE && get_site_option('presspermit_netwide_groups')) ? $wpdb->base_prefix . 'pp_groups' : $wpdb->pp_groups;
- $group_agent_type = (MULTISITE && get_site_option('presspermit_netwide_groups')) ? 'pp_net_group' : 'pp_group';
+ $rs_groups_table = (is_multisite() && get_site_option('scoper_mu_sitewide_groups')) ? $wpdb->base_prefix . 'groups_rs' : $wpdb->groups_rs;
+ $pp_groups_table = (is_multisite() && get_site_option('presspermit_netwide_groups')) ? $wpdb->base_prefix . 'pp_groups' : $wpdb->pp_groups;
+ $group_agent_type = (is_multisite() && get_site_option('presspermit_netwide_groups')) ? 'pp_net_group' : 'pp_group';
$imported_pp_groups = $wpdb->get_results($wpdb->prepare("SELECT source_id, import_id FROM $wpdb->ppi_imported WHERE run_id > 0 AND source_tbl = %d AND import_tbl = %d", $this->getTableCode($rs_groups_table), $this->getTableCode($pp_groups_table)), OBJECT_K);
$role_metagroups_rs = $wpdb->get_results("SELECT ID, group_meta_id FROM $rs_groups_table WHERE group_meta_id LIKE 'wp_role_%' OR group_meta_id = 'wp_anon'", OBJECT_K); // TODO: review role metagroup storage with netwide groups
$role_metagroups_pp = $wpdb->get_results("SELECT metagroup_id, ID FROM $wpdb->pp_groups WHERE metagroup_type = 'wp_role'", OBJECT_K);
@@ -886,7 +886,7 @@ private function import_rs_options()
}
- if (MULTISITE) {
+ if (is_multisite()) {
$rs_netwide = (int)get_site_option('scoper_mu_sitewide_groups');
$pp_netwide = (int)get_site_option('presspermit_netwide_groups');
diff --git a/modules/presspermit-import/classes/Permissions/Import/DB/SourceConfig.php b/modules/presspermit-import/classes/Permissions/Import/DB/SourceConfig.php
index dbec3a07..32eeeaa2 100644
--- a/modules/presspermit-import/classes/Permissions/Import/DB/SourceConfig.php
+++ b/modules/presspermit-import/classes/Permissions/Import/DB/SourceConfig.php
@@ -78,10 +78,10 @@ function hasInstallation($install_code)
}
function hasUnimported($install_code) {
- global $wpdb, $blog_id;
+ global $wpdb;
if (!$this->hasInstallation($install_code)) {
- if (!MULTISITE || (1 != $blog_id)) {
+ if (!is_multisite() || !is_main_site()) {
return false;
}
}
@@ -89,14 +89,15 @@ function hasUnimported($install_code) {
switch ($install_code) {
case 'rs' :
if (!$this->hasTable($wpdb->role_scope_rs)) {
- if (!MULTISITE || !is_main_site())
+ if (!is_multisite() || !is_main_site()) {
return false;
}
+ }
require_once(PRESSPERMIT_IMPORT_CLASSPATH . '/DB/RoleScoper.php');
$importer = RoleScoper::instance();
- if (MULTISITE) {
+ if (is_multisite()) {
if (is_main_site()) {
return true;
}
@@ -128,7 +129,7 @@ function hasUnimported($install_code) {
if (!$wpdb->get_results("SHOW TABLES LIKE '$wpdb->pp_roles'"))
return false;
- if (MULTISITE && is_main_site()) {
+ if (is_multisite() && is_main_site()) {
return true;
}
From 6b764abfc5387661be8e3a5614895feb1888c54d Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Mon, 6 Jul 2020 18:18:58 -0400
Subject: [PATCH 20/40] Call get_current_blog_id() instead of accessing global
$blog_id directly
This eliminates a global variable reference and provides better forward compatibility.
---
.../Permissions/UI/GroupsQuery.php | 4 +--
.../Permissions/Collab/UI/RoleUsageQuery.php | 7 +----
.../Permissions/Import/DB/RoleScoper.php | 28 +++++++++++++------
.../classes/Permissions/Import/Importer.php | 21 +++++++++-----
.../Import/UI/SettingsTabImport.php | 17 +++++++----
5 files changed, 47 insertions(+), 30 deletions(-)
diff --git a/classes/PublishPress/Permissions/UI/GroupsQuery.php b/classes/PublishPress/Permissions/UI/GroupsQuery.php
index 301bcd97..76987bc4 100644
--- a/classes/PublishPress/Permissions/UI/GroupsQuery.php
+++ b/classes/PublishPress/Permissions/UI/GroupsQuery.php
@@ -39,10 +39,8 @@ class GroupQuery
public function __construct($query = null)
{
if (!empty($query)) {
- global $blog_id;
-
$this->query_vars = wp_parse_args($query, [
- 'blog_id' => $blog_id,
+ 'blog_id' => get_current_blog_id(),
'include' => [],
'exclude' => [],
'search' => '',
diff --git a/modules/presspermit-collaboration/classes/Permissions/Collab/UI/RoleUsageQuery.php b/modules/presspermit-collaboration/classes/Permissions/Collab/UI/RoleUsageQuery.php
index ecc4b6d4..30af69a7 100644
--- a/modules/presspermit-collaboration/classes/Permissions/Collab/UI/RoleUsageQuery.php
+++ b/modules/presspermit-collaboration/classes/Permissions/Collab/UI/RoleUsageQuery.php
@@ -20,18 +20,14 @@ class RoleUsageQuery
var $total_roles = 0;
/**
- * PHP5 constructor
*
* @param string|array $args The query variables
* @return WP_Group_Query
*/
function __construct($query = null)
{
- //if ( !empty( $query ) ) {
- global $blog_id;
-
$this->query_vars = wp_parse_args($query, [
- 'blog_id' => $blog_id,
+ 'blog_id' => get_current_blog_id(),
'include' => [],
'exclude' => [],
'search' => '',
@@ -44,7 +40,6 @@ function __construct($query = null)
$this->prepare_query();
$this->query();
- //}
}
function prepare_query()
diff --git a/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php b/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php
index f98575b9..373a0603 100644
--- a/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php
+++ b/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php
@@ -27,7 +27,9 @@ public function __construct() // some PHP versions do not allow subclass constru
function doImport($import_type = 'rs')
{
- global $wpdb, $blog_id;
+ global $wpdb;
+
+ $blog_id = get_current_blog_id();
parent::doImport('rs');
@@ -95,7 +97,9 @@ function doImport($import_type = 'rs')
private function import_rs_groups()
{
- global $wpdb, $blog_id;
+ global $wpdb;
+
+ $blog_id = get_current_blog_id();
// if groups were set to netwide, sites may not have their own RS groups/members tables
if (!$wpdb->get_results("SHOW TABLES LIKE '$wpdb->groups_rs'") || !$wpdb->get_results("SHOW TABLES LIKE '$wpdb->user2group_rs'"))
@@ -176,7 +180,9 @@ private function import_rs_groups()
private function import_rs_site_roles()
{
- global $wpdb, $blog_id;
+ global $wpdb;
+
+ $blog_id = get_current_blog_id();
/*--------- group config and mapping setup ---------*/
$rs_groups_table = (MULTISITE && get_site_option('scoper_mu_sitewide_groups')) ? $wpdb->base_prefix . 'groups_rs' : $wpdb->groups_rs;
@@ -284,7 +290,9 @@ private function import_rs_site_roles()
private function import_rs_restrictions()
{
- global $wpdb, $wp_roles, $blog_id;
+ global $wpdb, $wp_roles;
+
+ $blog_id = get_current_blog_id();
$post_types = get_post_types(['public' => true, 'show_ui' => true], 'object', 'or');
$log_eitem_ids = []; // conversion of role_scope_rs.requirement_id to pp_conditions.assignment_id
@@ -547,7 +555,9 @@ private function import_rs_restrictions()
private function import_rs_item_roles()
{
- global $wpdb, $wp_roles, $blog_id;
+ global $wpdb, $wp_roles;
+
+ $blog_id = get_current_blog_id();
$cap_caster = presspermit()->capCaster();
@@ -897,7 +907,9 @@ private function import_rs_options()
private function import_option($opt_name, $opt_value, $source_opt_name, $imported_options)
{
- global $wpdb, $blog_id;
+ global $wpdb;
+
+ $blog_id = get_current_blog_id();
if ($row = $wpdb->get_row("SELECT option_id, option_value FROM $wpdb->options WHERE option_name = '$source_opt_name' LIMIT 1")) {
$source_id = $row->option_id;
@@ -1081,8 +1093,6 @@ private function get_exception_fields($rs_obj, $extra_data = [])
private function get_exception_id(&$stored_exceptions, $data, $restriction_id = 0)
{
- global $blog_id;
-
$exception_id = 0;
// safeguard against invalid exception specs
@@ -1110,7 +1120,7 @@ private function get_exception_id(&$stored_exceptions, $data, $restriction_id =
$stored_exceptions[] = (object)$data;
if ($restriction_id) {
- $log_data = ['run_id' => $this->run_id, 'source_tbl' => $this->getTableCode($wpdb->role_scope_rs), 'source_id' => $restriction_id, 'import_tbl' => $this->getTableCode($wpdb->ppc_exceptions), 'import_id' => $exception_id, 'site' => $blog_id];
+ $log_data = ['run_id' => $this->run_id, 'source_tbl' => $this->getTableCode($wpdb->role_scope_rs), 'source_id' => $restriction_id, 'import_tbl' => $this->getTableCode($wpdb->ppc_exceptions), 'import_id' => $exception_id, 'site' => get_current_blog_id()];
$wpdb->insert($wpdb->ppi_imported, $log_data);
}
}
diff --git a/modules/presspermit-import/classes/Permissions/Import/Importer.php b/modules/presspermit-import/classes/Permissions/Import/Importer.php
index d4933a20..b882d1f8 100644
--- a/modules/presspermit-import/classes/Permissions/Import/Importer.php
+++ b/modules/presspermit-import/classes/Permissions/Import/Importer.php
@@ -147,11 +147,11 @@ private function getTable($code)
private function undoImport($run_id)
{
- global $wpdb, $blog_id;
+ global $wpdb;
if (is_multisite() && is_main_site()) {
$blog_ids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs ORDER BY blog_id");
- $orig_blog_id = $blog_id;
+ $orig_blog_id = get_current_blog_id();
} else {
$blog_ids = ['1'];
}
@@ -193,14 +193,21 @@ private function undoImport($run_id)
private function undoAllImports()
{
- global $wpdb, $blog_id;
+ global $wpdb;
- if (is_multisite())
- $site_clause = (is_main_site()) ? "AND site > 0" : "AND site = '$blog_id'"; // if on main site, will undo import for all sites
- else
+ if (is_multisite()) {
+ $site_clause = (is_main_site()) ? "AND site > 0" : "AND site = %d"; // if on main site, will undo import for all sites
+ } else {
$site_clause = '';
+ }
+
+ $run_ids = $wpdb->get_col(
+ $wpdb->prepare(
+ "SELECT run_id FROM $wpdb->ppi_imported WHERE run_id > 0 $site_clause",
+ get_current_blog_id()
+ )
+ );
- $run_ids = $wpdb->get_col("SELECT run_id FROM $wpdb->ppi_imported WHERE run_id > 0 $site_clause");
foreach ($run_ids as $run_id) {
$this->undoImport($run_id);
}
diff --git a/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php b/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php
index 7ef56604..a04db6fe 100644
--- a/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php
+++ b/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php
@@ -263,14 +263,21 @@ function actOptionsUI()
0" : "AND site = '$blog_id'"; // if on main site, will undo import for all sites
- else
+ if (is_multisite()) {
+ $site_clause = (is_main_site()) ? "AND site > 0" : "AND site = %d"; // if on main site, will undo import for all sites
+ } else {
$site_clause = '';
+ }
- if ($wpdb->get_col("SELECT run_id FROM $wpdb->ppi_imported WHERE run_id > 0 $site_clause")) : ?>
+ if ($wpdb->get_col(
+ $wpdb->prepare(
+ "SELECT run_id FROM $wpdb->ppi_imported WHERE run_id > 0 $site_clause",
+ get_current_blog_id()
+ )
+ )
+ ) : ?>
From 4bdeb6bc88d179cf8b113e8f3b7130eb1b964c62 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Mon, 6 Jul 2020 18:20:19 -0400
Subject: [PATCH 21/40] is_multisite() instead of MULTISITE constant - another
instance
---
.../classes/Permissions/Import/DB/RoleScoper.php | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php b/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php
index 373a0603..4939010f 100644
--- a/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php
+++ b/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php
@@ -185,9 +185,9 @@ private function import_rs_site_roles()
$blog_id = get_current_blog_id();
/*--------- group config and mapping setup ---------*/
- $rs_groups_table = (MULTISITE && get_site_option('scoper_mu_sitewide_groups')) ? $wpdb->base_prefix . 'groups_rs' : $wpdb->groups_rs;
- $pp_groups_table = (MULTISITE && get_site_option('presspermit_netwide_groups')) ? $wpdb->base_prefix . 'pp_groups' : $wpdb->pp_groups;
- $group_agent_type = (MULTISITE && get_site_option('presspermit_netwide_groups')) ? 'pp_net_group' : 'pp_group';
+ $rs_groups_table = (is_multisite() && get_site_option('scoper_mu_sitewide_groups')) ? $wpdb->base_prefix . 'groups_rs' : $wpdb->groups_rs;
+ $pp_groups_table = (is_multisite() && get_site_option('presspermit_netwide_groups')) ? $wpdb->base_prefix . 'pp_groups' : $wpdb->pp_groups;
+ $group_agent_type = (is_multisite() && get_site_option('presspermit_netwide_groups')) ? 'pp_net_group' : 'pp_group';
$imported_pp_groups = $wpdb->get_results($wpdb->prepare("SELECT source_id, import_id FROM $wpdb->ppi_imported WHERE run_id > 0 AND source_tbl = %d AND import_tbl = %d", $this->getTableCode($rs_groups_table), $this->getTableCode($pp_groups_table)), OBJECT_K);
$role_metagroups_rs = $wpdb->get_results("SELECT ID, group_meta_id FROM $rs_groups_table WHERE group_meta_id LIKE 'wp_role_%' OR group_meta_id = 'wp_anon'", OBJECT_K);
From 197d586c15ba177f830f28ef667f1697fa7b8ed7 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Mon, 6 Jul 2020 18:21:20 -0400
Subject: [PATCH 22/40] Call get_main_site_id() instead of hardcoding side ID 1
Some networks have a main site with ID not equal to 1.
---
.../presspermit-import/classes/Permissions/Import/Importer.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/presspermit-import/classes/Permissions/Import/Importer.php b/modules/presspermit-import/classes/Permissions/Import/Importer.php
index b882d1f8..cdcb752b 100644
--- a/modules/presspermit-import/classes/Permissions/Import/Importer.php
+++ b/modules/presspermit-import/classes/Permissions/Import/Importer.php
@@ -153,7 +153,7 @@ private function undoImport($run_id)
$blog_ids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs ORDER BY blog_id");
$orig_blog_id = get_current_blog_id();
} else {
- $blog_ids = ['1'];
+ $blog_ids = [get_main_site_id()];
}
foreach ($blog_ids as $id) {
From 5ee7ff1a13fbb05b8865d7a0b9ea2ca9c11331f7 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Mon, 6 Jul 2020 19:51:10 -0400
Subject: [PATCH 23/40] is_multisite() instead of MULTISITE constant -
additional instance
---
.../classes/Permissions/Import/DB/DatabaseSetup.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/presspermit-import/classes/Permissions/Import/DB/DatabaseSetup.php b/modules/presspermit-import/classes/Permissions/Import/DB/DatabaseSetup.php
index 02e69270..de030fd2 100644
--- a/modules/presspermit-import/classes/Permissions/Import/DB/DatabaseSetup.php
+++ b/modules/presspermit-import/classes/Permissions/Import/DB/DatabaseSetup.php
@@ -6,7 +6,7 @@ class DatabaseSetup
function __construct($last_db_ver) {
require_once(PRESSPERMIT_IMPORT_ABSPATH . '/db-config.php');
- if (MULTISITE) {
+ if (is_multisite()) {
add_action('switch_blog', [$this, 'actMultisiteSupport']);
}
From a67bb53c9dc872fd6ef00a05ec62ec0a5b4f1b56 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Mon, 6 Jul 2020 20:14:04 -0400
Subject: [PATCH 24/40] Remove PressPermit logo from Pro promo on Settings >
Install
---
.../PublishPress/Permissions/UI/HintsPro.php | 11 +++++++----
common/img/pp-logo.png | Bin 17608 -> 0 bytes
2 files changed, 7 insertions(+), 4 deletions(-)
delete mode 100644 common/img/pp-logo.png
diff --git a/classes/PublishPress/Permissions/UI/HintsPro.php b/classes/PublishPress/Permissions/UI/HintsPro.php
index 1c62b191..49bd8b18 100644
--- a/classes/PublishPress/Permissions/UI/HintsPro.php
+++ b/classes/PublishPress/Permissions/UI/HintsPro.php
@@ -41,6 +41,10 @@ public static function proPromo()
background-color: white
}
+div.pp-logo {
+ padding-top:20px;
+}
+
div.pp-logo,
div.pp-logo img {
text-align: left;
@@ -51,7 +55,7 @@ public static function proPromo()
list-style: none;
padding-top: 10px;
text-align: left;
- margin-left: 50px;
+ margin-left: 25px;
margin-top: 0;
}
@@ -85,9 +89,8 @@ public static function proPromo()
-
-
-
+
+
-
diff --git a/common/img/pp-logo.png b/common/img/pp-logo.png
deleted file mode 100644
index 87addbf55f249f17af858b669e20f32f6a4af382..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 17608
zcmZ_0Wmr{Rv^Km|L_k`)L%O>`kOnE~?(S}+TafOO?(UTClJ4$CI^Ox5bH1P7zAo9Q
zd#yENjB&@95Gp4lh5&~H2Z2BkB*cXkAdoi|;Cn-ux8Q5LJY_t1gS8b`bAUkTN&oxv
z#x+mC83G}KNC*omx-On*IeDV>V`i>g4ex9c5DD>q4uGN%KPRE<4X>3`&*H2#^_8m?
zr&6ZWX7$zYCC){r_2ne)fw60FSXo&k{5WhcF~*tubo1CG;C$Oq
zc@Kw1`Ly;fKkUa_@GYb_2#r!M>xaMoSMcw0kRSj1-YHl`{ND#5U;g)fJ!?Mte?AWR
zvARrnagh1DaFcW}uVvVgqGh~jG3Sf#pO&vRmW7Hlp1hVJIrhcH;HKv?f}?R%a#>&A
zK*A9I=l#R~J`M5%qiw_IJzTsd5jvPMjQ&)TBThQ>Gz3B|9GFvxDvzp1#R*@J-H#V^
zjStC%3st3uhIAs2WHE)r#ha6bWlPqfb|Cl>vHOo2q<%#)mA?!vT(XYf}
z4Z0Eg8=_tuji$K6axhX)p!d*GqOIvdLCVf1P*qs`*&ik8?#+RcG=d9&EE+t?XD{GP`4(c);NN=eM
z+%zA4h=&IvlAJ<
zo3&L{9!-!5O%VBbMul-7o`rq9yUNM*2+?Z^@!IinHsdlqV%{S3wY6}Bp@Jq*F9~{@
z2nHHbh=RWQDdeYE0n5m|@hM^kamL9b)a|YF1xp
zkm97B7*hXn8H)0jiYX(4%^FCcm)_*OaG%@sX~d*ltDb!Aj%0VX4w8!McDx`x9O?dW
z9Kji^Ae4AN7he9kKf}EZ{w{m`Rv$PuTFhnd^=8|yE(#=+Iy=pzGO1OW&6ON1lhSVY
z|E_F_u)Xh{31o!oW`zG*OU^Qq#lk6VP2
i`223gZ!HEp+#>9hx5>a
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
From 88b4fb6bf165d8f94a7bc27facedde6251ffe395 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Mon, 6 Jul 2020 20:24:21 -0400
Subject: [PATCH 25/40] Update PermissionsHooks.php
---
classes/PublishPress/PermissionsHooks.php | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/classes/PublishPress/PermissionsHooks.php b/classes/PublishPress/PermissionsHooks.php
index b52b08b1..9ded34c9 100644
--- a/classes/PublishPress/PermissionsHooks.php
+++ b/classes/PublishPress/PermissionsHooks.php
@@ -173,8 +173,10 @@ public function actInit()
// --- version check ---
if ( ! $ver = get_option('presspermitpro_version') ) {
- if ( ! $ver = get_option('presspermit_version') ) {
- $ver = get_option('pp_c_version');
+ if (!defined('PRESSPERMIT_PRO_VERSION')) {
+ if ( ! $ver = get_option('presspermit_version') ) {
+ $ver = get_option('pp_c_version');
+ }
}
}
@@ -188,7 +190,10 @@ public function actInit()
}
update_option('presspermit_version', ['version' => PRESSPERMIT_VERSION, 'db_version' => PRESSPERMIT_DB_VERSION]);
- update_option('presspermitpro_version', ['version' => PRESSPERMIT_VERSION, 'db_version' => PRESSPERMIT_DB_VERSION]);
+
+ if (defined('PRESSPERMIT_PRO_VERSION')) {
+ update_option('presspermitpro_version', ['version' => PRESSPERMIT_PRO_VERSION, 'db_version' => PRESSPERMIT_DB_VERSION]);
+ }
}
if ($ver && !empty($ver['version'])) {
@@ -197,7 +202,10 @@ public function actInit()
require_once(PRESSPERMIT_CLASSPATH . '/PluginUpdated.php');
new Permissions\PluginUpdated($ver['version']);
update_option('presspermit_version', ['version' => PRESSPERMIT_VERSION, 'db_version' => PRESSPERMIT_DB_VERSION]);
- update_option('presspermitpro_version', ['version' => PRESSPERMIT_VERSION, 'db_version' => PRESSPERMIT_DB_VERSION]);
+
+ if (defined('PRESSPERMIT_PRO_VERSION')) {
+ update_option('presspermitpro_version', ['version' => PRESSPERMIT_PRO_VERSION, 'db_version' => PRESSPERMIT_DB_VERSION]);
+ }
}
if (is_multisite() && !$pp->getOption('wp_role_sync')) {
From 81734a9c24ff2ea1e6b7eaf5738d4142037f2153 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Mon, 6 Jul 2020 20:29:08 -0400
Subject: [PATCH 26/40] Eliminate old workaround which clashed with list_posts
solution
Note: changes for this feature were committed directly to the development branch.
---
.../Permissions/Collab/CapabilityFiltersAdmin.php | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php b/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php
index d3072258..9693ab38 100644
--- a/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php
+++ b/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php
@@ -189,21 +189,6 @@ function fltAdjustReqdCaps($reqd_caps, $orig_cap, $user_id, $args)
if (empty($current_user->allcaps['upload_files']) && !empty($current_user->allcaps['edit_files']))
$reqd_caps[$key] = 'edit_files';
}
-
- // PublishPress workaround (literal edit_posts capability required for dashboard widgets) @todo: still needed?
- if (is_blog_admin() && in_array($pagenow, ['edit.php']) && !did_action('admin_enqueue_scripts')) {
- $_reqd_caps = $reqd_caps;
-
- foreach (get_post_types(['public' => true, 'show_ui' => true], 'object', 'or') as $post_type => $type_obj) {
- if (!empty($current_user->allcaps[$type_obj->cap->edit_posts])) {
- $key = array_search('edit_posts', $reqd_caps);
- if (false !== $key) {
- $reqd_caps[$key] = $type_obj->cap->edit_posts;
- break;
- }
- }
- }
- }
}
//===============================
From 2eceec263563d2e2860969cf75f473c1218ac541 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 7 Jul 2020 15:01:51 -0400
Subject: [PATCH 27/40] composer.json: descriptive detail
Follows pattern of publishpress
---
composer.json | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/composer.json b/composer.json
index cc623e30..687aa3c4 100644
--- a/composer.json
+++ b/composer.json
@@ -1,12 +1,19 @@
{
"name": "publishpress/publishpress-permissions",
"type": "wordpress-plugin",
- "description": "",
+ "description": "WordPress plugin: control permissions for publishing workflow and presentation",
+ "homepage": "https://publishpress.com/",
"license": "GPL-2",
"authors": [
{
"name": "PublishPress",
"email": "help@publishpress.com"
+ },
+ {
+ "name": "Kevin Behrens",
+ "email": "kevin@agapetry.net",
+ "homepage": "https://agapetry.net",
+ "role": "Lead Developer"
}
],
"config": {
From c45f22c58f83c2e7be01ccd1a90fa263b079a10d Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 7 Jul 2020 15:12:55 -0400
Subject: [PATCH 28/40] set composer.json versions
---
composer.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/composer.json b/composer.json
index 687aa3c4..1a27fee2 100644
--- a/composer.json
+++ b/composer.json
@@ -20,8 +20,9 @@
"preferred-install": "dist"
},
"minimum-stability": "stable",
+ "prefer-stable": true,
"require": {
"php": ">=5.6.20",
- "publishpress/wordpress-version-notices": "dev-master"
+ "publishpress/wordpress-version-notices": "^1"
}
}
\ No newline at end of file
From 01855c27ed3fe4a81ed51faee9e12bee1c8fc7ab Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 7 Jul 2020 15:13:13 -0400
Subject: [PATCH 29/40] Update installed.json
---
vendor/composer/installed.json | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 25075d8c..f7e42717 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -104,17 +104,17 @@
},
{
"name": "publishpress/wordpress-version-notices",
- "version": "dev-master",
- "version_normalized": "9999999-dev",
+ "version": "1.1.1",
+ "version_normalized": "1.1.1.0",
"source": {
"type": "git",
"url": "https://github.com/publishpress/WordPress-Version-Notices.git",
- "reference": "45e6cb0f302165f3df820ff01c4f267f0b22517d"
+ "reference": "ba2b8eba33577d8c9351a9437e09af0e8f601a2c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/publishpress/WordPress-Version-Notices/zipball/45e6cb0f302165f3df820ff01c4f267f0b22517d",
- "reference": "45e6cb0f302165f3df820ff01c4f267f0b22517d",
+ "url": "https://api.github.com/repos/publishpress/WordPress-Version-Notices/zipball/ba2b8eba33577d8c9351a9437e09af0e8f601a2c",
+ "reference": "ba2b8eba33577d8c9351a9437e09af0e8f601a2c",
"shasum": ""
},
"require": {
@@ -124,7 +124,7 @@
"require-dev": {
"lucatume/wp-browser": "^2.2"
},
- "time": "2020-04-08T13:59:53+00:00",
+ "time": "2020-04-08T13:59:35+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
From 82be72401ed6f0c1fa6034a9f0d3a722ab02f759 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 7 Jul 2020 15:15:27 -0400
Subject: [PATCH 30/40] Update composer.lock
---
composer.lock | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/composer.lock b/composer.lock
index 138f0371..4ad73d83 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "b3e978061b9f6b0e1bd46295babac473",
+ "content-hash": "23a40e2c0056e01b9964bfb1b46b0743",
"packages": [
{
"name": "pimple/pimple",
@@ -107,16 +107,16 @@
},
{
"name": "publishpress/wordpress-version-notices",
- "version": "dev-master",
+ "version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/publishpress/WordPress-Version-Notices.git",
- "reference": "45e6cb0f302165f3df820ff01c4f267f0b22517d"
+ "reference": "ba2b8eba33577d8c9351a9437e09af0e8f601a2c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/publishpress/WordPress-Version-Notices/zipball/45e6cb0f302165f3df820ff01c4f267f0b22517d",
- "reference": "45e6cb0f302165f3df820ff01c4f267f0b22517d",
+ "url": "https://api.github.com/repos/publishpress/WordPress-Version-Notices/zipball/ba2b8eba33577d8c9351a9437e09af0e8f601a2c",
+ "reference": "ba2b8eba33577d8c9351a9437e09af0e8f601a2c",
"shasum": ""
},
"require": {
@@ -145,16 +145,14 @@
}
],
"description": "Library for displaying version notices for Pro plugins in WordPress.",
- "time": "2020-04-08T13:59:53+00:00"
+ "time": "2020-04-08T13:59:35+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": {
- "publishpress/wordpress-version-notices": 20
- },
- "prefer-stable": false,
+ "stability-flags": [],
+ "prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": ">=5.6.20"
From 95922b0666d8f553089cc2240ab8dcc776260063 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 7 Jul 2020 15:16:28 -0400
Subject: [PATCH 31/40] Update change log
---
readme.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/readme.txt b/readme.txt
index e0870002..78da0483 100644
--- a/readme.txt
+++ b/readme.txt
@@ -128,8 +128,9 @@ Press Permit Core + PP extension users: download PublishPress Permissions Pro fr
== Changelog ==
-= 3.2.2 - 6 Jul 2020 =
+= 3.2.2 - 7 Jul 2020 =
* Fixed : New post creation locked author out of further editing if editing permission restricted by term and necessary term was not selected (now auto-select allowed term if none selected)
+* Fixed : Multisite - Permissions menu was not displayed if plugin network-activated and main site ID is not 1
* Fixed : Term-specific Permissions were not applied correctly in some configurations
* Fixed : Restrictive term-specific Permissions were not correctly negated by permissive term-specific restrictions assigned to another role or group for the same user
* Compat : Revisions - Revision Permissions assigned for specific categories did not enable editing of existing revisions
From 84d92dccdab0816f1e0881415aeb18dee2f05bb5 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 7 Jul 2020 17:37:49 -0400
Subject: [PATCH 32/40] Disable the display_hints option by default
---
classes/PublishPress/Permissions.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/classes/PublishPress/Permissions.php b/classes/PublishPress/Permissions.php
index be80400c..ea07524e 100644
--- a/classes/PublishPress/Permissions.php
+++ b/classes/PublishPress/Permissions.php
@@ -128,7 +128,7 @@ private function load($args = [])
// need these keyed in separate array to force defaults if advanced options are disabled
$this->default_advanced_options = [
- 'display_hints' => 1,
+ 'display_hints' => 0,
'display_extension_hints' => 1,
'dynamic_wp_roles' => 0,
'non_admins_set_read_exceptions' => 1,
From 91406717bc8fdcfabffb7e805b71435a57f65fa1 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Tue, 7 Jul 2020 17:42:55 -0400
Subject: [PATCH 33/40] Settings > Core: remove Admin Ready-Only caption for
now
Leave the new list_posts capability support as an undocumented feature until Capabilities is updated to provide a configuration UI.
---
classes/PublishPress/Permissions/UI/SettingsTabCore.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/classes/PublishPress/Permissions/UI/SettingsTabCore.php b/classes/PublishPress/Permissions/UI/SettingsTabCore.php
index f4b0a045..cc9213ac 100644
--- a/classes/PublishPress/Permissions/UI/SettingsTabCore.php
+++ b/classes/PublishPress/Permissions/UI/SettingsTabCore.php
@@ -308,11 +308,13 @@ public function optionsUI()
: __('To customize editing permissions, enable the Collaborative Publishing module.', 'press-permit-core');
}
?>
+
|
Date: Tue, 7 Jul 2020 17:49:34 -0400
Subject: [PATCH 34/40] Add a few Capabilities descriptions on Permissions >
Advanced
---
.../classes/Permissions/Collab/UI/SettingsTabEditing.php | 3 +++
1 file changed, 3 insertions(+)
diff --git a/modules/presspermit-collaboration/classes/Permissions/Collab/UI/SettingsTabEditing.php b/modules/presspermit-collaboration/classes/Permissions/Collab/UI/SettingsTabEditing.php
index 5d9f6090..46167352 100644
--- a/modules/presspermit-collaboration/classes/Permissions/Collab/UI/SettingsTabEditing.php
+++ b/modules/presspermit-collaboration/classes/Permissions/Collab/UI/SettingsTabEditing.php
@@ -497,6 +497,9 @@ function flt_cap_descriptions($pp_caps)
$pp_caps['pp_associate_any_page'] = __('Disregard association exceptions (for all hierarchical post types)', 'press-permit-core');
$pp_caps['pp_list_all_files'] = __('Do not alter the Media Library listing provided by WordPress', 'press-permit-core');
+ $pp_caps['list_posts'] = __('On the Posts screen, satisfy a missing edit_posts capability by listing uneditable drafts', 'press-permit-core');
+ $pp_caps['list_others_posts'] = __("On the Posts screen, satisfy a missing edit_others_posts capability by listing other user's uneditable posts", 'press-permit-core');
+ $pp_caps['list_private_pages'] = __('On the Pages screen, satisfy a missing edit_private_pages capability by listing uneditable private pages', 'press-permit-core');
$pp_caps['pp_force_quick_edit'] = __('Make Quick Edit and Bulk Edit available to non-Administrators even though some inappropriate selections may be possible', 'press-permit-core');
return $pp_caps;
From ed303321242a62916e9e05a986d03c5fcb827a36 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Wed, 8 Jul 2020 11:57:09 -0400
Subject: [PATCH 35/40] Revert "Disable the display_hints option by default"
---
classes/PublishPress/Permissions.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/classes/PublishPress/Permissions.php b/classes/PublishPress/Permissions.php
index ea07524e..be80400c 100644
--- a/classes/PublishPress/Permissions.php
+++ b/classes/PublishPress/Permissions.php
@@ -128,7 +128,7 @@ private function load($args = [])
// need these keyed in separate array to force defaults if advanced options are disabled
$this->default_advanced_options = [
- 'display_hints' => 0,
+ 'display_hints' => 1,
'display_extension_hints' => 1,
'dynamic_wp_roles' => 0,
'non_admins_set_read_exceptions' => 1,
From d677cefa89765f6a754309e6bc93522bb05f8694 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Wed, 8 Jul 2020 12:03:41 -0400
Subject: [PATCH 36/40] Update change log
---
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/readme.txt b/readme.txt
index 78da0483..41b842d9 100644
--- a/readme.txt
+++ b/readme.txt
@@ -128,7 +128,7 @@ Press Permit Core + PP extension users: download PublishPress Permissions Pro fr
== Changelog ==
-= 3.2.2 - 7 Jul 2020 =
+= 3.2.2 - 8 Jul 2020 =
* Fixed : New post creation locked author out of further editing if editing permission restricted by term and necessary term was not selected (now auto-select allowed term if none selected)
* Fixed : Multisite - Permissions menu was not displayed if plugin network-activated and main site ID is not 1
* Fixed : Term-specific Permissions were not applied correctly in some configurations
From 63fd3e7d00f676dd85837a0cbcf282041b8cb7e1 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Wed, 8 Jul 2020 12:43:24 -0400
Subject: [PATCH 37/40] Update SettingsTabInstall.php
---
includes/SettingsTabInstall.php | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/includes/SettingsTabInstall.php b/includes/SettingsTabInstall.php
index b92794e1..7e51eddf 100644
--- a/includes/SettingsTabInstall.php
+++ b/includes/SettingsTabInstall.php
@@ -154,6 +154,10 @@ public function optionsUI()
'admin.php?page=presspermit-settings&pp_renewal=1'
);
}
+
+ } elseif ($modern_pro_version = get_option('presspermitpro_version')) {
+ $msg = __('Permissions Pro was previously active. You are now running the free version, with fewer features.', 'press-permit-core');
+
} elseif ($activated) {
$url = "https://publishpress.com/contact/?pp_topic=presspermit-migration&presspermit_account=$key_string";
@@ -163,7 +167,7 @@ public function optionsUI()
);
}
- $downgrade_note = (is_array($opt_val) && count($opt_val) > 1) || get_option('pps_version') || get_option('ppp_version');
+ $downgrade_note = empty($modern_pro_version) && ((is_array($opt_val) && count($opt_val) > 1) || get_option('pps_version') || get_option('ppp_version'));
if ($msg || $downgrade_note || $key_string) :
$section = 'key'; // --- UPDATE KEY SECTION ---
From 621eb6af40c09be95479c64fdb00bcb2a908a47f Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Wed, 8 Jul 2020 12:48:51 -0400
Subject: [PATCH 38/40] composer.json: set wordpress-version-notices version
---
composer.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/composer.json b/composer.json
index 1a27fee2..896de328 100644
--- a/composer.json
+++ b/composer.json
@@ -23,6 +23,6 @@
"prefer-stable": true,
"require": {
"php": ">=5.6.20",
- "publishpress/wordpress-version-notices": "^1"
+ "publishpress/wordpress-version-notices": "1.1.1"
}
}
\ No newline at end of file
From 52e7feff7b91a6d27793ee292c72c389fa9df1d2 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Wed, 8 Jul 2020 12:50:43 -0400
Subject: [PATCH 39/40] composer.json: fix whitespace
---
composer.json | 50 +++++++++++++++++++++++++-------------------------
1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/composer.json b/composer.json
index 896de328..709a610f 100644
--- a/composer.json
+++ b/composer.json
@@ -1,28 +1,28 @@
{
- "name": "publishpress/publishpress-permissions",
- "type": "wordpress-plugin",
- "description": "WordPress plugin: control permissions for publishing workflow and presentation",
- "homepage": "https://publishpress.com/",
- "license": "GPL-2",
- "authors": [
- {
- "name": "PublishPress",
- "email": "help@publishpress.com"
- },
- {
- "name": "Kevin Behrens",
- "email": "kevin@agapetry.net",
- "homepage": "https://agapetry.net",
- "role": "Lead Developer"
- }
- ],
- "config": {
- "preferred-install": "dist"
+ "name": "publishpress/publishpress-permissions",
+ "type": "wordpress-plugin",
+ "description": "WordPress plugin: control permissions for publishing workflow and presentation",
+ "homepage": "https://publishpress.com/",
+ "license": "GPL-2",
+ "authors": [
+ {
+ "name": "PublishPress",
+ "email": "help@publishpress.com"
},
- "minimum-stability": "stable",
- "prefer-stable": true,
- "require": {
- "php": ">=5.6.20",
- "publishpress/wordpress-version-notices": "1.1.1"
+ {
+ "name": "Kevin Behrens",
+ "email": "kevin@agapetry.net",
+ "homepage": "https://agapetry.net",
+ "role": "Lead Developer"
}
- }
\ No newline at end of file
+ ],
+ "config": {
+ "preferred-install": "dist"
+ },
+ "minimum-stability": "stable",
+ "prefer-stable": true,
+ "require": {
+ "php": ">=5.6.20",
+ "publishpress/wordpress-version-notices": "1.1.1"
+ }
+}
\ No newline at end of file
From c9f244d74a6789ac5d45295ac5e53b067e7f05c9 Mon Sep 17 00:00:00 2001
From: Kevin Behrens <43488774+agapetry@users.noreply.github.com>
Date: Wed, 8 Jul 2020 13:06:04 -0400
Subject: [PATCH 40/40] Update language files
---
languages/press-permit-core.mo | Bin 611 -> 611 bytes
languages/press-permit-core.po | 244 +++++++++++++++++++--------------
2 files changed, 138 insertions(+), 106 deletions(-)
diff --git a/languages/press-permit-core.mo b/languages/press-permit-core.mo
index e9c2742777ed2e92dcd9cc37fe4e7f64274ca49a..cbdd51c555cf4d8eea3864002df4019c0caaf90c 100644
GIT binary patch
delta 21
ccmaFN@|a~pCzrXdfrWyhk(H_G#>p2L0Z&o}`Tzg`
delta 21
ccmaFN@|a~pCzpw?fsultv6YG0#>p2L0Z#1(@&Et;
diff --git a/languages/press-permit-core.po b/languages/press-permit-core.po
index e601c841..b24eacbf 100644
--- a/languages/press-permit-core.po
+++ b/languages/press-permit-core.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PressPermit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-04-02 13:46-0500\n"
+"POT-Creation-Date: 2020-07-08 12:55-0500\n"
"PO-Revision-Date: \n"
"Last-Translator: Kevin Behrens \n"
"Language-Team: PublishPress \n"
@@ -16,48 +16,48 @@ msgstr ""
"X-Poedit-KeywordsList: __;_e;_c;__ngettext;_n;_x\n"
"X-Poedit-SearchPath-0: F:\\snapshot\\press-permit-core\n"
-#: F:\snapshot\press-permit-core/press-permit-core.php:177
+#: F:\snapshot\press-permit-core/press-permit-core.php:191
msgid "This plugin can be deleted."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:119
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:114
msgid "Subscribers"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:119
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:114
msgid "Subscriber"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:120
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:115
msgid "Contributors"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:120
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:115
msgid "Contributor"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:121
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:116
msgid "Authors"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:121
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:116
msgid "Author"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:122
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:117
msgid "Editors"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:122
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:117
msgid "Editor"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:138
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:133
#, php-format
msgid "Please %senable the Collaborative Publishing module%s for PublishPress Revisions integration."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:142
+#: F:\snapshot\press-permit-core/classes/PublishPress/PermissionsHooksAdmin.php:137
msgid "PublishPress Revisions integration requires the Collaborative Publishing module. Please notify your Administrator."
msgstr ""
@@ -481,7 +481,7 @@ msgid "Block:"
msgstr ""
#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentExceptionsAjax.php:104
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1314
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1317
msgid "Limit to:"
msgstr ""
@@ -510,7 +510,7 @@ msgstr ""
#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentExceptionsAjax.php:225
#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:95
#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:158
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:990
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:993
msgid "(all)"
msgstr ""
@@ -904,7 +904,7 @@ msgid "%s Roles"
msgstr ""
#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:688
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1098
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1101
msgid "Apply"
msgstr ""
@@ -946,93 +946,93 @@ msgstr ""
msgid "* %s"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:982
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:985
#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentsChecklist.php:119
msgid "edit"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1005
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1008
msgid "Remove"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1009
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1012
#, php-format
msgid "Assign for selected and sub-%s"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1013
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1016
#, php-format
msgid "Assign for selected %s only"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1017
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1020
#, php-format
msgid "Assign for sub-%s only"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1021
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1024
msgid "Assign for selected and sub-terms"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1025
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1028
msgid "Assign for selected term only"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1029
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1032
msgid "Assign for sub-terms only"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1080
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1083
#, php-format
msgid "Mirror to %s"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1084
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1087
#, php-format
msgid "Mirror to %s %s"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1116
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1119
msgid "* = exceptions redundant due to a corresponding "only these" entry"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1129
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1132
#, php-format
msgid "... = assigned for %1$s and sub-%1$s"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1133
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1136
#, php-format
msgid "* = assigned for sub-%s only"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1146
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1149
#, php-format
msgid "note: Permissions inherited from parent %1$s are not displayed. %2$sshow all%3$s"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1150
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1153
#, php-format
msgid "note: Permissions inherited from parent %1$s or terms are not displayed. %2$sshow all%3$s"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1213
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1216
msgid "Group Members"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1262
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1265
msgid "Copy Roles and Exceptions from:"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1285
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1288
msgid "Do Clone"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1315
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1318
msgid "Blocked:"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1319
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/AgentPermissionsUI.php:1322
msgid "Enabled:"
msgstr ""
@@ -1249,6 +1249,7 @@ msgid "To block direct access to unreadable files, %1$supgrade to Permissions Pr
msgstr ""
#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsItemExceptions.php:25
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:308
msgid "To customize editing permissions, enable the Collaborative Publishing module."
msgstr ""
@@ -1296,75 +1297,75 @@ msgstr ""
msgid "Show list of Permissions Pro features and screencasts"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:94
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:96
msgid "Customize editing permissions per-category or per-post"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:100
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:102
msgid "Limit category/term assignment and page parent selection"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:106
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:108
msgid "File Access: regulate direct access to uploaded files"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:112
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:114
msgid "Hidden Content Teaser"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:118
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:120
msgid "bbPress: customize viewing, topic creation or reply submission permissions per-forum"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:121
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:123
msgid "Date-limited membership in Permissions Groups"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:127
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:129
msgid "Custom Post Visibility statuses, fully implemented throughout wp-admin"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:133
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:135
msgid "Custom Moderation statuses for access-controlled, multi-step publishing workflow"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:139
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:141
msgid "Regulate permissions for PublishPress post statuses"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:145
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:147
msgid "Customize the moderated editing of published content with Revisionary"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:151
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:153
msgid "Grant supplemental content permissions to a BuddyPress group"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:157
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:159
msgid "WPML integration to mirror permissions to translations"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:161
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:163
msgid "Help ticket system"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:166
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:168
msgid "Knowledge Base"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:168
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:170
msgid "Detailed Feature Grid"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:170
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:172
msgid "Contact Us"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:172
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:174
msgid "Purchase"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:174
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/HintsPro.php:176
msgid "Hide"
msgstr ""
@@ -1701,76 +1702,81 @@ msgid "Select Permission Groups at User creation"
msgstr ""
#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:55
-msgid "Hide non-editable posts"
-msgstr ""
-
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:56
msgid "Post-specific Permissions take priority"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:82
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:81
msgid "Basic settings for content filtering, management and presentation."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:102
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:101
msgid "If disabled, manually \"blocked\" posts can be unblocked by specific Category / Term Permissions. Enabling this setting will provide more intuitive behavior, but may require configuration review and testing on prior installations."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:123
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:122
msgid "Modify permissions for these Taxonomies:"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:139
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:146
msgid "Modify permissions for these Post Types:"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:199
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:206
#, php-format
msgid "%s capabilities"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:217
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:224
#, php-format
msgid "Note: Custom post types enabled here require type-specific capabilities for editing (\"edit_things\" instead of \"edit_posts\"). You can %1$sassign corresponding supplemental roles%2$s to grant these capabilities. Adding the type-specific capabilities directly to a WordPress role definition also works."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:231
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:238
msgid "To customize bbPress forum permissions, activate the Compatibility Pack module."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:233
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:240
msgid "To customize bbPress forum permissions, activate your Permissions Pro license key."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:247
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:254
msgid "For most installations, leave this disabled. If enabled, corresponding edit and delete capabilities must be added to existing roles."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:250
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:257
msgid "For most installations, leave this disabled. See Editing tab for specialized Media Library permissions."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:251
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:258
msgid "For most installations, leave this disabled. For specialized Media Library permissions, install the Collaborative Publishing module."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:257
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:264
msgid "If enabled, the create_posts, create_pages, etc. capabilities will be enforced for all Filtered Post Types. NOTE: You will also need to use a WordPress role editor such as PublishPress Capabilities to add these capabilities to desired roles."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:274
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:281
msgid "Remove the \"Private:\" and \"Protected\" prefix from Post, Page titles"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:278
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:285
msgid "Remove unreadable Menu Items. If menu rendering problems occur with a third party plugin, disable this setting."
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:299
-msgid "Note: To allow listing of uneditable posts in wp-admin, define constant PP_ADMIN_READONLY_LISTABLE"
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:304
+msgid "Unmodified from WordPress default behavior. To enable filtering, remove constant definition PP_ADMIN_READONLY_LISTABLE."
+msgstr ""
+
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:307
+msgid "Uneditable posts are hidden from wp-admin listings. To expose them, use a role editor to add desired capabilities: list_posts, list_other_pages etc."
+msgstr ""
+
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:314
+#, php-format
+msgid "%sPosts / Pages Listing:%s %s"
msgstr ""
-#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:326
+#: F:\snapshot\press-permit-core/classes/PublishPress/Permissions/UI/SettingsTabCore.php:336
msgid "note: Groups and Roles are always displayed in \"Edit User\""
msgstr ""
@@ -2137,68 +2143,72 @@ msgstr ""
msgid "Your presspermit.com key has expired, but a PublishPress renewal discount may be available."
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:161
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:159
+msgid "Permissions Pro was previously active. You are now running the free version, with fewer features."
+msgstr ""
+
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:165
#, php-format
msgid "A presspermit.com key appears to be active. Contact us for assistance in migrating your account to publishpress.com."
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:177
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:181
msgid "Further details for your installation:"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:190
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:194
#, php-format
msgid "Original presspermit.com support key hash: %s (expires %s)"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:192
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:196
#, php-format
msgid "Original presspermit.com support key hash: %s"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:201
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:205
#, php-format
msgid "To temporarily restore Pro features before migrating to a publishpress.com account, delete this version and install Press Permit Core 2.6.x using Plugins > Add New > Upload."
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:239
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:243
#, php-format
msgid "%s details"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:246
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:250
#, php-format
msgid "PublishPress Permissions Version: %1$s %2$s"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:248
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:252
#, php-format
msgid "Database Schema Version: %s"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:254
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:258
#, php-format
msgid "WordPress Version: %s"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:258
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:262
#, php-format
msgid "PHP Version: %s"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:286
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:290
msgid "Change Log (since your current version)"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:289
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:293
msgid "Active Modules:"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:347
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:351
msgid "Inactive Modules:"
msgstr ""
-#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:396
+#: F:\snapshot\press-permit-core/includes/SettingsTabInstall.php:400
msgid "Pro Modules:"
msgstr ""
@@ -2231,11 +2241,11 @@ msgstr ""
msgid "Revisor"
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/AdminFilters.php:125
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/AdminFilters.php:140
msgid "term (manage)"
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/AdminFilters.php:161
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/AdminFilters.php:176
#, php-format
msgid "%s Manager"
msgstr ""
@@ -2256,22 +2266,22 @@ msgstr ""
msgid "You do not have permission to delete that Navigation Menu."
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:463
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:482
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:448
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:467
#, php-format
msgid "Go to %s"
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:469
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:454
#, php-format
msgid "The %s was saved, but you can no longer edit it."
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:476
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:461
msgid "Dashboard"
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:481
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/CapabilityFiltersAdmin.php:466
msgid "The requested modification was processed, but you can no longer edit the post."
msgstr ""
@@ -2407,17 +2417,17 @@ msgstr ""
msgid "CMS Page Tree View plugin: hide 'add' links (for specified hierarchical post type) based on user's association permissions"
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/NavMenus.php:363
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/NavMenus.php:341
#, php-format
msgid "You do not have permission to move the menu item \"%1$s\".
Return to Menu Editor"
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/NavMenus.php:370
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/NavMenus.php:348
#, php-format
msgid "You do not have permission to delete the menu item \"%1$s\".
Return to Menu Editor"
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/NavMenus.php:377
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/NavMenus.php:355
#, php-format
msgid "You do not have permission to edit the menu item \"%1$s\".
Return to Menu Editor"
msgstr ""
@@ -2904,6 +2914,18 @@ msgid "Do not alter the Media Library listing provided by WordPress"
msgstr ""
#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/UI/SettingsTabEditing.php:500
+msgid "On the Posts screen, satisfy a missing edit_posts capability by listing uneditable drafts"
+msgstr ""
+
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/UI/SettingsTabEditing.php:501
+msgid "On the Posts screen, satisfy a missing edit_others_posts capability by listing other user's uneditable posts"
+msgstr ""
+
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/UI/SettingsTabEditing.php:502
+msgid "On the Pages screen, satisfy a missing edit_private_pages capability by listing uneditable private pages"
+msgstr ""
+
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/UI/SettingsTabEditing.php:503
msgid "Make Quick Edit and Bulk Edit available to non-Administrators even though some inappropriate selections may be possible"
msgstr ""
@@ -2916,7 +2938,7 @@ msgstr ""
msgid "Workflow"
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/UI/Dashboard/NavMenu.php:57
+#: F:\snapshot\press-permit-core/modules/presspermit-collaboration/classes/Permissions/Collab/UI/Dashboard/NavMenu.php:93
msgid "You are not permitted to manage menu locations"
msgstr ""
@@ -3018,24 +3040,34 @@ msgstr ""
msgid "You are not allowed to manage Permissions settings"
msgstr ""
+#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/DB/PressPermitBeta.php:24
+msgid "Site Roles"
+msgstr ""
+
+#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/DB/PressPermitBeta.php:24
#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php:25
-msgid "Sites"
+msgid "Term / Object Roles"
msgstr ""
+#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/DB/PressPermitBeta.php:24
+msgid "Conditions"
+msgstr ""
+
+#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/DB/PressPermitBeta.php:24
#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php:25
-msgid "General Roles"
+msgid "Options"
msgstr ""
#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php:25
-msgid "Term / Object Roles"
+msgid "Sites"
msgstr ""
#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php:25
-msgid "Restrictions"
+msgid "General Roles"
msgstr ""
#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/DB/RoleScoper.php:25
-msgid "Options"
+msgid "Restrictions"
msgstr ""
#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php:42
@@ -3179,11 +3211,11 @@ msgstr ""
msgid "Once your import task is complete, you can eliminate this tab by disabling the %s module."
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php:278
+#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php:285
msgid "All imported groups, roles, exceptions and options will be deleted. Are you sure?"
msgstr ""
-#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php:282
+#: F:\snapshot\press-permit-core/modules/presspermit-import/classes/Permissions/Import/UI/SettingsTabImport.php:289
msgid "Undo All Imports"
msgstr ""