Changeset 11923
- Timestamp:
- 04/01/2018 11:30:48 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 28 added
- 1 deleted
- 2 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-groups/actions/create.php
r11922 r11923 1 1 <?php 2 2 /** 3 * BuddyPress Groups Actions. 4 * 5 * Action functions are exactly the same as screen functions, however they do 6 * not have a template screen associated with them. Usually they will send the 7 * user back to the default screen after execution. 3 * Groups: Create action 8 4 * 9 5 * @package BuddyPress 10 * @subpackage Group sActions11 * @since 1.5.06 * @subpackage GroupActions 7 * @since 3.0.0 12 8 */ 13 14 // Exit if accessed directly.15 defined( 'ABSPATH' ) || exit;16 17 /**18 * Protect access to single groups.19 *20 * @since 2.1.021 */22 function bp_groups_group_access_protection() {23 if ( ! bp_is_group() ) {24 return;25 }26 27 $current_group = groups_get_current_group();28 $user_has_access = $current_group->user_has_access;29 $is_visible = $current_group->is_visible;30 $no_access_args = array();31 32 // The user can know about the group but doesn't have full access.33 if ( ! $user_has_access && $is_visible ) {34 // Always allow access to home and request-membership.35 if ( bp_is_current_action( 'home' ) || bp_is_current_action( 'request-membership' ) ) {36 $user_has_access = true;37 38 // User doesn't have access, so set up redirect args.39 } elseif ( is_user_logged_in() ) {40 $no_access_args = array(41 'message' => __( 'You do not have access to this group.', 'buddypress' ),42 'root' => bp_get_group_permalink( $current_group ) . 'home/',43 'redirect' => false44 );45 }46 }47 48 // Protect the admin tab from non-admins.49 if ( bp_is_current_action( 'admin' ) && ! bp_is_item_admin() ) {50 $user_has_access = false;51 $no_access_args = array(52 'message' => __( 'You are not an admin of this group.', 'buddypress' ),53 'root' => bp_get_group_permalink( $current_group ),54 'redirect' => false55 );56 }57 58 /**59 * Allow plugins to filter whether the current user has access to this group content.60 *61 * Note that if a plugin sets $user_has_access to false, it may also62 * want to change the $no_access_args, to avoid problems such as63 * logged-in users being redirected to wp-login.php.64 *65 * @since 2.1.066 *67 * @param bool $user_has_access True if the user has access to the68 * content, otherwise false.69 * @param array $no_access_args Arguments to be passed to bp_core_no_access() in case70 * of no access. Note that this value is passed by reference,71 * so it can be modified by the filter callback.72 */73 $user_has_access = apply_filters_ref_array( 'bp_group_user_has_access', array( $user_has_access, &$no_access_args ) );74 75 // If user has access, we return rather than redirect.76 if ( $user_has_access ) {77 return;78 }79 80 // Groups that the user cannot know about should return a 404 for non-members.81 // Unset the current group so that you're not redirected82 // to the default group tab.83 if ( ! $is_visible ) {84 buddypress()->groups->current_group = 0;85 buddypress()->is_single_item = false;86 bp_do_404();87 return;88 } else {89 bp_core_no_access( $no_access_args );90 }91 92 }93 add_action( 'bp_actions', 'bp_groups_group_access_protection' );94 9 95 10 /** … … 385 300 386 301 /** 387 * Catch and process "Join Group" button clicks.388 *389 * @since 1.0.0390 *391 * @return bool392 */393 function groups_action_join_group() {394 395 if ( !bp_is_single_item() || !bp_is_groups_component() || !bp_is_current_action( 'join' ) )396 return false;397 398 // Nonce check.399 if ( !check_admin_referer( 'groups_join_group' ) )400 return false;401 402 $bp = buddypress();403 404 // Skip if banned or already a member.405 if ( !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) && !groups_is_user_banned( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {406 407 // User wants to join a group that is not public.408 if ( bp_current_user_can( 'groups_join_group', array( 'group_id' => $bp->groups->current_group->id ) ) ) {409 if ( !groups_check_user_has_invite( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {410 bp_core_add_message( __( 'There was an error joining the group.', 'buddypress' ), 'error' );411 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) );412 }413 }414 415 // User wants to join any group.416 if ( !groups_join_group( $bp->groups->current_group->id ) )417 bp_core_add_message( __( 'There was an error joining the group.', 'buddypress' ), 'error' );418 else419 bp_core_add_message( __( 'You joined the group!', 'buddypress' ) );420 421 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) );422 }423 424 /**425 * Filters the template to load for the single group screen.426 *427 * @since 1.0.0428 *429 * @param string $value Path to the single group template to load.430 */431 bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) );432 }433 add_action( 'bp_actions', 'groups_action_join_group' );434 435 /**436 * Catch and process "Leave Group" button clicks.437 *438 * When a group member clicks on the "Leave Group" button from a group's page,439 * this function is run.440 *441 * Note: When leaving a group from the group directory, AJAX is used and442 * another function handles this. See {@link bp_legacy_theme_ajax_joinleave_group()}.443 *444 * @since 1.2.4445 *446 * @return bool447 */448 function groups_action_leave_group() {449 if ( ! bp_is_single_item() || ! bp_is_groups_component() || ! bp_is_current_action( 'leave-group' ) ) {450 return false;451 }452 453 // Nonce check.454 if ( ! check_admin_referer( 'groups_leave_group' ) ) {455 return false;456 }457 458 // User wants to leave any group.459 if ( groups_is_user_member( bp_loggedin_user_id(), bp_get_current_group_id() ) ) {460 $bp = buddypress();461 462 // Stop sole admins from abandoning their group.463 $group_admins = groups_get_group_admins( bp_get_current_group_id() );464 465 if ( 1 == count( $group_admins ) && $group_admins[0]->user_id == bp_loggedin_user_id() ) {466 bp_core_add_message( __( 'This group must have at least one admin', 'buddypress' ), 'error' );467 } elseif ( ! groups_leave_group( $bp->groups->current_group->id ) ) {468 bp_core_add_message( __( 'There was an error leaving the group.', 'buddypress' ), 'error' );469 } else {470 bp_core_add_message( __( 'You successfully left the group.', 'buddypress' ) );471 }472 473 $group = groups_get_current_group();474 $redirect = bp_get_group_permalink( $group );475 476 if ( ! $group->is_visible ) {477 $redirect = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() );478 }479 480 bp_core_redirect( $redirect );481 }482 483 /** This filter is documented in bp-groups/bp-groups-actions.php */484 bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) );485 }486 add_action( 'bp_actions', 'groups_action_leave_group' );487 488 /**489 302 * Sort the group creation steps. 490 303 * … … 524 337 do_action( 'groups_action_sort_creation_steps' ); 525 338 } 526 527 /**528 * Catch requests for a random group page (example.com/groups/?random-group) and redirect.529 *530 * @since 1.2.0531 */532 function groups_action_redirect_to_random_group() {533 534 if ( bp_is_groups_component() && isset( $_GET['random-group'] ) ) {535 $group = BP_Groups_Group::get_random( 1, 1 );536 537 bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . $group['groups'][0]->slug ) );538 }539 }540 add_action( 'bp_actions', 'groups_action_redirect_to_random_group' );541 542 /**543 * Load the activity feed for the current group.544 *545 * @since 1.2.0546 *547 * @return false|null False on failure.548 */549 function groups_action_group_feed() {550 551 // Get current group.552 $group = groups_get_current_group();553 554 if ( ! bp_is_active( 'activity' ) || ! bp_is_groups_component() || ! $group || ! bp_is_current_action( 'feed' ) )555 return false;556 557 // If group isn't public or if logged-in user is not a member of the group, do558 // not output the group activity feed.559 if ( ! bp_group_is_visible( $group ) ) {560 return false;561 }562 563 // Set up the feed.564 buddypress()->activity->feed = new BP_Activity_Feed( array(565 'id' => 'group',566 567 /* translators: Group activity RSS title - "[Site Name] | [Group Name] | Activity" */568 'title' => sprintf( __( '%1$s | %2$s | Activity', 'buddypress' ), bp_get_site_name(), bp_get_current_group_name() ),569 570 'link' => bp_get_group_permalink( $group ),571 'description' => sprintf( __( "Activity feed for the group, %s.", 'buddypress' ), bp_get_current_group_name() ),572 'activity_args' => array(573 'object' => buddypress()->groups->id,574 'primary_id' => bp_get_current_group_id(),575 'display_comments' => 'threaded'576 )577 ) );578 }579 add_action( 'bp_actions', 'groups_action_group_feed' ); -
trunk/src/bp-groups/classes/class-bp-groups-component.php
r11783 r11923 124 124 $includes = array( 125 125 'cache', 126 'actions',127 126 'filters', 128 'screens',129 127 'widgets', 130 128 'activity', … … 140 138 141 139 parent::includes( $includes ); 140 } 141 142 /** 143 * Late includes method. 144 * 145 * Only load up certain code when on specific pages. 146 * 147 * @since 3.0.0 148 */ 149 public function late_includes() { 150 // Bail if PHPUnit is running. 151 if ( defined( 'BP_TESTS_DIR' ) ) { 152 return; 153 } 154 155 if ( bp_is_groups_component() ) { 156 // Authenticated actions. 157 if ( is_user_logged_in() && 158 in_array( bp_current_action(), array( 'create', 'join', 'leave-group' ), true ) 159 ) { 160 require $this->path . 'bp-groups/actions/' . bp_current_action() . '.php'; 161 } 162 163 // Actions - RSS feed handler. 164 if ( bp_is_active( 'activity' ) && bp_is_current_action( 'feed' ) ) { 165 require $this->path . 'bp-groups/actions/feed.php'; 166 } 167 168 // Actions - Random group handler. 169 if ( isset( $_GET['random-group'] ) ) { 170 require $this->path . 'bp-groups/actions/random.php'; 171 } 172 173 // Screens - Directory. 174 if ( bp_is_groups_directory() ) { 175 require $this->path . 'bp-groups/screens/directory.php'; 176 } 177 178 // Screens - User profile integration. 179 if ( bp_is_user() ) { 180 require $this->path . 'bp-groups/screens/user/my-groups.php'; 181 182 if ( bp_is_current_action( 'invites' ) ) { 183 require $this->path . 'bp-groups/screens/user/invites.php'; 184 } 185 } 186 187 // Single group. 188 if ( bp_is_group() ) { 189 // Actions - Access protection. 190 require $this->path . 'bp-groups/actions/access.php'; 191 192 // Public nav items. 193 if ( in_array( bp_current_action(), array( 'home', 'request-membership', 'activity', 'members', 'send-invites' ), true ) ) { 194 require $this->path . 'bp-groups/screens/single/' . bp_current_action() . '.php'; 195 } 196 197 // Admin nav items. 198 if ( bp_is_item_admin() && is_user_logged_in() ) { 199 require $this->path . 'bp-groups/screens/single/admin.php'; 200 201 if ( in_array( bp_get_group_current_admin_tab(), array( 'edit-details', 'group-settings', 'group-avatar', 'group-cover-image', 'manage-members', 'membership-requests', 'delete-group' ), true ) ) { 202 require $this->path . 'bp-groups/screens/single/admin/' . bp_get_group_current_admin_tab() . '.php'; 203 } 204 } 205 } 206 207 // Theme compatibility. 208 new BP_Groups_Theme_Compat(); 209 } 210 211 // Groups notifications HTML table. 212 if ( bp_is_user_settings_notifications() ) { 213 require $this->path . 'bp-groups/screens/user/settings-email.php'; 214 } 142 215 } 143 216 -
trunk/tests/phpunit/includes/loader.php
r11885 r11923 19 19 20 20 /** 21 * Load up activityaction and screen code.21 * Load up component action and screen code. 22 22 * 23 23 * In BuddyPress, this is loaded conditionally, but PHPUnit needs all files 24 24 * loaded at the same time to prevent weird load order issues. 25 25 */ 26 add_action( 'bp_activity_includes', function() { 27 $dirs = array( 28 buddypress()->plugin_dir . 'bp-activity/actions/', 29 buddypress()->plugin_dir . 'bp-activity/screens/', 30 ); 26 $components = array( 'activity', 'groups' ); 27 foreach ( $components as $component ) { 28 add_action( "bp_{$component}_includes", function() use ( $component ) { 29 $dirs = array( 30 buddypress()->plugin_dir . 'bp-' . $component . '/actions/', 31 buddypress()->plugin_dir . 'bp-' . $component . '/screens/', 32 ); 31 33 32 foreach ( $dirs as $dir ) { 33 foreach ( glob( $dir . "*.php" ) as $file ) { 34 require $file; 34 foreach ( $dirs as $dir ) { 35 foreach ( glob( $dir . "*.php" ) as $file ) { 36 require $file; 37 } 35 38 } 36 } 37 } );39 } ); 40 }
Note: See TracChangeset
for help on using the changeset viewer.