| 396 | // Third party registration of additional capabilities, without assignment to a particular role |
| 397 | function register_cap($cap) { |
| 398 | $caplist = get_settings('caplist'); |
| 399 | if ( !in_array($cap, (array) $caplist) ) { |
| 400 | $caplist[] = $cap; |
| 401 | $caplist = array_unique($caplist); |
| 402 | sort($caplist); |
| 403 | update_option('caplist', $caplist); |
| 404 | } |
| 405 | } |
| 406 | |
| 407 | // Third party unregistration of additional capabilities |
| 408 | // This will NOT remove the capability from any roles that have it |
| 409 | function unregister_cap($cap) { |
| 410 | $caplist = get_settings('caplist'); |
| 411 | if ( in_array($cap, (array) $caplist) ) { |
| 412 | $caplist = array_unique($caplist); |
| 413 | sort($caplist); |
| 414 | $caplist = array_diff((array) $caplist, array($cap)); |
| 415 | update_option('caplist', $caplist); |
| 416 | } |
| 417 | } |
| 418 | |
| 419 | // Third party fetching of all possible capabilities (WP default + third party) |
| 420 | // Mostly taken from Owen Winkler's Role Manager plugin |
| 421 | function get_all_caps() { |
| 422 | global $wp_roles; |
| 423 | |
| 424 | // Get Role List |
| 425 | foreach ( $wp_roles->role_objects as $key => $role ) { |
| 426 | foreach ( $role->capabilities as $cap => $grant ) { |
| 427 | $capnames[$cap] = $cap; |
| 428 | } |
| 429 | } |
| 430 | |
| 431 | // Get third party caps |
| 432 | $other_caps = get_option('caplist'); |
| 433 | |
| 434 | // Get default WP caps |
| 435 | $default_caps = array( |
| 436 | 'activate_plugins', |
| 437 | 'delete_others_pages', |
| 438 | 'delete_others_posts', |
| 439 | 'delete_pages', |
| 440 | 'delete_posts', |
| 441 | 'delete_published_pages', |
| 442 | 'delete_published_posts', |
| 443 | 'edit_files', |
| 444 | 'edit_others_pages', |
| 445 | 'edit_others_posts', |
| 446 | 'edit_pages', |
| 447 | 'edit_plugins', |
| 448 | 'edit_posts', |
| 449 | 'edit_published_pages', |
| 450 | 'edit_published_posts', |
| 451 | 'edit_themes', |
| 452 | 'edit_users', |
| 453 | 'import', |
| 454 | 'level_0', |
| 455 | 'level_1', |
| 456 | 'level_10', |
| 457 | 'level_2', |
| 458 | 'level_3', |
| 459 | 'level_4', |
| 460 | 'level_5', |
| 461 | 'level_6', |
| 462 | 'level_7', |
| 463 | 'level_8', |
| 464 | 'level_9', |
| 465 | 'manage_categories', |
| 466 | 'manage_links', |
| 467 | 'manage_options', |
| 468 | 'moderate_comments', |
| 469 | 'publish_pages', |
| 470 | 'publish_posts', |
| 471 | 'read', |
| 472 | 'switch_themes', |
| 473 | 'unfiltered_html', |
| 474 | 'upload_files' |
| 475 | ); |
| 476 | |
| 477 | if ( !is_array($capnames) ) |
| 478 | $capnames = array(); |
| 479 | if ( !is_array($other_caps) ) |
| 480 | $other_caps = array(); |
| 481 | |
| 482 | // Cleanup |
| 483 | $capnames = array_merge($capnames, $other_caps, $default_caps); |
| 484 | $capnames = array_unique($capnames); |
| 485 | sort($capnames); |
| 486 | |
| 487 | // Remove roles, we just want capabilities |
| 488 | foreach ( $wp_roles->get_names() as $role ) { |
| 489 | $key = array_search($role, $capnames); |
| 490 | if ( $key !== false && $key !== null ) //array_search() returns null if not found in PHP 4.1 |
| 491 | unset($capnames[$key]); |
| 492 | } |
| 493 | |
| 494 | return apply_filters('get_all_caps', $capnames); |
| 495 | } |
| 496 | |