[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * BuddyPress Nonmember Opt-out Class 4 * 5 * @package BuddyPress 6 * @subpackage Nonmember Opt-outs 7 * 8 * @since 8.0.0 9 */ 10 11 // Exit if accessed directly. 12 defined( 'ABSPATH' ) || exit; 13 14 /** 15 * BuddyPress opt-outs. 16 * 17 * Use this class to create, access, edit, or delete BuddyPress Nonmember Opt-outs. 18 * 19 * @since 8.0.0 20 */ 21 class BP_Optout { 22 23 /** 24 * The opt-out ID. 25 * 26 * @since 8.0.0 27 * @access public 28 * @var int 29 */ 30 public $id; 31 32 /** 33 * The hashed email address of the user that wishes to opt out of 34 * communications from this site. 35 * 36 * @since 8.0.0 37 * @access public 38 * @var string 39 */ 40 public $email_address; 41 42 /** 43 * The ID of the user that generated the contact that resulted in the opt-out. 44 * 45 * @since 8.0.0 46 * @access public 47 * @var int 48 */ 49 public $user_id; 50 51 /** 52 * The type of email contact that resulted in the opt-out. 53 * This should be one of the known BP_Email types. 54 * 55 * @since 8.0.0 56 * @access public 57 * @var string 58 */ 59 public $email_type; 60 61 /** 62 * The date the opt-out was last modified. 63 * 64 * @since 8.0.0 65 * @access public 66 * @var string 67 */ 68 public $date_modified; 69 70 /** Public Methods ****************************************************/ 71 72 /** 73 * Constructor method. 74 * 75 * @since 8.0.0 76 * 77 * @param int $id Optional. Provide an ID to access an existing 78 * optout item. 79 */ 80 public function __construct( $id = 0 ) { 81 if ( ! empty( $id ) ) { 82 $this->id = (int) $id; 83 $this->populate(); 84 } 85 } 86 87 /** 88 * Get the opt-outs table name. 89 * 90 * @since 8.0.0 91 * @access public 92 * @return string 93 */ 94 public static function get_table_name() { 95 return buddypress()->members->table_name_optouts; 96 } 97 98 /** 99 * Update or insert opt-out details into the database. 100 * 101 * @since 8.0.0 102 * 103 * @global wpdb $wpdb WordPress database object. 104 * 105 * @return bool True on success, false on failure. 106 */ 107 public function save() { 108 109 // Return value 110 $retval = false; 111 112 // Default data and format 113 $data = array( 114 'email_address_hash' => $this->email_address, 115 'user_id' => $this->user_id, 116 'email_type' => sanitize_key( $this->email_type ), 117 'date_modified' => $this->date_modified, 118 ); 119 $data_format = array( '%s', '%d', '%s', '%s' ); 120 121 /** 122 * Fires before an opt-out is saved. 123 * 124 * @since 8.0.0 125 * 126 * @param BP_Optout object $this Characteristics of the opt-out to be saved. 127 */ 128 do_action_ref_array( 'bp_optout_before_save', array( &$this ) ); 129 130 // Update. 131 if ( ! empty( $this->id ) ) { 132 $result = self::_update( $data, array( 'ID' => $this->id ), $data_format, array( '%d' ) ); 133 // Insert. 134 } else { 135 $result = self::_insert( $data, $data_format ); 136 } 137 138 // Set the opt-out ID if successful. 139 if ( ! empty( $result ) && ! is_wp_error( $result ) ) { 140 global $wpdb; 141 142 $this->id = $wpdb->insert_id; 143 $retval = $wpdb->insert_id; 144 } 145 146 wp_cache_delete( $this->id, 'bp_optouts' ); 147 148 /** 149 * Fires after an optout is saved. 150 * 151 * @since 8.0.0 152 * 153 * @param BP_optout object $this Characteristics of the opt-out just saved. 154 */ 155 do_action_ref_array( 'bp_optout_after_save', array( &$this ) ); 156 157 // Return the result. 158 return $retval; 159 } 160 161 /** 162 * Fetch data for an existing opt-out from the database. 163 * 164 * @since 8.0.0 165 * 166 * @global BuddyPress $bp The one true BuddyPress instance. 167 * @global wpdb $wpdb WordPress database object. 168 */ 169 public function populate() { 170 global $wpdb; 171 $optouts_table_name = $this->get_table_name(); 172 173 // Check cache for optout data. 174 $optout = wp_cache_get( $this->id, 'bp_optouts' ); 175 176 // Cache missed, so query the DB. 177 if ( false === $optout ) { 178 $optout = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$optouts_table_name} WHERE id = %d", $this->id ) ); 179 wp_cache_set( $this->id, $optout, 'bp_optouts' ); 180 } 181 182 // No optout found so set the ID and bail. 183 if ( empty( $optout ) || is_wp_error( $optout ) ) { 184 $this->id = 0; 185 return; 186 } 187 188 $this->email_address = $optout->email_address_hash; 189 $this->user_id = (int) $optout->user_id; 190 $this->email_type = sanitize_key( $optout->email_type ); 191 $this->date_modified = $optout->date_modified; 192 193 } 194 195 /** Protected Static Methods ******************************************/ 196 197 /** 198 * Create an opt-out entry. 199 * 200 * @since 8.0.0 201 * 202 * @param array $data { 203 * Array of optout data, passed to {@link wpdb::insert()}. 204 * @type string $email_address The hashed email address of the user that wishes to opt out of 205 * communications from this site. 206 * @type int $user_id The ID of the user that generated the contact that resulted in the opt-out. 207 * @type string $email_type The type of email contact that resulted in the opt-out. 208 * @type string $date_modified Date the opt-out was last modified. 209 * } 210 * @param array $data_format See {@link wpdb::insert()}. 211 * @return int|false The number of rows inserted, or false on error. 212 */ 213 protected static function _insert( $data = array(), $data_format = array() ) { 214 global $wpdb; 215 // We must lowercase and hash the email address at insert. 216 $email = strtolower( $data['email_address_hash'] ); 217 $data['email_address_hash'] = wp_hash( $email ); 218 return $wpdb->insert( BP_Optout::get_table_name(), $data, $data_format ); 219 } 220 221 /** 222 * Update opt-outs. 223 * 224 * @since 8.0.0 225 * 226 * @see wpdb::update() for further description of paramater formats. 227 * 228 * @param array $data Array of opt-out data to update, passed to 229 * {@link wpdb::update()}. Accepts any property of a 230 * BP_optout object. 231 * @param array $where The WHERE params as passed to wpdb::update(). 232 * Typically consists of array( 'ID' => $id ) to specify the ID 233 * of the item being updated. See {@link wpdb::update()}. 234 * @param array $data_format See {@link wpdb::insert()}. 235 * @param array $where_format See {@link wpdb::insert()}. 236 * @return int|false The number of rows updated, or false on error. 237 */ 238 protected static function _update( $data = array(), $where = array(), $data_format = array(), $where_format = array() ) { 239 global $wpdb; 240 241 // Ensure that a passed email address is lowercased and hashed. 242 if ( ! empty( $data['email_address_hash'] ) && is_email( $data['email_address_hash'] ) ) { 243 $email = strtolower( $data['email_address_hash'] ); 244 $data['email_address_hash'] = wp_hash( $email ); 245 } 246 247 return $wpdb->update( BP_Optout::get_table_name(), $data, $where, $data_format, $where_format ); 248 } 249 250 /** 251 * Delete opt-outs. 252 * 253 * @since 8.0.0 254 * 255 * @see wpdb::update() for further description of paramater formats. 256 * 257 * @param array $where Array of WHERE clauses to filter by, passed to 258 * {@link wpdb::delete()}. Accepts any property of a 259 * BP_optout object. 260 * @param array $where_format See {@link wpdb::insert()}. 261 * @return int|false The number of rows updated, or false on error. 262 */ 263 protected static function _delete( $where = array(), $where_format = array() ) { 264 global $wpdb; 265 return $wpdb->delete( BP_Optout::get_table_name(), $where, $where_format ); 266 } 267 268 /** 269 * Assemble the WHERE clause of a get() SQL statement. 270 * 271 * Used by BP_optout::get() to create its WHERE 272 * clause. 273 * 274 * @since 8.0.0 275 * 276 * @param array $args See {@link BP_optout::get()} for more details. 277 * @return string WHERE clause. 278 */ 279 protected static function get_where_sql( $args = array() ) { 280 global $wpdb; 281 282 $where_conditions = array(); 283 $where = ''; 284 285 // id. 286 if ( false !== $args['id'] ) { 287 $id_in = implode( ',', wp_parse_id_list( $args['id'] ) ); 288 $where_conditions['id'] = "id IN ({$id_in})"; 289 } 290 291 // email_address. 292 if ( ! empty( $args['email_address'] ) ) { 293 if ( ! is_array( $args['email_address'] ) ) { 294 $emails = explode( ',', $args['email_address'] ); 295 } else { 296 $emails = $args['email_address']; 297 } 298 299 $email_clean = array(); 300 foreach ( $emails as $email ) { 301 $email = strtolower( $email ); 302 $email_hash = wp_hash( $email ); 303 $email_clean[] = $wpdb->prepare( '%s', $email_hash ); 304 } 305 306 $email_in = implode( ',', $email_clean ); 307 $where_conditions['email_address'] = "email_address_hash IN ({$email_in})"; 308 } 309 310 // user_id. 311 if ( ! empty( $args['user_id'] ) ) { 312 $user_id_in = implode( ',', wp_parse_id_list( $args['user_id'] ) ); 313 $where_conditions['user_id'] = "user_id IN ({$user_id_in})"; 314 } 315 316 // email_type. 317 if ( ! empty( $args['email_type'] ) ) { 318 if ( ! is_array( $args['email_type'] ) ) { 319 $email_types = explode( ',', $args['email_type'] ); 320 } else { 321 $email_types = $args['email_type']; 322 } 323 324 $et_clean = array(); 325 foreach ( $email_types as $et ) { 326 $et_clean[] = $wpdb->prepare( '%s', sanitize_key( $et ) ); 327 } 328 329 $et_in = implode( ',', $et_clean ); 330 $where_conditions['email_type'] = "email_type IN ({$et_in})"; 331 } 332 333 // search_terms. 334 if ( ! empty( $args['search_terms'] ) ) { 335 // Matching email_address is an exact match because of the hashing. 336 $args['search_terms'] = strtolower( $args['search_terms'] ); 337 $search_terms_like = wp_hash( $args['search_terms'] ); 338 $where_conditions['search_terms'] = $wpdb->prepare( '( email_address_hash LIKE %s )', $search_terms_like ); 339 } 340 341 // Custom WHERE. 342 if ( ! empty( $where_conditions ) ) { 343 $where = 'WHERE ' . implode( ' AND ', $where_conditions ); 344 } 345 346 return $where; 347 } 348 349 /** 350 * Assemble the ORDER BY clause of a get() SQL statement. 351 * 352 * Used by BP_Optout::get() to create its ORDER BY 353 * clause. 354 * 355 * @since 8.0.0 356 * 357 * @param array $args See {@link BP_optout::get()} for more details. 358 * @return string ORDER BY clause. 359 */ 360 protected static function get_order_by_sql( $args = array() ) { 361 362 $conditions = array(); 363 $retval = ''; 364 365 // Order by. 366 if ( ! empty( $args['order_by'] ) ) { 367 $order_by_clean = array(); 368 $columns = array( 'id', 'email_address_hash', 'user_id', 'email_type', 'date_modified' ); 369 foreach ( (array) $args['order_by'] as $key => $value ) { 370 if ( in_array( $value, $columns, true ) ) { 371 $order_by_clean[] = $value; 372 } 373 } 374 if ( ! empty( $order_by_clean ) ) { 375 $order_by = implode( ', ', $order_by_clean ); 376 $conditions['order_by'] = "{$order_by}"; 377 } 378 } 379 380 // Sort order direction. 381 if ( ! empty( $args['sort_order'] ) ) { 382 $sort_order = bp_esc_sql_order( $args['sort_order'] ); 383 $conditions['sort_order'] = "{$sort_order}"; 384 } 385 386 // Custom ORDER BY. 387 if ( ! empty( $conditions['order_by'] ) ) { 388 $retval = 'ORDER BY ' . implode( ' ', $conditions ); 389 } 390 391 return $retval; 392 } 393 394 /** 395 * Assemble the LIMIT clause of a get() SQL statement. 396 * 397 * Used by BP_Optout::get() to create its LIMIT clause. 398 * 399 * @since 8.0.0 400 * 401 * @param array $args See {@link BP_optout::get()} for more details. 402 * @return string LIMIT clause. 403 */ 404 protected static function get_paged_sql( $args = array() ) { 405 global $wpdb; 406 407 // Setup local variable. 408 $retval = ''; 409 410 // Custom LIMIT. 411 if ( ! empty( $args['page'] ) && ! empty( $args['per_page'] ) ) { 412 $page = absint( $args['page'] ); 413 $per_page = absint( $args['per_page'] ); 414 $offset = $per_page * ( $page - 1 ); 415 $retval = $wpdb->prepare( "LIMIT %d, %d", $offset, $per_page ); 416 } 417 418 return $retval; 419 } 420 421 /** 422 * Assemble query clauses, based on arguments, to pass to $wpdb methods. 423 * 424 * The insert(), update(), and delete() methods of {@link wpdb} expect 425 * arguments of the following forms: 426 * 427 * - associative arrays whose key/value pairs are column => value, to 428 * be used in WHERE, SET, or VALUES clauses 429 * - arrays of "formats", which tell $wpdb->prepare() which type of 430 * value to expect when sanitizing (eg, array( '%s', '%d' )) 431 * 432 * This utility method can be used to assemble both kinds of params, 433 * out of a single set of associative array arguments, such as: 434 * 435 * $args = array( 436 * 'user_id' => 4, 437 * 'email_type' => 'type_string', 438 * ); 439 * 440 * This will be converted to: 441 * 442 * array( 443 * 'data' => array( 444 * 'user_id' => 4, 445 * 'email_type' => 'type_string', 446 * ), 447 * 'format' => array( 448 * '%d', 449 * '%s', 450 * ), 451 * ) 452 * 453 * which can easily be passed as arguments to the $wpdb methods. 454 * 455 * @since 8.0.0 456 * 457 * @param array $args Associative array of filter arguments. 458 * See {@BP_optout::get()} for a breakdown. 459 * @return array Associative array of 'data' and 'format' args. 460 */ 461 protected static function get_query_clauses( $args = array() ) { 462 $where_clauses = array( 463 'data' => array(), 464 'format' => array(), 465 ); 466 467 // id. 468 if ( ! empty( $args['id'] ) ) { 469 $where_clauses['data']['id'] = absint( $args['id'] ); 470 $where_clauses['format'][] = '%d'; 471 } 472 473 // email_address. 474 if ( ! empty( $args['email_address'] ) ) { 475 $where_clauses['data']['email_address_hash'] = $args['email_address']; 476 $where_clauses['format'][] = '%s'; 477 } 478 479 // user_id. 480 if ( ! empty( $args['user_id'] ) ) { 481 $where_clauses['data']['user_id'] = absint( $args['user_id'] ); 482 $where_clauses['format'][] = '%d'; 483 } 484 485 // email_type. 486 if ( ! empty( $args['email_type'] ) ) { 487 $where_clauses['data']['email_type'] = $args['email_type']; 488 $where_clauses['format'][] = '%s'; 489 } 490 491 return $where_clauses; 492 } 493 494 /** Public Static Methods *********************************************/ 495 496 /** 497 * Get opt-outs, based on provided filter parameters. 498 * 499 * @since 8.0.0 500 * 501 * @param array $args { 502 * Associative array of arguments. All arguments but $page and 503 * $per_page can be treated as filter values for get_where_sql() 504 * and get_query_clauses(). All items are optional. 505 * @type int|array $id ID of opt-out. 506 * Can be an array of IDs. 507 * @type string|array $email_address Email address of users who have opted out 508 * being queried. Can be an array of addresses. 509 * @type int|array $user_id ID of user whose communication prompted the 510 * opt-out. Can be an array of IDs. 511 * @type string|array $email_type Name of the emil type to filter by. 512 * Can be an array of email types. 513 * @type string $search_terms Term to match against email_address field. 514 * @type string $order_by Database column to order by. 515 * @type string $sort_order Either 'ASC' or 'DESC'. 516 * @type int $page Number of the current page of results. 517 * Default: false (no pagination, 518 * all items). 519 * @type int $per_page Number of items to show per page. 520 * Default: false (no pagination, 521 * all items). 522 * @type string $fields Which fields to return. Specify 'email_addresses' to 523 * fetch a list of opt-out email_addresses. 524 * Specify 'user_ids' to 525 * fetch a list of opt-out user_ids. 526 * Specify 'ids' to fetch a list of opt-out IDs. 527 * Default: 'all' (return BP_Optout objects). 528 * } 529 * 530 * @return array BP_Optout objects | IDs of found opt-outs | Email addresses of matches. 531 */ 532 public static function get( $args = array() ) { 533 global $wpdb; 534 $optouts_table_name = BP_Optout::get_table_name(); 535 536 // Parse the arguments. 537 $r = bp_parse_args( 538 $args, 539 array( 540 'id' => false, 541 'email_address' => false, 542 'user_id' => false, 543 'email_type' => false, 544 'search_terms' => '', 545 'order_by' => false, 546 'sort_order' => false, 547 'page' => false, 548 'per_page' => false, 549 'fields' => 'all', 550 ), 551 'bp_optout_get' 552 ); 553 554 $sql = array( 555 'select' => "SELECT", 556 'fields' => '', 557 'from' => "FROM {$optouts_table_name} o", 558 'where' => '', 559 'orderby' => '', 560 'pagination' => '', 561 ); 562 563 if ( 'user_ids' === $r['fields'] ) { 564 $sql['fields'] = "DISTINCT o.user_id"; 565 } else if ( 'email_addresses' === $r['fields'] ) { 566 $sql['fields'] = "DISTINCT o.email_address_hash"; 567 } else { 568 $sql['fields'] = 'DISTINCT o.id'; 569 } 570 571 // WHERE. 572 $sql['where'] = self::get_where_sql( 573 array( 574 'id' => $r['id'], 575 'email_address' => $r['email_address'], 576 'user_id' => $r['user_id'], 577 'email_type' => $r['email_type'], 578 'search_terms' => $r['search_terms'], 579 ) 580 ); 581 582 // ORDER BY. 583 $sql['orderby'] = self::get_order_by_sql( 584 array( 585 'order_by' => $r['order_by'], 586 'sort_order' => $r['sort_order'] 587 ) 588 ); 589 590 // LIMIT %d, %d. 591 $sql['pagination'] = self::get_paged_sql( 592 array( 593 'page' => $r['page'], 594 'per_page' => $r['per_page'], 595 ) 596 ); 597 598 $paged_optouts_sql = "{$sql['select']} {$sql['fields']} {$sql['from']} {$sql['where']} {$sql['orderby']} {$sql['pagination']}"; 599 600 /** 601 * Filters the pagination SQL statement. 602 * 603 * @since 8.0.0 604 * 605 * @param string $value Concatenated SQL statement. 606 * @param array $sql Array of SQL parts before concatenation. 607 * @param array $r Array of parsed arguments for the get method. 608 */ 609 $paged_optouts_sql = apply_filters( 'bp_optouts_get_paged_optouts_sql', $paged_optouts_sql, $sql, $r ); 610 611 $cached = bp_core_get_incremented_cache( $paged_optouts_sql, 'bp_optouts' ); 612 if ( false === $cached ) { 613 $paged_optout_ids = $wpdb->get_col( $paged_optouts_sql ); 614 bp_core_set_incremented_cache( $paged_optouts_sql, 'bp_optouts', $paged_optout_ids ); 615 } else { 616 $paged_optout_ids = $cached; 617 } 618 619 // Special return format cases. 620 if ( in_array( $r['fields'], array( 'ids', 'user_ids' ), true ) ) { 621 // We only want the field that was found. 622 return array_map( 'intval', $paged_optout_ids ); 623 } else if ( 'email_addresses' === $r['fields'] ) { 624 return $paged_optout_ids; 625 } 626 627 $uncached_ids = bp_get_non_cached_ids( $paged_optout_ids, 'bp_optouts' ); 628 if ( $uncached_ids ) { 629 $ids_sql = implode( ',', array_map( 'intval', $uncached_ids ) ); 630 $data_objects = $wpdb->get_results( "SELECT o.* FROM {$optouts_table_name} o WHERE o.id IN ({$ids_sql})" ); 631 foreach ( $data_objects as $data_object ) { 632 wp_cache_set( $data_object->id, $data_object, 'bp_optouts' ); 633 } 634 } 635 636 $paged_optouts = array(); 637 foreach ( $paged_optout_ids as $paged_optout_id ) { 638 $paged_optouts[] = new BP_optout( $paged_optout_id ); 639 } 640 641 return $paged_optouts; 642 } 643 644 /** 645 * Get a count of total optouts matching a set of arguments. 646 * 647 * @since 8.0.0 648 * 649 * @see BP_optout::get() for a description of 650 * arguments. 651 * 652 * @param array $args See {@link BP_optout::get()}. 653 * @return int Count of located items. 654 */ 655 public static function get_total_count( $args ) { 656 global $wpdb; 657 $optouts_table_name = BP_Optout::get_table_name(); 658 659 // Parse the arguments. 660 $r = bp_parse_args( 661 $args, 662 array( 663 'id' => false, 664 'email_address' => false, 665 'user_id' => false, 666 'email_type' => false, 667 'search_terms' => '', 668 'order_by' => false, 669 'sort_order' => false, 670 'page' => false, 671 'per_page' => false, 672 'fields' => 'all', 673 ), 674 'bp_optout_get_total_count' 675 ); 676 677 // Build the query 678 $select_sql = "SELECT COUNT(*)"; 679 $from_sql = "FROM {$optouts_table_name}"; 680 $where_sql = self::get_where_sql( $r ); 681 $sql = "{$select_sql} {$from_sql} {$where_sql}"; 682 683 // Return the queried results 684 return $wpdb->get_var( $sql ); 685 } 686 687 /** 688 * Update optouts. 689 * 690 * @since 8.0.0 691 * 692 * @see BP_optout::get() for a description of 693 * accepted update/where arguments. 694 * 695 * @param array $update_args Associative array of fields to update, 696 * and the values to update them to. Of the format 697 * array( 'user_id' => 4, 'email_address' => 'bar@foo.com', ). 698 * @param array $where_args Associative array of columns/values, to 699 * determine which rows should be updated. Of the format 700 * array( 'user_id' => 7, 'email_address' => 'bar@foo.com', ). 701 * @return int|bool Number of rows updated on success, false on failure. 702 */ 703 public static function update( $update_args = array(), $where_args = array() ) { 704 $update = self::get_query_clauses( $update_args ); 705 $where = self::get_query_clauses( $where_args ); 706 707 /** 708 * Fires before an opt-out is updated. 709 * 710 * @since 8.0.0 711 * 712 * @param array $where_args Associative array of columns/values describing 713 * opt-outs about to be deleted. 714 * @param array $update_args Array of new values. 715 */ 716 do_action( 'bp_optout_before_update', $where_args, $update_args ); 717 718 $retval = self::_update( $update['data'], $where['data'], $update['format'], $where['format'] ); 719 720 // Clear matching items from the cache. 721 $cache_args = $where_args; 722 $cache_args['fields'] = 'ids'; 723 $maybe_cached_ids = self::get( $cache_args ); 724 foreach ( $maybe_cached_ids as $invite_id ) { 725 wp_cache_delete( $invite_id, 'bp_optouts' ); 726 } 727 728 /** 729 * Fires after an opt-out is updated. 730 * 731 * @since 8.0.0 732 * 733 * @param array $where_args Associative array of columns/values describing 734 * opt-outs about to be deleted. 735 * @param array $update_args Array of new values. 736 */ 737 do_action( 'bp_optout_after_update', $where_args, $update_args ); 738 739 return $retval; 740 } 741 742 /** 743 * Delete opt-outs. 744 * 745 * @since 8.0.0 746 * 747 * @see BP_optout::get() for a description of 748 * accepted where arguments. 749 * 750 * @param array $args Associative array of columns/values, to determine 751 * which rows should be deleted. Of the format 752 * array( 'user_id' => 7, 'email_address' => 'bar@foo.com', ). 753 * @return int|bool Number of rows deleted on success, false on failure. 754 */ 755 public static function delete( $args = array() ) { 756 $where = self::get_query_clauses( $args ); 757 758 /** 759 * Fires before an opt-out is deleted. 760 * 761 * @since 8.0.0 762 * 763 * @param array $args Characteristics of the opt-outs to be deleted. 764 */ 765 do_action( 'bp_optout_before_delete', $args ); 766 767 // Clear matching items from the cache. 768 $cache_args = $args; 769 $cache_args['fields'] = 'ids'; 770 $maybe_cached_ids = self::get( $cache_args ); 771 foreach ( $maybe_cached_ids as $invite_id ) { 772 wp_cache_delete( $invite_id, 'bp_optouts' ); 773 } 774 775 $retval = self::_delete( $where['data'], $where['format'] ); 776 777 /** 778 * Fires after an opt-out is deleted. 779 * 780 * @since 8.0.0 781 * 782 * @param array $args Characteristics of the opt-outs just deleted. 783 */ 784 do_action( 'bp_optout_after_delete', $args ); 785 786 return $retval; 787 } 788 789 /** Convenience methods ***********************************************/ 790 791 /** 792 * Check whether an invitation exists matching the passed arguments. 793 * 794 * @since 5.0.0 795 * 796 * @see BP_Optout::get() for a description of accepted parameters. 797 * 798 * @return int|bool ID of first found invitation or false if none found. 799 */ 800 public function optout_exists( $args = array() ) { 801 $exists = false; 802 803 $args['fields'] = 'ids'; 804 $optouts = BP_Optout::get( $args ); 805 if ( $optouts ) { 806 $exists = current( $optouts ); 807 } 808 809 return $exists; 810 } 811 812 /** 813 * Delete a single opt-out by ID. 814 * 815 * @since 8.0.0 816 * 817 * @see BP_optout::delete() for explanation of 818 * return value. 819 * 820 * @param int $id ID of the opt-out item to be deleted. 821 * @return bool True on success, false on failure. 822 */ 823 public static function delete_by_id( $id ) { 824 return self::delete( array( 825 'id' => $id, 826 ) ); 827 } 828 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Nov 21 01:00:57 2024 | Cross-referenced by PHPXref 0.7.1 |