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

200 lines 4.3 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 parent::send_event( $event, $data );
102 }
103
104 /**
105 * Start the upgrade process.
106 *
107 * @param int $total Number of upgrades.
108 * @param string $message Message to send.
109 *
110 * @return void
111 */
112 public function start_upgrades( $total, $message = null ) {
113 $this->update_status( [
114 'total' => $total,
115 'progress' => 0,
116 'currentTask' => null,
117 ] );
118
119 $this->send_event( 'upgrades:start', [
120 'message' => $message ? $message : __( 'Starting upgrades...', 'content-control' ),
121 ] );
122 }
123
124 /**
125 * Complete the upgrade process.
126 *
127 * @param string $message Message to send.
128 *
129 * @return void
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 * @return void
150 */
151 public function start_task( $name, $task_steps = 1, $message = null ) {
152 $this->update_task_status( [
153 'name' => $name,
154 'progress' => 0,
155 'total' => $task_steps,
156 ] );
157
158 $this->send_event( 'task:start', [
159 'message' => $message ? $message : $name,
160 ] );
161 }
162
163 /**
164 * Update the progress of the current task.
165 *
166 * @param int $progress Progress of the task.
167 *
168 * @return void
169 */
170 public function update_task_progress( $progress ) {
171 $this->update_task_status( [
172 'progress' => $progress,
173 ] );
174
175 $this->send_event( 'task:progress', [] );
176 }
177
178 /**
179 * Complete the current task.
180 *
181 * @param string $message Message to send.
182 *
183 * @return void
184 */
185 public function complete_task( $message = null ) {
186 $task_status = $this->status['currentTask'];
187
188 $this->update_task_status( null );
189
190 $this->update_status( [
191 'progress' => $this->status['progress'] + 1,
192 ] );
193
194 $this->send_event( 'task:complete', [
195 // translators: %s: task name.
196 'message' => $message ? $message : sprintf( __( 'Completed: %s', 'content-control' ), $task_status['name'] ),
197 ] );
198 }
199 }
200