[ Index ]

PHP Cross Reference of BuddyPress

title

Body

[close]

/src/bp-templates/bp-nouveau/includes/members/ -> functions.php (source)

   1  <?php
   2  /**
   3   * Members functions
   4   *
   5   * @since 3.0.0
   6   * @version 10.0.0
   7   */
   8  
   9  // Exit if accessed directly.
  10  defined( 'ABSPATH' ) || exit;
  11  
  12  /**
  13   * Register Scripts for the Members component
  14   *
  15   * @since 8.0.0
  16   *
  17   * @param array $scripts Optional. The array of scripts to register.
  18   * @return array The same array with the specific members scripts.
  19   */
  20  function bp_nouveau_members_register_scripts( $scripts = array() ) {
  21      if ( ! isset( $scripts['bp-nouveau'] ) || ! bp_get_members_invitations_allowed() ) {
  22          return $scripts;
  23      }
  24  
  25      return array_merge( $scripts, array(
  26          'bp-nouveau-member-invites' => array(
  27              'file'         => 'js/buddypress-member-invites%s.js',
  28              'dependencies' => array(),
  29              'footer'       => true,
  30          ),
  31      ) );
  32  }
  33  
  34  /**
  35   * Enqueue the members scripts
  36   *
  37   * @since 3.0.0
  38   */
  39  function bp_nouveau_members_enqueue_scripts() {
  40      // Neutralize Ajax when using BuddyPress Groups & member widgets on default front page
  41      if ( bp_is_user_front() && bp_nouveau_get_appearance_settings( 'user_front_page' ) ) {
  42          wp_add_inline_style(
  43              'bp-nouveau',
  44              '#member-front-widgets #groups-list-options,
  45              #member-front-widgets #members-list-options,
  46              #member-front-widgets #friends-list-options {
  47                  display: none;
  48              }'
  49          );
  50      }
  51  
  52      if ( bp_is_user_members_invitations_list() ) {
  53          wp_enqueue_script( 'bp-nouveau-member-invites' );
  54      }
  55  }
  56  
  57  /**
  58   * Get the nav items for the Members directory
  59   *
  60   * @since 3.0.0
  61   *
  62   * @return array An associative array of nav items.
  63   */
  64  function bp_nouveau_get_members_directory_nav_items() {
  65      $nav_items = array();
  66  
  67      $nav_items['all'] = array(
  68          'component' => 'members',
  69          'slug'      => 'all', // slug is used because BP_Core_Nav requires it, but it's the scope
  70          'li_class'  => array(),
  71          'link'      => bp_get_members_directory_permalink(),
  72          'text'      => __( 'All Members', 'buddypress' ),
  73          'count'     => bp_get_total_member_count(),
  74          'position'  => 5,
  75      );
  76  
  77      if ( is_user_logged_in() ) {
  78          // If friends component is active and the user has friends
  79          if ( bp_is_active( 'friends' ) && bp_get_total_friend_count( bp_loggedin_user_id() ) ) {
  80              $nav_items['personal'] = array(
  81                  'component' => 'members',
  82                  'slug'      => 'personal', // slug is used because BP_Core_Nav requires it, but it's the scope
  83                  'li_class'  => array(),
  84                  'link'      => bp_loggedin_user_domain() . bp_nouveau_get_component_slug( 'friends' ) . '/my-friends/',
  85                  'text'      => __( 'My Friends', 'buddypress' ),
  86                  'count'     => bp_get_total_friend_count( bp_loggedin_user_id() ),
  87                  'position'  => 15,
  88              );
  89          }
  90      }
  91  
  92      // Check for the deprecated hook :
  93      $extra_nav_items = bp_nouveau_parse_hooked_dir_nav( 'bp_members_directory_member_types', 'members', 20 );
  94      if ( ! empty( $extra_nav_items ) ) {
  95          $nav_items = array_merge( $nav_items, $extra_nav_items );
  96      }
  97  
  98      /**
  99       * Use this filter to introduce your custom nav items for the members directory.
 100       *
 101       * @since 3.0.0
 102       *
 103       * @param array $nav_items The list of the members directory nav items.
 104       */
 105      return apply_filters( 'bp_nouveau_get_members_directory_nav_items', $nav_items );
 106  }
 107  
 108  /**
 109   * Get Dropdown filters for the members component
 110   *
 111   * @since 3.0.0
 112   *
 113   * @param string $context Optional.
 114   *
 115   * @return array the filters
 116   */
 117  function bp_nouveau_get_members_filters( $context = '' ) {
 118      if ( 'group' !== $context ) {
 119          $filters = array(
 120              'active' => __( 'Last Active', 'buddypress' ),
 121              'newest' => __( 'Newest Registered', 'buddypress' ),
 122          );
 123  
 124          if ( bp_is_active( 'xprofile' ) ) {
 125              $filters['alphabetical'] = __( 'Alphabetical', 'buddypress' );
 126          }
 127  
 128          $action = 'bp_members_directory_order_options';
 129  
 130          if ( 'friends' === $context ) {
 131              $action = 'bp_member_friends_order_options';
 132          }
 133      } else {
 134          $filters = array(
 135              'last_joined'  => __( 'Newest', 'buddypress' ),
 136              'first_joined' => __( 'Oldest', 'buddypress' ),
 137          );
 138  
 139          if ( bp_is_active( 'activity' ) ) {
 140              $filters['group_activity'] = __( 'Group Activity', 'buddypress' );
 141          }
 142  
 143          $filters['alphabetical'] = __( 'Alphabetical', 'buddypress' );
 144          $action                  = 'bp_groups_members_order_options';
 145      }
 146  
 147      /**
 148       * Recommended, filter here instead of adding an action to 'bp_members_directory_order_options'
 149       *
 150       * @since 3.0.0
 151       *
 152       * @param array  the members filters.
 153       * @param string the context.
 154       */
 155      $filters = apply_filters( 'bp_nouveau_get_members_filters', $filters, $context );
 156  
 157      return bp_nouveau_parse_hooked_options( $action, $filters );
 158  }
 159  
 160  /**
 161   * Catch the arguments for buttons
 162   *
 163   * @since 3.0.0
 164   *
 165   * @param array $buttons The arguments of the button that BuddyPress is about to create.
 166   *
 167   * @return array An empty array to stop the button creation process.
 168   */
 169  function bp_nouveau_members_catch_button_args( $button = array() ) {
 170      /*
 171       * Globalize the arguments so that we can use it
 172       * in bp_nouveau_get_member_header_buttons().
 173       */
 174      bp_nouveau()->members->button_args = $button;
 175  
 176      // return an empty array to stop the button creation process
 177      return array();
 178  }
 179  
 180  /**
 181   * Catch the content hooked to the do_action hooks in single member header
 182   * and in the members loop.
 183   *
 184   * @since 3.0.0
 185   * @since 6.0.0 Replace wrongly positioned `bp_directory_members_item`
 186   *              with `bp_directory_members_item_meta`
 187   *
 188   * @return string|false HTML Output if hooked. False otherwise.
 189   */
 190  function bp_nouveau_get_hooked_member_meta() {
 191      ob_start();
 192  
 193      if ( ! empty( $GLOBALS['members_template'] ) ) {
 194          /**
 195           * Fires inside the display of metas in the directory member item.
 196           *
 197           * @since 6.0.0
 198           */
 199          do_action( 'bp_directory_members_item_meta' );
 200  
 201      // It's the user's header
 202      } else {
 203          /**
 204           * Fires after the group header actions section.
 205           *
 206           * If you'd like to show specific profile fields here use:
 207           * bp_member_profile_data( 'field=About Me' ); -- Pass the name of the field
 208           *
 209           * @since 1.2.0
 210           */
 211          do_action( 'bp_profile_header_meta' );
 212      }
 213  
 214      $output = ob_get_clean();
 215  
 216      if ( ! empty( $output ) ) {
 217          return $output;
 218      }
 219  
 220      return false;
 221  }
 222  
 223  /**
 224   * Add the default user front template to the front template hierarchy
 225   *
 226   * @since 3.0.0
 227   *
 228   * @param array $templates The list of templates for the front.php template part.
 229   *
 230   * @return array The same list with the default front template if needed.
 231   */
 232  function bp_nouveau_member_reset_front_template( $templates = array() ) {
 233      $use_default_front = bp_nouveau_get_appearance_settings( 'user_front_page' );
 234  
 235      // Setting the front template happens too early, so we need this!
 236      if ( is_customize_preview() ) {
 237          $use_default_front = bp_nouveau_get_temporary_setting( 'user_front_page', $use_default_front );
 238      }
 239  
 240      if ( ! empty( $use_default_front ) ) {
 241          array_push( $templates, 'members/single/default-front.php' );
 242      }
 243  
 244      /**
 245       * Filters the BuddyPress Nouveau template hierarchy after resetting front template for members.
 246       *
 247       * @since 3.0.0
 248       *
 249       * @param array $templates Array of templates.
 250       */
 251      return apply_filters( '_bp_nouveau_member_reset_front_template', $templates );
 252  }
 253  
 254  /**
 255   * Only locate global user's front templates
 256   *
 257   * @since 3.0.0
 258   *
 259   * @param array $templates The User's front template hierarchy.
 260   *
 261   * @return array Only the global front templates.
 262   */
 263  function bp_nouveau_member_restrict_user_front_templates( $templates = array() ) {
 264      return array_intersect( array(
 265          'members/single/front.php',
 266          'members/single/default-front.php',
 267      ), $templates );
 268  }
 269  
 270  /**
 271   * Locate a single member template into a specific hierarchy.
 272   *
 273   * @since 3.0.0
 274   *
 275   * @param string $template The template part to get (eg: activity, groups...).
 276   *
 277   * @return string The located template.
 278   */
 279  function bp_nouveau_member_locate_template_part( $template = '' ) {
 280      $displayed_user = bp_get_displayed_user();
 281      $bp_nouveau     = bp_nouveau();
 282  
 283      if ( ! $template || empty( $displayed_user->id ) ) {
 284          return '';
 285      }
 286  
 287      // Use a global to avoid requesting the hierarchy for each template
 288      if ( ! isset( $bp_nouveau->members->displayed_user_hierarchy ) ) {
 289          $bp_nouveau->members->displayed_user_hierarchy = array(
 290              'members/single/%s-id-' . (int) $displayed_user->id . '.php',
 291              'members/single/%s-nicename-' . sanitize_file_name( $displayed_user->userdata->user_nicename ) . '.php',
 292          );
 293  
 294          /*
 295           * Check for member types and add it to the hierarchy
 296           *
 297           * Make sure to register your member
 298           * type using the hook 'bp_register_member_types'
 299           */
 300          if ( bp_get_member_types() ) {
 301              $displayed_user_member_type = bp_get_member_type( $displayed_user->id );
 302              if ( ! $displayed_user_member_type ) {
 303                  $displayed_user_member_type = 'none';
 304              }
 305  
 306              $bp_nouveau->members->displayed_user_hierarchy[] = 'members/single/%s-member-type-' . sanitize_file_name( $displayed_user_member_type ) . '.php';
 307          }
 308  
 309          // And the regular one
 310          $bp_nouveau->members->displayed_user_hierarchy[] = 'members/single/%s.php';
 311      }
 312  
 313      $templates = array();
 314  
 315      // Loop in the hierarchy to fill it for the requested template part
 316      foreach ( $bp_nouveau->members->displayed_user_hierarchy as $part ) {
 317          $templates[] = sprintf( $part, $template );
 318      }
 319  
 320      /**
 321       * Filters the found template parts for the member template part locating functionality.
 322       *
 323       * @since 3.0.0
 324       *
 325       * @param array $templates Array of found templates.
 326       */
 327      return bp_locate_template( apply_filters( 'bp_nouveau_member_locate_template_part', $templates ), false, true );
 328  }
 329  
 330  /**
 331   * Load a single member template part
 332   *
 333   * @since 3.0.0
 334   *
 335   * @param string $template The template part to get (eg: activity, groups...).
 336   *
 337   * @return string HTML output.
 338   */
 339  function bp_nouveau_member_get_template_part( $template = '' ) {
 340      $located = bp_nouveau_member_locate_template_part( $template );
 341  
 342      if ( false !== $located ) {
 343          $slug = str_replace( '.php', '', $located );
 344          $name = null;
 345  
 346          /**
 347           * Let plugins adding an action to bp_get_template_part get it from here.
 348           *
 349           * @since 3.0.0
 350           *
 351           * @param string $slug Template part slug requested.
 352           * @param string $name Template part name requested.
 353           */
 354          do_action( 'get_template_part_' . $slug, $slug, $name );
 355  
 356          load_template( $located, true );
 357      }
 358  
 359      return $located;
 360  }
 361  
 362  /**
 363   * Display the User's WordPress bio info into the default front page?
 364   *
 365   * @since 3.0.0
 366   *
 367   * @return bool True to display. False otherwise.
 368   */
 369  function bp_nouveau_members_wp_bio_info() {
 370      $user_settings = bp_nouveau_get_appearance_settings();
 371  
 372      return ! empty( $user_settings['user_front_page'] ) && ! empty( $user_settings['user_front_bio'] );
 373  }
 374  
 375  /**
 376   * Are we inside the Current user's default front page sidebar?
 377   *
 378   * @since 3.0.0
 379   *
 380   * @return bool True if in the group's home sidebar. False otherwise.
 381   */
 382  function bp_nouveau_member_is_home_widgets() {
 383      return ( true === bp_nouveau()->members->is_user_home_sidebar );
 384  }
 385  
 386  /**
 387   * Filter the Latest activities Widget to only keep the one of displayed user
 388   *
 389   * @since 3.0.0
 390   *
 391   * @param array $args The Activities Template arguments.
 392   *
 393   * @return array The Activities Template arguments.
 394   */
 395  function bp_nouveau_member_activity_widget_overrides( $args = array() ) {
 396      return array_merge( $args, array(
 397          'user_id' => bp_displayed_user_id(),
 398      ) );
 399  }
 400  
 401  /**
 402   * Filter the Groups widget to only keep the groups the displayed user is a member of.
 403   *
 404   * @since 3.0.0
 405   *
 406   * @param array $args The Groups Template arguments.
 407   *
 408   * @return array The Groups Template arguments.
 409   */
 410  function bp_nouveau_member_groups_widget_overrides( $args = array() ) {
 411      return array_merge( $args, array(
 412          'user_id' => bp_displayed_user_id(),
 413      ) );
 414  }
 415  
 416  /**
 417   * Filter the Members widgets to only keep members of the displayed group.
 418   *
 419   * @since 3.0.0
 420   *
 421   * @param array $args The Members Template arguments.
 422   *
 423   * @return array The Members Template arguments.
 424   */
 425  function bp_nouveau_member_members_widget_overrides( $args = array() ) {
 426      // Do nothing for the friends widget
 427      if ( ! empty( $args['user_id'] ) && (int) $args['user_id'] === (int) bp_displayed_user_id() ) {
 428          return $args;
 429      }
 430  
 431      return array_merge( $args, array(
 432          'include' => bp_displayed_user_id(),
 433      ) );
 434  }
 435  
 436  /**
 437   * Init the Member's default front page filters as we're in the sidebar
 438   *
 439   * @since 3.0.0
 440   */
 441  function bp_nouveau_members_add_home_widget_filters() {
 442      add_filter( 'bp_nouveau_activity_widget_query', 'bp_nouveau_member_activity_widget_overrides', 10, 1 );
 443      add_filter( 'bp_before_has_groups_parse_args', 'bp_nouveau_member_groups_widget_overrides', 10, 1 );
 444      add_filter( 'bp_before_has_members_parse_args', 'bp_nouveau_member_members_widget_overrides', 10, 1 );
 445  
 446      /**
 447       * Fires after Nouveau adds its members home widget filters.
 448       *
 449       * @since 3.0.0
 450       */
 451      do_action( 'bp_nouveau_members_add_home_widget_filters' );
 452  }
 453  
 454  /**
 455   * Remove the Member's default front page filters as we're no more in the sidebar
 456   *
 457   * @since 3.0.0
 458   */
 459  function bp_nouveau_members_remove_home_widget_filters() {
 460      remove_filter( 'bp_nouveau_activity_widget_query', 'bp_nouveau_member_activity_widget_overrides', 10, 1 );
 461      remove_filter( 'bp_before_has_groups_parse_args', 'bp_nouveau_member_groups_widget_overrides', 10, 1 );
 462      remove_filter( 'bp_before_has_members_parse_args', 'bp_nouveau_member_members_widget_overrides', 10, 1 );
 463  
 464      /**
 465       * Fires after Nouveau removes its members home widget filters.
 466       *
 467       * @since 3.0.0
 468       */
 469      do_action( 'bp_nouveau_members_remove_home_widget_filters' );
 470  }
 471  
 472  /**
 473   * Get the WP Profile fields for all or a specific user
 474   *
 475   * @since 3.0.0
 476   *
 477   * @param WP_User $user The user object. Optional.
 478   *
 479   * @return array The list of WP Profile fields
 480   */
 481  function bp_nouveau_get_wp_profile_fields( $user = null ) {
 482      /**
 483       * Filters the contact methods to be included in the WP Profile fields for a specific user.
 484       *
 485       * Provide a chance for plugins to avoid showing the contact methods they're adding on front end.
 486       *
 487       * @since 3.0.0
 488       *
 489       * @param array   $value Array of user contact methods.
 490       * @param WP_User $user  WordPress user to get contact methods for.
 491       */
 492      $contact_methods = (array) apply_filters( 'bp_nouveau_get_wp_profile_field', wp_get_user_contact_methods( $user ), $user );
 493  
 494      $wp_fields = array(
 495          'display_name'     => __( 'Name', 'buddypress' ),
 496          'user_description' => __( 'About Me', 'buddypress' ),
 497          'user_url'         => __( 'Website', 'buddypress' ),
 498      );
 499  
 500      return array_merge( $wp_fields, $contact_methods );
 501  }
 502  
 503  /**
 504   * Build the Member's nav for the our customizer control.
 505   *
 506   * @since 3.0.0
 507   *
 508   * @return array The Members single item primary nav ordered.
 509   */
 510  function bp_nouveau_member_customizer_nav() {
 511      add_filter( '_bp_nouveau_member_reset_front_template', 'bp_nouveau_member_restrict_user_front_templates', 10, 1 );
 512  
 513      if ( bp_displayed_user_get_front_template( buddypress()->loggedin_user ) ) {
 514          buddypress()->members->nav->add_nav(
 515              array(
 516                  'name'     => _x( 'Home', 'Member Home page', 'buddypress' ),
 517                  'slug'     => 'front',
 518                  'position' => 5,
 519              )
 520          );
 521      }
 522  
 523      remove_filter( '_bp_nouveau_member_reset_front_template', 'bp_nouveau_member_restrict_user_front_templates', 10, 1 );
 524  
 525      $nav = buddypress()->members->nav;
 526  
 527      // Eventually reset the order.
 528      bp_nouveau_set_nav_item_order( $nav, bp_nouveau_get_appearance_settings( 'user_nav_order' ) );
 529  
 530      return $nav->get_primary();
 531  }
 532  
 533  /**
 534   * Includes additional information about the Members loop Ajax response.
 535   *
 536   * @since 10.0.0
 537   *
 538   * @param array $additional_info An associative array with additional information to include in the Ajax response.
 539   * @param array $args            The Ajax query arguments.
 540   * @return array                 Additional information about the members loop.
 541   */
 542  function bp_nouveau_members_loop_additional_info( $additional_info = array(), $args = array() ) {
 543      if ( ! isset( $GLOBALS['members_template'] ) || ! $GLOBALS['members_template'] ) {
 544          return $additional_info;
 545      }
 546  
 547      $members_template = $GLOBALS['members_template'];
 548  
 549      if ( isset( $members_template->member_count ) && 'all' === $args['scope'] ) {
 550          $additional_info['totalItems'] = bp_core_number_format( $members_template->member_count );
 551          $additional_info['navLabel']   = esc_html__( 'All Members', 'buddypress' );
 552  
 553          $nav_labels = array(
 554              'active' => esc_html__( 'Active Members', 'buddypress' ),
 555              'newest' => esc_html__( 'Newest Members', 'buddypress' ),
 556          );
 557  
 558          if ( isset( $nav_labels[ $args['filter'] ] ) ) {
 559              $additional_info['navLabel'] = $nav_labels[ $args['filter'] ];
 560          }
 561      }
 562  
 563      return $additional_info;
 564  }
 565  add_filter( 'bp_nouveau_members_ajax_object_template_response', 'bp_nouveau_members_loop_additional_info', 10, 2 );


Generated: Fri Dec 6 01:00:58 2024 Cross-referenced by PHPXref 0.7.1