Changeset 31396
- Timestamp:
- 02/10/2015 01:13:38 AM (10 years ago)
- Location:
- branches/4.1
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/4.1
-
branches/4.1/src/wp-includes/date.php
r31377 r31396 306 306 // Days per year. 307 307 if ( array_key_exists( 'year', $date_query ) ) { 308 // If a year exists in the date query, we can use it to get the days. 309 $max_days_of_year = date( 'z', mktime( 0, 0, 0, 12, 31, $date_query['year'] ) ) + 1; 308 /* 309 * If a year exists in the date query, we can use it to get the days. 310 * If multiple years are provided (as in a BETWEEN), use the first one. 311 */ 312 if ( is_array( $date_query['year'] ) ) { 313 $_year = reset( $date_query['year'] ); 314 } else { 315 $_year = $date_query['year']; 316 } 317 318 $max_days_of_year = date( 'z', mktime( 0, 0, 0, 12, 31, $_year ) ) + 1; 310 319 } else { 311 320 // otherwise we use the max of 366 (leap-year) … … 337 346 338 347 // Weeks per year. 339 if ( array_key_exists( 'year', $date_query) ) {348 if ( isset( $_year ) ) { 340 349 // If we have a specific year, use it to calculate number of weeks. 341 350 $date = new DateTime(); 342 $date->setISODate( $ date_query['year'], 53 );351 $date->setISODate( $_year, 53 ); 343 352 $week_count = $date->format( "W" ) === "53" ? 53 : 52; 344 353 … … 383 392 } 384 393 385 $is_between = $date_query[ $key ] >= $check['min'] && $date_query[ $key ] <= $check['max']; 386 387 if ( ! is_numeric( $date_query[ $key ] ) || ! $is_between ) { 388 389 $error = sprintf( 390 /* translators: Date query invalid date message: 1: invalid value, 2: type of value, 3: minimum valid value, 4: maximum valid value */ 391 __( 'Invalid value %1$s for %2$s. Expected value should be between %3$s and %4$s.' ), 392 '<code>' . esc_html( $date_query[ $key ] ) . '</code>', 393 '<code>' . esc_html( $key ) . '</code>', 394 '<code>' . esc_html( $check['min'] ) . '</code>', 395 '<code>' . esc_html( $check['max'] ) . '</code>' 396 ); 397 398 _doing_it_wrong( __CLASS__, $error, '4.1.0' ); 399 400 $valid = false; 394 // Throw a notice for each failing value. 395 $is_between = true; 396 foreach ( (array) $date_query[ $key ] as $_value ) { 397 $is_between = $_value >= $check['min'] && $_value <= $check['max']; 398 399 if ( ! is_numeric( $_value ) || ! $is_between ) { 400 $error = sprintf( 401 /* translators: Date query invalid date message: 1: invalid value, 2: type of value, 3: minimum valid value, 4: maximum valid value */ 402 __( 'Invalid value %1$s for %2$s. Expected value should be between %3$s and %4$s.' ), 403 '<code>' . esc_html( $_value ) . '</code>', 404 '<code>' . esc_html( $key ) . '</code>', 405 '<code>' . esc_html( $check['min'] ) . '</code>', 406 '<code>' . esc_html( $check['max'] ) . '</code>' 407 ); 408 409 _doing_it_wrong( __CLASS__, $error, '4.1.0' ); 410 411 $valid = false; 412 } 401 413 } 402 414 } -
branches/4.1/tests/phpunit/tests/date/query.php
r31377 r31396 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.