<?php
/**
 * Return a list of sites for the current network
 *
 * @since 3.1.0
 *
 * @param array|string $args Optional. Override default arguments.
 * @return array site list and values
 */
function wp_get_sites($args){
// replacement for wp-includes/ms-deprecated.php#get_blog_list
// see wp-admin/ms-sites.php#352
//  also wp-includes/ms-functions.php#get_blogs_of_user
//  also wp-includes/post-template.php#wp_list_pages
	global $wpdb;
	
	$defaults = array(
		'include_id' 		,				// includes only these sites in the results, comma-delimited
		'exclude_id' 		,				// excludes these sites from the results, comma-delimted
		'blogname_like' 	,				// domain or path is like this value
		'ip_like'			,				// Match IP address
		'reg_date_since'	,				// sites registered since (accepts pretty much any valid date like tomorrow, today, 5/12/2009, etc.)
		'reg_date_before'	,				// sites registered before
		'include_user_id'	,				// only sites owned by these users, comma-delimited
		'exclude_user_id'	,				// don't include sites owned by these users, comma-delimited
		'include_spam'		=> false,		// Include sites marked as "spam"
		'include_deleted'	=> false,		// Include deleted sites
		'include_archived'	=> false,		// Include archived sites
		'include_mature'	=> false,		// Included blogs marked as mature
		'public_only'		=> true,		// Include only blogs marked as public
		'sort_column'		=> 'registered',// or registered, last_updated, blogname, site_id
		'order'				=> 'asc',		// or desc
		'limit_results'		,				// return this many results
		'start'				,				// return results starting with this item
	);
	function make_email_list_by_user_id($user_ids){
		$the_users = explode(',',$user_ids);
		$the_emails = array();
		foreach( (array) $the_users as $user_id){
			$the_user = get_userdata($user_id);
			$the_emails[] = $the_user->user_email;
		}
		return $the_emails;
	}
	

	// array_merge
	$r = wp_parse_args( $args, $defaults );
	extract( $r, EXTR_SKIP );

	$query = "SELECT * FROM {$wpdb->blogs}, {$wpdb->registration_log} WHERE site_id = '{$wpdb->siteid}' AND {$wpdb->blogs}.blog_id = {$wpdb->registration_log}.blog_id ";

	if ( isset($include_id) ) {
		$list = implode("','", explode(',', $include_id));
		$query .= " AND {$wpdb->blogs}.blog_id IN ('{$list}') ";
	}
	if ( isset($exclude_id) ) {
		$list = implode("','", explode(',', $exclude_id));
		$query .= " AND {$wpdb->blogs}.blog_id NOT IN ('{$list}') ";
	}
	if ( isset($blogname_like) ) {
		$query .= " AND ( {$wpdb->blogs}.domain LIKE '%".$blogname_like."%' OR {$wpdb->blogs}.path LIKE '%".$blogname_like."%' ) ";
	}
	if ( isset($ip_like) ) {
		$query .= " AND {$wpdb->registration_log}.IP LIKE '%".$ip_like."%' ";
	}
	if( isset($reg_date_since) ){
		$query .= " AND unix_timestamp({$wpdb->registration_log}.date_registered) > '".strtotime($reg_date_since)."' ";
	}
	if( isset($reg_date_before) ){
		$query .= " AND unix_timestamp({$wpdb->registration_log}.date_registered) < '".strtotime($reg_date_before)."' ";
	}
	if ( isset($include_user_id) ) {
		$the_emails = make_email_list_by_user_id($include_user_id);
		$list = implode("','", $the_emails);
		$query .= " AND {$wpdb->registration_log}.email IN ('{$list}') ";
	}
	if ( isset($exclude_user_id) ) {
		$the_emails = make_email_list_by_user_id($include_user_id);
		$list = implode("','", $the_emails);
		$query .= " AND {$wpdb->registration_log}.email NOT IN ('{$list}') ";
	}
	if ( isset($ip_like) ) {
		$query .= " AND {$wpdb->registration_log}.IP LIKE ('%".$ip_like."%') ";
	}
	
	$query .= " AND {$wpdb->blogs}.public = ". (($public_only) ? "'1'" : "'0'");
	$query .= " AND {$wpdb->blogs}.archived = ". (($include_archived) ? "'1'" : "'0'");
	$query .= " AND {$wpdb->blogs}.mature = ". (($include_mature) ? "'1'" : "'0'");
	$query .= " AND {$wpdb->blogs}.spam = ". (($include_spam) ? "'1'" : "'0'");
	$query .= " AND {$wpdb->blogs}.deleted = ". (($include_deleted) ? "'1'" : "'0'");
	
	if ( $sort_column == 'site_id' ) {
		$query .= ' ORDER BY {$wpdb->blogs}.blog_id ';
	} elseif ( $sort_column == 'lastupdated' ) {
		$query .= ' ORDER BY last_updated ';
	} elseif ( $sort_column == 'blogname' ) {
		$query .= ' ORDER BY domain ';
	} else {
		$sort_column = 'registered';
		$query .= " ORDER BY {$wpdb->blogs}.registered ";
	}

	$order = ( 'desc' == $order ) ? "DESC" : "ASC";
	$query .= $order;
	
	$limit = '';
	if( isset($limit_results) ){
		if( isset($start) ){
			$limit = $start." , ";
		}
		$query .= "LIMIT ".$limit.$limit_results;
	}
	
	$sql = $wpdb->prepare($query);

	$results = $wpdb->get_results($sql, ARRAY_A);
	
	return $results;	
}