Changeset 31179
- Timestamp:
- 01/14/2015 04:50:09 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/date.php
r31090 r31179 305 305 // Days per year. 306 306 if ( array_key_exists( 'year', $date_query ) ) { 307 // If a year exists in the date query, we can use it to get the days. 308 $max_days_of_year = date( 'z', mktime( 0, 0, 0, 12, 31, $date_query['year'] ) ) + 1; 307 /* 308 * If a year exists in the date query, we can use it to get the days. 309 * If multiple years are provided (as in a BETWEEN), use the first one. 310 */ 311 if ( is_array( $date_query['year'] ) ) { 312 $_year = reset( $date_query['year'] ); 313 } else { 314 $_year = $date_query['year']; 315 } 316 317 $max_days_of_year = date( 'z', mktime( 0, 0, 0, 12, 31, $_year ) ) + 1; 309 318 } else { 310 319 // otherwise we use the max of 366 (leap-year) … … 336 345 337 346 // Weeks per year. 338 if ( array_key_exists( 'year', $date_query) ) {347 if ( isset( $_year ) ) { 339 348 // If we have a specific year, use it to calculate number of weeks. 340 349 $date = new DateTime(); 341 $date->setISODate( $ date_query['year'], 53 );350 $date->setISODate( $_year, 53 ); 342 351 $week_count = $date->format( "W" ) === "53" ? 53 : 52; 343 352 … … 382 391 } 383 392 384 $is_between = $date_query[ $key ] >= $check['min'] && $date_query[ $key ] <= $check['max']; 385 386 if ( ! $is_between ) { 387 388 $error = sprintf( 389 /* translators: Date query invalid date message: 1: invalid value, 2: type of value, 3: minimum valid value, 4: maximum valid value */ 390 __( 'Invalid value %1$s for %2$s. Expected value should be between %3$s and %4$s.' ), 391 '<code>' . esc_html( $date_query[ $key ] ) . '</code>', 392 '<code>' . esc_html( $key ) . '</code>', 393 '<code>' . esc_html( $check['min'] ) . '</code>', 394 '<code>' . esc_html( $check['max'] ) . '</code>' 395 ); 396 397 _doing_it_wrong( __CLASS__, $error, '4.1.0' ); 398 399 $valid = false; 393 // Throw a notice for each failing value. 394 $is_between = true; 395 foreach ( (array) $date_query[ $key ] as $_value ) { 396 $is_between = $_value >= $check['min'] && $_value <= $check['max']; 397 398 if ( ! $is_between ) { 399 $error = sprintf( 400 /* translators: Date query invalid date message: 1: invalid value, 2: type of value, 3: minimum valid value, 4: maximum valid value */ 401 __( 'Invalid value %1$s for %2$s. Expected value should be between %3$s and %4$s.' ), 402 '<code>' . esc_html( $_value ) . '</code>', 403 '<code>' . esc_html( $key ) . '</code>', 404 '<code>' . esc_html( $check['min'] ) . '</code>', 405 '<code>' . esc_html( $check['max'] ) . '</code>' 406 ); 407 408 _doing_it_wrong( __CLASS__, $error, '4.1.0' ); 409 410 $valid = false; 411 } 400 412 } 401 413 } -
trunk/tests/phpunit/tests/date/query.php
r30142 r31179 961 961 } 962 962 963 /** 964 * @ticket 31001 965 */ 966 public function test_validate_date_values_should_process_array_value_for_year() { 967 $p1 = $this->factory->post->create( array( 'post_date' => '2015-01-12' ) ); 968 $p2 = $this->factory->post->create( array( 'post_date' => '2013-01-12' ) ); 969 970 $q = new WP_Query( array( 971 'date_query' => array( 972 array( 973 'compare' => 'BETWEEN', 974 'year' => array( 2012, 2014 ), 975 ), 976 ), 977 'fields' => 'ids', 978 ) ); 979 980 $this->assertEquals( array( $p2 ), $q->posts ); 981 } 982 983 /** 984 * @ticket 31001 985 */ 986 public function test_validate_date_values_should_process_array_value_for_day() { 987 $p1 = $this->factory->post->create( array( 'post_date' => '2015-01-12' ) ); 988 $p2 = $this->factory->post->create( array( 'post_date' => '2015-01-10' ) ); 989 990 $q = new WP_Query( array( 991 'date_query' => array( 992 array( 993 'compare' => 'BETWEEN', 994 'day' => array( 9, 11 ), 995 ), 996 ), 997 'fields' => 'ids', 998 ) ); 999 1000 $this->assertEquals( array( $p2 ), $q->posts ); 1001 } 1002 1003 /** 1004 * @ticket 31001 1005 * @expectedIncorrectUsage WP_Date_Query 1006 */ 1007 public function test_validate_date_values_should_process_array_value_for_day_when_values_are_invalid() { 1008 $p1 = $this->factory->post->create( array( 'post_date' => '2015-01-12' ) ); 1009 $p2 = $this->factory->post->create( array( 'post_date' => '2015-01-10' ) ); 1010 1011 $q = new WP_Query( array( 1012 'date_query' => array( 1013 array( 1014 'compare' => 'BETWEEN', 1015 'day' => array( 9, 32 ), 1016 ), 1017 ), 1018 'fields' => 'ids', 1019 ) ); 1020 1021 // MySQL ignores the invalid clause. 1022 $this->assertEquals( array( $p1, $p2 ), $q->posts ); 1023 } 1024 963 1025 /** Helpers **********************************************************/ 964 1026
Note: See TracChangeset
for help on using the changeset viewer.