HEX
Server: Apache
System: Linux efa57bbe-abb1-400d-2985-3b056fbc2701.secureserver.net 6.1.147-1.el9.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 24 12:33:32 EDT 2025 x86_64
User: root (0)
PHP: 8.0.30.4
Disabled: NONE
Upload Files
File: /var/www/wp-content/mu-plugins/vendor/godaddy/mwc-core/src/JobQueue/Commands/DispatchJobCommand.php
<?php

namespace GoDaddy\WordPress\MWC\Core\JobQueue\Commands;

use GoDaddy\WordPress\MWC\Common\Helpers\ArrayHelper;
use GoDaddy\WordPress\MWC\Common\Helpers\TypeHelper;
use GoDaddy\WordPress\MWC\Core\JobQueue\Contracts\QueueableJobContract;
use GoDaddy\WordPress\MWC\Core\JobQueue\Helpers\JobConfigHelper;
use GoDaddy\WordPress\MWC\Core\JobQueue\JobQueue;
use WP_CLI;

class DispatchJobCommand
{
    /**
     * Dispatches a registered job.
     *
     * ## OPTIONS
     * <job>
     * : The key of the job to dispatch.
     *
     * [--without-overlapping]
     * : If set, the job will NOT be dispatched if it's already scheduled/in-progress.
     *
     * ## EXAMPLES
     *
     *     wp mwc dispatch patchProductCategoryAssociations
     *     wp mwc dispatch patchProductCategoryAssociations --without-overlapping
     *
     * @param array<string, mixed>|mixed $args
     * @param array<string, mixed>|mixed $assoc_args
     * @return void
     */
    public function __invoke($args, $assoc_args)
    {
        if (! class_exists('WP_CLI')) {
            return;
        }

        $jobKey = TypeHelper::string(ArrayHelper::get($args, 0), '');
        if (empty($jobKey)) {
            WP_CLI::error('Missing required job key.');

            return;
        }

        $this->dispatchJob($jobKey, TypeHelper::array($assoc_args, []));

        WP_CLI::line('Job successfully dispatched.');
    }

    /**
     * Dispatches the job with the supplied key.
     *
     * @param string $jobKey
     * @param array<string, mixed> $args command arguments
     * @return void
     */
    protected function dispatchJob(string $jobKey, array $args) : void
    {
        $jobQueue = JobQueue::getNewInstance()
            ->chain($this->makeJobChain($jobKey));

        if (ArrayHelper::get($args, 'without-overlapping')) {
            $jobQueue->withoutOverlapping();
        }

        $jobQueue->dispatch();
    }

    /**
     * Makes a valid job chain array from the supplied job key.
     *
     * @param string $jobKey
     * @return class-string<QueueableJobContract>[]
     */
    protected function makeJobChain(string $jobKey) : array
    {
        return JobConfigHelper::convertJobKeysToClassNames([$jobKey]);
    }
}