Skip to content

Instantly share code, notes, and snippets.

@ntwb
Created January 30, 2017 03:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ntwb/56ab5a4eab8bbcdc90fc2bdfc2c57838 to your computer and use it in GitHub Desktop.
Save ntwb/56ab5a4eab8bbcdc90fc2bdfc2c57838 to your computer and use it in GitHub Desktop.
<?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