[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Signups Management class. 4 * 5 * @package BuddyPress 6 * @subpackage coreClasses 7 * @since 2.0.0 8 */ 9 10 /** 11 * Class used to handle Signups. 12 * 13 * @since 2.0.0 14 */ 15 class BP_Signup { 16 17 /** 18 * ID of the signup which the object relates to. 19 * 20 * @since 2.0.0 21 * @var integer 22 */ 23 public $id; 24 25 /** 26 * The URL to the full size of the avatar for the user. 27 * 28 * @since 2.0.0 29 * @var string 30 */ 31 public $avatar; 32 33 /** 34 * The username for the user. 35 * 36 * @since 2.0.0 37 * @var string 38 */ 39 public $user_login; 40 41 /** 42 * The email for the user. 43 * 44 * @since 2.0.0 45 * @var string 46 */ 47 public $user_email; 48 49 /** 50 * The full name of the user. 51 * 52 * @since 2.0.0 53 * @var string 54 */ 55 public $user_name; 56 57 /** 58 * Metadata associated with the signup. 59 * 60 * @since 2.0.0 61 * @var array 62 */ 63 public $meta; 64 65 /** 66 * The registered date for the user. 67 * 68 * @since 2.0.0 69 * @var string 70 */ 71 public $registered; 72 73 /** 74 * The activation key for the user. 75 * 76 * @since 2.0.0 77 * @var string 78 */ 79 public $activation_key; 80 81 /** 82 * The activated date for the user. 83 * 84 * @since 10.0.0 85 * @var string 86 */ 87 public $activated; 88 89 /** 90 * Whether the user account is activated or not. 91 * 92 * @since 10.0.0 93 * @var bool 94 */ 95 public $active; 96 97 /** 98 * The date that the last activation email was sent. 99 * 100 * @since 10.0.0 101 * @var string 102 */ 103 public $date_sent; 104 105 /** 106 * Was the last activation email sent in the last 24 hours? 107 * 108 * @since 10.0.0 109 * @var bool 110 */ 111 public $recently_sent; 112 113 /** 114 * The number of activation emails sent to this user. 115 * 116 * @since 10.0.0 117 * @var int 118 */ 119 public $count_sent; 120 121 /** 122 * The domain for the signup. 123 * 124 * @since 10.0.0 125 * @var string 126 */ 127 public $domain; 128 129 /** 130 * The path for the signup. 131 * 132 * @since 10.0.0 133 * @var string 134 */ 135 public $path; 136 137 /** 138 * The title for the signup. 139 * 140 * @since 10.0.0 141 * @var string 142 */ 143 public $title; 144 145 146 /** Public Methods *******************************************************/ 147 148 /** 149 * Class constructor. 150 * 151 * @since 2.0.0 152 * 153 * @param integer $signup_id The ID for the signup being queried. 154 */ 155 public function __construct( $signup_id = 0 ) { 156 if ( ! empty( $signup_id ) ) { 157 $this->id = $signup_id; 158 $this->populate(); 159 } 160 } 161 162 /** 163 * Populate the instantiated class with data based on the signup_id provided. 164 * 165 * @since 2.0.0 166 */ 167 public function populate() { 168 global $wpdb; 169 170 // Get BuddyPress. 171 $bp = buddypress(); 172 173 // Check cache for signup data. 174 $signup = wp_cache_get( $this->id, 'bp_signups' ); 175 176 // Cache missed, so query the DB. 177 if ( false === $signup ) { 178 $signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->members->table_name_signups} WHERE signup_id = %d", $this->id ) ); 179 180 wp_cache_set( $this->id, $signup, 'bp_signups' ); 181 } 182 183 // No signup found so set the ID and bail. 184 if ( empty( $signup ) || is_wp_error( $signup ) ) { 185 $this->id = 0; 186 return; 187 } 188 189 /* 190 * Add every db column to the object. 191 */ 192 $this->signup_id = $this->id; 193 $this->domain = $signup->domain; 194 $this->path = $signup->path; 195 $this->title = $signup->title; 196 $this->user_login = $signup->user_login; 197 $this->user_email = $signup->user_email; 198 $this->registered = $signup->registered; 199 $this->activated = $signup->activated; 200 $this->active = (bool) $signup->active; 201 $this->activation_key = $signup->activation_key; 202 $this->meta = maybe_unserialize( $signup->meta ); 203 204 // Add richness. 205 $this->avatar = get_avatar( $signup->user_email, 32 ); 206 $this->user_name = ! empty( $this->meta['field_1'] ) ? wp_unslash( $this->meta['field_1'] ) : ''; 207 208 // When was the activation email sent? 209 if ( isset( $this->meta['sent_date'] ) && '0000-00-00 00:00:00' !== $this->meta['sent_date'] ) { 210 $this->date_sent = $this->meta['sent_date']; 211 212 // Sent date defaults to date of registration. 213 } else { 214 $this->date_sent = $signup->registered; 215 } 216 217 // How many times has the activation email been sent? 218 if ( isset( $this->meta['count_sent'] ) ) { 219 $this->count_sent = absint( $this->meta['count_sent'] ); 220 } else { 221 /** 222 * Meta will not be set if this is a pre-10.0 signup. 223 * In this case, we assume that the count is 1. 224 */ 225 $this->count_sent = 1; 226 } 227 228 /** 229 * Calculate a diff between now & last time 230 * an activation link has been resent. 231 */ 232 $sent_at = mysql2date( 'U', $this->date_sent ); 233 $now = current_time( 'timestamp', true ); 234 $diff = $now - $sent_at; 235 236 /** 237 * Set a boolean to track whether an activation link 238 * was sent in the last day. 239 */ 240 $this->recently_sent = $this->count_sent && ( $diff < 1 * DAY_IN_SECONDS ); 241 242 } 243 244 /** Static Methods *******************************************************/ 245 246 /** 247 * Fetch signups based on parameters. 248 * 249 * @since 2.0.0 250 * @since 6.0.0 Added a list of allowed orderby parameters. 251 * 252 * @param array $args { 253 * The argument to retrieve desired signups. 254 * @type int $offset Offset amount. Default 0. 255 * @type int $number How many to fetch. Pass -1 to fetch all. Default 1. 256 * @type bool|string $usersearch Whether or not to search for a username. Default false. 257 * @type string $orderby Order By parameter. Possible values are `signup_id`, `login`, `email`, 258 * `registered`, `activated`. Default `signup_id`. 259 * @type string $order Order direction. Default 'DESC'. 260 * @type bool $include Whether or not to include more specific query params. 261 * @type string $activation_key Activation key to search for. If specified, all other 262 * parameters will be ignored. 263 * @type int|bool $active Pass 0 for inactive signups, 1 for active signups, 264 * and `false` to ignore. 265 * @type string $user_login Specific user login to return. 266 * @type string $fields Which fields to return. Specify 'ids' to fetch a list of signups IDs. 267 * Default: 'all' (return BP_Signup objects). 268 * } 269 * @return array { 270 * @type array $signups Located signups. (IDs only if `fields` is set to `ids`.) 271 * @type int $total Total number of signups matching params. 272 * } 273 */ 274 public static function get( $args = array() ) { 275 global $wpdb; 276 277 $bp = buddypress(); 278 $r = bp_parse_args( 279 $args, 280 array( 281 'offset' => 0, 282 'number' => 1, 283 'usersearch' => false, 284 'orderby' => 'signup_id', 285 'order' => 'DESC', 286 'include' => false, 287 'activation_key' => '', 288 'active' => 0, 289 'user_email' => '', 290 'user_login' => '', 291 'fields' => 'all', 292 ), 293 'bp_core_signups_get_args' 294 ); 295 296 // Make sure the orderby clause is allowed. 297 if ( ! in_array( $r['orderby'], array( 'login', 'email', 'registered', 'activated' ), true ) ) { 298 $r['orderby'] = 'signup_id'; 299 } 300 301 if ( 'login' === $r['orderby'] || 'email' === $r['orderby'] ) { 302 $r['orderby'] = 'user_' . $r['orderby']; 303 } 304 305 $r['orderby'] = sanitize_title( $r['orderby'] ); 306 307 $sql = array( 308 'select' => "SELECT DISTINCT signup_id", 309 'from' => "{$bp->members->table_name_signups}", 310 'where' => array(), 311 'orderby' => '', 312 'limit' => '', 313 ); 314 315 // Activation key trumps other parameters because it should be unique. 316 if ( ! empty( $r['activation_key'] ) ) { 317 $sql['where'][] = $wpdb->prepare( "activation_key = %s", $r['activation_key'] ); 318 319 // `Include` finds signups by ID. 320 } else if ( ! empty( $r['include'] ) ) { 321 322 $in = implode( ',', wp_parse_id_list( $r['include'] ) ); 323 $sql['where'][] = "signup_id IN ({$in})"; 324 325 /** 326 * Finally, the general case where a variety of parameters 327 * can be used in combination to find signups. 328 */ 329 } else { 330 // Active. 331 if ( false !== $r['active'] ) { 332 $sql['where'][] = $wpdb->prepare( "active = %d", absint( $r['active'] ) ); 333 } 334 335 // Search terms. 336 if ( ! empty( $r['usersearch'] ) ) { 337 $search_terms_like = '%' . bp_esc_like( $r['usersearch'] ) . '%'; 338 $sql['where'][] = $wpdb->prepare( "( user_login LIKE %s OR user_email LIKE %s OR meta LIKE %s )", $search_terms_like, $search_terms_like, $search_terms_like ); 339 } 340 341 // User email. 342 if ( ! empty( $r['user_email'] ) ) { 343 $sql['where'][] = $wpdb->prepare( "user_email = %s", $r['user_email'] ); 344 } 345 346 // User login. 347 if ( ! empty( $r['user_login'] ) ) { 348 $sql['where'][] = $wpdb->prepare( "user_login = %s", $r['user_login'] ); 349 } 350 351 $order = bp_esc_sql_order( $r['order'] ); 352 $sql['orderby'] = "ORDER BY {$r['orderby']} {$order}"; 353 354 $number = intval( $r['number'] ); 355 if ( -1 !== $number ) { 356 $sql['limit'] = $wpdb->prepare( "LIMIT %d, %d", absint( $r['offset'] ), $number ); 357 } 358 } 359 360 // Implode WHERE clauses. 361 $sql['where'] = 'WHERE ' . implode( ' AND ', $sql['where'] ); 362 363 $paged_signups_sql = "{$sql['select']} FROM {$sql['from']} {$sql['where']} {$sql['orderby']} {$sql['limit']}"; 364 365 /** 366 * Filters the Signups paged query. 367 * 368 * @since 2.0.0 369 * 370 * @param string $value SQL statement. 371 * @param array $sql Array of SQL statement parts. 372 * @param array $args Array of original arguments for get() method. 373 * @param array $r Array of parsed arguments for get() method. 374 */ 375 $paged_signups_sql = apply_filters( 'bp_members_signups_paged_query', $paged_signups_sql, $sql, $args, $r ); 376 377 $cached = bp_core_get_incremented_cache( $paged_signups_sql, 'bp_signups' ); 378 if ( false === $cached ) { 379 $paged_signup_ids = $wpdb->get_col( $paged_signups_sql ); 380 bp_core_set_incremented_cache( $paged_signups_sql, 'bp_signups', $paged_signup_ids ); 381 } else { 382 $paged_signup_ids = $cached; 383 } 384 385 // We only want the IDs. 386 if ( 'ids' === $r['fields'] ) { 387 $paged_signups = array_map( 'intval', $paged_signup_ids ); 388 389 } else { 390 $uncached_signup_ids = bp_get_non_cached_ids( $paged_signup_ids, 'bp_signups' ); 391 if ( $uncached_signup_ids ) { 392 $signup_ids_sql = implode( ',', array_map( 'intval', $uncached_signup_ids ) ); 393 $signup_data_objects = $wpdb->get_results( "SELECT * FROM {$bp->members->table_name_signups} WHERE signup_id IN ({$signup_ids_sql})" ); 394 foreach ( $signup_data_objects as $signup_data_object ) { 395 wp_cache_set( $signup_data_object->signup_id, $signup_data_object, 'bp_signups' ); 396 } 397 } 398 399 $paged_signups = array(); 400 foreach ( $paged_signup_ids as $paged_signup_id ) { 401 $paged_signups[] = new BP_Signup( $paged_signup_id ); 402 } 403 } 404 405 // Find the total number of signups in the results set. 406 $total_signups_sql = "SELECT COUNT(DISTINCT signup_id) FROM {$sql['from']} {$sql['where']}"; 407 408 /** 409 * Filters the Signups count query. 410 * 411 * @since 2.0.0 412 * 413 * @param string $value SQL statement. 414 * @param array $sql Array of SQL statement parts. 415 * @param array $args Array of original arguments for get() method. 416 * @param array $r Array of parsed arguments for get() method. 417 */ 418 $total_signups_sql = apply_filters( 'bp_members_signups_count_query', $total_signups_sql, $sql, $args, $r ); 419 420 $cached = bp_core_get_incremented_cache( $total_signups_sql, 'bp_signups' ); 421 if ( false === $cached ) { 422 $total_signups = (int) $wpdb->get_var( $total_signups_sql ); 423 bp_core_set_incremented_cache( $total_signups_sql, 'bp_signups', $total_signups ); 424 } else { 425 $total_signups = (int) $cached; 426 } 427 428 return array( 'signups' => $paged_signups, 'total' => $total_signups ); 429 } 430 431 /** 432 * Add a signup. 433 * 434 * @since 2.0.0 435 * 436 * @param array $args { 437 * Array of arguments for signup addition. 438 * @type string $domain New user's domain. 439 * @type string $path New user's path. 440 * @type string $title New user's title. 441 * @type string $user_login New user's user_login. 442 * @type string $user_email New user's email address. 443 * @type int|string $registered Time the user registered. 444 * @type string $activation_key New user's activation key. 445 * @type string $meta New user's user meta. 446 * } 447 * @return int|bool ID of newly created signup on success, false on failure. 448 */ 449 public static function add( $args = array() ) { 450 global $wpdb; 451 452 $r = bp_parse_args( 453 $args, 454 array( 455 'domain' => '', 456 'path' => '', 457 'title' => '', 458 'user_login' => '', 459 'user_email' => '', 460 'registered' => current_time( 'mysql', true ), 461 'activation_key' => wp_generate_password( 32, false ), 462 'meta' => array(), 463 ), 464 'bp_core_signups_add_args' 465 ); 466 467 // Ensure that sent_date and count_sent are set in meta. 468 if ( ! isset( $r['meta']['sent_date'] ) ) { 469 $r['meta']['sent_date'] = '0000-00-00 00:00:00'; 470 } 471 if ( ! isset( $r['meta']['count_sent'] ) ) { 472 $r['meta']['count_sent'] = 0; 473 } 474 475 $r['meta'] = maybe_serialize( $r['meta'] ); 476 477 $inserted = $wpdb->insert( 478 buddypress()->members->table_name_signups, 479 $r, 480 array( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) 481 ); 482 483 if ( $inserted ) { 484 $retval = $wpdb->insert_id; 485 } else { 486 $retval = false; 487 } 488 489 /** 490 * Fires after adding a new BP_Signup. 491 * 492 * @since 10.0.0 493 * 494 * @param int|bool $retval ID of the BP_Signup just added. 495 * @param array $r Array of parsed arguments for add() method. 496 * @param array $args Array of original arguments for add() method. 497 */ 498 do_action( 'bp_core_signups_after_add', $retval, $r, $args ); 499 500 /** 501 * Filters the result of a signup addition. 502 * 503 * @since 2.0.0 504 * 505 * @param int|bool $retval Newly added signup ID on success, false on failure. 506 */ 507 return apply_filters( 'bp_core_signups_add', $retval ); 508 } 509 510 /** 511 * Create a WP user at signup. 512 * 513 * Since BP 2.0, non-multisite configurations have stored signups in 514 * the same way as Multisite configs traditionally have: in the 515 * wp_signups table. However, because some plugins may be looking 516 * directly in the wp_users table for non-activated signups, we 517 * mirror signups there by creating "phantom" users, mimicking WP's 518 * default behavior. 519 * 520 * @since 2.0.0 521 * 522 * @param string $user_login User login string. 523 * @param string $user_password User password. 524 * @param string $user_email User email address. 525 * @param array $usermeta Metadata associated with the signup. 526 * @return int User id. 527 */ 528 public static function add_backcompat( $user_login = '', $user_password = '', $user_email = '', $usermeta = array() ) { 529 global $wpdb; 530 531 $user_id = wp_insert_user( 532 array( 533 'user_login' => $user_login, 534 'user_pass' => $user_password, 535 'display_name' => sanitize_title( $user_login ), 536 'user_email' => $user_email 537 ) 538 ); 539 540 if ( is_wp_error( $user_id ) || empty( $user_id ) ) { 541 return $user_id; 542 } 543 544 // Update the user status to '2', ie "not activated" 545 // (0 = active, 1 = spam, 2 = not active). 546 $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_status = 2 WHERE ID = %d", $user_id ) ); 547 548 // WordPress creates these options automatically on 549 // wp_insert_user(), but we delete them so that inactive 550 // signups don't appear in various user counts. 551 delete_user_option( $user_id, 'capabilities' ); 552 delete_user_option( $user_id, 'user_level' ); 553 554 // Set any profile data. 555 if ( bp_is_active( 'xprofile' ) ) { 556 if ( ! empty( $usermeta['profile_field_ids'] ) ) { 557 $profile_field_ids = explode( ',', $usermeta['profile_field_ids'] ); 558 559 foreach ( (array) $profile_field_ids as $field_id ) { 560 if ( empty( $usermeta["field_{$field_id}"] ) ) { 561 continue; 562 } 563 564 $current_field = $usermeta["field_{$field_id}"]; 565 xprofile_set_field_data( $field_id, $user_id, $current_field ); 566 567 /* 568 * Save the visibility level. 569 * 570 * Use the field's default visibility if not present, and 'public' if a 571 * default visibility is not defined. 572 */ 573 $key = "field_{$field_id}_visibility"; 574 if ( isset( $usermeta[ $key ] ) ) { 575 $visibility_level = $usermeta[ $key ]; 576 } else { 577 $vfield = xprofile_get_field( $field_id, null, false ); 578 $visibility_level = isset( $vfield->default_visibility ) ? $vfield->default_visibility : 'public'; 579 } 580 xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level ); 581 } 582 } 583 } 584 585 /** 586 * Fires after adding a new WP User (backcompat). 587 * 588 * @since 10.0.0 589 * 590 * @param int $user_id ID of the WP_User just added. 591 */ 592 do_action( 'bp_core_signups_after_add_backcompat', $user_id ); 593 594 /** 595 * Filters the user ID for the backcompat functionality. 596 * 597 * @since 2.0.0 598 * 599 * @param int $user_id User ID being registered. 600 */ 601 return apply_filters( 'bp_core_signups_add_backcompat', $user_id ); 602 } 603 604 /** 605 * Check a user status (from wp_users) on a non-multisite config. 606 * 607 * @since 2.0.0 608 * 609 * @param int $user_id ID of the user being checked. 610 * @return int|bool The status if found, otherwise false. 611 */ 612 public static function check_user_status( $user_id = 0 ) { 613 global $wpdb; 614 615 if ( empty( $user_id ) ) { 616 return false; 617 } 618 619 $user = get_user_by( 'id', $user_id ); 620 $user_status = $user->user_status; 621 622 /** 623 * Filters the user status of a provided user ID. 624 * 625 * @since 2.0.0 626 * 627 * @param int $value User status of the provided user ID. 628 */ 629 return apply_filters( 'bp_core_signups_check_user_status', intval( $user_status ) ); 630 } 631 632 /** 633 * Activate a signup. 634 * 635 * @since 2.0.0 636 * 637 * @param string $key Activation key. 638 * @return bool True on success, false on failure. 639 */ 640 public static function validate( $key = '' ) { 641 global $wpdb; 642 643 if ( empty( $key ) ) { 644 return; 645 } 646 647 $activated = $wpdb->update( 648 // Signups table. 649 buddypress()->members->table_name_signups, 650 array( 651 'active' => 1, 652 'activated' => current_time( 'mysql', true ), 653 ), 654 array( 655 'activation_key' => $key, 656 ), 657 // Data sanitization format. 658 array( 659 '%d', 660 '%s', 661 ), 662 // WHERE sanitization format. 663 array( 664 '%s', 665 ) 666 ); 667 668 /** 669 * Filters the status of the activated user. 670 * 671 * @since 2.0.0 672 * 673 * @param bool $activated Whether or not the activation was successful. 674 */ 675 return apply_filters( 'bp_core_signups_validate', $activated ); 676 } 677 678 /** 679 * How many inactive signups do we have? 680 * 681 * @since 2.0.0 682 * 683 * @return int The number of signups. 684 */ 685 public static function count_signups() { 686 $all_signups = self::get( 687 array( 688 'fields' => 'ids', 689 ) 690 ); 691 $count_signups = $all_signups['total']; 692 693 /** 694 * Filters the total inactive signups. 695 * 696 * @since 2.0.0 697 * 698 * @param int $count_signups How many total signups there are. 699 */ 700 return apply_filters( 'bp_core_signups_count', (int) $count_signups ); 701 } 702 703 /** 704 * Update the meta for a signup. 705 * 706 * This is the way we use to "trace" the last date an activation 707 * email was sent and how many times activation was sent. 708 * 709 * @since 2.0.0 710 * 711 * @param array $args { 712 * Array of arguments for the signup update. 713 * @type int $signup_id User signup ID. 714 * @type array $meta Meta to update. 715 * } 716 * @return int The signup id. 717 */ 718 public static function update( $args = array() ) { 719 global $wpdb; 720 721 $r = bp_parse_args( 722 $args, 723 array( 724 'signup_id' => 0, 725 'meta' => array(), 726 ), 727 'bp_core_signups_update_args' 728 ); 729 730 if ( empty( $r['signup_id'] ) || empty( $r['meta'] ) ) { 731 return false; 732 } 733 734 $signup_id = absint( $r['signup_id'] ); 735 736 // Figure out which meta keys should be updated. 737 $signup = new BP_Signup( $signup_id ); 738 $blended_meta = bp_parse_args( 739 $r['meta'], 740 $signup->meta 741 ); 742 743 $wpdb->update( 744 // Signups table. 745 buddypress()->members->table_name_signups, 746 // Data to update. 747 array( 748 'meta' => serialize( $blended_meta ), 749 ), 750 // WHERE. 751 array( 752 'signup_id' => $signup_id, 753 ), 754 // Data sanitization format. 755 array( 756 '%s', 757 ), 758 // WHERE sanitization format. 759 array( 760 '%d', 761 ) 762 ); 763 764 /** 765 * Fires after updating the meta of a new BP_Signup. 766 * 767 * @since 10.0.0 768 * 769 * @param int|bool $signup_id ID of the BP_Signup updated. 770 * @param array $r Array of parsed arguments to update() method. 771 * @param array $args Array of original arguments to update() method. 772 * @param array $blended_meta The complete set of meta to save. 773 */ 774 do_action( 'bp_core_signups_after_update_meta', $signup_id, $r, $args, $blended_meta ); 775 776 /** 777 * Filters the signup ID which received a meta update. 778 * 779 * @since 2.0.0 780 * 781 * @param int $value The signup ID. 782 */ 783 return apply_filters( 'bp_core_signups_update', $r['signup_id'] ); 784 } 785 786 /** 787 * Resend an activation email. 788 * 789 * @since 2.0.0 790 * 791 * @param array $signup_ids Single ID or list of IDs to resend. 792 * @return array 793 */ 794 public static function resend( $signup_ids = array() ) { 795 if ( empty( $signup_ids ) || ! is_array( $signup_ids ) ) { 796 return false; 797 } 798 799 $to_resend = self::get( 800 array( 801 'include' => $signup_ids, 802 ) 803 ); 804 805 if ( ! $signups = $to_resend['signups'] ) { 806 return false; 807 } 808 809 $result = array(); 810 811 /** 812 * Fires before activation emails are resent. 813 * 814 * @since 2.0.0 815 * 816 * @param array $signup_ids Array of IDs to resend activation emails to. 817 */ 818 do_action( 'bp_core_signup_before_resend', $signup_ids ); 819 820 foreach ( $signups as $signup ) { 821 822 $meta = $signup->meta; 823 $meta['sent_date'] = current_time( 'mysql', true ); 824 $meta['count_sent'] = $signup->count_sent + 1; 825 826 // Send activation email. 827 if ( is_multisite() ) { 828 // Should we send the user or blog activation email? 829 if ( ! empty( $signup->domain ) || ! empty( $signup->path ) ) { 830 wpmu_signup_blog_notification( $signup->domain, $signup->path, $signup->title, $signup->user_login, $signup->user_email, $signup->activation_key, $meta ); 831 } else { 832 wpmu_signup_user_notification( $signup->user_login, $signup->user_email, $signup->activation_key, $meta ); 833 } 834 } else { 835 836 // Check user status before sending email. 837 $user_id = email_exists( $signup->user_email ); 838 839 if ( ! empty( $user_id ) && 2 != self::check_user_status( $user_id ) ) { 840 841 // Status is not 2, so user's account has been activated. 842 $result['errors'][ $signup->signup_id ] = array( $signup->user_login, esc_html__( 'the sign-up has already been activated.', 'buddypress' ) ); 843 844 // Repair signups table. 845 self::validate( $signup->activation_key ); 846 847 continue; 848 849 // Send the validation email. 850 } else { 851 $salutation = $signup->user_login; 852 if ( bp_is_active( 'xprofile' ) && isset( $meta[ 'field_' . bp_xprofile_fullname_field_id() ] ) ) { 853 $salutation = $meta[ 'field_' . bp_xprofile_fullname_field_id() ]; 854 } 855 856 bp_core_signup_send_validation_email( false, $signup->user_email, $signup->activation_key, $salutation ); 857 } 858 } 859 860 // Update metas. 861 $result['resent'][] = self::update( 862 array( 863 'signup_id' => $signup->signup_id, 864 'meta' => $meta, 865 ) 866 ); 867 } 868 869 /** 870 * Fires after activation emails are resent. 871 * 872 * @since 2.0.0 873 * 874 * @param array $signup_ids Array of IDs to resend activation emails to. 875 * @param array $result Updated metadata related to activation emails. 876 */ 877 do_action( 'bp_core_signup_after_resend', $signup_ids, $result ); 878 879 /** 880 * Filters the result of the metadata for signup activation email resends. 881 * 882 * @since 2.0.0 883 * 884 * @param array $result Updated metadata related to activation emails. 885 */ 886 return apply_filters( 'bp_core_signup_resend', $result ); 887 } 888 889 /** 890 * Activate a pending account. 891 * 892 * @since 2.0.0 893 * 894 * @param array $signup_ids Single ID or list of IDs to activate. 895 * @return array 896 */ 897 public static function activate( $signup_ids = array() ) { 898 if ( empty( $signup_ids ) || ! is_array( $signup_ids ) ) { 899 return false; 900 } 901 902 $to_activate = self::get( 903 array( 904 'include' => $signup_ids, 905 ) 906 ); 907 908 if ( ! $signups = $to_activate['signups'] ) { 909 return false; 910 } 911 912 $result = array(); 913 914 /** 915 * Fires before activation of user accounts. 916 * 917 * @since 2.0.0 918 * 919 * @param array $signup_ids Array of IDs to activate. 920 */ 921 do_action( 'bp_core_signup_before_activate', $signup_ids ); 922 923 foreach ( $signups as $signup ) { 924 925 $user = bp_core_activate_signup( $signup->activation_key ); 926 927 if ( ! empty( $user->errors ) ) { 928 929 $user_id = username_exists( $signup->user_login ); 930 931 if ( 2 !== self::check_user_status( $user_id ) ) { 932 $user_id = false; 933 } 934 935 if ( empty( $user_id ) ) { 936 937 // Status is not 2, so user's account has been activated. 938 $result['errors'][ $signup->signup_id ] = array( $signup->user_login, esc_html__( 'the sign-up has already been activated.', 'buddypress' ) ); 939 940 // Repair signups table. 941 self::validate( $signup->activation_key ); 942 943 // We have a user id, account is not active, let's delete it. 944 } else { 945 $result['errors'][ $signup->signup_id ] = array( $signup->user_login, $user->get_error_message() ); 946 } 947 948 } else { 949 $result['activated'][] = $user; 950 } 951 } 952 953 /** 954 * Fires after activation of user accounts. 955 * 956 * @since 2.0.0 957 * 958 * @param array $signup_ids Array of IDs activated activate. 959 * @param array $result Array of data for activated accounts. 960 */ 961 do_action( 'bp_core_signup_after_activate', $signup_ids, $result ); 962 963 /** 964 * Filters the result of the metadata after user activation. 965 * 966 * @since 2.0.0 967 * 968 * @param array $result Updated metadata related to user activation. 969 */ 970 return apply_filters( 'bp_core_signup_activate', $result ); 971 } 972 973 /** 974 * Delete a pending account. 975 * 976 * @since 2.0.0 977 * 978 * @param array $signup_ids Single ID or list of IDs to delete. 979 * @return array 980 */ 981 public static function delete( $signup_ids = array() ) { 982 global $wpdb; 983 984 if ( empty( $signup_ids ) || ! is_array( $signup_ids ) ) { 985 return false; 986 } 987 988 $to_delete = self::get( 989 array( 990 'include' => $signup_ids, 991 ) 992 ); 993 994 if ( ! $signups = $to_delete['signups'] ) { 995 return false; 996 } 997 998 $result = array(); 999 1000 /** 1001 * Fires before deletion of pending accounts. 1002 * 1003 * @since 2.0.0 1004 * 1005 * @param array $signup_ids Array of pending IDs to delete. 1006 */ 1007 do_action( 'bp_core_signup_before_delete', $signup_ids ); 1008 1009 foreach ( $signups as $signup ) { 1010 $user_id = username_exists( $signup->user_login ); 1011 1012 if ( ! empty( $user_id ) && $signup->activation_key === bp_get_user_meta( $user_id, 'activation_key', true ) ) { 1013 1014 if ( 2 != self::check_user_status( $user_id ) ) { 1015 1016 // Status is not 2, so user's account has been activated. 1017 $result['errors'][ $signup->signup_id ] = array( $signup->user_login, esc_html__( 'the sign-up has already been activated.', 'buddypress' ) ); 1018 1019 // Repair signups table. 1020 self::validate( $signup->activation_key ); 1021 1022 // We have a user id, account is not active, let's delete it. 1023 } else { 1024 bp_core_delete_account( $user_id ); 1025 } 1026 } 1027 1028 if ( empty( $result['errors'][ $signup->signup_id ] ) ) { 1029 $wpdb->delete( 1030 // Signups table. 1031 buddypress()->members->table_name_signups, 1032 // Where. 1033 array( 'signup_id' => $signup->signup_id, ), 1034 // WHERE sanitization format. 1035 array( '%d', ) 1036 ); 1037 1038 $result['deleted'][] = $signup->signup_id; 1039 } 1040 } 1041 1042 /** 1043 * Fires after deletion of pending accounts. 1044 * 1045 * @since 2.0.0 1046 * 1047 * @param array $signup_ids Array of pending IDs to delete. 1048 * @param array $result Array of data for deleted accounts. 1049 */ 1050 do_action( 'bp_core_signup_after_delete', $signup_ids, $result ); 1051 1052 /** 1053 * Filters the result of the metadata for deleted pending accounts. 1054 * 1055 * @since 2.0.0 1056 * 1057 * @param array $result Updated metadata related to deleted pending accounts. 1058 */ 1059 return apply_filters( 'bp_core_signup_delete', $result ); 1060 } 1061 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Oct 13 01:00:54 2024 | Cross-referenced by PHPXref 0.7.1 |