403Webshell
Server IP : 38.190.208.107  /  Your IP : 216.73.217.46
Web Server : nginx/1.28.1
System : Linux ht2026040333114 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.37-1 (2023-07-03) x86_64
User : root ( 0)
PHP Version : 8.2.28
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv,eval,assert,passthru,system,exec,shell_exec,popen,proc_open
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /www/wwwroot/wp.3/wp-content/plugins/wp-statistics/src/Abstracts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/wwwroot/wp.3/wp-content/plugins/wp-statistics/src/Abstracts/BaseBackgroundProcess.php
<?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();
}

Youez - 2016 - github.com/yon3zu
LinuXploit