Файл: resources/views/install/index.blade.php
Строк: 305
@extends('layout_simple')
@section('title', ($isUpdate ? __('install.update') : __('install.install')) . ' Rotor')
@section('content')
<div class="container border rounded-3 shadow-sm px-3 px-md-5 my-4" style="max-width: 960px; background: var(--bs-tertiary-bg);">
<div class="py-4 py-md-5 text-center">
<a href="/"><img class="d-block mx-auto mb-3" src="/assets/img/images/logo_big.png" alt=""></a>
<h2 class="mb-1">Mobile CMS</h2>
<p class="text-secondary mb-0">{{ $isUpdate ? __('install.update') : __('install.install') }} Rotor</p>
</div>
@if ($isUpdate)
<div class="alert alert-warning fw-bold">
{{ __('install.update_mode_notice') }}
</div>
@endif
<div class="row">
<div class="col-12 mb-3">
<form method="get" class="mb-4" style="max-width: 340px;">
<label for="language" class="form-label small text-secondary">Выберите язык — Select language</label>
<div class="input-group">
<select class="form-select" name="lang" id="language">
@foreach ($languages as $language)
<?php $selected = ($language === $lang) ? ' selected' : ''; ?>
<option value="{{ $language }}"{{ $selected }}>{{ $language }}</option>
@endforeach
</select>
<button class="btn btn-outline-primary">{{ __('main.select') }}</button>
</div>
</form>
<h1>{{ __('install.step1') }}</h1>
<div class="alert alert-info">
{{__('install.debug') }}
</div>
<div class="card shadow-sm mb-3">
<div class="card-header fw-semibold">{{ __('install.env') }}</div>
<div class="card-body">
<dl class="row mb-2 small">
@foreach ($keys as $key)
<dt class="col-sm-4 col-lg-3 fw-normal text-secondary">{{ $key }}</dt>
<dd class="col-sm-8 col-lg-9 mb-1"><code>{{ trim(var_export(env($key), true), "'") }}</code></dd>
@endforeach
</dl>
<span class="text-success fst-italic small">{{ __('install.app_key') }}</span>
</div>
</div>
<div class="mb-3">
{{ __('install.requirements', [
'php' => $versions['php'],
'mysql' => $versions['mysql'],
'maria' => $versions['maria'],
'pgsql' => $versions['pgsql'],
]) }}
</div>
@php
$okBadge = '<span class="badge rounded-pill bg-success"><i class="fa-solid fa-check"></i></span>';
$failBadge = '<span class="badge rounded-pill bg-danger"><i class="fa-solid fa-xmark"></i></span>';
$warnBadge = '<span class="badge rounded-pill bg-warning text-dark"><i class="fa-solid fa-triangle-exclamation"></i></span>';
@endphp
<div class="row g-3 mb-3">
<div class="col-md-6">
<div class="card h-100 shadow-sm">
<div class="card-header fw-semibold">{{ __('install.check_requirements') }}</div>
<ul class="list-group list-group-flush">
<?php $errors['critical']['php'] = version_compare(PHP_VERSION, $versions['php']) >= 0 ?>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span>PHP <span class="text-secondary small ms-1">{{ parseVersion(PHP_VERSION) }}</span></span>
{!! $errors['critical']['php'] ? $okBadge : $failBadge !!}
</li>
<?php $errors['critical']['pdo'] = $database['pdoLoaded'] ?>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span>PDO <span class="text-secondary small ms-1">{{ $database['pdoExt'] }} {{ $database['client'] }}</span></span>
{!! $errors['critical']['pdo'] ? $okBadge : $failBadge !!}
</li>
<?php $errors['critical']['db'] = $database['connected'] ?>
@php
$dbBadge = ! $database['connected'] ? $failBadge : ($database['versionOk'] ? $okBadge : $warnBadge);
@endphp
<li class="list-group-item d-flex justify-content-between align-items-center">
<span>DB <span class="text-secondary small ms-1">{{ $database['driver'] }} {{ $database['version'] }}</span></span>
{!! $dbBadge !!}
</li>
<?php
$extensions = [
'bcmath' => ['BCMath', null],
'ctype' => ['Ctype', null],
'json' => ['Json', null],
'tokenizer' => ['Tokenizer', null],
'fileinfo' => ['Fileinfo', null],
'mbstring' => ['MbString', extension_loaded('mbstring') ? phpversion('mbstring') : null],
'openssl' => ['OpenSSL', extension_loaded('openssl') ? OPENSSL_VERSION_TEXT : null],
'xml' => ['XML', extension_loaded('xml') ? LIBXML_DOTTED_VERSION : null],
'gd' => ['GD', extension_loaded('gd') ? gd_info()['GD Version'] : null],
'curl' => ['Curl', extension_loaded('curl') ? curl_version()['version'] : null],
];
?>
@foreach ($extensions as $ext => [$label, $ver])
<?php $errors['simple'][$ext] = extension_loaded($ext) ?>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span>{{ $label }}@if ($ver)<span class="text-secondary small ms-1">{{ $ver }}</span>@endif</span>
{!! $errors['simple'][$ext] ? $okBadge : $failBadge !!}
</li>
@endforeach
<?php
$optional = [
'zip' => ['Zip', extension_loaded('zip')],
'symlink' => ['Symlink', function_exists('symlink')],
];
?>
@foreach ($optional as $key => [$label, $ok])
<?php $errors['simple'][$key] = $ok ?>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span>{{ $label }}@unless ($ok)<span class="text-secondary small ms-1">{{ __('install.modules_required') }}</span>@endunless</span>
{!! $ok ? $okBadge : $warnBadge !!}
</li>
@endforeach
</ul>
<div class="card-footer fst-italic small text-secondary">{{ __('install.ffmpeg') }}</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 shadow-sm">
<div class="card-header fw-semibold">{{ __('install.chmod_rights') }}</div>
<ul class="list-group list-group-flush">
@foreach ($dirs as $dir)
<?php $chmod = decoct(fileperms($dir)) % 1000; ?>
<?php $errors['chmod'][$dir] = is_writable($dir); ?>
<li class="list-group-item d-flex justify-content-between align-items-center">
<span class="text-break small">{{ str_replace(base_path(), '', $dir) }}</span>
<span class="d-flex align-items-center gap-2">
<span class="text-secondary small font-monospace">{{ $chmod }}</span>
{!! $errors['chmod'][$dir] ? $okBadge : $failBadge !!}
</span>
</li>
@endforeach
</ul>
</div>
</div>
</div>
@if ($database['pdoLoaded'] && in_array($database['driver'], ['mysql', 'mariadb']) && ! $database['mysqlnd'])
<div class="alert alert-warning">{{ __('install.mysqlnd_notice') }}</div>
@endif
@unless ($database['connected'])
<div class="alert alert-danger">{{ __('install.db_connection_failed') }}: {{ $database['error'] }}</div>
@endunless
@if (config('app.url') !== url('/'))
<div class="alert alert-danger">
{{ __('install.requirements_url', ['env_url' => config('app.url'), 'current_url' => url('/')]) }}
</div>
@endif
<p class="text-secondary small">
{{ __('install.chmod_views') }}<br>
{{ __('install.chmod') }}<br>
{{ __('install.errors') }}
</p>
@if (! in_array(false, $errors['critical'], true) && ! in_array(false, $errors['chmod'], true))
<div class="alert alert-success d-flex align-items-center gap-2">
<i class="fa-solid fa-circle-check"></i>
<span>{{ __('install.continue') }}</span>
</div>
@if (! in_array(false, $errors['simple'], true))
<p class="text-success">{{ __('install.requirements_pass') }}</p>
@else
<div class="alert alert-warning">
{{ __('install.requirements_warning') }}<br>
{{ __('install.requirements_not_pass') }}<br>
{{ __('install.continue_restrict') }}
</div>
@endif
<a class="btn btn-lg {{ $isUpdate ? 'btn-warning' : 'btn-primary' }}" href="/install/status?lang={{ $lang }}">
{{ __('install.check_status') }}
<span class="badge {{ $isUpdate ? 'bg-dark' : 'bg-light text-dark' }} ms-1">{{ $isUpdate ? __('install.update') : __('install.install') }}</span>
</a>
@else
<div class="alert alert-danger d-flex align-items-center gap-2">
<i class="fa-solid fa-circle-xmark"></i>
<span>{{ __('install.requirements_failed') }} {{ __('install.resolve_errors') }}</span>
</div>
@endif
</div>
</div>
<footer class="my-5 pt-5 text-muted text-center text-small">
<p class="mb-1">© 2005-{{ date('Y') }} VISAVI.NET</p>
</footer>
</div>
@stop