__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.216.10: ~ $
<?php

namespace WP_Statistics\Abstracts;

use WP_STATISTICS\Menus;
use WP_STATISTICS\Option;
use WP_Statistics\Service\Admin\NoticeHandler\Notice;
use WP_Statistics\Service\Database\Migrations\BackgroundProcess\BackgroundProcessFactory;
use WP_Statistics\Traits\MigrationAccess;
use WP_Statistics\Utils\Request;
use WP_STATISTICS\WP_Background_Process;

/**
 * Class BaseBackgroundProcess
 *
 * An abstract class for creating background processes using WP_Background_Process.
 * This class provides a structure for defining background tasks.
 * @package WP_Statistics\Abstracts
 */
abstract class BaseBackgroundProcess extends WP_Background_Process
{
    use MigrationAccess;

    /**
     * Prefix for the process.
     *
     * @var string
     */
    protected $prefix = 'wp_statistics';

    /**
     * Initiated key for option storage.
     *
     * @var string
     */
    protected $initiatedKey = '';

    /**
     * Total number of items to process.
     *
     * @var string
     */
    protected $totalOptionKey = '';

    /**
     * Number of processed items.
     *
     * @var int
     */
    protected $processedOptionKey = '';

    /**
     * Human‑readable job title (source string; not translated here).
     *
     * @var string
     */
    protected $jobTitle = '';

    /**
     * Short job description for admin UI.
     *
     * @var string
     */
    protected $jobDescription = '';

    /**
     * Short button title for admin UI.
     *
     * @var string
     */
    protected $jobButtonTitle = '';

    /**
     * Success notice message to display in the admin UI when the job finishes.
     *
     * @var string
     */
    protected $successNotice = '';

    /**
    * Whether this job requires user confirmation before starting.
    *
    * @var bool
    */
    protected $confirmation = false;

    /**
     * Set the human‑readable job title (source string; not translated here).
     *
     * @param string $title Source title for this background job.
     * @return void
     */
    protected function setJobTitle($title)
    {
        $this->jobTitle = $title;
    }

    /**
     * Get the human‑readable job title (source string; not translated here).
     *
     * @return string Source job title string.
     */
    public function getJobTitle()
    {
        return $this->jobTitle;
    }

    /**
     * Set the short job description (source string; not translated here).
     *
     * @param string $description Source description for this job.
     * @return void
     */
    protected function setJobDescription($description)
    {
        $this->jobDescription = $description;
    }

    /**
     * Get the short job description (source string; not translated here).
     *
     * @return string Source job description string.
     */
    public function getJobDescription()
    {
        return $this->jobDescription;
    }

    /**
     * Set the short button title
     *
     * @param string $jobButtonTitle
     * @return void
     */
    protected function setJobButtonTitle($jobButtonTitle)
    {
        $this->jobButtonTitle = $jobButtonTitle;
    }

    /**
     * Get the short button title
     *
     * @return string
     */
    public function getJobButtonTitle()
    {
        return $this->jobButtonTitle;
    }

    /**
     * Checks if user confirmation is required before running the background process.
     *
     * @return bool True if confirmation is required, false otherwise.
     */
    public function isConfirmationRequired()
    {
        return $this->confirmation;
    }

    /**
     * Check if the process has been initiated.
     *
     * @param bool $status Whether the job is marked as initiated. Default true.
     * @return void
     */
    public function setInitiated($status = true)
    {
        Option::saveOptionGroup($this->initiatedKey, $status, 'jobs');
    }

    /**
     * Check if the process has been initiated.
     *
     * @return bool
     */
    public function isInitiated()
    {
        return Option::getOptionGroup('jobs', $this->initiatedKey, false);
    }

    /**
     * Get the option key used to store the "initiated" flag for this job.
     *
     * @return string Option key name for the initiated status.
     */
    public function getInitiatedKey()
    {
        return $this->initiatedKey;
    }

    /**
     * Set a success notice to be displayed to the user.
     *
     * @param string $message The success message to display.
     * @return void
     */
    protected function setSuccessNotice($message)
    {
        $this->successNotice = $message;
    }

    /**
     * Get the success notice message for this background job.
     *
     * @return string Success notice text.
     */
    public function getSuccessNotice()
    {
        return $this->successNotice;
    }

    /**
     * Set the total and processed option keys.
     *
     * @return void
     */
    protected function setTotalAndProcessed()
    {
        $this->totalOptionKey     = $this->action . '_total';
        $this->processedOptionKey = $this->action . '_processed';
    }

    /**
     * Set the total number of items to process.
     *
     * @param array $items The items to count or count of the items.
     * @return void
     */
    protected function setTotal($items)
    {
        $total = $this->getTotal();

        if (!empty($total) || empty($items)) {
            return;
        }

        $total = is_array($items) ? count($items) : $items;
        Option::saveOptionGroup($this->totalOptionKey, $total, 'jobs');
    }

    /**
     * Set the number of processed items.
     *
     * @param array $processed The items that have been processed.
     * @return void
     */
    protected function setProcessed($processed)
    {
        if (empty($processed)) {
            return;
        }

        $processedCount   = 0;
        $alreadyProcessed = $this->getProcessed();

        $processedCount = (int)$alreadyProcessed + intval(count($processed));

        Option::saveOptionGroup($this->processedOptionKey, $processedCount, 'jobs');
    }

    /**
     * Clear the total and processed counts.
     *
     * @return void
     */
    protected function clearTotalAndProcessed()
    {
        $this->setTotalAndProcessed();

        Option::deleteOptionGroup($this->totalOptionKey, 'jobs');
        Option::deleteOptionGroup($this->processedOptionKey, 'jobs');
    }

    /**
     * Get the total number of items to process.
     *
     * @return int
     */
    public function getTotal()
    {
        if (empty($this->totalOptionKey)) {
            $this->setTotalAndProcessed();
        }

        return (int)Option::getOptionGroup('jobs', $this->totalOptionKey, 0);
    }

    /**
     * Get the number of processed items.
     *
     * @return int
     */
    public function getProcessed()
    {
        if (empty($this->processedOptionKey)) {
            $this->setTotalAndProcessed();
        }

        return (int)Option::getOptionGroup('jobs', $this->processedOptionKey, 0);
    }

    /**
     * Build the admin-post URL to trigger this background process from the current admin page.
     *
     * @param bool $force Whether to include the `force` flag to allow restart. Default false.
     * @return string Fully formed admin-post URL, or an empty string when the current page URL is unavailable.
     */
    public function getActionUrl($force = false)
    {
        $currentPage = Menus::getCurrentPage();

        if (empty($currentPage) || empty($currentPage['page_url'])) {
            return '';
        }

        $tab = Request::get('tab');

        $args = [
            'action'   => BackgroundProcessFactory::getActionName(),
            'job_key'  => $this->action,
            'nonce'    => BackgroundProcessFactory::getActionNonce(),
            'redirect' => $currentPage['page_url'],
            'force'    => $force
        ];

        if (!empty($tab)) {
            $args['tab'] = $tab;
        }

        $actionUrl = add_query_arg(
            $args,
            admin_url('admin-post.php')
        );

        return $actionUrl;
    }

    /**
     * Triggers the background process.
     *
     * @abstract
     * @return bool
     */
    public abstract function process();
}

Filemanager

Name Type Size Permission Actions
BaseBackgroundProcess.php File 8.05 KB 0644
BaseMetabox.php File 6.38 KB 0644
BaseMigrationManager.php File 1.15 KB 0644
BaseMigrationOperation.php File 3.4 KB 0644
BaseModel.php File 4.54 KB 0644
BasePage.php File 2.01 KB 0644
BaseRestAPI.php File 2.95 KB 0644
BaseTabView.php File 1.9 KB 0644
BaseView.php File 458 B 0644
MultiViewPage.php File 2.63 KB 0644
UnlockedTabView.php File 936 B 0644
Filemanager