PluginProbe
Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More / 2.0.2
Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More v2.0.2
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.0.2, at classes/Services/UpgradeStream.php

194 lines 4.2 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
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 $status Status to update.
36 */
37 public function update_status( $status = [] ) {
38 $defaults = [
39 'total' => 0,
40 'progress' => 0,
41 'currentTask' => null,
42 ];
43
44 // Merge with existing status.
45 $status = wp_parse_args(
46 $status,
47 $this->status ? (array) $this->status : []
48 );
49
50 // Update status (merge with defaults).
51 $this->status = array_merge( $defaults, $status );
52 }
53
54 /**
55 * Update the status of the current task.
56 *
57 * @param array|null $task_status Status to update.
58 */
59 public function update_task_status( $task_status = [] ) {
60 $defaults = [
61 'name' => '',
62 'total' => 0,
63 'progress' => 0,
64 ];
65
66 if ( null === $task_status ) {
67 // Reset current task.
68 $this->status['currentTask'] = null;
69 } else {
70 // Merge with existing status.
71 $task_status = wp_parse_args(
72 $task_status,
73 $this->status['currentTask'] ? (array) $this->status['currentTask'] : []
74 );
75
76 // Update status (merge with defaults).
77 $this->status['currentTask'] = array_merge( $defaults, $task_status );
78 }
79 }
80
81 /**
82 * Send an event to the client.
83 *
84 * @param string $event Event name.
85 * @param array $data Data to send.
86 *
87 * @return void
88 */
89 public function send_event( $event, $data = [] ) {
90 // Always send the status.
91 $data['status'] = $this->status;
92
93 if ( ! empty( $data['message'] ) ) {
94 plugin( 'logging' )->log( $data['message'] );
95 }
96
97 $data = is_string( $data ) ? $data : \wp_json_encode( $data );
98
99 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
100 echo "event: {$event}" . PHP_EOL;
101 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
102 echo "data: {$data}" . PHP_EOL;
103 echo PHP_EOL;
104
105 $this->flush_buffers();
106 }
107
108 /**
109 * Start the upgrade process.
110 *
111 * @param int $total Number of upgrades.
112 * @param string $message Message to send.
113 */
114 public function start_upgrades( $total, $message = null ) {
115 $this->update_status( [
116 'total' => $total,
117 'progress' => 0,
118 'currentTask' => null,
119 ] );
120
121 $this->send_event( 'upgrades:start', [
122 'message' => $message ? $message : __( 'Starting upgrades...', 'content-control' ),
123 ] );
124 }
125
126 /**
127 * Complete the upgrade process.
128 *
129 * @param string $message Message to send.
130 */
131 public function complete_upgrades( $message = null ) {
132 $this->update_status( [
133 'progress' => $this->status['total'],
134 'currentTask' => null,
135 ] );
136
137 $this->send_event( 'upgrades:complete', [
138 'message' => $message ? $message : __( 'Upgrades complete.', 'content-control' ),
139 ] );
140 }
141
142 /**
143 * Start a task.
144 *
145 * @param string $name Task name.
146 * @param int $task_steps Number of steps in the task.
147 * @param string $message Message to send.
148 */
149 public function start_task( $name, $task_steps = 1, $message = null ) {
150 $this->update_task_status( [
151 'name' => $name,
152 'progress' => 0,
153 'total' => $task_steps,
154 ] );
155
156 $this->send_event( 'task:start', [
157 'message' => $message ? $message : $name,
158 ] );
159 }
160
161 /**
162 * Update the progress of the current task.
163 *
164 * @param int $progress Progress of the task.
165 */
166 public function update_task_progress( $progress ) {
167 $this->update_task_status( [
168 'progress' => $progress,
169 ] );
170
171 $this->send_event( 'task:progress', [] );
172 }
173
174 /**
175 * Complete the current task.
176 *
177 * @param string $message Message to send.
178 */
179 public function complete_task( $message = null ) {
180 $task_status = $this->status['currentTask'];
181
182 $this->update_task_status( null );
183
184 $this->update_status( [
185 'progress' => $this->status['progress'] + 1,
186 ] );
187
188 $this->send_event( 'task:complete', [
189 // translators: %s: task name.
190 'message' => $message ? $message : sprintf( __( 'Completed: %s', 'content-control' ), $task_status['name'] ),
191 ] );
192 }
193 }
194