PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.9.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.9.2
4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Backend / Modules / Jobs / JobExecutable.php
wp-staging / Backend / Modules / Jobs Last commit date
Cleaners 3 months ago Exceptions 5 years ago Cancel.php 7 months ago CancelUpdate.php 7 months ago Cloning.php 2 weeks ago CloningProcess.php 1 year ago Data.php 7 months ago Database.php 3 months ago Delete.php 4 months ago Directories.php 4 months ago Files.php 1 week ago Finish.php 2 months ago Job.php 2 weeks ago JobExecutable.php 7 months ago Logs.php 3 years ago PreserveDataFirstStep.php 1 month ago PreserveDataSecondStep.php 1 month ago ProcessLock.php 1 year ago Scan.php 4 months ago SearchReplace.php 5 months ago TotalStepsAreNumberOfTables.php 5 years ago Updating.php 2 weeks ago
JobExecutable.php
145 lines
1 <?php
2
3 namespace WPStaging\Backend\Modules\Jobs;
4
5 use WPStaging\Core\WPStaging;
6 use WPStaging\Framework\Traits\MemoryExhaustTrait;
7 use WPStaging\Framework\Utils\Strings;
8 use WPStaging\Framework\Utils\ServerVars;
9
10 // No Direct Access
11 if (!defined("WPINC")) {
12 die;
13 }
14
15 /**
16 * Class JobExecutable
17 * I'm sorry for such mess, we need to support PHP 5.3
18 * @package WPStaging\Backend\Modules\Jobs
19 */
20 abstract class JobExecutable extends Job
21 {
22 use MemoryExhaustTrait;
23
24 /**
25 * @var Strings
26 */
27 protected $strUtil;
28
29 /**
30 * @var array
31 */
32 protected $response = [
33 "status" => false,
34 "percentage" => 0,
35 "total" => 0,
36 "step" => 0,
37 "last_msg" => '',
38 ];
39
40 /**
41 * JobExecutable constructor.
42 */
43 public function __construct()
44 {
45 parent::__construct();
46
47 // Calculate total steps
48 $this->calculateTotalSteps();
49
50 // Set server settings for jobs (Do not set this globally as this will affect other plugins and even wp core then as well. Helpscout Ticket #9061)
51 // Set whether a client disconnect should abort script execution
52 @ignore_user_abort(true);
53
54 // Set maximum execution time
55 WPStaging::make(ServerVars::class)->setTimeLimit(0);
56
57 // Set maximum time in seconds a script is allowed to parse input data
58 @ini_set('max_input_time', '-1');
59
60 // Set maximum backtracking steps
61 @ini_set('pcre.backtrack_limit', (string)PHP_INT_MAX);
62
63 $this->strUtil = WPStaging::make(Strings::class);
64 }
65
66 /**
67 * Prepare Response Array
68 * @param bool $status false if not finished
69 * @param bool $incrementCurrentStep
70 * @return array
71 */
72 protected function prepareResponse($status = false, $incrementCurrentStep = true)
73 {
74 if ($incrementCurrentStep) {
75 $this->options->currentStep++;
76 }
77
78 $percentage = 0;
79 if (isset($this->options->currentStep) && isset($this->options->totalSteps) && $this->options->totalSteps > 0) {
80 $percentage = round(($this->options->currentStep / $this->options->totalSteps) * 100);
81 $percentage = ($percentage > 100) ? 100 : $percentage;
82 }
83
84 $this->removeMemoryExhaustErrorTmpFile();
85 return $this->response = [
86 "status" => $status,
87 "percentage" => $percentage,
88 "total" => $this->options->totalSteps,
89 "step" => $this->options->currentStep,
90 "job" => $this->options->currentJob,
91 "last_msg" => $this->logger->getLastLogMsg(),
92 "job_done" => $status,
93 ];
94 }
95
96 /**
97 * Start Module
98 * @return object
99 */
100 public function start()
101 {
102 // Execute steps
103 $this->run();
104
105 // Save option, progress
106 $this->saveOptions();
107
108 return (object) $this->response;
109 }
110
111 /**
112 * Run Steps
113 */
114 protected function run()
115 {
116 // Execute steps
117 for ($i = 0; $i < $this->options->totalSteps; $i++) {
118 // Job is finished or over threshold limits was hit
119 if (!$this->execute()) {
120 break;
121 }
122
123 // Return after every step to create lower batches
124 // This also gets a smoother progress bar and to a less consumptive php cpu load
125 // This decrease performance tremendous but also lowers memory consumption
126 if ($this->settings->cpuLoad === 'low') {
127 return (object) $this->response;
128 }
129 }
130 }
131
132 /**
133 * Calculate Total Steps in This Job and Assign It to $this->options->totalSteps
134 * @return void
135 */
136 abstract protected function calculateTotalSteps();
137
138 /**
139 * Execute the Current Step
140 * Returns false when over threshold limits are hit or when the job is done, true otherwise
141 * @return bool
142 */
143 abstract protected function execute();
144 }
145