classify admin

This commit is contained in:
Husanjonazamov
2026-02-24 12:52:01 +05:00
commit e0f1989655
769 changed files with 1263008 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
<button
type="{{ $attributes->get('type', 'button') }}"
class="bg-{{ $attributes->get('color', 'blue') }}-500 hover:bg-{{ $attributes->get('color', 'blue') }}-700 text-white font-bold py-2 px-4 rounded inline-flex items-center"
>
{{ $slot }}
</button>

View File

@@ -0,0 +1,7 @@
<svg class="w-6 h-6 text-red-600" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path
fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"
clip-rule="evenodd"
/>
</svg>

After

Width:  |  Height:  |  Size: 425 B

View File

@@ -0,0 +1,9 @@
<input
class="appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
id="{{ $attributes->get('id') }}"
type="{{ $attributes->get('type', 'text') }}"
name="{{ $attributes->get('name') }}"
value="{{ $attributes->get('value') }}"
{{ $attributes->merge(['required' => $attributes->get('required', false) ? 'required' : null ]) }}
aria-label=""
>

View File

@@ -0,0 +1,9 @@
<label
for="{{ $attributes->get('for') }}"
class="block font-medium leading-5 text-gray-700 pb-2"
>
{{ $slot }}
@if($attributes->get('required', false))
<span class="text-red-400">*</span>
@endif
</label>

View File

@@ -0,0 +1,6 @@
<a
href="{{ $attributes->get('href') }}"
class="bg-{{ $attributes->get('color', 'blue') }}-500 hover:bg-{{ $attributes->get('color', 'blue') }}-700 text-white font-bold py-2 px-4 rounded inline-flex items-center"
>
{{ $slot }}
</a>

View File

@@ -0,0 +1,3 @@
<svg class="w-6 h-6 text-green-600" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg>

After

Width:  |  Height:  |  Size: 313 B

View File

@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>Installation - {{ config('app.name', 'Laravel') }}</title>
<link rel="shortcut icon" href="{{ config('installer.icon') }}">
<link href="{{ asset('vendor/installer/styles.css') }}" rel="stylesheet">
</head>
<body class="min-h-screen h-full w-full bg-cover bg-no-repeat bg-center flex" style="background-image: url('{{ config('installer.background') }}');">
<div class="py-12 sm:px-12 w-full max-w-5xl m-auto">
<div class="w-full bg-white shadow sm:rounded-lg">
<div class="px-4 py-8 border-b border-gray-200 sm:px-6">
<div class="flex justify-center items-center">
<img alt="App logo" class="h-12" src="{{ config('installer.icon') }}">
<h2 class="pl-6 uppercase font-medium text-2xl text-gray-800">{{ config('app.name', 'Laravel') }} Installation</h2>
</div>
</div>
<div class="px-4 py-5 sm:px-6 w-full">
@yield('step')
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,96 @@
@extends('installer::install')
@section('step')
<p class="pb-3 text-gray-800">
Below you should enter your database connection details. If you're not sure about these, contact your hosting provider.
</p>
@if($errors->any())
@foreach($errors->all() as $error)
<div class="bg-red-100 border-l-4 border-red-500 p-4 mb-3">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-red-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"/>
</svg>
</div>
<div class="ml-3">
<p class="text-sm leading-5 text-red-700">
{!! $error !!}
</p>
</div>
</div>
</div>
@endforeach
@endif
<form method="post" action="{{ route('install.database') }}">
@csrf
<div class="mb-3">
<x-installer::label for="database_hostname" :required="true">Database host</x-installer::label>
<x-installer::input
id="database_hostname"
name="database_hostname"
value="{{ old('database_hostname', config('database.connections.mysql.host')) }}"
:required="true"
/>
</div>
<div class="mb-3">
<x-installer::label for="database_port" :required="true">Database port</x-installer::label>
<x-installer::input
id="database_port"
name="database_port"
value="{{ old('database_port', config('database.connections.mysql.port')) }}"
:required="true"
/>
</div>
<div class="mb-3">
<x-installer::label for="database_name" :required="true">Database name</x-installer::label>
<x-installer::input
id="database_name"
name="database_name"
value="{{ old('database_name', config('database.connections.mysql.database', 'laravel')) }}"
:required="true"
/>
</div>
<div class="mb-3">
<x-installer::label for="database_username" :required="true">Database user</x-installer::label>
<x-installer::input
id="database_username"
name="database_username"
value="{{ old('database_username', config('database.connections.mysql.username', 'root')) }}"
:required="true"
/>
</div>
<div class="mb-3">
<x-installer::label for="database_password">Database password</x-installer::label>
<x-installer::input
id="database_password"
name="database_password"
type="password"
value="{{ old('database_password') }}"
/>
</div>
<div class="mb-3">
<x-installer::label for="database_prefix">Database prefix</x-installer::label>
<x-installer::input
id="database_prefix"
name="database_prefix"
value="{{ old('database_prefix') }}"
/>
</div>
<div class="flex justify-end">
<x-installer::button type="submit">
Next step
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/>
</svg>
</x-installer::button>
</div>
</form>
<div>
<h6 style="color:red">If you are getting error in this Step, Check this below Solutions first</h6>
<small>
<span>1. Check if your Database Host , Port , Name , User & Password is correct.</span><br>
<span>2. Install nd_pdo_mysql extension in your server and then Try again.</span>
</small>
</div>
@endsection

View File

@@ -0,0 +1,57 @@
@extends('installer::install')
@section('step')
<div class="bg-green-100 border-l-4 border-green-500 p-4 mb-6">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-green-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg>
</div>
<div class="ml-3">
<p class="text-sm leading-5 text-green-700">
The application has been installed successfully
</p>
</div>
</div>
</div>
<div class="grid grid-cols-2 gap-4 mb-6">
<div>
<p class="pb-3 text-gray-800">
<b>Website address</b>
<br>
Your website is located at this URL
</p>
<p class="pb-3">
<a class="text-blue-500 hover:underline" href="{{ $base }}">{{ $base }}</a>
</p>
</div>
@if(config('installer.admin_area'))
<div>
<p class="pb-3 text-gray-800">
<b>Administration Area</b>
<br>
Use the following link to log into the administration area:
</p>
<p class="pb-3">
<a class="text-blue-500 hover:underline" href="{{ $login }}">{{ $login }}</a>
</p>
@if(config('installer.admin_area.user'))
<p class="pb-3 text-gray-800">
Email: <b>{{ config('installer.admin_area.user.email') }}</b>
<br>
Password: <b>{{ config('installer.admin_area.user.password') }}</b>
</p>
@endif
</div>
@endif
</div>
@if(config('installer.support_url'))
<p class="pb-3 text-gray-800">
<b>Support and questions</b>
<br>
Need more help?
<a class="text-blue-500 hover:underline" href="{{ config('installer.support_url') }}" target="_blank">Contact support</a>.
</p>
@endif
@endsection

View File

@@ -0,0 +1,41 @@
@extends('installer::install')
@section('step')
<p class="pb-3 text-gray-800">Verifying write and read permissions on folders</p>
<div class="flex flex-wrap border border-gray-200 rounded-md mb-4 divide-y divider-gray-200">
@foreach(config('installer.folders') as $check)
<div class="w-full px-4 py-2 text-gray-800">
{{ base_path() }}{{ str_replace('/', DIRECTORY_SEPARATOR, $check['name']) }}
<div class="float-right">
@if(@File::chmod($check['check']['value']) < 755)
<x-installer::error-check-icon/>
@else
<x-installer::success-check-icon/>
@endif
</div>
</div>
@endforeach
</div>
<div class="flex justify-end">
@if($result)
<x-installer::link :href="route('install.purchase-code.index')">
Next step
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/>
</svg>
</x-installer::link>
@else
<x-installer::link :href="route('install.server')" color="red">
Reload
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path
fill-rule="evenodd"
d="M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z"
clip-rule="evenodd"
/>
</svg>
</x-installer::link>
@endif
</div>
@endsection

View File

@@ -0,0 +1,70 @@
@extends('installer::install')
@section('step')
@if($errors->any())
@foreach($errors->all() as $error)
<div class="bg-red-100 border-l-4 border-red-500 p-4 mb-3">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-red-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd" />
</svg>
</div>
<div class="ml-3">
<p class="text-sm leading-5 text-red-700">
{!! $error !!}
</p>
</div>
</div>
</div>
@endforeach
@else
<div class="bg-green-100 border-l-4 border-green-500 p-4 mb-3">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-green-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg>
</div>
<div class="ml-3">
<p class="text-sm leading-5 text-green-700">
Migrations loaded successfully
</p>
</div>
</div>
</div>
@endif
<p class="pb-3 text-gray-800">The encryption keys of the application and the api connection must be generated.</p>
<p class="pb-3 text-gray-800">The storage link will also be generated.</p>
<p class="pb-3 text-gray-800">Enter the base url of the application.</p>
<form method="post" action="{{ route('install.keys') }}">
@csrf
<div class="mb-3">
<x-installer::label for="app_url" :required="true">App url</x-installer::label>
<x-installer::input
id="app_url"
name="app_url"
type="url"
value="{{ old('app_url', url('/')) }}"
:required="true"
/>
</div>
<div class="flex justify-end">
@if($errors->any())
<x-installer::button type="submit" color="red">
Try again
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</x-installer::button>
@else
<x-installer::button type="submit">
Next step
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</x-installer::button>
@endif
</div>
</form>
@endsection

View File

@@ -0,0 +1,59 @@
@extends('installer::install')
@section('step')
@if($errors->any())
@foreach($errors->all() as $error)
<div class="bg-red-100 border-l-4 border-red-500 p-4 mb-3">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-red-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd" />
</svg>
</div>
<div class="ml-3">
<p class="text-sm leading-5 text-red-700">
{!! $error !!}
</p>
</div>
</div>
</div>
@endforeach
@else
<div class="bg-green-100 border-l-4 border-green-500 p-4 mb-3">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-green-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg>
</div>
<div class="ml-3">
<p class="text-sm leading-5 text-green-700">
Database connection successful
</p>
</div>
</div>
</div>
@endif
<p class="pb-3 text-gray-800">The installation of the database and the loading of all the basic data of the application will be carried out.</p>
<p class="pb-3 text-gray-800">This may take a while, please wait and don't close the page.</p>
<form method="post" action="{{ route('install.migrations') }}">
@csrf
<div class="flex justify-end">
@if($errors->any())
<x-installer::button type="submit" color="red">
Try again
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</x-installer::button>
@else
<x-installer::button type="submit">
Next step
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</x-installer::button>
@endif
</div>
</form>
@endsection

View File

@@ -0,0 +1,39 @@
@extends('installer::install')
@section('step')
<p class="pb-3 text-gray-800">
Below you should enter your purchase code
</p>
@if(isset($error))
<div class="bg-red-100 border-l-4 border-red-500 p-4 mb-3">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-red-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"/>
</svg>
</div>
<div class="ml-3">
<p class="text-sm leading-5 text-red-700">
{!! $error !!}
</p>
</div>
</div>
</div>
@endif
<form method="post" action="{{ route('install.purchase-code.post') }}">
@csrf
<div class="mb-3">
<label for="purchase_code" class="block font-medium leading-5 text-gray-700 pb-2">Purchase Code <span class="text-red-400">*</span></label>
<input class="appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
id="purchase_code" type="text" name="purchase_code" value="{{ $values['purchase_code'] ?? '' }}" required>
</div>
<div class="flex justify-end">
<button type="submit" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded inline-flex items-center">
Next step
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/>
</svg>
</button>
</div>
</form>
@endsection

View File

@@ -0,0 +1,43 @@
@extends('installer::install')
@section('step')
<p class="pb-3 text-gray-800">Checking the server requirements</p>
<div class="flex flex-wrap border border-gray-200 text-gray-800 rounded-md mb-4 divide-y divider-gray-200">
@foreach(config('installer.server') as $check)
<div class="w-full px-4 py-2 text-gray-800">
{{ $check['name'] }}
@if(in_array('version', $check, true))
<small>($check['version'])</small>
@endif
<div class="float-right">
@if(($check['check']['type'] === 'php' && PHP_VERSION_ID < $check['check']['value']) || ($check['check']['type'] === 'extension' && !extension_loaded($check['check']['value'])))
<x-installer::error-check-icon />
@else
<x-installer::success-check-icon />
@endif
</div>
</div>
@endforeach
</div>
<div class="flex justify-end">
@if($result)
<x-installer::link :href="route('install.folders')">
Next step
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</x-installer::link>
@else
<x-installer::link :href="route('install.server')" color="red">
Reload
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path
fill-rule="evenodd"
d="M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z"
clip-rule="evenodd"
/>
</svg>
</x-installer::link>
@endif
</div>
@endsection

View File

@@ -0,0 +1,49 @@
@extends('installer::install')
@section('step')
<p class="pb-3 text-gray-800">Verifying php functions are enable/disable</p>
<div class="flex flex-wrap border border-gray-200 rounded-md mb-4 divide-y divider-gray-200">
<div class="w-full px-4 py-2 text-gray-800">
Enable php Symlink funcion
<div class="float-right">
@if($result)
<x-installer::success-check-icon />
@else
<x-installer::error-check-icon />
@endif
</div>
</div>
<div class="w-full px-4 py-2 text-gray-800">
Disable Open BaseDir funcion
<div class="float-right">
@if($baseDir)
<x-installer::success-check-icon />
@else
<x-installer::error-check-icon />
@endif
</div>
</div>
</div>
<div class="flex justify-end">
@if($result && $baseDir)
<x-installer::link :href="route('install.database')">
Next step
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</x-installer::link>
@else
<x-installer::link :href="route('install.server')" color="red">
Reload
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path
fill-rule="evenodd"
d="M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z"
clip-rule="evenodd"
/>
</svg>
</x-installer::link>
@endif
</div>
@endsection

View File

@@ -0,0 +1,42 @@
@extends('installer::install')
@section('step')
<p class="pb-2 text-gray-800">
Welcome to the installation wizard.
</p>
<p class="pb-3 text-gray-800">
Before getting started, we need some information on the database.
You will need to know the following items before proceeding.
</p>
<div class="px-3 pb-3 text-gray-800">
<ol class="list-decimal list-inside">
<li>App url</li>
<li>Database host</li>
<li>Database port</li>
<li>Database name</li>
<li>Database username</li>
<li>Database password</li>
</ol>
</div>
<p class="pb-3 text-gray-800">
Most likely these items were supplied to you by your Web Host.
If you dont have this information, then you will need to contact them before you can continue.
</p>
<p class="pb-3 text-gray-800">
Installer will insert this information inside a configuration file so your site can communicate with your database.
</p>
@if(config('installer.support_url'))
<p class="pb-4 text-gray-800">
Need more help?
<a class="text-blue-500 hover:underline" href="{{ config('installer.support_url') }}" target="_blank">Contact support</a>.
</p>
@endif
<div class="flex justify-end">
<x-installer::link :href="route('install.server')">
Next step
<svg class="fill-current w-5 h-5 ml-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</x-installer::link>
</div>
@endsection

View File

@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{config('l5-swagger.documentations.'.$documentation.'.api.title')}}</title>
<link rel="stylesheet" type="text/css" href="{{ l5_swagger_asset($documentation, 'swagger-ui.css') }}">
<link rel="icon" type="image/png" href="{{ l5_swagger_asset($documentation, 'favicon-32x32.png') }}" sizes="32x32"/>
<link rel="icon" type="image/png" href="{{ l5_swagger_asset($documentation, 'favicon-16x16.png') }}" sizes="16x16"/>
<style>
html
{
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after
{
box-sizing: inherit;
}
body {
margin:0;
background: #fafafa;
}
</style>
@if(config('l5-swagger.defaults.ui.display.dark_mode'))
<style>
body#dark-mode,
#dark-mode .scheme-container {
background: #1b1b1b;
}
#dark-mode .scheme-container,
#dark-mode .opblock .opblock-section-header{
box-shadow: 0 1px 2px 0 rgba(255, 255, 255, 0.15);
}
#dark-mode .operation-filter-input,
#dark-mode .dialog-ux .modal-ux,
#dark-mode input[type=email],
#dark-mode input[type=file],
#dark-mode input[type=password],
#dark-mode input[type=search],
#dark-mode input[type=text],
#dark-mode textarea{
background: #343434;
color: #e7e7e7;
}
#dark-mode .title,
#dark-mode li,
#dark-mode p,
#dark-mode table,
#dark-mode label,
#dark-mode .opblock-tag,
#dark-mode .opblock .opblock-summary-operation-id,
#dark-mode .opblock .opblock-summary-path,
#dark-mode .opblock .opblock-summary-path__deprecated,
#dark-mode h1,
#dark-mode h2,
#dark-mode h3,
#dark-mode h4,
#dark-mode h5,
#dark-mode .btn,
#dark-mode .tab li,
#dark-mode .parameter__name,
#dark-mode .parameter__type,
#dark-mode .prop-format,
#dark-mode .loading-container .loading:after{
color: #e7e7e7;
}
#dark-mode .opblock-description-wrapper p,
#dark-mode .opblock-external-docs-wrapper p,
#dark-mode .opblock-title_normal p,
#dark-mode .response-col_status,
#dark-mode table thead tr td,
#dark-mode table thead tr th,
#dark-mode .response-col_links,
#dark-mode .swagger-ui{
color: wheat;
}
#dark-mode .parameter__extension,
#dark-mode .parameter__in,
#dark-mode .model-title{
color: #949494;
}
#dark-mode table thead tr td,
#dark-mode table thead tr th{
border-color: rgba(120,120,120,.2);
}
#dark-mode .opblock .opblock-section-header{
background: transparent;
}
#dark-mode .opblock.opblock-post{
background: rgba(73,204,144,.25);
}
#dark-mode .opblock.opblock-get{
background: rgba(97,175,254,.25);
}
#dark-mode .opblock.opblock-put{
background: rgba(252,161,48,.25);
}
#dark-mode .opblock.opblock-delete{
background: rgba(249,62,62,.25);
}
#dark-mode .loading-container .loading:before{
border-color: rgba(255,255,255,10%);
border-top-color: rgba(255,255,255,.6);
}
#dark-mode svg:not(:root){
fill: #e7e7e7;
}
#dark-mode .opblock-summary-description {
color: #fafafa;
}
</style>
@endif
</head>
<body @if(config('l5-swagger.defaults.ui.display.dark_mode')) id="dark-mode" @endif>
<div id="swagger-ui"></div>
<script src="{{ l5_swagger_asset($documentation, 'swagger-ui-bundle.js') }}"></script>
<script src="{{ l5_swagger_asset($documentation, 'swagger-ui-standalone-preset.js') }}"></script>
<script>
window.onload = function() {
// Build a system
const ui = SwaggerUIBundle({
dom_id: '#swagger-ui',
url: "{!! $urlToDocs !!}",
operationsSorter: {!! isset($operationsSorter) ? '"' . $operationsSorter . '"' : 'null' !!},
configUrl: {!! isset($configUrl) ? '"' . $configUrl . '"' : 'null' !!},
validatorUrl: {!! isset($validatorUrl) ? '"' . $validatorUrl . '"' : 'null' !!},
oauth2RedirectUrl: "{{ route('l5-swagger.'.$documentation.'.oauth2_callback', [], $useAbsolutePath) }}",
requestInterceptor: function(request) {
request.headers['X-CSRF-TOKEN'] = '{{ csrf_token() }}';
return request;
},
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout",
docExpansion : "{!! config('l5-swagger.defaults.ui.display.doc_expansion', 'none') !!}",
deepLinking: true,
filter: {!! config('l5-swagger.defaults.ui.display.filter') ? 'true' : 'false' !!},
persistAuthorization: "{!! config('l5-swagger.defaults.ui.authorization.persist_authorization') ? 'true' : 'false' !!}",
})
window.ui = ui
@if(in_array('oauth2', array_column(config('l5-swagger.defaults.securityDefinitions.securitySchemes'), 'type')))
ui.initOAuth({
usePkceWithAuthorizationCodeGrant: "{!! (bool)config('l5-swagger.defaults.ui.authorization.oauth2.use_pkce_with_authorization_code_grant') !!}"
})
@endif
}
</script>
</body>
</html>

View File

@@ -0,0 +1,337 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex, nofollow">
<title> {{ __('log viewer') }}</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/dataTables.bootstrap4.min.css">
<style>
body {
padding: 25px;
}
h1 {
font-size: 1.5em;
margin-top: 0;
}
#table-log {
font-size: 0.85rem;
}
.sidebar {
font-size: 0.85rem;
line-height: 1;
}
.btn {
font-size: 0.7rem;
}
.stack {
font-size: 0.85em;
}
.date {
min-width: 75px;
}
.text {
word-break: break-all;
}
a.llv-active {
z-index: 2;
background-color: #f5f5f5;
border-color: #777;
}
.list-group-item {
word-break: break-word;
}
.folder {
padding-top: 15px;
}
.div-scroll {
height: 80vh;
overflow: hidden auto;
}
.nowrap {
white-space: nowrap;
}
.list-group {
padding: 5px;
}
/**
* DARK MODE CSS
*/
body[data-theme="dark"] {
background-color: #151515;
color: #cccccc;
}
[data-theme="dark"] a {
color: #4da3ff;
}
[data-theme="dark"] a:hover {
color: #a8d2ff;
}
[data-theme="dark"] .list-group-item {
background-color: #1d1d1d;
border-color: #444;
}
[data-theme="dark"] a.llv-active {
background-color: #0468d2;
border-color: rgba(255, 255, 255, 0.125);
color: #ffffff;
}
[data-theme="dark"] a.list-group-item:focus, [data-theme="dark"] a.list-group-item:hover {
background-color: #273a4e;
border-color: rgba(255, 255, 255, 0.125);
color: #ffffff;
}
[data-theme="dark"] .table td, [data-theme="dark"] .table th, [data-theme="dark"] .table thead th {
border-color: #616161;
}
[data-theme="dark"] .page-item.disabled .page-link {
color: #8a8a8a;
background-color: #151515;
border-color: #5a5a5a;
}
[data-theme="dark"] .page-link {
background-color: #151515;
border-color: #5a5a5a;
}
[data-theme="dark"] .page-item.active .page-link {
color: #fff;
background-color: #0568d2;
border-color: #007bff;
}
[data-theme="dark"] .page-link:hover {
color: #ffffff;
background-color: #0051a9;
border-color: #0568d2;
}
[data-theme="dark"] .form-control {
border: 1px solid #464646;
background-color: #151515;
color: #bfbfbf;
}
[data-theme="dark"] .form-control:focus {
color: #bfbfbf;
background-color: #212121;
border-color: #4a4a4a;
}
[data-theme="dark"] a.btn {
color: white;
}
</style>
<script>
function initTheme() {
const darkThemeSelected =
localStorage.getItem('darkSwitch') !== null &&
localStorage.getItem('darkSwitch') === 'dark';
darkSwitch.checked = darkThemeSelected;
darkThemeSelected ? document.body.setAttribute('data-theme', 'dark') :
document.body.removeAttribute('data-theme');
}
function resetTheme() {
if (darkSwitch.checked) {
document.body.setAttribute('data-theme', 'dark');
localStorage.setItem('darkSwitch', 'dark');
} else {
document.body.removeAttribute('data-theme');
localStorage.removeItem('darkSwitch');
}
}
</script>
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col sidebar mb-3">
<h1><i class="fa fa-calendar" aria-hidden="true"></i> {{ __('log viewer') }}</h1>
<div class="my-2">
<a href="{{route('settings.index')}}" class="btn btn-primary">{{ __('Back to Settings') }}</a>
</div>
<div class="custom-control custom-switch" style="padding-bottom:20px;">
<input type="checkbox" class="custom-control-input" id="darkSwitch">
<label class="custom-control-label" for="darkSwitch" style="margin-top: 6px;">{{ __('Dark Mode') }}</label>
</div>
<div class="list-group div-scroll">
@foreach($folders as $folder)
<div class="list-group-item">
<?php
\Rap2hpoutre\LaravelLogViewer\LaravelLogViewer::DirectoryTreeStructure($storage_path, $structure);
?>
</div>
@endforeach
@foreach($files as $file)
<a href="?l={{ \Illuminate\Support\Facades\Crypt::encrypt($file) }}"
class="list-group-item @if ($current_file == $file) llv-active @endif">
{{$file}}
</a>
@endforeach
</div>
</div>
<div class="col-10 table-container">
@if ($logs === null)
<div>
Log file >50M, please download it.
</div>
@else
<table id="table-log" class="table table-striped" data-ordering-index="{{ $standardFormat ? 2 : 0 }}">
<thead>
<tr>
@if ($standardFormat)
<th>Level</th>
<th>Context</th>
<th>Date</th>
@else
<th>Line number</th>
@endif
<th>Content</th>
</tr>
</thead>
<tbody>
@foreach($logs as $key => $log)
<tr data-display="stack{{{$key}}}">
@if ($standardFormat)
<td class="nowrap text-{{{$log['level_class']}}}">
<span class="fa fa-{{{$log['level_img']}}}" aria-hidden="true"></span>&nbsp;&nbsp;{{$log['level']}}
</td>
<td class="text">{{$log['context']}}</td>
@endif
<td class="date">{{{$log['date']}}}</td>
<td class="text">
{{-- @if ($log['stack'])--}}
{{-- <button type="button"--}}
{{-- class="float-right expand btn btn-outline-dark btn-sm mb-2 ml-2"--}}
{{-- data-display="stack{{{$key}}}">--}}
{{-- <span class="fa fa-search"></span>--}}
{{-- </button>--}}
{{-- @endif--}}
{{{$log['text']}}}
@if (isset($log['in_file']))
<br/>{{{$log['in_file']}}}
@endif
@if ($log['stack'])
<div class="mt-2" id="stack{{{$key}}}" style="white-space: pre-wrap;">{{{ trim($log['stack']) }}}</div>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
@endif
<div class="p-3">
@if($current_file)
<a href="?dl={{ \Illuminate\Support\Facades\Crypt::encrypt($current_file) }}{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
<span class="fa fa-download"></span>{{ __('Download file') }}
</a>
-
<a id="clean-log" href="?clean={{ \Illuminate\Support\Facades\Crypt::encrypt($current_file) }}{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
<span class="fa fa-sync"></span>{{ __('Clean file') }}
</a>
-
<a id="delete-log" href="?del={{ \Illuminate\Support\Facades\Crypt::encrypt($current_file) }}{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
<span class="fa fa-trash"></span>{{ __('Delete file') }}
</a>
@if(count($files) > 1)
-
<a id="delete-all-log" href="?delall=true{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
<span class="fa fa-trash-alt"></span> {{ __('Delete all files') }}
</a>
@endif
@endif
</div>
</div>
</div>
</div>
<!-- jQuery for Bootstrap -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
crossorigin="anonymous"></script>
<!-- FontAwesome -->
<script defer src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"></script>
<!-- Datatables -->
<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/dataTables.bootstrap4.min.js"></script>
<script>
// dark mode by https://github.com/coliff/dark-mode-switch
const darkSwitch = document.getElementById('darkSwitch');
// this is here so we can get the body dark mode before the page displays
// otherwise the page will be white for a second...
initTheme();
window.addEventListener('load', () => {
if (darkSwitch) {
initTheme();
darkSwitch.addEventListener('change', () => {
resetTheme();
});
}
});
// end darkmode js
$(document).ready(function () {
// $('.table-container tr').on('click', function () {
// $('#' + $(this).data('display')).toggle();
// });
$('#table-log').DataTable({
"order": [$('#table-log').data('orderingIndex'), 'desc'],
"stateSave": true,
"stateSaveCallback": function (settings, data) {
window.localStorage.setItem("datatable", JSON.stringify(data));
},
"stateLoadCallback": function (settings) {
var data = JSON.parse(window.localStorage.getItem("datatable"));
if (data) data.start = 0;
return data;
}
});
$('#delete-log, #clean-log, #delete-all-log').click(function () {
return confirm('Are you sure?');
});
});
</script>
</body>
</html>