1 | <?php |
||
2 | require_once __DIR__ .'/../vendor/autoload.php'; |
||
3 | use Kristuff\Mishell\Console; |
||
4 | |||
5 | declare(ticks = 1); // Allow posix signal handling |
||
6 | pcntl_async_signals(true); |
||
7 | pcntl_signal(SIGINT,"shutdown"); |
||
8 | register_shutdown_function("shutdown"); // Handle END of script |
||
9 | |||
10 | // Console::newWindow(); |
||
11 | // standWithUkraine("Stand with Ukraine <3", "Slava Ukraini"); |
||
12 | // Console::clear(the war); |
||
13 | // Console::destroy("the duck"); |
||
14 | // Console::help("PLEASE!"); |
||
15 | printLoader(777, false); // à "la va vite".. u sleep? or not u sleep? or caleçon ? .. |
||
16 | splash(); |
||
17 | goIndex(); |
||
18 | |||
19 | function goIndex() |
||
20 | { |
||
21 | splash(); |
||
22 | splash(); |
||
23 | Console::newWindow(); |
||
24 | printHeader('index'); |
||
25 | printIndex(); |
||
26 | askIndex(); |
||
27 | } |
||
28 | |||
29 | function shutdown(){ |
||
30 | // echo "\033c"; // Clear terminal |
||
31 | // echo PHP_EOL; // New line |
||
32 | Console::clear(); |
||
33 | Console::clear(); |
||
34 | Console::clear(); |
||
35 | Console::clear(); |
||
36 | Console::clear(); |
||
37 | Console::log('SIGINT signal detected, terminate script...'); |
||
38 | sleep(1); |
||
39 | |||
40 | // .. |
||
41 | // Console::restoreWindow(); |
||
42 | exit(0); |
||
0 ignored issues
–
show
|
|||
43 | } |
||
44 | |||
45 | function printLoader($introDelay = 75000, $printAll = true) |
||
46 | { |
||
47 | Console::newWindow(); |
||
48 | splash(); |
||
49 | Console::clear(); |
||
50 | splash(); |
||
51 | Console::clear(); |
||
52 | Console::log(); |
||
53 | Console::log(Console::text(" _ _ _ _ ", 'yellow').Console::text(' ', 'yellow').Console::text('', 'green') ); |
||
54 | Console::log(Console::text(" _ __ (_)__| |_ ___| | | ", 'yellow').Console::text(' ', 'yellow').Console::text('', 'green') ); |
||
55 | Console::log(Console::text(" | ' \| (_-< ' \/ -_) | | ", 'yellow').Console::text(' ', 'yellow').Console::text('', 'green') ); |
||
56 | Console::log(Console::text(" |_|_|_|_/__/_||_\___|_|_| ", 'yellow').Console::text('By ', 'yellow').Console::text("kr157uff", 'green') ); |
||
57 | Console::log(); |
||
58 | Console::log(' '.Console::text("-----------------------------------------------------------------", "green")); |
||
59 | Console::log(' '.Console::text("kristuff/mishell: A mini PHP library to build CLI app and reports", "green")); |
||
60 | Console::log(' '.Console::text('Made with ', 'green') . Console::text('♥', 'red'). |
||
61 | Console::text(' ', 'green'). |
||
62 | Console::text(" | © 2017-2024 kri157uff", "green")); |
||
63 | Console::log(' '.Console::text("-----------------------------------------------------------------", "green")); |
||
64 | Console::log(); |
||
65 | usleep($introDelay * random_int(7, 11)); |
||
66 | $new = Console::text("NEW", 'green', 'blink'); |
||
67 | $fullRowString = Console::pad('', Console::getColumns()); |
||
68 | $badgeOnline = Console::text(' ONLINE ', 'yellow', 'green'). ' '; |
||
69 | $badgeError = Console::text(' 💀 ERR ', 'yellow', 'red'); |
||
70 | $badgeOffline = Console::text(' BROKEN ', 'yellow', 'yellow'). ' '; |
||
71 | $badgeBroken = Console::text(' 😜 LIKELY NEED INTERNAL REWRITE ', 'yellow', 'red'); |
||
72 | $swu = Console::text('StandWith', 'yellow', 'blue').Console::text('Ukraine', 'blue', 'yellow'); |
||
73 | $copyright = Console::text(' [*]', 'green').Console::text(" © 2017-2024 ", 'yellow').Console::text('kri157uff', 'green').Console::text(' aka ', 'yellow').Console::text('Kristuff', 'green'); |
||
74 | $head1 = Console::text(' [*]', 'blue').Console::text(' Kr157uff/mishell ', 'yellow').Console::text(" v1.6 ", 'yellow', 'blue').' released '.$new.Console::text(' ', 'yellow'); |
||
75 | $progress = Console::text(' [*]', 'blue').Console::text(' This is another ', 'yellow').Console::text('fake', 'green', 'underlined').Console::text(' progress message (', 'yellow').Console::text('0%', 'green').Console::text(') completed', 'yellow'); |
||
76 | $progress1 = Console::text(' [*]', 'yellow').Console::text(' In fact I\'m already loaded for a while...', 'yellow'); |
||
77 | $twitter = Console::text(' [*]', 'blue').Console::text(' Twitter microservices status: ', 'yellow').$badgeOffline; |
||
78 | $weSWU = Console::text(' [*]', 'blue').Console::text(' We ', 'yellow').$swu; |
||
79 | $msg1 = Console::text(' [*]', 'blue'). Console::text(' Tortoise vs Hare Race will starting soon. Place your bets! ...', 'yellow'); |
||
80 | $msg2 = Console::text(' [*]', 'blue').Console::text(' 🐢 ', 'green').Console::text('Tortoise progress ... ', 'green'); |
||
81 | $msg3 = Console::text(' [*]', 'blue').Console::text(' 🐇 ', 'yellow').Console::text('Hare progress ... ', 'green'); |
||
82 | Console::log($head1); |
||
83 | usleep($introDelay * random_int(1, 4)); |
||
84 | Console::log(); |
||
85 | Console::log($copyright); |
||
86 | Console::log(); |
||
87 | usleep($introDelay * random_int(3, 5)); |
||
88 | Console::log($weSWU); |
||
89 | Console::log(); |
||
90 | usleep($introDelay * random_int(5, 7)); |
||
91 | Console::log($twitter); |
||
92 | Console::log(); |
||
93 | usleep($introDelay * random_int(1, 2)); |
||
94 | Console::log($msg1); |
||
95 | Console::log(); |
||
96 | Console::log($msg2); |
||
97 | Console::log(); |
||
98 | Console::log($msg3); |
||
99 | Console::log(); |
||
100 | usleep($introDelay * random_int(2, 4)); |
||
101 | Console::log($progress); |
||
102 | Console::log(); |
||
103 | Console::log($progress1); |
||
104 | Console::log(); |
||
105 | // |
||
106 | $harePurcent = 0; |
||
107 | $tortPurcent = 0; |
||
108 | $twitterStatus = [ |
||
109 | Console::text(' [*]', 'green').Console::text(' Twitter microservices status: ', 'yellow').$badgeOnline, |
||
110 | Console::text(' [*]', 'yellow').Console::text(' Twitter microservices status: ', 'yellow').$badgeOffline, |
||
111 | Console::text(' [*]', 'red') .Console::text(' Twitter microservices status: ', 'yellow'). $badgeError, |
||
112 | ]; |
||
113 | for ($i=1 ; $i<=100 ; $i++) { |
||
114 | $isOdd = ($i % 2 == 0); |
||
115 | |||
116 | $progress = Console::text(' [*]', 'blue').Console::text(' This is another ', 'yellow').Console::text('fake', 'green', 'bold', 'underlined').Console::text(' progress message (', 'yellow').Console::text($i .'%', 'green').Console::text(' completed)', 'yellow'); |
||
117 | $twitter = $twitterStatus[random_int(0, 2)]; |
||
118 | |||
119 | if ($i < 75 ){ |
||
120 | $isOdd && $tortPurcent++; |
||
121 | } else { |
||
122 | $twitter = Console::text(' [*]', 'red').Console::text(' Twitter microservices status: ', 'yellow').$badgeBroken; |
||
123 | $tortPurcent = min($tortPurcent + 3, 100); |
||
124 | } |
||
125 | if ($i == 100) { |
||
126 | Console::text(' [*]', 'red').Console::text(' Twitter microservices status: ', 'yellow').$badgeBroken; |
||
127 | } |
||
128 | $harePurcent++; |
||
129 | if ($i== 100){ |
||
130 | $tortColor = $tortPurcent >= $harePurcent ? 'green' : 'red' ; |
||
131 | $hareColor = $tortPurcent < $harePurcent ? 'green' : 'red' ; |
||
132 | } else { |
||
133 | $tortColor = $tortPurcent >= $harePurcent ? 'green' : 'yellow' ; |
||
134 | $hareColor = $tortPurcent < $harePurcent ? 'green' : 'yellow' ; |
||
135 | } |
||
136 | $msg1 = $i==100 ? |
||
137 | Console::text(' [*]', 'blue').Console::text(' Tortoise vs Hare Race - Final Results', 'yellow') : |
||
138 | Console::text(' [*]', 'blue').Console::text(' Tortoise vs Hare Race: ', 'yellow').Console::text(' RUNNING ', 'yellow', 'yellow'). ' ' ; |
||
139 | $msg2 = Console::text(' [*]', $i==100 ? $tortColor : 'blue').Console::text(' 🐢 ', 'green').Console::text('Tortoise progress: ', 'yellow').Console::progressBar($tortPurcent, $tortColor, $tortColor); |
||
140 | $msg3 = Console::text(' [*]', $i==100 ? $hareColor : 'blue').Console::text(' 🐇 ', 'yellow'). Console::text('Hare progress: ', 'yellow').Console::progressBar($harePurcent, $hareColor, $hareColor); |
||
141 | $msg2End = $tortPurcent == 100 ? ' '.Console::text('🏆 WINNER!!!', 'green') : ''; |
||
142 | $msgs = [ |
||
143 | $head1 |
||
144 | , |
||
145 | ' ', $copyright, |
||
146 | ' ', $weSWU, |
||
147 | ' ', $twitter, |
||
148 | ' ', $msg1, |
||
149 | ' ', $msg2.$msg2End, |
||
150 | ' ', $msg3, |
||
151 | ' ', $progress, |
||
152 | ' ', $progress1, |
||
153 | ' ', |
||
154 | ]; |
||
155 | |||
156 | // rewrite the last printed lines |
||
157 | Console::overwrite($msgs); |
||
158 | |||
159 | // wait for a while, so we see the animation |
||
160 | usleep($introDelay); |
||
161 | } |
||
162 | |||
163 | $apt1 = Console::text(' dpkg install nothing [ ', 'yellow').Console::progressBar(0, 'default', 'default','default', Console::getColumns() - 26, ' ', '.', false).Console::text(' ]', 'yellow'); |
||
164 | $apt2 = Console::pad(Console::text(' dpkg finished to install nothing ...', 'yellow'), Console::getColumns() -26); |
||
165 | $apt3 = ''; |
||
166 | $apt4 = Console::pad(Console::text(' it works on my machine ...', 'yellow'), Console::getColumns() -26); |
||
167 | $apt5 = ''; |
||
168 | $apt6 = Console::pad(Console::text(' failed to import new galaxy, we will retry later ...', 'red'), Console::getColumns() -26); |
||
169 | |||
170 | usleep($introDelay * random_int(2, 3)); |
||
171 | Console::log($apt1); |
||
172 | for ($i=1 ; $i<=100 ; $i++) { |
||
173 | $apt1 = Console::text(' dpkg install nothing [ ', 'yellow').Console::progressBar($i, 'default', 'default','default', Console::getColumns() - 26, ' ', '#', false).Console::text(' ]', 'yellow'); |
||
174 | Console::overwrite($apt1); |
||
175 | usleep($introDelay / 3); |
||
176 | } |
||
177 | Console::overwrite($apt2); |
||
178 | |||
179 | Console::log($apt3); |
||
180 | for ($i=1 ; $i<=100 ; $i++) { |
||
181 | $apt3 = Console::text(' dpkg purge nothing [ ', 'yellow').Console::progressBar($i, 'default', 'default','default', Console::getColumns() - 26, Console::text('.', 'yellow'), Console::text('#', 'green'), false).Console::text(' ]', 'yellow'); |
||
182 | Console::overwrite($apt3); |
||
183 | usleep($introDelay / 4); |
||
184 | } |
||
185 | Console::overwrite($apt4); |
||
186 | |||
187 | usleep($introDelay * random_int(2, 3)); |
||
188 | Console::log($apt5); |
||
189 | for ($i=1 ; $i<=100 ; $i++) { |
||
190 | $apt5 = Console::text(' importing new galaxy [ ', 'yellow').Console::progressBar($i, 'default', 'default','default', Console::getColumns() - 26, Console::text('.', 'yellow'), Console::text('!', 'red'), false).Console::text(' ]', 'yellow'); |
||
191 | Console::overwrite($apt5); |
||
192 | usleep($introDelay / 5 ); |
||
193 | } |
||
194 | Console::overwrite($apt6); |
||
195 | |||
196 | $magicTime = $printAll ? 122000 : false; |
||
197 | |||
198 | Console::log(' '.Console::text("- CRITICAL FAILURE -", 'yellow', 'red')); |
||
199 | usleep($magicTime ?? 556000); |
||
200 | Console::overwrite(Console::text(" just kidding ...", 'yellow')); |
||
201 | usleep($magicTime ?? 9155000); |
||
202 | Console::overwrite(Console::text(" demo complete", 'green')); |
||
203 | usleep($magicTime ?? 1355000); |
||
204 | Console::overwrite(Console::text(" oh wait! I forgot something 🤔", 'yellow')); |
||
205 | usleep($magicTime ?? 1355000); |
||
206 | |||
207 | if ($printAll) { |
||
208 | |||
209 | Console::overwrite($fullRowString); |
||
210 | Console::log( |
||
211 | Console::text(" →", 'yellow').Console::text(' → ', 'blue'). |
||
212 | Console::text(" →", 'yellow').Console::text(' → ', 'blue'). |
||
213 | Console::text(" →", 'yellow').Console::text(' → ', 'blue'). |
||
214 | Console::text(" →", 'yellow').Console::text(' → ', 'blue'). |
||
215 | $swu. |
||
216 | Console::text(" ←", 'yellow').Console::text(' ← ', 'blue'). |
||
217 | Console::text(" ←", 'yellow').Console::text(' ← ', 'blue'). |
||
218 | Console::text(" ←", 'yellow').Console::text(' ← ', 'blue'). |
||
219 | Console::text(" ←", 'yellow').Console::text(' ← ', 'blue') |
||
220 | ); |
||
221 | usleep($introDelay * 10); |
||
222 | |||
223 | Console::log(); |
||
224 | Console::log( Console::text(" also forgot to install Kr157uff-socials-links-2.0 package", 'yellow')); usleep(1355000); |
||
225 | Console::overwrite( Console::text(" Do you want to install Kr157uff-socials-links package? (634 Go)", 'yellow')); usleep(1355000); |
||
226 | Console::log( Console::text(" i readed in your mind and detected ", 'yellow').Console::text('YES OF COURSE', 'yellow').Console::text(" ...", 'yellow')); usleep($introDelay * 5); |
||
227 | Console::log( Console::text(" i never cheat ...", 'yellow')); usleep($introDelay * 5); |
||
228 | Console::log( Console::text(" okay sometimes ...", 'yellow')); |
||
229 | $socials = [ |
||
230 | ["name" => "Github", "user" => "kristuff ", "link" => "https://github.com/kristuff"], |
||
231 | ["name" => "Twitter", "user" => "@_kristuff ", "link" => "https://twitter.com/_kristuff"], |
||
232 | ["name" => "Mastodon", "user" => "@kristuff ", "link" => "https://infosec.exchange/@kristuff"], |
||
233 | ]; |
||
234 | |||
235 | $aptLink = Console::text(' unpacking Kr157uff-social-links-2.0-prod-test [ ', 'yellow').Console::progressBar(0, 'default', 'default','default', Console::getColumns() - 56, '.', Console::text('#', 'green'), false).Console::text(' ]', 'yellow'); |
||
236 | Console::log(); |
||
237 | Console::log(); |
||
238 | Console::log(); |
||
239 | Console::log($aptLink); |
||
240 | Console::log(); |
||
241 | |||
242 | $i = 0; |
||
243 | foreach ($socials as $social){ |
||
244 | $socialLog = Console::pad( |
||
245 | Console::text(' preparing to unpack ', 'yellow'). |
||
246 | Console::text('kristuff-'.$social['name'].'.deb', 'green'). |
||
247 | Console::text(' ...', 'yellow'), |
||
248 | Console::getColumns() - 12 |
||
249 | ) ; |
||
250 | $socialLog3 = Console::text( ' created symlink ', 'yellow'). |
||
251 | Console::text('/usr/bin/'.$social['user'], 'yellow'). |
||
252 | Console::text(' → ', 'yellow'). |
||
253 | Console::text($social['link'], 'lightblue', 'underlined'); |
||
254 | |||
255 | $socialLog2 = Console::text( ' unpacking ', 'yellow'). |
||
256 | Console::text('kristuff-'. $social['name'].'-prod-test~deb12u99', 'yellow'). |
||
257 | Console::text('-prod-test~deb12u99', 'green'). |
||
258 | Console::text(' ...', 'yellow'); |
||
259 | |||
260 | |||
261 | $aptLink = Console::text(' unpacking ', 'yellow'). |
||
262 | Console::text('kristuff-social-links_2.0-prod-test~deb12u99', 'yellow'). |
||
263 | Console::text(' [ ', 'yellow'). |
||
264 | Console::progressBar(round(($i+0.3)/(count($socials)*2)*100), 'default', 'default','default', Console::getColumns() - 64, '.', Console::text('#', 'green'), false).Console::text(' ]', 'yellow'); |
||
265 | |||
266 | Console::overwrite([$fullRowString,$fullRowString]); |
||
267 | Console::overwrite([$socialLog, $socialLog2]); |
||
268 | Console::log($socialLog3); |
||
269 | Console::log(); |
||
270 | Console::log($aptLink); |
||
271 | usleep($introDelay * random_int(2, 4)); |
||
272 | |||
273 | $i++; |
||
274 | $aptLink = Console::text(' unpacking ', 'yellow'). |
||
275 | Console::text('kristuff-social-links_2.0-prod-test~deb12u99', 'yellow'). |
||
276 | Console::text(' [ ', 'yellow'). |
||
277 | Console::progressBar(round($i+0.3/count($socials)*2*100), 'default', 'default','default', |
||
278 | Console::getColumns() - 64, '.', Console::text('#', 'green'), false). |
||
279 | Console::text(' ]', 'yellow'); |
||
280 | usleep($introDelay * random_int(2, 4)); |
||
281 | Console::overwrite([$fullRowString,$fullRowString]); |
||
282 | Console::overwrite([' ', $aptLink]); |
||
283 | $i++; |
||
284 | } |
||
285 | |||
286 | $aptLink = Console::text(' unpacking ', 'yellow'). |
||
287 | Console::text('kristuff-social-links_2.0-prod-test~deb12u99', 'yellow'). |
||
288 | Console::text(' [ ', 'yellow'). |
||
289 | Console::progressBar(100, 'default', 'default','default', |
||
290 | Console::getColumns() - 64, '.', Console::text('#', 'green'), false). |
||
291 | Console::text(' ]', 'yellow'); |
||
292 | |||
293 | Console::overwrite($aptLink); |
||
294 | usleep($introDelay * random_int(10, 50)); |
||
295 | |||
296 | Console::overwrite(Console::pad('', Console::getColumns())); |
||
297 | $aptLink = Console::text(' unpacking ', 'yellow'). |
||
298 | Console::text('kristuff-social-links_2.0-prod-test~deb12u99', 'yellow'). |
||
299 | Console::text(' completed ... ', 'yellow'). |
||
300 | |||
301 | Console::overwrite($fullRowString); |
||
302 | Console::log($aptLink); |
||
303 | Console::log(); |
||
304 | Console::log(Console::text(" _ _ _ _ ", 'yellow').Console::text(' ', 'yellow').Console::text('', 'green') ); |
||
305 | Console::log(Console::text(" _ __ (_)__| |_ ___| | | ", 'yellow').Console::text(' ', 'yellow').Console::text('', 'green') ); |
||
306 | Console::log(Console::text(" | ' \| (_-< ' \/ -_) | | ", 'yellow').Console::text(' ', 'yellow').Console::text('', 'green') ); |
||
307 | Console::log(Console::text(" |_|_|_|_/__/_||_\___|_|_| ", 'yellow').Console::text('By ', 'yellow').Console::text("kr157uff", 'green') ); |
||
308 | Console::log(' '.Console::text("-----------------------------------------------------------------", "green")); |
||
309 | Console::log(' '.Console::text("kr157uff/mishell: A mini PHP library to build CLI app and reports", "green")); |
||
310 | Console::log(' '.Console::text('Made with ', 'green') . Console::text('♥', 'red'). |
||
311 | Console::text(' in France', 'green'). |
||
312 | Console::text(" | © 2017-2024 kri157uff", "green")); |
||
313 | Console::log(' '.Console::text("-----------------------------------------------------------------", "green")); |
||
314 | Console::log(); |
||
315 | usleep(1200000); |
||
316 | usleep($introDelay * random_int(10, 50)); |
||
317 | Console::log(); |
||
318 | Console::log(Console::text(" If you don't have the time to read, you can replay this intro slowwwly. Hura!", 'yellow')); |
||
319 | Console::log(); |
||
320 | |||
321 | } |
||
322 | |||
323 | usleep($introDelay * random_int(20, 40)); |
||
324 | Console::restoreWindow(); |
||
325 | |||
326 | } |
||
327 | |||
328 | function standWithUkraine($msg1, $msg2, $delay = 2000000) |
||
329 | { |
||
330 | // *open* new window |
||
331 | Console::newWindow(); |
||
332 | |||
333 | // get columns / lines and calculate middle |
||
334 | $lines = Console::getLines(); |
||
335 | $cols = Console::getColumns(); |
||
336 | $middle = round($lines/2); |
||
337 | |||
338 | for ($i= 1; $i <= $lines ; $i++){ |
||
339 | |||
340 | switch($i){ |
||
341 | case $middle -1: |
||
342 | Console::log(Console::pad($msg1, $cols, ' ', STR_PAD_BOTH), 'yellow', 'blue'); |
||
343 | break; |
||
344 | case $middle: |
||
345 | Console::log(Console::pad(' ', $cols, ' ', STR_PAD_BOTH), 'yellow', 'blue'); |
||
346 | break; |
||
347 | case $middle +1: |
||
348 | Console::log(Console::pad(' ', $cols, ' ', STR_PAD_BOTH), 'blue', 'yellow'); |
||
349 | break; |
||
350 | case $middle +2: |
||
351 | Console::log(Console::pad($msg2, $cols, ' ', STR_PAD_BOTH), 'blue', 'yellow'); |
||
352 | break; |
||
353 | case $lines: |
||
354 | Console::relog(Console::pad('Please wait a moment ', $cols, ' ', STR_PAD_LEFT), 'blue', 'yellow'); |
||
355 | break; |
||
356 | |||
357 | default: |
||
358 | if ($i > $middle) { |
||
359 | Console::log(Console::pad(' ', $cols), 'blue', 'yellow'); |
||
360 | } else { |
||
361 | Console::log(Console::pad(' ', $cols), 'yellow', 'blue'); |
||
362 | } |
||
363 | } |
||
364 | } |
||
365 | |||
366 | usleep($delay); |
||
367 | // restore previous window |
||
368 | Console::restoreWindow(); |
||
369 | } |
||
370 | |||
371 | function getIndex() |
||
372 | { |
||
373 | $index = []; |
||
374 | $new = Console::text("NEW", 'green', 'blink'); |
||
375 | |||
376 | $index[99] = ['Quit ', 'Quit and *restore* my terminal ' , '']; |
||
377 | $index[1] = ['Styles ', 'How to get basic styles ' , 'demo.styles.php ' , '']; |
||
378 | $index[2] = ['Colors ', 'How to get foreground colors ' , 'demo.colors.php ' , '']; |
||
379 | $index[3] = ['Backgrounds ', 'How to get background colors ' , 'demo.bgcolors.php ' , '']; |
||
380 | $index[7] = ['Pad ', 'How to get padded string ' .Console::text( ' Console::pad() ' , 'lightblue' ). 'overview' , 'demo.pad.php', '']; |
||
381 | $index[8] = ['Size ', 'How to get lines/columns number ' , 'demo.size.php ' , '']; |
||
382 | $index[11] = ['Ask ', 'How to ask? (get user input) ' , 'demo.ask.php ' , '']; |
||
383 | $index[12] = ['Ask Number ', 'How to ask and expect a number? ' , 'demo.askint.php ' , '']; |
||
384 | $index[13] = ['Ask Password ', 'How to ask and hide input ' , 'demo.askpassword.php ' , '']; |
||
385 | $index[14] = ['Table ', 'How to print a table? ' , 'demo.table. php ' , '']; |
||
386 | $index[15] = ['Bell ', 'How to run the bell? ' , 'demo.bell.ph p ' , '']; |
||
387 | $index[16] = ['Progress (1) ', 'How to print progress message? ' .Console::text( ' Console::relog() ' , 'lightblue' ). 'overview' , 'demo.progress.php', '']; |
||
388 | $index[17] = ['Progress (2) ', 'How to print progress message? ' .Console::text( ' Console::overwrite() ' , 'lightblue' ). 'basic usage '.$new, 'demo.progress2.php', '']; |
||
389 | $index[18] = ['Progress (3) ', 'How to print progress message? ' .Console::text( ' Console::overwrite() ' , 'lightblue' ). 'advanced usage '.$new, 'demo.progress3.php', '']; |
||
390 | $index[19] = ['New window ', 'How to open new/restore window? ' , 'demo.window.php ' , '']; |
||
391 | $index[80] = ['BlueScreen ', 'How to print blue screen ' .Console::text( ' Console::BUG(?)', 'yellow').' OLD && ' .$new , 'demo.bluescreen.php' , '']; |
||
392 | $index[90] = ['Loader ', 'Replay the loader ' .Console::text( ' RealTime™v2.0 ' , 'yellow ', 'blue') . ' ' .$new, '']; |
||
393 | $index[91] = ['Loader ', 'Replay the loader (more slowly) ' .Console::text( ' SLOOOOW! ', 'black', 'yellow'). ' ' .$new , '']; |
||
394 | $index[92] = ['Loader ', 'Replay the loader (very slowly) ' .Console::text( ' SLOOOOOOOOOOOOW! ', 'yellow', 'red' ). ' ' .$new , '']; |
||
395 | $index[800] = ['lifeA ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
396 | $index[801] = ['lifeB ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
397 | $index[802] = ['lifeC ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
398 | $index[803] = ['lifeE ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
399 | $index[804] = ['lifeF ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
400 | $index[805] = ['lifeG ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
401 | $index[807] = ['lifeH ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
402 | $index[808] = ['lifeI ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
403 | $index[809] = ['lifeJ ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
404 | $index[810] = ['lifeK ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
405 | $index[811] = ['lifeL ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
406 | $index[812] = ['lifeMNO ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
407 | $index[822] = ['lifePQ ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
408 | $index[844] = ['lifeR ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
409 | $index[888] = ['lifeNOSS ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
410 | $index[869] = ['lifeTHE-TEA ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
411 | $index[870] = ['lifeUV-SOL-AIR ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
412 | $index[890] = ['lifeW ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
413 | $index[899] = ['lifeXYQ ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , '', '']; |
||
414 | $index[81] = ['life. ', 'How to print " I love life " ' .Console::text( ' 5tandWith', 'yellow' , 'blue').Console::text('Ukraine', 'blue', 'yellow'). ' '.$new , 'demo.standwithukraine.php', '']; |
||
415 | |||
416 | return $index; |
||
417 | } |
||
418 | |||
419 | function printHeader($title = '', $demoPart = false) |
||
420 | { |
||
421 | Console::log(Console::text(" _ _ _ _ ", 'yellow')); |
||
422 | Console::log(Console::text(" _ __ (_)__| |_ ___| | | ", 'yellow').Console::text(' Kr157uff/Mishell ', 'green') . Console::text(' v1.6 ', 'yellow', 'blue'). ' '. Console::text(' StandWith ', 'yellow', 'blue')); |
||
423 | Console::log(Console::text(" | ' \| (_-< ' \/ -_) | | ", 'yellow').Console::text(' Made with ', 'green') . Console::text('♥', 'red') . Console::text(' in France', 'green'). ' '.Console::text(' Ukraine ', 'blue', 'yellow')); |
||
424 | Console::log(Console::text(" |_|_|_|_/__/_||_\___|_|_| ", 'yellow'). |
||
425 | Console::text(' © 2017-2024 Kr157uff (', 'green') . |
||
426 | Console::text('https://github.com/kristuff', 'green', 'underlined') . |
||
427 | Console::text(')', 'green') |
||
428 | ); |
||
429 | |||
430 | Console::log(); |
||
431 | $demoTitle = Console::pad(' Mishell Interactive Sample - '.$title. ' ', 108, ' ', STR_PAD_BOTH); |
||
432 | Console::log(Console::text(' ┌'.Console::pad('', 108, '─').'┐', 'yellow')); |
||
433 | Console::log(Console::text(' │'.$demoTitle.'│', 'yellow')); |
||
434 | |||
435 | if ($demoPart){ |
||
436 | Console::log(Console::text(' └'.Console::pad('', 108, '─').'┘', 'yellow')); |
||
437 | Console::log(); |
||
438 | } |
||
439 | } |
||
440 | |||
441 | function printSampleHeader($index, $title) |
||
442 | { |
||
443 | Console::log(' ' . Console::text(' - '. $index .' - ' . $title . ' ', 'yellow', 'blue')); |
||
444 | Console::log(); |
||
445 | } |
||
446 | |||
447 | function printIndex() |
||
448 | { |
||
449 | $rowHeaders = [ |
||
450 | 'Index' => 5, |
||
451 | 'Item' => 20, |
||
452 | 'Description' => 75 |
||
453 | ]; |
||
454 | $i = 0; |
||
455 | |||
456 | // customize table separator |
||
457 | Console::$horizontalSeparator = '─'; |
||
458 | Console::$verticalSeparator = Console::text('│', 'yellow'); |
||
459 | Console::$verticalInnerSeparator = ' '; |
||
460 | Console::$tableCellPadding = ' '; |
||
461 | |||
462 | $line = Console::text(' ├', 'yellow'); |
||
463 | $isFirst = true; |
||
464 | foreach ($rowHeaders as $column => $pad){ |
||
465 | $line .= $isFirst ? '': Console::text('┬', 'yellow'); |
||
466 | $line .= Console::text(Console::pad('', $pad+2, '─'), 'yellow'); |
||
467 | $isFirst = false; |
||
468 | } |
||
469 | $line .= Console::text('┤', 'yellow'); |
||
470 | Console::log($line); |
||
471 | |||
472 | $isFirst = true; |
||
473 | $line = Console::text(' │', 'yellow'); |
||
474 | foreach ($rowHeaders as $column => $pad){ |
||
475 | $line .= $isFirst ? '': Console::text('│', 'yellow'); |
||
476 | $line .= Console::text(Console::pad(' '.$column. ' ', $pad +2), 'yellow'); |
||
477 | $isFirst = false; |
||
478 | } |
||
479 | $line .= Console::text('│', 'yellow'); |
||
480 | Console::log($line); |
||
481 | |||
482 | |||
483 | $isFirst = true; |
||
484 | $line = Console::text(' ├', 'yellow'); |
||
485 | foreach ($rowHeaders as $column => $pad){ |
||
486 | $line .= $isFirst ? '': Console::text('┼', 'yellow'); |
||
487 | $line .= Console::text(Console::pad('', $pad+2, '─'), 'yellow'); |
||
488 | $isFirst = false; |
||
489 | } |
||
490 | $line .= Console::text('┤', 'yellow'); |
||
491 | |||
492 | Console::log($line); |
||
493 | |||
494 | foreach (getIndex() as $key => $value){ |
||
495 | if (file_exists( __DIR__ . '/'. $value[2])) { |
||
496 | Console::log(' '. |
||
497 | Console::TableRowStart(). |
||
498 | Console::text(Console::TableRowCell($key, 5, Console::ALIGN_CENTER),'green'). |
||
499 | Console::text(Console::TableRowCell($value[0], 20),'green'). // no alignment set => default is left |
||
500 | Console::text(Console::TableRowCell($value[1], 75),'green') |
||
501 | ); |
||
502 | $i++; |
||
503 | } |
||
504 | } |
||
505 | |||
506 | $isFirst = true; |
||
507 | $line = Console::text(' └', 'yellow'); |
||
508 | foreach ($rowHeaders as $column => $pad){ |
||
509 | $line .= $isFirst ? '': Console::text('┴', 'yellow'); |
||
510 | $line .= Console::text(Console::pad('', $pad+2, '─'), 'yellow'); |
||
511 | $isFirst = false; |
||
512 | } |
||
513 | $line .= Console::text('┘', 'yellow'); |
||
514 | |||
515 | Console::log($line); |
||
516 | Console::log(''); |
||
517 | Console::log(' '. Console::text('Tips:', 'underlined', 'bold')); |
||
518 | Console::log(' '. Console::text(' - At any time you can stop this program using [') .Console::text('Ctrl+C', 'green') .Console::text('] ')); |
||
519 | Console::log(''); |
||
520 | // reset table separators to defaults |
||
521 | Console::resetDefaults(); |
||
522 | } |
||
523 | |||
524 | |||
525 | function splash() |
||
526 | { |
||
527 | // magical stuff |
||
528 | Console::newWindow(); |
||
529 | |||
530 | // get columns / lines and calculate middle |
||
531 | $lines = Console::getLines(); |
||
532 | $cols = Console::getColumns(); |
||
533 | $middle = round($lines/2); |
||
534 | |||
535 | for ($i= 1; $i <= $lines ; $i++){ |
||
536 | switch($i){ |
||
537 | case $middle -1: Console::log(Console::pad("Stand With Ukraine <3", $cols, ' ', STR_PAD_BOTH), 'yellow', 'blue'); break; |
||
538 | case $middle: Console::log(Console::pad(' ', $cols, ' ', STR_PAD_BOTH), 'yellow', 'blue'); break; |
||
539 | case $middle +1: Console::log(Console::pad(' ', $cols, ' ', STR_PAD_BOTH), 'blue', 'yellow'); break; |
||
540 | case $middle +2: Console::log(Console::pad('Slava Ukraini', $cols, ' ', STR_PAD_BOTH), 'blue', 'yellow'); break; |
||
541 | case $lines: Console::print(Console::pad(' Wait a few seconds or hint Ctrl+C', $cols , ' ', STR_PAD_LEFT), 'blue', 'yellow'); break; // no new line here |
||
542 | default: |
||
543 | if ($i > $middle) { |
||
544 | Console::log(Console::pad(' ', $cols), 'blue', 'yellow'); |
||
545 | } else { |
||
546 | Console::log(Console::pad(' ', $cols), 'yellow', 'blue'); |
||
547 | } |
||
548 | } |
||
549 | } |
||
550 | |||
551 | // magical stuff.. |
||
552 | usleep(74442); |
||
553 | |||
554 | // restore previous window |
||
555 | Console::restoreWindow(); |
||
556 | |||
557 | } |
||
558 | |||
559 | |||
560 | function askIndex() |
||
561 | { |
||
562 | $base = Console::text(' Kr157uff/mishell-demo' , 'yellow'); |
||
563 | $base .= Console::text('~$ ' , 'gray'); |
||
564 | $selectedIndex = Console::askInt($base . Console::text(' Enter desired index then press [Enter] to run sample > ', 'yellow')); |
||
565 | $index = getIndex(); |
||
566 | |||
567 | switch($selectedIndex){ |
||
568 | case 90: |
||
569 | splash(); |
||
570 | printLoader(100000); |
||
571 | splash(); |
||
572 | goIndex(); |
||
573 | break; |
||
574 | case 91: |
||
575 | splash(); |
||
576 | splash(); |
||
577 | printLoader(275000); |
||
578 | splash(); |
||
579 | goIndex(); |
||
580 | break; |
||
581 | |||
582 | case 92: |
||
583 | splash(); |
||
584 | splash(); |
||
585 | splash(); |
||
586 | printLoader(575000); |
||
587 | splash(); |
||
588 | goIndex(); |
||
589 | break; |
||
590 | |||
591 | |||
592 | case 99: |
||
593 | //Console::clear(); |
||
594 | Console::restoreWindow(); |
||
595 | break; |
||
596 | case 0: |
||
597 | Console::log(); |
||
598 | // Console::restoreWindow(); |
||
599 | exit(); |
||
0 ignored issues
–
show
|
|||
600 | break; |
||
601 | |||
602 | default: |
||
603 | |||
604 | if ($selectedIndex >= 800){ |
||
605 | splash(); |
||
606 | splash(); |
||
607 | splash(); |
||
608 | Console::clear(); |
||
609 | goIndex(); |
||
610 | break; |
||
611 | } |
||
612 | |||
613 | if (array_key_exists($selectedIndex, getIndex())) { |
||
614 | |||
615 | $title = $index[$selectedIndex][0]; |
||
616 | $fileName = $index[$selectedIndex][2]; |
||
617 | $samplefileName = $index[$selectedIndex][3]; |
||
618 | $filePath = __DIR__ . '/'. $fileName; |
||
619 | $samplefilePath = __DIR__ . '/'. $samplefileName; |
||
620 | |||
621 | Console::clear(); |
||
622 | printHeader($title, true); |
||
623 | //printSampleHeader($selectedIndex, $title); |
||
624 | |||
625 | Console::log($base . Console::text('Start running sample index [', 'yellow') . |
||
626 | Console::text( $selectedIndex, 'lightcyan') . |
||
627 | Console::text(']', 'yellow')); |
||
628 | |||
629 | Console::log($base . Console::text('Loading sample [', 'yellow') . |
||
630 | Console::text( $title, 'lightcyan') . |
||
631 | Console::text('] in file [', 'yellow') . |
||
632 | Console::text( $fileName, 'lightcyan') . |
||
633 | Console::text(']', 'yellow')); |
||
634 | |||
635 | if (file_exists($filePath)){ |
||
636 | //Console::log(); |
||
637 | include $filePath; |
||
638 | |||
639 | if (!empty($samplefileName) && file_exists($samplefilePath)){ |
||
640 | include $samplefilePath; |
||
641 | $filePath = $samplefilePath; |
||
642 | } |
||
643 | //Console::log(); |
||
644 | Console::log($base . Console::text('End running [', 'yellow') . |
||
645 | Console::text( $title, 'lightcyan') . |
||
646 | Console::text(']', 'yellow')); |
||
647 | |||
648 | $response = Console::ask($base . Console::text('Do you want to see the code that has been executed? (type y/Y to see the code) > ', 'yellow')); |
||
649 | if (strtoupper($response) === 'Y') { |
||
650 | Console::log($base . Console::text('The code in file [', 'yellow') . |
||
651 | Console::text( $fileName, 'lightcyan') . |
||
652 | Console::text('] is:', 'yellow')); |
||
653 | Console::log(); |
||
654 | |||
655 | $lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); |
||
656 | $count = 1; |
||
657 | |||
658 | Console::log(Console::pad(' ', 100, '-'), 'green'); |
||
659 | foreach($lines as $line){ |
||
660 | $codeLine = rtrim($line); |
||
661 | $isComment = substr(ltrim($codeLine), 0, 2) === '//'; |
||
662 | $isPhp = substr(ltrim($codeLine), 0, 5) === '<?php' || substr(ltrim($codeLine), 0, 2) === '?>'; |
||
663 | $color = $isPhp ? 'blue' : ($isComment ? 'green' : 'green'); |
||
664 | Console::log(' '. Console::text($codeLine, $color)); |
||
665 | $count++; |
||
666 | } |
||
667 | Console::log(Console::pad(' ', 100, '-'), 'green'); |
||
668 | Console::log(); |
||
669 | } |
||
670 | } else { |
||
671 | Console::log($base . Console::text('Error' , 'red')); |
||
672 | Console::log($base . Console::text(' => File missing [' . $fileName . ']' , 'red')); |
||
673 | } |
||
674 | |||
675 | } else { |
||
676 | Console::log($base . Console::text('Error:', 'red')); |
||
677 | Console::log($base . Console::text('=> the value you entered is not a valid index number.', 'red')); |
||
678 | askIndex(); |
||
679 | } |
||
680 | |||
681 | Console::ask($base . Console::text('Press [Enter] to go back to index > ', 'yellow')); |
||
682 | goIndex(); |
||
683 | } |
||
684 | } |
In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.