2012-07-11 16:28:51 +00:00
< ? php
2012-08-08 16:49:22 +00:00
2012-07-11 16:28:51 +00:00
/**
* BuddyPress Activity Classes
*
* @ package BuddyPress
2012-08-08 16:49:22 +00:00
* @ subpackage ActivityClasses
2012-07-11 16:28:51 +00:00
*/
// Exit if accessed directly
if ( ! defined ( 'ABSPATH' ) ) exit ;
2012-08-08 16:49:22 +00:00
Class BP_Activity_Activity {
2012-07-11 16:28:51 +00:00
var $id ;
var $item_id ;
var $secondary_item_id ;
var $user_id ;
var $primary_link ;
var $component ;
var $type ;
var $action ;
var $content ;
var $date_recorded ;
var $hide_sitewide = false ;
var $mptt_left ;
var $mptt_right ;
2012-08-08 16:49:22 +00:00
function bp_activity_activity ( $id = false ) {
$this -> __construct ( $id );
}
2012-07-11 16:28:51 +00:00
function __construct ( $id = false ) {
2012-08-08 16:49:22 +00:00
global $bp ;
2012-07-11 16:28:51 +00:00
if ( ! empty ( $id ) ) {
$this -> id = $id ;
$this -> populate ();
}
}
function populate () {
global $wpdb , $bp ;
if ( $row = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM { $bp -> activity -> table_name } WHERE id = %d " , $this -> id ) ) ) {
$this -> id = $row -> id ;
$this -> item_id = $row -> item_id ;
$this -> secondary_item_id = $row -> secondary_item_id ;
$this -> user_id = $row -> user_id ;
$this -> primary_link = $row -> primary_link ;
$this -> component = $row -> component ;
$this -> type = $row -> type ;
$this -> action = $row -> action ;
$this -> content = $row -> content ;
$this -> date_recorded = $row -> date_recorded ;
$this -> hide_sitewide = $row -> hide_sitewide ;
$this -> mptt_left = $row -> mptt_left ;
$this -> mptt_right = $row -> mptt_right ;
}
}
function save () {
global $wpdb , $bp , $current_user ;
$this -> id = apply_filters_ref_array ( 'bp_activity_id_before_save' , array ( $this -> id , & $this ) );
$this -> item_id = apply_filters_ref_array ( 'bp_activity_item_id_before_save' , array ( $this -> item_id , & $this ) );
$this -> secondary_item_id = apply_filters_ref_array ( 'bp_activity_secondary_item_id_before_save' , array ( $this -> secondary_item_id , & $this ) );
$this -> user_id = apply_filters_ref_array ( 'bp_activity_user_id_before_save' , array ( $this -> user_id , & $this ) );
$this -> primary_link = apply_filters_ref_array ( 'bp_activity_primary_link_before_save' , array ( $this -> primary_link , & $this ) );
$this -> component = apply_filters_ref_array ( 'bp_activity_component_before_save' , array ( $this -> component , & $this ) );
$this -> type = apply_filters_ref_array ( 'bp_activity_type_before_save' , array ( $this -> type , & $this ) );
$this -> action = apply_filters_ref_array ( 'bp_activity_action_before_save' , array ( $this -> action , & $this ) );
$this -> content = apply_filters_ref_array ( 'bp_activity_content_before_save' , array ( $this -> content , & $this ) );
$this -> date_recorded = apply_filters_ref_array ( 'bp_activity_date_recorded_before_save' , array ( $this -> date_recorded , & $this ) );
$this -> hide_sitewide = apply_filters_ref_array ( 'bp_activity_hide_sitewide_before_save' , array ( $this -> hide_sitewide , & $this ) );
$this -> mptt_left = apply_filters_ref_array ( 'bp_activity_mptt_left_before_save' , array ( $this -> mptt_left , & $this ) );
$this -> mptt_right = apply_filters_ref_array ( 'bp_activity_mptt_right_before_save' , array ( $this -> mptt_right , & $this ) );
// Use this, not the filters above
do_action_ref_array ( 'bp_activity_before_save' , array ( & $this ) );
if ( ! $this -> component || ! $this -> type )
return false ;
if ( ! $this -> primary_link )
2012-08-08 16:49:22 +00:00
$this -> primary_link = $bp -> loggedin_user -> domain ;
2012-07-11 16:28:51 +00:00
// If we have an existing ID, update the activity item, otherwise insert it.
if ( $this -> id )
2012-08-08 16:49:22 +00:00
$q = $wpdb -> prepare ( " UPDATE { $bp -> activity -> table_name } SET user_id = %d, component = %s, type = %s, action = %s, content = %s, primary_link = %s, date_recorded = %s, item_id = %s, secondary_item_id = %s, hide_sitewide = %d WHERE id = %d " , $this -> user_id , $this -> component , $this -> type , $this -> action , $this -> content , $this -> primary_link , $this -> date_recorded , $this -> item_id , $this -> secondary_item_id , $this -> hide_sitewide , $this -> id );
2012-07-11 16:28:51 +00:00
else
2012-08-08 16:49:22 +00:00
$q = $wpdb -> prepare ( " INSERT INTO { $bp -> activity -> table_name } ( user_id, component, type, action, content, primary_link, date_recorded, item_id, secondary_item_id, hide_sitewide ) VALUES ( %d, %s, %s, %s, %s, %s, %s, %s, %s, %d ) " , $this -> user_id , $this -> component , $this -> type , $this -> action , $this -> content , $this -> primary_link , $this -> date_recorded , $this -> item_id , $this -> secondary_item_id , $this -> hide_sitewide );
2012-07-11 16:28:51 +00:00
2012-08-08 16:49:22 +00:00
if ( ! $wpdb -> query ( $q ) )
2012-07-11 16:28:51 +00:00
return false ;
if ( empty ( $this -> id ) )
$this -> id = $wpdb -> insert_id ;
do_action_ref_array ( 'bp_activity_after_save' , array ( & $this ) );
return true ;
}
// Static Functions
2012-08-08 16:49:22 +00:00
function get ( $max = false , $page = 1 , $per_page = 25 , $sort = 'DESC' , $search_terms = false , $filter = false , $display_comments = false , $show_hidden = false , $exclude = false , $in = false ) {
2012-07-11 16:28:51 +00:00
global $wpdb , $bp ;
// Select conditions
$select_sql = " SELECT a.*, u.user_email, u.user_nicename, u.user_login, u.display_name " ;
$from_sql = " FROM { $bp -> activity -> table_name } a LEFT JOIN { $wpdb -> users } u ON a.user_id = u.ID " ;
// Where conditions
$where_conditions = array ();
// Searching
if ( $search_terms ) {
$search_terms = $wpdb -> escape ( $search_terms );
$where_conditions [ 'search_sql' ] = " a.content LIKE '%% " . like_escape ( $search_terms ) . " %%' " ;
}
// Filtering
if ( $filter && $filter_sql = BP_Activity_Activity :: get_filter_sql ( $filter ) )
$where_conditions [ 'filter_sql' ] = $filter_sql ;
// Sorting
if ( $sort != 'ASC' && $sort != 'DESC' )
$sort = 'DESC' ;
// Hide Hidden Items?
if ( ! $show_hidden )
$where_conditions [ 'hidden_sql' ] = " a.hide_sitewide = 0 " ;
// Exclude specified items
if ( ! empty ( $exclude ) ) {
$exclude = implode ( ',' , wp_parse_id_list ( $exclude ) );
$where_conditions [ 'exclude' ] = " a.id NOT IN ( { $exclude } ) " ;
}
// The specific ids to which you want to limit the query
if ( ! empty ( $in ) ) {
$in = implode ( ',' , wp_parse_id_list ( $in ) );
$where_conditions [ 'in' ] = " a.id IN ( { $in } ) " ;
}
// Alter the query based on whether we want to show activity item
// comments in the stream like normal comments or threaded below
// the activity.
if ( false === $display_comments || 'threaded' === $display_comments )
$where_conditions [] = " a.type != 'activity_comment' " ;
$where_sql = 'WHERE ' . join ( ' AND ' , $where_conditions );
if ( ! empty ( $per_page ) && ! empty ( $page ) ) {
// Make sure page values are absolute integers
$page = absint ( $page );
$per_page = absint ( $per_page );
2012-08-08 16:49:22 +00:00
$pag_sql = $wpdb -> prepare ( " LIMIT %d, %d " , absint ( ( $page - 1 ) * $per_page ), $per_page );
2012-07-11 16:28:51 +00:00
$activities = $wpdb -> get_results ( apply_filters ( 'bp_activity_get_user_join_filter' , $wpdb -> prepare ( " { $select_sql } { $from_sql } { $where_sql } ORDER BY a.date_recorded { $sort } { $pag_sql } " ), $select_sql , $from_sql , $where_sql , $sort , $pag_sql ) );
} else {
$activities = $wpdb -> get_results ( apply_filters ( 'bp_activity_get_user_join_filter' , $wpdb -> prepare ( " { $select_sql } { $from_sql } { $where_sql } ORDER BY a.date_recorded { $sort } " ), $select_sql , $from_sql , $where_sql , $sort ) );
}
2012-08-08 16:49:22 +00:00
$total_activities_sql = apply_filters ( 'bp_activity_total_activities_sql' , $wpdb -> prepare ( " SELECT count(a.id) FROM { $bp -> activity -> table_name } a { $where_sql } ORDER BY a.date_recorded { $sort } " ), $where_sql , $sort );
2012-07-11 16:28:51 +00:00
$total_activities = $wpdb -> get_var ( $total_activities_sql );
// Get the fullnames of users so we don't have to query in the loop
if ( bp_is_active ( 'xprofile' ) && $activities ) {
2012-08-08 16:49:22 +00:00
foreach ( ( array ) $activities as $activity ) {
if ( ( int ) $activity -> user_id )
2012-07-11 16:28:51 +00:00
$activity_user_ids [] = $activity -> user_id ;
}
2012-08-08 16:49:22 +00:00
$activity_user_ids = implode ( ',' , array_unique ( ( array ) $activity_user_ids ) );
2012-07-11 16:28:51 +00:00
if ( ! empty ( $activity_user_ids ) ) {
if ( $names = $wpdb -> get_results ( $wpdb -> prepare ( " SELECT user_id, value AS user_fullname FROM { $bp -> profile -> table_name_data } WHERE field_id = 1 AND user_id IN ( { $activity_user_ids } ) " ) ) ) {
2012-08-08 16:49:22 +00:00
foreach ( ( array ) $names as $name )
2012-07-11 16:28:51 +00:00
$tmp_names [ $name -> user_id ] = $name -> user_fullname ;
2012-08-08 16:49:22 +00:00
foreach ( ( array ) $activities as $i => $activity ) {
2012-07-11 16:28:51 +00:00
if ( ! empty ( $tmp_names [ $activity -> user_id ] ) )
$activities [ $i ] -> user_fullname = $tmp_names [ $activity -> user_id ];
}
unset ( $names );
unset ( $tmp_names );
}
}
}
if ( $activities && $display_comments )
2012-08-08 16:49:22 +00:00
$activities = BP_Activity_Activity :: append_comments ( $activities );
2012-07-11 16:28:51 +00:00
// If $max is set, only return up to the max results
if ( ! empty ( $max ) ) {
2012-08-08 16:49:22 +00:00
if ( ( int ) $total_activities > ( int ) $max )
2012-07-11 16:28:51 +00:00
$total_activities = $max ;
}
2012-08-08 16:49:22 +00:00
return array ( 'activities' => $activities , 'total' => ( int ) $total_activities );
2012-07-11 16:28:51 +00:00
}
/**
* In BuddyPress 1.2 . x , this was used to retrieve specific activity stream items ( for example , on an activity ' s permalink page ) .
2012-08-08 16:49:22 +00:00
* As of 1.5 . x , use BP_Activity_Activity :: get ( ... , $in ) instead .
2012-07-11 16:28:51 +00:00
*
* @ deprecated 1.5
2012-08-08 16:49:22 +00:00
* @ deprecated Use BP_Activity_Activity :: get ( ... , $in ) instead .
2012-07-11 16:28:51 +00:00
* @ param mixed $activity_ids Array or comma - separated string of activity IDs to retrieve
* @ param int $max Maximum number of results to return . ( Optional ; default is no maximum )
* @ param int $page The set of results that the user is viewing . Used in pagination . ( Optional ; default is 1 )
* @ param int $per_page Specifies how many results per page . Used in pagination . ( Optional ; default is 25 )
* @ param string MySQL column sort ; ASC or DESC . ( Optional ; default is DESC )
* @ param bool $display_comments Retrieve an activity item ' s associated comments or not . ( Optional ; default is false )
* @ return array
* @ since 1.2
*/
function get_specific ( $activity_ids , $max = false , $page = 1 , $per_page = 25 , $sort = 'DESC' , $display_comments = false ) {
2012-08-08 16:49:22 +00:00
_deprecated_function ( __FUNCTION__ , '1.5' , 'Use BP_Activity_Activity::get( ..., $in ) instead.' );
2012-07-11 16:28:51 +00:00
return BP_Activity_Activity :: get ( $max , $page , $per_page , $sort , false , false , $display_comments , false , false , $activity_ids );
}
function get_id ( $user_id , $component , $type , $item_id , $secondary_item_id , $action , $content , $date_recorded ) {
global $bp , $wpdb ;
$where_args = false ;
if ( ! empty ( $user_id ) )
$where_args [] = $wpdb -> prepare ( " user_id = %d " , $user_id );
if ( ! empty ( $component ) )
$where_args [] = $wpdb -> prepare ( " component = %s " , $component );
if ( ! empty ( $type ) )
$where_args [] = $wpdb -> prepare ( " type = %s " , $type );
if ( ! empty ( $item_id ) )
$where_args [] = $wpdb -> prepare ( " item_id = %s " , $item_id );
if ( ! empty ( $secondary_item_id ) )
$where_args [] = $wpdb -> prepare ( " secondary_item_id = %s " , $secondary_item_id );
if ( ! empty ( $action ) )
$where_args [] = $wpdb -> prepare ( " action = %s " , $action );
if ( ! empty ( $content ) )
$where_args [] = $wpdb -> prepare ( " content = %s " , $content );
if ( ! empty ( $date_recorded ) )
$where_args [] = $wpdb -> prepare ( " date_recorded = %s " , $date_recorded );
if ( ! empty ( $where_args ) )
$where_sql = 'WHERE ' . join ( ' AND ' , $where_args );
else
return false ;
return $wpdb -> get_var ( " SELECT id FROM { $bp -> activity -> table_name } { $where_sql } " );
}
function delete ( $args ) {
global $wpdb , $bp ;
$defaults = array (
'id' => false ,
'action' => false ,
'content' => false ,
'component' => false ,
'type' => false ,
'primary_link' => false ,
'user_id' => false ,
'item_id' => false ,
'secondary_item_id' => false ,
'date_recorded' => false ,
'hide_sitewide' => false
);
$params = wp_parse_args ( $args , $defaults );
extract ( $params );
$where_args = false ;
if ( ! empty ( $id ) )
$where_args [] = $wpdb -> prepare ( " id = %d " , $id );
if ( ! empty ( $user_id ) )
$where_args [] = $wpdb -> prepare ( " user_id = %d " , $user_id );
if ( ! empty ( $action ) )
$where_args [] = $wpdb -> prepare ( " action = %s " , $action );
if ( ! empty ( $content ) )
$where_args [] = $wpdb -> prepare ( " content = %s " , $content );
if ( ! empty ( $component ) )
$where_args [] = $wpdb -> prepare ( " component = %s " , $component );
if ( ! empty ( $type ) )
$where_args [] = $wpdb -> prepare ( " type = %s " , $type );
if ( ! empty ( $primary_link ) )
$where_args [] = $wpdb -> prepare ( " primary_link = %s " , $primary_link );
if ( ! empty ( $item_id ) )
$where_args [] = $wpdb -> prepare ( " item_id = %s " , $item_id );
if ( ! empty ( $secondary_item_id ) )
$where_args [] = $wpdb -> prepare ( " secondary_item_id = %s " , $secondary_item_id );
if ( ! empty ( $date_recorded ) )
$where_args [] = $wpdb -> prepare ( " date_recorded = %s " , $date_recorded );
if ( ! empty ( $hide_sitewide ) )
$where_args [] = $wpdb -> prepare ( " hide_sitewide = %d " , $hide_sitewide );
if ( ! empty ( $where_args ) )
$where_sql = 'WHERE ' . join ( ' AND ' , $where_args );
else
return false ;
// Fetch the activity IDs so we can delete any comments for this activity item
$activity_ids = $wpdb -> get_col ( $wpdb -> prepare ( " SELECT id FROM { $bp -> activity -> table_name } { $where_sql } " ) );
if ( ! $wpdb -> query ( $wpdb -> prepare ( " DELETE FROM { $bp -> activity -> table_name } { $where_sql } " ) ) )
return false ;
if ( $activity_ids ) {
BP_Activity_Activity :: delete_activity_item_comments ( $activity_ids );
BP_Activity_Activity :: delete_activity_meta_entries ( $activity_ids );
return $activity_ids ;
}
return $activity_ids ;
}
function delete_activity_item_comments ( $activity_ids ) {
global $bp , $wpdb ;
if ( is_array ( $activity_ids ) )
$activity_ids = implode ( ',' , array_map ( 'absint' , $activity_ids ) );
else
$activity_ids = implode ( ',' , array_map ( 'absint' , explode ( ',' , $activity_ids ) ) );
return $wpdb -> query ( $wpdb -> prepare ( " DELETE FROM { $bp -> activity -> table_name } WHERE type = 'activity_comment' AND item_id IN ( { $activity_ids } ) " ) );
}
function delete_activity_meta_entries ( $activity_ids ) {
global $bp , $wpdb ;
if ( is_array ( $activity_ids ) )
$activity_ids = implode ( ',' , array_map ( 'absint' , $activity_ids ) );
else
$activity_ids = implode ( ',' , array_map ( 'absint' , explode ( ',' , $activity_ids ) ) );
return $wpdb -> query ( $wpdb -> prepare ( " DELETE FROM { $bp -> activity -> table_name_meta } WHERE activity_id IN ( { $activity_ids } ) " ) );
}
2012-08-08 16:49:22 +00:00
function append_comments ( $activities ) {
global $bp , $wpdb ;
2012-07-11 16:28:51 +00:00
$activity_comments = array ();
/* Now fetch the activity comments and parse them into the correct position in the activities array. */
2012-08-08 16:49:22 +00:00
foreach ( ( array ) $activities as $activity ) {
2012-07-11 16:28:51 +00:00
if ( 'activity_comment' != $activity -> type && $activity -> mptt_left && $activity -> mptt_right )
2012-08-08 16:49:22 +00:00
$activity_comments [ $activity -> id ] = BP_Activity_Activity :: get_activity_comments ( $activity -> id , $activity -> mptt_left , $activity -> mptt_right );
2012-07-11 16:28:51 +00:00
}
/* Merge the comments with the activity items */
2012-08-08 16:49:22 +00:00
foreach ( ( array ) $activities as $key => $activity )
2012-07-11 16:28:51 +00:00
if ( isset ( $activity_comments [ $activity -> id ] ) )
$activities [ $key ] -> children = $activity_comments [ $activity -> id ];
return $activities ;
}
2012-08-08 16:49:22 +00:00
function get_activity_comments ( $activity_id , $left , $right ) {
2012-07-11 16:28:51 +00:00
global $wpdb , $bp ;
if ( ! $comments = wp_cache_get ( 'bp_activity_comments_' . $activity_id ) ) {
// Select the user's fullname with the query
if ( bp_is_active ( 'xprofile' ) ) {
$fullname_select = " , pd.value as user_fullname " ;
$fullname_from = " , { $bp -> profile -> table_name_data } pd " ;
$fullname_where = " AND pd.user_id = a.user_id AND pd.field_id = 1 " ;
// Prevent debug errors
} else {
$fullname_select = $fullname_from = $fullname_where = '' ;
}
// Retrieve all descendants of the $root node
2012-08-08 16:49:22 +00:00
$descendants = $wpdb -> get_results ( apply_filters ( 'bp_activity_comments_user_join_filter' , $wpdb -> prepare ( " SELECT a.*, u.user_email, u.user_nicename, u.user_login, u.display_name { $fullname_select } FROM { $bp -> activity -> table_name } a, { $wpdb -> users } u { $fullname_from } WHERE u.ID = a.user_id { $fullname_where } AND a.type = 'activity_comment' AND a.item_id = %d AND a.mptt_left BETWEEN %d AND %d ORDER BY a.date_recorded ASC " , $activity_id , $left , $right ), $activity_id , $left , $right ) );
2012-07-11 16:28:51 +00:00
// Loop descendants and build an assoc array
2012-08-08 16:49:22 +00:00
foreach ( ( array ) $descendants as $d ) {
2012-07-11 16:28:51 +00:00
$d -> children = array ();
// If we have a reference on the parent
if ( isset ( $ref [ $d -> secondary_item_id ] ) ) {
$ref [ $d -> secondary_item_id ] -> children [ $d -> id ] = $d ;
$ref [ $d -> id ] =& $ref [ $d -> secondary_item_id ] -> children [ $d -> id ];
// If we don't have a reference on the parent, put in the root level
} else {
$comments [ $d -> id ] = $d ;
$ref [ $d -> id ] =& $comments [ $d -> id ];
}
}
wp_cache_set ( 'bp_activity_comments_' . $activity_id , $comments , 'bp' );
}
return $comments ;
}
function rebuild_activity_comment_tree ( $parent_id , $left = 1 ) {
global $wpdb , $bp ;
// The right value of this node is the left value + 1
$right = $left + 1 ;
// Get all descendants of this node
$descendants = BP_Activity_Activity :: get_child_comments ( $parent_id );
// Loop the descendants and recalculate the left and right values
2012-08-08 16:49:22 +00:00
foreach ( ( array ) $descendants as $descendant )
2012-07-11 16:28:51 +00:00
$right = BP_Activity_Activity :: rebuild_activity_comment_tree ( $descendant -> id , $right );
// We've got the left value, and now that we've processed the children
// of this node we also know the right value
if ( 1 == $left )
$wpdb -> query ( $wpdb -> prepare ( " UPDATE { $bp -> activity -> table_name } SET mptt_left = %d, mptt_right = %d WHERE id = %d " , $left , $right , $parent_id ) );
else
$wpdb -> query ( $wpdb -> prepare ( " UPDATE { $bp -> activity -> table_name } SET mptt_left = %d, mptt_right = %d WHERE type = 'activity_comment' AND id = %d " , $left , $right , $parent_id ) );
// Return the right value of this node + 1
return $right + 1 ;
}
function get_child_comments ( $parent_id ) {
global $bp , $wpdb ;
return $wpdb -> get_results ( $wpdb -> prepare ( " SELECT id FROM { $bp -> activity -> table_name } WHERE type = 'activity_comment' AND secondary_item_id = %d " , $parent_id ) );
}
function get_recorded_components () {
global $wpdb , $bp ;
return $wpdb -> get_col ( $wpdb -> prepare ( " SELECT DISTINCT component FROM { $bp -> activity -> table_name } ORDER BY component ASC " ) );
}
function get_sitewide_items_for_feed ( $limit = 35 ) {
2012-08-08 16:49:22 +00:00
global $wpdb , $bp ;
2012-07-11 16:28:51 +00:00
2012-08-08 16:49:22 +00:00
$activities = bp_activity_get_sitewide ( array ( 'max' => $limit ) );
2012-07-11 16:28:51 +00:00
for ( $i = 0 , $count = count ( $activities ); $i < $count ; ++ $i ) {
2012-08-08 16:49:22 +00:00
$title = explode ( '<span' , $activities [ $i ][ 'content' ] );
$activity_feed [ $i ][ 'title' ] = trim ( strip_tags ( $title [ 0 ] ) );
$activity_feed [ $i ][ 'link' ] = $activities [ $i ][ 'primary_link' ];
2012-07-11 16:28:51 +00:00
$activity_feed [ $i ][ 'description' ] = @ sprintf ( $activities [ $i ][ 'content' ], '' );
2012-08-08 16:49:22 +00:00
$activity_feed [ $i ][ 'pubdate' ] = $activities [ $i ][ 'date_recorded' ];
2012-07-11 16:28:51 +00:00
}
return $activity_feed ;
}
function get_in_operator_sql ( $field , $items ) {
global $wpdb ;
// split items at the comma
$items_dirty = explode ( ',' , $items );
// array of prepared integers or quoted strings
$items_prepared = array ();
// clean up and format each item
foreach ( $items_dirty as $item ) {
// clean up the string
$item = trim ( $item );
// pass everything through prepare for security and to safely quote strings
$items_prepared [] = ( is_numeric ( $item ) ) ? $wpdb -> prepare ( '%d' , $item ) : $wpdb -> prepare ( '%s' , $item );
}
// build IN operator sql syntax
if ( count ( $items_prepared ) )
return sprintf ( '%s IN ( %s )' , trim ( $field ), implode ( ',' , $items_prepared ) );
else
return false ;
}
function get_filter_sql ( $filter_array ) {
2012-08-08 16:49:22 +00:00
global $wpdb ;
2012-07-11 16:28:51 +00:00
if ( ! empty ( $filter_array [ 'user_id' ] ) ) {
$user_sql = BP_Activity_Activity :: get_in_operator_sql ( 'a.user_id' , $filter_array [ 'user_id' ] );
if ( ! empty ( $user_sql ) )
$filter_sql [] = $user_sql ;
}
if ( ! empty ( $filter_array [ 'object' ] ) ) {
$object_sql = BP_Activity_Activity :: get_in_operator_sql ( 'a.component' , $filter_array [ 'object' ] );
if ( ! empty ( $object_sql ) )
$filter_sql [] = $object_sql ;
}
if ( ! empty ( $filter_array [ 'action' ] ) ) {
$action_sql = BP_Activity_Activity :: get_in_operator_sql ( 'a.type' , $filter_array [ 'action' ] );
if ( ! empty ( $action_sql ) )
$filter_sql [] = $action_sql ;
}
if ( ! empty ( $filter_array [ 'primary_id' ] ) ) {
$pid_sql = BP_Activity_Activity :: get_in_operator_sql ( 'a.item_id' , $filter_array [ 'primary_id' ] );
if ( ! empty ( $pid_sql ) )
$filter_sql [] = $pid_sql ;
}
if ( ! empty ( $filter_array [ 'secondary_id' ] ) ) {
$sid_sql = BP_Activity_Activity :: get_in_operator_sql ( 'a.secondary_item_id' , $filter_array [ 'secondary_id' ] );
if ( ! empty ( $sid_sql ) )
$filter_sql [] = $sid_sql ;
}
2012-08-08 16:49:22 +00:00
if ( empty ( $filter_sql ) )
2012-07-11 16:28:51 +00:00
return false ;
return join ( ' AND ' , $filter_sql );
}
function get_last_updated () {
global $bp , $wpdb ;
return $wpdb -> get_var ( $wpdb -> prepare ( " SELECT date_recorded FROM { $bp -> activity -> table_name } ORDER BY date_recorded DESC LIMIT 1 " ) );
}
function total_favorite_count ( $user_id ) {
if ( ! $favorite_activity_entries = bp_get_user_meta ( $user_id , 'bp_favorite_activities' , true ) )
return 0 ;
return count ( maybe_unserialize ( $favorite_activity_entries ) );
}
function check_exists_by_content ( $content ) {
global $wpdb , $bp ;
return $wpdb -> get_var ( $wpdb -> prepare ( " SELECT id FROM { $bp -> activity -> table_name } WHERE content = %s " , $content ) );
}
function hide_all_for_user ( $user_id ) {
global $wpdb , $bp ;
return $wpdb -> get_var ( $wpdb -> prepare ( " UPDATE { $bp -> activity -> table_name } SET hide_sitewide = 1 WHERE user_id = %d " , $user_id ) );
}
}
?>