Changeset 3797
- Timestamp:
- 08/10/2016 05:06:22 PM (8 years ago)
- Location:
- sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-bbp-topic-resolution
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-bbp-topic-resolution/inc/class-plugin.php
r3783 r3797 4 4 5 5 class Plugin { 6 7 /**8 * @todo Edit enabled forums - will need to be updateable from the admin interface for administrators during forum setup9 * Decisions: default topic resolution is 'no'10 */11 6 12 7 /** … … 43 38 add_filter( 'bbp_get_topic_title', array( $this, 'get_topic_title' ), 10, 2 ); 44 39 45 // Display the form for new/edit edtopics.40 // Display the form for new/edit topics. 46 41 add_action( 'bbp_theme_before_topic_form_content', array( $this, 'form_topic_resolution_dropdown' ) ); 47 42 add_action( 'bbp_theme_before_topic_form_subscriptions', array( $this, 'form_topic_resolution_checkbox' ) ); … … 51 46 add_action( 'bbp_edit_topic_post_extras', array( $this, 'topic_post_extras' ) ); 52 47 48 // Add form for moderator/user topic resolution update. 49 // @todo Add AJAX processing to front-end topic resolution updates. 50 add_action( 'bbp_post_request', array( $this, 'topic_resolution_handler' ) ); 51 53 52 // Register views. 54 53 add_action( 'bbp_register_views', array( $this, 'register_views' ) ); … … 58 57 add_action( 'manage_forum_posts_custom_column', array( $this, 'add_forum_topic_resolution_value' ), 10, 2 ); 59 58 60 // Process field submission59 // Process changes to a forums support status. 61 60 // @todo Bulk actions aren't filterable, so this might be hacky. 62 61 } … … 82 81 } 83 82 84 // Only display on topic edit s83 // Only display on topic edit. 85 84 if ( ! bbp_is_topic_edit() ) { 86 85 return; … … 152 151 'resolution' => $resolution, 153 152 ) ); 153 } 154 155 /** 156 * Output topic resolution as a string or a selection dropdown. 157 */ 158 public function get_topic_resolution_form() { 159 // Only display on forums where this is enabled 160 if ( ! $this->is_enabled_on_forum() ) { 161 return; 162 } 163 164 // Only display on single topic. 165 if ( ! bbp_is_single_topic() && ! bbp_is_topic_edit() ) { 166 return; 167 } 168 169 // Get topic and user data. 170 $topic_id = intval( bbp_get_topic_id() ); 171 $topic = bbp_get_topic( $topic_id ); 172 if ( ! $topic_id || ! $topic ) { 173 return; 174 } 175 176 // Get the current resolution of this topic. 177 $resolution = $this->get_topic_resolution( array( 'id' => bbp_get_topic_id() ) ); 178 if ( empty( $resolution ) ) { 179 $resolution = $this->get_default_topic_resolution(); 180 } 181 $resolutions = $this->get_topic_resolutions(); 182 183 // Display the current topic resolution if the user can't update it. 184 $user_id = get_current_user_id(); 185 if ( bbp_is_topic_edit() || ! $this->user_can_resolve( $user_id, $topic_id ) ) { 186 printf( esc_html__( 'Status: %s', 'wporg-forums' ), $resolutions[ $resolution ] ); 187 188 // Display the form to update the topic resolution. 189 } else { 190 ?> 191 <form method="POST"> 192 <input type="hidden" name="action" value="wporg_bbp_topic_resolution" /> 193 <input type="hidden" name="topic_id" value="<?php echo esc_attr( $topic->ID ); ?>" /> 194 <?php wp_nonce_field( 'toggle-topic-resolution_' . $topic->ID ); ?> 195 <label for="topic-resolved"><?php esc_html_e( 'Status:', 'wporg-forums' ); ?></label> 196 197 <select name="<?php echo esc_attr( self::META_KEY ); ?>" id="topic-resolved"> 198 199 <?php foreach ( $resolutions as $key => $label ) : ?> 200 201 <option value="<?php echo esc_attr( $key ); ?>" <?php selected( $key, $resolution ); ?>><?php echo esc_html( $label ); ?></option> 202 203 <?php endforeach; ?> 204 205 </select> 206 <input type="submit" name="submit" value="<?php esc_attr_e( 'Update', 'wporg-forums' ); ?>" /> 207 </form></span> 208 <?php 209 } 210 } 211 212 /** 213 * Handle a user setting the topic resolution on a given topic. 214 * 215 * @param string $action The requested action to compare this function to 216 */ 217 public function topic_resolution_handler( $action = '' ) { 218 if ( ! $this->is_enabled_on_forum() ) { 219 return false; 220 } 221 222 // Bail if the action isn't meant for this function. 223 if ( $action != 'wporg_bbp_topic_resolution' ) { 224 return; 225 } 226 227 // Bail if no topic id or resolution is passed. 228 if ( empty( $_POST['topic_id'] ) || empty( $_POST[ self::META_KEY ] ) ) { 229 return; 230 } 231 232 // Get required data. 233 $topic_id = intval( $_POST['topic_id'] ); 234 $topic = bbp_get_topic( $topic_id ); 235 $user_id = get_current_user_id(); 236 $resolution = $_POST[ self::META_KEY ]; 237 238 // Check for empty topic id. 239 if ( empty( $topic_id ) || ! $topic ) { 240 bbp_add_error( 'wporg_bbp_topic_resolution_topic_id', __( '<strong>ERROR</strong>: No topic was found!', 'wporg-forums' ) ); 241 242 // Check valid resolution. 243 } elseif ( ! $this->is_valid_topic_resolution( $resolution ) ) { 244 bbp_add_error( 'wporg_bbp_topic_resolution_invalid', __( '<strong>ERROR</srong>: That is not a valid topic resolution!', 'wporg-forums' ) ); 245 246 // Check user permissions. 247 } elseif ( ! $this->user_can_resolve( $user_id, $topic->ID ) ) { 248 bbp_add_error( 'wporg_bbp_topic_resolution_permissions', __( '<strong>ERROR</strong>: You don\t have permission to do this!', 'wporg-forums' ) ); 249 250 // Check nonce. 251 } elseif ( ! bbp_verify_nonce_request( 'toggle-topic-resolution_' . $topic->ID ) ) { 252 bbp_add_error( 'wporg_bbp_topic_resolution_nonce', __( '<strong>ERROR</strong>: Are you sure you wanted to do that?', 'wporg-forums' ) ); 253 } 254 255 if ( bbp_has_errors() ) { 256 return; 257 } 258 259 // Update the topic resolution. 260 $this->set_topic_resolution( array( 261 'id' => $topic->ID, 262 'resolution' => $resolution, 263 ) ); 264 265 bbp_redirect( get_permalink( $topic->ID ) ); 154 266 } 155 267 … … 308 420 public function get_topic_resolutions() { 309 421 return apply_filters( 'wporg_bbp_get_topic_resolutions', array( 310 311 312 422 'no' => __( 'not resolved', 'wporg-forums' ), 423 'yes' => __( 'resolved', 'wporg-forums' ), 424 'mu' => __( 'not a support question', 'wporg-forums' ), 313 425 ) ); 426 } 427 428 /** 429 * Is a topic resolution string in the array of possible resolutions? 430 * 431 * @param string $resolution The resolution to check 432 * @return bool True if in the array, false if not 433 */ 434 public function is_valid_topic_resolution( $resolution ) { 435 $resolutions = $this->get_topic_resolutions(); 436 $retval = in_array( $resolution, array_keys( $resolutions ) ); 437 return apply_filters( 'wporg_bbp_is_valid_topic_resolution', $retval, $resolution ); 314 438 } 315 439 … … 330 454 return apply_filters( 'wporg_bbp_sanitize_topic_resolution', $retval ); 331 455 } 456 457 /** 458 * Is a given user is allowed to update the resolution of a topic? 459 * 460 * @param int $user_id The user id 461 * @param int $topic_id The topic id 462 * @return bool True if allowed, false if not 463 */ 464 public function user_can_resolve( $user_id, $topic_id ) { 465 $topic_id = bbp_get_topic_id(); 466 if ( $topic_id ) { 467 $post = get_post( $topic_id ); 468 } 469 470 if ( $user_id && $post && ( user_can( $user_id, 'moderate' ) || $user_id == $post->post_author ) ) { 471 $retval = true; 472 } else { 473 $retval = false; 474 } 475 return apply_filters( 'wporg_bbp_user_can_resolve', $retval, $user_id, $topic_id ); 476 } 332 477 } -
sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-bbp-topic-resolution/wporg-bbp-topic-resolution.php
r3666 r3797 27 27 28 28 // Easy access for templates 29 function get_topic_resolution ( $topic_id ) {30 return Plugin::get_ topic_resolution( array( 'id' => $topic_id ) );29 function get_topic_resolution_form( $topic_id ) { 30 return Plugin::get_instance()->get_topic_resolution_form( array( 'id' => $topic_id ) ); 31 31 }
Note: See TracChangeset
for help on using the changeset viewer.