Вход Регистрация
Файл: app/Http/Controllers/InstallController.php
Строк: 190
<?php

declare(strict_types=1);

namespace 
AppHttpControllers;

use 
AppClassesValidator;
use 
AppModelsNews;
use 
AppModelsSetting;
use 
AppModelsUser;
use 
IlluminateHttpRedirectResponse;
use 
IlluminateHttpRequest;
use 
IlluminateSupportFacadesArtisan;
use 
IlluminateSupportFacadesLang;
use 
IlluminateSupportFacadesSchema;
use 
IlluminateViewView;

class 
InstallController extends Controller
{
    
/**
     * Конструктор
     */
    
public function __construct(Request $request)
    {
        
$lang $request->input('lang''ru');

        
Lang::setLocale($lang);

        
view()->share('lang'$lang);
    }

    
/**
     * Главная страница
     */
    
public function index(): View
    
{
        
$keys = [
            
'APP_ENV',
            
'APP_DEBUG',
            
'DB_CONNECTION',
            
'DB_HOST',
            
'DB_PORT',
            
'DB_DATABASE',
            
'DB_USERNAME',
            
'APP_URL',
            
'APP_EMAIL',
            
'APP_ADMIN',
        ];

        
$versions = [
            
'php'   => '8.1.0',
            
'mysql' => '5.7.8',
            
'maria' => '10.2.7',
            
'pgsql' => '9.2',
        ];

        
$storage glob(storage_path('{*,*/*,*/*/*}'), GLOB_BRACE GLOB_ONLYDIR);
        
$uploads glob(public_path('uploads/*'), GLOB_ONLYDIR);
        
$dirs = [public_path('assets/modules'), base_path('bootstrap/cache')];

        
$dirs array_merge($storage$uploads$dirs);
        
$languages array_map('basename'glob(resource_path('lang/*'), GLOB_ONLYDIR));

        return 
view('install/index'compact('keys''languages''versions''dirs'));
    }

    
/**
     * Проверка статуса
     */
    
public function status(): View
    
{
        if (! 
Schema::hasTable('migrations')) {
            
Artisan::call('migrate:install');
        }

        
Artisan::call('migrate:status');
        
$output Artisan::output();

        return 
view('install/status'compact('output'));
    }

    
/**
     * Выполнение миграций
     */
    
public function migrate(): View
    
{
        
Artisan::call('migrate', ['--force' => true]);
        
$output Artisan::output();

        if (! 
setting('app_installed')) {
            
Artisan::call('key:generate', ['--force' => true]);
        }

        
Artisan::call('cache:clear');
        
Artisan::call('route:clear');
        
Artisan::call('config:clear');

        return 
view('install/migrate'compact('output'));
    }

    
/**
     * Заполнение БД
     */
    
public function seed(): View
    
{
        
Artisan::call('db:seed', ['--force' => true]);
        
$output Artisan::output();

        
Artisan::call('cache:clear');
        
Artisan::call('route:clear');
        
Artisan::call('config:clear');

        return 
view('install/seed'compact('output'));
    }

    
/**
     * Создание администратора
     *
     *
     * @return View|RedirectResponse
     */
    
public function account(Request $requestValidator $validator)
    {
        
$lang $request->input('lang''ru');
        
$login $request->input('login');
        
$password $request->input('password');
        
$password2 $request->input('password2');
        
$email strtolower((string) $request->input('email'));

        if (
$request->isMethod('post')) {
            
$validator->regex($login'|^[a-z0-9-]+$|i', ['login' => __('validator.login')])
                ->
regex(utfSubstr($login01), '|^[a-z0-9]+$|i', ['login' => __('users.login_begin_requirements')])
                ->
email($email, ['email' => __('validator.email')])
                ->
length($login320, ['login' => __('users.login_length_requirements')])
                ->
length($password620, ['password' => __('users.password_length_requirements')])
                ->
equal($password$password2, ['password2' => __('users.passwords_different')])
                ->
false(ctype_digit($login), ['login' => __('users.field_characters_requirements')])
                ->
false(ctype_digit($password), ['password' => __('users.field_characters_requirements')])
                ->
false(substr_count($login'-') > 2, ['login' => __('users.login_hyphens_requirements')]);

            if (
$validator->isValid()) {
                
// Проверка логина на существование
                
$checkLogin User::query()->where('login'$login)->exists();
                
$validator->false($checkLogin, ['login' => __('users.login_already_exists')]);

                
// Проверка email на существование
                
$checkMail User::query()->where('email'$email)->exists();
                
$validator->false($checkMail, ['email' => __('users.email_already_exists')]);
            }

            if (
$validator->isValid()) {
                
/** @var User $user */
                
$user User::query()->create([
                    
'login'      => $login,
                    
'password'   => password_hash($passwordPASSWORD_BCRYPT),
                    
'email'      => $email,
                    
'level'      => User::BOSS,
                    
'gender'     => User::MALE,
                    
'themes'     => 'default',
                    
'point'      => 500,
                    
'money'      => 100000,
                    
'status'     => 'Boss',
                    
'language'   => $lang,
                    
'created_at' => SITETIME,
                ]);

                
// ------------- Авторизация -----------//
                
User::auth($login$password);

                
// -------------- Приват ---------------//
                
$text __('install.text_message', ['login' => $login]);
                
$user->sendMessage(null$text);

                
// -------------- Новость ---------------//
                
$textnews __('install.text_news');

                
News::query()->create([
                    
'title'      => __('install.welcome'),
                    
'text'       => $textnews,
                    
'user_id'    => $user->id,
                    
'created_at' => SITETIME,
                ]);

                
clearCache(['statNews''lastNews''statNewsDate''NewsFeed']);

                return 
redirect('/install/finish');
            }

            
setInput($request->all());
            
setFlash('danger'$validator->getErrors());
        }

        return 
view('install/account'compact('login''email'));
    }

    
/**
     * Завершение установки
     */
    
public function finish(): View
    
{
        
// -------------- Установка -------------//
        
Setting::query()
            ->
where('name''app_installed')
            ->
update([
                
'value' => 1,
            ]);

        
clearCache('settings');

        return 
view('install/finish');
    }

    
/**
     * Parse PHP modules
     */
    
private static function parsePhpModules(): array
    {
        
ob_start();
        
phpinfo(INFO_MODULES);
        
$s ob_get_clean();
        
$s strip_tags($s'<h2><th><td>');
        
$s preg_replace('/<th[^>]*>([^<]+)</th>/''<info>\1</info>'$s);
        
$s preg_replace('/<td[^>]*>([^<]+)</td>/''<info>\1</info>'$s);
        
$vTmp preg_split('/(<h2[^>]*>[^<]+</h2>)/'$s, -1PREG_SPLIT_DELIM_CAPTURE);
        
$vModules = [];
        
$iMax count($vTmp);

        for (
$i 1$i $iMax$i++) {
            if (
preg_match('/<h2[^>]*>([^<]+)</h2>/'$vTmp[$i], $vMat)) {
                
$vName trim($vMat[1]);
                
$vTmp2 explode("n"$vTmp[$i 1]);
                foreach (
$vTmp2 as $vOne) {
                    
$vPat '<info>([^<]+)</info>';
                    
$vPat3 "/$vPats*$vPats*$vPat/";
                    
$vPat2 "/$vPats*$vPat/";
                    if (
preg_match($vPat3$vOne$vMat)) {
                        
$vModules[$vName][trim($vMat[1])] = [trim($vMat[2]), trim($vMat[3])];
                    } elseif (
preg_match($vPat2$vOne$vMat)) {
                        
$vModules[$vName][trim($vMat[1])] = trim($vMat[2]);
                    }
                }
            }
        }

        return 
$vModules;
    }

    
/**
     * Get PHP module setting
     */
    
public static function getModuleSetting(string $pModuleName, array $pSettings): string
    
{
        
$vModules self::parsePhpModules();

        foreach (
$pSettings as $pSetting) {
            if (isset(
$vModules[$pModuleName][$pSetting])) {
                return 
$vModules[$pModuleName][$pSetting];
            }
        }

        return 
__('main.undefined');
    }
}
Онлайн: 5
Реклама