Completed
Push — master ( 3d3760...b0d42a )
by John
30s queued 13s
created

Install::initWelcone()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace App\Console\Commands\Install;
4
5
use Illuminate\Console\Command;
6
use App\Models\Eloquent\Group;
7
use App\Models\Eloquent\User;
8
use Hash;
9
use Str;
10
use Exception;
11
12
class Install extends Command
13
{
14
    /**
15
     * The name and signature of the console command.
16
     *
17
     * @var string
18
     */
19
    protected $signature='install';
20
21
    /**
22
     * The console command description.
23
     *
24
     * @var string
25
     */
26
    protected $description='Install NOJ';
27
28
    public static $license=1630315446;
29
30
    public static $logoGeneral=<<< LOGOG
31
          ___
32
          \\\\||
33
         ,'_,-\
34
         ;'____\
35
         || =\=|
36
         ||  - |  Haec sententia nullam significationem habet, sed Latina pulchra est.
37
     ,---'._--''-,,---------.--.----_,
38
    / `-._- _--/,,|  ___,,--'--'._<
39
   /-._,  `-.__;,,|'
40
  /   ;\      / , ;
41
 /  ,' | _ - ',/, ;
42
(  (   |     /, ,,;
43
 \  \  |     ',,/,;
44
  \  \ |    /, / ,;
45
 (| ,^.|   / ,, ,/;
46
  `-'./ `-._,, ,/,;
47
       ⧫-._ `-._,,;
48
       |/,,`-._ `-.
49
       |, ,;, ,`-._\
50
╔═══════════════════════════════════════════════════════════════════════════════════════════════════════╗
51
║ ███╗   ██╗ ██████╗      ██╗    ██╗███╗   ██╗███████╗████████╗ █████╗ ██╗     ██╗     ███████╗██████╗  ║
52
║ ████╗  ██║██╔═══██╗     ██║    ██║████╗  ██║██╔════╝╚══██╔══╝██╔══██╗██║     ██║     ██╔════╝██╔══██╗ ║
53
║ ██╔██╗ ██║██║   ██║     ██║    ██║██╔██╗ ██║███████╗   ██║   ███████║██║     ██║     █████╗  ██████╔╝ ║
54
║ ██║╚██╗██║██║   ██║██   ██║    ██║██║╚██╗██║╚════██║   ██║   ██╔══██║██║     ██║     ██╔══╝  ██╔══██╗ ║
55
║ ██║ ╚████║╚██████╔╝╚█████╔╝    ██║██║ ╚████║███████║   ██║   ██║  ██║███████╗███████╗███████╗██║  ██║ ║
56
║ ╚═╝  ╚═══╝ ╚═════╝  ╚════╝     ╚═╝╚═╝  ╚═══╝╚══════╝   ╚═╝   ╚═╝  ╚═╝╚══════╝╚══════╝╚══════╝╚═╝  ╚═╝ ║
57
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════╝
58
LOGOG;
59
60
    /**
61
     * Create a new command instance.
62
     *
63
     * @return void
64
     */
65
    public function __construct()
66
    {
67
        parent::__construct();
68
    }
69
70
    /**
71
     * Execute the console command.
72
     *
73
     * @return mixed
74
     */
75
    public function handle()
76
    {
77
        $this->initWelcone();
78
        $this->initSystemCheck();
79
        return;
80
        if ($this->confirm('Do you wish to continue?')) {
0 ignored issues
show
Unused Code introduced by
IfNode is not reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
81
            if(!$this->acceptLicense()){
82
                return;
83
            }
84
            if($this->createFrontAdminUser()){
85
                $this->createFrontAdminGroup();
86
            }
87
            $this->installBabelExtensionNOJ();
88
            $this->importExampleProblem();
89
            $this->importBackAdminMenuPermissionsRoles();
90
            $this->createBackAdminUser();
91
        }
92
    }
93
94
    protected function initWelcone()
95
    {
96
        $this->line('<fg=cyan>'.static::$logoGeneral.'</>');
97
        $this->line(sprintf('NOJ <comment>version</comment> <info>%s</info>', version()));
98
        $this->comment('');
99
        sleep(1);
100
    }
101
102
    protected function initSystemCheck() {
103
        $this->info('All system check completed with 0 warning 0 error.');
104
        $this->comment('');
105
        sleep(1);
106
    }
107
108
    protected function acceptLicense() {
109
        $this->warn('NOJ open-source license has been updated, please accept it first:');
110
        $this->comment('');
111
        sleep(1);
112
        $this->line(file_get_contents(base_path('LICENSE')));
113
        $this->warn('Notice that above license is actually a copy from https://github.com/ZsgsDesign/NOJ and remote license is the one that takes effect.');
114
        $this->comment('');
115
        sleep(1);
116
        return $this->confirm('Do you agree with the license?');
117
    }
118
119
    protected function createFrontAdminUser() {
120
        $this->line('Creating frontstage admin user...');
121
        $this->comment('');
122
        $shallCreate = true;
123
        if (User::count()) {
124
            $shallCreate = $this->confirm('Detected existing frontstage user, do you really want to create frontstage admin?');
125
            $this->comment('');
126
        }
127
        if (!$shallCreate) {
128
            return false;
129
        }
130
        while(true) {
131
            try {
132
                $createdUser = $this->createFrontUser();
0 ignored issues
show
Unused Code introduced by
The assignment to $createdUser is dead and can be removed.
Loading history...
133
                break;
134
            } catch(Exception $e) {
135
                $this->line("\n  <bg=red;fg=white> Exception </> : <fg=yellow>Error occured while creating admin user.</>\n");
136
                continue;
137
            }
138
        }
139
        return true;
140
    }
141
142
    private function createFrontUser() {
143
        $username = $this->ask('Please choose a username:', 'admin');
144
        $email = $this->ask('Please choose a email address:', '[email protected]');
145
        $password = Hash::make(Str::random(8));
146
        $createdUser=User::create([
147
            'name' => $username,
148
            'email' => $email,
149
            'password' => $password,
150
            'avatar' => '/static/img/avatar/noj.png',
151
        ]);
152
        $createdUser->markEmailAsVerified();
153
        return $createdUser;
154
    }
155
156
    protected function createFrontAdminGroup() {
157
158
    }
159
160
    protected function installBabelExtensionNOJ() {
161
162
    }
163
164
    protected function importExampleProblem() {
165
166
    }
167
168
    protected function importBackAdminMenuPermissionsRoles() {
169
170
    }
171
172
    protected function createBackAdminUser() {
173
174
    }
175
}
176