delete 1day2die testtheme
This commit is contained in:
parent
4a31504593
commit
3cc927c0b5
80 changed files with 0 additions and 11490 deletions
7
themes/1day2die/js/app.js
vendored
7
themes/1day2die/js/app.js
vendored
|
@ -1,7 +0,0 @@
|
|||
/**
|
||||
* First we will load all of this project's JavaScript dependencies which
|
||||
* includes Vue and other libraries. It is a great starting point when
|
||||
* building robust, powerful web applications using Vue and Laravel.
|
||||
*/
|
||||
|
||||
import "./bootstrap";
|
48
themes/1day2die/js/bootstrap.js
vendored
48
themes/1day2die/js/bootstrap.js
vendored
|
@ -1,48 +0,0 @@
|
|||
import _ from "lodash";
|
||||
window._ = _;
|
||||
|
||||
/**
|
||||
* We'll load jQuery and the Bootstrap jQuery plugin which provides support
|
||||
* for JavaScript based Bootstrap features such as modals and tabs. This
|
||||
* code may be modified to fit the specific needs of your application.
|
||||
*/
|
||||
import * as Popper from "popper.js";
|
||||
window.Popper = Popper;
|
||||
|
||||
import jquery from "jquery";
|
||||
window.$ = window.jQuery = jquery;
|
||||
|
||||
// Import all of Bootstrap's JS
|
||||
import * as bootstrap from "bootstrap";
|
||||
|
||||
/**
|
||||
* We'll load the axios HTTP library which allows us to easily issue requests
|
||||
* to our Laravel back-end. This library automatically handles sending the
|
||||
* CSRF token as a header based on the value of the "XSRF" token cookie.
|
||||
*/
|
||||
|
||||
import axios from "axios";
|
||||
window.axios = axios;
|
||||
|
||||
window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
|
||||
|
||||
/**
|
||||
* Echo exposes an expressive API for subscribing to channels and listening
|
||||
* for events that are broadcast by Laravel. Echo and event broadcasting
|
||||
* allows your team to easily build robust real-time web applications.
|
||||
*/
|
||||
|
||||
// import Echo from 'laravel-echo';
|
||||
|
||||
// import Pusher from 'pusher-js';
|
||||
// window.Pusher = Pusher;
|
||||
|
||||
// window.Echo = new Echo({
|
||||
// broadcaster: 'pusher',
|
||||
// key: import.meta.env.VITE_PUSHER_APP_KEY,
|
||||
// wsHost: import.meta.env.VITE_PUSHER_HOST ?? `ws-${import.meta.env.VITE_PUSHER_CLUSTER}.pusher.com`,
|
||||
// wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
|
||||
// wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
|
||||
// forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
|
||||
// enabledTransports: ['ws', 'wss'],
|
||||
// });
|
19
themes/1day2die/sass/_variables.scss
vendored
19
themes/1day2die/sass/_variables.scss
vendored
|
@ -1,19 +0,0 @@
|
|||
// Body
|
||||
$body-bg: #f8fafc;
|
||||
|
||||
// Typography
|
||||
$font-family-sans-serif: 'Nunito', sans-serif;
|
||||
$font-size-base: 0.9rem;
|
||||
$line-height-base: 1.6;
|
||||
|
||||
// Colors
|
||||
$blue: #3490dc;
|
||||
$indigo: #6574cd;
|
||||
$purple: #9561e2;
|
||||
$pink: #f66d9b;
|
||||
$red: #e3342f;
|
||||
$orange: #f6993f;
|
||||
$yellow: #ffed4a;
|
||||
$green: #38c172;
|
||||
$teal: #4dc0b5;
|
||||
$cyan: #6cb2eb;
|
8
themes/1day2die/sass/app.scss
vendored
8
themes/1day2die/sass/app.scss
vendored
|
@ -1,8 +0,0 @@
|
|||
// Fonts
|
||||
@import url('https://fonts.googleapis.com/css?family=Nunito');
|
||||
|
||||
// Variables
|
||||
@import 'variables';
|
||||
|
||||
// Bootstrap
|
||||
@import '~bootstrap/scss/bootstrap';
|
|
@ -1,129 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Activity Logs')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{ __('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted" href="{{route('admin.activitylogs.index')}}">{{ __('Activity Logs')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
@if($cronlogs)
|
||||
<div class="callout callout-success">
|
||||
<h4>{{$cronlogs}}</h4>
|
||||
</div>
|
||||
@else
|
||||
<div class="callout callout-danger">
|
||||
<h4>{{ __('No recent activity from cronjobs')}}</h4>
|
||||
<p>{{ __('Are cronjobs running?')}} <a class="text-primary" target="_blank" href="https://github.com/ControlPanel-gg/dashboard/wiki/Installation#crontab-configuration">{{ __('Check the docs for it here')}}</a></p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title"><i class="fas fa-history mr-2"></i>{{ __('Activity Logs')}}</h5>
|
||||
</div>
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-3 offset-lg-9 col-xl-2 offset-xl-10 col-md-6 offset-md-6">
|
||||
<form method="get" action="{{route('admin.activitylogs.index')}}">
|
||||
@csrf
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" class="form-control form-control-sm" value="" name="search" placeholder="Search">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-light btn-sm" type="submit"><i class="fa fa-search"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table class="table table-sm table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('Causer') }}</th>
|
||||
<th>{{ __('Description') }}</th>
|
||||
<th>{{ __('Created at') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($logs as $log)
|
||||
<tr>
|
||||
<td> @if($log->causer) <a href='/admin/users/{{$log->causer_id}}'> {{json_decode($log->causer)->name}}
|
||||
@else
|
||||
System
|
||||
@endif</td>
|
||||
<td>
|
||||
<span>
|
||||
@if(str_starts_with($log->description,"created"))
|
||||
<small><i class="fas text-success fa-plus mr-2"></i></small>
|
||||
@elseif(str_starts_with($log->description,"redeemed"))
|
||||
<small><i class="fas text-success fa-money-check-alt mr-2"></i></small>
|
||||
@elseif(str_starts_with($log->description,"deleted"))
|
||||
<small><i class="fas text-danger fa-times mr-2"></i></small>
|
||||
@elseif(str_starts_with($log->description,"gained"))
|
||||
<small><i class="fas text-success fa-money-bill mr-2"></i></small>
|
||||
@elseif(str_starts_with($log->description,"updated"))
|
||||
<small><i class="fas text-info fa-pen mr-2"></i></small>
|
||||
@endif
|
||||
{{ explode("\\" , $log->subject_type)[2]}}
|
||||
{{$log->description}}
|
||||
|
||||
@php $first=true @endphp
|
||||
@foreach(json_decode($log->properties, true) as $properties)
|
||||
@if($first)
|
||||
@if(isset($properties['name']))
|
||||
"{{$properties['name']}}"
|
||||
@endif
|
||||
@if(isset($properties['email']))
|
||||
< {{$properties['email']}} >
|
||||
@endif
|
||||
@php $first=false @endphp
|
||||
@endif
|
||||
@endforeach
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td>{{$log->created_at->diffForHumans()}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="float-right">
|
||||
{!! $logs->links() !!}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
@endsection
|
|
@ -1,65 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Application API')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.api.index')}}">{{__('Application API')}}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.api.create')}}">{{__('Create')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.api.store')}}" method="POST">
|
||||
@csrf
|
||||
|
||||
<div class="form-group">
|
||||
<label for="memo">{{__('Memo')}}</label>
|
||||
<input value="{{old('memo')}}" id="memo" name="memo" type="text"
|
||||
class="form-control @error('memo') is-invalid @enderror">
|
||||
@error('memo')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,66 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Application API')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.api.index')}}">{{__('Application API')}}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.api.edit' , $applicationApi->token)}}">{{__('Edit')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.api.update' , $applicationApi->token)}}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<div class="form-group">
|
||||
<label for="memo">{{__('Memo')}}</label>
|
||||
<input value="{{$applicationApi->memo}}" id="memo" name="memo" type="text"
|
||||
class="form-control @error('memo') is-invalid @enderror">
|
||||
@error('memo')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,90 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Application API')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted" href="{{route('admin.api.index')}}">{{__('Application API')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fa fa-gamepad mr-2"></i>{{__('Application API')}}</h5>
|
||||
<a href="{{route('admin.api.create')}}" class="btn btn-sm btn-primary"><i
|
||||
class="fas fa-plus mr-1"></i>{{__('Create new')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Token')}}</th>
|
||||
<th>{{__('Memo')}}</th>
|
||||
<th>{{__('Last used')}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm("{{__('Are you sure you wish to delete?')}}") !== false;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('admin.api.datatable')}}",
|
||||
order: [[ 2, "desc" ]],
|
||||
columns: [
|
||||
{data: 'token'},
|
||||
{data: 'memo'},
|
||||
{data: 'last_used'},
|
||||
{data: 'actions' , sortable : false},
|
||||
],
|
||||
fnDrawCallback: function( oSettings ) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,100 +0,0 @@
|
|||
<!--
|
||||
THIS FILE IS DEPRECATED
|
||||
-->
|
||||
|
||||
|
||||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Nests')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.nests.index')}}">{{__('Nests')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-sitemap mr-2"></i>{{__('Nests')}}</h5>
|
||||
<a href="{{route('admin.nests.sync')}}" class="btn btn-sm btn-info"><i
|
||||
class="fas fa-sync mr-1"></i>{{__('Sync')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Active')}}</th>
|
||||
<th>{{__('ID')}}</th>
|
||||
<th>{{__('eggs')}}</th>
|
||||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('Description')}}</th>
|
||||
<th>{{__('Created at')}}</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm({{__("Are you sure you wish to delete?")}}) !== false;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('admin.nests.datatable')}}",
|
||||
order: [[ 1, "desc" ]],
|
||||
columns: [
|
||||
{data: 'actions', name : 'disabled'},
|
||||
{data: 'id'},
|
||||
{data: 'eggs' , sortable : false},
|
||||
{data: 'name' , name : 'nests.name'},
|
||||
{data: 'description'},
|
||||
{data: 'created_at'},
|
||||
|
||||
]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,100 +0,0 @@
|
|||
<!--
|
||||
THIS FILE IS DEPRECATED
|
||||
-->
|
||||
|
||||
|
||||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Nodes')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.nodes.index')}}">{{__('Nodes')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-sitemap mr-2"></i>{{__('Nodes')}}</h5>
|
||||
<a href="{{route('admin.nodes.sync')}}" class="btn btn-sm btn-info"><i
|
||||
class="fas fa-sync mr-1"></i>{{__('Sync')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Active')}}</th>
|
||||
<th>{{__('ID')}}</th>
|
||||
<th>{{__('Location')}}</th>
|
||||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('Description')}}</th>
|
||||
<th>{{__('Created at')}}</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm({{__("Are you sure you wish to delete?")}}) !== false;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('admin.nodes.datatable')}}",
|
||||
order: [[ 1, "desc" ]],
|
||||
columns: [
|
||||
{data: 'actions', name : 'disabled'},
|
||||
{data: 'id'},
|
||||
{data: 'location' , name : 'location.name'},
|
||||
{data: 'name' , name : 'nodes.name'},
|
||||
{data: 'description'},
|
||||
{data: 'created_at'},
|
||||
|
||||
]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,406 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Admin Overview')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.overview.index')}}">{{__('Admin Overview')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-3">
|
||||
<a href="https://discord.gg/4Y6HjD2uyU" class="btn btn-dark btn-block px-3"><i
|
||||
class="fab fa-discord mr-2"></i> {{__('Support server')}}</a>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<a href="https://controlpanel.gg/docs/intro" class="btn btn-dark btn-block px-3"><i
|
||||
class="fas fa-link mr-2"></i> {{__('Documentation')}}</a>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<a href="https://github.com/ControlPanel-gg/dashboard" class="btn btn-dark btn-block px-3"><i
|
||||
class="fab fa-github mr-2"></i> {{__('Github')}}</a>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<a href="https://controlpanel.gg/docs/Contributing/donating" class="btn btn-dark btn-block px-3"><i
|
||||
class="fas fa-money-bill mr-2"></i> {{__('Support ControlPanel')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-info elevation-1"><i class="fas fa-server"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{__('Servers')}}</span>
|
||||
<span class="info-box-number">{{$counters['servers']->total}}</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-primary elevation-1"><i class="fas fa-users"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{__('Users')}}</span>
|
||||
<span class="info-box-number">{{$counters['users']}}</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-warning elevation-1"><i
|
||||
class="fas fa-coins text-white"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{__('Total')}} {{CREDITS_DISPLAY_NAME}}</span>
|
||||
<span class="info-box-number">{{$counters['credits']}}</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-success elevation-1"><i class="fas fa-money-bill"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{__('Payments')}}</span>
|
||||
<span class="info-box-number">{{$counters['payments']->total}}</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="card-title ">
|
||||
<span><i class="fas fa-kiwi-bird mr-2"></i>{{__('Pterodactyl')}}</span>
|
||||
</div>
|
||||
<a href="{{route('admin.overview.sync')}}" class="btn btn-primary btn-sm"><i
|
||||
class="fas fa-sync mr-2"></i>{{__('Sync')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
@if ($deletedNodesPresent)
|
||||
<div class="alert alert-danger m-2">
|
||||
<h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Warning!') }}</h5>
|
||||
<p class="mb-2">
|
||||
{{ __('Some nodes got deleted on pterodactyl only. Please click the sync button above.') }}
|
||||
</p>
|
||||
</div>
|
||||
@endif
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Resources')}}</th>
|
||||
<th>{{__('Count')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{__('Locations')}}</td>
|
||||
<td>{{$counters['locations']}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{__('Nodes')}}</td>
|
||||
<td>{{$nodes->count()}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{__('Nests')}}</td>
|
||||
<td>{{$counters['nests']}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{__('Eggs')}}</td>
|
||||
<td>{{$counters['eggs']}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<span><i class="fas fa-sync mr-2"></i>{{__('Last updated :date', ['date' => $syncLastUpdate])}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="card-title ">
|
||||
<span><i class="fas fa-ticket-alt mr-2"></i>{{__('Latest tickets')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
@if(!$tickets->count())<span style="font-size: 16px; font-weight:700">{{__('There are no tickets')}}.</span>
|
||||
@else
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Title')}}</th>
|
||||
<th>{{__('User')}}</th>
|
||||
<th>{{__('Status')}}</th>
|
||||
<th>{{__('Last updated')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@foreach($tickets as $ticket_id => $ticket)
|
||||
<tr>
|
||||
<td><a class="text-info" href="{{route('moderator.ticket.show', ['ticket_id' => $ticket_id])}}">#{{$ticket_id}} - {{$ticket->title}}</td>
|
||||
<td><a href="{{route('admin.users.show', $ticket->user_id)}}">{{$ticket->user}}</a></td>
|
||||
<td><span class="badge {{$ticket->statusBadgeColor}}">{{$ticket->status}}</span></td>
|
||||
<td>{{$ticket->last_updated}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="card-title ">
|
||||
<span><i class="fas fa-server mr-2"></i>{{__('Controlpanel.gg')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<span><i class="fas fa-info mr-2"></i>{{__("Version")}} {{config("app.version")}} - {{config("BRANCHNAME")}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="card-title ">
|
||||
<span><i class="fas fa-server mr-2"></i>{{__('Individual nodes')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
@if ($perPageLimit)
|
||||
<div class="alert alert-danger m-2">
|
||||
<h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Error!') }}</h5>
|
||||
<p class="mb-2">
|
||||
{{ __('You reached the Pterodactyl perPage limit. Please make sure to set it higher than your server count.') }}<br>
|
||||
{{ __('You can do that in settings.') }}<br><br>
|
||||
{{ __('Note') }}: {{ __('If this error persists even after changing the limit, it might mean a server was deleted on Pterodactyl, but not on ControlPanel. Try clicking the button below.') }}
|
||||
</p>
|
||||
<a href="{{route('admin.servers.sync')}}" class="btn btn-primary btn-md"><i
|
||||
class="fas fa-sync mr-2"></i>{{__('Sync servers')}}</a>
|
||||
</div>
|
||||
@endif
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('ID')}}</th>
|
||||
<th>{{__('Node')}}</th>
|
||||
<th>{{__('Server count')}}</th>
|
||||
<th>{{__('Resource usage')}}</th>
|
||||
<th>{{CREDITS_DISPLAY_NAME . ' ' . __('Usage')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($nodes as $nodeID => $node)
|
||||
<tr>
|
||||
<td>{{$nodeID}}</td>
|
||||
<td>{{$node->name}}</td>
|
||||
<td>{{$node->activeServers}}/{{$node->totalServers}}</td>
|
||||
<td>{{$node->usagePercent}}%</td>
|
||||
<td>{{$node->activeEarnings}}/{{$node->totalEarnings}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="2"><span style="float: right; font-weight: 700">{{__('Total')}} ({{__('active')}}/{{__('total')}}):</span></td>
|
||||
<td>{{$counters['servers']->active}}/{{$counters['servers']->total}}</td>
|
||||
<td>{{$counters['totalUsagePercent']}}%</td>
|
||||
<td>{{$counters['earnings']->active}}/{{$counters['earnings']->total}}</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
<hr style="width: 100%; height:2px; border-width:0; background-color:#6c757d; margin-top: 0px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="card-title ">
|
||||
<span><i class="fas fa-file-invoice-dollar mr-2"></i>{{__('Latest payments')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
<div class="row">
|
||||
@if($counters['payments']['lastMonth']->count())
|
||||
<div class="col-md-6" style="border-right:1px solid #6c757d">
|
||||
<span style="margin:auto; display:table; font-size: 18px; font-weight:700">{{__('Last month')}}:
|
||||
<i data-toggle="popover" data-trigger="hover" data-html="true"
|
||||
data-content="{{ __('Payments in this time window') }}:<br>{{$counters['payments']['lastMonth']->timeStart}} - {{$counters['payments']['lastMonth']->timeEnd}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</span>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><b>{{__('Currency')}}</b></th>
|
||||
<th>{{__('Number of payments')}}</th>
|
||||
<th>{{__('Total amount')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($counters['payments']['lastMonth'] as $currency => $income)
|
||||
<tr>
|
||||
<td>{{$currency}}</td>
|
||||
<td>{{$income->count}}</td>
|
||||
<td>{{$income->total}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
<hr style="width: 100%; height:1px; border-width:0; background-color:#6c757d; margin-top: -16px">
|
||||
</div>
|
||||
@endif
|
||||
@if($counters['payments']['lastMonth']->count()) <div class="col-md-6">
|
||||
@else <div class="col-md-12"> @endif
|
||||
<span style="margin:auto; display:table; font-size: 18px; font-weight:700">{{__('This month')}}:
|
||||
<i data-toggle="popover" data-trigger="hover" data-html="true"
|
||||
data-content="{{ __('Payments in this time window') }}:<br>{{$counters['payments']['thisMonth']->timeStart}} - {{$counters['payments']['thisMonth']->timeEnd}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</span>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><b>{{__('Currency')}}</b></th>
|
||||
<th>{{__('Number of payments')}}</th>
|
||||
<th>{{__('Total amount')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($counters['payments']['thisMonth'] as $currency => $income)
|
||||
<tr>
|
||||
<td>{{$currency}}</td>
|
||||
<td>{{$income->count}}</td>
|
||||
<td>{{$income->total}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
<hr style="width: 100%; height:1px; border-width:0; background-color:#6c757d; margin-top: -16px">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="card-title ">
|
||||
<span><i class="fas fa-hand-holding-usd mr-2"></i>{{__('Tax overview')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
@if($counters['taxPayments']['lastYear']->count())
|
||||
<span style="margin:auto; display:table; font-size: 18px; font-weight:700">{{__('Last year')}}:
|
||||
<i data-toggle="popover" data-trigger="hover" data-html="true"
|
||||
data-content="{{ __('Payments in this time window') }}:<br>{{$counters['taxPayments']['lastYear']->timeStart}} - {{$counters['taxPayments']['lastYear']->timeEnd}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</span>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><b>{{__('Currency')}}</b></th>
|
||||
<th>{{__('Number of payments')}}</th>
|
||||
<th><b>{{__('Base amount')}}</b></th>
|
||||
<th><b>{{__('Total taxes')}}</b></th>
|
||||
<th>{{__('Total amount')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($counters['taxPayments']['lastYear'] as $currency => $income)
|
||||
<tr>
|
||||
<td>{{$currency}}</td>
|
||||
<td>{{$income->count}}</td>
|
||||
<td>{{$income->price}}</td>
|
||||
<td>{{$income->taxes}}</td>
|
||||
<td>{{$income->total}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
<hr style="width: 100%; height:2px; border-width:0; background-color:#6c757d; margin-top: 0px; margin-bottom: 8px">
|
||||
@endif
|
||||
<span style="margin:auto; display:table; font-size: 18px; font-weight:700">{{__('This year')}}:
|
||||
<i data-toggle="popover" data-trigger="hover" data-html="true"
|
||||
data-content="{{ __('Payments in this time window') }}:<br>{{$counters['taxPayments']['thisYear']->timeStart}} - {{$counters['taxPayments']['thisYear']->timeEnd}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</span>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><b>{{__('Currency')}}</b></th>
|
||||
<th>{{__('Number of payments')}}</th>
|
||||
<th><b>{{__('Base amount')}}</b></th>
|
||||
<th><b>{{__('Total taxes')}}</b></th>
|
||||
<th>{{__('Total amount')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($counters['taxPayments']['thisYear'] as $currency => $income)
|
||||
<tr>
|
||||
<td>{{$currency}}</td>
|
||||
<td>{{$income->count}}</td>
|
||||
<td>{{$income->price}}</td>
|
||||
<td>{{$income->taxes}}</td>
|
||||
<td>{{$income->total}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
<hr style="width: 100%; height:2px; border-width:0; background-color:#6c757d; margin-top: 0px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
@endsection
|
|
@ -1,147 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Vouchers')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.partners.index')}}">{{__('Vouchers')}}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.partners.create')}}">{{__('Create')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">
|
||||
<i class="fas fa-handshake mr-2"></i>{{__('Partner details')}}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.partners.store')}}" method="POST">
|
||||
@csrf
|
||||
|
||||
<div class="form-group">
|
||||
<label for="user_id">{{__('User')}}</label>
|
||||
<select id="user_id" style="width:100%"
|
||||
class="custom-select @error('user') is-invalid @enderror" name="user_id" autocomplete="off">
|
||||
@foreach($users as $user)
|
||||
<option @if($partners->contains('user_id' , $user->id)) disabled @endif
|
||||
value="{{$user->id}}">{{$user->name}} ({{$user->email}})</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('user')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="partner_discount">{{__('Partner discount')}}
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('The discount in percent given to the partner at checkout.')}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<input value="{{old('partner_discount')}}" placeholder="{{__('Discount in percent')}}" id="partner_discount" name="partner_discount"
|
||||
type="number" step="any" min="0" max="100"
|
||||
class="form-control @error('partner_discount') is-invalid @enderror">
|
||||
@error('partner_discount')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="registered_user_discount">{{__('Registered user discount')}}
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('The discount in percent given to all users registered using the partners referral link.')}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<input value="{{old('registered_user_discount')}}" placeholder="Discount in percent" id="registered_user_discount" name="registered_user_discount"
|
||||
type="number" class="form-control @error('registered_user_discount') is-invalid @enderror"
|
||||
required="required">
|
||||
</div>
|
||||
@error('registered_user_discount')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="referral_system_commission">{{__('Referral system commission')}}
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('Override value for referral system commission. You can set it to -1 to get the default commission from settings.')}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<input value="{{old('referral_system_commission')}}" placeholder="{{__('Commission in percent')}}" id="referral_system_commission" name="referral_system_commission"
|
||||
type="number" step="any" min="-1" max="100"
|
||||
class="form-control @error('referral_system_commission') is-invalid @enderror">
|
||||
@error('referral_system_commission')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<i class="fas"></i>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
$('#expires_at').datetimepicker({
|
||||
format: 'DD-MM-yyyy HH:mm:ss',
|
||||
icons: {
|
||||
time: 'far fa-clock',
|
||||
date: 'far fa-calendar',
|
||||
up: 'fas fa-arrow-up',
|
||||
down: 'fas fa-arrow-down',
|
||||
previous: 'fas fa-chevron-left',
|
||||
next: 'fas fa-chevron-right',
|
||||
today: 'fas fa-calendar-check',
|
||||
clear: 'far fa-trash-alt',
|
||||
close: 'far fa-times-circle'
|
||||
}
|
||||
});
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,166 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Partners')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.partners.index')}}">{{__('Partners')}}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.partners.edit' , $partner->id)}}">{{__('Edit')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">
|
||||
<i class="fas fa-handshake mr-2"></i>{{__('Partner details')}}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.partners.update' , $partner->id)}}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<div class="form-group">
|
||||
<label for="user_id">{{__('User')}}</label>
|
||||
<select id="user_id" style="width:100%"
|
||||
class="custom-select @error('user') is-invalid @enderror" name="user_id" autocomplete="off">
|
||||
@foreach($users as $user)
|
||||
<option @if($partners->contains('user_id' , $user->id)&&$partner->user_id!=$user->id) disabled @endif
|
||||
@if($partner->user_id==$user->id) selected @endif
|
||||
value="{{$user->id}}">{{$user->name}} ({{$user->email}})</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('user')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="partner_discount">{{__('Partner discount')}}
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('The discount in percent given to the partner at checkout.')}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<input value="{{$partner->partner_discount}}" placeholder="{{__('Discount in percent')}}" id="partner_discount" name="partner_discount"
|
||||
type="number" step="any" min="0" max="100"
|
||||
class="form-control @error('partner_discount') is-invalid @enderror">
|
||||
@error('partner_discount')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="registered_user_discount">{{__('Registered user discount')}}
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('The discount in percent given to all users registered using the partners referral link.')}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<input value="{{$partner->registered_user_discount}}" placeholder="Discount in percent" id="registered_user_discount" name="registered_user_discount"
|
||||
type="number" class="form-control @error('registered_user_discount') is-invalid @enderror"
|
||||
required="required">
|
||||
</div>
|
||||
@error('registered_user_discount')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="referral_system_commission">{{__('Referral system commission')}}
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('Override value for referral system commission. You can set it to -1 to get the default commission from settings.')}}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<input value="{{$partner->referral_system_commission}}" placeholder="{{__('Commission in percent')}}" id="referral_system_commission" name="referral_system_commission"
|
||||
type="number" step="any" min="-1" max="100"
|
||||
class="form-control @error('referral_system_commission') is-invalid @enderror">
|
||||
@error('referral_system_commission')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
$('#expires_at').datetimepicker({
|
||||
format: 'DD-MM-yyyy HH:mm:ss',
|
||||
icons: {
|
||||
time: 'far fa-clock',
|
||||
date: 'far fa-calendar',
|
||||
up: 'fas fa-arrow-up',
|
||||
down: 'fas fa-arrow-down',
|
||||
previous: 'fas fa-chevron-left',
|
||||
next: 'fas fa-chevron-right',
|
||||
today: 'fas fa-calendar-check',
|
||||
clear: 'far fa-trash-alt',
|
||||
close: 'far fa-times-circle'
|
||||
}
|
||||
});
|
||||
})
|
||||
function setMaxUses() {
|
||||
let element = document.getElementById('uses')
|
||||
element.value = element.max;
|
||||
console.log(element.max)
|
||||
}
|
||||
function setRandomCode() {
|
||||
let element = document.getElementById('code')
|
||||
element.value = getRandomCode(36)
|
||||
}
|
||||
function getRandomCode(length) {
|
||||
let result = '';
|
||||
let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-';
|
||||
let charactersLength = characters.length;
|
||||
for (let i = 0; i < length; i++) {
|
||||
result += characters.charAt(Math.floor(Math.random() *
|
||||
charactersLength));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,94 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Partners')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.partners.index')}}">{{__('Partners')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-handshake mr-2"></i>{{__('Partners')}}</h5>
|
||||
<a href="{{route('admin.partners.create')}}" class="btn btn-sm btn-primary"><i
|
||||
class="fas fa-plus mr-1"></i>{{__('Create new')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('User')}}</th>
|
||||
<th>{{__('Partner discount')}}</th>
|
||||
<th>{{__('Registered user discount')}}</th>
|
||||
<th>{{__('Referral system commission')}}</th>
|
||||
<th>{{__('Created')}}</th>
|
||||
<th>{{__('Actions')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm("{{__('Are you sure you wish to delete?')}}") !== false;
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('admin.partners.datatable')}}",
|
||||
columns: [
|
||||
{data: 'user'},
|
||||
{data: 'partner_discount'},
|
||||
{data: 'registered_user_discount'},
|
||||
{data: 'referral_system_commission'},
|
||||
{data: 'created_at'},
|
||||
{data: 'actions', sortable: false}
|
||||
],
|
||||
fnDrawCallback: function( oSettings ) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,98 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Payments')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">Dashboard</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted" href="{{route('admin.payments.index')}}">{{__('Payments')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title"><i class="fas fa-money-bill-wave mr-2"></i>{{ __('Payments') }}</h5>
|
||||
<div class="float-right">
|
||||
<a href="{{ route('admin.invoices.downloadAllInvoices') }}"><button
|
||||
class="btn btn-info">{{ __('Download all Invoices') }}</button></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('ID') }}</th>
|
||||
<th>{{ __('Type') }}</th>
|
||||
<th>{{ __('User') }}</th>
|
||||
<th>{{ __('Amount') }}</th>
|
||||
<th>{{ __('Product Price') }}</th>
|
||||
<th>{{ __('Tax Value') }}</th>
|
||||
<th>{{ __('Tax Percentage') }}</th>
|
||||
<th>{{ __('Total Price') }}</th>
|
||||
<th>{{ __('Payment ID') }}</th>
|
||||
<th>{{ __('Payment Method') }}</th>
|
||||
<th>{{ __('Created at') }}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{ route('admin.payments.datatable') }}",
|
||||
order: [[ 10, "desc" ]],
|
||||
columns: [
|
||||
{data: 'id',name: 'payments.id'},
|
||||
{data: 'type'},
|
||||
{data: 'user'},
|
||||
{data: 'amount'},
|
||||
{data: 'price'},
|
||||
{data: 'tax_value'},
|
||||
{data: 'tax_percent'},
|
||||
{data: 'total_price'},
|
||||
{data: 'payment_id'},
|
||||
{data: 'payment_method'},
|
||||
{data: 'created_at', type: 'num', render: {_: 'display', sort: 'raw'}},
|
||||
{data: 'actions' , sortable : false},
|
||||
],
|
||||
fnDrawCallback: function(oSettings) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
},
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@endsection
|
|
@ -1,315 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Products')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.products.index') }}">{{__('Products')}}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('admin.products.create') }}">{{__('Create')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<form action="{{route('admin.products.store')}}" method="POST">
|
||||
@csrf
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">{{__('Product Details')}}</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<div class="d-flex flex-row-reverse">
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" name="disabled"
|
||||
class="custom-control-input custom-control-input-danger" id="switch1">
|
||||
<label class="custom-control-label" for="switch1">{{__('Disabled')}} <i
|
||||
data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('Will hide this option from being selected')}}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label for="name">{{__('Name')}}</label>
|
||||
<input value="{{$product->name ?? old('name')}}" id="name" name="name"
|
||||
type="text"
|
||||
class="form-control @error('name') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="price">{{__('Price in')}} {{CREDITS_DISPLAY_NAME}}</label>
|
||||
<input value="{{$product->price ?? old('price')}}" id="price" name="price" step=".01"
|
||||
type="number"
|
||||
class="form-control @error('price') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('price')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="memory">{{__('Memory')}}</label>
|
||||
<input value="{{$product->memory ?? old('memory')}}" id="memory"
|
||||
name="memory"
|
||||
type="number"
|
||||
class="form-control @error('memory') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('memory')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="cpu">{{__('Cpu')}}</label>
|
||||
<input value="{{$product->cpu ?? old('cpu')}}" id="cpu" name="cpu"
|
||||
type="number"
|
||||
class="form-control @error('cpu') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('cpu')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="swap">{{__('Swap')}}</label>
|
||||
<input value="{{$product->swap ?? old('swap')}}" id="swap" name="swap"
|
||||
type="number"
|
||||
class="form-control @error('swap') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('swap')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="description">{{__('Description')}} <i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="{{__('This is what the users sees')}}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<textarea id="description" name="description"
|
||||
type="text"
|
||||
class="form-control @error('description') is-invalid @enderror"
|
||||
required="required">{{$product->description ?? old('description')}}</textarea>
|
||||
@error('description')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label for="disk">{{__('Disk')}}</label>
|
||||
<input value="{{$product->disk ?? old('disk') ?? 1000}}" id="disk"
|
||||
name="disk"
|
||||
type="number"
|
||||
class="form-control @error('disk') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('disk')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="minimum_credits">{{__('Minimum')}} {{ CREDITS_DISPLAY_NAME }} <i
|
||||
data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('Setting to -1 will use the value from configuration.')}}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<input
|
||||
value="{{ $product->minimum_credits ?? old('minimum_credits') ?? -1 }}"
|
||||
id="minimum_credits"
|
||||
name="minimum_credits" type="number"
|
||||
class="form-control @error('minimum_credits') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('minimum_credits')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="io">{{__('IO')}}</label>
|
||||
<input value="{{$product->io ?? old('io') ?? 500}}" id="io" name="io"
|
||||
type="number"
|
||||
class="form-control @error('io') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('io')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="databases">{{__('Databases')}}</label>
|
||||
<input value="{{$product->databases ?? old('databases') ?? 1}}"
|
||||
id="databases"
|
||||
name="databases"
|
||||
type="number"
|
||||
class="form-control @error('databases') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('databases')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="backups">{{__('Backups')}}</label>
|
||||
<input value="{{$product->backups ?? old('backups') ?? 1}}" id="backups"
|
||||
name="backups"
|
||||
type="number"
|
||||
class="form-control @error('backups') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('backups')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="allocations">{{__('Allocations')}}</label>
|
||||
<input value="{{$product->allocations ?? old('allocations') ?? 0}}"
|
||||
id="allocations" name="allocations"
|
||||
type="number"
|
||||
class="form-control @error('allocations') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('allocations')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">{{__('Product Linking')}}
|
||||
<i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="{{__('Link your products to nodes and eggs to create dynamic pricing for each option')}}"
|
||||
class="fas fa-info-circle"></i></h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="nodes">{{__('Nodes')}}</label>
|
||||
<select id="nodes" style="width:100%"
|
||||
class="custom-select @error('nodes') is-invalid @enderror"
|
||||
name="nodes[]" multiple="multiple" autocomplete="off">
|
||||
@foreach($locations as $location)
|
||||
<optgroup label="{{$location->name}}">
|
||||
@foreach($location->nodes as $node)
|
||||
<option
|
||||
@if(isset($product)) @if($product->nodes->contains('id' , $node->id)) selected
|
||||
@endif @endif value="{{$node->id}}">{{$node->name}}</option>
|
||||
@endforeach
|
||||
</optgroup>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('nodes')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{__('This product will only be available for these nodes')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="eggs">{{__('Eggs')}}</label>
|
||||
<select id="eggs" style="width:100%"
|
||||
class="custom-select @error('eggs') is-invalid @enderror"
|
||||
name="eggs[]" multiple="multiple" autocomplete="off">
|
||||
@foreach($nests as $nest)
|
||||
<optgroup label="{{$nest->name}}">
|
||||
@foreach($nest->eggs as $egg)
|
||||
<option
|
||||
@if(isset($product)) @if($product->eggs->contains('id' , $egg->id)) selected
|
||||
@endif @endif value="{{$egg->id}}">{{$egg->name}}</option>
|
||||
@endforeach
|
||||
</optgroup>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('eggs')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{__('This product will only be available for these eggs')}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-muted">
|
||||
{{__('No Eggs or Nodes shown?')}} <a href="{{route('admin.overview.sync')}}">{{__("Sync now")}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
$('.custom-select').select2();
|
||||
});
|
||||
</script>
|
||||
@endsection
|
|
@ -1,310 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Products')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.products.index')}}">{{__('Products')}}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.products.edit' , $product->id)}}">{{__('Edit')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<form action="{{route('admin.products.update' , $product->id)}}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
|
||||
@if($product->servers()->count() > 0)
|
||||
<div class="callout callout-danger">
|
||||
<h4>{{__('Editing the resource options will not automatically update the servers on
|
||||
pterodactyls side!')}}'</h4>
|
||||
<p class="text-muted">{{__('Automatically updating resource options on pterodactyl side is on
|
||||
my todo list :)')}}</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">{{__('Product Details')}}</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<div class="d-flex flex-row-reverse">
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" @if($product->disabled) checked @endif name="disabled"
|
||||
class="custom-control-input custom-control-input-danger" id="switch1">
|
||||
<label class="custom-control-label" for="switch1">{{__('Disabled')}} <i
|
||||
data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('Will hide this option from being selected')}}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="name">{{__('Name')}}</label>
|
||||
<input value="{{ $product->name }}" id="name" name="name" type="text"
|
||||
class="form-control @error('name') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="price">{{__('Price in')}} {{ CREDITS_DISPLAY_NAME }}</label>
|
||||
<input value="{{ $product->price }}" id="price" name="price" type="number" step=".01"
|
||||
class="form-control @error('price') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('price')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="memory">{{__('Memory')}}</label>
|
||||
<input value="{{ $product->memory }}" id="memory" name="memory"
|
||||
type="number"
|
||||
class="form-control @error('memory') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('memory')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="cpu">{{__('Cpu')}}</label>
|
||||
<input value="{{ $product->cpu }}" id="cpu" name="cpu" type="number"
|
||||
class="form-control @error('cpu') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('cpu')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="swap">{{__('Swap')}}</label>
|
||||
<input value="{{ $product->swap }}" id="swap" name="swap" type="number"
|
||||
class="form-control @error('swap') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('swap')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="description">{{__('Description')}} <i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="{{__('This is what the users sees')}}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<textarea id="description" name="description"
|
||||
type="text"
|
||||
class="form-control @error('description') is-invalid @enderror"
|
||||
required="required">{{$product->description}}</textarea>
|
||||
@error('description')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label for="disk">{{__('Disk')}}</label>
|
||||
<input value="{{ $product->disk }}" id="disk" name="disk" type="number"
|
||||
class="form-control @error('disk') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('disk')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="minimum_credits">{{__('Minimum')}} {{ CREDITS_DISPLAY_NAME }} <i
|
||||
data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('Setting to -1 will use the value from configuration.')}}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<input value="{{ $product->minimum_credits }}" id="minimum_credits"
|
||||
name="minimum_credits" type="number"
|
||||
class="form-control @error('minimum_credits') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('minimum_credits')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="io">{{__('IO')}}</label>
|
||||
<input value="{{ $product->io }}" id="io" name="io" type="number"
|
||||
class="form-control @error('io') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('io')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="databases">{{__('Databases')}}</label>
|
||||
<input value="{{ $product->databases }}" id="databases" name="databases"
|
||||
type="number"
|
||||
class="form-control @error('databases') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('databases')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="backups">{{__('Backups')}}</label>
|
||||
<input value="{{ $product->backups }}" id="backups" name="backups"
|
||||
type="number"
|
||||
class="form-control @error('backups') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('backups')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="allocations">{{__('Allocations')}}</label>
|
||||
<input value="{{ $product->allocations }}" id="allocations"
|
||||
name="allocations" type="number"
|
||||
class="form-control @error('allocations') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('allocations')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">{{__('Product Linking')}}
|
||||
<i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="{{__('Link your products to nodes and eggs to create dynamic pricing for each option')}}"
|
||||
class="fas fa-info-circle"></i></h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="nodes">{{__('Nodes')}}</label>
|
||||
<select id="nodes" style="width:100%"
|
||||
class="custom-select @error('nodes') is-invalid @enderror" name="nodes[]"
|
||||
multiple="multiple" autocomplete="off">
|
||||
@foreach($locations as $location)
|
||||
<optgroup label="{{$location->name}}">
|
||||
@foreach($location->nodes as $node)
|
||||
<option @if($product->nodes->contains('id' , $node->id)) selected
|
||||
@endif value="{{$node->id}}">{{$node->name}}</option>
|
||||
@endforeach
|
||||
</optgroup>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('nodes')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{__('This product will only be available for these nodes')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="eggs">Eggs</label>
|
||||
<select id="eggs" style="width:100%"
|
||||
class="custom-select @error('eggs') is-invalid @enderror" name="eggs[]"
|
||||
multiple="multiple" autocomplete="off">
|
||||
@foreach($nests as $nest)
|
||||
<optgroup label="{{$nest->name}}">
|
||||
@foreach($nest->eggs as $egg)
|
||||
<option @if($product->eggs->contains('id' , $egg->id)) selected
|
||||
@endif value="{{$egg->id}}">{{$egg->name}}</option>
|
||||
@endforeach
|
||||
</optgroup>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('eggs')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{__('This product will only be available for these eggs')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
$('.custom-select').select2();
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
});
|
||||
</script>
|
||||
|
||||
@endsection
|
|
@ -1,117 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Products')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.products.index')}}">{{__('Products')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
|
||||
<h5 class="card-title"><i class="fas fa-sliders-h mr-2"></i>{{__('Products')}}</h5>
|
||||
<a href="{{route('admin.products.create')}}" class="btn btn-sm btn-primary"><i
|
||||
class="fas fa-plus mr-1"></i>{{__('Create new')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Active')}}</th>
|
||||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('Price')}}</th>
|
||||
<th>{{__('Memory')}}</th>
|
||||
<th>{{__('Cpu')}}</th>
|
||||
<th>{{__('Swap')}}</th>
|
||||
<th>{{__('Disk')}}</th>
|
||||
<th>{{__('Databases')}}</th>
|
||||
<th>{{__('Backups')}}</th>
|
||||
<th>{{__('Nodes')}}</th>
|
||||
<th>{{__('Eggs')}}</th>
|
||||
<th>{{__('Min Credits')}}</th>
|
||||
<th>{{__('Servers')}}</th>
|
||||
<th>{{__('Created at')}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm("{{__('Are you sure you wish to delete?')}}") !== false;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$("#datatable").DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
order: [
|
||||
[2, "asc"]
|
||||
],
|
||||
ajax: "{{ route('admin.products.datatable') }}",
|
||||
columns: [
|
||||
{data: "disabled"},
|
||||
{data: "name"},
|
||||
{data: "price"},
|
||||
{data: "memory"},
|
||||
{data: "cpu"},
|
||||
{data: "swap"},
|
||||
{data: "disk"},
|
||||
{data: "databases"},
|
||||
{data: "backups"},
|
||||
{data: "nodes", sortable: false},
|
||||
{data: "eggs", sortable: false},
|
||||
{data: "minimum_credits"},
|
||||
{data: "servers", sortable: false},
|
||||
{data: "created_at"},
|
||||
{data: "actions", sortable: false}
|
||||
],
|
||||
fnDrawCallback: function (oSettings) {
|
||||
$("[data-toggle=\"popover\"]").popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,261 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Products')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.users.index') }}">{{__('Products')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('admin.products.show', $product->id) }}">{{__('Show')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-sliders-h mr-2"></i>{{__('Product')}}</h5>
|
||||
<div class="ml-auto">
|
||||
<a data-content="Edit" data-trigger="hover" data-toggle="tooltip"
|
||||
href="{{ route('admin.products.edit', $product->id) }}" class="btn btn-sm btn-info mr-1"><i
|
||||
class="fas fa-pen"></i></a>
|
||||
<form class="d-inline" onsubmit="return submitResult();" method="post"
|
||||
action="{{ route('admin.products.destroy', $product->id) }}">
|
||||
{{ csrf_field() }}
|
||||
{{ method_field('DELETE') }}
|
||||
<button data-content="Delete" data-trigger="hover" data-toggle="tooltip"
|
||||
class="btn btn-sm btn-danger mr-1"><i class="fas fa-trash"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('ID')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->id }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Name')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->name }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Price')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
<i class="fas fa-coins mr-1"></i>{{ $product->price }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Minimum')}} {{ CREDITS_DISPLAY_NAME }}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
@if ($product->minimum_credits == -1)
|
||||
<i class="fas fa-coins mr-1"></i>{{ $minimum_credits }}
|
||||
@else
|
||||
<i class="fas fa-coins mr-1"></i>{{ $product->minimum_credits }}
|
||||
@endif
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Memory')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->memory }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('CPU')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->cpu }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Swap')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->swap }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Disk')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->disk }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('IO')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->io }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Databases')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->databases }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Allocations')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->allocations }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Created at')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->created_at ? $product->created_at->diffForHumans() : '' }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Description')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span class="d-inline-block text-truncate">
|
||||
{{ $product->description }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Updated at')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $product->updated_at ? $product->updated_at->diffForHumans() : '' }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title"><i class="fas fa-server mr-2"></i>{{__('Servers')}}</h5>
|
||||
</div>
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
@include('admin.servers.table' , ['filter' => '?product=' . $product->id])
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,67 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="alert alert-danger p-2 m-2">
|
||||
<h5><i class="icon fas fa-exclamation-circle"></i> {{ __('ATTENTION!') }}</h5>
|
||||
{{ __('Only edit these settings if you know exactly what you are doing ')}}
|
||||
<br>
|
||||
{{ __('You usually do not need to change anything here') }}
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
|
||||
<h1>{{__('Edit Server')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.servers.index')}}">{{__('Servers')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.servers.edit' , $server->id)}}">{{__('Edit')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.servers.update', $server->id)}}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
<div class="form-group">
|
||||
<label for="name">{{__('Server identifier')}}</label>
|
||||
<input value="{{$server->identifier}}" id="identifier" name="identifier" type="text"
|
||||
class="form-control @error('identifier') is-invalid @enderror" required="required">
|
||||
@error('identifier')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">{{__('Submit')}}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
@endsection
|
|
@ -1,53 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Servers')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted" href="{{route('admin.servers.index')}}">{{__('Servers')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="card-title ">
|
||||
<span><i class="fas fa-server mr-2"></i>{{__('Servers')}}</span>
|
||||
</div>
|
||||
<a href="{{route('admin.servers.sync')}}" class="btn btn-primary btn-sm"><i
|
||||
class="fas fa-sync mr-2"></i>{{__('Sync')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
@include('admin.servers.table')
|
||||
|
||||
{{-- <div class="float-right">--}}
|
||||
{{-- {!! $servers->links() !!}--}}
|
||||
{{-- </div>--}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
@endsection
|
|
@ -1,48 +0,0 @@
|
|||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="20"></th>
|
||||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('User')}}</th>
|
||||
<th>{{__('Server id')}}</th>
|
||||
<th>{{__('Config')}}</th>
|
||||
<th>{{__('Suspended at')}}</th>
|
||||
<th>{{__('Created at')}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm("{{__('Are you sure you wish to delete?')}}") !== false;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('admin.servers.datatable')}}{{$filter ?? ''}}",
|
||||
order: [[ 5, "desc" ]],
|
||||
columns: [
|
||||
{data: 'status' , name : 'servers.suspended'},
|
||||
{data: 'name'},
|
||||
{data: 'user' , name : 'user.name'},
|
||||
{data: 'identifier'},
|
||||
{data: 'resources' , name : 'product.name'},
|
||||
{data: 'suspended'},
|
||||
{data: 'created_at'},
|
||||
{data: 'actions' , sortable : false},
|
||||
],
|
||||
fnDrawCallback: function( oSettings ) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -1,98 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Settings') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('admin.settings.index') }}">{{ __('Settings') }}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
@if(!file_exists(base_path()."/install.lock"))
|
||||
<div class="callout callout-danger">
|
||||
<h4>{{ __('The installer is not locked!') }}</h4>
|
||||
<p>{{ __('please create a file called "install.lock" in your dashboard Root directory. Otherwise no settings will be loaded!') }}</p>
|
||||
<a href="/install?step=7"><button class="btn btn-outline-danger">{{__('or click here')}}</button></a>
|
||||
|
||||
</div>
|
||||
@endif
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-tools mr-2"></i>{{ __('Settings') }}</h5>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body ">
|
||||
|
||||
<!-- Nav pills -->
|
||||
<ul class="nav nav-tabs">
|
||||
|
||||
@foreach ($tabListItems as $tabListItem)
|
||||
{!! $tabListItem !!}
|
||||
@endforeach
|
||||
</ul>
|
||||
|
||||
<!-- Tab panes -->
|
||||
<div class="tab-content">
|
||||
|
||||
@foreach ($tabs as $tab)
|
||||
@include($tab)
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
// Add the following code if you want the name of the file appear on select
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
$(".custom-file-input").on("change", function() {
|
||||
var fileName = $(this).val().split("\\").pop();
|
||||
$(this).siblings(".custom-file-label").addClass("selected").html(fileName);
|
||||
});
|
||||
})
|
||||
|
||||
const tabPaneHash = window.location.hash;
|
||||
if (tabPaneHash) {
|
||||
$('.nav-tabs a[href="' + tabPaneHash + '"]').tab('show');
|
||||
}
|
||||
|
||||
$('.nav-tabs a').click(function(e) {
|
||||
$(this).tab('show');
|
||||
const scrollmem = $('body').scrollTop();
|
||||
window.location.hash = this.hash;
|
||||
$('html,body').scrollTop(scrollmem);
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,111 +0,0 @@
|
|||
<div class="tab-pane mt-3 active" id="invoices">
|
||||
<form method="POST" enctype="multipart/form-data" class="mb-3"
|
||||
action="{{ route('admin.settings.update.invoicesettings') }}">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3 p-3">
|
||||
<!-- Name -->
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="company-name">{{ __('Company Name') }}:</label>
|
||||
<input x-model="company-name" id="company-name" name="company-name" type="text" required
|
||||
value="{{ config('SETTINGS::INVOICE:COMPANY_NAME') }}"
|
||||
class="form-control @error('company-name') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<!-- address -->
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="company-address">{{ __('Company Adress') }}:</label>
|
||||
<input x-model="company-address" id="company-address" name="company-address" type="text"
|
||||
value="{{ config('SETTINGS::INVOICE:COMPANY_ADDRESS') }}"
|
||||
class="form-control @error('company-address') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<!-- Phone -->
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="company-phone">{{ __('Company Phonenumber') }}:</label>
|
||||
<input x-model="company-phone" id="company-phone" name="company-phone" type="text"
|
||||
value="{{ config('SETTINGS::INVOICE:COMPANY_PHONE') }}"
|
||||
class="form-control @error('company-phone') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- VAT -->
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="company-vat">{{ __('VAT ID') }}:</label>
|
||||
<input x-model="company-vat" id="company-vat" name="company-vat" type="text"
|
||||
value="{{ config('SETTINGS::INVOICE:COMPANY_VAT') }}"
|
||||
class="form-control @error('company-vat') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 p-3">
|
||||
<!-- email -->
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="company-mail">{{ __('Company E-Mail Adress') }}:</label>
|
||||
<input x-model="company-mail" id="company-mail" name="company-mail" type="text"
|
||||
value="{{ config('SETTINGS::INVOICE:COMPANY_MAIL') }}"
|
||||
class="form-control @error('company-mail') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<!-- website -->
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="company-web">{{ __('Company Website') }}:</label>
|
||||
<input x-model="company-web" id="company-web" name="company-web" type="text"
|
||||
value="{{ config('SETTINGS::INVOICE:COMPANY_WEBSITE') }}"
|
||||
class="form-control @error('company-web') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- prefix -->
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="invoice-prefix">{{ __('Invoice Prefix') }}:</label>
|
||||
<input x-model="invoice-prefix" id="invoice-prefix" name="invoice-prefix" type="text" required
|
||||
value="{{ config('SETTINGS::INVOICE:PREFIX') }}"
|
||||
class="form-control @error('invoice-prefix') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 p-3">
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<div class="col m-0 p-0 d-flex justify-content-between align-items-center">
|
||||
<div>
|
||||
<input value="true" id="enable-invoices" name="enable-invoices"
|
||||
{{ config('SETTINGS::INVOICE:ENABLED') == 'true' ? 'checked' : '' }} type="checkbox">
|
||||
<label for="enable-invoices">{{ __('Enable Invoices') }} </label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- logo -->
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="logo">{{ __('Logo') }}:</label>
|
||||
<div class="custom-file mb-3">
|
||||
<input type="file" accept="image/png,image/jpeg,image/jpg" class="custom-file-input"
|
||||
name="logo" id="logo">
|
||||
<label class="custom-file-label selected"
|
||||
for="favicon">{{ __('Select Invoice Logo') }}</label>
|
||||
</div>
|
||||
</div>
|
||||
@error('logo')
|
||||
<span class="text-danger">
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<button class="btn btn-primary mt-3 ml-3">{{ __('Submit') }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
|
@ -1,91 +0,0 @@
|
|||
<div class="tab-pane mt-3" id="language">
|
||||
<form method="POST" enctype="multipart/form-data" class="mb-3"
|
||||
action="{{ route('admin.settings.update.languagesettings') }}">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3 p-3">
|
||||
<div class="form-group">
|
||||
<!-- AVAILABLE LANGUAGES -->
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<label for="languages">{{ __('Available languages') }}:</label>
|
||||
<select id="languages" style="width:100%" class="custom-select" name="languages[]" required
|
||||
multiple="multiple" autocomplete="off" @error('defaultLanguage') is-invalid @enderror>
|
||||
|
||||
@foreach (config('app.available_locales') as $lang)
|
||||
<option value="{{ $lang }}" @if (strpos(config('SETTINGS::LOCALE:AVAILABLE'), $lang) !== false) selected @endif>
|
||||
{{ __($lang) }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- DEFAULT LANGUAGE -->
|
||||
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<label for="defaultLanguage">{{ __('Default language') }}:
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{ __('The fallback Language, if something goes wrong') }}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
|
||||
<select id="defaultLanguage" style="width:100%" class="custom-select" name="defaultLanguage"
|
||||
required autocomplete="off" @error('defaultLanguage') is-invalid @enderror>
|
||||
@foreach (config('app.available_locales') as $lang)
|
||||
<option value="{{ $lang }}" @if (config('SETTINGS::LOCALE:DEFAULT') == $lang) selected
|
||||
@endif>{{ __($lang) }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<!--DATATABLE LANGUAGE -->
|
||||
<label for="datatable-language">{{ __('Datable language') }} <i data-toggle="popover"
|
||||
data-trigger="hover" data-html="true"
|
||||
data-content="{{ __('The datatables lang-code. <br><strong>Example:</strong> en-gb, fr_fr, de_de<br>More Information: ') }} https://datatables.net/plug-ins/i18n/"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<input x-model="datatable-language" id="datatable-language" name="datatable-language"
|
||||
type="text" required value="{{ config('SETTINGS::LOCALE:DATATABLES') }}"
|
||||
class="form-control @error('datatable-language') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-3 p-3">
|
||||
|
||||
<!-- AUTO TRANSLATE -->
|
||||
<div class="form-group">
|
||||
<input value="true" id="autotranslate" name="autotranslate"
|
||||
{{ config('SETTINGS::LOCALE:DYNAMIC') == 'true' ? 'checked' : '' }} type="checkbox">
|
||||
<label for="autotranslate">{{ __('Auto-translate') }} <i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="{{ __('If this is checked, the Dashboard will translate itself to the Clients language, if available') }}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
|
||||
<br />
|
||||
|
||||
<!-- CLIENTS CAN CHANGE -->
|
||||
<input value="true" id="canClientChangeLanguage" name="canClientChangeLanguage"
|
||||
{{ config('SETTINGS::LOCALE:CLIENTS_CAN_CHANGE') == 'true' ? 'checked' : '' }}
|
||||
type="checkbox">
|
||||
<label for="canClientChangeLanguage">{{ __('Client Language-Switch') }} <i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="{{ __('If this is checked, Clients will have the ability to manually change their Dashboard language') }}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<button class="btn btn-primary mt-3 ml-3">{{ __('Submit') }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
$('.custom-select').select2();
|
||||
})
|
||||
</script>
|
|
@ -1,308 +0,0 @@
|
|||
<div class="tab-pane mt-3" id="misc">
|
||||
<form method="POST" enctype="multipart/form-data" class="mb-3"
|
||||
action="{{ route('admin.settings.update.miscsettings') }}">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<div class="row">
|
||||
|
||||
{{-- E-Mail --}}
|
||||
<div class="col-md-3 px-3">
|
||||
<div class="row mb-2">
|
||||
<div class="col text-center">
|
||||
<h1>E-Mail</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<label for="mailservice">{{ __('Mail Service') }}:
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{ __('The Mailer to send e-mails with') }}" class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<select id="mailservice" style="width:100%" class="custom-select" name="mailservice" required
|
||||
autocomplete="off" @error('mailservice') is-invalid @enderror>
|
||||
@foreach (array_keys(config('mail.mailers')) as $mailer)
|
||||
<option value="{{ $mailer }}" @if (config('SETTINGS::MAIL:MAILER') == $mailer) selected
|
||||
@endif>{{ __($mailer) }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="mailhost">{{ __('Mail Host') }}:</label>
|
||||
<input x-model="mailhost" id="mailhost" name="mailhost" type="text"
|
||||
value="{{ config('SETTINGS::MAIL:HOST') }}"
|
||||
class="form-control @error('mailhost') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="mailport">{{ __('Mail Port') }}:</label>
|
||||
<input x-model="mailhost" id="mailport" name="mailport" type="text"
|
||||
value="{{ config('SETTINGS::MAIL:PORT') }}"
|
||||
class="form-control @error('mailport') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="mailusername">{{ __('Mail Username') }}:</label>
|
||||
<input x-model="mailusername" id="mailusername" name="mailusername" type="text"
|
||||
value="{{ config('SETTINGS::MAIL:USERNAME') }}"
|
||||
class="form-control @error('mailusername') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="mailpassword">{{ __('Mail Password') }}:</label>
|
||||
<input x-model="mailpassword" id="mailpassword" name="mailpassword" type="password"
|
||||
value="{{ config('SETTINGS::MAIL:PASSWORD') }}"
|
||||
class="form-control @error('mailpassword') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="mailencryption">{{ __('Mail Encryption') }}:</label>
|
||||
<input x-model="mailencryption" id="mailencryption" name="mailencryption" type="text"
|
||||
value="{{ config('SETTINGS::MAIL:ENCRYPTION') }}"
|
||||
class="form-control @error('mailencryption') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="mailfromadress">{{ __('Mail From Adress') }}:</label>
|
||||
<input x-model="mailfromadress" id="mailfromadress" name="mailfromadress" type="text"
|
||||
value="{{ config('SETTINGS::MAIL:FROM_ADDRESS') }}"
|
||||
class="form-control @error('mailfromadress') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="mailfromname">{{ __('Mail From Name') }}:</label>
|
||||
<input x-model="mailfromname" id="mailfromname" name="mailfromname" type="text"
|
||||
value="{{ config('SETTINGS::MAIL:FROM_NAME') }}"
|
||||
class="form-control @error('mailfromname') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- DISCORD -->
|
||||
<div class="col-md-3 px-3">
|
||||
<div class="row mb-2">
|
||||
<div class="col text-center">
|
||||
<h1>Discord</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="discord-client-id">{{ __('Discord Client-ID') }}:</label>
|
||||
<input x-model="discord-client-id" id="discord-client-id" name="discord-client-id" type="text"
|
||||
value="{{ config('SETTINGS::DISCORD:CLIENT_ID') }}"
|
||||
class="form-control @error('discord-client-id') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="discord-client-secret">{{ __('Discord Client-Secret') }}:</label>
|
||||
<input x-model="discord-client-secret" id="discord-client-secret" name="discord-client-secret"
|
||||
type="text" value="{{ config('SETTINGS::DISCORD:CLIENT_SECRET') }}"
|
||||
class="form-control @error('discord-client-secret') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="discord-client-secret">{{ __('Discord Bot-Token') }}:</label>
|
||||
<input x-model="discord-bot-token" id="discord-bot-token" name="discord-bot-token" type="text"
|
||||
value="{{ config('SETTINGS::DISCORD:BOT_TOKEN') }}"
|
||||
class="form-control @error('discord-bot-token') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="discord-client-secret">{{ __('Discord Guild-ID') }}:</label>
|
||||
<input x-model="discord-guild-id" id="discord-guild-id" name="discord-guild-id" type="number"
|
||||
value="{{ config('SETTINGS::DISCORD:GUILD_ID') }}"
|
||||
class="form-control @error('discord-guild-id') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="discord-invite-url">{{ __('Discord Invite-URL') }}:</label>
|
||||
<input x-model="discord-invite-url" id="discord-invite-url" name="discord-invite-url"
|
||||
type="text" value="{{ config('SETTINGS::DISCORD:INVITE_URL') }}"
|
||||
class="form-control @error('discord-invite-url') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="discord-role-id">{{ __('Discord Role-ID') }}:</label>
|
||||
<input x-model="discord-role-id" id="discord-role-id" name="discord-role-id" type="number"
|
||||
value="{{ config('SETTINGS::DISCORD:ROLE_ID') }}"
|
||||
class="form-control @error('discord-role-id') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-md-3 px-3">
|
||||
<div class="row mb-2">
|
||||
<div class="col text-center">
|
||||
<h1>ReCaptcha</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<div class="col m-0 p-0 d-flex justify-content-between align-items-center">
|
||||
<div>
|
||||
<input value="true" id="enable-recaptcha" name="enable-recaptcha"
|
||||
{{ config('SETTINGS::RECAPTCHA:ENABLED') == 'true' ? 'checked' : '' }}
|
||||
type="checkbox">
|
||||
<label for="enable-recaptcha">{{ __('Enable ReCaptcha') }} </label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="recaptcha-site-key">{{ __('ReCaptcha Site-Key') }}:</label>
|
||||
<input x-model="recaptcha-site-key" id="recaptcha-site-key" name="recaptcha-site-key"
|
||||
type="text" value="{{ config('SETTINGS::RECAPTCHA:SITE_KEY') }}"
|
||||
class="form-control @error('recaptcha-site-key') is-invalid @enderror">
|
||||
@error('recaptcha-site-key')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="recaptcha-secret-key">{{ __('ReCaptcha Secret-Key') }}:</label>
|
||||
<input x-model="recaptcha-secret-key" id="recaptcha-secret-key" name="recaptcha-secret-key"
|
||||
type="text" value="{{ config('SETTINGS::RECAPTCHA:SECRET_KEY') }}"
|
||||
class="form-control @error('recaptcha-secret-key') is-invalid @enderror">
|
||||
@error('recaptcha-secret-key')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
@if(config('SETTINGS::RECAPTCHA:ENABLED') == 'true')
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0" style="transform:scale(0.77); transform-origin:0 0;">
|
||||
<label style="font-size: 1.3rem;">{{ __('Your Recaptcha') }}:</label>
|
||||
{!! htmlScriptTagJsApi() !!}
|
||||
{!! htmlFormSnippet() !!}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
<div class="col-md-3 px-3">
|
||||
<div class="row mb-2">
|
||||
<div class="col text-center">
|
||||
<h1>{{__("Referral System")}}</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<div class="col m-0 p-0 d-flex justify-content-between align-items-center">
|
||||
<div>
|
||||
<input value="true" id="enable_referral" name="enable_referral"
|
||||
{{ config('SETTINGS::REFERRAL::ENABLED') == 'true' ? 'checked' : '' }}
|
||||
type="checkbox">
|
||||
<label for="enable_referral">{{ __('Enable Referral') }} </label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<div class="col m-0 p-0 d-flex justify-content-between align-items-center">
|
||||
<div>
|
||||
<input value="true" id="always_give_commission" name="always_give_commission"
|
||||
{{ config('SETTINGS::REFERRAL::ALWAYS_GIVE_COMMISSION') == 'true' ? 'checked' : '' }}
|
||||
type="checkbox">
|
||||
<label for="always_give_commission">{{ __('Always give commission') }}:
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{ __('Should users recieve the commission only for the first payment, or for every payment?') }}" class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<label for="referral_mode">{{ __('Mode') }}:
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{ __('Should a reward be given if a new User registers or if a new user buys credits') }}" class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<select id="referral_mode" style="width:100%" class="custom-select" name="referral_mode" required
|
||||
autocomplete="off" @error('referral_mode') is-invalid @enderror>
|
||||
<option value="commission" @if (config('SETTINGS::REFERRAL:MODE') == "commission") selected
|
||||
@endif>{{ __("Commission") }}</option>
|
||||
<option value="sign-up" @if (config('SETTINGS::REFERRAL:MODE') == "sign-up") selected
|
||||
@endif>{{ __("Sign-Up") }}</option>
|
||||
<option value="both" @if (config('SETTINGS::REFERRAL:MODE') == "both") selected
|
||||
@endif>{{ __("Both") }}</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="referral_percentage">{{ __('Referral reward in percent') }} {{__("(only for commission-mode)")}}:
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{ __('If a referred user buys credits, the referral-user will get x% of the Credits the referred user bought') }}" class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<input x-model="referral_percentage" id="referral_percentage" name="referral_percentage"
|
||||
type="number" min="0" max="99999999" value="{{ config('SETTINGS::REFERRAL:PERCENTAGE') }}"
|
||||
class="form-control @error('referral_percentage') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="referral_reward">{{ __('Referral reward in') }} {{ config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME', 'Credits') }} {{__("(only for sign-up-mode)")}}:</label>
|
||||
<input x-model="referral_reward" id="referral_reward" name="referral_reward"
|
||||
type="number" min="0" max="99999999" value="{{ config('SETTINGS::REFERRAL::REWARD') }}"
|
||||
class="form-control @error('referral_reward') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<label for="referral_allowed">{{ __('Allowed') }}:
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{ __('Who is allowed to see their referral-URL') }}" class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<select id="referral_allowed" style="width:100%" class="custom-select" name="referral_allowed" required
|
||||
autocomplete="off" @error('referral_allowed') is-invalid @enderror>
|
||||
<option value="everyone" @if (config('SETTINGS::REFERRAL::ALLOWED') == "everyone") selected
|
||||
@endif>{{ __("Everyone") }}</option>
|
||||
<option value="client" @if (config('SETTINGS::REFERRAL::ALLOWED') == "client") selected
|
||||
@endif>{{ __("Clients") }}</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col text-center">
|
||||
<h1>Ticket System</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<div class="col m-0 p-0 d-flex justify-content-between align-items-center">
|
||||
<div>
|
||||
<input value="true" id="ticket_enabled" name="ticket_enabled"
|
||||
{{ config('SETTINGS::TICKET:ENABLED') == 'true' ? 'checked' : '' }}
|
||||
type="checkbox">
|
||||
<label for="ticket_enabled">{{ __('Enable Ticketsystem') }} </label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row">
|
||||
<button class="btn btn-primary mt-3 ml-3">{{ __('Submit') }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
|
@ -1,144 +0,0 @@
|
|||
<div class="tab-pane mt-3" id="payment">
|
||||
<form method="POST" enctype="multipart/form-data" class="mb-3"
|
||||
action="{{ route('admin.settings.update.paymentsettings') }}">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<div class="row">
|
||||
{{-- PayPal --}}
|
||||
<div class="col-md-3 px-3">
|
||||
<div class="row mb-2">
|
||||
<div class="col text-center">
|
||||
<h1>PayPal</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="paypal-client-id">{{ __('PayPal Client-ID') }}:</label>
|
||||
<input x-model="paypal-client-id" id="paypal-client-id" name="paypal-client-id" type="text"
|
||||
value="{{ config('SETTINGS::PAYMENTS:PAYPAL:CLIENT_ID') }}"
|
||||
class="form-control @error('paypal-client-id') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="paypal-client-secret">{{ __('PayPal Secret-Key') }}:</label>
|
||||
<input x-model="paypal-client-secret" id="paypal-client-secret" name="paypal-client-secret"
|
||||
type="text" value="{{ config('SETTINGS::PAYMENTS:PAYPAL:SECRET') }}"
|
||||
class="form-control @error('paypal-client-secret') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="paypal-sandbox-id">{{ __('PayPal Sandbox Client-ID') }}:</label>
|
||||
<small class="text-muted">({{ __('optional') }})</small>
|
||||
<input x-model="paypal-sandbox-id" id="paypal-sandbox-id" name="paypal-sandbox-id" type="text"
|
||||
value="{{ config('SETTINGS::PAYMENTS:PAYPAL:SANDBOX_CLIENT_ID') }}"
|
||||
class="form-control @error('paypal-sandbox-id') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="paypal-sandbox-secret">{{ __('PayPal Sandbox Secret-Key') }}:</label>
|
||||
<small class="text-muted">({{ __('optional') }})</small>
|
||||
<input x-model="paypal-sandbox-secret" id="paypal-sandbox-secret" name="paypal-sandbox-secret"
|
||||
type="text" value="{{ config('SETTINGS::PAYMENTS:PAYPAL:SANDBOX_SECRET') }}"
|
||||
class="form-control @error('paypal-sandbox-secret') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Stripe --}}
|
||||
<div class="col-md-3 px-3">
|
||||
|
||||
<div class="row mb-2">
|
||||
<div class="col text-center">
|
||||
<h1>Stripe</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="stripe-secret">{{ __('Stripe Secret-Key') }}:</label>
|
||||
<input x-model="stripe-secret" id="stripe-secret" name="stripe-secret" type="text"
|
||||
value="{{ config('SETTINGS::PAYMENTS:STRIPE:SECRET') }}"
|
||||
class="form-control @error('stripe-secret') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="stripe-endpoint-secret">{{ __('Stripe Endpoint-Secret-Key') }}:</label>
|
||||
<input x-model="stripe-endpoint-secret" id="stripe-endpoint-secret"
|
||||
name="stripe-endpoint-secret" type="text"
|
||||
value="{{ config('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_SECRET') }}"
|
||||
class="form-control @error('stripe-endpoint-secret') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="stripe-test-secret">{{ __('Stripe Test Secret-Key') }}:</label>
|
||||
<small class="text-muted">({{ __('optional') }})</small>
|
||||
<input x-model="stripe-test-secret" id="stripe-test-secret" name="stripe-test-secret"
|
||||
type="text" value="{{ config('SETTINGS::PAYMENTS:STRIPE:TEST_SECRET') }}"
|
||||
class="form-control @error('stripe-test-secret') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<label for="stripe-endpoint-test-secret">{{ __('Stripe Test Endpoint-Secret-Key') }}:</label>
|
||||
<small class="text-muted">({{ __('optional') }})</small>
|
||||
<input x-model="stripe-endpoint-test-secret" id="stripe-endpoint-test-secret"
|
||||
name="stripe-endpoint-test-secret" type="text"
|
||||
value="{{ config('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_TEST_SECRET') }}"
|
||||
class="form-control @error('stripe-endpoint-test-secret') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<div class="col m-0 p-0 d-flex justify-content-between align-items-center">
|
||||
<label for="stripe-methods">{{ __('Payment Methods') }}:</label>
|
||||
<i data-toggle="popover" data-trigger="hover" data-html="true"
|
||||
data-content="Comma separated list of payment methods without whitespaces. <br><br> Example: card,klarna,sepa"
|
||||
class="fas fa-info-circle"></i>
|
||||
</div>
|
||||
<input x-model="stripe-methods" id="stripe-methods" name="stripe-methods" type="text"
|
||||
value="{{ config('SETTINGS::PAYMENTS:STRIPE:METHODS') }}"
|
||||
class="form-control @error('stripe-methods') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Other --}}
|
||||
<div class="col-md-3 px-3">
|
||||
<div class="row mb-2">
|
||||
<div class="col text-center">
|
||||
<h1>Other</h1>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Tax -->
|
||||
<div class="form-group mb-3">
|
||||
<div class="custom-control p-0">
|
||||
<div class="col m-0 p-0 d-flex justify-content-between align-items-center">
|
||||
<label for="sales-tax">{{ __('Tax Value in %') }}:</label>
|
||||
<i data-toggle="popover" data-trigger="hover" data-html="true"
|
||||
data-content="Tax Value that will be added to the total price of the order. <br><br> Example: 19 results in (19%)"
|
||||
class="fas fa-info-circle"></i>
|
||||
</div>
|
||||
<input x-model="sales-tax" id="sales-tax" name="sales-tax" type="number" step="0.01" min="0" max="99999999"
|
||||
value="{{ config('SETTINGS::PAYMENTS:SALES_TAX') }}"
|
||||
class="form-control @error('sales-tax') is-invalid @enderror">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<button class="btn btn-primary ml-3 mt-3">{{ __('Submit') }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
|
@ -1 +0,0 @@
|
|||
you shall not pass nigger
|
|
@ -1,167 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Store')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.store.index')}}">{{__('Store')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.store.create')}}">{{__('Create')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.store.store')}}" method="POST">
|
||||
@csrf
|
||||
<div class="d-flex flex-row-reverse">
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" name="disabled"
|
||||
class="custom-control-input custom-control-input-danger"
|
||||
id="switch1">
|
||||
<label class="custom-control-label" for="switch1">{{__('Disabled')}} <i
|
||||
data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="{{__('Will hide this option from being selected')}}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="type">{{__('Type')}}</label>
|
||||
<select required name="type" id="type"
|
||||
class="custom-select @error('name') is-invalid @enderror">
|
||||
<option selected value="Credits">{{CREDITS_DISPLAY_NAME}}</option>
|
||||
<option value="Server slots">{{__("Server Slots")}}</option>
|
||||
</select>
|
||||
@error('name')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="currency_code">{{__('Currency code')}}</label>
|
||||
<select required name="currency_code" id="currency_code"
|
||||
class="custom-select @error('name') is-invalid @enderror">
|
||||
@foreach($currencyCodes as $code)
|
||||
<option @if($code == 'EUR') selected
|
||||
@endif value="{{$code}}">{{$code}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('currency_code')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{__('Checkout the paypal docs to select the appropriate code')}} <a
|
||||
target="_blank"
|
||||
href="https://developer.paypal.com/docs/api/reference/currency-codes/">link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="price">{{__('Price')}}</label>
|
||||
<input value="{{old('price')}}" id="price" name="price"
|
||||
type="number"
|
||||
placeholder="10.00"
|
||||
step="any"
|
||||
class="form-control @error('price') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('price')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="quantity">{{__('Quantity')}}</label>
|
||||
<input value="{{old('quantity')}}" id="quantity" name="quantity"
|
||||
type="number"
|
||||
placeholder="1000"
|
||||
class="form-control @error('quantity') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('quantity')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{__('Amount given to the user after purchasing')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="display">{{__('Display')}}</label>
|
||||
<input value="{{old('display')}}" id="display" name="display"
|
||||
type="text"
|
||||
placeholder="750 + 250"
|
||||
class="form-control @error('display') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('display')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{__('This is what the user sees at store and checkout')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="description">{{__('Description')}}</label>
|
||||
<input value="{{old('description')}}" id="description" name="description"
|
||||
type="text"
|
||||
placeholder="{{__('Adds 1000 credits to your account')}}"
|
||||
class="form-control @error('description') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('description')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{__('This is what the user sees at checkout')}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,157 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Store') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.store.index') }}">{{ __('Store') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('admin.store.edit', $shopProduct->id) }}">{{ __('Edit') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{ route('admin.store.update', $shopProduct->id) }}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
<div class="d-flex flex-row-reverse">
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" @if ($shopProduct->disabled) checked @endif name="disabled"
|
||||
class="custom-control-input custom-control-input-danger" id="switch1">
|
||||
<label class="custom-control-label" for="switch1">{{ __('Disabled') }} <i
|
||||
data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{ __('Will hide this option from being selected') }}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="type">{{ __('Type') }}</label>
|
||||
<select required name="type" id="type"
|
||||
class="custom-select @error('name') is-invalid @enderror">
|
||||
<option @if ($shopProduct->type == 'credits') selected @endif value="Credits">{{ CREDITS_DISPLAY_NAME }}</option>
|
||||
<option @if ($shopProduct->type == 'Server slots') selected @endif value="Server slots">{{__("Server Slots")}}</option>
|
||||
</select>
|
||||
@error('name')
|
||||
<div class="text-danger">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="currency_code">{{ __('Currency code') }}</label>
|
||||
<select required name="currency_code" id="currency_code"
|
||||
class="custom-select @error('name') is-invalid @enderror">
|
||||
@foreach ($currencyCodes as $code)
|
||||
<option @if ($shopProduct->currency_code == $code) selected @endif value="{{ $code }}">
|
||||
{{ $code }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('currency_code')
|
||||
<div class="text-danger">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{ __('Checkout the paypal docs to select the appropriate code') }} <a
|
||||
target="_blank"
|
||||
href="https://developer.paypal.com/docs/api/reference/currency-codes/">link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="price">Price</label>
|
||||
<input value="{{ $shopProduct->price }}" id="price" name="price" type="number"
|
||||
placeholder="10.00" step="any"
|
||||
class="form-control @error('price') is-invalid @enderror" required="required">
|
||||
@error('price')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="quantity">Quantity</label>
|
||||
<input value="{{ $shopProduct->quantity }}" id="quantity" name="quantity"
|
||||
type="number" placeholder="1000"
|
||||
class="form-control @error('quantity') is-invalid @enderror" required="required">
|
||||
@error('quantity')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{ __('Amount given to the user after purchasing') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="display">Display</label>
|
||||
<input value="{{ $shopProduct->display }}" id="display" name="display" type="text"
|
||||
placeholder="750 + 250" class="form-control @error('display') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('display')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{ __('This is what the user sees at store and checkout') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="description">Description</label>
|
||||
<input value="{{ $shopProduct->description }}" id="description" name="description"
|
||||
type="text" placeholder="{{ __('Adds 1000 credits to your account') }}"
|
||||
class="form-control @error('description') is-invalid @enderror" required="required">
|
||||
@error('description')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{ __('This is what the user sees at checkout') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('Submit') }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,127 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Store') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('admin.store.index') }}">{{ __('Store') }}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
@if ($isPaymentSetup == false)
|
||||
<div class="callout callout-danger">
|
||||
<h4>{{ __('No payment method is configured.') }}</h4>
|
||||
<p>{{ __('To configure the payment methods, head to the settings-page and add the required options for your prefered payment method.') }}
|
||||
</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-sliders-h mr-2"></i>{{ __('Store') }}</h5>
|
||||
<a href="{{ route('admin.store.create') }}" class="btn btn-sm btn-primary"><i
|
||||
class="fas fa-plus mr-1"></i>{{ __('Create new') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('Active') }}</th>
|
||||
<th>{{ __('Type') }}</th>
|
||||
<th>{{ __('Price') }}</th>
|
||||
<th>{{ __('Display') }}</th>
|
||||
<th>{{ __('Description') }}</th>
|
||||
<th>{{ __('Created at') }}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm("Are you sure you wish to delete?") !== false;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{ config('app.datatable_locale') }}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{ route('admin.store.datatable') }}",
|
||||
order: [
|
||||
[2, "desc"]
|
||||
],
|
||||
columns: [{
|
||||
data: 'disabled'
|
||||
},
|
||||
{
|
||||
data: 'type'
|
||||
},
|
||||
{
|
||||
data: 'price'
|
||||
},
|
||||
{
|
||||
data: 'display'
|
||||
},
|
||||
{
|
||||
data: 'description'
|
||||
},
|
||||
{
|
||||
data: 'created_at'
|
||||
},
|
||||
{
|
||||
data: 'actions',
|
||||
sortable: false
|
||||
},
|
||||
],
|
||||
fnDrawCallback: function(oSettings) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,132 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Useful Links')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a
|
||||
href="{{route('admin.usefullinks.index')}}">{{__('Useful Links')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.usefullinks.create')}}">{{__('Create')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.usefullinks.store')}}" method="POST">
|
||||
@csrf
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="icon">{{__('Icon class name')}}</label>
|
||||
<input value="{{old('icon')}}" id="icon" name="icon"
|
||||
type="text"
|
||||
placeholder="fas fa-user"
|
||||
class="form-control @error('icon') is-invalid @enderror"
|
||||
required="required">
|
||||
<div class="text-muted">
|
||||
{{__('You can find available free icons')}} <a target="_blank"
|
||||
href="https://fontawesome.com/v5.15/icons?d=gallery&p=2">here</a>
|
||||
</div>
|
||||
@error('icon')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="title">{{__('Title')}}</label>
|
||||
<input value="{{old('title')}}" id="title" name="title"
|
||||
type="text"
|
||||
class="form-control @error('title') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('title')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="link">{{__('Link')}}</label>
|
||||
<input value="{{old('link')}}" id="link" name="link"
|
||||
type="text"
|
||||
class="form-control @error('link') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('link')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="description">{{__('Description')}}</label>
|
||||
<textarea id="description"
|
||||
name="description"
|
||||
type="text"
|
||||
class="form-control @error('description') is-invalid @enderror">
|
||||
{{old('description')}}
|
||||
</textarea>
|
||||
@error('description')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
// Summernote
|
||||
$('#description').summernote({
|
||||
height: 100,
|
||||
toolbar: [
|
||||
['style', ['style']],
|
||||
['font', ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'clear']],
|
||||
['fontname', ['fontname']],
|
||||
['fontsize', ['fontsize']],
|
||||
['color', ['color']],
|
||||
['para', ['ol', 'ul', 'paragraph', 'height']],
|
||||
['table', ['table']],
|
||||
['insert', ['link']],
|
||||
['view', ['undo', 'redo', 'fullscreen', 'codeview', 'help']]
|
||||
]
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
@endsection
|
|
@ -1,134 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Useful Links')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a
|
||||
href="{{route('admin.usefullinks.index')}}">{{__('Useful Links')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.usefullinks.edit' , $link->id)}}">{{__('Edit')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.usefullinks.update' , $link->id)}}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="icon">{{__('Icon class name')}}</label>
|
||||
<input value="{{$link->icon}}" id="icon" name="icon"
|
||||
type="text"
|
||||
placeholder="fas fa-user"
|
||||
class="form-control @error('icon') is-invalid @enderror"
|
||||
required="required">
|
||||
<div class="text-muted">
|
||||
{{__('You can find available free icons')}} <a target="_blank"
|
||||
href="https://fontawesome.com/v5.15/icons?d=gallery&p=2">here</a>
|
||||
</div>
|
||||
@error('icon')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="title">{{__('Title')}}</label>
|
||||
<input value="{{$link->title}}" id="title" name="title"
|
||||
type="text"
|
||||
class="form-control @error('title') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('title')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="link">{{__('Link')}}</label>
|
||||
<input value="{{$link->link}}" id="link" name="link"
|
||||
type="text"
|
||||
class="form-control @error('link') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('link')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="description">{{__('Description')}}</label>
|
||||
<textarea id="description"
|
||||
name="description"
|
||||
type="text"
|
||||
class="form-control @error('description') is-invalid @enderror">
|
||||
{{$link->description}}
|
||||
</textarea>
|
||||
@error('description')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
// Summernote
|
||||
$('#description').summernote({
|
||||
height: 100,
|
||||
toolbar: [
|
||||
['style', ['style']],
|
||||
['font', ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'clear']],
|
||||
['fontname', ['fontname']],
|
||||
['fontsize', ['fontsize']],
|
||||
['color', ['color']],
|
||||
['para', ['ol', 'ul', 'paragraph', 'height']],
|
||||
['table', ['table']],
|
||||
['insert', ['link']],
|
||||
['view', ['undo', 'redo', 'fullscreen', 'codeview', 'help']]
|
||||
]
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
@endsection
|
|
@ -1,94 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Useful Links')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.usefullinks.index')}}">{{__('Useful Links')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-sliders-h mr-2"></i>{{__('Useful Links')}}</h5>
|
||||
<a href="{{route('admin.usefullinks.create')}}" class="btn btn-sm btn-primary"><i
|
||||
class="fas fa-plus mr-1"></i>{{__('Create new')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('description')}}</th>
|
||||
<th width="50">{{__('Icon')}}</th>
|
||||
<th>{{__('Title')}}</th>
|
||||
<th>{{__('Link')}}</th>
|
||||
<th>{{__('Created at')}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm("{{__('Are you sure you wish to delete?')}}") !== false;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('admin.usefullinks.datatable')}}",
|
||||
order: [[ 1, "asc" ]],
|
||||
columns: [
|
||||
{data: 'description' ,visible: false},
|
||||
{data: 'icon'},
|
||||
{data: 'title'},
|
||||
{data: 'link'},
|
||||
{data: 'created_at'},
|
||||
{data: 'actions', sortable: false},
|
||||
],
|
||||
fnDrawCallback: function( oSettings ) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,185 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Users')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.users.index')}}">{{__('Users')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.users.edit' , $user->id)}}">{{__('Edit')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.users.update', $user->id)}}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
<div class="form-group">
|
||||
<label for="name">{{__('Username')}}</label>
|
||||
<input value="{{$user->name}}" id="name" name="name" type="text"
|
||||
class="form-control @error('name') is-invalid @enderror" required="required">
|
||||
@error('name')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email">{{__('Email')}}</label>
|
||||
<input value="{{$user->email}}" id="email" name="email" type="text"
|
||||
class="form-control @error('email') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('email')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="pterodactyl_id">{{__('Pterodactyl ID')}}</label>
|
||||
<input value="{{$user->pterodactyl_id}}" id="pterodactyl_id" name="pterodactyl_id"
|
||||
type="number"
|
||||
class="form-control @error('pterodactyl_id') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('pterodactyl_id')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
<div class="text-muted">
|
||||
{{__('This ID refers to the user account created on pterodactyls panel.')}} <br>
|
||||
<small>{{__('Only edit this if you know what youre doing :)')}}</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="credits">{{CREDITS_DISPLAY_NAME}}</label>
|
||||
<input value="{{$user->credits}}" id="credits" name="credits" step="any" min="0"
|
||||
max="99999999"
|
||||
type="number" class="form-control @error('credits') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('credits')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="server_limit">{{__('Server Limit')}}</label>
|
||||
<input value="{{$user->server_limit}}" id="server_limit" name="server_limit" min="0"
|
||||
max="1000000"
|
||||
type="number"
|
||||
class="form-control @error('server_limit') is-invalid @enderror"
|
||||
required="required">
|
||||
@error('server_limit')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="role">{{__('Role')}}</label>
|
||||
<div>
|
||||
<select id="role" name="role"
|
||||
class="custom-select @error('role') is-invalid @enderror"
|
||||
required="required">
|
||||
<option @if($user->role == 'admin') selected @endif class="text-danger"
|
||||
value="admin">
|
||||
{{__(' Administrator')}}
|
||||
</option>
|
||||
<option @if($user->role == 'moderator') selected @endif class="text-info" value="moderator">
|
||||
{{__('Moderator')}}
|
||||
</option>
|
||||
<option @if($user->role == 'client') selected @endif class="text-success"
|
||||
value="client">
|
||||
{{__('Client')}}
|
||||
</option>
|
||||
<option @if($user->role == 'member') selected @endif class="text-secondary"
|
||||
value="member">
|
||||
{{__('Member')}}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="name">{{__('Referral-Code')}}</label>
|
||||
<input value="{{$user->referral_code}}" id="referral_code" name="referral_code" type="text"
|
||||
class="form-control @error('referral_code') is-invalid @enderror" required="required">
|
||||
@error('referral_code')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
@error('role')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">{{__('Submit')}}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="col">
|
||||
<div class="form-group"><label>{{__('New Password')}}</label> <input
|
||||
class="form-control @error('new_password') is-invalid @enderror"
|
||||
name="new_password" type="password" placeholder="••••••">
|
||||
|
||||
@error('new_password')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="form-group"><label>{{__('Confirm Password')}}</label>
|
||||
<input
|
||||
class="form-control @error('new_password_confirmation') is-invalid @enderror"
|
||||
name="new_password_confirmation" type="password"
|
||||
placeholder="••••••">
|
||||
|
||||
@error('new_password_confirmation')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,108 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Users')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted" href="{{route('admin.users.index')}}">{{__('Users')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-users mr-2"></i>{{__('Users')}}</h5>
|
||||
<a href="{{route('admin.users.notifications')}}" class="btn btn-sm btn-primary"><i
|
||||
class="fas fa-paper-plane mr-1"></i>{{__('Notify')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>discordId</th>
|
||||
<th>ip</th>
|
||||
<th>pterodactyl_id</th>
|
||||
<th>{{__('Avatar')}}</th>
|
||||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('Role')}}</th>
|
||||
<th>{{__('Email')}}</th>
|
||||
<th>{{CREDITS_DISPLAY_NAME}}</th>
|
||||
<th>{{__('Servers')}}</th>
|
||||
<th>{{__("Referrals")}}</th>
|
||||
<th>{{__('Verified')}}</th>
|
||||
<th>{{__('Last seen')}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm("{{__('Are you sure you wish to delete?')}}") !== false;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: false, //increases loading times too much? change back to "true" if it does
|
||||
stateSave: true,
|
||||
ajax: "{{route('admin.users.datatable')}}",
|
||||
order: [[ 11, "asc" ]],
|
||||
columns: [
|
||||
{data: 'discordId', visible: false, name: 'discordUser.id'},
|
||||
{data: 'pterodactyl_id', visible: false},
|
||||
{data: 'ip', visible: false},
|
||||
{data: 'avatar' , sortable : false},
|
||||
{data: 'name'},
|
||||
{data: 'role'},
|
||||
{data: 'email', name: 'users.email'},
|
||||
{data: 'credits' , name : 'users.credits'},
|
||||
{data: 'servers'},
|
||||
{data: 'referrals'},
|
||||
{data: 'verified' , sortable : false},
|
||||
{data: 'last_seen', type: 'num', render: {_: 'display', sort: 'raw'}},
|
||||
{data: 'actions' , sortable : false},
|
||||
],
|
||||
fnDrawCallback: function( oSettings ) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,188 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Users')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.users.index')}}">{{__('Users')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.users.notifications')}}">{{__('Notifications')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.users.notifications')}}" method="POST">
|
||||
@csrf
|
||||
@method('POST')
|
||||
|
||||
<div class="form-group">
|
||||
<label>{{__('Users')}}</label><br>
|
||||
<input id="all" name="all"
|
||||
type="checkbox" value="1"
|
||||
onchange="toggleClass('users-form', 'd-none')">
|
||||
<label for="all">{{__('All')}}</label>
|
||||
<div id="users-form">
|
||||
<select id="users" name="users[]" class="form-control" multiple></select>
|
||||
</div>
|
||||
@error('all')
|
||||
<div class="invalid-feedback d-block">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
@error('users')
|
||||
<div class="invalid-feedback d-block">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>{{__('Send via')}}</label><br>
|
||||
<input value="database" id="database" name="via[]"
|
||||
type="checkbox">
|
||||
<label for="database">{{__('Database')}}</label>
|
||||
<br>
|
||||
<input value="mail" id="mail" name="via[]"
|
||||
type="checkbox">
|
||||
<label for="mail">{{__('Email')}}</label>
|
||||
@error('via')
|
||||
<div class="invalid-feedback d-block">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group" >
|
||||
<label for="title">{{__('Title')}}</label>
|
||||
<input value="{{old('title')}}" id="title" name="title"
|
||||
type="text"
|
||||
class="form-control @error('title') is-invalid @enderror">
|
||||
@error('title')
|
||||
<div class="invalid-feedback">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content">{{__('Content')}}</label>
|
||||
<textarea id="content"
|
||||
name="content"
|
||||
type="content"
|
||||
class="form-control @error('content') is-invalid @enderror">
|
||||
{{old('content')}}
|
||||
</textarea>
|
||||
@error('content')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">{{__('Submit')}}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
// Summernote
|
||||
$('#content').summernote({
|
||||
height: 100,
|
||||
toolbar: [
|
||||
[ 'style', [ 'style' ] ],
|
||||
[ 'font', [ 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'clear'] ],
|
||||
[ 'fontname', [ 'fontname' ] ],
|
||||
[ 'fontsize', [ 'fontsize' ] ],
|
||||
[ 'color', [ 'color' ] ],
|
||||
[ 'para', [ 'ol', 'ul', 'paragraph', 'height' ] ],
|
||||
[ 'table', [ 'table' ] ],
|
||||
[ 'insert', [ 'link'] ],
|
||||
[ 'view', [ 'undo', 'redo', 'fullscreen', 'codeview', 'help' ] ]
|
||||
]
|
||||
})
|
||||
|
||||
function initUserSelect(data) {
|
||||
$('#users').select2({
|
||||
ajax: {
|
||||
url: '/admin/users.json',
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
|
||||
data: function (params) {
|
||||
return {
|
||||
filter: { email: params.term },
|
||||
page: params.page,
|
||||
};
|
||||
},
|
||||
|
||||
processResults: function (data, params) {
|
||||
return { results: data };
|
||||
},
|
||||
|
||||
cache: true,
|
||||
},
|
||||
data: data,
|
||||
minimumInputLength: 2,
|
||||
templateResult: function (data) {
|
||||
if (data.loading) return data.text;
|
||||
const $container = $(
|
||||
"<div class='select2-result-users clearfix' style='display:flex;'>" +
|
||||
"<div class='select2-result-users__avatar' style='display:flex;align-items:center;'><img class='img-circle img-bordered-s' src='" + data.avatarUrl + "?s=40' /></div>" +
|
||||
"<div class='select2-result-users__meta' style='margin-left:10px'>" +
|
||||
"<div class='select2-result-users__username' style='font-size:16px;'></div>" +
|
||||
"<div class='select2-result-users__email' style='font-size=13px;'></div>" +
|
||||
"</div>" +
|
||||
"</div>"
|
||||
);
|
||||
|
||||
$container.find(".select2-result-users__username").text(data.name);
|
||||
$container.find(".select2-result-users__email").text(data.email);
|
||||
|
||||
return $container;
|
||||
},
|
||||
templateSelection: function (data) {
|
||||
$container = $('<div> \
|
||||
<span> \
|
||||
<img class="img-rounded img-bordered-xs" src="' + data.avatarUrl + '?s=120" style="height:24px;margin-top:-4px;" alt="User Image"> \
|
||||
</span> \
|
||||
<span class="select2-selection-users__username" style="padding-left:10px;padding-right:10px;"></span> \
|
||||
</div>');
|
||||
$container.find(".select2-selection-users__username").text(data.name);
|
||||
return $container;
|
||||
}
|
||||
})
|
||||
}
|
||||
initUserSelect()
|
||||
})
|
||||
|
||||
function toggleClass(id, className) {
|
||||
document.getElementById(id).classList.toggle(className)
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,293 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Users')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.users.index')}}">{{__('Users')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.users.show' , $user->id)}}">{{__('Show')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
@if($user->discordUser)
|
||||
<div class="row">
|
||||
<div class="col-lg-4 col-md-6">
|
||||
<div class="small-box bg-dark">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="p-3">
|
||||
<h3>{{$user->discordUser->username}} <sup>{{$user->discordUser->locale}}</sup></h3>
|
||||
<p>{{$user->discordUser->id}}
|
||||
</p>
|
||||
</div>
|
||||
<div class="p-3"><img width="100px" height="100px" class="rounded-circle"
|
||||
src="{{$user->discordUser->getAvatar()}}" alt="avatar"></div>
|
||||
</div>
|
||||
<div class="small-box-footer">
|
||||
<i class="fab fa-discord mr-1"></i>Discord
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title"><i class="fas fa-users mr-2"></i>{{__('Users')}}</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('ID')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{$user->id}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Role')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;"
|
||||
class="d-inline-block text-truncate badge {{$user->role == 'admin' || $user->role == 'mod' ? 'badge-info' : 'badge-secondary'}}">
|
||||
{{$user->role}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Pterodactyl ID')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{$user->pterodactyl_id}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Email')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{$user->email}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Server limit')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{$user->Servers()->count()}} / {{$user->server_limit}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Name')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{$user->name}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Verified')}} {{__('Email')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{$user->email_verified_at ? 'True' : 'False'}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{CREDITS_DISPLAY_NAME}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
<i class="fas fa-coins mr-2"></i>{{$user->Credits()}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Verified')}} {{__('Discord')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{$user->discordUser ? 'True' : 'False'}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Usage')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
<i class="fas fa-coins mr-2"></i>{{$user->CreditUsage()}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('IP')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{$user->ip}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Created at')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{$user->created_at->diffForHumans()}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Last seen')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
@if($user->last_seen)
|
||||
{{$user->last_seen->diffForHumans()}}
|
||||
@else
|
||||
<small
|
||||
class="text-muted">Null</small>
|
||||
@endif
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title"><i class="fas fa-server mr-2"></i>{{__('Servers')}}</h5>
|
||||
</div>
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
@include('admin.servers.table' , ['filter' => '?user=' . $user->id])
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title"><i class="fas fa-user-check mr-2"></i>{{__('Referals')}}
|
||||
({{__("referral-code")}}: {{$user->referral_code}})</h5>
|
||||
</div>
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
|
||||
@foreach($referrals as $referral)
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>User ID: {{$referral->id}}</label>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
<i class="fas fa-user-check mr-2"></i><a
|
||||
href="{{route("admin.users.show",$referral->id)}}">{{$referral->name}}</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
<i class="fas fa-clock mr-2"></i>{{$referral->created_at->diffForHumans()}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
@endsection
|
|
@ -1,192 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Vouchers')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.vouchers.index')}}">{{__('Vouchers')}}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.vouchers.create')}}">{{__('Create')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">
|
||||
<i class="fas fa-money-check-alt mr-2"></i>{{__('Voucher details')}}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.vouchers.store')}}" method="POST">
|
||||
@csrf
|
||||
|
||||
<div class="form-group">
|
||||
<label for="memo">{{__('Memo')}} <i data-toggle="popover" data-trigger="hover"
|
||||
data-content="Only admins can see this"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<input value="{{old('memo')}}" placeholder="{{__('Summer break voucher')}}" id="memo"
|
||||
name="memo" type="text"
|
||||
class="form-control @error('memo') is-invalid @enderror">
|
||||
@error('memo')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="credits">* {{CREDITS_DISPLAY_NAME}}</label>
|
||||
<input value="{{old('credits')}}" placeholder="500" id="credits" name="credits"
|
||||
type="number" step="any" min="0" max="99999999"
|
||||
class="form-control @error('credits') is-invalid @enderror">
|
||||
@error('credits')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="code">* {{__('Code')}}</label>
|
||||
<div class="input-group">
|
||||
<input value="{{old('code')}}" placeholder="SUMMER" id="code" name="code"
|
||||
type="text" class="form-control @error('code') is-invalid @enderror"
|
||||
required="required">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-info" onclick="setRandomCode()" type="button">
|
||||
{{__('Random')}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@error('code')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="uses">* {{__('Uses')}} <i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('A voucher can only be used one time per user. Uses specifies the number of different users that can use this voucher.')}}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<div class="input-group">
|
||||
<input value="{{old('uses') ?? 1}}" id="uses" min="1" max="2147483647"
|
||||
name="uses" type="number"
|
||||
class="form-control @error('uses') is-invalid @enderror"
|
||||
required="required">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-info" onclick="setMaxUses()" type="button">{{__('Max')}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@error('uses')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<label for="expires_at">{{__('Expires at')}} <i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="Timezone: {{ Config::get('app.timezone') }}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<div class="input-group date" id="expires_at" data-target-input="nearest">
|
||||
<input value="{{old('expires_at')}}" name="expires_at"
|
||||
placeholder="dd-mm-yyyy hh:mm:ss" type="text"
|
||||
class="form-control @error('expires_at') is-invalid @enderror datetimepicker-input"
|
||||
data-target="#expires_at"/>
|
||||
<div class="input-group-append" data-target="#expires_at"
|
||||
data-toggle="datetimepicker">
|
||||
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
@error('expires_at')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<i class="fas"></i>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
$('#expires_at').datetimepicker({
|
||||
format: 'DD-MM-yyyy HH:mm:ss',
|
||||
icons: {
|
||||
time: 'far fa-clock',
|
||||
date: 'far fa-calendar',
|
||||
up: 'fas fa-arrow-up',
|
||||
down: 'fas fa-arrow-down',
|
||||
previous: 'fas fa-chevron-left',
|
||||
next: 'fas fa-chevron-right',
|
||||
today: 'fas fa-calendar-check',
|
||||
clear: 'far fa-trash-alt',
|
||||
close: 'far fa-times-circle'
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
function setMaxUses() {
|
||||
let element = document.getElementById('uses')
|
||||
element.value = element.max;
|
||||
console.log(element.max)
|
||||
}
|
||||
|
||||
|
||||
function setRandomCode() {
|
||||
let element = document.getElementById('code')
|
||||
element.value = getRandomCode(36)
|
||||
}
|
||||
|
||||
function getRandomCode(length) {
|
||||
let result = '';
|
||||
let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-';
|
||||
let charactersLength = characters.length;
|
||||
for (let i = 0; i < length; i++) {
|
||||
result += characters.charAt(Math.floor(Math.random() *
|
||||
charactersLength));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,193 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Vouchers')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('admin.vouchers.index')}}">{{__('Vouchers')}}</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.vouchers.edit' , $voucher->id)}}">{{__('Edit')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">
|
||||
<i class="fas fa-money-check-alt mr-2"></i>{{__('Voucher details')}}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{route('admin.vouchers.update' , $voucher->id)}}" method="POST">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<div class="form-group">
|
||||
<label for="memo">{{__('Memo')}} <i data-toggle="popover" data-trigger="hover"
|
||||
data-content="Only admins can see this"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<input value="{{ $voucher->memo }}" placeholder="{{__('Summer break voucher')}}"
|
||||
id="memo" name="memo" type="text"
|
||||
class="form-control @error('memo') is-invalid @enderror">
|
||||
@error('memo')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="credits">{{CREDITS_DISPLAY_NAME}} *</label>
|
||||
<input value="{{$voucher->credits}}" placeholder="500" id="credits" name="credits"
|
||||
type="number" step="any" min="0" max="99999999"
|
||||
class="form-control @error('credits') is-invalid @enderror">
|
||||
@error('credits')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="code">{{__('Code')}} *</label>
|
||||
<div class="input-group">
|
||||
<input value="{{$voucher->code}}" placeholder="SUMMER" id="code" name="code"
|
||||
type="text" class="form-control @error('code') is-invalid @enderror"
|
||||
required="required">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-info" onclick="setRandomCode()" type="button">
|
||||
{{__('Random')}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@error('code')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="uses">{{__('Uses')}} * <i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{__('A voucher can only be used one time per user. Uses specifies the number of different users that can use this voucher.')}}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<div class="input-group">
|
||||
<input value="{{$voucher->uses}}" id="uses" min="1" max="2147483647" name="uses"
|
||||
type="number" class="form-control @error('uses') is-invalid @enderror"
|
||||
required="required">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-info" onclick="setMaxUses()"
|
||||
type="button">{{__('Max')}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@error('uses')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group mb-3">
|
||||
<label for="expires_at">{{__('Expires at')}} <i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="Timezone: {{ Config::get('app.timezone') }}"
|
||||
class="fas fa-info-circle"></i></label>
|
||||
<div class="input-group date" id="expires_at" data-target-input="nearest">
|
||||
<input
|
||||
value="{{$voucher->expires_at ? $voucher->expires_at->format('d-m-Y H:i:s') : ''}}"
|
||||
name="expires_at" placeholder="dd-mm-yyyy hh:mm:ss" type="text"
|
||||
class="form-control @error('expires_at') is-invalid @enderror datetimepicker-input"
|
||||
data-target="#expires_at"/>
|
||||
<div class="input-group-append" data-target="#expires_at"
|
||||
data-toggle="datetimepicker">
|
||||
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
@error('expires_at')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group text-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
$('#expires_at').datetimepicker({
|
||||
format: 'DD-MM-yyyy HH:mm:ss',
|
||||
icons: {
|
||||
time: 'far fa-clock',
|
||||
date: 'far fa-calendar',
|
||||
up: 'fas fa-arrow-up',
|
||||
down: 'fas fa-arrow-down',
|
||||
previous: 'fas fa-chevron-left',
|
||||
next: 'fas fa-chevron-right',
|
||||
today: 'fas fa-calendar-check',
|
||||
clear: 'far fa-trash-alt',
|
||||
close: 'far fa-times-circle'
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
function setMaxUses() {
|
||||
let element = document.getElementById('uses')
|
||||
element.value = element.max;
|
||||
console.log(element.max)
|
||||
}
|
||||
|
||||
|
||||
function setRandomCode() {
|
||||
let element = document.getElementById('code')
|
||||
element.value = getRandomCode(36)
|
||||
}
|
||||
|
||||
function getRandomCode(length) {
|
||||
let result = '';
|
||||
let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-';
|
||||
let charactersLength = characters.length;
|
||||
for (let i = 0; i < length; i++) {
|
||||
result += characters.charAt(Math.floor(Math.random() *
|
||||
charactersLength));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,97 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Vouchers')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.vouchers.index')}}">{{__('Vouchers')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-money-check-alt mr-2"></i>{{__('Vouchers')}}</h5>
|
||||
<a href="{{route('admin.vouchers.create')}}" class="btn btn-sm btn-primary"><i
|
||||
class="fas fa-plus mr-1"></i>{{__('Create new')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Status')}}</th>
|
||||
<th>{{__('Code')}}</th>
|
||||
<th>{{__('Memo')}}</th>
|
||||
<th>{{CREDITS_DISPLAY_NAME}}</th>
|
||||
<th>{{__('Used / Uses')}}</th>
|
||||
<th>{{__('Expires')}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function submitResult() {
|
||||
return confirm("{{__('Are you sure you wish to delete?')}}") !== false;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('admin.vouchers.datatable')}}",
|
||||
columns: [
|
||||
{data: 'status'},
|
||||
{data: 'code'},
|
||||
{data: 'memo'},
|
||||
{data: 'credits'},
|
||||
{data: 'uses'},
|
||||
{data: 'expires_at'},
|
||||
{data: 'actions', sortable: false},
|
||||
],
|
||||
fnDrawCallback: function( oSettings ) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,96 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Vouchers')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.vouchers.index') }}">{{__('Vouchers')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('admin.vouchers.users', $voucher->id) }}">{{__('Users')}}</a>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-users mr-2"></i>{{__('Users')}}</h5>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('ID')}}</th>
|
||||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('Email')}}</th>
|
||||
<th>{{ CREDITS_DISPLAY_NAME }}</th>
|
||||
<th>{{__('Last seen')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{ route('admin.vouchers.usersdatatable', $voucher->id) }}",
|
||||
columns: [{
|
||||
data: 'id'
|
||||
}, {
|
||||
data: 'name'
|
||||
},
|
||||
{
|
||||
data: 'email'
|
||||
},
|
||||
{
|
||||
data: 'credits'
|
||||
},
|
||||
{
|
||||
data: 'last_seen'
|
||||
},
|
||||
],
|
||||
fnDrawCallback: function(oSettings) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,140 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<body class="hold-transition dark-mode login-page">
|
||||
<div class="login-box">
|
||||
<!-- /.login-logo -->
|
||||
<div class="card card-outline card-primary">
|
||||
<div class="card-header text-center">
|
||||
<a href="{{ route('welcome') }}" class="h1"><b
|
||||
class="mr-1">{{ config('app.name', 'Laravel') }}</b></a>
|
||||
@if (config('SETTINGS::SYSTEM:ENABLE_LOGIN_LOGO'))
|
||||
<img src="{{ \Illuminate\Support\Facades\Storage::disk('public')->exists('logo.png') ? asset('storage/logo.png') : asset('images/controlpanel_logo.png') }}"
|
||||
alt="{{ config('app.name', 'Controlpanel.gg') }} Logo" style="opacity: .8;max-width:100%">
|
||||
@endif
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="login-box-msg">{{ __('Sign in to start your session') }}</p>
|
||||
|
||||
@if (session('message'))
|
||||
<div class="alert alert-danger">{{ session('message') }}</div>
|
||||
@endif
|
||||
|
||||
<form action="{{ route('login') }}" method="post">
|
||||
@csrf
|
||||
@if (Session::has('error'))
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ Session::get('error') }}</strong></small>
|
||||
</span>
|
||||
@endif
|
||||
|
||||
<div class="form-group">
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" name="email"
|
||||
class="form-control @error('email') is-invalid @enderror"
|
||||
placeholder="{{ __('Email or Username') }}">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-envelope"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@error('email')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="input-group mb-3">
|
||||
<input type="password" name="password"
|
||||
class="form-control @error('password') is-invalid @enderror"
|
||||
placeholder="{{ __('Password') }}">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-lock"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@error('password')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
@if (config('SETTINGS::RECAPTCHA:ENABLED') == 'true')
|
||||
<div class="input-group mb-3">
|
||||
{!! htmlFormSnippet() !!}
|
||||
@error('g-recaptcha-response')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="icheck-primary">
|
||||
<input type="checkbox" name="remember" id="remember"
|
||||
{{ old('remember') ? 'checked' : '' }}>
|
||||
<label for="remember">
|
||||
{{ __('Remember Me') }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-4">
|
||||
<button type="submit" class="btn btn-primary btn-block">{{ __('Sign In') }}</button>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{{-- <div class="social-auth-links text-center mt-2 mb-3"> --}}
|
||||
{{-- <a href="#" class="btn btn-block btn-primary"> --}}
|
||||
{{-- <i class="fab fa-facebook mr-2"></i> Sign in using Facebook --}}
|
||||
{{-- </a> --}}
|
||||
{{-- <a href="#" class="btn btn-block btn-danger"> --}}
|
||||
{{-- <i class="fab fa-google-plus mr-2"></i> Sign in using Google+ --}}
|
||||
{{-- </a> --}}
|
||||
{{-- </div> --}}
|
||||
<!-- /.social-auth-links -->
|
||||
|
||||
<p class="mb-1">
|
||||
@if (Route::has('password.request'))
|
||||
<a class="" href="{{ route('password.request') }}">
|
||||
{{ __('Forgot Your Password?') }}
|
||||
</a>
|
||||
@endif
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
<a href="{{ route('register') }}" class="text-center">{{ __('Register a new membership') }}</a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- /.card-body -->
|
||||
</div>
|
||||
<!-- /.card -->
|
||||
</div>
|
||||
<!-- /.login-box -->
|
||||
|
||||
{{-- imprint and privacy policy --}}
|
||||
<div class="fixed-bottom ">
|
||||
<div class="container text-center">
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_IMPRINT'))
|
||||
<a href="{{ route('imprint') }}"><strong>{{ __('Imprint') }}</strong></a> |
|
||||
@endif
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_PRIVACY'))
|
||||
<a href="{{ route('privacy') }}"><strong>{{ __('Privacy') }}</strong></a>
|
||||
@endif
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_TOS'))
|
||||
| <a href="{{ route('tos') }}"><strong>{{ __('Terms of Service') }}</strong></a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@endsection
|
|
@ -1,49 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Confirm Password') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
{{ __('Please confirm your password before continuing.') }}
|
||||
|
||||
<form method="POST" action="{{ route('password.confirm') }}">
|
||||
@csrf
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
|
||||
|
||||
@error('password')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row mb-0">
|
||||
<div class="col-md-8 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('Confirm Password') }}
|
||||
</button>
|
||||
|
||||
@if (Route::has('password.request'))
|
||||
<a class="btn btn-link" href="{{ route('password.request') }}">
|
||||
{{ __('Forgot Your Password?') }}
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -1,82 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<body class="hold-transition dark-mode login-page">
|
||||
<div class="login-box">
|
||||
<div class="card card-outline card-primary">
|
||||
<div class="card-header text-center">
|
||||
<a href="{{ route('welcome') }}" class="h1"><b
|
||||
class="mr-1">{{ config('app.name', 'Laravel') }}</b></a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
<p class="login-box-msg">
|
||||
{{ __('You forgot your password? Here you can easily retrieve a new password.') }}</p>
|
||||
<form method="POST" action="{{ route('password.email') }}">
|
||||
@csrf
|
||||
|
||||
<div class="input-group mb-3">
|
||||
<input type="email" class="form-control @error('email') is-invalid @enderror"
|
||||
placeholder="{{ __('Email') }}" name="email" value="{{ old('email') }}" required
|
||||
autocomplete="email" autofocus>
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-envelope"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@error('email')
|
||||
<span class="text-danger" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
@if (config('SETTINGS::RECAPTCHA:ENABLED') == 'true')
|
||||
<div class="input-group mb-3">
|
||||
{!! htmlFormSnippet() !!}
|
||||
@error('g-recaptcha-response')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<button type="submit"
|
||||
class="btn btn-primary btn-block">{{ __('Request new password') }}</button>
|
||||
</div>
|
||||
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
|
||||
</form>
|
||||
<p class="mt-3 mb-1">
|
||||
<a href="{{ route('login') }}">{{ __('Login') }}</a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- /.login-card-body -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.login-box -->
|
||||
|
||||
{{-- imprint and privacy policy --}}
|
||||
<div class="fixed-bottom ">
|
||||
<div class="container text-center">
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_IMPRINT'))
|
||||
<a href="{{ route('imprint') }}"><strong>{{ __('Imprint') }}</strong></a> |
|
||||
@endif
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_PRIVACY'))
|
||||
<a href="{{ route('privacy') }}"><strong>{{ __('Privacy') }}</strong></a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@endsection
|
|
@ -1,93 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<body class="hold-transition dark-mode login-page">
|
||||
<div class="login-box">
|
||||
<div class="card card-outline card-primary">
|
||||
<div class="card-header text-center">
|
||||
<a href="{{ route('welcome') }}" class="h1"><b
|
||||
class="mr-1">{{ config('app.name', 'Laravel') }}</b></a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="login-box-msg">
|
||||
{{ __('You are only one step a way from your new password, recover your password now.') }}</p>
|
||||
|
||||
<form method="POST" action="{{ route('password.update') }}">
|
||||
@csrf
|
||||
|
||||
<input type="hidden" name="token" value="{{ $token }}">
|
||||
|
||||
<div class="input-group mb-3">
|
||||
<input type="email" name="email" class="form-control @error('email') is-invalid @enderror"
|
||||
placeholder="{{ __('Email') }}">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-envelope"></span>
|
||||
</div>
|
||||
</div>
|
||||
@error('email')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="input-group mb-3">
|
||||
<input type="password" class="form-control @error('password') is-invalid @enderror"
|
||||
placeholder="{{ __('Password') }}" name="password" required autocomplete="new-password">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-lock"></span>
|
||||
</div>
|
||||
</div>
|
||||
@error('password')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="input-group mb-3">
|
||||
<input type="password" class="form-control" name="password_confirmation"
|
||||
placeholder="{{ __('Retype password') }}" required autocomplete="new-password">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-lock"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<button type="submit"
|
||||
class="btn btn-primary btn-block">{{ __('Change password') }}</button>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<p class="mt-3 mb-1">
|
||||
<a href="{{ route('login') }}">Login</a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- /.login-card-body -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.login-box -->
|
||||
|
||||
{{-- imprint and privacy policy --}}
|
||||
<div class="fixed-bottom">
|
||||
<div class="container text-center">
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_IMPRINT'))
|
||||
<a href="{{ route('imprint') }}"><strong>{{ __('Imprint') }}</strong></a> |
|
||||
@endif
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_PRIVACY'))
|
||||
<a href="{{ route('privacy') }}"><strong>{{ __('Privacy') }}</strong></a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@endsection
|
|
@ -1,195 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<body class="hold-transition dark-mode register-page">
|
||||
<div class="register-box">
|
||||
<div class="card card-outline card-primary">
|
||||
<div class="card-header text-center">
|
||||
<a href="{{ route('welcome') }}" class="h1"><b
|
||||
class="mr-1">{{ config('app.name', 'Laravel') }}</b></a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@if (!config('SETTINGS::SYSTEM:CREATION_OF_NEW_USERS'))
|
||||
<div class="alert alert-warning p-2 m-2">
|
||||
<h5><i class="icon fas fa-exclamation-circle"></i> {{ __('Warning!') }}</h5>
|
||||
{{ __('The system administrator has blocked the registration of new users') }}
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a class="btn btn-primary" href="{{ route('login') }}">{{ __('Back') }}</a>
|
||||
</div>
|
||||
@else
|
||||
<p class="login-box-msg">{{ __('Register a new membership') }}</p>
|
||||
|
||||
<form method="POST" action="{{ route('register') }}">
|
||||
|
||||
@error('ip')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
|
||||
@error('registered')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
@if ($errors->has('ptero_registration_error'))
|
||||
@foreach ($errors->get('ptero_registration_error') as $err)
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $err }}</strong></small>
|
||||
</span>
|
||||
@endforeach
|
||||
@endif
|
||||
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control @error('name') is-invalid @enderror"
|
||||
name="name" value="{{ old('name') }}" placeholder="{{ __('Username') }}"
|
||||
required autocomplete="name" autofocus>
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-user"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@error('name')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<div class="input-group mb-3">
|
||||
<input type="email" name="email"
|
||||
class="form-control @error('email') is-invalid @enderror"
|
||||
placeholder="{{ __('Email') }}" value="{{ old('email') }}" required
|
||||
autocomplete="email">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-envelope"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@error('email')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="input-group mb-3">
|
||||
<input type="password" class="form-control @error('password') is-invalid @enderror"
|
||||
placeholder="{{ __('Password') }}" name="password" required
|
||||
autocomplete="new-password">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-lock"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@error('password')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="input-group mb-3">
|
||||
<input type="password" class="form-control" name="password_confirmation"
|
||||
placeholder="{{ __('Retype password') }}" required autocomplete="new-password">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-lock"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (config('SETTINGS::REFERRAL::ENABLED') == 'true')
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" value="{{ Request::get('ref') }}" class="form-control"
|
||||
name="referral_code"
|
||||
placeholder="{{ __('Referral code') }} ({{ __('optional') }})">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span class="fas fa-user-check"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@if (config('SETTINGS::RECAPTCHA:ENABLED') == 'true')
|
||||
<div class="input-group mb-3">
|
||||
{!! htmlFormSnippet() !!}
|
||||
@error('g-recaptcha-response')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_TOS'))
|
||||
|
||||
<div class="icheck-primary">
|
||||
<input type="checkbox" id="agreeTerms" name="terms" value="agree">
|
||||
<label for="agreeTerms">
|
||||
{{__("I agree to the")}} <a target="_blank" href="{{route("tos")}}">{{__("Terms of Service")}}</a>
|
||||
</label>
|
||||
</div>
|
||||
@error('terms')
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $message }}</strong></small>
|
||||
</span>
|
||||
@enderror
|
||||
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-4">
|
||||
<button type="submit" class="btn btn-primary">{{ __('Register') }}</button>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{{-- <div class="social-auth-links text-center"> --}}
|
||||
{{-- <a href="#" class="btn btn-block btn-primary"> --}}
|
||||
{{-- <i class="fab fa-facebook mr-2"></i> --}}
|
||||
{{-- Sign up using Facebook --}}
|
||||
{{-- </a> --}}
|
||||
{{-- <a href="#" class="btn btn-block btn-danger"> --}}
|
||||
{{-- <i class="fab fa-google-plus mr-2"></i> --}}
|
||||
{{-- Sign up using Google+ --}}
|
||||
{{-- </a> --}}
|
||||
{{-- </div> --}}
|
||||
|
||||
<a href="{{ route('login') }}" class="text-center">{{ __('I already have a membership') }}</a>
|
||||
</div>
|
||||
<!-- /.form-box -->
|
||||
</div><!-- /.card -->
|
||||
</div>
|
||||
<!-- /.register-box -->
|
||||
|
||||
{{-- imprint and privacy policy --}}
|
||||
<div class="fixed-bottom ">
|
||||
<div class="container text-center">
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_IMPRINT'))
|
||||
<a target="_blank" href="{{ route('imprint') }}"><strong>{{ __('Imprint') }}</strong></a> |
|
||||
@endif
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_PRIVACY'))
|
||||
<a target="_blank" href="{{ route('privacy') }}"><strong>{{ __('Privacy') }}</strong></a>
|
||||
@endif
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_TOS'))
|
||||
| <a target="_blank" href="{{ route('tos') }}"><strong>{{ __('Terms of Service') }}</strong></a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@endif
|
||||
@endsection
|
|
@ -1,28 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Verify Your Email Address') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('resent'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ __('A fresh verification link has been sent to your email address.') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{ __('Before proceeding, please check your email for a verification link.') }}
|
||||
{{ __('If you did not receive the email') }},
|
||||
<form class="d-inline" method="POST" action="{{ route('verification.resend') }}">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-link p-0 m-0 align-baseline">{{ __('click here to request another') }}</button>.
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -1,295 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Dashboard') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a class="text-muted" href="">{{ __('Dashboard') }}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
@if(!file_exists(base_path()."/install.lock") && Auth::User()->role == "admin")
|
||||
<div class="callout callout-danger">
|
||||
<h4>{{ __('The installer is not locked!') }}</h4>
|
||||
<p>{{ __('please create a file called "install.lock" in your dashboard Root directory. Otherwise no settings will be loaded!') }}</p>
|
||||
<a href="/install?step=7"><button class="btn btn-outline-danger">{{__('or click here')}}</button></a>
|
||||
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(config("SETTINGS::SYSTEM:ALERT_ENABLED") && !empty(config("SETTINGS::SYSTEM:ALERT_MESSAGE")))
|
||||
<div class="alert mt-4 alert-{{config("SETTINGS::SYSTEM:ALERT_TYPE")}}" role="alert">
|
||||
{!! config("SETTINGS::SYSTEM:ALERT_MESSAGE") !!}
|
||||
</div>
|
||||
@endif
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-info elevation-1"><i class="fas fa-server"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{ __('Servers') }}</span>
|
||||
<span class="info-box-number">{{ Auth::user()->servers()->count() }}</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box mb-3">
|
||||
<span class="info-box-icon bg-secondary elevation-1"><i class="fas fa-coins"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{ CREDITS_DISPLAY_NAME }}</span>
|
||||
<span class="info-box-number">{{ Auth::user()->Credits() }}</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
|
||||
<!-- fix for small devices only -->
|
||||
<div class="clearfix hidden-md-up"></div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box mb-3">
|
||||
<span class="info-box-icon bg-warning elevation-1"><i class="fas fa-chart-line"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{ CREDITS_DISPLAY_NAME }} {{ __('Usage') }}</span>
|
||||
<span class="info-box-number">{{ number_format($usage, 2, '.', '') }}
|
||||
<sup>{{ __('per month') }}</sup></span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
|
||||
<!-- /.col -->
|
||||
@if ($credits > 0.01 and $usage > 0)
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box mb-3">
|
||||
<span class="info-box-icon {{ $bg }} elevation-1">
|
||||
<i class="fas fa-hourglass-half"></i></span>
|
||||
<div class="info-box-content">
|
||||
<span
|
||||
class="info-box-text">{{ __('Out of Credits in', ['credits' => CREDITS_DISPLAY_NAME]) }}
|
||||
</span>
|
||||
<span class="info-box-number">{{ $boxText }}<sup>{{ $unit }}</sup></span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
@endif
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="card card-default">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">
|
||||
<i class="fas fa-link mr-2"></i>
|
||||
{{ __('Useful Links') }}
|
||||
</h3>
|
||||
</div>
|
||||
<!-- /.card-header -->
|
||||
<div class="card-body">
|
||||
@foreach ($useful_links as $useful_link)
|
||||
<div class="alert alert-dismissible">
|
||||
<button type="button" class="close" data-dismiss="alert"
|
||||
aria-hidden="true">×</button>
|
||||
<h5>
|
||||
<a class="alert-link text-decoration-none" target="__blank"
|
||||
href="{{ $useful_link->link }}">
|
||||
<i class="{{ $useful_link->icon }} mr-2"></i>{{ $useful_link->title }}
|
||||
</a>
|
||||
</h5>
|
||||
{!! $useful_link->description !!}
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<!-- /.card-body -->
|
||||
</div>
|
||||
<!-- /.card -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="card card-default">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">
|
||||
<i class="fas fa-history mr-2"></i>
|
||||
{{ __('Activity Logs') }}
|
||||
</h3>
|
||||
</div>
|
||||
<!-- /.card-header -->
|
||||
<div class="card-body py-0 pb-2">
|
||||
<ul class="list-group list-group-flush">
|
||||
@foreach (Auth::user()->actions()->take(8)->orderBy('created_at', 'desc')->get() as $log)
|
||||
<li class="list-group-item d-flex justify-content-between text-muted">
|
||||
<span>
|
||||
@if(str_starts_with($log->description,"created"))
|
||||
<small><i class="fas text-success fa-plus mr-2"></i></small>
|
||||
@elseif(str_starts_with($log->description,"redeemed"))
|
||||
<small><i class="fas text-success fa-money-check-alt mr-2"></i></small>
|
||||
@elseif(str_starts_with($log->description,"deleted"))
|
||||
<small><i class="fas text-danger fa-times mr-2"></i></small>
|
||||
@elseif(str_starts_with($log->description,"gained"))
|
||||
<small><i class="fas text-success fa-money-bill mr-2"></i></small>
|
||||
@elseif(str_starts_with($log->description,"updated"))
|
||||
<small><i class="fas text-info fa-pen mr-2"></i></small>
|
||||
@endif
|
||||
{{ explode('\\', $log->subject_type)[2] }}
|
||||
{{ ucfirst($log->description) }}
|
||||
</span>
|
||||
<small>
|
||||
{{ $log->created_at->diffForHumans() }}
|
||||
</small>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /.card-body -->
|
||||
</div>
|
||||
<!-- /.card -->
|
||||
@if((config('SETTINGS::REFERRAL::ENABLED') ==true))<!--PartnerDiscount::getDiscount()--->
|
||||
<div class="card card-default">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">
|
||||
<i class="fas fa-handshake mr-2"></i>
|
||||
{{ __('Partner program') }}
|
||||
</h3>
|
||||
</div>
|
||||
<!-- /.card-header -->
|
||||
<div class="card-body py-0 pb-2">
|
||||
@if((config('SETTINGS::REFERRAL::ALLOWED') == "client" && Auth::user()->role != "member") || config('SETTINGS::REFERRAL::ALLOWED') == "everyone")
|
||||
<div class="row">
|
||||
<div class="mt-3 col-md-8">
|
||||
<span class="badge badge-success" style="font-size: 14px">
|
||||
<i class="fa fa-user-check mr-2"></i>
|
||||
{{__("Your referral URL")}}:
|
||||
<span onmouseover="hoverIn()" onmouseout="hoverOut()" onclick="onClickCopy()" id="RefLink" style="cursor: pointer;">
|
||||
{{__('Click to copy')}}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="mt-3 col-md-4">
|
||||
<span class="badge badge-info" style="font-size: 14px">{{__("Number of referred users:")}} {{$numberOfReferrals}}</span>
|
||||
</div>
|
||||
</div>
|
||||
@if($partnerDiscount)
|
||||
<hr style="width: 100%; height:1px; border-width:0; background-color:#6c757d; margin-bottom: 0px">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Your discount')}}</th>
|
||||
<th>{{__('Discount for your new users')}}</th>
|
||||
<th>{{__('Reward per registered user')}}</th>
|
||||
<th>{{__('New user payment commision')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{$partnerDiscount->partner_discount}}%</td>
|
||||
<td>{{$partnerDiscount->registered_user_discount}}%</td>
|
||||
<td>{{config('SETTINGS::REFERRAL::REWARD')}} {{config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME')}}</td>
|
||||
<td>{{($partnerDiscount->referral_system_commission==-1)?config('SETTINGS::REFERRAL:PERCENTAGE'):($partnerDiscount->referral_system_commission)}}%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr style="width: 100%; height:1px; border-width:0; background-color:#6c757d; margin-top: 0px">
|
||||
@else
|
||||
<hr style="width: 100%; height:1px; border-width:0; background-color:#6c757d; margin-bottom: 0px">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Reward per registered user')}}</th>
|
||||
<th>{{__('New user payment commision')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{config('SETTINGS::REFERRAL::REWARD')}} {{config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME')}}</td>
|
||||
<td>{{config('SETTINGS::REFERRAL:PERCENTAGE')}}%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr style="width: 100%; height:1px; border-width:0; background-color:#6c757d; margin-top: 0px">
|
||||
@endif
|
||||
@else
|
||||
<span class="badge badge-warning"><i
|
||||
class="fa fa-user-check mr-2"></i>
|
||||
{{__("Make a purchase to reveal your referral-URL")}}</span>
|
||||
@endif
|
||||
</div>
|
||||
<!-- /.card-body -->
|
||||
</div>
|
||||
@endif
|
||||
<!-- /.card -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script>
|
||||
var originalText = document.getElementById('RefLink').innerText;
|
||||
var link = "<?php echo ((route("register")) . '?ref=' . (Auth::user()->referral_code));?>";
|
||||
var timeoutID;
|
||||
function hoverIn() {
|
||||
document.getElementById('RefLink').innerText = link;
|
||||
timeoutID = setTimeout(function() {
|
||||
document.getElementById('RefLink').innerText = originalText;
|
||||
}, 2000);
|
||||
}
|
||||
function hoverOut() {
|
||||
document.getElementById('RefLink').innerText = originalText;
|
||||
clearTimeout(timeoutID);
|
||||
}
|
||||
function onClickCopy() {
|
||||
if(navigator.clipboard) {
|
||||
navigator.clipboard.writeText(link).then(() => {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: '{{ __("URL copied to clipboard")}}',
|
||||
position: 'top-middle',
|
||||
showConfirmButton: false,
|
||||
background: '#343a40',
|
||||
toast: false,
|
||||
timer: 1000,
|
||||
timerProgressBar: true,
|
||||
didOpen: (toast) => {
|
||||
toast.addEventListener('mouseenter', Swal.stopTimer)
|
||||
toast.addEventListener('mouseleave', Swal.resumeTimer)
|
||||
}
|
||||
})
|
||||
})
|
||||
} else {
|
||||
console.log('Browser Not compatible')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@endsection
|
|
@ -1,48 +0,0 @@
|
|||
<p>
|
||||
This website is operated by:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Company Name</strong><br>
|
||||
Street Name & Number<br>
|
||||
City<br>
|
||||
Country<br>
|
||||
Phone: +00 000 000 000<br>
|
||||
Email: PUT YOUR EMAIL HERE</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Company Registration Number:</strong> 00000000<br>
|
||||
<strong>VAT Number:</strong> 000000000
|
||||
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The European Commission provides a platform for online dispute resolution (OS) which is available at <a
|
||||
href="https://ec.europa.eu/consumers/odr/main/index.cfm?event=main.home2.show&lng=EN">https://ec.europa.eu/consumers/odr/main/index.cfm?event=main.home2.show&lng=EN</a>.
|
||||
We are not obliged or willing to participate in dispute resolution proceedings before a consumer arbitration board.
|
||||
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Disclaimer</strong><br>
|
||||
Liability for Contents<br>
|
||||
The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents'
|
||||
accuracy, completeness or topicality. According to statutory provisions, we are furthermore responsible for our own
|
||||
content on these web pages. In this matter, please note that we are not obliged to monitor the transmitted or saved
|
||||
information of third parties, or investigate circumstances pointing to illegal activity. Our obligations to remove
|
||||
or block the use of information under generally applicable laws remain unaffected by this as per §§ 8 to 10 of the
|
||||
Telemedia Act (TMG).
|
||||
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Liability for Links<br>
|
||||
Our offer contains links to external third party websites. We have no influence on the contents of those websites,
|
||||
and therefore cannot assume any liability for these foreign contents. The respective provider or operator of the
|
||||
pages is always responsible for the contents of the linked pages. The linked pages were checked for possible legal
|
||||
violations at the time of linking. Illegal contents were not discernible at the time of linking. However, a
|
||||
permanent content control of the linked pages is not reasonable without concrete evidence of a violation of law. If
|
||||
we become aware of any infringements, we will remove such links immediately.
|
||||
|
||||
</p>
|
|
@ -1,22 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<body class="dark-mode">
|
||||
<div class="container privacy-card">
|
||||
<div class="row">
|
||||
<div class="col-md-10" style="height: 20px;"></div>
|
||||
</div>
|
||||
<div class="row justify-content-center ">
|
||||
<div class="col-md-10">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Imprint') }}</div>
|
||||
<div class="card-body">
|
||||
@include('information.imprint-content')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@endsection
|
|
@ -1,261 +0,0 @@
|
|||
<p>Last updated: December 22, 2022</p>
|
||||
<p>This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information
|
||||
when You use the Service and tells You about Your privacy rights and how the law protects You.</p>
|
||||
<p>We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and
|
||||
use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the
|
||||
<a href="https://www.freeprivacypolicy.com/free-privacy-policy-generator/" target="_blank">Free Privacy Policy
|
||||
Generator</a>.</p>
|
||||
<h1>Interpretation and Definitions</h1>
|
||||
<h2>Interpretation</h2>
|
||||
<p>The words of which the initial letter is capitalized have meanings defined under the following conditions. The
|
||||
following definitions shall have the same meaning regardless of whether they appear in singular or in plural.</p>
|
||||
<h2>Definitions</h2>
|
||||
<p>For the purposes of this Privacy Policy:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>Account</strong> means a unique account created for You to access our Service or parts of our
|
||||
Service.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Company</strong> (referred to as either "the Company", "We", "Us" or
|
||||
"Our" in this Agreement) refers to controlpanel.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Cookies</strong> are small files that are placed on Your computer, mobile device or any other device
|
||||
by a website, containing the details of Your browsing history on that website among its many uses.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Country</strong> refers to: Alabama, United States</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Device</strong> means any device that can access the Service such as a computer, a cellphone or a
|
||||
digital tablet.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Personal Data</strong> is any information that relates to an identified or identifiable individual.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Service</strong> refers to the Website.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Service Provider</strong> means any natural or legal person who processes the data on behalf of the
|
||||
Company. It refers to third-party companies or individuals employed by the Company to facilitate the
|
||||
Service, to provide the Service on behalf of the Company, to perform services related to the Service or to
|
||||
assist the Company in analyzing how the Service is used.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Usage Data</strong> refers to data collected automatically, either generated by the use of the
|
||||
Service or from the Service infrastructure itself (for example, the duration of a page visit).</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Website</strong> refers to controlpanel, accessible from <a href="controlpanel"
|
||||
rel="external nofollow noopener" target="_blank">controlpanel</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>You</strong> means the individual accessing or using the Service, or the company, or other legal
|
||||
entity on behalf of which such individual is accessing or using the Service, as applicable.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h1>Collecting and Using Your Personal Data</h1>
|
||||
<h2>Types of Data Collected</h2>
|
||||
<h3>Personal Data</h3>
|
||||
<p>While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be
|
||||
used to contact or identify You. Personally identifiable information may include, but is not limited to:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Email address</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Usage Data</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Usage Data</h3>
|
||||
<p>Usage Data is collected automatically when using the Service.</p>
|
||||
<p>Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser type,
|
||||
browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those
|
||||
pages, unique device identifiers and other diagnostic data.</p>
|
||||
<p>When You access the Service by or through a mobile device, We may collect certain information automatically,
|
||||
including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of
|
||||
Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device
|
||||
identifiers and other diagnostic data.</p>
|
||||
<p>We may also collect information that Your browser sends whenever You visit our Service or when You access the Service
|
||||
by or through a mobile device.</p>
|
||||
<h3>Tracking Technologies and Cookies</h3>
|
||||
<p>We use Cookies and similar tracking technologies to track the activity on Our Service and store certain information.
|
||||
Tracking technologies used are beacons, tags, and scripts to collect and track information and to improve and
|
||||
analyze Our Service. The technologies We use may include:</p>
|
||||
<ul>
|
||||
<li><strong>Cookies or Browser Cookies.</strong> A cookie is a small file placed on Your Device. You can instruct
|
||||
Your browser to refuse all Cookies or to indicate when a Cookie is being sent. However, if You do not accept
|
||||
Cookies, You may not be able to use some parts of our Service. Unless you have adjusted Your browser setting so
|
||||
that it will refuse Cookies, our Service may use Cookies.</li>
|
||||
<li><strong>Web Beacons.</strong> Certain sections of our Service and our emails may contain small electronic files
|
||||
known as web beacons (also referred to as clear gifs, pixel tags, and single-pixel gifs) that permit the
|
||||
Company, for example, to count users who have visited those pages or opened an email and for other related
|
||||
website statistics (for example, recording the popularity of a certain section and verifying system and server
|
||||
integrity).</li>
|
||||
</ul>
|
||||
<p>Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on Your personal
|
||||
computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web
|
||||
browser. Learn more about cookies on the <a
|
||||
href="https://www.freeprivacypolicy.com/blog/sample-privacy-policy-template/#Use_Of_Cookies_And_Tracking"
|
||||
target="_blank">Free Privacy Policy website</a> article.</p>
|
||||
<p>We use both Session and Persistent Cookies for the purposes set out below:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>Necessary / Essential Cookies</strong></p>
|
||||
<p>Type: Session Cookies</p>
|
||||
<p>Administered by: Us</p>
|
||||
<p>Purpose: These Cookies are essential to provide You with services available through the Website and to enable
|
||||
You to use some of its features. They help to authenticate users and prevent fraudulent use of user
|
||||
accounts. Without these Cookies, the services that You have asked for cannot be provided, and We only use
|
||||
these Cookies to provide You with those services.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Cookies Policy / Notice Acceptance Cookies</strong></p>
|
||||
<p>Type: Persistent Cookies</p>
|
||||
<p>Administered by: Us</p>
|
||||
<p>Purpose: These Cookies identify if users have accepted the use of cookies on the Website.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Functionality Cookies</strong></p>
|
||||
<p>Type: Persistent Cookies</p>
|
||||
<p>Administered by: Us</p>
|
||||
<p>Purpose: These Cookies allow us to remember choices You make when You use the Website, such as remembering
|
||||
your login details or language preference. The purpose of these Cookies is to provide You with a more
|
||||
personal experience and to avoid You having to re-enter your preferences every time You use the Website.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>For more information about the cookies we use and your choices regarding cookies, please visit our Cookies Policy or
|
||||
the Cookies section of our Privacy Policy.</p>
|
||||
<h2>Use of Your Personal Data</h2>
|
||||
<p>The Company may use Personal Data for the following purposes:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>To provide and maintain our Service</strong>, including to monitor the usage of our Service.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>To manage Your Account:</strong> to manage Your registration as a user of the Service. The Personal
|
||||
Data You provide can give You access to different functionalities of the Service that are available to You
|
||||
as a registered user.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>For the performance of a contract:</strong> the development, compliance and undertaking of the
|
||||
purchase contract for the products, items or services You have purchased or of any other contract with Us
|
||||
through the Service.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>To contact You:</strong> To contact You by email, telephone calls, SMS, or other equivalent forms of
|
||||
electronic communication, such as a mobile application's push notifications regarding updates or informative
|
||||
communications related to the functionalities, products or contracted services, including the security
|
||||
updates, when necessary or reasonable for their implementation.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>To provide You</strong> with news, special offers and general information about other goods, services
|
||||
and events which we offer that are similar to those that you have already purchased or enquired about unless
|
||||
You have opted not to receive such information.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>To manage Your requests:</strong> To attend and manage Your requests to Us.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>For business transfers:</strong> We may use Your information to evaluate or conduct a merger,
|
||||
divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our
|
||||
assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which
|
||||
Personal Data held by Us about our Service users is among the assets transferred.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>For other purposes</strong>: We may use Your information for other purposes, such as data analysis,
|
||||
identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and
|
||||
improve our Service, products, services, marketing and your experience.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>We may share Your personal information in the following situations:</p>
|
||||
<ul>
|
||||
<li><strong>With Service Providers:</strong> We may share Your personal information with Service Providers to
|
||||
monitor and analyze the use of our Service, to contact You.</li>
|
||||
<li><strong>For business transfers:</strong> We may share or transfer Your personal information in connection with,
|
||||
or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of
|
||||
Our business to another company.</li>
|
||||
<li><strong>With Affiliates:</strong> We may share Your information with Our affiliates, in which case we will
|
||||
require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other
|
||||
subsidiaries, joint venture partners or other companies that We control or that are under common control with
|
||||
Us.</li>
|
||||
<li><strong>With business partners:</strong> We may share Your information with Our business partners to offer You
|
||||
certain products, services or promotions.</li>
|
||||
<li><strong>With other users:</strong> when You share personal information or otherwise interact in the public areas
|
||||
with other users, such information may be viewed by all users and may be publicly distributed outside.</li>
|
||||
<li><strong>With Your consent</strong>: We may disclose Your personal information for any other purpose with Your
|
||||
consent.</li>
|
||||
</ul>
|
||||
<h2>Retention of Your Personal Data</h2>
|
||||
<p>The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy
|
||||
Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for
|
||||
example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our
|
||||
legal agreements and policies.</p>
|
||||
<p>The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a
|
||||
shorter period of time, except when this data is used to strengthen the security or to improve the functionality of
|
||||
Our Service, or We are legally obligated to retain this data for longer time periods.</p>
|
||||
<h2>Transfer of Your Personal Data</h2>
|
||||
<p>Your information, including Personal Data, is processed at the Company's operating offices and in any other places
|
||||
where the parties involved in the processing are located. It means that this information may be transferred to — and
|
||||
maintained on — computers located outside of Your state, province, country or other governmental jurisdiction where
|
||||
the data protection laws may differ than those from Your jurisdiction.</p>
|
||||
<p>Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that
|
||||
transfer.</p>
|
||||
<p>The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance
|
||||
with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country
|
||||
unless there are adequate controls in place including the security of Your data and other personal information.</p>
|
||||
<h2>Delete Your Personal Data</h2>
|
||||
<p>You have the right to delete or request that We assist in deleting the Personal Data that We have collected about
|
||||
You.</p>
|
||||
<p>Our Service may give You the ability to delete certain information about You from within the Service.</p>
|
||||
<p>You may update, amend, or delete Your information at any time by signing in to Your Account, if you have one, and
|
||||
visiting the account settings section that allows you to manage Your personal information. You may also contact Us
|
||||
to request access to, correct, or delete any personal information that You have provided to Us.</p>
|
||||
<p>Please note, however, that We may need to retain certain information when we have a legal obligation or lawful basis
|
||||
to do so.</p>
|
||||
<h2>Disclosure of Your Personal Data</h2>
|
||||
<h3>Business Transactions</h3>
|
||||
<p>If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will
|
||||
provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.</p>
|
||||
<h3>Law enforcement</h3>
|
||||
<p>Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law
|
||||
or in response to valid requests by public authorities (e.g. a court or a government agency).</p>
|
||||
<h3>Other legal requirements</h3>
|
||||
<p>The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:</p>
|
||||
<ul>
|
||||
<li>Comply with a legal obligation</li>
|
||||
<li>Protect and defend the rights or property of the Company</li>
|
||||
<li>Prevent or investigate possible wrongdoing in connection with the Service</li>
|
||||
<li>Protect the personal safety of Users of the Service or the public</li>
|
||||
<li>Protect against legal liability</li>
|
||||
</ul>
|
||||
<h2>Security of Your Personal Data</h2>
|
||||
<p>The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet,
|
||||
or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your
|
||||
Personal Data, We cannot guarantee its absolute security.</p>
|
||||
<h1>Children's Privacy</h1>
|
||||
<p>Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable
|
||||
information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has
|
||||
provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from
|
||||
anyone under the age of 13 without verification of parental consent, We take steps to remove that information from
|
||||
Our servers.</p>
|
||||
<p>If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from
|
||||
a parent, We may require Your parent's consent before We collect and use that information.</p>
|
||||
<h1>Links to Other Websites</h1>
|
||||
<p>Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You
|
||||
will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You
|
||||
visit.</p>
|
||||
<p>We have no control over and assume no responsibility for the content, privacy policies or practices of any third
|
||||
party sites or services.</p>
|
||||
<h1>Changes to this Privacy Policy</h1>
|
||||
<p>We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy
|
||||
Policy on this page.</p>
|
||||
<p>We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and
|
||||
update the "Last updated" date at the top of this Privacy Policy.</p>
|
||||
<p>You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are
|
||||
effective when they are posted on this page.</p>
|
||||
<h1>Contact Us</h1>
|
||||
<p>If you have any questions about this Privacy Policy, You can contact us:</p>
|
|
@ -1,21 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<body class="dark-mode">
|
||||
<div class="container privacy-card">
|
||||
<div class="row">
|
||||
<div class="col-md-10" style="height: 20px;"></div>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-10">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Privacy Policy') }}</div>
|
||||
<div class="card-body">
|
||||
@include('information.privacy-content')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@endsection
|
|
@ -1,484 +0,0 @@
|
|||
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p><strong>Last updatedJanuary 02, 2023</strong></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p><strong>TABLE OF CONTENTS</strong></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol>
|
||||
<li>AGREEMENT TO TERMS</li>
|
||||
<li>NTELLECTUAL PROPERTY RIGHTS</li>
|
||||
<li>USER REPRESENTATIONS</li>
|
||||
<li>USER REGISTRATION</li>
|
||||
<li>PRODUCTS</li>
|
||||
<li>PURCHASES AND PAYMENT</li>
|
||||
<li>REFUNDSPOLICY</li>
|
||||
<li>PROHIBITED ACTIVITIES</li>
|
||||
<li>USER GENERATED CONTRIBUTIONS</li>
|
||||
<li>CONTRIBUTION LICENSE</li>
|
||||
<li>SOCIAL MEDIA</li>
|
||||
<li>SUBMISSIONS</li>
|
||||
<li>SITE MANAGEMENT</li>
|
||||
<li>PRIVACY POLICY</li>
|
||||
<li>TERM AND TERMINATION</></li>
|
||||
<li>MODIFICATIONS AND INTERRUPTIONS</li>
|
||||
<li>GOVERNING LAW</li>
|
||||
<li>DISPUTE RESOLUTION</li>
|
||||
<li>>CORRECTIONS</li>
|
||||
<li>DISCLAIMER</li>
|
||||
<li>LIMITATIONS OF LIABILITY</li>
|
||||
<li>INDEMNIFICATION</li>
|
||||
<li>USER DATA</li>
|
||||
<li>ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES</li>
|
||||
<li>CALIFORNIA USERS AND RESIDENTS</li>
|
||||
<li>MISCELLANEOUS</li>
|
||||
<li>CONTACT US</li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol>
|
||||
<li><strong>AGREEMENT TO TERMS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity (“you”) andMY Company("<strong>Company</strong>", “<strong>we</strong>”, “<strong>us</strong>”, or “<strong>our</strong>”), concerning your access to and use of theexample.comwebsite as well as any other media form, media channel, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the “Site”).Our VAT number is12345678.You agree that by accessing the Site, you have read, understood, and agreed to be bound by all of these Terms of Use. IF YOU DO NOT AGREE WITH ALL OF THESE TERMS OF USE, THEN YOU ARE EXPRESSLY PROHIBITED FROM USING THE SITE AND YOU MUST DISCONTINUE USE IMMEDIATELY.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>Supplemental terms and conditions or documents that may be posted on the Site from time to time are hereby expressly incorporated herein by reference. We reserve the right, in our sole discretion, to make changes or modifications to these Terms of Usefrom time to time. We will alert you about any changes by updating the “Last updated” date of these Terms of Use, and you waive any right to receive specific notice of each such change. Please ensure that you check the applicable Terms every time you use our Site so that you understand which Terms apply. You will be subject to, and will be deemed to have been made aware of and to have accepted, the changes in any revised Terms of Use by your continued use of the Site after the date such revised Terms of Use are posted.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>The information provided on the Site is not intended for distribution to or use by any person or entity in any jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to access the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, if and to the extent local laws are applicable.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>TheSite is not tailored to comply with industry-specific regulations (Health Insurance Portability and Accountability Act (HIPAA), Federal Information Security Management Act (FISMA), etc.), so if your interactions would be subjected to such laws, you may not use this Site. You may not use the Site in a way that would violate the Gramm-Leach-Bliley Act (GLBA).</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>The Site is intended for users who are at least 13 years of age. All users who are minors in the jurisdiction in which they reside (generally under the age of 18) must have the permission of, and be directly supervised by, their parent or guardian to use the Site. If you are a minor, you must have your parent or guardian read and agree to these Terms of Use prior to you using the Site.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="2">
|
||||
<li><strong>INTELLECTUAL PROPERTY RIGHTS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the “Content”) and the trademarks, service marks, and logos contained therein (the “Marks”) are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition laws of the United States, international copyright laws, and international conventions. The Content and the Marks are provided on the Site “AS IS” for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, the Content and the Marks.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="3">
|
||||
<li><strong>USER REPRESENTATIONS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>By using the Site, you represent and warrant that:(1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the accuracy of such information and promptly update such registration information as necessary;(3) you have the legal capacity and you agree to comply with these Terms of Use;(4) you are not under the age of 13;(5) you are not a minor in the jurisdiction in which you reside, or if a minor, you have received parental permission to use the Site; (6) you will not access the Site through automated or non-human means, whether through a bot, script or otherwise; (7) you will not use the Site for any illegal or unauthorized purpose; and (8) your use of the Site will not violate any applicable law or regulation.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current or future use of the Site (or any portion thereof).</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="4">
|
||||
<li><strong>USER REGISTRATION</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="5">
|
||||
<li><strong>PRODUCTS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>All products are subject to availability. We reserve the right to discontinue any products at any time for any reason. Prices for all products are subject to change.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="6">
|
||||
<li><strong>PURCHASES AND PAYMENT</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>We accept the following forms of payment:</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>- PayPal</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>You agree to provide current, complete, and accurate purchase and account information for all purchases made via the Site. You further agree to promptly update account and payment information, including email address, payment method, and payment card expiration date, so that we can complete your transactions and contact you as needed. Sales tax will be added to the price of purchases as deemed required by us. We may change prices at any time. All payments shall beinU.S. dollars.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>You agree to pay all charges at the prices then in effect for your purchases and any applicable shipping fees, and you authorize us to charge your chosen payment provider for any such amounts upon placing your order.We reserve the right to correct any errors or mistakes in pricing, even if we have already requested or received payment.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>We reserve the right to refuse any order placed through the Site. We may, in our sole discretion, limit or cancel quantities purchased per person, per household, or per order. These restrictions may include orders placed by or under the same customer account, the same payment method, and/or orders that use the same billing or shipping address. We reserve the right to limit or prohibit orders that, in our sole judgment, appear to be placed by dealers, resellers, or distributors.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="7">
|
||||
<li><strong>REFUNDSPOLICY</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>All sales are final and no refund will be issued.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="8">
|
||||
<li><strong>PROHIBITED ACTIVITIES</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>As a user of the Site, you agree not to:</p>
|
||||
|
||||
<ul>
|
||||
<li>Systematically retrieve data or other content from the Site to create or compile, directly or indirectly, a collection, compilation, database, or directory without written permission from us.</li>
|
||||
<li>Trick, defraud, or mislead us and other users, especially in any attempt to learn sensitive account information such as user passwords.</li>
|
||||
<li>Circumvent, disable, or otherwise interfere with security-related features of the Site, including features that prevent or restrict the use or copying of any Content or enforce limitations on the use of the Site and/or the Content contained therein.</li>
|
||||
<li>Disparage, tarnish, or otherwise harm, in our opinion, us and/or the Site.</li>
|
||||
<li>Use any information obtained from the Site in order to harass, abuse, or harm another person.</li>
|
||||
<li>Make improper use of our support services or submit false reports of abuse or misconduct.</li>
|
||||
<li>Use the Site in a manner inconsistent with any applicable laws or regulations.</li>
|
||||
<li>Engage in unauthorized framing of or linking to the Site.</li>
|
||||
<li>Upload or transmit (or attempt to upload or to transmit) viruses, Trojan horses, or other material, including excessive use of capital letters and spamming (continuous posting of repetitive text), that interferes with any party’s uninterrupted use and enjoyment of the Site or modifies, impairs, disrupts, alters, or interferes with the use, features, functions, operation, or maintenance of the Site.</li>
|
||||
<li>Engage in any automated use of the system, such as using scripts to send comments or messages, or using any data mining, robots, or similar data gathering and extraction tools.</li>
|
||||
<li>Delete the copyright or other proprietary rights notice from any Content.</li>
|
||||
<li>Attempt to impersonate another user or person or use the username of another user.</li>
|
||||
<li>Upload or transmit (or attempt to upload or to transmit) any material that acts as a passive or active information collection or transmission mechanism, including without limitation, clear graphics interchange formats (“gifs”), 1×1 pixels, web bugs, cookies, or other similar devices (sometimes referred to as “spyware” or “passive collection mechanisms” or “pcms”).</li>
|
||||
<li>Interfere with, disrupt, or create an undue burden on the Site or the networks or services connected to the Site.</li>
|
||||
<li>Harass, annoy, intimidate, or threaten any of our employees or agents engaged in providing any portion of the Site to you.</li>
|
||||
<li>Attempt to bypass any measures of the Site designed to prevent or restrict access to the Site, or any portion of the Site.</li>
|
||||
<li>Copy or adapt the Site’s software, including but not limited to Flash, PHP, HTML, JavaScript, or other code.</li>
|
||||
<li>Except as permitted by applicable law, decipher, decompile, disassemble, or reverse engineer any of the software comprising or in any way making up a part of the Site.</li>
|
||||
<li>Except as may be the result of standard search engine or Internet browser usage, use, launch, develop, or distribute any automated system, including without limitation, any spider, robot, cheat utility, scraper, or offline reader that accesses the Site, or using or launching any unauthorized script or other software.</li>
|
||||
<li>Use a buying agent or purchasing agent to make purchases on the Site.</li>
|
||||
<li>Make any unauthorized use of the Site, including collecting usernames and/or email addresses of users by electronic or other means for the purpose of sending unsolicited email, or creating user accounts by automated means or under false pretenses.</li>
|
||||
<li>Use the Site as part of any effort to compete with us or otherwise use the Site and/or the Content for any revenue-generating endeavor or commercial enterprise.</li>
|
||||
</ul>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="9">
|
||||
<li><strong>USER GENERATED CONTRIBUTIONS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>The Site does not offer users to submit or post content. We may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated in accordance with the Site Privacy Policy. When you create or make available any Contributions, you thereby represent and warrant that:</p>
|
||||
|
||||
<ul>
|
||||
<li>The creation, distribution, transmission, public display, or performance, and the accessing, downloading, or copying of your Contributions do not and will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark, trade secret, or moral rights of any third party.</li>
|
||||
<li>You are the creator and owner of or have the necessary licenses, rights, consents, releases, and permissions to use and to authorize us, the Site, and other users of the Site to use your Contributions in any manner contemplated by the Site and these Terms of Use.</li>
|
||||
<li>You have the written consent, release, and/or permission of each and every identifiable individual person in your Contributions to use the name or likeness of each and every such identifiable individual person to enable inclusion and use of your Contributions in any manner contemplated by the Site and these Terms of Use.</li>
|
||||
<li>Your Contributions are not false, inaccurate, or misleading.</li>
|
||||
<li>Your Contributions are not unsolicited or unauthorized advertising, promotional materials, pyramid schemes, chain letters, spam, mass mailings, or other forms of solicitation.</li>
|
||||
<li>Your Contributions are not obscene, lewd, lascivious, filthy, violent, harassing, libelous, slanderous, or otherwise objectionable (as determined by us).</li>
|
||||
<li>Your Contributions do not ridicule, mock, disparage, intimidate, or abuse anyone.</li>
|
||||
<li>Your Contributions are not used to harass or threaten (in the legal sense of those terms) any other person and to promote violence against a specific person or class of people.</li>
|
||||
<li>Your Contributions do not violate any applicable law, regulation, or rule.</li>
|
||||
<li>Your Contributions do not violate the privacy or publicity rights of any third party.</li>
|
||||
<li>Your Contributions do not violate any applicable law concerning child pornography, or otherwise intended to protect the health or well-being of minors;</li>
|
||||
<li>Your Contributions do not include any offensive comments that are connected to race, national origin, gender, sexual preference, or physical handicap.</li>
|
||||
<li>Your Contributions do not otherwise violate, or link to material that violates, any provision of these Terms of Use, or any applicable law or regulation.</li>
|
||||
</ul>
|
||||
|
||||
<p>Any use of the Site or the Marketplace Offerings in violation of the foregoing violates these Terms of Use and may result in, among other things, termination or suspension of your rights to use the Site and the Marketplace Offerings.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="10">
|
||||
<li><strong>CONTRIBUTION LICENSE</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>You and Site agree that we may access, store, process, and use any information and personal data that you provide following the terms of the Privacy Policy and your choices (including settings).</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>By submitting suggestions or other feedback regarding the Site, you agree that we can use and share such feedback for any purpose without compensation to you.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>We do not assert any ownership over your Contributions. You retain full ownership of all of your Contributions and any intellectual property rights or other proprietary rights associated with your Contributions. We are not liable for any statements or representations in your Contributions provided by you in any area on the Site. You are solely responsible for your Contributions to the Site and you expressly agree to exonerate us from any and all responsibility and to refrain from any legal action against us regarding your Contributions.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="11">
|
||||
<li><strong>SOCIAL MEDIA</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>As part of the functionality of the Site, you may link your account with online accounts you have with third-party service providers (each such account, a “Third-Party Account”) by either: (1) providing your Third-Party Account login information through the Site; or (2) allowing us to access yourThird-PartyAccount, as is permitted under the applicable terms and conditions that govern your use of eachThird-PartyAccount. You represent and warrant that you are entitled to disclose yourThird-PartyAccount login information to us and/or grant us access to yourThird-PartyAccount, without breach by you of any of the terms and conditions that govern your use of the applicableThird-PartyAccount, and without obligating us to pay any fees or making us subject to any usage limitations imposed by the third-party service provider of theThird-PartyAccount. By granting us access to anyThird-PartyAccounts, you understand that (1) we may access, make available, and store (if applicable) any content that you have provided to and stored in yourThird-PartyAccount (the “Social Network Content”) so that it is available on and through the Site via your account, including without limitation any friend lists and (2) we may submit to and receive from yourThird-PartyAccount additional information to the extent you are notified when you link your account with theThird-PartyAccount. Depending on theThird-PartyAccounts you choose and subject to the privacy settings that you have set in suchThird-PartyAccounts, personally identifiable information that you post to yourThird-PartyAccounts may be available on and through your account on the Site. Please note that if aThird-PartyAccount or associated service becomes unavailable or our access to suchThird-PartyAccount is terminated by the third-party service provider, then Social Network Content may no longer be available on and through the Site. You will have the ability to disable the connection between your account on the Site and yourThird-PartyAccounts at any time. PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD-PARTY SERVICE PROVIDERS ASSOCIATED WITH YOUR THIRD-PARTY ACCOUNTS IS GOVERNED SOLELY BY YOUR AGREEMENT(S) WITH SUCH THIRD-PARTY SERVICE PROVIDERS. We make no effort to review any Social Network Content for any purpose, including but not limited to, for accuracy, legality, or non-infringement, and we are not responsible for any Social Network Content. You acknowledge and agree that we may access your email address book associated with aThird-PartyAccount and your contacts list stored on your mobile device or tablet computer solely for purposes of identifying and informing you of those contacts who have also registered to use the Site. You can deactivate the connection between the Site and yourThird-PartyAccount by contacting us using the contact information below or through your account settings (if applicable). We will attempt to delete any information stored on our servers that was obtained through suchThird-PartyAccount, except the username and profile picture that become associated with your account.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="12">
|
||||
<li><strong>SUBMISSIONS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Site or the Marketplace Offerings ("Submissions") provided by you to us are non-confidential and shall become our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to you. You hereby waive all moral rights to any such Submissions, and you hereby warrant that any such Submissions are original with you or that you have the right to submit such Submissions. You agree there shall be no recourse against us for any alleged or actual infringement or misappropriation of any proprietary right in your Submissions.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="13">
|
||||
<li><strong>SITE MANAGEMENT</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site and the Marketplace Offerings.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>We care about data privacy and security. Please review our Privacy Policy:<strong>/privacy</strong>. By using the Site or the Marketplace Offerings, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use. Please be advised the Site and the Marketplace Offerings are hosted inGermany. If you access the Site or the Marketplace Offerings from any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws inGermany, then through your continued use of the Site, you are transferring your data toGermany, and you expressly consent to have your data transferred to and processed inGermany.Further, we do not knowingly accept, request, or solicit information from children or knowingly market to children. Therefore, in accordance with the U.S. Children’s Online Privacy Protection Act, if we receive actual knowledge that anyone under the age of 13 has provided personal information to us without the requisite and verifiable parental consent, we will delete that information from the Site as quickly as is reasonably practical.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="15">
|
||||
<li><strong>TERM AND TERMINATION</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE AND THE MARKETPLACE OFFERINGS (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE AND THE MARKETPLACE OFFERINGS OR DELETEYOUR ACCOUNT ANDANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="16">
|
||||
<li><strong>MODIFICATIONS AND INTERRUPTIONS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Marketplace Offerings without notice at any time. We will not be liable to you or any third party for any modification, price change, suspension, or discontinuance of the Site or the Marketplace Offerings.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>We cannot guarantee the Site and the Marketplace Offerings will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site or the Marketplace Offerings at any time or for any reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site or the Marketplace Offerings during any downtime or discontinuance of the Site or the Marketplace Offerings. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or the Marketplace Offerings or to supply any corrections, updates, or releases in connection therewith.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="17">
|
||||
<li><strong>GOVERNING LAW</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>These conditions are governed by and interpreted following the laws ofGermany, and the use of the United Nations Convention of Contracts for the International Sales of Goods is expressly excluded. If your habitual residence is in the EU, and you are a consumer, you additionally possess the protection provided to you by obligatory provisions of the law in your country to residence.MY Companyand yourself both agree to submit to the non-exclusive jurisdiction of the courts ofBerlin, which means that you may make a claim to defend your consumer protection rights in regards to these Conditions of Use inGermany, or in the EU country in which you reside.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="18">
|
||||
<li><strong>DISPUTE RESOLUTION</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>The European Commission provides an online dispute resolution platform, which you can access here:<a href="https://ec.europa.eu/consumers/odr">https://ec.europa.eu/consumers/odr</a>. If you would like to bring this subject to our attention, please contact us.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="19">
|
||||
<li><strong>CORRECTIONS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>There may be information on the Site that contains typographical errors, inaccuracies, or omissions that may relate to the Marketplace Offerings, including descriptions, pricing, availability, and various other information. We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="20">
|
||||
<li><strong>DISCLAIMER</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE’S CONTENT OR THE CONTENT OF ANY WEBSITES LINKED TO THIS SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="21">
|
||||
<li><strong>LIMITATIONS OF LIABILITY</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="22">
|
||||
<li><strong>INDEMNIFICATION</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys’ fees and expenses, made by any third party due to or arising out of:(1) use of the Site; (2) breach of these Terms of Use; (3) any breach of your representations and warranties set forth in these Terms of Use; (4) your violation of the rights of a third party, including but not limited to intellectual property rights; or (5) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="23">
|
||||
<li><strong>USER DATA</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="24">
|
||||
<li><strong>ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>Visiting the Site, sending us emails, and completing online forms constitute electronic communications. You consent to receive electronic communications, and you agree that all agreements, notices, disclosures, and other communications we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communication be in writing. YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE. You hereby waive any rights or requirements under any statutes, regulations, rules, ordinances, or other laws in any jurisdiction which require an original signature or delivery or retention of non-electronic records, or to payments or the granting of credits by any means other than electronic means.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="25">
|
||||
<li><strong>CALIFORNIA USERS AND RESIDENTS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>If any complaint with us is not satisfactorily resolved, you can contact the Complaint Assistance Unit of the Division of Consumer Services of the California Department of Consumer Affairs in writing at 1625 North Market Blvd., Suite N 112, Sacramento, California 95834 or by telephone at (800) 952-5210 or (916) 445-1254.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="26">
|
||||
<li><strong>MISCELLANEOUS</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<ol start="27">
|
||||
<li><strong>CONTACT US</strong></li>
|
||||
</ol>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>In order to resolve a complaint regarding the Site or to receive further information regarding use of the Site, please contact us at:</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p><strong>MY Company</strong></p>
|
||||
|
||||
<p><strong>Some Street</strong></p>
|
||||
|
||||
<p><strong>Some City,Some State12356</strong></p>
|
||||
|
||||
<p><strong>Germany</strong></p>
|
||||
|
||||
<p><strong>Phone:112345678</strong></p>
|
||||
|
||||
<p><strong>myemail@eamil.com</strong></p>
|
|
@ -1,21 +0,0 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
|
||||
<body class="dark-mode">
|
||||
<div class="container privacy-card">
|
||||
<div class="row">
|
||||
<div class="col-md-10" style="height: 20px;"></div>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-10">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Terms of Service') }}</div>
|
||||
<div class="card-body">
|
||||
@include('information.tos-content')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@endsection
|
|
@ -1,65 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
||||
<link rel="icon"
|
||||
href="{{ \Illuminate\Support\Facades\Storage::disk('public')->exists('favicon.ico') ? \Illuminate\Support\Facades\Storage::disk('public')->url('favicon.ico') : asset('favicon.ico') }}"
|
||||
type="image/x-icon">
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="{{ asset('js/app.js') }}" defer></script>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
|
||||
<link rel="preload" href="{{ asset('plugins/fontawesome-free/css/all.min.css') }}" as="style"
|
||||
onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
|
||||
<noscript>
|
||||
<link rel="stylesheet" href="{{ asset('plugins/fontawesome-free/css/all.min.css') }}">
|
||||
</noscript>
|
||||
@if (config('SETTINGS::RECAPTCHA:ENABLED') == 'true')
|
||||
{!! htmlScriptTagJsApi() !!}
|
||||
@endif
|
||||
</head>
|
||||
@yield('content')
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@10.14.1/dist/sweetalert2.all.min.js"></script>
|
||||
<script>
|
||||
@if (Session::has('error'))
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Oops...',
|
||||
html: '{{ Session::get('error') }}',
|
||||
})
|
||||
@endif
|
||||
|
||||
@if (Session::has('success'))
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: '{{ Session::get('success') }}',
|
||||
position: 'top-end',
|
||||
showConfirmButton: false,
|
||||
background: '#343a40',
|
||||
toast: true,
|
||||
timer: 3000,
|
||||
timerProgressBar: true,
|
||||
didOpen: (toast) => {
|
||||
toast.addEventListener('mouseenter', Swal.stopTimer)
|
||||
toast.addEventListener('mouseleave', Swal.resumeTimer)
|
||||
}
|
||||
})
|
||||
@endif
|
||||
</script>
|
||||
|
||||
</html>
|
|
@ -1,522 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
||||
<link rel="icon"
|
||||
href="{{ \Illuminate\Support\Facades\Storage::disk('public')->exists('favicon.ico') ? asset('storage/favicon.ico') : asset('favicon.ico') }}"
|
||||
type="image/x-icon">
|
||||
|
||||
<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>
|
||||
|
||||
{{-- <link rel="stylesheet" href="{{asset('css/adminlte.min.css')}}"> --}}
|
||||
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs4/dt-1.10.24/datatables.min.css" />
|
||||
|
||||
{{-- summernote --}}
|
||||
<link rel="stylesheet" href="{{ asset('plugins/summernote/summernote-bs4.min.css') }}">
|
||||
|
||||
{{-- datetimepicker --}}
|
||||
<link rel="stylesheet"
|
||||
href="{{ asset('plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css') }}">
|
||||
|
||||
{{-- select2 --}}
|
||||
<link rel="stylesheet" href="{{ asset('plugins/select2/css/select2.min.css') }}">
|
||||
|
||||
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
|
||||
<link rel="preload" href="{{ asset('plugins/fontawesome-free/css/all.min.css') }}" as="style"
|
||||
onload="this.onload=null;this.rel='stylesheet'">
|
||||
<noscript>
|
||||
<link rel="stylesheet" href="{{ asset('plugins/fontawesome-free/css/all.min.css') }}">
|
||||
</noscript>
|
||||
<script src="{{ asset('js/app.js') }}"></script>
|
||||
</head>
|
||||
|
||||
<body class="sidebar-mini layout-fixed dark-mode" style="height: auto;">
|
||||
<div class="wrapper">
|
||||
<!-- Navbar -->
|
||||
<nav class="main-header sticky-top navbar navbar-expand navbar-dark navbar-light">
|
||||
<!-- Left navbar links -->
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i
|
||||
class="fas fa-bars"></i></a>
|
||||
</li>
|
||||
<li class="nav-item d-none d-sm-inline-block">
|
||||
<a href="{{ route('home') }}" class="nav-link"><i
|
||||
class="fas fa-home mr-2"></i>{{ __('Home') }}</a>
|
||||
</li>
|
||||
@if (config('SETTINGS::DISCORD:INVITE_URL'))
|
||||
<li class="nav-item d-none d-sm-inline-block">
|
||||
<a href="{{ config('SETTINGS::DISCORD:INVITE_URL') }}" class="nav-link" target="__blank"><i
|
||||
class="fab fa-discord mr-2"></i>{{ __('Discord') }}</a>
|
||||
</li>
|
||||
@endif
|
||||
<!-- Language Selection -->
|
||||
@if (config('SETTINGS::LOCALE:CLIENTS_CAN_CHANGE') == 'true')
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link" href="#" id="languageDropdown" role="button" data-toggle="dropdown"
|
||||
aria-haspopup="true" aria-expanded="false">
|
||||
<span class="mr-1 d-lg-inline text-gray-600">
|
||||
<small><i class="fa fa-language mr-2"></i></small>{{ __('Language') }}
|
||||
</span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
|
||||
aria-labelledby="changeLocale">
|
||||
<form method="post" action="{{ route('changeLocale') }}" class="nav-item text-center">
|
||||
@csrf
|
||||
@foreach (explode(',', config('SETTINGS::LOCALE:AVAILABLE')) as $key)
|
||||
<button class="dropdown-item" name="inputLocale" value="{{ $key }}">
|
||||
{{ __($key) }}
|
||||
</button>
|
||||
@endforeach
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
<!-- End Language Selection -->
|
||||
@endif
|
||||
</ul>
|
||||
|
||||
<!-- Right navbar links -->
|
||||
<ul class="navbar-nav ml-auto">
|
||||
<!-- Notifications Dropdown Menu -->
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link" data-toggle="dropdown" href="#">
|
||||
<i class="far fa-bell"></i>
|
||||
@if (Auth::user()->unreadNotifications->count() != 0)
|
||||
<span
|
||||
class="badge badge-warning navbar-badge">{{ Auth::user()->unreadNotifications->count() }}</span>
|
||||
@endif
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
|
||||
<span class="dropdown-item dropdown-header">{{ Auth::user()->unreadNotifications->count() }}
|
||||
{{ __('Notifications') }}</span>
|
||||
<div class="dropdown-divider"></div>
|
||||
|
||||
@foreach (Auth::user()->unreadNotifications->sortBy('created_at')->take(5) as $notification)
|
||||
<a href="{{ route('notifications.show', $notification->id) }}" class="dropdown-item">
|
||||
<span class="d-inline-block text-truncate" style="max-width: 150px;"><i
|
||||
class="fas fa-envelope mr-2"></i>{{ $notification->data['title'] }}</span>
|
||||
<span
|
||||
class="float-right text-muted text-sm">{{ $notification->created_at->longAbsoluteDiffForHumans() }}
|
||||
ago</span>
|
||||
</a>
|
||||
@endforeach
|
||||
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="{{ route('notifications.index') }}"
|
||||
class="dropdown-item dropdown-footer">{{ __('See all Notifications') }}</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="{{ route('notifications.readAll') }}"
|
||||
class="dropdown-item dropdown-footer">{{ __('Mark all as read') }}</a>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link" href="#" id="userDropdown" role="button" data-toggle="dropdown"
|
||||
aria-haspopup="true" aria-expanded="false">
|
||||
<span class="mr-1 d-lg-inline text-gray-600">
|
||||
<small><i class="fas fa-coins mr-2"></i></small>{{ Auth::user()->credits() }}
|
||||
</span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
|
||||
aria-labelledby="userDropdown">
|
||||
<a class="dropdown-item" href="{{ route('store.index') }}">
|
||||
<i class="fas fa-coins fa-sm fa-fw mr-2 text-gray-400"></i>
|
||||
{{ __('Store') }}
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" data-toggle="modal" data-target="#redeemVoucherModal"
|
||||
href="javascript:void(0)">
|
||||
<i class="fas fa-money-check-alt fa-sm fa-fw mr-2 text-gray-400"></i>
|
||||
{{ __('Redeem code') }}
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="nav-item dropdown no-arrow">
|
||||
<a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="mr-1 d-lg-inline text-gray-600 small">
|
||||
{{ Auth::user()->name }}
|
||||
<img width="28px" height="28px" class="rounded-circle ml-1"
|
||||
src="{{ Auth::user()->getAvatar() }}">
|
||||
</span>
|
||||
</a>
|
||||
<!-- Dropdown - User Information -->
|
||||
<div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
|
||||
aria-labelledby="userDropdown">
|
||||
<a class="dropdown-item" href="{{ route('profile.index') }}">
|
||||
<i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
|
||||
{{ __('Profile') }}
|
||||
</a>
|
||||
{{-- <a class="dropdown-item" href="#"> --}}
|
||||
{{-- <i class="fas fa-list fa-sm fa-fw mr-2 text-gray-400"></i> --}}
|
||||
{{-- Activity Log --}}
|
||||
{{-- </a> --}}
|
||||
@if (session()->get('previousUser'))
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="{{ route('users.logbackin') }}">
|
||||
<i class="fas fa-sign-in-alt fa-sm fa-fw mr-2 text-gray-400"></i>
|
||||
{{ __('Log back in') }}
|
||||
</a>
|
||||
@endif
|
||||
<div class="dropdown-divider"></div>
|
||||
<form method="post" action="{{ route('logout') }}">
|
||||
@csrf
|
||||
<button class="dropdown-item" href="#" data-toggle="modal"
|
||||
data-target="#logoutModal">
|
||||
<i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>
|
||||
{{ __('Logout') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<!-- /.navbar -->
|
||||
<!-- Main Sidebar Container -->
|
||||
<aside class="main-sidebar sidebar-open sidebar-dark-primary elevation-4">
|
||||
<!-- Brand Logo -->
|
||||
<a href="{{ route('home') }}" class="brand-link">
|
||||
<img width="64" height="64"
|
||||
src="{{ \Illuminate\Support\Facades\Storage::disk('public')->exists('icon.png') ? asset('storage/icon.png') : asset('images/controlpanel_logo.png') }}"
|
||||
alt="{{ config('app.name', 'Laravel') }} Logo" class="brand-image img-circle"
|
||||
style="opacity: .8">
|
||||
<span class="brand-text font-weight-light">{{ config('app.name', 'Controlpanel.gg') }}</span>
|
||||
</a>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="sidebar" style="overflow-y: auto">
|
||||
|
||||
<!-- Sidebar Menu -->
|
||||
<nav class="my-2">
|
||||
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu"
|
||||
data-accordion="false">
|
||||
<!-- Add icons to the links using the .nav-icon class
|
||||
with font-awesome or any other icon font library -->
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('home') }}"
|
||||
class="nav-link @if (Request::routeIs('home')) active @endif">
|
||||
<i class="nav-icon fa fa-home"></i>
|
||||
<p>{{ __('Dashboard') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('servers.index') }}"
|
||||
class="nav-link @if (Request::routeIs('servers.*')) active @endif">
|
||||
<i class="nav-icon fa fa-server"></i>
|
||||
<p>{{ __('Servers') }}
|
||||
<span class="badge badge-info right">{{ Auth::user()->servers()->count() }} /
|
||||
{{ Auth::user()->server_limit }}</span>
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@if (env('APP_ENV') == 'local' ||
|
||||
(config('SETTINGS::PAYMENTS:PAYPAL:SECRET') && config('SETTINGS::PAYMENTS:PAYPAL:CLIENT_ID')) ||
|
||||
(config('SETTINGS::PAYMENTS:STRIPE:SECRET') &&
|
||||
config('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_SECRET') &&
|
||||
config('SETTINGS::PAYMENTS:STRIPE:METHODS')))
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('store.index') }}"
|
||||
class="nav-link @if (Request::routeIs('store.*') || Request::routeIs('checkout')) active @endif">
|
||||
<i class="nav-icon fa fa-coins"></i>
|
||||
<p>{{ __('Store') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (config('SETTINGS::TICKET:ENABLED'))
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('ticket.index') }}"
|
||||
class="nav-link @if (Request::routeIs('ticket.*')) active @endif">
|
||||
<i class="nav-icon fas fas fa-ticket-alt"></i>
|
||||
<p>{{ __('Support Ticket') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if ((Auth::user()->role == 'admin' || Auth::user()->role == 'moderator') && config('SETTINGS::TICKET:ENABLED'))
|
||||
<li class="nav-header">{{ __('Moderation') }}</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('moderator.ticket.index') }}"
|
||||
class="nav-link @if (Request::routeIs('moderator.ticket.index')) active @endif">
|
||||
<i class="nav-icon fas fa-ticket-alt"></i>
|
||||
<p>{{ __('Ticket List') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('moderator.ticket.blacklist') }}"
|
||||
class="nav-link @if (Request::routeIs('moderator.ticket.blacklist')) active @endif">
|
||||
<i class="nav-icon fas fa-user-times"></i>
|
||||
<p>{{ __('Ticket Blacklist') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if (Auth::user()->role == 'admin')
|
||||
<li class="nav-header">{{ __('Administration') }}</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.overview.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.overview.*')) active @endif">
|
||||
<i class="nav-icon fa fa-home"></i>
|
||||
<p>{{ __('Overview') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.settings.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.settings.*')) active @endif">
|
||||
<i class="nav-icon fas fa-tools"></i>
|
||||
<p>{{ __('Settings') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.api.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.api.*')) active @endif">
|
||||
<i class="nav-icon fa fa-gamepad"></i>
|
||||
<p>{{ __('Application API') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-header">{{ __('Management') }}</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.users.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.users.*')) active @endif">
|
||||
<i class="nav-icon fas fa-users"></i>
|
||||
<p>{{ __('Users') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.servers.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.servers.*')) active @endif">
|
||||
<i class="nav-icon fas fa-server"></i>
|
||||
<p>{{ __('Servers') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.products.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.products.*')) active @endif">
|
||||
<i class="nav-icon fas fa-sliders-h"></i>
|
||||
<p>{{ __('Products') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.store.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.store.*')) active @endif">
|
||||
<i class="nav-icon fas fa-shopping-basket"></i>
|
||||
<p>{{ __('Store') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.vouchers.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.vouchers.*')) active @endif">
|
||||
<i class="nav-icon fas fa-money-check-alt"></i>
|
||||
<p>{{ __('Vouchers') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.partners.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.partners.*')) active @endif">
|
||||
<i class="nav-icon fas fa-handshake"></i>
|
||||
<p>{{ __('Partners') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{{-- <li class="nav-header">Pterodactyl</li> --}}
|
||||
|
||||
{{-- <li class="nav-item"> --}}
|
||||
{{-- <a href="{{route('admin.nodes.index')}}" --}}
|
||||
{{-- class="nav-link @if (Request::routeIs('admin.nodes.*')) active @endif"> --}}
|
||||
{{-- <i class="nav-icon fas fa-sitemap"></i> --}}
|
||||
{{-- <p>Nodes</p> --}}
|
||||
{{-- </a> --}}
|
||||
{{-- </li> --}}
|
||||
|
||||
{{-- <li class="nav-item"> --}}
|
||||
{{-- <a href="{{route('admin.nests.index')}}" --}}
|
||||
{{-- class="nav-link @if (Request::routeIs('admin.nests.*')) active @endif"> --}}
|
||||
{{-- <i class="nav-icon fas fa-th-large"></i> --}}
|
||||
{{-- <p>Nests</p> --}}
|
||||
{{-- </a> --}}
|
||||
{{-- </li> --}}
|
||||
|
||||
|
||||
<li class="nav-header">{{ __('Other') }}</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.usefullinks.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.usefullinks.*')) active @endif">
|
||||
<i class="nav-icon fas fa-link"></i>
|
||||
<p>{{ __('Useful Links') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-header">{{ __('Logs') }}</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.payments.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.payments.*')) active @endif">
|
||||
<i class="nav-icon fas fa-money-bill-wave"></i>
|
||||
<p>{{ __('Payments') }}
|
||||
<span
|
||||
class="badge badge-success right">{{ \App\Models\Payment::count() }}</span>
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.activitylogs.index') }}"
|
||||
class="nav-link @if (Request::routeIs('admin.activitylogs.*')) active @endif">
|
||||
<i class="nav-icon fas fa-clipboard-list"></i>
|
||||
<p>{{ __('Activity Logs') }}</p>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<!-- /.sidebar-menu -->
|
||||
</div>
|
||||
<!-- /.sidebar -->
|
||||
</aside>
|
||||
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
|
||||
<div class="content-wrapper">
|
||||
|
||||
@if (!Auth::user()->hasVerifiedEmail())
|
||||
@if (Auth::user()->created_at->diffInHours(now(), false) > 1)
|
||||
<div class="alert alert-warning p-2 m-2">
|
||||
<h5><i class="icon fas fa-exclamation-circle"></i> {{ __('Warning!') }}</h5>
|
||||
{{ __('You have not yet verified your email address') }} <a class="text-primary"
|
||||
href="{{ route('verification.send') }}">{{ __('Click here to resend verification email') }}</a>
|
||||
<br>
|
||||
{{ __('Please contact support If you didnt receive your verification email.') }}
|
||||
</div>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
@yield('content')
|
||||
|
||||
@include('models.redeem_voucher_modal')
|
||||
</div>
|
||||
<!-- /.content-wrapper -->
|
||||
<footer class="main-footer">
|
||||
<strong>Copyright © 2021-{{ date('Y') }} <a
|
||||
href="{{ url('/') }}">{{ env('APP_NAME', 'Laravel') }}</a>.</strong>
|
||||
All rights
|
||||
reserved. Powered by <a href="https://controlpanel.gg">ControlPanel</a>.
|
||||
@if (!str_contains(config('BRANCHNAME'), 'main'))
|
||||
Version <b>{{ config('app')['version'] }} - {{ config('BRANCHNAME') }}</b>
|
||||
@endif
|
||||
|
||||
{{-- Show imprint and privacy link --}}
|
||||
<div class="float-right d-none d-sm-inline-block">
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_IMPRINT'))
|
||||
<a target="_blank" href="{{ route('imprint') }}"><strong>{{ __('Imprint') }}</strong></a> |
|
||||
@endif
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_PRIVACY'))
|
||||
<a target="_blank" href="{{ route('privacy') }}"><strong>{{ __('Privacy') }}</strong></a>
|
||||
@endif
|
||||
@if (config('SETTINGS::SYSTEM:SHOW_TOS'))
|
||||
| <a target="_blank" href="{{ route('tos') }}"><strong>{{ __('Terms of Service') }}</strong></a>
|
||||
@endif
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Control Sidebar -->
|
||||
<aside class="control-sidebar control-sidebar-dark">
|
||||
<!-- Control sidebar content goes here -->
|
||||
</aside>
|
||||
<!-- /.control-sidebar -->
|
||||
</div>
|
||||
<!-- ./wrapper -->
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@10.14.1/dist/sweetalert2.all.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="https://cdn.datatables.net/v/bs4/dt-1.10.24/datatables.min.js"></script>
|
||||
<!-- Summernote -->
|
||||
<script src="{{ asset('plugins/summernote/summernote-bs4.min.js') }}"></script>
|
||||
<!-- select2 -->
|
||||
<script src="{{ asset('plugins/select2/js/select2.min.js') }}"></script>
|
||||
|
||||
<!-- Moment.js -->
|
||||
<script src="{{ asset('plugins/moment/moment.min.js') }}"></script>
|
||||
|
||||
<!-- Datetimepicker -->
|
||||
<script src="{{ asset('plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js') }}"></script>
|
||||
|
||||
<!-- Select2 -->
|
||||
<script src={{ asset('plugins/select2/js/select2.min.js') }}></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
@if (Session::has('error'))
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Oops...',
|
||||
html: '{{ Session::get('error') }}',
|
||||
})
|
||||
@endif
|
||||
@if (Session::has('success'))
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: '{{ Session::get('success') }}',
|
||||
position: 'top-end',
|
||||
showConfirmButton: false,
|
||||
background: '#343a40',
|
||||
toast: true,
|
||||
timer: 3000,
|
||||
timerProgressBar: true,
|
||||
didOpen: (toast) => {
|
||||
toast.addEventListener('mouseenter', Swal.stopTimer)
|
||||
toast.addEventListener('mouseleave', Swal.resumeTimer)
|
||||
}
|
||||
})
|
||||
@endif
|
||||
@if (Session::has('info'))
|
||||
Swal.fire({
|
||||
icon: 'info',
|
||||
title: '{{ Session::get('info') }}',
|
||||
position: 'top-end',
|
||||
showConfirmButton: false,
|
||||
background: '#343a40',
|
||||
toast: true,
|
||||
timer: 3000,
|
||||
timerProgressBar: true,
|
||||
didOpen: (toast) => {
|
||||
toast.addEventListener('mouseenter', Swal.stopTimer)
|
||||
toast.addEventListener('mouseleave', Swal.resumeTimer)
|
||||
}
|
||||
})
|
||||
@endif
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,18 +0,0 @@
|
|||
@component('mail::message')
|
||||
# {{__('Thank you for your purchase!')}}
|
||||
{{__('Your payment has been confirmed; Your credit balance has been updated.')}}'<br>
|
||||
|
||||
# Details
|
||||
___
|
||||
### {{__('Payment ID')}}: **{{$payment->id}}**<br>
|
||||
### {{__('Status')}}: **{{$payment->status}}**<br>
|
||||
### {{__('Price')}}: **{{$payment->formatToCurrency($payment->total_price)}}**<br>
|
||||
### {{__('Type')}}: **{{$payment->type}}**<br>
|
||||
### {{__('Amount')}}: **{{$payment->amount}}**<br>
|
||||
### {{__('Balance')}}: **{{$payment->user->credits}}**<br>
|
||||
### {{__('User ID')}}: **{{$payment->user_id}}**<br>
|
||||
|
||||
<br>
|
||||
{{__('Thanks')}},<br>
|
||||
{{ config('app.name') }}
|
||||
@endcomponent
|
|
@ -1,25 +0,0 @@
|
|||
@component('mail::message')
|
||||
Ticket #{{$ticket->ticket_id}} has been opened by **{{$user->name}}**
|
||||
|
||||
### Details:
|
||||
Client: {{$user->name}} <br>
|
||||
Subject: {{$ticket->title}} <br>
|
||||
Category: {{ $ticket->ticketcategory->name }} <br>
|
||||
Priority: {{ $ticket->priority }} <br>
|
||||
Status: {{ $ticket->status }} <br>
|
||||
|
||||
___
|
||||
```
|
||||
{{ $ticket->message }}
|
||||
```
|
||||
___
|
||||
<br>
|
||||
You can respond to this ticket by simply replying to this email or through the admin area at the url below.
|
||||
<br>
|
||||
|
||||
{{ route('moderator.ticket.show', ['ticket_id' => $ticket->ticket_id]) }}
|
||||
|
||||
<br>
|
||||
{{__('Thanks')}},<br>
|
||||
{{ config('app.name') }}
|
||||
@endcomponent
|
|
@ -1,25 +0,0 @@
|
|||
@component('mail::message')
|
||||
Ticket #{{$ticket->ticket_id}} has had a new reply posted by **{{$user->name}}**
|
||||
|
||||
### Details
|
||||
Client: {{$user->name}} <br>
|
||||
Subject: {{$ticket->title}} <br>
|
||||
Category: {{ $ticket->ticketcategory->name }} <br>
|
||||
Priority: {{ $ticket->priority }} <br>
|
||||
Status: {{ $ticket->status }} <br>
|
||||
|
||||
___
|
||||
```
|
||||
{{ $newmessage }}
|
||||
```
|
||||
___
|
||||
<br>
|
||||
You can respond to this ticket by simply replying to this email or through the admin area at the url below.
|
||||
<br>
|
||||
|
||||
{{ route('moderator.ticket.show', ['ticket_id' => $ticket->ticket_id]) }}
|
||||
|
||||
<br>
|
||||
{{__('Thanks')}},<br>
|
||||
{{ config('app.name') }}
|
||||
@endcomponent
|
|
@ -1,13 +0,0 @@
|
|||
@component('mail::message')
|
||||
Hello {{$ticket->user->name}},
|
||||
|
||||
This is a notification that we have received your support request, and your ticket number is **#{{$ticket->ticket_id}}**.
|
||||
|
||||
We will be responding to this ticket as soon as possible. If this is a Setup request, please understand that these requests take longer than regular support timeframes. Please be aware that Setups may take up to 48 hours to be completed.
|
||||
|
||||
Thank you so much for being so understanding.
|
||||
|
||||
<br>
|
||||
{{__('Thanks')}},<br>
|
||||
{{ config('app.name') }}
|
||||
@endcomponent
|
|
@ -1,18 +0,0 @@
|
|||
@component('mail::message')
|
||||
A response has been added to your ticket. Please see below for our response!
|
||||
|
||||
### Details
|
||||
Ticket ID : {{ $ticket->ticket_id }} <br>
|
||||
Subject: {{ $ticket->title }} <br>
|
||||
Status: {{ $ticket->status }} <br>
|
||||
|
||||
___
|
||||
```
|
||||
{{ $newmessage }}
|
||||
```
|
||||
___
|
||||
<br>
|
||||
<br>
|
||||
{{__('Thanks')}},<br>
|
||||
{{ config('app.name') }}
|
||||
@endcomponent
|
|
@ -1,109 +0,0 @@
|
|||
<!-- The Modal -->
|
||||
<div class="modal fade" id="redeemVoucherModal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
|
||||
<!-- Modal Header -->
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">{{__('Redeem voucher code')}}</h4>
|
||||
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
</div>
|
||||
|
||||
<!-- Modal body -->
|
||||
<div class="modal-body">
|
||||
<form id="redeemVoucherForm" onsubmit="return false" method="post" action="{{route('voucher.redeem')}}">
|
||||
<div class="form-group">
|
||||
<label for="redeemVoucherCode">{{__('Code')}}</label>
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text">
|
||||
<i class="fas fa-money-check-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
<input id="redeemVoucherCode" name="code" placeholder="SUMMER" type="text"
|
||||
class="form-control">
|
||||
</div>
|
||||
<span id="redeemVoucherCodeError" class="text-danger"></span>
|
||||
<span id="redeemVoucherCodeSuccess" class="text-success"></span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Modal footer -->
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal">{{__('Close')}}</button>
|
||||
<button name="submit" id="redeemVoucherSubmit" onclick="redeemVoucherCode()" type="button"
|
||||
class="btn btn-primary">{{__('Redeem')}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
function redeemVoucherCode() {
|
||||
let form = document.getElementById('redeemVoucherForm')
|
||||
let button = document.getElementById('redeemVoucherSubmit')
|
||||
let input = document.getElementById('redeemVoucherCode')
|
||||
|
||||
console.log(form.method, form.action)
|
||||
button.disabled = true
|
||||
|
||||
$.ajax({
|
||||
method: form.method,
|
||||
url: form.action,
|
||||
dataType: 'json',
|
||||
data: {
|
||||
"_token": "{{ csrf_token() }}",
|
||||
code: input.value
|
||||
},
|
||||
success: function (response) {
|
||||
resetForm()
|
||||
redeemVoucherSetSuccess(response)
|
||||
setTimeout(() => {
|
||||
$('#redeemVoucherModal').modal('toggle');
|
||||
} , 1500)
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
resetForm()
|
||||
redeemVoucherSetError(jqXHR)
|
||||
console.error(jqXHR.responseJSON)
|
||||
},
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
function resetForm() {
|
||||
let button = document.getElementById('redeemVoucherSubmit')
|
||||
let input = document.getElementById('redeemVoucherCode')
|
||||
let successLabel = document.getElementById('redeemVoucherCodeSuccess')
|
||||
let errorLabel = document.getElementById('redeemVoucherCodeError')
|
||||
|
||||
input.classList.remove('is-invalid')
|
||||
input.classList.remove('is-valid')
|
||||
successLabel.innerHTML = ''
|
||||
errorLabel.innerHTML = ''
|
||||
button.disabled = false
|
||||
}
|
||||
|
||||
function redeemVoucherSetError(error) {
|
||||
let input = document.getElementById('redeemVoucherCode')
|
||||
let errorLabel = document.getElementById('redeemVoucherCodeError')
|
||||
|
||||
input.classList.add("is-invalid")
|
||||
|
||||
errorLabel.innerHTML = error.status === 422 ? error.responseJSON.errors.code[0] : error.responseJSON.message
|
||||
}
|
||||
|
||||
function redeemVoucherSetSuccess(response) {
|
||||
let input = document.getElementById('redeemVoucherCode')
|
||||
let successLabel = document.getElementById('redeemVoucherCodeSuccess')
|
||||
|
||||
successLabel.innerHTML = response.success
|
||||
input.classList.remove('is-invalid')
|
||||
input.classList.add('is-valid')
|
||||
}
|
||||
</script>
|
|
@ -1,182 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Ticket Blacklist') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('moderator.ticket.blacklist') }}">{{ __('Ticket Blacklist') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fas fa-users mr-2"></i>{{__('Blacklist List')}}</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('User')}}</th>
|
||||
<th>{{__('Status')}}</th>
|
||||
<th>{{__('Reason')}}</th>
|
||||
<th>{{__('Created At')}}</th>
|
||||
<th>{{__('Actions')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">{{__('Add To Blacklist')}}
|
||||
<i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="{{__('please make the best of it')}}"
|
||||
class="fas fa-info-circle"></i></h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{route('moderator.ticket.blacklist.add')}}" method="POST" class="ticket-form">
|
||||
@csrf
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<label for="user_id">{{ __('User') }}:
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{ __('Please note, the blacklist will make the user unable to make a ticket/reply again') }}" class="fas fa-info-circle"></i>
|
||||
</label>
|
||||
<select id="user_id" style="width:100%" class="custom-select" name="user_id" required
|
||||
autocomplete="off" @error('user_id') is-invalid @enderror>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group ">
|
||||
<label for="reason" class="control-label">{{__("Reason")}}</label>
|
||||
<input id="reason" type="text" class="form-control" name="reason" placeholder="Input Some Reason" required>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary ticket-once">
|
||||
{{__('Submit')}}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('moderator.ticket.blacklist.datatable')}}",
|
||||
columns: [
|
||||
{data: 'user' , name : 'user.name'},
|
||||
{data: 'status'},
|
||||
{data: 'reason'},
|
||||
{data: 'created_at', sortable: false},
|
||||
{data: 'actions', sortable: false},
|
||||
],
|
||||
fnDrawCallback: function( oSettings ) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script type="application/javascript">
|
||||
function initUserIdSelect(data) {
|
||||
function escapeHtml(str) {
|
||||
var div = document.createElement('div');
|
||||
div.appendChild(document.createTextNode(str));
|
||||
return div.innerHTML;
|
||||
}
|
||||
|
||||
$('#user_id').select2({
|
||||
ajax: {
|
||||
url: '/admin/users.json',
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
|
||||
data: function (params) {
|
||||
return {
|
||||
filter: { email: params.term },
|
||||
page: params.page,
|
||||
};
|
||||
},
|
||||
|
||||
processResults: function (data, params) {
|
||||
return { results: data };
|
||||
},
|
||||
|
||||
cache: true,
|
||||
},
|
||||
|
||||
data: data,
|
||||
escapeMarkup: function (markup) { return markup; },
|
||||
minimumInputLength: 2,
|
||||
templateResult: function (data) {
|
||||
if (data.loading) return escapeHtml(data.text);
|
||||
|
||||
return '<div class="user-block"> \
|
||||
<img class="img-circle img-bordered-xs" src="' + escapeHtml(data.avatarUrl) + '?s=120" alt="User Image"> \
|
||||
<span class="username"> \
|
||||
<a href="#">' + escapeHtml(data.name) +'</a> \
|
||||
</span> \
|
||||
<span class="description"><strong>' + escapeHtml(data.email) + '</strong>' + '</span> \
|
||||
</div>';
|
||||
},
|
||||
templateSelection: function (data) {
|
||||
return '<div> \
|
||||
<span> \
|
||||
<img class="img-rounded img-bordered-xs" src="' + escapeHtml(data.avatarUrl) + '?s=120" style="height:28px;margin-top:-4px;" alt="User Image"> \
|
||||
</span> \
|
||||
<span style="padding-left:5px;"> \
|
||||
' + escapeHtml(data.name) + ' (<strong>' + escapeHtml(data.email) + '</strong>) \
|
||||
</span> \
|
||||
</div>';
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
@if (old('user_id'))
|
||||
$.ajax({
|
||||
url: '/admin/users.json?user_id={{ old('user_id') }}',
|
||||
dataType: 'json',
|
||||
}).then(function (data) {
|
||||
initUserIdSelect([ data ]);
|
||||
});
|
||||
@else
|
||||
initUserIdSelect();
|
||||
@endif
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Ticket')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('moderator.ticket.index')}}">{{__('Ticket List')}}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-ticket-alt mr-2"></i>{{__('Ticket List')}}</h5>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Category')}}</th>
|
||||
<th>{{__('Title')}}</th>
|
||||
<th>{{__('User')}}</th>
|
||||
<th>{{__('Priority')}}</th>
|
||||
<th>{{__('Status')}}</th>
|
||||
<th>{{__('Last Updated')}}</th>
|
||||
<th>{{__('Actions')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('moderator.ticket.datatable')}}",
|
||||
order: [[ 4, "desc" ]],
|
||||
columns: [
|
||||
{data: 'category'},
|
||||
{data: 'title'},
|
||||
{data: 'user_id'},
|
||||
{data: 'priority'},
|
||||
{data: 'status'},
|
||||
{data: 'updated_at', type: 'num', render: {_: 'display', sort: 'raw'}},
|
||||
{data: 'actions', sortable: false},
|
||||
],
|
||||
fnDrawCallback: function( oSettings ) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,144 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Ticket') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('moderator.ticket.index') }}">{{ __('Ticket') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-users mr-2"></i>#{{ $ticket->ticket_id }}</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="ticket-info">
|
||||
@if(!empty($server))
|
||||
<p><b>Server:</b> <a href="{{ config("SETTINGS::SYSTEM:PTERODACTYL:URL") . '/admin/servers/view/' . $server->pterodactyl_id }}" target="__blank">{{ $server->name }}</a></p>
|
||||
@endif
|
||||
<p><b>Title:</b> {{ $ticket->title }}</p>
|
||||
<p><b>Category:</b> {{ $ticketcategory->name }}</p>
|
||||
<p>
|
||||
@if ($ticket->status === 'Open')
|
||||
<b>Status:</b> <span class="badge badge-success">Open</span>
|
||||
@elseif ($ticket->status === 'Closed')
|
||||
<b>Status:</b> <span class="badge badge-danger">Closed</span>
|
||||
@elseif ($ticket->status === 'Answered')
|
||||
<b>Status:</b> <span class="badge badge-info">Answered</span>
|
||||
@elseif ($ticket->status === 'Client Reply')
|
||||
<b>Status:</b> <span class="badge badge-warning">Client Reply</span>
|
||||
@endif
|
||||
</p>
|
||||
<p><b>Created on:</b> {{ $ticket->created_at->diffForHumans() }}</p>
|
||||
@if($ticket->status!='Closed')
|
||||
<form class="d-inline" method="post" action="{{route('moderator.ticket.close', ['ticket_id' => $ticket->ticket_id ])}}">
|
||||
{{csrf_field()}}
|
||||
{{method_field("POST") }}
|
||||
<button data-content="{{__("Close")}}" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm text-white btn-warning mr-1"><i class="fas fa-times"></i>{{__("Close")}}</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-cloud mr-2"></i>{{__('Comment')}}</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><img
|
||||
src="https://www.gravatar.com/avatar/{{ md5(strtolower($ticket->user->email)) }}?s=25"
|
||||
class="user-image" alt="User Image">
|
||||
<a href="/admin/users/{{$ticket->user->id}}">{{ $ticket->user->name }}</a>
|
||||
@if($ticket->user->role === "member")
|
||||
<span class="badge badge-secondary"> Member </span>
|
||||
@elseif ($ticket->user->role === "client")
|
||||
<span class="badge badge-success"> Client </span>
|
||||
@elseif ($ticket->user->role === "moderator")
|
||||
<span class="badge badge-info"> Moderator </span>
|
||||
@elseif ($ticket->user->role === "admin")
|
||||
<span class="badge badge-danger"> Admin </span>
|
||||
@endif
|
||||
</h5>
|
||||
<span class="badge badge-primary">{{ $ticket->created_at->diffForHumans() }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body" style="white-space:pre-wrap">{{ $ticket->message }}</div>
|
||||
</div>
|
||||
@foreach ($ticketcomments as $ticketcomment)
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><img
|
||||
src="https://www.gravatar.com/avatar/{{ md5(strtolower($ticketcomment->user->email)) }}?s=25"
|
||||
class="user-image" alt="User Image">
|
||||
<a href="/admin/users/{{$ticketcomment->user->id}}">{{ $ticketcomment->user->name }}</a>
|
||||
@if($ticketcomment->user->role === "member")
|
||||
<span class="badge badge-secondary"> Member </span>
|
||||
@elseif ($ticketcomment->user->role === "client")
|
||||
<span class="badge badge-success"> Client </span>
|
||||
@elseif ($ticketcomment->user->role === "moderator")
|
||||
<span class="badge badge-info"> Moderator </span>
|
||||
@elseif ($ticketcomment->user->role === "admin")
|
||||
<span class="badge badge-danger"> Admin </span>
|
||||
@endif
|
||||
</h5>
|
||||
<span class="badge badge-primary">{{ $ticketcomment->created_at->diffForHumans() }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body" style="white-space:pre-wrap">{{ $ticketcomment->ticketcomment }}</div>
|
||||
</div>
|
||||
@endforeach
|
||||
<div class="comment-form">
|
||||
<form action="{{ route('moderator.ticket.reply')}}" method="POST" class="form">
|
||||
{!! csrf_field() !!}
|
||||
<input type="hidden" name="ticket_id" value="{{ $ticket->id }}">
|
||||
<div class="form-group{{ $errors->has('ticketcomment') ? ' has-error' : '' }}">
|
||||
<textarea rows="10" id="ticketcomment" class="form-control" name="ticketcomment"></textarea>
|
||||
@if ($errors->has('ticketcomment'))
|
||||
<span class="help-block">
|
||||
<strong>{{ $errors->first('ticketcomment') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
@endsection
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Notifications')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted" href="{{route('notifications.index')}}">{{__('Notifications')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<!-- CUSTOM CONTENT -->
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<p>{{__('All notifications')}}</p>
|
||||
</div>
|
||||
<a class="float-right">
|
||||
<a href="{{route('notifications.readAll')}}"><button class="btn btn-info btn-xs">{{__('Mark all as read')}}</button></a>
|
||||
|
||||
|
||||
@foreach($notifications as $notification)
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header ">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div>
|
||||
<a {{$notification->read() ? 'class=link-muted' : ''}} href="{{route('notifications.show' , $notification->id)}}"><i class="fas fa-envelope mr-2"></i>{{ $notification->data['title'] }}</a>
|
||||
</div>
|
||||
<div class="text-muted">
|
||||
<small>
|
||||
<i class="fas fa-paper-plane mr-2"></i>{{ $notification->created_at->diffForHumans() }}
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
<div class="col-md-8">
|
||||
<div class="float-right">
|
||||
{!! $notifications->links() !!}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
@endsection
|
|
@ -1,50 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>Notifications</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{route('home')}}">Dashboard</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{route('notifications.index')}}">Notifications</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted" href="#">Show</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<!-- CUSTOM CONTENT -->
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header ">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div>{{ $notification->data['title'] }}</div>
|
||||
<div class="text-muted"><small><i class="fas fa-paper-plane mr-2"></i>{{ $notification->created_at->diffForHumans() }}</small></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
{!! $notification->data['content'] !!}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
@endsection
|
|
@ -1,368 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Profile') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('profile.index') }}">{{ __('Profile') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12 px-0">
|
||||
@if (!Auth::user()->hasVerifiedEmail() && strtolower($force_email_verification) == 'true')
|
||||
<div class="alert alert-warning p-2 m-2">
|
||||
<h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Required Email verification!') }}
|
||||
</h5>
|
||||
{{ __('You have not yet verified your email address') }}
|
||||
<a class="text-primary"
|
||||
href="{{ route('verification.send') }}">{{ __('Click here to resend verification email') }}</a>
|
||||
<br>
|
||||
{{ __('Please contact support If you didnt receive your verification email.') }}
|
||||
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if (is_null(Auth::user()->discordUser) && strtolower($force_discord_verification) == 'true')
|
||||
@if (!empty(config('SETTINGS::DISCORD:CLIENT_ID')) && !empty(config('SETTINGS::DISCORD:CLIENT_SECRET')))
|
||||
<div class="alert alert-warning p-2 m-2">
|
||||
<h5>
|
||||
<i class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
|
||||
</h5>
|
||||
{{ __('You have not yet verified your discord account') }}
|
||||
<a class="text-primary"
|
||||
href="{{ route('auth.redirect') }}">{{ __('Login with discord') }}</a> <br>
|
||||
{{ __('Please contact support If you face any issues.') }}
|
||||
</div>
|
||||
@else
|
||||
<div class="alert alert-danger p-2 m-2">
|
||||
<h5>
|
||||
<i class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
|
||||
</h5>
|
||||
{{ __('Due to system settings you are required to verify your discord account!') }} <br>
|
||||
{{ __('It looks like this hasnt been set-up correctly! Please contact support.') }}'
|
||||
</div>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="form" action="{{ route('profile.update', Auth::user()->id) }}" method="post">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="e-profile">
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-auto mb-4">
|
||||
<div class="slim rounded-circle border-secondary border text-gray-dark"
|
||||
data-label="Change your avatar" data-max-file-size="3"
|
||||
data-save-initial-image="true"
|
||||
style="width: 140px;height:140px; cursor: pointer"
|
||||
data-size="140,140">
|
||||
<img src="{{ $user->getAvatar() }}" alt="avatar">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex flex-column flex-sm-row justify-content-between mb-3">
|
||||
<div class="text-center text-sm-left mb-2 mb-sm-0">
|
||||
<h4 class="pt-sm-2 pb-1 mb-0 text-nowrap">{{ $user->name }}</h4>
|
||||
<p class="mb-0">{{ $user->email }}
|
||||
@if ($user->hasVerifiedEmail())
|
||||
<i data-toggle="popover" data-trigger="hover" data-content="Verified"
|
||||
class="text-success fas fa-check-circle"></i>
|
||||
@else
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="Not verified"
|
||||
class="text-danger fas fa-exclamation-circle"></i>
|
||||
@endif
|
||||
|
||||
</p>
|
||||
<div class="mt-1">
|
||||
<span class="badge badge-primary"><i
|
||||
class="fa fa-coins mr-2"></i>{{ $user->Credits() }}</span>
|
||||
</div>
|
||||
|
||||
@if(config('SETTINGS::REFERRAL::ENABLED') == "true")
|
||||
@if((config('SETTINGS::REFERRAL::ALLOWED') == "client" && $user->role != "member") || config('SETTINGS::REFERRAL::ALLOWED') == "everyone")
|
||||
<div class="mt-1">
|
||||
<span class="badge badge-success"><i
|
||||
class="fa fa-user-check mr-2"></i>
|
||||
{{_("Referral URL")}} :
|
||||
<span onclick="onClickCopy()" id="RefLink" style="cursor: pointer;">
|
||||
{{route("register")}}?ref={{$user->referral_code}}</span>
|
||||
</span>
|
||||
@else
|
||||
<span class="badge badge-warning"><i
|
||||
class="fa fa-user-check mr-2"></i>
|
||||
{{_("Make a purchase to reveal your referral-URL")}}</span>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="text-center text-sm-right"><span
|
||||
class="badge {{$badgeColor}}">{{ $user->role }}</span>
|
||||
<div class="text-muted">
|
||||
<small>{{ $user->created_at->isoFormat('LL') }}</small>
|
||||
</div>
|
||||
<div class="text-muted">
|
||||
<small>
|
||||
<button class="badge badge-danger" id="confirmDeleteButton" type="button">{{ __('Permanently delete my account') }}</button>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item"><a href="javasript:void(0)"
|
||||
class="active nav-link">{{ __('Settings') }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content pt-3">
|
||||
<div class="tab-pane active">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
@if( $errors->has('pterodactyl_error_message') )
|
||||
@foreach( $errors->get('pterodactyl_error_message') as $err )
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $err }}</strong></small>
|
||||
</span>
|
||||
@endforeach
|
||||
@endif
|
||||
@if( $errors->has('pterodactyl_error_status') )
|
||||
@foreach( $errors->get('pterodactyl_error_status') as $err )
|
||||
<span class="text-danger" role="alert">
|
||||
<small><strong>{{ $err }}</strong></small>
|
||||
</span>
|
||||
@endforeach
|
||||
@endif
|
||||
<div class="form-group"><label>{{__('Name')}}</label> <input
|
||||
class="form-control @error('name') is-invalid @enderror"
|
||||
type="text" name="name" placeholder="{{ $user->name }}"
|
||||
value="{{ $user->name }}">
|
||||
|
||||
@error('name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="form-group"><label>{{ __('Email') }}</label> <input
|
||||
class="form-control @error('email') is-invalid @enderror"
|
||||
type="text" placeholder="{{ $user->email }}" name="email"
|
||||
value="{{ $user->email }}">
|
||||
|
||||
@error('email')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-6 mb-3">
|
||||
<div class="mb-3"><b>{{ __('Change Password') }}</b></div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="form-group">
|
||||
<label>{{ __('Current Password') }}</label>
|
||||
<input
|
||||
class="form-control @error('current_password') is-invalid @enderror"
|
||||
name="current_password" type="password"
|
||||
placeholder="••••••">
|
||||
|
||||
@error('current_password')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="form-group"><label>{{ __('New Password') }}</label>
|
||||
<input
|
||||
class="form-control @error('new_password') is-invalid @enderror"
|
||||
name="new_password" type="password" placeholder="••••••">
|
||||
|
||||
@error('new_password')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="form-group">
|
||||
<label>{{ __('Confirm Password') }}</span></label>
|
||||
<input
|
||||
class="form-control @error('new_password_confirmation') is-invalid @enderror"
|
||||
name="new_password_confirmation" type="password"
|
||||
placeholder="••••••">
|
||||
|
||||
@error('new_password_confirmation')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (!empty(config('SETTINGS::DISCORD:CLIENT_ID')) && !empty(config('SETTINGS::DISCORD:CLIENT_SECRET')))
|
||||
<div class="col-12 col-sm-5 offset-sm-1 mb-3">
|
||||
@if (is_null(Auth::user()->discordUser))
|
||||
<b>{{ __('Link your discord account!') }}</b>
|
||||
<div class="verify-discord">
|
||||
<div class="mb-3">
|
||||
@if ($credits_reward_after_verify_discord)
|
||||
<p>{{ __('By verifying your discord account, you receive extra Credits and increased Server amounts') }}
|
||||
</p>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a class="btn btn-light" href="{{ route('auth.redirect') }}">
|
||||
<i class="fab fa-discord mr-2"></i>{{ __('Login with Discord') }}
|
||||
</a>
|
||||
@else
|
||||
<div class="verified-discord">
|
||||
<div class="my-3 callout callout-info">
|
||||
<p>{{ __('You are verified!') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row pl-2">
|
||||
<div class="small-box bg-dark">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="p-3">
|
||||
<h3>{{ $user->discordUser->username }}
|
||||
<sup>{{ $user->discordUser->locale }}</sup>
|
||||
</h3>
|
||||
<p>{{ $user->discordUser->id }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="p-3"><img width="100px"
|
||||
height="100px"
|
||||
class="rounded-circle"
|
||||
src="{{ $user->discordUser->getAvatar() }}"
|
||||
alt="avatar"></div>
|
||||
</div>
|
||||
<div class="small-box-footer">
|
||||
<a href="{{ route('auth.redirect') }}">
|
||||
<i
|
||||
class="fab fa-discord mr-1"></i>{{ __('Re-Sync Discord') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col d-flex justify-content-end">
|
||||
<button class="btn btn-primary"
|
||||
type="submit">{{ __('Save Changes') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script>
|
||||
document.getElementById("confirmDeleteButton").onclick=async ()=>{
|
||||
const {value: enterConfirm} = await Swal.fire({
|
||||
input: 'text',
|
||||
inputLabel: '{{__("Are you sure you want to permanently delete your account and all of your servers?")}} \n Type "{{__('Delete my account')}}" in the Box below',
|
||||
inputPlaceholder: "{{__('Delete my account')}}",
|
||||
showCancelButton: true
|
||||
})
|
||||
if (enterConfirm === "{{__('Delete my account')}}") {
|
||||
Swal.fire("{{__('Account has been destroyed')}}", '', 'error')
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "{{route("profile.selfDestroyUser")}}",
|
||||
data: `{
|
||||
"confirmed": "yes",
|
||||
}`,
|
||||
success: function (result) {
|
||||
console.log(result);
|
||||
},
|
||||
dataType: "json"
|
||||
});
|
||||
location.reload();
|
||||
|
||||
} else {
|
||||
Swal.fire("{{__('Account was NOT deleted.')}}", '', 'info')
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
function onClickCopy() {
|
||||
let textToCopy = document.getElementById('RefLink').innerText;
|
||||
if(navigator.clipboard) {
|
||||
navigator.clipboard.writeText(textToCopy).then(() => {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: '{{ __("URL copied to clipboard")}}',
|
||||
position: 'top-middle',
|
||||
showConfirmButton: false,
|
||||
background: '#343a40',
|
||||
toast: false,
|
||||
timer: 1000,
|
||||
timerProgressBar: true,
|
||||
didOpen: (toast) => {
|
||||
toast.addEventListener('mouseenter', Swal.stopTimer)
|
||||
toast.addEventListener('mouseleave', Swal.resumeTimer)
|
||||
}
|
||||
})
|
||||
})
|
||||
} else {
|
||||
console.log('Browser Not compatible')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@endsection
|
||||
|
|
@ -1,444 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Servers') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('servers.index') }}">{{ __('Servers') }}</a>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('servers.create') }}">{{ __('Create') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section x-data="serverApp()" class="content">
|
||||
<div class="container-xxl">
|
||||
<!-- FORM -->
|
||||
<form action="{{ route('servers.store') }}" method="post" class="row justify-content-center">
|
||||
@csrf
|
||||
<div class="col-xl-6 col-lg-8 col-md-8 col-sm-10">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title"><i class="fas fa-cogs mr-2"></i>{{ __('Server configuration') }}
|
||||
</div>
|
||||
</div>
|
||||
@if (!config("SETTINGS::SYSTEM:CREATION_OF_NEW_SERVERS"))
|
||||
<div class="alert alert-warning p-2 m-2">
|
||||
The creation of new servers has been disabled for regular users, enable it again
|
||||
<a href="{{route('admin.settings.system')}}">{{ __('here') }}</a>.
|
||||
</div>
|
||||
@endif
|
||||
@if ($productCount === 0 || $nodeCount === 0 || count($nests) === 0 || count($eggs) === 0)
|
||||
<div class="alert alert-danger p-2 m-2">
|
||||
<h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Error!') }}</h5>
|
||||
<p class="pl-4">
|
||||
@if (Auth::user()->role == 'admin')
|
||||
{{ __('Make sure to link your products to nodes and eggs.') }} <br>
|
||||
{{ __('There has to be at least 1 valid product for server creation') }}
|
||||
<a href="{{route('admin.overview.sync')}}">{{ __('Sync now') }}</a>
|
||||
@endif
|
||||
|
||||
</p>
|
||||
<ul>
|
||||
@if ($productCount === 0)
|
||||
<li> {{ __('No products available!') }}</li>
|
||||
@endif
|
||||
|
||||
@if ($nodeCount === 0)
|
||||
<li>{{ __('No nodes have been linked!') }}</li>
|
||||
@endif
|
||||
|
||||
@if (count($nests) === 0)
|
||||
<li>{{ __('No nests available!') }}</li>
|
||||
@endif
|
||||
|
||||
@if (count($eggs) === 0)
|
||||
<li>{{ __('No eggs have been linked!') }}</li>
|
||||
@endif
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
<div x-show="loading" class="overlay dark">
|
||||
<i class="fas fa-2x fa-sync-alt"></i>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul class="list-group pl-3">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="form-group">
|
||||
<label for="name">{{ __('Name') }}</label>
|
||||
<input x-model="name" id="name" name="name" type="text" required="required"
|
||||
class="form-control @error('name') is-invalid @enderror">
|
||||
@error('name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="nest">{{ __('Software / Games') }}</label>
|
||||
<select class="custom-select" required name="nest" id="nest" x-model="selectedNest"
|
||||
@change="setEggs();">
|
||||
<option selected disabled hidden value="null">
|
||||
{{ count($nests) > 0 ? __('Please select software ...') : __('---') }}
|
||||
</option>
|
||||
@foreach ($nests as $nest)
|
||||
<option value="{{ $nest->id }}">{{ $nest->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="egg">{{ __('Specification ') }}</label>
|
||||
<div>
|
||||
<select id="egg" required name="egg" :disabled="eggs.length == 0"
|
||||
x-model="selectedEgg" @change="fetchLocations();" required="required"
|
||||
class="custom-select">
|
||||
<option x-text="getEggInputText()" selected disabled hidden value="null">
|
||||
</option>
|
||||
<template x-for="egg in eggs" :key="egg.id">
|
||||
<option x-text="egg.name" :value="egg.id"></option>
|
||||
</template>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="node">{{ __('Node') }}</label>
|
||||
<select name="node" required id="node" x-model="selectedNode" :disabled="!fetchedLocations"
|
||||
@change="fetchProducts();" class="custom-select">
|
||||
<option x-text="getNodeInputText()" disabled selected hidden value="null">
|
||||
</option>
|
||||
|
||||
<template x-for="location in locations" :key="location.id">
|
||||
<optgroup :label="location.name">
|
||||
|
||||
<template x-for="node in location.nodes" :key="node.id">
|
||||
<option x-text="node.name" :value="node.id">
|
||||
|
||||
</option>
|
||||
</template>
|
||||
</optgroup>
|
||||
</template>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100"></div>
|
||||
<div class="col" x-show="selectedNode != null">
|
||||
<div class="row mt-4 justify-content-center">
|
||||
<template x-for="product in products" :key="product.id">
|
||||
<div class="card col-xl-3 col-lg-3 col-md-4 col-sm-10 mr-2 ml-2 ">
|
||||
<div class="card-body d-flex flex-column">
|
||||
<h4 class="card-title" x-text="product.name"></h4>
|
||||
<div class="mt-2">
|
||||
<div>
|
||||
<p class="card-text text-muted mb-1">{{ __('Resource Data:') }}</p>
|
||||
<ul class="pl-0">
|
||||
<li class="d-flex justify-content-between">
|
||||
<span class="d-inline-block"><i class="fas fa-microchip"></i>
|
||||
{{ __('CPU') }}</span>
|
||||
<span class=" d-inline-block"
|
||||
x-text="product.cpu + ' {{ __('vCores') }}'"></span>
|
||||
</li>
|
||||
<li class="d-flex justify-content-between">
|
||||
<span class="d-inline-block"><i class="fas fa-memory"></i>
|
||||
{{ __('Memory') }}</span>
|
||||
<span class=" d-inline-block"
|
||||
x-text="product.memory + ' {{ __('MB') }}'"></span>
|
||||
</li>
|
||||
<li class="d-flex justify-content-between">
|
||||
<div>
|
||||
<i class="fas fa-hdd"></i>
|
||||
<span class="d-inline-block">
|
||||
{{ __('Disk') }}
|
||||
</span>
|
||||
</div>
|
||||
<span class="d-inline-block"
|
||||
x-text="product.disk + ' {{ __('MB') }}'"></span>
|
||||
</li>
|
||||
<li class="d-flex justify-content-between">
|
||||
<span class="d-inline-block"><i class="fas fa-save"></i>
|
||||
{{ __('Backups') }}</span>
|
||||
<span class=" d-inline-block" x-text="product.backups"></span>
|
||||
</li>
|
||||
<li class="d-flex justify-content-between">
|
||||
<span class="d-inline-block"><i class="fas fa-database"></i>
|
||||
{{ __('MySQL') }}
|
||||
{{ __('Databases') }}</span>
|
||||
<span class="d-inline-block" x-text="product.databases"></span>
|
||||
</li>
|
||||
<li class="d-flex justify-content-between">
|
||||
<span class="d-inline-block"><i class="fas fa-network-wired"></i>
|
||||
{{ __('Allocations') }}
|
||||
({{ __('ports') }})</span>
|
||||
<span class="d-inline-block" x-text="product.allocations"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="mt-2 mb-2">
|
||||
<span class="card-text text-muted">{{ __('Description') }}</span>
|
||||
<p class="card-text" style="white-space:pre-wrap" x-text="product.description"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-auto border rounded border-secondary">
|
||||
<div class="d-flex justify-content-between p-2">
|
||||
<span class="d-inline-block mr-4">
|
||||
{{ __('Price') }}:
|
||||
</span>
|
||||
<span class="d-inline-block"
|
||||
x-text="product.price + ' {{ CREDITS_DISPLAY_NAME }}'"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div x-data="{ buttonDisabled: false }">
|
||||
<button type="submit" x-model="selectedProduct" name="product"
|
||||
:disabled="product.minimum_credits > user.credits||product.doesNotFit == true"
|
||||
:class="product.minimum_credits > user.credits ? 'disabled' : ''"
|
||||
class="btn btn-primary btn-block mt-2" @click="setProduct(product.id)"
|
||||
x-text=" product.doesNotFit == true? '{{ __("Server cant fit on this Node") }}' : (product.minimum_credits > user.credits ? '{{ __('Not enough') }} {{ CREDITS_DISPLAY_NAME }}!' : '{{ __('Create server') }}')">
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
<!-- END FORM -->
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
function serverApp() {
|
||||
return {
|
||||
//loading
|
||||
loading: false,
|
||||
fetchedLocations: false,
|
||||
fetchedProducts: false,
|
||||
|
||||
//input fields
|
||||
name: null,
|
||||
selectedNest: null,
|
||||
selectedEgg: null,
|
||||
selectedNode: null,
|
||||
selectedProduct: null,
|
||||
|
||||
//selected objects based on input
|
||||
selectedNestObject: {},
|
||||
selectedEggObject: {},
|
||||
selectedNodeObject: {},
|
||||
selectedProductObject: {},
|
||||
|
||||
//values
|
||||
user: {!! $user !!},
|
||||
nests: {!! $nests !!},
|
||||
eggsSave: {!! $eggs !!}, //store back-end eggs
|
||||
eggs: [],
|
||||
locations: [],
|
||||
products: [],
|
||||
|
||||
|
||||
/**
|
||||
* @description set available eggs based on the selected nest
|
||||
* @note called whenever a nest is selected
|
||||
* @see selectedNest
|
||||
*/
|
||||
async setEggs() {
|
||||
this.fetchedLocations = false;
|
||||
this.fetchedProducts = false;
|
||||
this.locations = [];
|
||||
this.products = [];
|
||||
this.selectedEgg = 'null';
|
||||
this.selectedNode = 'null';
|
||||
this.selectedProduct = 'null';
|
||||
|
||||
this.eggs = this.eggsSave.filter(egg => egg.nest_id == this.selectedNest)
|
||||
|
||||
//automatically select the first entry if there is only 1
|
||||
if (this.eggs.length === 1) {
|
||||
this.selectedEgg = this.eggs[0].id;
|
||||
await this.fetchLocations();
|
||||
return;
|
||||
}
|
||||
|
||||
this.updateSelectedObjects()
|
||||
},
|
||||
|
||||
setProduct(productId) {
|
||||
if (!productId) return
|
||||
|
||||
this.selectedProduct = productId;
|
||||
this.updateSelectedObjects();
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* @description fetch all available locations based on the selected egg
|
||||
* @note called whenever a server configuration is selected
|
||||
* @see selectedEg
|
||||
*/
|
||||
async fetchLocations() {
|
||||
this.loading = true;
|
||||
this.fetchedLocations = false;
|
||||
this.fetchedProducts = false;
|
||||
this.locations = [];
|
||||
this.products = [];
|
||||
this.selectedNode = 'null';
|
||||
this.selectedProduct = 'null';
|
||||
|
||||
let response = await axios.get(`{{ route('products.locations.egg') }}/${this.selectedEgg}`)
|
||||
.catch(console.error)
|
||||
|
||||
this.fetchedLocations = true;
|
||||
this.locations = response.data
|
||||
|
||||
//automatically select the first entry if there is only 1
|
||||
if (this.locations.length === 1 && this.locations[0]?.nodes?.length === 1) {
|
||||
this.selectedNode = this.locations[0]?.nodes[0]?.id;
|
||||
await this.fetchProducts();
|
||||
return;
|
||||
}
|
||||
|
||||
this.loading = false;
|
||||
this.updateSelectedObjects()
|
||||
},
|
||||
|
||||
/**
|
||||
* @description fetch all available products based on the selected node
|
||||
* @note called whenever a node is selected
|
||||
* @see selectedNode
|
||||
*/
|
||||
async fetchProducts() {
|
||||
this.loading = true;
|
||||
this.fetchedProducts = false;
|
||||
this.products = [];
|
||||
this.selectedProduct = 'null';
|
||||
|
||||
let response = await axios.get(
|
||||
`{{ route('products.products.node') }}/${this.selectedEgg}/${this.selectedNode}`)
|
||||
.catch(console.error)
|
||||
|
||||
this.fetchedProducts = true;
|
||||
// TODO: Sortable by user chosen property (cpu, ram, disk...)
|
||||
this.products = response.data.sort((p1, p2) => parseInt(p1.price,10) > parseInt(p2.price,10) && 1 || -1)
|
||||
|
||||
//divide cpu by 100 for each product
|
||||
this.products.forEach(product => {
|
||||
product.cpu = product.cpu / 100;
|
||||
})
|
||||
|
||||
|
||||
this.loading = false;
|
||||
this.updateSelectedObjects()
|
||||
},
|
||||
|
||||
/**
|
||||
* @description map selected id's to selected objects
|
||||
* @note being used in the server info box
|
||||
*/
|
||||
updateSelectedObjects() {
|
||||
this.selectedNestObject = this.nests.find(nest => nest.id == this.selectedNest) ?? {}
|
||||
this.selectedEggObject = this.eggs.find(egg => egg.id == this.selectedEgg) ?? {}
|
||||
|
||||
this.selectedNodeObject = {};
|
||||
this.locations.forEach(location => {
|
||||
if (!this.selectedNodeObject?.id) {
|
||||
this.selectedNodeObject = location.nodes.find(node => node.id == this.selectedNode) ??
|
||||
{};
|
||||
}
|
||||
})
|
||||
|
||||
this.selectedProductObject = this.products.find(product => product.id == this.selectedProduct) ?? {}
|
||||
console.log(this.selectedProduct, this.selectedProductObject, this.products)
|
||||
},
|
||||
|
||||
/**
|
||||
* @description check if all options are selected
|
||||
* @return {boolean}
|
||||
*/
|
||||
isFormValid() {
|
||||
if (Object.keys(this.selectedNestObject).length === 0) return false;
|
||||
if (Object.keys(this.selectedEggObject).length === 0) return false;
|
||||
if (Object.keys(this.selectedNodeObject).length === 0) return false;
|
||||
if (Object.keys(this.selectedProductObject).length === 0) return false;
|
||||
return !!this.name;
|
||||
},
|
||||
|
||||
getNodeInputText() {
|
||||
if (this.fetchedLocations) {
|
||||
if (this.locations.length > 0) {
|
||||
return '{{ __('Please select a node ...') }}';
|
||||
}
|
||||
return '{{ __('No nodes found matching current configuration') }}'
|
||||
}
|
||||
return '{{ __('---') }}';
|
||||
},
|
||||
|
||||
getProductInputText() {
|
||||
if (this.fetchedProducts) {
|
||||
if (this.products.length > 0) {
|
||||
return '{{ __('Please select a resource ...') }}';
|
||||
}
|
||||
return '{{ __('No resources found matching current configuration') }}'
|
||||
}
|
||||
return '{{ __('---') }}';
|
||||
},
|
||||
|
||||
getEggInputText() {
|
||||
if (this.selectedNest) {
|
||||
return '{{ __('Please select a configuration ...') }}';
|
||||
}
|
||||
return '{{ __('---') }}';
|
||||
},
|
||||
|
||||
getProductOptionText(product) {
|
||||
let text = product.name + ' (' + product.description + ')';
|
||||
|
||||
if (product.minimum_credits > this.user.credits) {
|
||||
return '{{ __('Not enough credits!') }} | ' + text;
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@endsection
|
|
@ -1,159 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Servers') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('servers.index') }}">{{ __('Servers') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<!-- CUSTOM CONTENT -->
|
||||
<div class="d-flex justify-content-md-start justify-content-center mb-3 ">
|
||||
<a @if (Auth::user()->Servers->count() >= Auth::user()->server_limit)
|
||||
disabled="disabled" title="Server limit reached!"
|
||||
@endif href="{{ route('servers.create') }}"
|
||||
class="btn
|
||||
@if (Auth::user()->Servers->count() >= Auth::user()->server_limit) disabled
|
||||
@endif btn-primary"><i
|
||||
class="fa fa-plus mr-2"></i>
|
||||
{{ __('Create Server') }}
|
||||
</a>
|
||||
@if (Auth::user()->Servers->count() > 0&&!empty(config('SETTINGS::MISC:PHPMYADMIN:URL')))
|
||||
<a
|
||||
href="{{ config('SETTINGS::MISC:PHPMYADMIN:URL') }}" target="_blank"
|
||||
class="btn btn-secondary ml-2"><i title="manage"
|
||||
class="fas fa-database mr-2"></i><span>{{ __('Database') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="row d-flex flex-row justify-content-center justify-content-md-start">
|
||||
@foreach ($servers as $server)
|
||||
@if($server->location&&$server->node&&$server->nest&&$server->egg)
|
||||
<div class="col-xl-3 col-lg-5 col-md-6 col-sm-6 col-xs-12 card pr-0 pl-0 ml-sm-2 mr-sm-3"
|
||||
style="max-width: 350px">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mt-1">{{ $server->name }}
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="container mt-1">
|
||||
<div class="row mb-3">
|
||||
<div class="col my-auto">{{ __('Status') }}:</div>
|
||||
<div class="col-7 my-auto">
|
||||
<i
|
||||
class="fas {{ $server->isSuspended() ? 'text-danger' : 'text-success' }} fa-circle mr-2"></i>
|
||||
{{ $server->isSuspended() ? 'Suspended' : 'Active' }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-5">
|
||||
{{ __('Location') }}:
|
||||
</div>
|
||||
<div class="col-7 d-flex justify-content-between align-items-center">
|
||||
<span class="">{{ $server->location }}</span>
|
||||
<i data-toggle="popover" data-trigger="hover"
|
||||
data-content="{{ __('Node') }}: {{ $server->node }}"
|
||||
class="fas fa-info-circle"></i>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-5 ">
|
||||
{{ __('Software') }}:
|
||||
</div>
|
||||
<div class="col-7 text-wrap">
|
||||
<span>{{ $server->nest }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-5 ">
|
||||
{{ __('Specification') }}:
|
||||
</div>
|
||||
<div class="col-7 text-wrap">
|
||||
<span>{{ $server->egg }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-4">
|
||||
<div class="col-5 ">
|
||||
{{ __('Resource plan') }}:
|
||||
</div>
|
||||
<div class="col-7 text-wrap d-flex justify-content-between align-items-center">
|
||||
<span>{{ $server->product->name }}
|
||||
</span>
|
||||
<i data-toggle="popover" data-trigger="hover" data-html="true"
|
||||
data-content="{{ __('CPU') }}: {{ $server->product->cpu / 100 }} {{ __('vCores') }} <br/>{{ __('RAM') }}: {{ $server->product->memory }} MB <br/>{{ __('Disk') }}: {{ $server->product->disk }} MB <br/>{{ __('Backups') }}: {{ $server->product->backups }} <br/> {{ __('MySQL Databases') }}: {{ $server->product->databases }} <br/> {{ __('Allocations') }}: {{ $server->product->allocations }} <br/>"
|
||||
class="fas fa-info-circle"></i>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-4">
|
||||
{{ __('Price') }}:
|
||||
<span class="text-muted">
|
||||
({{ CREDITS_DISPLAY_NAME }})
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<div class="row">
|
||||
<div class="col-6 text-center">
|
||||
<div class="text-muted">{{ __('per Hour') }}</div>
|
||||
<span>
|
||||
{{ number_format($server->product->getHourlyPrice(), 2, '.', '') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-6 text-center">
|
||||
<div class="text-muted">{{ __('per Month') }}
|
||||
</div>
|
||||
<span>
|
||||
{{ $server->product->getHourlyPrice() * 24 * 30 }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-footer d-flex align-items-center justify-content-between">
|
||||
<a href="{{ config('SETTINGS::SYSTEM:PTERODACTYL:URL') }}/server/{{ $server->identifier }}"
|
||||
target="__blank"
|
||||
class="btn btn-info mx-3 w-100 align-items-center justify-content-center d-flex">
|
||||
<i class="fas fa-tools mr-2"></i>
|
||||
<span>{{ __('Manage') }}</span>
|
||||
</a>
|
||||
<a href="{{ route('servers.show', ['server' => $server->id])}}" class="btn btn-warning mx-3 w-100 align-items-center justify-content-center d-flex">
|
||||
<i class="fas fa-cog mr-2"></i>
|
||||
<span>{{ __('Settings') }}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
@endsection
|
|
@ -1,325 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Server Settings')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{__('Dashboard')}}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('servers.index') }}">{{__('Server')}}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('servers.show', $server->id) }}">{{__('Settings')}}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="row pt-3">
|
||||
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
|
||||
<div class="card">
|
||||
<div class="card-body p-3">
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="numbers">
|
||||
<p class="text-sm mb-0 text-uppercase font-weight-bold">SERVER NAME</p>
|
||||
<h5 class="font-weight-bolder" id="domain_text">
|
||||
<span class="text-success text-sm font-weight-bolder">{{ $server->name }}</span>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-end">
|
||||
<div class="icon icon-shape bg-gradient-primary shadow-primary text-center rounded-circle">
|
||||
<i class='bx bx-fingerprint' style="color: white;"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
|
||||
<div class="card">
|
||||
<div class="card-body p-3">
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="numbers">
|
||||
<p class="text-sm mb-0 text-uppercase font-weight-bold">CPU</p>
|
||||
<h5 class="font-weight-bolder">
|
||||
<span class="text-success text-sm font-weight-bolder">@if($server->product->cpu == 0)Unlimited @else {{$server->product->cpu}} % @endif</span>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-end">
|
||||
<div class="icon icon-shape bg-gradient-danger shadow-danger text-center rounded-circle">
|
||||
<i class='bx bxs-chip' style="color: white;"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
|
||||
<div class="card">
|
||||
<div class="card-body p-3">
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="numbers">
|
||||
<p class="text-sm mb-0 text-uppercase font-weight-bold">Memory</p>
|
||||
<h5 class="font-weight-bolder">
|
||||
<span class="text-success text-sm font-weight-bolder">@if($server->product->memory == 0)Unlimited @else {{$server->product->memory}}MB @endif</span>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-end">
|
||||
<div class="icon icon-shape bg-gradient-success shadow-success text-center rounded-circle">
|
||||
<i class='bx bxs-memory-card' style="color: white;"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-3 col-sm-6">
|
||||
<div class="card">
|
||||
<div class="card-body p-3">
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="numbers">
|
||||
<p class="text-sm mb-0 text-uppercase font-weight-bold">STORAGE</p>
|
||||
<h5 class="font-weight-bolder">
|
||||
<span class="text-success text-sm font-weight-bolder">@if($server->product->disk == 0)Unlimited @else {{$server->product->disk}}MB @endif</span>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-end">
|
||||
<div class="icon icon-shape bg-gradient-warning shadow-warning text-center rounded-circle">
|
||||
<i class='bx bxs-hdd' style="color: white;"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title float-right"><i title="Created at" class="fas fa-calendar-alt mr-2"></i><span>{{ $server->created_at->isoFormat('LL') }}</span></h5>
|
||||
<h5 class="card-title"><i class="fas fa-sliders-h mr-2"></i>{{__('Server Information')}}</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Server ID')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $server->id }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Pterodactyl ID')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $server->identifier }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Hourly Price')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ number_format($server->product->getHourlyPrice(), 2, '.', '') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Monthly Price')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $server->product->getHourlyPrice() * 24 * 30 }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Location')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $server->location }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Node')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $server->node }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('Backups')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $server->product->backups }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<label>{{__('MySQL Database')}}</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<span style="max-width: 250px;" class="d-inline-block text-truncate">
|
||||
{{ $server->product->databases }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<div class="col-md-12 text-center">
|
||||
<!-- Upgrade Button trigger modal -->
|
||||
@if(config("SETTINGS::SYSTEM:ENABLE_UPGRADE"))
|
||||
<button type="button" data-toggle="modal" data-target="#UpgradeModal{{ $server->id }}" target="__blank"
|
||||
class="btn btn-info btn-md">
|
||||
<i class="fas fa-upload mr-2"></i>
|
||||
<span>{{ __('Upgrade / Downgrade') }}</span>
|
||||
</button>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Upgrade Modal -->
|
||||
<div style="width: 100%; margin-block-start: 100px;" class="modal fade" id="UpgradeModal{{ $server->id }}" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header card-header">
|
||||
<h5 class="modal-title">{{__("Upgrade/Downgrade Server")}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body card-body">
|
||||
<strong>{{__("FOR DOWNGRADE PLEASE CHOOSE A PLAN BELOW YOUR PLAN")}}</strong>
|
||||
<br>
|
||||
<br>
|
||||
<strong>{{__("YOUR PRODUCT")}} : </strong> {{ $server->product->name }}
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<form action="{{ route('servers.upgrade', ['server' => $server->id]) }}" method="POST" class="upgrade-form">
|
||||
@csrf
|
||||
<select name="product_upgrade" id="product_upgrade" class="form-input2 form-control">
|
||||
<option value="">{{__("Select the product")}}</option>
|
||||
@foreach($products as $product)
|
||||
@if(in_array($server->egg, $product->eggs) && $product->id != $server->product->id && $product->disabled == false)
|
||||
<option value="{{ $product->id }}" @if($product->doesNotFit)disabled @endif>{{ $product->name }} [ {{ CREDITS_DISPLAY_NAME }} {{ $product->price }} @if($product->doesNotFit)] {{__('Server can´t fit on this node')}} @else @if($product->minimum_credits!=-1) /
|
||||
{{__("Required")}}: {{$product->minimum_credits}} {{ CREDITS_DISPLAY_NAME }}@endif ] @endif</option>
|
||||
@endif
|
||||
@endforeach
|
||||
</select>
|
||||
<br> {{__("Once the Upgrade button is pressed, we will automatically deduct the amount for the first hour according to the new product from your credits")}}. <br>
|
||||
<br> {{__("Server will be automatically restarted once upgraded")}}
|
||||
</div>
|
||||
<div class="modal-footer card-body">
|
||||
<button type="submit" class="btn btn-primary upgrade-once" style="width: 100%"><strong>{{__("Change Product")}}</strong></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
<!-- Delete Button trigger modal -->
|
||||
<button type="button" data-toggle="modal" data-target="#DeleteModal" target="__blank"
|
||||
class="btn btn-danger btn-md">
|
||||
<i class="fas fa-trash mr-2"></i>
|
||||
<span>{{ __('Delete') }}</span>
|
||||
</button>
|
||||
<!-- Delete Modal -->
|
||||
<div class="modal fade" id="DeleteModal" tabindex="-1" role="dialog" aria-labelledby="DeleteModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="DeleteModalLabel">{{__("Delete Server")}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
{{__("This is an irreversible action, all files of this server will be removed!")}}
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
|
||||
<form class="d-inline" method="post" action="{{ route('servers.destroy', ['server' => $server->id]) }}">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-danger mr-1">{{__("Delete")}}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END CUSTOM CONTENT -->
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script type="text/javascript">
|
||||
$(".upgrade-form").submit(function (e) {
|
||||
|
||||
$(".upgrade-once").attr("disabled", true);
|
||||
return true;
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
@endsection
|
|
@ -1,179 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Store') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a class=""
|
||||
href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('store.index') }}">{{ __('Store') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section x-data="serverApp()" x-init="$watch('paymentMethod', value => setPaymentRoute(value))" class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
|
||||
|
||||
<!-- Main content -->
|
||||
<div class="invoice p-3 mb-3">
|
||||
<!-- title row -->
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h4>
|
||||
<i class="fas fa-globe"></i> {{ config('app.name', 'Laravel') }}
|
||||
<small class="float-right">{{ __('Date') }}:
|
||||
{{ Carbon\Carbon::now()->isoFormat('LL') }}</small>
|
||||
</h4>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
|
||||
<!-- Table row -->
|
||||
<div class="row">
|
||||
<div class="col-12 table-responsive">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('Quantity') }}</th>
|
||||
<th>{{ __('Product') }}</th>
|
||||
<th>{{ __('Description') }}</th>
|
||||
<th>{{ __('Subtotal') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td><i class="fa fa-coins mr-2"></i>{{ $product->quantity }}
|
||||
{{ strtolower($product->type) == 'credits' ? CREDITS_DISPLAY_NAME : $product->type }}
|
||||
</td>
|
||||
<td>{{ $product->description }}</td>
|
||||
<td>{{ $product->formatToCurrency($product->price) }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<!-- accepted payments column -->
|
||||
<div class="col-6">
|
||||
@if($total!=0)
|
||||
<p class="lead">{{ __('Payment Methods') }}:</p>
|
||||
|
||||
<div>
|
||||
@if (config('SETTINGS::PAYMENTS:PAYPAL:SECRET') || config('SETTINGS::PAYMENTS:PAYPAL:SANDBOX_SECRET'))
|
||||
<label class="text-center " for="paypal">
|
||||
<img class="mb-3" height="50"
|
||||
src="{{ url('/images/paypal_logo.png') }}"></br>
|
||||
|
||||
<input x-model="paymentMethod" type="radio" id="paypal" value="paypal"
|
||||
name="payment_method">
|
||||
</input>
|
||||
</label>
|
||||
@endif
|
||||
@if (config('SETTINGS::PAYMENTS:STRIPE:TEST_SECRET') || config('SETTINGS::PAYMENTS:STRIPE:SECRET'))
|
||||
<label class="ml-5 text-center " for="stripe">
|
||||
<img class="mb-3" height="50"
|
||||
src="{{ url('/images/stripe_logo.png') }}" /></br>
|
||||
<input x-model="paymentMethod" type="radio" id="stripe" value="stripe"
|
||||
name="payment_method">
|
||||
</input>
|
||||
</label>
|
||||
@endif
|
||||
</div>
|
||||
@else
|
||||
<p class="lead" style="text-align: center">{{ __('This product is free for you') }}.</p>
|
||||
@endif
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-6">
|
||||
<p class="lead">{{ __('Amount Due') }}
|
||||
{{ Carbon\Carbon::now()->isoFormat('LL') }}</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
@if($discountpercent&&$discountvalue)
|
||||
<tr>
|
||||
<th>{{ __('Discount') }} ({{ $discountpercent }}%):</th>
|
||||
<td>{{$product->formatToCurrency($discountvalue)}}</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<th style="width:50%">{{ __('Subtotal') }}:</th>
|
||||
<td>{{ $product->formatToCurrency($discountedprice) }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('Tax') }} ({{ $taxpercent }}%):</th>
|
||||
<td>{{ $product->formatToCurrency($taxvalue) }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ __('Total') }}:</th>
|
||||
<td>{{ $product->formatToCurrency($total) }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<!-- this row will not appear when printing -->
|
||||
<div class="row no-print">
|
||||
<div class="col-12">
|
||||
<a type="button" :href="paymentRoute" :disabled="!paymentRoute"
|
||||
:class="!paymentRoute ? 'disabled' : ''" class="btn btn-success float-right"><i
|
||||
class="far fa-credit-card mr-2"></i>
|
||||
{{ __('Submit Payment') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.invoice -->
|
||||
</div><!-- /.col -->
|
||||
</div><!-- /.row -->
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
function serverApp() {
|
||||
return {
|
||||
//loading
|
||||
paymentMethod: '',
|
||||
paymentRoute: ({{ $total }} == 0)?('{{ route('payment.FreePay', $product->id) }}'):'',
|
||||
setPaymentRoute(provider) {
|
||||
switch (provider) {
|
||||
case 'paypal':
|
||||
this.paymentRoute = '{{ route('payment.PaypalPay', $product->id) }}';
|
||||
break;
|
||||
case 'stripe':
|
||||
this.paymentRoute = '{{ route('payment.StripePay', $product->id) }}';
|
||||
break;
|
||||
default:
|
||||
this.paymentRoute = '{{ route('payment.PaypalPay', $product->id) }}';
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,108 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
<?php use App\Models\ShopProduct; ?>
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Store') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a class=""
|
||||
href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('store.index') }}">{{ __('Store') }}</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="text-right mb-3">
|
||||
<button type="button" data-toggle="modal" data-target="#redeemVoucherModal" class="btn btn-primary">
|
||||
<i class="fas fa-money-check-alt mr-2"></i>{{ __('Redeem code') }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@if ($isPaymentSetup && $products->count() > 0)
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title"><i class="fa fa-coins mr-2"></i>{{ CREDITS_DISPLAY_NAME }}</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-striped table-responsive-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('Price') }}</th>
|
||||
<th>{{ __('Type') }}</th>
|
||||
<th>{{ __('Description') }}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php /** @var $product ShopProduct */
|
||||
?>
|
||||
@foreach ($products as $product)
|
||||
<tr>
|
||||
<td>{{ $product->formatToCurrency($product->price) }}</td>
|
||||
<td>{{ strtolower($product->type) == 'credits' ? CREDITS_DISPLAY_NAME : $product->type }}
|
||||
</td>
|
||||
<td>
|
||||
@if(strtolower($product->type) == 'credits')
|
||||
<i class="fa fa-coins mr-2"></i>
|
||||
@elseif (strtolower($product->type) == 'server slots')
|
||||
<i class="fa fa-server mr-2"></i>
|
||||
@endif
|
||||
|
||||
{{ $product->display }}</td>
|
||||
<td><a href="{{ route('checkout', $product->id) }}"
|
||||
class="btn btn-info">{{ __('Purchase') }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@else
|
||||
<div class="alert alert-danger alert-dismissible">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<h4><i class="icon fa fa-ban"></i> @if ($products->count() == 0) {{ __('There are no store products!') }} @else {{ __('The store is not correctly configured!') }} @endif
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
|
||||
<script>
|
||||
const getUrlParameter = (param) => {
|
||||
const queryString = window.location.search;
|
||||
const urlParams = new URLSearchParams(queryString);
|
||||
return urlParams.get(param);
|
||||
}
|
||||
const voucherCode = getUrlParameter('voucher');
|
||||
//if voucherCode not empty, open the modal and fill the input
|
||||
if (voucherCode) {
|
||||
$(function() {
|
||||
$('#redeemVoucherModal').modal('show');
|
||||
$('#redeemVoucherCode').val(voucherCode);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
|
@ -1,135 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Ticket') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('ticket.index') }}">{{ __('Ticket') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<form action="{{route('ticket.new.store')}}" method="POST" class="ticket-form">
|
||||
@csrf
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">
|
||||
<i class="fas fa-money-check-alt mr-2"></i>{{__('Open a new ticket')}}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group col-sm-12 {{ $errors->has('title') ? ' has-error' : '' }}">
|
||||
<label for="title" class="control-label">Title</label>
|
||||
<input id="title" type="text" class="form-control" name="title" value="{{ old('title') }}">
|
||||
@if ($errors->has('title'))
|
||||
<span class="help-block">
|
||||
<strong>{{ $errors->first('title') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
@if ($servers->count() >= 1)
|
||||
<div class="form-group col-sm-12 {{ $errors->has('server') ? ' has-error' : '' }}">
|
||||
<label for="server" class="control-label">Servers</label>
|
||||
<select id="server" type="server" class="form-control" name="server">
|
||||
<option value="">Select Servers</option>
|
||||
@foreach ($servers as $server)
|
||||
<option value="{{ $server->id }}">{{ $server->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
|
||||
@if ($errors->has('category'))
|
||||
<span class="help-block">
|
||||
<strong>{{ $errors->first('ticketcategory') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
<div class="form-group col-sm-12 {{ $errors->has('ticketcategory') ? ' has-error' : '' }}">
|
||||
<label for="ticketcategory" class="control-label">Category</label>
|
||||
<select id="ticketcategory" type="ticketcategory" class="form-control" name="ticketcategory">
|
||||
<option value="">Select Category</option>
|
||||
@foreach ($ticketcategories as $ticketcategory)
|
||||
<option value="{{ $ticketcategory->id }}">{{ $ticketcategory->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
|
||||
@if ($errors->has('category'))
|
||||
<span class="help-block">
|
||||
<strong>{{ $errors->first('ticketcategory') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class="form-group col-sm-12 {{ $errors->has('priority') ? ' has-error' : '' }}">
|
||||
<label for="priority" class="control-label">Priority</label>
|
||||
<select id="priority" type="" class="form-control" name="priority">
|
||||
<option value="">Select Priority</option>
|
||||
<option value="Low">Low</option>
|
||||
<option value="Medium">Medium</option>
|
||||
<option value="High">High</option>
|
||||
</select>
|
||||
@if ($errors->has('priority'))
|
||||
<span class="help-block">
|
||||
<strong>{{ $errors->first('priority') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<button type="submit" class="btn btn-primary ticket-once">
|
||||
{{__('Open Ticket')}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">
|
||||
<i class="fas fa-money-check-alt mr-2"></i>{{__('Ticket details')}}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group col-sm-12 {{ $errors->has('message') ? ' has-error' : '' }}">
|
||||
<label for="message" class="control-label">Message</label>
|
||||
<textarea rows="8" id="message" class="form-control" name="message"></textarea>
|
||||
@if ($errors->has('message'))
|
||||
<span class="help-block">
|
||||
<strong>{{ $errors->first('message') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script type="text/javascript">
|
||||
$(".ticket-form").submit(function (e) {
|
||||
|
||||
$(".ticket-once").attr("disabled", true);
|
||||
return true;
|
||||
})
|
||||
|
||||
</script>
|
||||
@endsection
|
||||
|
|
@ -1,99 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Ticket') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('ticket.index') }}">{{ __('Ticket') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-ticket-alt mr-2"></i>{{__('My Ticket')}}</h5>
|
||||
<a href="{{route('ticket.new')}}" class="btn btn-sm btn-primary"><i
|
||||
class="fas fa-plus mr-1"></i>{{__('New Ticket')}}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body table-responsive">
|
||||
|
||||
<table id="datatable" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{__('Category')}}</th>
|
||||
<th>{{__('Title')}}</th>
|
||||
<th>{{__('Priority')}}</th>
|
||||
<th>{{__('Status')}}</th>
|
||||
<th>{{__('Last Updated')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">{{__('Ticket Information')}}
|
||||
<i data-toggle="popover"
|
||||
data-trigger="hover"
|
||||
data-content="{{__('please make the best of it')}}"
|
||||
class="fas fa-info-circle"></i></h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p>{{__("Can't start your server? Need an additional port? Do you have any other questions? Let us know by
|
||||
opening a ticket.")}}</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$('#datatable').DataTable({
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("SETTINGS::LOCALE:DATATABLES")}}.json'
|
||||
},
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
ajax: "{{route('ticket.datatable')}}",
|
||||
columns: [
|
||||
{data: 'category'},
|
||||
{data: 'title'},
|
||||
{data: 'priority'},
|
||||
{data: 'status'},
|
||||
{data: 'updated_at', sortable: false},
|
||||
],
|
||||
fnDrawCallback: function( oSettings ) {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
|
|
@ -1,156 +0,0 @@
|
|||
@extends('layouts.main')
|
||||
|
||||
@section('content')
|
||||
<!-- CONTENT HEADER -->
|
||||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ __('Ticket') }}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
|
||||
<li class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{ route('ticket.index') }}">{{ __('Ticket') }}</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT HEADER -->
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-users mr-2"></i>#{{ $ticket->ticket_id }}</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="ticket-info">
|
||||
@if(!empty($server))
|
||||
<p><b>Server:</b> <a href="{{ config('SETTINGS::SYSTEM:PTERODACTYL:URL') }}/server/{{ $server->identifier }}" target="__blank">{{ $server->name }} </a></p>
|
||||
@endif
|
||||
<p><b>Title:</b> {{ $ticket->title }}</p>
|
||||
<p><b>Category:</b> {{ $ticketcategory->name }}</p>
|
||||
<p>
|
||||
@if ($ticket->status === 'Open')
|
||||
<b>Status:</b> <span class="badge badge-success">Open</span>
|
||||
@elseif ($ticket->status === 'Closed')
|
||||
<b>Status:</b> <span class="badge badge-danger">Closed</span>
|
||||
@elseif ($ticket->status === 'Answered')
|
||||
<b>Status:</b> <span class="badge badge-info">Answered</span>
|
||||
@elseif ($ticket->status === 'Client Reply')
|
||||
<b>Status:</b> <span class="badge badge-warning">Client Reply</span>
|
||||
@endif
|
||||
</p>
|
||||
<p><b>Created on:</b> {{ $ticket->created_at->diffForHumans() }}</p>
|
||||
@if($ticket->status!='Closed')
|
||||
<form class="d-inline" method="post"
|
||||
action="{{route('ticket.close', ['ticket_id' => $ticket->ticket_id ])}}">
|
||||
{{csrf_field()}}
|
||||
{{method_field("POST") }}
|
||||
<button data-content="{{__("Close")}}" data-toggle="popover"
|
||||
data-trigger="hover" data-placement="top"
|
||||
class="btn btn-sm text-white btn-warning mr-1"><i
|
||||
class="fas fa-times"></i>{{__("Close")}}</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><i class="fas fa-cloud mr-2"></i>{{__('Comment')}}</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><img
|
||||
src="https://www.gravatar.com/avatar/{{ md5(strtolower($ticket->user->email)) }}?s=25"
|
||||
class="user-image" alt="User Image">
|
||||
<a href="/admin/users/{{$ticket->user->id}}">{{ $ticket->user->name }} </a>
|
||||
@if($ticket->user->role === "member")
|
||||
<span class="badge badge-secondary"> Member </span>
|
||||
@elseif ($ticket->user->role === "client")
|
||||
<span class="badge badge-success"> Client </span>
|
||||
@elseif ($ticket->user->role === "moderator")
|
||||
<span class="badge badge-info"> Moderator </span>
|
||||
@elseif ($ticket->user->role === "admin")
|
||||
<span class="badge badge-danger"> Admin </span>
|
||||
@endif
|
||||
</h5>
|
||||
<span class="badge badge-primary">{{ $ticket->created_at->diffForHumans() }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body" style="white-space:pre-wrap">{{ $ticket->message }}</div>
|
||||
</div>
|
||||
@foreach ($ticketcomments as $ticketcomment)
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h5 class="card-title"><img
|
||||
src="https://www.gravatar.com/avatar/{{ md5(strtolower($ticketcomment->user->email)) }}?s=25"
|
||||
class="user-image" alt="User Image">
|
||||
<a href="/admin/users/{{$ticketcomment->user->id}}">{{ $ticketcomment->user->name }}</a>
|
||||
@if($ticketcomment->user->role === "member")
|
||||
<span class="badge badge-secondary"> Member </span>
|
||||
@elseif ($ticketcomment->user->role === "client")
|
||||
<span class="badge badge-success"> Client </span>
|
||||
@elseif ($ticketcomment->user->role === "moderator")
|
||||
<span class="badge badge-info"> Moderator </span>
|
||||
@elseif ($ticketcomment->user->role === "admin")
|
||||
<span class="badge badge-danger"> Admin </span>
|
||||
@endif
|
||||
</h5>
|
||||
<span class="badge badge-primary">{{ $ticketcomment->created_at->diffForHumans() }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body" style="white-space:pre-wrap">{{ $ticketcomment->ticketcomment }}</div>
|
||||
</div>
|
||||
@endforeach
|
||||
<div class="comment-form">
|
||||
<form action="{{ route('ticket.reply')}}" method="POST" class="form reply-form">
|
||||
{!! csrf_field() !!}
|
||||
<input type="hidden" name="ticket_id" value="{{ $ticket->id }}">
|
||||
<div class="form-group{{ $errors->has('ticketcomment') ? ' has-error' : '' }}">
|
||||
<textarea rows="10" id="ticketcomment" class="form-control" name="ticketcomment"></textarea>
|
||||
@if ($errors->has('ticketcomment'))
|
||||
<span class="help-block">
|
||||
<strong>{{ $errors->first('ticketcomment') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-primary reply-once">Submit</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END CONTENT -->
|
||||
<script type="text/javascript">
|
||||
$(".reply-form").submit(function (e) {
|
||||
|
||||
$(".reply-once").attr("disabled", true);
|
||||
return true;
|
||||
})
|
||||
|
||||
</script>
|
||||
@endsection
|
||||
|
|
@ -1,390 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>{{ $invoice->name }}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
|
||||
<style type="text/css" media="screen">
|
||||
html {
|
||||
font-family: sans-serif;
|
||||
line-height: 1.15;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
font-weight: 400;
|
||||
line-height: 1.5;
|
||||
color: #212529;
|
||||
text-align: left;
|
||||
background-color: #fff;
|
||||
font-size: 10px;
|
||||
margin: 36pt;
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
img {
|
||||
vertical-align: middle;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
h4, .h4 {
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h4, .h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.table {
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
color: #212529;
|
||||
}
|
||||
|
||||
.table th,
|
||||
.table td {
|
||||
padding: 0.75rem;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.table.table-items td {
|
||||
border-top: 1px solid #dee2e6;
|
||||
}
|
||||
|
||||
.table thead th {
|
||||
vertical-align: bottom;
|
||||
border-bottom: 2px solid #dee2e6;
|
||||
}
|
||||
|
||||
.mt-5 {
|
||||
margin-top: 3rem !important;
|
||||
}
|
||||
|
||||
.pr-0,
|
||||
.px-0 {
|
||||
padding-right: 0 !important;
|
||||
}
|
||||
|
||||
.pl-0,
|
||||
.px-0 {
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.text-uppercase {
|
||||
text-transform: uppercase !important;
|
||||
}
|
||||
* {
|
||||
font-family: "DejaVu Sans";
|
||||
}
|
||||
body, h1, h2, h3, h4, h5, h6, table, th, tr, td, p, div {
|
||||
line-height: 1.1;
|
||||
}
|
||||
.party-header {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
.total-amount {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.border-0 {
|
||||
border: none !important;
|
||||
}
|
||||
.cool-gray {
|
||||
color: #6B7280;
|
||||
}
|
||||
.cool-green {
|
||||
color: #308d00;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{-- Header --}}
|
||||
@if($invoice->logo)
|
||||
<img src="{{ $invoice->getLogo() }}" alt="logo" height="100">
|
||||
@endif
|
||||
|
||||
<table class="table mt-5">
|
||||
<tbody>
|
||||
<tr>
|
||||
<tr>
|
||||
<td class="border-0 pl-0" width="70%">
|
||||
<h4 class="text-uppercase">
|
||||
<strong>{{ $invoice->name }} {{$invoice->getSerialNumber()}}</strong>
|
||||
</h4>
|
||||
</td>
|
||||
<td class="border-0 pl-0">
|
||||
@if($invoice->status)
|
||||
<h4 class="text-uppercase cool-green">
|
||||
<strong>{{ $invoice->status }}</strong>
|
||||
</h4>
|
||||
@endif
|
||||
<p>{{ __('Serial No.') }} <strong>{{ $invoice->getSerialNumber() }}</strong></p>
|
||||
<p>{{ __('Invoice date') }}: <strong>{{ $invoice->getDate() }}</strong></p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{-- Seller - Buyer --}}
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="border-0 pl-0 party-header" width="48.5%">
|
||||
{{ __('Seller') }}
|
||||
</th>
|
||||
<th class="border-0" width="3%"></th>
|
||||
<th class="border-0 pl-0 party-header">
|
||||
{{ __('Buyer') }}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="px-0">
|
||||
@if($invoice->seller->name)
|
||||
<p class="seller-name">
|
||||
<strong>{{ $invoice->seller->name }}</strong>
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->seller->address)
|
||||
<p class="seller-address">
|
||||
{{ __('Address') }}: {{ $invoice->seller->address }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->seller->code)
|
||||
<p class="seller-code">
|
||||
{{ __('Code') }}: {{ $invoice->seller->code }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->seller->vat)
|
||||
<p class="seller-vat">
|
||||
{{ __('VAT Code') }}: {{ $invoice->seller->vat }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->seller->phone)
|
||||
<p class="seller-phone">
|
||||
{{ __('Phone') }}: {{ $invoice->seller->phone }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@foreach($invoice->seller->custom_fields as $key => $value)
|
||||
<p class="seller-custom-field">
|
||||
{{ ucfirst($key) }}: {{ $value }}
|
||||
</p>
|
||||
@endforeach
|
||||
</td>
|
||||
<td class="border-0"></td>
|
||||
<td class="px-0">
|
||||
@if($invoice->buyer->name)
|
||||
<p class="buyer-name">
|
||||
<strong>{{ $invoice->buyer->name }}</strong>
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->buyer->adress)
|
||||
<p class="buyer-address">
|
||||
{{ __('Address') }}: {{ $invoice->buyer->address }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->buyer->code)
|
||||
<p class="buyer-code">
|
||||
{{ __('Code') }}: {{ $invoice->buyer->code }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->buyer->vat)
|
||||
<p class="buyer-vat">
|
||||
{{ __('VAT Code') }}: {{ $invoice->buyer->vat }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->buyer->phone)
|
||||
<p class="buyer-phone">
|
||||
{{ __('Phone') }}: {{ $invoice->buyer->phone }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@foreach($invoice->buyer->custom_fields as $key => $value)
|
||||
<p class="buyer-custom-field">
|
||||
{{ ucfirst($key) }}: {{ $value }}
|
||||
</p>
|
||||
@endforeach
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{-- Table --}}
|
||||
<table class="table table-items">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="border-0 pl-0">{{ __('Description') }}</th>
|
||||
@if($invoice->hasItemUnits)
|
||||
<th scope="col" class="text-center border-0">{{ __('Units') }}</th>
|
||||
@endif
|
||||
<th scope="col" class="text-center border-0">{{ __('Quantity') }}</th>
|
||||
<th scope="col" class="text-right border-0">{{ __('Price') }}</th>
|
||||
@if($invoice->hasItemDiscount)
|
||||
<th scope="col" class="text-right border-0">{{ __('Discount') }}</th>
|
||||
@endif
|
||||
@if($invoice->hasItemTax)
|
||||
<th scope="col" class="text-right border-0">{{ __('Tax') }}</th>
|
||||
@endif
|
||||
<th scope="col" class="text-right border-0 pr-0">{{ __('Subtotal') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{-- Items --}}
|
||||
@foreach($invoice->items as $item)
|
||||
<tr>
|
||||
<td class="pl-0">
|
||||
{{ $item->title }}
|
||||
|
||||
@if($item->description)
|
||||
<p class="cool-gray">{{ $item->description }}</p>
|
||||
@endif
|
||||
</td>
|
||||
@if($invoice->hasItemUnits)
|
||||
<td class="text-center">{{ $item->units }}</td>
|
||||
@endif
|
||||
<td class="text-center">{{ $item->quantity }}</td>
|
||||
<td class="text-right">
|
||||
{{ $invoice->formatCurrency($item->price_per_unit) }}
|
||||
</td>
|
||||
@if($invoice->hasItemDiscount)
|
||||
<td class="text-right">
|
||||
{{ $invoice->formatCurrency($item->discount) }}
|
||||
</td>
|
||||
@endif
|
||||
@if($invoice->hasItemTax)
|
||||
<td class="text-right">
|
||||
{{ $invoice->formatCurrency($item->tax) }}
|
||||
</td>
|
||||
@endif
|
||||
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($item->sub_total_price) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
{{-- Summary --}}
|
||||
@if($invoice->hasItemOrInvoiceDiscount())
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ __('Total discount') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($invoice->total_discount) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($invoice->taxable_amount)
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ __('Taxable amount') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($invoice->taxable_amount) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($invoice->tax_rate)
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ __('Tax rate') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->tax_rate }}%
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($invoice->hasItemOrInvoiceTax())
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ __('Total taxes') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($invoice->total_taxes) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($invoice->shipping_amount)
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ __('Shipping') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($invoice->shipping_amount) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ __('Total amount') }}</td>
|
||||
<td class="text-right pr-0 total-amount">
|
||||
{{ $invoice->formatCurrency($invoice->total_amount) }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@if($invoice->notes)
|
||||
<p>
|
||||
{{ __('Notes') }}: {!! $invoice->notes !!}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
<p>
|
||||
{{ __('Amount in words') }}: {{ $invoice->getTotalAmountInWords() }}
|
||||
</p>
|
||||
<p>
|
||||
{{ __('Please pay until') }}: {{ $invoice->getPayUntilDate() }}
|
||||
</p>
|
||||
|
||||
<script type="text/php">
|
||||
if (isset($pdf) && $PAGE_COUNT > 1) {
|
||||
$text = "Page {PAGE_NUM} / {PAGE_COUNT}";
|
||||
$size = 10;
|
||||
$font = $fontMetrics->getFont("Verdana");
|
||||
$width = $fontMetrics->get_text_width($text, $font, $size) / 2;
|
||||
$x = ($pdf->get_width() - $width);
|
||||
$y = $pdf->get_height() - 35;
|
||||
$pdf->page_text($x, $y, $text, $font, $size);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,390 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>{{ $invoice->name }}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
|
||||
<style type="text/css" media="screen">
|
||||
html {
|
||||
font-family: sans-serif;
|
||||
line-height: 1.15;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
font-weight: 400;
|
||||
line-height: 1.5;
|
||||
color: #212529;
|
||||
text-align: left;
|
||||
background-color: #fff;
|
||||
font-size: 10px;
|
||||
margin: 36pt;
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
img {
|
||||
vertical-align: middle;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
h4, .h4 {
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h4, .h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.table {
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
color: #212529;
|
||||
}
|
||||
|
||||
.table th,
|
||||
.table td {
|
||||
padding: 0.75rem;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.table.table-items td {
|
||||
border-top: 1px solid #dee2e6;
|
||||
}
|
||||
|
||||
.table thead th {
|
||||
vertical-align: bottom;
|
||||
border-bottom: 2px solid #dee2e6;
|
||||
}
|
||||
|
||||
.mt-5 {
|
||||
margin-top: 3rem !important;
|
||||
}
|
||||
|
||||
.pr-0,
|
||||
.px-0 {
|
||||
padding-right: 0 !important;
|
||||
}
|
||||
|
||||
.pl-0,
|
||||
.px-0 {
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.text-uppercase {
|
||||
text-transform: uppercase !important;
|
||||
}
|
||||
* {
|
||||
font-family: "DejaVu Sans";
|
||||
}
|
||||
body, h1, h2, h3, h4, h5, h6, table, th, tr, td, p, div {
|
||||
line-height: 1.1;
|
||||
}
|
||||
.party-header {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
.total-amount {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.border-0 {
|
||||
border: none !important;
|
||||
}
|
||||
.cool-gray {
|
||||
color: #6B7280;
|
||||
}
|
||||
.cool-green {
|
||||
color: #308d00;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{-- Header --}}
|
||||
@if($invoice->logo)
|
||||
<img src="{{ $invoice->getLogo() }}" alt="logo" height="100">
|
||||
@endif
|
||||
|
||||
<table class="table mt-5">
|
||||
<tbody>
|
||||
<tr>
|
||||
<tr>
|
||||
<td class="border-0 pl-0" width="70%">
|
||||
<h4 class="text-uppercase">
|
||||
<strong>{{ $invoice->name }} {{$invoice->getSerialNumber()}}</strong>
|
||||
</h4>
|
||||
</td>
|
||||
<td class="border-0 pl-0">
|
||||
@if($invoice->status)
|
||||
<h4 class="text-uppercase cool-green">
|
||||
<strong>{{ $invoice->status }}</strong>
|
||||
</h4>
|
||||
@endif
|
||||
<p>{{ trans('invoices::invoice.serial') }} <strong>{{ $invoice->getSerialNumber() }}</strong></p>
|
||||
<p>{{ trans('invoices::invoice.date') }}: <strong>{{ $invoice->getDate() }}</strong></p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{-- Seller - Buyer --}}
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="border-0 pl-0 party-header" width="48.5%">
|
||||
{{ trans('invoices::invoice.seller') }}
|
||||
</th>
|
||||
<th class="border-0" width="3%"></th>
|
||||
<th class="border-0 pl-0 party-header">
|
||||
{{ trans('invoices::invoice.buyer') }}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="px-0">
|
||||
@if($invoice->seller->name)
|
||||
<p class="seller-name">
|
||||
<strong>{{ $invoice->seller->name }}</strong>
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->seller->address)
|
||||
<p class="seller-address">
|
||||
{{ trans('invoices::invoice.address') }}: {{ $invoice->seller->address }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->seller->code)
|
||||
<p class="seller-code">
|
||||
{{ trans('invoices::invoice.code') }}: {{ $invoice->seller->code }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->seller->vat)
|
||||
<p class="seller-vat">
|
||||
{{ trans('invoices::invoice.vat') }}: {{ $invoice->seller->vat }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->seller->phone)
|
||||
<p class="seller-phone">
|
||||
{{ trans('invoices::invoice.phone') }}: {{ $invoice->seller->phone }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@foreach($invoice->seller->custom_fields as $key => $value)
|
||||
<p class="seller-custom-field">
|
||||
{{ ucfirst($key) }}: {{ $value }}
|
||||
</p>
|
||||
@endforeach
|
||||
</td>
|
||||
<td class="border-0"></td>
|
||||
<td class="px-0">
|
||||
@if($invoice->buyer->name)
|
||||
<p class="buyer-name">
|
||||
<strong>{{ $invoice->buyer->name }}</strong>
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->buyer->address)
|
||||
<p class="buyer-address">
|
||||
{{ trans('invoices::invoice.address') }}: {{ $invoice->buyer->address }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->buyer->code)
|
||||
<p class="buyer-code">
|
||||
{{ trans('invoices::invoice.code') }}: {{ $invoice->buyer->code }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->buyer->vat)
|
||||
<p class="buyer-vat">
|
||||
{{ trans('invoices::invoice.vat') }}: {{ $invoice->buyer->vat }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@if($invoice->buyer->phone)
|
||||
<p class="buyer-phone">
|
||||
{{ trans('invoices::invoice.phone') }}: {{ $invoice->buyer->phone }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@foreach($invoice->buyer->custom_fields as $key => $value)
|
||||
<p class="buyer-custom-field">
|
||||
{{ ucfirst($key) }}: {{ $value }}
|
||||
</p>
|
||||
@endforeach
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{-- Table --}}
|
||||
<table class="table table-items">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="border-0 pl-0">{{ trans('invoices::invoice.description') }}</th>
|
||||
@if($invoice->hasItemUnits)
|
||||
<th scope="col" class="text-center border-0">{{ trans('invoices::invoice.units') }}</th>
|
||||
@endif
|
||||
<th scope="col" class="text-center border-0">{{ trans('invoices::invoice.quantity') }}</th>
|
||||
<th scope="col" class="text-right border-0">{{ trans('invoices::invoice.price') }}</th>
|
||||
@if($invoice->hasItemDiscount)
|
||||
<th scope="col" class="text-right border-0">{{ trans('invoices::invoice.discount') }}</th>
|
||||
@endif
|
||||
@if($invoice->hasItemTax)
|
||||
<th scope="col" class="text-right border-0">{{ trans('invoices::invoice.tax') }}</th>
|
||||
@endif
|
||||
<th scope="col" class="text-right border-0 pr-0">{{ trans('invoices::invoice.sub_total') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{-- Items --}}
|
||||
@foreach($invoice->items as $item)
|
||||
<tr>
|
||||
<td class="pl-0">
|
||||
{{ $item->title }}
|
||||
|
||||
@if($item->description)
|
||||
<p class="cool-gray">{{ $item->description }}</p>
|
||||
@endif
|
||||
</td>
|
||||
@if($invoice->hasItemUnits)
|
||||
<td class="text-center">{{ $item->units }}</td>
|
||||
@endif
|
||||
<td class="text-center">{{ $item->quantity }}</td>
|
||||
<td class="text-right">
|
||||
{{ $invoice->formatCurrency($item->price_per_unit) }}
|
||||
</td>
|
||||
@if($invoice->hasItemDiscount)
|
||||
<td class="text-right">
|
||||
{{ $invoice->formatCurrency($item->discount) }}
|
||||
</td>
|
||||
@endif
|
||||
@if($invoice->hasItemTax)
|
||||
<td class="text-right">
|
||||
{{ $invoice->formatCurrency($item->tax) }}
|
||||
</td>
|
||||
@endif
|
||||
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($item->sub_total_price) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
{{-- Summary --}}
|
||||
@if($invoice->hasItemOrInvoiceDiscount())
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ trans('invoices::invoice.total_discount') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($invoice->total_discount) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($invoice->taxable_amount)
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ trans('invoices::invoice.taxable_amount') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($invoice->taxable_amount) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($invoice->tax_rate)
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ trans('invoices::invoice.tax_rate') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->tax_rate }}%
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($invoice->hasItemOrInvoiceTax())
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ trans('invoices::invoice.total_taxes') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($invoice->total_taxes) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($invoice->shipping_amount)
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ trans('invoices::invoice.shipping') }}</td>
|
||||
<td class="text-right pr-0">
|
||||
{{ $invoice->formatCurrency($invoice->shipping_amount) }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<td colspan="{{ $invoice->table_columns - 2 }}" class="border-0"></td>
|
||||
<td class="text-right pl-0">{{ trans('invoices::invoice.total_amount') }}</td>
|
||||
<td class="text-right pr-0 total-amount">
|
||||
{{ $invoice->formatCurrency($invoice->total_amount) }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@if($invoice->notes)
|
||||
<p>
|
||||
{{ trans('invoices::invoice.notes') }}: {!! $invoice->notes !!}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
<p>
|
||||
{{ trans('invoices::invoice.amount_in_words') }}: {{ $invoice->getTotalAmountInWords() }}
|
||||
</p>
|
||||
<p>
|
||||
{{ trans('invoices::invoice.pay_until') }}: {{ $invoice->getPayUntilDate() }}
|
||||
</p>
|
||||
|
||||
<script type="text/php">
|
||||
if (isset($pdf) && $PAGE_COUNT > 1) {
|
||||
$text = "Page {PAGE_NUM} / {PAGE_COUNT}";
|
||||
$size = 10;
|
||||
$font = $fontMetrics->getFont("Verdana");
|
||||
$width = $fontMetrics->get_text_width($text, $font, $size) / 2;
|
||||
$x = ($pdf->get_width() - $width);
|
||||
$y = $pdf->get_height() - 35;
|
||||
$pdf->page_text($x, $y, $text, $font, $size);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
37
themes/1day2die/vite.config.js
vendored
37
themes/1day2die/vite.config.js
vendored
|
@ -1,37 +0,0 @@
|
|||
import { defineConfig } from "vite";
|
||||
import laravel from "laravel-vite-plugin";
|
||||
import path from "path";
|
||||
|
||||
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
laravel({
|
||||
input: [
|
||||
"themes/1day2die/sass/app.scss",
|
||||
"themes/1day2die/js/app.js"
|
||||
],
|
||||
buildDirectory: "1day2die",
|
||||
}),
|
||||
|
||||
|
||||
{
|
||||
name: "blade",
|
||||
handleHotUpdate({ file, server }) {
|
||||
if (file.endsWith(".blade.php")) {
|
||||
server.ws.send({
|
||||
type: "full-reload",
|
||||
path: "*",
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': '/themes/1day2die/js',
|
||||
'~bootstrap': path.resolve('node_modules/bootstrap'),
|
||||
}
|
||||
},
|
||||
|
||||
});
|
Loading…
Reference in a new issue