avatar; * $user_email = $user->email; * $user_status = $user->status; * etc. * * @package BuddyPress Core */ class BP_Core_User { var $id; var $avatar; var $avatar_thumb; var $avatar_mini; var $fullname; var $email; var $user_url; var $user_link; var $last_active; var $profile_last_updated; var $status; var $status_last_updated; /* Extras */ var $total_friends; var $total_blogs; var $total_groups; function bp_core_user( $user_id, $populate_extras = false ) { if ( $user_id ) { $this->id = $user_id; $this->populate(); if ( $populate_extras ) $this->populate_extras(); } } /** * populate() * * Populate the instantiated class with data based on the User ID provided. * * @package BuddyPress Core * @global $userdata WordPress user data for the current logged in user. * @uses bp_core_get_userurl() Returns the URL with no HTML markup for a user based on their user id * @uses bp_core_get_userlink() Returns a HTML formatted link for a user with the user's full name as the link text * @uses bp_core_get_user_email() Returns the email address for the user based on user ID * @uses get_usermeta() WordPress function returns the value of passed usermeta name from usermeta table * @uses bp_core_get_avatar() Returns HTML formatted avatar for a user * @uses bp_profile_last_updated_date() Returns the last updated date for a user. */ function populate() { $this->user_url = bp_core_get_userurl( $this->id ); $this->user_link = bp_core_get_userlink( $this->id ); $this->fullname = bp_fetch_user_fullname( $this->id, false ); $this->email = bp_core_get_user_email( $this->id ); $this->last_active = bp_core_get_last_activity( get_usermeta( $this->id, 'last_activity' ), __( 'active %s ago', 'buddypress' ) ); $this->avatar = bp_core_get_avatar( $this->id, 2 ); $this->avatar_thumb = bp_core_get_avatar( $this->id, 1 ); $this->avatar_mini = bp_core_get_avatar( $this->id, 1, 25, 25, false ); } function populate_extras() { global $bp; if ( function_exists('friends_install') ) { $this->total_friends = BP_Friends_Friendship::total_friend_count( $this->id ); if ( $this->total_friends ) { if ( 1 == $this->total_friends ) $this->total_friends .= ' ' . __( 'friend', 'buddypress' ); else $this->total_friends .= ' ' . __( 'friends', 'buddypress' ); $this->total_friends = 'fullname ) . '">' . $this->total_friends . ''; } } if ( function_exists('bp_blogs_install') ) { if ( $this->total_blogs ) { if ( 1 == $this->total_blogs ) $this->total_blogs .= ' ' . __( 'blog', 'buddypress' ); else $this->total_blogs .= ' ' . __( 'blogs', 'buddypress' ); $this->total_blogs = 'fullname ) . '">' . $this->total_blogs . ''; } } if ( function_exists('groups_install') ) { $this->total_groups = BP_Groups_Member::total_group_count( $this->id ); if ( $this->total_groups ) { if ( 1 == $this->total_groups ) $this->total_groups .= ' ' . __( 'group', 'buddypress' ); else $this->total_groups .= ' ' . __( 'groups', 'buddypress' ); $this->total_groups = 'fullname ) . '">' . $this->total_groups . ''; } } } /* Static Functions */ function get_newest_users( $limit = null, $page = 1 ) { global $wpdb; if ( $limit && $page ) $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); $total_users_sql = apply_filters( 'bp_core_newest_users_count_sql', "SELECT DISTINCT count(ID) FROM " . CUSTOM_USER_TABLE . " WHERE spam = 0 AND deleted = 0 AND user_status = 0 ORDER BY user_registered DESC" ); $paged_users_sql = apply_filters( 'bp_core_newest_users_sql', "SELECT DISTINCT ID as user_id, DATE_ADD( user_registered, INTERVAL " . get_option('gmt_offset') . " HOUR ) as user_registered FROM " . CUSTOM_USER_TABLE . " WHERE spam = 0 AND deleted = 0 AND user_status = 0 ORDER BY user_registered DESC{$pag_sql}", $pag_sql ); $total_users = $wpdb->get_var( $total_users_sql ); $paged_users = $wpdb->get_results( $paged_users_sql ); return array( 'users' => $paged_users, 'total' => $total_users ); } function get_active_users( $limit = null, $page = 1 ) { global $wpdb; if ( $limit && $page ) $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); $total_users_sql = apply_filters( 'bp_core_active_users_count_sql', "SELECT DISTINCT count(um.user_id) FROM " . CUSTOM_USER_META_TABLE . " um LEFT JOIN " . CUSTOM_USER_TABLE . " u ON u.ID = um.user_id WHERE um.meta_key = 'last_activity' AND u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 ORDER BY FROM_UNIXTIME(um.meta_value) DESC" ); $paged_users_sql = apply_filters( 'bp_core_active_users_sql', "SELECT DISTINCT user_id FROM " . CUSTOM_USER_META_TABLE . " um LEFT JOIN " . CUSTOM_USER_TABLE . " u ON u.ID = um.user_id WHERE um.meta_key = 'last_activity' AND u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 ORDER BY FROM_UNIXTIME(um.meta_value) DESC{$pag_sql}", $pag_sql ); $total_users = $wpdb->get_var( $total_users_sql ); $paged_users = $wpdb->get_results( $paged_users_sql ); return array( 'users' => $paged_users, 'total' => $total_users ); } function get_popular_users( $limit = null, $page = 1 ) { global $wpdb; if ( !function_exists('friends_install') ) return false; if ( $limit && $page ) $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); $total_users_sql = apply_filters( 'bp_core_popular_users_count_sql', "SELECT DISTINCT count(um.user_id) FROM " . CUSTOM_USER_META_TABLE . " um LEFT JOIN " . CUSTOM_USER_TABLE . " u ON u.ID = um.user_id WHERE um.meta_key = 'total_friend_count' AND u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 ORDER BY CONVERT(um.meta_value, SIGNED) DESC" ); $paged_users_sql = apply_filters( 'bp_core_popular_users_sql', "SELECT DISTINCT um.user_id FROM " . CUSTOM_USER_META_TABLE . " um LEFT JOIN " . CUSTOM_USER_TABLE . " u ON u.ID = um.user_id WHERE um.meta_key = 'total_friend_count' AND u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 ORDER BY CONVERT(um.meta_value, SIGNED) DESC{$pag_sql}", $pag_sql ); $total_users = $wpdb->get_var( $total_users_sql ); $paged_users = $wpdb->get_results( $paged_users_sql ); return array( 'users' => $paged_users, 'total' => $total_users ); } function get_random_users( $limit = null, $page = 1 ) { global $wpdb, $bp; if ( $limit && $page ) $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); $total_users_sql = apply_filters( 'bp_core_random_users_count_sql', $wpdb->prepare( "SELECT DISTINCT count(um.user_id) FROM " . CUSTOM_USER_META_TABLE . " um LEFT JOIN " . CUSTOM_USER_TABLE . " u ON u.ID = um.user_id WHERE u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 AND u.ID != %d ORDER BY RAND() DESC", $bp->loggedin_user->id ) ); $paged_users_sql = apply_filters( 'bp_core_random_users_sql', $wpdb->prepare( "SELECT DISTINCT um.user_id FROM " . CUSTOM_USER_META_TABLE . " um LEFT JOIN " . CUSTOM_USER_TABLE . " u ON u.ID = um.user_id WHERE u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 AND u.ID != %d ORDER BY RAND(){$pag_sql}", $bp->loggedin_user->id ), $pag_sql ); $total_users = $wpdb->get_var( $total_users_sql ); $paged_users = $wpdb->get_results( $paged_users_sql ); return array( 'users' => $paged_users, 'total' => $total_users ); } function get_online_users( $limit = null, $page = 1 ) { global $wpdb; if ( $limit && $page ) $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); $total_users_sql = apply_filters( 'bp_core_online_users_count_sql', "SELECT DISTINCT count(um.user_id) FROM " . CUSTOM_USER_META_TABLE . " um LEFT JOIN " . CUSTOM_USER_TABLE . " u ON u.ID = um.user_id WHERE um.meta_key = 'last_activity' AND u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 AND DATE_ADD( FROM_UNIXTIME(um.meta_value), INTERVAL 5 MINUTE ) >= NOW() ORDER BY FROM_UNIXTIME(um.meta_value) DESC" ); $paged_users_sql = apply_filters( 'bp_core_online_users_sql', "SELECT DISTINCT um.user_id FROM " . CUSTOM_USER_META_TABLE . " um LEFT JOIN " . CUSTOM_USER_TABLE . " u ON u.ID = um.user_id WHERE um.meta_key = 'last_activity' AND u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 AND DATE_ADD( FROM_UNIXTIME(um.meta_value), INTERVAL 5 MINUTE ) >= NOW() ORDER BY FROM_UNIXTIME(um.meta_value) DESC{$pag_sql}", $pag_sql ); $total_users = $wpdb->get_var( $total_users_sql ); $paged_users = $wpdb->get_results( $paged_users_sql ); return array( 'users' => $paged_users, 'total' => $total_users ); } function get_alphabetical_users( $limit = null, $page = 1 ) { global $wpdb, $bp; if ( !function_exists( 'xprofile_install' ) ) return BP_Core_User::get_active_users( $limit, $page ); if ( $limit && $page ) $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); $total_users_sql = apply_filters( 'bp_core_alphabetical_users_count_sql', $wpdb->prepare( "SELECT DISTINCT count(u.ID) FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 AND pf.name = %s ORDER BY pd.value ASC", BP_XPROFILE_FULLNAME_FIELD_NAME ) ); $paged_users_sql = apply_filters( 'bp_core_alphabetical_users_sql', $wpdb->prepare( "SELECT DISTINCT u.ID as user_id FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 AND pf.name = %s ORDER BY pd.value ASC{$pag_sql}", BP_XPROFILE_FULLNAME_FIELD_NAME ), $pag_sql ); $total_users = $wpdb->get_var( $total_users_sql ); $paged_users = $wpdb->get_results( $paged_users_sql ); return array( 'users' => $paged_users, 'total' => $total_users ); } function get_users_by_letter( $letter, $limit = null, $page = 1 ) { global $wpdb, $bp; if ( !function_exists('xprofile_install') ) return BP_Core_User::get_active_users( $limit, $page ); if ( $limit && $page ) $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); if ( strlen($letter) > 1 || is_numeric($letter) || !$letter ) return false; like_escape($letter); $total_users_sql = apply_filters( 'bp_core_users_by_letter_count_sql', $wpdb->prepare( "SELECT DISTINCT count(u.ID) FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 AND pf.name = %s AND pd.value LIKE '$letter%%' ORDER BY pd.value ASC", BP_XPROFILE_FULLNAME_FIELD_NAME ), $letter ); $paged_users_sql = apply_filters( 'bp_core_users_by_letter_sql', $wpdb->prepare( "SELECT DISTINCT u.ID as user_id FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE u.spam = 0 AND u.deleted = 0 AND u.user_status = 0 AND pf.name = %s AND pd.value LIKE '$letter%%' ORDER BY pd.value ASC{$pag_sql}", BP_XPROFILE_FULLNAME_FIELD_NAME ), $letter, $pag_sql ); $total_users = $wpdb->get_var( $total_users_sql ); $paged_users = $wpdb->get_results( $paged_users_sql ); return array( 'users' => $paged_users, 'total' => $total_users ); } function search_users( $search_terms, $limit = null, $page = 1 ) { global $wpdb, $bp; if ( !function_exists('xprofile_install') ) return BP_Core_User::get_active_users( $limit, $page ); if ( $limit && $page ) $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); like_escape($search_terms); $total_users_sql = apply_filters( 'bp_core_search_users_count_sql', "SELECT DISTINCT count(u.ID) as user_id FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id WHERE pd.value LIKE '%%$search_terms%%' ORDER BY pd.value ASC", $search_terms ); $paged_users_sql = apply_filters( 'bp_core_search_users_sql', "SELECT DISTINCT u.ID as user_id FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id WHERE pd.value LIKE '%%$search_terms%%' ORDER BY pd.value ASC{$pag_sql}", $search_terms, $pag_sql ); $total_users = $wpdb->get_var( $total_users_sql ); $paged_users = $wpdb->get_results( $paged_users_sql ); return array( 'users' => $paged_users, 'total' => $total_users ); } } /** * BP_Core_Notification class can be used by any component. * It will handle the fetching, saving and deleting of a user notification. * * @package BuddyPress Core */ class BP_Core_Notification { var $id; var $item_id; var $secondary_item_id = null; var $user_id; var $component_name; var $component_action; var $date_notified; var $is_new; function bp_core_notification( $id = false ) { if ( $id ) { $this->id = $id; $this->populate(); } } function populate() { global $wpdb, $bp; if ( $notification = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->core->table_name_notifications} WHERE id = %d", $this->id ) ) ) { $this->item_id = $notification->item_id; $this->secondary_item_id = $notification->secondary_item_id; $this->user_id = $notification->user_id; $this->component_name = $notification->component_name; $this->component_action = $notification->component_action; $this->date_notified = $notification->date_notified; $this->is_new = $notification->is_new; } } function save() { global $wpdb, $bp; if ( $this->id ) { // Update $sql = $wpdb->prepare( "UPDATE {$bp->core->table_name_notifications} SET item_id = %d, secondary_item_id = %d, user_id = %d, component_name = %s, component_action = %d, date_notified = FROM_UNIXTIME(%d), is_new = %d ) WHERE id = %d", $this->item_id, $this->secondary_item_id, $this->user_id, $this->component_name, $this->component_action, $this->date_notified, $this->is_new, $this->id ); } else { // Save $sql = $wpdb->prepare( "INSERT INTO {$bp->core->table_name_notifications} ( item_id, secondary_item_id, user_id, component_name, component_action, date_notified, is_new ) VALUES ( %d, %d, %d, %s, %s, FROM_UNIXTIME(%d), %d )", $this->item_id, $this->secondary_item_id, $this->user_id, $this->component_name, $this->component_action, $this->date_notified, $this->is_new ); } if ( !$result = $wpdb->query( $sql ) ) return false; $this->id = $wpdb->insert_id; return true; } /* Static functions */ function check_access( $user_id, $notification_id ) { global $wpdb, $bp; return $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM {$bp->core->table_name_notifications} WHERE id = %d AND user_id = %d", $notification_id, $user_id ) ); } function get_all_for_user( $user_id ) { global $wpdb, $bp; return $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->core->table_name_notifications} WHERE user_id = %d AND is_new = 1", $user_id ) ); } function delete_for_user_by_type( $user_id, $component_name, $component_action ) { global $wpdb, $bp; return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->core->table_name_notifications} WHERE user_id = %d AND component_name = %s AND component_action = %s", $user_id, $component_name, $component_action ) ); } function delete_for_user_by_item_id( $user_id, $item_id, $component_name, $component_action, $secondary_item_id ) { global $wpdb, $bp; if ( $secondary_item_id ) $secondary_item_sql = $wpdb->prepare( " AND secondary_item_id = %d", $secondary_item_id ); return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->core->table_name_notifications} WHERE user_id = %d AND item_id = %d AND component_name = %s AND component_action = %s{$secondary_item_sql}", $user_id, $item_id, $component_name, $component_action ) ); } function delete_from_user_by_type( $user_id, $component_name, $component_action ) { global $wpdb, $bp; return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->core->table_name_notifications} WHERE item_id = %d AND component_name = %s AND component_action = %s", $user_id, $component_name, $component_action ) ); } function delete_all_by_type( $item_id, $component_name, $component_action, $secondary_item_id ) { global $wpdb, $bp; if ( $component_action ) $component_action_sql = $wpdb->prepare( "AND component_action = %s", $compoennt_action ); if ( $secondary_item_id ) $secondary_item_sql = $wpdb->prepare( "AND secondary_item_id = %d", $secondary_item_id ); return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->core->table_name_notifications} WHERE item_id = %d AND component_name = %s {$component_action_sql} {$secondary_item_sql}", $item_id, $component_name ) ); } } ?>