git-svn-id: https://192.168.0.254/svn/Proyectos.ASong2U_Web/trunk@144 cd1a4ea2-8c7f-e448-aada-19d1fee9e1d6
482 lines
15 KiB
PHP
482 lines
15 KiB
PHP
<?php
|
|
|
|
/* Load JS necessary for group invitation pages */
|
|
|
|
function invite_anyone_add_js() {
|
|
global $bp;
|
|
|
|
if ( $bp->current_action == BP_INVITE_ANYONE_SLUG || ( isset( $bp->action_variables[1] ) && $bp->action_variables[1] == BP_INVITE_ANYONE_SLUG ) ) {
|
|
|
|
wp_enqueue_script( 'invite-anyone-autocomplete-js', WP_PLUGIN_URL . '/invite-anyone/group-invites/jquery.autocomplete/jquery.autocomplete-min.js', array( 'jquery' ) );
|
|
|
|
wp_register_script( 'invite-anyone-js', WP_PLUGIN_URL . '/invite-anyone/group-invites/group-invites-js.js', array( 'invite-anyone-autocomplete-js' ) );
|
|
wp_enqueue_script( 'invite-anyone-js' );
|
|
|
|
}
|
|
}
|
|
add_action( 'wp_head', 'invite_anyone_add_js', 1 );
|
|
|
|
function invite_anyone_add_group_invite_css() {
|
|
global $bp;
|
|
|
|
if ( $bp->current_action == BP_INVITE_ANYONE_SLUG || ( isset( $bp->action_variables[1] ) && $bp->action_variables[1] == BP_INVITE_ANYONE_SLUG ) ) {
|
|
$style_url = WP_PLUGIN_URL . '/invite-anyone/group-invites/group-invites-css.css';
|
|
$style_file = WP_PLUGIN_DIR . '/invite-anyone/group-invites/group-invites-css.css';
|
|
|
|
if (file_exists($style_file)) {
|
|
wp_register_style('invite-anyone-group-invites-style', $style_url);
|
|
wp_enqueue_style('invite-anyone-group-invites-style');
|
|
}
|
|
}
|
|
}
|
|
add_action( 'wp_print_styles', 'invite_anyone_add_group_invite_css' );
|
|
|
|
function invite_anyone_add_old_css() { ?>
|
|
<style type="text/css">
|
|
|
|
li a#nav-invite-anyone {
|
|
padding: 0.55em 3.1em 0.55em 0px !important;
|
|
margin-right: 10px;
|
|
background: url(<?php echo WP_PLUGIN_URL, '/invite-anyone/invite-anyone/invite_bullet.gif'; ?>) no-repeat 89% 52%;
|
|
|
|
}
|
|
</style>
|
|
<?php
|
|
}
|
|
|
|
class BP_Invite_Anyone extends BP_Group_Extension {
|
|
|
|
var $enable_nav_item = true;
|
|
var $enable_create_step = true;
|
|
var $enable_edit_item = false;
|
|
|
|
function bp_invite_anyone() {
|
|
global $bp;
|
|
|
|
$this->has_caps = true;
|
|
|
|
/* Group API Extension Properties */
|
|
$this->name = __( 'Send invitations', 'buddypress' );
|
|
$this->slug = BP_INVITE_ANYONE_SLUG;
|
|
|
|
/* Set as early in the order as possible */
|
|
$this->create_step_position = 42;
|
|
$this->nav_item_position = 71;
|
|
|
|
/* Generic check access */
|
|
if ( $this->has_caps == false ) {
|
|
$this->enable_create_step = false;
|
|
$this->enable_edit_step = false;
|
|
}
|
|
|
|
$this->enable_nav_item = $this->enable_nav_item();
|
|
$this->enable_create_step = $this->enable_nav_item();
|
|
}
|
|
|
|
function display() {
|
|
global $bp;
|
|
|
|
if ( BP_INVITE_ANYONE_SLUG == $bp->current_action && isset( $bp->action_variables[0] ) && 'send' == $bp->action_variables[0] ) {
|
|
if ( !check_admin_referer( 'groups_send_invites', '_wpnonce_send_invites' ) )
|
|
return false;
|
|
|
|
// Send the invites.
|
|
groups_send_invites( $bp->loggedin_user->id, $bp->groups->current_group->id );
|
|
|
|
do_action( 'groups_screen_group_invite', $bp->groups->current_group->id );
|
|
|
|
// Hack to imitate bp_core_add_message, since bp_core_redirect is giving me such hell
|
|
echo '<div id="message" class="updated"><p>' . __( 'Group invitation sent.', 'buddypress' ) . '</p></div>';
|
|
}
|
|
|
|
invite_anyone_create_screen_content('invite');
|
|
}
|
|
|
|
function create_screen() {
|
|
global $bp;
|
|
|
|
/* If we're not at this step, go bye bye */
|
|
if ( !bp_is_group_creation_step( $this->slug ) )
|
|
return false;
|
|
|
|
invite_anyone_create_screen_content( 'create' );
|
|
|
|
wp_nonce_field( 'groups_create_save_' . $this->slug );
|
|
}
|
|
|
|
function create_screen_save( ) {
|
|
global $bp;
|
|
|
|
/* Always check the referer */
|
|
check_admin_referer( 'groups_create_save_' . $this->slug );
|
|
|
|
/* Set method and save */
|
|
if ( bp_group_has_invites() )
|
|
$this->has_invites = true;
|
|
$this->method = 'create';
|
|
$this->save();
|
|
}
|
|
|
|
function save() {
|
|
global $bp;
|
|
|
|
/* Set error redirect based on save method */
|
|
if ( $this->method == 'create' )
|
|
$redirect_url = $bp->loggedin_user->domain . $bp->groups->slug . '/create/step/' . $this->slug;
|
|
else
|
|
$redirect_url = bp_get_group_permalink( $bp->groups->current_group ) . '/admin/' . $this->slug;
|
|
|
|
groups_send_invites( $bp->loggedin_user->id, $bp->groups->current_group->id );
|
|
|
|
if ( $this->has_invites )
|
|
bp_core_add_message( __('Group invitation sent.', 'buddypress') );
|
|
else
|
|
bp_core_add_message( __('Group created successfully.', 'buddypress') );
|
|
}
|
|
|
|
function enable_nav_item() {
|
|
global $bp;
|
|
|
|
if ( invite_anyone_group_invite_access_test() == 'anyone' )
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function widget_display() {}
|
|
}
|
|
bp_register_group_extension( 'BP_Invite_Anyone' );
|
|
|
|
|
|
function invite_anyone_catch_group_invites() {
|
|
global $bp;
|
|
|
|
if ( BP_INVITE_ANYONE_SLUG == $bp->current_action && isset( $bp->action_variables[0] ) && 'send' == $bp->action_variables[0] ) {
|
|
if ( !check_admin_referer( 'groups_send_invites', '_wpnonce_send_invites' ) )
|
|
return false;
|
|
|
|
// Send the invites.
|
|
groups_send_invites( $bp->loggedin_user->id, $bp->groups->current_group->id );
|
|
|
|
bp_core_add_message( __('Group invitation sent.', 'buddypress') );
|
|
|
|
do_action( 'groups_screen_group_invite', $bp->groups->current_group->id );
|
|
|
|
bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) . BP_INVITE_ANYONE_SLUG );
|
|
}
|
|
}
|
|
add_action( 'wp', 'invite_anyone_catch_group_invites', 1 );
|
|
|
|
function invite_anyone_create_screen_content( $event ) {
|
|
if ( !$template = locate_template( 'groups/single/invite-anyone.php', true ) ) {
|
|
include_once( 'templates/invite-anyone.php' );
|
|
}
|
|
}
|
|
|
|
/* Creates the list of members on the Sent Invite screen */
|
|
function bp_new_group_invite_member_list() {
|
|
echo bp_get_new_group_invite_member_list();
|
|
}
|
|
function bp_get_new_group_invite_member_list( $args = '' ) {
|
|
global $bp;
|
|
|
|
$defaults = array(
|
|
'group_id' => false,
|
|
'separator' => 'li'
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r, EXTR_SKIP );
|
|
|
|
if ( !$group_id )
|
|
$group_id = isset( $bp->groups->new_group_id ) ? $bp->groups->new_group_id : $bp->groups->current_group->id;
|
|
|
|
$friends = get_members_invite_list( $bp->loggedin_user->id, $group_id );
|
|
|
|
if ( $friends ) {
|
|
$invites = groups_get_invites_for_group( $bp->loggedin_user->id, $group_id );
|
|
|
|
for ( $i = 0; $i < count( $friends ); $i++ ) {
|
|
$checked = '';
|
|
if ( $invites ) {
|
|
if ( in_array( $friends[$i]['id'], $invites ) ) {
|
|
$checked = ' checked="checked"';
|
|
}
|
|
}
|
|
|
|
$items[] = '<' . $separator . '><input' . $checked . ' type="checkbox" name="friends[]" id="f-' . $friends[$i]['id'] . '" value="' . esc_html( $friends[$i]['id'] ) . '" /> ' . $friends[$i]['full_name'] . '</' . $separator . '>';
|
|
}
|
|
}
|
|
|
|
return implode( "\n", (array)$items );
|
|
}
|
|
|
|
/**
|
|
* Fetch a list of site members eligible to be invited to a group.
|
|
*
|
|
* The list is essentially a list of everyone on the site, minus the logged in user and members
|
|
* of the current group.
|
|
*
|
|
* @package Invite Anyone
|
|
* @since 1.0
|
|
*
|
|
* @param int $group_id The group_id you want to exclude
|
|
* @param str $search_terms If you want to search on username/display name
|
|
* @return array $users An array of located users
|
|
*/
|
|
function invite_anyone_invite_query( $group_id = false, $search_terms = false ) {
|
|
// Get a list of group members to be excluded from the main query
|
|
$group_members = array();
|
|
$args = array(
|
|
'group_id' => $group_id,
|
|
'exclude_admins_mods' => false
|
|
);
|
|
if ( $search_terms )
|
|
$args['search'] = $search_terms;
|
|
|
|
if ( bp_group_has_members( $args ) ) {
|
|
while ( bp_group_members() ) {
|
|
bp_group_the_member();
|
|
$group_members[] = bp_get_group_member_id();
|
|
}
|
|
}
|
|
|
|
// Don't include the logged-in user, either
|
|
$group_members[] = bp_loggedin_user_id();
|
|
|
|
// Now do a user query
|
|
// Pass a null blog id so that the capabilities check is skipped. For BP blog_id doesn't
|
|
// matter anyway
|
|
$user_query = new Invite_Anyone_User_Query( array( 'blog_id' => NULL, 'exclude' => $group_members, 'search' => $search_terms ) );
|
|
|
|
return $user_query->results;
|
|
}
|
|
|
|
/**
|
|
* Extends the WP_User_Query class to make it easier for us to search across different fields
|
|
*
|
|
* @package Invite Anyone
|
|
* @since 1.0.4
|
|
*/
|
|
class Invite_Anyone_User_Query extends WP_User_Query {
|
|
function __construct( $query = null ) {
|
|
add_action( 'pre_user_query', array( &$this, 'filter_registered_users_only' ) );
|
|
parent::__construct( $query );
|
|
}
|
|
|
|
/**
|
|
* BuddyPress has different user statuses. We need to filter the user list so only registered users are shown.
|
|
*/
|
|
function filter_registered_users_only( $query ) {
|
|
$query->query_where .= ' AND user_status = 0';
|
|
}
|
|
|
|
/**
|
|
* @see WP_User_Query::get_search_sql()
|
|
*/
|
|
function get_search_sql( $string, $cols, $wild = false ) {
|
|
$string = esc_sql( $string );
|
|
|
|
// Always search all columns
|
|
$cols = array(
|
|
'user_email',
|
|
'user_login',
|
|
'user_nicename',
|
|
'user_url',
|
|
'display_name'
|
|
);
|
|
|
|
// Always do 'both' for trailing_wild
|
|
$wild = 'both';
|
|
|
|
$searches = array();
|
|
$leading_wild = ( 'leading' == $wild || 'both' == $wild ) ? '%' : '';
|
|
$trailing_wild = ( 'trailing' == $wild || 'both' == $wild ) ? '%' : '';
|
|
foreach ( $cols as $col ) {
|
|
if ( 'ID' == $col )
|
|
$searches[] = "$col = '$string'";
|
|
else
|
|
$searches[] = "$col LIKE '$leading_wild" . like_escape($string) . "$trailing_wild'";
|
|
}
|
|
|
|
return ' AND (' . implode(' OR ', $searches) . ') AND user_status = 0';
|
|
}
|
|
}
|
|
|
|
function get_members_invite_list( $user_id = false, $group_id ) {
|
|
global $bp, $wpdb;
|
|
|
|
if ( $users = invite_anyone_invite_query( $bp->groups->current_group->id ) ) {
|
|
|
|
foreach( (array)$users as $member ) {
|
|
$user_id = $member->ID;
|
|
|
|
$display_name = bp_core_get_user_displayname( $user_id );
|
|
|
|
if ( $display_name != '' ) {
|
|
$friends[] = array(
|
|
'id' => $user_id,
|
|
'full_name' => $display_name
|
|
);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if ( !$friends )
|
|
return false;
|
|
|
|
return $friends;
|
|
}
|
|
|
|
function invite_anyone_ajax_invite_user() {
|
|
global $bp;
|
|
|
|
check_ajax_referer( 'groups_invite_uninvite_user' );
|
|
|
|
if ( !$_POST['friend_id'] || !$_POST['friend_action'] || !$_POST['group_id'] )
|
|
return false;
|
|
|
|
if ( 'invite' == $_POST['friend_action'] ) {
|
|
|
|
if ( !groups_invite_user( array( 'user_id' => $_POST['friend_id'], 'group_id' => $_POST['group_id'] ) ) )
|
|
return false;
|
|
|
|
$user = new BP_Core_User( $_POST['friend_id'] );
|
|
|
|
$group_slug = isset( $bp->groups->root_slug ) ? $bp->groups->root_slug : $bp->groups->slug;
|
|
|
|
echo '<li id="uid-' . $user->id . '">';
|
|
echo bp_core_fetch_avatar( array( 'item_id' => $user->id ) );
|
|
echo '<h4>' . bp_core_get_userlink( $user->id ) . '</h4>';
|
|
echo '<span class="activity">' . esc_html( $user->last_active ) . '</span>';
|
|
echo '<div class="action">
|
|
<a class="remove" href="' . wp_nonce_url( $bp->loggedin_user->domain . $group_slug . '/' . $_POST['group_id'] . '/invites/remove/' . $user->id, 'groups_invite_uninvite_user' ) . '" id="uid-' . esc_html( $user->id ) . '">' . __( 'Remove Invite', 'buddypress' ) . '</a>
|
|
</div>';
|
|
echo '</li>';
|
|
|
|
} else if ( 'uninvite' == $_POST['friend_action'] ) {
|
|
|
|
groups_uninvite_user( $_POST['friend_id'], $_POST['group_id'] );
|
|
|
|
}
|
|
|
|
die();
|
|
}
|
|
add_action( 'wp_ajax_invite_anyone_groups_invite_user', 'invite_anyone_ajax_invite_user' );
|
|
|
|
function invite_anyone_ajax_autocomplete_results() {
|
|
global $bp;
|
|
|
|
$return = array(
|
|
'query' => $_REQUEST['query'],
|
|
'data' => array(),
|
|
'suggestions' => array()
|
|
);
|
|
|
|
$users = invite_anyone_invite_query( $bp->groups->current_group->id, $_REQUEST['query'] );
|
|
|
|
if ( $users ) {
|
|
$suggestions = array();
|
|
$data = array();
|
|
|
|
foreach ( $users as $user ) {
|
|
$suggestions[] = $user->display_name . ' (' . $user->user_login . ')';
|
|
$data[] = $user->ID;
|
|
}
|
|
|
|
$return['suggestions'] = $suggestions;
|
|
$return['data'] = $data;
|
|
}
|
|
|
|
die( json_encode( $return ) );
|
|
}
|
|
add_action( 'wp_ajax_invite_anyone_autocomplete_ajax_handler', 'invite_anyone_ajax_autocomplete_results' );
|
|
|
|
function invite_anyone_remove_group_creation_invites( $a ) {
|
|
|
|
foreach ( $a as $key => $value ) {
|
|
if ( $key == 'group-invites' ) {
|
|
unset( $a[$key] );
|
|
}
|
|
}
|
|
return $a;
|
|
}
|
|
|
|
function invite_anyone_remove_invite_subnav() {
|
|
global $bp;
|
|
|
|
if ( invite_anyone_group_invite_access_test() == 'friends' )
|
|
return;
|
|
|
|
if ( isset( $bp->groups->group_creation_steps['group-invites'] ) )
|
|
unset( $bp->groups->group_creation_steps['group-invites'] );
|
|
|
|
// BP 1.5 / BP 1.2
|
|
$parent_slug = isset( $bp->groups->root_slug ) && isset( $bp->groups->current_group->slug ) ? $bp->groups->current_group->slug : $bp->groups->slug;
|
|
|
|
bp_core_remove_subnav_item( $parent_slug, 'send-invites' );
|
|
}
|
|
add_filter( 'groups_create_group_steps', 'invite_anyone_remove_group_creation_invites', 1 );
|
|
add_action( 'bp_setup_nav', 'invite_anyone_remove_invite_subnav', 15 );
|
|
|
|
|
|
|
|
|
|
/* Utility function to test which members the current user can invite to a group */
|
|
function invite_anyone_group_invite_access_test() {
|
|
global $current_user, $bp;
|
|
|
|
if ( !is_user_logged_in() || empty( $bp->groups->current_group ) )
|
|
return 'noone';
|
|
|
|
if ( !$iaoptions = get_option( 'invite_anyone' ) )
|
|
$iaoptions = array();
|
|
|
|
if ( bp_is_group_create() ) {
|
|
if ( empty( $iaoptions['group_invites_can_group_admin'] ) || $iaoptions['group_invites_can_group_admin'] == 'anyone' || !$iaoptions['group_invites_can_group_admin'] )
|
|
return 'anyone';
|
|
if ( $iaoptions['group_invites_can_group_admin'] == 'friends' )
|
|
return 'friends';
|
|
if ( $iaoptions['group_invites_can_group_admin'] == 'noone' )
|
|
return 'noone';
|
|
}
|
|
|
|
if ( !groups_is_user_member( $bp->loggedin_user->id, $bp->groups->current_group->id ) )
|
|
return 'noone';
|
|
|
|
if ( is_super_admin() ) {
|
|
if ( empty( $iaoptions['group_invites_can_admin'] ) || $iaoptions['group_invites_can_admin'] == 'anyone' || !$iaoptions['group_invites_can_admin'] )
|
|
return 'anyone';
|
|
if ( $iaoptions['group_invites_can_admin'] == 'friends' )
|
|
return 'friends';
|
|
if ( $iaoptions['group_invites_can_admin'] == 'noone' )
|
|
return 'noone';
|
|
} else if ( bp_group_is_admin() || bp_is_group_create() ) {
|
|
if ( empty( $iaoptions['group_invites_can_group_admin'] ) || $iaoptions['group_invites_can_group_admin'] == 'anyone' || !$iaoptions['group_invites_can_group_admin'] )
|
|
return 'anyone';
|
|
if ( $iaoptions['group_invites_can_group_admin'] == 'friends' )
|
|
return 'friends';
|
|
if ( $iaoptions['group_invites_can_group_admin'] == 'noone' )
|
|
return 'noone';
|
|
} else if ( bp_group_is_mod() ) {
|
|
if ( empty( $iaoptions['group_invites_can_group_mod'] ) || $iaoptions['group_invites_can_group_mod'] == 'anyone' || !$iaoptions['group_invites_can_group_mod'] )
|
|
return 'anyone';
|
|
if ( $iaoptions['group_invites_can_group_mod'] == 'friends' )
|
|
return 'friends';
|
|
if ( $iaoptions['group_invites_can_group_mod'] == 'noone' )
|
|
return 'noone';
|
|
} else {
|
|
if ( empty( $iaoptions['group_invites_can_group_member'] ) || $iaoptions['group_invites_can_group_member'] == 'anyone' || !$iaoptions['group_invites_can_group_member'] )
|
|
return 'anyone';
|
|
if ( $iaoptions['group_invites_can_group_member'] == 'friends' )
|
|
return 'friends';
|
|
if ( $iaoptions['group_invites_can_group_member'] == 'noone' )
|
|
return 'noone';
|
|
}
|
|
|
|
return 'noone';
|
|
}
|
|
|
|
?>
|