Plugin Directory

Changeset 3329028


Ignore:
Timestamp:
07/16/2025 11:49:33 AM (9 months ago)
Author:
rankmath
Message:

Update to version 1.0.249 from GitHub

Location:
seo-by-rank-math
Files:
2 added
46 edited
1 copied

Legend:

Unmodified
Added
Removed
  • seo-by-rank-math/tags/1.0.249/includes/helpers/class-wordpress.php

    r3313761 r3329028  
    765765        add_filter( 'wp_check_filetype_and_ext', [ __CLASS__, 'filetype_and_ext' ], 10, 3 );
    766766
    767         // Do the upload.
    768         $file = isset( $_FILES['import-me'] )
    769             ? wp_handle_upload( $_FILES['import-me'], [ 'test_form' => false ] )
    770             : new WP_Error( 'missing_file', __( 'No file selected for upload.', 'rank-math' ) );
     767        if ( isset( $_FILES['import-me'] ) ) {
     768            // Do the upload.
     769            if ( ! function_exists( 'wp_handle_upload' ) ) {
     770                $required_file = ABSPATH . 'wp-admin/includes/file.php';
     771                if ( file_exists( $required_file ) ) {
     772                    require_once $required_file; // @phpstan-ignore-line
     773                }
     774            }
     775            $file = wp_handle_upload( $_FILES['import-me'], [ 'test_form' => false ] );
     776        } else {
     777            $file = new WP_Error( 'missing_file', __( 'No file selected for upload.', 'rank-math' ) );
     778        }
    771779
    772780        // Remove upload hooks.
  • seo-by-rank-math/tags/1.0.249/includes/modules/buddypress/class-buddypress.php

    r3318065 r3329028  
    8686                '@type'       => 'Person',
    8787                'name'        => get_the_author_meta( 'display_name', $user_id ),
    88                 'url'         => esc_url( bp_members_get_user_url( $user_id ) ),
     88                'url'         => function_exists( 'bp_members_get_user_url' ) ? esc_url( bp_members_get_user_url( $user_id ) ) : esc_url( bp_core_get_user_domain( $user_id ) ),
    8989                'description' => get_the_author_meta( 'description', $user_id ),
    9090                'image'       => [
  • seo-by-rank-math/tags/1.0.249/languages/rank-math.pot

    r3324705 r3329028  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Rank Math SEO 1.0.249-beta\n"
     5"Project-Id-Version: Rank Math SEO 1.0.249\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/seo-by-rank-math\n"
    77"Last-Translator: Rank Math <support@rankmath.com>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-07-09T05:57:48+00:00\n"
     12"POT-Creation-Date: 2025-07-16T05:14:55+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
  • seo-by-rank-math/tags/1.0.249/rank-math.php

    r3324705 r3329028  
    1010 * @wordpress-plugin
    1111 * Plugin Name:       Rank Math SEO
    12  * Version:           1.0.249-beta
     12 * Version:           1.0.249
    1313 * Plugin URI:        https://rankmath.com/
    1414 * Description:       Rank Math SEO is the Best WordPress SEO plugin with the features of many SEO and AI SEO tools in a single package to help multiply your SEO traffic.
     
    3535     * @var string
    3636     */
    37     public $version = '1.0.249-beta';
     37    public $version = '1.0.249';
    3838
    3939    /**
  • seo-by-rank-math/tags/1.0.249/readme.txt

    r3321531 r3329028  
    66Requires at least: 6.3
    77Requires PHP: 7.4
    8 Stable tag: 1.0.248
     8Stable tag: 1.0.249
    99License: GPLv3 or later
    1010License URI: https://www.gnu.org/licenses/gpl-3.0.txt
     
    340340== Changelog ==
    341341
    342 = 1.0.248 [July 03, 2025] =
    343 - Added: [Filter](https://rankmath.com/kb/filters-hooks-api-developer/#remove-target-blank-attribute) to exclude certain domains from the [Open External Links in New Tab](https://rankmath.com/kb/open-links-in-new-window/) option
    344 - Added: [Filter](https://rankmath.com/kb/filters-hooks-api-developer/#html-sitemap-post-limit) to set a hard limit on the posts displayed in the HTML sitemap, defaults to 1000 posts
    345 - Improved: Changed the [Analytics](https://rankmath.com/kb/analytics/) data fetch frequency from 7 days to 3 days to show fresher data sooner in the Stats
    346 - Improved: Site getting automatically disconnected from Analytics will now attempt to reconnect in the background, and if that fails, a notice will prompt the user to reconnect manually
    347 - Improved: [Analytics URL Inspection](https://rankmath.com/kb/url-inspection-api-integration/) now prioritizes fetching high-traffic pages before other pages
    348 - Fixed: Incorrect [Post Analytics stats](https://rankmath.com/kb/analytics/#post-analytics) shown for secondary language posts when the sub-directory option is enabled in the WPML plugin
    349 - Fixed: PHP warning on the [Database Tools page](https://rankmath.com/kb/rank-math-status-and-tools/#database-tools) when WPML plugin is not active
    350 - Fixed: Deprecated PHP warning on the BuddyPress author page
    351 - Fixed: Deprecated warnings shown in the browser inspect on the [Setup Wizard page](https://rankmath.com/kb/how-to-setup/)
     342= 1.0.249 [July 16, 2025] =
     343- Improved: Updated the [Links modal](https://rankmath.com/kb/should-you-nofollow-external-links/) UI to align with WordPress styling
     344- Improved: Optimized database queries in the [Analytics module](https://rankmath.com/kb/analytics) running in background processes
     345- Improved: Added site notice for failed Analytics data fetch due to any reason
     346- Fixed: [Focus Keyword in Image Alt attributes test](https://rankmath.com/kb/score-100-in-tests/#focus-keyword-in-image-alt-attributes-primary-focus-keyword-only) was failing when content had no spaces
     347- Fixed: [Content Analysis tests](https://rankmath.com/kb/content-analysis-tests-for-product-pages/) were not updating in the Classic editor after switching from Text to Visual mode
     348- Fixed: Attachment name and description were not updating on some sites with [Content AI module](https://rankmath.com/kb/how-to-use-content-ai/) active
     349- Fixed: PHP error on BuddyPress Members page when BuddyBoss is active on the site
    352350
    353351Full changelog can be found here - **[Rank Math changelog](https://rankmath.com/changelog/?utm_source=Plugin&utm_medium=Changelog&utm_campaign=WP)**
  • seo-by-rank-math/tags/1.0.249/vendor/autoload.php

    r3324705 r3329028  
    2323require_once __DIR__ . '/composer/autoload_real.php';
    2424
    25 return ComposerAutoloaderInit45563e877daef92451ad455ea7d3b867::getLoader();
     25return ComposerAutoloaderInitbdd6a2e1f666e8489d5ea142b6f29e76::getLoader();
  • seo-by-rank-math/tags/1.0.249/vendor/composer/autoload_real.php

    r3324705 r3329028  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit45563e877daef92451ad455ea7d3b867
     5class ComposerAutoloaderInitbdd6a2e1f666e8489d5ea142b6f29e76
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInit45563e877daef92451ad455ea7d3b867', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInitbdd6a2e1f666e8489d5ea142b6f29e76', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    29         spl_autoload_unregister(array('ComposerAutoloaderInit45563e877daef92451ad455ea7d3b867', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInitbdd6a2e1f666e8489d5ea142b6f29e76', 'loadClassLoader'));
    3030
    3131        require __DIR__ . '/autoload_static.php';
    32         call_user_func(\Composer\Autoload\ComposerStaticInit45563e877daef92451ad455ea7d3b867::getInitializer($loader));
     32        call_user_func(\Composer\Autoload\ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::getInitializer($loader));
    3333
    3434        $loader->register(true);
    3535
    36         $includeFiles = \Composer\Autoload\ComposerStaticInit45563e877daef92451ad455ea7d3b867::$files;
     36        $includeFiles = \Composer\Autoload\ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::$files;
    3737        foreach ($includeFiles as $fileIdentifier => $file) {
    38             composerRequire45563e877daef92451ad455ea7d3b867($fileIdentifier, $file);
     38            composerRequirebdd6a2e1f666e8489d5ea142b6f29e76($fileIdentifier, $file);
    3939        }
    4040
     
    4848 * @return void
    4949 */
    50 function composerRequire45563e877daef92451ad455ea7d3b867($fileIdentifier, $file)
     50function composerRequirebdd6a2e1f666e8489d5ea142b6f29e76($fileIdentifier, $file)
    5151{
    5252    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • seo-by-rank-math/tags/1.0.249/vendor/composer/autoload_static.php

    r3324705 r3329028  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit45563e877daef92451ad455ea7d3b867
     7class ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76
    88{
    99    public static $files = array (
     
    397397    {
    398398        return \Closure::bind(function () use ($loader) {
    399             $loader->prefixLengthsPsr4 = ComposerStaticInit45563e877daef92451ad455ea7d3b867::$prefixLengthsPsr4;
    400             $loader->prefixDirsPsr4 = ComposerStaticInit45563e877daef92451ad455ea7d3b867::$prefixDirsPsr4;
    401             $loader->classMap = ComposerStaticInit45563e877daef92451ad455ea7d3b867::$classMap;
     399            $loader->prefixLengthsPsr4 = ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::$prefixLengthsPsr4;
     400            $loader->prefixDirsPsr4 = ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::$prefixDirsPsr4;
     401            $loader->classMap = ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::$classMap;
    402402
    403403        }, null, ClassLoader::class);
  • seo-by-rank-math/tags/1.0.249/vendor/composer/installed.json

    r3235345 r3329028  
    241241        {
    242242            "name": "woocommerce/action-scheduler",
    243             "version": "3.9.2",
    244             "version_normalized": "3.9.2.0",
     243            "version": "3.9.3",
     244            "version_normalized": "3.9.3.0",
    245245            "source": {
    246246                "type": "git",
    247247                "url": "https://github.com/woocommerce/action-scheduler.git",
    248                 "reference": "efbb7953f72a433086335b249292f280dd43ddfe"
    249             },
    250             "dist": {
    251                 "type": "zip",
    252                 "url": "https://api.github.com/repos/woocommerce/action-scheduler/zipball/efbb7953f72a433086335b249292f280dd43ddfe",
    253                 "reference": "efbb7953f72a433086335b249292f280dd43ddfe",
    254                 "shasum": ""
    255             },
    256             "require": {
    257                 "php": ">=7.1"
    258             },
    259             "require-dev": {
    260                 "phpunit/phpunit": "^7.5",
     248                "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c"
     249            },
     250            "dist": {
     251                "type": "zip",
     252                "url": "https://api.github.com/repos/woocommerce/action-scheduler/zipball/c58cdbab17651303d406cd3b22cf9d75c71c986c",
     253                "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c",
     254                "shasum": ""
     255            },
     256            "require": {
     257                "php": ">=7.2"
     258            },
     259            "require-dev": {
     260                "phpunit/phpunit": "^8.5",
    261261                "woocommerce/woocommerce-sniffs": "0.1.0",
    262262                "wp-cli/wp-cli": "~2.5.0",
    263263                "yoast/phpunit-polyfills": "^2.0"
    264264            },
    265             "time": "2025-02-03T09:09:30+00:00",
     265            "time": "2025-07-15T09:32:30+00:00",
    266266            "type": "wordpress-plugin",
    267267            "extra": {
     
    281281            "support": {
    282282                "issues": "https://github.com/woocommerce/action-scheduler/issues",
    283                 "source": "https://github.com/woocommerce/action-scheduler/tree/3.9.2"
     283                "source": "https://github.com/woocommerce/action-scheduler/tree/3.9.3"
    284284            },
    285285            "install-path": "../woocommerce/action-scheduler"
  • seo-by-rank-math/tags/1.0.249/vendor/composer/installed.php

    r3324705 r3329028  
    22    'root' => array(
    33        'name' => 'rankmath/seo-by-rank-math',
    4         'pretty_version' => 'v1.0.249-beta',
    5         'version' => '1.0.249.0-beta',
    6         'reference' => '506592f3cf85dd265adc9bdc78101cafd48f0175',
     4        'pretty_version' => 'v1.0.249',
     5        'version' => '1.0.249.0',
     6        'reference' => 'eacee31c09f6fa9018cec0b6b71972eb7ec35880',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    4848        ),
    4949        'rankmath/seo-by-rank-math' => array(
    50             'pretty_version' => 'v1.0.249-beta',
    51             'version' => '1.0.249.0-beta',
    52             'reference' => '506592f3cf85dd265adc9bdc78101cafd48f0175',
     50            'pretty_version' => 'v1.0.249',
     51            'version' => '1.0.249.0',
     52            'reference' => 'eacee31c09f6fa9018cec0b6b71972eb7ec35880',
    5353            'type' => 'wordpress-plugin',
    5454            'install_path' => __DIR__ . '/../../',
     
    5757        ),
    5858        'woocommerce/action-scheduler' => array(
    59             'pretty_version' => '3.9.2',
    60             'version' => '3.9.2.0',
    61             'reference' => 'efbb7953f72a433086335b249292f280dd43ddfe',
     59            'pretty_version' => '3.9.3',
     60            'version' => '3.9.3.0',
     61            'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c',
    6262            'type' => 'wordpress-plugin',
    6363            'install_path' => __DIR__ . '/../woocommerce/action-scheduler',
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/action-scheduler.php

    r3235345 r3329028  
    66 * Author: Automattic
    77 * Author URI: https://automattic.com/
    8  * Version: 3.9.2
     8 * Version: 3.9.3
    99 * License: GPLv3
    1010 * Requires at least: 6.5
    11  * Tested up to: 6.7
    12  * Requires PHP: 7.1
     11 * Tested up to: 6.8
     12 * Requires PHP: 7.2
    1313 *
    1414 * Copyright 2019 Automattic, Inc.  (https://automattic.com/contact/)
     
    3030 */
    3131
    32 if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_2' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.
     32if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_3' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.
    3333
    3434    if ( ! class_exists( 'ActionScheduler_Versions', false ) ) {
     
    3737    }
    3838
    39     add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_9_dot_2', 0, 0 ); // WRCS: DEFINED_VERSION.
     39    add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_9_dot_3', 0, 0 ); // WRCS: DEFINED_VERSION.
    4040
    4141    // phpcs:disable Generic.Functions.OpeningFunctionBraceKernighanRitchie.ContentAfterBrace
     
    4343     * Registers this version of Action Scheduler.
    4444     */
    45     function action_scheduler_register_3_dot_9_dot_2() { // WRCS: DEFINED_VERSION.
     45    function action_scheduler_register_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION.
    4646        $versions = ActionScheduler_Versions::instance();
    47         $versions->register( '3.9.2', 'action_scheduler_initialize_3_dot_9_dot_2' ); // WRCS: DEFINED_VERSION.
     47        $versions->register( '3.9.3', 'action_scheduler_initialize_3_dot_9_dot_3' ); // WRCS: DEFINED_VERSION.
    4848    }
    4949
     
    5252     * Initializes this version of Action Scheduler.
    5353     */
    54     function action_scheduler_initialize_3_dot_9_dot_2() { // WRCS: DEFINED_VERSION.
     54    function action_scheduler_initialize_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION.
    5555        // A final safety check is required even here, because historic versions of Action Scheduler
    5656        // followed a different pattern (in some unusual cases, we could reach this point and the
     
    6464    // Support usage in themes - load this version if no plugin has loaded a version yet.
    6565    if ( did_action( 'plugins_loaded' ) && ! doing_action( 'plugins_loaded' ) && ! class_exists( 'ActionScheduler', false ) ) {
    66         action_scheduler_initialize_3_dot_9_dot_2(); // WRCS: DEFINED_VERSION.
     66        action_scheduler_initialize_3_dot_9_dot_3(); // WRCS: DEFINED_VERSION.
    6767        do_action( 'action_scheduler_pre_theme_init' );
    6868        ActionScheduler_Versions::initialize_latest_version();
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php

    r3194716 r3329028  
    163163        }
    164164
    165         $wp_object_cache->group_ops      = array();
    166         $wp_object_cache->stats          = array();
    167         $wp_object_cache->memcache_debug = array();
    168         $wp_object_cache->cache          = array();
     165        // Not all drop-ins support these props, however, there may be existing installations that rely on these being cleared.
     166        if ( property_exists( $wp_object_cache, 'group_ops' ) ) {
     167            $wp_object_cache->group_ops = array();
     168        }
     169        if ( property_exists( $wp_object_cache, 'stats' ) ) {
     170            $wp_object_cache->stats = array();
     171        }
     172        if ( property_exists( $wp_object_cache, 'memcache_debug' ) ) {
     173            $wp_object_cache->memcache_debug = array();
     174        }
     175        if ( property_exists( $wp_object_cache, 'cache' ) ) {
     176            $wp_object_cache->cache = array();
     177        }
    169178
    170179        if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) {
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php

    r2626116 r3329028  
    7777        $action = $this->store->query_actions(
    7878            array(
    79                 'claimed'  => false,
    8079                'status'   => $status,
    8180                'per_page' => 1,
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php

    r3227851 r3329028  
    22
    33namespace Action_Scheduler\WP_CLI\Action;
     4
     5use function \WP_CLI\Utils\get_flag_value;
    46
    57/**
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php

    r3227851 r3329028  
    2525
    2626        $only_logs   = ! empty( $this->assoc_args['field'] ) && 'log_entries' === $this->assoc_args['field'];
    27         $only_logs   = $only_logs || ( ! empty( $this->assoc_args['fields'] && 'log_entries' === $this->assoc_args['fields'] ) );
     27        $only_logs   = $only_logs || ( ! empty( $this->assoc_args['fields'] ) && 'log_entries' === $this->assoc_args['fields'] );
    2828        $log_entries = array();
    2929
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php

    r3235345 r3329028  
    263263
    264264        $args = array(
    265             'claimed'  => false,
    266265            'status'   => $status,
    267266            'per_page' => 1,
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php

    r3227851 r3329028  
    185185        ActionScheduler_DataController::init();
    186186
    187         $store      = self::store();
    188         $logger     = self::logger();
    189         $runner     = self::runner();
    190         $admin_view = self::admin_view();
     187        $store                      = self::store();
     188        $logger                     = self::logger();
     189        $runner                     = self::runner();
     190        $admin_view                 = self::admin_view();
     191        $recurring_action_scheduler = new ActionScheduler_RecurringActionScheduler();
    191192
    192193        // Ensure initialization on plugin activation.
     
    197198            add_action( 'init', array( $logger, 'init' ), 1, 0 );
    198199            add_action( 'init', array( $runner, 'init' ), 1, 0 );
     200            add_action( 'init', array( $recurring_action_scheduler, 'init' ), 1, 0 );
    199201
    200202            add_action(
     
    224226            $logger->init();
    225227            $runner->init();
     228            $recurring_action_scheduler->init();
    226229            self::$data_store_initialized = true;
    227230
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php

    r3194716 r3329028  
    8787        try {
    8888            try {
    89                 $valid_action = false;
     89                $valid_action = true;
     90
    9091                do_action( 'action_scheduler_before_execute', $action_id, $context );
    9192
    9293                if ( ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status( $action_id ) ) {
     94                    $valid_action = false;
    9395                    do_action( 'action_scheduler_execution_ignored', $action_id, $context );
    9496                    return;
    9597                }
    9698
    97                 $valid_action = true;
    9899                do_action( 'action_scheduler_begin_execute', $action_id, $context );
    99100
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php

    r3194716 r3329028  
    932932         */
    933933        global $wpdb;
    934 
    935934        $now  = as_get_datetime_object();
    936935        $date = is_null( $before_date ) ? $now : clone $before_date;
    937         // can't use $wpdb->update() because of the <= condition.
    938         $update = "UPDATE {$wpdb->actionscheduler_actions} SET claim_id=%d, last_attempt_gmt=%s, last_attempt_local=%s";
    939         $params = array(
    940             $claim_id,
    941             $now->format( 'Y-m-d H:i:s' ),
    942             current_time( 'mysql' ),
    943         );
    944936
    945937        // Set claim filters.
     
    955947        }
    956948
    957         $where    = 'WHERE claim_id = 0 AND scheduled_date_gmt <= %s AND status=%s';
    958         $params[] = $date->format( 'Y-m-d H:i:s' );
    959         $params[] = self::STATUS_PENDING;
     949        $where        = 'WHERE claim_id = 0 AND scheduled_date_gmt <= %s AND status=%s';
     950        $where_params = array(
     951            $date->format( 'Y-m-d H:i:s' ),
     952            self::STATUS_PENDING,
     953        );
    960954
    961955        if ( ! empty( $hooks ) ) {
    962956            $placeholders = array_fill( 0, count( $hooks ), '%s' );
    963             $where       .= ' AND hook IN (' . join( ', ', $placeholders ) . ')';
    964             $params       = array_merge( $params, array_values( $hooks ) );
     957            $where        .= ' AND hook IN (' . join( ', ', $placeholders ) . ')';
     958            $where_params = array_merge( $where_params, array_values( $hooks ) );
    965959        }
    966960
     
    997991         * Sets the order-by clause used in the action claim query.
    998992         *
    999          * @since 3.4.0
    1000          * @since 3.8.3 Made $claim_id and $hooks available.
    1001          *
    1002993         * @param string $order_by_sql
    1003994         * @param string $claim_id Claim Id.
    1004          * @param array  $hooks Hooks to filter for.
    1005          */
    1006         $order    = apply_filters( 'action_scheduler_claim_actions_order_by', 'ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC', $claim_id, $hooks );
    1007         $params[] = $limit;
    1008 
    1009         $sql           = $wpdb->prepare( "{$update} {$where} {$order} LIMIT %d", $params ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders
    1010         $rows_affected = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
     995         * @param array  $hooks    Hooks to filter for.
     996         *
     997         * @since 3.8.3 Made $claim_id and $hooks available.
     998         * @since 3.4.0
     999         */
     1000        $order       = apply_filters( 'action_scheduler_claim_actions_order_by', 'ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC', $claim_id, $hooks );
     1001        $skip_locked = $this->db_supports_skip_locked() ? ' SKIP LOCKED' : '';
     1002
     1003        // Selecting the action_ids that we plan to claim, while skipping any locked rows to avoid deadlocking.
     1004        $select_sql = $wpdb->prepare( "SELECT action_id from {$wpdb->actionscheduler_actions} {$where} {$order} LIMIT %d FOR UPDATE{$skip_locked}", array_merge( $where_params, array( $limit ) ) );
     1005
     1006        // Now place it into an UPDATE statement by joining the result sets, allowing for the SKIP LOCKED behavior to take effect.
     1007        $update_sql    = "UPDATE {$wpdb->actionscheduler_actions} t1 JOIN ( $select_sql ) t2 ON t1.action_id = t2.action_id SET claim_id=%d, last_attempt_gmt=%s, last_attempt_local=%s";
     1008        $update_params = array(
     1009            $claim_id,
     1010            $now->format( 'Y-m-d H:i:s' ),
     1011            current_time( 'mysql' ),
     1012        );
     1013
     1014        $rows_affected = $wpdb->query( $wpdb->prepare( $update_sql, $update_params ) );
    10111015        if ( false === $rows_affected ) {
    10121016            $error = empty( $wpdb->last_error )
    10131017                ? _x( 'unknown', 'database error', 'action-scheduler' )
    10141018                : $wpdb->last_error;
    1015 
    10161019            throw new \RuntimeException(
    10171020                sprintf(
     
    10271030
    10281031    /**
     1032     * Determines whether the database supports using SKIP LOCKED. This logic mimicks the $wpdb::has_cap() logic.
     1033     *
     1034     * SKIP_LOCKED support was added to MariaDB in 10.6.0 and to MySQL in 8.0.1
     1035     *
     1036     * @return bool
     1037     */
     1038    private function db_supports_skip_locked() {
     1039        global $wpdb;
     1040        $db_version     = $wpdb->db_version();
     1041        $db_server_info = $wpdb->db_server_info();
     1042        $is_mariadb     = ( false !== strpos( $db_server_info, 'MariaDB' ) );
     1043
     1044        if ( $is_mariadb &&
     1045             '5.5.5' === $db_version &&
     1046             PHP_VERSION_ID < 80016 // PHP 8.0.15 or older.
     1047        ) {
     1048            /*
     1049             * Account for MariaDB version being prefixed with '5.5.5-' on older PHP versions.
     1050             */
     1051            $db_server_info = preg_replace( '/^5\.5\.5-(.*)/', '$1', $db_server_info );
     1052            $db_version     = preg_replace( '/[^0-9.].*/', '', $db_server_info );
     1053        }
     1054
     1055        $is_supported = ( $is_mariadb && version_compare( $db_version, '10.6.0', '>=' ) ) ||
     1056                        ( ! $is_mariadb && version_compare( $db_version, '8.0.1', '>=' ) );
     1057
     1058        /**
     1059         * Filter whether the database supports the SKIP LOCKED modifier for queries.
     1060         *
     1061         * @param bool $is_supported Whether SKIP LOCKED is supported.
     1062         *
     1063         * @since 3.9.3
     1064         */
     1065        return apply_filters( 'action_scheduler_db_supports_skip_locked', $is_supported );
     1066    }
     1067
     1068    /**
    10291069     * Get the number of active claims.
    10301070     *
     
    10951135
    10961136    /**
    1097      * Release actions from a claim and delete the claim.
     1137     * Release pending actions from a claim and delete the claim.
    10981138     *
    10991139     * @param ActionScheduler_ActionClaim $claim Claim object.
     
    11071147         */
    11081148        global $wpdb;
     1149
     1150        if ( 0 === intval( $claim->get_id() ) ) {
     1151            // Verify that the claim_id is valid before attempting to release it.
     1152            return;
     1153        }
    11091154
    11101155        /**
     
    11141159         *
    11151160         * We resolve this by getting all the actions_id that we want to release claim from in a separate query, and then releasing the claim on each of them. This way, our lock is acquired on the action_id index instead of the claim_id index. Note that the lock on claim_id will still be acquired, but it will only when we actually make the update, rather than when we select the actions.
    1116          */
    1117         $action_ids = $wpdb->get_col( $wpdb->prepare( "SELECT action_id FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d", $claim->get_id() ) );
     1161         *
     1162         * We only release pending actions in order for them to be claimed by another process.
     1163         */
     1164        $action_ids = $wpdb->get_col( $wpdb->prepare( "SELECT action_id FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d AND status = %s", $claim->get_id(), self::STATUS_PENDING ) );
    11181165
    11191166        $row_updates = 0;
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php

    r3194716 r3329028  
    433433
    434434    /**
    435      * Release a claim in the table data store.
     435     * Release a claim in the table data store on any pending actions.
    436436     *
    437437     * @param ActionScheduler_ActionClaim $claim Claim object.
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php

    r3194716 r3329028  
    792792
    793793    /**
    794      * Release claim.
     794     * Release pending actions from a claim.
    795795     *
    796796     * @param ActionScheduler_ActionClaim $claim Claim object to release.
     
    799799     */
    800800    public function release_claim( ActionScheduler_ActionClaim $claim ) {
    801         $action_ids = $this->find_actions_by_claim_id( $claim->get_id() );
    802         if ( empty( $action_ids ) ) {
    803             return; // nothing to do.
    804         }
    805         $action_id_string = implode( ',', array_map( 'intval', $action_ids ) );
    806801        /**
    807802         * Global wpdb object.
     
    810805         */
    811806        global $wpdb;
     807
     808        $claim_id = $claim->get_id();
     809        if ( trim( $claim_id ) === '' ) {
     810            // Verify that the claim_id is valid before attempting to release it.
     811            return;
     812        }
     813
     814        // Only attempt to release pending actions to be claimed again. Running and complete actions are no longer relevant outside of admin/analytics.
     815        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
     816        $action_ids = $wpdb->get_col(
     817            $wpdb->prepare(
     818                "SELECT ID, post_date_gmt FROM {$wpdb->posts} WHERE post_type = %s AND post_password = %s AND post_status = %s",
     819                self::POST_TYPE,
     820                $claim_id,
     821                self::STATUS_PENDING
     822            )
     823        );
     824
     825        if ( empty( $action_ids ) ) {
     826            return; // nothing to do.
     827        }
     828        $action_id_string = implode( ',', array_map( 'intval', $action_ids ) );
    812829
    813830        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php

    r3194716 r3329028  
    2121     * @var int
    2222     */
    23     protected $schema_version = 7;
     23    protected $schema_version = 8;
    2424
    2525    /**
     
    8181                        KEY group_id (group_id),
    8282                        KEY last_attempt_gmt (last_attempt_gmt),
    83                         KEY `claim_id_status_scheduled_date_gmt` (`claim_id`, `status`, `scheduled_date_gmt`)
     83                        KEY `claim_id_status_priority_scheduled_date_gmt` (`claim_id`,`status`,`priority`,`scheduled_date_gmt`),
     84                        KEY `status_last_attempt_gmt` (`status`,`last_attempt_gmt`),
     85                        KEY `status_claim_id` (`status`,`claim_id`)
    8486                        ) $charset_collate";
    8587
  • seo-by-rank-math/tags/1.0.249/vendor/woocommerce/action-scheduler/functions.php

    r3194716 r3329028  
    8787     * @param string   $group      Action group.
    8888     * @param int      $priorities Action priority.
     89     * @param bool     $unique     Unique action.
    8990     */
    90     $pre = apply_filters( 'pre_as_schedule_single_action', null, $timestamp, $hook, $args, $group, $priority );
     91    $pre = apply_filters( 'pre_as_schedule_single_action', null, $timestamp, $hook, $args, $group, $priority, $unique );
    9192    if ( null !== $pre ) {
    9293        return is_int( $pre ) ? $pre : 0;
     
    160161     * @param string   $group               Action group.
    161162     * @param int      $priority            Action priority.
     163     * @param bool     $unique              Unique action.
    162164     */
    163     $pre = apply_filters( 'pre_as_schedule_recurring_action', null, $timestamp, $interval_in_seconds, $hook, $args, $group, $priority );
     165    $pre = apply_filters( 'pre_as_schedule_recurring_action', null, $timestamp, $interval_in_seconds, $hook, $args, $group, $priority, $unique );
    164166    if ( null !== $pre ) {
    165167        return is_int( $pre ) ? $pre : 0;
     
    226228     * @param string   $group      Action group.
    227229     * @param int      $priority   Action priority.
     230     * @param bool     $unique     Unique action.
    228231     */
    229     $pre = apply_filters( 'pre_as_schedule_cron_action', null, $timestamp, $schedule, $hook, $args, $group, $priority );
     232    $pre = apply_filters( 'pre_as_schedule_cron_action', null, $timestamp, $schedule, $hook, $args, $group, $priority, $unique );
    230233    if ( null !== $pre ) {
    231234        return is_int( $pre ) ? $pre : 0;
     
    494497    return $date;
    495498}
     499
     500/**
     501 * Check if a specific feature is supported by the current version of Action Scheduler.
     502 *
     503 * @since 3.9.3
     504 *
     505 * @param string $feature The feature to check support for.
     506 *
     507 * @return bool True if the feature is supported, false otherwise.
     508 */
     509function as_supports( string $feature ): bool {
     510    $supported_features = array( 'ensure_recurring_actions_hook' );
     511
     512    return in_array( $feature, $supported_features, true );
     513}
  • seo-by-rank-math/trunk/includes/helpers/class-wordpress.php

    r3313761 r3329028  
    765765        add_filter( 'wp_check_filetype_and_ext', [ __CLASS__, 'filetype_and_ext' ], 10, 3 );
    766766
    767         // Do the upload.
    768         $file = isset( $_FILES['import-me'] )
    769             ? wp_handle_upload( $_FILES['import-me'], [ 'test_form' => false ] )
    770             : new WP_Error( 'missing_file', __( 'No file selected for upload.', 'rank-math' ) );
     767        if ( isset( $_FILES['import-me'] ) ) {
     768            // Do the upload.
     769            if ( ! function_exists( 'wp_handle_upload' ) ) {
     770                $required_file = ABSPATH . 'wp-admin/includes/file.php';
     771                if ( file_exists( $required_file ) ) {
     772                    require_once $required_file; // @phpstan-ignore-line
     773                }
     774            }
     775            $file = wp_handle_upload( $_FILES['import-me'], [ 'test_form' => false ] );
     776        } else {
     777            $file = new WP_Error( 'missing_file', __( 'No file selected for upload.', 'rank-math' ) );
     778        }
    771779
    772780        // Remove upload hooks.
  • seo-by-rank-math/trunk/includes/modules/buddypress/class-buddypress.php

    r3318065 r3329028  
    8686                '@type'       => 'Person',
    8787                'name'        => get_the_author_meta( 'display_name', $user_id ),
    88                 'url'         => esc_url( bp_members_get_user_url( $user_id ) ),
     88                'url'         => function_exists( 'bp_members_get_user_url' ) ? esc_url( bp_members_get_user_url( $user_id ) ) : esc_url( bp_core_get_user_domain( $user_id ) ),
    8989                'description' => get_the_author_meta( 'description', $user_id ),
    9090                'image'       => [
  • seo-by-rank-math/trunk/languages/rank-math.pot

    r3324705 r3329028  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Rank Math SEO 1.0.249-beta\n"
     5"Project-Id-Version: Rank Math SEO 1.0.249\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/seo-by-rank-math\n"
    77"Last-Translator: Rank Math <support@rankmath.com>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-07-09T05:57:48+00:00\n"
     12"POT-Creation-Date: 2025-07-16T05:14:55+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
  • seo-by-rank-math/trunk/rank-math.php

    r3324705 r3329028  
    1010 * @wordpress-plugin
    1111 * Plugin Name:       Rank Math SEO
    12  * Version:           1.0.249-beta
     12 * Version:           1.0.249
    1313 * Plugin URI:        https://rankmath.com/
    1414 * Description:       Rank Math SEO is the Best WordPress SEO plugin with the features of many SEO and AI SEO tools in a single package to help multiply your SEO traffic.
     
    3535     * @var string
    3636     */
    37     public $version = '1.0.249-beta';
     37    public $version = '1.0.249';
    3838
    3939    /**
  • seo-by-rank-math/trunk/readme.txt

    r3321531 r3329028  
    66Requires at least: 6.3
    77Requires PHP: 7.4
    8 Stable tag: 1.0.248
     8Stable tag: 1.0.249
    99License: GPLv3 or later
    1010License URI: https://www.gnu.org/licenses/gpl-3.0.txt
     
    340340== Changelog ==
    341341
    342 = 1.0.248 [July 03, 2025] =
    343 - Added: [Filter](https://rankmath.com/kb/filters-hooks-api-developer/#remove-target-blank-attribute) to exclude certain domains from the [Open External Links in New Tab](https://rankmath.com/kb/open-links-in-new-window/) option
    344 - Added: [Filter](https://rankmath.com/kb/filters-hooks-api-developer/#html-sitemap-post-limit) to set a hard limit on the posts displayed in the HTML sitemap, defaults to 1000 posts
    345 - Improved: Changed the [Analytics](https://rankmath.com/kb/analytics/) data fetch frequency from 7 days to 3 days to show fresher data sooner in the Stats
    346 - Improved: Site getting automatically disconnected from Analytics will now attempt to reconnect in the background, and if that fails, a notice will prompt the user to reconnect manually
    347 - Improved: [Analytics URL Inspection](https://rankmath.com/kb/url-inspection-api-integration/) now prioritizes fetching high-traffic pages before other pages
    348 - Fixed: Incorrect [Post Analytics stats](https://rankmath.com/kb/analytics/#post-analytics) shown for secondary language posts when the sub-directory option is enabled in the WPML plugin
    349 - Fixed: PHP warning on the [Database Tools page](https://rankmath.com/kb/rank-math-status-and-tools/#database-tools) when WPML plugin is not active
    350 - Fixed: Deprecated PHP warning on the BuddyPress author page
    351 - Fixed: Deprecated warnings shown in the browser inspect on the [Setup Wizard page](https://rankmath.com/kb/how-to-setup/)
     342= 1.0.249 [July 16, 2025] =
     343- Improved: Updated the [Links modal](https://rankmath.com/kb/should-you-nofollow-external-links/) UI to align with WordPress styling
     344- Improved: Optimized database queries in the [Analytics module](https://rankmath.com/kb/analytics) running in background processes
     345- Improved: Added site notice for failed Analytics data fetch due to any reason
     346- Fixed: [Focus Keyword in Image Alt attributes test](https://rankmath.com/kb/score-100-in-tests/#focus-keyword-in-image-alt-attributes-primary-focus-keyword-only) was failing when content had no spaces
     347- Fixed: [Content Analysis tests](https://rankmath.com/kb/content-analysis-tests-for-product-pages/) were not updating in the Classic editor after switching from Text to Visual mode
     348- Fixed: Attachment name and description were not updating on some sites with [Content AI module](https://rankmath.com/kb/how-to-use-content-ai/) active
     349- Fixed: PHP error on BuddyPress Members page when BuddyBoss is active on the site
    352350
    353351Full changelog can be found here - **[Rank Math changelog](https://rankmath.com/changelog/?utm_source=Plugin&utm_medium=Changelog&utm_campaign=WP)**
  • seo-by-rank-math/trunk/vendor/autoload.php

    r3324705 r3329028  
    2323require_once __DIR__ . '/composer/autoload_real.php';
    2424
    25 return ComposerAutoloaderInit45563e877daef92451ad455ea7d3b867::getLoader();
     25return ComposerAutoloaderInitbdd6a2e1f666e8489d5ea142b6f29e76::getLoader();
  • seo-by-rank-math/trunk/vendor/composer/autoload_real.php

    r3324705 r3329028  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit45563e877daef92451ad455ea7d3b867
     5class ComposerAutoloaderInitbdd6a2e1f666e8489d5ea142b6f29e76
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInit45563e877daef92451ad455ea7d3b867', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInitbdd6a2e1f666e8489d5ea142b6f29e76', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    29         spl_autoload_unregister(array('ComposerAutoloaderInit45563e877daef92451ad455ea7d3b867', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInitbdd6a2e1f666e8489d5ea142b6f29e76', 'loadClassLoader'));
    3030
    3131        require __DIR__ . '/autoload_static.php';
    32         call_user_func(\Composer\Autoload\ComposerStaticInit45563e877daef92451ad455ea7d3b867::getInitializer($loader));
     32        call_user_func(\Composer\Autoload\ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::getInitializer($loader));
    3333
    3434        $loader->register(true);
    3535
    36         $includeFiles = \Composer\Autoload\ComposerStaticInit45563e877daef92451ad455ea7d3b867::$files;
     36        $includeFiles = \Composer\Autoload\ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::$files;
    3737        foreach ($includeFiles as $fileIdentifier => $file) {
    38             composerRequire45563e877daef92451ad455ea7d3b867($fileIdentifier, $file);
     38            composerRequirebdd6a2e1f666e8489d5ea142b6f29e76($fileIdentifier, $file);
    3939        }
    4040
     
    4848 * @return void
    4949 */
    50 function composerRequire45563e877daef92451ad455ea7d3b867($fileIdentifier, $file)
     50function composerRequirebdd6a2e1f666e8489d5ea142b6f29e76($fileIdentifier, $file)
    5151{
    5252    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • seo-by-rank-math/trunk/vendor/composer/autoload_static.php

    r3324705 r3329028  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit45563e877daef92451ad455ea7d3b867
     7class ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76
    88{
    99    public static $files = array (
     
    397397    {
    398398        return \Closure::bind(function () use ($loader) {
    399             $loader->prefixLengthsPsr4 = ComposerStaticInit45563e877daef92451ad455ea7d3b867::$prefixLengthsPsr4;
    400             $loader->prefixDirsPsr4 = ComposerStaticInit45563e877daef92451ad455ea7d3b867::$prefixDirsPsr4;
    401             $loader->classMap = ComposerStaticInit45563e877daef92451ad455ea7d3b867::$classMap;
     399            $loader->prefixLengthsPsr4 = ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::$prefixLengthsPsr4;
     400            $loader->prefixDirsPsr4 = ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::$prefixDirsPsr4;
     401            $loader->classMap = ComposerStaticInitbdd6a2e1f666e8489d5ea142b6f29e76::$classMap;
    402402
    403403        }, null, ClassLoader::class);
  • seo-by-rank-math/trunk/vendor/composer/installed.json

    r3235345 r3329028  
    241241        {
    242242            "name": "woocommerce/action-scheduler",
    243             "version": "3.9.2",
    244             "version_normalized": "3.9.2.0",
     243            "version": "3.9.3",
     244            "version_normalized": "3.9.3.0",
    245245            "source": {
    246246                "type": "git",
    247247                "url": "https://github.com/woocommerce/action-scheduler.git",
    248                 "reference": "efbb7953f72a433086335b249292f280dd43ddfe"
    249             },
    250             "dist": {
    251                 "type": "zip",
    252                 "url": "https://api.github.com/repos/woocommerce/action-scheduler/zipball/efbb7953f72a433086335b249292f280dd43ddfe",
    253                 "reference": "efbb7953f72a433086335b249292f280dd43ddfe",
    254                 "shasum": ""
    255             },
    256             "require": {
    257                 "php": ">=7.1"
    258             },
    259             "require-dev": {
    260                 "phpunit/phpunit": "^7.5",
     248                "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c"
     249            },
     250            "dist": {
     251                "type": "zip",
     252                "url": "https://api.github.com/repos/woocommerce/action-scheduler/zipball/c58cdbab17651303d406cd3b22cf9d75c71c986c",
     253                "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c",
     254                "shasum": ""
     255            },
     256            "require": {
     257                "php": ">=7.2"
     258            },
     259            "require-dev": {
     260                "phpunit/phpunit": "^8.5",
    261261                "woocommerce/woocommerce-sniffs": "0.1.0",
    262262                "wp-cli/wp-cli": "~2.5.0",
    263263                "yoast/phpunit-polyfills": "^2.0"
    264264            },
    265             "time": "2025-02-03T09:09:30+00:00",
     265            "time": "2025-07-15T09:32:30+00:00",
    266266            "type": "wordpress-plugin",
    267267            "extra": {
     
    281281            "support": {
    282282                "issues": "https://github.com/woocommerce/action-scheduler/issues",
    283                 "source": "https://github.com/woocommerce/action-scheduler/tree/3.9.2"
     283                "source": "https://github.com/woocommerce/action-scheduler/tree/3.9.3"
    284284            },
    285285            "install-path": "../woocommerce/action-scheduler"
  • seo-by-rank-math/trunk/vendor/composer/installed.php

    r3324705 r3329028  
    22    'root' => array(
    33        'name' => 'rankmath/seo-by-rank-math',
    4         'pretty_version' => 'v1.0.249-beta',
    5         'version' => '1.0.249.0-beta',
    6         'reference' => '506592f3cf85dd265adc9bdc78101cafd48f0175',
     4        'pretty_version' => 'v1.0.249',
     5        'version' => '1.0.249.0',
     6        'reference' => 'eacee31c09f6fa9018cec0b6b71972eb7ec35880',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    4848        ),
    4949        'rankmath/seo-by-rank-math' => array(
    50             'pretty_version' => 'v1.0.249-beta',
    51             'version' => '1.0.249.0-beta',
    52             'reference' => '506592f3cf85dd265adc9bdc78101cafd48f0175',
     50            'pretty_version' => 'v1.0.249',
     51            'version' => '1.0.249.0',
     52            'reference' => 'eacee31c09f6fa9018cec0b6b71972eb7ec35880',
    5353            'type' => 'wordpress-plugin',
    5454            'install_path' => __DIR__ . '/../../',
     
    5757        ),
    5858        'woocommerce/action-scheduler' => array(
    59             'pretty_version' => '3.9.2',
    60             'version' => '3.9.2.0',
    61             'reference' => 'efbb7953f72a433086335b249292f280dd43ddfe',
     59            'pretty_version' => '3.9.3',
     60            'version' => '3.9.3.0',
     61            'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c',
    6262            'type' => 'wordpress-plugin',
    6363            'install_path' => __DIR__ . '/../woocommerce/action-scheduler',
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/action-scheduler.php

    r3235345 r3329028  
    66 * Author: Automattic
    77 * Author URI: https://automattic.com/
    8  * Version: 3.9.2
     8 * Version: 3.9.3
    99 * License: GPLv3
    1010 * Requires at least: 6.5
    11  * Tested up to: 6.7
    12  * Requires PHP: 7.1
     11 * Tested up to: 6.8
     12 * Requires PHP: 7.2
    1313 *
    1414 * Copyright 2019 Automattic, Inc.  (https://automattic.com/contact/)
     
    3030 */
    3131
    32 if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_2' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.
     32if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_3' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.
    3333
    3434    if ( ! class_exists( 'ActionScheduler_Versions', false ) ) {
     
    3737    }
    3838
    39     add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_9_dot_2', 0, 0 ); // WRCS: DEFINED_VERSION.
     39    add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_9_dot_3', 0, 0 ); // WRCS: DEFINED_VERSION.
    4040
    4141    // phpcs:disable Generic.Functions.OpeningFunctionBraceKernighanRitchie.ContentAfterBrace
     
    4343     * Registers this version of Action Scheduler.
    4444     */
    45     function action_scheduler_register_3_dot_9_dot_2() { // WRCS: DEFINED_VERSION.
     45    function action_scheduler_register_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION.
    4646        $versions = ActionScheduler_Versions::instance();
    47         $versions->register( '3.9.2', 'action_scheduler_initialize_3_dot_9_dot_2' ); // WRCS: DEFINED_VERSION.
     47        $versions->register( '3.9.3', 'action_scheduler_initialize_3_dot_9_dot_3' ); // WRCS: DEFINED_VERSION.
    4848    }
    4949
     
    5252     * Initializes this version of Action Scheduler.
    5353     */
    54     function action_scheduler_initialize_3_dot_9_dot_2() { // WRCS: DEFINED_VERSION.
     54    function action_scheduler_initialize_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION.
    5555        // A final safety check is required even here, because historic versions of Action Scheduler
    5656        // followed a different pattern (in some unusual cases, we could reach this point and the
     
    6464    // Support usage in themes - load this version if no plugin has loaded a version yet.
    6565    if ( did_action( 'plugins_loaded' ) && ! doing_action( 'plugins_loaded' ) && ! class_exists( 'ActionScheduler', false ) ) {
    66         action_scheduler_initialize_3_dot_9_dot_2(); // WRCS: DEFINED_VERSION.
     66        action_scheduler_initialize_3_dot_9_dot_3(); // WRCS: DEFINED_VERSION.
    6767        do_action( 'action_scheduler_pre_theme_init' );
    6868        ActionScheduler_Versions::initialize_latest_version();
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php

    r3194716 r3329028  
    163163        }
    164164
    165         $wp_object_cache->group_ops      = array();
    166         $wp_object_cache->stats          = array();
    167         $wp_object_cache->memcache_debug = array();
    168         $wp_object_cache->cache          = array();
     165        // Not all drop-ins support these props, however, there may be existing installations that rely on these being cleared.
     166        if ( property_exists( $wp_object_cache, 'group_ops' ) ) {
     167            $wp_object_cache->group_ops = array();
     168        }
     169        if ( property_exists( $wp_object_cache, 'stats' ) ) {
     170            $wp_object_cache->stats = array();
     171        }
     172        if ( property_exists( $wp_object_cache, 'memcache_debug' ) ) {
     173            $wp_object_cache->memcache_debug = array();
     174        }
     175        if ( property_exists( $wp_object_cache, 'cache' ) ) {
     176            $wp_object_cache->cache = array();
     177        }
    169178
    170179        if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) {
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php

    r2626116 r3329028  
    7777        $action = $this->store->query_actions(
    7878            array(
    79                 'claimed'  => false,
    8079                'status'   => $status,
    8180                'per_page' => 1,
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php

    r3227851 r3329028  
    22
    33namespace Action_Scheduler\WP_CLI\Action;
     4
     5use function \WP_CLI\Utils\get_flag_value;
    46
    57/**
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php

    r3227851 r3329028  
    2525
    2626        $only_logs   = ! empty( $this->assoc_args['field'] ) && 'log_entries' === $this->assoc_args['field'];
    27         $only_logs   = $only_logs || ( ! empty( $this->assoc_args['fields'] && 'log_entries' === $this->assoc_args['fields'] ) );
     27        $only_logs   = $only_logs || ( ! empty( $this->assoc_args['fields'] ) && 'log_entries' === $this->assoc_args['fields'] );
    2828        $log_entries = array();
    2929
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php

    r3235345 r3329028  
    263263
    264264        $args = array(
    265             'claimed'  => false,
    266265            'status'   => $status,
    267266            'per_page' => 1,
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php

    r3227851 r3329028  
    185185        ActionScheduler_DataController::init();
    186186
    187         $store      = self::store();
    188         $logger     = self::logger();
    189         $runner     = self::runner();
    190         $admin_view = self::admin_view();
     187        $store                      = self::store();
     188        $logger                     = self::logger();
     189        $runner                     = self::runner();
     190        $admin_view                 = self::admin_view();
     191        $recurring_action_scheduler = new ActionScheduler_RecurringActionScheduler();
    191192
    192193        // Ensure initialization on plugin activation.
     
    197198            add_action( 'init', array( $logger, 'init' ), 1, 0 );
    198199            add_action( 'init', array( $runner, 'init' ), 1, 0 );
     200            add_action( 'init', array( $recurring_action_scheduler, 'init' ), 1, 0 );
    199201
    200202            add_action(
     
    224226            $logger->init();
    225227            $runner->init();
     228            $recurring_action_scheduler->init();
    226229            self::$data_store_initialized = true;
    227230
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php

    r3194716 r3329028  
    8787        try {
    8888            try {
    89                 $valid_action = false;
     89                $valid_action = true;
     90
    9091                do_action( 'action_scheduler_before_execute', $action_id, $context );
    9192
    9293                if ( ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status( $action_id ) ) {
     94                    $valid_action = false;
    9395                    do_action( 'action_scheduler_execution_ignored', $action_id, $context );
    9496                    return;
    9597                }
    9698
    97                 $valid_action = true;
    9899                do_action( 'action_scheduler_begin_execute', $action_id, $context );
    99100
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php

    r3194716 r3329028  
    932932         */
    933933        global $wpdb;
    934 
    935934        $now  = as_get_datetime_object();
    936935        $date = is_null( $before_date ) ? $now : clone $before_date;
    937         // can't use $wpdb->update() because of the <= condition.
    938         $update = "UPDATE {$wpdb->actionscheduler_actions} SET claim_id=%d, last_attempt_gmt=%s, last_attempt_local=%s";
    939         $params = array(
    940             $claim_id,
    941             $now->format( 'Y-m-d H:i:s' ),
    942             current_time( 'mysql' ),
    943         );
    944936
    945937        // Set claim filters.
     
    955947        }
    956948
    957         $where    = 'WHERE claim_id = 0 AND scheduled_date_gmt <= %s AND status=%s';
    958         $params[] = $date->format( 'Y-m-d H:i:s' );
    959         $params[] = self::STATUS_PENDING;
     949        $where        = 'WHERE claim_id = 0 AND scheduled_date_gmt <= %s AND status=%s';
     950        $where_params = array(
     951            $date->format( 'Y-m-d H:i:s' ),
     952            self::STATUS_PENDING,
     953        );
    960954
    961955        if ( ! empty( $hooks ) ) {
    962956            $placeholders = array_fill( 0, count( $hooks ), '%s' );
    963             $where       .= ' AND hook IN (' . join( ', ', $placeholders ) . ')';
    964             $params       = array_merge( $params, array_values( $hooks ) );
     957            $where        .= ' AND hook IN (' . join( ', ', $placeholders ) . ')';
     958            $where_params = array_merge( $where_params, array_values( $hooks ) );
    965959        }
    966960
     
    997991         * Sets the order-by clause used in the action claim query.
    998992         *
    999          * @since 3.4.0
    1000          * @since 3.8.3 Made $claim_id and $hooks available.
    1001          *
    1002993         * @param string $order_by_sql
    1003994         * @param string $claim_id Claim Id.
    1004          * @param array  $hooks Hooks to filter for.
    1005          */
    1006         $order    = apply_filters( 'action_scheduler_claim_actions_order_by', 'ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC', $claim_id, $hooks );
    1007         $params[] = $limit;
    1008 
    1009         $sql           = $wpdb->prepare( "{$update} {$where} {$order} LIMIT %d", $params ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders
    1010         $rows_affected = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
     995         * @param array  $hooks    Hooks to filter for.
     996         *
     997         * @since 3.8.3 Made $claim_id and $hooks available.
     998         * @since 3.4.0
     999         */
     1000        $order       = apply_filters( 'action_scheduler_claim_actions_order_by', 'ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC', $claim_id, $hooks );
     1001        $skip_locked = $this->db_supports_skip_locked() ? ' SKIP LOCKED' : '';
     1002
     1003        // Selecting the action_ids that we plan to claim, while skipping any locked rows to avoid deadlocking.
     1004        $select_sql = $wpdb->prepare( "SELECT action_id from {$wpdb->actionscheduler_actions} {$where} {$order} LIMIT %d FOR UPDATE{$skip_locked}", array_merge( $where_params, array( $limit ) ) );
     1005
     1006        // Now place it into an UPDATE statement by joining the result sets, allowing for the SKIP LOCKED behavior to take effect.
     1007        $update_sql    = "UPDATE {$wpdb->actionscheduler_actions} t1 JOIN ( $select_sql ) t2 ON t1.action_id = t2.action_id SET claim_id=%d, last_attempt_gmt=%s, last_attempt_local=%s";
     1008        $update_params = array(
     1009            $claim_id,
     1010            $now->format( 'Y-m-d H:i:s' ),
     1011            current_time( 'mysql' ),
     1012        );
     1013
     1014        $rows_affected = $wpdb->query( $wpdb->prepare( $update_sql, $update_params ) );
    10111015        if ( false === $rows_affected ) {
    10121016            $error = empty( $wpdb->last_error )
    10131017                ? _x( 'unknown', 'database error', 'action-scheduler' )
    10141018                : $wpdb->last_error;
    1015 
    10161019            throw new \RuntimeException(
    10171020                sprintf(
     
    10271030
    10281031    /**
     1032     * Determines whether the database supports using SKIP LOCKED. This logic mimicks the $wpdb::has_cap() logic.
     1033     *
     1034     * SKIP_LOCKED support was added to MariaDB in 10.6.0 and to MySQL in 8.0.1
     1035     *
     1036     * @return bool
     1037     */
     1038    private function db_supports_skip_locked() {
     1039        global $wpdb;
     1040        $db_version     = $wpdb->db_version();
     1041        $db_server_info = $wpdb->db_server_info();
     1042        $is_mariadb     = ( false !== strpos( $db_server_info, 'MariaDB' ) );
     1043
     1044        if ( $is_mariadb &&
     1045             '5.5.5' === $db_version &&
     1046             PHP_VERSION_ID < 80016 // PHP 8.0.15 or older.
     1047        ) {
     1048            /*
     1049             * Account for MariaDB version being prefixed with '5.5.5-' on older PHP versions.
     1050             */
     1051            $db_server_info = preg_replace( '/^5\.5\.5-(.*)/', '$1', $db_server_info );
     1052            $db_version     = preg_replace( '/[^0-9.].*/', '', $db_server_info );
     1053        }
     1054
     1055        $is_supported = ( $is_mariadb && version_compare( $db_version, '10.6.0', '>=' ) ) ||
     1056                        ( ! $is_mariadb && version_compare( $db_version, '8.0.1', '>=' ) );
     1057
     1058        /**
     1059         * Filter whether the database supports the SKIP LOCKED modifier for queries.
     1060         *
     1061         * @param bool $is_supported Whether SKIP LOCKED is supported.
     1062         *
     1063         * @since 3.9.3
     1064         */
     1065        return apply_filters( 'action_scheduler_db_supports_skip_locked', $is_supported );
     1066    }
     1067
     1068    /**
    10291069     * Get the number of active claims.
    10301070     *
     
    10951135
    10961136    /**
    1097      * Release actions from a claim and delete the claim.
     1137     * Release pending actions from a claim and delete the claim.
    10981138     *
    10991139     * @param ActionScheduler_ActionClaim $claim Claim object.
     
    11071147         */
    11081148        global $wpdb;
     1149
     1150        if ( 0 === intval( $claim->get_id() ) ) {
     1151            // Verify that the claim_id is valid before attempting to release it.
     1152            return;
     1153        }
    11091154
    11101155        /**
     
    11141159         *
    11151160         * We resolve this by getting all the actions_id that we want to release claim from in a separate query, and then releasing the claim on each of them. This way, our lock is acquired on the action_id index instead of the claim_id index. Note that the lock on claim_id will still be acquired, but it will only when we actually make the update, rather than when we select the actions.
    1116          */
    1117         $action_ids = $wpdb->get_col( $wpdb->prepare( "SELECT action_id FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d", $claim->get_id() ) );
     1161         *
     1162         * We only release pending actions in order for them to be claimed by another process.
     1163         */
     1164        $action_ids = $wpdb->get_col( $wpdb->prepare( "SELECT action_id FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d AND status = %s", $claim->get_id(), self::STATUS_PENDING ) );
    11181165
    11191166        $row_updates = 0;
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php

    r3194716 r3329028  
    433433
    434434    /**
    435      * Release a claim in the table data store.
     435     * Release a claim in the table data store on any pending actions.
    436436     *
    437437     * @param ActionScheduler_ActionClaim $claim Claim object.
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php

    r3194716 r3329028  
    792792
    793793    /**
    794      * Release claim.
     794     * Release pending actions from a claim.
    795795     *
    796796     * @param ActionScheduler_ActionClaim $claim Claim object to release.
     
    799799     */
    800800    public function release_claim( ActionScheduler_ActionClaim $claim ) {
    801         $action_ids = $this->find_actions_by_claim_id( $claim->get_id() );
    802         if ( empty( $action_ids ) ) {
    803             return; // nothing to do.
    804         }
    805         $action_id_string = implode( ',', array_map( 'intval', $action_ids ) );
    806801        /**
    807802         * Global wpdb object.
     
    810805         */
    811806        global $wpdb;
     807
     808        $claim_id = $claim->get_id();
     809        if ( trim( $claim_id ) === '' ) {
     810            // Verify that the claim_id is valid before attempting to release it.
     811            return;
     812        }
     813
     814        // Only attempt to release pending actions to be claimed again. Running and complete actions are no longer relevant outside of admin/analytics.
     815        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
     816        $action_ids = $wpdb->get_col(
     817            $wpdb->prepare(
     818                "SELECT ID, post_date_gmt FROM {$wpdb->posts} WHERE post_type = %s AND post_password = %s AND post_status = %s",
     819                self::POST_TYPE,
     820                $claim_id,
     821                self::STATUS_PENDING
     822            )
     823        );
     824
     825        if ( empty( $action_ids ) ) {
     826            return; // nothing to do.
     827        }
     828        $action_id_string = implode( ',', array_map( 'intval', $action_ids ) );
    812829
    813830        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php

    r3194716 r3329028  
    2121     * @var int
    2222     */
    23     protected $schema_version = 7;
     23    protected $schema_version = 8;
    2424
    2525    /**
     
    8181                        KEY group_id (group_id),
    8282                        KEY last_attempt_gmt (last_attempt_gmt),
    83                         KEY `claim_id_status_scheduled_date_gmt` (`claim_id`, `status`, `scheduled_date_gmt`)
     83                        KEY `claim_id_status_priority_scheduled_date_gmt` (`claim_id`,`status`,`priority`,`scheduled_date_gmt`),
     84                        KEY `status_last_attempt_gmt` (`status`,`last_attempt_gmt`),
     85                        KEY `status_claim_id` (`status`,`claim_id`)
    8486                        ) $charset_collate";
    8587
  • seo-by-rank-math/trunk/vendor/woocommerce/action-scheduler/functions.php

    r3194716 r3329028  
    8787     * @param string   $group      Action group.
    8888     * @param int      $priorities Action priority.
     89     * @param bool     $unique     Unique action.
    8990     */
    90     $pre = apply_filters( 'pre_as_schedule_single_action', null, $timestamp, $hook, $args, $group, $priority );
     91    $pre = apply_filters( 'pre_as_schedule_single_action', null, $timestamp, $hook, $args, $group, $priority, $unique );
    9192    if ( null !== $pre ) {
    9293        return is_int( $pre ) ? $pre : 0;
     
    160161     * @param string   $group               Action group.
    161162     * @param int      $priority            Action priority.
     163     * @param bool     $unique              Unique action.
    162164     */
    163     $pre = apply_filters( 'pre_as_schedule_recurring_action', null, $timestamp, $interval_in_seconds, $hook, $args, $group, $priority );
     165    $pre = apply_filters( 'pre_as_schedule_recurring_action', null, $timestamp, $interval_in_seconds, $hook, $args, $group, $priority, $unique );
    164166    if ( null !== $pre ) {
    165167        return is_int( $pre ) ? $pre : 0;
     
    226228     * @param string   $group      Action group.
    227229     * @param int      $priority   Action priority.
     230     * @param bool     $unique     Unique action.
    228231     */
    229     $pre = apply_filters( 'pre_as_schedule_cron_action', null, $timestamp, $schedule, $hook, $args, $group, $priority );
     232    $pre = apply_filters( 'pre_as_schedule_cron_action', null, $timestamp, $schedule, $hook, $args, $group, $priority, $unique );
    230233    if ( null !== $pre ) {
    231234        return is_int( $pre ) ? $pre : 0;
     
    494497    return $date;
    495498}
     499
     500/**
     501 * Check if a specific feature is supported by the current version of Action Scheduler.
     502 *
     503 * @since 3.9.3
     504 *
     505 * @param string $feature The feature to check support for.
     506 *
     507 * @return bool True if the feature is supported, false otherwise.
     508 */
     509function as_supports( string $feature ): bool {
     510    $supported_features = array( 'ensure_recurring_actions_hook' );
     511
     512    return in_array( $feature, $supported_features, true );
     513}
Note: See TracChangeset for help on using the changeset viewer.