/wp-content/plugins/buddypress/bp-forums/bbpress/bb-includes/functions.bb-capabilities.php
https://github.com/jazbek/nycga2 · PHP · 348 lines · 271 code · 20 blank · 57 comment · 47 complexity · dd459a19e671d654e2521d6126e8600d MD5 · raw file
- <?php
- /**
- * bbPress Roles and Capabilities Wrapping Functions.
- *
- * @package bbPress
- * @subpackage User
- */
- /**
- * Whether current user has capability or role.
- *
- * @since 0.7.2
- * @uses $bb_current_user Current User Object
- *
- * @param string $capability Capability or role name.
- * @return bool
- */
- function bb_current_user_can($capability) {
- global $bb_current_user;
- $args = array_slice(func_get_args(), 1);
- $args = array_merge(array($capability), $args);
- if ( empty($bb_current_user) ) {
- $retvalue = false;
- if ( ( $capability == 'write_topic' || $capability == 'write_topics' ) && !bb_is_login_required() )
- $retvalue = true;
- } else {
- $retvalue = call_user_func_array(array(&$bb_current_user, 'has_cap'), $args);
- }
-
- // Use bb_user_has_cap whenever possible! This will not work everywhere.
- return apply_filters('bb_current_user_can', $retvalue, $capability, $args);
- }
- /**
- * Give a user the default role
- *
- * @since 0.7.2
- *
- * @param BP_User $user User object to give default role to
- */
- function bb_give_user_default_role( $user ) {
- if ( !( is_object($user) && is_a($user, 'BP_User') ) )
- return;
- $user->set_role('member');
- }
- /**
- * Setup all default roles and associate them with capabilities
- *
- * @since 0.7.2
- *
- * @param BP_Roles $roles Roles object to add default roles to
- */
- function bb_init_roles( &$roles ) {
- $roles->add_role( 'keymaster', __('Key Master'), array(
- 'use_keys' => true, // Verb forms of roles - keymaster
- 'administrate' => true, // administrator
- 'moderate' => true, // moderator
- 'participate' => true, // member
- 'keep_gate' => true, // Make new Key Masters //+
- 'import_export' => true, // Import and export data //+
- 'recount' => true, // bb-do-counts.php //+
- 'manage_options' => true, // backend //+
- 'manage_themes' => true, // Themes //+
- 'manage_plugins' => true, // Plugins //+
- 'manage_options' => true, // Options //+
- 'edit_users' => true,
- 'manage_tags' => true, // Rename, Merge, Destroy
- 'edit_others_favorites' => true,
- 'manage_forums' => true, // Add/Rename forum
- 'delete_forums' => true, // Delete forum
- 'delete_topics' => true,
- 'close_topics' => true,
- 'stick_topics' => true,
- 'move_topics' => true,
- 'view_by_ip' => true, // view-ip.php
- 'edit_closed' => true, // Edit closed topics
- 'edit_deleted' => true, // Edit deleted topics/posts
- 'browse_deleted' => true, // Use 'deleted' view
- 'edit_others_tags' => true,
- 'edit_others_topics' => true,
- 'delete_posts' => true,
- 'throttle' => true, // Post back to back arbitrarily quickly
- 'ignore_edit_lock' => true,
- 'edit_others_posts' => true,
- 'edit_favorites' => true,
- 'edit_tags' => true,
- 'edit_topics' => true, // Edit title, resolution status
- 'edit_posts' => true,
- 'edit_profile' => true,
- 'write_topics' => true,
- 'write_posts' => true,
- 'change_password' => true,
- 'read' => true
- ) );
- $roles->add_role( 'administrator', __('Administrator'), array(
- 'administrate' => true,
- 'moderate' => true,
- 'participate' => true,
- 'edit_users' => true, //+
- 'edit_others_favorites' => true, //+
- 'manage_forums' => true, //+
- 'delete_forums' => true, //+
- 'manage_tags' => true,
- 'delete_topics' => true,
- 'close_topics' => true,
- 'stick_topics' => true,
- 'move_topics' => true,
- 'view_by_ip' => true,
- 'edit_closed' => true,
- 'edit_deleted' => true,
- 'browse_deleted' => true,
- 'edit_others_tags' => true,
- 'edit_others_topics' => true,
- 'delete_posts' => true,
- 'throttle' => true,
- 'ignore_edit_lock' => true,
- 'edit_others_posts' => true,
- 'edit_favorites' => true,
- 'edit_tags' => true,
- 'edit_topics' => true,
- 'edit_posts' => true,
- 'edit_profile' => true,
- 'write_topics' => true,
- 'write_posts' => true,
- 'change_password' => true,
- 'read' => true
- ) );
- $roles->add_role( 'moderator', __('Moderator'), array(
- 'moderate' => true,
- 'participate' => true,
- 'manage_tags' => true, //+
- 'delete_topics' => true, //+
- 'close_topics' => true, //+
- 'stick_topics' => true, //+
- 'move_topics' => true, //+
- 'view_by_ip' => true, //+
- 'edit_closed' => true, //+
- 'edit_deleted' => true, //+
- 'browse_deleted' => true, //+
- 'edit_others_tags' => true, //+
- 'edit_others_topics' => true, //+
- 'delete_posts' => true, //+
- 'throttle' => true, //+
- 'ignore_edit_lock' => true, //+
- 'edit_others_posts' => true, //+
- 'edit_favorites' => true,
- 'edit_tags' => true,
- 'edit_topics' => true,
- 'edit_posts' => true,
- 'edit_profile' => true,
- 'write_topics' => true,
- 'write_posts' => true,
- 'change_password' => true,
- 'read' => true
- ) );
- $roles->add_role( 'member', __('Member'), array(
- 'participate' => true,
- 'edit_favorites' => true,
- 'edit_tags' => true,
- 'edit_topics' => true,
- 'edit_posts' => true,
- 'edit_profile' => true,
- 'write_topics' => true,
- 'write_posts' => true,
- 'change_password' => true,
- 'read' => true
- ) );
- $roles->add_role( 'inactive', __('Inactive'), array(
- 'change_password' => true,
- 'read' => true
- ) );
- $roles->add_role( 'blocked', __('Blocked'), array(
- 'not_play_nice' => true // Madness - a negative capability. Don't try this at home.
- ) );
- }
- /**
- * Map meta capabilities to primitive capabilities.
- *
- * This does not actually compare whether the user ID has the actual capability,
- * just what the capability or capabilities are. Meta capability list value can
- * be 'delete_user', 'edit_user', 'delete_post', 'delete_page', 'edit_post',
- * 'edit_page', 'read_post', or 'read_page'.
- *
- * @since 0.7.2
- *
- * @param array $caps Previously existing capabilities
- * @param string $cap Capability name.
- * @param int $user_id User ID.
- * @return array Actual capabilities for meta capability.
- */
- function bb_map_meta_cap( $caps, $cap, $user_id, $args ) {
- // Unset the meta cap
- if ( false !== $cap_pos = array_search( $cap, $caps ) )
- unset( $caps[$cap_pos] );
- switch ( $cap ) {
- case 'write_post':
- $caps[] = 'write_posts';
- break;
- case 'edit_post':
- // edit_posts, edit_others_posts, edit_deleted, edit_closed, ignore_edit_lock
- if ( !$bb_post = bb_get_post( $args[0] ) ) {
- $caps[] = 'magically_provide_data_given_bad_input';
- return $caps;
- }
- if ( $user_id == $bb_post->poster_id )
- $caps[] = 'edit_posts';
- else
- $caps[] = 'edit_others_posts';
- if ( $bb_post->post_status == '1' )
- $caps[] = 'edit_deleted';
- if ( !topic_is_open( $bb_post->topic_id ) )
- $caps[] = 'edit_closed';
- $post_time = bb_gmtstrtotime( $bb_post->post_time );
- $curr_time = time() + 1;
- $edit_lock = bb_get_option( 'edit_lock' );
- if ( $edit_lock >= 0 && $curr_time - $post_time > $edit_lock * 60 )
- $caps[] = 'ignore_edit_lock';
- break;
- case 'delete_post' :
- // edit_deleted, delete_posts
- if ( !$bb_post = bb_get_post( $args[0] ) ) {
- $caps[] = 'magically_provide_data_given_bad_input';
- return $caps;
- }
- if ( 0 != $bb_post->post_status )
- $caps[] = 'edit_deleted';
- // NO BREAK
- case 'manage_posts' : // back compat
- $caps[] = 'delete_posts';
- break;
- case 'write_topic':
- $caps[] = 'write_topics';
- break;
- case 'edit_topic':
- // edit_closed, edit_deleted, edit_topics, edit_others_topics
- if ( !$topic = get_topic( $args[0] ) ) {
- $caps[] = 'magically_provide_data_given_bad_input';
- return $caps;
- }
- if ( !topic_is_open( $args[0]) )
- $caps[] = 'edit_closed';
- if ( '1' == $topic->topic_status )
- $caps[] = 'edit_deleted';
- if ( $user_id == $topic->topic_poster )
- $caps[] = 'edit_topics';
- else
- $caps[] = 'edit_others_topics';
- break;
- case 'move_topic' :
- $caps[] = 'move_topics';
- break;
- case 'stick_topic' :
- $caps[] = 'stick_topics';
- break;
- case 'close_topic' :
- $caps[] = 'close_topics';
- break;
- case 'delete_topic' :
- $caps[] = 'delete_topics';
- add_filter( 'get_topic_where', 'bb_no_where', 9999 );
- if ( !$topic = get_topic( $args[0] ) ) {
- $caps[] = 'magically_provide_data_given_bad_input';
- return $caps;
- }
- if ( 0 != $topic->topic_status )
- $caps[] = 'edit_deleted';
- remove_filter( 'get_topic_where', 'bb_no_where', 9999 );
- break;
- case 'manage_topics' :
- // back compat
- $caps[] = 'move_topics';
- $caps[] = 'stick_topics';
- $caps[] = 'close_topics';
- $caps[] = 'delete_topics';
- break;
- case 'add_tag_to':
- // edit_closed, edit_deleted, edit_tags;
- if ( !$topic = get_topic( $args[0] ) ) {
- $caps[] = 'magically_provide_data_given_bad_input';
- return $caps;
- }
- if ( !topic_is_open( $topic->topic_id ) )
- $caps[] = 'edit_closed';
- if ( '1' == $topic->topic_status )
- $caps[] = 'edit_deleted';
- $caps[] = 'edit_tags';
- break;
- case 'edit_tag_by_on':
- // edit_closed, edit_deleted, edit_tags, edit_others_tags
- if ( !$topic = get_topic( $args[1] ) ) {
- $caps[] = 'magically_provide_data_given_bad_input';
- return $caps;
- }
- if ( !topic_is_open( $topic->topic_id ) )
- $caps[] = 'edit_closed';
- if ( '1' == $topic->topic_status )
- $caps[] = 'edit_deleted';
- if ( $user_id == $args[0] )
- $caps[] = 'edit_tags';
- else
- $caps[] = 'edit_others_tags';
- break;
- case 'edit_user':
- // edit_profile, edit_users;
- if ( $user_id == $args[0] )
- $caps[] = 'edit_profile';
- else
- $caps[] = 'edit_users';
- break;
- case 'edit_favorites_of':
- // edit_favorites, edit_others_favorites;
- if ( $user_id == $args[0] )
- $caps[] = 'edit_favorites';
- else
- $caps[] = 'edit_others_favorites';
- break;
- case 'delete_forum':
- $caps[] = 'delete_forums';
- break;
- case 'change_user_password':
- // change_password, edit_users
- $caps[] = 'change_password';
- if ( $user_id != $args[0] )
- $caps[] = 'edit_users';
- break;
- default:
- // If no meta caps match, return the original cap.
- $caps[] = $cap;
- }
- return $caps;
- }