Changeset 2077 for trunk/bp-groups/bp-groups-classes.php
- Timestamp:
- 11/02/2009 07:54:21 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/bp-groups/bp-groups-classes.php
r2055 r2077 14 14 15 15 var $user_dataset; 16 16 17 17 var $admins; 18 18 var $total_member_count; 19 19 var $random_members; 20 20 var $latest_wire_posts; 21 21 22 22 function bp_groups_group( $id = null, $single = false, $get_user_dataset = true ) { 23 23 if ( $id ) { … … 25 25 $this->populate( $get_user_dataset ); 26 26 } 27 27 28 28 if ( $single ) { 29 29 $this->populate_meta(); 30 30 } 31 31 } 32 32 33 33 function populate( $get_user_dataset ) { 34 34 global $wpdb, $bp; … … 36 36 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} WHERE id = %d", $this->id ); 37 37 $group = $wpdb->get_row($sql); 38 38 39 39 if ( $group ) { 40 40 $this->id = $group->id; … … 49 49 $this->date_created = strtotime($group->date_created); 50 50 $this->total_member_count = groups_get_groupmeta( $this->id, 'total_member_count' ); 51 51 52 52 if ( $get_user_dataset ) { 53 53 $this->user_dataset = $this->get_user_dataset(); 54 54 55 55 //if ( !$this->total_member_count ) { 56 56 $this->total_member_count = count( $this->user_dataset ); … … 58 58 //} 59 59 } 60 } 61 } 62 60 } 61 } 62 63 63 function populate_meta() { 64 64 if ( $this->id ) { … … 67 67 } 68 68 } 69 69 70 70 function save() { 71 71 global $wpdb, $bp; 72 72 73 73 $this->creator_id = apply_filters( 'groups_group_creator_id_before_save', $this->creator_id, $this->id ); 74 74 $this->name = apply_filters( 'groups_group_name_before_save', $this->name, $this->id ); … … 82 82 83 83 do_action( 'groups_group_before_save', $this ); 84 84 85 85 if ( $this->id ) { 86 $sql = $wpdb->prepare( 87 "UPDATE {$bp->groups->table_name} SET 88 creator_id = %d, 89 name = %s, 90 slug = %s, 91 description = %s, 92 news = %s, 93 status = %s, 94 enable_wire = %d, 95 enable_forum = %d, 86 $sql = $wpdb->prepare( 87 "UPDATE {$bp->groups->table_name} SET 88 creator_id = %d, 89 name = %s, 90 slug = %s, 91 description = %s, 92 news = %s, 93 status = %s, 94 enable_wire = %d, 95 enable_forum = %d, 96 96 date_created = FROM_UNIXTIME(%d) 97 97 WHERE 98 98 id = %d 99 99 ", 100 $this->creator_id, 101 $this->name, 102 $this->slug, 103 $this->description, 104 $this->news, 105 $this->status, 106 $this->enable_wire, 107 $this->enable_forum, 100 $this->creator_id, 101 $this->name, 102 $this->slug, 103 $this->description, 104 $this->news, 105 $this->status, 106 $this->enable_wire, 107 $this->enable_forum, 108 108 $this->date_created, 109 109 $this->id 110 110 ); 111 111 } else { 112 $sql = $wpdb->prepare( 113 "INSERT INTO {$bp->groups->table_name} ( 112 $sql = $wpdb->prepare( 113 "INSERT INTO {$bp->groups->table_name} ( 114 114 creator_id, 115 115 name, … … 124 124 %d, %s, %s, %s, %s, %s, %d, %d, FROM_UNIXTIME(%d) 125 125 )", 126 $this->creator_id, 127 $this->name, 128 $this->slug, 129 $this->description, 130 $this->news, 131 $this->status, 132 $this->enable_wire, 126 $this->creator_id, 127 $this->name, 128 $this->slug, 129 $this->description, 130 $this->news, 131 $this->status, 132 $this->enable_wire, 133 133 $this->enable_forum, 134 134 $this->date_created 135 135 ); 136 136 } 137 137 138 138 if ( false === $wpdb->query($sql) ) 139 139 return false; 140 140 141 141 if ( !$this->id ) { 142 142 $this->id = $wpdb->insert_id; … … 144 144 145 145 do_action( 'groups_group_after_save', $this ); 146 146 147 147 return true; 148 148 } 149 149 150 150 function get_user_dataset() { 151 151 global $wpdb, $bp; 152 152 153 153 return $wpdb->get_results( $wpdb->prepare( "SELECT user_id, is_admin, inviter_id, user_title, is_mod FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 1 AND is_banned = 0 ORDER BY rand()", $this->id ) ); 154 154 } 155 155 156 156 function get_administrators() { 157 157 for ( $i = 0; $i < count($this->user_dataset); $i++ ) { 158 158 if ( $this->user_dataset[$i]->is_admin ) 159 159 $admins[] = new BP_Groups_Member( $this->user_dataset[$i]->user_id, $this->id ); 160 } 161 160 } 161 162 162 return $admins; 163 163 } … … 165 165 function get_random_members() { 166 166 $total_randoms = ( $this->total_member_count > 5 ) ? 5 : $this->total_member_count; 167 167 168 168 for ( $i = 0; $i < $total_randoms; $i++ ) { 169 169 if ( !(int)$this->user_dataset[$i]->is_banned ) … … 172 172 return $users; 173 173 } 174 174 175 175 function is_member() { 176 176 global $bp; 177 177 178 178 for ( $i = 0; $i < count($this->user_dataset); $i++ ) { 179 179 if ( $this->user_dataset[$i]->user_id == $bp->loggedin_user->id ) { 180 180 return true; 181 181 } 182 } 183 182 } 183 184 184 return false; 185 185 } 186 186 187 187 function delete() { 188 188 global $wpdb, $bp; 189 189 190 190 // Delete groupmeta for the group 191 191 groups_delete_groupmeta( $this->id ); … … 194 194 for ( $i = 0; $i < count($this->user_dataset); $i++ ) { 195 195 $user = $this->user_dataset[$i]; 196 196 197 197 $total_count = get_usermeta( $user->user_id, 'total_group_count' ); 198 198 199 199 if ( $total_count != '' ) { 200 200 update_usermeta( $user->user_id, 'total_group_count', (int)$total_count - 1 ); 201 201 } 202 202 203 203 // Now delete the group member record 204 204 BP_Groups_Member::delete( $user->user_id, $this->id, false ); 205 205 } 206 206 207 207 // Delete the wire posts for this group if the wire is installed 208 208 if ( function_exists('bp_wire_install') ) { 209 209 BP_Wire_Post::delete_all_for_item( $this->id, $bp->groups->table_name_wire ); 210 210 } 211 211 212 212 // Finally remove the group entry from the DB 213 213 if ( !$wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->groups->table_name} WHERE id = %d", $this->id ) ) ) … … 216 216 return true; 217 217 } 218 218 219 219 220 220 /* Static Functions */ 221 221 222 222 function group_exists( $slug, $table_name = false ) { 223 223 global $wpdb, $bp; 224 224 225 225 if ( !$table_name ) 226 226 $table_name = $bp->groups->table_name; 227 227 228 228 if ( !$slug ) 229 229 return false; 230 230 231 231 return $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$table_name} WHERE slug = %s", $slug ) ); 232 232 } … … 240 240 return $wpdb->get_col( $wpdb->prepare( "SELECT user_id FROM {$bp->groups->table_name_members} WHERE group_id = %d and is_confirmed = 0 AND inviter_id = %d", $group_id, $user_id ) ); 241 241 } 242 242 243 243 function filter_user_groups( $filter, $user_id = false, $order = false, $limit = null, $page = null ) { 244 244 global $wpdb, $bp; 245 245 246 246 if ( !$user_id ) 247 247 $user_id = $bp->displayed_user->id; 248 248 249 249 $filter = like_escape( $wpdb->escape( $filter ) ); 250 251 if ( $limit && $page ) 252 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 253 250 251 if ( $limit && $page ) 252 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 253 254 254 // Get all the group ids for the current user's groups. 255 255 $gids = BP_Groups_Member::get_group_ids( $user_id ); 256 256 257 257 if ( !$gids['groups'] ) 258 258 return false; 259 259 260 260 $gids = implode( ',', $gids['groups'] ); 261 261 262 262 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id FROM {$bp->groups->table_name} WHERE ( name LIKE '{$filter}%%' OR description LIKE '{$filter}%%' ) AND id IN ({$gids}) {$pag_sql}" ) ); 263 263 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM {$bp->groups->table_name} WHERE ( name LIKE '{$filter}%%' OR description LIKE '{$filter}%%' ) AND id IN ({$gids})" ) ); 264 265 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 266 } 267 264 265 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 266 } 267 268 268 function search_groups( $filter, $limit = null, $page = null, $sort_by = false, $order = false ) { 269 269 global $wpdb, $bp; 270 270 271 271 $filter = like_escape( $wpdb->escape( $filter ) ); 272 272 273 273 if ( $limit && $page ) 274 274 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); … … 279 279 $order_sql = "ORDER BY $sort_by $order"; 280 280 } 281 281 282 282 if ( !is_site_admin() ) 283 283 $hidden_sql = "AND status != 'hidden'"; … … 285 285 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id FROM {$bp->groups->table_name} WHERE ( name LIKE '%%$filter%%' OR description LIKE '%%$filter%%' ) {$hidden_sql} {$order_sql} {$pag_sql}" ) ); 286 286 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM {$bp->groups->table_name} WHERE ( name LIKE '%%$filter%%' OR description LIKE '%%$filter%%' ) {$hidden_sq}" ) ); 287 288 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 289 } 290 287 288 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 289 } 290 291 291 function check_slug( $slug ) { 292 292 global $wpdb, $bp; 293 294 return $wpdb->get_var( $wpdb->prepare( "SELECT slug FROM {$bp->groups->table_name} WHERE slug = %s", $slug ) ); 295 } 296 293 294 return $wpdb->get_var( $wpdb->prepare( "SELECT slug FROM {$bp->groups->table_name} WHERE slug = %s", $slug ) ); 295 } 296 297 297 function get_slug( $group_id ) { 298 298 global $wpdb, $bp; 299 300 return $wpdb->get_var( $wpdb->prepare( "SELECT slug FROM {$bp->groups->table_name} WHERE id = %d", $group_id ) ); 301 } 302 299 300 return $wpdb->get_var( $wpdb->prepare( "SELECT slug FROM {$bp->groups->table_name} WHERE id = %d", $group_id ) ); 301 } 302 303 303 function has_members( $group_id ) { 304 304 global $wpdb, $bp; 305 306 $members = $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM {$bp->groups->table_name_members} WHERE group_id = %d", $group_id ) ); 305 306 $members = $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM {$bp->groups->table_name_members} WHERE group_id = %d", $group_id ) ); 307 307 308 308 if ( !$members ) 309 309 return false; 310 310 311 311 return true; 312 312 } 313 313 314 314 function has_membership_requests( $group_id ) { 315 315 global $wpdb, $bp; 316 317 return $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 0", $group_id ) ); 318 } 319 316 317 return $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 0", $group_id ) ); 318 } 319 320 320 function get_membership_requests( $group_id, $limit = null, $page = null ) { 321 321 global $wpdb, $bp; 322 322 323 323 if ( $limit && $page ) { 324 324 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 325 325 } 326 326 327 327 $paged_requests = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 0 AND inviter_id = 0{$pag_sql}", $group_id ) ); 328 328 $total_requests = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 0 AND inviter_id = 0", $group_id ) ); … … 330 330 return array( 'requests' => $paged_requests, 'total' => $total_requests ); 331 331 } 332 332 333 333 function get_newest( $limit = null, $page = null ) { 334 334 global $wpdb, $bp; 335 336 if ( $limit && $page ) 337 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 338 335 336 if ( $limit && $page ) 337 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 338 339 339 if ( !is_site_admin() ) 340 340 $hidden_sql = "WHERE status != 'hidden'"; 341 341 342 342 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id FROM {$bp->groups->table_name} {$hidden_sql} ORDER BY date_created DESC {$pag_sql}" ) ); 343 343 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM {$bp->groups->table_name} {$hidden_sql} ORDER BY date_created DESC", $limit ) ); … … 345 345 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 346 346 } 347 347 348 348 function get_active( $limit = null, $page = null ) { 349 349 global $wpdb, $bp; 350 350 351 351 if ( $limit && $page ) 352 352 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); … … 354 354 if ( !is_site_admin() ) 355 355 $hidden_sql = "AND g.status != 'hidden'"; 356 356 357 357 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT group_id FROM {$bp->groups->table_name_groupmeta} gm, {$bp->groups->table_name} g WHERE g.id = gm.group_id {$hidden_sql} AND gm.meta_key = 'last_activity' ORDER BY CONVERT(gm.meta_value, SIGNED) DESC {$pag_sql}" ) ); 358 358 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(group_id) FROM {$bp->groups->table_name_groupmeta} gm, {$bp->groups->table_name} g WHERE g.id = gm.group_id {$hidden_sql} AND gm.meta_key = 'last_activity' ORDER BY CONVERT(gm.meta_value, SIGNED) DESC" ) ); … … 360 360 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 361 361 } 362 362 363 363 function get_popular( $limit = null, $page = null ) { 364 364 global $wpdb, $bp; 365 365 366 366 if ( $limit && $page ) { 367 367 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); … … 370 370 if ( !is_site_admin() ) 371 371 $hidden_sql = "AND g.status != 'hidden'"; 372 372 373 373 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT gm.group_id FROM {$bp->groups->table_name_groupmeta} gm, {$bp->groups->table_name} g WHERE g.id = gm.group_id {$hidden_sql} AND gm.meta_key = 'total_member_count' ORDER BY CONVERT(gm.meta_value, SIGNED) DESC {$pag_sql}" ) ); 374 374 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(gm.group_id) FROM {$bp->groups->table_name_groupmeta} gm, {$bp->groups->table_name} g WHERE g.id = gm.group_id {$hidden_sql} AND gm.meta_key = 'total_member_count' ORDER BY CONVERT(gm.meta_value, SIGNED) DESC" ) ); … … 376 376 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 377 377 } 378 378 379 379 function get_alphabetically( $limit = null, $page = null ) { 380 380 global $wpdb, $bp; 381 382 if ( $limit && $page ) 383 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 384 381 382 if ( $limit && $page ) 383 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 384 385 385 if ( !is_site_admin() ) 386 386 $hidden_sql = "WHERE status != 'hidden'"; 387 387 388 388 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id FROM {$bp->groups->table_name} {$hidden_sql} ORDER BY name ASC {$pag_sql}" ) ); 389 389 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM {$bp->groups->table_name} {$hidden_sql} ORDER BY name ASC", $limit ) ); … … 391 391 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 392 392 } 393 393 394 394 function get_by_most_forum_topics( $limit = null, $page = null ) { 395 395 global $wpdb, $bp, $bbdb; 396 396 397 397 if ( $limit && $page ) { 398 398 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); … … 402 402 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT COUNT(gm.group_id) FROM {$bbdb->forums} AS f, {$bp->groups->table_name} AS g LEFT JOIN {$bp->groups->table_name_groupmeta} AS gm ON g.id = gm.group_id WHERE (gm.meta_key = 'forum_id' AND gm.meta_value = f.forum_id) AND g.status = 'public' ORDER BY f.topics DESC" ) ); 403 403 404 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 404 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 405 405 } 406 406 407 407 function get_by_most_forum_posts( $limit = null, $page = null ) { 408 408 global $wpdb, $bp, $bbdb; 409 409 410 410 if ( $limit && $page ) { 411 411 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 412 412 } 413 413 414 414 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT gm.group_id FROM {$bbdb->forums} AS f, {$bp->groups->table_name} AS g LEFT JOIN {$bp->groups->table_name_groupmeta} AS gm ON g.id = gm.group_id WHERE (gm.meta_key = 'forum_id' AND gm.meta_value = f.forum_id) AND g.status = 'public' ORDER BY f.posts DESC {$pag_sql}" ) ); 415 415 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT COUNT(gm.group_id) FROM {$bbdb->forums} AS f, {$bp->groups->table_name} AS g LEFT JOIN {$bp->groups->table_name_groupmeta} AS gm ON g.id = gm.group_id WHERE (gm.meta_key = 'forum_id' AND gm.meta_value = f.forum_id) AND g.status = 'public' ORDER BY f.posts DESC" ) ); 416 416 417 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 418 } 419 420 417 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 418 } 419 420 421 421 function get_all( $limit = null, $page = null, $only_public = true, $sort_by = false, $order = false ) { 422 422 global $wpdb, $bp; 423 423 424 424 if ( $only_public ) 425 425 $public_sql = $wpdb->prepare( " WHERE g.status = 'public'" ); 426 426 427 427 if ( !is_site_admin() ) 428 428 $hidden_sql = $wpdb->prepare( " AND g.status != 'hidden'"); 429 430 if ( $limit && $page ) 431 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 432 429 430 if ( $limit && $page ) 431 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 432 433 433 if ( $sort_by && $order ) { 434 434 $sort_by = $wpdb->escape( $sort_by ); 435 435 $order = $wpdb->escape( $order ); 436 436 $order_sql = "ORDER BY g.$sort_by $order"; 437 437 438 438 switch ( $sort_by ) { 439 439 default: 440 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g {$public_sql} {$hidden_sql} {$order_sql} {$pag_sql}" ); 440 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g {$public_sql} {$hidden_sql} {$order_sql} {$pag_sql}" ); 441 441 break; 442 442 case 'members': 443 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g, {$bp->groups->table_name_groupmeta} gm WHERE g.id = gm.group_id AND gm.meta_key = 'total_member_count' {$hidden_sql} {$public_sql} ORDER BY CONVERT(gm.meta_value, SIGNED) {$order} {$pag_sql}" ); 443 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g, {$bp->groups->table_name_groupmeta} gm WHERE g.id = gm.group_id AND gm.meta_key = 'total_member_count' {$hidden_sql} {$public_sql} ORDER BY CONVERT(gm.meta_value, SIGNED) {$order} {$pag_sql}" ); 444 444 break; 445 445 case 'last_active': 446 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g, {$bp->groups->table_name_groupmeta} gm WHERE g.id = gm.group_id AND gm.meta_key = 'last_activity' {$hidden_sql} {$public_sql} ORDER BY CONVERT(gm.meta_value, SIGNED) {$order} {$pag_sql}" ); 446 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g, {$bp->groups->table_name_groupmeta} gm WHERE g.id = gm.group_id AND gm.meta_key = 'last_activity' {$hidden_sql} {$public_sql} ORDER BY CONVERT(gm.meta_value, SIGNED) {$order} {$pag_sql}" ); 447 447 break; 448 448 } 449 449 } else { 450 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g {$public_sql} {$hidden_sql} {$order_sql} {$pag_sql}" ); 451 } 452 450 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name} g {$public_sql} {$hidden_sql} {$order_sql} {$pag_sql}" ); 451 } 452 453 453 return $wpdb->get_results($sql); 454 454 } 455 455 456 456 function get_by_letter( $letter, $limit = null, $page = null ) { 457 457 global $wpdb, $bp; 458 458 459 459 if ( strlen($letter) > 1 || is_numeric($letter) || !$letter ) 460 460 return false; 461 461 462 462 if ( !is_site_admin() ) 463 463 $hidden_sql = $wpdb->prepare( " AND status != 'hidden'"); 464 464 465 465 $letter = like_escape( $wpdb->escape( $letter ) ); 466 466 … … 469 469 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM {$bp->groups->table_name} WHERE name LIKE '$letter%%' {$hidden_sql} ORDER BY name ASC" ) ); 470 470 } 471 471 472 472 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id FROM {$bp->groups->table_name} WHERE name LIKE '$letter%%' {$hidden_sql} ORDER BY name ASC {$pag_sql}" ) ); 473 474 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 475 } 476 473 474 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 475 } 476 477 477 function get_random( $limit = null, $page = null ) { 478 478 global $wpdb, $bp; … … 485 485 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT id as group_id, slug FROM {$bp->groups->table_name} WHERE status = 'public' {$hidden_sql} ORDER BY rand()" ) ); 486 486 } 487 488 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id, slug FROM {$bp->groups->table_name} WHERE status = 'public' {$hidden_sql} ORDER BY rand() {$pag_sql}" ) ); 489 490 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 491 } 492 487 488 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id, slug FROM {$bp->groups->table_name} WHERE status = 'public' {$hidden_sql} ORDER BY rand() {$pag_sql}" ) ); 489 490 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 491 } 492 493 493 function delete_all_invites( $group_id ) { 494 494 global $wpdb, $bp; 495 495 496 496 return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->groups->table_name_members} WHERE group_id = %d AND invite_sent = 1", $group_id ) ); 497 497 } 498 498 499 499 function get_global_forum_topic_count( $type ) { 500 500 global $bbdb, $wpdb, $bp; 501 501 502 502 if ( 'unreplied' == $type ) 503 503 $bp->groups->filter_sql = ' AND t.topic_posts = 1'; 504 504 505 505 $extra_sql = apply_filters( 'groups_total_public_forum_topic_count', $bp->groups->filter_sql, $type ); 506 506 … … 522 522 var $comments; 523 523 var $invite_sent; 524 524 525 525 var $user; 526 526 527 527 function bp_groups_member( $user_id = false, $group_id = false, $id = false, $populate = true ) { 528 528 if ( $user_id && $group_id && !$id ) { 529 529 $this->user_id = $user_id; 530 530 $this->group_id = $group_id; 531 531 532 532 if ( $populate ) 533 533 $this->populate(); 534 534 } 535 535 536 536 if ( $id ) { 537 537 $this->id = $id; 538 538 539 539 if ( $populate ) 540 540 $this->populate(); 541 } 542 } 543 541 } 542 } 543 544 544 function populate() { 545 545 global $wpdb, $bp; 546 546 547 547 if ( $this->user_id && $this->group_id && !$this->id ) 548 548 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d", $this->user_id, $this->group_id ); 549 549 550 550 if ( $this->id ) 551 551 $sql = $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name_members} WHERE id = %d", $this->id ); 552 552 553 553 $member = $wpdb->get_row($sql); 554 554 555 555 if ( $member ) { 556 556 $this->id = $member->id; … … 566 566 $this->comments = $member->comments; 567 567 $this->invite_sent = $member->invite_sent; 568 568 569 569 $this->user = new BP_Core_User( $this->user_id ); 570 570 } 571 571 } 572 572 573 573 function save() { 574 574 global $wpdb, $bp; 575 575 576 576 $this->user_id = apply_filters( 'groups_member_user_id_before_save', $this->user_id, $this->id ); 577 577 $this->group_id = apply_filters( 'groups_member_group_id_before_save', $this->group_id, $this->id ); … … 585 585 $this->comments = apply_filters( 'groups_member_comments_before_save', $this->comments, $this->id ); 586 586 $this->invite_sent = apply_filters( 'groups_member_invite_sent_before_save', $this->invite_sent, $this->id ); 587 587 588 588 do_action( 'groups_member_before_save', $this ); 589 589 590 590 if ( $this->id ) { 591 591 $sql = $wpdb->prepare( "UPDATE {$bp->groups->table_name_members} SET inviter_id = %d, is_admin = %d, is_mod = %d, is_banned = %d, user_title = %s, date_modified = FROM_UNIXTIME(%d), is_confirmed = %d, comments = %s, invite_sent = %d WHERE id = %d", $this->inviter_id, $this->is_admin, $this->is_mod, $this->is_banned, $this->user_title, $this->date_modified, $this->is_confirmed, $this->comments, $this->invite_sent, $this->id ); … … 596 596 if ( !$wpdb->query($sql) ) 597 597 return false; 598 598 599 599 $this->id = $wpdb->insert_id; 600 600 601 601 do_action( 'groups_member_after_save', $this ); 602 602 603 603 return true; 604 604 } 605 605 606 606 function promote( $status = 'mod' ) { 607 607 if ( 'mod' == $status ) { … … 610 610 $this->user_title = __( 'Group Mod', 'buddypress' ); 611 611 } 612 612 613 613 if ( 'admin' == $status ) { 614 614 $this->is_admin = 1; … … 616 616 $this->user_title = __( 'Group Admin', 'buddypress' ); 617 617 } 618 618 619 619 return $this->save(); 620 620 } 621 622 function demote() { 621 622 function demote() { 623 623 $this->is_mod = 0; 624 624 $this->is_admin = 0; 625 625 $this->user_title = false; 626 627 return $this->save(); 628 } 629 626 627 return $this->save(); 628 } 629 630 630 function ban() { 631 if ( $this->is_admin ) 632 return false; 633 631 if ( $this->is_admin ) 632 return false; 633 634 634 $this->is_mod = 0; 635 635 $this->is_banned = 1; 636 636 637 637 groups_update_groupmeta( $this->group_id, 'total_member_count', ( (int) groups_get_groupmeta( $this->group_id, 'total_member_count' ) - 1 ) ); 638 639 return $this->save(); 640 } 641 638 639 return $this->save(); 640 } 641 642 642 function unban() { 643 if ( $this->is_admin ) 644 return false; 645 643 if ( $this->is_admin ) 644 return false; 645 646 646 $this->is_banned = 0; 647 647 648 648 groups_update_groupmeta( $this->group_id, 'total_member_count', ( (int) groups_get_groupmeta( $this->group_id, 'total_member_count' ) + 1 ) ); 649 650 return $this->save(); 651 } 652 649 650 return $this->save(); 651 } 652 653 653 function accept_invite() { 654 654 $this->inviter_id = 0; … … 656 656 $this->date_modified = time(); 657 657 } 658 658 659 659 function accept_request() { 660 660 $this->is_confirmed = 1; 661 $this->date_modified = time(); 662 } 663 661 $this->date_modified = time(); 662 } 663 664 664 /* Static Functions */ 665 665 … … 668 668 669 669 $delete_result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d", $user_id, $group_id ) ); 670 670 671 671 return $delete_result; 672 672 } 673 673 674 674 function get_group_ids( $user_id, $limit = false, $page = false ) { 675 675 global $wpdb, $bp; … … 677 677 if ( $limit && $page ) 678 678 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 679 679 680 680 // If the user is logged in and viewing their own groups, we can show hidden and private groupss 681 681 if ( bp_is_home() ) { 682 $group_sql = $wpdb->prepare( "SELECT DISTINCT group_id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND inviter_id = 0 AND is_banned = 0{$pag_sql}", $user_id ); 683 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(group_id) FROM {$bp->groups->table_name_members} WHERE user_id = %d AND inviter_id = 0 AND is_banned = 0", $user_id ) ); 682 $group_sql = $wpdb->prepare( "SELECT DISTINCT group_id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND inviter_id = 0 AND is_banned = 0{$pag_sql}", $user_id ); 683 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(group_id) FROM {$bp->groups->table_name_members} WHERE user_id = %d AND inviter_id = 0 AND is_banned = 0", $user_id ) ); 684 684 } else { 685 $group_sql = $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0{$pag_sql}", $user_id ); 685 $group_sql = $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0{$pag_sql}", $user_id ); 686 686 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0", $user_id ) ); 687 687 } 688 688 689 689 $groups = $wpdb->get_col( $group_sql ); 690 690 691 691 return array( 'groups' => $groups, 'total' => (int) $total_groups ); 692 692 } 693 693 694 694 function get_recently_joined( $user_id, $limit = false, $page = false, $filter = false ) { 695 695 global $wpdb, $bp; … … 700 700 if ( $filter ) { 701 701 $filter = like_escape( $wpdb->escape( $filter ) ); 702 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 702 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 703 703 } 704 704 705 705 if ( !bp_is_home() ) 706 706 $hidden_sql = " AND g.status != 'hidden'"; 707 708 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_confirmed = 1 ORDER BY m.date_modified DESC {$pag_sql}", $user_id ) ); 709 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_confirmed = 1 ORDER BY m.date_modified DESC", $user_id ) ); 710 711 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 712 } 713 707 708 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_confirmed = 1 ORDER BY m.date_modified DESC {$pag_sql}", $user_id ) ); 709 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_confirmed = 1 ORDER BY m.date_modified DESC", $user_id ) ); 710 711 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 712 } 713 714 714 function get_most_popular( $user_id, $limit = false, $page = false, $filter = false ) { 715 715 global $wpdb, $bp; … … 720 720 if ( $filter ) { 721 721 like_escape( $wpdb->escape( $filter ) ); 722 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 722 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 723 723 } 724 724 … … 726 726 $hidden_sql = " AND g.status != 'hidden'"; 727 727 728 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_confirmed = 1 LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id AND gm.meta_key = 'total_member_count' ORDER BY CONVERT( gm.meta_value, SIGNED ) DESC {$pag_sql}", $user_id ) ); 729 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_confirmed = 1 LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id AND gm.meta_key = 'total_member_count' ORDER BY CONVERT( gm.meta_value, SIGNED ) DESC", $user_id ) ); 730 731 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 732 } 733 728 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_confirmed = 1 LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id AND gm.meta_key = 'total_member_count' ORDER BY CONVERT( gm.meta_value, SIGNED ) DESC {$pag_sql}", $user_id ) ); 729 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_confirmed = 1 LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id AND gm.meta_key = 'total_member_count' ORDER BY CONVERT( gm.meta_value, SIGNED ) DESC", $user_id ) ); 730 731 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 732 } 733 734 734 function get_recently_active( $user_id, $limit = false, $page = false, $filter = false ) { 735 735 global $wpdb, $bp; 736 737 if ( $limit && $page ) 738 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 739 736 737 if ( $limit && $page ) 738 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 739 740 740 if ( $filter ) { 741 741 $filter = like_escape( $wpdb->escape( $filter ) ); 742 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 742 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 743 743 } 744 744 745 745 if ( !bp_is_home() ) 746 746 $hidden_sql = " AND g.status != 'hidden'"; 747 748 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 ORDER BY gm.meta_value DESC {$pag_sql}", $user_id ) ); 749 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 ORDER BY gm.meta_value DESC", $user_id ) ); 750 751 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 752 } 753 747 748 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 ORDER BY gm.meta_value DESC {$pag_sql}", $user_id ) ); 749 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 ORDER BY gm.meta_value DESC", $user_id ) ); 750 751 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 752 } 753 754 754 function get_alphabetically( $user_id, $limit = false, $page = false, $filter = false ) { 755 755 global $wpdb, $bp; 756 756 757 757 if ( $limit && $page ) 758 758 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); … … 760 760 if ( $filter ) { 761 761 $filter = like_escape( $wpdb->escape( $filter ) ); 762 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 762 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 763 763 } 764 764 765 765 if ( !bp_is_home() ) 766 $hidden_sql = " AND g.status != 'hidden'"; 767 768 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 ORDER BY g.name ASC {$pag_sql}", $user_id ) ); 769 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 ORDER BY g.name ASC", $user_id ) ); 770 771 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 772 } 773 766 $hidden_sql = " AND g.status != 'hidden'"; 767 768 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 ORDER BY g.name ASC {$pag_sql}", $user_id ) ); 769 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 ORDER BY g.name ASC", $user_id ) ); 770 771 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 772 } 773 774 774 function get_is_admin_of( $user_id, $limit = false, $page = false, $filter = false ) { 775 775 global $wpdb, $bp; 776 776 777 777 if ( $limit && $page ) 778 778 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); … … 780 780 if ( $filter ) { 781 781 $filter = like_escape( $wpdb->escape( $filter ) ); 782 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 782 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 783 783 } 784 784 785 785 if ( !bp_is_home() ) 786 $hidden_sql = " AND g.status != 'hidden'"; 787 788 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY date_modified ASC {$pag_sql}", $user_id ) ); 789 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY date_modified ASC", $user_id ) ); 790 791 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 792 } 793 786 $hidden_sql = " AND g.status != 'hidden'"; 787 788 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY date_modified ASC {$pag_sql}", $user_id ) ); 789 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY date_modified ASC", $user_id ) ); 790 791 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 792 } 793 794 794 function get_is_mod_of( $user_id, $limit = false, $page = false, $filter = false ) { 795 795 global $wpdb, $bp; 796 796 797 797 if ( $limit && $page ) 798 798 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); … … 800 800 if ( $filter ) { 801 801 $filter = like_escape( $wpdb->escape( $filter ) ); 802 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 802 $filter_sql = " AND ( g.name LIKE '{$filter}%%' OR g.description LIKE '{$filter}%%' )"; 803 803 } 804 804 805 805 if ( !bp_is_home() ) 806 $hidden_sql = " AND g.status != 'hidden'"; 807 808 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY date_modified ASC {$pag_sql}", $user_id ) ); 809 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY date_modified ASC", $user_id ) ); 810 811 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 812 } 813 806 $hidden_sql = " AND g.status != 'hidden'"; 807 808 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY date_modified ASC {$pag_sql}", $user_id ) ); 809 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY date_modified ASC", $user_id ) ); 810 811 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 812 } 813 814 814 function total_group_count( $user_id = false ) { 815 815 global $bp, $wpdb; 816 816 817 817 if ( !$user_id ) 818 818 $user_id = $bp->displayed_user->id; 819 819 820 820 if ( bp_is_home() ) { 821 return $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(group_id) FROM {$bp->groups->table_name_members} WHERE user_id = %d AND inviter_id = 0 AND is_banned = 0", $user_id ) ); 821 return $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(group_id) FROM {$bp->groups->table_name_members} WHERE user_id = %d AND inviter_id = 0 AND is_banned = 0", $user_id ) ); 822 822 } else { 823 return $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0", $user_id ) ); 824 } 825 } 826 823 return $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT count(m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.inviter_id = 0 AND m.is_banned = 0", $user_id ) ); 824 } 825 } 826 827 827 function get_invites( $user_id ) { 828 828 global $wpdb, $bp; 829 829 830 830 $group_ids = $wpdb->get_results( $wpdb->prepare( "SELECT group_id FROM {$bp->groups->table_name_members} WHERE user_id = %d and is_confirmed = 0 AND inviter_id != 0 AND invite_sent = 1", $user_id ) ); 831 831 832 832 return $group_ids; 833 833 } 834 834 835 835 function check_has_invite( $user_id, $group_id ) { 836 836 global $wpdb, $bp; 837 837 838 838 if ( !$user_id ) 839 839 return false; 840 841 return $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 0 AND inviter_id != 0 AND invite_sent = 1", $user_id, $group_id ) ); 842 } 843 840 841 return $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 0 AND inviter_id != 0 AND invite_sent = 1", $user_id, $group_id ) ); 842 } 843 844 844 function delete_invite( $user_id, $group_id ) { 845 845 global $wpdb, $bp; 846 846 847 847 if ( !$user_id ) 848 848 return false; 849 850 return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 0 AND inviter_id != 0 AND invite_sent = 1", $user_id, $group_id ) ); 851 } 852 849 850 return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 0 AND inviter_id != 0 AND invite_sent = 1", $user_id, $group_id ) ); 851 } 852 853 853 function check_is_admin( $user_id, $group_id ) { 854 854 global $wpdb, $bp; 855 855 856 856 if ( !$user_id ) 857 857 return false; 858 858 859 859 return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_admin = 1 AND is_banned = 0", $user_id, $group_id ) ); 860 860 } 861 861 862 862 function check_is_mod( $user_id, $group_id ) { 863 863 global $wpdb, $bp; 864 864 865 865 if ( !$user_id ) 866 866 return false; 867 867 868 868 return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_mod = 1 AND is_banned = 0", $user_id, $group_id ) ); 869 869 } 870 870 871 871 function check_is_member( $user_id, $group_id ) { 872 872 global $wpdb, $bp; 873 873 874 874 if ( !$user_id ) 875 875 return false; 876 877 return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 1 AND is_banned = 0", $user_id, $group_id ) ); 878 } 879 876 877 return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 1 AND is_banned = 0", $user_id, $group_id ) ); 878 } 879 880 880 function check_is_banned( $user_id, $group_id ) { 881 881 global $wpdb, $bp; 882 882 883 883 if ( !$user_id ) 884 884 return false; 885 885 886 886 return $wpdb->get_var( $wpdb->prepare( "SELECT is_banned FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d", $user_id, $group_id ) ); 887 887 } 888 888 889 889 function check_for_membership_request( $user_id, $group_id ) { 890 890 global $wpdb, $bp; 891 891 892 892 if ( !$user_id ) 893 893 return false; 894 895 return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 0 AND is_banned = 0 AND inviter_id = 0", $user_id, $group_id ) ); 896 } 897 894 895 return $wpdb->query( $wpdb->prepare( "SELECT id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id = %d AND is_confirmed = 0 AND is_banned = 0 AND inviter_id = 0", $user_id, $group_id ) ); 896 } 897 898 898 function get_random_groups( $user_id, $total_groups = 5 ) { 899 899 global $wpdb, $bp; 900 900 901 901 // If the user is logged in and viewing their random groups, we can show hidden and private groups 902 902 if ( bp_is_home() ) { 903 903 return $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT group_id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND is_confirmed = 1 AND is_banned = 0 ORDER BY rand() LIMIT $total_groups", $user_id ) ); 904 904 } else { 905 return $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY rand() LIMIT $total_groups", $user_id ) ); 906 } 907 } 908 905 return $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY rand() LIMIT $total_groups", $user_id ) ); 906 } 907 } 908 909 909 function get_group_administrator_ids( $group_id ) { 910 910 global $bp, $wpdb; 911 911 912 912 return $wpdb->get_results( $wpdb->prepare( "SELECT user_id, date_modified FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_admin = 1 AND is_banned = 0", $group_id ) ); 913 913 } 914 914 915 915 function get_group_moderator_ids( $group_id ) { 916 916 global $bp, $wpdb; … … 918 918 return $wpdb->get_results( $wpdb->prepare( "SELECT user_id, date_modified FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_mod = 1 AND is_banned = 0", $group_id ) ); 919 919 } 920 920 921 921 function get_all_membership_request_user_ids( $group_id ) { 922 922 global $bp, $wpdb; 923 923 924 return $wpdb->get_col( $wpdb->prepare( "SELECT user_id FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 0 AND inviter_id = 0", $group_id ) ); 925 } 926 924 return $wpdb->get_col( $wpdb->prepare( "SELECT user_id FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 0 AND inviter_id = 0", $group_id ) ); 925 } 926 927 927 function get_all_for_group( $group_id, $limit = false, $page = false, $exclude_admins_mods = true, $exclude_banned = true ) { 928 928 global $bp, $wpdb; 929 929 930 930 if ( $limit && $page ) 931 931 $pag_sql = $wpdb->prepare( "LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 932 932 933 933 if ( $exclude_admins_mods ) 934 934 $exclude_sql = $wpdb->prepare( "AND is_admin = 0 AND is_mod = 0" ); 935 935 936 936 if ( $exclude_banned ) 937 937 $banned_sql = $wpdb->prepare( " AND is_banned = 0" ); 938 938 939 939 $members = $wpdb->get_results( $wpdb->prepare( "SELECT user_id, date_modified FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 1 {$banned_sql} {$exclude_sql} {$pag_sql}", $group_id ) ); 940 940 941 941 if ( !$members ) 942 942 return false; 943 944 if ( !isset($pag_sql) ) 943 944 if ( !isset($pag_sql) ) 945 945 $total_member_count = count($members); 946 946 else 947 947 $total_member_count = $wpdb->get_var( $wpdb->prepare( "SELECT count(user_id) FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 1 {$banned_sql} {$exclude_sql}", $group_id ) ); 948 948 949 949 return array( 'members' => $members, 'count' => $total_member_count ); 950 950 } 951 951 952 952 function delete_all_for_user( $user_id ) { 953 953 global $wpdb, $bp; 954 955 return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->groups->table_name_members} WHERE user_id = %d", $user_id ) ); 954 955 return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->groups->table_name_members} WHERE user_id = %d", $user_id ) ); 956 956 } 957 957 } … … 959 959 /** 960 960 * API for creating group extensions without having to hardcode the content into 961 * the theme. 961 * the theme. 962 962 * 963 963 * This class must be extended for each group extension and the following methods overridden: 964 * 964 * 965 965 * BP_Group_Extension::widget_display(), BP_Group_Extension::display(), 966 966 * BP_Group_Extension::edit_screen_save(), BP_Group_Extension::edit_screen(), … … 974 974 var $name = false; 975 975 var $slug = false; 976 976 977 977 /* Will this extension be visible to non-members of a group? Options: public/private */ 978 978 var $visibility = 'public'; 979 979 980 980 var $create_step_position = 81; 981 981 var $nav_item_position = 81; 982 982 983 983 var $enable_create_step = true; 984 984 var $enable_nav_item = true; 985 985 var $enable_edit_item = true; 986 986 987 987 var $nav_item_name = false; 988 988 989 989 var $display_hook = 'groups_custom_group_boxes'; 990 990 var $template_file = 'plugin-template'; 991 991 992 992 // Methods you should override 993 993 994 994 function display() { 995 995 die( 'function BP_Group_Extension::display() must be over-ridden in a sub-class.' ); 996 996 } 997 997 998 998 function widget_display() { 999 999 die( 'function BP_Group_Extension::widget_display() must be over-ridden in a sub-class.' ); 1000 1000 } 1001 1001 1002 1002 function edit_screen() { 1003 1003 die( 'function BP_Group_Extension::edit_screen() must be over-ridden in a sub-class.' ); 1004 1004 } 1005 1005 1006 1006 function edit_screen_save() { 1007 1007 die( 'function BP_Group_Extension::edit_screen_save() must be over-ridden in a sub-class.' ); 1008 1008 } 1009 1009 1010 1010 function create_screen() { 1011 1011 die( 'function BP_Group_Extension::create_screen() must be over-ridden in a sub-class.' ); 1012 1012 } 1013 1013 1014 1014 function create_screen_save() { 1015 die( 'function BP_Group_Extension::create_screen_save() must be over-ridden in a sub-class.' ); 1016 } 1017 1015 die( 'function BP_Group_Extension::create_screen_save() must be over-ridden in a sub-class.' ); 1016 } 1017 1018 1018 // Private Methods 1019 1019 1020 1020 function _register() { 1021 1021 global $bp; … … 1027 1027 /* Attach the group creation step display content action */ 1028 1028 add_action( 'groups_custom_create_steps', array( &$this, 'create_screen' ) ); 1029 1029 1030 1030 /* Attach the group creation step save content action */ 1031 1031 add_action( 'groups_create_group_step_save_' . $this->slug, array( &$this, 'create_screen_save' ) ); 1032 1032 } 1033 1033 1034 1034 /* Construct the admin edit tab for the new group extension */ 1035 1035 if ( $this->enable_edit_item ) { 1036 add_action( 'groups_admin_tabs', create_function( '$current, $group_slug', 'if ( "' . attribute_escape( $this->slug ) . '" == $current ) $selected = " class=\"current\""; echo "<li{$selected}><a href=\"' . $bp->root_domain . '/' . $bp->groups->slug . '/{$group_slug}/admin/' . attribute_escape( $this->slug ) . '\">' . attribute_escape( $this->name ) . '</a></li>";' ), 10, 2 ); 1036 add_action( 'groups_admin_tabs', create_function( '$current, $group_slug', 'if ( "' . attribute_escape( $this->slug ) . '" == $current ) $selected = " class=\"current\""; echo "<li{$selected}><a href=\"' . $bp->root_domain . '/' . $bp->groups->slug . '/{$group_slug}/admin/' . attribute_escape( $this->slug ) . '\">' . attribute_escape( $this->name ) . '</a></li>";' ), 10, 2 ); 1037 1037 1038 1038 /* Catch the edit screen and forward it to the plugin template */ … … 1042 1042 1043 1043 if ( '' != locate_template( array( 'groups/single/admin.php' ), false ) ) { 1044 bp_core_load_template( apply_filters( 'groups_template_group_admin', 'groups/single/admin' ) ); 1044 bp_core_load_template( apply_filters( 'groups_template_group_admin', 'groups/single/admin' ) ); 1045 1045 } else { 1046 1046 add_action( 'bp_template_content_header', create_function( '', 'echo "<ul class=\"content-header-nav\">"; bp_group_admin_tabs(); echo "</ul>";' ) ); 1047 1047 add_action( 'bp_template_content', array( &$this, 'edit_screen' ) ); 1048 bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'plugin-template' ) ); 1048 bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'plugin-template' ) ); 1049 1049 } 1050 1050 } … … 1055 1055 if ( $this->enable_nav_item ) { 1056 1056 if ( $bp->current_component == $bp->groups->slug && $bp->is_single_item ) 1057 bp_core_new_subnav_item( array( 'name' => ( !$this->nav_item_name ) ? $this->name : $this->nav_item_name, 'slug' => $this->slug, 'parent_slug' => BP_GROUPS_SLUG, 'parent_url' => bp_get_group_permalink( $bp->groups->current_group ) . '/', 'position' => $this->nav_item_position, 'item_css_id' => 'nav-' . $this->slug, 'screen_function' => array( &$this, '_display_hook' ), 'user_has_access' => $this->enable_nav_item ) ); 1057 bp_core_new_subnav_item( array( 'name' => ( !$this->nav_item_name ) ? $this->name : $this->nav_item_name, 'slug' => $this->slug, 'parent_slug' => BP_GROUPS_SLUG, 'parent_url' => bp_get_group_permalink( $bp->groups->current_group ) . '/', 'position' => $this->nav_item_position, 'item_css_id' => 'nav-' . $this->slug, 'screen_function' => array( &$this, '_display_hook' ), 'user_has_access' => $this->enable_nav_item ) ); 1058 1058 1059 1059 /* When we are viewing the extension display page, set the title and options title */ … … 1063 1063 } 1064 1064 } 1065 1065 1066 1066 /* Hook the group home widget */ 1067 1067 if ( $bp->current_component == $bp->groups->slug && $bp->is_single_item && ( !$bp->current_action || 'home' == $bp->current_action ) ) … … 1069 1069 } 1070 1070 } 1071 1071 1072 1072 function _display_hook() { 1073 1073 add_action( 'bp_template_content', array( &$this, 'display' ) ); … … 1078 1078 function bp_register_group_extension( $group_extension_class ) { 1079 1079 global $bp; 1080 1080 1081 1081 if ( !class_exists( $group_extension_class ) ) 1082 1082 return false; 1083 1083 1084 1084 /* Register the group extension on the plugins_loaded action so we have access to all plugins */ 1085 1085 add_action( 'plugins_loaded', create_function( '', '$extension = new ' . $group_extension_class . '; add_action( "wp", array( &$extension, "_register" ), 2 );' ) );
Note: See TracChangeset
for help on using the changeset viewer.