Changeset 4043
- Timestamp:
- 09/13/2016 01:49:12 AM (7 years ago)
- Location:
- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-directory-compat.php
r4041 r4043 184 184 if ( class_exists( 'WPORG_Ratings' ) && class_exists( 'WordPressdotorg\Forums\Ratings_Compat' ) ) { 185 185 $this->ratings = new Ratings_Compat( $this->compat(), $this->slug(), $this->taxonomy(), $this->get_object( $this->slug() ) ); 186 } 187 188 // Instantiate WPORG_Stickies mode for topic view. 189 if ( class_exists( 'WordPressdotorg\Forums\Stickies_Compat' ) ) { 190 $this->stickies = new Stickies_Compat( $this->compat(), $this->slug(), $this->taxonomy(), $this->get_object( $this->slug() ), $this->term, $this->authors ); 186 191 } 187 192 -
sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-stickies-compat.php
r4040 r4043 13 13 var $term = null; 14 14 15 public function __construct( $compat, $slug, $taxonomy, $object, $term ) {15 public function __construct( $compat, $slug, $taxonomy, $object, $term, $authors = array() ) { 16 16 if ( empty( $compat ) || empty( $slug ) || empty( $taxonomy ) || empty( $object ) || empty( $term ) ) { 17 17 return; … … 23 23 $this->object = $object; 24 24 $this->term = $term; 25 25 $this->authors = $authors; 26 27 // Add compat stickies to sticky array. 26 28 add_filter( 'bbp_get_stickies', array( $this, 'get_compat_stickies' ), 10, 2 ); 29 30 // Add topic toggle for compat authors. 31 add_action( 'bbp_get_request', array( $this, 'sticky_handler' ) ); 32 33 // Add link to topic admin. 34 add_filter( 'bbp_topic_admin_links', array( $this, 'admin_links' ), 10, 2 ); 27 35 } 28 36 … … 42 50 43 51 /** 52 */ 53 public function sticky_handler( $action = '' ) { 54 // Bail if the action isn't meant for this function. 55 if ( ! in_array( $action, array( 56 'wporg_bbp_stick_topic', 57 'wporg_bbp_unstick_topic', 58 ) ) ) { 59 return; 60 } 61 62 // Bail if no topic id or term id are passed. 63 if ( empty( $_GET['topic_id'] ) || empty( $_GET['term_id'] ) ) { 64 return; 65 } 66 67 // Get required data. 68 $topic = get_post( absint( $_GET['topic_id'] ) ); 69 $term = get_term( absint( $_GET['term_id'] ) ); 70 $user_id = get_current_user_id(); 71 72 // Check for empty topic or term id. 73 if ( ! $topic || ! $term ) { 74 bbp_add_error( 'wporg_bbp_sticky_topic_id', __( '<strong>ERROR</strong>: No topic was found! Which topic are you sticking?', 'wporg-forums' ) ); 75 76 // Check user. 77 } elseif ( ! $this->user_can_stick( $user_id, $term->term_id, $topic->ID ) ) { 78 bbp_add_error( 'wporg_bbp_sticky_logged_in', __( '<strong>ERROR</strong>: You do not have permission to do this!', 'wporg-forums' ) ); 79 80 // Check nonce. 81 } elseif( ! bbp_verify_nonce_request( 'toggle-topic-sticky_' . $topic->ID . '_' . $term->term_id ) ) { 82 bbp_add_error( 'wporg_bbp_sticky_nonce', __( '<strong>ERROR</strong>: Are you sure you wanted to do that?', 'wporg-forums' ) ); 83 } 84 85 if ( bbp_has_errors() ) { 86 return; 87 } 88 89 $is_sticky = self::is_sticky( $term->term_id, $topic->ID ); 90 $success = false; 91 92 // Stick/unstick the topic. 93 if ( 'wporg_bbp_stick_topic' == $action ) { 94 $success = self::add_sticky( $term->term_id, $topic->ID ); 95 } elseif ( 'wporg_bbp_unstick_topic' == $action ) { 96 $success = self::remove_sticky( $term->term_id, $topic->ID ); 97 } 98 99 $permalink = get_permalink( $topic->ID ); 100 101 if ( $success && ! is_wp_error( $success ) ) { 102 bbp_redirect( $permalink ); 103 } elseif ( true === $is_sticky && 'wporg_bbp_stick_topic' == $action ) { 104 bbp_add_error( 'wporg_bbp_stick_topic', __( '<strong>ERROR<strong>: There was a problem sticking that topic!', 'wporg-forums' ) ); 105 } elseif ( false === $is_sticky && 'wporg_bbp_unstick_topic' == $action ) { 106 bbp_add_error( 'wporg_bbp_unstick_topic', __( '<strong>ERROR</strong>: There was a problem unsticking that topic!', 'wporg-forums' ) ); 107 } 108 } 109 110 /** 111 * Replace the bbPress stick link with the custom stick link in compat topics. 112 * 113 * @param array $r The array of admin links 114 * @param int $topic_id The topic id 115 * @return array The filtered array of admin links 116 */ 117 public function admin_links( $r, $topic_id ) { 118 if ( ! bbp_is_single_topic() ) { 119 return $r; 120 } 121 $user_id = get_current_user_id(); 122 if ( $this->user_can_stick( $user_id, $this->term->term_id, $topic_id ) ) { 123 $r['stick'] = self::get_stick_link( array( 'topic_id' => $topic_id, 'term_id' => $this->term->term_id ) ); 124 } else { 125 unset( $r['stick'] ); 126 } 127 return $r; 128 } 129 130 /** 131 * Get the link to stick/unstick a compat topic. 132 * 133 * @param array $args The link arguments 134 * @return string The linked URL 135 */ 136 public static function get_stick_link( $args = array() ) { 137 $user_id = get_current_user_id(); 138 139 $r = bbp_parse_args( $args, array( 140 'topic_id' => get_the_ID(), 141 'term_id' => 0, 142 'stick' => esc_html__( 'Stick', 'wporg-forums' ), 143 'unstick' => esc_html__( 'Unstick', 'wporg-forums' ), 144 ), 'get_topic_stick_link' ); 145 if ( empty( $r['topic_id'] ) || empty( $r['term_id'] ) ) { 146 return false; 147 } 148 149 $topic = get_post( $r['topic_id'] ); 150 $term = get_term( $r['term_id'] ); 151 if ( ! $topic || ! $term ) { 152 return false; 153 } 154 155 if ( self::is_sticky( $term->term_id, $topic->ID ) ) { 156 $text = $r['unstick']; 157 $query_args = array( 'action' => 'wporg_bbp_unstick_topic', 'topic_id' => $topic->ID, 'term_id' => $term->term_id ); 158 } else { 159 $text = $r['stick']; 160 $query_args = array( 'action' => 'wporg_bbp_stick_topic', 'topic_id' => $topic->ID, 'term_id' => $term->term_id ); 161 } 162 163 $permalink = get_permalink( $topic->ID ); 164 $url = esc_url( wp_nonce_url( add_query_arg( $query_args, $permalink ), 'toggle-topic-sticky_' . $topic->ID . '_' . $term->term_id ) ); 165 return sprintf( "<a href='%s'>%s</a>", $url, esc_html( $text ) ); 166 } 167 168 /** 169 * Is a given user allowed to stick/unstick a topic? 170 * 171 * @param int $user_id The user id 172 * @param int $term_id The term id 173 * @param int $topic_id The topic id 174 * @return bool True if allowed, false if not 175 */ 176 public function user_can_stick( $user_id = 0, $term_id = 0, $topic_id = 0 ) { 177 $retval = $topic = $term = false; 178 179 if ( empty( $user_id ) ) { 180 $user_id = get_current_user_id(); 181 } 182 183 if ( $topic_id ) { 184 $topic = get_post( $topic_id ); 185 } 186 if ( $term_id ) { 187 $term = get_term( $term_id ); 188 } 189 190 if ( $user_id && $topic && $term ) { 191 // Moderators. 192 if ( user_can( $user_id, 'moderate' ) ) { 193 $retval = true; 194 } 195 196 // Compat authors. 197 if ( $this->authors && in_array( $user_id, $this->authors ) ) { 198 $retval = true; 199 } 200 } 201 return $retval; 202 } 203 204 /** 205 * Is a topic sticky for this term? 206 * 207 * @param int $term_id The term id 208 * @param int $topic_id The topic id 209 * @return bool True if sticky, false if not 210 */ 211 public static function is_sticky( $term_id, $topic_id ) { 212 $stickies = self::get_stickies( $term_id ); 213 return in_array( $topic_id, $stickies ); 214 } 215 216 /** 217 * Add a topic id to a term's list of sticky topic ids. 218 * 219 * @param int $term_id The term id 220 * @param int $topic_id The topic id 221 */ 222 public static function add_sticky( $term_id, $topic_id ) { 223 $stickies = self::get_stickies( $term_id ); 224 if ( ! in_array( $topic_id, $stickies ) ) { 225 $stickies[] = $topic_id; 226 } 227 return self::set_stickies( $term_id, $stickies ); 228 } 229 230 /** 231 * Remove a topic id from a term's list of sticky topic ids. 232 * 233 * @param int $topic_id The topic id 234 * @param int $term_id The term id 235 */ 236 public static function remove_sticky( $term_id, $topic_id ) { 237 $stickies = self::get_stickies( $term_id ); 238 if ( ( $key = array_search( $topic_id, $stickies ) ) !== false ) { 239 unset( $stickies[ $key ] ); 240 } 241 return self::set_stickies( $term_id, $stickies ); 242 } 243 244 /** 44 245 * Return an array of topic sticky ids for a given term. 45 246 * … … 56 257 return $retval; 57 258 } 259 260 /** 261 * Set the topic sticky ids for a given term. 262 * 263 * @param int $term_id The term id 264 * @param array $stickies The sticky topic ids 265 */ 266 public static function set_stickies( $term_id, $stickies = array() ) { 267 return update_term_meta( $term_id, self::META, implode( ',', $stickies ) ); 268 } 58 269 }
Note: See TracChangeset
for help on using the changeset viewer.