{{-- Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com> --}} {{-- Permission is hereby granted, free of charge, to any person obtaining a copy --}} {{-- of this software and associated documentation files (the "Software"), to deal --}} {{-- in the Software without restriction, including without limitation the rights --}} {{-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell --}} {{-- copies of the Software, and to permit persons to whom the Software is --}} {{-- furnished to do so, subject to the following conditions: --}} {{-- The above copyright notice and this permission notice shall be included in all --}} {{-- copies or substantial portions of the Software. --}} {{-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR --}} {{-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, --}} {{-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE --}} {{-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER --}} {{-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, --}} {{-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE --}} {{-- SOFTWARE. --}} @extends('layouts.admin') @section('title') Server — {{ $server->name }}: Databases @endsection @section('content-header') <h1>{{ $server->name }}<small>Manage server databases.</small></h1> <ol class="breadcrumb"> <li><a href="{{ route('admin.index') }}">Admin</a></li> <li><a href="{{ route('admin.servers') }}">Servers</a></li> <li><a href="{{ route('admin.servers.view', $server->id) }}">{{ $server->name }}</a></li> <li class="active">Databases</li> </ol> @endsection @section('content') <div class="row"> <div class="col-xs-12"> <div class="nav-tabs-custom nav-tabs-floating"> <ul class="nav nav-tabs"> <li><a href="{{ route('admin.servers.view', $server->id) }}">About</a></li> @if($server->installed === 1) <li><a href="{{ route('admin.servers.view.details', $server->id) }}">Details</a></li> <li><a href="{{ route('admin.servers.view.build', $server->id) }}">Build Configuration</a></li> <li><a href="{{ route('admin.servers.view.startup', $server->id) }}">Startup</a></li> <li class="active"><a href="{{ route('admin.servers.view.database', $server->id) }}">Database</a></li> @endif <li><a href="{{ route('admin.servers.view.manage', $server->id) }}">Manage</a></li> <li class="tab-danger"><a href="{{ route('admin.servers.view.delete', $server->id) }}">Delete</a></li> <li class="tab-success"><a href="{{ route('server.index', $server->uuidShort) }}"><i class="fa fa-external-link"></i></a></li> </ul> </div> </div> </div> <div class="row"> <div class="col-sm-7"> <div class="box box-primary"> <div class="box-header with-border"> <h3 class="box-title">Active Databases</h3> </div> <div class="box-body table-responsible no-padding"> <table class="table table-hover"> <tr> <th>Database</th> <th>Username</th> <th>Connections From</th> <th>Host</th> <th></th> </tr> @foreach($server->databases as $database) <tr> <td>{{ $database->database }}</td> <td>{{ $database->username }}</td> <td>{{ $database->remote }}</td> <td><code>{{ $database->host->host }}:{{ $database->host->port }}</code></td> <td class="text-center"> <button data-action="reset-password" data-id="{{ $database->id }}" class="btn btn-xs btn-primary"><i class="fa fa-refresh"></i></button> <button data-action="remove" data-id="{{ $database->id }}" class="btn btn-xs btn-danger"><i class="fa fa-trash"></i></button> </td> </tr> @endforeach </table> </div> </div> </div> <div class="col-sm-5"> <div class="box box-success"> <div class="box-header with-border"> <h3 class="box-title">Create New Database</h3> </div> <form action="{{ route('admin.servers.view.database', $server->id) }}" method="POST"> <div class="box-body"> <div class="form-group"> <label for="pDatabaseHost" class="control-label">Database Host</label> <select id="pDatabaseHost" name="host" class="form-control"> @foreach($hosts as $host) <option value="{{ $host->id }}">{{ $host->name }}</option> @endforeach </select> <p class="text-muted small">Select the host database server that this database should be created on.</p> </div> <div class="form-group"> <label for="pDatabaseName" class="control-label">Database</label> <div class="input-group"> <span class="input-group-addon">s{{ $server->id }}_</span> <input id="pDatabaseName" type="text" name="database" class="form-control" placeholder="database" /> </div> </div> <div class="form-group"> <label for="pConnections" class="control-label">Connections</label> <input id="pConnections" type="text" name="connection" class="form-control" placeholder="%" value="%" /> <p class="text-muted small">This should reflect the IP address that connections are allowed from. Uses standard MySQL notation. If unsure leave as <code>%</code>.</p> </div> </div> <div class="box-footer"> {!! csrf_field() !!} <p class="text-muted small no-margin">A username and password for this database will be randomly generated after form submission.</p> <input type="submit" class="btn btn-sm btn-success pull-right" value="Create Database" /> </div> </form> </div> </div> </div> @endsection @section('footer-scripts') @parent <script> $('#pDatabaseHost').select2(); $('[data-action="remove"]').click(function (event) { event.preventDefault(); var self = $(this); swal({ title: '', type: 'warning', text: 'Are you sure that you want to delete this database? There is no going back, all data will immediately be removed.', showCancelButton: true, confirmButtonText: 'Delete', confirmButtonColor: '#d9534f', closeOnConfirm: false, showLoaderOnConfirm: true, }, function () { $.ajax({ method: 'DELETE', url: Router.route('admin.servers.view.database.delete', { id: '{{ $server->id }}', database: self.data('id') }), headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }, }).done(function () { self.parent().parent().slideUp(); swal.close(); }).fail(function (jqXHR) { console.error(jqXHR); swal({ type: 'error', title: 'Whoops!', text: (typeof jqXHR.responseJSON.error !== 'undefined') ? jqXHR.responseJSON.error : 'An error occured while processing this request.' }); }); }); }); $('[data-action="reset-password"]').click(function (e) { e.preventDefault(); var block = $(this); $(this).addClass('disabled').find('i').addClass('fa-spin'); $.ajax({ type: 'PATCH', url: Router.route('admin.servers.view.database', { id: '{{ $server->id }}' }), headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }, data: { database: $(this).data('id') }, }).done(function (data) { swal({ type: 'success', title: '', text: 'The password for this database has been reset.', }); }).fail(function(jqXHR, textStatus, errorThrown) { console.error(jqXHR); var error = 'An error occured while trying to process this request.'; if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') { error = jqXHR.responseJSON.error; } swal({ type: 'error', title: 'Whoops!', text: error }); }).always(function () { block.removeClass('disabled').find('i').removeClass('fa-spin'); }); }); </script> @endsection