[ Index ]

PHP Cross Reference of BuddyPress

title

Body

[close]

/src/bp-core/admin/ -> bp-core-admin-tools.php (source)

   1  <?php
   2  /**
   3   * BuddyPress Tools panel.
   4   *
   5   * @package BuddyPress
   6   * @subpackage Core
   7   * @since 2.0.0
   8   */
   9  
  10  // Exit if accessed directly.
  11  defined( 'ABSPATH' ) || exit;
  12  
  13  /**
  14   * Render the BuddyPress Tools page.
  15   *
  16   * @since 2.0.0
  17   */
  18  function bp_core_admin_tools() {
  19      bp_core_admin_tabbed_screen_header( __( 'BuddyPress tools', 'buddypress' ), __( 'Repair', 'buddypress' ), 'tools' );
  20      ?>
  21      <div class="buddypress-body">
  22  
  23          <p><?php esc_html_e( 'BuddyPress keeps track of various relationships between members, groups, and activity items.', 'buddypress' ); ?></p>
  24          <p><?php esc_html_e( 'Occasionally these relationships become out of sync, most often after an import, update, or migration.', 'buddypress' ); ?></p>
  25          <p><?php esc_html_e( 'Use the tools below to manually recalculate these relationships.', 'buddypress' ); ?>
  26          </p>
  27  
  28          <h2><?php esc_html_e( 'Select the operation to perform', 'buddypress' ); ?></h2>
  29  
  30          <form class="settings" method="post" action="">
  31  
  32              <fieldset>
  33                  <legend class="screen-reader-text"><?php esc_html_e( 'Repair tools', 'buddypress' ); ?></legend>
  34  
  35                  <?php foreach ( bp_admin_repair_list() as $item ) : ?>
  36                      <p>
  37                          <label for="<?php echo esc_attr( str_replace( '_', '-', $item[0] ) ); ?>">
  38                              <input type="radio" class="radio" name="bp-tools-run[]" id="<?php echo esc_attr( str_replace( '_', '-', $item[0] ) ); ?>" value="<?php echo esc_attr( $item[0] ); ?>" /> <?php echo esc_html( $item[1] ); ?>
  39                          </label>
  40                      </p>
  41                  <?php endforeach; ?>
  42  
  43                  <p class="submit">
  44                      <input class="button-primary" type="submit" name="bp-tools-submit" value="<?php esc_attr_e( 'Repair Items', 'buddypress' ); ?>" />
  45                      <?php wp_nonce_field( 'bp-do-counts' ); ?>
  46                  </p>
  47  
  48              </fieldset>
  49  
  50          </form>
  51  
  52      </div>
  53  
  54      <?php
  55  }
  56  
  57  /**
  58   * Handle the processing and feedback of the admin tools page.
  59   *
  60   * @since 2.0.0
  61   */
  62  function bp_admin_repair_handler() {
  63      if ( ! bp_is_post_request() || empty( $_POST['bp-tools-submit'] ) ) {
  64          return;
  65      }
  66  
  67      check_admin_referer( 'bp-do-counts' );
  68  
  69      // Bail if user cannot moderate.
  70      $capability = bp_core_do_network_admin() ? 'manage_network_options' : 'manage_options';
  71      if ( ! bp_current_user_can( $capability ) ) {
  72          return;
  73      }
  74  
  75      wp_cache_flush();
  76      $messages = array();
  77  
  78      foreach ( (array) bp_admin_repair_list() as $item ) {
  79          if ( isset( $item[2] ) && isset( $_POST['bp-tools-run'] ) && in_array( $item[0], (array) $_POST['bp-tools-run'], true ) && is_callable( $item[2] ) ) {
  80              $messages[] = call_user_func( $item[2] );
  81          }
  82      }
  83  
  84      if ( count( $messages ) ) {
  85          foreach ( $messages as $message ) {
  86              bp_admin_tools_feedback( $message[1] );
  87          }
  88      }
  89  }
  90  add_action( bp_core_admin_hook(), 'bp_admin_repair_handler' );
  91  
  92  /**
  93   * Get the array of the repair list.
  94   *
  95   * @return array
  96   */
  97  function bp_admin_repair_list() {
  98      $repair_list = array();
  99  
 100      // Members:
 101      // - member count
 102      // - last_activity migration (2.0).
 103      $repair_list[20] = array(
 104          'bp-total-member-count',
 105          __( 'Repair total members count.', 'buddypress' ),
 106          'bp_admin_repair_count_members',
 107      );
 108  
 109      $repair_list[25] = array(
 110          'bp-last-activity',
 111          __( 'Repair member "last activity" data.', 'buddypress' ),
 112          'bp_admin_repair_last_activity',
 113      );
 114  
 115      // Friends:
 116      // - user friend count.
 117      if ( bp_is_active( 'friends' ) ) {
 118          $repair_list[0] = array(
 119              'bp-user-friends',
 120              __( 'Repair total friends count for each member.', 'buddypress' ),
 121              'bp_admin_repair_friend_count',
 122          );
 123      }
 124  
 125      // Groups:
 126      // - user group count.
 127      if ( bp_is_active( 'groups' ) ) {
 128          $repair_list[10] = array(
 129              'bp-group-count',
 130              __( 'Repair total groups count for each member.', 'buddypress' ),
 131              'bp_admin_repair_group_count',
 132          );
 133      }
 134  
 135      // Blogs:
 136      // - user blog count.
 137      if ( bp_is_active( 'blogs' ) ) {
 138          $repair_list[90] = array(
 139              'bp-blog-records',
 140              __( 'Repopulate site tracking records.', 'buddypress' ),
 141              'bp_admin_repair_blog_records',
 142          );
 143  
 144          if ( is_multisite() && bp_is_active( 'blogs', 'site-icon' ) ) {
 145              $repair_list[91] = array(
 146                  'bp-blog-site-icons',
 147                  __( 'Repair site tracking site icons/blog avatars synchronization.', 'buddypress' ),
 148                  'bp_admin_repair_blog_site_icons',
 149              );
 150          }
 151      }
 152  
 153      // Emails:
 154      // - reinstall emails.
 155      $repair_list[100] = array(
 156          'bp-reinstall-emails',
 157          __( 'Reinstall emails (delete and restore from defaults).', 'buddypress' ),
 158          'bp_admin_reinstall_emails',
 159      );
 160  
 161      // Invitations:
 162      // - maybe create the database table and migrate any existing group invitations.
 163      $repair_list[110] = array(
 164          'bp-invitations-table',
 165          __( 'Create the database table for Invitations and migrate existing group invitations if needed.', 'buddypress' ),
 166          'bp_admin_invitations_table',
 167      );
 168  
 169      ksort( $repair_list );
 170  
 171      /**
 172       * Filters the array of the repair list.
 173       *
 174       * @since 2.0.0
 175       *
 176       * @param array $repair_list Array of values for the Repair list options.
 177       */
 178      return (array) apply_filters( 'bp_repair_list', $repair_list );
 179  }
 180  
 181  /**
 182   * Recalculate friend counts for each user.
 183   *
 184   * @since 2.0.0
 185   *
 186   * @return array
 187   */
 188  function bp_admin_repair_friend_count() {
 189      global $wpdb;
 190  
 191      if ( ! bp_is_active( 'friends' ) ) {
 192          return;
 193      }
 194  
 195      /* translators: %s: the result of the action performed by the repair tool */
 196      $statement = __( 'Counting the number of friends for each user&hellip; %s', 'buddypress' );
 197      $result    = __( 'Failed!', 'buddypress' );
 198  
 199      $sql_delete = "DELETE FROM {$wpdb->usermeta} WHERE meta_key IN ( 'total_friend_count' );";
 200      if ( is_wp_error( $wpdb->query( $sql_delete ) ) ) {
 201          return array( 1, sprintf( $statement, $result ) );
 202      }
 203  
 204      $bp = buddypress();
 205  
 206      // Walk through all users on the site.
 207      $total_users = $wpdb->get_row( "SELECT count(ID) as c FROM {$wpdb->users}" )->c;
 208  
 209      $updated = array();
 210      if ( $total_users > 0 ) {
 211          $per_query = 500;
 212          $offset = 0;
 213          while ( $offset < $total_users ) {
 214              // Only bother updating counts for users who actually have friendships.
 215              $friendships = $wpdb->get_results( $wpdb->prepare( "SELECT initiator_user_id, friend_user_id FROM {$bp->friends->table_name} WHERE is_confirmed = 1 AND ( ( initiator_user_id > %d AND initiator_user_id <= %d ) OR ( friend_user_id > %d AND friend_user_id <= %d ) )", $offset, $offset + $per_query, $offset, $offset + $per_query ) );
 216  
 217              // The previous query will turn up duplicates, so we
 218              // filter them here.
 219              foreach ( $friendships as $friendship ) {
 220                  if ( ! isset( $updated[ $friendship->initiator_user_id ] ) ) {
 221                      BP_Friends_Friendship::total_friend_count( $friendship->initiator_user_id );
 222                      $updated[ $friendship->initiator_user_id ] = 1;
 223                  }
 224  
 225                  if ( ! isset( $updated[ $friendship->friend_user_id ] ) ) {
 226                      BP_Friends_Friendship::total_friend_count( $friendship->friend_user_id );
 227                      $updated[ $friendship->friend_user_id ] = 1;
 228                  }
 229              }
 230  
 231              $offset += $per_query;
 232          }
 233      } else {
 234          return array( 2, sprintf( $statement, $result ) );
 235      }
 236  
 237      return array( 0, sprintf( $statement, __( 'Complete!', 'buddypress' ) ) );
 238  }
 239  
 240  /**
 241   * Recalculate group counts for each user.
 242   *
 243   * @since 2.0.0
 244   *
 245   * @return array
 246   */
 247  function bp_admin_repair_group_count() {
 248      global $wpdb;
 249  
 250      if ( ! bp_is_active( 'groups' ) ) {
 251          return;
 252      }
 253  
 254      /* translators: %s: the result of the action performed by the repair tool */
 255      $statement = __( 'Counting the number of groups for each user&hellip; %s', 'buddypress' );
 256      $result    = __( 'Failed!', 'buddypress' );
 257  
 258      $sql_delete = "DELETE FROM {$wpdb->usermeta} WHERE meta_key IN ( 'total_group_count' );";
 259      if ( is_wp_error( $wpdb->query( $sql_delete ) ) ) {
 260          return array( 1, sprintf( $statement, $result ) );
 261      }
 262  
 263      $bp = buddypress();
 264  
 265      // Walk through all users on the site.
 266      $total_users = $wpdb->get_row( "SELECT count(ID) as c FROM {$wpdb->users}" )->c;
 267  
 268      if ( $total_users > 0 ) {
 269          $per_query = 500;
 270          $offset = 0;
 271          while ( $offset < $total_users ) {
 272              // But only bother to update counts for users that have groups.
 273              $users = $wpdb->get_col( $wpdb->prepare( "SELECT user_id FROM {$bp->groups->table_name_members} WHERE is_confirmed = 1 AND is_banned = 0 AND user_id > %d AND user_id <= %d", $offset, $offset + $per_query ) );
 274  
 275              foreach ( $users as $user ) {
 276                  BP_Groups_Member::refresh_total_group_count_for_user( $user );
 277              }
 278  
 279              $offset += $per_query;
 280          }
 281      } else {
 282          return array( 2, sprintf( $statement, $result ) );
 283      }
 284  
 285      return array( 0, sprintf( $statement, __( 'Complete!', 'buddypress' ) ) );
 286  }
 287  
 288  /**
 289   * Recalculate user-to-blog relationships and useful blog meta data.
 290   *
 291   * @since 2.1.0
 292   *
 293   * @return array
 294   */
 295  function bp_admin_repair_blog_records() {
 296  
 297      /* translators: %s: the result of the action performed by the repair tool */
 298      $statement = __( 'Repopulating Blogs records&hellip; %s', 'buddypress' );
 299  
 300      // Default to failure text.
 301      $result    = __( 'Failed!',   'buddypress' );
 302  
 303      // Default to unrepaired.
 304      $repair    = false;
 305  
 306      // Run function if blogs component is active.
 307      if ( bp_is_active( 'blogs' ) ) {
 308          $repair = bp_blogs_record_existing_blogs();
 309      }
 310  
 311      // Setup success/fail messaging.
 312      if ( true === $repair ) {
 313          $result = __( 'Complete!', 'buddypress' );
 314      }
 315  
 316      // All done!
 317      return array( 0, sprintf( $statement, $result ) );
 318  }
 319  
 320  /**
 321   * Repair site icons/blog avatars synchronization.
 322   *
 323   * @since 7.0.0
 324   *
 325   * @return array
 326   */
 327  function bp_admin_repair_blog_site_icons() {
 328  
 329      /* translators: %s: the result of the action performed by the repair tool */
 330      $statement = __( 'Repairing site icons/blog avatars synchronization&hellip; %s', 'buddypress' );
 331  
 332      if ( ! is_multisite() ) {
 333          return array( 0, sprintf( $statement, __( 'Failed!', 'buddypress' ) ) );
 334       }
 335  
 336      // Run function if blogs component is active.
 337      if ( bp_is_active( 'blogs', 'site-icon' ) ) {
 338          $blog_ids = get_sites(
 339              array(
 340                  'fields'   => 'ids',
 341                  'archived' => 0,
 342                  'mature'   => 0,
 343                  'spam'     => 0,
 344                  'deleted'  => 0,
 345              )
 346          );
 347  
 348          $sizes = array(
 349              array(
 350                  'key'  => 'site_icon_url_full',
 351                  'size' => bp_core_avatar_full_width(),
 352              ),
 353              array(
 354                  'key'  => 'site_icon_url_thumb',
 355                  'size' => bp_core_avatar_thumb_width(),
 356              ),
 357          );
 358  
 359          foreach ( $blog_ids as $blog_id ) {
 360              $site_icon = 0;
 361  
 362              foreach ( $sizes as $size ) {
 363                  $site_icon = bp_blogs_get_site_icon_url( $blog_id, $size['size'] );
 364                  if ( ! $site_icon ) {
 365                      $site_icon = 0;
 366                  }
 367  
 368                  bp_blogs_update_blogmeta( $blog_id, $size['key'], $site_icon );
 369              }
 370          }
 371      }
 372  
 373      // All done!
 374      return array( 0, sprintf( $statement, __( 'Complete!', 'buddypress' ) ) );
 375  }
 376  
 377  /**
 378   * Recalculate the total number of active site members.
 379   *
 380   * @since 2.0.0
 381   */
 382  function bp_admin_repair_count_members() {
 383      /* translators: %s: the result of the action performed by the repair tool */
 384      $statement = __( 'Counting the number of active members on the site&hellip; %s', 'buddypress' );
 385      delete_transient( 'bp_active_member_count' );
 386      bp_core_get_active_member_count();
 387      return array( 0, sprintf( $statement, __( 'Complete!', 'buddypress' ) ) );
 388  }
 389  
 390  /**
 391   * Repair user last_activity data.
 392   *
 393   * Re-runs the migration from usermeta introduced in BP 2.0.
 394   *
 395   * @since 2.0.0
 396   */
 397  function bp_admin_repair_last_activity() {
 398      /* translators: %s: the result of the action performed by the repair tool */
 399      $statement = __( 'Determining last activity dates for each user&hellip; %s', 'buddypress' );
 400      bp_last_activity_migrate();
 401      return array( 0, sprintf( $statement, __( 'Complete!', 'buddypress' ) ) );
 402  }
 403  
 404  /**
 405   * Create the invitations database table if it does not exist.
 406   * Migrate outstanding group invitations if needed.
 407   *
 408   * @since 6.0.0
 409   *
 410   * @return array
 411   */
 412  function bp_admin_invitations_table() {
 413      global $wpdb;
 414  
 415      require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
 416      require_once( buddypress()->plugin_dir . '/bp-core/admin/bp-core-admin-schema.php' );
 417  
 418      /* translators: %s: the result of the action performed by the repair tool */
 419      $statement = __( 'Creating the Invitations database table if it does not exist&hellip; %s', 'buddypress' );
 420      $result    = __( 'Failed to create table!', 'buddypress' );
 421  
 422      bp_core_install_invitations();
 423  
 424      // Check for existence of invitations table.
 425      $table_name = BP_Invitation_Manager::get_table_name();
 426      $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) );
 427      if ( ! $wpdb->get_var( $query ) == $table_name ) {
 428          // Early return if table creation failed.
 429          return array( 2, sprintf( $statement, $result ) );
 430      } else {
 431          $result = __( 'Created invitations table!', 'buddypress' );
 432      }
 433  
 434      // Migrate group invitations if needed.
 435      if ( bp_is_active( 'groups' ) ) {
 436          $bp = buddypress();
 437  
 438          /* translators: %s: the result of the action performed by the repair tool */
 439          $migrate_statement = __( 'Migrating group invitations&hellip; %s', 'buddypress' );
 440          $migrate_result    = __( 'Failed to migrate invitations!', 'buddypress' );
 441  
 442          bp_groups_migrate_invitations();
 443  
 444          // Check that there are no outstanding group invites in the group_members table.
 445          $records = $wpdb->get_results( "SELECT id FROM {$bp->groups->table_name_members} WHERE is_confirmed = 0 AND is_banned = 0" );
 446          if ( empty( $records ) ) {
 447              $migrate_result = __( 'Migrated invitations!', 'buddypress' );
 448              return array( 0, sprintf( $statement . ' ' . $migrate_statement , $result, $migrate_result ) );
 449          } else {
 450              return array( 2, sprintf( $statement . ' ' . $migrate_statement , $result, $migrate_result ) );
 451          }
 452      }
 453  
 454      // Return a "create-only" success message.
 455      return array( 0, sprintf( $statement, $result ) );
 456  }
 457  
 458  /**
 459   * Assemble admin notices relating success/failure of repair processes.
 460   *
 461   * @since 2.0.0
 462   *
 463   * @param string      $message Feedback message.
 464   * @param string|bool $class   Unused.
 465   * @return false|Closure
 466   */
 467  function bp_admin_tools_feedback( $message, $class = false ) {
 468      if ( is_string( $message ) ) {
 469          $message = '<p>' . $message . '</p>';
 470          $class = $class ? $class : 'updated';
 471      } elseif ( is_wp_error( $message ) ) {
 472          $errors = $message->get_error_messages();
 473  
 474          switch ( count( $errors ) ) {
 475              case 0:
 476                  return false;
 477  
 478              case 1:
 479                  $message = '<p>' . $errors[0] . '</p>';
 480                  break;
 481  
 482              default:
 483                  $message = '<ul>' . "\n\t" . '<li>' . implode( '</li>' . "\n\t" . '<li>', $errors ) . '</li>' . "\n" . '</ul>';
 484                  break;
 485          }
 486  
 487          $class = $class ? $class : 'error';
 488      } else {
 489          return false;
 490      }
 491  
 492      $message = '<div id="message" class="' . esc_attr( $class ) . ' notice is-dismissible">' . $message . '</div>';
 493      $message = str_replace( "'", "\'", $message );
 494      $lambda  = function() use ( $message ) { echo $message; };
 495  
 496      add_action( bp_core_do_network_admin() ? 'network_admin_notices' : 'admin_notices', $lambda );
 497  
 498      return $lambda;
 499  }
 500  
 501  /**
 502   * Render the Available Tools page.
 503   *
 504   * We register this page on Network Admin as a top-level home for our
 505   * BuddyPress tools. This displays the default content.
 506   *
 507   * @since 2.0.0
 508   */
 509  function bp_core_admin_available_tools_page() {
 510      ?>
 511      <div class="wrap">
 512          <h1 class="wp-heading-inline"><?php esc_html_e( 'Tools', 'buddypress' ) ?></h1>
 513          <hr class="wp-header-end">
 514  
 515          <?php
 516  
 517          /**
 518           * Fires inside the markup used to display the Available Tools page.
 519           *
 520           * @since 2.0.0
 521           */
 522          do_action( 'bp_network_tool_box' ); ?>
 523  
 524      </div>
 525      <?php
 526  }
 527  
 528  /**
 529   * Render an introduction of BuddyPress tools on Available Tools page.
 530   *
 531   * @since 2.0.0
 532   */
 533  function bp_core_admin_available_tools_intro() {
 534      $query_arg = array(
 535          'page' => 'bp-tools'
 536      );
 537  
 538      $page = bp_core_do_network_admin() ? 'admin.php' : 'tools.php' ;
 539      $url  = add_query_arg( $query_arg, bp_get_admin_url( $page ) );
 540      ?>
 541      <div class="card tool-box bp-tools">
 542          <h2><?php esc_html_e( 'BuddyPress Tools', 'buddypress' ) ?></h2>
 543  
 544          <dl>
 545              <dt><?php esc_html_e( 'Repair Tools', 'buddypress' ) ?></dt>
 546              <dd>
 547                  <?php esc_html_e( 'BuddyPress keeps track of various relationships between users, groups, and activity items. Occasionally these relationships become out of sync, most often after an import, update, or migration.', 'buddypress' ); ?>
 548                  <?php
 549                  printf(
 550                      /* translators: %s: the link to the BuddyPress repair tools */
 551                      esc_html_x( 'Use the %s to repair these relationships.', 'buddypress tools intro', 'buddypress' ),
 552                      '<a href="' . esc_url( $url ) . '">' . esc_html__( 'BuddyPress Repair Tools', 'buddypress' ) . '</a>'
 553                  );
 554                  ?>
 555              </dd>
 556  
 557              <dt><?php esc_html_e( 'Manage Invitations', 'buddypress' ) ?></dt>
 558              <dd>
 559                  <?php esc_html_e( 'When enabled, BuddyPress allows your users to invite nonmembers to join your site.', 'buddypress' ); ?>
 560                  <?php
 561                  $url = add_query_arg( 'page', 'bp-members-invitations', bp_get_admin_url( $page ) );
 562                  printf(
 563                      /* translators: %s: the link to the BuddyPress Invitations management tool screen */
 564                      esc_html_x( 'Visit %s to manage your site&rsquo;s invitations.', 'buddypress invitations tool intro', 'buddypress' ),
 565                      '<a href="' . esc_url( $url ) . '">' . esc_html__( 'Invitations', 'buddypress' ) . '</a>'
 566                  );
 567                  ?>
 568              </dd>
 569  
 570              <dt><?php esc_html_e( 'Manage Opt-outs', 'buddypress' ) ?></dt>
 571              <dd>
 572                  <?php esc_html_e( 'BuddyPress stores opt-out requests from people who are not members of this site, but have been contacted via communication from this site, and wish to opt-out from future communication.', 'buddypress' ); ?>
 573                  <?php
 574                  $url = add_query_arg( 'page', 'bp-optouts', bp_get_admin_url( $page ) );
 575                  printf(
 576                      /* translators: %s: the link to the BuddyPress Nonmember Opt-outs management tool screen */
 577                      esc_html_x( 'Visit %s to manage your site&rsquo;s opt-out requests.', 'buddypress opt-outs intro', 'buddypress' ),
 578                      '<a href="' . esc_url( $url ) . '">' . esc_html__( 'Nonmember Opt-outs', 'buddypress' ) . '</a>'
 579                  );
 580                  ?>
 581              </dd>
 582          </dl>
 583      </div>
 584      <?php
 585  }
 586  
 587  /**
 588   * Delete emails and restore from defaults.
 589   *
 590   * @since 2.5.0
 591   *
 592   * @return array
 593   */
 594  function bp_admin_reinstall_emails() {
 595      $switched = false;
 596  
 597      // Switch to the root blog, where the email posts live.
 598      if ( ! bp_is_root_blog() ) {
 599          switch_to_blog( bp_get_root_blog_id() );
 600          bp_register_taxonomies();
 601  
 602          $switched = true;
 603      }
 604  
 605      $emails = get_posts( array(
 606          'fields'           => 'ids',
 607          'post_status'      => 'publish',
 608          'post_type'        => bp_get_email_post_type(),
 609          'posts_per_page'   => 200,
 610          'suppress_filters' => false,
 611      ) );
 612  
 613      if ( $emails ) {
 614          foreach ( $emails as $email_id ) {
 615              wp_trash_post( $email_id );
 616          }
 617      }
 618  
 619      // Make sure we have no orphaned email type terms.
 620      $email_types = get_terms( bp_get_email_tax_type(), array(
 621          'fields'                 => 'ids',
 622          'hide_empty'             => false,
 623          'update_term_meta_cache' => false,
 624      ) );
 625  
 626      if ( $email_types ) {
 627          foreach ( $email_types as $term_id ) {
 628              wp_delete_term( (int) $term_id, bp_get_email_tax_type() );
 629          }
 630      }
 631  
 632      require_once( buddypress()->plugin_dir . '/bp-core/admin/bp-core-admin-schema.php' );
 633      bp_core_install_emails();
 634  
 635      if ( $switched ) {
 636          restore_current_blog();
 637      }
 638  
 639      return array( 0, __( 'Emails have been successfully reinstalled.', 'buddypress' ) );
 640  }
 641  
 642  /**
 643   * Add notice on the "Tools > BuddyPress" page if more sites need recording.
 644   *
 645   * This notice only shows up in the network admin dashboard.
 646   *
 647   * @since 2.6.0
 648   */
 649  function bp_core_admin_notice_repopulate_blogs_resume() {
 650      $screen = get_current_screen();
 651      if ( 'tools_page_bp-tools-network' !== $screen->id ) {
 652          return;
 653      }
 654  
 655      if ( '' === bp_get_option( '_bp_record_blogs_offset' ) ) {
 656          return;
 657      }
 658  
 659      echo '<div class="error"><p>' . __( 'It looks like you have more sites to record. Resume recording by checking the "Repopulate site tracking records" option.', 'buddypress' ) . '</p></div>';
 660  }
 661  add_action( 'network_admin_notices', 'bp_core_admin_notice_repopulate_blogs_resume' );
 662  
 663  /**
 664   * Add BuddyPress debug info to the WordPress Site Health info screen.
 665   *
 666   * @since 5.0.0
 667   *
 668   * @param  array $debug_info The Site's debug info.
 669   * @return array             The Site's debug info, including the BuddyPress specific ones.
 670   */
 671  function bp_core_admin_debug_information( $debug_info = array() ) {
 672      global $wp_settings_fields;
 673      $active_components = array_intersect_key( bp_core_get_components(), buddypress()->active_components );
 674      $bp_settings       = array();
 675  
 676      foreach ( $wp_settings_fields['buddypress'] as $section => $settings ) {
 677          $prefix       = '';
 678          $component_id = str_replace( 'bp_', '', $section );
 679  
 680          if ( isset( $active_components[ $component_id ]['title'] ) ) {
 681              $prefix = $active_components[ $component_id ]['title'] .': ';
 682          }
 683  
 684          foreach( $settings as $bp_setting ) {
 685              $reverse = (
 686                  strpos( $bp_setting['id'], 'hide' ) !== false ||
 687                  strpos( $bp_setting['id'], 'restrict' ) !== false ||
 688                  strpos( $bp_setting['id'], 'disable' ) !== false
 689              );
 690  
 691              if ( ! isset( $bp_setting['id'] ) || '_bp_theme_package_id' === $bp_setting['id'] ) {
 692                  continue;
 693              }
 694  
 695              $bp_setting_value = bp_get_option( $bp_setting['id'] );
 696              if ( '0' === $bp_setting_value || '1' === $bp_setting_value ) {
 697                  if ( ( $reverse && '0' === $bp_setting_value ) || ( ! $reverse && '1' === $bp_setting_value ) ) {
 698                      $bp_setting_value = __( 'Yes', 'buddypress' );
 699                  } else {
 700                      $bp_setting_value = __( 'No', 'buddypress' );
 701                  }
 702              }
 703  
 704              // Make sure to show the setting is reversed when site info is copied to clipboard.
 705              $bp_settings_id = $bp_setting['id'];
 706              if ( $reverse ) {
 707                  $bp_settings_id = '! ' . $bp_settings_id;
 708              }
 709  
 710              $bp_settings[ $bp_settings_id ] = array(
 711                  'label' => $prefix . $bp_setting['title'],
 712                  'value' => $bp_setting_value,
 713              );
 714          }
 715      }
 716  
 717      $debug_info['buddypress'] = array(
 718          'label'  => __( 'BuddyPress', 'buddypress' ),
 719          'fields' => array_merge(
 720              array(
 721                  'version' => array(
 722                      'label' => __( 'Version', 'buddypress' ),
 723                      'value' => bp_get_version(),
 724                  ),
 725                  'active_components' => array(
 726                      'label' => __( 'Active components', 'buddypress' ),
 727                      'value' => implode( ', ', wp_list_pluck( $active_components, 'title' ) ),
 728                  ),
 729                  'template_pack' => array(
 730                      'label' => __( 'Active template pack', 'buddypress' ),
 731                      'value' => bp_get_theme_compat_name() . ' ' . bp_get_theme_compat_version(),
 732                  ),
 733              ),
 734              $bp_settings
 735          )
 736      );
 737  
 738      return $debug_info;
 739  }
 740  add_filter( 'debug_information', 'bp_core_admin_debug_information' );


Generated: Thu Apr 18 01:01:15 2024 Cross-referenced by PHPXref 0.7.1