PluginProbe
Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More / 2.6.1
Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More v2.6.1
trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.10 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 All 47 releases
content-control / classes / Services / UpgradeStream.php

UpgradeStream.php in Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More 2.6.1, at classes/Services/UpgradeStream.php

208 lines 4.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin controller.
4 *
5 * @copyright (c) 2021, Code Atlantic LLC.
6 *
7 * @package ContentControl
8 */
9
10 namespace ContentControl\Services;
11
12 use function ContentControl\plugin;
13
14 defined( 'ABSPATH' ) || exit;
15
16 /**
17 * HTTP Stream class.
18 */
19 class UpgradeStream extends \ContentControl\Base\Stream {
20
21 /**
22 * Upgrade status.
23 *
24 * @var array{total:int,progress:int,currentTask:null|array{name:string,total:int,progress:int}}|null
25 */
26 public $status = [
27 'total' => 0,
28 'progress' => 0,
29 'currentTask' => null,
30 ];
31
32 /**
33 * Update the status of the upgrade.
34 *
35 * @param array{total?:int|null,progress?:int|null,curentTask?:string|null} $status Status to update.
36 *
37 * @return void
38 */
39 public function update_status( $status ) {
40 $defaults = [
41 'total' => 0,
42 'progress' => 0,
43 'currentTask' => null,
44 ];
45
46 // Merge with existing status.
47 $status = wp_parse_args(
48 $status,
49 $this->status ? (array) $this->status : []
50 );
51
52 // Update status (merge with defaults).
53 $this->status = array_merge( $defaults, $status );
54 }
55
56 /**
57 * Update the status of the current task.
58 *
59 * @param array{total?:int,progress?:int,curentTask?:string}|null $task_status Status to update.
60 *
61 * @return void
62 */
63 public function update_task_status( $task_status ) {
64 $defaults = [
65 'name' => '',
66 'total' => 0,
67 'progress' => 0,
68 ];
69
70 if ( null === $task_status ) {
71 // Reset current task.
72 $this->status['currentTask'] = null;
73 } else {
74 // Merge with existing status.
75 $task_status = wp_parse_args(
76 $task_status,
77 $this->status['currentTask'] ? (array) $this->status['currentTask'] : []
78 );
79
80 // Update status (merge with defaults).
81 $this->status['currentTask'] = array_merge( $defaults, $task_status );
82 }
83 }
84
85 /**
86 * Send an event to the client.
87 *
88 * @param string $event Event name.
89 * @param mixed $data Data to send.
90 *
91 * @return void
92 */
93 public function send_event( $event, $data = [] ) {
94 // Always send the status.
95 $data['status'] = $this->status;
96
97 if ( ! empty( $data['message'] ) ) {
98 plugin( 'logging' )->log( $data['message'] );
99 }
100
101 $data = \wp_json_encode( $data );
102
103 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
104 echo "event: {$event}" . PHP_EOL;
105 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
106 echo "data: {$data}" . PHP_EOL;
107 echo PHP_EOL;
108
109 $this->flush_buffers();
110 }
111
112 /**
113 * Start the upgrade process.
114 *
115 * @param int $total Number of upgrades.
116 * @param string $message Message to send.
117 *
118 * @return void
119 */
120 public function start_upgrades( $total, $message = null ) {
121 $this->update_status( [
122 'total' => $total,
123 'progress' => 0,
124 'currentTask' => null,
125 ] );
126
127 $this->send_event( 'upgrades:start', [
128 'message' => $message ? $message : __( 'Starting upgrades...', 'content-control' ),
129 ] );
130 }
131
132 /**
133 * Complete the upgrade process.
134 *
135 * @param string $message Message to send.
136 *
137 * @return void
138 */
139 public function complete_upgrades( $message = null ) {
140 $this->update_status( [
141 'progress' => $this->status['total'],
142 'currentTask' => null,
143 ] );
144
145 $this->send_event( 'upgrades:complete', [
146 'message' => $message ? $message : __( 'Upgrades complete.', 'content-control' ),
147 ] );
148 }
149
150 /**
151 * Start a task.
152 *
153 * @param string $name Task name.
154 * @param int $task_steps Number of steps in the task.
155 * @param string $message Message to send.
156 *
157 * @return void
158 */
159 public function start_task( $name, $task_steps = 1, $message = null ) {
160 $this->update_task_status( [
161 'name' => $name,
162 'progress' => 0,
163 'total' => $task_steps,
164 ] );
165
166 $this->send_event( 'task:start', [
167 'message' => $message ? $message : $name,
168 ] );
169 }
170
171 /**
172 * Update the progress of the current task.
173 *
174 * @param int $progress Progress of the task.
175 *
176 * @return void
177 */
178 public function update_task_progress( $progress ) {
179 $this->update_task_status( [
180 'progress' => $progress,
181 ] );
182
183 $this->send_event( 'task:progress', [] );
184 }
185
186 /**
187 * Complete the current task.
188 *
189 * @param string $message Message to send.
190 *
191 * @return void
192 */
193 public function complete_task( $message = null ) {
194 $task_status = $this->status['currentTask'];
195
196 $this->update_task_status( null );
197
198 $this->update_status( [
199 'progress' => $this->status['progress'] + 1,
200 ] );
201
202 $this->send_event( 'task:complete', [
203 // translators: %s: task name.
204 'message' => $message ? $message : sprintf( __( 'Completed: %s', 'content-control' ), $task_status['name'] ),
205 ] );
206 }
207 }
208