Skip to:
Content

BuddyPress.org

Changeset 10517


Ignore:
Timestamp:
02/05/2016 04:08:04 AM (10 years ago)
Author:
boonebgorges
Message:

Move bp-blogs classes to their own files.

See #6870.

Location:
trunk/src/bp-blogs
Files:
4 edited
4 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-blogs/bp-blogs-loader.php

    r10417 r10517  
    1515defined( 'ABSPATH' ) || exit;
    1616
    17 /**
    18  * Creates our Blogs component.
    19  */
    20 class BP_Blogs_Component extends BP_Component {
    21 
    22         /**
    23          * Start the blogs component creation process.
    24          *
    25          * @since 1.5.0
    26          */
    27         public function __construct() {
    28                 parent::start(
    29                         'blogs',
    30                         __( 'Site Directory', 'buddypress' ),
    31                         buddypress()->plugin_dir,
    32                         array(
    33                                 'adminbar_myaccount_order' => 30,
    34                                 'search_query_arg' => 'sites_search',
    35                         )
    36                 );
    37         }
    38 
    39         /**
    40          * Set up global settings for the blogs component.
    41          *
    42          * The BP_BLOGS_SLUG constant is deprecated, and only used here for
    43          * backwards compatibility.
    44          *
    45          * @since 1.5.0
    46          *
    47          * @see BP_Component::setup_globals() for description of parameters.
    48          *
    49          * @param array $args See {@link BP_Component::setup_globals()}.
    50          */
    51         public function setup_globals( $args = array() ) {
    52                 $bp = buddypress();
    53 
    54                 if ( ! defined( 'BP_BLOGS_SLUG' ) ) {
    55                         define ( 'BP_BLOGS_SLUG', $this->id );
    56                 }
    57 
    58                 // Global tables for messaging component.
    59                 $global_tables = array(
    60                         'table_name'          => $bp->table_prefix . 'bp_user_blogs',
    61                         'table_name_blogmeta' => $bp->table_prefix . 'bp_user_blogs_blogmeta',
    62                 );
    63 
    64                 $meta_tables = array(
    65                         'blog' => $bp->table_prefix . 'bp_user_blogs_blogmeta',
    66                 );
    67 
    68                 // All globals for blogs component.
    69                 $args = array(
    70                         'slug'                  => BP_BLOGS_SLUG,
    71                         'root_slug'             => isset( $bp->pages->blogs->slug ) ? $bp->pages->blogs->slug : BP_BLOGS_SLUG,
    72                         'has_directory'         => is_multisite(), // Non-multisite installs don't need a top-level Sites directory, since there's only one site.
    73                         'directory_title'       => _x( 'Sites', 'component directory title', 'buddypress' ),
    74                         'notification_callback' => 'bp_blogs_format_notifications',
    75                         'search_string'         => __( 'Search sites...', 'buddypress' ),
    76                         'autocomplete_all'      => defined( 'BP_MESSAGES_AUTOCOMPLETE_ALL' ),
    77                         'global_tables'         => $global_tables,
    78                         'meta_tables'           => $meta_tables,
    79                 );
    80 
    81                 // Setup the globals.
    82                 parent::setup_globals( $args );
    83 
    84                 /**
    85                  * Filters if a blog is public.
    86                  *
    87                  * In case the config is not multisite, the blog_public option is ignored.
    88                  *
    89                  * @since 2.3.0
    90                  *
    91                  * @param int $value Whether or not the blog is public.
    92                  */
    93                 if ( 0 !== apply_filters( 'bp_is_blog_public', (int) get_option( 'blog_public' ) ) || ! is_multisite() ) {
    94 
    95                         /**
    96                          * Filters the post types to track for the Blogs component.
    97                          *
    98                          * @since 1.5.0
    99                          * @deprecated 2.3.0
    100                          *
    101                          * @param array $value Array of post types to track.
    102                          */
    103                         $post_types = apply_filters( 'bp_blogs_record_post_post_types', array( 'post' ) );
    104 
    105                         foreach ( $post_types as $post_type ) {
    106                                 add_post_type_support( $post_type, 'buddypress-activity' );
    107                         }
    108                 }
    109 
    110                 // Filter the generic track parameters for the 'post' post type.
    111                 add_filter( 'bp_activity_get_post_type_tracking_args', array( $this, 'post_tracking_args' ), 10, 2 );
    112         }
    113 
    114         /**
    115          * Include bp-blogs files.
    116          *
    117          * @see BP_Component::includes() for description of parameters.
    118          *
    119          * @param array $includes See {@link BP_Component::includes()}.
    120          */
    121         public function includes( $includes = array() ) {
    122 
    123                 // Files to include.
    124                 $includes = array(
    125                         'cache',
    126                         'actions',
    127                         'screens',
    128                         'classes',
    129                         'template',
    130                         'filters',
    131                         'activity',
    132                         'functions',
    133                 );
    134 
    135                 if ( is_multisite() ) {
    136                         $includes[] = 'widgets';
    137                 }
    138 
    139                 // Include the files.
    140                 parent::includes( $includes );
    141         }
    142 
    143         /**
    144          * Set up component navigation for bp-blogs.
    145          *
    146          * @see BP_Component::setup_nav() for a description of arguments.
    147          *
    148          * @param array $main_nav Optional. See BP_Component::setup_nav() for
    149          *                        description.
    150          * @param array $sub_nav  Optional. See BP_Component::setup_nav() for
    151          *                        description.
    152          */
    153         public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    154 
    155                 /**
    156                  * Blog/post/comment menus should not appear on single WordPress setups.
    157                  * Although comments and posts made by users will still show on their
    158                  * activity stream.
    159                  */
    160                 if ( ! is_multisite() ) {
    161                         return false;
    162                 }
    163 
    164                 // Determine user to use.
    165                 if ( bp_displayed_user_domain() ) {
    166                         $user_domain = bp_displayed_user_domain();
    167                 } elseif ( bp_loggedin_user_domain() ) {
    168                         $user_domain = bp_loggedin_user_domain();
    169                 } else {
    170                         return;
    171                 }
    172 
    173                 $slug       = bp_get_blogs_slug();
    174                 $parent_url = trailingslashit( $user_domain . $slug );
    175 
    176                 // Add 'Sites' to the main navigation.
    177                 $count    = (int) bp_get_total_blog_count_for_user();
    178                 $class    = ( 0 === $count ) ? 'no-count' : 'count';
    179                 $nav_text = sprintf( __( 'Sites <span class="%s">%s</span>', 'buddypress' ), esc_attr( $class ), bp_core_number_format( $count )  );
    180                 $main_nav = array(
    181                         'name'                => $nav_text,
    182                         'slug'                => $slug,
    183                         'position'            => 30,
    184                         'screen_function'     => 'bp_blogs_screen_my_blogs',
    185                         'default_subnav_slug' => 'my-sites',
    186                         'item_css_id'         => $this->id
    187                 );
    188 
    189                 $sub_nav[] = array(
    190                         'name'            => __( 'My Sites', 'buddypress' ),
    191                         'slug'            => 'my-sites',
    192                         'parent_url'      => $parent_url,
    193                         'parent_slug'     => $slug,
    194                         'screen_function' => 'bp_blogs_screen_my_blogs',
    195                         'position'        => 10
    196                 );
    197 
    198                 // Setup navigation.
    199                 parent::setup_nav( $main_nav, $sub_nav );
    200         }
    201 
    202         /**
    203          * Set up bp-blogs integration with the WordPress admin bar.
    204          *
    205          * @since 1.5.0
    206          *
    207          * @see BP_Component::setup_admin_bar() for a description of arguments.
    208          *
    209          * @param array $wp_admin_nav See BP_Component::setup_admin_bar()
    210          *                            for description.
    211          * @return bool
    212          */
    213         public function setup_admin_bar( $wp_admin_nav = array() ) {
    214 
    215                 /**
    216                  * Site/post/comment menus should not appear on single WordPress setups.
    217                  *
    218                  * Comments and posts made by users will still show in their activity.
    219                  */
    220                 if ( ! is_multisite() ) {
    221                         return false;
    222                 }
    223 
    224                 // Menus for logged in user.
    225                 if ( is_user_logged_in() ) {
    226 
    227                         // Setup the logged in user variables.
    228                         $blogs_link = trailingslashit( bp_loggedin_user_domain() . bp_get_blogs_slug() );
    229 
    230                         // Add the "Sites" sub menu.
    231                         $wp_admin_nav[] = array(
    232                                 'parent' => buddypress()->my_account_menu_id,
    233                                 'id'     => 'my-account-' . $this->id,
    234                                 'title'  => __( 'Sites', 'buddypress' ),
    235                                 'href'   => $blogs_link
    236                         );
    237 
    238                         // My Sites.
    239                         $wp_admin_nav[] = array(
    240                                 'parent' => 'my-account-' . $this->id,
    241                                 'id'     => 'my-account-' . $this->id . '-my-sites',
    242                                 'title'  => __( 'My Sites', 'buddypress' ),
    243                                 'href'   => $blogs_link
    244                         );
    245 
    246                         // Create a Site.
    247                         if ( bp_blog_signup_enabled() ) {
    248                                 $wp_admin_nav[] = array(
    249                                         'parent' => 'my-account-' . $this->id,
    250                                         'id'     => 'my-account-' . $this->id . '-create',
    251                                         'title'  => __( 'Create a Site', 'buddypress' ),
    252                                         'href'   => trailingslashit( bp_get_blogs_directory_permalink() . 'create' )
    253                                 );
    254                         }
    255                 }
    256 
    257                 parent::setup_admin_bar( $wp_admin_nav );
    258         }
    259 
    260         /**
    261          * Set up the title for pages and <title>.
    262          */
    263         public function setup_title() {
    264 
    265                 // Set up the component options navigation for Site.
    266                 if ( bp_is_blogs_component() ) {
    267                         $bp = buddypress();
    268 
    269                         if ( bp_is_my_profile() ) {
    270                                 if ( bp_is_active( 'xprofile' ) ) {
    271                                         $bp->bp_options_title = __( 'My Sites', 'buddypress' );
    272                                 }
    273 
    274                         // If we are not viewing the logged in user, set up the current
    275                         // users avatar and name.
    276                         } else {
    277                                 $bp->bp_options_avatar = bp_core_fetch_avatar( array(
    278                                         'item_id' => bp_displayed_user_id(),
    279                                         'type'    => 'thumb',
    280                                         'alt'     => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_get_displayed_user_fullname() )
    281                                 ) );
    282                                 $bp->bp_options_title = bp_get_displayed_user_fullname();
    283                         }
    284                 }
    285 
    286                 parent::setup_title();
    287         }
    288 
    289         /**
    290          * Setup cache groups
    291          *
    292          * @since 2.2.0
    293          */
    294         public function setup_cache_groups() {
    295 
    296                 // Global groups.
    297                 wp_cache_add_global_groups( array(
    298                         'blog_meta'
    299                 ) );
    300 
    301                 parent::setup_cache_groups();
    302         }
    303 
    304         /**
    305          * Set up the tracking arguments for the 'post' post type.
    306          *
    307          * @since 2.2.0
    308          *
    309          * @see bp_activity_get_post_type_tracking_args() for information on parameters.
    310          *
    311          * @param object|null $params    Tracking arguments.
    312          * @param string|int  $post_type Post type to track.
    313          * @return object
    314          */
    315         public function post_tracking_args( $params = null, $post_type = 0 ) {
    316 
    317                 /**
    318                  * Filters the post types to track for the Blogs component.
    319                  *
    320                  * @since 1.5.0
    321                  * @deprecated 2.3.0
    322                  *
    323                  * Make sure plugins still using 'bp_blogs_record_post_post_types'
    324                  * to track their post types will generate new_blog_post activities
    325                  * See https://buddypress.trac.wordpress.org/ticket/6306
    326                  *
    327                  * @param array $value Array of post types to track.
    328                  */
    329                 $post_types = apply_filters( 'bp_blogs_record_post_post_types', array( 'post' ) );
    330                 $post_types_array = array_flip( $post_types );
    331 
    332                 if ( ! isset( $post_types_array[ $post_type ] ) ) {
    333                         return $params;
    334                 }
    335 
    336                 // Set specific params for the 'post' post type.
    337                 $params->component_id    = $this->id;
    338                 $params->action_id       = 'new_blog_post';
    339                 $params->admin_filter    = __( 'New post published', 'buddypress' );
    340                 $params->format_callback = 'bp_blogs_format_activity_action_new_blog_post';
    341                 $params->front_filter    = __( 'Posts', 'buddypress' );
    342                 $params->contexts        = array( 'activity', 'member' );
    343                 $params->position        = 5;
    344 
    345                 return $params;
    346         }
    347 }
     17require dirname( __FILE__ ) . '/classes/class-bp-blogs-component.php';
    34818
    34919/**
  • trunk/src/bp-blogs/bp-blogs-screens.php

    r10417 r10517  
    1010// Exit if accessed directly.
    1111defined( 'ABSPATH' ) || exit;
     12
     13require dirname( __FILE__ ) . '/classes/class-bp-blogs-theme-compat.php';
    1214
    1315/**
     
    7173/** Theme Compatibility *******************************************************/
    7274
    73 /**
    74  * The main theme compat class for BuddyPress Blogs.
    75  *
    76  * This class sets up the necessary theme compatibility actions to safely output
    77  * group template parts to the_title and the_content areas of a theme.
    78  *
    79  * @since 1.7.0
    80  */
    81 class BP_Blogs_Theme_Compat {
    82 
    83         /**
    84          * Set up theme compatibility for the Blogs component.
    85          *
    86          * @since 1.7.0
    87          */
    88         public function __construct() {
    89                 add_action( 'bp_setup_theme_compat', array( $this, 'is_blogs' ) );
    90         }
    91 
    92         /**
    93          * Are we looking at something that needs Blogs theme compatibility?
    94          *
    95          * @since 1.7.0
    96          */
    97         public function is_blogs() {
    98 
    99                 // Bail if not looking at a group.
    100                 if ( ! bp_is_blogs_component() )
    101                         return;
    102 
    103                 // Bail if looking at a users sites.
    104                 if ( bp_is_user() )
    105                         return;
    106 
    107                 // Blog Directory.
    108                 if ( is_multisite() && ! bp_current_action() ) {
    109                         bp_update_is_directory( true, 'blogs' );
    110 
    111                         /**
    112                          * Fires if in the blog directory and BuddyPress needs Blog theme compatibility,
    113                          * before the actions and filters are added.
    114                          *
    115                          * @since 1.5.0
    116                          */
    117                         do_action( 'bp_blogs_screen_index' );
    118 
    119                         add_filter( 'bp_get_buddypress_template',                array( $this, 'directory_template_hierarchy' ) );
    120                         add_action( 'bp_template_include_reset_dummy_post_data', array( $this, 'directory_dummy_post' ) );
    121                         add_filter( 'bp_replace_the_content',                    array( $this, 'directory_content'    ) );
    122 
    123                 // Create blog.
    124                 } elseif ( is_user_logged_in() && bp_blog_signup_enabled() ) {
    125                         add_filter( 'bp_get_buddypress_template',                array( $this, 'create_template_hierarchy' ) );
    126                         add_action( 'bp_template_include_reset_dummy_post_data', array( $this, 'create_dummy_post' ) );
    127                         add_filter( 'bp_replace_the_content',                    array( $this, 'create_content'    ) );
    128                 }
    129         }
    130 
    131         /** Directory *************************************************************/
    132 
    133         /**
    134          * Add template hierarchy to theme compat for the blog directory page.
    135          *
    136          * This is to mirror how WordPress has
    137          * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
    138          *
    139          * @since 1.8.0
    140          *
    141          * @param string $templates The templates from bp_get_theme_compat_templates().
    142          * @return array $templates Array of custom templates to look for.
    143          */
    144         public function directory_template_hierarchy( $templates ) {
    145 
    146                 /**
    147                  * Filters the custom templates used for theme compat with the blog directory page.
    148                  *
    149                  * @since 1.8.0
    150                  *
    151                  * @param array $value Array of template paths to add to template list to look for.
    152                  */
    153                 $new_templates = apply_filters( 'bp_template_hierarchy_blogs_create', array(
    154                         'blogs/index-directory.php'
    155                 ) );
    156 
    157                 // Merge new templates with existing stack
    158                 // @see bp_get_theme_compat_templates().
    159                 $templates = array_merge( (array) $new_templates, $templates );
    160 
    161                 return $templates;
    162         }
    163 
    164         /**
    165          * Update the global $post with directory data.
    166          *
    167          * @since 1.7.0
    168          */
    169         public function directory_dummy_post() {
    170 
    171                 bp_theme_compat_reset_post( array(
    172                         'ID'             => 0,
    173                         'post_title'     => __( 'Sites', 'buddypress' ),
    174                         'post_author'    => 0,
    175                         'post_date'      => 0,
    176                         'post_content'   => '',
    177                         'post_type'      => 'page',
    178                         'post_status'    => 'publish',
    179                         'is_page'        => true,
    180                         'comment_status' => 'closed'
    181                 ) );
    182         }
    183 
    184         /**
    185          * Filter the_content with the groups index template part.
    186          *
    187          * @since 1.7.0
    188          */
    189         public function directory_content() {
    190                 return bp_buffer_template_part( 'blogs/index', null, false );
    191         }
    192 
    193         /** Create ****************************************************************/
    194 
    195         /**
    196          * Add custom template hierarchy to theme compat for the blog create page.
    197          *
    198          * This is to mirror how WordPress has
    199          * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
    200          *
    201          * @since 1.8.0
    202          *
    203          * @param string $templates The templates from bp_get_theme_compat_templates().
    204          * @return array $templates Array of custom templates to look for.
    205          */
    206         public function create_template_hierarchy( $templates ) {
    207 
    208                 /**
    209                  * Filters the custom templates used for theme compat with the blog create page.
    210                  *
    211                  * @since 1.8.0
    212                  *
    213                  * @param array $value Array of template paths to add to template list to look for.
    214                  */
    215                 $new_templates = apply_filters( 'bp_template_hierarchy_blogs_create', array(
    216                         'blogs/index-create.php'
    217                 ) );
    218 
    219                 // Merge new templates with existing stack
    220                 // @see bp_get_theme_compat_templates().
    221                 $templates = array_merge( (array) $new_templates, $templates );
    222 
    223                 return $templates;
    224         }
    225 
    226         /**
    227          * Update the global $post with create screen data.
    228          *
    229          * @since 1.7.0
    230          */
    231         public function create_dummy_post() {
    232 
    233                 // Title based on ability to create blogs.
    234                 if ( is_user_logged_in() && bp_blog_signup_enabled() ) {
    235                         $title = __( 'Create a Site', 'buddypress' );
    236                 } else {
    237                         $title = __( 'Sites', 'buddypress' );
    238                 }
    239 
    240                 bp_theme_compat_reset_post( array(
    241                         'ID'             => 0,
    242                         'post_title'     => $title,
    243                         'post_author'    => 0,
    244                         'post_date'      => 0,
    245                         'post_content'   => '',
    246                         'post_type'      => 'page',
    247                         'post_status'    => 'publish',
    248                         'is_page'        => true,
    249                         'comment_status' => 'closed'
    250                 ) );
    251         }
    252 
    253         /**
    254          * Filter the_content with the create screen template part.
    255          *
    256          * @since 1.7.0
    257          */
    258         public function create_content() {
    259                 return bp_buffer_template_part( 'blogs/create', null, false );
    260         }
    261 }
    26275new BP_Blogs_Theme_Compat();
  • trunk/src/bp-blogs/bp-blogs-template.php

    r10417 r10517  
    1010// Exit if accessed directly.
    1111defined( 'ABSPATH' ) || exit;
     12
     13require dirname( __FILE__ ) . '/classes/class-bp-blogs-template.php';
    1214
    1315/**
     
    102104                return apply_filters( 'bp_get_blogs_directory_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_blogs_root_slug() ) );
    103105        }
    104 
    105 /**
    106  * The main blog template loop class.
    107  *
    108  * Responsible for loading a group of blogs into a loop for display.
    109  */
    110 class BP_Blogs_Template {
    111 
    112         /**
    113          * The loop iterator.
    114          *
    115          * @var int
    116          */
    117         public $current_blog = -1;
    118 
    119         /**
    120          * The number of blogs returned by the paged query.
    121          *
    122          * @var int
    123          */
    124         public $blog_count = 0;
    125 
    126         /**
    127          * Array of blogs located by the query..
    128          *
    129          * @var array
    130          */
    131         public $blogs = array();
    132 
    133         /**
    134          * The blog object currently being iterated on.
    135          *
    136          * @var object
    137          */
    138         public $blog;
    139 
    140         /**
    141          * A flag for whether the loop is currently being iterated.
    142          *
    143          * @var bool
    144          */
    145         public $in_the_loop = false;
    146 
    147         /**
    148          * The page number being requested.
    149          *
    150          * @var int
    151          */
    152         public $pag_page = 1;
    153 
    154         /**
    155          * The number of items being requested per page.
    156          *
    157          * @var int
    158          */
    159         public $pag_num = 20;
    160 
    161         /**
    162          * An HTML string containing pagination links.
    163          *
    164          * @var string
    165          */
    166         public $pag_links = '';
    167 
    168         /**
    169          * The total number of blogs matching the query parameters.
    170          *
    171          * @var int
    172          */
    173         public $total_blog_count = 0;
    174 
    175         /**
    176          * Constructor method.
    177          *
    178          * @see BP_Blogs_Blog::get() for a description of parameters.
    179          *
    180          * @param string     $type              See {@link BP_Blogs_Blog::get()}.
    181          * @param string     $page              See {@link BP_Blogs_Blog::get()}.
    182          * @param string     $per_page          See {@link BP_Blogs_Blog::get()}.
    183          * @param string     $max               See {@link BP_Blogs_Blog::get()}.
    184          * @param string     $user_id           See {@link BP_Blogs_Blog::get()}.
    185          * @param string     $search_terms      See {@link BP_Blogs_Blog::get()}.
    186          * @param string     $page_arg          The string used as a query parameter in
    187          *                                      pagination links. Default: 'bpage'.
    188          * @param bool       $update_meta_cache Whether to pre-fetch metadata for
    189          *                                      queried blogs.
    190          * @param array|bool $include_blog_ids  Array of blog IDs to include.
    191          */
    192         public function __construct( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg = 'bpage', $update_meta_cache = true, $include_blog_ids = false ) {
    193 
    194                 $this->pag_arg  = sanitize_key( $page_arg );
    195                 $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $page     );
    196                 $this->pag_num  = bp_sanitize_pagination_arg( 'num',          $per_page );
    197 
    198                 // Backwards compatibility support for blogs by first letter.
    199                 if ( ! empty( $_REQUEST['letter'] ) ) {
    200                         $this->blogs = BP_Blogs_Blog::get_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page );
    201 
    202                 // Typical blogs query.
    203                 } else {
    204                         $this->blogs = bp_blogs_get_blogs( array(
    205                                 'type'              => $type,
    206                                 'per_page'          => $this->pag_num,
    207                                 'page'              => $this->pag_page,
    208                                 'user_id'           => $user_id,
    209                                 'search_terms'      => $search_terms,
    210                                 'update_meta_cache' => $update_meta_cache,
    211                                 'include_blog_ids'  => $include_blog_ids,
    212                         ) );
    213                 }
    214 
    215                 // Set the total blog count.
    216                 if ( empty( $max ) || ( $max >= (int) $this->blogs['total'] ) ) {
    217                         $this->total_blog_count = (int) $this->blogs['total'];
    218                 } else {
    219                         $this->total_blog_count = (int) $max;
    220                 }
    221 
    222                 // Set the blogs array (to loop through later.
    223                 $this->blogs = $this->blogs['blogs'];
    224 
    225                 // Get the current blog count to compare maximum against.
    226                 $blog_count = count( $this->blogs );
    227 
    228                 // Set the current blog count.
    229                 if ( empty( $max ) || ( $max >= (int) $blog_count ) ) {
    230                         $this->blog_count = (int) $blog_count;
    231                 } else {
    232                         $this->blog_count = (int) $max;
    233                 }
    234 
    235                 // Build pagination links based on total blogs and current page number.
    236                 if ( ! empty( $this->total_blog_count ) && ! empty( $this->pag_num ) ) {
    237                         $this->pag_links = paginate_links( array(
    238                                 'base'      => add_query_arg( $this->pag_arg, '%#%' ),
    239                                 'format'    => '',
    240                                 'total'     => ceil( (int) $this->total_blog_count / (int) $this->pag_num ),
    241                                 'current'   => (int) $this->pag_page,
    242                                 'prev_text' => _x( '&larr;', 'Blog pagination previous text', 'buddypress' ),
    243                                 'next_text' => _x( '&rarr;', 'Blog pagination next text',     'buddypress' ),
    244                                 'mid_size'  => 1,
    245                                 'add_args'  => array(),
    246                         ) );
    247                 }
    248         }
    249 
    250         /**
    251          * Whether there are blogs available in the loop.
    252          *
    253          * @see bp_has_blogs()
    254          *
    255          * @return bool True if there are items in the loop, otherwise false.
    256          */
    257         public function has_blogs() {
    258                 return (bool) ! empty( $this->blog_count );
    259         }
    260 
    261         /**
    262          * Set up the next blog and iterate index.
    263          *
    264          * @return object The next blog to iterate over.
    265          */
    266         public function next_blog() {
    267                 $this->current_blog++;
    268                 $this->blog = $this->blogs[ $this->current_blog ];
    269 
    270                 return $this->blog;
    271         }
    272 
    273         /**
    274          * Rewind the blogs and reset blog index.
    275          */
    276         public function rewind_blogs() {
    277                 $this->current_blog = -1;
    278                 if ( $this->blog_count > 0 ) {
    279                         $this->blog = $this->blogs[0];
    280                 }
    281         }
    282 
    283         /**
    284          * Whether there are blogs left in the loop to iterate over.
    285          *
    286          * This method is used by {@link bp_blogs()} as part of the while loop
    287          * that controls iteration inside the blogs loop, eg:
    288          *     while ( bp_blogs() ) { ...
    289          *
    290          * @see bp_blogs()
    291          *
    292          * @return bool True if there are more blogs to show, otherwise false.
    293          */
    294         public function blogs() {
    295                 if ( ( $this->current_blog + 1 ) < $this->blog_count ) {
    296                         return true;
    297                 } elseif ( ( $this->current_blog + 1 ) === $this->blog_count ) {
    298 
    299                         /**
    300                          * Fires right before the rewinding of blogs listing after all are shown.
    301                          *
    302                          * @since 1.5.0
    303                          */
    304                         do_action( 'blog_loop_end' );
    305                         // Do some cleaning up after the loop.
    306                         $this->rewind_blogs();
    307                 }
    308 
    309                 $this->in_the_loop = false;
    310                 return false;
    311         }
    312 
    313         /**
    314          * Set up the current blog inside the loop.
    315          *
    316          * Used by {@link bp_the_blog()} to set up the current blog data while
    317          * looping, so that template tags used during that iteration make
    318          * reference to the current blog.
    319          *
    320          * @see bp_the_blog()
    321          */
    322         public function the_blog() {
    323 
    324                 $this->in_the_loop = true;
    325                 $this->blog        = $this->next_blog();
    326 
    327                 // Loop has just started.
    328                 if ( 0 === $this->current_blog ) {
    329 
    330                         /**
    331                          * Fires if on the first blog in the loop.
    332                          *
    333                          * @since 1.5.0
    334                          */
    335                         do_action( 'blog_loop_start' );
    336                 }
    337         }
    338 }
    339106
    340107/**
  • trunk/src/bp-blogs/bp-blogs-widgets.php

    r10417 r10517  
    1111defined( 'ABSPATH' ) || exit;
    1212
     13require dirname( __FILE__ ) . '/classes/class-bp-blogs-recent-posts-widget.php';
     14
    1315/**
    1416 * Register the widgets for the Blogs component.
     
    2224}
    2325add_action( 'bp_register_widgets', 'bp_blogs_register_widgets' );
    24 
    25 /**
    26  * The Recent Networkwide Posts widget.
    27  */
    28 class BP_Blogs_Recent_Posts_Widget extends WP_Widget {
    29 
    30         /**
    31          * Constructor method.
    32          */
    33         public function __construct() {
    34                 $widget_ops = array(
    35                         'description' => __( 'A list of recently published posts from across your network.', 'buddypress' ),
    36                         'classname'   => 'widget_bp_blogs_widget buddypress widget',
    37                 );
    38                 parent::__construct( false, $name = _x( '(BuddyPress) Recent Networkwide Posts', 'widget name', 'buddypress' ), $widget_ops );
    39         }
    40 
    41         /**
    42          * Display the networkwide posts widget.
    43          *
    44          * @see WP_Widget::widget() for description of parameters.
    45          *
    46          * @param array $args     Widget arguments.
    47          * @param array $instance Widget settings, as saved by the user.
    48          */
    49         public function widget( $args, $instance ) {
    50 
    51                 $title = ! empty( $instance['title'] )
    52                         ? esc_html( $instance['title'] )
    53                         : __( 'Recent Networkwide Posts', 'buddypress' );
    54 
    55                 if ( ! empty( $instance['link_title'] ) ) {
    56                         $title = '<a href="' . bp_get_blogs_directory_permalink() . '">' . esc_html( $title ) . '</a>';
    57                 }
    58 
    59                 /**
    60                  * Filters the Blogs Recent Posts widget title.
    61                  *
    62                  * @since 2.2.0
    63                  * @since 2.3.0 Added 'instance' and 'id_base' to arguments passed to filter.
    64                  *
    65                  * @param string $title    The widget title.
    66                  * @param array  $instance The settings for the particular instance of the widget.
    67                  * @param string $id_base  Root ID for all widgets of this type.
    68                  */
    69                 $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
    70 
    71                 echo $args['before_widget'];
    72                 echo $args['before_title'] . $title . $args['after_title'];
    73 
    74                 if ( empty( $instance['max_posts'] ) || empty( $instance['max_posts'] ) ) {
    75                         $instance['max_posts'] = 10;
    76                 }
    77 
    78                 $after_widget = $args['after_widget'];
    79 
    80                 // Override some of the contextually set parameters for bp_has_activities().
    81                 $args = array(
    82                         'action'     => 'new_blog_post',
    83                         'max'        => $instance['max_posts'],
    84                         'per_page'   => $instance['max_posts'],
    85                         'user_id'    => 0,
    86                         'scope'      => false,
    87                         'object'     => false,
    88                         'primary_id' => false
    89                 ); ?>
    90 
    91                 <?php if ( bp_has_activities( $args ) ) : ?>
    92 
    93                         <ul id="blog-post-list" class="activity-list item-list">
    94 
    95                                 <?php while ( bp_activities() ) : bp_the_activity(); ?>
    96 
    97                                         <li>
    98                                                 <div class="activity-content" style="margin: 0">
    99                                                         <div class="activity-header"><?php bp_activity_action(); ?></div>
    100 
    101                                                         <?php if ( bp_get_activity_content_body() ) : ?>
    102 
    103                                                                 <div class="activity-inner"><?php bp_activity_content_body(); ?></div>
    104 
    105                                                         <?php endif; ?>
    106 
    107                                                 </div>
    108                                         </li>
    109 
    110                                 <?php endwhile; ?>
    111 
    112                         </ul>
    113 
    114                 <?php else : ?>
    115 
    116                         <div id="message" class="info">
    117                                 <p><?php _e( 'Sorry, there were no posts found. Why not write one?', 'buddypress' ); ?></p>
    118                         </div>
    119 
    120                 <?php endif; ?>
    121 
    122                 <?php echo $after_widget; ?>
    123         <?php
    124         }
    125 
    126         /**
    127          * Update the networkwide posts widget options.
    128          *
    129          * @param array $new_instance The new instance options.
    130          * @param array $old_instance The old instance options.
    131          * @return array $instance The parsed options to be saved.
    132          */
    133         public function update( $new_instance, $old_instance ) {
    134                 $instance               = $old_instance;
    135                 $instance['title']      = strip_tags( $new_instance['title'] );
    136                 $instance['max_posts']  = strip_tags( $new_instance['max_posts'] );
    137                 $instance['link_title'] = (bool) $new_instance['link_title'];
    138 
    139                 return $instance;
    140         }
    141 
    142         /**
    143          * Output the networkwide posts widget options form.
    144          *
    145          * @param array $instance Settings for this widget.
    146          *
    147          * @return void
    148          */
    149         public function form( $instance ) {
    150                 $instance = wp_parse_args( (array) $instance, array(
    151                         'title'      => __( 'Recent Networkwide Posts', 'buddypress' ),
    152                         'max_posts'  => 10,
    153                         'link_title' => false,
    154                 ) );
    155 
    156                 $title      = strip_tags( $instance['title'] );
    157                 $max_posts  = strip_tags( $instance['max_posts'] );
    158                 $link_title = (bool) $instance['link_title'];
    159 
    160                 ?>
    161 
    162                 <p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _ex( 'Title:', 'Label for the Title field of the Recent Networkwide Posts widget', 'buddypress' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" style="width: 100%;" /></label></p>
    163                 <p><label for="<?php echo $this->get_field_id( 'link_title' ); ?>"><input type="checkbox" name="<?php echo $this->get_field_name( 'link_title' ); ?>" value="1" <?php checked( $link_title ); ?> /> <?php _e( 'Link widget title to Blogs directory', 'buddypress' ); ?></label></p>
    164                 <p><label for="<?php echo $this->get_field_id( 'max_posts' ); ?>"><?php _e( 'Max posts to show:', 'buddypress' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'max_posts' ); ?>" name="<?php echo $this->get_field_name( 'max_posts' ); ?>" type="text" value="<?php echo esc_attr( $max_posts ); ?>" style="width: 30%" /></label></p>
    165                 <?php
    166         }
    167 }
  • trunk/src/bp-blogs/classes/class-bp-blogs-component.php

    r10515 r10517  
    346346        }
    347347}
    348 
    349 /**
    350  * Set up the bp-blogs component.
    351  */
    352 function bp_setup_blogs() {
    353         buddypress()->blogs = new BP_Blogs_Component();
    354 }
    355 add_action( 'bp_setup_components', 'bp_setup_blogs', 6 );
  • trunk/src/bp-blogs/classes/class-bp-blogs-recent-posts-widget.php

    r10515 r10517  
    11<?php
    22/**
    3  * BuddyPress Blogs Widgets.
     3 * BuddyPress Blogs Recent Posts Widget.
    44 *
    55 * @package BuddyPress
     
    1010// Exit if accessed directly.
    1111defined( 'ABSPATH' ) || exit;
    12 
    13 /**
    14  * Register the widgets for the Blogs component.
    15  */
    16 function bp_blogs_register_widgets() {
    17         global $wpdb;
    18 
    19         if ( bp_is_active( 'activity' ) && bp_is_root_blog( $wpdb->blogid ) ) {
    20                 add_action( 'widgets_init', create_function( '', 'return register_widget("BP_Blogs_Recent_Posts_Widget");' ) );
    21         }
    22 }
    23 add_action( 'bp_register_widgets', 'bp_blogs_register_widgets' );
    2412
    2513/**
  • trunk/src/bp-blogs/classes/class-bp-blogs-template.php

    r10515 r10517  
    11<?php
    22/**
    3  * BuddyPress Blogs Template Tags.
     3 * BuddyPress Blogs Template Class.
    44 *
    55 * @package BuddyPress
     
    1010// Exit if accessed directly.
    1111defined( 'ABSPATH' ) || exit;
    12 
    13 /**
    14  * Output the blogs component slug.
    15  *
    16  * @since 1.5.0
    17  *
    18  * @uses bp_get_blogs_slug()
    19  */
    20 function bp_blogs_slug() {
    21         echo bp_get_blogs_slug();
    22 }
    23         /**
    24          * Return the blogs component slug.
    25          *
    26          * @since 1.5.0
    27          *
    28          * @return string The 'blogs' slug.
    29          */
    30         function bp_get_blogs_slug() {
    31 
    32                 /**
    33                  * Filters the blogs component slug.
    34                  *
    35                  * @since 1.5.0
    36                  *
    37                  * @param string $slug Slug for the blogs component.
    38                  */
    39                 return apply_filters( 'bp_get_blogs_slug', buddypress()->blogs->slug );
    40         }
    41 
    42 /**
    43  * Output the blogs component root slug.
    44  *
    45  * @since 1.5.0
    46  *
    47  * @uses bp_get_blogs_root_slug()
    48  */
    49 function bp_blogs_root_slug() {
    50         echo bp_get_blogs_root_slug();
    51 }
    52         /**
    53          * Return the blogs component root slug.
    54          *
    55          * @since 1.5.0
    56          *
    57          * @return string The 'blogs' root slug.
    58          */
    59         function bp_get_blogs_root_slug() {
    60 
    61                 /**
    62                  * Filters the blogs component root slug.
    63                  *
    64                  * @since 1.5.0
    65                  *
    66                  * @param string $root_slug Root slug for the blogs component.
    67                  */
    68                 return apply_filters( 'bp_get_blogs_root_slug', buddypress()->blogs->root_slug );
    69         }
    70 
    71 /**
    72  * Output blog directory permalink.
    73  *
    74  * @since 1.5.0
    75  *
    76  * @uses bp_get_blogs_directory_permalink()
    77  */
    78 function bp_blogs_directory_permalink() {
    79         echo esc_url( bp_get_blogs_directory_permalink() );
    80 }
    81         /**
    82          * Return blog directory permalink.
    83          *
    84          * @since 1.5.0
    85          *
    86          * @uses apply_filters()
    87          * @uses trailingslashit()
    88          * @uses bp_get_root_domain()
    89          * @uses bp_get_blogs_root_slug()
    90          *
    91          * @return string The URL of the Blogs directory.
    92          */
    93         function bp_get_blogs_directory_permalink() {
    94 
    95                 /**
    96                  * Filters the blog directory permalink.
    97                  *
    98                  * @since 1.5.0
    99                  *
    100                  * @param string $value Permalink URL for the blog directory.
    101                  */
    102                 return apply_filters( 'bp_get_blogs_directory_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_blogs_root_slug() ) );
    103         }
    10412
    10513/**
     
    337245        }
    338246}
    339 
    340 /**
    341  * Rewind the blogs and reset blog index.
    342  */
    343 function bp_rewind_blogs() {
    344         global $blogs_template;
    345 
    346         $blogs_template->rewind_blogs();
    347 }
    348 
    349 /**
    350  * Initialize the blogs loop.
    351  *
    352  * Based on the $args passed, bp_has_blogs() populates the $blogs_template
    353  * global, enabling the use of BuddyPress templates and template functions to
    354  * display a list of activity items.
    355  *
    356  * @global object $blogs_template {@link BP_Blogs_Template}
    357  *
    358  * @param array|string $args {
    359  *     Arguments for limiting the contents of the blogs loop. Most arguments
    360  *     are in the same format as {@link BP_Blogs_Blog::get()}. However, because
    361  *     the format of the arguments accepted here differs in a number of ways,
    362  *     and because bp_has_blogs() determines some default arguments in a
    363  *     dynamic fashion, we list all accepted arguments here as well.
    364  *
    365  *     Arguments can be passed as an associative array, or as a URL query
    366  *     string (eg, 'user_id=4&per_page=3').
    367  *
    368  *     @type int      $page             Which page of results to fetch. Using page=1 without
    369  *                                      per_page will result in no pagination. Default: 1.
    370  *     @type int|bool $per_page         Number of results per page. Default: 20.
    371  *     @type string   $page_arg         The string used as a query parameter in
    372  *                                      pagination links. Default: 'bpage'.
    373  *     @type int|bool $max              Maximum number of results to return.
    374  *                                      Default: false (unlimited).
    375  *     @type string   $type             The order in which results should be fetched.
    376  *                                      'active', 'alphabetical', 'newest', or 'random'.
    377  *     @type array    $include_blog_ids Array of blog IDs to limit results to.
    378  *     @type string   $sort             'ASC' or 'DESC'. Default: 'DESC'.
    379  *     @type string   $search_terms     Limit results by a search term. Default: the value of `$_REQUEST['s']` or
    380  *                                      `$_REQUEST['sites_search']`, if present.
    381  *     @type int      $user_id          The ID of the user whose blogs should be retrieved.
    382  *                                      When viewing a user profile page, 'user_id' defaults to the
    383  *                                      ID of the displayed user. Otherwise the default is false.
    384  * }
    385  * @return bool Returns true when blogs are found, otherwise false.
    386  */
    387 function bp_has_blogs( $args = '' ) {
    388         global $blogs_template;
    389 
    390         // Check for and use search terms.
    391         $search_terms_default = false;
    392         $search_query_arg = bp_core_get_component_search_query_arg( 'blogs' );
    393         if ( ! empty( $_REQUEST[ $search_query_arg ] ) ) {
    394                 $search_terms_default = stripslashes( $_REQUEST[ $search_query_arg ] );
    395         } elseif ( ! empty( $_REQUEST['s'] ) ) {
    396                 $search_terms_default = stripslashes( $_REQUEST['s'] );
    397         }
    398 
    399         // Parse arguments.
    400         $r = bp_parse_args( $args, array(
    401                 'type'              => 'active',
    402                 'page_arg'          => 'bpage', // See https://buddypress.trac.wordpress.org/ticket/3679.
    403                 'page'              => 1,
    404                 'per_page'          => 20,
    405                 'max'               => false,
    406                 'user_id'           => bp_displayed_user_id(), // Pass a user_id to limit to only blogs this user is a member of.
    407                 'include_blog_ids'  => false,
    408                 'search_terms'      => $search_terms_default,
    409                 'update_meta_cache' => true
    410         ), 'has_blogs' );
    411 
    412         // Set per_page to maximum if max is enforced.
    413         if ( ! empty( $r['max'] ) && ( (int) $r['per_page'] > (int) $r['max'] ) ) {
    414                 $r['per_page'] = (int) $r['max'];
    415         }
    416 
    417         // Get the blogs.
    418         $blogs_template = new BP_Blogs_Template( $r['type'], $r['page'], $r['per_page'], $r['max'], $r['user_id'], $r['search_terms'], $r['page_arg'], $r['update_meta_cache'], $r['include_blog_ids'] );
    419 
    420         /**
    421          * Filters whether or not there are blogs to list.
    422          *
    423          * @since 1.1.0
    424          *
    425          * @param bool              $value          Whether or not there are blogs to list.
    426          * @param BP_Blogs_Template $blogs_template Current blogs template object.
    427          * @param array             $r              Parsed arguments used in blogs template query.
    428          */
    429         return apply_filters( 'bp_has_blogs', $blogs_template->has_blogs(), $blogs_template, $r );
    430 }
    431 
    432 /**
    433  * Determine if there are still blogs left in the loop.
    434  *
    435  * @global object $blogs_template {@link BP_Blogs_Template}
    436  *
    437  * @return bool Returns true when blogs are found.
    438  */
    439 function bp_blogs() {
    440         global $blogs_template;
    441 
    442         return $blogs_template->blogs();
    443 }
    444 
    445 /**
    446  * Get the current blog object in the loop.
    447  *
    448  * @global object $blogs_template {@link BP_Blogs_Template}
    449  *
    450  * @return object The current blog within the loop.
    451  */
    452 function bp_the_blog() {
    453         global $blogs_template;
    454 
    455         return $blogs_template->the_blog();
    456 }
    457 
    458 /**
    459  * Output the blogs pagination count.
    460  *
    461  * @global object $blogs_template {@link BP_Blogs_Template}
    462  */
    463 function bp_blogs_pagination_count() {
    464         global $blogs_template;
    465 
    466         $start_num = intval( ( $blogs_template->pag_page - 1 ) * $blogs_template->pag_num ) + 1;
    467         $from_num  = bp_core_number_format( $start_num );
    468         $to_num    = bp_core_number_format( ( $start_num + ( $blogs_template->pag_num - 1 ) > $blogs_template->total_blog_count ) ? $blogs_template->total_blog_count : $start_num + ( $blogs_template->pag_num - 1 ) );
    469         $total     = bp_core_number_format( $blogs_template->total_blog_count );
    470 
    471         if ( 1 == $blogs_template->total_blog_count ) {
    472                 $message = __( 'Viewing 1 site', 'buddypress' );
    473         } else {
    474                 $message = sprintf( _n( 'Viewing %1$s - %2$s of %3$s site', 'Viewing %1$s - %2$s of %3$s sites', $blogs_template->total_blog_count, 'buddypress' ), $from_num, $to_num, $total );
    475         }
    476 
    477         echo $message;
    478 }
    479 
    480 /**
    481  * Output the blogs pagination links.
    482  */
    483 function bp_blogs_pagination_links() {
    484         echo bp_get_blogs_pagination_links();
    485 }
    486         /**
    487          * Return the blogs pagination links.
    488          *
    489          * @global object $blogs_template {@link BP_Blogs_Template}
    490          *
    491          * @return string HTML pagination links.
    492          */
    493         function bp_get_blogs_pagination_links() {
    494                 global $blogs_template;
    495 
    496                 /**
    497                  * Filters the blogs pagination links.
    498                  *
    499                  * @since 1.0.0
    500                  *
    501                  * @param string $pag_links HTML pagination links.
    502                  */
    503                 return apply_filters( 'bp_get_blogs_pagination_links', $blogs_template->pag_links );
    504         }
    505 
    506 /**
    507  * Output a blog's avatar.
    508  *
    509  * @see bp_get_blog_avatar() for description of arguments.
    510  *
    511  * @param array|string $args See {@link bp_get_blog_avatar()}.
    512  */
    513 function bp_blog_avatar( $args = '' ) {
    514         echo bp_get_blog_avatar( $args );
    515 }
    516         /**
    517          * Get a blog's avatar.
    518          *
    519          * At the moment, blog avatars are simply the user avatars of the blog
    520          * admin. Filter 'bp_get_blog_avatar_' . $blog_id to customize.
    521          *
    522          * @since 2.4.0 Introduced `$title` argument.
    523          *
    524          * @see bp_core_fetch_avatar() For a description of arguments and
    525          *      return values.
    526          *
    527          * @param array|string $args  {
    528          *     Arguments are listed here with an explanation of their defaults.
    529          *     For more information about the arguments, see
    530          *     {@link bp_core_fetch_avatar()}.
    531          *     @type string   $alt     Default: 'Profile picture of site author [user name]'.
    532          *     @type string   $class   Default: 'avatar'.
    533          *     @type string   $title   Default: 'Profile picture of site author [user name]'.
    534          *     @type string   $type    Default: 'full'.
    535          *     @type int|bool $width   Default: false.
    536          *     @type int|bool $height  Default: false.
    537          *     @type bool     $id      Currently unused.
    538          *     @type bool     $no_grav Default: true.
    539          * }
    540          * @return string User avatar string.
    541          */
    542         function bp_get_blog_avatar( $args = '' ) {
    543                 global $blogs_template;
    544 
    545                 // Bail if avatars are turned off
    546                 // @todo Should we maybe still filter this?
    547                 if ( ! buddypress()->avatar->show_avatars ) {
    548                         return false;
    549                 }
    550 
    551                 $author_displayname = bp_core_get_user_displayname( $blogs_template->blog->admin_user_id );
    552 
    553                 // Parse the arguments.
    554                 $r = bp_parse_args( $args, array(
    555                         'type'    => 'full',
    556                         'width'   => false,
    557                         'height'  => false,
    558                         'class'   => 'avatar',
    559                         'title'   => sprintf( __( 'Profile picture of site author %s', 'buddypress' ), esc_attr( $author_displayname ) ),
    560                         'id'      => false,
    561                         'alt'     => sprintf( __( 'Profile picture of site author %s', 'buddypress' ), esc_attr( $author_displayname ) ),
    562                         'no_grav' => true,
    563                 ) );
    564 
    565                 // Fetch the avatar.
    566                 $avatar = bp_core_fetch_avatar( array(
    567                         'item_id'    => $blogs_template->blog->admin_user_id,
    568                         'title'      => $r['title'],
    569                         // 'avatar_dir' => 'blog-avatars',
    570                         // 'object'     => 'blog',
    571                         'type'       => $r['type'],
    572                         'alt'        => $r['alt'],
    573                         'css_id'     => $r['id'],
    574                         'class'      => $r['class'],
    575                         'width'      => $r['width'],
    576                         'height'     => $r['height']
    577                 ) );
    578 
    579                 /**
    580                  * In future BuddyPress versions you will be able to set the avatar for a blog.
    581                  * Right now you can use a filter with the ID of the blog to change it if you wish.
    582                  * By default it will return the avatar for the primary blog admin.
    583                  *
    584                  * This filter is deprecated as of BuddyPress 1.5 and may be removed in a future version.
    585                  * Use the 'bp_get_blog_avatar' filter instead.
    586                  */
    587                 $avatar = apply_filters( 'bp_get_blog_avatar_' . $blogs_template->blog->blog_id, $avatar );
    588 
    589                 /**
    590                  * Filters a blog's avatar.
    591                  *
    592                  * @since 1.5.0
    593                  *
    594                  * @param string $avatar  Formatted HTML <img> element, or raw avatar
    595                  *                        URL based on $html arg.
    596                  * @param int    $blog_id ID of the blog whose avatar is being displayed.
    597                  * @param array  $r       Array of arguments used when fetching avatar.
    598                  */
    599                 return apply_filters( 'bp_get_blog_avatar', $avatar, $blogs_template->blog->blog_id, $r );
    600         }
    601 
    602 function bp_blog_permalink() {
    603         echo bp_get_blog_permalink();
    604 }
    605         function bp_get_blog_permalink() {
    606                 global $blogs_template;
    607 
    608                 if ( empty( $blogs_template->blog->domain ) )
    609                         $permalink = bp_get_root_domain() . $blogs_template->blog->path;
    610                 else {
    611                         $protocol = 'http://';
    612                         if ( is_ssl() )
    613                                 $protocol = 'https://';
    614 
    615                         $permalink = $protocol . $blogs_template->blog->domain . $blogs_template->blog->path;
    616                 }
    617 
    618                 /**
    619                  * Filters the blog permalink.
    620                  *
    621                  * @since 1.0.0
    622                  *
    623                  * @param string $permalink Permalink URL for the blog.
    624                  */
    625                 return apply_filters( 'bp_get_blog_permalink', $permalink );
    626         }
    627 
    628 /**
    629  * Output the name of the current blog in the loop.
    630  */
    631 function bp_blog_name() {
    632         echo bp_get_blog_name();
    633 }
    634         /**
    635          * Return the name of the current blog in the loop.
    636          *
    637          * @return string The name of the current blog in the loop.
    638          */
    639         function bp_get_blog_name() {
    640                 global $blogs_template;
    641 
    642                 /**
    643                  * Filters the name of the current blog in the loop.
    644                  *
    645                  * @since 1.2.0
    646                  *
    647                  * @param string $name Name of the current blog in the loop.
    648                  */
    649                 return apply_filters( 'bp_get_blog_name', $blogs_template->blog->name );
    650         }
    651 
    652 /**
    653  * Output the ID of the current blog in the loop.
    654  *
    655  * @since 1.7.0
    656  */
    657 function bp_blog_id() {
    658         echo bp_get_blog_id();
    659 }
    660         /**
    661          * Return the ID of the current blog in the loop.
    662          *
    663          * @since 1.7.0
    664          *
    665          * @return int ID of the current blog in the loop.
    666          */
    667         function bp_get_blog_id() {
    668                 global $blogs_template;
    669 
    670                 /**
    671                  * Filters the ID of the current blog in the loop.
    672                  *
    673                  * @since 1.7.0
    674                  *
    675                  * @param int $blog_id ID of the current blog in the loop.
    676                  */
    677                 return apply_filters( 'bp_get_blog_id', $blogs_template->blog->blog_id );
    678         }
    679 
    680 /**
    681  * Output the description of the current blog in the loop.
    682  */
    683 function bp_blog_description() {
    684 
    685         /**
    686          * Filters the description of the current blog in the loop.
    687          *
    688          * @since 1.2.0
    689          *
    690          * @param string $value Description of the current blog in the loop.
    691          */
    692         echo apply_filters( 'bp_blog_description', bp_get_blog_description() );
    693 }
    694         /**
    695          * Return the description of the current blog in the loop.
    696          *
    697          * @return string Description of the current blog in the loop.
    698          */
    699         function bp_get_blog_description() {
    700                 global $blogs_template;
    701 
    702                 /**
    703                  * Filters the description of the current blog in the loop.
    704                  *
    705                  * @since 1.0.0
    706                  *
    707                  * @param string $value Description of the current blog in the loop.
    708                  */
    709                 return apply_filters( 'bp_get_blog_description', $blogs_template->blog->description );
    710         }
    711 
    712 /**
    713  * Output the row class of the current blog in the loop.
    714  *
    715  * @since 1.7.0
    716  *
    717  * @param array $classes Array of custom classes.
    718  */
    719 function bp_blog_class( $classes = array() ) {
    720         echo bp_get_blog_class( $classes );
    721 }
    722         /**
    723          * Return the row class of the current blog in the loop.
    724          *
    725          * @since 1.7.0
    726          *
    727          * @global BP_Blogs_Template $blogs_template
    728          *
    729          * @param array $classes Array of custom classes.
    730          * @return string Row class of the site.
    731          */
    732         function bp_get_blog_class( $classes = array() ) {
    733                 global $blogs_template;
    734 
    735                 // Add even/odd classes, but only if there's more than 1 group.
    736                 if ( $blogs_template->blog_count > 1 ) {
    737                         $pos_in_loop = (int) $blogs_template->current_blog;
    738                         $classes[]   = ( $pos_in_loop % 2 ) ? 'even' : 'odd';
    739 
    740                 // If we've only one site in the loop, don't bother with odd and even.
    741                 } else {
    742                         $classes[] = 'bp-single-blog';
    743                 }
    744 
    745                 /**
    746                  * Filters the row class of the current blog in the loop.
    747                  *
    748                  * @since 1.7.0
    749                  *
    750                  * @param array $classes Array of classes to be applied to row.
    751                  */
    752                 $classes = apply_filters( 'bp_get_blog_class', $classes );
    753                 $classes = array_merge( $classes, array() );
    754                 $retval  = 'class="' . join( ' ', $classes ) . '"';
    755 
    756                 return $retval;
    757         }
    758 
    759 /**
    760  * Output the last active date of the current blog in the loop.
    761  *
    762  * @param array $args See {@link bp_get_blog_last_active()}.
    763  */
    764 function bp_blog_last_active( $args = array() ) {
    765         echo bp_get_blog_last_active( $args );
    766 }
    767         /**
    768          * Return the last active date of the current blog in the loop.
    769          *
    770          * @param array $args {
    771          *     Array of optional arguments.
    772          *     @type bool $active_format If true, formatted "Active 5 minutes ago".
    773          *                               If false, formatted "5 minutes ago".
    774          *                               Default: true.
    775          * }
    776          * @return string Last active date.
    777          */
    778         function bp_get_blog_last_active( $args = array() ) {
    779                 global $blogs_template;
    780 
    781                 // Parse the activity format.
    782                 $r = bp_parse_args( $args, array(
    783                         'active_format' => true
    784                 ) );
    785 
    786                 // Backwards compatibility for anyone forcing a 'true' active_format.
    787                 if ( true === $r['active_format'] ) {
    788                         $r['active_format'] = __( 'active %s', 'buddypress' );
    789                 }
    790 
    791                 // Blog has been posted to at least once.
    792                 if ( isset( $blogs_template->blog->last_activity ) ) {
    793 
    794                         // Backwards compatibility for pre 1.5 'ago' strings.
    795                         $last_activity = ! empty( $r['active_format'] )
    796                                 ? bp_core_get_last_activity( $blogs_template->blog->last_activity, $r['active_format'] )
    797                                 : bp_core_time_since( $blogs_template->blog->last_activity );
    798 
    799                 // Blog has never been posted to.
    800                 } else {
    801                         $last_activity = __( 'Never active', 'buddypress' );
    802                 }
    803 
    804                 /**
    805                  * Filters the last active date of the current blog in the loop.
    806                  *
    807                  * @since
    808                  *
    809                  * @param string $last_activity Last active date.
    810                  * @param array  $r             Array of parsed args used to determine formatting.
    811                  */
    812                 return apply_filters( 'bp_blog_last_active', $last_activity, $r );
    813         }
    814 
    815 /**
    816  * Output the latest post from the current blog in the loop.
    817  *
    818  * @param array $args See {@link bp_get_blog_latest_post()}.
    819  */
    820 function bp_blog_latest_post( $args = array() ) {
    821         echo bp_get_blog_latest_post( $args );
    822 }
    823         /**
    824          * Return the latest post from the current blog in the loop.
    825          *
    826          * @param array $args {
    827          *     Array of optional arguments.
    828          *     @type bool $latest_format If true, formatted "Latest post: [link to post]".
    829          *                               If false, formatted "[link to post]".
    830          *                               Default: true.
    831          * }
    832          * @return string $retval String of the form 'Latest Post: [link to post]'.
    833          */
    834         function bp_get_blog_latest_post( $args = array() ) {
    835                 global $blogs_template;
    836 
    837                 $r = wp_parse_args( $args, array(
    838                         'latest_format' => true,
    839                 ) );
    840 
    841                 $retval = bp_get_blog_latest_post_title();
    842 
    843                 if ( ! empty( $retval ) ) {
    844                         if ( ! empty( $r['latest_format'] ) ) {
    845 
    846                                 /**
    847                                  * Filters the title text of the latest post for the current blog in loop.
    848                                  *
    849                                  * @since 1.0.0
    850                                  *
    851                                  * @param string $retval Title of the latest post.
    852                                  */
    853                                 $retval = sprintf( __( 'Latest Post: %s', 'buddypress' ), '<a href="' . $blogs_template->blog->latest_post->guid . '">' . apply_filters( 'the_title', $retval ) . '</a>' );
    854                         } else {
    855 
    856                                 /** This filter is documented in bp-blogs/bp-blogs-template.php */
    857                                 $retval = '<a href="' . $blogs_template->blog->latest_post->guid . '">' . apply_filters( 'the_title', $retval ) . '</a>';
    858                         }
    859                 }
    860 
    861                 /**
    862                  * Filters the HTML markup result for the latest blog post in loop.
    863                  *
    864                  * @since 1.2.0
    865                  *
    866                  * @param string $retval HTML markup for the latest post.
    867                  */
    868                 return apply_filters( 'bp_get_blog_latest_post', $retval );
    869         }
    870 
    871 /**
    872  * Output the title of the latest post on the current blog in the loop.
    873  *
    874  * @since 1.7.0
    875  *
    876  * @see bp_get_blog_latest_post_title()
    877  */
    878 function bp_blog_latest_post_title() {
    879         echo bp_get_blog_latest_post_title();
    880 }
    881         /**
    882          * Return the title of the latest post on the current blog in the loop.
    883          *
    884          * @since 1.7.0
    885          *
    886          * @global BP_Blogs_Template
    887          *
    888          * @return string Post title.
    889          */
    890         function bp_get_blog_latest_post_title() {
    891                 global $blogs_template;
    892 
    893                 $retval = '';
    894 
    895                 if ( ! empty( $blogs_template->blog->latest_post ) && ! empty( $blogs_template->blog->latest_post->post_title ) )
    896                         $retval = $blogs_template->blog->latest_post->post_title;
    897 
    898                 /**
    899                  * Filters the title text of the latest post on the current blog in the loop.
    900                  *
    901                  * @since 1.7.0
    902                  *
    903                  * @param string $retval Title text for the latest post.
    904                  */
    905                 return apply_filters( 'bp_get_blog_latest_post_title', $retval );
    906         }
    907 
    908 /**
    909  * Output the permalink of the latest post on the current blog in the loop.
    910  *
    911  * @since 1.7.0
    912  *
    913  * @see bp_get_blog_latest_post_title()
    914  */
    915 function bp_blog_latest_post_permalink() {
    916         echo esc_url( bp_get_blog_latest_post_permalink() );
    917 }
    918         /**
    919          * Return the permalink of the latest post on the current blog in the loop.
    920          *
    921          * @since 1.7.0
    922          *
    923          * @global BP_Blogs_Template
    924          *
    925          * @return string URL of the blog's latest post.
    926          */
    927         function bp_get_blog_latest_post_permalink() {
    928                 global $blogs_template;
    929 
    930                 $retval = '';
    931 
    932                 if ( ! empty( $blogs_template->blog->latest_post ) && ! empty( $blogs_template->blog->latest_post->ID ) )
    933                         $retval = add_query_arg( 'p', $blogs_template->blog->latest_post->ID, bp_get_blog_permalink() );
    934 
    935                 /**
    936                  * Filters the permalink of the latest post on the current blog in the loop.
    937                  *
    938                  * @since 1.7.0
    939                  *
    940                  * @param string $retval Permalink URL of the latest post.
    941                  */
    942                 return apply_filters( 'bp_get_blog_latest_post_permalink', $retval );
    943         }
    944 
    945 /**
    946  * Output the content of the latest post on the current blog in the loop.
    947  *
    948  * @since 1.7.0
    949  *
    950  * @uses bp_get_blog_latest_post_content()
    951  */
    952 function bp_blog_latest_post_content() {
    953         echo bp_get_blog_latest_post_content();
    954 }
    955         /**
    956          * Return the content of the latest post on the current blog in the loop.
    957          *
    958          * @since 1.7.0
    959          *
    960          * @global BP_Blogs_Template
    961          *
    962          * @return string Content of the blog's latest post.
    963          */
    964         function bp_get_blog_latest_post_content() {
    965                 global $blogs_template;
    966 
    967                 $retval = '';
    968 
    969                 if ( ! empty( $blogs_template->blog->latest_post ) && ! empty( $blogs_template->blog->latest_post->post_content ) )
    970                         $retval = $blogs_template->blog->latest_post->post_content;
    971 
    972                 /**
    973                  * Filters the content of the latest post on the current blog in the loop.
    974                  *
    975                  * @since 1.7.0
    976                  *
    977                  * @param string $retval Content of the latest post on the current blog in the loop.
    978                  */
    979                 return apply_filters( 'bp_get_blog_latest_post_content', $retval );
    980         }
    981 
    982 /**
    983  * Output the featured image of the latest post on the current blog in the loop.
    984  *
    985  * @since 1.7.0
    986  *
    987  * @see bp_get_blog_latest_post_content() For description of parameters.
    988  *
    989  * @param string $size See {@link bp_get_blog_latest_post_featured_image()}.
    990  */
    991 function bp_blog_latest_post_featured_image( $size = 'thumbnail' ) {
    992         echo bp_get_blog_latest_post_featured_image( $size );
    993 }
    994         /**
    995          * Return the featured image of the latest post on the current blog in the loop.
    996          *
    997          * @since 1.7.0
    998          *
    999          * @global BP_Blogs_Template
    1000          *
    1001          * @param string $size Image version to return. 'thumbnail', 'medium',
    1002          *                     'large', or 'post-thumbnail'. Default: 'thumbnail'.
    1003          * @return string URL of the image.
    1004          */
    1005         function bp_get_blog_latest_post_featured_image( $size = 'thumbnail' ) {
    1006                 global $blogs_template;
    1007 
    1008                 $retval = '';
    1009 
    1010                 if ( ! empty( $blogs_template->blog->latest_post ) && ! empty( $blogs_template->blog->latest_post->images[$size] ) )
    1011                         $retval = $blogs_template->blog->latest_post->images[$size];
    1012 
    1013                 /**
    1014                  * Filters the featured image of the latest post on the current blog in the loop.
    1015                  *
    1016                  * @since 1.7.0
    1017                  *
    1018                  * @param string $retval The featured image of the latest post on the current blog in the loop.
    1019                  */
    1020                 return apply_filters( 'bp_get_blog_latest_post_featured_image', $retval );
    1021         }
    1022 
    1023 /**
    1024  * Does the latest blog post have a featured image?
    1025  *
    1026  * @since 1.7.0
    1027  *
    1028  * @param string $thumbnail Image version to return. 'thumbnail', 'medium', 'large',
    1029  *                          or 'post-thumbnail'. Default: 'thumbnail'.
    1030  * @return bool True if the latest blog post from the current blog has a
    1031  *              featured image of the given size.
    1032  */
    1033 function bp_blog_latest_post_has_featured_image( $thumbnail = 'thumbnail' ) {
    1034         $image  = bp_get_blog_latest_post_featured_image( $thumbnail );
    1035 
    1036         /**
    1037          * Filters whether or not the latest blog post has a featured image.
    1038          *
    1039          * @since 1.7.0
    1040          *
    1041          * @param bool   $value     Whether or not the latest blog post has a featured image.
    1042          * @param string $thumbnail Image version to return.
    1043          * @param string $image     Returned value from bp_get_blog_latest_post_featured_image.
    1044          */
    1045         return apply_filters( 'bp_blog_latest_post_has_featured_image', ! empty( $image ), $thumbnail, $image );
    1046 }
    1047 
    1048 /**
    1049  * Output hidden fields to help with form submissions in Sites directory.
    1050  *
    1051  * This function detects whether 's', 'letter', or 'blogs_search' requests are
    1052  * currently being made (as in a URL parameter), and creates corresponding
    1053  * hidden fields.
    1054  */
    1055 function bp_blog_hidden_fields() {
    1056         if ( isset( $_REQUEST['s'] ) )
    1057                 echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['s'] ). '" name="search_terms" />';
    1058 
    1059         if ( isset( $_REQUEST['letter'] ) )
    1060                 echo '<input type="hidden" id="selected_letter" value="' . esc_attr( $_REQUEST['letter'] ) . '" name="selected_letter" />';
    1061 
    1062         if ( isset( $_REQUEST['blogs_search'] ) )
    1063                 echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['blogs_search'] ) . '" name="search_terms" />';
    1064 }
    1065 
    1066 /**
    1067  * Output the total number of blogs on the site.
    1068  */
    1069 function bp_total_blog_count() {
    1070         echo bp_get_total_blog_count();
    1071 }
    1072         /**
    1073          * Return the total number of blogs on the site.
    1074          *
    1075          * @return int Total number of blogs.
    1076          */
    1077         function bp_get_total_blog_count() {
    1078 
    1079                 /**
    1080                  * Filters the total number of blogs on the site.
    1081                  *
    1082                  * @since 1.2.0
    1083                  *
    1084                  * @param int $value Total number of blogs on the site.
    1085                  */
    1086                 return apply_filters( 'bp_get_total_blog_count', bp_blogs_total_blogs() );
    1087         }
    1088         add_filter( 'bp_get_total_blog_count', 'bp_core_number_format' );
    1089 
    1090 /**
    1091  * Output the total number of blogs for a given user.
    1092  *
    1093  * @param int $user_id ID of the user.
    1094  */
    1095 function bp_total_blog_count_for_user( $user_id = 0 ) {
    1096         echo bp_get_total_blog_count_for_user( $user_id );
    1097 }
    1098         /**
    1099          * Return the total number of blogs for a given user.
    1100          *
    1101          * @param int $user_id ID of the user.
    1102          * @return int Total number of blogs for the user.
    1103          */
    1104         function bp_get_total_blog_count_for_user( $user_id = 0 ) {
    1105 
    1106                 /**
    1107                  * Filters the total number of blogs for a given user.
    1108                  *
    1109                  * @since 1.2.0
    1110                  *
    1111                  * @param int $value Total number of blogs for a given user.
    1112                  */
    1113                 return apply_filters( 'bp_get_total_blog_count_for_user', bp_blogs_total_blogs_for_user( $user_id ) );
    1114         }
    1115         add_filter( 'bp_get_total_blog_count_for_user', 'bp_core_number_format' );
    1116 
    1117 
    1118 /** Blog Registration ********************************************************/
    1119 
    1120 /**
    1121  * Checks whether blog creation is enabled.
    1122  *
    1123  * Returns true when blog creation is enabled for logged-in users only, or
    1124  * when it's enabled for new registrations.
    1125  *
    1126  * @return bool True if blog registration is enabled.
    1127  */
    1128 function bp_blog_signup_enabled() {
    1129         $bp = buddypress();
    1130 
    1131         $active_signup = isset( $bp->site_options['registration'] )
    1132                 ? $bp->site_options['registration']
    1133                 : 'all';
    1134 
    1135         /**
    1136          * Filters whether or not blog creation is enabled.
    1137          *
    1138          * Return "all", "none", "blog" or "user".
    1139          *
    1140          * @since 1.0.0
    1141          *
    1142          * @param string $active_signup Value of the registration site option creation status.
    1143          */
    1144         $active_signup = apply_filters( 'wpmu_active_signup', $active_signup );
    1145 
    1146         if ( 'none' == $active_signup || 'user' == $active_signup )
    1147                 return false;
    1148 
    1149         return true;
    1150 }
    1151 
    1152 /**
    1153  * Output the wrapper markup for the blog signup form.
    1154  *
    1155  * @param string          $blogname   Optional. The default blog name (path or domain).
    1156  * @param string          $blog_title Optional. The default blog title.
    1157  * @param string|WP_Error $errors     Optional. The WP_Error object returned by a previous
    1158  *                                    submission attempt.
    1159  */
    1160 function bp_show_blog_signup_form($blogname = '', $blog_title = '', $errors = '') {
    1161         global $current_user;
    1162 
    1163         if ( isset($_POST['submit']) ) {
    1164                 bp_blogs_validate_blog_signup();
    1165         } else {
    1166                 if ( ! is_wp_error($errors) ) {
    1167                         $errors = new WP_Error();
    1168                 }
    1169 
    1170                 /**
    1171                  * Filters the default values for Blog name, title, and any current errors.
    1172                  *
    1173                  * @since 1.0.0
    1174                  *
    1175                  * @param array $value {
    1176                  *      string   $blogname   Default blog name provided.
    1177                  *      string   $blog_title Default blog title provided.
    1178                  *      WP_Error $errors     WP_Error object.
    1179                  * }
    1180                  */
    1181                 $filtered_results = apply_filters('signup_another_blog_init', array('blogname' => $blogname, 'blog_title' => $blog_title, 'errors' => $errors ));
    1182                 $blogname = $filtered_results['blogname'];
    1183                 $blog_title = $filtered_results['blog_title'];
    1184                 $errors = $filtered_results['errors'];
    1185 
    1186                 if ( $errors->get_error_code() ) {
    1187                         echo "<p>" . __('There was a problem; please correct the form below and try again.', 'buddypress') . "</p>";
    1188                 }
    1189                 ?>
    1190                 <p><?php printf(__("By filling out the form below, you can <strong>add a site to your account</strong>. There is no limit to the number of sites that you can have, so create to your heart's content, but blog responsibly!", 'buddypress'), $current_user->display_name) ?></p>
    1191 
    1192                 <p><?php _e("If you&#8217;re not going to use a great domain, leave it for a new user. Now have at it!", 'buddypress') ?></p>
    1193 
    1194                 <form class="standard-form" id="setupform" method="post" action="">
    1195 
    1196                         <input type="hidden" name="stage" value="gimmeanotherblog" />
    1197                         <?php
    1198 
    1199                         /**
    1200                          * Fires after the default hidden fields in blog signup form markup.
    1201                          *
    1202                          * @since 1.0.0
    1203                          */
    1204                         do_action( 'signup_hidden_fields' ); ?>
    1205 
    1206                         <?php bp_blogs_signup_blog($blogname, $blog_title, $errors); ?>
    1207                         <p>
    1208                                 <input id="submit" type="submit" name="submit" class="submit" value="<?php esc_attr_e('Create Site', 'buddypress') ?>" />
    1209                         </p>
    1210 
    1211                         <?php wp_nonce_field( 'bp_blog_signup_form' ) ?>
    1212                 </form>
    1213                 <?php
    1214         }
    1215 }
    1216 
    1217 /**
    1218  * Output the input fields for the blog creation form.
    1219  *
    1220  * @param string          $blogname   Optional. The default blog name (path or domain).
    1221  * @param string          $blog_title Optional. The default blog title.
    1222  * @param string|WP_Error $errors     Optional. The WP_Error object returned by a previous
    1223  *                                    submission attempt.
    1224  */
    1225 function bp_blogs_signup_blog( $blogname = '', $blog_title = '', $errors = '' ) {
    1226         global $current_site;
    1227 
    1228         // Blog name.
    1229         if( !is_subdomain_install() )
    1230                 echo '<label for="blogname">' . __('Site Name:', 'buddypress') . '</label>';
    1231         else
    1232                 echo '<label for="blogname">' . __('Site Domain:', 'buddypress') . '</label>';
    1233 
    1234         if ( $errmsg = $errors->get_error_message('blogname') ) { ?>
    1235 
    1236                 <p class="error"><?php echo $errmsg ?></p>
    1237 
    1238         <?php }
    1239 
    1240         if ( !is_subdomain_install() )
    1241                 echo '<span class="prefix_address">' . $current_site->domain . $current_site->path . '</span> <input name="blogname" type="text" id="blogname" value="'.$blogname.'" maxlength="63" /><br />';
    1242         else
    1243                 echo '<input name="blogname" type="text" id="blogname" value="'.$blogname.'" maxlength="63" ' . bp_get_form_field_attributes( 'blogname' ) . '/> <span class="suffix_address">.' . bp_blogs_get_subdomain_base() . '</span><br />';
    1244 
    1245         if ( !is_user_logged_in() ) {
    1246                 print '(<strong>' . __( 'Your address will be ' , 'buddypress');
    1247 
    1248                 if ( !is_subdomain_install() ) {
    1249                         print $current_site->domain . $current_site->path . __( 'blogname' , 'buddypress');
    1250                 } else {
    1251                         print __( 'domain.' , 'buddypress') . $current_site->domain . $current_site->path;
    1252                 }
    1253 
    1254                 echo '.</strong> ' . __( 'Must be at least 4 characters, letters and numbers only. It cannot be changed so choose carefully!)' , 'buddypress') . '</p>';
    1255         }
    1256 
    1257         // Blog Title.
    1258         ?>
    1259 
    1260         <label for="blog_title"><?php _e('Site Title:', 'buddypress') ?></label>
    1261 
    1262         <?php if ( $errmsg = $errors->get_error_message('blog_title') ) { ?>
    1263 
    1264                 <p class="error"><?php echo $errmsg ?></p>
    1265 
    1266         <?php }
    1267         echo '<input name="blog_title" type="text" id="blog_title" value="'.esc_html($blog_title, 1).'" /></p>';
    1268         ?>
    1269 
    1270         <p>
    1271                 <label for="blog_public_on"><?php _e('Privacy:', 'buddypress') ?></label>
    1272                 <?php _e( 'I would like my site to appear in search engines, and in public listings around this network.', 'buddypress' ); ?>
    1273 
    1274                 <label class="checkbox" for="blog_public_on">
    1275                         <input type="radio" id="blog_public_on" name="blog_public" value="1" <?php if( !isset( $_POST['blog_public'] ) || '1' == $_POST['blog_public'] ) { ?>checked="checked"<?php } ?> />
    1276                         <strong><?php _e( 'Yes' , 'buddypress'); ?></strong>
    1277                 </label>
    1278                 <label class="checkbox" for="blog_public_off">
    1279                         <input type="radio" id="blog_public_off" name="blog_public" value="0" <?php if( isset( $_POST['blog_public'] ) && '0' == $_POST['blog_public'] ) { ?>checked="checked"<?php } ?> />
    1280                         <strong><?php _e( 'No' , 'buddypress'); ?></strong>
    1281                 </label>
    1282         </p>
    1283 
    1284         <?php
    1285 
    1286         /**
    1287          * Fires at the end of all of the default input fields for blog creation form.
    1288          *
    1289          * @since 1.0.0
    1290          *
    1291          * @param WP_Error $errors WP_Error object if any present.
    1292          */
    1293         do_action('signup_blogform', $errors);
    1294 }
    1295 
    1296 /**
    1297  * Process a blog registration submission.
    1298  *
    1299  * Passes submitted values to {@link wpmu_create_blog()}.
    1300  *
    1301  * @return bool True on success, false on failure.
    1302  */
    1303 function bp_blogs_validate_blog_signup() {
    1304         global $wpdb, $current_user, $blogname, $blog_title, $errors, $domain, $path, $current_site;
    1305 
    1306         if ( !check_admin_referer( 'bp_blog_signup_form' ) )
    1307                 return false;
    1308 
    1309         $current_user = wp_get_current_user();
    1310 
    1311         if( !is_user_logged_in() )
    1312                 die();
    1313 
    1314         $result = bp_blogs_validate_blog_form();
    1315         extract($result);
    1316 
    1317         if ( $errors->get_error_code() ) {
    1318                 unset($_POST['submit']);
    1319                 bp_show_blog_signup_form( $blogname, $blog_title, $errors );
    1320                 return false;
    1321         }
    1322 
    1323         $public = (int) $_POST['blog_public'];
    1324 
    1325         // Depreciated.
    1326         $meta = apply_filters( 'signup_create_blog_meta', array( 'lang_id' => 1, 'public' => $public ) );
    1327 
    1328         /**
    1329          * Filters the default values for Blog meta.
    1330          *
    1331          * @since 1.0.0
    1332          *
    1333          * @param array $meta {
    1334          *      string $value  Default blog language ID.
    1335          *      string $public Default public status.
    1336          * }
    1337          */
    1338         $meta = apply_filters( 'add_signup_meta', $meta );
    1339 
    1340         // If this is a subdomain install, set up the site inside the root domain.
    1341         if ( is_subdomain_install() )
    1342                 $domain = $blogname . '.' . preg_replace( '|^www\.|', '', $current_site->domain );
    1343 
    1344         wpmu_create_blog( $domain, $path, $blog_title, $current_user->ID, $meta, $wpdb->siteid );
    1345         bp_blogs_confirm_blog_signup($domain, $path, $blog_title, $current_user->user_login, $current_user->user_email, $meta);
    1346         return true;
    1347 }
    1348 
    1349 /**
    1350  * Validate a blog creation submission.
    1351  *
    1352  * Essentially, a wrapper for {@link wpmu_validate_blog_signup()}.
    1353  *
    1354  * @return array Contains the new site data and error messages.
    1355  */
    1356 function bp_blogs_validate_blog_form() {
    1357         $user = '';
    1358         if ( is_user_logged_in() )
    1359                 $user = wp_get_current_user();
    1360 
    1361         return wpmu_validate_blog_signup($_POST['blogname'], $_POST['blog_title'], $user);
    1362 }
    1363 
    1364 /**
    1365  * Display a message after successful blog registration.
    1366  *
    1367  * @param string       $domain     The new blog's domain.
    1368  * @param string       $path       The new blog's path.
    1369  * @param string       $blog_title The new blog's title.
    1370  * @param string       $user_name  The user name of the user who created the blog. Unused.
    1371  * @param string       $user_email The email of the user who created the blog. Unused.
    1372  * @param string|array $meta       Meta values associated with the new blog. Unused.
    1373  */
    1374 function bp_blogs_confirm_blog_signup( $domain, $path, $blog_title, $user_name, $user_email = '', $meta = '' ) {
    1375         $protocol = is_ssl() ? 'https://' : 'http://';
    1376         $blog_url = $protocol . $domain . $path; ?>
    1377 
    1378         <p><?php _e( 'Congratulations! You have successfully registered a new site.', 'buddypress' ) ?></p>
    1379         <p>
    1380                 <?php printf(__( '<a href="%1$s">%2$s</a> is your new site.  <a href="%3$s">Login</a> as "%4$s" using your existing password.', 'buddypress' ), $blog_url, $blog_url, $blog_url . "wp-login.php", $user_name ); ?>
    1381         </p>
    1382 
    1383 <?php
    1384 
    1385         /**
    1386          * Fires after the default successful blog registration message markup.
    1387          *
    1388          * @since 1.0.0
    1389          */
    1390         do_action('signup_finished');
    1391 }
    1392 
    1393 /**
    1394  * Output a "Create a Site" link for users viewing their own profiles.
    1395  *
    1396  * This function is not used by BuddyPress as of 1.2, but is kept here for older
    1397  * themes that may still be using it.
    1398  */
    1399 function bp_create_blog_link() {
    1400 
    1401         // Don't show this link when not on your own profile.
    1402         if ( ! bp_is_my_profile() ) {
    1403                 return;
    1404         }
    1405 
    1406         /**
    1407          * Filters "Create a Site" links for users viewing their own profiles.
    1408          *
    1409          * @since 1.0.0
    1410          *
    1411          * @param string $value HTML link for creating a site.
    1412          */
    1413         echo apply_filters( 'bp_create_blog_link', '<a href="' . trailingslashit( bp_get_blogs_directory_permalink() . 'create' ) . '">' . __( 'Create a Site', 'buddypress' ) . '</a>' );
    1414 }
    1415 
    1416 /**
    1417  * Output navigation tabs for a user Blogs page.
    1418  *
    1419  * Currently unused by BuddyPress.
    1420  */
    1421 function bp_blogs_blog_tabs() {
    1422 
    1423         // Don't show these tabs on a user's own profile.
    1424         if ( bp_is_my_profile() ) {
    1425                 return false;
    1426         } ?>
    1427 
    1428         <ul class="content-header-nav">
    1429                 <li<?php if ( bp_is_current_action( 'my-blogs'        ) || !bp_current_action() ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_blogs_slug() . '/my-blogs'        ); ?>"><?php printf( __( "%s's Sites", 'buddypress' ),           bp_get_displayed_user_fullname() ); ?></a></li>
    1430                 <li<?php if ( bp_is_current_action( 'recent-posts'    )                         ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_blogs_slug() . '/recent-posts'    ); ?>"><?php printf( __( "%s's Recent Posts", 'buddypress' ),    bp_get_displayed_user_fullname() ); ?></a></li>
    1431                 <li<?php if ( bp_is_current_action( 'recent-comments' )                         ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_blogs_slug() . '/recent-comments' ); ?>"><?php printf( __( "%s's Recent Comments", 'buddypress' ), bp_get_displayed_user_fullname() ); ?></a></li>
    1432         </ul>
    1433 
    1434 <?php
    1435 
    1436         /**
    1437          * Fires after the markup for the navigation tabs for a user Blogs page.
    1438          *
    1439          * @since 1.0.0
    1440          */
    1441         do_action( 'bp_blogs_blog_tabs' );
    1442 }
    1443 
    1444 /**
    1445  * Output the blog directory search form.
    1446  */
    1447 function bp_directory_blogs_search_form() {
    1448 
    1449         $query_arg = bp_core_get_component_search_query_arg( 'blogs' );
    1450 
    1451         if ( ! empty( $_REQUEST[ $query_arg ] ) ) {
    1452                 $search_value = stripslashes( $_REQUEST[ $query_arg ] );
    1453         } else {
    1454                 $search_value = bp_get_search_default_text( 'blogs' );
    1455         }
    1456 
    1457         $search_form_html = '<form action="" method="get" id="search-blogs-form">
    1458                 <label for="blogs_search"><input type="text" name="' . esc_attr( $query_arg ) . '" id="blogs_search" placeholder="'. esc_attr( $search_value ) .'" /></label>
    1459                 <input type="submit" id="blogs_search_submit" name="blogs_search_submit" value="' . __( 'Search', 'buddypress' ) . '" />
    1460         </form>';
    1461 
    1462         /**
    1463          * Filters the output for the blog directory search form.
    1464          *
    1465          * @since 1.9.0
    1466          *
    1467          * @param string $search_form_html HTML markup for blog directory search form.
    1468          */
    1469         echo apply_filters( 'bp_directory_blogs_search_form', $search_form_html );
    1470 }
    1471 
    1472 /**
    1473  * Output the Create a Site button.
    1474  *
    1475  * @since 2.0.0
    1476  */
    1477 function bp_blog_create_button() {
    1478         echo bp_get_blog_create_button();
    1479 }
    1480         /**
    1481          * Get the Create a Site button.
    1482          *
    1483          * @since 2.0.0
    1484          *
    1485          * @return string
    1486          */
    1487         function bp_get_blog_create_button() {
    1488                 if ( ! is_user_logged_in() ) {
    1489                         return false;
    1490                 }
    1491 
    1492                 if ( ! bp_blog_signup_enabled() ) {
    1493                         return false;
    1494                 }
    1495 
    1496                 $button_args = array(
    1497                         'id'         => 'create_blog',
    1498                         'component'  => 'blogs',
    1499                         'link_text'  => __( 'Create a Site', 'buddypress' ),
    1500                         'link_title' => __( 'Create a Site', 'buddypress' ),
    1501                         'link_class' => 'blog-create no-ajax',
    1502                         'link_href'  => trailingslashit( bp_get_blogs_directory_permalink() . 'create' ),
    1503                         'wrapper'    => false,
    1504                         'block_self' => false,
    1505                 );
    1506 
    1507                 /**
    1508                  * Filters the Create a Site button.
    1509                  *
    1510                  * @since 2.0.0
    1511                  *
    1512                  * @param array $button_args Array of arguments to be used for the Create a Site button.
    1513                  */
    1514                 return bp_get_button( apply_filters( 'bp_get_blog_create_button', $button_args ) );
    1515         }
    1516 
    1517 /**
    1518  * Output the Create a Site nav item.
    1519  *
    1520  * @since 2.2.0
    1521  */
    1522 function bp_blog_create_nav_item() {
    1523         echo bp_get_blog_create_nav_item();
    1524 }
    1525 
    1526         /**
    1527          * Get the Create a Site nav item.
    1528          *
    1529          * @since 2.2.0
    1530          *
    1531          * @return string
    1532          */
    1533         function bp_get_blog_create_nav_item() {
    1534                 // Get the create a site button.
    1535                 $create_blog_button = bp_get_blog_create_button();
    1536 
    1537                 // Make sure the button is available.
    1538                 if ( empty( $create_blog_button ) ) {
    1539                         return;
    1540                 }
    1541 
    1542                 $output = '<li id="blog-create-nav">' . $create_blog_button . '</li>';
    1543 
    1544                 return apply_filters( 'bp_get_blog_create_nav_item', $output );
    1545         }
    1546 
    1547 /**
    1548  * Checks if a specific theme is still filtering the Blogs directory title
    1549  * if so, transform the title button into a Blogs directory nav item.
    1550  *
    1551  * @since 2.2.0
    1552  *
    1553  * @uses bp_blog_create_nav_item() to output the Create a Site nav item.
    1554  *
    1555  * @return string HTML Output
    1556  */
    1557 function bp_blog_backcompat_create_nav_item() {
    1558         // Bail if Blogs nav item is already used by bp-legacy.
    1559         if ( has_action( 'bp_blogs_directory_blog_types', 'bp_legacy_theme_blog_create_nav', 999 ) ) {
    1560                 return;
    1561         }
    1562 
    1563         // Bail if the theme is not filtering the Blogs directory title.
    1564         if ( ! has_filter( 'bp_blogs_directory_header' ) ) {
    1565                 return;
    1566         }
    1567 
    1568         bp_blog_create_nav_item();
    1569 }
    1570 add_action( 'bp_blogs_directory_blog_types', 'bp_blog_backcompat_create_nav_item', 1000 );
    1571 
    1572 /**
    1573  * Output button for visiting a blog in a loop.
    1574  *
    1575  * @see bp_get_blogs_visit_blog_button() for description of arguments.
    1576  *
    1577  * @param array|string $args See {@link bp_get_blogs_visit_blog_button()}.
    1578  */
    1579 function bp_blogs_visit_blog_button( $args = '' ) {
    1580         echo bp_get_blogs_visit_blog_button( $args );
    1581 }
    1582         /**
    1583          * Return button for visiting a blog in a loop.
    1584          *
    1585          * @see BP_Button for a complete description of arguments and return
    1586          *      value.
    1587          *
    1588          * @param array|string $args {
    1589          *     Arguments are listed below, with their default values. For a
    1590          *     complete description of arguments, see {@link BP_Button}.
    1591          *     @type string $id                Default: 'visit_blog'.
    1592          *     @type string $component         Default: 'blogs'.
    1593          *     @type bool   $must_be_logged_in Default: false.
    1594          *     @type bool   $block_self        Default: false.
    1595          *     @type string $wrapper_class     Default: 'blog-button visit'.
    1596          *     @type string $link_href         Permalink of the current blog in the loop.
    1597          *     @type string $link_class        Default: 'blog-button visit'.
    1598          *     @type string $link_text         Default: 'Visit Site'.
    1599          *     @type string $link_title        Default: 'Visit Site'.
    1600          * }
    1601          * @return string The HTML for the Visit button.
    1602          */
    1603         function bp_get_blogs_visit_blog_button( $args = '' ) {
    1604                 $defaults = array(
    1605                         'id'                => 'visit_blog',
    1606                         'component'         => 'blogs',
    1607                         'must_be_logged_in' => false,
    1608                         'block_self'        => false,
    1609                         'wrapper_class'     => 'blog-button visit',
    1610                         'link_href'         => bp_get_blog_permalink(),
    1611                         'link_class'        => 'blog-button visit',
    1612                         'link_text'         => __( 'Visit Site', 'buddypress' ),
    1613                         'link_title'        => __( 'Visit Site', 'buddypress' ),
    1614                 );
    1615 
    1616                 $button = wp_parse_args( $args, $defaults );
    1617 
    1618                 /**
    1619                  * Filters the button for visiting a blog in a loop.
    1620                  *
    1621                  * @since 1.2.10
    1622                  *
    1623                  * @param array $button Array of arguments to be used for the button to visit a blog.
    1624                  */
    1625                 return bp_get_button( apply_filters( 'bp_get_blogs_visit_blog_button', $button ) );
    1626         }
    1627 
    1628 /** Stats **********************************************************************/
    1629 
    1630 /**
    1631  * Display the number of blogs in user's profile.
    1632  *
    1633  * @since 2.0.0
    1634  *
    1635  * @uses bp_blogs_admin_get_profile_stats() to get the stats.
    1636  *
    1637  * @param array|string $args Before|after|user_id.
    1638  */
    1639 function bp_blogs_profile_stats( $args = '' ) {
    1640         echo bp_blogs_get_profile_stats( $args );
    1641 }
    1642 add_action( 'bp_members_admin_user_stats', 'bp_blogs_profile_stats', 9, 1 );
    1643 
    1644 /**
    1645  * Return the number of blogs in user's profile.
    1646  *
    1647  * @since 2.0.0
    1648  *
    1649  * @param array|string $args Before|after|user_id.
    1650  * @return string HTML for stats output.
    1651  */
    1652 function bp_blogs_get_profile_stats( $args = '' ) {
    1653 
    1654         // Parse the args.
    1655         $r = bp_parse_args( $args, array(
    1656                 'before'  => '<li class="bp-blogs-profile-stats">',
    1657                 'after'   => '</li>',
    1658                 'user_id' => bp_displayed_user_id(),
    1659                 'blogs'   => 0,
    1660                 'output'  => ''
    1661         ), 'blogs_get_profile_stats' );
    1662 
    1663         // Allow completely overloaded output.
    1664         if ( is_multisite() && empty( $r['output'] ) ) {
    1665 
    1666                 // Only proceed if a user ID was passed.
    1667                 if ( ! empty( $r['user_id'] ) ) {
    1668 
    1669                         // Get the user's blogs.
    1670                         if ( empty( $r['blogs'] ) ) {
    1671                                 $r['blogs'] = absint( bp_blogs_total_blogs_for_user( $r['user_id'] ) );
    1672                         }
    1673 
    1674                         // If blogs exist, show some formatted output.
    1675                         $r['output'] = $r['before'] . sprintf( _n( '%s site', '%s sites', $r['blogs'], 'buddypress' ), '<strong>' . $r['blogs'] . '</strong>' ) . $r['after'];
    1676                 }
    1677         }
    1678 
    1679         /**
    1680          * Filters the number of blogs in user's profile.
    1681          *
    1682          * @since 2.0.0
    1683          *
    1684          * @param string $value Output determined for the profile stats.
    1685          * @param array  $r     Array of arguments used for default output if none provided.
    1686          */
    1687         return apply_filters( 'bp_blogs_get_profile_stats', $r['output'], $r );
    1688 }
  • trunk/src/bp-blogs/classes/class-bp-blogs-theme-compat.php

    r10515 r10517  
    11<?php
    22/**
    3  * BuddyPress Blogs Screens.
     3 * BuddyPress Blogs Theme Compatibility.
    44 *
    55 * @package BuddyPress
     
    1010// Exit if accessed directly.
    1111defined( 'ABSPATH' ) || exit;
    12 
    13 /**
    14  * Load the "My Blogs" screen.
    15  */
    16 function bp_blogs_screen_my_blogs() {
    17         if ( !is_multisite() )
    18                 return false;
    19 
    20         /**
    21          * Fires right before the loading of the My Blogs screen template file.
    22          *
    23          * @since 1.0.0
    24          */
    25         do_action( 'bp_blogs_screen_my_blogs' );
    26 
    27         bp_core_load_template( apply_filters( 'bp_blogs_template_my_blogs', 'members/single/home' ) );
    28 }
    29 
    30 /**
    31  * Load the "Create a Blog" screen.
    32  */
    33 function bp_blogs_screen_create_a_blog() {
    34 
    35         if ( !is_multisite() ||  !bp_is_blogs_component() || !bp_is_current_action( 'create' ) )
    36                 return false;
    37 
    38         if ( !is_user_logged_in() || !bp_blog_signup_enabled() )
    39                 return false;
    40 
    41         /**
    42          * Fires right before the loading of the Create A Blog screen template file.
    43          *
    44          * @since 1.0.0
    45          */
    46         do_action( 'bp_blogs_screen_create_a_blog' );
    47 
    48         bp_core_load_template( apply_filters( 'bp_blogs_template_create_a_blog', 'blogs/create' ) );
    49 }
    50 add_action( 'bp_screens', 'bp_blogs_screen_create_a_blog', 3 );
    51 
    52 /**
    53  * Load the top-level Blogs directory.
    54  */
    55 function bp_blogs_screen_index() {
    56         if ( bp_is_blogs_directory() ) {
    57                 bp_update_is_directory( true, 'blogs' );
    58 
    59                 /**
    60                  * Fires right before the loading of the top-level Blogs screen template file.
    61                  *
    62                  * @since 1.0.0
    63                  */
    64                 do_action( 'bp_blogs_screen_index' );
    65 
    66                 bp_core_load_template( apply_filters( 'bp_blogs_screen_index', 'blogs/index' ) );
    67         }
    68 }
    69 add_action( 'bp_screens', 'bp_blogs_screen_index', 2 );
    70 
    71 /** Theme Compatibility *******************************************************/
    7212
    7313/**
     
    260200        }
    261201}
    262 new BP_Blogs_Theme_Compat();
Note: See TracChangeset for help on using the changeset viewer.