[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * BuddyPress Groups Classes. 4 * 5 * @package BuddyPress 6 * @subpackage GroupsClasses 7 * @since 2.1.0 8 */ 9 10 // Exit if accessed directly. 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * Adds support for user at-mentions (for users in a specific Group) to the Suggestions API. 15 * 16 * @since 2.1.0 17 */ 18 class BP_Groups_Member_Suggestions extends BP_Members_Suggestions { 19 20 /** 21 * Default arguments for this suggestions service. 22 * 23 * @since 2.1.0 24 * @var array $args { 25 * @type int $group_id Positive integers will restrict the search to members in that group. 26 * Negative integers will restrict the search to members in every other group. 27 * @type int $limit Maximum number of results to display. Default: 16. 28 * @type bool $only_friends If true, only match the current user's friends. Default: false. 29 * @type string $term The suggestion service will try to find results that contain this string. 30 * Mandatory. 31 * } 32 */ 33 protected $default_args = array( 34 'group_id' => 0, 35 'limit' => 16, 36 'only_friends' => false, 37 'term' => '', 38 'type' => '', 39 ); 40 41 42 /** 43 * Validate and sanitise the parameters for the suggestion service query. 44 * 45 * @since 2.1.0 46 * 47 * @return true|WP_Error If validation fails, return a WP_Error object. On success, return true (bool). 48 */ 49 public function validate() { 50 $this->args['group_id'] = (int) $this->args['group_id']; 51 52 /** 53 * Filters the arguments used to validate and sanitize suggestion service query. 54 * 55 * @since 2.1.0 56 * 57 * @param array $args Array of arguments for the suggestion service query. 58 * @param BP_Groups_Member_Suggestions $this Instance of the current suggestion class. 59 */ 60 $this->args = apply_filters( 'bp_groups_member_suggestions_args', $this->args, $this ); 61 62 // Check for invalid or missing mandatory parameters. 63 if ( ! $this->args['group_id'] || ! bp_is_active( 'groups' ) ) { 64 return new WP_Error( 'missing_requirement' ); 65 } 66 67 // Check that the specified group_id exists, and that the current user can access it. 68 $the_group = groups_get_group( absint( $this->args['group_id'] ) ); 69 70 if ( $the_group->id === 0 || ! $the_group->user_has_access ) { 71 return new WP_Error( 'access_denied' ); 72 } 73 74 /** 75 * Filters the validation results for the suggestion service query. 76 * 77 * @since 2.1.0 78 * 79 * @param bool|WP_Error $value True if valid, WP_Error if not. 80 * @param BP_Groups_Member_Suggestions $this Instance of the current suggestion class. 81 */ 82 return apply_filters( 'bp_groups_member_suggestions_validate_args', parent::validate(), $this ); 83 } 84 85 /** 86 * Find and return a list of username suggestions that match the query. 87 * 88 * @since 2.1.0 89 * 90 * @return array|WP_Error Array of results. If there were problems, returns a WP_Error object. 91 */ 92 public function get_suggestions() { 93 $user_query = array( 94 'count_total' => '', // Prevents total count. 95 'type' => 'alphabetical', 96 97 'group_role' => array( 'admin', 'member', 'mod' ), 98 'page' => 1, 99 'per_page' => $this->args['limit'], 100 'search_terms' => $this->args['term'], 101 'search_wildcard' => 'right', 102 ); 103 104 // Only return matches of friends of this user. 105 if ( $this->args['only_friends'] && is_user_logged_in() ) { 106 $user_query['user_id'] = get_current_user_id(); 107 } 108 109 // Positive Group IDs will restrict the search to members in that group. 110 if ( $this->args['group_id'] > 0 ) { 111 $user_query['group_id'] = $this->args['group_id']; 112 113 // Negative Group IDs will restrict the search to members in every other group. 114 } else { 115 $group_query = array( 116 'count_total' => '', // Prevents total count. 117 'type' => 'alphabetical', 118 119 'group_id' => absint( $this->args['group_id'] ), 120 'group_role' => array( 'admin', 'member', 'mod' ), 121 'page' => 1, 122 ); 123 $group_users = new BP_Group_Member_Query( $group_query ); 124 125 if ( $group_users->results ) { 126 $user_query['exclude'] = wp_list_pluck( $group_users->results, 'ID' ); 127 } else { 128 $user_query['include'] = array( 0 ); 129 } 130 } 131 132 /** 133 * Filters the arguments for the user query for the Suggestion API. 134 * 135 * @since 2.1.0 136 * 137 * @param array $user_query Array of arguments for the query. 138 * @param BP_Groups_Member_Suggestions $this Instance of the current suggestion class. 139 */ 140 $user_query = apply_filters( 'bp_groups_member_suggestions_query_args', $user_query, $this ); 141 if ( is_wp_error( $user_query ) ) { 142 return $user_query; 143 } 144 145 146 if ( isset( $user_query['group_id'] ) ) { 147 $user_query = new BP_Group_Member_Query( $user_query ); 148 } else { 149 $user_query = new BP_User_Query( $user_query ); 150 } 151 152 $results = array(); 153 foreach ( $user_query->results as $user ) { 154 $result = new stdClass(); 155 $result->ID = $user->user_nicename; 156 $result->image = bp_core_fetch_avatar( array( 'html' => false, 'item_id' => $user->ID ) ); 157 $result->name = bp_core_get_user_displayname( $user->ID ); 158 $result->user_id = $user->ID; 159 160 $results[] = $result; 161 } 162 163 /** 164 * Filters the results of the member suggestions user query. 165 * 166 * @since 2.1.0 167 * 168 * @param array $results Array of member suggestions. 169 * @param BP_Groups_Member_Suggestions $this Instance of the current suggestion class. 170 */ 171 return apply_filters( 'bp_groups_member_suggestions_get_suggestions', $results, $this ); 172 } 173 }
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 |