Skip to:
Content

BuddyPress.org

Changeset 309


Ignore:
Timestamp:
09/09/2008 06:52:13 PM (17 years ago)
Author:
apeatling
Message:

Added complete support for existing blog networks. Please see mailing list for complete overview on the new "home base" features.

Location:
trunk
Files:
106 added
4 deleted
25 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-blogs.php

    r308 r309  
    33
    44define ( 'BP_BLOGS_IS_INSTALLED', 1 );
    5 define ( 'BP_BLOGS_VERSION', '0.1' );
     5define ( 'BP_BLOGS_VERSION', '0.1.3' );
    66
    77/* These will be moved into admin configurable settings */
  • trunk/bp-core.php

    r306 r309  
    55
    66/* Define the current version number for checking if DB tables are up to date. */
    7 define( 'BP_CORE_VERSION', '0.2.3' );
     7define( 'BP_CORE_VERSION', '0.2.4' );
    88
    99/* Require all needed files */
     
    1111require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/bp-core-classes.php' );
    1212require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/bp-core-cssjs.php' );
    13 require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/bp-core-thirdlevel.php' );
    14 require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/bp-core-settingstab.php' );
    1513require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/bp-core-avatars.php' );
    1614require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/bp-core-templatetags.php' );
    17 
    18 /* If disable blog tab option is set, don't combine blog tabs by skipping blogtab file */
    19 if ( !get_site_option('bp_disable_blog_tab') ) {
    20     include_once(ABSPATH . 'wp-content/mu-plugins/bp-core/bp-core-blogtab.php');
    21 }
    22 
    23 /* If admin settings have been posted, redirect to correct function to save settings */
    24 if ( isset($_POST['submit']) && $_POST['save_admin_settings'] && is_site_admin() ) {
    25     bp_core_save_admin_settings();
    26 }
     15require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/bp-core-adminbar.php' );
     16require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/admin-mods/bp-core-remove-blogtabs.php' );
     17require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/admin-mods/bp-core-admin-styles.php' );
     18require_once( ABSPATH . 'wp-content/mu-plugins/bp-core/homebase-creation/bp-core-homebase-functions.php' );
    2719
    2820/**
     
    3325 *
    3426 * @package BuddyPress Core Core
     27 * @global $bp The global BuddyPress settings variable created in bp_core_setup_globals()
    3528 * @global $current_user A WordPress global containing current user information
    3629 * @global $current_component Which is set up in /bp-core/bp-core-catch-uri.php
     
    4639    global $current_user, $current_component, $current_action;
    4740    global $action_variables;
    48    
     41
    4942    $bp = array(
    5043        /* The user ID of the user who is currently logged in. */
     
    6861        /* The action variables for the current action eg: http://andy.domain.com/profile/edit/ [group] / [6] */
    6962        'action_variables'  => $action_variables, // type: array
     63
     64        /* The default component to use if none are set and someone visits: http://andy.domain.com/ */
     65        'default_component' => 'profile',
    7066       
    7167        /* Sets up the array container for the component navigation rendered by bp_get_nav() */
     
    9086        'message_type'      => '' // error/success
    9187    );
     88   
     89    if ( !$bp['current_component'] )
     90        $bp['current_component'] = $bp['default_component'];
    9291}
    9392add_action( 'wp', 'bp_core_setup_globals', 1 );
    94 add_action( 'admin_menu', 'bp_core_setup_globals' );
    95 
    96 /**
    97  * bp_core_setup_nav()
    98  *
    99  * Adds "Blog" to the navigation arrays for the current and logged in user.
    100  * $bp['bp_nav'] represents the main component navigation
    101  * $bp['bp_users_nav'] represents the sub navigation when viewing a users
    102  * profile other than that of the current logged in user.
     93add_action( '_admin_menu', 'bp_core_setup_globals', 1 ); // must be _admin_menu hook.
     94
     95/**
     96 * bp_core_component_exists()
     97 *
     98 * Check to see if a component with the given name actually exists.
     99 * If not, redirect to the 404.
    103100 *
    104101 * @package BuddyPress Core
    105102 * @global $bp The global BuddyPress settings variable created in bp_core_setup_globals()
    106  * @uses bp_core_is_blog() Checks to see current page is a blog page eg: /blog/ or /archives/2008/09/01/
    107  * @uses bp_is_home() Checks to see if the current user being viewed is the logged in user
    108  */
    109 function bp_core_setup_nav() {
    110     global $bp;
    111    
    112     /* Add "Blog" to the main component navigation */
    113     $bp['bp_nav'][1] = array(
    114         'id'    => 'blog',
    115         'name'  => 'Blog',
    116         'link'  => $bp['loggedin_domain'] . 'blog'
    117     );
    118    
    119     /* Add "Blog" to the sub nav for a current user */
    120     $bp['bp_users_nav'][1] = array(
    121         'id'    => 'blog',
    122         'name'  => 'Blog',
    123         'link'  => $bp['current_domain'] . 'blog'
    124     );
    125    
    126     /* This will be a check to see if profile or blog is set as the default component. */
    127     if ( $bp['current_component'] == '' ) {
    128         if ( function_exists('xprofile_setup_nav') ) {
    129             $bp['current_component'] = 'profile';
    130         } else {
    131             $bp['current_component'] = 'blog';
     103 * @return false if no, or true if yes.
     104 */
     105function bp_core_component_exists() {
     106    global $bp, $wpdb;
     107
     108    if ( $wpdb->blogid == get_usermeta( $bp['current_userid'], 'home_base' ) ) {
     109        $component_check = $bp['current_component'];
     110
     111        if ( strpos( $component_check, 'activate.php' ) )
     112            return true;
     113
     114        if ( $component_check == 'profile' )
     115            $component_check = 'xprofile';
     116
     117        if ( empty($bp[$component_check]) ) {
     118            status_header('404');
     119            load_template( TEMPLATEPATH . '/header.php');
     120            load_template( TEMPLATEPATH . '/404.php');
     121            load_template( TEMPLATEPATH . '/footer.php');
     122            die;
    132123        }
    133     /* If we are on a blog specific page, always set the current component to Blog */
    134     } else if ( bp_core_is_blog() ) {
    135         $bp['current_component'] = 'blog';
    136     }
    137    
    138     /* Set up the component options navigation for Blog */
    139     if ( $bp['current_component'] == 'blog' ) {
    140         if ( bp_is_home() ) {
    141             if ( function_exists('xprofile_setup_nav') ) {
    142                 $bp['bp_options_title'] = __('My Blog');
    143                 $bp['bp_options_nav']['blog'] = array(
    144                     ''   => array(
    145                         'name' => __('Public'),
    146                         'link' => $bp['loggedin_domain'] . 'blog/' ),
    147                     'admin'    => array(
    148                         'name' => __('Blog Admin'),
    149                         'link' => $bp['loggedin_domain'] . 'wp-admin/' )
    150                 );
    151             }
    152         } else {
    153             /* If we are not viewing the logged in user, set up the current users avatar and name */
    154             $bp['bp_options_avatar'] = bp_core_get_avatar( $bp['current_userid'], 1 );
    155             $bp['bp_options_title'] = bp_user_fullname( $bp['current_userid'], false );
    156         }
    157     }
    158 }
    159 add_action( 'wp', 'bp_core_setup_nav', 2 );
     124    }
     125}
     126add_action( 'wp', 'bp_core_component_exists', 10 );
     127
     128
     129/**
     130 * bp_core_add_settings_tab()
     131 *
     132 * Adds a custom settings tab to the home base for the user
     133 * in the admin area.
     134 *
     135 * @package BuddyPress Core
     136 * @global $menu The global WordPress admin navigation menu.
     137 */
     138function bp_core_add_settings_tab() {
     139    global $menu;
     140   
     141    $account_settings_tab = add_menu_page( __('Account'), __('Account'), 10, 'bp-core/admin-mods/bp-core-account-tab.php' );
     142}
     143add_action( 'admin_menu', 'bp_core_add_settings_tab' );
    160144
    161145/**
     
    167151 * @package BuddyPress Core
    168152 * @global $current_user WordPress global variable containing current logged in user information
    169  * @uses bp_core_is_blog() Checks to see current page is a blog page eg: /blog/ or /archives/2008/09/01/
    170  * @uses bp_is_home() Checks to see if the current user being viewed is the logged in user
    171  */
    172 function bp_core_get_loggedin_domain() {
     153 * @param optional user_id
     154 * @uses get_usermeta() WordPress function to get the usermeta for a current user.
     155 */
     156function bp_core_get_loggedin_domain( $user_id = null ) {
    173157    global $current_user;
    174158   
    175     if ( VHOST == 'yes' ) {
    176         $loggedin_domain = PROTOCOL . get_usermeta( $current_user->ID, 'source_domain' ) . '/';
    177     } else {
    178         $loggedin_domain = PROTOCOL . get_usermeta( $current_user->ID, 'source_domain' ) . '/' . get_usermeta( $current_user->ID, 'user_login' ) . '/';
    179     }
    180 
    181     return $loggedin_domain;
     159    if ( !$user_id )
     160        $user_id = $current_user->ID;
     161   
     162    /* Get the ID of the home base blog */
     163    $home_base_id = get_usermeta( $user_id, 'home_base' );
     164   
     165    return get_blog_option( $home_base_id, 'siteurl' ) . '/';
    182166}
    183167
     
    212196 *
    213197 * @package BuddyPress Core
    214  * @uses bp_core_get_primary_username() Returns the username based on http:// [username] .site.com OR http://site.com/ [username]
    215  * @uses bp_core_get_userid() Returns the user id for the username given.
    216  * @return $current_userid The user id for the user that is currently being viewed.
     198 * @global $current_blog WordPress global containing information and settings for the current blog being viewed.
     199 * @uses bp_core_get_user_home_userid() Checks to see if there is user_home usermeta set for the current_blog.
     200 * @return $current_userid The user id for the user that is currently being viewed, return zero if this is not a user home and just a normal blog.
    217201 */
    218202function bp_core_get_current_userid() {
    219     $siteuser = bp_core_get_primary_username();
    220     $current_userid = bp_core_get_userid($siteuser);
     203    global $current_blog;
     204   
     205    /* Get the ID of the current blog being viewed. */
     206    $blog_id = $current_blog->blog_id;
     207   
     208    /* Check to see if this is a user home, and if it is, get the user id */
     209    if ( !$current_userid = bp_core_get_homebase_userid( $blog_id ) )
     210        return false; // return 0 if this is a normal blog, and not a user home.
    221211   
    222212    return $current_userid;
     213}
     214
     215/**
     216 * bp_core_get_user_home_userid()
     217 *
     218 * Checks to see if there is user_home usermeta set for the current_blog.
     219 * If it is set, return the user_id, if not, return false.
     220 *
     221 * @package BuddyPress Core
     222 * @param $blog_id The ID of the blog to check user_home metadata for.
     223 * @global $wpdb WordPress DB access object.
     224 * @return $current_userid The user id for the home base.
     225 */
     226function bp_core_get_homebase_userid( $blog_id ) {
     227    global $wpdb;
     228   
     229    return $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM " . $wpdb->base_prefix . "usermeta WHERE meta_key = 'home_base' AND meta_value = %d", $blog_id ) );
     230}
     231
     232/**
     233 * bp_core_is_home_base()
     234 *
     235 * Checks a blog id to see if it is a home base or not.
     236 *
     237 * @package BuddyPress Core
     238 * @param $blog_id The ID of the blog to check user_home metadata for.
     239 * @global $wpdb WordPress DB access object.
     240 * @return $current_userid The user id for the home base.
     241 */
     242function bp_core_is_home_base( $blog_id ) {
     243    global $wpdb;
     244   
     245    if ( $wpdb->get_var( $wpdb->prepare( "SELECT umeta_id FROM " . $wpdb->base_prefix . "usermeta WHERE meta_key = 'home_base' AND meta_value = %d", $blog_id ) ) )
     246        return true;
     247   
     248    return false;
     249}
     250
     251/**
     252 * bp_core_user_has_home()
     253 *
     254 * Checks to see if a user has assigned a blog as their user_home.
     255 *
     256 * @package BuddyPress Core
     257 * @global $bp The global BuddyPress settings variable created in bp_core_setup_globals()
     258 * @uses get_usermeta() WordPress function to get the usermeta for a current user.
     259 * @return false if no, or true if yes.
     260 */
     261function bp_core_user_has_home() {
     262    global $bp;
     263
     264    if ( get_usermeta( $bp['loggedin_userid'], 'home_base' ) == '' )
     265        return false;
     266   
     267    return true;
    223268}
    224269
     
    297342    $options = array();
    298343
    299     $primary_blog = get_usermeta( $current_user->ID, 'primary_blog' );
     344    $home_base = get_usermeta( $current_user->ID, 'home_base' );
    300345   
    301346    foreach ( $blogs = get_blogs_of_user( $current_user->ID ) as $blog ) {
     
    307352        $domain = $parsed['host'];
    308353       
    309         if ( $blog->userblog_id == $primary_blog ) {
     354        if ( $blog->userblog_id == $home_base ) {
    310355            $current = ' id="primary_blog"';
    311356            $image   = ' style="background-image: url(' . get_option('home') . '/wp-content/mu-plugins/bp-core/images/member.png);
     
    378423}
    379424
    380 /**
    381  * bp_core_add_settings_tab()
    382  *
    383  * Adds a new submenu page under the Admin Settings tab for BuddyPress specific settings.
    384  *
    385  * @package BuddyPress Core
    386  * @param $add_submenu_pag str The contents of the buffer.
    387  * @uses add_submenu_page() WordPress function for adding submenu pages to existing admin area menus.
    388  */
    389 function bp_core_add_settings_tab() {
    390     add_submenu_page( 'wpmu-admin.php', "BuddyPress", "BuddyPress", 1, basename(__FILE__), "bp_core_admin_settings" );
    391 }
    392 add_action( 'admin_menu', 'bp_core_add_settings_tab' );
    393 
    394 /**
    395  * bp_core_admin_settings()
    396  *
    397  * Renders the admin area settings for BuddyPress
    398  *
    399  * @package BuddyPress Core
    400  * @uses get_site_option() Fetches sitemeta based on setting name passed
    401  */
    402 function bp_core_admin_settings() {
    403     if ( get_site_option('bp_disable_blog_tab') ) {
    404         $blog_tab_checked = ' checked="checked"';
    405     }
    406    
    407     if ( get_site_option('bp_disable_design_tab') ) {
    408         $design_tab_checked = ' checked="checked"';     
    409     }
    410    
    411 ?> 
    412     <div class="wrap">
    413        
    414         <h2><?php _e("BuddyPress Settings") ?></h2>
    415        
    416         <form action="" method="post">
    417             <table class="form-table">
    418             <tbody>
    419             <tr valign="top">
    420             <th scope="row" valign="top">Tabs</th>
    421             <td>
    422                 <input type="checkbox" value="1" name="disable_blog_tab"<?php echo $blog_tab_checked; ?> />
    423                 <label for="disable_blog_tab"> Disable merging of 'Write', 'Manage' and 'Comments' into one 'Blog' tab.</label>
    424                 <br />
    425                 <input type="checkbox" value="1" name="disable_design_tab"<?php echo $design_tab_checked; ?> />
    426                 <label for="disable_design_tab"> Disable 'Design' tab for all members except site administrators.</label>
    427             </td>
    428             </tr>
    429             </tbody>
    430             </table>
    431 
    432             <p class="submit">
    433                   <input name="submit" value="Save Changes" type="submit" />
    434             </p>
    435        
    436             <input type="hidden" name="save_admin_settings" value="1" />
    437         </form>
    438        
    439     </div>
    440 <?php
    441 }
    442 
    443 /**
    444  * bp_core_save_admin_settings()
    445  *
    446  * Saves the administration settings once the admin settings form has been posted.
    447  * Checks first to see if the current user is a site administrator.
    448  *
    449  * @package BuddyPress Core
    450  * @param $contents str The contents of the buffer.
    451  * @uses is_site_admin() WordPress function to check if current user has site admin privileges.
    452  * @uses add_site_option() WordPress function to add or update sitemeta based on passed meta name.
    453  */
    454 function bp_core_save_admin_settings() {
    455     if ( !is_site_admin() )
    456         return false;
    457 
    458     if ( !isset($_POST['disable_blog_tab']) ) {
    459         $_POST['disable_blog_tab'] = 0;
    460     }
    461     else if ( !isset($_POST['disable_design_tab']) )
    462     {
    463         $_POST['disable_design_tab'] = 0;
    464     }
    465 
    466     // temp code for now, until full settings page is added
    467     add_site_option( 'bp_disable_blog_tab', $_POST['disable_blog_tab'] );
    468     add_site_option( 'bp_disable_design_tab', $_POST['disable_design_tab'] );
    469 }
    470 
    471 // Commenting out dashboard replacement for now, until more is implemented.
    472 
    473 // /* Are we viewing the dashboard? */
    474 // if ( strpos( $_SERVER['SCRIPT_NAME'],'/index.php') ) {
    475 //  add_action( 'admin_head', 'start_dash' );
    476 // }
    477 
    478 // function start_dash($dash_contents) {   
    479 //  ob_start();
    480 //  add_action('admin_footer', 'end_dash');
    481 // }
    482 //
    483 // function replace_dash($dash_contents) {
    484 //  $filter = preg_split( '/\<div class=\"wrap\"\>[\S\s]*\<div id=\"footer\"\>/', $dash_contents );
    485 //  $filter[0] .= '<div class="wrap">';
    486 //  $filter[1] .= '</div>';
    487 // 
    488 //  echo $filter[0];
    489 //  echo render_dash();
    490 //  echo '<div style="clear: both">&nbsp;<br clear="all" /></div></div><div id="footer">';
    491 //  echo $filter[1];
    492 // }
    493 //
    494 // function end_dash() {
    495 //  $dash_contents = ob_get_contents();
    496 //  ob_end_clean();
    497 //  replace_dash($dash_contents);
    498 // }
    499 //
    500 // function render_dash() {
    501 //  $dash .= '
    502 //     
    503 //      <h2>' . __("My Activity Feed") . '</h2>
    504 //      <p>' . __("This is where your personal activity feed will go.") . '</p>
    505 //      <p>&nbsp;</p><p>&nbsp;</p>
    506 //  ';
    507 // 
    508 //  if ( is_site_admin() ) {   
    509 //      $dash .= '
    510 //         
    511 //          <h4>Admin Options</h4>
    512 //          <ul>
    513 //              <li><a href="wpmu-blogs.php">' . __("Manage Site Members") . '</a></li>
    514 //              <li><a href="wpmu-options.php">' . __("Manage Site Options") . '</a></li>
    515 //      ';
    516 //     
    517 //  }
    518 //  return $dash;   
    519 // }
     425function bp_core_replace_home_base_dashboard() {
     426    global $wpdb, $bp;
     427   
     428    if ( strpos( $_SERVER['SCRIPT_NAME'], '/index.php' ) && $wpdb->blogid == get_usermeta( $bp['current_userid'], 'home_base' ) ) {
     429        add_action( 'admin_head', 'bp_core_start_dash_replacement' );
     430    }   
     431}
     432add_action( 'admin_menu', 'bp_core_replace_home_base_dashboard' );
     433
     434function bp_core_start_dash_replacement( $dash_contents ) {
     435    ob_start();
     436    add_action('admin_footer', 'bp_core_end_dash_replacement');
     437}
     438
     439function bp_core_insert_new_dashboard( $dash_contents ) {
     440    global $bp;
     441   
     442    $filter = preg_split( '/\<div class=\"wrap\"\>[\S\s]*\<div id=\"footer\"\>/', $dash_contents );
     443    $filter[0] .= '<div class="wrap">';
     444    $filter[1] .= '</div>';
     445   
     446    echo $filter[0];
     447   
     448    require_once( ABSPATH . '/wp-content/mu-plugins/bp-core/admin-mods/bp-core-homebase-dashboard.php' );
     449   
     450    echo '<div style="clear: both">&nbsp;<br clear="all" /></div></div><div id="footer">';
     451    echo $filter[1];
     452}
     453
     454function bp_core_end_dash_replacement() {
     455    $dash_contents = ob_get_contents();
     456    ob_end_clean();
     457    bp_core_insert_new_dashboard($dash_contents);
     458}
    520459
    521460/**
     
    574513 */
    575514function bp_core_get_userurl( $uid ) {
    576     global $userdata;
    577    
    578     $ud = get_userdata($uid);
    579    
    580     if ( VHOST == 'no' )
    581         $ud->path = $ud->user_login;
    582     else
    583         $ud->path = null;
    584        
    585     $url = PROTOCOL . $ud->source_domain . '/' . $ud->path;
    586    
    587     if ( !$ud )
    588         return false;
    589    
    590     return $url;
     515    $home_base_id = get_usermeta( $uid, 'home_base' );
     516    $home_base_url = get_blog_option( $home_base_id, 'siteurl' ) . '/';
     517
     518    return $home_base_url;
    591519}
    592520
     
    637565
    638566    if ( function_exists('bp_user_fullname') )
    639         $display_name = bp_user_fullname($uid, false);
     567        $display_name = bp_user_fullname( $uid, false );
    640568    else
    641569        $display_name = $ud->display_name;
     
    646574    if ( $no_anchor )
    647575        return $display_name;
    648        
    649     if ( VHOST == 'no' )
    650         $ud->path = $ud->user_login;
    651     else
    652         $ud->path = null;
     576
     577    $home_base_id = get_usermeta( $uid, 'home_base' );
     578   
     579    if ( !$home_base_id )
     580        return false;
     581       
     582    $home_base_url = get_blog_option( $home_base_id, 'siteurl' ) . '/';
    653583   
    654584    if ( $just_link )
    655         return PROTOCOL . $ud->source_domain . '/' . $ud->path;
    656 
    657     return '<a href="' . PROTOCOL . $ud->source_domain . '/' . $ud->path . '">' . $display_name . '</a>';   
     585        return $home_base_url;
     586
     587    return '<a href="' . $home_base_url . '">' . $display_name . '</a>';   
     588}
     589
     590/**
     591 * bp_core_get_userlink_by_email()
     592 *
     593 * Returns the email address for the user based on user ID
     594 *
     595 * @package BuddyPress Core
     596 * @param $email str The email address for the user.
     597 * @uses bp_core_get_userlink() BuddyPress function to get a userlink by user ID.
     598 * @uses get_user_by_email() WordPress function to get userdata via an email address
     599 * @return str The link to the users home base. False on no match.
     600 */
     601function bp_core_get_userlink_by_email( $email ) {
     602    $user = get_user_by_email( $email );
     603    return bp_core_get_userlink( $user->ID, false, false, true );
    658604}
    659605
     
    796742
    797743    return $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type = 'page'", $page_title) );
    798 }
    799 
    800 /**
    801  * bp_core_is_blog()
    802  *
    803  * Checks to see if the current page is part of the blog.
    804  * Some example blog pages:
    805  *   - Single post, Archives, Categories, Tags, Pages, Blog Home, Search Results ...
    806  *
    807  * @package BuddyPress Core
    808  * @global $bp The global BuddyPress settings variable created in bp_core_setup_globals()
    809  * @global $cached_page_id The page id of the current page if cached
    810  * @uses is_tag() WordPress function to check if on tags page
    811  * @uses is_category() WordPress function to check if on category page
    812  * @uses is_day() WordPress function to check if on day page
    813  * @uses is_month() WordPress function to check if on month page
    814  * @uses is_year() WordPress function to check if on year page
    815  * @uses is_paged() WordPress function to check if on page
    816  * @uses is_single() WordPress function to check if on single post page
    817  * @return bool true if
    818  * @return bool false on no match.
    819  */
    820 function bp_core_is_blog() {
    821     global $bp, $cached_page_id;
    822    
    823     $blog_page_id = bp_get_page_id('Blog');
    824     if ( is_tag() || is_category() || is_day() || is_month() || is_year() || is_paged() || is_single() )
    825         return true;
    826     if ( isset($cached_page_id) && ( $blog_page_id == $cached_page_id ) )
    827         return true;
    828     if ( is_page('Blog') )
    829         return true;
    830     if ( $bp['current_component'] == 'blog' )
    831         return true;
    832        
    833     return false;
    834744}
    835745
     
    945855add_action( 'login_head', 'bp_core_record_activity' );
    946856
     857/**
     858 * bp_core_get_all_posts_for_user()
     859 *
     860 * Fetch every post that is authored by the given user for the current blog.
     861 *
     862 * @package BuddyPress Core
     863 * @global $bp WordPress user data for the current logged in user.
     864 * @global $wpdb WordPress user data for the current logged in user.
     865 * @return array of post ids.
     866 */
     867function bp_core_get_all_posts_for_user( $user_id = null ) {
     868    global $bp, $wpdb;
     869   
     870    if ( !$user_id )
     871        $user_id = $bp['current_userid'];
     872   
     873    return $wpdb->get_col( $wpdb->prepare( "SELECT post_id FROM $wpdb->posts WHERE post_author = %d AND post_status = 'publish' AND post_type = 'post'", $user_id ) );
     874}
     875
     876/**
     877 * bp_core_replace_comment_author_link()
     878 *
     879 * Replace the author link on comments to point to a user home base.
     880 *
     881 * @package BuddyPress Core
     882 * @global $comment WordPress comment global for the current comment.
     883 * @uses bp_core_get_userlink_by_email() Fetches a userlink via email address.
     884 */
     885function bp_core_replace_comment_author_link( $author ) {
     886    global $comment;
     887
     888    $bp_author_link = bp_core_get_userlink_by_email( $comment->comment_author_email );
     889   
     890    echo ( !$bp_author_link ) ? $author : $bp_author_link;
     891}
     892add_action( 'get_comment_author_link', 'bp_core_replace_comment_author_link', 10, 4 );
     893
    947894
    948895?>
  • trunk/bp-core/bp-core-avatars.php

    r304 r309  
    1717define( 'CORE_MAX_FILE_SIZE', get_site_option('fileupload_maxk') * 1024 );
    1818define( 'CORE_DEFAULT_AVATAR', get_option('siteurl') . '/wp-content/mu-plugins/bp-xprofile/images/none.gif' );
    19 
    20 /**
    21  * bp_core_blog_switcher()
    22  *
    23  * Replaces the standard blog switcher included in the WordPress core so that
    24  * BuddyPress specific icons can be used in tabs and the order can be changed.
    25  * An output buffer is used, as the function cannot be overridden or replaced
    26  * any other way.
    27  *
    28  * @package BuddyPress Core
    29  * @param $contents str The contents of the buffer.
    30  * @global $current_user obj WordPress global containing information and settings for the current user
    31  * @global $blog_id int WordPress global containing the current blog id
    32  * @return $siteuser Username for current blog or user home.
    33  */
    34 function bp_core_get_avatar( $user, $version = 1, $in_css = false ) {
     19define( 'CORE_DEFAULT_AVATAR_THUMB', get_option('siteurl') . '/wp-content/mu-plugins/bp-xprofile/images/none-thumbnail.gif' );
     20
     21function bp_core_get_avatar( $user, $version = 1, $no_tag = false, $width = null, $height = null ) {
    3522    if ( !is_int($version) )
    3623        $version = (int) $version;
     
    3926        $version = 1;
    4027   
     28    $home_base_id = get_usermeta( $user, 'home_base' );
     29    $url = get_blog_option($home_base_id, 'siteurl');
     30   
     31    if ( !$width )
     32        $width = constant('CORE_AVATAR_V' . $version . '_W');
     33   
     34    if ( !$height )
     35        $width = constant('CORE_AVATAR_V' . $version . '_H');       
     36   
    4137    $str = get_usermeta( $user, "bp_core_avatar_v$version" );
    4238   
    4339    if ( strlen($str) ) {
    44         if ( $in_css )
     40        if ( $no_tag )
    4541            return $str;
    4642        else
    47             return '<img src="' . $str . '" alt="" class="avatar" width="' . constant('CORE_AVATAR_V' . $version . '_W') . '" height="' . constant('CORE_AVATAR_V' . $version . '_H') . '" />';
     43            return '<img src="' . $url . '/' . $str . '" alt="" class="avatar" width="' . $width . '" height="' . $height . '" />';
    4844    } else {
    49         if ( $in_css )
    50             return CORE_DEFAULT_AVATAR;
     45        if ( $no_tag )
     46            return CORE_DEFAULT_AVATAR_THUMB;
    5147        else
    52             return '<img src="' . CORE_DEFAULT_AVATAR . '" alt="" class="avatar" width="' . constant('CORE_AVATAR_V' . $version . '_W') . '" height="' . constant('CORE_AVATAR_V' . $version . '_H') . '" />';
    53     }
    54 }
    55 
    56 // Load the cropper etc if we're on the right page
    57 if ( isset($_REQUEST['page']) && $_REQUEST['page'] == 'bp-xprofile.php' ) {
    58     wp_enqueue_script('cropper');
    59 }
    60 
    61 // // Override internal "get_avatar()" function to use our own where possible
    62 // // WARNING: Does NOT apply size restrictions
    63 // function bp_core_get_avatar_filter( $avatar, $id_or_email, $size, $default ) {
    64 //  $str = '';
    65 //  $ver = ( $size == 1 || $size == 2 ) ? $size : 1;
    66 // 
    67 //  if ( CORE_AVATAR_V2_W == false && CORE_AVATAR_V2_H == false )
    68 //      $ver = 1;
    69 //     
    70 //  if ( is_numeric($id_or_email) ) {
    71 //      $str = bp_core_get_avatar( $id_or_email, $ver );
    72 //  } elseif ( is_object($id_or_email) ) {
    73 //      if ( !empty($id_or_email->user_id) ) {
    74 //          $str = bp_core_get_avatar( $id_or_email->user_id, $ver );
    75 //      }
    76 //  }
    77 //
    78 //  return empty($str) ? $avatar : $str;
    79 // }
    80 // add_filter( 'get_avatar', 'bp_core_get_avatar_filter', 10, 4 );
     48            return '<img src="' . CORE_DEFAULT_AVATAR . '" alt="" class="avatar" width="' . $width . '" height="' . $height . '" />';
     49    }
     50}
     51
     52// Override internal "get_avatar()" function to use our own where possible
     53// WARNING: Does NOT apply size restrictions
     54function bp_core_get_avatar_filter( $avatar, $id_or_email, $size, $default ) {
     55    $str = '';
     56    $ver = ( $size == 1 || $size == 2 ) ? $size : 1;
     57   
     58    if ( CORE_AVATAR_V2_W == false && CORE_AVATAR_V2_H == false )
     59        $ver = 1;
     60       
     61    if ( is_numeric($id_or_email) ) {
     62        $str = bp_core_get_avatar( $id_or_email, $ver );
     63    } elseif ( is_object($id_or_email) ) {
     64        if ( !empty($id_or_email->user_id) ) {
     65            $str = bp_core_get_avatar( $id_or_email->user_id, $ver );
     66        }
     67    }
     68
     69    return empty($str) ? $avatar : $str;
     70}
     71add_filter( 'get_avatar', 'bp_core_get_avatar_filter', 10, 4 );
    8172
    8273
    8374// Main UI Rendering
    84 function bp_core_avatar_admin($message = null, $action = null) {
     75function bp_core_avatar_admin( $message = null, $action = null, $delete_action = null ) {
    8576    ?> 
    8677    <?php if ( !isset($_POST['slick_avatars_action']) && !isset($_GET['slick_avatars_action']) ) { ?>
     
    10091        <?php
    10192        if ( !$action )
    102             $action = get_option('home') . '/wp-admin/admin.php?page=bp-xprofile.php';
     93            $action = get_option('siteurl') . '/wp-admin/admin.php?page=bp-xprofile.php';
     94       
     95        if ( !$delete_action )
     96            $delete_action = get_option('siteurl') . '/wp-admin/admin.php?page=bp-xprofile.php&slick_avatars_action=delete';
    10397       
    10498        bp_core_render_avatar_upload_form($action);
     
    109103            echo '<span class="crop-img avatar">' . bp_core_get_avatar(get_current_user_id(), 1) . '</span>';
    110104            echo '<span class="crop-img avatar">' . bp_core_get_avatar(get_current_user_id(), 2) . '</span>';
    111             echo '<a href="' .  get_option('siteurl') . '/wp-admin/admin.php?page=bp-xprofile.php&slick_avatars_action=delete">Delete</a>';
     105            echo '<a href="' .  $delete_action . '">Delete</a>';
    112106        }
    113107       
     
    243237}
    244238
    245 function bp_core_render_avatar_cropper($original, $new, $action, $user_id = null, $no_form_tag = false) {
     239function bp_core_render_avatar_cropper($original, $new, $action, $user_id = null, $no_form_tag = false, $url = false) {
    246240    $size = getimagesize($new);
    247241   
    248242    if ( !$user_id )
    249243        $user_id = get_current_user_id();
    250    
    251     if ( VHOST == 'yes' ) {
    252         $url = PROTOCOL . get_usermeta( $user_id, 'source_domain' ) . '/';
    253     } else {
    254         $url = PROTOCOL . get_usermeta( $user_id, 'source_domain' ) . '/' . get_usermeta( $user_id, 'nickname' ) . '/';
     244
     245    if ( !$url ) {
     246        $home_base_id = get_usermeta( $user_id, 'home_base' );
     247        $url = get_blog_option($home_base_id, 'siteurl');
    255248    }
    256249
     
    261254    // V1 UI
    262255    if ( !$no_form_tag )
    263         echo '<form action="' . $action . '" method="post">';
     256        echo '<form action="' . $action . '" method="post" id="avatar-cropper">';
    264257
    265258    echo '<input type="hidden" name="slick_avatars_action" value="crop" />';
     
    393386}
    394387
    395 function bp_core_avatar_save( $vars, $user_id = false, $upload_dir = false ) {
     388function bp_core_avatar_save( $vars, $user_id = false, $upload_dir = false, $url = false ) {
    396389    if ( !$user_id )
    397390        $user_id = get_current_user_id();
    398391       
    399     if ( VHOST == 'yes' ) {
    400         $src = PROTOCOL . get_usermeta( $user_id, 'source_domain' ) . '/';
    401     } else {
    402         $src = PROTOCOL . get_usermeta( $user_id, 'source_domain' ) . '/' . get_usermeta( $user_id, 'nickname' ) . '/';
     392    if ( !$url ) {
     393        $home_base_id = get_usermeta( $user_id, 'home_base' );
     394        $url = get_blog_option($home_base_id, 'siteurl');
    403395    }
    404396   
     
    420412function bp_core_render_avatar_upload_form($action, $no_form_tag = false) {
    421413    if ( !$no_form_tag ) { ?>
    422     <form method="post" action="<?php echo $action ?>" enctype="multipart/form-data">
     414    <form method="post" action="<?php echo $action ?>" enctype="multipart/form-data" id="avatar-upload">
    423415<?php } ?>
    424416        <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo CORE_MAX_FILE_SIZE; ?>" />
  • trunk/bp-core/bp-core-catchuri.php

    r304 r309  
    7676    $action_variables = array_merge( array(), $action_variables );
    7777
    78     /* catch 'blog' */
    79     if ( $current_component == 'blog' )
    80         bp_catch_uri( 'blog' );
    8178}
    8279add_action( 'wp', 'bp_core_set_uri_globals', 0 );
     
    110107 */
    111108function bp_core_do_catch_uri() {
    112     global $bp_path;
     109    global $bp_path, $bp, $wpdb;
    113110
    114111    $pages = $bp_path;
     112   
     113    if ( $wpdb->blogid == get_usermeta( $bp['current_userid'], 'home_base' ) ) {
     114        if ( !file_exists( TEMPLATEPATH . "/header.php" ) || !file_exists( TEMPLATEPATH . "/footer.php" ) )
     115            wp_die( 'Please make sure your BuddyPress enabled theme includes a header.php and footer.php file.');
    115116
    116     if ( is_array( $pages ) ) {
    117         foreach( $pages as $page ) {
    118             if ( file_exists( TEMPLATEPATH . "/" . $page . ".php" ) ) {
    119                 require( TEMPLATEPATH . "/" . $page . ".php" ); die;
     117        do_action( 'get_header' );
     118        load_template( TEMPLATEPATH . "/header.php" );
     119   
     120        if ( is_array( $pages ) ) {
     121            foreach( $pages as $page ) {
     122                if ( file_exists( TEMPLATEPATH . "/" . $page . ".php" ) ) {
     123                    load_template( TEMPLATEPATH . "/" . $page . ".php" );
     124                }
     125            }
     126        } else {
     127            if ( file_exists( TEMPLATEPATH . "/" . $pages . ".php" ) ) {
     128                load_template( TEMPLATEPATH . "/" . $pages . ".php" );
     129            } else {
     130                load_template( TEMPLATEPATH . "/index.php" );
    120131            }
    121132        }
    122     } else {
    123         if ( file_exists( TEMPLATEPATH . "/" . $pages . ".php" ) ) {
    124             require( TEMPLATEPATH . "/" . $pages . ".php" ); die;
    125         } else {
    126             require( TEMPLATEPATH . "/index.php" ); die;
    127         }
     133   
     134        do_action( 'get_footer' );
     135        load_template( TEMPLATEPATH . "/footer.php" );
     136        die;
    128137    }
    129138}
  • trunk/bp-core/bp-core-classes.php

    r304 r309  
    1616    var $id;
    1717    var $avatar;
     18    var $avatar_thumb;
     19    var $avatar_mini;
    1820    var $fullname;
    1921    var $email;
     
    7779
    7880        if ( BP_XPROFILE_IS_INSTALLED ) {
    79             $this->avatar = bp_core_get_avatar( $this->id, 1 );
     81            $this->avatar = bp_core_get_avatar( $this->id, 2 );
     82            $this->avatar_thumb = bp_core_get_avatar( $this->id, 1 );
     83            $this->avatar_mini = bp_core_get_avatar( $this->id, 1, false, 25, 25 );
     84           
    8085            $this->profile_last_updated = bp_profile_last_updated_date( $this->id, false );
    8186        }
  • trunk/bp-core/bp-core-cssjs.php

    r304 r309  
    1818}
    1919add_action( 'wp_head', 'bp_core_add_js' );
    20 //add_action( 'admin_menu', 'core_add_js' );x
     20
     21/**
     22 * bp_core_add_css()
     23 *
     24 * Add the CSS required by all BP components, regardless of the current theme.
     25 *
     26 * @package BuddyPress Core
     27 * @uses get_option() Selects a site setting from the DB.
     28 */
     29function bp_core_add_css() {
     30    if ( bp_core_user_has_home() && is_user_logged_in() )
     31        echo '<link rel="stylesheet" href="' . get_option('siteurl') . '/wp-content/mu-plugins/bp-core/css/admin-bar.css" type="text/css" />';
     32}
     33add_action( 'wp_head', 'bp_core_add_css' );
     34
     35function bp_core_add_admin_js() {
     36    if ( strpos( $_GET['page'], 'bp-core' ) !== false ) {
     37        wp_enqueue_script( 'bp-account-admin-js', get_option('siteurl') . '/wp-content/mu-plugins/bp-core/js/account-admin.js' );
     38    }
     39}
     40add_action( 'admin_menu', 'bp_core_add_admin_js' );
     41
     42function bp_core_enqueue_admin_js() {
     43    if ( strpos( $_GET['page'], 'bp-core/admin-mods' ) !== false ) {
     44        wp_enqueue_script('password-strength-meter');
     45    }
     46
     47    if ( strpos( $_GET['page'], 'bp-core/homebase-creation' ) !== false ) {
     48        add_action( 'admin_head', 'bp_core_add_cropper_js' );
     49    }
     50}
     51add_action( 'admin_menu', 'bp_core_enqueue_admin_js' );
     52
     53function bp_core_enqueue_admin_css() {
     54    if ( strpos( $_GET['page'], 'bp-core/homebase-creation' ) !== false ) {
     55        wp_enqueue_style( 'bp-core-home-base-css', get_option('siteurl') . '/wp-content/mu-plugins/bp-core/css/home-base.css' );
     56    }
     57}
     58add_action( 'admin_menu', 'bp_core_enqueue_admin_css' );
  • trunk/bp-core/bp-core-templatetags.php

    r304 r309  
    4141        if ( $bp['current_userid'] != $bp['loggedin_userid'] ) {
    4242            if ( function_exists('friends_check_friendship') ) {
    43                 if ( friends_check_friendship($bp['current_userid']) && $nav_item['id'] == $bp['friends']['bp_friends_slug'] ) {
     43                if ( friends_check_friendship( $bp['current_userid'] ) == 'is_friend' && $nav_item['id'] == $bp['friends']['slug'] ) {
    4444                    $selected = ' class="current"';
    4545                } else {
     
    8989           
    9090            /* If the current action or an action variable matches the nav item id, then add a highlight CSS class. */
    91             if ( $slug == $bp['current_action'] || $slug == $bp['action_variables'][0] || ( $slug == '' && ( $bp['current_component'] == 'blog' && bp_is_blog() ) ) ) {
     91            if ( $slug == $bp['current_action'] || $slug == $bp['action_variables'][0] ) {
    9292                $selected = ' class="current"';
    9393            } else {
     
    119119    global $bp;
    120120
    121     foreach ( $bp['bp_users_nav'] as $user_nav_item ) {
     121    /* Sort the nav by key as the array has been put together in different locations */
     122    ksort($bp['bp_users_nav']);
     123
     124    foreach ( $bp['bp_users_nav'] as $user_nav_item ) {
    122125        if ( $bp['current_component'] == $user_nav_item['id'] ) {
    123126            $selected = ' class="current"';
     
    210213}
    211214
    212 function bp_is_blog() {
    213     return bp_core_is_blog();
     215function bp_my_or_name() {
     216    global $bp;
     217   
     218    if ( $bp['current_userid'] == $bp['loggedin_userid'] ) {
     219        _e('My');
     220    } else {
     221        echo $bp['bp_options_title'] . "'s";
     222    }
     223}
     224
     225function bp_you_or_name() {
     226    global $bp;
     227   
     228    if ( $bp['current_userid'] == $bp['loggedin_userid'] ) {
     229        _e('You haven\'t');
     230    } else {
     231        echo $bp['bp_options_title'] . " hasn't";
     232    }
     233}
     234
     235function bp_your_or_name() {
     236    global $bp;
     237   
     238    if ( $bp['current_userid'] == $bp['loggedin_userid'] ) {
     239        _e('Your');
     240    } else {
     241        echo $bp['bp_options_title'] . "'s";
     242    }
    214243}
    215244
  • trunk/bp-core/js/general.js

    r237 r309  
    4747    for(var i=0; i<radioButtons.length; i++) {
    4848        radioButtons[i].checked = false;
     49    }   
     50}
     51
     52/* For admin-bar */
     53sfHover = function() {
     54    var sfEls = document.getElementById("nav").getElementsByTagName("LI");
     55    for (var i=0; i<sfEls.length; i++) {
     56        sfEls[i].onmouseover=function() {
     57            this.className+=" sfhover";
     58        }
     59        sfEls[i].onmouseout=function() {
     60            this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
     61        }
    4962    }
    50    
    5163}
     64if (window.attachEvent) window.attachEvent("onload", sfHover);
  • trunk/bp-friends.php

    r304 r309  
    5555}
    5656add_action( 'wp', 'friends_setup_globals', 1 );
    57 add_action( 'admin_menu', 'friends_setup_globals' );
     57add_action( '_admin_menu', 'friends_setup_globals', 1 );
    5858
    5959
     
    6868    global $wpdb, $bp, $userdata;
    6969
    70     if ( $wpdb->blogid == $userdata->primary_blog ) {
    71         //add_menu_page( __("Friends"), __("Friends"), 1, basename(__FILE__), "friends_list" );
    72         //add_submenu_page( basename(__FILE__), __("My Friends"), __("My Friends"), 1, basename(__FILE__), "friends_list" );
    73         //add_submenu_page( basename(__FILE__), __("Friend Finder"), __("Friend Finder"), 1, "friend_finder", "friends_find" );
    74        
     70    if ( $wpdb->blogid == get_usermeta( $bp['current_userid'], 'home_base' ) ) {
    7571        /* Add the administration tab under the "Site Admin" tab for site administrators */
    7672        //add_submenu_page( 'wpmu-admin.php', __("Friends"), __("Friends"), 1, basename(__FILE__), "friends_settings" );
     
    8076    if ( ( $wpdb->get_var("show tables like '%" . $bp['friends']['table_name'] . "%'") == false ) || ( get_site_option('bp-friends-version') < BP_FRIENDS_VERSION )  )
    8177        friends_install(BP_FRIENDS_VERSION);
    82        
    8378}
    8479add_action( 'admin_menu', 'friends_add_admin_menu' );
     
    10499        'link'  => $bp['current_domain'] . $bp['friends']['slug'] . '/'
    105100    );
     101
     102    $bp['bp_options_nav'][$bp['friends']['slug']] = array(
     103        'my-friends'    => array(
     104            'name'      => __('My Friends'),
     105            'link'      => $bp['loggedin_domain'] . $bp['friends']['slug'] . '/my-friends' ),
     106        'requests'      => array(
     107            'name'      => __('Requests'),
     108            'link'      => $bp['loggedin_domain'] . $bp['friends']['slug'] . '/requests' ),
     109        'friend-finder' => array(
     110            'name'      => __('Friend Finder'),
     111            'link'      => $bp['loggedin_domain'] . $bp['friends']['slug'] . '/friend-finder' ),
     112        'invite-friend' => array(
     113            'name'      => __('Invite Friends'),
     114            'link'      => $bp['loggedin_domain'] . $bp['friends']['slug'] . '/invite-friend' )
     115    );     
    106116   
    107117    if ( $bp['current_component'] == $bp['friends']['slug'] ) {
    108118        if ( bp_is_home() ) {
    109119            $bp['bp_options_title'] = __('My Friends');
    110             $bp['bp_options_nav'][$bp['friends']['slug']] = array(
    111                 'my-friends'    => array(
    112                     'name'      => __('My Friends'),
    113                     'link'      => $bp['loggedin_domain'] . $bp['friends']['slug'] . '/my-friends' ),
    114                 'requests'      => array(
    115                     'name'      => __('Requests'),
    116                     'link'      => $bp['loggedin_domain'] . $bp['friends']['slug'] . '/requests' ),
    117                 'friend-finder' => array(
    118                     'name'      => __('Friend Finder'),
    119                     'link'      => $bp['loggedin_domain'] . $bp['friends']['slug'] . '/friend-finder' ),
    120                 'invite-friend' => array(
    121                     'name'      => __('Invite Friends'),
    122                     'link'      => $bp['loggedin_domain'] . $bp['friends']['slug'] . '/invite-friend' )
    123             );     
    124120        } else {
    125121            $bp['bp_options_avatar'] = bp_core_get_avatar( $bp['current_userid'], 1 );
     
    141137   
    142138    if ( $bp['current_component'] == $bp['friends']['slug'] && $current_blog->blog_id > 1 ) {
     139       
     140        if ( $bp['current_action'] == '' )
     141            $bp['current_action'] = 'my-friends';
     142       
    143143        switch ( $bp['current_action'] ) {
    144144            case 'my-friends':
     
    182182add_action( 'wp', 'friends_catch_action', 3 );
    183183
    184 /**************************************************************************
    185  friends_template()
    186  
    187  Set up template tags for use in templates.
    188  **************************************************************************/
    189 
    190 function friends_template() {
    191     global $bp, $friends_template;
    192    
    193     if ( $bp['current_component'] == $bp['friends']['slug'] ) {
    194         if ( $bp['current_action'] != 'friend-finder' || $bp['current_action'] != 'invite-friends' )
    195             $friends_template = new BP_Friendship_Template( $bp['current_userid'] );
    196     }
    197    
    198 }
    199 add_action( 'wp_head', 'friends_template' );
    200 
    201184
    202185/**************************************************************************
  • trunk/bp-friends/bp-friends-classes.php

    r295 r309  
    159159        global $wpdb, $bp;
    160160       
    161         $result = $wpdb->get_results( $wpdb->prepare( "SELECT id, is_confirmed FROM " . $bp['friends']['table_name'] . " WHERE (initiator_user_id = %d AND friend_user_id = %d) OR (initiator_user_id = %d AND friend_user_id = %d)", $bp['loggedin_userid'], $possible_friend_userid, $possible_friend_userid, $bp['loggedin_userid'] ) );
     161        $result = $wpdb->get_results( $wpdb->prepare( "SELECT id, is_confirmed FROM " . $bp['friends']['table_name'] . " WHERE (initiator_user_id = %d AND friend_user_id = %d) OR (initiator_user_id = %d AND friend_user_id = %d)", $loggedin_userid, $possible_friend_userid, $possible_friend_userid, $loggedin_userid ) );
    162162       
    163163        if ( $result ) {
  • trunk/bp-friends/bp-friends-cssjs.php

    r251 r309  
    1212        $_GET['page'] = null;
    1313
    14     if ( strpos( $_GET['page'], 'friends' ) !== false || $bp['current_component'] == $bp['friends']['slug'] ) {
     14    if ( $bp['current_component'] == $bp['friends']['slug'] ) {
    1515        echo '
    1616            <script src="' . get_option('siteurl') . '/wp-content/mu-plugins/bp-friends/js/general.js" type="text/javascript"></script>';
     
    1818}
    1919add_action( 'wp_head', 'friends_add_js' );
    20 add_action( 'admin_menu', 'friends_add_js' );
    21 
    22 /**************************************************************************
    23  add_css()
    24  
    25  Inserts the CSS needed to style the friends pages.
    26  **************************************************************************/   
    27 
    28 function friends_add_css()
    29 {
    30     ?>
    31    
    32     <?php
    33 }
    3420
    3521?>
  • trunk/bp-friends/bp-friends-templatetags.php

    r304 r309  
    116116
    117117function bp_has_friendships() {
    118     global $friends_template;
     118    global $bp, $friends_template;
     119
     120    $friends_template = new BP_Friendship_Template( $bp['current_userid'] );
    119121   
    120122    return $friends_template->has_friendships();
     
    147149        $template = &$friends_template->friendship->friend;
    148150   
    149     echo $template->avatar;
     151    echo $template->avatar_thumb;
    150152}
    151153    function bp_friends_user_avatar_thumb() {
     
    313315    global $bp;
    314316   
    315     if ( !$potential_friend_id )
    316         $potential_friend_id = $bp['current_userid'];
    317    
    318     if ( $bp['loggedin_userid'] == $potential_friend_id )
    319         return false;
    320    
    321     $friend_status = BP_Friends_Friendship::check_is_friend( $bp['loggedin_userid'], $potential_friend_id );
    322    
    323     echo '<div class="friendship-button" id="friendship-button-' . $potential_friend_id . '">';
    324     if ( $friend_status == 'pending' ) {
    325         _e('Friendship Requested');
    326     } else if ( $friend_status == 'is_friend') {
    327         echo '<a href="' . $bp['loggedin_domain'] . $bp['friends']['slug'] . '/remove-friend/' . $potential_friend_id . '" title="' . __('Cancel Friendship') . '" id="friend-' . $potential_friend_id . '" rel="remove" class="remove">' . __('Cancel Friendship') . '</a>';
    328     } else {
    329         echo '<a href="' . $bp['loggedin_domain'] . $bp['friends']['slug'] . '/add-friend/' . $potential_friend_id . '" title="' . __('Add Friend') . '" id="friend-' . $potential_friend_id . '" rel="add">' . __('Add Friend') . '</a>';
    330     }
    331     echo '</div>';
    332    
    333     if ( function_exists('wp_nonce_field') )
    334         wp_nonce_field('addremove_friend');
     317    if ( is_user_logged_in() ) {
     318        if ( !$potential_friend_id )
     319            $potential_friend_id = $bp['current_userid'];
     320   
     321        if ( $bp['loggedin_userid'] == $potential_friend_id )
     322            return false;
     323   
     324        $friend_status = BP_Friends_Friendship::check_is_friend( $bp['loggedin_userid'], $potential_friend_id );
     325   
     326        echo '<div class="friendship-button" id="friendship-button-' . $potential_friend_id . '">';
     327        if ( $friend_status == 'pending' ) {
     328            _e('Friendship Requested');
     329        } else if ( $friend_status == 'is_friend') {
     330            echo '<a href="' . $bp['loggedin_domain'] . $bp['friends']['slug'] . '/remove-friend/' . $potential_friend_id . '" title="' . __('Cancel Friendship') . '" id="friend-' . $potential_friend_id . '" rel="remove" class="remove">' . __('Cancel Friendship') . '</a>';
     331        } else {
     332            echo '<a href="' . $bp['loggedin_domain'] . $bp['friends']['slug'] . '/add-friend/' . $potential_friend_id . '" title="' . __('Add Friend') . '" id="friend-' . $potential_friend_id . '" rel="add">' . __('Add Friend') . '</a>';
     333        }
     334        echo '</div>';
     335   
     336        if ( function_exists('wp_nonce_field') )
     337            wp_nonce_field('addremove_friend');
     338    }
    335339}
    336340
  • trunk/bp-groups.php

    r307 r309  
    7979}
    8080add_action( 'wp', 'groups_setup_globals', 1 ); 
    81 add_action( 'admin_menu', 'groups_setup_globals' );
     81add_action( '_admin_menu', 'groups_setup_globals', 1 );
    8282
    8383
     
    9292    global $wpdb, $bp, $userdata;
    9393   
    94     if ( $wpdb->blogid == $userdata->primary_blog ) {
    95         //add_menu_page( __("Groups"), __("Groups"), 1, basename(__FILE__), "" );
     94    if ( $wpdb->blogid == get_usermeta( $bp['current_userid'], 'home_base' ) ) {
     95        /* Add the administration tab under the "Site Admin" tab for site administrators */
     96        //add_submenu_page( 'wpmu-admin.php', __("Friends"), __("Friends"), 1, basename(__FILE__), "friends_settings" );
    9697    }
    9798
     
    122123        'id'    => $bp['groups']['slug'],
    123124        'name'  => __('Groups'),
    124         'link'  => $current_domain . $bp['groups']['slug'] . '/'
     125        'link'  => $bp['current_domain'] . $bp['groups']['slug'] . '/'
     126    );
     127   
     128    $bp['bp_options_nav'][$bp['groups']['slug']] = array(
     129        'my-groups'    => array(
     130            'name'      => __('My Groups'),
     131            'link'      => $bp['loggedin_domain'] . $bp['groups']['slug'] . '/my-groups' ),
     132        'group-finder'  => array(
     133            'name'      => __('Group Finder'),
     134            'link'      => $bp['loggedin_domain'] . $bp['groups']['slug'] . '/group-finder' ),
     135        'create' => array(
     136            'name'      => __('Create a Group'),
     137            'link'      => $bp['loggedin_domain'] . $bp['groups']['slug'] . '/create' ),
     138        'invites' => array(
     139            'name'      => __('Invites'),
     140            'link'      => $bp['loggedin_domain'] . $bp['groups']['slug'] . '/invites' )
    125141    );
    126142   
     
    130146           
    131147            $bp['bp_options_title'] = __('My Groups');
    132             $bp['bp_options_nav'][$bp['groups']['slug']] = array(
    133                 'my-groups'    => array(
    134                     'name'      => __('My Groups'),
    135                     'link'      => $bp['loggedin_domain'] . $bp['groups']['slug'] . '/my-groups' ),
    136                 'group-finder'  => array(
    137                     'name'      => __('Group Finder'),
    138                     'link'      => $bp['loggedin_domain'] . $bp['groups']['slug'] . '/group-finder' ),
    139                 'create' => array(
    140                     'name'      => __('Create a Group'),
    141                     'link'      => $bp['loggedin_domain'] . $bp['groups']['slug'] . '/create' ),
    142                 'invites' => array(
    143                     'name'      => __('Invites'),
    144                     'link'      => $bp['loggedin_domain'] . $bp['groups']['slug'] . '/invites' )
    145             ); 
    146                
     148           
     149        } else if ( !bp_is_home() && !$is_single_group ) {
     150           
     151            $bp['bp_options_avatar'] = bp_core_get_avatar( $bp['current_userid'], 1 );
     152            $bp['bp_options_title'] = bp_user_fullname( $bp['current_userid'], false );
     153           
    147154        } else if ( $is_single_group ) {
    148155           
     
    401408add_action( 'wp', 'groups_catch_action', 3 );
    402409
    403 /**************************************************************************
    404  groups_template()
    405  
    406  Set up template tags for use in templates.
    407  **************************************************************************/
    408 
    409 function groups_template() {
    410     global $groups_template, $bp;
    411     global $is_single_group;
    412    
    413     if ( $bp['current_component'] == $bp['groups']['slug'] && !$is_single_group ) {
    414         $groups_template = new BP_Groups_Template( $bp['current_userid'] );
    415     } else if ( $bp['current_component'] == $bp['groups']['slug'] && $is_single_group ) {
    416         $groups_template = new BP_Groups_Template( $bp['current_userid'], $bp['current_action'] );     
    417     }
    418    
    419 }
    420 add_action( 'wp_head', 'groups_template' );
    421 
    422410
    423411/**************************************************************************
     
    456444    $avatar_error = false;
    457445
    458     if ( bp_core_check_avatar_upload($file) ) {
    459         if ( !bp_core_check_avatar_upload($file) ) {
     446    if ( core_check_avatar_upload($file) ) {
     447        if ( !core_check_avatar_upload($file) ) {
    460448            $avatar_error = true;
    461449            $avatar_error_msg = __('Your group avatar upload failed, please try again.');
    462450        }
    463451
    464         if ( !bp_core_check_avatar_size($file) ) {
     452        if ( !core_check_avatar_size($file) ) {
    465453            $avatar_error = true;
    466454            $avatar_size = size_format(1024 * CORE_MAX_FILE_SIZE);
     
    468456        }
    469457
    470         if ( !bp_core_check_avatar_type($file) ) {
     458        if ( !core_check_avatar_type($file) ) {
    471459            $avatar_error = true;
    472460            $avatar_error_msg = __('Please upload only JPG, GIF or PNG photos.');       
     
    474462
    475463        // "Handle" upload into temporary location
    476         if ( !$original = bp_core_handle_avatar_upload($file) ) {
     464        if ( !$original = core_handle_avatar_upload($file) ) {
    477465            $avatar_error = true;
    478466            $avatar_error_msg = __('Upload Failed! Your photo dimensions are likely too big.');                     
    479467        }
    480468
    481         if ( !bp_core_check_avatar_dimensions($original) ) {
     469        if ( !core_check_avatar_dimensions($original) ) {
    482470            $avatar_error = true;
    483471            $avatar_error_msg = sprintf( __('The image you upload must have dimensions of %d x %d pixels or larger.'), CORE_CROPPING_CANVAS_MAX, CORE_CROPPING_CANVAS_MAX );
    484472        }
    485473       
    486         if ( !$canvas = bp_core_resize_avatar($original) ) {
     474        if ( !$canvas = core_resize_avatar($original) ) {
    487475            $avatar_error = true;
    488476            $avatar_error_msg = __('Could not create thumbnail, try another photo.');
     
    612600            case '3':
    613601                // Image already cropped and uploaded, lets store a reference in the DB.
    614                 if ( !wp_verify_nonce($_POST['nonce'], 'slick_avatars') || !$result = bp_core_avatar_cropstore( $_POST['orig'], $_POST['canvas'], $_POST['v1_x1'], $_POST['v1_y1'], $_POST['v1_w'], $_POST['v1_h'], $_POST['v2_x1'], $_POST['v2_y1'], $_POST['v2_w'], $_POST['v2_h'], false, 'groupavatar', $group_id ) )
     602                if ( !wp_verify_nonce($_POST['nonce'], 'slick_avatars') || !$result = core_avatar_cropstore( $_POST['orig'], $_POST['canvas'], $_POST['v1_x1'], $_POST['v1_y1'], $_POST['v1_w'], $_POST['v1_h'], $_POST['v2_x1'], $_POST['v2_y1'], $_POST['v2_w'], $_POST['v2_h'], false, 'groupavatar', $group_id ) )
    615603                    return false;
    616604
  • trunk/bp-groups/bp-groups-cssjs.php

    r263 r309  
    1818}
    1919add_action( 'wp_head', 'groups_add_js' );
    20 add_action( 'admin_menu', 'groups_add_js' );
     20add_action( 'admin_head', 'groups_add_js' );
    2121
    2222/**************************************************************************
  • trunk/bp-groups/bp-groups-templatetags.php

    r304 r309  
    9999
    100100function bp_has_groups() {
    101     global $groups_template;
     101    global $groups_template, $bp;
     102    global $is_single_group;
     103       
     104    if ( !$is_single_group ) {
     105        $groups_template = new BP_Groups_Template( $bp['current_userid'] );
     106    } else {
     107        $groups_template = new BP_Groups_Template( $bp['current_userid'], $bp['current_action'] );     
     108    }
     109   
    102110    return $groups_template->has_groups();
    103111}
     
    381389                        groups_avatar_upload($_FILES);
    382390                    } else {
    383                         core_render_avatar_upload_form( '', true );     
     391                        bp_core_render_avatar_upload_form( '', true );     
    384392                    }
    385393                    ?>
  • trunk/bp-messages.php

    r307 r309  
    9292}
    9393add_action( 'wp', 'messages_setup_globals', 1 );   
    94 add_action( 'admin_menu', 'messages_setup_globals' );
     94add_action( '_admin_menu', 'messages_setup_globals', 1 );
    9595
    9696
     
    105105    global $wpdb, $bp, $userdata;
    106106
    107     if ( $wpdb->blogid == $userdata->primary_blog ) {   
    108         if ( $inbox_count = BP_Messages_Thread::get_inbox_count() ) {
    109             $count_indicator = ' <span id="awaiting-mod" class="count-1"><span class="message-count">' . $inbox_count . '</span></span>';
    110         }
    111        
    112         //add_menu_page    ( __('Messages'), sprintf( __('Messages%s'), $count_indicator ), 1, basename(__FILE__), "messages_inbox" );
    113         //add_submenu_page ( basename(__FILE__), __('Messages &rsaquo; Inbox'), __('Inbox'), 1, basename(__FILE__), "messages_inbox" );
    114         //add_submenu_page ( basename(__FILE__), __('Messages &rsaquo; Sent Messages'), __('Sent Messages'), 1, "messages_sentbox", "messages_sentbox" );   
    115         //add_submenu_page ( basename(__FILE__), __('Messages &rsaquo; Compose'), __('Compose'), 1, "messages_write_new", "messages_write_new" );
    116 
    117         // Add the administration tab under the "Site Admin" tab for site administrators
     107    if ( $wpdb->blogid == get_usermeta( $bp['current_userid'], 'home_base' ) ) {   
     108        //Add the administration tab under the "Site Admin" tab for site administrators
    118109        //add_submenu_page ( 'wpmu-admin.php', __('Messages'), __('Messages'), 1, basename(__FILE__), "messages_settings" );
    119110    }
     
    140131    );
    141132   
     133    $bp['bp_options_nav'][$bp['messages']['slug']] = array(
     134        'inbox'    => array(
     135            'name' => __('Inbox') . $count_indicator,
     136            'link' => $bp['loggedin_domain'] . $bp['messages']['slug'] . '/' ),
     137        'sentbox'  => array(
     138            'name' => __('Sent Messages'),
     139            'link' => $bp['loggedin_domain'] . $bp['messages']['slug'] . '/sentbox' ),
     140        'compose' => array(
     141            'name' => __('Compose'),
     142            'link' => $bp['loggedin_domain'] . $bp['messages']['slug'] . '/compose' )
     143    );
     144   
     145    if ( is_site_admin() ) {
     146        $bp['bp_options_nav'][$bp['messages']['slug']]['notices'] = array(
     147            'name' => __('Sent Notices'),
     148            'link' => $bp['loggedin_domain'] . $bp['messages']['slug'] . '/notices'
     149        );
     150    }
     151   
    142152    $inbox_count = BP_Messages_Thread::get_inbox_count();
    143153    $inbox_display = ( $inbox_count ) ? ' style="display:inline;"' : ' style="display:none;"';
     
    146156    if ( $bp['current_component'] == $bp['messages']['slug'] ) {
    147157        if ( bp_is_home() ) {
    148             $bp['bp_options_title'] = __('My Messages');
    149             $bp['bp_options_nav'][$bp['messages']['slug']] = array(
    150                 'inbox'    => array(
    151                     'name' => __('Inbox') . $count_indicator,
    152                     'link' => $bp['loggedin_domain'] . $bp['messages']['slug'] . '/' ),
    153                 'sentbox'  => array(
    154                     'name' => __('Sent Messages'),
    155                     'link' => $bp['loggedin_domain'] . $bp['messages']['slug'] . '/sentbox' ),
    156                 'compose' => array(
    157                     'name' => __('Compose'),
    158                     'link' => $bp['loggedin_domain'] . $bp['messages']['slug'] . '/compose' )
    159             );
    160            
    161             if ( is_site_admin() ) {
    162                 $bp['bp_options_nav'][$bp['messages']['slug']]['notices'] = array(
    163                     'name' => __('Sent Notices'),
    164                     'link' => $bp['loggedin_domain'] . $bp['messages']['slug'] . '/notices'
    165                 );
    166             }
    167            
     158            $bp['bp_options_title'] = __('My Messages');           
    168159        } else {
    169160            $bp_options_avatar = bp_core_get_avatar( $bp['current_userid'], 1 );
     
    315306}
    316307add_action( 'wp', 'messages_catch_action', 3 );
    317 
    318 /**************************************************************************
    319  messages_template()
    320  
    321  Set up template tags for use in templates.
    322  **************************************************************************/
    323 
    324 function messages_template() {
    325     global $messages_template, $bp;
    326    
    327     if ( $bp['current_component'] == $bp['messages']['slug'] ) {
    328         if ( $bp['current_action'] == 'inbox' || $bp['current_action'] == 'sentbox' || ( $bp['current_action'] == 'notices' && is_site_admin() ) )
    329             $messages_template = new BP_Messages_Template( $bp['loggedin_userid'], $bp['current_action'] );
    330     }
    331    
    332 }
    333 add_action( 'wp_head', 'messages_template' );
    334 
    335308
    336309/**************************************************************************
  • trunk/bp-messages/bp-messages-cssjs.php

    r251 r309  
    3636}
    3737add_action( 'wp_head', 'messages_add_js' );
    38 add_action( 'admin_menu', 'messages_add_js' );
    39 
    40 
    41 /**************************************************************************
    42  add_css()
    43  
    44  Inserts the CSS needed to style the messages pages.
    45  **************************************************************************/   
    46 
    47 function messages_add_css()
    48 {
    49     ?>
    50     <style type="text/css">
    51         .unread td {
    52             font-weight: bold;
    53             background: #ffffec;
    54         }
    55        
    56         #send_message_form fieldset input {
    57             width: 98%;
    58             font-size: 1.7em;
    59             padding: 4px 3px;
    60         }
    61        
    62         .message-box {
    63             border: 1px solid #eee;
    64             border-top: 3px solid #EAF3FA;
    65             padding: 15px 10px;
    66             padding-left: 135px;
    67         }
    68             .message-box .avatar-box {
    69                 float: left;
    70                 width: 110px;
    71                 margin: 0 0 0 -125px;
    72             }
    73                 .message-box .avatar-box h3 {
    74                     margin: 10px 0 5px 0;
    75                 }
    76        
    77         #message-list td {
    78             vertical-align: middle;
    79         }
    80             #message-list .is-read {
    81                 width: 1px;
    82             }
    83            
    84             #message-list .avatar {
    85                 width: 50px;
    86             }
    87            
    88                 img.avatar {
    89                     padding: 3px;
    90                     border: 1px solid #ddd;
    91                     background: #fff;
    92                 }
    93            
    94             #message-list .sender-details {
    95                
    96             }
    97                 #message-list .sender-details h3 {
    98                     margin: 0 0 3px 0;
    99                 }
    100                
    101             #message-list .sender-details {
    102                 width: 160px;
    103             }
    104            
    105             #message-list .message-details h4 {
    106                 margin: 0 0 3px 0;
    107             }
    108        
    109         div.ajax_reply, div.error-box {
    110             text-align: center;
    111             font-size: 13px;
    112             padding: 15px;
    113             border: 1px solid #eee;
    114             border-bottom: none;
    115             border-top: 3px solid #EAF3FA;
    116             background: #EAF3FA;
    117             color: #2583AD;
    118         }
    119        
    120         div.error-box {
    121             background: #FFFEDB;
    122             color: #D54E21;
    123             border-top: none;
    124         }
    125             div.div.ajax_reply img, div.error-box img { vertical-align: middle; }
    126 
    127            
    128        
    129     </style>
    130     <?php
    131 }
    132 add_action( 'admin_menu', 'messages_add_css' );
     38//add_action( 'admin_menu', 'messages_add_js' );
    13339
    13440?>
  • trunk/bp-messages/bp-messages-templatetags.php

    r304 r309  
    9797
    9898function bp_has_message_threads() {
    99     global $messages_template;
     99    global $bp, $messages_template;
     100
     101    if ( $bp['current_action'] == 'notices' && !is_site_admin() ) {
     102        wp_die('No Access');
     103    } else {
     104        $messages_template = new BP_Messages_Template( $bp['loggedin_userid'], $bp['current_action'] );
     105    }
     106   
    100107    return $messages_template->has_threads();
    101108}
     
    210217        <select name="message-type-select" id="message-type-select">
    211218            <option value=""></option>
    212             <option value="read">Read</option>
    213             <option value="unread">Unread</option>
    214             <option value="all">All</option>
     219            <option value="read"><?php _e('Read') ?></option>
     220            <option value="unread"><?php _e('Unread') ?></option>
     221            <option value="all"><?php _e('All') ?></option>
    215222        </select> &nbsp;
    216         <a href="#" id="mark_as_read">Mark as Read</a> &nbsp;
    217         <a href="#" id="mark_as_unread">Mark as Unread</a> &nbsp;
    218         <a href="#" id="delete_messages">Delete</a> &nbsp;
     223        <a href="#" id="mark_as_read"><?php _e('Mark as Read') ?></a> &nbsp;
     224        <a href="#" id="mark_as_unread"><?php _e('Mark as Unread') ?></a> &nbsp;
     225        <a href="#" id="delete_messages"><?php _e('Delete') ?></a> &nbsp;
    219226<?php   
    220227}
     
    224231   
    225232    if ( $messages_template->thread->is_active ) {
    226         echo "<strong>Currently Active</strong>";
     233        echo "<strong>";
     234        _e('Currently Active');
     235        echo "</strong>";
    227236    }
    228237}
     
    281290
    282291    if ( is_array($closed_notices) ) {
    283         if ( !in_array( $notice->id, $closed_notices ) ) {
     292        if ( !in_array( $notice->id, $closed_notices ) && $notice->id ) {
    284293            ?>
    285294            <div class="notice" id="<?php echo $notice->id ?>">
  • trunk/bp-xprofile.php

    r304 r309  
    9797}
    9898add_action( 'wp', 'xprofile_setup_globals', 1 );   
    99 add_action( 'admin_menu', 'xprofile_setup_globals' );
     99add_action( '_admin_menu', 'xprofile_setup_globals', 1 );
    100100
    101101
     
    110110    global $wpdb, $bp, $groups, $userdata;
    111111   
    112     if ( $wpdb->blogid == $userdata->primary_blog ) {
    113         //add_menu_page( __('Profile'), __('Profile'), 1, basename(__FILE__), 'xprofile_avatar_admin' );
    114         //add_submenu_page( basename(__FILE__), __('Profile &rsaquo; Avatar'), __('Avatar'), 1, basename(__FILE__), 'xprofile_avatar_admin' );     
    115         //add_options_page( __('Profile'), __('Profile'), 1, basename(__FILE__), 'xprofile_add_settings' );     
    116        
    117         //$groups = BP_XProfile_Group::get_all();
    118 
    119         // for ( $i=0; $i < count($groups); $i++ ) {
    120         //          if ( $groups[$i]->fields ) {
    121         //              add_submenu_page( basename(__FILE__), __('Profile') . '  &rsaquo; ' . $groups[$i]->name, $groups[$i]->name, 1, "xprofile_" . $groups[$i]->name, "xprofile_edit" );     
    122         //          }
    123         //      }
    124         // 
     112    if ( $wpdb->blogid == get_usermeta( $bp['current_userid'], 'home_base' ) ) {
     113        add_menu_page( __('Profile'), __('Profile'), 1, basename(__FILE__), 'bp_core_avatar_admin' );
     114        add_submenu_page( basename(__FILE__), __('Profile &rsaquo; Avatar'), __('Avatar'), 1, basename(__FILE__), 'xprofile_avatar_admin' );       
     115        add_options_page( __('Profile'), __('Profile'), 1, basename(__FILE__), 'xprofile_add_settings' );       
     116       
     117        $groups = BP_XProfile_Group::get_all();
     118
     119        for ( $i=0; $i < count($groups); $i++ ) {
     120            if ( $groups[$i]->fields ) {
     121                add_submenu_page( basename(__FILE__), __('Profile') . '  &rsaquo; ' . $groups[$i]->name, $groups[$i]->name, 1, "xprofile_" . $groups[$i]->name, "xprofile_edit" );     
     122            }
     123        }
     124    }               
     125
     126    if ( is_site_admin() ) {
    125127        wp_enqueue_script( 'jquery.tablednd', '/wp-content/mu-plugins/bp-core/js/jquery/jquery.tablednd.js', array( 'jquery' ), '0.4' );
    126        
     128   
    127129        /* Add the administration tab under the "Site Admin" tab for site administrators */
    128130        add_submenu_page( 'wpmu-admin.php', __("Profiles"), __("Profiles"), 1, "xprofile_settings", "xprofile_admin" );
    129131    }
    130    
     132
    131133    /* Need to check db tables exist, activate hook no-worky in mu-plugins folder. */
    132134    if ( ( $wpdb->get_var("show tables like '%" . $bp['xprofile']['table_name_groups'] . "%'") == false ) || ( get_site_option('bp-xprofile-version') < BP_XPROFILE_VERSION )  )
     
    135137}
    136138add_action( 'admin_menu', 'xprofile_add_admin_menu' );
    137 
    138 
    139 /**************************************************************************
    140  xprofile_admin_setup()
    141  
    142  Setup CSS, JS and other things needed for the admin area of the xprofile component.
    143 **************************************************************************/
    144 
    145 function xprofile_admin_setup() {
    146     add_action( 'admin_head', 'xprofile_add_css' );
    147     add_action( 'admin_head', 'xprofile_add_js' );
    148     add_action( 'admin_head', 'bp_core_add_cropper_js' );
    149 }
    150 add_action( 'admin_menu', 'xprofile_admin_setup' );
    151139
    152140
     
    171159        'link'  => $bp['current_domain'] . $bp['xprofile']['slug']
    172160    );
    173 
     161   
     162    $bp['bp_options_nav'][$bp['xprofile']['slug']] = array(
     163        'public'        => array(
     164            'name' => __('Public'),
     165            'link' => $bp['loggedin_domain'] . $bp['xprofile']['slug'] . '/' ),
     166        'edit'          => array(
     167            'name' => __('Edit Profile'),
     168            'link' => $bp['loggedin_domain'] . $bp['xprofile']['slug'] . '/edit' ),
     169        'change-avatar' => array(
     170            'name' => __('Change Avatar'),
     171            'link' => $bp['loggedin_domain'] . $bp['xprofile']['slug'] . '/change-avatar' )
     172    );
     173   
    174174    if ( $bp['current_component'] == $bp['xprofile']['slug'] ) {
    175175        if ( bp_is_home() ) {
    176176            $bp['bp_options_title'] = __('My Profile');
    177             $bp['bp_options_nav'][$bp['xprofile']['slug']] = array(
    178                 ''         => array(
    179                     'name' => __('Public'),
    180                     'link' => $bp['loggedin_domain'] . $bp['xprofile']['slug'] . '/' ),
    181                 'edit'          => array(
    182                     'name' => __('Edit Profile'),
    183                     'link' => $bp['loggedin_domain'] . $bp['xprofile']['slug'] . '/edit' ),
    184                 'change-avatar' => array(
    185                     'name' => __('Change Avatar'),
    186                     'link' => $bp['loggedin_domain'] . $bp['xprofile']['slug'] . '/change-avatar' )
    187             );
    188177        } else {
    189178            $bp['bp_options_avatar'] = bp_core_get_avatar( $bp['current_userid'], 1 );
     
    206195   
    207196    if ( $bp['current_component'] == $bp['xprofile']['slug'] && $current_blog->blog_id > 1 ) {
    208         if ( !$bp['current_action'] ) {
     197
     198        if ( $bp['current_action'] == 'public' ) {
    209199            bp_catch_uri( 'profile/index' );
    210200        } else if ( $bp['current_action'] == 'edit' && $bp['loggedin_userid'] == $bp['current_userid'] ) {
     
    213203            add_action( 'wp_head', 'bp_core_add_cropper_js' );
    214204            bp_catch_uri( 'profile/change-avatar' );
     205        } else if ( $bp['current_action'] == 'delete-avatar' && $bp['loggedin_userid'] == $bp['current_userid'] ) {
     206            bp_core_delete_avatar();
     207            add_action( 'wp_head', 'bp_core_add_cropper_js' );
     208            bp_catch_uri( 'profile/change-avatar' );
    215209        } else {
     210            $bp['current_action'] = 'public';
    216211            bp_catch_uri( 'profile/index' );
    217212        }
     
    219214}
    220215add_action( 'wp', 'xprofile_catch_action', 3 );
    221 
    222 
    223 /**************************************************************************
    224  xprofile_profile_template()
    225  
    226  Set up template tags for use in templates.
    227  **************************************************************************/
    228 
    229 function xprofile_profile_template() {
    230     global $profile_template, $bp;
    231    
    232     if ( $bp['current_component'] == $bp['xprofile']['slug'] ) {
    233         $profile_template = new BP_XProfile_Template($bp['current_userid']);
    234     }
    235 }
    236 add_action( 'wp_head', 'xprofile_profile_template' );
    237216
    238217/**************************************************************************
     
    372351        </p>
    373352       
    374     </div>
     353    </div> 
    375354<?php
    376355}
     
    391370}
    392371
     372/**************************************************************************
     373 xprofile_remove_data_on_blog_deletion()
     374 
     375 Removes all profile data from the DB if the admin deletes a Home Base.
     376 **************************************************************************/
     377
     378function xprofile_remove_data_on_blog_deletion( $blog_id ) {
     379    global $wpdb, $bp;
     380
     381    /* Only delete profile data if we are removing a home base */
     382    if ( $user_id = bp_core_get_homebase_userid( $blog_id ) ) {
     383        BP_XProfile_ProfileData::delete_data_for_user( $user_id );
     384       
     385        // delete any avatar files.
     386        @unlink( get_usermeta( $user_id, 'bp_core_avatar_v1_path' ) );
     387        @unlink( get_usermeta( $user_id, 'bp_core_avatar_v2_path' ) );
     388       
     389        // unset the usermeta for avatars from the usermeta table.
     390        delete_usermeta( $user_id, 'bp_core_avatar_v1' );
     391        delete_usermeta( $user_id, 'bp_core_avatar_v1_path' );
     392        delete_usermeta( $user_id, 'bp_core_avatar_v2' );
     393        delete_usermeta( $user_id, 'bp_core_avatar_v2_path' );
     394    }
     395}
     396add_action( 'delete_blog', 'xprofile_remove_data_on_blog_deletion', 1 );
    393397
    394398?>
  • trunk/bp-xprofile/bp-xprofile-classes.php

    r304 r309  
    461461                }
    462462               
    463                 $html .= '<span class="signup-description">' . $this->desc . '</span>';             
    464                 $html .= '</div>';
    465                
    466463                if ( !$this->is_required ) {
    467                     $html .= '<a href="javascript:clear(\'field_' . $this->id . '\');"><img src="' . $bp['xprofile']['image_base'] . '/cross.gif" alt="Clear" /> Clear</a>';
    468                 }
     464                    $html .= '<a class="clear-value" style="text-decoration: none;" href="javascript:clear(\'field_' . $this->id . '\');"><img src="' . $bp['xprofile']['image_base'] . '/cross.gif" alt="Clear" /> Clear</a>';
     465                }
     466               
     467                $html .= '<span class="signup-description">' . $this->desc . '</span>';
     468                $html .= '<div class="clear"></div></div>';
    469469               
    470470            break;
    471471           
    472472            case 'checkbox':
    473                 $value = explode( ",", $value );
    474                
    475473                $options = $this->get_children();
    476                
     474       
    477475                $html .= '<div class="checkbox signup-field" id="field_' . $this->id . '"><span class="signup-label">' . $asterisk . $this->name . ':</span>' . $this->message;
    478476               
    479                 $option_values = BP_XProfile_ProfileData::get_value_byid($options[0]->parent_id);
    480                 $option_values = unserialize($option_values);
    481                
     477                if ( $value ) {
     478                    $option_values = unserialize($value);
     479                } else {
     480                    $option_values = BP_XProfile_ProfileData::get_value_byid($options[0]->parent_id);
     481                    $option_values = unserialize($option_values);
     482                }
     483
    482484                for ( $k = 0; $k < count($options); $k++ ) {   
    483485                    for ( $j = 0; $j < count($option_values); $j++ ) {
     
    493495               
    494496                $html .= '<span class="signup-description">' . $this->desc . '</span>';             
    495                 $html .= '</div>';
     497                $html .= '<div class="clear"></div></div>';
    496498               
    497499            break;
     
    11391141        return $last_updated;
    11401142    }
     1143   
     1144    function delete_data_for_user( $user_id ) {
     1145        global $wpdb, $bp;
     1146       
     1147        return $wpdb->query( $wpdb->prepare( "DELETE FROM " . $bp['xprofile']['table_name_data'] . " WHERE user_id = %d", $user_id ) );
     1148       
     1149    }
    11411150}
    11421151?>
  • trunk/bp-xprofile/bp-xprofile-cssjs.php

    r251 r309  
    22
    33function xprofile_add_signup_css() {
    4     if ( $_SERVER['SCRIPT_NAME'] == '/wp-signup.php' ) {
    5     ?>
    6         <style type="text/css">
    7        
    8             table#extraFields td label,
    9             div.radio span,
    10             div.checkbox span {
    11                 font-weight: bold;
    12                 display: block;
    13                 float: left;
    14                 width: 115px;
    15             }
    16            
    17             table#extraFields td input {
    18                 font-size: 24px;
    19                 width: 280px;
    20             }
    21            
    22             table#extraFields td textarea {
    23                 width: 280px;
    24                 height: 120px;
    25             }
    26            
    27             table#extraFields td select {
    28                 width: 280px;
    29             }
    30            
    31             table#extraFields td div.datefield select {
    32                 width: auto;
    33             }
    34            
    35             table#extraFields td div.radio label,
    36             table#extraFields td div.checkbox label {
    37                 display: inline;
    38                 font-weight: normal;
    39                 float: none;
    40             }
    41            
    42             table#extraFields td div.radio input,
    43             table#extraFields td div.checkbox input {
    44                 width: auto;
    45             }
    46            
    47             span.desc {
    48                 margin-left: 115px;
    49                 font-weight: normal;
    50             }
    51            
    52             div.error {
    53                 font-weight: bold;
    54                 margin: 10px 0 10px 113px;
    55             }
    56            
    57         </style>
    58         <?php       
    59     }
     4    if ( $_SERVER['SCRIPT_NAME'] == '/wp-signup.php' )
     5        echo '<link rel="stylesheet" href="' . get_option('siteurl') . '/wp-content/mu-plugins/bp-xprofile/css/signup.css" type="text/css" />';
    606}
    617add_action( 'wp_head', 'xprofile_add_signup_css' );
    628
    639
    64 function xprofile_add_css() {
    65     global $userdata, $wpdb;
    66    
    67     ?>
    68     <style type="text/css">
    69 
    70     tr.header td {
    71         border-bottom: 2px solid #eee;
    72         font-weight: bold;
    73     }
    74    
    75     tr.core td { color: #999; }
    76    
    77     thead tr th {
    78         font-size: 16px;
    79     }
    80        
    81         #profilePicture {
    82             margin: 0 0 0 -280px;
    83             float: left;
    84             width: 280px;
    85         }
    86 
    87         #currentPicture {
    88             padding: 15px;
    89             width: 280px;
    90             margin-left: 280px;
    91         }
    92        
    93         #currentPicture img, #otherPictures img {
    94             border: 1px solid #ccc;
    95             padding: 4px;
    96             background: #fff;
    97         }
    98             #otherPictures img:hover {
    99                 background: #f0f0f0;
    100             }
    101        
    102         #currentPicture a, #otherPictures a { border: none; }
    103        
    104         #otherPictures {
    105             float: right;
    106             padding: 20px;
    107             margin-left: 300px;
    108             margin-top: -5px;
    109         }
    110        
    111         #otherPictures ul {
    112             list-style: none;
    113             margin: 0;
    114             padding: 0;
    115         }
    116             #otherPictures ul li {
    117                 float: left;
    118                 margin: 0 10px 10px 0;
    119             }
    120        
    121         #profilePicture form {
    122             border: 1px solid #ccc;
    123             width: 255px;
    124             margin-top: 20px;
    125             padding: 5px;
    126         }
    127             #profilePicture form h3 {
    128                 background: #fafafa;
    129                 margin: 0 0 15px 0;
    130                 padding: 10px;
    131             }
    132        
    133         ul.forTab {
    134             list-style: none;
    135             padding: 0;
    136             margin: 0 0 0 1em;
    137         }
    138             ul.forTab li {
    139                 margin: 0 0 1em 0;
    140             }
    141        
    142                 ul.forTab li label {
    143                     display: block;
    144                    
    145                 }
    146        
    147                 ul.forTab li input {
    148                     font-size: 1.4em;
    149                 }
    150        
    151         p.success { background: green;}
    152         p.err {
    153             border-top: 2px solid red;
    154             border-bottom: 2px solid red;
    155             color: red;
    156             padding: 5px 0;
    157             width: 40%;
    158         }
    159        
    160         span.desc, span.signup-description {
    161             display: block;
    162             font-size: 11px;
    163             color: #555;
    164         }
    165 
    166         select.multi-select{
    167             width:90%;
    168             height:10em !important;
    169         }
    170 
    171     ul.multi-checkbox {
    172         margin: 0 5px 0 0px;
    173         padding: .5em .9em;
    174         height: 10em;
    175         overflow: auto;
    176         list-style: none;
    177         border: solid 1px #ccc;
    178         width:90%;           
    179     }
    180 
    181     ul.multi-checkbox li{
    182         padding: 0;
    183         margin: 0;
    184     }
    185 
    186     div.options-box {
    187         margin-left: 20px !important;
    188         margin-right: 10px !important;
    189         border-left: 4px solid #EAF3FA;
    190         padding-left: 15px;
    191     }
    192 
    193     th a {
    194         background: #fff;
    195         padding: 2px 5px;
    196         -moz-border-radius: 3px;
    197         -khtml-border-radius: 3px;
    198         -webkit-border-radius: 3px;
    199         border-radius: 3px;
    200         top: -2px;
    201     }
    202 
    203     </style>
    204     <?php
    205     //}
    206 }
    207 
    208 function xprofile_add_js() {
     10function xprofile_add_admin_css() {
    20911    if ( strpos( $_GET['page'], 'xprofile' ) !== false ) {
    210     ?>
    211         <script type="text/javascript">
    212             var ajaxurl = '<?php echo get_option('siteurl') . "/wp-admin/admin-ajax.php"; ?>';
    213        
    214             function add_option(forWhat) {
    215                 var holder = document.getElementById(forWhat + "_more");
    216                 var theId = document.getElementById(forWhat + '_option_number').value;
    217            
    218                 var newDiv = document.createElement('p');
    219                 newDiv.setAttribute('id', forWhat + '_div' + theId);
    220            
    221                 var newOption = document.createElement('input');
    222                 newOption.setAttribute('type', 'text');
    223                 newOption.setAttribute('name', forWhat + '_option[' + theId + ']');
    224                 newOption.setAttribute('id', forWhat + '_option' + theId);
    225            
    226                 var label = document.createElement('label');
    227                 label.setAttribute('for', forWhat + '_option' + theId);
    228                
    229                 var txt = document.createTextNode("Option " + theId + ": ");
    230                 label.appendChild(txt);
    231                
    232                 var isDefault = document.createElement('input');
    233                
    234                 if(forWhat == 'checkbox' || forWhat == 'multiselectbox') {
    235                     isDefault.setAttribute('type', 'checkbox');
    236                     isDefault.setAttribute('name', 'isDefault_' + forWhat + '_option[' + theId + ']');
    237                 } else {
    238                     isDefault.setAttribute('type', 'radio');
    239                     isDefault.setAttribute('name', 'isDefault_' + forWhat + '_option');                 
    240                 }
    241                
    242                 isDefault.setAttribute('value', theId);
    243            
    244                 var label1 = document.createElement('label');
    245                 var txt1 = document.createTextNode(" Default Value ");
    246                
    247                 label1.appendChild(txt1);
    248                 label1.setAttribute('for', 'isDefault_' + forWhat + '_option[]');
    249                 toDelete = document.createElement('a');
    250                
    251                 toDeleteText = document.createTextNode('[x]');
    252                 toDelete.setAttribute('href',"javascript:hide('" + forWhat + '_div' + theId + "')");
    253                
    254                 toDelete.setAttribute('class','delete');
    255 
    256                 toDelete.appendChild(toDeleteText);
    257    
    258                 newDiv.appendChild(label);
    259                 newDiv.appendChild(newOption);
    260                 newDiv.appendChild(document.createTextNode(" "));
    261                 newDiv.appendChild(isDefault);
    262                 newDiv.appendChild(label1);
    263                 newDiv.appendChild(toDelete);   
    264                 holder.appendChild(newDiv);
    265                
    266                
    267                 theId++
    268                 document.getElementById(forWhat + "_option_number").value = theId;
    269             }
    270            
    271             function show_options(forWhat) {
    272                 document.getElementById("radio").style.display = "none";
    273                 document.getElementById("selectbox").style.display = "none";
    274                 document.getElementById("multiselectbox").style.display = "none";
    275                 document.getElementById("checkbox").style.display = "none";
    276                
    277                 if(forWhat == "radio") {
    278                     document.getElementById("radio").style.display = "";
    279                 }
    280                
    281                 if(forWhat == "selectbox") {
    282                     document.getElementById("selectbox").style.display = "";                       
    283                 }
    284                
    285                 if(forWhat == "multiselectbox") {
    286                     document.getElementById("multiselectbox").style.display = "";                       
    287                 }
    288                
    289                 if(forWhat == "checkbox") {
    290                     document.getElementById("checkbox").style.display = "";                     
    291                 }
    292             }
    293            
    294             function reorderFields(table, row, field_ids) {
    295                 jQuery.post( ajaxurl, {
    296                     action: 'xprofile_reorder_fields',
    297                     'cookie': encodeURIComponent(document.cookie),
    298                     '_wpnonce': jQuery("input#_wpnonce").val(),
    299                     'group': table.id.split('_')[1],
    300                     'row': row,
    301                     'field_ids': field_ids
    302                     },
    303                     function(response) {
    304                        
    305                     },
    306                     1250
    307                 );
    308             }
    309            
    310             function hide(id) {
    311                 if ( !document.getElementById(id) ) return false;
    312                
    313                 document.getElementById(id).style.display = "none";
    314                 document.getElementById(id).value = '';
    315             }
    316            
    317             // Set up deleting options ajax
    318             jQuery(document).ready( function() {
    319                 var links = jQuery("a.ajax-option-delete");
    320                
    321                 jQuery.each(links,
    322                     function(link, val) {
    323                         link.click(
    324                             function() {
    325                             }
    326                         );
    327                     }
    328                 );
    329                
    330                 jQuery("a.ajax-option-delete").click(
    331                     function() {
    332                         alert(ajaxUrl);
    333                         alert("test");
    334                         return false;
    335                         var theId = this.id.split('-');
    336                         theId = theId[1];
    337                        
    338                         jQuery.post( ajaxurl, {
    339                             action: 'xprofile_delete_option',
    340                             'cookie': encodeURIComponent(document.cookie),
    341                             '_wpnonce': jQuery("input#_wpnonce").val(),
    342                            
    343                             'option_id': theId
    344                         },
    345                         function(response)
    346                         {
    347                             alert(response);
    348                         });
    349                    
    350                        
    351                     }
    352                 );             
    353             });
    354         </script>
    355        
    356 <?php
     12        echo '<link rel="stylesheet" href="' . get_option('siteurl') . '/wp-content/mu-plugins/bp-xprofile/css/admin.css" type="text/css" />';
    35713    }
    35814}
     15add_action( 'admin_head', 'xprofile_add_admin_css' );
     16
     17
     18function xprofile_add_admin_js() {
     19    if ( strpos( $_GET['page'], 'xprofile' ) !== false ) {
     20        wp_enqueue_script( 'bp-xprofile-admin-js', get_option('siteurl') . "/wp-content/mu-plugins/bp-xprofile/js/admin.js" );
     21        add_action( 'admin_head', 'bp_core_add_cropper_js' );
     22    }
     23}
     24add_action( 'admin_menu', 'xprofile_add_admin_js' );
     25
    35926?>
  • trunk/bp-xprofile/bp-xprofile-signup.php

    r304 r309  
    1212    /* Fetch the fields needed for the signup form */
    1313    $fields = BP_XProfile_Field::get_signup_fields();
    14    
     14
    1515    if ( $fields ) {
    1616    ?>
     
    101101
    102102function xprofile_validate_signup_fields() {
    103     global $bp_xprofile_callback, $avatar_error, $avatar_error_msg;
    104    
     103    global $bp_xprofile_callback, $avatar_error, $avatar_error_msg, $has_errors;
     104    global $canvas, $original;
     105
    105106    if ( isset( $_POST['validate_custom'] ) ) {
    106107        // form has been submitted, let's validate the form
     
    165166                    $prev_field_id = $field->id;
    166167                }
    167                
     168
    168169                // validate the avatar upload if there is one.
    169170                $avatar_error = false;
     
    204205                }
    205206               
    206                 $result = wpmu_validate_user_signup( $_POST['user_name'], $_POST['user_email'] );
    207                 extract($result);
    208                
    209                 if ( $errors->get_error_code() || $has_errors || $avatar_error ) {
    210                     signup_user($user_name, $user_email, $errors);
    211                    
    212                     echo '</div>';
    213                     get_footer();
    214                     die;
     207                if ( !is_user_logged_in() ) {
     208                    $result = wpmu_validate_user_signup( $_POST['user_name'], $_POST['user_email'] );
     209                    extract($result);
     210               
     211                    if ( $errors->get_error_code() || $has_errors || $avatar_error ) {
     212                        signup_user($user_name, $user_email, $errors);
     213                   
     214                        echo '</div>';
     215                        get_footer();
     216                        die;
     217                    }
    215218                }
    216219               
    217                 if ( !$hasErrors ) {
    218                     $result = wpmu_validate_blog_signup( $_POST['blog_id'], $_POST['blog_title'] );
    219                     extract($result);
    220 
    221                     if ( $errors->get_error_code() ) {
     220                if ( !$has_errors ) {
     221                    if ( !is_user_logged_in() ) {
     222                        // This is a new user signing up, not an existing user creating a home base.
     223                        $result = wpmu_validate_blog_signup( $_POST['blog_id'], $_POST['blog_title'] );
     224                        extract($result);
     225
     226                        if ( $errors->get_error_code() ) {
     227                            signup_user( $user_name, $user_email, $errors );
     228                            return;
     229                        }
     230                       
     231                        $public = (int) $_POST['blog_public'];
     232                        $meta = array( 'lang_id' => 1, 'public' => $public );
     233
     234                        for ( $i = 0; $i < count($bp_xprofile_callback); $i++ ) {
     235                            $meta['field_' . $bp_xprofile_callback[$i]['field_id']] .= $bp_xprofile_callback[$i]['value'];
     236                        }
     237
     238                        $meta['xprofile_field_ids'] = $_POST['xprofile_ids'];
     239                        $meta['avatar_image_resized'] = $canvas;
     240                        $meta['avatar_image_original'] = $original;
     241
     242                        $meta = apply_filters( "add_signup_meta", $meta );
     243
     244                        wpmu_signup_blog( $domain, $path, $blog_title, $user_name, $user_email, $meta );
     245                        confirm_blog_signup( $domain, $path, $blog_title, $user_name, $user_email, $meta );
     246
     247                        echo '</div>';
     248                        get_footer();
     249                        die;
     250                    } else {
     251                        bp_core_validate_homebase_form_secondary();
     252                    }
     253                } else {
     254                    if ( !is_user_logged_in() ) {
    222255                        signup_user( $user_name, $user_email, $errors );
    223                         return;
    224                     }
    225 
    226                     $public = (int) $_POST['blog_public'];
    227                     $meta = array( 'lang_id' => 1, 'public' => $public );
    228                    
    229                     for ( $i = 0; $i < count($bp_xprofile_callback); $i++ ) {
    230                         $meta['field_' . $bp_xprofile_callback[$i]['field_id']] .= $bp_xprofile_callback[$i]['value'];
    231                     }
    232                    
    233                     $meta['xprofile_field_ids'] = $_POST['xprofile_ids'];
    234                     $meta['avatar_image_resized'] = $canvas;
    235                     $meta['avatar_image_original'] = $original;
    236                    
    237                     $meta = apply_filters( "add_signup_meta", $meta );
    238 
    239                     wpmu_signup_blog( $domain, $path, $blog_title, $user_name, $user_email, $meta );
    240                     confirm_blog_signup( $domain, $path, $blog_title, $user_name, $user_email, $meta );
    241                    
    242                     echo '</div>';
    243                     get_footer();
    244                     die;
    245                 } else {
    246                     signup_user( $user_name, $user_email, $errors );
    247                    
    248                     echo '</div>';
    249                     get_footer();
    250                     die;
     256                   
     257                        echo '</div>';
     258                        get_footer();
     259                        die;
     260                    } else {
     261                        bp_core_validate_homebase_form_secondary( $user_name, $user_email, $errors );
     262                    }
    251263                }
    252264
     
    291303function xprofile_on_activate( $blog_id = null, $user_id = null ) {
    292304    global $wpdb, $profile_picture_path;
    293 
    294     // Extract signup meta fields to fill out profile
    295     $field_ids = get_blog_option( $blog_id, 'xprofile_field_ids' );
    296     $field_ids = explode( ",", $field_ids );
     305   
     306    /* Only do this if this is a new user, and not a user creating a home base */
     307    if ( !is_user_logged_in() ) {
     308
     309        // Extract signup meta fields to fill out profile
     310        $field_ids = get_blog_option( $blog_id, 'xprofile_field_ids' );
     311        $field_ids = explode( ",", $field_ids );
    297312           
    298     // Get the new user ID.
    299     $sql = "SELECT u.ID from " . $wpdb->base_prefix . "users u,
    300             " . $wpdb->base_prefix . "usermeta um
    301             WHERE u.ID = um.user_id
    302             AND um.meta_key = 'primary_blog'
    303             AND um.meta_value = " . $blog_id;
    304 
    305     $user_id = $wpdb->get_var($sql);
    306 
    307     // Loop through each bit of profile data and save it to profile.
    308     for ( $i = 0; $i < count($field_ids); $i++ ) {
    309         $field_value = get_blog_option( $blog_id, 'field_' . $field_ids[$i] );
    310        
    311         $field               = new BP_XProfile_ProfileData();
    312         $field->user_id      = $user_id;
    313         $field->value        = $field_value;
    314         $field->field_id     = $field_ids[$i];
    315         $field->last_updated = time(); 
    316 
    317         $field->save();
    318         delete_blog_option( $blog_id, 'field_' . $field_ids[$i] );
    319     }
    320     delete_blog_option( $blog_id, 'xprofile_field_ids' );
    321    
    322     // move and set the avatar if one has been provided.
    323     $resized = get_blog_option( $blog_id, 'avatar_image_resized' );
    324     $original = get_blog_option( $blog_id, 'avatar_image_original' );   
    325    
    326     if ( $resized && $original ) {
    327         $upload_dir = bp_upload_dir(NULL, $blog_id);
    328 
    329         if ( $upload_dir ) {
    330             $resized_strip_path = explode( '/', $resized );
    331             $original_strip_path = explode( '/', $original );
    332 
    333             $resized_filename = $resized_strip_path[count($resized_strip_path) - 1];
    334             $original_filename = $original_strip_path[count($original_strip_path) - 1];
    335 
    336             $resized_new = $upload_dir['path'] . '/' . $resized_filename;
    337             $original_new = $upload_dir['path'] . '/' . $original_filename;
    338 
    339             @copy( $resized, $resized_new );
    340             @copy( $original, $original_new );
    341 
    342             @unlink($resized);
    343             @unlink($original);
    344 
    345             $resized = $resized_new;
    346             $original = $original_new;
     313        // Get the new user ID.
     314        $sql = "SELECT u.ID from " . $wpdb->base_prefix . "users u,
     315                " . $wpdb->base_prefix . "usermeta um
     316                WHERE u.ID = um.user_id
     317                AND um.meta_key = 'primary_blog'
     318                AND um.meta_value = " . $blog_id;
     319
     320        $user_id = $wpdb->get_var($sql);
     321
     322        // Loop through each bit of profile data and save it to profile.
     323        for ( $i = 0; $i < count($field_ids); $i++ ) {
     324            $field_value = get_blog_option( $blog_id, 'field_' . $field_ids[$i] );
     325       
     326            $field               = new BP_XProfile_ProfileData();
     327            $field->user_id      = $user_id;
     328            $field->value        = $field_value;
     329            $field->field_id     = $field_ids[$i];
     330            $field->last_updated = time(); 
     331
     332            $field->save();
     333            delete_blog_option( $blog_id, 'field_' . $field_ids[$i] );
    347334        }
    348        
    349         // Render the cropper UI
    350         $action = PROTOCOL . get_usermeta( $user_id, 'source_domain' ) . '/wp-activate.php?key=' . $_GET['key'] . '&amp;cropped=true';
    351         bp_core_render_avatar_cropper($original, $resized, $action, $user_id);
    352        
    353         //$result = bp_core_avatar_cropstore( $image, $image, $v1_x, $v1_y, XPROFILE_AVATAR_V1_W, XPROFILE_AVATAR_V1_H, $v2_x, $v2_y, XPROFILE_AVATAR_V2_W, XPROFILE_AVATAR_V2_H, true );
    354         //bp_core_avatar_save( $result, $user_id, $upload_dir );
     335        delete_blog_option( $blog_id, 'xprofile_field_ids' );
     336       
     337        /* Make this blog the "home base" for the new user */
     338        update_usermeta( $user_id, 'home_base', $blog_id );
     339       
     340        /* Set the BuddyPress theme as the theme for this blog */
     341        $wpdb->set_blog_id($blog_id);       
     342        switch_theme( 'buddypress', 'buddypress' );
     343       
     344        // move and set the avatar if one has been provided.
     345        $resized = get_blog_option( $blog_id, 'avatar_image_resized' );
     346        $original = get_blog_option( $blog_id, 'avatar_image_original' );   
     347   
     348        if ( $resized && $original ) {
     349            $upload_dir = bp_upload_dir(NULL, $blog_id);
     350
     351            if ( $upload_dir ) {
     352                $resized_strip_path = explode( '/', $resized );
     353                $original_strip_path = explode( '/', $original );
     354
     355                $resized_filename = $resized_strip_path[count($resized_strip_path) - 1];
     356                $original_filename = $original_strip_path[count($original_strip_path) - 1];
     357
     358                $resized_new = $upload_dir['path'] . '/' . $resized_filename;
     359                $original_new = $upload_dir['path'] . '/' . $original_filename;
     360
     361                @copy( $resized, $resized_new );
     362                @copy( $original, $original_new );
     363
     364                @unlink($resized);
     365                @unlink($original);
     366
     367                $resized = $resized_new;
     368                $original = $original_new;
     369            }
     370       
     371            // Render the cropper UI
     372            $action = get_blog_option( $blog_id, 'siteurl' ) . '/wp-activate.php?key=' . $_GET['key'] . '&amp;cropped=true';
     373            bp_core_render_avatar_cropper($original, $resized, $action, $user_id);
     374        }
    355375    }
    356376   
     
    364384       
    365385        // Confirm that the nonce is valid
    366         if ( !isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'slick_avatars') )
    367             header('Location:' . get_option('home'));
     386        if ( !isset( $_POST['nonce'] ) || !wp_verify_nonce( $_POST['nonce'], 'slick_avatars' ) )
     387            wp_redirect( get_option('home') );
    368388       
    369389        $user_id = xprofile_get_user_by_key($_GET['key']);
    370390
    371         if ( $user_id && isset($_POST['orig']) && isset($_POST['canvas']) ) {
     391        if ( $user_id && isset( $_POST['orig'] ) && isset( $_POST['canvas'] ) ) {
    372392            bp_core_check_crop( $_POST['orig'], $_POST['canvas'] );
    373393            $result = bp_core_avatar_cropstore( $_POST['orig'], $_POST['canvas'], $_POST['v1_x1'], $_POST['v1_y1'], $_POST['v1_w'], $_POST['v1_h'], $_POST['v2_x1'], $_POST['v2_y1'], $_POST['v2_w'], $_POST['v2_h'] );
    374             bp_core_avatar_save($result, $user_id);
     394            bp_core_avatar_save( $result, $user_id );
    375395        }
    376396       
    377         if ( VHOST == 'yes' ) {
    378             $url = PROTOCOL . get_usermeta( $user_id, 'source_domain' ) . '/';
    379         } else {
    380             $url = PROTOCOL . get_usermeta( $user_id, 'source_domain' ) . '/' . get_usermeta( $user_id, 'nickname' );
    381         }
    382        
    383         header("Location: $url");
     397        $blog_id = get_usermeta( $user_id, 'home_base' );
     398        $url = get_blog_option( $blog_id, 'siteurl' );
     399       
     400        wp_redirect( $url );
    384401    }
    385402}
  • trunk/bp-xprofile/bp-xprofile-templatetags.php

    r304 r309  
    135135
    136136function bp_has_profile() {
    137     global $profile_template;
     137    global $bp, $profile_template;
     138   
     139    $profile_template = new BP_XProfile_Template($bp['current_userid']);
     140   
    138141    return $profile_template->has_groups();
    139142}
     
    251254function bp_user_status() {
    252255    // TODO: dummy function now, until status component is developed.
    253     echo '[ TODO: Status Updates ]';
     256    return false;
    254257}
    255258
     
    304307    global $bp;
    305308     
    306     bp_core_avatar_admin(null, $bp['loggedin_domain'] . $bp['xprofile']['slug'] . '/change-avatar/');
     309    bp_core_avatar_admin( null, $bp['loggedin_domain'] . $bp['xprofile']['slug'] . '/change-avatar/', $bp['loggedin_domain'] . $bp['xprofile']['slug'] . '/delete-avatar/' );
    307310}
    308311
  • trunk/buddypress-theme/home/style.css

    r262 r309  
    11/* 
    2 Theme Name: BuddyPress Profile Default
     2Theme Name: BuddyPress Home Theme
    33Theme URI: http://buddypress.com/
    4 Description: The default profile theme for BuddyPress
     4Description: The theme for the home of an install
    55Version: 0.1
    66Author: Andy Peatling
     
    221221            padding: 0 0 0.2em 0;
    222222        }
    223 /** TEMP **/
     223
     224/** SIGNUP FIELDS CSS **/
    224225
    225226table#extraFields td label,
    226             div.radio span,
    227             div.checkbox span {
    228                 font-weight: bold;
    229                 display: block;
    230                 float: left;
    231                 width: 115px;
    232             }
    233            
    234             table#extraFields td input {
    235                 font-size: 24px;
    236                 width: 280px;
    237             }
    238            
    239             table#extraFields td textarea {
    240                 width: 280px;
    241                 height: 120px;
    242             }
    243            
    244             table#extraFields td select {
    245                 width: 280px;
    246             }
    247            
    248             table#extraFields td div.datefield select {
    249                 width: auto;
    250             }
    251            
    252             table#extraFields td div.radio label,
    253             table#extraFields td div.checkbox label {
    254                 display: inline;
    255                 font-weight: normal;
    256                 float: none;
    257             }
    258            
    259             table#extraFields td div.radio input,
    260             table#extraFields td div.checkbox input {
    261                 width: auto;
    262             }
    263            
    264             span.desc {
    265                 margin-left: 115px;
    266                 font-weight: normal;
    267             }
    268            
    269             div.error {
    270                 font-weight: bold;
    271                 margin: 10px 0 10px 113px;
    272             }
    273 
    274 
    275 .signup-field { padding: 0.6em 0 !important;}
    276 .signup-field label { padding: 1em 2em !important;}
    277 .signup-field input[type='text'], .signup-field textarea { width: 55% !important;}
    278 .signup-description { display: block; color: #888; font-size: 10px; padding: 0.5em 0 0 16.3em;}
    279 .error { padding-left: 4.2em !important;}
     227div.radio span.signup-label,
     228div.checkbox span.signup-label {
     229    font-weight: bold;
     230    margin-top: 25px;
     231    margin-bottom: 10px;
     232    font-size: 1.2em;
     233    display: block;
     234}
     235
     236table#extraFields td input {
     237    font-size: 24px;
     238    width: 100%;
     239}
     240
     241table#extraFields td textarea {
     242    width: 80%;
     243    height: 120px;
     244}
     245
     246table#extraFields td select {
     247    width: 280px;
     248    font-size: 1.4em;
     249}
     250
     251table#extraFields td div.datefield select {
     252    width: auto;
     253}
     254
     255table#extraFields td div.radio label,
     256table#extraFields td div.checkbox label {
     257    display: inline;
     258    font-weight: normal;
     259    float: none;
     260    padding: 0 !important;
     261    margin-right: 15px;
     262}
     263
     264table#extraFields td div.radio input,
     265table#extraFields td div.checkbox input {
     266    width: auto;
     267}
     268
     269span.desc {
     270    margin-left: 115px;
     271    font-weight: normal;
     272}
     273
     274div.error {
     275    font-weight: bold;
     276}
     277
     278span.signup-description {
     279    display: block;
     280    margin: 5px 0 0 0;
     281}
  • trunk/buddypress-theme/readme.txt

    r170 r309  
    22''''''''''''''''
    33
    4 1. Backup /wp-content/themes/default/
    5 2. Copy the 'default' directory from /buddypress-theme/ into /wp-content/themes/
    6 3. All done.
     41. Backup /wp-content/themes/home/
     52. Delete the existing 'home' theme from /wp-content/themes/
     63. Copy the 'buddypress' and 'home' directories from /buddypress-theme/ into /wp-content/themes/
     74. DO NOT rename the 'buddypress' theme (including the folder name and css file theme name)
     84. All done.
Note: See TracChangeset for help on using the changeset viewer.