Created
January 30, 2017 03:24
-
-
Save ntwb/56ab5a4eab8bbcdc90fc2bdfc2c57838 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: bbPress - Add delete_posts to partipant role | |
Plugin URI: https://bbpress.org/forums/topic/allow-participants-to-trash-own-topics-and-posts/ | |
Description: | |
Version: | |
Author: | |
Author URI: | |
License: | |
License URI: | |
*/ | |
/*Customize the BBPress roles to allow Participants to trash topics*/ | |
add_filter( 'bbp_get_caps_for_role', 'ST_add_role_caps_filter', 10, 2 ); | |
function ST_add_role_caps_filter( $caps, $role ){ | |
// Only filter for roles we are interested in! | |
if( $role == 'bbp_participant' ) { | |
$new_caps = array( | |
// Primary caps | |
'spectate' => true, | |
'participate' => true, | |
'moderate' => false, | |
'throttle' => false, | |
'view_trash' => false, | |
// Forum caps | |
'publish_forums' => false, | |
'edit_forums' => false, | |
'edit_others_forums' => false, | |
'delete_forums' => false, | |
'delete_others_forums' => false, | |
'read_private_forums' => false, | |
'read_hidden_forums' => false, | |
// Topic caps | |
'publish_topics' => true, | |
'edit_topics' => true, | |
'edit_others_topics' => false, | |
'delete_topics' => true, | |
'delete_others_topics' => false, | |
'read_private_topics' => false, | |
// Reply caps | |
'publish_replies' => true, | |
'edit_replies' => true, | |
'edit_others_replies' => false, | |
'delete_replies' => true, | |
'delete_others_replies' => false, | |
'read_private_replies' => false, | |
// Topic tag caps | |
'manage_topic_tags' => false, | |
'edit_topic_tags' => false, | |
'delete_topic_tags' => false, | |
'assign_topic_tags' => true, | |
); | |
} | |
return $new_caps; | |
} | |
/*Fixes an issue that only allows mods to trash topics. | |
bbpress.trac.wordpress.org/changeset/5852 | |
bbpress.trac.wordpress.org/ticket/2685*/ | |
add_filter( 'bbp_map_reply_meta_caps', 'ST_tweak_trash_meta_caps', 11, 4 ); | |
add_filter( 'bbp_map_topic_meta_caps', 'ST_tweak_trash_meta_caps', 11, 4 ); | |
// tweak for replies | |
function ST_tweak_trash_meta_caps( $caps, $cap, $user_id, $args ){ | |
// apply only to delete_reply and delete_topic | |
if ( $cap == "delete_reply" || $cap == "delete_topic" ){ | |
// Get the post | |
$_post = get_post( $args[0] ); | |
if ( !empty( $_post ) ) { | |
// Get caps for post type object | |
$post_type = get_post_type_object( $_post->post_type ); | |
$caps = array(); | |
// Add 'do_not_allow' cap if user is spam or deleted | |
if ( bbp_is_user_inactive( $user_id ) ) { | |
$caps[] = 'do_not_allow'; | |
// Moderators can always edit forum content | |
} elseif ( user_can( $user_id, 'moderate' ) ) { | |
$caps[] = 'moderate'; | |
// User is author so allow edit if not in admin | |
} elseif ( ! is_admin() && ( (int) $user_id === (int) $_post->post_author ) ) { | |
$caps[] = $post_type->cap->delete_posts; | |
// Unknown so map to delete_others_posts | |
} else { | |
$caps[] = $post_type->cap->delete_others_posts; | |
} | |
} | |
} | |
// return the capabilities | |
return $caps; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment