Changeset 12429 for trunk/src/bp-groups/bp-groups-functions.php
- Timestamp:
- 08/12/2019 08:42:49 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-groups/bp-groups-functions.php
r12426 r12429 952 952 $user_id = intval( $user_id ); 953 953 954 // Standard memberships 954 955 $membership_ids = wp_cache_get( $user_id, 'bp_groups_memberships_for_user' ); 955 956 if ( false === $membership_ids ) { … … 967 968 } 968 969 } 970 971 // Prime the invitations- and requests-as-memberships cache 972 $invitation_ids = array(); 973 if ( true !== $r['is_confirmed'] || false !== $r['invite_sent'] ) { 974 $invitation_ids = groups_get_invites( array( 975 'user_id' => $user_id, 976 'invite_sent' => 'all', 977 'type' => 'all', 978 'fields' => 'ids' 979 ) ); 980 981 // Prime the invitations cache. 982 $uncached_invitation_ids = bp_get_non_cached_ids( $invitation_ids, 'bp_groups_invitations_as_memberships' ); 983 984 $uncached_invitations = groups_get_invites( array( 985 'ids' => $uncached_invitation_ids, 986 'invite_sent' => 'all', 987 'type' => 'all' 988 ) ); 989 foreach ( $uncached_invitations as $uncached_invitation ) { 990 // Reshape the result as a membership db entry. 991 $invitation = new StdClass; 992 $invitation->id = $uncached_invitation->id; 993 $invitation->group_id = $uncached_invitation->item_id; 994 $invitation->user_id = $uncached_invitation->user_id; 995 $invitation->inviter_id = $uncached_invitation->inviter_id; 996 $invitation->is_admin = false; 997 $invitation->is_mod = false; 998 $invitation->user_title = ''; 999 $invitation->date_modified = $uncached_invitation->date_modified; 1000 $invitation->comments = $uncached_invitation->content; 1001 $invitation->is_confirmed = false; 1002 $invitation->is_banned = false; 1003 $invitation->invite_sent = $uncached_invitation->invite_sent; 1004 wp_cache_set( $uncached_invitation->id, $invitation, 'bp_groups_invitations_as_memberships' ); 1005 } 1006 1007 } 1008 969 1009 970 1010 // Assemble filter array for use in `wp_list_filter()`. … … 1007 1047 1008 1048 $groups[ $group_id ] = $membership; 1049 } 1050 1051 // Populate group invitations array from cache, and normalize. 1052 foreach ( $invitation_ids as $invitation_id ) { 1053 $invitation = wp_cache_get( $invitation_id, 'bp_groups_invitations_as_memberships' ); 1054 1055 // Sanity check. 1056 if ( ! isset( $invitation->group_id ) ) { 1057 continue; 1058 } 1059 1060 // Integer values. 1061 foreach ( $int_keys as $index ) { 1062 $invitation->{$index} = intval( $invitation->{$index} ); 1063 } 1064 1065 // Boolean values. 1066 foreach ( $bool_keys as $index ) { 1067 $invitation->{$index} = (bool) $invitation->{$index}; 1068 } 1069 1070 foreach ( $filters as $filter_name => $filter_value ) { 1071 if ( ! isset( $invitation->{$filter_name} ) || $filter_value != $invitation->{$filter_name} ) { 1072 continue 2; 1073 } 1074 } 1075 1076 $group_id = (int) $invitation->group_id; 1077 1078 $groups[ $group_id ] = $invitation; 1009 1079 } 1010 1080 … … 1256 1326 * 1257 1327 * @since 2.6.0 1258 * 1259 * @param int $user_id ID of the user. 1260 * @param int $group_id ID of the group. 1328 * @since 5.0.0 Added $type parameter. 1329 * 1330 * @param int $user_id ID of the user. 1331 * @param int $group_id ID of the group. 1332 * @param string $type If 'sent', results are limited to those invitations 1333 * that have actually been sent (non-draft). 1334 * Possible values: 'sent', 'draft', or 'all' Default: 'sent'. 1261 1335 * @return int|bool ID of the membership if the user is invited, otherwise false. 1262 1336 */ 1263 function groups_is_user_invited( $user_id, $group_id ) { 1264 $is_invited = false; 1265 1266 $user_groups = bp_get_user_groups( $user_id, array( 1267 'invite_sent' => true, 1268 'is_confirmed' => false, 1269 ) ); 1270 1271 if ( isset( $user_groups[ $group_id ] ) ) { 1272 $is_invited = $user_groups[ $group_id ]->id; 1273 } 1274 1275 return $is_invited; 1337 function groups_is_user_invited( $user_id, $group_id, $type = 'sent' ) { 1338 return groups_check_has_invite_from_user( $user_id, $group_id, false, $type ); 1276 1339 } 1277 1340 … … 1286 1349 */ 1287 1350 function groups_is_user_pending( $user_id, $group_id ) { 1288 $is_pending = false; 1289 1290 $user_groups = bp_get_user_groups( $user_id, array( 1291 'invite_sent' => false, 1292 'is_confirmed' => false, 1293 ) ); 1294 1295 if ( isset( $user_groups[ $group_id ] ) ) { 1296 $is_pending = $user_groups[ $group_id ]->id; 1297 } 1298 1299 return $is_pending; 1351 if ( empty( $user_id ) || empty( $group_id ) ) { 1352 return false; 1353 } 1354 1355 $args = array( 1356 'user_id' => $user_id, 1357 'item_id' => $group_id, 1358 ); 1359 $invites_class = new BP_Groups_Invitation_Manager(); 1360 1361 return $invites_class->request_exists( $args ); 1300 1362 } 1301 1363 … … 1316 1378 1317 1379 /** 1318 * Get IDs of users with outstanding invites to a given group from a specified user.1319 * 1320 * @since 1.0.0 1321 * 1322 * @param int $user_id ID of the invit inguser.1380 * Get group objects for groups that a user is currently invited to. 1381 * 1382 * @since 1.0.0 1383 * 1384 * @param int $user_id ID of the invited user. 1323 1385 * @param int|bool $limit Limit to restrict to. 1324 1386 * @param int|bool $page Optional. Page offset of results to return. 1325 1387 * @param string|array|bool $exclude Array of comma-separated list of group IDs 1326 1388 * to exclude from results. 1327 * @return array $value IDs of users who have been invited to the group by the 1328 * user but have not yet accepted. 1389 * @return array { 1390 * @type array $groups Array of groups returned by paginated query. 1391 * @type int $total Count of groups matching query. 1392 * } 1329 1393 */ 1330 1394 function groups_get_invites_for_user( $user_id = 0, $limit = false, $page = false, $exclude = false ) { 1331 1332 if ( empty( $user_id ) ) 1395 if ( empty( $user_id ) ) { 1333 1396 $user_id = bp_loggedin_user_id(); 1334 1335 return BP_Groups_Member::get_invites( $user_id, $limit, $page, $exclude ); 1397 } 1398 1399 $group_ids = groups_get_invited_to_group_ids( $user_id ); 1400 1401 // Remove excluded groups. 1402 if ( $exclude ) { 1403 $group_ids = array_diff( $group_ids, wp_parse_id_list( $exclude ) ); 1404 } 1405 1406 // Avoid passing an empty array. 1407 if ( ! $group_ids ) { 1408 $group_ids = array( 0 ); 1409 } 1410 1411 // Get a filtered list of groups. 1412 $args = array( 1413 'include' => $group_ids, 1414 'show_hidden' => true, 1415 'per_page' => $limit, 1416 'page' => $page, 1417 ); 1418 $groups = groups_get_groups( $args ); 1419 1420 return array( 'groups' => $groups['groups'], 'total' => groups_get_invite_count_for_user( $user_id ) ); 1336 1421 } 1337 1422 … … 1349 1434 } 1350 1435 1351 return BP_Groups_Member::get_invite_count_for_user( $user_id ); 1436 return count( groups_get_invited_to_group_ids( $user_id ) ); 1437 } 1438 1439 /** 1440 * Get an array of group IDs to which a user is invited. 1441 * 1442 * @since 5.0.0 1443 * 1444 * @param int $user_id The user ID. 1445 * 1446 * @return array Array of group IDs. 1447 */ 1448 function groups_get_invited_to_group_ids( $user_id = 0 ) { 1449 if ( empty( $user_id ) ) { 1450 $user_id = bp_loggedin_user_id(); 1451 } 1452 1453 $group_ids = groups_get_invites( array( 1454 'user_id' => $user_id, 1455 'invite_sent' => 'sent', 1456 'fields' => 'item_ids' 1457 ) ); 1458 1459 return array_unique( $group_ids ); 1352 1460 } 1353 1461 … … 1365 1473 * @type string $date_modified Optional. Modified date for the invitation. 1366 1474 * Default: current date/time. 1367 * @type bool $is_confirmed Optional. Whether the invitation should be 1368 * marked confirmed. Default: false. 1475 * @type string $content Optional. Message to invitee. 1476 * @type bool $send_invite Optional. Whether the invitation should be 1477 * sent now. Default: false. 1369 1478 * } 1370 1479 * @return bool True on success, false on failure. … … 1372 1481 function groups_invite_user( $args = '' ) { 1373 1482 1374 $ args= bp_parse_args( $args, array(1483 $r = bp_parse_args( $args, array( 1375 1484 'user_id' => false, 1376 1485 'group_id' => false, 1377 1486 'inviter_id' => bp_loggedin_user_id(), 1378 1487 'date_modified' => bp_core_current_time(), 1379 'is_confirmed' => 0 1488 'content' => '', 1489 'send_invite' => 0 1380 1490 ), 'groups_invite_user' ); 1381 extract( $args, EXTR_SKIP ); 1382 1383 if ( ! $user_id || ! $group_id || ! $inviter_id ) { 1491 1492 $inv_args = array( 1493 'user_id' => $r['user_id'], 1494 'item_id' => $r['group_id'], 1495 'inviter_id' => $r['inviter_id'], 1496 'date_modified' => $r['date_modified'], 1497 'content' => $r['content'], 1498 'send_invite' => $r['send_invite'] 1499 ); 1500 1501 // Create the unsent invitataion. 1502 $invites_class = new BP_Groups_Invitation_Manager(); 1503 $created = $invites_class->add_invitation( $inv_args ); 1504 1505 /** 1506 * Fires after the creation of a new group invite. 1507 * 1508 * @since 1.0.0 1509 * 1510 * @param array $r Array of parsed arguments for the group invite. 1511 * @param int|bool $created The ID of the invitation or false if it couldn't be created. 1512 */ 1513 do_action( 'groups_invite_user', $r, $created ); 1514 1515 return $created; 1516 } 1517 1518 /** 1519 * Uninvite a user from a group. 1520 * 1521 * @since 1.0.0 1522 * 1523 * @param int $user_id ID of the user. 1524 * @param int $group_id ID of the group. 1525 * @param int $inviter_id ID of the inviter. 1526 * @return bool True on success, false on failure. 1527 */ 1528 function groups_uninvite_user( $user_id, $group_id, $inviter_id = false ) { 1529 if ( empty( $user_id ) || empty( $group_id ) ) { 1384 1530 return false; 1385 1531 } 1386 1532 1387 // If the user has already requested membership, accept the request. 1388 if ( $membership_id = groups_check_for_membership_request( $user_id, $group_id ) ) { 1389 groups_accept_membership_request( $membership_id, $user_id, $group_id ); 1390 1391 // Otherwise, create a new invitation. 1392 } elseif ( ! groups_is_user_member( $user_id, $group_id ) && ! groups_check_user_has_invite( $user_id, $group_id, 'all' ) ) { 1393 $invite = new BP_Groups_Member; 1394 $invite->group_id = $group_id; 1395 $invite->user_id = $user_id; 1396 $invite->date_modified = $date_modified; 1397 $invite->inviter_id = $inviter_id; 1398 $invite->is_confirmed = $is_confirmed; 1399 1400 if ( !$invite->save() ) 1401 return false; 1402 1533 $invites_class = new BP_Groups_Invitation_Manager(); 1534 $success = $invites_class->delete( array( 1535 'user_id' => $user_id, 1536 'item_id' => $group_id, 1537 'inviter_id' => $inviter_id, 1538 ) ); 1539 1540 if ( $success ) { 1403 1541 /** 1404 * Fires after the creation of a new group invite.1542 * Fires after uninviting a user from a group. 1405 1543 * 1406 1544 * @since 1.0.0 1545 * @since 2.7.0 Added $inviter_id parameter 1407 1546 * 1408 * @param array $args Array of parsed arguments for the group invite. 1547 * @param int $group_id ID of the group being uninvited from. 1548 * @param int $user_id ID of the user being uninvited. 1549 * @param int $inviter_id ID of the inviter. 1409 1550 */ 1410 do_action( 'groups_invite_user', $args ); 1411 } 1412 1413 return true; 1414 } 1415 1416 /** 1417 * Uninvite a user from a group. 1418 * 1419 * Functionally, this is equivalent to removing a user from a group. 1420 * 1421 * @since 1.0.0 1422 * 1423 * @param int $user_id ID of the user. 1424 * @param int $group_id ID of the group. 1425 * @return bool True on success, false on failure. 1426 */ 1427 function groups_uninvite_user( $user_id, $group_id ) { 1428 1429 if ( ! BP_Groups_Member::delete_invite( $user_id, $group_id ) ) 1430 return false; 1431 1432 /** 1433 * Fires after uninviting a user from a group. 1434 * 1435 * @since 1.0.0 1436 * 1437 * @param int $group_id ID of the group being uninvited from. 1438 * @param int $user_id ID of the user being uninvited. 1439 */ 1440 do_action( 'groups_uninvite_user', $group_id, $user_id ); 1441 1442 return true; 1551 do_action( 'groups_uninvite_user', $group_id, $user_id, $inviter_id ); 1552 } 1553 1554 return $success; 1443 1555 } 1444 1556 … … 1455 1567 */ 1456 1568 function groups_accept_invite( $user_id, $group_id ) { 1457 1458 // If the user is already a member (because BP at one point allowed two invitations to 1459 // slip through), delete all existing invitations/requests and return true. 1460 if ( groups_is_user_member( $user_id, $group_id ) ) { 1461 if ( groups_check_user_has_invite( $user_id, $group_id ) ) { 1462 groups_delete_invite( $user_id, $group_id ); 1463 } 1464 1465 if ( groups_check_for_membership_request( $user_id, $group_id ) ) { 1466 groups_delete_membership_request( null, $user_id, $group_id ); 1467 } 1468 1469 return true; 1470 } 1471 1472 $member = new BP_Groups_Member( $user_id, $group_id ); 1473 1474 // Save the inviter ID so that we can pass it to the action below. 1475 $inviter_id = $member->inviter_id; 1476 1477 $member->accept_invite(); 1478 1479 if ( !$member->save() ) { 1569 $invites_class = new BP_Groups_Invitation_Manager(); 1570 $args = array( 1571 'user_id' => $user_id, 1572 'item_id' => $group_id, 1573 'invite_sent' => 'sent', 1574 ); 1575 1576 return $invites_class->accept_invitation( $args ); 1577 } 1578 1579 /** 1580 * Reject a group invitation. 1581 * 1582 * @since 1.0.0 1583 * @since 5.0.0 The $inviter_id arg was added. 1584 * 1585 * @param int $user_id ID of the user. 1586 * @param int $group_id ID of the group. 1587 * @param int $inviter_id ID of the inviter. 1588 * 1589 * @return bool True on success, false on failure. 1590 */ 1591 function groups_reject_invite( $user_id, $group_id, $inviter_id = false ) { 1592 if ( empty( $user_id ) || empty( $group_id ) ) { 1480 1593 return false; 1481 1594 } 1482 1595 1483 // Remove request to join. 1484 if ( $member->check_for_membership_request( $user_id, $group_id ) ) { 1485 $member->delete_request( $user_id, $group_id ); 1486 } 1487 1488 // Modify group meta. 1489 groups_update_groupmeta( $group_id, 'last_activity', bp_core_current_time() ); 1490 1491 /** 1492 * Fires after a user has accepted a group invite. 1493 * 1494 * @since 1.0.0 1495 * @since 2.8.0 The $inviter_id arg was added. 1496 * 1497 * @param int $user_id ID of the user who accepted the group invite. 1498 * @param int $group_id ID of the group being accepted to. 1499 * @param int $inviter_id ID of the user who invited this user to the group. 1500 */ 1501 do_action( 'groups_accept_invite', $user_id, $group_id, $inviter_id ); 1502 1503 return true; 1504 } 1505 1506 /** 1507 * Reject a group invitation. 1508 * 1509 * @since 1.0.0 1510 * 1511 * @param int $user_id ID of the user. 1512 * @param int $group_id ID of the group. 1513 * @return bool True on success, false on failure. 1514 */ 1515 function groups_reject_invite( $user_id, $group_id ) { 1516 if ( ! BP_Groups_Member::delete_invite( $user_id, $group_id ) ) 1517 return false; 1596 $invites_class = new BP_Groups_Invitation_Manager(); 1597 $success = $invites_class->delete( array( 1598 'user_id' => $user_id, 1599 'item_id' => $group_id, 1600 'inviter_id' => $inviter_id, 1601 ) ); 1518 1602 1519 1603 /** … … 1521 1605 * 1522 1606 * @since 1.0.0 1523 * 1524 * @param int $user_id ID of the user rejecting the invite. 1525 * @param int $group_id ID of the group being rejected. 1607 * @since 5.0.0 The $inviter_id arg was added. 1608 * 1609 * @param int $user_id ID of the user rejecting the invite. 1610 * @param int $group_id ID of the group being rejected. 1611 * @param int $inviter_id ID of the inviter. 1526 1612 */ 1527 do_action( 'groups_reject_invite', $user_id, $group_id );1528 1529 return true;1613 do_action( 'groups_reject_invite', $user_id, $group_id, $inviter_id ); 1614 1615 return $success; 1530 1616 } 1531 1617 … … 1534 1620 * 1535 1621 * @since 1.0.0 1622 * @since 5.0.0 The $inviter_id arg was added. 1536 1623 * 1537 1624 * @param int $user_id ID of the invited user. 1538 1625 * @param int $group_id ID of the group. 1626 * @param int $inviter_id ID of the inviter. 1627 * 1539 1628 * @return bool True on success, false on failure. 1540 1629 */ 1541 function groups_delete_invite( $user_id, $group_id ) {1542 if ( ! BP_Groups_Member::delete_invite( $user_id, $group_id ) )1630 function groups_delete_invite( $user_id, $group_id, $inviter_id = false ) { 1631 if ( empty( $user_id ) || empty( $group_id ) ) { 1543 1632 return false; 1633 } 1634 1635 $invites_class = new BP_Groups_Invitation_Manager(); 1636 $success = $invites_class->delete( array( 1637 'user_id' => $user_id, 1638 'item_id' => $group_id, 1639 'inviter_id' => $inviter_id, 1640 ) ); 1544 1641 1545 1642 /** … … 1547 1644 * 1548 1645 * @since 1.9.0 1646 * @since 5.0.0 The $inviter_id arg was added. 1549 1647 * 1550 1648 * @param int $user_id ID of the user whose invitation is being deleted. 1551 1649 * @param int $group_id ID of the group whose invitation is being deleted. 1650 * @param int $inviter_id ID of the inviter. 1552 1651 */ 1553 do_action( 'groups_delete_invite', $user_id, $group_id );1652 do_action( 'groups_delete_invite', $user_id, $group_id, $inviter_id ); 1554 1653 1555 1654 return true; … … 1557 1656 1558 1657 /** 1559 * Send all pending invites by a single user to a specific group. 1560 * 1561 * @since 1.0.0 1562 * 1563 * @param int $user_id ID of the inviting user. 1564 * @param int $group_id ID of the group. 1565 */ 1566 function groups_send_invites( $user_id, $group_id ) { 1567 1568 if ( empty( $user_id ) ) 1569 $user_id = bp_loggedin_user_id(); 1570 1571 // Send friend invites. 1572 $invited_users = groups_get_invites_for_group( $user_id, $group_id ); 1573 $group = groups_get_group( $group_id ); 1574 1575 for ( $i = 0, $count = count( $invited_users ); $i < $count; ++$i ) { 1576 $member = new BP_Groups_Member( $invited_users[$i], $group_id ); 1577 1578 // Skip if we've already sent an invite to this user. 1579 if ( $member->invite_sent ) { 1580 continue; 1581 } 1582 1583 // Send the actual invite. 1584 groups_notification_group_invites( $group, $member, $user_id ); 1585 1586 $member->invite_sent = 1; 1587 $member->save(); 1658 * Send some or all pending invites by a single user to a specific group. 1659 * 1660 * @since 1.0.0 1661 * @since 5.0.0 Parameters changed to associative array. 1662 * 1663 * @param array $args { 1664 * An array of optional arguments. 1665 * @type int $user_id ID of the invited user. 1666 * @type string $invitee_email Email address of the invited user, if not a member of the site. 1667 * @type string $group_id ID of the group or an array of group IDs. 1668 * @type string $inviter_id ID of the user extending the invitation. 1669 * @type bool $force_resend Whether to resend the email & notification if one has already been sent. 1670 * } 1671 */ 1672 function groups_send_invites( $args = array() ) { 1673 // Backward compatibility with old method of passing arguments. 1674 if ( ! is_array( $args ) || func_num_args() > 1 ) { 1675 _deprecated_argument( __METHOD__, '5.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) ); 1676 1677 $old_args_keys = array( 1678 0 => 'inviter_id', 1679 1 => 'group_id', 1680 ); 1681 1682 $args = bp_core_parse_args_array( $old_args_keys, func_get_args() ); 1683 } 1684 1685 $r = bp_parse_args( $args, array( 1686 'user_id' => false, 1687 'invitee_email' => '', 1688 'group_id' => 0, 1689 'inviter_id' => bp_loggedin_user_id(), 1690 'force_resend' => false, 1691 ), 'groups_send_invitation' ); 1692 1693 /* 1694 * We will generally only want to fetch unsent invitations. 1695 * If force_resend is true, then we need to fetch both sent and draft invites. 1696 */ 1697 if ( $r['force_resend'] ) { 1698 $args['invite_sent'] = 'all'; 1699 } else { 1700 $args['invite_sent'] = 'draft'; 1701 } 1702 1703 $args = array( 1704 'user_id' => $r['user_id'], 1705 'invitee_email' => $r['invitee_email'], 1706 'item_id' => $r['group_id'], 1707 'inviter_id' => $r['inviter_id'], 1708 ); 1709 $invites = groups_get_invites( $args ); 1710 1711 $invited_users = array(); 1712 1713 $invites_class = new BP_Groups_Invitation_Manager(); 1714 foreach ( $invites as $invite ) { 1715 $invited_users[] = $invite->user_id; 1716 $invites_class->send_invitation_by_id( $invite->id ); 1588 1717 } 1589 1718 … … 1598 1727 * @param int $user_id ID of the inviting user. 1599 1728 */ 1600 do_action( 'groups_send_invites', $ group_id, $invited_users, $user_id);1601 } 1602 1603 /** 1604 * Get IDs of users with outstanding invites to a given group from a specified user.1729 do_action( 'groups_send_invites', $r['group_id'], $invited_users, $r['inviter_id'] ); 1730 } 1731 1732 /** 1733 * Get IDs of users with outstanding invites to a given group. 1605 1734 * 1606 1735 * @since 1.0.0 … … 1621 1750 1622 1751 /** 1752 * Get invitations to a given group filtered by arguments. 1753 * 1754 * @since 5.0.0 1755 * 1756 * @param int $group_id ID of the group. 1757 * @param array $args Invitation arguments. 1758 * See BP_Invitation::get() for list. 1759 * 1760 * @return array $invites Matching BP_Invitation objects. 1761 */ 1762 function groups_get_invites( $args = array() ) { 1763 $invites_class = new BP_Groups_Invitation_Manager(); 1764 return $invites_class->get_invitations( $args ); 1765 } 1766 1767 /** 1623 1768 * Check to see whether a user has already been invited to a group. 1624 1769 * … … 1633 1778 * @param string $type Optional. Use 'sent' to check for sent invites, 1634 1779 * 'all' to check for all. Default: 'sent'. 1635 * @return int|bool ID of the membership if found, otherwise false.1780 * @return int|bool ID of the first found membership if found, otherwise false. 1636 1781 */ 1637 1782 function groups_check_user_has_invite( $user_id, $group_id, $type = 'sent' ) { 1638 $invite = false; 1783 return groups_check_has_invite_from_user( $user_id, $group_id, false, $type ); 1784 } 1785 1786 /** 1787 * Check to see whether a user has already been invited to a group by a particular user. 1788 * 1789 * By default, the function checks for invitations that have been sent. 1790 * Entering 'all' as the $type parameter will return unsent invitations as 1791 * well (useful to make sure AJAX requests are not duplicated). 1792 * 1793 * @since 5.0.0 1794 * 1795 * @param int $user_id ID of potential group member. 1796 * @param int $group_id ID of potential group. 1797 * @param string $inviter_id Optional. Use 'sent' to check for sent invites, 1798 * 'all' to check for all. Default: 'sent'. 1799 * @param string $type Optional. Specify a user ID to limit to only invited from that user. 1800 * Default: 'false'. 1801 * @return int|bool ID of the first found membership if found, otherwise false. 1802 */ 1803 function groups_check_has_invite_from_user( $user_id, $group_id, $inviter_id = false, $type = 'sent' ) { 1804 if ( empty( $user_id ) || empty( $group_id ) ) { 1805 return false; 1806 } 1639 1807 1640 1808 $args = array( 1641 'is_confirmed' => false, 1642 'is_banned' => null, 1643 'is_admin' => null, 1644 'is_mod' => null, 1809 'user_id' => $user_id, 1810 'item_id' => $group_id, 1811 'invite_sent' => 'sent', 1645 1812 ); 1646 1647 if ( 'sent' === $type ) { 1648 $args['invite_sent'] = true; 1649 } 1650 1651 $user_groups = bp_get_user_groups( $user_id, $args ); 1652 1653 if ( isset( $user_groups[ $group_id ] ) && 0 !== $user_groups[ $group_id ]->inviter_id ) { 1654 $invite = $user_groups[ $group_id ]->id; 1655 } 1656 1657 return $invite; 1813 if ( $inviter_id ) { 1814 $args['inviter_id'] = $inviter_id; 1815 } 1816 if ( $type === 'draft' || $type === 'all' ) { 1817 $args['invite_sent'] = $type; 1818 } 1819 1820 $invites_class = new BP_Groups_Invitation_Manager(); 1821 1822 return $invites_class->invitation_exists( $args ); 1658 1823 } 1659 1824 … … 1832 1997 * @since 1.0.0 1833 1998 * 1834 * @param int $requesting_user_id ID of the user requesting membership. 1835 * @param int $group_id ID of the group. 1999 * @param array|string $args { 2000 * Array of arguments. 2001 * @type int $user_id ID of the user being invited. 2002 * @type int $group_id ID of the group to which the user is being invited. 2003 * @type string $content Optional. Message to invitee. 2004 * @type string $date_modified Optional. Modified date for the invitation. 2005 * Default: current date/time. 2006 * } 1836 2007 * @return bool True on success, false on failure. 1837 2008 */ 1838 function groups_send_membership_request( $requesting_user_id, $group_id ) { 1839 1840 // Prevent duplicate requests. 1841 if ( groups_check_for_membership_request( $requesting_user_id, $group_id ) ) 1842 return false; 1843 1844 // Check if the user is already a member or is banned. 1845 if ( groups_is_user_member( $requesting_user_id, $group_id ) || groups_is_user_banned( $requesting_user_id, $group_id ) ) 1846 return false; 1847 1848 // Check if the user is already invited - if so, simply accept invite. 1849 if ( groups_check_user_has_invite( $requesting_user_id, $group_id ) ) { 1850 groups_accept_invite( $requesting_user_id, $group_id ); 1851 return true; 1852 } 1853 1854 $requesting_user = new BP_Groups_Member; 1855 $requesting_user->group_id = $group_id; 1856 $requesting_user->user_id = $requesting_user_id; 1857 $requesting_user->inviter_id = 0; 1858 $requesting_user->is_admin = 0; 1859 $requesting_user->user_title = ''; 1860 $requesting_user->date_modified = bp_core_current_time(); 1861 $requesting_user->is_confirmed = 0; 1862 $requesting_user->comments = isset( $_POST['group-request-membership-comments'] ) ? $_POST['group-request-membership-comments'] : ''; 1863 1864 if ( $requesting_user->save() ) { 1865 $admins = groups_get_group_admins( $group_id ); 1866 1867 // Saved okay, now send the email notification. 1868 for ( $i = 0, $count = count( $admins ); $i < $count; ++$i ) 1869 groups_notification_new_membership_request( $requesting_user_id, $admins[$i]->user_id, $group_id, $requesting_user->id ); 2009 function groups_send_membership_request( $args = array() ) { 2010 // Backward compatibility with old method of passing arguments. 2011 if ( ! is_array( $args ) || func_num_args() > 1 ) { 2012 _deprecated_argument( __METHOD__, '5.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) ); 2013 2014 $old_args_keys = array( 2015 0 => 'user_id', 2016 1 => 'group_id', 2017 ); 2018 2019 $args = bp_core_parse_args_array( $old_args_keys, func_get_args() ); 2020 } 2021 2022 $r = bp_parse_args( $args, array( 2023 'user_id' => false, 2024 'group_id' => false, 2025 'content' => '', 2026 'date_modified' => bp_core_current_time(), 2027 ), 'groups_send_membership_request' ); 2028 2029 $inv_args = array( 2030 'user_id' => $r['user_id'], 2031 'item_id' => $r['group_id'], 2032 'content' => $r['content'], 2033 'date_modified' => $r['date_modified'], 2034 ); 2035 2036 $invites_class = new BP_Groups_Invitation_Manager(); 2037 $request_id = $invites_class->add_request( $inv_args ); 2038 2039 // If a new request was created, send the emails. 2040 if ( $request_id && is_int( $request_id ) ) { 2041 $invites_class->send_request_notification_by_id( $request_id ); 2042 $admins = groups_get_group_admins( $r['group_id'] ); 1870 2043 1871 2044 /** … … 1877 2050 * @param array $admins Array of group admins. 1878 2051 * @param int $group_id ID of the group being requested to. 1879 * @param int $request ing_user->id ID of the membership.2052 * @param int $request_id ID of the request. 1880 2053 */ 1881 do_action( 'groups_membership_requested', $r equesting_user_id, $admins, $group_id, $requesting_user->id );1882 1883 return true;2054 do_action( 'groups_membership_requested', $r['user_id'], $admins, $r['group_id'], $request_id ); 2055 2056 return $request_id; 1884 2057 } 1885 2058 … … 1891 2064 * 1892 2065 * @since 1.0.0 1893 * 1894 * @param int $membership_id ID of the membership object. 2066 * @since 5.0.0 Deprecated $membership_id argument. 2067 * 2068 * @param int $membership_id Deprecated 5.0.0. 2069 * @param int $user_id Required. ID of the user who requested membership. 2070 * Provide this value along with $group_id to override 2071 * $membership_id. 2072 * @param int $group_id Required. ID of the group to which membership is being 2073 * requested. Provide this value along with $user_id to 2074 * override $membership_id. 2075 * @return bool True on success, false on failure. 2076 */ 2077 function groups_accept_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) { 2078 2079 if ( ! empty( $membership_id ) ) { 2080 _deprecated_argument( __METHOD__, '5.0.0', sprintf( __( 'Argument `membership_id` passed to %1$s is deprecated. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) ); 2081 } 2082 2083 if ( ! $user_id || ! $group_id ) { 2084 return false; 2085 } 2086 2087 $invites_class = new BP_Groups_Invitation_Manager(); 2088 $args = array( 2089 'user_id' => $user_id, 2090 'item_id' => $group_id, 2091 ); 2092 2093 return $invites_class->accept_request( $args ); 2094 } 2095 2096 /** 2097 * Reject a pending group membership request. 2098 * 2099 * @since 1.0.0 2100 * 2101 * @param int $membership_id Deprecated 5.0.0. 1895 2102 * @param int $user_id Optional. ID of the user who requested membership. 1896 2103 * Provide this value along with $group_id to override … … 1901 2108 * @return bool True on success, false on failure. 1902 2109 */ 1903 function groups_accept_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) {1904 1905 if ( !empty( $user_id ) && !empty( $group_id ) ) {1906 $membership = new BP_Groups_Member( $user_id, $group_id );1907 } else {1908 $membership = new BP_Groups_Member( false, false, $membership_id );1909 }1910 1911 $membership->accept_request();1912 1913 if ( !$membership->save() ) {1914 return false;1915 }1916 1917 // Check if the user has an outstanding invite, if so delete it.1918 if ( groups_check_user_has_invite( $membership->user_id, $membership->group_id ) ) {1919 groups_delete_invite( $membership->user_id, $membership->group_id );1920 }1921 1922 /**1923 * Fires after a group membership request has been accepted.1924 *1925 * @since 1.0.01926 *1927 * @param int $user_id ID of the user who accepted membership.1928 * @param int $group_id ID of the group that was accepted membership to.1929 * @param bool $value If membership was accepted.1930 */1931 do_action( 'groups_membership_accepted', $membership->user_id, $membership->group_id, true );1932 1933 return true;1934 }1935 1936 /**1937 * Reject a pending group membership request.1938 *1939 * @since 1.0.01940 *1941 * @param int $membership_id ID of the membership object.1942 * @param int $user_id Optional. ID of the user who requested membership.1943 * Provide this value along with $group_id to override1944 * $membership_id.1945 * @param int $group_id Optional. ID of the group to which membership is being1946 * requested. Provide this value along with $user_id to1947 * override $membership_id.1948 * @return bool True on success, false on failure.1949 */1950 2110 function groups_reject_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) { 1951 if ( !$membership = groups_delete_membership_request( $membership_id, $user_id, $group_id ) ) { 2111 2112 if ( ! empty( $membership_id ) ){ 2113 _deprecated_argument( __METHOD__, '5.0.0', sprintf( __( 'Argument `membership_id` passed to %1$s is deprecated. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) ); 2114 } 2115 2116 if ( ! groups_delete_membership_request( false, $user_id, $group_id ) ) { 1952 2117 return false; 1953 2118 } … … 1962 2127 * @param bool $value If membership was accepted. 1963 2128 */ 1964 do_action( 'groups_membership_rejected', $ membership->user_id, $membership->group_id, false );2129 do_action( 'groups_membership_rejected', $user_id, $group_id, false ); 1965 2130 1966 2131 return true; … … 1972 2137 * @since 1.2.0 1973 2138 * 1974 * @param int $membership_id ID of the membership object.2139 * @param int $membership_id Deprecated 5.0.0. 1975 2140 * @param int $user_id Optional. ID of the user who requested membership. 1976 2141 * Provide this value along with $group_id to override … … 1982 2147 */ 1983 2148 function groups_delete_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) { 1984 if ( !empty( $user_id ) && !empty( $group_id ) ) 1985 $membership = new BP_Groups_Member( $user_id, $group_id ); 1986 else 1987 $membership = new BP_Groups_Member( false, false, $membership_id ); 1988 1989 if ( ! BP_Groups_Member::delete_request( $membership->user_id, $membership->group_id ) ) 2149 if ( ! empty( $membership_id ) ){ 2150 _deprecated_argument( __METHOD__, '5.0.0', sprintf( __( 'Argument `membership_id` passed to %1$s is deprecated. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) ); 2151 } 2152 2153 if ( empty( $user_id ) || empty( $group_id ) ) { 1990 2154 return false; 1991 1992 return $membership; 2155 } 2156 2157 $invites_class = new BP_Groups_Invitation_Manager(); 2158 $success = $invites_class->delete_requests( array( 2159 'user_id' => $user_id, 2160 'item_id' => $group_id 2161 ) ); 2162 2163 return $success; 2164 } 2165 2166 /** 2167 * Get group membership requests filtered by arguments. 2168 * 2169 * @since 5.0.0 2170 * 2171 * @param int $group_id ID of the group. 2172 * @param array $args Invitation arguments. 2173 * See BP_Invitation::get() for list. 2174 * 2175 * @return array $requests Matching BP_Invitation objects. 2176 */ 2177 function groups_get_requests( $args = array() ) { 2178 $invites_class = new BP_Groups_Invitation_Manager(); 2179 return $invites_class->get_requests( $args ); 1993 2180 } 1994 2181 … … 2000 2187 * @param int $user_id ID of the user. 2001 2188 * @param int $group_id ID of the group. 2002 * @return int|bool ID of the membershipif found, otherwise false.2189 * @return int|bool ID of the request if found, otherwise false. 2003 2190 */ 2004 2191 function groups_check_for_membership_request( $user_id, $group_id ) { 2005 $request = false; 2006 2007 $user_groups = bp_get_user_groups( $user_id, array( 2008 'is_confirmed' => false, 2009 'is_banned' => false, 2010 'is_admin' => null, 2011 'is_mod' => null 2192 if ( empty( $user_id ) || empty( $group_id ) ) { 2193 return false; 2194 } 2195 2196 $args = array( 2197 'user_id' => $user_id, 2198 'item_id' => $group_id, 2199 ); 2200 $invites_class = new BP_Groups_Invitation_Manager(); 2201 2202 return $invites_class->request_exists( $args ); 2203 } 2204 2205 /** 2206 * Get an array of group IDs to which a user has requested membership. 2207 * 2208 * @since 5.0.0 2209 * 2210 * @param int $user_id The user ID. 2211 * 2212 * @return array Array of group IDs. 2213 */ 2214 function groups_get_membership_requested_group_ids( $user_id = 0 ) { 2215 if ( ! $user_id ) { 2216 $user_id = bp_loggedin_user_id(); 2217 } 2218 2219 $group_ids = groups_get_requests( array( 2220 'user_id' => $user_id, 2221 'fields' => 'item_ids' 2012 2222 ) ); 2013 2223 2014 if ( isset( $user_groups[ $group_id ] ) && 0 === $user_groups[ $group_id ]->inviter_id ) { 2015 $request = $user_groups[ $group_id ]->id; 2016 } 2017 2018 return $request; 2224 return $group_ids; 2225 } 2226 2227 /** 2228 * Get an array of group IDs to which a user has requested membership. 2229 * 2230 * @since 5.0.0 2231 * 2232 * @param int $user_id The user ID. 2233 * 2234 * @return array Array of group IDs. 2235 */ 2236 function groups_get_membership_requested_user_ids( $group_id = 0 ) { 2237 if ( ! $group_id ) { 2238 $group_id = bp_get_current_group_id(); 2239 } 2240 2241 $requests = groups_get_requests( array( 2242 'item_id' => $group_id, 2243 'fields' => 'user_ids' 2244 ) ); 2245 2246 return $requests; 2019 2247 } 2020 2248 … … 2027 2255 * @return bool True on success, false on failure. 2028 2256 */ 2029 function groups_accept_all_pending_membership_requests( $group_id ) { 2030 $user_ids = BP_Groups_Member::get_all_membership_request_user_ids( $group_id ); 2031 2032 if ( !$user_ids ) 2257 function groups_accept_all_pending_membership_requests( $group_id = 0 ) { 2258 if ( ! $group_id ) { 2259 $group_id = bp_get_current_group_id(); 2260 } 2261 2262 $user_ids = groups_get_membership_requested_user_ids( $group_id ); 2263 2264 if ( ! $user_ids ) { 2033 2265 return false; 2034 2035 foreach ( (array) $user_ids as $user_id ) 2266 } 2267 2268 foreach ( (array) $user_ids as $user_id ) { 2036 2269 groups_accept_membership_request( false, $user_id, $group_id ); 2270 } 2037 2271 2038 2272 /** … … 2710 2944 } 2711 2945 2712 $requests = BP_Groups_Member::get_user_memberships( $user->ID,array(2713 ' type' => 'pending_request',2946 $requests = groups_get_requests( array( 2947 'user_id' => $user->ID, 2714 2948 'page' => $page, 2715 2949 'per_page' => $number, … … 2717 2951 2718 2952 foreach ( $requests as $request ) { 2719 $group = groups_get_group( $request-> group_id );2953 $group = groups_get_group( $request->item_id ); 2720 2954 2721 2955 $item_data = array( … … 2776 3010 } 2777 3011 2778 $invitations = BP_Groups_Member::get_user_memberships( $user->ID,array(2779 ' type' => 'pending_sent_invitation',2780 'page' => $page,2781 'per_page' => $number,3012 $invitations = groups_get_invites( array( 3013 'inviter_id' => $user->ID, 3014 'page' => $page, 3015 'per_page' => $number, 2782 3016 ) ); 2783 3017 2784 3018 foreach ( $invitations as $invitation ) { 2785 $group = groups_get_group( $invitation-> group_id );3019 $group = groups_get_group( $invitation->item_id ); 2786 3020 2787 3021 $item_data = array( … … 2846 3080 } 2847 3081 2848 $invitations = BP_Groups_Member::get_user_memberships( $user->ID,array(2849 ' type' => 'pending_received_invitation',3082 $invitations = groups_get_invites( array( 3083 'user_id' => $user->ID, 2850 3084 'page' => $page, 2851 3085 'per_page' => $number, … … 2853 3087 2854 3088 foreach ( $invitations as $invitation ) { 2855 $group = groups_get_group( $invitation-> group_id );3089 $group = groups_get_group( $invitation->item_id ); 2856 3090 2857 3091 $item_data = array( … … 2890 3124 ); 2891 3125 } 3126 3127 /** 3128 * Migrate invitations and requests from pre-5.0 group_members table to invitations table. 3129 * 3130 * @since 5.0.0 3131 */ 3132 function bp_groups_migrate_invitations() { 3133 global $wpdb; 3134 $bp = buddypress(); 3135 3136 $records = $wpdb->get_results( "SELECT id, group_id, user_id, inviter_id, date_modified, comments, invite_sent FROM {$bp->groups->table_name_members} WHERE is_confirmed = 0 AND is_banned = 0" ); 3137 3138 $processed = array(); 3139 $values = array(); 3140 foreach ( $records as $record ) { 3141 $values[] = $wpdb->prepare( 3142 "(%d, %d, %s, %s, %d, %d, %s, %s, %s, %d, %d)", 3143 (int) $record->user_id, 3144 (int) $record->inviter_id, 3145 '', 3146 'bp_groups_invitation_manager', 3147 (int) $record->group_id, 3148 0, 3149 ( 0 === (int) $record->inviter_id ) ? 'request' : 'invite', 3150 $record->comments, 3151 $record->date_modified, 3152 (int) $record->invite_sent, 3153 0 3154 ); 3155 $processed[] = (int) $record->id; 3156 } 3157 3158 $table_name = BP_Invitation_Manager::get_table_name(); 3159 $query = "INSERT INTO {$table_name} (user_id, inviter_id, invitee_email, class, item_id, secondary_item_id, type, content, date_modified, invite_sent, accepted) VALUES "; 3160 $query .= implode(', ', $values ); 3161 $query .= ';'; 3162 $wpdb->query( $query ); 3163 3164 $ids_to_delete = implode( ',', $processed ); 3165 if ( $ids_to_delete ) { 3166 $wpdb->query( "DELETE FROM {$bp->groups->table_name_members} WHERE ID IN ($ids_to_delete)" ); 3167 } 3168 }
Note: See TracChangeset
for help on using the changeset viewer.