<?php

require( 'wordpress-dev/wp-load.php' );

// An array of "date_query" arrays
$tests = array(

	// Between 8:45 AM and 5:12 PM on weekdays
	array(
		array(
			'hour' => 8,
			'minute' => 45,
			'compare' => '>=',
		),
		array(
			'hour' => 17,
			'minute' => 12,
			'compare' => '<=',
		),
		array(
			'dayofweek' => array( 2, 6 ),
			'compare' => 'BETWEEN',
		),
	),

	// Posted at least 30 minutes after the hour on a Tuesday
	array(
		array(
			'minute' => 30,
			'compare' => '>=',
		),
		array(
			'dayofweek' => 3,
			//'compare' => '=', // Default
		),
	),

	array(
		'column' => 'post_date_gmt',
		'relation' => 'OR',
		array(
			'hour' => array( 2, 12 ),
			'minute' => array( 5, 16 ),
			'compare' => 'BETWEEN',
		),
		array(
			'minute' => array( 45, 55 ),
			'second' => 12,
			'compare' => 'BETWEEN',
		),
		array(
			'dayofweek' => array( 2, 4, 7, 'foobar' ),
			'compare' => 'IN',
		),
	),

	array(
		array(
			'after' => '3 weeks ago',
			'before' => '2 weeks ago',
		),
	),

	// Posted over a year ago but modified in the past month
	array(
		array(
			'column' => 'post_date_gmt',
			'before' => '1 year ago',
		),
		array(
			'column' => 'post_modified_gmt',
			'after' => '1 month ago',
		)
	),

	array(
		array(
			'before' => array(
				'year' => 2010,
				'month' => 3,
				'day' => 1,
			),
		),
	),

	array(
		'relation' => 'OR',
		array(
			'hour' => 14,
			'dayofweek' => 1,
		),
		array(
			'hour' => 18, // Will be cast to an array
			'dayofweek' => array( 2, 3 ),
			'compare' => 'IN',
		),
	),

	array(
		array(
			'minute' => 0,
		)
	),

	// Non-integer test
	array(
		array(
			'hour' => 'foo',
		),
	),

	// Wrong format test (not an array of arrays)
	array(
		'w' => date( 'W' ),
	),
);


// var_dump() the full SQL if WP_Query is called
add_filter( 'posts_request', 'debug_post_date_query' );
function debug_post_date_query( $var ) {
	var_dump( $var );
	return $var;
}

foreach ( $tests as $date_query ) {
	// Dump the "date_query" array
	var_dump( $date_query );
	echo '<hr>';

	// Dump just the date SQL
	$wp_date_query = new WP_Date_Query( $date_query );
	var_dump( $wp_date_query->get_sql() );
	echo '<hr>';

	/*
	$query = new WP_Query( array(
		'date_query' => $date_query,
	) );
	echo '<hr>';
	/**/
}



// var_dump() the full SQL if WP_Comment_Query is called
add_filter( 'comments_clauses', 'debug_comment_date_query' );
function debug_comment_date_query( $pieces ) {
	global $wpdb;

	extract( $pieces );
	var_dump( "SELECT $fields FROM $wpdb->comments $join WHERE $where ORDER BY $orderby $order $limits" );

	return $pieces;
}

$comments = get_comments( array(
	'date_query' => array(
		array(
			'before' => '1 week ago',
		),
	),
) );

?>