Changeset 3761
- Timestamp:
- 01/20/2011 11:49:24 AM (14 years ago)
- Location:
- trunk/bp-blogs
- Files:
-
- 5 added
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/bp-blogs/bp-blogs-loader.php
r3757 r3761 1 1 <?php 2 2 3 // Required Files 4 require ( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-classes.php' ); 5 require ( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-templatetags.php' ); 6 7 // Include the sitewide blog posts widget if this is a multisite installation 8 if ( is_multisite() ) 9 require ( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-widgets.php' ); 3 /** 4 * BuddyPress Blogs Streams Loader 5 * 6 * An blogs stream component, for users, groups, and blog tracking. 7 * 8 * @package BuddyPress 9 * @subpackage Blogs Core 10 */ 11 12 class BP_Blogs_Component extends BP_Component { 13 14 /** 15 * Start the blogs component creation process 16 * 17 * @since BuddyPress {unknown} 18 */ 19 function BP_Blogs_Component() { 20 parent::start( 'blogs', __( 'Blogs Streams', 'buddypress' ) ); 21 } 22 23 /** 24 * Setup globals 25 * 26 * The BP_BLOGS_SLUG constant is deprecated, and only used here for 27 * backwards compatibility. 28 * 29 * @since BuddyPress {unknown} 30 * @global obj $bp 31 */ 32 function _setup_globals() { 33 global $bp; 34 35 if ( !defined( 'BP_BLOGS_SLUG' ) ) 36 define ( 'BP_BLOGS_SLUG', $this->id ); 37 38 // Do some slug checks 39 $this->slug = BP_BLOGS_SLUG; 40 $this->root_slug = isset( $bp->pages->blogs->slug ) ? $bp->pages->blogs->slug : $this->slug; 41 42 // Tables 43 $this->table_name = $bp->table_prefix . 'bp_user_blogs'; 44 $this->table_name_meta = $bp->table_prefix . 'bp_user_blogs_blogmeta'; 45 46 // Notifications 47 $bp->blogs->notification_callback = 'bp_blogs_format_notifications'; 48 49 // Register this in the active components array 50 $bp->active_components[$this->slug] = $this->id; 51 52 // The default text for the blogs directory search box 53 $bp->default_search_strings[$this->slug] = __( 'Search Blogs...', 'buddypress' ); 54 } 55 56 /** 57 * Include files 58 */ 59 function _includes() { 60 require_once( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-cache.php' ); 61 require_once( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-classes.php' ); 62 require_once( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-screens.php' ); 63 require_once( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-actions.php' ); 64 require_once( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-activity.php' ); 65 require_once( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-template.php' ); 66 require_once( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-functions.php' ); 67 68 69 70 if ( is_multisite() ) 71 require_once( BP_PLUGIN_DIR . '/bp-blogs/bp-blogs-widgets.php' ); 72 } 73 74 /** 75 * Setup BuddyBar navigation 76 * 77 * @global obj $bp 78 */ 79 function _setup_nav() { 80 global $bp; 81 82 // Add 'Blogs' to the main navigation 83 bp_core_new_nav_item( array( 84 'name' => __( 'Blogs', 'buddypress' ), 85 'slug' => $bp->blogs->slug, 86 'position' => 10, 87 'screen_function' => 'bp_blogs_screen_my_blogs', 88 'default_subnav_slug' => 'just-me', 89 'item_css_id' => $bp->blogs->id ) 90 ); 91 92 // Stop if there is no user displayed or logged in 93 if ( !is_user_logged_in() && !isset( $bp->displayed_user->id ) ) 94 return; 95 96 // User links 97 $user_domain = ( isset( $bp->displayed_user->domain ) ) ? $bp->displayed_user->domain : $bp->loggedin_user->domain; 98 $user_login = ( isset( $bp->displayed_user->userdata->user_login ) ) ? $bp->displayed_user->userdata->user_login : $bp->loggedin_user->userdata->user_login; 99 $blogs_link = $user_domain . $bp->blogs->slug . '/'; 100 101 // Add the subnav items to the blogs nav item if we are using a theme that supports this 102 bp_core_new_subnav_item( array( 103 'name' => __( 'Personal', 'buddypress' ), 104 'slug' => 'just-me', 105 'parent_url' => $blogs_link, 106 'parent_slug' => $bp->blogs->slug, 107 'screen_function' => 'bp_blogs_screen_my_blogs', 108 'position' => 10 109 ) ); 110 111 // Additional menu if friends is active 112 if ( bp_is_active( 'friends' ) ) { 113 bp_core_new_subnav_item( array( 114 'name' => __( 'Friends', 'buddypress' ), 115 'slug' => BP_FRIENDS_SLUG, 116 'parent_url' => $blogs_link, 117 'parent_slug' => $bp->blogs->slug, 118 'screen_function' => 'bp_blogs_screen_friends', 119 'position' => 20, 120 'item_css_id' => 'blogs-friends' 121 ) ); 122 } 123 124 // Additional menu if groups is active 125 if ( bp_is_active( 'groups' ) ) { 126 bp_core_new_subnav_item( array( 127 'name' => __( 'Groups', 'buddypress' ), 128 'slug' => BP_GROUPS_SLUG, 129 'parent_url' => $blogs_link, 130 'parent_slug' => $bp->blogs->slug, 131 'screen_function' => 'bp_blogs_screen_groups', 132 'position' => 30, 133 'item_css_id' => 'blogs-groups' 134 ) ); 135 } 136 137 // Favorite blogs items 138 bp_core_new_subnav_item( array( 139 'name' => __( 'Favorites', 'buddypress' ), 140 'slug' => 'favorites', 141 'parent_url' => $blogs_link, 142 'parent_slug' => $bp->blogs->slug, 143 'screen_function' => 'bp_blogs_screen_favorites', 144 'position' => 40, 145 'item_css_id' => 'blogs-favs' 146 ) ); 147 148 // @ mentions 149 bp_core_new_subnav_item( array( 150 'name' => sprintf( __( '@%s Mentions', 'buddypress' ), $user_login ), 151 'slug' => 'mentions', 152 'parent_url' => $blogs_link, 153 'parent_slug' => $bp->blogs->slug, 154 'screen_function' => 'bp_blogs_screen_mentions', 155 'position' => 50, 156 'item_css_id' => 'blogs-mentions' 157 ) ); 158 159 // Adjust title based on view 160 if ( bp_is_blogs_component() ) { 161 if ( bp_is_my_profile() ) { 162 $bp->bp_options_title = __( 'My Blogs', 'buddypress' ); 163 } else { 164 $bp->bp_options_avatar = bp_core_fetch_avatar( array( 165 'item_id' => $bp->displayed_user->id, 166 'type' => 'thumb' 167 ) ); 168 $bp->bp_options_title = $bp->displayed_user->fullname; 169 } 170 } 171 } 172 } 173 // Create the blogs component 174 $bp->blogs = new BP_Blogs_Component(); 175 176 ?> 177 178 179 180 <?php 10 181 11 182 function bp_blogs_setup_globals() { … … 95 266 add_action( 'wp', 'bp_blogs_directory_blogs_setup', 2 ); 96 267 97 98 /*******************************************************************************99 * Screen Functions100 *101 * Screen functions are the controllers of BuddyPress. They will execute when their102 * specific URL is caught. They will first save or manipulate data using business103 * functions, then pass on the user to a template file.104 */105 106 function bp_blogs_screen_my_blogs() {107 global $bp;108 109 if ( !is_multisite() )110 return false;111 112 do_action( 'bp_blogs_screen_my_blogs' );113 bp_core_load_template( apply_filters( 'bp_blogs_template_my_blogs', 'members/single/home' ) );114 }115 116 function bp_blogs_screen_create_a_blog() {117 global $bp;118 119 if ( !is_multisite() || $bp->current_component != $bp->blogs->slug || 'create' != $bp->current_action )120 return false;121 122 if ( !is_user_logged_in() || !bp_blog_signup_enabled() )123 return false;124 125 do_action( 'bp_blogs_screen_create_a_blog' );126 bp_core_load_template( apply_filters( 'bp_blogs_template_create_a_blog', 'blogs/create' ) );127 }128 add_action( 'wp', 'bp_blogs_screen_create_a_blog', 3 );129 130 131 /*******************************************************************************132 * Activity & Notification Functions133 *134 * These functions handle the recording, deleting and formatting of activity and135 * notifications for the user and for this specific component.136 */137 138 function bp_blogs_register_activity_actions() {139 global $bp;140 141 if ( !function_exists( 'bp_activity_set_action' ) )142 return false;143 144 bp_activity_set_action( $bp->blogs->id, 'new_blog', __( 'New blog created', 'buddypress' ) );145 bp_activity_set_action( $bp->blogs->id, 'new_blog_post', __( 'New blog post published', 'buddypress' ) );146 bp_activity_set_action( $bp->blogs->id, 'new_blog_comment', __( 'New blog post comment posted', 'buddypress' ) );147 148 do_action( 'bp_blogs_register_activity_actions' );149 }150 add_action( 'bp_register_activity_actions', 'bp_blogs_register_activity_actions' );151 152 function bp_blogs_record_activity( $args = '' ) {153 global $bp;154 155 if ( !function_exists( 'bp_activity_add' ) )156 return false;157 158 /**159 * Because blog, comment, and blog post code execution happens before160 * anything else we may need to manually instantiate the activity161 * component globals.162 */163 if ( !$bp->activity && function_exists('bp_activity_setup_globals') )164 bp_activity_setup_globals();165 166 $defaults = array(167 'user_id' => $bp->loggedin_user->id,168 'action' => '',169 'content' => '',170 'primary_link' => '',171 'component' => $bp->blogs->id,172 'type' => false,173 'item_id' => false,174 'secondary_item_id' => false,175 'recorded_time' => bp_core_current_time(),176 'hide_sitewide' => false177 );178 179 $r = wp_parse_args( $args, $defaults );180 extract( $r, EXTR_SKIP );181 182 // Remove large images and replace them with just one image thumbnail183 if ( function_exists( 'bp_activity_thumbnail_content_images' ) && !empty( $content ) )184 $content = bp_activity_thumbnail_content_images( $content, $primary_link );185 186 if ( !empty( $action ) )187 $action = apply_filters( 'bp_blogs_record_activity_action', $action );188 189 if ( !empty( $content ) )190 $content = apply_filters( 'bp_blogs_record_activity_content', bp_create_excerpt( $content ), $content );191 192 // Check for an existing entry and update if one exists.193 $id = bp_activity_get_activity_id( array(194 'user_id' => $user_id,195 'component' => $component,196 'type' => $type,197 'item_id' => $item_id,198 'secondary_item_id' => $secondary_item_id199 ) );200 201 return bp_activity_add( array( 'id' => $id, 'user_id' => $user_id, 'action' => $action, 'content' => $content, 'primary_link' => $primary_link, 'component' => $component, 'type' => $type, 'item_id' => $item_id, 'secondary_item_id' => $secondary_item_id, 'recorded_time' => $recorded_time, 'hide_sitewide' => $hide_sitewide ) );202 }203 204 function bp_blogs_delete_activity( $args = true ) {205 global $bp;206 207 if ( function_exists( 'bp_activity_delete_by_item_id' ) ) {208 $defaults = array(209 'item_id' => false,210 'component' => $bp->blogs->id,211 'type' => false,212 'user_id' => false,213 'secondary_item_id' => false214 );215 216 $params = wp_parse_args( $args, $defaults );217 extract( $params, EXTR_SKIP );218 219 bp_activity_delete_by_item_id( array(220 'item_id' => $item_id,221 'component' => $component,222 'type' => $type,223 'user_id' => $user_id,224 'secondary_item_id' => $secondary_item_id225 ) );226 }227 }228 229 /********************************************************************************230 * Business Functions231 *232 * Business functions are where all the magic happens in BuddyPress. They will233 * handle the actual saving or manipulation of information. Usually they will234 * hand off to a database class for data access, then return235 * true or false on success or failure.236 */237 238 function bp_blogs_get_blogs( $args = '' ) {239 global $bp;240 241 $defaults = array(242 'type' => 'active', // active, alphabetical, newest, or random243 'user_id' => false, // Pass a user_id to limit to only blogs that this user has privilages higher than subscriber on244 'search_terms' => false, // Limit to blogs that match these search terms245 'per_page' => 20, // The number of results to return per page246 'page' => 1, // The page to return if limiting per page247 );248 249 $params = wp_parse_args( $args, $defaults );250 extract( $params, EXTR_SKIP );251 252 return apply_filters( 'bp_blogs_get_blogs', BP_Blogs_Blog::get( $type, $per_page, $page, $user_id, $search_terms ), $params );253 }254 255 function bp_blogs_record_existing_blogs() {256 global $bp, $wpdb;257 258 // Truncate user blogs table and re-record.259 $wpdb->query( "TRUNCATE TABLE {$bp->blogs->table_name}" );260 261 $blog_ids = $wpdb->get_col( $wpdb->prepare( "SELECT blog_id FROM {$wpdb->base_prefix}blogs WHERE mature = 0 AND spam = 0 AND deleted = 0" ) );262 263 if ( $blog_ids ) {264 foreach( (array)$blog_ids as $blog_id ) {265 $users = get_users_of_blog( $blog_id );266 267 if ( $users ) {268 foreach ( (array)$users as $user ) {269 $role = unserialize( $user->meta_value );270 271 if ( !isset( $role['subscriber'] ) )272 bp_blogs_record_blog( $blog_id, $user->user_id, true );273 }274 }275 }276 }277 }278 279 /**280 * Makes BuddyPress aware of a new site so that it can track its activity.281 *282 * @global object $bp BuddyPress global settings283 * @param int $blog_id284 * @param int $user_id285 * @param $bool $no_activity ; optional.286 * @since 1.0287 * @uses BP_Blogs_Blog288 */289 function bp_blogs_record_blog( $blog_id, $user_id, $no_activity = false ) {290 global $bp;291 292 if ( !$user_id )293 $user_id = $bp->loggedin_user->id;294 295 $name = get_blog_option( $blog_id, 'blogname' );296 $description = get_blog_option( $blog_id, 'blogdescription' );297 298 if ( empty( $name ) )299 return false;300 301 $recorded_blog = new BP_Blogs_Blog;302 $recorded_blog->user_id = $user_id;303 $recorded_blog->blog_id = $blog_id;304 305 $recorded_blog_id = $recorded_blog->save();306 307 $is_recorded = !empty( $recorded_blog_id ) ? true : false;308 309 bp_blogs_update_blogmeta( $recorded_blog->blog_id, 'name', $name );310 bp_blogs_update_blogmeta( $recorded_blog->blog_id, 'description', $description );311 bp_blogs_update_blogmeta( $recorded_blog->blog_id, 'last_activity', bp_core_current_time() );312 313 $is_private = !empty( $_POST['blog_public'] ) && (int)$_POST['blog_public'] ? false : true;314 315 // Only record this activity if the blog is public316 if ( !$is_private && !$no_activity ) {317 // Record this in activity streams318 bp_blogs_record_activity( array(319 'user_id' => $recorded_blog->user_id,320 'action' => apply_filters( 'bp_blogs_activity_created_blog_action', sprintf( __( '%s created the blog %s', 'buddypress'), bp_core_get_userlink( $recorded_blog->user_id ), '<a href="' . get_site_url( $recorded_blog->blog_id ) . '">' . esc_attr( $name ) . '</a>' ), $recorded_blog, $name, $description ),321 'primary_link' => apply_filters( 'bp_blogs_activity_created_blog_primary_link', get_site_url( $recorded_blog->blog_id ), $recorded_blog->blog_id ),322 'type' => 'new_blog',323 'item_id' => $recorded_blog->blog_id324 ) );325 }326 327 do_action( 'bp_blogs_new_blog', &$recorded_blog, $is_private, $is_recorded );328 }329 add_action( 'wpmu_new_blog', 'bp_blogs_record_blog', 10, 2 );330 331 /**332 * Updates blogname in BuddyPress blogmeta table333 *334 * @global object $wpdb DB Layer335 * @param string $oldvalue Value before save (not used)336 * @param string $newvalue Value to change meta to337 */338 function bp_blogs_update_option_blogname( $oldvalue, $newvalue ) {339 global $wpdb;340 341 bp_blogs_update_blogmeta( $wpdb->blogid, 'name', $newvalue );342 }343 add_action( 'update_option_blogname', 'bp_blogs_update_option_blogname', 10, 2 );344 345 /**346 * Updates blogdescription in BuddyPress blogmeta table347 *348 * @global object $wpdb DB Layer349 * @param string $oldvalue Value before save (not used)350 * @param string $newvalue Value to change meta to351 */352 function bp_blogs_update_option_blogdescription( $oldvalue, $newvalue ) {353 global $wpdb;354 355 bp_blogs_update_blogmeta( $wpdb->blogid, 'description', $newvalue );356 }357 add_action( 'update_option_blogdescription', 'bp_blogs_update_option_blogdescription', 10, 2 );358 359 function bp_blogs_record_post( $post_id, $post, $user_id = false ) {360 global $bp, $wpdb;361 362 $post_id = (int)$post_id;363 $blog_id = (int)$wpdb->blogid;364 365 if ( !$user_id )366 $user_id = (int)$post->post_author;367 368 // This is to stop infinite loops with Donncha's sitewide tags plugin369 if ( !empty( $bp->site_options['tags_blog_id'] ) && (int)$blog_id == (int)$bp->site_options['tags_blog_id'] )370 return false;371 372 // Don't record this if it's not a post373 if ( 'post' != $post->post_type )374 return false;375 376 if ( 'publish' == $post->post_status && empty( $post->post_password ) ) {377 if ( (int)get_blog_option( $blog_id, 'blog_public' ) || !bp_core_is_multisite() ) {378 // Record this in activity streams379 $post_permalink = get_permalink( $post_id );380 381 if ( is_multisite() ) {382 $activity_action = sprintf( __( '%1$s wrote a new blog post: %2$s on the blog %3$s', 'buddypress' ), bp_core_get_userlink( (int)$post->post_author ), '<a href="' . $post_permalink . '">' . $post->post_title . '</a>', '<a href="' . get_blog_option( $blog_id, 'home' ) . '">' . get_blog_option( $blog_id, 'blogname' ) . '</a>' );383 } else {384 $activity_action = sprintf( __( '%1$s wrote a new blog post: %2$s', 'buddypress' ), bp_core_get_userlink( (int)$post->post_author ), '<a href="' . $post_permalink . '">' . $post->post_title . '</a>' );385 }386 387 $activity_content = $post->post_content;388 389 bp_blogs_record_activity( array(390 'user_id' => (int)$post->post_author,391 'action' => apply_filters( 'bp_blogs_activity_new_post_action', $activity_action, &$post, $post_permalink ),392 'content' => apply_filters( 'bp_blogs_activity_new_post_content', $activity_content, &$post, $post_permalink ),393 'primary_link' => apply_filters( 'bp_blogs_activity_new_post_primary_link', $post_permalink, $post_id ),394 'type' => 'new_blog_post',395 'item_id' => $blog_id,396 'secondary_item_id' => $post_id,397 'recorded_time' => $post->post_date_gmt398 ));399 }400 401 // Update the blogs last activity402 bp_blogs_update_blogmeta( $blog_id, 'last_activity', bp_core_current_time() );403 } else {404 bp_blogs_remove_post( $post_id, $blog_id, $user_id );405 }406 407 do_action( 'bp_blogs_new_blog_post', $post_id, $post, $user_id );408 }409 add_action( 'save_post', 'bp_blogs_record_post', 10, 2 );410 411 /**412 * Record blog comment activity. Checks if blog is public and post is not413 * password protected.414 *415 * @global object $wpdb416 * @global $bp $bp417 * @param int $comment_id418 * @param bool $is_approved419 * @return mixed420 */421 function bp_blogs_record_comment( $comment_id, $is_approved = true ) {422 global $wpdb, $bp;423 424 // Get the users comment425 $recorded_comment = get_comment( $comment_id );426 427 // Don't record activity if the comment hasn't been approved428 if ( empty( $is_approved ) )429 return false;430 431 // Don't record activity if no email address has been included432 if ( empty( $recorded_comment->comment_author_email ) )433 return false;434 435 // Get the user_id from the comment author email.436 $user = get_user_by_email( $recorded_comment->comment_author_email );437 $user_id = (int)$user->ID;438 439 // If there's no registered user id, don't record activity440 if ( empty( $user_id ) )441 return false;442 443 // Get blog and post data444 $blog_id = (int)$wpdb->blogid;445 $recorded_comment->post = get_post( $recorded_comment->comment_post_ID );446 447 // If this is a password protected post, don't record the comment448 if ( !empty( $recorded_comment->post->post_password ) )449 return false;450 451 // If blog is public allow activity to be posted452 if ( get_blog_option( $blog_id, 'blog_public' ) ) {453 454 // Get activity related links455 $post_permalink = get_permalink( $recorded_comment->comment_post_ID );456 $comment_link = htmlspecialchars( get_comment_link( $recorded_comment->comment_ID ) );457 458 // Prepare to record in activity streams459 if ( is_multisite() )460 $activity_action = sprintf( __( '%1$s commented on the blog post %2$s on the blog %3$s', 'buddypress' ), bp_core_get_userlink( $user_id ), '<a href="' . $post_permalink . '">' . apply_filters( 'the_title', $recorded_comment->post->post_title ) . '</a>', '<a href="' . get_blog_option( $blog_id, 'home' ) . '">' . get_blog_option( $blog_id, 'blogname' ) . '</a>' );461 else462 $activity_action = sprintf( __( '%1$s commented on the blog post %2$s', 'buddypress' ), bp_core_get_userlink( $user_id ), '<a href="' . $post_permalink . '">' . apply_filters( 'the_title', $recorded_comment->post->post_title ) . '</a>' );463 464 $activity_content = $recorded_comment->comment_content;465 466 // Record in activity streams467 bp_blogs_record_activity( array(468 'user_id' => $user_id,469 'action' => apply_filters( 'bp_blogs_activity_new_comment_action', $activity_action, &$recorded_comment, $comment_link ),470 'content' => apply_filters( 'bp_blogs_activity_new_comment_content', $activity_content, &$recorded_comment, $comment_link ),471 'primary_link' => apply_filters( 'bp_blogs_activity_new_comment_primary_link', $comment_link, &$recorded_comment ),472 'type' => 'new_blog_comment',473 'item_id' => $blog_id,474 'secondary_item_id' => $comment_id,475 'recorded_time' => $recorded_comment->comment_date_gmt476 ) );477 478 // Update the blogs last active date479 bp_blogs_update_blogmeta( $blog_id, 'last_activity', bp_core_current_time() );480 }481 482 return $recorded_comment;483 }484 add_action( 'comment_post', 'bp_blogs_record_comment', 10, 2 );485 add_action( 'edit_comment', 'bp_blogs_record_comment', 10 );486 487 function bp_blogs_manage_comment( $comment_id, $comment_status ) {488 if ( 'spam' == $comment_status || 'hold' == $comment_status || 'delete' == $comment_status || 'trash' == $comment_status )489 return bp_blogs_remove_comment( $comment_id );490 491 return bp_blogs_record_comment( $comment_id, true );492 }493 add_action( 'wp_set_comment_status', 'bp_blogs_manage_comment', 10, 2 );494 495 function bp_blogs_add_user_to_blog( $user_id, $role = false, $blog_id = false ) {496 global $wpdb, $current_blog;497 498 if ( empty( $blog_id ) )499 $blog_id = $current_blog->blog_id;500 501 if ( empty( $role ) ) {502 $key = $wpdb->get_blog_prefix( $blog_id ). 'capabilities';503 504 $roles = get_user_meta( $user_id, $key, true );505 506 if ( is_array( $roles ) )507 $role = array_search( 1, $roles );508 else509 return false;510 }511 512 if ( $role != 'subscriber' )513 bp_blogs_record_blog( $blog_id, $user_id, true );514 }515 add_action( 'add_user_to_blog', 'bp_blogs_add_user_to_blog', 10, 3 );516 add_action( 'profile_update', 'bp_blogs_add_user_to_blog' );517 add_action( 'user_register', 'bp_blogs_add_user_to_blog' );518 519 function bp_blogs_remove_user_from_blog( $user_id, $blog_id = false ) {520 global $current_blog;521 522 if ( empty( $blog_id ) )523 $blog_id = $current_blog->blog_id;524 525 bp_blogs_remove_blog_for_user( $user_id, $blog_id );526 }527 add_action( 'remove_user_from_blog', 'bp_blogs_remove_user_from_blog', 10, 2 );528 529 function bp_blogs_remove_blog( $blog_id ) {530 global $bp;531 532 $blog_id = (int)$blog_id;533 534 BP_Blogs_Blog::delete_blog_for_all( $blog_id );535 536 // Delete activity stream item537 bp_blogs_delete_activity( array( 'item_id' => $blog_id, 'component' => $bp->blogs->slug, 'type' => 'new_blog' ) );538 539 do_action( 'bp_blogs_remove_blog', $blog_id );540 }541 add_action( 'delete_blog', 'bp_blogs_remove_blog' );542 543 function bp_blogs_remove_blog_for_user( $user_id, $blog_id ) {544 global $current_user;545 546 $blog_id = (int)$blog_id;547 $user_id = (int)$user_id;548 549 BP_Blogs_Blog::delete_blog_for_user( $blog_id, $user_id );550 551 // Delete activity stream item552 bp_blogs_delete_activity( array( 'item_id' => $blog_id, 'component' => $bp->blogs->slug, 'type' => 'new_blog' ) );553 554 do_action( 'bp_blogs_remove_blog_for_user', $blog_id, $user_id );555 }556 add_action( 'remove_user_from_blog', 'bp_blogs_remove_blog_for_user', 10, 2 );557 558 function bp_blogs_remove_post( $post_id, $blog_id = false, $user_id = false ) {559 global $current_blog, $bp;560 561 if ( empty( $current_blog->blog_id ) )562 return false;563 564 $post_id = (int)$post_id;565 566 if ( !$blog_id )567 $blog_id = (int)$current_blog->blog_id;568 569 if ( !$user_id )570 $user_id = $bp->loggedin_user->id;571 572 // Delete activity stream item573 bp_blogs_delete_activity( array( 'item_id' => $blog_id, 'secondary_item_id' => $post_id, 'component' => $bp->blogs->slug, 'type' => 'new_blog_post' ) );574 575 do_action( 'bp_blogs_remove_post', $blog_id, $post_id, $user_id );576 }577 add_action( 'delete_post', 'bp_blogs_remove_post' );578 579 function bp_blogs_remove_comment( $comment_id ) {580 global $wpdb, $bp;581 582 // Delete activity stream item583 bp_blogs_delete_activity( array( 'item_id' => $wpdb->blogid , 'secondary_item_id' => $comment_id, 'type' => 'new_blog_comment' ) );584 585 do_action( 'bp_blogs_remove_comment', $blog_id, $comment_id, $bp->loggedin_user->id );586 }587 add_action( 'delete_comment', 'bp_blogs_remove_comment' );588 589 function bp_blogs_total_blogs() {590 if ( !$count = wp_cache_get( 'bp_total_blogs', 'bp' ) ) {591 $blogs = BP_Blogs_Blog::get_all();592 $count = $blogs['total'];593 wp_cache_set( 'bp_total_blogs', $count, 'bp' );594 }595 return $count;596 }597 598 function bp_blogs_total_blogs_for_user( $user_id = false ) {599 global $bp;600 601 if ( !$user_id )602 $user_id = ( $bp->displayed_user->id ) ? $bp->displayed_user->id : $bp->loggedin_user->id;603 604 if ( !$count = wp_cache_get( 'bp_total_blogs_for_user_' . $user_id, 'bp' ) ) {605 $count = BP_Blogs_Blog::total_blog_count_for_user( $user_id );606 wp_cache_set( 'bp_total_blogs_for_user_' . $user_id, $count, 'bp' );607 }608 609 return $count;610 }611 612 function bp_blogs_remove_data_for_blog( $blog_id ) {613 global $bp;614 615 // If this is regular blog, delete all data for that blog.616 BP_Blogs_Blog::delete_blog_for_all( $blog_id );617 618 // Delete activity stream item619 bp_blogs_delete_activity( array( 'item_id' => $blog_id, 'component' => $bp->blogs->slug, 'type' => false ) );620 621 do_action( 'bp_blogs_remove_data_for_blog', $blog_id );622 }623 add_action( 'delete_blog', 'bp_blogs_remove_data_for_blog', 1 );624 625 function bp_blogs_get_blogs_for_user( $user_id, $show_hidden = false ) {626 return BP_Blogs_Blog::get_blogs_for_user( $user_id, $show_hidden );627 }628 629 function bp_blogs_get_all_blogs( $limit = null, $page = null ) {630 return BP_Blogs_Blog::get_all( $limit, $page );631 }632 633 function bp_blogs_get_random_blogs( $limit = null, $page = null ) {634 return BP_Blogs_Blog::get( 'random', $limit, $page );635 }636 637 function bp_blogs_is_blog_hidden( $blog_id ) {638 return BP_Blogs_Blog::is_hidden( $blog_id );639 }640 641 function bp_blogs_redirect_to_random_blog() {642 global $bp, $wpdb;643 644 if ( $bp->current_component == $bp->blogs->slug && isset( $_GET['random-blog'] ) ) {645 $blog = bp_blogs_get_random_blogs( 1, 1 );646 647 bp_core_redirect( get_site_url( $blog['blogs'][0]->blog_id ) );648 }649 }650 add_action( 'wp', 'bp_blogs_redirect_to_random_blog', 6 );651 652 653 /*******************************************************************************654 * Blog meta functions655 *656 * These functions are used to store specific blogmeta in one global table,657 * rather than in each blog's options table. Significantly speeds up global blog658 * queries. By default each blog's name, description and last updated time are659 * stored and synced here.660 */661 662 function bp_blogs_delete_blogmeta( $blog_id, $meta_key = false, $meta_value = false ) {663 global $wpdb, $bp;664 665 if ( !is_numeric( $blog_id ) || !is_multisite() )666 return false;667 668 $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);669 670 if ( is_array($meta_value) || is_object($meta_value) )671 $meta_value = serialize($meta_value);672 673 $meta_value = trim( $meta_value );674 675 if ( !$meta_key )676 $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->blogs->table_name_blogmeta} WHERE blog_id = %d", $blog_id ) );677 else if ( $meta_value )678 $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->blogs->table_name_blogmeta} WHERE blog_id = %d AND meta_key = %s AND meta_value = %s", $blog_id, $meta_key, $meta_value ) );679 else680 $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->blogs->table_name_blogmeta} WHERE blog_id = %d AND meta_key = %s", $blog_id, $meta_key ) );681 682 wp_cache_delete( 'bp_blogs_blogmeta_' . $blog_id . '_' . $meta_key, 'bp' );683 684 return true;685 }686 687 function bp_blogs_get_blogmeta( $blog_id, $meta_key = '') {688 global $wpdb, $bp;689 690 $blog_id = (int) $blog_id;691 692 if ( !$blog_id || !is_multisite() )693 return false;694 695 if ( !empty($meta_key) ) {696 $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);697 698 if ( !$metas = wp_cache_get( 'bp_blogs_blogmeta_' . $blog_id . '_' . $meta_key, 'bp' ) ) {699 $metas = $wpdb->get_col( $wpdb->prepare( "SELECT meta_value FROM {$bp->blogs->table_name_blogmeta} WHERE blog_id = %d AND meta_key = %s", $blog_id, $meta_key ) );700 wp_cache_set( 'bp_blogs_blogmeta_' . $blog_id . '_' . $meta_key, $metas, 'bp' );701 }702 } else {703 $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM {$bp->blogs->table_name_blogmeta} WHERE blog_id = %d", $blog_id) );704 }705 706 if ( empty($metas) ) {707 if ( empty($meta_key) )708 return array();709 else710 return '';711 }712 713 $metas = array_map('maybe_unserialize', (array)$metas);714 715 if ( 1 == count($metas) )716 return $metas[0];717 else718 return $metas;719 }720 721 function bp_blogs_update_blogmeta( $blog_id, $meta_key, $meta_value ) {722 global $wpdb, $bp;723 724 if ( !is_numeric( $blog_id ) || !is_multisite() )725 return false;726 727 $meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key );728 729 if ( is_string($meta_value) )730 $meta_value = stripslashes($wpdb->escape($meta_value));731 732 $meta_value = maybe_serialize($meta_value);733 734 if (empty( $meta_value ) )735 return bp_blogs_delete_blogmeta( $blog_id, $meta_key );736 737 $cur = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->blogs->table_name_blogmeta} WHERE blog_id = %d AND meta_key = %s", $blog_id, $meta_key ) );738 739 if ( !$cur )740 $wpdb->query( $wpdb->prepare( "INSERT INTO {$bp->blogs->table_name_blogmeta} ( blog_id, meta_key, meta_value ) VALUES ( %d, %s, %s )", $blog_id, $meta_key, $meta_value ) );741 else if ( $cur->meta_value != $meta_value )742 $wpdb->query( $wpdb->prepare( "UPDATE {$bp->blogs->table_name_blogmeta} SET meta_value = %s WHERE blog_id = %d AND meta_key = %s", $meta_value, $blog_id, $meta_key ) );743 else744 return false;745 746 wp_cache_set( 'bp_blogs_blogmeta_' . $blog_id . '_' . $meta_key, $meta_value, 'bp' );747 748 return true;749 }750 751 function bp_blogs_remove_data( $user_id ) {752 if ( !is_multisite() )753 return false;754 755 // If this is regular blog, delete all data for that blog.756 BP_Blogs_Blog::delete_blogs_for_user( $user_id );757 758 do_action( 'bp_blogs_remove_data', $user_id );759 }760 add_action( 'wpmu_delete_user', 'bp_blogs_remove_data' );761 add_action( 'delete_user', 'bp_blogs_remove_data' );762 add_action( 'bp_make_spam_user', 'bp_blogs_remove_data' );763 764 765 /*******************************************************************************766 * Caching767 *768 * Caching functions handle the clearing of cached objects and pages on specific769 * actions throughout BuddyPress.770 */771 772 function bp_blogs_clear_blog_object_cache( $blog_id, $user_id ) {773 wp_cache_delete( 'bp_blogs_of_user_' . $user_id, 'bp' );774 wp_cache_delete( 'bp_total_blogs_for_user_' . $user_id, 'bp' );775 }776 777 function bp_blogs_format_clear_blog_cache( $recorded_blog_obj ) {778 bp_blogs_clear_blog_object_cache( false, $recorded_blog_obj->user_id );779 wp_cache_delete( 'bp_total_blogs', 'bp' );780 }781 782 // List actions to clear object caches on783 add_action( 'bp_blogs_remove_blog_for_user', 'bp_blogs_clear_blog_object_cache', 10, 2 );784 add_action( 'bp_blogs_new_blog', 'bp_blogs_format_clear_blog_cache', 10, 2 );785 786 // List actions to clear super cached pages on, if super cache is installed787 add_action( 'bp_blogs_remove_data_for_blog', 'bp_core_clear_cache' );788 add_action( 'bp_blogs_remove_comment', 'bp_core_clear_cache' );789 add_action( 'bp_blogs_remove_post', 'bp_core_clear_cache' );790 add_action( 'bp_blogs_remove_blog_for_user', 'bp_core_clear_cache' );791 add_action( 'bp_blogs_remove_blog', 'bp_core_clear_cache' );792 add_action( 'bp_blogs_new_blog_comment', 'bp_core_clear_cache' );793 add_action( 'bp_blogs_new_blog_post', 'bp_core_clear_cache' );794 add_action( 'bp_blogs_new_blog', 'bp_core_clear_cache' );795 add_action( 'bp_blogs_remove_data', 'bp_core_clear_cache' );796 797 268 ?>
Note: See TracChangeset
for help on using the changeset viewer.