Ticket #34913: 34913-6.9.diff
| File 34913-6.9.diff, 6.7 KB (added by , 8 months ago) |
|---|
-
src/wp-admin/includes/upgrade.php
886 886 upgrade_682(); 887 887 } 888 888 889 if ( $wp_current_db_version < 60445 ) { 890 upgrade_690(); 891 } 892 889 893 maybe_disable_link_manager(); 890 894 891 895 maybe_disable_automattic_widgets(); … … 2481 2485 } 2482 2486 2483 2487 /** 2488 * Executes changes made in WordPress 6.9.0. 2489 * 2490 * @ignore 2491 * @since 6.9.0 2492 * 2493 * @global int $wp_current_db_version Current database version. 2494 */ 2495 function upgrade_690() { 2496 global $wp_current_db_version; 2497 2498 // Getting the cron array will automatically update it to version 3. 2499 if ( $wp_current_db_version < 60445 ) { 2500 _get_cron_array(); 2501 } 2502 } 2503 2504 /** 2484 2505 * Executes network-level upgrade routines. 2485 2506 * 2486 2507 * @since 3.0.0 -
src/wp-includes/cron.php
49 49 return false; 50 50 } 51 51 52 // Make sure args parameter is an array. 53 if ( ! is_array( $args ) ) { 54 _doing_it_wrong( __FUNCTION__, __( 'Cron arguments are expected to be an array. Please update your function call.' ), '6.9.0' ); 55 $args = _cron_cast_to_array_helper( $args ); 56 } 57 52 58 $event = (object) array( 53 59 'hook' => $hook, 54 60 'timestamp' => $timestamp, … … 244 250 return false; 245 251 } 246 252 253 // Make sure args parameter is an array. 254 if ( ! is_array( $args ) ) { 255 _doing_it_wrong( __FUNCTION__, __( 'Cron arguments are expected to be an array. Please update your function call.' ), '6.9.0' ); 256 $args = _cron_cast_to_array_helper( $args ); 257 } 258 247 259 $schedules = wp_get_schedules(); 248 260 249 261 if ( ! isset( $schedules[ $recurrence ] ) ) { … … 350 362 return false; 351 363 } 352 364 365 // Make sure args parameter is an array. 366 if ( ! is_array( $args ) ) { 367 _doing_it_wrong( __FUNCTION__, __( 'Cron arguments are expected to be an array. Please update your function call.' ), '6.9.0' ); 368 $args = _cron_cast_to_array_helper( $args ); 369 } 370 353 371 $schedules = wp_get_schedules(); 354 372 $interval = 0; 355 373 … … 472 490 return false; 473 491 } 474 492 493 // Make sure args parameter is an array. 494 if ( ! is_array( $args ) ) { 495 _doing_it_wrong( __FUNCTION__, __( 'Cron arguments are expected to be an array. Please update your function call.' ), '6.9.0' ); 496 $args = _cron_cast_to_array_helper( $args ); 497 } 498 475 499 /** 476 500 * Filter to override unscheduling of events. 477 501 * … … 782 806 return false; 783 807 } 784 808 809 // Make sure args parameter is an array. 810 if ( ! is_array( $args ) ) { 811 _doing_it_wrong( __FUNCTION__, __( 'Cron arguments are expected to be an array. Please update your function call.' ), '6.9.0' ); 812 $args = _cron_cast_to_array_helper( $args ); 813 } 814 785 815 $key = md5( serialize( $args ) ); 786 816 787 817 if ( ! $timestamp ) { … … 830 860 * @return int|false The Unix timestamp (UTC) of the next time the event will occur. False if the event doesn't exist. 831 861 */ 832 862 function wp_next_scheduled( $hook, $args = array() ) { 863 // Make sure args parameter is an array. 864 if ( ! is_array( $args ) ) { 865 _doing_it_wrong( __FUNCTION__, __( 'Cron arguments are expected to be an array. Please update your function call.' ), '6.9.0' ); 866 $args = _cron_cast_to_array_helper( $args ); 867 } 868 833 869 $next_event = wp_get_scheduled_event( $hook, $args ); 834 870 835 871 if ( ! $next_event ) { … … 1231 1267 return array(); 1232 1268 } 1233 1269 1234 if ( ! isset( $cron['version'] ) ) {1270 if ( ! isset( $cron['version'] ) || $cron['version'] < 3 ) { 1235 1271 $cron = _upgrade_cron_array( $cron ); 1236 1272 } 1237 1273 … … 1258 1294 $cron = array(); 1259 1295 } 1260 1296 1261 $cron['version'] = 2;1297 $cron['version'] = 3; 1262 1298 1263 1299 $result = update_option( 'cron', $cron, true ); 1264 1300 … … 1284 1320 * @return array An upgraded cron info array. 1285 1321 */ 1286 1322 function _upgrade_cron_array( $cron ) { 1287 if ( isset( $cron['version'] ) && 2=== $cron['version'] ) {1323 if ( isset( $cron['version'] ) && 3 === $cron['version'] ) { 1288 1324 return $cron; 1289 1325 } 1290 1326 1291 1327 $new_cron = array(); 1292 1328 1293 1329 foreach ( (array) $cron as $timestamp => $hooks ) { 1294 foreach ( (array) $hooks as $hook => $ args) {1295 $ key = md5( serialize( $args['args'] ));1296 1297 $new_cron[ $timestamp ][ $hook ][ $key ] = $ args;1330 foreach ( (array) $hooks as $hook => $event ) { 1331 $event['args'] = _cron_cast_to_array_helper( $event ); 1332 $key = md5( serialize( $event['args'] ) ); 1333 $new_cron[ $timestamp ][ $hook ][ $key ] = $event; 1298 1334 } 1299 1335 } 1300 1336 1301 $new_cron['version'] = 2;1337 $new_cron['version'] = 3; 1302 1338 1303 1339 update_option( 'cron', $new_cron, true ); 1304 1340 1305 1341 return $new_cron; 1306 1342 } 1343 1344 /** 1345 * Compatibility function for consistent casting to array of cron arguments. 1346 * 1347 * @since 6.9.0 1348 * @access private 1349 * 1350 * @param mixed $args Cron arguments. 1351 * @return array 1352 */ 1353 function _cron_cast_to_array_helper( $args ) { 1354 if ( is_object( $args ) ) { 1355 return array( $args ); 1356 } 1357 return (array) $args; 1358 } -
src/wp-includes/version.php
23 23 * 24 24 * @global int $wp_db_version 25 25 */ 26 $wp_db_version = 604 21;26 $wp_db_version = 60445; 27 27 28 28 /** 29 29 * Holds the TinyMCE version. -
tests/phpunit/tests/cron.php
342 342 } 343 343 344 344 /** 345 * Ensure cron events created without arguments as an array can be unscheduled. 346 * 347 * @ticket 34913 348 * 349 * @dataProvider data_clear_schedule_non_array_args 350 * 351 * @expectedDeprecated wp_clear_scheduled_hook 352 * @expectedIncorrectUsage wp_schedule_single_event 353 * @expectedIncorrectUsage wp_next_scheduled 354 */ 355 function test_clear_schedule_non_array_args( $args ) { 356 $hook = __FUNCTION__; 357 $timestamp = strtotime('+1 hour' ); 358 359 // Schedule event with non-array arguments. 360 wp_schedule_single_event( $timestamp, $hook, $args ); 361 362 // Make sure it's returned by wp_next_scheduled(). 363 $this->assertEquals( $timestamp, wp_next_scheduled( $hook, $args ) ); 364 365 // Make sure it was converted to an array. 366 $this->assertEquals( $timestamp, wp_next_scheduled( $hook, array( $args ) ) ); 367 368 // Clear the schedule and make sure it's gone. 369 wp_clear_scheduled_hook( $hook, $args ); 370 $this->assertFalse( wp_next_scheduled( $hook, $args ) ); 371 $this->assertFalse( wp_next_scheduled( $hook, array( $args ) ) ); 372 } 373 374 /** 375 * Data provider for test_clear_schedule_non_array_args. 376 * 377 * @return array { 378 * @type array $0... { 379 * @type mixed $0 Cron arguments. 380 * } 381 * } 382 */ 383 function data_clear_schedule_non_array_args() { 384 return array( 385 // Boolean 386 array( true ), 387 388 // Integer 389 array( 34913 ), 390 391 // Float 392 array( 34.913 ), 393 394 // String 395 array( 'Ticket 34913' ), 396 397 // stdClass 398 array( 399 (object) array( 400 'a' => 'Ticket 34913', 401 'b' => 34913, 402 'c' => false, 403 ), 404 ), 405 ); 406 } 407 408 /** 345 409 * @ticket 6966 346 410 * 347 411 * @covers ::wp_schedule_single_event