Changeset 7780 for trunk/bp-xprofile/bp-xprofile-classes.php
- Timestamp:
- 02/04/2014 02:05:24 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/bp-xprofile/bp-xprofile-classes.php
r7710 r7780 27 27 global $wpdb, $bp; 28 28 29 $sql = $wpdb->prepare( "SELECT * FROM {$bp->profile->table_name_groups} WHERE id = %d", $id ); 30 31 if ( !$group = $wpdb->get_row( $sql ) ) 32 return false; 29 $group = wp_cache_get( 'xprofile_group_' . $this->id, 'bp' ); 30 31 if ( false === $group ) { 32 $group = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->profile->table_name_groups} WHERE id = %d", $id ) ); 33 } 34 35 if ( empty( $group ) ) { 36 return false; 37 } 33 38 34 39 $this->id = $group->id; … … 136 141 $where_sql = $wpdb->prepare( "WHERE g.id NOT IN ({$exclude_groups})"); 137 142 138 if ( !empty( $hide_empty_groups ) ) 139 $groups = $wpdb->get_results( "SELECT DISTINCT g.* FROM {$bp->profile->table_name_groups} g INNER JOIN {$bp->profile->table_name_fields} f ON g.id = f.group_id {$where_sql} ORDER BY g.group_order ASC" ); 140 else 141 $groups = $wpdb->get_results( "SELECT DISTINCT g.* FROM {$bp->profile->table_name_groups} g {$where_sql} ORDER BY g.group_order ASC" ); 143 if ( ! empty( $hide_empty_groups ) ) { 144 $group_ids = $wpdb->get_col( "SELECT DISTINCT g.id FROM {$bp->profile->table_name_groups} g INNER JOIN {$bp->profile->table_name_fields} f ON g.id = f.group_id {$where_sql} ORDER BY g.group_order ASC" ); 145 } else { 146 $group_ids = $wpdb->get_col( "SELECT DISTINCT g.id FROM {$bp->profile->table_name_groups} g {$where_sql} ORDER BY g.group_order ASC" ); 147 } 148 149 $groups = self::get_group_data( $group_ids ); 142 150 143 151 if ( empty( $fetch_fields ) ) … … 261 269 $groups = array_values( $groups ); 262 270 } 271 272 return $groups; 273 } 274 275 /** 276 * Get data about a set of groups, based on IDs. 277 * 278 * @since BuddyPress (2.0.0) 279 * 280 * @param array $group_ids Array of IDs. 281 * @return array 282 */ 283 protected static function get_group_data( $group_ids ) { 284 global $wpdb; 285 286 // Bail if no group IDs are passed 287 if ( empty( $group_ids ) ) { 288 return array(); 289 } 290 291 $groups = array(); 292 $uncached_gids = array(); 293 294 foreach ( $group_ids as $group_id ) { 295 296 // If cached data is found, use it 297 if ( $group_data = wp_cache_get( 'xprofile_group_' . $group_id, 'bp' ) ) { 298 $groups[ $group_id ] = $group_data; 299 300 // Otherwise leave a placeholder so we don't lose the order 301 } else { 302 $groups[ $group_id ] = ''; 303 304 // Add to the list of items to be queried 305 $uncached_gids[] = $group_id; 306 } 307 } 308 309 // Fetch uncached data from the DB if necessary 310 if ( ! empty( $uncached_gids ) ) { 311 $uncached_gids_sql = implode( ',', wp_parse_id_list( $uncached_gids ) ); 312 313 $bp = buddypress(); 314 315 // Fetch data, preserving order 316 $queried_gdata = $wpdb->get_results( "SELECT * FROM {$bp->profile->table_name_groups} WHERE id IN ({$uncached_gids_sql}) ORDER BY FIELD( id, {$uncached_gids_sql} )"); 317 318 // Put queried data into the placeholders created earlier, 319 // and add it to the cache 320 foreach ( (array) $queried_gdata as $gdata ) { 321 $groups[ $gdata->id ] = $gdata; 322 wp_cache_set( 'xprofile_group_' . $gdata->id, $gdata, 'bp' ); 323 } 324 } 325 326 // Reset indexes 327 $groups = array_values( $groups ); 263 328 264 329 return $groups;
Note: See TracChangeset
for help on using the changeset viewer.