Issues (37)

demo/index.php (2 issues)

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
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
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
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
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
}