PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 8.6.1
Jetpack – WP Security, Backup, Speed, & Growth v8.6.1
15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / 3rd-party / class-jetpack-bbpress-rest-api.php
jetpack / 3rd-party Last commit date
debug-bar 7 years ago 3rd-party.php 6 years ago bbpress.php 6 years ago beaverbuilder.php 8 years ago bitly.php 9 years ago buddypress.php 10 years ago class-jetpack-bbpress-rest-api.php 6 years ago class.jetpack-amp-support.php 6 years ago class.jetpack-modules-overrides.php 8 years ago debug-bar.php 8 years ago domain-mapping.php 6 years ago polldaddy.php 9 years ago qtranslate-x.php 8 years ago vaultpress.php 6 years ago woocommerce-services.php 6 years ago woocommerce.php 6 years ago wpml.php 8 years ago
class-jetpack-bbpress-rest-api.php
162 lines
1 <?php
2 /**
3 * REST API Compatibility: bbPress & Jetpack
4 * Enables bbPress to work with the Jetpack REST API
5 *
6 * @package Jetpack
7 */
8
9 /**
10 * REST API Compatibility: bbPress.
11 */
12 class Jetpack_BbPress_REST_API {
13
14 /**
15 * Singleton
16 *
17 * @var Jetpack_BbPress_REST_API.
18 */
19 private static $instance;
20
21 /**
22 * Returns or creates the singleton.
23 *
24 * @return Jetpack_BbPress_REST_API
25 */
26 public static function instance() {
27 if ( isset( self::$instance ) ) {
28 return self::$instance;
29 }
30
31 self::$instance = new self();
32 }
33
34 /**
35 * Jetpack_BbPress_REST_API constructor.
36 */
37 private function __construct() {
38 add_filter( 'rest_api_allowed_post_types', array( $this, 'allow_bbpress_post_types' ) );
39 add_filter( 'bbp_map_meta_caps', array( $this, 'adjust_meta_caps' ), 10, 4 );
40 add_filter( 'rest_api_allowed_public_metadata', array( $this, 'allow_bbpress_public_metadata' ) );
41 }
42
43 /**
44 * Adds the bbPress post types to the rest_api_allowed_post_types filter.
45 *
46 * @param array $allowed_post_types Allowed post types.
47 *
48 * @return array
49 */
50 public function allow_bbpress_post_types( $allowed_post_types ) {
51 $allowed_post_types[] = 'forum';
52 $allowed_post_types[] = 'topic';
53 $allowed_post_types[] = 'reply';
54 return $allowed_post_types;
55 }
56
57 /**
58 * Adds the bbpress meta keys to the rest_api_allowed_public_metadata filter.
59 *
60 * @param array $allowed_meta_keys Allowed meta keys.
61 *
62 * @return array
63 */
64 public function allow_bbpress_public_metadata( $allowed_meta_keys ) {
65 $allowed_meta_keys[] = '_bbp_forum_id';
66 $allowed_meta_keys[] = '_bbp_topic_id';
67 $allowed_meta_keys[] = '_bbp_status';
68 $allowed_meta_keys[] = '_bbp_forum_type';
69 $allowed_meta_keys[] = '_bbp_forum_subforum_count';
70 $allowed_meta_keys[] = '_bbp_reply_count';
71 $allowed_meta_keys[] = '_bbp_total_reply_count';
72 $allowed_meta_keys[] = '_bbp_topic_count';
73 $allowed_meta_keys[] = '_bbp_total_topic_count';
74 $allowed_meta_keys[] = '_bbp_topic_count_hidden';
75 $allowed_meta_keys[] = '_bbp_last_topic_id';
76 $allowed_meta_keys[] = '_bbp_last_reply_id';
77 $allowed_meta_keys[] = '_bbp_last_active_time';
78 $allowed_meta_keys[] = '_bbp_last_active_id';
79 $allowed_meta_keys[] = '_bbp_sticky_topics';
80 $allowed_meta_keys[] = '_bbp_voice_count';
81 $allowed_meta_keys[] = '_bbp_reply_count_hidden';
82 $allowed_meta_keys[] = '_bbp_anonymous_reply_count';
83
84 return $allowed_meta_keys;
85 }
86
87 /**
88 * Adds the needed caps to the bbp_map_meta_caps filter.
89 *
90 * @param array $caps Capabilities for meta capability.
91 * @param string $cap Capability name.
92 * @param int $user_id User id.
93 * @param array $args Arguments.
94 *
95 * @return array
96 */
97 public function adjust_meta_caps( $caps, $cap, $user_id, $args ) {
98
99 // Return early if not a REST request or if not meta bbPress caps.
100 if ( $this->should_adjust_meta_caps_return_early( $caps, $cap, $user_id, $args ) ) {
101 return $caps;
102 }
103
104 // $args[0] could be a post ID or a post_type string.
105 if ( is_int( $args[0] ) ) {
106 $_post = get_post( $args[0] );
107 if ( ! empty( $_post ) ) {
108 $post_type = get_post_type_object( $_post->post_type );
109 }
110 } elseif ( is_string( $args[0] ) ) {
111 $post_type = get_post_type_object( $args[0] );
112 }
113
114 // no post type found, bail.
115 if ( empty( $post_type ) ) {
116 return $caps;
117 }
118
119 // reset the needed caps.
120 $caps = array();
121
122 // Add 'do_not_allow' cap if user is spam or deleted.
123 if ( bbp_is_user_inactive( $user_id ) ) {
124 $caps[] = 'do_not_allow';
125
126 // Moderators can always edit meta.
127 } elseif ( user_can( $user_id, 'moderate' ) ) {
128 $caps[] = 'moderate';
129
130 // Unknown so map to edit_posts.
131 } else {
132 $caps[] = $post_type->cap->edit_posts;
133 }
134
135 return $caps;
136 }
137
138 /**
139 * Should adjust_meta_caps return early?
140 *
141 * @param array $caps Capabilities for meta capability.
142 * @param string $cap Capability name.
143 * @param int $user_id User id.
144 * @param array $args Arguments.
145 *
146 * @return bool
147 */
148 private function should_adjust_meta_caps_return_early( $caps, $cap, $user_id, $args ) {
149 // only run for REST API requests.
150 if ( ! defined( 'REST_API_REQUEST' ) || ! REST_API_REQUEST ) {
151 return true;
152 }
153
154 // only modify caps for meta caps and for bbPress meta keys.
155 if ( ! in_array( $cap, array( 'edit_post_meta', 'delete_post_meta', 'add_post_meta' ), true ) || empty( $args[1] ) || false === strpos( $args[1], '_bbp_' ) ) {
156 return true;
157 }
158
159 return false;
160 }
161 }
162