[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * BuddyPress Messages Loader. 4 * 5 * A private messages component, for users to send messages to each other. 6 * 7 * @package BuddyPress 8 * @subpackage MessagesClasses 9 * @since 1.5.0 10 */ 11 12 // Exit if accessed directly. 13 defined( 'ABSPATH' ) || exit; 14 15 /** 16 * Implementation of BP_Component for the Messages component. 17 * 18 * @since 1.5.0 19 */ 20 class BP_Messages_Component extends BP_Component { 21 22 /** 23 * If this is true, the Message autocomplete will return friends only, unless 24 * this is set to false, in which any matching users will be returned. 25 * 26 * @since 1.5.0 27 * @var bool 28 */ 29 public $autocomplete_all; 30 31 /** 32 * Start the messages component creation process. 33 * 34 * @since 1.5.0 35 */ 36 public function __construct() { 37 parent::start( 38 'messages', 39 __( 'Private Messages', 'buddypress' ), 40 buddypress()->plugin_dir, 41 array( 42 'adminbar_myaccount_order' => 50, 43 'features' => array( 'star' ) 44 ) 45 ); 46 } 47 48 /** 49 * Include files. 50 * 51 * @since 1.5.0 52 * 53 * @param array $includes See {BP_Component::includes()} for details. 54 */ 55 public function includes( $includes = array() ) { 56 57 // Files to include. 58 $includes = array( 59 'cssjs', 60 'cache', 61 'filters', 62 'template', 63 'functions', 64 'widgets', 65 'blocks', 66 ); 67 68 // Conditional includes. 69 if ( bp_is_active( 'notifications' ) ) { 70 $includes[] = 'notifications'; 71 } 72 if ( bp_is_active( $this->id, 'star' ) ) { 73 $includes[] = 'star'; 74 } 75 if ( is_admin() ) { 76 $includes[] = 'admin'; 77 } 78 79 parent::includes( $includes ); 80 } 81 82 /** 83 * Late includes method. 84 * 85 * Only load up certain code when on specific pages. 86 * 87 * @since 3.0.0 88 */ 89 public function late_includes() { 90 // Bail if PHPUnit is running. 91 if ( defined( 'BP_TESTS_DIR' ) ) { 92 return; 93 } 94 95 if ( bp_is_messages_component() ) { 96 // Authenticated actions. 97 if ( is_user_logged_in() && 98 in_array( bp_current_action(), array( 'compose', 'notices', 'view' ), true ) 99 ) { 100 require $this->path . 'bp-messages/actions/' . bp_current_action() . '.php'; 101 } 102 103 // Authenticated action variables. 104 if ( is_user_logged_in() && bp_action_variable( 0 ) && 105 in_array( bp_action_variable( 0 ), array( 'delete', 'read', 'unread', 'bulk-manage', 'bulk-delete', 'exit' ), true ) 106 ) { 107 require $this->path . 'bp-messages/actions/' . bp_action_variable( 0 ) . '.php'; 108 } 109 110 // Authenticated actions - Star. 111 if ( is_user_logged_in() && bp_is_active( $this->id, 'star' ) ) { 112 // Single action. 113 if ( in_array( bp_current_action(), array( 'star', 'unstar' ), true ) ) { 114 require $this->path . 'bp-messages/actions/star.php'; 115 } 116 117 // Bulk-manage. 118 if ( bp_is_action_variable( 'bulk-manage' ) ) { 119 require $this->path . 'bp-messages/actions/bulk-manage-star.php'; 120 } 121 } 122 123 // Screens - User profile integration. 124 if ( bp_is_user() ) { 125 require $this->path . 'bp-messages/screens/inbox.php'; 126 127 /* 128 * Nav items. 129 * 130 * 'view' is not a registered nav item, but we add a screen handler manually. 131 */ 132 if ( bp_is_user_messages() && in_array( bp_current_action(), array( 'sentbox', 'compose', 'notices', 'view' ), true ) ) { 133 require $this->path . 'bp-messages/screens/' . bp_current_action() . '.php'; 134 } 135 136 // Nav item - Starred. 137 if ( bp_is_active( $this->id, 'star' ) && bp_is_current_action( bp_get_messages_starred_slug() ) ) { 138 require $this->path . 'bp-messages/screens/starred.php'; 139 } 140 } 141 } 142 } 143 144 /** 145 * Set up globals for the Messages component. 146 * 147 * The BP_MESSAGES_SLUG constant is deprecated, and only used here for 148 * backwards compatibility. 149 * 150 * @since 1.5.0 151 * 152 * @param array $args Not used. 153 */ 154 public function setup_globals( $args = array() ) { 155 $bp = buddypress(); 156 157 // Define a slug, if necessary. 158 if ( ! defined( 'BP_MESSAGES_SLUG' ) ) { 159 define( 'BP_MESSAGES_SLUG', $this->id ); 160 } 161 162 // Global tables for messaging component. 163 $global_tables = array( 164 'table_name_notices' => $bp->table_prefix . 'bp_messages_notices', 165 'table_name_messages' => $bp->table_prefix . 'bp_messages_messages', 166 'table_name_recipients' => $bp->table_prefix . 'bp_messages_recipients', 167 'table_name_meta' => $bp->table_prefix . 'bp_messages_meta', 168 ); 169 170 // Metadata tables for messaging component. 171 $meta_tables = array( 172 'message' => $bp->table_prefix . 'bp_messages_meta', 173 ); 174 175 $this->autocomplete_all = defined( 'BP_MESSAGES_AUTOCOMPLETE_ALL' ); 176 177 // All globals for messaging component. 178 // Note that global_tables is included in this array. 179 parent::setup_globals( array( 180 'slug' => BP_MESSAGES_SLUG, 181 'has_directory' => false, 182 'notification_callback' => 'messages_format_notifications', 183 'search_string' => __( 'Search Messages...', 'buddypress' ), 184 'global_tables' => $global_tables, 185 'meta_tables' => $meta_tables 186 ) ); 187 } 188 189 /** 190 * Set up navigation for user pages. 191 * 192 * @param array $main_nav See {BP_Component::setup_nav()} for details. 193 * @param array $sub_nav See {BP_Component::setup_nav()} for details. 194 */ 195 public function setup_nav( $main_nav = array(), $sub_nav = array() ) { 196 197 // Determine user to use. 198 if ( bp_displayed_user_domain() ) { 199 $user_domain = bp_displayed_user_domain(); 200 } elseif ( bp_loggedin_user_domain() ) { 201 $user_domain = bp_loggedin_user_domain(); 202 } else { 203 return; 204 } 205 206 $access = bp_core_can_edit_settings(); 207 $slug = bp_get_messages_slug(); 208 $messages_link = trailingslashit( $user_domain . $slug ); 209 210 // Only grab count if we're on a user page and current user has access. 211 if ( bp_is_user() && bp_user_has_access() ) { 212 $count = bp_get_total_unread_messages_count( bp_displayed_user_id() ); 213 $class = ( 0 === $count ) ? 'no-count' : 'count'; 214 $nav_name = sprintf( 215 /* translators: %s: Unread message count for the current user */ 216 __( 'Messages %s', 'buddypress' ), 217 sprintf( 218 '<span class="%s">%s</span>', 219 esc_attr( $class ), 220 bp_core_number_format( $count ) 221 ) 222 ); 223 } else { 224 $nav_name = __( 'Messages', 'buddypress' ); 225 } 226 227 // Add 'Messages' to the main navigation. 228 $main_nav = array( 229 'name' => $nav_name, 230 'slug' => $slug, 231 'position' => 50, 232 'show_for_displayed_user' => $access, 233 'screen_function' => 'messages_screen_inbox', 234 'default_subnav_slug' => 'inbox', 235 'item_css_id' => $this->id 236 ); 237 238 // Add the subnav items to the profile. 239 $sub_nav[] = array( 240 'name' => __( 'Inbox', 'buddypress' ), 241 'slug' => 'inbox', 242 'parent_url' => $messages_link, 243 'parent_slug' => $slug, 244 'screen_function' => 'messages_screen_inbox', 245 'position' => 10, 246 'user_has_access' => $access 247 ); 248 249 if ( bp_is_active( $this->id, 'star' ) ) { 250 $sub_nav[] = array( 251 'name' => __( 'Starred', 'buddypress' ), 252 'slug' => bp_get_messages_starred_slug(), 253 'parent_url' => $messages_link, 254 'parent_slug' => $slug, 255 'screen_function' => 'bp_messages_star_screen', 256 'position' => 11, 257 'user_has_access' => $access 258 ); 259 } 260 261 $sub_nav[] = array( 262 'name' => __( 'Sent', 'buddypress' ), 263 'slug' => 'sentbox', 264 'parent_url' => $messages_link, 265 'parent_slug' => $slug, 266 'screen_function' => 'messages_screen_sentbox', 267 'position' => 20, 268 'user_has_access' => $access 269 ); 270 271 // Show "Compose" on the logged-in user's profile only. 272 $sub_nav[] = array( 273 'name' => __( 'Compose', 'buddypress' ), 274 'slug' => 'compose', 275 'parent_url' => $messages_link, 276 'parent_slug' => $slug, 277 'screen_function' => 'messages_screen_compose', 278 'position' => 30, 279 'user_has_access' => bp_is_my_profile(), 280 ); 281 282 // Show "Notices" to community admins only. 283 $sub_nav[] = array( 284 'name' => __( 'Notices', 'buddypress' ), 285 'slug' => 'notices', 286 'parent_url' => $messages_link, 287 'parent_slug' => $slug, 288 'screen_function' => 'messages_screen_notices', 289 'position' => 90, 290 'user_has_access' => bp_current_user_can( 'bp_moderate' ) 291 ); 292 293 parent::setup_nav( $main_nav, $sub_nav ); 294 } 295 296 /** 297 * Set up the Toolbar. 298 * 299 * @param array $wp_admin_nav See {BP_Component::setup_admin_bar()} for details. 300 */ 301 public function setup_admin_bar( $wp_admin_nav = array() ) { 302 303 // Menus for logged in user. 304 if ( is_user_logged_in() ) { 305 306 // Setup the logged in user variables. 307 $messages_link = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() ); 308 309 // Unread message count. 310 $count = messages_get_unread_count( bp_loggedin_user_id() ); 311 if ( !empty( $count ) ) { 312 $title = sprintf( 313 /* translators: %s: Unread message count for the current user */ 314 __( 'Messages %s', 'buddypress' ), 315 '<span class="count">' . bp_core_number_format( $count ) . '</span>' 316 ); 317 $inbox = sprintf( 318 /* translators: %s: Unread message count for the current user */ 319 __( 'Inbox %s', 'buddypress' ), 320 '<span class="count">' . bp_core_number_format( $count ) . '</span>' 321 ); 322 } else { 323 $title = __( 'Messages', 'buddypress' ); 324 $inbox = __( 'Inbox', 'buddypress' ); 325 } 326 327 // Add main Messages menu. 328 $wp_admin_nav[] = array( 329 'parent' => buddypress()->my_account_menu_id, 330 'id' => 'my-account-' . $this->id, 331 'title' => $title, 332 'href' => $messages_link 333 ); 334 335 // Inbox. 336 $wp_admin_nav[] = array( 337 'parent' => 'my-account-' . $this->id, 338 'id' => 'my-account-' . $this->id . '-inbox', 339 'title' => $inbox, 340 'href' => trailingslashit( $messages_link . 'inbox' ), 341 'position' => 10 342 ); 343 344 // Starred. 345 if ( bp_is_active( $this->id, 'star' ) ) { 346 $wp_admin_nav[] = array( 347 'parent' => 'my-account-' . $this->id, 348 'id' => 'my-account-' . $this->id . '-starred', 349 'title' => __( 'Starred', 'buddypress' ), 350 'href' => trailingslashit( $messages_link . bp_get_messages_starred_slug() ), 351 'position' => 11 352 ); 353 } 354 355 // Sent Messages. 356 $wp_admin_nav[] = array( 357 'parent' => 'my-account-' . $this->id, 358 'id' => 'my-account-' . $this->id . '-sentbox', 359 'title' => __( 'Sent', 'buddypress' ), 360 'href' => trailingslashit( $messages_link . 'sentbox' ), 361 'position' => 20 362 ); 363 364 // Compose Message. 365 $wp_admin_nav[] = array( 366 'parent' => 'my-account-' . $this->id, 367 'id' => 'my-account-' . $this->id . '-compose', 368 'title' => __( 'Compose', 'buddypress' ), 369 'href' => trailingslashit( $messages_link . 'compose' ), 370 'position' => 30 371 ); 372 373 // Site Wide Notices. 374 if ( bp_current_user_can( 'bp_moderate' ) ) { 375 $wp_admin_nav[] = array( 376 'parent' => 'my-account-' . $this->id, 377 'id' => 'my-account-' . $this->id . '-notices', 378 'title' => __( 'Site Notices', 'buddypress' ), 379 'href' => trailingslashit( $messages_link . 'notices' ), 380 'position' => 90 381 ); 382 } 383 } 384 385 parent::setup_admin_bar( $wp_admin_nav ); 386 } 387 388 /** 389 * Set up the title for pages and <title>. 390 */ 391 public function setup_title() { 392 393 if ( bp_is_messages_component() ) { 394 $bp = buddypress(); 395 396 if ( bp_is_my_profile() ) { 397 $bp->bp_options_title = __( 'My Messages', 'buddypress' ); 398 } else { 399 $bp->bp_options_avatar = bp_core_fetch_avatar( array( 400 'item_id' => bp_displayed_user_id(), 401 'type' => 'thumb', 402 /* translators: %s: member name */ 403 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_get_displayed_user_fullname() ) 404 ) ); 405 $bp->bp_options_title = bp_get_displayed_user_fullname(); 406 } 407 } 408 409 parent::setup_title(); 410 } 411 412 /** 413 * Setup cache groups 414 * 415 * @since 2.2.0 416 */ 417 public function setup_cache_groups() { 418 419 // Global groups. 420 wp_cache_add_global_groups( array( 421 'bp_messages', 422 'bp_messages_threads', 423 'bp_messages_unread_count', 424 'message_meta' 425 ) ); 426 427 parent::setup_cache_groups(); 428 } 429 430 /** 431 * Init the BP REST API. 432 * 433 * @since 5.0.0 434 * 435 * @param array $controllers Optional. See BP_Component::rest_api_init() for 436 * description. 437 */ 438 public function rest_api_init( $controllers = array() ) { 439 parent::rest_api_init( array( 'BP_REST_Messages_Endpoint' ) ); 440 } 441 442 /** 443 * Register the BP Messages Blocks. 444 * 445 * @since 9.0.0 446 * 447 * @param array $blocks Optional. See BP_Component::blocks_init() for 448 * description. 449 */ 450 public function blocks_init( $blocks = array() ) { 451 parent::blocks_init( 452 array( 453 'bp/sitewide-notices' => array( 454 'name' => 'bp/sitewide-notices', 455 'editor_script' => 'bp-sitewide-notices-block', 456 'editor_script_url' => plugins_url( 'js/blocks/sitewide-notices.js', dirname( __FILE__ ) ), 457 'editor_script_deps' => array( 458 'wp-blocks', 459 'wp-element', 460 'wp-components', 461 'wp-i18n', 462 'wp-block-editor', 463 'wp-server-side-render', 464 'bp-block-data', 465 ), 466 'style' => 'bp-sitewide-notices-block', 467 'style_url' => plugins_url( 'css/blocks/sitewide-notices.css', dirname( __FILE__ ) ), 468 'attributes' => array( 469 'title' => array( 470 'type' => 'string', 471 'default' => '', 472 ), 473 ), 474 'render_callback' => 'bp_messages_render_sitewide_notices_block', 475 ), 476 ) 477 ); 478 } 479 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Dec 22 01:00:54 2024 | Cross-referenced by PHPXref 0.7.1 |